Skip to content

Instantly share code, notes, and snippets.

@datadave
Created November 19, 2014 17:40
Show Gist options
  • Save datadave/1090294eb7a8e43870a0 to your computer and use it in GitHub Desktop.
Save datadave/1090294eb7a8e43870a0 to your computer and use it in GitHub Desktop.
Folium Chloropleth example with loan data
Display the source blob
Display the rendered blob
Raw
{
"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": [
"![](http://s2.postimg.org/tkucolkxl/Screen_Shot_2014_11_19_at_12_32_07_PM.png)"
]
},
{
"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