Created
November 20, 2012 22:58
-
-
Save darribas/4121857 to your computer and use it in GitHub Desktop.
A IPython Notebook to analyze the Gaza-Israel 2012 crisis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:746173e507bb62641ce04e13b0e24de88d191f2d389820d9c44ff749a5da5fe0" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# A IPython Notebook to analyze the Gaza-Israel 2012 crisis\n", | |
"\n", | |
"The Guardian is tracking and mapping live ([link](http://www.guardian.co.uk/news/datablog/interactive/2012/nov/19/gaza-israel-verified-incidents-mapped)) the recent incidents in Gaza and Israel. As part of their data-journalism spirit, they are sharing the data as a Google Fusion Table available for access.\n", | |
"\n", | |
"This notebook is an attempt to show, on the one hand, how the toolkit from the Python stack can be used for a real world data hack and, on the other, to offer deeper analysis beyond mapping of the events, both exploiting the spatial as well as the temporal dimension of the data.\n", | |
"\n", | |
"+ The source document (`.ipynb` file) is stored on Github as a gist [here](https://gist.github.com/4121857), which means you can fork it and use it as a start for you own data-hack.\n", | |
"+ A viewable version is available [here](http://nbviewer.ipython.org/4121857/), via the IPython Notebook Viewer.\n", | |
"\n", | |
"## Collaborate on the notebook!!!\n", | |
"\n", | |
"In its initial version (Nov. 20th), the notebook only contains code to stream the data from the Google Fusion Table into a [`pandas`](http://pandas.pydata.org) DataFrame (which means you get the data ready to hack!). Step in and collaborate in making it a good example of how Python can help analyze real world data. Add a new view, quick visualization, summary statistic of fancy model that helps understand the data better!\n", | |
"\n", | |
"To contribute, just fork the gist as you would with any git repository.\n", | |
"\n", | |
"*Happy hacking!*" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%matplotlib inline\n", | |
"import matplotlib.pyplot as plt\n", | |
"import datetime\n", | |
"import urllib2, urllib\n", | |
"import pandas as pd\n", | |
"from StringIO import StringIO" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 18 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The following cell pulls the data using the API. In the meantime, Google has changed its terms and ways to access it, so this might not work." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Trick from http://stackoverflow.com/questions/7800213/can-i-use-pythons-csv-reader-with-google-fusion-tables\n", | |
"\n", | |
"request_url = 'https://www.googleapis.com/fusiontables/v1/query'\n", | |
"query = 'SELECT * FROM 1KlX4PFF81wlx_TJ4zGudN_NoV_gq_GwrxuVau_M'\n", | |
"\n", | |
"url = \"%s?%s\" % (request_url, urllib.urlencode({'sql': query}))\n", | |
"serv_req = urllib2.Request(url=url)\n", | |
"serv_resp = urllib2.urlopen(serv_req)\n", | |
"table = serv_resp.read()\n", | |
"print '\\nLast pull of data from the Google FusionTable: ', datetime.datetime.now()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def parse_loc(loc, ret_lon=True):\n", | |
" try:\n", | |
" lon, lat = loc.split(',')\n", | |
" lon, lat = lon.strip(' '), lat.strip(' ')\n", | |
" lon, lat = map(float, [lon, lat])\n", | |
" if ret_lon:\n", | |
" return lon\n", | |
" else:\n", | |
" return lat\n", | |
" except:\n", | |
" return None" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"db = pd.read_csv(StringIO(table))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you cannot pull the data using the API, an easy alternative is to export the table to a `csv` file manually and read it separately:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"db = pd.read_csv('/Users/dani/Desktop/Gaza and Israel incidents mapped.csv')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"db['lon'] = db['Location (approximate)'].apply(lambda x: parse_loc(x))\n", | |
"db['lat'] = db['Location (approximate)'].apply(lambda x: parse_loc(x, ret_lon=False))\n", | |
"db['Date'] = db['Date'].apply(pd.to_datetime)\n", | |
"db.head()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Date</th>\n", | |
" <th>Day</th>\n", | |
" <th>Name of place</th>\n", | |
" <th>Location (approximate)</th>\n", | |
" <th>Details</th>\n", | |
" <th>Source url</th>\n", | |
" <th>Image url</th>\n", | |
" <th>Icon 1</th>\n", | |
" <th>lon</th>\n", | |
" <th>lat</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2012-11-16</td>\n", | |
" <td> Friday</td>\n", | |
" <td> Beit Lahia</td>\n", | |
" <td> 31.5515, 34.5089</td>\n", | |
" <td> Firefighters try to extinguish a fire at a fac...</td>\n", | |
" <td> http://www.guardian.co.uk/news/2012/nov/16/pic...</td>\n", | |
" <td> http://static.guim.co.uk/sys-images/Guardian/P...</td>\n", | |
" <td> placemark_circle_highlight</td>\n", | |
" <td> 31.551500</td>\n", | |
" <td> 34.508900</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2012-11-15</td>\n", | |
" <td> Thursday</td>\n", | |
" <td> Police Station in Deir al-Balah</td>\n", | |
" <td> 31.4205, 34.3513</td>\n", | |
" <td> Israeli aircraft also bombed a police station ...</td>\n", | |
" <td> Wires</td>\n", | |
" <td> NaN</td>\n", | |
" <td> placemark_circle_highlight</td>\n", | |
" <td> 31.420500</td>\n", | |
" <td> 34.351300</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2012-11-15</td>\n", | |
" <td> Thursday</td>\n", | |
" <td> Beit Hanoun</td>\n", | |
" <td> 31.5382, 34.5380</td>\n", | |
" <td> Brothers Tareq Jamal Naser, 16, and Oday Jamal...</td>\n", | |
" <td> http://www.maannews.net/eng/ViewDetails.aspx?I...</td>\n", | |
" <td> NaN</td>\n", | |
" <td> placemark_circle_highlight</td>\n", | |
" <td> 31.538200</td>\n", | |
" <td> 34.538000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2012-11-15</td>\n", | |
" <td> Thursday</td>\n", | |
" <td> Sheikh Radwan neighborhood</td>\n", | |
" <td> 31.536297, 34.465828</td>\n", | |
" <td> Violent explosions across Gaza City's Sheikh R...</td>\n", | |
" <td> http://www.maannews.net/eng/ViewDetails.aspx?I...</td>\n", | |
" <td> NaN</td>\n", | |
" <td> placemark_circle_highlight</td>\n", | |
" <td> 31.536297</td>\n", | |
" <td> 34.465828</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2012-11-15</td>\n", | |
" <td> Thursday</td>\n", | |
" <td> Tel Aviv</td>\n", | |
" <td> 32.0718, 34.777</td>\n", | |
" <td> Two rockets from Gaza crashed near Tel Aviv on...</td>\n", | |
" <td> http://www.guardian.co.uk/world/2012/nov/15/is...</td>\n", | |
" <td> NaN</td>\n", | |
" <td> placemark_circle_highlight</td>\n", | |
" <td> 32.071800</td>\n", | |
" <td> 34.777000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 16, | |
"text": [ | |
" Date Day Name of place \\\n", | |
"0 2012-11-16 Friday Beit Lahia \n", | |
"1 2012-11-15 Thursday Police Station in Deir al-Balah \n", | |
"2 2012-11-15 Thursday Beit Hanoun \n", | |
"3 2012-11-15 Thursday Sheikh Radwan neighborhood \n", | |
"4 2012-11-15 Thursday Tel Aviv \n", | |
"\n", | |
" Location (approximate) Details \\\n", | |
"0 31.5515, 34.5089 Firefighters try to extinguish a fire at a fac... \n", | |
"1 31.4205, 34.3513 Israeli aircraft also bombed a police station ... \n", | |
"2 31.5382, 34.5380 Brothers Tareq Jamal Naser, 16, and Oday Jamal... \n", | |
"3 31.536297, 34.465828 Violent explosions across Gaza City's Sheikh R... \n", | |
"4 32.0718, 34.777 Two rockets from Gaza crashed near Tel Aviv on... \n", | |
"\n", | |
" Source url \\\n", | |
"0 http://www.guardian.co.uk/news/2012/nov/16/pic... \n", | |
"1 Wires \n", | |
"2 http://www.maannews.net/eng/ViewDetails.aspx?I... \n", | |
"3 http://www.maannews.net/eng/ViewDetails.aspx?I... \n", | |
"4 http://www.guardian.co.uk/world/2012/nov/15/is... \n", | |
"\n", | |
" Image url \\\n", | |
"0 http://static.guim.co.uk/sys-images/Guardian/P... \n", | |
"1 NaN \n", | |
"2 NaN \n", | |
"3 NaN \n", | |
"4 NaN \n", | |
"\n", | |
" Icon 1 lon lat \n", | |
"0 placemark_circle_highlight 31.551500 34.508900 \n", | |
"1 placemark_circle_highlight 31.420500 34.351300 \n", | |
"2 placemark_circle_highlight 31.538200 34.538000 \n", | |
"3 placemark_circle_highlight 31.536297 34.465828 \n", | |
"4 placemark_circle_highlight 32.071800 34.777000 " | |
] | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Very basic descriptive analysis" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"+ Volume of incidents by day" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"t = db['Date']\n", | |
"t = t.reindex(t)\n", | |
"by_day = t.groupby(lambda x: x.day).size()\n", | |
"by_day.plot(kind='bar')\n", | |
"plt.title('Number of events by day')\n", | |
"plt.show()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x109683190>" | |
] | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"+ Location of events coloured by day" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"f = plt.figure(figsize=(10, 6))\n", | |
"ax = f.add_subplot(111)\n", | |
"x, y = db['lon'], db['lat']\n", | |
"s = plt.scatter(x, y, marker='.', color='k')\n", | |
"for d, day in db.set_index('Date').groupby(lambda x: x.day):\n", | |
" x, y = day['lon'], day['lat']\n", | |
" c = cm.Set1(d/30.)\n", | |
" s = plt.scatter(x, y, marker='^', color=c, label=str(d), s=20)\n", | |
"ax.get_yaxis().set_visible(False)\n", | |
"ax.get_xaxis().set_visible(False)\n", | |
"plt.legend(loc=2)\n", | |
"plt.title('Spatial distribution of events by day')\n", | |
"ax.set_axis_bgcolor(\"0.2\") " | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n9qfAIyLiYynb4PuPh7nrL0H6j6DmX/3eZphpw3cyvNDCdly+MGRdVusUaW8KPCIivuAybcBejCYu\nO99TYXD2KRZlW01walbny1fkkR+GSNDg0qNS9I8mO7ZkkQ6kwCMi4gOTeu3lJ8d/yqn99jS5/DMT\nUjgWmEFvch0oL6m9MWHIhOuP2NZR5Yp0OA1aFhHp4lzX4cZR6wG46chilu/ohWHWf7TEDx8OM3JA\nbevPqIJqjo2U8FFVTofWKpItCjwiIl3ccX3KGdnbBQz65cK0Q0pYsatfvXXeLw7zfnHdORGgVwdW\nKZJd6tISEenSXL5+9Dbyw95l5wUR+Pr4HU2O5RHpzhR4RES6sD4Ri8EjgjiB2n/OB+UmGZqXyGJV\nIp2PurRERLowI8dk57HDeeJvDn/6W7jukqzVJNIZqYVHRKQLO/+0cgAuOdfkhElJvKCjsCPSkAKP\niEgX1a+3y9mn5hEwDVwLvnQBuK6ehi7SFAUeEZEuavZ5DqGQ15pTvsWhajM8NL8iy1WJdE4KPCIi\nXdQxY1wCpoGVcImXefPcZA4DepVx7ERdpSVSlwKPiEgX9cy/A/Q7MkCqujbcxPbCr38Y5ic/ciks\ncPaztUj3osAjItJFbdoC77/jsrfYZd9td1wbyjcHAJf/uqAsq/WJdCYKPCIiXdSbbxncfReEgzaR\ncHrKdXEdCIdNLv98IT17qGtLBBR4RES6tI+3mfz1bfhoh8WGCpvR54cZ9RnvoaBmwOCKOVkuUKST\nUOAREeninn41l7ueLOSN7fkEgrX34IlGDKaeksXCRDoR3WlZRMQnXviHwQv/yHYVIp2TWnhERETE\n9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3\nFHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcU\neERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4\nRERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhE\nRETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERE\nRMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3FHhERETE9xR4RERE\nxAIyJqEAAABTSURBVPcUeERERMT3FHhERETE9xR4RERExPcUeERERMT3jBaWLwOmdUAdIiIiIgdr\nOXBatosQEREREREREREREREREREREREREREREREREfGf/wd++J6s7Vt0ZwAAAABJRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10aa3c7d0>" | |
] | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# You'll need cartopy for a pretty map\n", | |
"import cartopy.crs as ccrs\n", | |
"import cartopy.io.img_tiles as cimgt\n", | |
"import matplotlib.cm as cm" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"bg = cimgt.OSM()\n", | |
"src = ccrs.PlateCarree()\n", | |
"\n", | |
"f = plt.figure(figsize=(20, 30))\n", | |
"ax = plt.axes(projection=bg.crs)\n", | |
"ax.add_image(bg, 9, alpha=0.5)\n", | |
"\n", | |
"x, y = db['lon'], db['lat']\n", | |
"extent = [y.min(), y.max(), x.min(), 34]\n", | |
"extent = [34, 36, x.min(), x.max()] #Manually tweaked\n", | |
"for d, day in db.set_index('Date').groupby(lambda x: x.day):\n", | |
" y, x = day['lon'], day['lat']\n", | |
" c = cm.Set1(d/30.)\n", | |
" s = plt.scatter(x, y, marker='^', color=c, label=str(d), s=40, \\\n", | |
" transform=src)\n", | |
"ax.set_extent(extent, crs=src)\n", | |
"plt.legend(loc=2)\n", | |
"plt.title('Spatial distribution of events by day')\n", | |
"plt.show()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment