{
"metadata": {
"name": "",
"signature": "sha256:5800cfa19d60459dcdc34639edc800c20ecf200f7b1fbf08c6999a6c79cc2b6e"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Using MySQL Weather History Database on Amazon EC2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook shows some example queries using the weather history database set up as described in the complementary notebook [weather_mysqlconfig](http://nbviewer.ipython.org/github/bricof/weather_history/blob/master/weather_mysqlconfig.ipynb). The MySQLdb library is used to manage the interaction with the database. See [this blog post](http://briancoffey.ca/blogpost5.html) for more context."
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Configuration: Libaries, Keys, Convenience Methods"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"import numpy as np\n",
"import MySQLdb as mdb"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"AWSAccessKeyId, AWSSecretKey = ( line.strip().split('=')[1] for line in open('/Users/brian/rootkey.csv','r') )\n",
"sshKeyName, instancePass, mysqlPass, myIP = ( line.strip().split('=')[1] for line in open('/Users/brian/passwords.csv','r') )"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def sqlCall(cmd):\n",
" con = mdb.connect( host = 'ec2-54-91-115-227.compute-1.amazonaws.com', \n",
" passwd = mysqlPass, \n",
" user = 'weatherdbuser', \n",
" db='weather' );\n",
" cur = con.cursor()\n",
" cur.execute(cmd)\n",
" field_names = [i[0] for i in cur.description]\n",
" output = []\n",
" for i in range(cur.rowcount):\n",
" output.append(cur.fetchone())\n",
" con.close()\n",
" df = pd.DataFrame(output)\n",
" try:\n",
" df.columns = field_names\n",
" except:\n",
" pass\n",
" return df"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Quick Views of the Tables in the Database"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cmd = \"SELECT * FROM country LIMIT 5\"\n",
"cmd += \";\"\n",
"sqlCall(cmd)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" FIPS_ID | \n",
" country_name | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" AA | \n",
" ARUBA | \n",
"
\n",
" \n",
" | 1 | \n",
" AC | \n",
" ANTIGUA AND BARBUDA | \n",
"
\n",
" \n",
" | 2 | \n",
" AF | \n",
" AFGHANISTAN | \n",
"
\n",
" \n",
" | 3 | \n",
" AG | \n",
" ALGERIA | \n",
"
\n",
" \n",
" | 4 | \n",
" AI | \n",
" ASCENSION ISLAND | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
" FIPS_ID country_name\n",
"0 AA ARUBA\n",
"1 AC ANTIGUA AND BARBUDA\n",
"2 AF AFGHANISTAN\n",
"3 AG ALGERIA\n",
"4 AI ASCENSION ISLAND"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cmd = \"SELECT * FROM station LIMIT 5\"\n",
"cmd += \";\"\n",
"sqlCall(cmd)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" USAF | \n",
" WBAN | \n",
" station_name | \n",
" CTRY | \n",
" FIPS_ID | \n",
" ST | \n",
" callid | \n",
" lat | \n",
" lon | \n",
" elev | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 000000 | \n",
" 99999 | \n",
" NYGGBUKTA GREENLAND- STA | \n",
" GL | \n",
" GL | \n",
" | \n",
" | \n",
" 73483 | \n",
" 21567 | \n",
" 30 | \n",
"
\n",
" \n",
" | 1 | \n",
" 000010 | \n",
" 99999 | \n",
" JAN HAYEN | \n",
" NO | \n",
" NO | \n",
" | \n",
" | \n",
" 70983 | \n",
" -7700 | \n",
" 229 | \n",
"
\n",
" \n",
" | 2 | \n",
" 000020 | \n",
" 99999 | \n",
" ISFJORD RADIO SPITZBERGEN | \n",
" NO | \n",
" NO | \n",
" | \n",
" | \n",
" 78067 | \n",
" 13633 | \n",
" 79 | \n",
"
\n",
" \n",
" | 3 | \n",
" 000030 | \n",
" 99999 | \n",
" BJORNOYA BARENTS SEA | \n",
" NO | \n",
" NO | \n",
" | \n",
" | \n",
" 74467 | \n",
" 19283 | \n",
" 290 | \n",
"
\n",
" \n",
" | 4 | \n",
" 000040 | \n",
" 99999 | \n",
" VAROO | \n",
" NO | \n",
" NO | \n",
" | \n",
" | \n",
" 70367 | \n",
" 31100 | \n",
" 119 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
" USAF WBAN station_name CTRY FIPS_ID ST callid lat \\\n",
"0 000000 99999 NYGGBUKTA GREENLAND- STA GL GL 73483 \n",
"1 000010 99999 JAN HAYEN NO NO 70983 \n",
"2 000020 99999 ISFJORD RADIO SPITZBERGEN NO NO 78067 \n",
"3 000030 99999 BJORNOYA BARENTS SEA NO NO 74467 \n",
"4 000040 99999 VAROO NO NO 70367 \n",
"\n",
" lon elev \n",
"0 21567 30 \n",
"1 -7700 229 \n",
"2 13633 79 \n",
"3 19283 290 \n",
"4 31100 119 "
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cmd = \"SELECT * FROM observation LIMIT 5\"\n",
"cmd += \";\"\n",
"sqlCall(cmd)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" STNYMD | \n",
" STN | \n",
" WBAN | \n",
" year | \n",
" month | \n",
" day | \n",
" temp | \n",
" dewp | \n",
" slp | \n",
" stp | \n",
" visib | \n",
" wdsp | \n",
" mxspd | \n",
" gust | \n",
" maxtemp | \n",
" mintemp | \n",
" prcp | \n",
" sndp | \n",
" FRSHTT | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 00820920090309 | \n",
" 008209 | \n",
" 99999 | \n",
" 2009 | \n",
" 3 | \n",
" 9 | \n",
" 782 | \n",
" 710 | \n",
" 99999 | \n",
" 99999 | \n",
" 9999 | \n",
" 13 | \n",
" 19 | \n",
" 9999 | \n",
" 806 | \n",
" 716 | \n",
" 0 | \n",
" 9999 | \n",
" 000000 | \n",
"
\n",
" \n",
" | 1 | \n",
" 00820920090310 | \n",
" 008209 | \n",
" 99999 | \n",
" 2009 | \n",
" 3 | \n",
" 10 | \n",
" 678 | \n",
" 656 | \n",
" 99999 | \n",
" 99999 | \n",
" 9999 | \n",
" 12 | \n",
" 41 | \n",
" 9999 | \n",
" 806 | \n",
" 554 | \n",
" 0 | \n",
" 9999 | \n",
" 000000 | \n",
"
\n",
" \n",
" | 2 | \n",
" 00820920090311 | \n",
" 008209 | \n",
" 99999 | \n",
" 2009 | \n",
" 3 | \n",
" 11 | \n",
" 681 | \n",
" 646 | \n",
" 99999 | \n",
" 99999 | \n",
" 9999 | \n",
" 13 | \n",
" 29 | \n",
" 9999 | \n",
" 824 | \n",
" 554 | \n",
" 0 | \n",
" 9999 | \n",
" 000000 | \n",
"
\n",
" \n",
" | 3 | \n",
" 00820920090312 | \n",
" 008209 | \n",
" 99999 | \n",
" 2009 | \n",
" 3 | \n",
" 12 | \n",
" 666 | \n",
" 639 | \n",
" 99999 | \n",
" 99999 | \n",
" 9999 | \n",
" 12 | \n",
" 41 | \n",
" 9999 | \n",
" 806 | \n",
" 572 | \n",
" 0 | \n",
" 9999 | \n",
" 000000 | \n",
"
\n",
" \n",
" | 4 | \n",
" 00820920090313 | \n",
" 008209 | \n",
" 99999 | \n",
" 2009 | \n",
" 3 | \n",
" 13 | \n",
" 669 | \n",
" 622 | \n",
" 99999 | \n",
" 99999 | \n",
" 9999 | \n",
" 13 | \n",
" 41 | \n",
" 9999 | \n",
" 806 | \n",
" 554 | \n",
" 0 | \n",
" 9999 | \n",
" 000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
" STNYMD STN WBAN year month day temp dewp slp stp \\\n",
"0 00820920090309 008209 99999 2009 3 9 782 710 99999 99999 \n",
"1 00820920090310 008209 99999 2009 3 10 678 656 99999 99999 \n",
"2 00820920090311 008209 99999 2009 3 11 681 646 99999 99999 \n",
"3 00820920090312 008209 99999 2009 3 12 666 639 99999 99999 \n",
"4 00820920090313 008209 99999 2009 3 13 669 622 99999 99999 \n",
"\n",
" visib wdsp mxspd gust maxtemp mintemp prcp sndp FRSHTT \n",
"0 9999 13 19 9999 806 716 0 9999 000000 \n",
"1 9999 12 41 9999 806 554 0 9999 000000 \n",
"2 9999 13 29 9999 824 554 0 9999 000000 \n",
"3 9999 12 41 9999 806 572 0 9999 000000 \n",
"4 9999 13 41 9999 806 554 0 9999 000000 "
]
}
],
"prompt_number": 6
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Selecting a Subset of Stations for Further Analysis and Visualization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The database contains weather data for more than 9000 sites. For initial exploration and visualization, we will select a subset of these stations. In particular, the following cells ([7] through [11]) select the longest-running record (ie. the one with the most observations) from each country, breaking ties randomly."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cmd = \"SELECT USAF, FIPS_ID, obs.numYears \"\n",
"cmd += \"FROM station \"\n",
"cmd += \"JOIN (SELECT STN, COUNT(DISTINCT year) as numYears \"\n",
"cmd += \"FROM observation \"\n",
"cmd += \"GROUP BY STN) as obs \"\n",
"cmd += \"ON station.USAF = obs.STN \"\n",
"cmd += \";\"\n",
"r = sqlCall(cmd)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"r.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" USAF | \n",
" FIPS_ID | \n",
" numYears | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 010010 | \n",
" NO | \n",
" 41 | \n",
"
\n",
" \n",
" | 1 | \n",
" 010013 | \n",
" NO | \n",
" 3 | \n",
"
\n",
" \n",
" | 2 | \n",
" 010014 | \n",
" NO | \n",
" 24 | \n",
"
\n",
" \n",
" | 3 | \n",
" 010015 | \n",
" NO | \n",
" 23 | \n",
"
\n",
" \n",
" | 4 | \n",
" 010016 | \n",
" NO | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
" USAF FIPS_ID numYears\n",
"0 010010 NO 41\n",
"1 010013 NO 3\n",
"2 010014 NO 24\n",
"3 010015 NO 23\n",
"4 010016 NO 5"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"idx = r.groupby(['FIPS_ID'])['numYears'].transform(max) == r['numYears']\n",
"longestPerCountry = r[idx].sort('FIPS_ID')\n",
"longestPerCountry.tail()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" USAF | \n",
" FIPS_ID | \n",
" numYears | \n",
"
\n",
" \n",
" \n",
" \n",
" | 11161 | \n",
" 679750 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
" | 11128 | \n",
" 677750 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
" | 11167 | \n",
" 679910 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
" | 11124 | \n",
" 677650 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
" | 11143 | \n",
" 678670 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
" USAF FIPS_ID numYears\n",
"11161 679750 ZI 44\n",
"11128 677750 ZI 44\n",
"11167 679910 ZI 44\n",
"11124 677650 ZI 44\n",
"11143 678670 ZI 44"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fn = lambda obj: obj.loc[np.random.choice(obj.index, 1, True),:]\n",
"selectedSites = longestPerCountry.groupby('FIPS_ID', as_index=False).apply(fn)\n",
"selectedSites.tail()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" USAF | \n",
" FIPS_ID | \n",
" numYears | \n",
"
\n",
" \n",
" \n",
" \n",
" | 255 | \n",
" 7819 | \n",
" 414363 | \n",
" YM | \n",
" 22 | \n",
"
\n",
" \n",
" | 256 | \n",
" 3391 | \n",
" 131500 | \n",
" YU | \n",
" 31 | \n",
"
\n",
" \n",
" | 257 | \n",
" 10227 | \n",
" 601400 | \n",
" YY | \n",
" 3 | \n",
"
\n",
" \n",
" | 258 | \n",
" 11106 | \n",
" 676650 | \n",
" ZA | \n",
" 37 | \n",
"
\n",
" \n",
" | 259 | \n",
" 11167 | \n",
" 679910 | \n",
" ZI | \n",
" 44 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": [
" USAF FIPS_ID numYears\n",
"255 7819 414363 YM 22\n",
"256 3391 131500 YU 31\n",
"257 10227 601400 YY 3\n",
"258 11106 676650 ZA 37\n",
"259 11167 679910 ZI 44"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"selectedSitesList = selectedSites['USAF'].tolist()\n",
"selectedSitesList[:10]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"['035963',\n",
" '789820',\n",
" '788620',\n",
" '411960',\n",
" '409480',\n",
" '603900',\n",
" '375750',\n",
" '136150',\n",
" '377890',\n",
" '664220']"
]
}
],
"prompt_number": 11
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Collecting Site Description Details for these Sites"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following collects the ID, station name, country name, latitude, longitude and elevation for each of the stations on the given site list."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"slist = str(selectedSitesList)[1:-1]\n",
"slist[:100]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"\"'035963', '789820', '788620', '411960', '409480', '603900', '375750', '136150', '377890', '664220', \""
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cmd = \"SELECT s.USAF, s.station_name, c.country_name, \"\n",
"cmd += \"(s.lat / 1000) as lat, (s.lon / 1000) as lon, (s.elev / 10) as elev \"\n",
"cmd += \"FROM station s \"\n",
"cmd += \"JOIN country c ON s.FIPS_ID = c.FIPS_ID \"\n",
"cmd += \"WHERE s.USAF IN (\" + slist + \");\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sites = sqlCall(cmd)\n",
"sites[['lat','lon','elev']] = sites[['lat','lon','elev']].astype(float)\n",
"sites.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" USAF | \n",
" station_name | \n",
" country_name | \n",
" lat | \n",
" lon | \n",
" elev | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 010620 | \n",
" HOPEN | \n",
" SVALBARD | \n",
" 76.500 | \n",
" 25.067 | \n",
" 10 | \n",
"
\n",
" \n",
" | 1 | \n",
" 013840 | \n",
" OSLO/GARDERMOEN | \n",
" NORWAY | \n",
" 60.200 | \n",
" 11.083 | \n",
" 204 | \n",
"
\n",
" \n",
" | 2 | \n",
" 026800 | \n",
" HOBURG | \n",
" SWEDEN | \n",
" 56.917 | \n",
" 18.150 | \n",
" 39 | \n",
"
\n",
" \n",
" | 3 | \n",
" 029740 | \n",
" HELSINKI-VANTAA | \n",
" FINLAND | \n",
" 60.317 | \n",
" 24.967 | \n",
" 56 | \n",
"
\n",
" \n",
" | 4 | \n",
" 031350 | \n",
" PRESTWICK(CIV/NAVY) | \n",
" UNITED KINGDOM | \n",
" 55.500 | \n",
" -4.583 | \n",
" 20 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
" USAF station_name country_name lat lon elev\n",
"0 010620 HOPEN SVALBARD 76.500 25.067 10\n",
"1 013840 OSLO/GARDERMOEN NORWAY 60.200 11.083 204\n",
"2 026800 HOBURG SWEDEN 56.917 18.150 39\n",
"3 029740 HELSINKI-VANTAA FINLAND 60.317 24.967 56\n",
"4 031350 PRESTWICK(CIV/NAVY) UNITED KINGDOM 55.500 -4.583 20"
]
}
],
"prompt_number": 14
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Collecting Monthly Average, Minimum and Maximum Temperatures for these Sites"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The weather observations in the database are recorded on a daily basis. For our purposes, we are only interested in the monthly average, minimum and maximum temperatures, and only for the site list described above."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"siteTemps = []\n",
"for site in selectedSitesList:\n",
" cmd = \"SELECT STN, year, month, AVG(temp), MAX(maxtemp), MIN(mintemp) \"\n",
" cmd += \"FROM observation \"\n",
" cmd += \"WHERE STN = '\" + site + \"' \" \n",
" cmd += \"GROUP BY year, month \"\n",
" cmd += \";\"\n",
" siteTemps.append(sqlCall(cmd))\n",
"siteTemps[0].head(10)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" STN | \n",
" year | \n",
" month | \n",
" AVG(temp) | \n",
" MAX(maxtemp) | \n",
" MIN(mintemp) | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 035963 | \n",
" 1945 | \n",
" 1 | \n",
" 330.0323 | \n",
" 473 | \n",
" 174 | \n",
"
\n",
" \n",
" | 1 | \n",
" 035963 | \n",
" 1945 | \n",
" 2 | \n",
" 453.7500 | \n",
" 603 | \n",
" 313 | \n",
"
\n",
" \n",
" | 2 | \n",
" 035963 | \n",
" 1945 | \n",
" 3 | \n",
" 466.0000 | \n",
" 644 | \n",
" 313 | \n",
"
\n",
" \n",
" | 3 | \n",
" 035963 | \n",
" 1945 | \n",
" 4 | \n",
" 489.9333 | \n",
" 734 | \n",
" 324 | \n",
"
\n",
" \n",
" | 4 | \n",
" 035963 | \n",
" 1945 | \n",
" 5 | \n",
" 545.1667 | \n",
" 793 | \n",
" 324 | \n",
"
\n",
" \n",
" | 5 | \n",
" 035963 | \n",
" 1945 | \n",
" 6 | \n",
" 592.4333 | \n",
" 783 | \n",
" 453 | \n",
"
\n",
" \n",
" | 6 | \n",
" 035963 | \n",
" 1945 | \n",
" 7 | \n",
" 590.0000 | \n",
" 703 | \n",
" 484 | \n",
"
\n",
" \n",
" | 7 | \n",
" 035963 | \n",
" 1951 | \n",
" 6 | \n",
" 590.1200 | \n",
" 763 | \n",
" 441 | \n",
"
\n",
" \n",
" | 8 | \n",
" 035963 | \n",
" 1951 | \n",
" 7 | \n",
" 624.9032 | \n",
" 784 | \n",
" 453 | \n",
"
\n",
" \n",
" | 9 | \n",
" 035963 | \n",
" 1951 | \n",
" 8 | \n",
" 610.3548 | \n",
" 734 | \n",
" 473 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
" STN year month AVG(temp) MAX(maxtemp) MIN(mintemp)\n",
"0 035963 1945 1 330.0323 473 174\n",
"1 035963 1945 2 453.7500 603 313\n",
"2 035963 1945 3 466.0000 644 313\n",
"3 035963 1945 4 489.9333 734 324\n",
"4 035963 1945 5 545.1667 793 324\n",
"5 035963 1945 6 592.4333 783 453\n",
"6 035963 1945 7 590.0000 703 484\n",
"7 035963 1951 6 590.1200 763 441\n",
"8 035963 1951 7 624.9032 784 453\n",
"9 035963 1951 8 610.3548 734 473"
]
}
],
"prompt_number": 24
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Initial graphing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following graph shows the distribution of selected sites by latitude and longitude (note that the rough shape of Africa is visible in the center of the graph). "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sites.plot(x='lon',y='lat',kind='scatter')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": [
""
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEPCAYAAABoekJnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX+QHGd557/PWqxYW7LXKwnZYGP51iaywJHGcoxSC5Gu\nTrtjuJSIrJyxK3ArQ6HKpQIHHkAo4mIfXoPlsM4dlyMuJcQSBJsj5ZNrc7nMaE1pFUSuorOtFQZb\nwfZZgAEbHIXY3G28Bj33R/fs9PR0z/T0z/ed/X6qunam58d+5+3u99vv87w/RFVBCCGExKWvaAGE\nEELshkZCCCEkETQSQgghiaCREEIISQSNhBBCSCJoJIQQQhJRqJGIyJ+JyAsi8rhn35CITIvId0Tk\nsIgMel7bIyJPicgpERkrRjUhhBAvRbdI7gNwvW/fJwBMq+qbAHzNfQ4RWQfg3QDWuZ/5vIgUrZ8Q\nQhY9hVbEqvp1AP/o270NwEH38UEAv+E+fheAB1T1VVU9DeBpANfloZMQQkg4Jt7Rr1bVF9zHLwBY\n7T5+PYDnPO97DsAb8hRGCCGkFRONZAF15m9pN4cL53chhJCCWVK0gABeEJGLVPV5EbkYwI/d/T8A\ncKnnfZe4+5oQEZoLIYTEQFUlzudMbJFMARh3H48DeMiz/yYR6ReRywFcCeB40BeoqvHbbbfdVriG\nXtFpg0bqpE7TtyQU2iIRkQcAbAawUkS+D+D3AdwF4Ksi8n4ApwHcCACq+oSIfBXAEwB+DuB3NOmv\nL5DTp08XLSESNui0QSNAnWlDneZQqJGo6s0hL20Nef+nAXw6O0WEEEK6xcTQ1qJg586dRUuIhA06\nbdAIUGfaUKc5iMXRoUBExOaIFyGEFIKIQHso2b4omJmZKVpCJGzQaYNGgDrThjrNgUZCCCEkEQxt\nEUIIYWiLEEJIcdBICsKWuKkNOm3QCFBn2lCnOdBICCGEJII5EkIIIcyREEIIKQ4aSUHYEje1QacN\nGgHqTBvqNAcaCSGEkEQwR0IIIYQ5EkIIIcVBIykIW+KmNui0QSNAnWlDneZAIyGEEJII5kgIIYQw\nR0IIIaQ4aCQFYUvc1AadNmgEqDNtqNMcaCSEWEitVsPY2A6Mje1ArVYrWg5Z5DBHQohl1Go1bN8+\njrm5fQCAgYHdOHToIMrlcsHKiM0kyZHQSAixjLGxHZie3gZg3N1zEKOjUzh8+MEiZRHLYbLdQmyJ\nm9qg0waNAHWmDXWaw5KiBRBCuqNS2YVjx8YxN+c8HxjYjUrlYLGiyKKGoS1CLKRWq2Fycj8Ax1iY\nHyFJYY7EA42EEEK6hzkSC7ElbmqDThs0AtSZNtRpDjQSQgghiWBoixBCCENbZHHC0d2EmAGNpCBs\niZuaqrM+unt6ehump6/E9u3jxpuJqWXphzrTxRadSaCRECuZnNzvThEyDuB6zM3tW+gOSwjJF+ZI\niJVwmhBC0oU5ErLoqFR2YWBgN4CDAA66o7t3pfb9zL8QEh0aSUHYEjc1VWe5XMahQ04rZOPGL6Q6\n+21z/mVbavkXU8vSD3Wmiy06k0AjIdZSLpdx+PCD+OxnP5XqFCHN+ZfxrvIvbMmQxQhzJIT4iJt/\n4TohxGaYIyEkReLmX5K0ZIDuWjNs+RCToJEUhC1xUxt0pq3Rm38ZHZ1KrVXRTmc3eZmscjhRdJoE\ndZoD1yMhJIByudy1eSRZJ6S5NQPMzTn7gjQ4730PgCn3ve8JfS8hecAcCSEpEnedkG7yMtdc8zac\nOPH3AD7r7vkoSqVfwmOPHUusnyxeuB6JBxoJsZGwRD2AFmO64opfxjPPnAfg9QB2AXgepdJ9eOyx\nma7+HxfGIl6YbLcQW+KmNug0TWNYIrydznpeplT6EwwN3YG1a9fikUceacqFbNt2E664ooRnnnkO\nwAiAegvmcaxcuaIrfe1yLKaVZxjUaQ7MkRCSIv6WxbFj410l60+dehpzc/tw5gxw8uRHcPbs++CY\nRQ3z80vwzDMfdt9Z71W2D319FVQqX46ssZt8DCFRYGiLkBRxch2XA3jW3XM5RkefjTQHWFCeBLgX\nwP8CsAONFkj9tSkAl2P58r/Apk3XRg5RcZ4yEgRDW6QnsXGsxIsvvgCnkt/mbgfdfd1Qg2Mc90Lk\n2+73/TDgfU8A+BO8/PKnuuoGnPU8ZWQRoqo9tTk/yXyOHDlStIRIFKWzWq3qwMBqBQ4ocEAHBlZr\ntVoNfG/RZVmtVnV09AYdHb1Bh4evdjWrux3QUmlzi07vZ+q/q1qtan//oAIrF373kiUrtFQa0VJp\nRPv7Vy3s7+u7UJcvv7Tlf42O3tC1Zn+5Fl2eUaHOdHHrzlj1rrE5EhE5DeAlAL8A8KqqXiciQwD+\nG4DLAJwGcKOq/rQwkSSUpL2CbInj+3MifX0fAfB403v8ifA777wTv//7f4izZ68EMNKUR3nzm9fj\nxIlbUP/dP/85sHKlE3ZqLtMHMDm5H9PTj8NpvQDA5ZF1xxknQ0gocR0o6w1OkHnIt+9uAB93H+8G\ncFfA51LwZpKEbloTYYyO3hD7bjtPgnT29a0I/e3ValX7+i5UoKLAJgVWKLBj4bd187snJiYUOH/h\nfwHn68TERC6/Oy7tWkKkWJCgRVK4YYQKc4xkhW/fKQCr3ccXATgV8LlUCpXEJw0TSMOM8iDot5ZK\nm90w1zpdvvyNOjQ0vFDBO++vKDDoGskmBc7TUmlEVbszB1vMto4tx3SxksRITE62K4CHReQREfmA\nu2+1qtYzly8AWF2MtOTY0re8KJ3dzHdVZFkGJa4/85k92Lz5GjzzzHN4+eVP4cyZ/4BPfvJuXH/9\n9Xj00ZMA/hzAWQC/7W4DeOmll1Cr1XDPPfcB+ACcHllTAEZxzz335drhIKvyTDqppZ88j3uSjh+2\nXOtJMDZHAmBEVX8kIqsATIvIKe+LqqoiEtjPd+fOnVizZg0AYHBwEBs2bMCWLVsANA5q0c/rmKIn\n7Pns7GzXn9+69a04dmy3O+fUk+jv349K5YGu/3+5XMbSpUs7vn92draw8lm6dCluv/1WPPywM+/V\n1q23YunSpa4hfA5OOg8APoBa7V4Av+s+/wKcRvVJAKvw7LPfw7Zt78X8/HlwLssHAdwJYB/OnLkE\n09OX49ixcdx++6247rrrsGXLFlQqu3D06M2Yn38SwFUYGNiNrVtvxczMTKLfl2V5Ak8CmAHgPH/2\n2e/g2mt/DUNDq1Cp7Ip0vPN+fvz4cdx++z2uCT6Jo0dvxtTUAyiXy4WXZ5LnMzMzOHDgAAAs1Jex\niduUyXMDcBuACpzQ1kXuvovB0JaxpB0Lty22PjQ07As7bWoJQwGbFVjthroucfeNuL226uGveojL\neZ8/dFWtVrVUGtGhoWEtlTYbXTb+0FZ//2BTTzRTQ122hRDjgl7rtSUi5wI4R1VfFpHzAIwB+I9w\n2vrjAOrt44eKU0nakWavoKSjxYvg1ltvwSc/+SHPnlMB73oGwHvghLrqPa5Ww2mpfAnAWvdx/Xfe\nC2d+rWa8o+G3bze3bOrhyno468UXm3uomdozj0QgrgNlucG5qmbd7VsA9rj7hwA8DOA7AA4DGAz4\nbFoGnSm29C03QWenO0ITNAYxMTGhQ0PDOjQ0rOPj49rff6HnbnyVLlt2saelUnVbHTsUOLcpEe+0\nXDapyPKWO/awZH8S8irPpHf6eelM2knA1PPTD3qtRaKqzwLYELD/DICt+SsipHv27t2LvXv3Ljxf\nt+7uhVxKpfIlAMA73/lbOHsWcFodB+G0UM6Fk4R/HM7o9WsBfAOqr8EjjzzS8Y795MlvoVarGX9n\nn2T9ljzxt6QqFTNbfIUS14FM3WBJi4REp5e7jU5MTLjjSuq5kCHPXXq9q3Djt/f1XdgyLkXEm0tZ\nFZhLMZU0cl+25c9MBb04jiT2D6KR9CS9XFk0T7GywWckrUl6r0k4RrLMEwob7GgkvVSWvXyTkTc0\nEguNxJa4qQ06bdCoGk2nM99WvSeTt+dW1c2VXKLLll28UFmGjawPq0yDek7VB1DWPxO3PMMMKivj\nOnLkiBU9qmw5P5MYiZE5EkIWK+VyGVNTX1qIx6tei4cf/jCcibpvAXALfvazj2LbtpswNfWVwO9Y\nv/4toTH8xqDAiwB8BvPzfThx4loAVy/0hquP5eiGsJ51AKzrcUdiENeBTN1gSYuEFI/pIR5/68HJ\nlVTdx5sWdHcT2mlM0RL8vXHv5sNaBlm3GBjaSg+wRUJIdwTdQe/d+0EcPfoYADPWMffPgOywH846\nJw3Wrl2L7373Dlx22UX4zGfa3+1XKrvwta/9Fs6enez4vd0TbybiJKTZo4rr2CcgrgOZusGSFokt\ncVMbdMbR2HqnXGnqPZXFnW23OoPu5p2E+vkqcqEOD18da2R4qbQ58Hvrnw/S2an1FjbZZJYthjTP\nzcZaME6nhf7+QSN1ZgmYbKeRZIUNOtMxkva9o7ohrNI9cuRIVwlpfyUsMqivfe2Qp7tvPM3+7+3r\nu1BLpZHQZHsUM2gXwsoy2Z4WpVJ9apq6Ea5cmJE5KTZcQ6o0EiuNhBRLa2W6IhUjaXdnG1Yht/ak\nWqWl0oiOjt6gExMTTZVwc4UdL//gzM+12Z2fa6Rj5R4lz2FD76l2tM6NdkCHhoaLlpUrSYyEORKy\nKPHH1jdv/gjuvHN34lHWe/bcgfn5JXBGpgPz8x/Fnj13oFwuh6766Dxu7J+fB06cuBfANhw7trup\nl1PztOu74IyEb2jevPmDGBtz8hT+OH+tVsOePXfg5MkncPbsH7r/d3fXvzEIW0aph3HZZZfgzJnW\nfSQicR3I1A2WtEjyaO6mEVKwoVmelsY0yqv5zraqwCZdsuR1Wq1WdePGt0fu2eS0Nlrv7NuNA5mY\nmIjwWudwWJzQlmrz3GJ5rNSYfo5klXpbhcyRMLRlPFmfXGklOW24CEzRWK1WdfnyN7qV9YR6u9gO\nDKzW973vfZFCW06svhpa0YcZXrMhVZti/o3lfTuHoOIk24vohpv2cff+Rn9IMQmmnJ+doJFYaCRZ\nY2PMOu872jRpNYNBt+JuLv9OyfZSabObY2k1m04VW/MxH3EN7Qb1jj1pzDKcboVv4/kWxmIdm0Ij\noZG0YNuF3c1a5SYS3lW3+/L3m0bUiq3xvoo6088Pu62SZQqMeDoUVLSvb0WqC2HZdr61o5d+SzfQ\nSCw0Eoa2mknSa8aE0EHYnFfe8t+3b19q3x1WsVWrVXedE++MwisVOFe3bt0a2qrxmlccnb0Q2qqT\ntpGYcH5GIYmRsNdWj8I1FPIlqNfS3r0fwdGj9fVH4s1hFYd//udfAPgl+FdXfOyxZ/EP//B0y/v9\no/yPHv0I1q9f39X50kvnm+090AohrgOZusGSFglpxobQVpSEcxYD77oPbQXPzRXWwgsa6Z52KMf0\nec382KY3DcDQVrpGshhPIhMwOdledAK2+2S7evI0TmgrqEyr1WpqgzHbaW9XdrzezIBGkqKR5FVh\n2BI3tUFnHhrTiJtnrTPYSFbosmUXhxpz0GzAIstSPec7TZ8S93qz4dxUtUdnEiNhjsRH2OhjW+O9\nZPEQFNs/dOjLEc7dq+GsF78fwBMQ6cOePZ8BgMzPe15vvUFf0QIWK1u2bClaQiRs0JmHxkplFwYG\ndsOpcA+6CdhdXX1H1jrrCe/R0SmMjk5FWkCq8buehzP1+/dw9uw6nDjxCn7919+NO++8E2NjOzA2\ntgO1Wi3wO2q1Wtv3pFF2Qf/jlVde6ait2+/MAhuuocTEbcqYusGS0Baxj16N5VerVbf79Ur1z4Ar\nsrzttdBNR4CwgZidPh/0Hv90MN1ep7zOWwFzJOkZiWo+FYYNcdP6/FCmV5x5lmWSc8PkY+7kMS5x\nK9YjnhzLJW3zQmnkjoIGYIbPeKwLY4yA3bH/b56DDk0+7l6SGAlzJAGUy+VFH6NtjC3YCeAqrrWN\n8HXJe6FMKpVdePjhI3DuxbwMZv6/vddbUBmvXbs29ndz1cOciOtApm7gOJJUyGOtbdvCRL0+dcbE\nxIRn0awDumTJisB5v7ykHSIKKuNSaaRlZt4ooa122hjaagVskRCb6I07+xqAe/Hooz9BrVazTHsw\ne/fuxbXXXuu5g/8yALQdrZ7fiPZXAdy78Pjaa6/t+H/b9QjrpZH4RhDXgUzdYEmLxPS4aeOObXcq\nd2zeFoizrGl9SnNnHIMNcxk1T4q4suu7WdOPeZ0idQa1FMJG3nfSaUoL0pbjjgQtEnb/JYHU79g2\nbvzbyF1J6/i7VdZbINPT2zA9vQ0nTjwK4E8BbHO3g3jxxRcy/DXpUC+ToaGHAHwWzp2u07JqXrmQ\nxCWoC/PKlStifVca3Y6LIK9uyakS14FM3WBJi6RXCbqjHB5ep421MSYUGPLdKVZ0+fI3aqk0osPD\nV7triac3xXnamHKnu1hot9Z9pzybbbm4InM3YPdfGkkRBF2krZVsRYELPGMTVmjzcq/1lfwq6kza\nWH+8VoEhHR7eYFwFsFgStSZVwnHWaDFJf1SKvEmhkeRkJGmemLbETcN0hl3IrReCf43wTdo8t1P9\n9Rs8r13gmsomddY8v6BteWdRlmnO9Ft/78aNbze2QvOvR2K6WTrnWfg4EpP0d3N+0kgM2bIykrRP\nTNuNpHHCVxdMoFQaaSmn1pllK24X04prFPUwV91I3uK2RhpGApyvpdJI1xrjkuaxbv6u3ZlXaO1G\nkLdb1Mr7e/v7L3Q7RJgbvutkJEVUyGFl3M35ydCWIVtWRuJcWM1rYJt0YeVJY0qNtQo0+vf39V3Y\nErsO6u8/MTER8Ho9tDXkhreajWTZsotz+31hlVCcFmmeFVq7XEK7yil85Li5RhLnN/n1pxlhSPvm\no4iQHI0kYyNx1mzwLl3qVHwmXVh50XzBvCVSZRM1TOQMPBtSZ43xc9WZnuMSBc7VgYFVefw8VW03\nKG5wwdz6+wcjhbScCnmTe/PRqKSzqCDCKs9OlWrw791sTGjIj/d8KZU2R2plBa2BkvVAStvqBxpJ\nxkYSdJL09a1YlKGt5pBWsgWRggymWq0q8FrXSNa6RnKBLllybmSNSQnueXa1+ic0bBdu83+H89kb\ntd6ZIIuKuVsjaVTIm5tGsPf3t7YsTTKRqKHCdvrTrviDxrqUSptV1Z5rnUZSgJHUT5K42HJyhRuJ\nd0Gker7jwsgrGzYP7tukfX0rFj4rcr5rJEPaSMCfH1ph5JFsb4R6GjmhduG2oHPGMZFGy6RduCxO\nJR41tNXfP6jDwxvc/FXF3bdKS6WRhWS7qTSX65GF1mLRIUcn9B18o2HLtU4jydhITOoBUjSNsqj3\ntppQ4MJIZeMNSSxffqk6obHGnXA9x9LXd4EC52kjR+Ik54sMFTh3nP6VBMPDW8FGssl3MzISK6fR\njk7G5J+3yruuuw2hmKDu5d6wc1/fhQudPtqRTWgrvdkaioBGkrGRqNrZJz0rqtWqlkoj7gXsHxOy\nKTAH0NwCab5z89+lO3kS/3vWFnphVqtVFfEPpAyvfFtbAataJkAMm/ojy3h7sMHdYI2RdO4V6Bh2\nFGMwNdleFDSSHIwkbWxp7rbT2RryCe+d1ag0wyqyRoW5fPkbA94zlGtoK4jmij/cNOv4e69dccV6\nd9T+SMiYm+yMpP7/nONVUW+IDljbVPGZfm56x+UEmXFRxphG999O35UlNBIaSWZ00tka6qpf0P6Q\nwwoNN5JNTXdxQZXD8PCG2BrTorlV1eie3KkHV+NzzRNgxu2uG193vYV3vrs1QnTe3JZN52brb2uE\n6uLkTrLS2Q1FtW5oJBYaSS/R3DKpV/5hxtIc2vImeb09t/zrT5gSJqhWq7ps2cXaTQ+udp010ky2\nd/P//fmatO/e87yjrt98NHceGGw6h9Kcvbqb7zF97JEXGgmNpHCixK7rhtGu/7/3+7xhIRPuLOu0\nmmZFlyx5Xai+LLqPd0PeRhJlDEcWx9P7vWH5p7jfG6eFEPdzNBIDtqKMpNuLw6bwQVT8lX8azfPm\ni7GifX0rWmYGzrssW3Ml7dcmmZio92y7Sr1dpvOK4UdJ/KdZnu0qwjTDNu10plkZx/2uxueOdPU5\nhrYM2IowkjgHvheNxE8ad57NAyCDDSXvsmwOvflDeM0j1/0D6BxDmeiqYkujHP3f0e47szSSNCv4\nTh1BOt2ApPF7on2uOyOp62eyfZEZSVFN0cVA8wDI4N5hRYS7mntBhXc/DQsreXVPTEzo0NCwDg0N\ntwzotLFbaTvNeV4rzd3U45df3qGtoqCR0Eh6ltZeYWaVdbteQ2Fdeb0tFifsdb7n8+c3mYmt51a7\nTgR5Vq5plV+eyfaioJEUbCQMbWVL+ABIp2LYuPHthesLmpyxXnm0mxsqqEUzNDS88HoRRpL1MU+r\nct23b1/H7zHBiE24hqKQqZEA2BdlX14bgOsBnALwFIDdAa+nUqjdwmR79oSFKkyYG6rdzYR3AJ3/\n3OhkJEWER0w65mE4eap6d/Lmudr87ys6vJRGeebRssnaSE4E7Hs87j9MsgE4B8DTANYAeA2AWQBX\n+d6TUrGSNMjiAjA1XNCtrmq16q5nHx7a6vZ7Te42nSZOS6N57rP6XG1+TD1fopKXGWZiJAD+HYDH\nAfw/9299Ow3gy3H/YZINwK8CqHqefwLAJ3zvSbFoSRJMuBs0leay2aHAhXrOOat0eHhdop5Z3p5K\nXoPKu+yzrrwdI2kNc9qQP+qEv+zyCs9lZSQXuHf+XwFwmft4DYAVcf9Z0g3AbwL4E8/z9wD4L773\npFeyGWJD+EA1mc68LoAosXIT8JZlc9l0HovSidY8TfyyT3pu5nEDUa1W3eUGzDeSpEvtpjm4sh1J\njGQJQlDVfwLwTwBuAgAReR2A1wI4T0TOU9XvhX02QzTKm3bu3Ik1a9YAAAYHB7FhwwZs2bIFADAz\nMwMAXT9/5ZVXMDm5H2fO/AQ33vjr+PjHP57o++rE/Xxez2dnZxN9HngSwAwA5/mZMz/BzMxMavru\nvvtu7N17B37+8z8CABw9ejPuuOMTiY9P1s8bzAC4E8BnAYwDmMHc3E5MTu5HuVyO9H3Hjx/H7bff\ng7m5fXDK+2YA6zzf7/lvEb5vdnY20e/bu/dOV0u83xPleblcxi23/Cbuu+93ofokgKswMLAbW7fe\nmur5lcbzbsrTKbudbtkBc3NP4uWX/woDA7sxNwcAT6K/fz8qlQcS65uZmcGBAwcAYKG+jE0npwGw\nDU5i+/8CeBbAWQDfjutcSTYAm9Ac2toDX8IdGbRIGKKJRx7lZkKvnDg0l02yEE0jX9BYC8NZ66WY\n0FbeY0VsaI1GJazseiHZ/k0AK+Em3QH8SwB/FvcfJtkALAHwDJwQWz9ySrbbWlmZQD6xcjuPTb1s\n/ItNDQys1vHx8dBBin6CVudbtuziVJLtcY4fb7ziU2TZZW0kj7p/TwI4x338zbj/MOkG4B0A/h5O\n7609Aa+nVKwNsqisFkOOJA8a3UDNr7Q6TelRr7DHx8e1U08uL+3WC0+iM0mllscdtOnnZp0408gX\n0crK2kgeBrAcwB/BSbx/DsDfxv2HWW+2hLZ69SIoAhuT7e3oNLbET9o3OnWdprf2bDg3VdPXmZXR\nZG0ky+CM33gNgJ0APoQCe25F0JtKofrptVgsMZdujSTKjU6c89d0I4lCr123WYa+MjUS27asjISQ\nOllXTp3m3+pW02KZdNCP7fqDyNLcMzESAD8D8HLI9lLcf5j1ZouRLNZmeRbkqTFJ5RRFZ90Qhoc3\n6LJlF0dKtnei28rHq9PkO/pO5WlKiyrN89NUI2k3jmRZ2GuLkVqthsnJ/QCASmUXyuVyT/wv0h2T\nk/s9YySAuTksjJFISq1Ww/bt4+73AwMDu3H//f+10ONfLpd5/nVBN9dunOu8UtmFY8fG3TElzjlS\nqRxMLjwpcR3I1A2WJNtN+F+ke7K8I8zqu5OeUya3SuoEacz7Wurm/5nYIw7MkWRrJHk2kU1pjpNg\nsqycsjz2cSdztOHGJsrMy3mYYDfHz8TrnEZioZGExU1NO8GYI2klbuXUSWdec1R1WoI2fE6w4s7H\noDI3rZtymI6g426KZi9JjCQ0R7LY8cYvN2++BseO7c4lLmlsDJQskFXeoFwu49Chg564+cHU/08j\nx3MRgN04e3YSJ04A27eP49Ch9P9fGvhzR8eOOVqXLl1asLJmurl2e+46j+tApm5IoUXivzPs7x/U\n4eENOjQ0rKXSSOZNZBti0sROGnfC0e6ITQhtdbp7N0GjV0s3YcOg9/bkyHbbtjSMJO0pvgmJQtwK\npNvKy6l0o08UWfSNTZQwUNEa06Jn59qybUvfSLKJZdqQe1DNRmfaF30vlGUWgwbb3fEGLVnszz2Y\nUjmH/cZeOO5+isydJDES5kgCaI5f/rBoOT2FP9599OhNePOb12PlyhWLesxM3PEpYZ8DEJhXqH/f\nypWrsX49ANznln1zfiQsL1HE8QnLHbWu7UIKI64DmbohpV5b7ab4trnpXDQMGwYT90407HNB++u9\ns6K0fEzsVZQFprS6vHqiHJ8sdIOhrfSNxIvXVEqlzcacdDaSR9jQRtIObQUZgdPVdyRSmS8GIzEp\nSe/X1c4kstJNI8nISPyDuNI8eL0Y341C80WQbGXArDRmRZRxJGkl26vValMOBFitQCVwZmF/mR85\ncsTYStZL0uOel1mmfX5mpTuJkTBHEoI/Rvy1r1Vw9uwksphjaTHhjXe/+OI5+Pa3P4b5eec16/vS\nJyTu+JSgz5XLZaxfvw4nTtwL4PUADgJ4Hpdd9gjm5jqPicpjTAvpIeI6kKkbUmqRtLp+57tn0+Kt\nNsAyy46wVkUaYx16ARtaXUEwtGW1kVRCu0uq2ntSkt4gyuC2btdwXwzntGlGGVUPk+2WGEnQRdTu\nQuw2btkrcf24pHkhsCyjrZAY1RRMm8MqjF477kUbdxIjYY4khLAY8d69BQvrAUwao2AbQWtYRBmD\nkuU6KiQdrD5GcR3I1A0FrZCY192EaU3xOASPcRgJ/V298JvToJuuvv6WQ7v3tAuL9XpoyySKbgGC\noa3ijUS/x6JAAAAN9klEQVQ1+wqvVy7sbvJPvfKb0yCsokkS2ur0WZp4fhR9rtNIDDGSbogT3y3i\njiWruba8F0xf34rQ3xXlN/darNyLtyJvN5iwPn+WM0P15sAKKMgUgsp348a3J/qdedGLx71I405i\nJMyRkNzx559efPEtOHGiYFEG4s8l9fd/DP39Hw4dd3Pq1NOYm9uHM2eC1xfh+uvmY+0xiutApm6w\npEUSh6KbvlnRaQbbXvzNUQibLyvojjVua3Uxly9pBmyRLA56dbRxu9/Vq785LitXrsDhww8CcFos\n11zzNnz3u8/j1VfnAVze9fexfM0kqHee0cR1IFM3WNIi6cX4blHYoFG1e52dWmr9/YPqnT0ZOF+B\nSuKWRa+WZ1GkedyzBGyRENJ7tGstTE7ux/z8WgC/jfq4AwAYGroDGzc+y5aFxdg4noRGUhBbtmwp\nWkIkbNBpg0Ygns5uk68bN65fCH3FpZfLswhs0ZkEGgkhFlKp7MLRozdhfv6jC/v6+z+GSuVLBaoi\nadC8Qqsds2L3FS1gsWLLMqE26LRBI5CuznK5jKmpr6BU+iUMDd2BUuk+TE19KZXwx2IszyzpVmc9\npDk6OoXR0Skrpg9ii4RYgXW9WHLA2jEHpCO2HVtxkvW9g4hor/2mxY5/YN7AwG4r7tIIsQkRgapK\nrM/2WqVLI+k9xsZ2YHp6Gxq9k5xmf9KkMiGkQRIjYY6kIHo1vlsENmgEqDNtqNMcmCMhxmNjLxZC\nFhMMbRErYLKdkGxhjsQDjYQQQrqHORILsSVuaoNOGzQC1Jk21GkONBJCCCGJYGiLEEIIQ1uEENLL\n1Go1jI3twNjYDtRqtaLltEAjKQhb4qY26LRBI0CdabNYdNZndpie3obp6W3Yvn3cODPhOBJCCDEY\nG9YnYY6EEEIMJq8pgpLkSNgiIYQQg7FhZgfmSApiscR388AGjQB1ps1i0WnD+iTGGYmI3C4iz4nI\nCXd7h+e1PSLylIicEpGxInUSQloxvXeRrZTLZRw+/CAOH37QOBMBDMyRiMhtAF5W1Xt8+9cBuB/A\nrwB4A4CHAbxJVc/63sccCSEFwHVj7KYXx5EE/Zh3AXhAVV9V1dMAngZwXa6qCCGhNPcucgylPtEm\n6W1MNZIPishJEfmCiAy6+14P4DnPe56D0zKxksUS301KlFBJ0RqjQp3pQp3mUEivLRGZBnBRwEt7\nAfwxgE+5z+8AMAng/SFfFRjD2rlzJ9asWQMAGBwcxIYNG7BlyxYAjYNa9PM6pugJez47O1vY/6/V\nati27WbMz+8CcBWOHRvH7bffiuuuu67p/bOzs8aUVy88j1uelcouHD16M+bnnwRwFQYGdmPr1lsx\nMzNj1O/L+7mp5+fMzAwOHDgAAAv1ZVyMy5F4EZE1AP5SVa8WkU8AgKre5b5WBXCbqv6d7zPMkfQI\nXGLXPrhujL30VI5ERC72PN0O4HH38RSAm0SkX0QuB3AlgON56yP2YkKPIhM0ZInpvYtIRqiqURuA\nLwL4JoCTAB4CsNrz2u/BSbKfAlAO+bzawJEjR4qWEIkidVarVR0YWK3AAQUO6MDAaq1Wqy3vi6Ix\n6ndlyb59+wrXEAWem+lii0637oxVbxs3sl1V/22b1z4N4NM5yiEFUh+I1QiVxO9KasJ8RV/96v8o\nXAMhWWCckSwW6skv0ylaZ7lc7ljRFq0xKkNDq4qWEAlbypM6zYFGQhYFJsxXZIIGQrLAuGT7YqHe\nDc90bNAZRaMJ8xUtXbq0cA1RsOGYA9RpEmyRkEVDlDDZYtBASNoYPY4kDhxHQggh3dNT40gIIYTY\nBY2kIGyJm9qg0waNAHWmDXWaA42EEEJIIpgjIYQQwhwJIYSQ4qCRFIQtcVMbdNqgEaDOtKFOc6CR\nEEIISQRzJIQQQpgjIYQQUhw0koKwJW5qg04bNALUmTbUaQ40EkIIIYlgjoQQQghzJIQQQoqDRlIQ\ntsRNbdBpg0aAOtOGOs2BRkIIISQRzJEQQghhjoQQQkhx0EgKwpa4qQ06bdAIUGfaUKc50EgIIYQk\ngjkSQgghzJEQQggpDhpJQdgSN7VBpw0aAepMG+o0BxoJIYSQRDBHQgghhDkSQgghxUEjKQhb4qY2\n6LRBI0CdaUOd5kAjIYQQkgjmSAghhDBHQgghpDhoJAVhS9zUBp02aASoM22o0xxoJIQQQhLBHAkh\nhBDmSAgxmVqthrGxHRgb24FarVa0HEJSh0ZSELbETW3QabLGWq2G7dvHMT29DdPTV2L79nHjzcTk\n8vRCneZAIyEkQyYn92Nubh+AcQDXY25uHyYn9xcti5BUYY6EkAwZG9uB6eltcIwEAA5idHQKhw8/\nWKQsQlpIkiNZkrYYQkiDSmUXjh0bx9yc83xgYDcqlYPFiiIkZRjaKghb4qY26DRZY7lcxqFDTitk\n48Yv4NChgyiXy0XLaovJ5emFOs2BLRJCMqZcLqNcLmNmZgZbtmwpWg4hqcMcCSGEEI4jIYQQUhyF\nGImI/BsR+baI/EJErvG9tkdEnhKRUyIy5tm/UUQed1/7z/mrThdb4qY26LRBI0CdaUOd5lBUi+Rx\nANsB/I13p4isA/BuAOsAXA/g8yJSb2r9MYD3q+qVAK4Uketz1Js6s7OzRUuIhA06bdAIUGfaUKc5\nFGIkqnpKVb8T8NK7ADygqq+q6mkATwN4q4hcDGC5qh533/dFAL+Rj9ps+OlPf1q0hEjYoNMGjQB1\npg11moNpOZLXA3jO8/w5AG8I2P8Ddz8hhJCCyaz7r4hMA7go4KXfU9W/zOr/2sLp06eLlhAJG3Ta\noBGgzrShTnMotPuviBwBUFHVx9znnwAAVb3LfV4FcBuA7wI4oqpXuftvBrBZVX874DvZ95cQQmJg\n8xQpXuFTAO4XkXvghK6uBHBcVVVEXhKRtwI4DuC9AD4X9GVxC4IQQkg8iur+u11Evg9gE4C/EpG/\nBgBVfQLAVwE8AeCvAfyOZ3Th7wD4UwBPAXhaVav5KyeEEOKn50a2E0IIyRfTem1FRkT+QESeFJGT\nIvLfReQCz2vGDGoMG3wpImtEZE5ETrjb503U6b5mTHn6dN0uIs95yvAdnTQXhYhc72p5SkR2F62n\njoicFpFvuuV33N03JCLTIvIdETksIoMF6PozEXlBRB737AvVVdTxDtFp3HkpIpeKyBH3Gv+WiHzI\n3Z9OmaqqlRuAUQB97uO7ANzlPl4HYBbAawCsgTMWpd7yOg7gOvfx/wRwfQ461wJ4E4AjAK7x7F8D\n4PGQz5ik06jy9Gm+DcCtAfuDNPcVeK6e42pY42qaBXBVUXp82p4FMOTbdzeAj7uPd9evrZx1vR1A\nyXuNhOkq8niH6DTuvITTg3aD+3gZgL8HcFVaZWpti0RVp1X1rPv07wBc4j42alCjhg++DMRAnUaV\nZwBBnSuCNF+Xq6pmroOT1zutqq8C+Iqr0RT8ZbgNQH3RlIMo4Liq6tcB/KNvd5iuwo53iE7AsPNS\nVZ9X1Vn38c8APAmnQ1MqZWqtkfh4H5w7YsCuQY2Xu03fGRF5m7vvDTBLp+nl+UE3vPkFT7M8THNR\nvAHA9z3Pi9bjRQE8LCKPiMgH3H2rVfUF9/ELAFYXI62FMF2mHW/A4PNSRNbAaUX9HVIqUxO6/4YS\nZVCjiOwFMK+q9+cqzkMUnQH8EMClqvqPbk7iIRF5c2YiYecg0Taa98KZf+1T7vM7AEwCeH/IVxXZ\nq8TkHi0jqvojEVkFYFpETnlfVFUVA8dmRdBVpGZjz0sRWQbgQQD/XlVfFmk0nJKUqdFGoqqj7V4X\nkZ0A3gngX3l2/wDApZ7nl8Bx0x+gEf6q7/9BHjpDPjMPYN59/JiIPANn3IxROlFAeXqJqllE/hRA\n3QyDNKeurQv8ei5F891eYajqj9y/PxGRQ3DCFy+IyEWq+rwbwvxxoSIbhOky6nir6kJ5mXReishr\n4JjIl1T1IXd3KmVqbWhLnNl/PwbgXar6z56XpgDcJCL9InI5GoManwfwkoi8VRwbfi+Ah1q+OGPZ\nCw9EVorIOe7jf+Hq/D/uhW2MThhcnu6JX2c7nFmlQzXnqc3HI3BmrF4jIv1wZrieKlAPAEBEzhWR\n5e7j8wCMwSnDKQDj7tvGkf/5F0aYLqOOt4nnpXuNfgHAE6r6nzwvpVOmefQYyKgXwlNwpk454W6f\n97z2e3CSQ6cAlD37N8I5qE8D+FxOOrfDiY/PAXgewF+7+3cA+Jar/VEA/9pEnaaVp0/zFwF8E8BJ\n9wJY3UlzgefrO+D0lHkawJ6i9biaLofTM2fWPRf3uPuHADwM4DsADgMYLEDbA3DCv/PueXlLO11F\nHe8Ane8z8bwE8DYAZ91jXa8zr0+rTDkgkRBCSCKsDW0RQggxAxoJIYSQRNBICCGEJIJGQgghJBE0\nEkIIIYmgkRBCCEkEjYSQlBGRnxWtgZA8oZEQkj4cnEUWFTQSQjJCHP5AnMW/vikiN7r7t7gzPv+F\nOIuz/XnRWglJgtGTNhJiOTcAWA/glwGsAvC/ReRv3Nc2wFk86EcAviEiI6r6jWJkEpIMtkgIyY63\nAbhfHX4M4CiAX4ET+jquqj9UZ46iWTir0BFiJTQSQrJD0bpSXj1/8opn3y/A6ACxGBoJIdnxdQDv\nFpE+d+GoX4MzFXfQMqyEWAvvgghJHwUAVT0kIr8KZzpxBfAxVf2xiFyF1p5d7OlFrIXTyBNCCEkE\nQ1uEEEISQSMhhBCSCBoJIYSQRNBICCGEJIJGQgghJBE0EkIIIYmgkRBCCEkEjYQQQkgi/j8+xE9d\nGdJnfgAAAABJRU5ErkJggg==\n",
"text": [
""
]
}
],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following graph shows an example scatter plot of monthly average temperatures (over many years) for a single site."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"grapher = siteTemps[0]\n",
"grapher[['year']] = grapher[['year']].astype(int)\n",
"grapher[['month']] = grapher[['month']].astype(int)\n",
"grapher[['t']] = grapher[['AVG(temp)']].astype(float) / 10\n",
"grapher.groupby('year')\n",
"grapher.plot(x='month',y='t',kind='scatter')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 49,
"text": [
""
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nbg/mCuC1UcnvgD5vezCb4fM2JmCMX90MTsDmO8GbObEq+i+mA7dFph+VldX09v4thVlWKyvv8Va/\niY+tE4hJyP2K8cTeBywh3ye9hLg2NQn5dw/xxD916pRhlY1Wb283A/dDcGXhCf38GSm7EzBFUgVc\nipvHT/T8J8mFkzLx7+xWTX5F8v7oud0JhMDGBExRVFaeRl9fFYXzyCsqeujtfTnJsFIlm80WTKG9\n2usMKpFxuGnAhesEjqEaz+5l5sRGOiZgjYApCpF6+u9s1Qp8BtWO5IIy3lRUTEV1PrAtKpmDSDt9\nfQcSjCqdLIFciQi5XzG+MYHhlI1dyL97CDP+M888HWgDXoFbONYWlYUnxN//WMTeCIjILhF5RES2\nisgvo7J6EWkTkR0islFE6uKOw5xaNptl4cJFLFt2I9ls1nPtPQxcrBRqgjEz2Pjx46JnH8MNDheW\n+ZE7PxcuXBTD+ZlesXcHicgzuFXGHQVltwEHVPU2EVkOTFbVFQPeZ91BRZTNZmlquoKurvMByGQe\nZ/36f/fWbywyGfgI/dcJ3I3qH73Ub5I1ZcpsOjpuoLC7r77+Zg4e3OmlfssNNXyl2h00MKAm3OUg\n0Z/vK1Ic5gRWrryZrq4qcvn+u7qqWLny5lO9bdgqKhS4i1wqY7grKjPlYMaMs4ZVNlpr194ZNQAu\nFXln563HB7nN2BSjEVDgJyLyaxG5Kiqbpqr7ouf7AH+7W5SI0PoVd+/eSz7f/wzgi1GZH5lMJf27\nf3qiMv9C+90PFGL8ixY1AH8HnI0bF/i7qCw8If7+x6IY6wTepqrPi8grgDYRebzwL1VVRWTIS8KW\nlhZmzpwJQF1dHXPmzGH+/PlA/j+qVI+3bdtWUvGc6ri+fgIdHY+R9xj19ROOH421/urqCo4ezd1p\nACymujp/DZL0v9+Ox3Z8xx134RLGrcLlDvoyd9xxF9ddd52X+hcs+DM2bfoEPT1fAaCqajsLFtxI\nTtL//iSP29vbj2/Tmvu+HBFVLdoD+BywFHgcODMqmw48PsRr1RTPqlWrFCYprIsek3TVqlXe6q+q\nOiOqV6PHOq2qOsNb/SZZIlMG/f+KTPFW/4YNGzSTecXx8zOTeYVu2LDBW/3lJPruHPb3cqzdQSIy\nXlxmKUTkNGAhsJ3cJqdOM+Bvs1kzKvfe+01cd81XokdPVOZHbW3NsMpMmNx3z3ZgUfTYnruY82Lt\n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\n0S2GZz5LAAAAAElFTkSuQmCC\n",
"text": [
""
]
}
],
"prompt_number": 49
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Exporting Processed Data for D3 Visualization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The sites and temperature data is exported to text files as follows. It is then used in the D3 visualization shown in the blog post [here](http://briancoffey.ca/blogpost5.html)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sites.to_csv('sites.csv',sep='\\t',index=False)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for i in range(len(selectedSitesList)):\n",
" siteTemps[i].to_csv('sitesTemps' + str(i) + '.csv',sep='\\t',index=False)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
}
],
"metadata": {}
}
]
}