Created
November 19, 2014 17:40
-
-
Save datadave/1090294eb7a8e43870a0 to your computer and use it in GitHub Desktop.
Folium Chloropleth example with loan data
This file contains hidden or 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:9b0b1382526a1cb06ea7ae3de42dd17358a03f67f827fe34ede0a4bf8d0e9b87" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Creating a State Chloropleth Map with Folium \n", | |
"_Using loan data_" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# If not yet installed: \"pip install dstk\"; \"pip install folium\"\n", | |
"import folium" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Get state shapes and state data\n", | |
"state_geo = r'https://gist.githubusercontent.com/datadave/108b5f382c838c3963d7/raw/3036216d894d49205948dbbfd562754ef3814785/us-states.json'\n", | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt\n", | |
"from IPython.display import HTML # for viewing html map" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 103 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Read and select data\n", | |
"df = pd.read_csv(\"https://gist.githubusercontent.com/datadave/c9b95cdd022fea1b5006/raw/ede8a9976385b61ed15e9201b6cc74a9c78505eb/loan_cartodb2_total.csv\") # Sourced from http://shortyskater456.cartodb.com/viz/40d16f7e-6d3e-11e4-a898-0e9d821ea90d/\n", | |
"df = df[['addr_state','funded_amnt']]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 105 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"df.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>addr_state</th>\n", | |
" <th>funded_amnt</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td> AL</td>\n", | |
" <td> 13758.83721</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td> AR</td>\n", | |
" <td> 12055.41775</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td> AZ</td>\n", | |
" <td> 13198.65455</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td> CA</td>\n", | |
" <td> 13938.36698</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td> CO</td>\n", | |
" <td> 14271.60633</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 106, | |
"text": [ | |
" addr_state funded_amnt\n", | |
"0 AL 13758.83721\n", | |
"1 AR 12055.41775\n", | |
"2 AZ 13198.65455\n", | |
"3 CA 13938.36698\n", | |
"4 CO 14271.60633" | |
] | |
} | |
], | |
"prompt_number": 106 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Review the data to anticipate chloropleth range\n", | |
"df.funded_amnt.hist(bins = 100)\n", | |
"plt.title(\"Funded Amount\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 107, | |
"text": [ | |
"<matplotlib.text.Text at 0x10999c250>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nAAAASUVORK5CYII=\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x108ebd6d0>" | |
] | |
} | |
], | |
"prompt_number": 107 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"df.funded_amnt = df.funded_amnt / 1000 # For easier legend formatting" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 112 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Make a map\n", | |
"\n", | |
"map = folium.Map(location=[40, -100], zoom_start=4) # Initialize map\n", | |
"\n", | |
"thresh = [10, 11.2, 12.4, 13.6, 14.8,16] # set the threshold, use histogram as guide\n", | |
"\n", | |
"map.geo_json(geo_path=state_geo, data=df,\n", | |
" columns=['addr_state', 'funded_amnt'], # pick columns\n", | |
" key_on='feature.id',\n", | |
" threshold_scale = thresh, # set threshold\n", | |
" fill_color='YlOrRd', fill_opacity=0.75, line_opacity=0.5, # colors\n", | |
" legend_name='Funded Amount ($1,000)') # legend\n", | |
"map.create_map(path='funded_chloropleth.html') #draw map" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Locally, you can use HTML library to Display the map inline\n", | |
"# HTML('<iframe src=funded_chloropleth.html width=1000 height = 500><iframe>')\n", | |
"\n", | |
"# For publishing on the gist, showing image via markdown" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment