From e30f30b0f9625ff09031a2eabf97f1e1824f00a3 Mon Sep 17 00:00:00 2001 From: Dimitri Lozeve Date: Fri, 2 Mar 2018 17:50:54 +0000 Subject: [PATCH] Initial commit --- .gitignore | 12 ++ Pipfile | 19 ++ Pipfile.lock | 462 ++++++++++++++++++++++++++++++++++++++++++ proposal/preamble.tex | 86 ++++++++ proposal/proposal.bib | 195 ++++++++++++++++++ proposal/proposal.pdf | Bin 0 -> 47731 bytes proposal/proposal.tex | 90 ++++++++ usa_roads.ipynb | 251 +++++++++++++++++++++++ 8 files changed, 1115 insertions(+) create mode 100644 .gitignore create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 proposal/preamble.tex create mode 100644 proposal/proposal.bib create mode 100644 proposal/proposal.pdf create mode 100644 proposal/proposal.tex create mode 100644 usa_roads.ipynb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0be9eca --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*~ +data/ +*.aux +*.log +*.out +*.bbl +*.bcf +*.blg +*.run.xml +*.synctex.gz +*/auto/ +.ipynb_checkpoints/ \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..5aab87f --- /dev/null +++ b/Pipfile @@ -0,0 +1,19 @@ +[[source]] + +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + + +[packages] + +numpy = "*" +pandas = "*" +matplotlib = "*" +jupyter = "*" +networkx = "*" +jupyterlab = "*" + + +[dev-packages] + diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..f95fc94 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,462 @@ +{ + "_meta": { + "hash": { + "sha256": "433fe4f585fb489189f98fca98bf4cb140597c32e8a662b212bc3af15471c865" + }, + "host-environment-markers": { + "implementation_name": "cpython", + "implementation_version": "3.6.4", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_python_implementation": "CPython", + "platform_release": "4.15.3-2-ARCH", + "platform_system": "Linux", + "platform_version": "#1 SMP PREEMPT Thu Feb 15 00:13:49 UTC 2018", + "python_full_version": "3.6.4", + "python_version": "3.6", + "sys_platform": "linux" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "bleach": { + "hashes": [ + "sha256:cf567e7ed30ea5e05b31231d88ae170af1c5544758b9d7bebbc20590b7c30b1e", + "sha256:38fc8cbebea4e787d8db55d6f324820c7f74362b70db9142c1ac7920452d1a19" + ], + "version": "==2.1.2" + }, + "cycler": { + "hashes": [ + "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", + "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" + ], + "version": "==0.10.0" + }, + "decorator": { + "hashes": [ + "sha256:94d1d8905f5010d74bbbd86c30471255661a14187c45f8d7f3e5aa8540fdb2e5", + "sha256:7d46dd9f3ea1cf5f06ee0e4e1277ae618cf48dfb10ada7c8427cd46c42702a0e" + ], + "version": "==4.2.1" + }, + "entrypoints": { + "hashes": [ + "sha256:10ad569bb245e7e2ba425285b9fa3e8178a0dc92fc53b1e1c553805e15a8825b", + "sha256:d2d587dde06f99545fb13a383d2cd336a8ff1f359c5839ce3a64c917d10c029f" + ], + "version": "==0.2.3" + }, + "html5lib": { + "hashes": [ + "sha256:20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3", + "sha256:66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736" + ], + "version": "==1.0.1" + }, + "ipykernel": { + "hashes": [ + "sha256:395f020610e33ffa0b0c9c0cd1a1d927d51ab9aa9f30a7ae36bb0c908a33e89c", + "sha256:935941dba29d856eee34b8b5261d971bd5012547239ed73ddfff099143748c37", + "sha256:c091449dd0fad7710ddd9c4a06e8b9e15277da306590bc07a3a1afa6b4453c8f" + ], + "version": "==4.8.2" + }, + "ipython": { + "hashes": [ + "sha256:fcc6d46f08c3c4de7b15ae1c426e15be1b7932bcda9d83ce1a4304e8c1129df3", + "sha256:51c158a6c8b899898d1c91c6b51a34110196815cc905f9be0fa5878e19355608" + ], + "markers": "python_version >= '3.3'", + "version": "==6.2.1" + }, + "ipython-genutils": { + "hashes": [ + "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", + "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" + ], + "version": "==0.2.0" + }, + "ipywidgets": { + "hashes": [ + "sha256:8db8a83ff94aa779bc75706640ca2fadacd589b65d757bcbca78dcc8a446e44c", + "sha256:4263ce721a1e5b53a84c4595a5e296d270ae0dc534401b536f4dda64e0b0ca02" + ], + "version": "==7.1.2" + }, + "jedi": { + "hashes": [ + "sha256:d795f2c2e659f5ea39a839e5230d70a0b045d0daee7ca2403568d8f348d0ad89", + "sha256:d6e799d04d1ade9459ed0f20de47c32f2285438956a677d083d3c98def59fa97" + ], + "version": "==0.11.1" + }, + "jinja2": { + "hashes": [ + "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", + "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" + ], + "version": "==2.10" + }, + "jsonschema": { + "hashes": [ + "sha256:000e68abd33c972a5248544925a0cae7d1125f9bf6c58280d37546b946769a08", + "sha256:6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02" + ], + "version": "==2.6.0" + }, + "jupyter": { + "hashes": [ + "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78", + "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f", + "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7" + ], + "version": "==1.0.0" + }, + "jupyter-client": { + "hashes": [ + "sha256:e144e7ba1670424b1670a6325b00dae7f7b043f99486d2f77bdbc14cc90f2c2f", + "sha256:83d5e23132f0d8f79ccd3939f53fb9fa97f88a896a85114dc48d0e86909b06c4" + ], + "version": "==5.2.2" + }, + "jupyter-console": { + "hashes": [ + "sha256:3f928b817fc82cda95e431eb4c2b5eb21be5c483c2b43f424761a966bb808094", + "sha256:545dedd3aaaa355148093c5609f0229aeb121b4852995c2accfa64fe3e0e55cd" + ], + "version": "==5.2.0" + }, + "jupyter-core": { + "hashes": [ + "sha256:927d713ffa616ea11972534411544589976b2493fc7e09ad946e010aa7eb9970", + "sha256:ba70754aa680300306c699790128f6fbd8c306ee5927976cbe48adacf240c0b7" + ], + "version": "==4.4.0" + }, + "jupyterlab": { + "hashes": [ + "sha256:c5a140a76f5ed1c88e977372187c267817341a8dfc862807a45c4c72c6ab51bb", + "sha256:842914beca4d8a6fe62c45157b7f8fa44aaa570efdba7b19dab79605a51612e5" + ], + "version": "==0.31.8" + }, + "jupyterlab-launcher": { + "hashes": [ + "sha256:d6308617fbdb3949c76356e8149c9835b65b01653fdefd983085c61d75f3c810", + "sha256:c78646afa354856a7ba3d9583122b89603d24587126f4c49a04dd42f50c831ec" + ], + "version": "==0.10.5" + }, + "markupsafe": { + "hashes": [ + "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" + ], + "version": "==1.0" + }, + "matplotlib": { + "hashes": [ + "sha256:31662334a4485455167072f80c57d2d2ef9ada4b93197b4851ceacee7269cb17", + "sha256:0c4a0cb10972b18049acde76e4611bcda0fa288a199a5f2c3c6f21ab208010cf", + "sha256:09ac1bde82673bfb4f1cb9ebd7fe258b29400f1be8914cb0891eca62a99cf7e6", + "sha256:295d2b135cb4d546fbb4b4d0b8d62d2132436adcf86221ece1d0bd4a3522128c", + "sha256:710bfe01633a4b734742163187bae99399de9f2c46cb6b40bd79b51467f7ba36", + "sha256:ae091625121ff5bf31515332ee604c90b55f9e6f6a02ac7160e5199f0422a211", + "sha256:fe8d2e29753fbbc1923e18e80487f09fdc01f270ff44da7156f147a3075876c0", + "sha256:9a87c1c8f195f0908b599268332608e5024b34cdd07375c68c15ac24b2a93a4e", + "sha256:ad987a871682d34d44a941cc47bf12f60e7866be7133498c432fb3d6fa3be651", + "sha256:59736af4bed61af336da60b8e97b700e695ffae9af08941c83e37ab0de3f151a", + "sha256:932ca62fb7c4edc377d6f0078995a1c004b7e4e9982a025e7022eb5eb1fc33ba", + "sha256:fb96735f76d5975e09eedc3502e9ff63dbe0c04aef312d0d6048a97f7993e667", + "sha256:2cc12ea94d80990e454a67ce829dc084bbdbfd0c95ed1f527dbd64688f184acd", + "sha256:97b9b56bbfce43deefbc2a089fa4afa8887e84041f17b090ac3d9f90a9e8e745", + "sha256:2452beef35840bdd9c3f613fc112ce6eb449cabca2bcb8a3f0d7eedd8e11d85d", + "sha256:adde3c9eb2145e5597a593877aea456e0bfe37f46cb3534caacce61b603c451a", + "sha256:fe5f8487aa872164a80b0c491f1110d4e2125391933caf17cae0a86df7950a72", + "sha256:725a3f12739d133adfa381e1b33bd70c6f64db453bfc536e148824816e568894" + ], + "version": "==2.1.2" + }, + "mistune": { + "hashes": [ + "sha256:b4c512ce2fc99e5a62eb95a4aba4b73e5f90264115c40b70a21e1f7d4e0eac91", + "sha256:bc10c33bfdcaa4e749b779f62f60d6e12f8215c46a292d05e486b869ae306619" + ], + "version": "==0.8.3" + }, + "nbconvert": { + "hashes": [ + "sha256:260d390b989a647575b8ecae2cd06a9eaead10d396733d6e50185d5ebd08996e", + "sha256:12b1a4671d4463ab73af6e4cbcc965b62254e05d182cd54995dda0d0ef9e2db9" + ], + "version": "==5.3.1" + }, + "nbformat": { + "hashes": [ + "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b", + "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402" + ], + "version": "==4.4.0" + }, + "networkx": { + "hashes": [ + "sha256:64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1" + ], + "version": "==2.1" + }, + "notebook": { + "hashes": [ + "sha256:9063a0daaac7816e1b7fc7dfcf69ee173904dcf3b460b45f5b6df06818969bd6", + "sha256:dd431fad9bdd25aa9ff8265da096ef770475e21bf1d327982611a7de5cd904ca" + ], + "version": "==5.4.0" + }, + "numpy": { + "hashes": [ + "sha256:e2335d56d2fd9fc4e3a3f2d3148aafec4962682375f429f05c45a64dacf19436", + "sha256:9b762e78739b6e021124adbea07611682db99cd3fca7f3c3a8b98b8f74ea5699", + "sha256:7d4c549e41507db4f04ec7cfab5597de8acf7871b16c9cf64cebcb9d39031ca6", + "sha256:b803306c4c201e7dcda0ce1b9a9c87f61a7c7ce43de2c60c8e56147b76849a1a", + "sha256:2da8dff91d489fea3e20155d41f4cd680de7d01d9a89fdd0ebb1bee6e72d3800", + "sha256:6b8c2daacbbffc83b4a2ba83a61aa3ce60c66340b07b962bd27b6c6bb175bee1", + "sha256:89b9419019c47ec87cf4cfca77d85da4611cc0be636ec87b5290346490b98450", + "sha256:49880b47d7272f902946dd995f346842c95fe275e2deb3082ef0495f0c718a69", + "sha256:3d7ddd5bdfb12ec9668edf1aa49a4a3eddb0db4661b57ea431477eb9a2468894", + "sha256:788e1757f8e409cd805a7cd82993cd9252fa19e334758a4c6eb5a8b334abb084", + "sha256:377def0873bbb1fbdedb14b3275b10a29b1b55619a3f7f775c4e7f9ce2461b9c", + "sha256:9501c9ccd081977ca5579a3ec4009d6baff6bacb04bf07214aade3324734195a", + "sha256:a1f5173df8190ef9c6235d260d70ca70c6fb029683ceb66e244c5cc6e335947a", + "sha256:12cf4b27039b88e407ad66894d99a957ef60fea0eeb442026af325add2ab264d", + "sha256:4e2fc841c8c642f7fd44591ef856ca409cedba6aea27928df34004c533839eee", + "sha256:e5ade7a69dccbd99c4fdbb95b6d091d941e62ffa588b0ed8fb0a2854118fef3f", + "sha256:6b1011ffc87d7e2b1b7bcc6dc21bdf177163658746ef778dcd21bf0516b9126c", + "sha256:a8bc80f69570e11967763636db9b24c1e3e3689881d10ae793cec74cf7a627b6", + "sha256:81b9d8f6450e752bd82e7d9618fa053df8db1725747880e76fb09710b57f78d0", + "sha256:e8522cad377cc2ef20fe13aae742cc265172910c98e8a0d6014b1a8d564019e2", + "sha256:a3d5dd437112292c707e54f47141be2f1100221242f07eda7bd8477f3ddc2252", + "sha256:c8000a6cbc5140629be8c038c9c9cdb3a1c85ff90bd4180ec99f0f0c73050b5e", + "sha256:fa0944650d5d3fb95869eaacd8eedbd2d83610c85e271bd9d3495ffa9bc4dc9c" + ], + "version": "==1.14.1" + }, + "pandas": { + "hashes": [ + "sha256:68ac484e857dcbbd07ea7c6f516cc67f7f143f5313d9bc661470e7f473528882", + "sha256:12f2a19d0b0adf31170d98d0e8bcbc59add0965a9b0c65d39e0665400491c0c5", + "sha256:68b121d13177f5128a4c118bb4f73ba40df28292c038389961aa55ea5a996427", + "sha256:06efae5c00b9f4c6e6d3fe1eb52e590ff0ea8e5cb58032c724e04d31c540de53", + "sha256:02541a4fdd31315f213a5c8e18708abad719ee03eda05f603c4fe973e9b9d770", + "sha256:2907f3fe91ca2119ac3c38de6891bbbc83333bfe0d98309768fee28de563ee7a", + "sha256:052a66f58783a59ea38fdfee25de083b107baa81fdbe38fabd169d0f9efce2bf", + "sha256:244ae0b9e998cfa88452a49b20e29bf582cc7c0e69093876d505aec4f8e1c7fe", + "sha256:66403162c8b45325a995493bdd78ad4d8be085e527d721dbfa773d56fbba9c88", + "sha256:af0dbac881f6f87acd325415adea0ce8cccf28f5d4ad7a54b6a1e176e2f7bf70", + "sha256:c2cd884794924687edbaad40d18ac984054d247bb877890932c4d41e3c3aba31", + "sha256:c372db80a5bcb143c9cb254d50f902772c3b093a4f965275197ec2d2184b1e61", + "sha256:97c8223d42d43d86ca359a57b4702ca0529c6553e83d736e93a5699951f0f8db", + "sha256:587a9816cc663c958fcff7907c553b73fe196604f990bc98e1b71ebf07e45b44", + "sha256:44a94091dd71f05922eec661638ec1a35f26d573c119aa2fad964f10a2880e6c" + ], + "version": "==0.22.0" + }, + "pandocfilters": { + "hashes": [ + "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9" + ], + "version": "==1.4.2" + }, + "parso": { + "hashes": [ + "sha256:a7bb86fe0844304869d1c08e8bd0e52be931228483025c422917411ab82d628a", + "sha256:5815f3fe254e5665f3c5d6f54f086c2502035cb631a91341591b5a564203cffb" + ], + "version": "==0.1.1" + }, + "pexpect": { + "hashes": [ + "sha256:6ff881b07aff0cb8ec02055670443f784434395f90c3285d2ae470f921ade52a", + "sha256:67b85a1565968e3d5b5e7c9283caddc90c3947a2625bed1905be27bd5a03e47d" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.4.0" + }, + "pickleshare": { + "hashes": [ + "sha256:c9a2541f25aeabc070f12f452e1f2a8eae2abd51e1cd19e8430402bdf4c1d8b5", + "sha256:84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b" + ], + "version": "==0.7.4" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:3f473ae040ddaa52b52f97f6b4a493cfa9f5920c255a12dc56a7d34397a398a4", + "sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381", + "sha256:858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917" + ], + "version": "==1.0.15" + }, + "ptyprocess": { + "hashes": [ + "sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a", + "sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365" + ], + "version": "==0.5.2" + }, + "pygments": { + "hashes": [ + "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", + "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + ], + "version": "==2.2.0" + }, + "pyparsing": { + "hashes": [ + "sha256:fee43f17a9c4087e7ed1605bd6df994c6173c1e977d7ade7b651292fab2bd010", + "sha256:0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04", + "sha256:9e8143a3e15c13713506886badd96ca4b579a87fbdf49e550dbfc057d6cb218e", + "sha256:281683241b25fe9b80ec9d66017485f6deff1af5cde372469134b56ca8447a07", + "sha256:b8b3117ed9bdf45e14dcc89345ce638ec7e0e29b2b579fa1ecf32ce45ebac8a5", + "sha256:8f1e18d3fd36c6795bb7e02a39fd05c611ffc2596c1e0d995d34d67630426c18", + "sha256:e4d45427c6e20a59bf4f88c639dcc03ce30d193112047f94012102f235853a58" + ], + "version": "==2.2.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c", + "sha256:891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca" + ], + "version": "==2.6.1" + }, + "pytz": { + "hashes": [ + "sha256:ed6509d9af298b7995d69a440e2822288f2eca1681b8cce37673dbb10091e5fe", + "sha256:f93ddcdd6342f94cea379c73cddb5724e0d6d0a1c91c9bdef364dc0368ba4fda", + "sha256:61242a9abc626379574a166dc0e96a66cd7c3b27fc10868003fa210be4bff1c9", + "sha256:ba18e6a243b3625513d85239b3e49055a2f0318466e0b8a92b8fb8ca7ccdf55f", + "sha256:07edfc3d4d2705a20a6e99d97f0c4b61c800b8232dc1c04d87e8554f130148dd", + "sha256:3a47ff71597f821cd84a162e71593004286e5be07a340fd462f0d33a760782b5", + "sha256:5bd55c744e6feaa4d599a6cbd8228b4f8f9ba96de2c38d56f08e534b3c9edf0d", + "sha256:887ab5e5b32e4d0c86efddd3d055c1f363cbaa583beb8da5e22d2fa2f64d51ef", + "sha256:410bcd1d6409026fbaa65d9ed33bf6dd8b1e94a499e32168acfc7b332e4095c0" + ], + "version": "==2018.3" + }, + "pyzmq": { + "hashes": [ + "sha256:2fb4d745ffe0a65ebf8fd29df093bb5c0ac96a506cb05b9a7b7c94b2524ae7f6", + "sha256:b89268020a843d4c3cc04180577ec061fe96d35f267b0b672cb006e4d70560da", + "sha256:d51eb3902d27d691483243707bfa67972167a70269bbbc172b74eeac4f780a1d", + "sha256:e5578ae84bb94e97adadfcb00106a1cb161cb8017f89b01f6c3737f356257811", + "sha256:4193cc666591495ab7fe8d24fa8374a35f9775f16dc7c46e03615559e1fc1855", + "sha256:b328c538061757f627d32f7f8885c16f1d2f59f5374e057822f3c8e6cd94c41b", + "sha256:18de8a02768b1c0b3495ac635b24bd902fafc08befb70a6e68c4d343ccbd6cbd", + "sha256:fb983aec4bddee3680a0b7395f99e4595d70d81841370da736c5dc642bad4cd2", + "sha256:ad5a8b19b6671b52d30ccfc3a0f4c600e49c4e2dcc88caf4106ed5958dec8d5e", + "sha256:767e1d0b1f7fff1950127abc08c5a5af2754987bc6480c6d641bed6971278a7a", + "sha256:c30d27c9b35285597b8ef3019f97b9b98457b053f65dcc87a90dfdd4db09ca78", + "sha256:bdb12b485b3440b5193cd337d27cc126cdfc54ea9f38df237e1ead6216435cbe", + "sha256:ba0b43aebf856e5e249250d74c1232d6600b6859328920d12e2ba72a565ab1b1", + "sha256:630fb21f7474eb9e409a1ad476bf1ec489a69eb021172d422f2485cc3a44cd79", + "sha256:6c3632d2c17cf03ce728ffaa328d45bb053623b3a0aa9747adcde81778d5a4d5", + "sha256:538dfdd9542cf9ff37cd958da03b58d56b53b90800159ea07adc51a8ec7ffcb8", + "sha256:613ac1fc4591b1c6a0a52ce3ed17dbffd6a17e985df504e8b4cdb987f97285b1", + "sha256:a0ecf4c3eccd92f030a4e3e334b9da6fa3ee86be00249343c74e476d70567d0f", + "sha256:863ec1bfa52da6eaa5c4aa59143eeaeb4ef7a076862407a548ec645f25e6d6df", + "sha256:f35b4cdeffff79357a9d929daa2a8620fb362b2cbeebdc5dd2cf9fcd27c44821", + "sha256:445fed4d71ac48da258ba38f2e29c88c5091124212a4004a0a6a42e6586a7de1", + "sha256:b31f2b50ad2920f21b904f5edf66bee324e42bb978df1407ecf381b210d4678e", + "sha256:0145ae59139b41f65e047a3a9ed11bbc36e37d5e96c64382fcdff911c4d8c3f0" + ], + "version": "==17.0.0" + }, + "qtconsole": { + "hashes": [ + "sha256:b3d10314cbaad76c3157cf922eb410812cde472e8e7c6bd3d5a92d30145bcde1", + "sha256:eff8c2faeda567a0bef5781f419a64e9977988db101652b312b9d74ec0a5109c" + ], + "version": "==4.3.1" + }, + "send2trash": { + "hashes": [ + "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b", + "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2" + ], + "version": "==1.5.0" + }, + "simplegeneric": { + "hashes": [ + "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173" + ], + "version": "==0.8.1" + }, + "six": { + "hashes": [ + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9" + ], + "version": "==1.11.0" + }, + "terminado": { + "hashes": [ + "sha256:65011551baff97f5414c67018e908110693143cfbaeb16831b743fe7cad8b927", + "sha256:55abf9ade563b8f9be1f34e4233c7b7bde726059947a593322e8a553cc4c067a" + ], + "version": "==0.8.1" + }, + "testpath": { + "hashes": [ + "sha256:039fa6a6c9fd3488f8336d23aebbfead5fa602c4a47d49d83845f55a595ec1b4", + "sha256:0d5337839c788da5900df70f8e01015aec141aa3fe7936cb0d0a2953f7ac7609" + ], + "version": "==0.3.1" + }, + "tornado": { + "hashes": [ + "sha256:92b7ca81e18ba9ec3031a7ee73d4577ac21d41a0c9b775a9182f43301c3b5f8e", + "sha256:b36298e9f63f18cad97378db2222c0e0ca6a55f6304e605515e05a25483ed51a", + "sha256:ab587996fe6fb9ce65abfda440f9b61e4f9f2cf921967723540679176915e4c3", + "sha256:5ef073ac6180038ccf99411fe05ae9aafb675952a2c8db60592d5daf8401f803", + "sha256:6d14e47eab0e15799cf3cdcc86b0b98279da68522caace2bd7ce644287685f0a" + ], + "version": "==4.5.3" + }, + "traitlets": { + "hashes": [ + "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9", + "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835" + ], + "version": "==4.3.2" + }, + "wcwidth": { + "hashes": [ + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c", + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e" + ], + "version": "==0.1.7" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "widgetsnbextension": { + "hashes": [ + "sha256:e53a8b3c9ab680f40ba6e24d712c854e932d9993523a915df3f39e1cd111e1ec", + "sha256:79f164a644620abbe351440a70468ac3a5b22b392afa4577c8d5f91577a2669b" + ], + "version": "==3.1.4" + } + }, + "develop": {} +} diff --git a/proposal/preamble.tex b/proposal/preamble.tex new file mode 100644 index 0000000..6625956 --- /dev/null +++ b/proposal/preamble.tex @@ -0,0 +1,86 @@ +\usepackage{fontspec} + +\setmainfont[Numbers=OldStyle]{Linux Libertine O} +\setsansfont[Numbers=OldStyle]{Linux Biolinum O} +\setmonofont[Scale=0.83]{Inconsolata} + +\usepackage{polyglossia} +\setdefaultlanguage{english} + +\usepackage{lipsum} + +\usepackage{graphicx} +\usepackage[dvipsnames]{xcolor} +\usepackage{wrapfig} +\usepackage{subcaption} +\usepackage{lettrine} + +\usepackage{amssymb, amsmath} + +\usepackage{pdfpages} + +\usepackage{microtype} + +%% Propriétés du document PDF +\usepackage[unicode,colorlinks=true]{hyperref} + +\hypersetup{ + pdfauthor={Dimitri Lozeve}, + pdftitle={Topological Data Analysis of time-dependent networks}, + pdfsubject={MSc project proposal}, + pdfkeywords={tda,network,project,msc}, + pdfpagemode=UseOutlines, + % pdfpagelayout=TwoColumnRight, + linkcolor=MidnightBlue, + filecolor=MidnightBlue, + urlcolor=MidnightBlue, + citecolor=Green +} + +%% Pour la classe memoir /!\ + +%% Marges +\setlrmarginsandblock{2.5cm}{3cm}{*} +%\setulmarginsandblock{4cm}{4cm}{*} +\checkandfixthelayout% + +%% Numérotation des divisions logiques +\setsecnumdepth{subsection} +\maxsecnumdepth{subsection} + +%% Profondeur de la ToC +\settocdepth{subsection} +\maxtocdepth{subsection} + +%% Style des titres des divisions logiques +\setsecheadstyle{\Large\scshape} +\setsubsecheadstyle{\large\scshape} + +%% Abstract +\abstractintoc% +\renewcommand{\abstractnamefont}{\normalfont\large\scshape} +\renewcommand{\abstracttextfont}{\normalfont\normalsize} + +%% épigraphes +\setlength{\epigraphwidth}{0.5\textwidth} +\epigraphtextposition{flushleftright} + +%% Couleurs +%\definecolor{purpletouch}{RGB}{103,30,117} +\definecolor{bleux}{RGB}{0,62,92} + +\author{Dimitri Lozeve} +\date{February 15, 2018} +\title{MSc project proposal\\ + \Large Topological Data Analysis of time-dependent networks} + + + + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "proposal" +%%% End: + diff --git a/proposal/proposal.bib b/proposal/proposal.bib new file mode 100644 index 0000000..886fdc6 --- /dev/null +++ b/proposal/proposal.bib @@ -0,0 +1,195 @@ + +@book{oudot_persistence_2015, + location = {Providence, Rhode Island}, + title = {Persistence theory: from quiver representations to data analysis}, + isbn = {978-1-4704-2545-6}, + series = {Mathematical surveys and monographs}, + shorttitle = {Persistence theory}, + pagetotal = {218}, + number = {volume 209}, + publisher = {American Mathematical Society}, + author = {Oudot, Steve Y.}, + date = {2015}, + keywords = {Algebraic topology, Algebraic topology -- Applied homological algebra and category theory -- Simplicial sets and complexes, Associative rings and algebras -- Representation theory of rings and algebras -- Representations of quivers and partially ordered sets, Computer science -- Computing methodologies and applications -- Computer graphics; computational geometry, Homology theory, Statistics -- Data analysis}, + file = {Steve_Oudot_Persistence_Theory.pdf:/home/dimitri/Zotero/storage/ALZW577G/Steve_Oudot_Persistence_Theory.pdf:application/pdf} +} + +@article{carlsson_topology_2009, + title = {Topology and data}, + volume = {46}, + issn = {0273-0979}, + url = {http://www.ams.org/journal-getitem?pii=S0273-0979-09-01249-X}, + doi = {10.1090/S0273-0979-09-01249-X}, + pages = {255--308}, + number = {2}, + journaltitle = {Bulletin of the American Mathematical Society}, + author = {Carlsson, Gunnar}, + urldate = {2017-11-03}, + date = {2009-01-29}, + langid = {english}, + file = {carlsson2009.pdf:/home/dimitri/Zotero/storage/WYT52FA5/carlsson2009.pdf:application/pdf} +} + +@article{chazal_introduction_2017, + title = {An introduction to Topological Data Analysis: fundamental and practical aspects for data scientists}, + shorttitle = {An introduction to Topological Data Analysis}, + journaltitle = {{arXiv} preprint {arXiv}:1710.04019}, + author = {Chazal, Frédéric and Michel, Bertrand}, + date = {2017}, + file = {chazal2017.pdf:/home/dimitri/Zotero/storage/CH8YWVM3/chazal2017.pdf:application/pdf} +} + +@book{edelsbrunner_computational_2010, + location = {Providence, R.I}, + title = {Computational topology: an introduction}, + isbn = {978-0-8218-4925-5}, + shorttitle = {Computational topology}, + pagetotal = {241}, + publisher = {American Mathematical Society}, + author = {Edelsbrunner, Herbert and Harer, J.}, + date = {2010}, + note = {{OCLC}: ocn427757156}, + keywords = {Algorithms, Computational complexity, Data processing, Geometry, Topology}, + file = {Herbert Edelsbrunner, John L. Harer-Computational Topology_ An Introduction-American Mathematical Society (2009).pdf:/home/dimitri/Zotero/storage/FWGR5NJ3/Herbert Edelsbrunner, John L. Harer-Computational Topology_ An Introduction-American Mathematical Society (2009).pdf:application/pdf} +} + +@article{stolz_persistent_2017, + title = {Persistent homology of time-dependent functional networks constructed from coupled time series}, + volume = {27}, + issn = {1054-1500}, + url = {http://aip.scitation.org/doi/full/10.1063/1.4978997}, + doi = {10.1063/1.4978997}, + abstract = {We use topological data analysis to study “functional networks” that we construct from time-series data from both experimental and synthetic sources. We use persistent homology with a weight rank clique filtration to gain insights into these functional networks, and we use persistence landscapes to interpret our results. Our first example uses time-series output from networks of coupled Kuramoto oscillators. Our second example consists of biological data in the form of functional magnetic resonance imaging data that were acquired from human subjects during a simple motor-learning task in which subjects were monitored for three days during a five-day period. With these examples, we demonstrate that (1) using persistent homology to study functional networks provides fascinating insights into their properties and (2) the position of the features in a filtration can sometimes play a more vital role than persistence in the interpretation of topological features, even though conventionally the latter is used to distinguish between signal and noise. We find that persistent homology can detect differences in synchronization patterns in our data sets over time, giving insight both on changes in community structure in the networks and on increased synchronization between brain regions that form loops in a functional network during motor learning. For the motor-learning data, persistence landscapes also reveal that on average the majority of changes in the network loops take place on the second of the three days of the learning process.}, + pages = {047410}, + number = {4}, + journaltitle = {Chaos: An Interdisciplinary Journal of Nonlinear Science}, + shortjournal = {Chaos}, + author = {Stolz, Bernadette J. and Harrington, Heather A. and Porter, Mason A.}, + urldate = {2018-01-18}, + date = {2017-04-01}, + file = {Full Text PDF:/home/dimitri/Zotero/storage/A2BD6EHP/Stolz et al. - 2017 - Persistent homology of time-dependent functional n.pdf:application/pdf;sichaostimeseries-april2017-corrected-v4-4.pdf:/home/dimitri/Zotero/storage/2W4IQ5TQ/sichaostimeseries-april2017-corrected-v4-4.pdf:application/pdf} +} + +@article{schaub_graph_2016, + title = {Graph partitions and cluster synchronization in networks of oscillators}, + volume = {26}, + issn = {1054-1500}, + url = {http://aip.scitation.org/doi/full/10.1063/1.4961065}, + doi = {10.1063/1.4961065}, + abstract = {Synchronization over networks depends strongly on the structure of the coupling between the oscillators. When the coupling presents certain regularities, the dynamics can be coarse-grained into clusters by means of External Equitable Partitions of the network graph and their associated quotient graphs. We exploit this graph-theoretical concept to study the phenomenon of cluster synchronization, in which different groups of nodes converge to distinct behaviors. We derive conditions and properties of networks in which such clustered behavior emerges and show that the ensuing dynamics is the result of the localization of the eigenvectors of the associated graph Laplacians linked to the existence of invariant subspaces. The framework is applied to both linear and non-linear models, first for the standard case of networks with positive edges, before being generalized to the case of signed networks with both positive and negative interactions. We illustrate our results with examples of both signed and unsigned graphs for consensus dynamics and for partial synchronization of oscillator networks under the master stability function as well as Kuramoto oscillators.}, + pages = {094821}, + number = {9}, + journaltitle = {Chaos: An Interdisciplinary Journal of Nonlinear Science}, + shortjournal = {Chaos}, + author = {Schaub, Michael T. and O'Clery, Neave and Billeh, Yazan N. and Delvenne, Jean-Charles and Lambiotte, Renaud and Barahona, Mauricio}, + urldate = {2018-02-13}, + date = {2016-08-19}, + file = {Full Text PDF:/home/dimitri/Zotero/storage/QDQY8L8M/Schaub et al. - 2016 - Graph partitions and cluster synchronization in ne.pdf:application/pdf;Snapshot:/home/dimitri/Zotero/storage/JP2SXD5G/1.html:text/html} +} + +@article{tabourier_predicting_2016, + title = {Predicting links in ego-networks using temporal information}, + volume = {5}, + rights = {2016 Tabourier et al.}, + issn = {2193-1127}, + url = {https://epjdatascience.springeropen.com/articles/10.1140/epjds/s13688-015-0062-0}, + doi = {10.1140/epjds/s13688-015-0062-0}, + abstract = {Link prediction appears as a central problem of network science, as it calls for unfolding the mechanisms that govern the micro-dynamics of the network. In this work, we are interested in ego-networks, that is the mere information of interactions of a node to its neighbors, in the context of social relationships. As the structural information is very poor, we rely on another source of information to predict links among egos’ neighbors: the timing of interactions. We define several features to capture different kinds of temporal information and apply machine learning methods to combine these various features and improve the quality of the prediction. We demonstrate the efficiency of this temporal approach on a cellphone interaction dataset, pointing out features which prove themselves to perform well in this context, in particular the temporal profile of interactions and elapsed time between contacts.}, + pages = {1}, + number = {1}, + journaltitle = {{EPJ} Data Science}, + author = {Tabourier, Lionel and Libert, Anne-Sophie and Lambiotte, Renaud}, + urldate = {2018-02-13}, + date = {2016-12}, + file = {Full Text PDF:/home/dimitri/Zotero/storage/ETM66HPY/Tabourier et al. - 2016 - Predicting links in ego-networks using temporal in.pdf:application/pdf;Snapshot:/home/dimitri/Zotero/storage/IUNKJ9YF/s13688-015-0062-0.html:text/html} +} + +@article{noulas_mining_2015, + title = {Mining open datasets for transparency in taxi transport in metropolitan environments}, + volume = {4}, + rights = {2015 Noulas et al.}, + issn = {2193-1127}, + url = {https://epjdatascience.springeropen.com/articles/10.1140/epjds/s13688-015-0060-2}, + doi = {10.1140/epjds/s13688-015-0060-2}, + abstract = {Uber has recently been introducing novel practices in urban taxi transport. Journey prices can change dynamically in almost real time and also vary geographically from one area to another in a city, a strategy known as surge pricing. In this paper, we explore the power of the new generation of open datasets towards understanding the impact of the new disruption technologies that emerge in the area of public transport. With our primary goal being a more transparent economic landscape for urban commuters, we provide a direct price comparison between Uber and the Yellow Cab company in New York. We discover that Uber, despite its lower standard pricing rates, effectively charges higher fares on average, especially during short in length, but frequent in occurrence, taxi journeys. Building on this insight, we develop a smartphone application, {OpenStreetCab}, that offers a personalized consultation to mobile users on which taxi provider is cheaper for their journey. Almost five months after its launch, the app has attracted more than three thousand users in a single city. Their journey queries have provided additional insights on the potential savings similar technologies can have for urban commuters, with a highlight being that on average, a user in New York saves 6 U.S. Dollars per taxi journey if they pick the cheapest taxi provider. We run extensive experiments to show how Uber’s surge pricing is the driving factor of higher journey prices and therefore higher potential savings for our application’s users. Finally, motivated by the observation that Uber’s surge pricing is occurring more frequently that intuitively expected, we formulate a prediction task where the aim becomes to predict a geographic area’s tendency to surge. Using exogenous to Uber data, in particular Yellow Cab and Foursquare data, we show how it is possible to estimate customer demand within an area, and by extension surge pricing, with high accuracy.}, + pages = {23}, + number = {1}, + journaltitle = {{EPJ} Data Science}, + author = {Noulas, Anastasios and Salnikov, Vsevolod and Lambiotte, Renaud and Mascolo, Cecilia}, + urldate = {2018-02-13}, + date = {2015-12}, + file = {Full Text PDF:/home/dimitri/Zotero/storage/N6P7THVK/Noulas et al. - 2015 - Mining open datasets for transparency in taxi tran.pdf:application/pdf;Snapshot:/home/dimitri/Zotero/storage/H3R7HWMH/s13688-015-0060-2.html:text/html} +} + +@article{kivela_multilayer_2014, + title = {Multilayer Networks}, + volume = {2}, + issn = {2051-1310, 2051-1329}, + url = {http://arxiv.org/abs/1309.7233}, + doi = {10.1093/comnet/cnu016}, + abstract = {In most natural and engineered systems, a set of entities interact with each other in complicated patterns that can encompass multiple types of relationships, change in time, and include other types of complications. Such systems include multiple subsystems and layers of connectivity, and it is important to take such "multilayer" features into account to try to improve our understanding of complex systems. Consequently, it is necessary to generalize "traditional" network theory by developing (and validating) a framework and associated tools to study multilayer systems in a comprehensive fashion. The origins of such efforts date back several decades and arose in multiple disciplines, and now the study of multilayer networks has become one of the most important directions in network science. In this paper, we discuss the history of multilayer networks (and related concepts) and review the exploding body of work on such networks. To unify the disparate terminology in the large body of recent work, we discuss a general framework for multilayer networks, construct a dictionary of terminology to relate the numerous existing concepts to each other, and provide a thorough discussion that compares, contrasts, and translates between related notions such as multilayer networks, multiplex networks, interdependent networks, networks of networks, and many others. We also survey and discuss existing data sets that can be represented as multilayer networks. We review attempts to generalize single-layer-network diagnostics to multilayer networks. We also discuss the rapidly expanding research on multilayer-network models and notions like community structure, connected components, tensor decompositions, and various types of dynamical processes on multilayer networks. We conclude with a summary and an outlook.}, + pages = {203--271}, + number = {3}, + journaltitle = {Journal of Complex Networks}, + author = {Kivelä, Mikko and Arenas, Alexandre and Barthelemy, Marc and Gleeson, James P. and Moreno, Yamir and Porter, Mason A.}, + urldate = {2018-02-13}, + date = {2014-09-01}, + eprinttype = {arxiv}, + eprint = {1309.7233}, + keywords = {Physics - Physics and Society, Computer Science - Social and Information Networks}, + file = {arXiv\:1309.7233 PDF:/home/dimitri/Zotero/storage/F98JFB2E/Kivelä et al. - 2014 - Multilayer Networks.pdf:application/pdf;arXiv.org Snapshot:/home/dimitri/Zotero/storage/7WBJRIBQ/1309.html:text/html} +} + +@article{porter_dynamical_2014, + title = {Dynamical Systems on Networks: A Tutorial}, + url = {http://arxiv.org/abs/1403.7663}, + shorttitle = {Dynamical Systems on Networks}, + abstract = {We give a tutorial for the study of dynamical systems on networks. We focus especially on "simple" situations that are tractable analytically, because they can be very insightful and provide useful springboards for the study of more complicated scenarios. We briefly motivate why examining dynamical systems on networks is interesting and important, and we then give several fascinating examples and discuss some theoretical results. We also briefly discuss dynamical systems on dynamical (i.e., time-dependent) networks, overview software implementations, and give an outlook on the field.}, + journaltitle = {{arXiv}:1403.7663 [cond-mat, physics:nlin, physics:physics]}, + author = {Porter, Mason A. and Gleeson, James P.}, + urldate = {2018-02-13}, + date = {2014-03-29}, + eprinttype = {arxiv}, + eprint = {1403.7663}, + keywords = {Physics - Physics and Society, Computer Science - Social and Information Networks, Condensed Matter - Disordered Systems and Neural Networks, Condensed Matter - Statistical Mechanics, Nonlinear Sciences - Adaptation and Self-Organizing Systems}, + file = {arXiv\:1403.7663 PDF:/home/dimitri/Zotero/storage/XBRAHARB/Porter and Gleeson - 2014 - Dynamical Systems on Networks A Tutorial.pdf:application/pdf;arXiv.org Snapshot:/home/dimitri/Zotero/storage/LF7GCTFE/1403.html:text/html} +} + +@article{tierny_topology_2017, + title = {The Topology {ToolKit}}, + url = {https://hal.archives-ouvertes.fr/hal-01499905/document}, + abstract = {This system paper presents the Topology {ToolKit} ({TTK}), a software platform designed for topological data analysis in scientific visualization. While topological data analysis has gained in popularity over the last two decades, it has not yet been widely adopted as a standard data analysis tool for end users or developers. {TTK} aims at addressing this problem by providing a unified, generic, efficient, and robust implementation of key algorithms for the topological analysis of scalar data, including: critical points, integral lines, persistence diagrams, persistence curves, merge trees, contour trees, Morse-Smale complexes, fiber surfaces, continuous scatterplots, Jacobi sets, Reeb spaces, and more. {TTK} is easily accessible to end users due to a tight integration with {ParaView}. It is also easily accessible to developers through a variety of bindings (Python, {VTK}/C++) for fast prototyping or through direct, dependence-free, C++, to ease integration into pre-existing complex systems. While developing {TTK}, we faced several algorithmic and software engineering challenges, which we document in this paper. In particular, we present an algorithm for the construction of a discrete gradient that complies to the critical points extracted in the piecewise-linear setting. This algorithm guarantees a combinatorial consistency across the topological abstractions supported by {TTK}, and importantly, a unified implementation of topological data simplification for multi-scale exploration and analysis. We also present a cached triangulation data structure, that supports time efficient and generic traversals, which self-adjusts its memory usage on demand for input simplicial meshes and which implicitly emulates a triangulation for regular grids with no memory overhead. Finally, we describe an original software architecture, which guarantees memory efficient and direct accesses to {TTK} features, while still allowing for researchers powerful and easy bindings and extensions. {TTK} is open source ({BSD} license) and its code, online documentation and video tutorials are available on {TTK}'s website (https://topology-tool-kit.github.io/).}, + journaltitle = {{IEEE} Transactions on Visualization and Computer Graphics}, + author = {Tierny, Julien and Favelier, Guillaume and Levine, Joshua and Gueunet, Charles and Michaux, Michael}, + urldate = {2018-02-15}, + date = {2017-10-01}, + langid = {english}, + file = {Full Text PDF:/home/dimitri/Zotero/storage/TGURBQBF/Tierny et al. - 2017 - The Topology ToolKit.pdf:application/pdf;Snapshot:/home/dimitri/Zotero/storage/JAIQUA5K/hal-01499905v2.html:text/html} +} + +@inproceedings{maria_gudhi_2014, + title = {The Gudhi Library: Simplicial Complexes and Persistent Homology}, + isbn = {978-3-662-44198-5}, + url = {https://link.springer.com/chapter/10.1007/978-3-662-44199-2_28}, + doi = {10.1007/978-3-662-44199-2_28}, + series = {Lecture Notes in Computer Science}, + shorttitle = {The Gudhi Library}, + abstract = {We present the main algorithmic and design choices that have been made to represent complexes and compute persistent homology in the Gudhi library. The Gudhi library (Geometric Understanding in Higher Dimensions) is a generic C++ library for computational topology. Its goal is to provide robust, efficient, flexible and easy to use implementations of state-of-the-art algorithms and data structures for computational topology. We present the different components of the software, their interaction and the user interface. We justify the algorithmic and design decisions made in Gudhi and provide benchmarks for the code. The software, which has been developped by the first author, will be available soon at project.inria.fr/gudhi/software/ .}, + eventtitle = {International Congress on Mathematical Software}, + pages = {167--174}, + booktitle = {Mathematical Software – {ICMS} 2014}, + publisher = {Springer, Berlin, Heidelberg}, + author = {Maria, Clément and Boissonnat, Jean-Daniel and Glisse, Marc and Yvinec, Mariette}, + urldate = {2018-02-15}, + date = {2014-08-05}, + langid = {english}, + file = {Snapshot:/home/dimitri/Zotero/storage/3YRXLXZL/978-3-662-44199-2_28.html:text/html} +} + +@online{oudot_inf556_????, + title = {{INF}556 -- Topological Data Analysis}, + url = {http://www.enseignement.polytechnique.fr/informatique/INF556/}, + author = {Oudot, Steve Y.}, + urldate = {2018-02-16}, + file = {INF556 -- Topological Data Analysis:/home/dimitri/Zotero/storage/TNRU945Q/INF556.html:text/html} +} \ No newline at end of file diff --git a/proposal/proposal.pdf b/proposal/proposal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f0be67d0010c7a9849a11b4882ef0963cda3b041 GIT binary patch literal 47731 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
^;jA-2> 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¬pwTyh{Pf=v18Pz&NrvQ{*Jo&Ny?3 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 k3TpO(kNIDJG@~ literal 0 HcmV?d00001 diff --git a/proposal/proposal.tex b/proposal/proposal.tex new file mode 100644 index 0000000..79d657e --- /dev/null +++ b/proposal/proposal.tex @@ -0,0 +1,90 @@ +\documentclass[article,a4paper,11pt,openany,extrafontsizes]{memoir} + +\input{preamble} + +\usepackage[backend=biber,style=ieee,url=false,arxiv=abs]{biblatex} +\addbibresource{proposal.bib} + +\tightlists% + +\begin{document} + +\maketitle + +% \subsection*{Title} + +% Topological Data Analysis of Time-dependent Networks + +\subsection*{Supervisors} + +Dr Heather Harrington (Mathematical Institute) and Dr Gesine Reinert +(Department of Statistics) + +\subsection*{Description} + +Topological Data Analysis (TDA)~\cite{chazal_introduction_2017, + oudot_persistence_2015, carlsson_topology_2009, + edelsbrunner_computational_2010} is a family of techniques gaining +an increasing importance in the analysis and visualization of +high-dimensional data in machine learning applications. + +In this project, we will apply TDA techniques and persistent homology +to time-dependent networks, in order to understand how the topological +structure evolves over time in complex multilayer +networks~\cite{kivela_multilayer_2014, porter_dynamical_2014}. + +There are two ways of obtaining time-dependent networks. Network data +is available easily in many contexts: social networks and biological +processes are two examples of systems evolving over time and that can +be modelled as a graph. For instance, in social networks, links in ego +networks have already been studied in the context of +time-dependency~\cite{tabourier_predicting_2016}. + +The other large category is time series. It is possible to use a +similarity measure to build a network from a set of time series taken +from the same physical process. Although it could be applied to any +set of time series, this has already been studied in the case of +coupled oscillators (such as Kuramoto +oscillators)~\cite{stolz_persistent_2017, schaub_graph_2016}. It is +thus easy to find relevant datasets or to generate interesting data +from physical simulations. + +It is then possible to apply existing TDA and persistent homology +techniques to the networks, taking into account the temporal +dimension. Certain methods have already been implemented in +topological data analysis libraries~\cite{tierny_topology_2017, + maria_gudhi_2014}, although they would have to be adapted to network +data, and applied repeatedly to each time step. There is also a wide +range of methods to explore, from the choice of the similarity +measure, to the choice of filtration (in order to build a simplicial +complex on the network), to the representation of topological +structure. Each of these choices has a great influence on the final +interpretation of the data, and may need to be adapted to each system. + +\subsection*{Prerequisite courses/knowledge} + +\begin{itemize} +\item SM7 Probability and Statistics for Network Analysis +\item Topological Data Analysis and Persistent + Homology\footnote{\url{http://www.enseignement.polytechnique.fr/informatique/INF556/}} +\end{itemize} + +\subsection*{Computing required?} + +Yes + +\subsection*{Data available?} + +Yes + +%%\nocite{*} +% \bibliographystyle{ieeetr} +% \bibliography{proposal} +\printbibliography% + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/usa_roads.ipynb b/usa_roads.ipynb new file mode 100644 index 0000000..a22b17d --- /dev/null +++ b/usa_roads.ipynb @@ -0,0 +1,251 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "import graph_tool.all as gt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "version: 2.26 (commit b89e6b4e, Thu Nov 9 14:55:43 2017 +0000)\n", + "gcc version: 7.2.0\n", + "compilation flags: -DNDEBUG -D_FORTIFY_SOURCE=2 -fopenmp -O3 -fvisibility=default -fvisibility-inlines-hidden -Wno-deprecated -Wall -Wextra -ftemplate-backtrace-limit=0 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now\n", + "install prefix: /usr\n", + "python dir: /usr/lib/python3.6/site-packages\n", + "graph filtering: True\n", + "openmp: True\n", + "uname: Linux asha 4.15.6-1-ARCH #1 SMP PREEMPT Sun Feb 25 12:53:23 UTC 2018 x86_64\n" + ] + } + ], + "source": [ + "gt.show_config()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "# G = gt.load_graph_from_csv(\"data/usa_roads/usa_roads_ny.csv\", eprop_types=[\"int\"], eprop_names=[\"distance\"], string_vals=False)\n", + "# G.save(\"data/usa_roads/usa_roads_ny.gt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "G = gt.load_graph(\"data/usa_roads/usa_roads_ny.gt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "distance (edge) (type: int32_t)\n" + ] + } + ], + "source": [ + "print(G)\n", + "G.list_properties()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "PropertyArray([ 803, 842, 2428, ..., 1158, 323, 368], dtype=int32)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dist = G.ep.get(\"distance\")\n", + "dist.get_array()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6327185812827214\n", + "464318\n" + ] + } + ], + "source": [ + "filt = G.new_edge_property(\"bool\")\n", + "filt.a = dist.a > 800\n", + "print(filt.a.mean())\n", + "G.set_edge_filter(filt)\n", + "print(G.num_edges())" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "PropertyArray([ 1, 2, 3, ..., 34918, 36421, 36946], dtype=int32)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ordered_dist = dist.get_array()\n", + "ordered_dist = np.unique(np.sort(ordered_dist))\n", + "ordered_dist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "autoscroll": false, + "collapsed": false, + "ein.tags": "worksheet-0", + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + }, + "name": "usa_roads.ipynb" + }, + "nbformat": 4, + "nbformat_minor": 2 +}