{"id":15994227,"url":"https://github.com/jexp/hamilton-graph","last_synced_at":"2026-01-18T10:27:50.529Z","repository":{"id":66743946,"uuid":"441023005","full_name":"jexp/hamilton-graph","owner":"jexp","description":"A neo4j graph of @sxywu's every line of hamilton visualization","archived":false,"fork":false,"pushed_at":"2022-01-10T22:50:29.000Z","size":1641,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-05T00:15:41.235Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jexp.png","metadata":{"files":{"readme":"readme.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-23T00:55:07.000Z","updated_at":"2022-01-11T13:02:31.000Z","dependencies_parsed_at":"2023-06-29T13:13:32.598Z","dependency_job_id":null,"html_url":"https://github.com/jexp/hamilton-graph","commit_stats":{"total_commits":9,"total_committers":1,"mean_commits":9.0,"dds":0.0,"last_synced_commit":"fca92f9c9a6bb5cb1928f162ea6f4d713be0f94b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jexp/hamilton-graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexp%2Fhamilton-graph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexp%2Fhamilton-graph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexp%2Fhamilton-graph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexp%2Fhamilton-graph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jexp","download_url":"https://codeload.github.com/jexp/hamilton-graph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexp%2Fhamilton-graph/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-08T07:07:27.955Z","updated_at":"2026-01-18T10:27:45.515Z","avatar_url":"https://github.com/jexp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"== The Graph of Hamilton\n:imagesdir: img\n\nI love Hamilton the Musical, I was lucky and able to see it from the last free seat at the SFO performance in 2019.\n\nimage::hamilton-sfo.jpg[width=400]\n\nLike https://twitter.com/sxywu[Shirley Wu^] I've been listening to it on repeat since forever, we even got Disney+ and a projector canvas to watch it when it came out.\n\nFor a long time I've been wanting to turn Shirley Wu's amazing https://pudding.cool/2017/03/hamilton/[\"An Interactive Visualization of Every Line in Hamilton\"^] into a Neo4j graph for myself and others to play around with.\n\nPlease check out her work and play with it, it's really inspiring.\n\nimage::shirley-hamilton.png[{half-width},link=https://pudding.cool/2017/03/hamilton/]\n\n== Data Source\n\nThankfully she made the data available as part of her https://github.com/sxywu/hamilton/[GitHub Repository^] for the visualization.\n\nThe JSON files can be found here, together with some explanations.\n\nhttps://github.com/sxywu/hamilton/tree/master/src/data\n\nEach JSON file has keys which are usually id's for the entities pointing to a list of values, some of which can also be nested.\n\nHere is the final data model I ended up with for the data:\n\nimage::hamilton-model.png[]\n\nWe have\n\n* `Singer` that can be `Individual` or `Group`\n* `Song`, with\n* `Lines`, that a Singer `SINGS`, are `DIRECTED` at a Singer or `EXCLUDE` a Singer\n* `CONTAINS` Word\n* `HAS` a `Theme`, which\n* is `PART_OF` a `Category`\n\n== Indexes and Constraints\n\nFor faster lookups to connect our data, let's create some constraints and indexes first.\n\n[source,cypher]\n----\ncreate constraint on (s:Singer) assert s.id is unique;\ncreate constraint on (l:Lines) assert l.id is unique;\ncreate constraint on (s:Song) assert s.id is unique;\ncreate constraint on (t:Theme) assert t.id is unique;\ncreate constraint on (c:Category) assert c.name is unique;\ncreate constraint on (w:Word) assert w.word is unique;\n\ncreate index on :Singer(name);\ncreate index on :Song(title);\n----\n\n== Singers\n\nLet's load the data one by one, starting with the Singers.\n\n.char_list.json\n[source,javascript]\n----\n{\"1\": [\"Aaron Burr\", \"M\", \"individual\", true, \"rgb(149,65,200)\"]}\n----\n\nWe load the data, and process each key and it's value as a row to create a Singer with an additinal label.\n\n[source,cypher]\n----\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/char_list.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\n\ncall apoc.create.node([\"Singer\",apoc.text.capitalize(data[2])], {id:key, name:data[0], gender:data[1],xx:data[3],color:data[4]}) yield node \nreturn node;\n----\n\n== Songs\n\nSongs are straightforward with just an id and title.\n\n.song_list.json\n[source,javascript]\n----\n{\"1\": [\"Alexander Hamilton\", \"#9541c8\"]}\n----\n\nWe load the data again and turn them into nodes.\n\n[source,cypher]\n----\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/song_list.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\n\nMERGE (s:Song {id:key}) \nON CREATE SET s.title = data[0], s.color = data[1]\nRETURN s;\n----\n\n== Lines\n\nLines is a bit more complicated, here is the https://github.com/sxywu/hamilton/tree/master/src/data#linesjson[description^] from Shirley's repository\n\n====\n----\nkey: line key\n(example) 1:31 would be song 1, line 31\n(example) 1:1-5 would be song 1, lines 1 through 5\nvalue: array of 4 values\n0: line key\n1: array\n0: character(s) singing\n1: character(s) excluded from singing\n2: character(s) the lines were directed to\n2: array of the actual lyrics in those lines\n3: number of lines\n----\n====\n\n.lines.json\n[source,javascript]\n----\n{\"1:1-5\":[\"1:1-5\",[[\"1\"],[\"\"],[\"\"]],[\"How does a bastard, orphan, son of a whore and a\",\"Scotsman, dropped in the middle of a\",\"Forgotten spot in the Caribbean by providence\",\"Impoverished, in squalor\",\"Grow up to be a hero and a scholar?\"],5]}\n----\n\nHere after loading the data, we \n\n. split the id into song-id and lines\n. find the song\n. create an `Lines` node for each key\n. connect sines to the song\n. then for each type of relationship to a singer (SING, EXCLUDED, DIRECTED)\n. we loop over the id-array and connect the lines to that singer appropriately\n. for the SING relationship we also connect the singer to the actual song\n\n[source,cypher]\n----\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/lines.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\n\nWITH key, split(key,':')[0] as song, split(key,':')[1] as lines, data[1][0] as singers, data[1][1] as excluded, data[1][2] as directed, data[2] as text, data[3] as count\n\nMATCH (s:Song {id:song})\nMERGE (l:Lines {id:key}) \nON CREATE SET l.text = text, l.count = count, l.lines = lines\nMERGE (l)-[:OF_SONG]-\u003e(s)\n\nFOREACH (id IN [id IN singers WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (p)-[:SINGS]-\u003e(l)\n    MERGE (p)-[:PERFORMS]-\u003e(s)\n)\nFOREACH (id IN [id IN excluded WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (p)-[:EXCLUDED]-\u003e(l)\n)\nFOREACH (id IN [id IN directed WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (l)-[:DIRECTED]-\u003e(p)\n)\nRETURN count(*);\n----\n\nIn a memory restricted environment like AuraDB Free, we need to process the data in chunks:\n\nAll the JSON and String data takes too much of the available, transactional memory.\n\nJust increase the `SKIP` value from 0 all the way to 1400 in steps of 200.\n\n[source,cypher]\n----\n:auto call apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/lines.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\nSKIP 0 LIMIT 200\n\ncall {\nwith key, data\nWITH key, split(key,':')[0] as song, split(key,':')[1] as lines, data[1][0] as singers, data[1][1] as excluded, data[1][2] as directed, data[2] as text, data[3] as count\n\nMATCH (s:Song {id:song})\nMERGE (l:Lines {id:key})\nON CREATE SET l.text = text, l.count = count, l.lines = lines\nMERGE (l)-[:OF_SONG]-\u003e(s)\n\nFOREACH (id IN [id IN singers WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (p)-[:SINGS]-\u003e(l)\n    MERGE (p)-[:PERFORMS]-\u003e(s)\n)\nFOREACH (id IN [id IN excluded WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (p)-[:EXCLUDED]-\u003e(l)\n)\nFOREACH (id IN [id IN directed WHERE id \u003c\u003e \"\"] |\n    MERGE (p:Singer {id:id})\n    MERGE (l)-[:DIRECTED]-\u003e(p)\n)\n} in transactions of 100 rows\nRETURN count(*);\n----\n\nNow we can have our first graph query, that shows us who sings which songs.\n\n[source,cypher]\n----\nMATCH (p:Singer)-[r:SINGS]-\u003e()-[:OF_SONG]-\u003e(s:Song) \nRETURN s.id, s.title, collect(distinct p.name) \nORDER by toInteger(s.id) asc\nLIMIT 25;\n----\n\nThere is also a file `character.json` which contains the same singing information as the lines, so we don't need to process it.\n\n////\n// test \"character.json\" if it adds anything (nope)\n// [\"characters\", \"conversing\", \"excluding\"]\n\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/characters.json') yield value\nwith value.characters as value\nunwind keys(value) as key\nwith key, value[key] as data\nMATCH (p:Singer {id:key})\nUNWIND data as id\nWITH * where id \u003c\u003e \"\"\nMATCH (l:Lines {id:id})\nMERGE (p)-[:SINGS]-\u003e(l);\n////\n\n== Words\n\nSomething that's not used in the visualization but I wanted to include in the graph are the words of the text.\n\nWe could have extracted them ourselves but stemming etc. was already taken care of in `words.json`.\n\nHere we have the word as key and the line within the lines as array of values.\n\n.words.json\n[source,javascript]\n----\n{\"how\":[\"1:1/1:1-5\",\"3:49/3:47-51\"]}\n----\n\nWhen loading the file, the most annoying part is splitting the string to find the lines-key and the data to compute the offset in the text-array.\n\n[source,cypher]\n----\n:auto call apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/words.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\nCALL { WITH key, data\n    MERGE (w:Word {word:key})\n    WITH *\n    UNWIND data as entries\n    WITH w, split(entries, \"/\") as parts\n    WITH w, parts[1] as lines, parts[0] as line\n    WITH *, toInteger(split(line,':')[1])-toInteger(split(split(lines,':')[1],'-')[0]) as idx\n    MATCH (l:Lines {id:lines})\n    MERGE (w)\u003c-[:CONTAINS {pos:line, idx:idx}]-(l)\n} IN TRANSACTIONS OF 500 ROWS\nRETURN count(*);\n----\n\nNow we can query for Words within lines of songs\n\n[source,cypher]\n----\nMATCH (s:Song)\u003c-[:OF_SONG]-(l:Lines)-[c:CONTAINS]-\u003e(n:Word) where n.word = 'satisfied' \nRETURN s.title, l.text[c.idx],n.word LIMIT 25\n----\n\n== Themes\n\nThe theme list has the theme id as key and some text examples and the category name as values\nNot sure what the \"true\" value means, it's true in all entiries.\n\n.theme_list.json\n[source,javascript]\n----\n{\"1\": [[\"Just you wait\", \"wait for it\"], \"Ambition\", true]}\n----\n\nWe create the theme by id and set the text and category, but then also create a category node that we want to connect to.\n\n[source,cypher]\n----\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/theme_list.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\n\nMERGE (t:Theme {id:key})\nON CREATE SET t.category=data[1], t.text=data[0]\n\nMERGE (c:Category {name:data[1]})\nMERGE (t)-[:PART_OF]-\u003e(c)\n\nRETURN *;\n----\n\nThe actual themes are more complicated.\nWith the theme id as key, we have a triple nested list of lines and lines-ids and the text lines.\n\n.themes.json\n[source,javascript]\n----\n{\"1\":[ [[\"1:27/24-27\"],[\"But just you wait, just you wait...\"]],[[\"1:54/54\"],[\"Just you wait!\"]]]}\n----\n\nBut we're only interested in the lines keys and the offset, so we do our usual spiel of splitting hairs to compute the index.\nThis time they lines-key is not directly there so we need to construct it from song and lines-range.\n\n[source,cypher]\n----\ncall apoc.load.json('https://raw.githubusercontent.com/sxywu/hamilton/master/src/data/themes.json') YIELD value\nUNWIND keys(value) AS key\nWITH key, value[key] AS data\n\nMATCH (t:Theme {id:key})\n\nUNWIND data as phrases\nUNWIND phrases[0] as entries\nWITH t, split(entries, \":\") as parts\nWITH t, parts[0] as song, split(parts[1],\"/\") as lines\n\nMATCH (l:Lines {id:song + \":\" + lines[1]})\n\nWITH l, t, toInteger(lines[0]) - toInteger(split(lines[1],\"-\")[0]) as idx\n\nMERGE (l)-[:HAS {idx:idx}]-\u003e(t)\nRETURN *;\n----\n\nNow we can see who sings about \"Death\" in Hamilton.\n\n[source,cypher]\n----\nMATCH p1=(c:Category {name:\"Death\"})\u003c-[:PART_OF]-(t:Theme)\u003c-[h:HAS]-(l:Lines)-[:OF_SONG]-\u003e(s:Song), p2=(l)\u003c-[:SINGS]-(p:Singer)\nRETURN p1,p2\n----\n\nimage::hamilton-themes.png[]\n\n== Exploration - Themes directed at Hamilton\n\nNow we can start exploring this wonderful dataset.\n\nE.g. to see who's most often directing lines at Hamilton, unsurprisingly it's Eliza followed by Burr.\n\n[source,cypher]\n----\nMATCH (p:Singer)-[:SINGS]-\u003e(l:Lines)-[:DIRECTED]-\u003e(:Singer {name:\"Alexander Hamilton\"}),(l)-[:HAS]-\u003e(t)-[:PART_OF]-\u003e(c)\nRETURN p.name, count(*) as freq, collect(distinct c.name) as categories\nORDER BY freq DESC\n----\n\n----\n╒═══════════════════╤══════╤════════════════════════════════╕\n│\"p.name\"           │\"freq\"│\"categories\"                    │\n╞═══════════════════╪══════╪════════════════════════════════╡\n│\"Eliza Schuyler\"   │20    │[\"Contentment\",\"Legacy\",        │\n│                   │      │ \"Ambition\", \"Death\"]           │\n├───────────────────┼──────┼────────────────────────────────┤\n│\"Aaron Burr\"       │11    │[\"Personality\",\"Relationship\",  │\n│                   │      │ \"Ambition\",\"Legacy\"]           │\n├───────────────────┼──────┼────────────────────────────────┤\n│\"George Washington\"│8     │[\"Personality\",\"Miscellaneous\", │\n│                   │      │ \"Contentment\",\"Legacy\",\"Death\"]│\n├───────────────────┼──────┼────────────────────────────────┤\n│\"Maria Reynolds\"   │6     │[\"Relationship\",\"Personality\"]  │\n├───────────────────┼──────┼────────────────────────────────┤\n│\"James Reynolds\"   │1     │[\"Relationship\"]                │\n├───────────────────┼──────┼────────────────────────────────┤\n│\"Phillip Hamilton\" │1     │[\"Miscellaneous\"]               │\n└───────────────────┴──────┴────────────────────────────────┘\n----\n\n== Co-Singing\n\nWho does Thomas Jefferson most frequently sing with.\n\n[source,cypher]\n----\nMATCH (p:Singer)-[:SINGS]-\u003e(l:Lines)\u003c-[:SINGS]-(:Singer {name:\"Thomas Jefferson\"})\nRETURN p.name, count(*) as freq\nORDER BY freq DESC\n----\n\n----\n╒════════════════════╤══════╕\n│\"p.name\"            │\"freq\"│\n╞════════════════════╪══════╡\n│\"James Madison\"     │35    │\n├────────────────────┼──────┤\n│\"Aaron Burr\"        │18    │\n├────────────────────┼──────┤\n│\"Alexander Hamilton\"│4     │\n├────────────────────┼──────┤\n│\"Company\"           │3     │\n├────────────────────┼──────┤\n│\"George Washington\" │1     │\n├────────────────────┼──────┤\n│\"Angelica Schuyler\" │1     │\n└────────────────────┴──────┘\n----\n\n== Visuals - who surrounding Washington\n\n\n[source,cypher]\n----\nMATCH path=(p:Individual)-[:SINGS]-\u003e(l:Lines)\u003c-[:SINGS]-(:Singer {name:\"George Washington\"})\nRETURN path\n----\n\nimage::hamilton-washington.png[]\n\n== Timeline\n\nWhat timeframe is a character active in the story\n\n\n[source,cypher]\n----\nMATCH (p:Singer)-[r:SINGS]-\u003e()-[:OF_SONG]-\u003e(s:Song)\n// exlude the first and last song where everyone sings\nWHERE NOT s.id IN [\"1\",\"46\"]\n// order numerically\nWITH DISTINCT p.name as name, s.id as song ORDER BY toInteger(song) ASC\n// collect all songs of a character into a list\nWITH name, collect(song) as songs\n// first and last entry of the list\nRETURN name, songs[0]+\"-\"+songs[-1] as time\n// sorted by frequency and first appearance\nORDER BY size(songs) DESC, toInteger(songs[0]) asc\n----\n\n----\n╒══════════════════════╤═══════╕\n│\"name\"                │\"time\" │\n╞══════════════════════╪═══════╡\n│\"Alexander Hamilton\"  │\"2-45\" │\n├──────────────────────┼───────┤\n│\"Company\"             │\"2-45\" │\n├──────────────────────┼───────┤\n│\"Aaron Burr\"          │\"2-45\" │\n├──────────────────────┼───────┤\n│\"George Washington\"   │\"4-32\" │\n├──────────────────────┼───────┤\n│\"John Laurens\"        │\"2-23\" │\n├──────────────────────┼───────┤\n│\"Eliza Schuyler\"      │\"5-44\" │\n├──────────────────────┼───────┤\n│\"Men\"                 │\"5-45\" │\n├──────────────────────┼───────┤\n│\"Hercules Mulligan\"   │\"2-23\" │\n├──────────────────────┼───────┤\n│\"Marquis de Lafayette\"│\"2-23\" │\n├──────────────────────┼───────┤\n│\"Angelica Schuyler\"   │\"5-45\" │\n├──────────────────────┼───────┤\n│\"Thomas Jefferson\"    │\"24-42\"│\n├──────────────────────┼───────┤\n│\"James Madison\"       │\"24-42\"│\n├──────────────────────┼───────┤\n│\"Women\"               │\"5-42\" │\n├──────────────────────┼───────┤\n│\"Phillip Hamilton\"    │\"26-45\"│\n├──────────────────────┼───────┤\n│\"King George III\"     │\"7-33\" │\n├──────────────────────┼───────┤\n│\"Charles Lee\"         │\"14-15\"│\n├──────────────────────┼───────┤\n│\"Peggy Schuyler\"      │\"5-5\"  │\n├──────────────────────┼───────┤\n│\"Samuel Seabury\"      │\"6-6\"  │\n├──────────────────────┼───────┤\n│\"Maria Reynolds\"      │\"27-27\"│\n├──────────────────────┼───────┤\n│\"James Reynolds\"      │\"27-27\"│\n├──────────────────────┼───────┤\n│\"George Eacker\"       │\"39-39\"│\n└──────────────────────┴───────┘\n----\n\n== Words\n\nFrequency of words used\n\n[source,cypher]\n----\nMATCH (w:Word)\nWHERE size(w.word) \u003e 4\nRETURN w.word, size((w)\u003c-[:CONTAINS]-()) as freq\norder by freq desc LIMIT 20\n----\n\n----\n╒═══════════╤══════╕\n│\"w.word\"   │\"freq\"│\n╞═══════════╪══════╡\n│\"where\"    │82    │\n├───────────┼──────┤\n│\"don’t\"    │76    │\n├───────────┼──────┤\n│\"hamilton\" │68    │\n├───────────┼──────┤\n│\"you’re\"   │68    │\n├───────────┼──────┤\n│\"never\"    │56    │\n├───────────┼──────┤\n│\"alexander\"│49    │\n├───────────┼──────┤\n│\"right\"    │40    │\n├───────────┼──────┤\n│\"gonna\"    │37    │\n├───────────┼──────┤\n│\"would\"    │36    │\n├───────────┼──────┤\n│\"world\"    │35    │\n----\n\nWhich words are related to which themes.\n\n[source,cypher]\n----\nMATCH (w:Word)\u003c-[:CONTAINS]-(l)-[:HAS]-\u003e(t)-[:PART_OF]-\u003e(c)\nWHERE size(w.word) \u003e 4\nRETURN w.word, c.name, count(*) AS freq\nORDER BY freq DESC LIMIT 50;\n----\n\n\n----\n╒════════════╤═══════════════╤══════╕\n│\"w.word\"    │\"c.name\"       │\"freq\"│\n╞════════════╪═══════════════╪══════╡\n│\"enough\"    │\"Contentment\"  │104   │\n├────────────┼───────────────┼──────┤\n│\"where\"     │\"Ambition\"     │102   │\n├────────────┼───────────────┼──────┤\n│\"would\"     │\"Contentment\"  │74    │\n├────────────┼───────────────┼──────┤\n│\"could\"     │\"Contentment\"  │57    │\n├────────────┼───────────────┼──────┤\n│\"satisfied\" │\"Contentment\"  │54    │\n├────────────┼───────────────┼──────┤\n│\"happens\"   │\"Ambition\"     │50    │\n├────────────┼───────────────┼──────┤\n│\"where\"     │\"Contentment\"  │47    │\n├────────────┼───────────────┼──────┤\n│\"alive\"     │\"Contentment\"  │47    │\n├────────────┼───────────────┼──────┤\n│\"happened\"  │\"Ambition\"     │46    │\n├────────────┼───────────────┼──────┤\n│\"don’t\"     │\"Contentment\"  │37    │\n├────────────┼───────────────┼──────┤\n│\"throwing\"  │\"Ambition\"     │34    │\n├────────────┼───────────────┼──────┤\n│\"enough\"    │\"Legacy\"       │28    │\n├────────────┼───────────────┼──────┤\n│\"story\"     │\"Legacy\"       │27    │\n├────────────┼───────────────┼──────┤\n│\"helpless\"  │\"Personality\"  │26    │\n├────────────┼───────────────┼──────┤\n│\"world\"     │\"Legacy\"       │25    │\n├────────────┼───────────────┼──────┤\n│\"you’re\"    │\"Contentment\"  │25    │\n├────────────┼───────────────┼──────┤\n│\"other\"     │\"Ambition\"     │25    │\n├────────────┼───────────────┼──────┤\n│\"never\"     │\"Contentment\"  │23    │\n├────────────┼───────────────┼──────┤\n│\"wrote\"     │\"Death\"        │22    │\n├────────────┼───────────────┼──────┤\n│\"wanna\"     │\"Ambition\"     │21    │\n├────────────┼───────────────┼──────┤\n│\"running\"   │\"Death\"        │20    │\n----\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjexp%2Fhamilton-graph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjexp%2Fhamilton-graph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjexp%2Fhamilton-graph/lists"}