Skip to content

Instantly share code, notes, and snippets.

@psychemedia
Last active April 12, 2017 10:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save psychemedia/661a1a7dd2cf173df2d16c9ccbf6b18e to your computer and use it in GitHub Desktop.
Save psychemedia/661a1a7dd2cf173df2d16c9ccbf6b18e to your computer and use it in GitHub Desktop.
Grab some airport codes for capital cities and then some weather data for them
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Airport Weather Data\n",
"\n",
"Grab weather data files from Weather Underground for airports near capital cities of the BRICS countries."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"#I'm using pandas, a data anlays package, which used to have external data source access built in\n",
"#Recently, that data access has been moved to an external package\n",
"#May as well go with recommnded external datasource route\n",
"!pip install pandas-datareader"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"#Import the python packages we need\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>adminregion</th>\n",
" <th>capitalCity</th>\n",
" <th>iso3c</th>\n",
" <th>incomeLevel</th>\n",
" <th>iso2c</th>\n",
" <th>latitude</th>\n",
" <th>lendingType</th>\n",
" <th>longitude</th>\n",
" <th>name</th>\n",
" <th>region</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>Latin America &amp; Caribbean (excluding high income)</td>\n",
" <td>Brasilia</td>\n",
" <td>BRA</td>\n",
" <td>Upper middle income</td>\n",
" <td>BR</td>\n",
" <td>-15.7801</td>\n",
" <td>IBRD</td>\n",
" <td>-47.9292</td>\n",
" <td>Brazil</td>\n",
" <td>Latin America &amp; Caribbean</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>East Asia &amp; Pacific (excluding high income)</td>\n",
" <td>Beijing</td>\n",
" <td>CHN</td>\n",
" <td>Upper middle income</td>\n",
" <td>CN</td>\n",
" <td>40.0495</td>\n",
" <td>IBRD</td>\n",
" <td>116.2860</td>\n",
" <td>China</td>\n",
" <td>East Asia &amp; Pacific</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>South Asia</td>\n",
" <td>New Delhi</td>\n",
" <td>IND</td>\n",
" <td>Lower middle income</td>\n",
" <td>IN</td>\n",
" <td>28.6353</td>\n",
" <td>IBRD</td>\n",
" <td>77.2250</td>\n",
" <td>India</td>\n",
" <td>South Asia</td>\n",
" </tr>\n",
" <tr>\n",
" <th>236</th>\n",
" <td>Europe &amp; Central Asia (excluding high income)</td>\n",
" <td>Moscow</td>\n",
" <td>RUS</td>\n",
" <td>Upper middle income</td>\n",
" <td>RU</td>\n",
" <td>55.7558</td>\n",
" <td>IBRD</td>\n",
" <td>37.6176</td>\n",
" <td>Russian Federation</td>\n",
" <td>Europe &amp; Central Asia</td>\n",
" </tr>\n",
" <tr>\n",
" <th>301</th>\n",
" <td>Sub-Saharan Africa (excluding high income)</td>\n",
" <td>Pretoria</td>\n",
" <td>ZAF</td>\n",
" <td>Upper middle income</td>\n",
" <td>ZA</td>\n",
" <td>-25.7460</td>\n",
" <td>IBRD</td>\n",
" <td>28.1871</td>\n",
" <td>South Africa</td>\n",
" <td>Sub-Saharan Africa</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" adminregion capitalCity iso3c \\\n",
"34 Latin America & Caribbean (excluding high income) Brasilia BRA \n",
"49 East Asia & Pacific (excluding high income) Beijing CHN \n",
"134 South Asia New Delhi IND \n",
"236 Europe & Central Asia (excluding high income) Moscow RUS \n",
"301 Sub-Saharan Africa (excluding high income) Pretoria ZAF \n",
"\n",
" incomeLevel iso2c latitude lendingType longitude \\\n",
"34 Upper middle income BR -15.7801 IBRD -47.9292 \n",
"49 Upper middle income CN 40.0495 IBRD 116.2860 \n",
"134 Lower middle income IN 28.6353 IBRD 77.2250 \n",
"236 Upper middle income RU 55.7558 IBRD 37.6176 \n",
"301 Upper middle income ZA -25.7460 IBRD 28.1871 \n",
"\n",
" name region \n",
"34 Brazil Latin America & Caribbean \n",
"49 China East Asia & Pacific \n",
"134 India South Asia \n",
"236 Russian Federation Europe & Central Asia \n",
"301 South Africa Sub-Saharan Africa "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#What are the capitals? - The World Bank data source can help\n",
"from pandas_datareader import wb\n",
"\n",
"countries=wb.get_countries()\n",
"bricsCountries = ['Brazil','Russian Federation','India','China','South Africa']\n",
"\n",
"brics=countries[countries['name'].isin(bricsCountries)]\n",
"brics"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>capitalCity</th>\n",
" <th>iso2c</th>\n",
" <th>iso3c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>Brazil</td>\n",
" <td>Brasilia</td>\n",
" <td>BR</td>\n",
" <td>BRA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>China</td>\n",
" <td>Beijing</td>\n",
" <td>CN</td>\n",
" <td>CHN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>India</td>\n",
" <td>New Delhi</td>\n",
" <td>IN</td>\n",
" <td>IND</td>\n",
" </tr>\n",
" <tr>\n",
" <th>236</th>\n",
" <td>Russian Federation</td>\n",
" <td>Moscow</td>\n",
" <td>RU</td>\n",
" <td>RUS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>301</th>\n",
" <td>South Africa</td>\n",
" <td>Pretoria</td>\n",
" <td>ZA</td>\n",
" <td>ZAF</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name capitalCity iso2c iso3c\n",
"34 Brazil Brasilia BR BRA\n",
"49 China Beijing CN CHN\n",
"134 India New Delhi IN IND\n",
"236 Russian Federation Moscow RU RUS\n",
"301 South Africa Pretoria ZA ZAF"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Linit the columns\n",
"brics=brics[['name','capitalCity','iso2c', 'iso3c']]\n",
"brics"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ident</th>\n",
" <th>type</th>\n",
" <th>name</th>\n",
" <th>latitude_deg</th>\n",
" <th>longitude_deg</th>\n",
" <th>elevation_ft</th>\n",
" <th>continent</th>\n",
" <th>iso_country</th>\n",
" <th>iso_region</th>\n",
" <th>municipality</th>\n",
" <th>gps_code</th>\n",
" <th>iata_code</th>\n",
" <th>local_code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>00A</td>\n",
" <td>heliport</td>\n",
" <td>Total Rf Heliport</td>\n",
" <td>40.070801</td>\n",
" <td>-74.933601</td>\n",
" <td>11.0</td>\n",
" <td>NaN</td>\n",
" <td>US</td>\n",
" <td>US-PA</td>\n",
" <td>Bensalem</td>\n",
" <td>00A</td>\n",
" <td>NaN</td>\n",
" <td>00A</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>00AK</td>\n",
" <td>small_airport</td>\n",
" <td>Lowell Field</td>\n",
" <td>59.949200</td>\n",
" <td>-151.695999</td>\n",
" <td>450.0</td>\n",
" <td>NaN</td>\n",
" <td>US</td>\n",
" <td>US-AK</td>\n",
" <td>Anchor Point</td>\n",
" <td>00AK</td>\n",
" <td>NaN</td>\n",
" <td>00AK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>00AL</td>\n",
" <td>small_airport</td>\n",
" <td>Epps Airpark</td>\n",
" <td>34.864799</td>\n",
" <td>-86.770302</td>\n",
" <td>820.0</td>\n",
" <td>NaN</td>\n",
" <td>US</td>\n",
" <td>US-AL</td>\n",
" <td>Harvest</td>\n",
" <td>00AL</td>\n",
" <td>NaN</td>\n",
" <td>00AL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>00AR</td>\n",
" <td>heliport</td>\n",
" <td>Newport Hospital &amp; Clinic Heliport</td>\n",
" <td>35.608700</td>\n",
" <td>-91.254898</td>\n",
" <td>237.0</td>\n",
" <td>NaN</td>\n",
" <td>US</td>\n",
" <td>US-AR</td>\n",
" <td>Newport</td>\n",
" <td>00AR</td>\n",
" <td>NaN</td>\n",
" <td>00AR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>00AZ</td>\n",
" <td>small_airport</td>\n",
" <td>Cordes Airport</td>\n",
" <td>34.305599</td>\n",
" <td>-112.165001</td>\n",
" <td>3810.0</td>\n",
" <td>NaN</td>\n",
" <td>US</td>\n",
" <td>US-AZ</td>\n",
" <td>Cordes</td>\n",
" <td>00AZ</td>\n",
" <td>NaN</td>\n",
" <td>00AZ</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ident type name latitude_deg \\\n",
"0 00A heliport Total Rf Heliport 40.070801 \n",
"1 00AK small_airport Lowell Field 59.949200 \n",
"2 00AL small_airport Epps Airpark 34.864799 \n",
"3 00AR heliport Newport Hospital & Clinic Heliport 35.608700 \n",
"4 00AZ small_airport Cordes Airport 34.305599 \n",
"\n",
" longitude_deg elevation_ft continent iso_country iso_region municipality \\\n",
"0 -74.933601 11.0 NaN US US-PA Bensalem \n",
"1 -151.695999 450.0 NaN US US-AK Anchor Point \n",
"2 -86.770302 820.0 NaN US US-AL Harvest \n",
"3 -91.254898 237.0 NaN US US-AR Newport \n",
"4 -112.165001 3810.0 NaN US US-AZ Cordes \n",
"\n",
" gps_code iata_code local_code \n",
"0 00A NaN 00A \n",
"1 00AK NaN 00AK \n",
"2 00AL NaN 00AL \n",
"3 00AR NaN 00AR \n",
"4 00AZ NaN 00AZ "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#I found a list of IATA code in a CSV file on the web..\n",
"iata=pd.read_csv('https://raw.githubusercontent.com/datasets/airport-codes/master/data/airport-codes.csv')\n",
"iata.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>iso_country</th>\n",
" <th>name</th>\n",
" <th>municipality</th>\n",
" <th>iata_code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>41779</th>\n",
" <td>RU</td>\n",
" <td>Domodedovo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>DME</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41781</th>\n",
" <td>RU</td>\n",
" <td>Sheremetyevo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>SVO</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41788</th>\n",
" <td>RU</td>\n",
" <td>Chkalovskiy Airport</td>\n",
" <td>Moscow</td>\n",
" <td>CKL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41802</th>\n",
" <td>RU</td>\n",
" <td>Vnukovo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>VKO</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42569</th>\n",
" <td>IN</td>\n",
" <td>Indira Gandhi International Airport</td>\n",
" <td>New Delhi</td>\n",
" <td>DEL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46022</th>\n",
" <td>CN</td>\n",
" <td>Beijing Capital International Airport</td>\n",
" <td>Beijing</td>\n",
" <td>PEK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46033</th>\n",
" <td>CN</td>\n",
" <td>Beijing Nanyuan Airport</td>\n",
" <td>Beijing</td>\n",
" <td>NAY</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" iso_country name municipality \\\n",
"41779 RU Domodedovo International Airport Moscow \n",
"41781 RU Sheremetyevo International Airport Moscow \n",
"41788 RU Chkalovskiy Airport Moscow \n",
"41802 RU Vnukovo International Airport Moscow \n",
"42569 IN Indira Gandhi International Airport New Delhi \n",
"46022 CN Beijing Capital International Airport Beijing \n",
"46033 CN Beijing Nanyuan Airport Beijing \n",
"\n",
" iata_code \n",
"41779 DME \n",
"41781 SVO \n",
"41788 CKL \n",
"41802 VKO \n",
"42569 DEL \n",
"46022 PEK \n",
"46033 NAY "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Limit the IATA data columns to ones we're interested in\n",
"cols=['iso_country','name','municipality','iata_code']\n",
"\n",
"#Just look at rows that meet certain criteria:\n",
"\n",
"airportHasIATAcode = pd.notnull(iata['iata_code'])\n",
"\n",
"airportIsLargeAirport = (iata['type']=='large_airport')\n",
"\n",
"airportIsInCapital = iata['municipality'].isin(brics['capitalCity'])\n",
"\n",
"#Select rows on that basis\n",
"iata[ airportHasIATAcode & airportIsLargeAirport & airportIsInCapital ][cols]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>iso_country</th>\n",
" <th>name</th>\n",
" <th>municipality</th>\n",
" <th>iata_code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>17465</th>\n",
" <td>ZA</td>\n",
" <td>Cape Town International Airport</td>\n",
" <td>Cape Town</td>\n",
" <td>CPT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17550</th>\n",
" <td>ZA</td>\n",
" <td>OR Tambo International Airport</td>\n",
" <td>Johannesburg</td>\n",
" <td>JNB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17579</th>\n",
" <td>ZA</td>\n",
" <td>King Shaka International Airport</td>\n",
" <td>Durban</td>\n",
" <td>DUR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33920</th>\n",
" <td>BR</td>\n",
" <td>Val de Cans/Júlio Cezar Ribeiro International ...</td>\n",
" <td>Belém</td>\n",
" <td>BEL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33926</th>\n",
" <td>BR</td>\n",
" <td>Presidente Juscelino Kubistschek International...</td>\n",
" <td>Brasília</td>\n",
" <td>BSB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33936</th>\n",
" <td>BR</td>\n",
" <td>Tancredo Neves International Airport</td>\n",
" <td>Belo Horizonte</td>\n",
" <td>CNF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33959</th>\n",
" <td>BR</td>\n",
" <td>Hercílio Luz International Airport</td>\n",
" <td>Florianópolis</td>\n",
" <td>FLN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33964</th>\n",
" <td>BR</td>\n",
" <td>RIOgaleão – Tom Jobim International Airport</td>\n",
" <td>Rio De Janeiro</td>\n",
" <td>GIG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33968</th>\n",
" <td>BR</td>\n",
" <td>Guarulhos - Governador André Franco Montoro In...</td>\n",
" <td>São Paulo</td>\n",
" <td>GRU</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34033</th>\n",
" <td>BR</td>\n",
" <td>Governador Aluízio Alves International Airport</td>\n",
" <td>Natal</td>\n",
" <td>NAT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34041</th>\n",
" <td>BR</td>\n",
" <td>Deputado Luiz Eduardo Magalhães International ...</td>\n",
" <td>Salvador</td>\n",
" <td>SSA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41282</th>\n",
" <td>RU</td>\n",
" <td>Sochi International Airport</td>\n",
" <td>Sochi</td>\n",
" <td>AER</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41779</th>\n",
" <td>RU</td>\n",
" <td>Domodedovo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>DME</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41781</th>\n",
" <td>RU</td>\n",
" <td>Sheremetyevo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>SVO</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41802</th>\n",
" <td>RU</td>\n",
" <td>Vnukovo International Airport</td>\n",
" <td>Moscow</td>\n",
" <td>VKO</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41842</th>\n",
" <td>RU</td>\n",
" <td>Ufa International Airport</td>\n",
" <td>Ufa</td>\n",
" <td>UFA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41848</th>\n",
" <td>RU</td>\n",
" <td>Kurumoch International Airport</td>\n",
" <td>Samara</td>\n",
" <td>KUF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42118</th>\n",
" <td>IN</td>\n",
" <td>Chhatrapati Shivaji International Airport</td>\n",
" <td>Mumbai</td>\n",
" <td>BOM</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42409</th>\n",
" <td>IN</td>\n",
" <td>Netaji Subhash Chandra Bose International Airport</td>\n",
" <td>Kolkata</td>\n",
" <td>CCU</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42554</th>\n",
" <td>IN</td>\n",
" <td>Sri Guru Ram Dass Jee International Airport</td>\n",
" <td>Amritsar</td>\n",
" <td>ATQ</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42569</th>\n",
" <td>IN</td>\n",
" <td>Indira Gandhi International Airport</td>\n",
" <td>New Delhi</td>\n",
" <td>DEL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42674</th>\n",
" <td>IN</td>\n",
" <td>Bengaluru International Airport</td>\n",
" <td>Bangalore</td>\n",
" <td>BLR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42679</th>\n",
" <td>IN</td>\n",
" <td>Cochin International Airport</td>\n",
" <td>Cochin</td>\n",
" <td>COK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42680</th>\n",
" <td>IN</td>\n",
" <td>Calicut International Airport</td>\n",
" <td>Calicut</td>\n",
" <td>CCJ</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42686</th>\n",
" <td>IN</td>\n",
" <td>Rajiv Gandhi International Airport</td>\n",
" <td>Hyderabad</td>\n",
" <td>HYD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42691</th>\n",
" <td>IN</td>\n",
" <td>Chennai International Airport</td>\n",
" <td>Chennai</td>\n",
" <td>MAA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42704</th>\n",
" <td>IN</td>\n",
" <td>Trivandrum International Airport</td>\n",
" <td>Trivandrum</td>\n",
" <td>TRV</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46022</th>\n",
" <td>CN</td>\n",
" <td>Beijing Capital International Airport</td>\n",
" <td>Beijing</td>\n",
" <td>PEK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46037</th>\n",
" <td>CN</td>\n",
" <td>Tianjin Binhai International Airport</td>\n",
" <td>Tianjin</td>\n",
" <td>TSN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46050</th>\n",
" <td>CN</td>\n",
" <td>Guangzhou Baiyun International Airport</td>\n",
" <td>Guangzhou</td>\n",
" <td>CAN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46051</th>\n",
" <td>CN</td>\n",
" <td>Changsha Huanghua International Airport</td>\n",
" <td>Changsha</td>\n",
" <td>CSX</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46053</th>\n",
" <td>CN</td>\n",
" <td>Guilin Liangjiang International Airport</td>\n",
" <td>Guilin City</td>\n",
" <td>KWL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46060</th>\n",
" <td>CN</td>\n",
" <td>Shenzhen Bao'an International Airport</td>\n",
" <td>Shenzhen</td>\n",
" <td>SZX</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46066</th>\n",
" <td>CN</td>\n",
" <td>Zhengzhou Xinzheng International Airport</td>\n",
" <td>Zhengzhou</td>\n",
" <td>CGO</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46069</th>\n",
" <td>CN</td>\n",
" <td>Wuhan Tianhe International Airport</td>\n",
" <td>Wuhan</td>\n",
" <td>WUH</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46076</th>\n",
" <td>CN</td>\n",
" <td>Haikou Meilan International Airport</td>\n",
" <td>Haikou</td>\n",
" <td>HAK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46077</th>\n",
" <td>CN</td>\n",
" <td>Sanya Phoenix International Airport</td>\n",
" <td>Sanya</td>\n",
" <td>SYX</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46094</th>\n",
" <td>CN</td>\n",
" <td>Xi'an Xianyang International Airport</td>\n",
" <td>Xianyang</td>\n",
" <td>XIY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46130</th>\n",
" <td>CN</td>\n",
" <td>Kunming Wujiaba International Airport</td>\n",
" <td>Kunming</td>\n",
" <td>KMG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46133</th>\n",
" <td>CN</td>\n",
" <td>Xiamen Gaoqi International Airport</td>\n",
" <td>Xiamen</td>\n",
" <td>XMN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46139</th>\n",
" <td>CN</td>\n",
" <td>Fuzhou Changle International Airport</td>\n",
" <td>Fuzhou</td>\n",
" <td>FOC</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46141</th>\n",
" <td>CN</td>\n",
" <td>Hangzhou Xiaoshan International Airport</td>\n",
" <td>Hangzhou</td>\n",
" <td>HGH</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46150</th>\n",
" <td>CN</td>\n",
" <td>Ningbo Lishe International Airport</td>\n",
" <td>Ningbo</td>\n",
" <td>NGB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46153</th>\n",
" <td>CN</td>\n",
" <td>Shanghai Pudong International Airport</td>\n",
" <td>Shanghai</td>\n",
" <td>PVG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46157</th>\n",
" <td>CN</td>\n",
" <td>Shanghai Hongqiao International Airport</td>\n",
" <td>Shanghai</td>\n",
" <td>SHA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46174</th>\n",
" <td>CN</td>\n",
" <td>Chongqing Jiangbei International Airport</td>\n",
" <td>Chongqing</td>\n",
" <td>CKG</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46191</th>\n",
" <td>CN</td>\n",
" <td>Chengdu Shuangliu International Airport</td>\n",
" <td>Chengdu</td>\n",
" <td>CTU</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46209</th>\n",
" <td>CN</td>\n",
" <td>Ürümqi Diwopu International Airport</td>\n",
" <td>Ürümqi</td>\n",
" <td>URC</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" iso_country name \\\n",
"17465 ZA Cape Town International Airport \n",
"17550 ZA OR Tambo International Airport \n",
"17579 ZA King Shaka International Airport \n",
"33920 BR Val de Cans/Júlio Cezar Ribeiro International ... \n",
"33926 BR Presidente Juscelino Kubistschek International... \n",
"33936 BR Tancredo Neves International Airport \n",
"33959 BR Hercílio Luz International Airport \n",
"33964 BR RIOgaleão – Tom Jobim International Airport \n",
"33968 BR Guarulhos - Governador André Franco Montoro In... \n",
"34033 BR Governador Aluízio Alves International Airport \n",
"34041 BR Deputado Luiz Eduardo Magalhães International ... \n",
"41282 RU Sochi International Airport \n",
"41779 RU Domodedovo International Airport \n",
"41781 RU Sheremetyevo International Airport \n",
"41802 RU Vnukovo International Airport \n",
"41842 RU Ufa International Airport \n",
"41848 RU Kurumoch International Airport \n",
"42118 IN Chhatrapati Shivaji International Airport \n",
"42409 IN Netaji Subhash Chandra Bose International Airport \n",
"42554 IN Sri Guru Ram Dass Jee International Airport \n",
"42569 IN Indira Gandhi International Airport \n",
"42674 IN Bengaluru International Airport \n",
"42679 IN Cochin International Airport \n",
"42680 IN Calicut International Airport \n",
"42686 IN Rajiv Gandhi International Airport \n",
"42691 IN Chennai International Airport \n",
"42704 IN Trivandrum International Airport \n",
"46022 CN Beijing Capital International Airport \n",
"46037 CN Tianjin Binhai International Airport \n",
"46050 CN Guangzhou Baiyun International Airport \n",
"46051 CN Changsha Huanghua International Airport \n",
"46053 CN Guilin Liangjiang International Airport \n",
"46060 CN Shenzhen Bao'an International Airport \n",
"46066 CN Zhengzhou Xinzheng International Airport \n",
"46069 CN Wuhan Tianhe International Airport \n",
"46076 CN Haikou Meilan International Airport \n",
"46077 CN Sanya Phoenix International Airport \n",
"46094 CN Xi'an Xianyang International Airport \n",
"46130 CN Kunming Wujiaba International Airport \n",
"46133 CN Xiamen Gaoqi International Airport \n",
"46139 CN Fuzhou Changle International Airport \n",
"46141 CN Hangzhou Xiaoshan International Airport \n",
"46150 CN Ningbo Lishe International Airport \n",
"46153 CN Shanghai Pudong International Airport \n",
"46157 CN Shanghai Hongqiao International Airport \n",
"46174 CN Chongqing Jiangbei International Airport \n",
"46191 CN Chengdu Shuangliu International Airport \n",
"46209 CN Ürümqi Diwopu International Airport \n",
"\n",
" municipality iata_code \n",
"17465 Cape Town CPT \n",
"17550 Johannesburg JNB \n",
"17579 Durban DUR \n",
"33920 Belém BEL \n",
"33926 Brasília BSB \n",
"33936 Belo Horizonte CNF \n",
"33959 Florianópolis FLN \n",
"33964 Rio De Janeiro GIG \n",
"33968 São Paulo GRU \n",
"34033 Natal NAT \n",
"34041 Salvador SSA \n",
"41282 Sochi AER \n",
"41779 Moscow DME \n",
"41781 Moscow SVO \n",
"41802 Moscow VKO \n",
"41842 Ufa UFA \n",
"41848 Samara KUF \n",
"42118 Mumbai BOM \n",
"42409 Kolkata CCU \n",
"42554 Amritsar ATQ \n",
"42569 New Delhi DEL \n",
"42674 Bangalore BLR \n",
"42679 Cochin COK \n",
"42680 Calicut CCJ \n",
"42686 Hyderabad HYD \n",
"42691 Chennai MAA \n",
"42704 Trivandrum TRV \n",
"46022 Beijing PEK \n",
"46037 Tianjin TSN \n",
"46050 Guangzhou CAN \n",
"46051 Changsha CSX \n",
"46053 Guilin City KWL \n",
"46060 Shenzhen SZX \n",
"46066 Zhengzhou CGO \n",
"46069 Wuhan WUH \n",
"46076 Haikou HAK \n",
"46077 Sanya SYX \n",
"46094 Xianyang XIY \n",
"46130 Kunming KMG \n",
"46133 Xiamen XMN \n",
"46139 Fuzhou FOC \n",
"46141 Hangzhou HGH \n",
"46150 Ningbo NGB \n",
"46153 Shanghai PVG \n",
"46157 Shanghai SHA \n",
"46174 Chongqing CKG \n",
"46191 Chengdu CTU \n",
"46209 Ürümqi URC "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Data ALWAYS SUCKS - change the filter criteria\n",
"internationalAirport = iata['name'].str.contains('International')\n",
"\n",
"bricsCountry = iata['iso_country'].isin(brics['iso2c'])\n",
"\n",
"iata[ airportHasIATAcode & airportIsLargeAirport & internationalAirport & bricsCountry ][cols]"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Getting data for 2014...\n",
"\t...BSB...: 1 2 3 4 5 6 7 8 9 10 11 12 ...done BSB 2014\n",
"\t...DME...: 1 2 3 4 5 6 7 8 9 10 11 12 ...done DME 2014\n",
"\t...DEL...: 1 2 3 4 5 6 7 8 9 10 11 12 ...done DEL 2014\n",
"\t...PEK...: 1 2 3 4 5 6 7 8 9 10 11 12 ...done PEK 2014\n",
"\t...CPT...: 1 2 3 4 5 6 7 8 9 10 11 12 ...done CPT 2014\n"
]
}
],
"source": [
"#We're going to grab quite a few data files - and we want to play nice by sleeping between them...\n",
"\n",
"import time\n",
"\n",
"#Look at the URL - spot the pattern that lets us construct it automatically\n",
"url_pattern ='https://www.wunderground.com/history/airport/{airport}/{year}/{month}/1/MonthlyHistory.html?format=1'\n",
"\n",
"\n",
"#List of airports from inspection above\n",
"capitalAirports=['BSB','DME','DEL','PEK','CPT']\n",
"\n",
"#Folder to put data files in\n",
"airportDataDir='airportData'\n",
"\n",
"#Make sure that folder exists - and create it if it doesn't\n",
"!mkdir -p {airportDataDir}\n",
"\n",
"colorder=None\n",
"\n",
"#Grab data for multiple years if necessary...\n",
"for year in [2014]:\n",
" \n",
" #Print out a message to keep track of progress...\n",
" print('Getting data for {}...'.format(year))\n",
" \n",
" #Grab data for multiple airports, if necessary\n",
" for airport in capitalAirports:\n",
" \n",
" print('\\t...{}...: '.format(airport), end='')\n",
" \n",
" #Create a blank dataframe to hold the data for one airport for all the months in one year\n",
" df=pd.DataFrame()\n",
" \n",
" #Loop through months in a year - range(1,N) returns [1,2,3,..,N-1]\n",
" for month in range(1,12+1):\n",
" \n",
" #play nice by waiting a second between each call to the Wunderground API\n",
" time.sleep(1)\n",
"\n",
" #construct a URL using specific loop values\n",
" url=url_pattern.format(airport=airport, year=year, month=month)\n",
" \n",
" print('{} '.format(month), end='')\n",
" \n",
" #Build up a single dataframe containing data for one airport for all months in one year\n",
" #pd.concat() takes a list of dataframes and joins them vertically\n",
" tmp=pd.read_csv(url)\n",
" \n",
" #Or do a \"not in weathercols\" to identify Date?\n",
" tmp.columns=['Date' if c.startswith('+') or c.startswith('-') or c in['CST','UTC','SAST'] else c for c in tmp]\n",
"\n",
" if colorder is None: colorder=tmp.columns\n",
" #May also want to reorder so Date is first col? eg:\n",
" #tmp.columns=['Date']+[c if c!='Date' for c in tmp.columns]\n",
" \n",
" df=pd.concat([df,tmp])\n",
" \n",
" #create a filename to store the data in\n",
" fn=\"{datadir}/airport_weather_{iata}_{year}.csv\".format(datadir=airportDataDir, year=year, iata=airport)\n",
" df[colorder].to_csv(fn,index=False)\n",
" \n",
" print('...done {} {}'.format(airport, year))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"airport_weather_BSB_2014.csv airport_weather_DME_2014.csv\r\n",
"airport_weather_CPT_2014.csv airport_weather_PEK_2014.csv\r\n",
"airport_weather_DEL_2014.csv\r\n"
]
}
],
"source": [
"#List the files in the data dump directory\n",
"!ls {airportDataDir}"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Date,Max TemperatureC,Mean TemperatureC,Min TemperatureC,Dew PointC,MeanDew PointC,Min DewpointC,Max Humidity, Mean Humidity, Min Humidity, Max Sea Level PressurehPa, Mean Sea Level PressurehPa, Min Sea Level PressurehPa, Max VisibilityKm, Mean VisibilityKm, Min VisibilitykM, Max Wind SpeedKm/h, Mean Wind SpeedKm/h, Max Gust SpeedKm/h,Precipitationmm, CloudCover, Events,WindDirDegrees<br />\r\n",
"2014-1-1,12,4,-2,-12,-17,-20,44,19,7,1019,1015,1012,31,11,5,32,16,47.0,0.0,,,291<br />\r\n",
"2014-1-2,7,0,-6,-6,-9,-13,74,50,28,1021,1018,1015,18,7,3,18,5,,0.0,,,20<br />\r\n",
"2014-1-3,9,3,-2,-7,-13,-18,64,32,9,1026,1022,1018,31,13,5,18,8,,0.0,,,24<br />\r\n",
"2014-1-4,2,-2,-6,-4,-7,-9,80,68,44,1026,1023,1020,10,5,2,11,5,,0.0,2.0,,56<br />\r\n",
"2014-1-5,7,0,-7,-5,-11,-15,80,51,15,1028,1025,1021,31,7,3,18,10,,0.0,,,18<br />\r\n",
"2014-1-6,0,-2,-3,-4,-5,-7,80,72,61,1028,1026,1024,5,3,2,14,5,,0.0,8.0,Snow,130<br />\r\n",
"2014-1-7,5,0,-5,-4,-12,-25,86,45,6,1033,1027,1024,31,6,2,18,8,,0.0,8.0,,7<br />\r\n",
"2014-1-8,1,-4,-8,-20,-23,-28,36,21,6,1036,1034,1032,31,30,26,32,14,47.0,0.0,,,344<br />\r\n",
"2014-1-9,1,-6,-12,-21,-26,-35,41,19,4,1035,1032,1029,31,24,10,26,11,43.0,0.0,,,321<br />\r\n"
]
}
],
"source": [
"!head {airportDataDir}/airport_weather_PEK_2014.csv"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" CloudCover, Events, Max Gust SpeedKm/h, Max Sea Level PressurehPa, Max VisibilityKm, Max Wind SpeedKm/h, Mean Humidity, Mean Sea Level PressurehPa, Mean VisibilityKm, Mean Wind SpeedKm/h, Min Humidity, Min Sea Level PressurehPa, Min VisibilitykM,-02,-03,Dew PointC,Max Humidity,Max TemperatureC,Mean TemperatureC,MeanDew PointC,Min DewpointC,Min TemperatureC,Precipitationmm,WindDirDegrees<br />\r\n",
"3.0,Thunderstorm,,1019,19,14,64,1017,11,5,33,1014,10,2014-1-1,,19,94,31,24,18,16,17,0.0,125<br />\r\n",
"2.0,,,1018,19,16,65,1016,12,5,33,1013,10,2014-1-2,,19,94,30,23,17,14,17,0.0,102<br />\r\n",
"2.0,,,1018,19,19,55,1016,13,6,19,1015,10,2014-1-3,,20,88,32,24,15,11,18,0.0,133<br />\r\n",
"2.0,,,1020,19,24,47,1018,12,6,16,1015,10,2014-1-4,,17,77,32,25,13,8,18,0.0,106<br />\r\n",
"3.0,Rain,,1020,19,24,48,1018,12,8,23,1016,10,2014-1-5,,16,83,30,24,13,9,19,0.0,106<br />\r\n",
"3.0,Thunderstorm,,1019,19,19,62,1017,11,5,20,1016,10,2014-1-6,,19,94,30,24,16,11,18,1.02,14<br />\r\n",
"2.0,Thunderstorm,,1020,19,24,58,1017,11,6,27,1015,10,2014-1-7,,17,88,29,23,15,12,18,0.0,85<br />\r\n",
"2.0,,,1020,19,19,55,1017,12,8,22,1016,10,2014-1-8,,15,88,29,22,13,10,15,0.0,115<br />\r\n",
"3.0,,,1019,19,21,50,1017,11,8,29,1014,10,2014-1-9,,16,73,29,24,13,10,18,0.0,110<br />\r\n"
]
}
],
"source": [
"!head airport_weather_BSB_2014.csv"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" CloudCover, Events, Max Gust SpeedKm/h, Max Sea Level PressurehPa, Max VisibilityKm, Max Wind SpeedKm/h, Mean Humidity, Mean Sea Level PressurehPa, Mean VisibilityKm, Mean Wind SpeedKm/h, Min Humidity, Min Sea Level PressurehPa, Min VisibilitykM,+0330,+0430,Dew PointC,Max Humidity,Max TemperatureC,Mean TemperatureC,MeanDew PointC,Min DewpointC,Min TemperatureC,Precipitationmm,WindDirDegrees<br />\r\n",
"8.0,,,1034,2,6,70,1033,2,2,58,1033,2,2014-1-1,,-9,82,-4,-7,-10,-11,-9,0.0,-1<br />\r\n",
"8.0,,,1035,3,6,69,1033,2,0,53,1032,2,2014-1-2,,-6,75,-1,-4,-8,-11,-8,0.0,-1<br />\r\n",
"8.0,,,1034,3,6,72,1033,2,0,54,1033,2,2014-1-3,,-4,84,1,-3,-6,-10,-8,0.0,-1<br />\r\n",
"8.0,,,1034,8,14,74,1033,4,2,64,1032,2,2014-1-4,,-4,80,-1,-2,-5,-6,-3,0.0,-1<br />\r\n",
"8.0,Snow,,1034,6,14,79,1033,3,2,71,1033,2,2014-1-5,,-4,93,-1,-3,-6,-8,-6,0.0,-1<br />\r\n",
"8.0,,,1036,10,14,67,1035,6,3,45,1033,3,2014-1-6,,-7,80,-2,-4,-9,-12,-9,0.0,-1<br />\r\n",
"7.0,Snow,,1036,10,14,72,1031,6,6,48,1025,2,2014-1-7,,-10,86,-4,-7,-11,-12,-9,0.0,30<br />\r\n",
"8.0,,,1039,6,11,75,1034,4,5,65,1032,2,2014-1-8,,-9,87,-5,-7,-10,-12,-11,0.0,-1<br />\r\n",
"5.0,Fog,,1042,6,8,88,1034,4,3,67,1022,1,2014-1-9,,-9,100,-6,-11,-12,-17,-16,0.0,70<br />\r\n"
]
}
],
"source": [
"!head airport_weather_DEL_2014.csv"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>CST</th>\n",
" <th>Max TemperatureC</th>\n",
" <th>Mean TemperatureC</th>\n",
" <th>Min TemperatureC</th>\n",
" <th>Dew PointC</th>\n",
" <th>MeanDew PointC</th>\n",
" <th>Min DewpointC</th>\n",
" <th>Max Humidity</th>\n",
" <th>Mean Humidity</th>\n",
" <th>Min Humidity</th>\n",
" <th>...</th>\n",
" <th>Max VisibilityKm</th>\n",
" <th>Mean VisibilityKm</th>\n",
" <th>Min VisibilitykM</th>\n",
" <th>Max Wind SpeedKm/h</th>\n",
" <th>Mean Wind SpeedKm/h</th>\n",
" <th>Max Gust SpeedKm/h</th>\n",
" <th>Precipitationmm</th>\n",
" <th>CloudCover</th>\n",
" <th>Events</th>\n",
" <th>WindDirDegrees</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2014-1-1</td>\n",
" <td>12</td>\n",
" <td>4</td>\n",
" <td>-2</td>\n",
" <td>-12</td>\n",
" <td>-17</td>\n",
" <td>-20</td>\n",
" <td>44</td>\n",
" <td>19</td>\n",
" <td>7</td>\n",
" <td>...</td>\n",
" <td>31</td>\n",
" <td>11</td>\n",
" <td>5</td>\n",
" <td>32</td>\n",
" <td>16</td>\n",
" <td>47.0</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>291</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2014-1-2</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>-6</td>\n",
" <td>-6</td>\n",
" <td>-9</td>\n",
" <td>-13</td>\n",
" <td>74</td>\n",
" <td>50</td>\n",
" <td>28</td>\n",
" <td>...</td>\n",
" <td>18</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>5</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2014-1-3</td>\n",
" <td>9</td>\n",
" <td>3</td>\n",
" <td>-2</td>\n",
" <td>-7</td>\n",
" <td>-13</td>\n",
" <td>-18</td>\n",
" <td>64</td>\n",
" <td>32</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>31</td>\n",
" <td>13</td>\n",
" <td>5</td>\n",
" <td>18</td>\n",
" <td>8</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2014-1-4</td>\n",
" <td>2</td>\n",
" <td>-2</td>\n",
" <td>-6</td>\n",
" <td>-4</td>\n",
" <td>-7</td>\n",
" <td>-9</td>\n",
" <td>80</td>\n",
" <td>68</td>\n",
" <td>44</td>\n",
" <td>...</td>\n",
" <td>10</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>11</td>\n",
" <td>5</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2014-1-5</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>-7</td>\n",
" <td>-5</td>\n",
" <td>-11</td>\n",
" <td>-15</td>\n",
" <td>80</td>\n",
" <td>51</td>\n",
" <td>15</td>\n",
" <td>...</td>\n",
" <td>31</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" <td>18</td>\n",
" <td>10</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>18</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 23 columns</p>\n",
"</div>"
],
"text/plain": [
" CST Max TemperatureC Mean TemperatureC Min TemperatureC \\\n",
"0 2014-1-1 12 4 -2 \n",
"1 2014-1-2 7 0 -6 \n",
"2 2014-1-3 9 3 -2 \n",
"3 2014-1-4 2 -2 -6 \n",
"4 2014-1-5 7 0 -7 \n",
"\n",
" Dew PointC MeanDew PointC Min DewpointC Max Humidity Mean Humidity \\\n",
"0 -12 -17 -20 44 19 \n",
"1 -6 -9 -13 74 50 \n",
"2 -7 -13 -18 64 32 \n",
"3 -4 -7 -9 80 68 \n",
"4 -5 -11 -15 80 51 \n",
"\n",
" Min Humidity ... Max VisibilityKm Mean VisibilityKm \\\n",
"0 7 ... 31 11 \n",
"1 28 ... 18 7 \n",
"2 9 ... 31 13 \n",
"3 44 ... 10 5 \n",
"4 15 ... 31 7 \n",
"\n",
" Min VisibilitykM Max Wind SpeedKm/h Mean Wind SpeedKm/h \\\n",
"0 5 32 16 \n",
"1 3 18 5 \n",
"2 5 18 8 \n",
"3 2 11 5 \n",
"4 3 18 10 \n",
"\n",
" Max Gust SpeedKm/h Precipitationmm CloudCover Events WindDirDegrees \n",
"0 47.0 0.0 NaN NaN 291 \n",
"1 NaN 0.0 NaN NaN 20 \n",
"2 NaN 0.0 NaN NaN 24 \n",
"3 NaN 0.0 2.0 NaN 56 \n",
"4 NaN 0.0 NaN NaN 18 \n",
"\n",
"[5 rows x 23 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Cleaning example\n",
"dfdirty=pd.read_csv('airport_weather_PEK_2014.csv')\n",
"dfdirty.columns=[c.replace('<br />','') for c in dfdirty.columns]\n",
"dfdirty['WindDirDegrees']=dfdirty['WindDirDegrees'].str.replace('<br />','')\n",
"dfdirty.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Simple Mapping\n",
"\n",
"Just becuase, an example of how to create a simple map using the airport locations..."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3VucGtnLmNvbS9sZWFmbGV0QDEuMC4xL2Rpc3QvbGVhZmxldC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4xL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2pzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4wLjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLXNyYy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMC4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vdW5wa2cuY29tL2xlYWZsZXRAMS4wLjEvZGlzdC9sZWFmbGV0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4wLjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2dpdC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfYmJhNmZmODE0YTRkNDgxMWJjOGZhYjhmZDNhZDUwMmYgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2JiYTZmZjgxNGE0ZDQ4MTFiYzhmYWI4ZmQzYWQ1MDJmIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHNvdXRoV2VzdCA9IEwubGF0TG5nKC05MCwgLTE4MCk7CiAgICAgICAgICAgICAgICB2YXIgbm9ydGhFYXN0ID0gTC5sYXRMbmcoOTAsIDE4MCk7CiAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXBfYmJhNmZmODE0YTRkNDgxMWJjOGZhYjhmZDNhZDUwMmYgPSBMLm1hcCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXBfYmJhNmZmODE0YTRkNDgxMWJjOGZhYjhmZDNhZDUwMmYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NlbnRlcjogWzAsMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9mNjEwMDE4ODgzNTk0NjlhODE0YTU5MzQxMjE3YTZjZiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtYXhab29tOiAxOCwKICAgICAgICAgICAgICAgICAgICBtaW5ab29tOiAxLAogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNXb3JsZDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgbm9XcmFwOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJ0RhdGEgYnkgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9EYkw8L2E+LicsCiAgICAgICAgICAgICAgICAgICAgZGV0ZWN0UmV0aW5hOiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2JiYTZmZjgxNGE0ZDQ4MTFiYzhmYWI4ZmQzYWQ1MDJmKTsKCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODA2YjAzNDcxYjIyNDAzNzg4OWNjNGY4MmJlMmJjYTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMzMuOTY0ODAxNzksMTguNjAxNjk5ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9iYmE2ZmY4MTRhNGQ0ODExYmM4ZmFiOGZkM2FkNTAyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmZiZjc4MWM5MjA0NGZkYmQ3MzkxZGI0ZTUxYzY5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGU0MjM1YzNlNjg0MTU4YjZkZGU4MmI0M2NkZTEwNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDhlNDIzNWMzZTY4NDE1OGI2ZGRlODJiNDNjZGUxMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcGUgVG93biBJbnRlcm5hdGlvbmFsIEFpcnBvcnQsIENhcGUgVG93biAoQ1BUKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzZmYmY3ODFjOTIwNDRmZGJkNzM5MWRiNGU1MWM2OTMuc2V0Q29udGVudChodG1sX2Q4ZTQyMzVjM2U2ODQxNThiNmRkZTgyYjQzY2RlMTA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODA2YjAzNDcxYjIyNDAzNzg4OWNjNGY4MmJlMmJjYTkuYmluZFBvcHVwKHBvcHVwXzc2ZmJmNzgxYzkyMDQ0ZmRiZDczOTFkYjRlNTFjNjkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YyMmJiOWQ4MDhkMTQ2ZGI4ZGEwMTUzYjMyMjIyOGNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1Ljg2OTE2NzMzLC00Ny45MjA4MzM1OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2JiYTZmZjgxNGE0ZDQ4MTFiYzhmYWI4ZmQzYWQ1MDJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmNTEzZWIwZGE5NTQ0YzQ4MzJiZjk0ZTVlZThiNzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwMGY2ZDkwZGU4MzRhMWRhYTIxODIyYzRiMmE5MmJkID0gJCgnPGRpdiBpZD0iaHRtbF85MDBmNmQ5MGRlODM0YTFkYWEyMTgyMmM0YjJhOTJiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJlc2lkZW50ZSBKdXNjZWxpbm8gS3ViaXN0c2NoZWsgSW50ZXJuYXRpb25hbCBBaXJwb3J0LCBCcmFzw61saWEgKEJTQik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNTEzZWIwZGE5NTQ0YzQ4MzJiZjk0ZTVlZThiNzAzLnNldENvbnRlbnQoaHRtbF85MDBmNmQ5MGRlODM0YTFkYWEyMTgyMmM0YjJhOTJiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyMmJiOWQ4MDhkMTQ2ZGI4ZGEwMTUzYjMyMjIyOGNiLmJpbmRQb3B1cChwb3B1cF8zZjUxM2ViMGRhOTU0NGM0ODMyYmY5NGU1ZWU4YjcwMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MDMxNWYxYzY1MDU0MDAwOTUxYWFjZGFlMDFlNmNkYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjQwODc5ODIyLDM3LjkwNjI5OTU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYmJhNmZmODE0YTRkNDgxMWJjOGZhYjhmZDNhZDUwMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzNmY2U3ZTg0MTg3NDQ3OThiMmE5NmM0ZTYwMDJmN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM2ZjJmNTVlOGRkNGU2M2FmODQ1N2QxMTk3OGY2MDcgPSAkKCc8ZGl2IGlkPSJodG1sX2JjNmYyZjU1ZThkZDRlNjNhZjg0NTdkMTE5NzhmNjA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb21vZGVkb3ZvIEludGVybmF0aW9uYWwgQWlycG9ydCwgTW9zY293IChETUUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jM2ZjZTdlODQxODc0NDc5OGIyYTk2YzRlNjAwMmY3Yy5zZXRDb250ZW50KGh0bWxfYmM2ZjJmNTVlOGRkNGU2M2FmODQ1N2QxMTk3OGY2MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MDMxNWYxYzY1MDU0MDAwOTUxYWFjZGFlMDFlNmNkYi5iaW5kUG9wdXAocG9wdXBfYzNmY2U3ZTg0MTg3NDQ3OThiMmE5NmM0ZTYwMDJmN2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODExOWU4ZmIzMzMxNDU3ZDkxMDUyNGMwODU5ZjMyNDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC41NjY0OTk3MSw3Ny4xMDMxMDM2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2JiYTZmZjgxNGE0ZDQ4MTFiYzhmYWI4ZmQzYWQ1MDJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3ODIxMmQ4MDE2NDRlMDQ5NWIzNjg3NDc0ODcyMzM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3NzcwYWQwZjZlNzRiODlhNDUxMDdiNWJkZjJkY2RhID0gJCgnPGRpdiBpZD0iaHRtbF82Nzc3MGFkMGY2ZTc0Yjg5YTQ1MTA3YjViZGYyZGNkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SW5kaXJhIEdhbmRoaSBJbnRlcm5hdGlvbmFsIEFpcnBvcnQsIE5ldyBEZWxoaSAoREVMKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTc4MjEyZDgwMTY0NGUwNDk1YjM2ODc0NzQ4NzIzMzguc2V0Q29udGVudChodG1sXzY3NzcwYWQwZjZlNzRiODlhNDUxMDdiNWJkZjJkY2RhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODExOWU4ZmIzMzMxNDU3ZDkxMDUyNGMwODU5ZjMyNDkuYmluZFBvcHVwKHBvcHVwX2E3ODIxMmQ4MDE2NDRlMDQ5NWIzNjg3NDc0ODcyMzM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIwY2Q5MTUwNGY0ZjQwOThiYWY4ZWRlYTI1ZGFkZTJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDgwMTAxMDEsMTE2LjU4NDk5OTA5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYmJhNmZmODE0YTRkNDgxMWJjOGZhYjhmZDNhZDUwMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDI0NjY2ZmZhNGE4NGY3ZjgyZTM4YWQ2M2UxMGM3N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzlmNWU2OWYxNDg4NDQ3NTk0MTU4Y2YyMmJmMGM3ZTcgPSAkKCc8ZGl2IGlkPSJodG1sX2M5ZjVlNjlmMTQ4ODQ0NzU5NDE1OGNmMjJiZjBjN2U3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWlqaW5nIENhcGl0YWwgSW50ZXJuYXRpb25hbCBBaXJwb3J0LCBCZWlqaW5nIChQRUspPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjQ2NjZmZmE0YTg0ZjdmODJlMzhhZDYzZTEwYzc3ZS5zZXRDb250ZW50KGh0bWxfYzlmNWU2OWYxNDg4NDQ3NTk0MTU4Y2YyMmJmMGM3ZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMGNkOTE1MDRmNGY0MDk4YmFmOGVkZWEyNWRhZGUyZS5iaW5kUG9wdXAocG9wdXBfMDI0NjY2ZmZhNGE4NGY3ZjgyZTM4YWQ2M2UxMGM3N2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;\"></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x115bb4470>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import folium\n",
"\n",
"airportMap = folium.Map()\n",
"\n",
"def addMarker(row):\n",
" latlng=[row['latitude_deg'],row['longitude_deg']]\n",
" popupText='{}, {} ({})'.format(row['name'],row['municipality'],row['iata_code'])\n",
" folium.Marker(latlng, popup=popupText ).add_to(airportMap)\n",
" \n",
"iata[ iata['iata_code'].isin(capitalAirports) ].apply(addMarker, axis=1)\n",
"airportMap"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"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.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment