{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Overview\n", "\n", "This week is all about working with data. I'm not going to lie to you. This part might be frustrating - but frustration is an integral part of learning. Real data is almost always messy & difficult ... and learning to deal with that fact, is a key part of being a data scientist. \n", "> \n", "> **_Video Lecture_**: Since you guys will be struggling with real data today, the first lecture today is just a short, silly pep-talk to cheer you up in the midst of the tedium of working with messy wikipedia data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"VlVvyWliQU8\",width=800, height=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Enough about the process, let's get to the content. My plan for the next few lectures is to use network science and Wikipedia to learn about philosophy. We're going to download all the Wikipedia pages about philosophers from Wikipedia - and then create the network of the pages that link to each other. Next time, we'll use our network skills (as well as new ones) to understand that network. Further down the line, we'll use natural language processing to understand the text displayed on those pages. \n", "\n", "But for today, the tasks are\n", "\n", "* Learn about _regular expressions_\n", "* Find the names of all the philosopher-pages on Wikipedia\n", "* Download and store (for later use) all the philosopher-pages from Wikipedia\n", "* Extract all the internal wikipedia-links that connect the philosopher-pages on wikipedia\n", "* Generate the network of philosophers on wikipedia. We'll also do a little bit of initial analysis of the network." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prelude: Regular expressions\n", "\n", "Before we get started, we have to get a little head start on the _Natural Language Processing_ part of the class. This is a new direction for us, up to now, we've mostly been doing math-y stuff with Python, but today, we're going to be using Python to work through a text. The central thing we need to be able to do today, is to extract internal wikipedia links. And for that we need regular expressions.\n", "\n", "> _Exercises_: Regular expressions round 1\\.\n", "> \n", "> * Read [**this tutorial**](https://developers.google.com/edu/python/regular-expressions) to form an overview of regular expressions. This is important to understand the content of the tutorial (also very useful later), so you may actually want to work through the examples.\n", "> * Now, explain in your own words: what are regular expressions?\n", "> * Provide an example of a regex to match 4 digits numbers (by this, I mean precisely 4 digits, you should not match any part of numbers with e.g. 5 digits). In your notebook, use `findall` to show that your regex works on this [test-text](https://raw.githubusercontent.com/suneman/socialgraphs2017/master/files/test.txt). **Hint**: a great place to test out regular expressions is: https://regex101.com.\n", "> * Provide an example of a regex to match words starting with \"super\". Show that it works on the [test-text](https://raw.githubusercontent.com/suneman/socialgraphs2017/master/files/test.txt).\n", "> \n", "\n", "Finally, we need to figure out how how to match internal wiki links. Wiki links come in two flavors. They're always enclosed in double square brackets, e.g. `[[wiki-link]]` and can either occur like this:\n", "\n", " ... some text [[Aristotle]] some more text ...\n", "\n", "which links to the page [`https://en.wikipedia.org/wiki/Aristotle`](https://en.wikipedia.org/wiki/Aristotle). \n", "\n", "The second flavor has two parts, so that links can handle spaces and other more fancy forms of references, here's an example:\n", "\n", " ... some text [[Eudemus_of_Rhodes|Eudemus of Rhodos]] some more text ...\n", "\n", "which links to the page [`https://en.wikipedia.org/wiki/Eudemus_of_Rhodes`](https://en.wikipedia.org/wiki/Eudemus_of_Rhodes). Now it's your turn." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> _Exercise_: Regular expressions round 2\\. Show that you can extract the wiki-links from the [test-text](https://raw.githubusercontent.com/suneman/socialgraphs2017/master/files/test.txt). Perhaps you can find inspiration on stack overflow or similar. **Hint**: Try to solve this exercise on your own (that's what you will get the most out of - learning wise), but if you get stuck ... take a look at the video lecture below.\n", "> " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part A: Download Philosopher-pages from Wikipedia\n", "\n", "Armed with some knowledge of regular expressions, we're going to start extracting all the names of philosophers on Wikipedia. These will be the nodes of our network.\n", "\n", "> **_Video Lecture_**: A barebones strategy for getting philosopher page names.\n", "> " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgICAgGBwgIBwcICAgICAgICAgICAgI\nCAgIChALCAgOCQgIDhUNDhERExMTCAsWGBYSGBASExIBBQUFBwYHDwgIDhYVDxUVFRUVFRUdFRUV\nFRUVFRoVFRUVFRUVFRUVFhUVFRUeFRUVHh4VFR8VHh4WFhUVFRUaHv/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAEAAQUBAQEAAAAAAAAAAAAAAQIEBQYIAwcJ/8QAXhAAAQMCAwMGBwgIEQoHAAAAAAEC\nAwQFERITBiGUFBgiMVTUIzIzQUNRYQckQlJxgZGhCBVTYnJzdbEWNDVjZIKDk5Wjs7TBxNPV8Bcl\nNkRVdIS10eFlkqKy4uPx/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAIDBAH/xAAgEQEAAgICAgMBAAAA\nAAAAAAAAAgMSEwEEETJCUnIi/9oADAMBAAIRAxEAPwDjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHTfMr2p7fYOKuXcBzK9qe32\nDirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTf\nMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXc\nBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl\n3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p\n7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9\nqe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADm\nQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYO\nKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32\nDirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTf\nMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXc\nBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl\n3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p7fYOKuXcBzK9qe32Dirl3ADmQHTfMr2p\n7fYOKuXcBzK9qe32Dirl3ADv0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeU8jY2q96o1rOk5zupMPOYRl9e9WOioq2SBy\neVyRx/xM7km+oDYAY+21zKhivjXdjkcx7ckjJE9FKnmXeX4Egg8ayobFG+R/ixMV7vmQD3B5wSo9\nrXp4r25vp3nlX1LIY3Sv8VnjAXIIMTcbxHFJpI2Sadzc+jAxXyJH5ll3eCRVUDLgwUN9TOyOeGel\nfKuRmsxMj19STRKqIpnAJBBIAEFrDWMdLJEnlIWxuen45Vw/MBdggASCABIAAAFpLWMbJHEvjz6m\nRPxO9fzgXYLW5VjKeKSeVcscLM719hcgSDwnmaxjnvXK1jMz3HpG9HIip1OArBBIAEEgAQWL7jCk\nbZM6LG6dIc7U3amvyfD9+3AX4IAEggkACCQAAAAAAAAAAAAAAAAAAAAAAAAAAAxu0dvWqpKina7K\n6eFWI9fb/j6yzZfVYmFVTVNM7Dp9BaiNP3aBFL2+a+g91PvmZ02M+Phj4L5y0h2konJitTHG7Dps\nmfoysX8TNvQDxlrIo431VIrZluM0TIcrk0pJt0CLj8iL+8lMtPcY80qVTah7UzJRuiiZE9cN6RSo\n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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "YouTubeVideo(\"91gknsVGHls\",width=800, height=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> _Exercise_: Find the names of all the philosopher-pages, download and analyze them.\n", "> \n", "> * [This wiki-page](https://en.wikipedia.org/wiki/Lists_of_philosophers) contains list of philosophers from various branches of philosophy:\n", "> 1. [aestheticians](https://en.wikipedia.org/wiki/List_of_aestheticians)\n", "> 2. [epistemologists](https://en.wikipedia.org/wiki/List_of_epistemologists)\n", "> 3. [ethicists](https://en.wikipedia.org/wiki/List_of_ethicists) \n", "> 4. [logicians](https://en.wikipedia.org/wiki/List_of_logicians)\n", "> 5. [metaphysicians](https://en.wikipedia.org/wiki/List_of_metaphysicians)\n", "> 6. [social and political philosophers](https://en.wikipedia.org/wiki/List_of_social_and_political_philosophers)\n", "> \n", "> We're going to have to go and extract the page names for all six groups of philosophers. Unfortunately wikipedia does not have a uniform way of setting such pages up, so you'll have to do each page differently. And I'd like you to maintain **seven** (7) separate lists of philosophers. One for each branch of philosophy - and one combined list of all philosophers. \n", "> \n", "> * Let's put together some descriptive statistics:\n", "> * How many philosophers in each list? How many total?\n", "> * Which is the largest branch of philosophy?\n", "> * Are some philosophers in more than one list?\n", "> * Which philosopher is in most lists & and how many?\n", "> * Let's investigate philosophers active in multiple sub-fields. Create a list of every philosopher that occurs in more than one list. Use Python to sort the list according to how many lists each philosopher belongs to (so the guy you found in the previous question is first in that list).\n", "> " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have the names, it's time to download all of the pages. Use your experience with APIs from Week 1\\. To get started, I **strongly** recommend that you re-watch the **APIs video lecture** from that week - it contains lots of useful tips on this specific activity (yes, I had planned this all along!). I've included it below for your covenience." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgJCAgICAgHCAgICAgICAgIBwcIBwcI\nBwcHChALBwgOCQgIDBUMDhERExMTCAsWGBYSGBASExIBBQUFCAcHBwgIChIICAgSEhISEhISEhIS\nEhISEhISEh4SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIeEv/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAEAAQUBAQEAAAAAAAAAAAAABAIDBQYHAQgJ/8QAWhAAAQIEAQYFDwUKDQQCAwAAAgAD\nAQQSEwUGERQiUpIVIzIzYgcIFhghMUJDUVNUcpSi1CRBY4PRNERhZHOChJGTsxdxdIGho6S0wcPE\n0/AlsdLjsuEmwvL/xAAaAQEBAQEBAQEAAAAAAAAAAAAAAgMEAQUG/8QAKBEBAAICAgAFAwUBAAAA\nAAAAAAISAxMEMwEiMkJTI1JiFDQ1QWMR/9oADAMBAAIRAxEAPwD4yREQEREBERAREQEREBERAREQ\nEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\nAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQER\nEBERAREQEREBERAREQEREBERARd3wjrYMemxE2pzCoCTTT8IuPTsO4/yfvFSWutPykKrPM4U3T5y\nYnIVer8iQfP6L6CLrTMpKatKwmPRhMzuf+4ofWm5RCOeM7g/8Wkzuf8AuKD59Rd4PrXMehGnTsHq\n2dJnc/8AcViXet5x+BUw0YukMZuP+nQcdRdiDrd8fi4LeeTqLva838OqO16yg2Zf9c38Og5Ai7tK\n9a/lC5nzTOFjm23p2H+hUjtUsofTcH9qnfgUHAUXfu1Syh9Nwf2qd+BVLPWsZQGZBCawsYidvXmZ\nyFUej8hQcDRfRj/WiZRBERPEcEEj5A6TiOv/AGBYZ/rYcpAOiqTLWo1CnO/7Gg4Yi7kfWxZSQAjL\nQxEOVrzfc/s6uh1rmUpUUHIkLg1wMXZ23m9jQcIRfQ+G9aRlM+3XpWEs69FDz842ef2FSO07ym9N\nwX2nEfgEHzgi+j+07ym9NwX2nEfgFZHrRMprhBpeD6o3InpM7bzetoKD52RfQD3Wo5SDCrScMLjr\n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\nyO+iFHCT+2nCT+2q+Cn9kd9OCn9kd9BRwk/tpwk/tqvgp/ZHfTgp/ZHfQUcJP7acJP7ar4Kf2R30\n4Kf2R30FHCT+2nCT+2q+Cn9kd9OCn9kd9BRwk/tpwk/tqvgp/ZHfTgp/ZHfQUcJP7acJP7ar4Kf2\nR304Kf2R30FHCT+2nCT+2q+Cn9kd9OCn9kd9BRwk/tpwk/tqvgp/ZHfTgp/ZHfQZPJuZcM3KyqUv\nFuU3/E5/2UXJyVNsjrhyhhFS8V77f1qCMqFWiD546qM++GNTlDtIg9KtmNDPNWFoemaS+4bw3HHb\nTdfi7S2bq5VN4xPR87ao/YMLSGDIW3CAah8Mi8Ws8+edKGDiwvd9F9RSnMWb0OQXRlznqMd4tnQ5\nBdGWPF6BWp+D8yCgKfg/MguoS0XqICIiDXMo8nm52LdyrMy7fCnzqwH8HEpCNULwkIaOFHgNLd5q\ndaaiMHHBbiUcwQIs1Sk1w8qDVX8lmXItxOBETEa2TIebWPxXIGWmYkT0TIitf2db1XDyqO5ONQIQ\ni4NR8gau6aDQ/wCDOUrqqep41ynP419XP4M5LV57VNo+X5hbu/Ost01uCNXIqLlq1K4tLuwztPNl\nrUdw/nQaoxkDLAzowE8LOzX9PpCsOdTKSiZHxw1PaRmE/Grfbw7Qqyc+yNOdwNYqB1od2KDTmchW\nWhJsHHqStf1L+kLbrcdklLrHyw/Wqbw7QoI1uOySW47JKXdHah+tWwmW458xjHN39ZBYtx2SS3HZ\nJX9La84O8kxMg3CJGYiMO/Eo95BYtx2SS3HZJSLwbQ76tnONDVncCFPLzl3kFu3HZJLcdklcbnGo\nwEoOBSXJKuGupFcPKgh247JJbjskrjE8ydVDglTytbvKUgg247JJbjskpyIINuOySW47JKciCDbj\nskluOySnIgg247JJbjskpyIINuOySW47JKciCDbjskluOySnIgg247JJbjskpyIINuOySW47JKci\nCDbjskluOySnIgg247JJbjskpyIINuOySW47JKciCDbjskluOySnIgg247JJbjskpyII0sMYR7yj\nYr32/rVkljcV77f1qCMiIg+YuuAerxgmqKqXmm6/5SwwtPYkCag81VVUt66uMmTuJzQiVPymVc+t\nsLW5CWA+66JXPDWE28HbuowHcc/kcgujLnPUZ7xfyOQXRlHF6GCtT8H5kFAU/B+aFdQmIiICIvEG\n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\ngvs2I/Hp24mU3oWC+zYj8eg+66B6SUD0l8KduJlN6Fgvs2I/Hp24mU3oWC+zYj8eg+66B6SUD0l8\nKduJlN6Fgvs2I/Hp24mU3oWC+zYj8eg+66B6SUD0l8KduJlN6Fgvs2I/Hp24mU3oWC+zYj8eg+66\nB6SUD0l8KduJlN6Fgvs2I/Hp24mU3oWC+zYj8eg+66PWShfCnbiZTehYL7NiPx6duJlN6Fgvs2I/\nHoPu5F8I9uJlN6Fgvs2I/Hp24mU3oWC+zYj8eg2vq3PCWXDg0DUISvK/IS61jqx4qL5Sss0Nwm/C\nGzxi5hln1WMQxXETxOZZlRmD8FoHoN8xo/Jv7KjyXVRxBmqluWKrv1tOx/zkGhoiICIiAiIgIiIC\nIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg\nIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIi\nAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIi\nICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg//2Q==\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "YouTubeVideo(\"9l5zOfh0CRo\",width=800, height=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> _Exercise_: Download wikipages and save them to your own computer. For each of the philosophers in the _combined list_ obtained in the previous exercise, use Wikipedia's API to download the full page content (using python) and save it (get it in `json` format, _AND **don't** get the `html` version of the page which is much more difficult to parse_). \n", ">\n", "> ### Important Point Starting\n", "> This is an important point, so I will repeat it: **Don't get the `html` version of the page (which is much more difficult to parse**), get the standard [wiki markup](https://en.wikipedia.org/wiki/Help:Wiki_markup) which is what you see when you press \"edit\" on a wikipedia page.\n", "> \n", "> **Important Point completed**\n", ">\n", "> A couple of extra tips below:\n", "> \n", "> * Some pages contain unicode characters, so we recommend you save the files using the [`io.open`](http://stackoverflow.com/questions/5250744/difference-between-open-and-codecs-open-in-python) method with `utf-8` encoding\n", "> * Some philosopher names have spaces. As a first stab, try to simply substitute spaces with underscores. (E.g. `https://en.wikipedia.org/wiki/Thomas_Aquinas` from `Thomas Aquinas`. If that doesn't work, you can construct the api-url using `urllib.quote` (or similar). This is another way of handling spaces using and other non-ascii characters in `url`s using [url encoding](http://www.w3schools.com/tags/ref_urlencode.asp).\n", "> * Store the content of all pages. It's up to you how to do this. One strategy is to use Python's built in `pickle` format. Or you can simply write the content of wiki-pages to text files and store those in a folder on your computer. I'm sure there are other ways. It's crucial that you store them in a way that's easy to access, since we'll use these pages a lot throughout the remainder of the course (so you don't want to retrieve them from wikipedia every time).\n", "> " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part B: Building the networks\n", "\n", "Now, we're going to build a NetworkX directed graph of the links between pages. For each philosopher page, we'll find all the links to other characters, and for each link add an edge in the graph. \n", "> \n", "> _Exercise_: Build the philosopher network. The **combined list** from above provides the network nodes. We will use info from the pages to define links. Every time philosopher A's page links to philosopher B's page, we create a directed link from A to B. There are many ways to do this, but below, I've tried to break it down into natural steps.\n", "> \n", "> * Use a regular expression to extract all outgoing links from each of the pages you downloaded above. There are many ways to iterate over pages - feel free to choose the one that matches the way you've chosen to store the pages.\n", "> * For each link you extract, check if the target is in the list you generated above. If yes, keep it. If no, discard it.\n", "> * Use a NetworkX [`DiGraph`](https://networkx.github.io/documentation/development/reference/classes.digraph.html) to store the network.\n", "> " ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 1 }