Skip to content

Instantly share code, notes, and snippets.

@edsase
Forked from carlward/songs.ipynb
Created January 8, 2017 20:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edsase/96dc3de91cd5c17755dbfde8e268ec59 to your computer and use it in GitHub Desktop.
Save edsase/96dc3de91cd5c17755dbfde8e268ec59 to your computer and use it in GitHub Desktop.
Songs from API
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"celltoolbar": "Raw Cell Format",
"name": "",
"signature": "sha256:69202c45a0bdd6ef7a9b35a5f567c25564b15a0d5c233a1642be536dbe3d8888"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Sourcing a Dataset from API Calls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A small example of how to source a custom dataset from an API. We'll be using the wonderful [Requests](http://docs.python-requests.org/en/latest/) module to makes some API calls and Pandas plus Matlotlib/Seaborn to explore the resulting data.\n",
"\n",
"Say we wanted to create a dataset of the songs of the top artists from a certain location. One option would be to download some data from [Echo Nest](http://echonest.com/). It has a [public API](http://developer.echonest.com/docs/v4/index.html#encoding) that gives access to information for over 30 million songs and 3 million artists. The terms of use are very reasonable. As long as you credit them and are not using it for anything commericial you are good to go. \n",
"\n",
"For the artists we can use the [artist search](http://developer.echonest.com/docs/v4/artist.html#search) endpoint. Then for each artist we can get songs using the [song search](http://developer.echonest.com/docs/v4/song.html#search) endpoint."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image\n",
"Image(url=\"http://the.echonest.com/static/img/logos/250x80_dk.gif\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<img src=\"http://the.echonest.com/static/img/logos/250x80_dk.gif\"/>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.Image at 0x1044caf90>"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Imports and Constants"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import json\n",
"import time\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import pickle\n",
"import requests\n",
"import seaborn as sns\n",
"\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"API_KEY = \"YOUR API KEY Here\"\n",
"\n",
"URL = \"http://developer.echonest.com/api/v4\"\n",
"ARTIST_URL = URL + \"/artist/search\"\n",
"SONG_URL = URL + \"/song/search\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Request Functions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets define a general function for making JSON format requests to the Echo Nest API. Besides the basic `requests.get()` it also includes some retries and exception handling in case the status is not `200 OK` or the response cannot be parsed as JSON."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def request_json(url, params=None):\n",
" \"\"\"Request and decode JSON response from url\"\"\"\n",
" for attempt in range(3): # retry if necessary\n",
" try:\n",
" r = requests.get(url, params=params)\n",
" r.raise_for_status()\n",
" return r.json()['response']\n",
"\n",
" except (requests.ConnectionError, ValueError) as error:\n",
" time.sleep(.25)\n",
" else:\n",
" print \"Unable to fetch json from {0}\".format(r.url)\n",
" raise error"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using this function we can define specific functions for artists and songs."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def get_artists(key=API_KEY, url=ARTIST_URL, num_results=100, **kwargs):\n",
" \"\"\"Get Artists IDs that match keyword arguments\"\"\"\n",
" payload = {\n",
" \"api_key\": key,\n",
" \"format\": \"json\",\n",
" \"results\": num_results,\n",
" \"sort\": \"familiarity-desc\",\n",
" }\n",
" payload.update(kwargs)\n",
" \n",
" data = request_json(url, params=payload)['artists']\n",
" return [artist['id'] for artist in data]\n",
"\n",
"\n",
"def get_songs(key=API_KEY, url=SONG_URL, num_results=10, **kwargs):\n",
" \"\"\"Get Songs that match keyword arguments\"\"\"\n",
" payload = {\n",
" \"api_key\": key,\n",
" \"bucket\": [\"audio_summary\"],\n",
" \"format\": \"json\",\n",
" \"results\": num_results,\n",
" \"sort\": \"song_hotttnesss-desc\"\n",
" }\n",
" payload.update(kwargs)\n",
" \n",
" data = request_json(url, params=payload)\n",
" return data['songs']"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By default we've defined `get_artists` to return 100 results that match the query parameters and `get_songs` to return 10. The artist results will be sorted in descending order by the 'familiarity' metric (how familiar the artist is to today's audiences) while the songs results are sorted by the 'hotttness' metric (how popular the song is). \n",
"\n",
"The `**kwargs` argument allows us to take additional inputs as key value pairs. Using the line \n",
"```python\n",
"payload.update(kwargs)\n",
"``` \n",
"we can pass additional parameters to the `payload` dictionary and overwrite old ones."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Download the Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using these functions lets request the top 100 artists who's location matches `'city: San Francisco'`. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"artists = get_artists(artist_location=\"city: San Francisco\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"artists[0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"u'ARB054P1187B9AD32E'"
]
}
],
"prompt_number": 29
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and request the top ten songs for each artist. By default our API key allows us 20 requests per minute. In order to not exceed this rate we need to wait every so often before continuing. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"songs_list = []\n",
"for i, artist_id in enumerate(artists):\n",
" if i and i % 19 == 0: # Respect API rate limit\n",
" time.sleep(60)\n",
" songs_list.extend(get_songs(artist_id=artist_id))\n",
" \n",
"print \"All Done\" "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"All Done\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"Print first song\"\n",
"songs_list[0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Print first song\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"{u'artist_id': u'ARB054P1187B9AD32E',\n",
" u'artist_name': u'Santana',\n",
" u'audio_summary': {u'acousticness': 0.154778,\n",
" u'analysis_url': u'http://echonest-analysis.s3.amazonaws.com/TR/Crhc1Q8ygHNvznkqx3WQzHKEa_bi290lD2HvwzbPRqj3MvtFt8TFud9I8xBkX2sJGRvFMxkaDQtDmNiVs%3D/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1425590870&Signature=aZWnAW/xRuUjXPZNZmTKHSnmt04%3D',\n",
" u'audio_md5': u'4a038a54107f5d9d93265773304c85c2',\n",
" u'danceability': 0.620101,\n",
" u'duration': 295.73288,\n",
" u'energy': 0.922388,\n",
" u'instrumentalness': 3.1e-05,\n",
" u'key': 9,\n",
" u'liveness': 0.092157,\n",
" u'loudness': -3.913,\n",
" u'mode': 1,\n",
" u'speechiness': 0.030708,\n",
" u'tempo': 115.963,\n",
" u'time_signature': 4,\n",
" u'valence': 0.962619},\n",
" u'id': u'SOLHYBC135CC0B27FE',\n",
" u'title': u'Smooth'}"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All of the audio properties for a given song are inside a nested dictionary named `audio_summary`. This won't work for a tabular format so lets define a helper function to flatten out each song and put all of these properites in the main dictionary."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def process_song(song):\n",
" \"\"\"Flatten song properties into one dictionary\"\"\"\n",
" audio_summary = song.pop('audio_summary')\n",
" song.update(audio_summary)\n",
" return song"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"song_list = map(process_song, songs_list)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"Print first song\"\n",
"song_list[0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Print first song\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"{u'acousticness': 0.154778,\n",
" u'analysis_url': u'http://echonest-analysis.s3.amazonaws.com/TR/Crhc1Q8ygHNvznkqx3WQzHKEa_bi290lD2HvwzbPRqj3MvtFt8TFud9I8xBkX2sJGRvFMxkaDQtDmNiVs%3D/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1425590870&Signature=aZWnAW/xRuUjXPZNZmTKHSnmt04%3D',\n",
" u'artist_id': u'ARB054P1187B9AD32E',\n",
" u'artist_name': u'Santana',\n",
" u'audio_md5': u'4a038a54107f5d9d93265773304c85c2',\n",
" u'danceability': 0.620101,\n",
" u'duration': 295.73288,\n",
" u'energy': 0.922388,\n",
" u'id': u'SOLHYBC135CC0B27FE',\n",
" u'instrumentalness': 3.1e-05,\n",
" u'key': 9,\n",
" u'liveness': 0.092157,\n",
" u'loudness': -3.913,\n",
" u'mode': 1,\n",
" u'speechiness': 0.030708,\n",
" u'tempo': 115.963,\n",
" u'time_signature': 4,\n",
" u'title': u'Smooth',\n",
" u'valence': 0.962619}"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now all the key value pairs are on the top level. We also could have called `process_song` from inside `get_songs`.\n",
"\n",
"Finally we can save the songs array in a pickle file for future use."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pickle.dump(songs_list, open(\"songs.p\", \"wb\"))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Initial Exploration"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now have a list of about 1000 songs that can easily be converted to tabular format. Lets explore it a little bit in pandas."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"songs_list = pickle.load(open(\"songs.p\", \"rb\"))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"songs = pd.DataFrame(songs_list)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"songs.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>acousticness</th>\n",
" <th>analysis_url</th>\n",
" <th>artist_id</th>\n",
" <th>artist_name</th>\n",
" <th>audio_md5</th>\n",
" <th>danceability</th>\n",
" <th>duration</th>\n",
" <th>energy</th>\n",
" <th>id</th>\n",
" <th>instrumentalness</th>\n",
" <th>key</th>\n",
" <th>liveness</th>\n",
" <th>loudness</th>\n",
" <th>mode</th>\n",
" <th>speechiness</th>\n",
" <th>tempo</th>\n",
" <th>time_signature</th>\n",
" <th>title</th>\n",
" <th>valence</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 0.154778</td>\n",
" <td> http://echonest-analysis.s3.amazonaws.com/TR/C...</td>\n",
" <td> ARB054P1187B9AD32E</td>\n",
" <td> Santana</td>\n",
" <td> 4a038a54107f5d9d93265773304c85c2</td>\n",
" <td> 0.620101</td>\n",
" <td> 295.73288</td>\n",
" <td> 0.922388</td>\n",
" <td> SOLHYBC135CC0B27FE</td>\n",
" <td> 0.000031</td>\n",
" <td> 9</td>\n",
" <td> 0.092157</td>\n",
" <td> -3.913</td>\n",
" <td> 1</td>\n",
" <td> 0.030708</td>\n",
" <td> 115.963</td>\n",
" <td> 4</td>\n",
" <td> Smooth</td>\n",
" <td> 0.962619</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 0.171709</td>\n",
" <td> http://echonest-analysis.s3.amazonaws.com/TR/6...</td>\n",
" <td> ARB054P1187B9AD32E</td>\n",
" <td> Santana</td>\n",
" <td> bd6356a32c160d04c822c5d50aea93cc</td>\n",
" <td> 0.638115</td>\n",
" <td> 243.02621</td>\n",
" <td> 0.901532</td>\n",
" <td> SOGSQIN1392B181317</td>\n",
" <td> 0.000011</td>\n",
" <td> 9</td>\n",
" <td> 0.211083</td>\n",
" <td> -4.042</td>\n",
" <td> 1</td>\n",
" <td> 0.029335</td>\n",
" <td> 115.958</td>\n",
" <td> 4</td>\n",
" <td> Smooth</td>\n",
" <td> 0.958309</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 0.715176</td>\n",
" <td> http://echonest-analysis.s3.amazonaws.com/TR/Y...</td>\n",
" <td> ARB054P1187B9AD32E</td>\n",
" <td> Santana</td>\n",
" <td> a33f6b4e2904b79012d8bcdd805e7acd</td>\n",
" <td> 0.482990</td>\n",
" <td> 193.59955</td>\n",
" <td> 0.635270</td>\n",
" <td> SOCEGXK1312FDFF5A6</td>\n",
" <td> 0.060310</td>\n",
" <td> 2</td>\n",
" <td> 0.084465</td>\n",
" <td> -5.243</td>\n",
" <td> 0</td>\n",
" <td> 0.032013</td>\n",
" <td> 124.195</td>\n",
" <td> 4</td>\n",
" <td> Black Magic Woman</td>\n",
" <td> 0.584333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 0.816582</td>\n",
" <td> http://echonest-analysis.s3.amazonaws.com/TR/V...</td>\n",
" <td> ARB054P1187B9AD32E</td>\n",
" <td> Santana</td>\n",
" <td> 1db56f594e27440d3281a50fa3a06eed</td>\n",
" <td> 0.494476</td>\n",
" <td> 198.97288</td>\n",
" <td> 0.517184</td>\n",
" <td> SOUVXGP135A274BA61</td>\n",
" <td> 0.818443</td>\n",
" <td> 0</td>\n",
" <td> 0.095369</td>\n",
" <td> -7.346</td>\n",
" <td> 1</td>\n",
" <td> 0.029999</td>\n",
" <td> 122.604</td>\n",
" <td> 4</td>\n",
" <td> Black Magic Woman</td>\n",
" <td> 0.591566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 0.462558</td>\n",
" <td> http://echonest-analysis.s3.amazonaws.com/TR/h...</td>\n",
" <td> ARB054P1187B9AD32E</td>\n",
" <td> Santana</td>\n",
" <td> 7cba2b30eb780cdd11fc27a0276a5128</td>\n",
" <td> 0.474406</td>\n",
" <td> 291.57288</td>\n",
" <td> 0.519562</td>\n",
" <td> SOMTMZO13ACB544D84</td>\n",
" <td> 0.026166</td>\n",
" <td> 9</td>\n",
" <td> 0.143503</td>\n",
" <td>-11.816</td>\n",
" <td> 0</td>\n",
" <td> 0.037331</td>\n",
" <td> 123.853</td>\n",
" <td> 4</td>\n",
" <td> Black Magic Woman</td>\n",
" <td> 0.629676</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": [
" acousticness analysis_url \\\n",
"0 0.154778 http://echonest-analysis.s3.amazonaws.com/TR/C... \n",
"1 0.171709 http://echonest-analysis.s3.amazonaws.com/TR/6... \n",
"2 0.715176 http://echonest-analysis.s3.amazonaws.com/TR/Y... \n",
"3 0.816582 http://echonest-analysis.s3.amazonaws.com/TR/V... \n",
"4 0.462558 http://echonest-analysis.s3.amazonaws.com/TR/h... \n",
"\n",
" artist_id artist_name audio_md5 \\\n",
"0 ARB054P1187B9AD32E Santana 4a038a54107f5d9d93265773304c85c2 \n",
"1 ARB054P1187B9AD32E Santana bd6356a32c160d04c822c5d50aea93cc \n",
"2 ARB054P1187B9AD32E Santana a33f6b4e2904b79012d8bcdd805e7acd \n",
"3 ARB054P1187B9AD32E Santana 1db56f594e27440d3281a50fa3a06eed \n",
"4 ARB054P1187B9AD32E Santana 7cba2b30eb780cdd11fc27a0276a5128 \n",
"\n",
" danceability duration energy id instrumentalness \\\n",
"0 0.620101 295.73288 0.922388 SOLHYBC135CC0B27FE 0.000031 \n",
"1 0.638115 243.02621 0.901532 SOGSQIN1392B181317 0.000011 \n",
"2 0.482990 193.59955 0.635270 SOCEGXK1312FDFF5A6 0.060310 \n",
"3 0.494476 198.97288 0.517184 SOUVXGP135A274BA61 0.818443 \n",
"4 0.474406 291.57288 0.519562 SOMTMZO13ACB544D84 0.026166 \n",
"\n",
" key liveness loudness mode speechiness tempo time_signature \\\n",
"0 9 0.092157 -3.913 1 0.030708 115.963 4 \n",
"1 9 0.211083 -4.042 1 0.029335 115.958 4 \n",
"2 2 0.084465 -5.243 0 0.032013 124.195 4 \n",
"3 0 0.095369 -7.346 1 0.029999 122.604 4 \n",
"4 9 0.143503 -11.816 0 0.037331 123.853 4 \n",
"\n",
" title valence \n",
"0 Smooth 0.962619 \n",
"1 Smooth 0.958309 \n",
"2 Black Magic Woman 0.584333 \n",
"3 Black Magic Woman 0.591566 \n",
"4 Black Magic Woman 0.629676 "
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"songs.columns.values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"array([u'acousticness', u'analysis_url', u'artist_id', u'artist_name',\n",
" u'audio_md5', u'danceability', u'duration', u'energy', u'id',\n",
" u'instrumentalness', u'key', u'liveness', u'loudness', u'mode',\n",
" u'speechiness', u'tempo', u'time_signature', u'title', u'valence'], dtype=object)"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"songs.describe()"
],
"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>acousticness</th>\n",
" <th>danceability</th>\n",
" <th>duration</th>\n",
" <th>energy</th>\n",
" <th>instrumentalness</th>\n",
" <th>key</th>\n",
" <th>liveness</th>\n",
" <th>loudness</th>\n",
" <th>mode</th>\n",
" <th>speechiness</th>\n",
" <th>tempo</th>\n",
" <th>time_signature</th>\n",
" <th>valence</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 975.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" <td> 976.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td> 0.241557</td>\n",
" <td> 0.499539</td>\n",
" <td> 283.085246</td>\n",
" <td> 0.645629</td>\n",
" <td> 0.257477</td>\n",
" <td> 5.366803</td>\n",
" <td> 0.261365</td>\n",
" <td> -9.921717</td>\n",
" <td> 0.661885</td>\n",
" <td> 0.087642</td>\n",
" <td> 121.593074</td>\n",
" <td> 3.931352</td>\n",
" <td> 0.468187</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td> 0.311633</td>\n",
" <td> 0.182262</td>\n",
" <td> 210.784003</td>\n",
" <td> 0.245940</td>\n",
" <td> 0.351572</td>\n",
" <td> 3.590684</td>\n",
" <td> 0.236147</td>\n",
" <td> 5.158429</td>\n",
" <td> 0.473310</td>\n",
" <td> 0.118301</td>\n",
" <td> 29.140876</td>\n",
" <td> 0.376762</td>\n",
" <td> 0.238113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td> 0.000001</td>\n",
" <td> 0.073204</td>\n",
" <td> 27.428890</td>\n",
" <td> 0.025097</td>\n",
" <td> 0.000000</td>\n",
" <td> 0.000000</td>\n",
" <td> 0.018265</td>\n",
" <td> -36.738000</td>\n",
" <td> 0.000000</td>\n",
" <td> 0.023323</td>\n",
" <td> 50.620000</td>\n",
" <td> 1.000000</td>\n",
" <td> 0.034239</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td> 0.003580</td>\n",
" <td> 0.356658</td>\n",
" <td> 192.579650</td>\n",
" <td> 0.467663</td>\n",
" <td> 0.000063</td>\n",
" <td> 2.000000</td>\n",
" <td> 0.103640</td>\n",
" <td> -12.647000</td>\n",
" <td> 0.000000</td>\n",
" <td> 0.035584</td>\n",
" <td> 99.041250</td>\n",
" <td> 4.000000</td>\n",
" <td> 0.278704</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td> 0.071563</td>\n",
" <td> 0.496412</td>\n",
" <td> 245.304265</td>\n",
" <td> 0.689563</td>\n",
" <td> 0.014326</td>\n",
" <td> 6.000000</td>\n",
" <td> 0.156925</td>\n",
" <td> -8.523500</td>\n",
" <td> 1.000000</td>\n",
" <td> 0.047805</td>\n",
" <td> 119.496000</td>\n",
" <td> 4.000000</td>\n",
" <td> 0.457498</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td> 0.431932</td>\n",
" <td> 0.628836</td>\n",
" <td> 316.652878</td>\n",
" <td> 0.846032</td>\n",
" <td> 0.598805</td>\n",
" <td> 9.000000</td>\n",
" <td> 0.334147</td>\n",
" <td> -6.360500</td>\n",
" <td> 1.000000</td>\n",
" <td> 0.081266</td>\n",
" <td> 139.678250</td>\n",
" <td> 4.000000</td>\n",
" <td> 0.645639</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td> 0.994173</td>\n",
" <td> 0.955358</td>\n",
" <td> 3536.956370</td>\n",
" <td> 0.998135</td>\n",
" <td> 0.977467</td>\n",
" <td> 11.000000</td>\n",
" <td> 0.989973</td>\n",
" <td> -1.342000</td>\n",
" <td> 1.000000</td>\n",
" <td> 0.948414</td>\n",
" <td> 207.180000</td>\n",
" <td> 5.000000</td>\n",
" <td> 0.987383</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
" acousticness danceability duration energy instrumentalness \\\n",
"count 976.000000 976.000000 976.000000 976.000000 976.000000 \n",
"mean 0.241557 0.499539 283.085246 0.645629 0.257477 \n",
"std 0.311633 0.182262 210.784003 0.245940 0.351572 \n",
"min 0.000001 0.073204 27.428890 0.025097 0.000000 \n",
"25% 0.003580 0.356658 192.579650 0.467663 0.000063 \n",
"50% 0.071563 0.496412 245.304265 0.689563 0.014326 \n",
"75% 0.431932 0.628836 316.652878 0.846032 0.598805 \n",
"max 0.994173 0.955358 3536.956370 0.998135 0.977467 \n",
"\n",
" key liveness loudness mode speechiness \\\n",
"count 976.000000 976.000000 976.000000 976.000000 975.000000 \n",
"mean 5.366803 0.261365 -9.921717 0.661885 0.087642 \n",
"std 3.590684 0.236147 5.158429 0.473310 0.118301 \n",
"min 0.000000 0.018265 -36.738000 0.000000 0.023323 \n",
"25% 2.000000 0.103640 -12.647000 0.000000 0.035584 \n",
"50% 6.000000 0.156925 -8.523500 1.000000 0.047805 \n",
"75% 9.000000 0.334147 -6.360500 1.000000 0.081266 \n",
"max 11.000000 0.989973 -1.342000 1.000000 0.948414 \n",
"\n",
" tempo time_signature valence \n",
"count 976.000000 976.000000 976.000000 \n",
"mean 121.593074 3.931352 0.468187 \n",
"std 29.140876 0.376762 0.238113 \n",
"min 50.620000 1.000000 0.034239 \n",
"25% 99.041250 4.000000 0.278704 \n",
"50% 119.496000 4.000000 0.457498 \n",
"75% 139.678250 4.000000 0.645639 \n",
"max 207.180000 5.000000 0.987383 "
]
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Plots"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets make a few exploratory plots using the song audio properties. Documententation and explanation of these properties can be found [here](http://developer.echonest.com/docs/v4/_static/AnalyzeDocumentation.pdf)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dancy = songs.groupby('artist_name').mean().danceability"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.figure()\n",
"plot = dancy.sort(inplace=False, ascending=False)[:10].plot(kind='bar', figsize=(8, 6))\n",
"plot.set_title(\"Top Ten Dancy Artists\")\n",
"plot.set_xlabel(\"Artist\")\n",
"plot.set_ylabel(\"Echo Nest Dancibility Score\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
"<matplotlib.text.Text at 0x10ca9cf10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nsyZ1WeCnsAIuaRRwOrAhMBc4ICIeyp57BfCjpsPfBBwREWcXlcfMzCyvOoyaL7IFvhswNiK2lLQZ\ncFL2GBHxBLA9gKQtgBOAcwrMYmZmNqIUOYhtK+BagIi4FZg8+ABJfcC3gYMjYqDALGZmZiNKkQV8\nRWBm0/35Wbd6s12AuyPigQJzmJmZjThFdqHPBMY33R8VEQsGHbMv8L95TjZhwvKMGTM61wv394/L\nddySmDhxHJMmjW9/YAeKzAv1y1y3vFC/zEXkhfpl9vtiUX5fJHV5XxRZwKeSWthTJG0OTBvimMkR\ncUuek/X3z879wp0M5+/UjBmzmD796aV+ziLVLXPd8jbOX6fMReRtnLcodfsbN85fp8x+Xyw8Z5E6\nydyq0BdZwC8DdpA0Nbu/v6R9gHERcY6kScBTBb6+mZnZiFVYAc8GpR086OH7m56fDry5qNc3MzMb\nybyUqpmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZ\nmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmA\nm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnV0Jg8B0naF1gP+Brw3oi4sNBUZmZm1lLbFrik\nrwM7Au8FlgH2l3Ry0cHMzMxseHm60N8J7AfMiYh+YAfg3YWmMjMzs5byFPD5g+4vO8RjZmZm1kV5\nCvgU4EfAREmHAb8BLi40lZmZmbWUZxDb/wBvB/4GrA4cExFXFprKzMzMWspTwG+LiDcD1xYdxszM\nzPLJU8CfkLQNcGtEzM17YkmjgNOBDYG5wAER8VDT85sAJwF9wD+AD0XEc52ENzMz61V5roFPBm4C\nnpW0IPuXZxDbbsDYiNgSOJJUrAGQ1AecDXwkIrYGbgDW7jS8mZlZr2rbAo+ISUt47q3Iut0j4lZJ\nk5ueex3wb+BzkjYAroqIWMLXMTMz6zltC7ikFYBjgbdlx/8K+FJEPNPmV1cEZjbdny9pVEQsAFYC\ntgQOAR4CrpT0x4i4cQn+G8zMzHpOni70U4Hlgf2BDwNjgTNz/N5MYHzza2XFG1Lr+8FInie11CcP\nPoGZmZkNLc8gto0jYsOm+4dIujfH700FdgGmSNocmNb03F+AcZLWyQa2bQ18t9XJJkxYnjFjRud4\nWejvH5fruCUxceI4Jk0a3/7ADhSZF+qXuW55oX6Zi8gL9cvs98Wi/L5I6vK+yFPA+yRNyJZRRdIE\nYF6O37sM2EHS1Oz+/pL2AcZFxDmSPgb8MBvQNjUirml1sv7+2TleMpkxY1buYzs1Y8Yspk9/eqmf\ns0h1y1y3vI3z1ylzEXkb5y1K3f7GjfPXKbPfFwvPWaROMrcq9HkK+MnAbZJ+TprytStpV7KWImIA\nOHjQw/c3PX8jsFmO1zczM7NB2l4Dj4jvAbsDD2f/do+Ic4sOZmZmZsPLs53oG4CjI+JU0nzt0yW9\nvvBkZmZmNqw8o9C/C5wPEBH3AMfTZsCZmZmZFStPAV++eYBZRFwHrFBcJDMzM2snzyC26ZIOBr5P\nGsS2N/BEoanMzMyspTwt8P2BnYHHgUeAnYADigxlZmZmreVZC71RtM3MzKwihi3gkpYHTgAuiYjb\nJJ0CfBy4A9gnIv7RpYxmZmY2SKsu9G8BLwEekbQjsC/wJtLCLqd2IZuZmZkNo1UB3wI4JCKeAN4D\nXBoRD0bE5YDngZuZmZWoVQF/PlsOFWB74Pqm58YWF8nMzMzaaTWI7d+SNiPN+V4VuA5A0vbAo13I\nZmZmZsNoVcAPAy4BXkHqSn9G0tHAp0nTyszMzKwkwxbwiJgGrDvo4YuB70TEfwpNZWZmZi3lWYnt\nBRHxYFFBzMzMLL88K7GZmZlZxeTZTtQjzs3MzComTwv8QUmnSdqk8DRmZmaWS55r4OsCewAnSloZ\nuBD4fkT8s9BkZmZmNqy2LfCIeCYiLoyItwHHAocCD0m6XNJrCk9oZmZmi2nbApf0WuCDwAdI24ke\nAVxGWp3tGuC1RQY0MzOzxeXpQv8lcAGwQ0T8tfGgpGuAdxSUy8zMzFrIU8BPiIjzmh+QdEhEnAZ8\ntphYZmZm1kqr/cAPA1YEDpK0GtDX9Dv7AqcVH8/MzMyG0moQ24Okoj0q+9n4Nwf4cPHRzMzMbDit\n1kK/ArhC0iURcW8XM5mZmVkbrbrQr4qInYBrJA0MenogIl5dbDQzMzMbTqtBbAdkP7cb4rnBBd3M\nzMy6qFUBf8cQLW9I18EHSCuymZmZWQlaFfDtGbql7QJuZmZWslaD2D7yYk4saRRwOrAhMBc4ICIe\nanr+MOBjwPTsoYMi4v4X85pmZma9ou0gNkkPD/F0nkFsuwFjI2JLSZsBJ2WPNbwZ2C8i/tRxajMz\nsx7Xqgv949nP7bOfje70viGOHcpWwLUAEXGrpMmDnt8YOErSK4GrIuLEnOc1MzPrecMu5BIRj2U/\n/wqsR9qF7GDgNc1rorewIjCz6f78rFu94WLgIOCtwFsk7dRRcjMzsx6WZzeyrwDbApeSCv4JkjaJ\niK+1+dWZwPim+6MiYkHT/W9FxMzsNa4CNgKuGu5kEyYsz5gxo9vFBaC/f1yu45bExInjmDRpfPsD\nO1BkXqhf5rrlhfplLiIv1C+z3xeL8vsiqcv7Is9mJu8B3hwR8wAknQXcDrQr4FOBXYApkjYHpjWe\nkPRSYJqk9YDZpFb4ua1O1t8/O0fUZMaMWbmP7dSMGbOYPv3ppX7OItUtc93yNs5fp8xF5G2ctyh1\n+xs3zl+nzH5fLDxnkTrJ3KrQ5yngTwHjgP7s/jLZY+1cBuwgaWp2f39J+wDjIuIcSUcCN5JGqF8f\nEdfmOKeZmZnRehT6d7Kbc4E7JP0UmE9qVUe7E0fEAOmaebP7m56/mHQd3MzMzDrUqgV+O2nk+R9Z\nuHgLwD14KVUzM7NStSrgv4iIxyWtSSrYzdPHXMDNzMxK1KqAfxfYCfg1ixfsAcC7kZmZmZWk1Tzw\nnbKfawGvi4i1AQFv8FaiZmZm5Rq2gDdI2gu4I7u7BnCfpN1a/IqZmZkVrG0BB44G3g4QEQ+S1jD/\ncpGhzMzMrLU8BXyZiHiicSci/lVgHjMzM8shz0IuUyVdDPyANBJ9L+CWQlOZmZlZS3kK+CHAp0kb\nj8wDbibt821mZmYlaVvAI2KOpLOBS1g4F/yVwN+KDGZmZmbDy7Mb2VHAkcAMFp0PvnZRoczMzKy1\nPF3oBwDrRMT0osOYmZlZPnlGoT/Cwp3IzMzMrALytMAfBH4r6VeknckABiLi+OJimZmZWSt5Cvg/\nsn8NfcMdaGZmZt2RZxT6cc33JY3CA9jMzMxKlWcU+qeB/wZWYGHr+15g/QJzmZmZWQt5BrH9P+BN\nwKWkLUQ/ClxRZCgzMzNrLU8B/1dE/AW4k7SV6PnA1oWmMjMzs5byFPBZkrYH7gJ2kbQKaSU2MzMz\nK0meAn4osCtwDfBy4D7g1CJDmZmZWWt5RqHfDRyW3d2j2DhmZmaWR8sCLumjpN3IXg88C/wfcFpE\nXNqFbGZmZjaMYQu4pMOB/YATSIV7ANgQOErSyyPijO5ENDMzs8FatcD3B7aJiCebHrtX0s3A1YAL\nuJmZWUlaDWJ7blDxBiAiHmfRbUXNzMysy1oV8FZF2uuhm5mZlahVF/orJR3D0MXa88DNzMxK1KoF\nfhbDt7TPLCCLmZmZ5TRsC3zwLmSdynYtO500cn0ucEBEPDTEcWcD/46IL7yY1zMzM+sleVZiW1K7\nAWMjYkvgSOCkwQdIOgjYAA+KMzMz60iRBXwr4FqAiLgVmNz8pKQtgU1p3VVvZmZmQ2hbwCXtMMRj\n781x7hWBmU3352fd6mQbohwDfAoXbzMzs461Woltb2BZ4HhJR5MK7QCwDHAU8NM2554JjG+6Pyoi\nFmS33wesRFoQ5pXA8pLujYgLhzvZhAnLM2bM6DYvmfT3j8t13JKYOHEckyaNb39gB4rMC/XLXLe8\nUL/MReSF+mX2+2JRfl8kdXlftJpGtiKwJTAO2L7p8edJBbydqcAuwBRJmwPTGk9ExHeA7wBI+jDw\n+lbFG6C/f3aOl0xmzJiV+9hOzZgxi+nTn17q5yxS3TLXLW/j/HXKXETexnmLUre/ceP8dcrs98XC\ncxapk8ytCn2rUehnA2dLeltE3NB4XNJLI+KpHK97GbCDpKnZ/f0l7QOMi4hzBh3rQWxmZmYdaLud\nKKl7++vAV4DbgJUlHRsRLfcEj4gB4OBBD98/xHEX5A1rZmZmSZ5R6McC3wPeTyrga5I2OjEzM7OS\n5JpGFhH3ATsBV0TELNJANjMzMytJngL+hKRTgU2AayWdBPyt2FhmZmbWSp4Cvg+p63y7rPX9QPaY\nmZmZlaRtAY+ImcB80ijyccCzEbH05xmYmZlZbnlWYvs68G7gvaRr3x+RdHLRwczMzGx4ebrQ3wl8\nCJgTEf3ADqSCbmZmZiXJU8DnD7q/7BCPmZmZWRflKeBTgB8BEyUdBvwGuLjQVGZmZtZS25XYIuJE\nSe8iTR1bHTgmIq4sPJmZmZkNq9VuZGs03b0HuDe7PSBpjYjwXHAzM7OStGqB38zQm4ysmv1evr09\nzczMbKlrtRvZWs33szngJwPvAD5ebCwzMzNrJdda6JLeDtyV3X1DRFxXXCQzMzNrp+UgtqzVfRJp\nLvjHXbjNzMyqYdgWuFvdZmZm1dWqBf5LYB7pmvc0Sc3PDUTEq4sMZmZmZsNrVcBdoM3MzCqq1Sj0\nv3Yxh5mZmXUg1yh0MzMzqxYXcDMzsxpquxY6gKQdgbdlx/8qIn5WaCozMzNrqW0LXNJ/AccCjwAP\nA1+U9MWig5mZmdnw8rTA9wM2jYhnASSdDdwB/HeRwczMzGx4ea6B9wFzmu7PIc0PNzMzs5LkaYH/\nCvixpPNJxfzD2WNmZmZWkjwF/LPAJ4APkVrsvwLOKjKUmZmZtda2gEfEAkkXAleSWuCQ9gT/W5HB\nzMzMbHhtC7ikY4HDgSeBgaan1i4qlJmZmbWWpwt9f2DNiPh3JyeWNAo4HdgQmAscEBEPNT2/B3AE\n6UvBDyLi252c38zMrJflGYX+D2DmEpx7N2BsRGwJHEnaVxwASaOBr5EWh9kC+KSkiUvwGmZmZj1p\n2BZ41nUO8B/gFklXA/OzxwYi4vg2594KuBYgIm6VNLnxRETMl/T67Pr6K4DRwHNL+h9hZmbWa1q1\nwBsD1m4DrmBh8W5+rpUVWbTlPj/rVgdeGBz3XuBPwI3A7FyJzczMrOV2oscBSBoD7BQRP5M0CdgV\n+F6Oc88ExjfdHxURCwa9xk8lXQacT5qmdv5wJ5swYXnGjBmd42Whv39cruOWxMSJ45g0aXz7AztQ\nZF6oX+a65YX6ZS4iL9Qvs98Xi/L7IqnL+yLPILZzSF3cPyMNOHsrsClwUJvfmwrsAkyRtDkwrfGE\npBVJrfodIuI5Sc+waAt/Mf39+RvoM2bMyn1sp2bMmMX06U8v9XMWqW6Z65a3cf46ZS4ib+O8Ranb\n37hx/jpl9vti4TmL1EnmVoU+TwHfJCI2AIiIJ4F9Jd2V4/cuA3aQNDW7v7+kfYBxEXGOpIuAmyXN\nA+4ELspxTjMzMyNfAe+TtGpEPAaQDTpr2VoGiIgB4OBBD9/f9Pw5pNa9mZmZdShPAf9v4A5JvyUN\nXtsM+EyhqczMzKyltvPAI+KHwMbAj4ALSFuL/qToYGZmZja8YQu4pObu75dFxI8j4ucR8Zik/+1C\nNjMzMxtGqxb4gU23Bw8w27aALGZmZpZTnqVUzczMrGJcwM3MzGrIBdzMzKyGWk0jW1/Sw9ntVZtu\nA6xaYCYzMzNro1UBf13XUpiZmVlHWm1m8tcu5jAzM7MO+Bq4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZ\nmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4\nmZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDY0p6sSSRgGnAxsCc4ED\nIuKhpuf3AT4DPA/cBXwyIgaKymNmZjaSFNkC3w0YGxFbAkcCJzWekPQS4ARgu4h4C/BSYOcCs5iZ\nmY0oRRbwrYBrASLiVmBy03NzgC0iYk52fwzwbIFZzMzMRpQiC/iKwMym+/OzbnUiYiAipgNI+jSw\nQkRcX2AWMzOzEaWwa+Ck4j2+6f6oiFjQuJMV828ArwH2aHeyCROWZ8yY0bleuL9/XGdJOzBx4jgm\nTRrf/sAOFJkX6pe5bnmhfpmLyAv1y+z3xaL8vkjq8r4osoBPBXYBpkjaHJg26PmzSF3pu+cZvNbf\nPzv3C8+YMauDmJ2ZMWMW06c/vdTPWaS6Za5b3sb565S5iLyN8xalbn/jxvnrlNnvi4XnLFInmVsV\n+iIL+GXADpKmZvf3z0aejwP+CHwUuBn4lSSAb0XE5QXmMTMzGzEKK+BZq/rgQQ/f33Q7X3+4mZmZ\nLcYLuZiZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCb\nmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZAL\nuJmZWQ25gJuZmdWQC7iZmVkNuYCbmZnVkAu4mZlZDbmAm5mZ1ZALuJmZWQ25gJuZmdWQC7iZmVkN\nuYCbmZnVkAu4mZlZDbmAm5mZ1dCYol9A0ijgdGBDYC5wQEQ8NOiY5YHrgI9GRBSdyczMrO660QLf\nDRgbEVsCRwInNT8paTJwM7A2MNCFPGZmZrXXjQK+FXAtQETcCkwe9PxYUpF3y9vMzCynbhTwFYGZ\nTffnZ93qAETE7yLi713IYWZmNmJ0o4DPBMY3v2ZELOjC65qZmY1YhQ9iA6YCuwBTJG0OTFuSk0yY\nsDxjxozOdWx//7gleYlcJk4cx6RJ49sf2IEi80L9MtctL9QvcxF5oX6Z/b5YlN8XSV3eF90o4JcB\nO0iamt3fX9I+wLiIOCfvSfr7Z+d+wRkzZnWWsAMzZsxi+vSnl/o5i1S3zHXL2zh/nTIXkbdx3qLU\n7W/cOH+dMvt9sfCcReokc6tCX3gBj4gB4OBBD98/xHHbF53FzMxspPBCLmZmZjXkAm5mZlZDLuBm\nZmY15AJuZmZWQy7gZmZmNeQCbmZmVkMu4GZmZjXkAm5mZlZDLuBmZmY15AJuZmZWQy7gZmZmNeQC\n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\nSVKD/gP6Qh5L3Ar8ZwAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x10ca56c50>"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.figure()\n",
"plot = dancy.sort(inplace=False)[:10].plot(kind='bar', figsize=(8, 6))\n",
"plot.set_title(\"Bottom Ten Dancy Artists\")\n",
"plot.set_xlabel(\"Artist\")\n",
"plot.set_ylabel(\"Echo Nest Dancibility Score\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": [
"<matplotlib.text.Text at 0x10cbdab10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\ngg==\n",
"text": [
"<matplotlib.figure.Figure at 0x10cb1b390>"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Interactive Exploration"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.html.widgets import fixed, IntSliderWidget, interact\n",
"from IPython.display import display "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def interactive_plots(df, col_name, bins):\n",
" \"\"\"Univariate plots to use with interact Widget\"\"\"\n",
" continuous = [\n",
" u'acousticness', \n",
" u'danceability',\n",
" u'duration',\n",
" u'energy',\n",
" u'instrumentalness', \n",
" u'liveness', \n",
" u'loudness', \n",
" u'speechiness', \n",
" u'tempo', \n",
" u'valence'\n",
" ]\n",
" discrete = ['key', 'mode', 'time_signature']\n",
" col_label = col_name.capitalize()\n",
" \n",
" if col_name in continuous:\n",
" # create figure and axes\n",
" fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(14, 6))\n",
"\n",
" # Kernel Density Estimate\n",
" sns.kdeplot(df[col_name], shade=True, ax=ax0, legend=False)\n",
" ax0.set_title(\"Kernel Density of Song \" + col_label)\n",
" ax0.set_xlabel(\"Echo Nest {0} Score\".format(col_label))\n",
" ax0.set_ylabel(\"Density\")\n",
" \n",
" # Histogram\n",
" df[col_name].hist(bins=bins, ax=ax1) \n",
" ax1.set_title(\"Histogram of Song \" + col_name.capitalize())\n",
" ax1.set_xlabel(\"Echo Nest {0} Score\".format(col_label))\n",
" ax1.set_ylabel(\"Frequency\")\n",
" \n",
" elif col_name in discrete:\n",
" # Barplot\n",
" plt.figure(figsize=(8, 6))\n",
" plot = sns.barplot(df[col_name])\n",
" plot.set_title(\"Song \" + col_label)\n",
" \n",
" else:\n",
" return \"NA\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ignore = [u'analysis_url', u'artist_id', u'artist_name', u'audio_md5', u'id', u'title']\n",
"\n",
"# Interactive Variables\n",
"col_names = tuple(col for col in songs.columns if col not in ignore)\n",
"bins = IntSliderWidget(min=5, max=200, step=1, value=50)\n",
"\n",
"interact(interactive_plots, df=fixed(songs), col_name=col_names, bins=bins)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\ngv1/xNY3ugjy92IAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x10cea4bd0>"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.html.widgets import fixed, IntSliderWidget, interactive"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ignore = [u'analysis_url', u'artist_id', u'artist_name', u'audio_md5', u'id', u'title']\n",
"\n",
"# Interactive Variables\n",
"col_names = tuple(col for col in songs.columns if col not in ignore)\n",
"bins = IntSliderWidget(min=5, max=200, step=1, value=50)\n",
"\n",
"interactive(interactive_plots, df=fixed(songs), col_name=col_names, bins=bins)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nn9WqhApOiIhI7ksvAFydaI06FJElUSIleW96aJ9Knz/LdAl0rSUlIiIisuyUSEne29s3TDweo66q\nLOpQckpDbTmlJarcJyIiIpINSqQk73X3jZCoKSceV+nzTLFYjOb6Sjp7DjCVTEYdjoiIiEhBUSIl\neW14dIIDo5M0aljfrFoaqpicSk0X5BARERGR5aFESvKaCk3M72DBCQ3vExEREVlOSqQkrx0sfa41\nJ2bTEpY936nKfSIiIiLLSomU5LVu9UjNa7pHSpX7RERERJaVEinJa+keqUYlUrOqrSqjoqxEa0mJ\niIiILDMlUpLX0nOkEhraN6tYLMaqRCV7+0aYmJyKOhwRERGRgqFESvJaV98ItVVllJboozyXloYq\nUino7BmOOhQRERGRgqHfPiVvTUwm6d8/RqN6o+alyn0iIiIiy0+JlOStfQMjpIAGrSE1r1UNQSK1\nc5/mSYmIiIgsFyVSkrcOlj5XIjWfVYmgBLp6pERERESWjxIpyVtajHdxqitKqaksVeU+ERERkWWk\nREryltaQWrxViUp6BscYGZuMOhQRERGRgqBESvLWvv5RABpUbGJBqxqC4X27tTCviIiIyLIojToA\nkUO1t2+YirI4leUlUYeS81rS86T2HWDD2kTE0YiIyEoZHx+no6Nt+nEi8fwIoxEpLEqkJC+lUin2\n9Y/SWF9BLBaLOpycly6BvlPzpEREikpHRxtXXH071YlWhge6uPmTtTQ2rok6LJGCoERK8tLAgXEm\nppI0an7UojRrLSkRkaJVnWiltnFt1GGIFBzNkZK8lC59ntD8qEWpKCuhvqZclftERERElokSKclL\nqti3dC2JSgaHJxgcHo86FBEREZG8p0RK8tLBREo9UouVXph3t4b3iYiIiBw2JVKSl9QjtXSrGsJ5\nUiqBLiIiInLYlEhJXurqHyEWg/pq9UgtVst0wQnNkxIRERE5XEqkJC91949SX11OPK7S54vVVF9J\nLAY7NbRPRERE5LApkZK8MzY+xeCBcc2PWqLSkjiNtRXs2jdEKpWKOhwRERGRvKZ1pCTvdA9oftSh\nWtVQyZaOAfr2j9FUXxl1OCIiOWd8fJyOjjYA2tvblu28yanJZ51v/fqjKS/XDUGRfKZESvKOCk0c\nupZEFVs6Bti174ASKRGRWXR0tHHF1bdTnWilZ+cmmteduCznHR3q4ZpbeqlOdDI80MV1V13Khg0b\nl+XcIhINDe2TvNPdPwqo9PmhWNUQlEDfpXlSIiJzqk60Utu4lqq6pqyctzrRuqznFZFoKJGSvNPd\nF/RIJdQjtWSrVLlPREREZFkokZK8k54j1ahEaskaaysoicfYqbWkRERERA6LEinJO119I1SWl1BR\nXhJ1KHknHo/RVF/B7n0HSCZVuU9ERETkUGWt2ISZxYHPAacCY8Db3X1rxvZLgI8Ck8CN7n7DXMeY\n2fOAG4AUsCV8Xr8FFqFkKsW+gRGaVSjhkLU0VNHdP0r3wAirG6ujDkck75hZGXAjcDRQAfwDsAm4\nCUgCTwDvUTslIlLYstkjdRlQ7u7nAH8DXJPeEDZC1wIXA+cD7zCz1vCYilmO+QTwD+7+WwSN1muy\nGLfksP79Y0xOpWio07C+Q9WSUMEJkcP0RqDb3c8DXgl8lqC9+lD4XAx4bYTxiYjICshmInUucCeA\nuz8InJmx7UTgGXcfcPcJ4D7gvPCYH8xyzAjQbGYxoA4Yz2LcksPSpc81P+rQqeCEyGG7FfhY+HMc\nmABOd/efhc/9AHh5FIGJiMjKyeY6UvXAYMbjKTOLu3sy3DaQsW0/kJjrGODfgR8CHwH6gXuzGLfk\nsK7+dMU+lT4/VNMl0FVwQuSQuPsBADOrI0iqPgJ8OmOXIYI2TQpU5uK6y7lob6HJXNwYtAixFJ5s\nJlKDBL1HaekkCoIkKnNbHUGCNOsxZvZl4LfcfZOZvZtgCMV7FwqgpaVuoV2KVr5em+Hx4CO0bnU9\nDQ3Zmd+TrfPmikSiivKyOHt6R5b8OcjXz81K0LXJP2b2feCLwLfD0RFLOXY9cBvwWXf/qpn9S8bm\ndJu2oFz+3ORybHD48fX11T7rcVNTLS0tdc95fjaZi+vOtmjvYs6V3udwzPUe5tsHWPT7nO+8i7Fl\ny5bpxY2HB7q4+ZNvYO3aE+aNbzmuS7bkalxpuRxfLsd2OLKZSN0PXALcamYvAR7L2LYZ2GhmjcAB\ngmF9VxMUk5jtmGqCXiuATuCcxQTQ3b1/4Z2KUEtLXd5em7bdQUdmaQz6+4eX/fwNDdVZOW+uaa6v\nZGf3EJ17BigtWdwI33z+3GSbrs3ccrzx/Gfgj4Grzex7wE3u/tBCB5nZaoJREu9293vCpx8xs/Pd\n/V7gVcDdiwkgVz83uf6ZXo74enuHnvO4u3v/c56fS3px3eGBvbOee6Fzpfc5HHO9h/n2AZb0Puc6\n72KPS1+nxca3HNclG4rh/0S25HJscHjtVDYTqW8BF5vZ/eHjt5nZ64Fad7/ezK4E7iIYX/4Fd+80\ns+ccE/79duAbZjZKUM3vz7IYt+Swrv4R4jGoqyqLOpS81tJQRWfPMHt6h1nXsvi7kiKFJEx67jWz\nKuD3gdvMbBC4Hvi8u4/NceiHCIbufczM0nOlrgA+Y2blwFPAN7IbvYiIRC1riVRY9vVdM57ekrH9\nDuCORRyDu/8Y+HEWwpQ809U3Qn1NOfF4LOpQ8trBghMHlEhJUTOzC4E3E1SR/QFwS/jz7cBvz3aM\nu19BkDjNdEF2ohQRkVyUzR4pkWU1MjbJ0MgExxyR00OF8sJ0CfR9Q8DqaIMRiYiZtQHbCdaEeo+7\nj4TP/xR4OMLQREQkD2Sz/LnIsto3MApAg0qfH7bMHimRInYRcLm7fwmImdnxAO4+5e6nRRuaiIjk\nOiVSkje6+oLS5w0qfX7YqitLqaoooaNLa0lJUXs14XqHQCtwh5m9M8J4REQkjyiRkryRXoxXPVKH\nLxaL0ZKoomdglNHxyajDEYnKO4GXArj7DuB04H1RBiQiIvljwUTKzD5oZkesRDAi8+keUI/Ucmpp\nrCIF7NTwPilepcB4xuNxIDnHviIiIs+ymGITVQTlYbdyiAsXiiyH7nBoX0I9UsuitSEoOLGza4jj\n1yYijkYkEt8GfmJmtwAx4HUE1fpEcsr4+DgdHW0ATEwEv4KVlZXR3t6WEzEBrF9/NOXlutEpxWXB\nRMrd/9bM/o5g+MPrgb81s58AN7j7b7IdoEhaV/8IVRUlVJSVRB1KQWgJEynNk5Ii9jcE60edB0wA\n17n7t6MNSeS5OjrauOLq26lOtNKzcxNVdc3TPzevOzHymIYHurjuqkvZsGFjJLGIRGWxc6SqgGOB\nDQTDHnqB68zsU9kKTCRTMpmiZ2CUhhr1Ri2XVYlKYjFo78rd1cZFsilcu3ATcCvwHaDPzM6LNiqR\n2VUnWqltXEtVXdOzfs6FmKoTrZHGIRKVBXukzOwrBCVivw/8vbvfFz5fAXQS3NETyaq+/WNMJVM0\n1CmRWi6lJXGa6irY1X2AZCpFPKZFjqW4mNlngUuAbUAqY9OF0UQkIiL5ZDFzpO4G3unu0+N/zKzc\n3cfM7OTshSZyUFe/Ck1kQ0tDFT3t/ewbGJ2eMyVSRF4BWHohXhERkaVYzNC+P5uRRJUAvwJw985s\nBSaSSaXPs6O18WDBCZEitA0tAyIiIodozh4pM7sHOD/8ObMc7BTBWHKRFZNOpBLqkVpWrRkFJ04/\noSXiaERWXB/wlJn9HBgNn0u5+59EGJOIiOSJORMpd78QwMyuc/crVi4kkeea7pFSsYllpcp9UuTu\nDP+k50fFePZcKRERkTnN1yP1O+5+B/BrM3vLzO3u/qWsRiaSoat/hJJ4jNqqsqhDKSi1VWVUlpfQ\nocp9UoTc/SYzOxY4GbgLWO/u2yIOS0RE8sR8Y8NfFP594Rx/RFZMd98I9TXlxOOqLLecYrEYrQ1V\ndPePMjI2GXU4IivKzP6IYAHe64Bm4H4ze3O0UYmISL6Yb2jfx8O/35p+zswSBHfsnsh+aCKB4dFJ\nDoxOThdGkOXV0lhFe9cQO7uH2LiuIepwRFbSXwPnAve6+x4zO52gUu3N0YYlsnTJqUna29umH69f\nfzTl5fk1r7gQ3oMUl8WsI/V24ByC9aJ+DQyZ2Tfd/cPZDk4EVLEv21aHCWr7XiVSUnSm3H3QzICg\nEq2ZTUUck8ghGR3q4ZpbeqlOdDI80MV1V13Khg0bow5rSQrhPUhxWcw6Uu8GXg68iaBa3xXAg4AS\nKVkRSqSya3VjNQBtezVPSorOk2b2PqDczF5I0N79JuKYRA5ZdaKV2sa1UYdxWArhPUjxWNT6Ge7e\nC7wa+L67TwKVWY1KJEO3FuPNqub6SkpKYrTtUSIlRec9wFpgBLgRGCRIpkRERBa0mB6pJ83sDmAD\n8CMz+zrwUHbDEjlIPVLZFY/HaElUsXvfASYmk5SVan1SKQ7hYvN/E3UcIiKSnxaTSP0JcDbwhLuP\nm9n/EJSJFVkRXVqMN+tWN1Wxp3eY3fsOcPQRdVGHI7IiZiw2n7bb3deteDAiIpJ3FpNI1QKnAheY\nWbr29BnA32UtKpEM3f0jVFeUUl5aEnUoBSuYJ9VD2979SqSkaLj7dPermZUBlxEUVxIREVnQYsbw\n3ApcMGNfLeYjK2IqmaRncEzzo7IsXXCiXQUnpEi5+4S73wq8LOpYREQkPyymR2q1u78865GIzKJ3\ncIxkMqX5UVnW0lBJLIYKTkhRMbM/zngYA04GxiIKR0RE8sxiEqlHzOwF7v5o1qMRmeHg/CglUtlU\nWhJnVX0lHV1DJJMp4nF1OktRuBBIhT+ngH3A5dGFI8UiqoVnk1OTbN++nd7eoWe9/kLHaJFckdkt\nJpE6Bfi1mXUBo+FzKXc/LnthiQS6+oJEqqlOiVS2rW6qpntglD29wxy5qibqcESyzt3fGnUMUpyi\nWnh2dKiHj/33L6hOtNKzcxPN607M2VhF8sFiEqnfDf9OoblRssL29g4D0KBEKutWN1bxxPZgYV4l\nUlIMzGw7c7dtumEoWRXVwrPp1x0e2LvkY0Tk2RYsNuHuO4BzgXcQDHs4L3xOJOvSPVKNSqSybnVT\nUHBC86SkiHwFuJ6gEu2pwKeA+4CXoOp9IiKygAV7pMzsn4F1wOnAp4G3mdkL3f3KbAcnsrdvmIqy\nOFXlKn2ebasbq4nFYNvuwahDEVkpr3b30zMe/5eZvcPdF3+rXkREitZiyp//NvBmYNTd+4CLgVdl\nNSoRIJlM0dU3QkNtBbGYRpVmW1lpnFWJKtr27GdyarZ1SkUKj5m9IuPnywDdSRARkUVZzBypqRmP\nK2Z5TmTZ9e0fYyqZ0rC+FXRkczXd/SPs6j6ghXmlGLwd+LKZrSaYJ7UJeEu0IYmISL5YTCJ1K/A1\noMnM/pKgd+qrWY1KhGBYH0BjXWXEkRSPNc01PLq1h+2dg0qkpOC5+6+Bk8xsFTDm7pogKCIii7aY\noX3fA74LdAMvBT7m7v+Y1ahEyCw0ofUqVsqa5qDgxLZOjW6Swmdmx5jZj4AHgDozu8fMjo06LhER\nyQ9zJlJm1mpmPwPuBd5LMJzvZcC7zaxhheKTIqYeqZXXXF9JWWlcBSekWPwXQRGl/cAegip+/xNp\nRCIikjfm65H6D4IysKvd/Sx3PwtYDTwK/NtKBCfFbbpHqlY9UislHo9xRGMVnfsOMDI2GXU4Itm2\nyt3vAnD3pLvfACQijknksCWnJmlvb2Pr1qdpb2/L+fMWg/HxcbZufXr6z/j4eNQhyTKYb47Uqe7+\nh5lPuPu4mX0Y+E12wxKBPb1h6fOKxUzlk+WyprmGju4DtO3Zz/OObow6HJFsGjazdekHZvZSYDTC\neESWxehQD9fc0kt1opOenZtoXndiTp+3GHR0tHHF1bdTnWhleKCL6666lA0bNkYdlhym+XqkRmZ7\n0t2TqGqfZFkylaK7X6XPo5CeJ7Vd86Sk8F1JMA/4eDN7lKCQ0hXRhiSyPKoTrdQ2rqWqrikvzlsM\n0teuOtEadSiyTHSrX3JS3+AYk1MqfR6FNc01gBbmlaLQCrwIOAEoATa7+1i0IYmISL6YL5E62cy2\nz7HtyGwEI5LWNV1oQonUSqurLqO2qowtO/tJpVLqEZRCdrW7nwQ8EXUgIiKSf+ZLpE5YsShEZtjb\nny40oURqpcViMda31rKprY89vcPTPVQiBWirmd0IPMjBuVEpd/9ShDGJiEiemDORcvcdh3NiM4sD\nnwNOBcaAt7v71oztlwAfBSaBG939hrmOMbNW4HqggWD1+bccbnyS27p602tIKZGKwrqWGja19fH0\nzgElUlJwzGytu+8CegjalJfM2GVRiZSZnQV8yt0vNLPTCNZcfDrc/Hl3//pyxSwiIrknm3OkLgPK\n3f2csLG5JnwOMysDrgXOBIaB+83sdoIFfytmOeZfgJvd/RtmdgHwfGBHFmOXiKXXkGpQIhWJ9a21\nAHh7P+e9QCN5peDcAZzm7m81sw+4+6eXegIz+yDwJmAofOoM4Fp3v3YZ4xQRkRw2X9W+w3UucCeA\nuz9IkDSlnQg84+4D7j5BsF7VeeExP5jlmHOA9eEK9G8EfpLFuCUH7O0bprwsTrVKn0eiub6SyvIS\nvKMv6lBEsu2Nh3jcM8DrCHq0IEikXmNm95rZDWZWuyzRiYhIzspmIlUPZJb9mgqH7qW3DWRs20+w\nCOJsx5QAxwC97n4x0A78dbaCluglUym6+0ZV+jxC6XlSvYNj9AxoWR2Rmdz9NoKh6WkPAh9w9/OB\nbcDHIwlM5pW5KKoWlI2O/h2kUGTzdv8gUJfxOB6uQQVBEpW5rQ7on+OYKTPrAW4Pn/su8I+LCaCl\npW7hnYpULl+b7r4RJqaSrG6uoaGhesVfP4rXzEUbj2rk6Z0D7BkY5XnHtwC5/bmJmq5N0fuWu6dv\nEH4b+MxiDsrlz00uxwaHFt+WLVumF0WduaBsU1MtLS119PUdfmfiUs+V3n8uyxFTts32HmbGnd5n\nvn+Hhc4ZpcOJZa5rsZxy6VrNlMuxHY5sJlL3A5cAt5rZS4DHMrZtBjaaWSNwgGBY39VAao5j7gNe\nA3wZOJ9Flqrt7t6/DG+j8LS01OX0tdnUFgwnq60oob9/eEVfu6GhesVfM1c1hxUTH35qDycf1ZDz\nn5so6drMLUcbz8zlPY6csdRHyt2PO4Rz3mlm73f3h4CLgIcXc1Cufm5y/TN9qPH19g5NL4o6PLD3\nOdu6u/fT2zs0x9FLe52lnCu9/3zbc91s72Fm3JnXZa5/h4XOGZXD/T8x17VYLrn8fzaXY4PDa6ey\nmUh9C7jYzO4PH7/NzF4P1Lr79WZ2JXAXwfDCL7h7p5k955jw778CbjCzdxH0XL0hi3FLxKbXkFLp\n80itbqyirDSOt/dHHYrIclvO5T1S4d9/DnzWzCaATuAdy/gaIiKSg7KWSLl7CnjXjKe3ZGy/g6By\n0kLH4O7twCuyEKbkoL19QelzVeyLVjweY11LDds799O3fyxXexZElmy5ls8Iz3NO+POjBJVnRUSk\nSGSz2ITIIenq02K8ueLYNfUAPL6tJ+JIRERERHKLEinJOXt6hykvjVNdqdLnUTsunUhtVSIlIiIi\nkkmJlOSUZCpFd/+ISp/niMa6Chpqy3lyRy+TU8mFDxAREREpEkqkJKf07x9jYjJJY72G9eWCWCzG\ncWvqGR2fYtP23qjDEREREckZSqQkp2h+VO457shgeN/Dm+YuUSsiIiJSbJRISU7Zmy59rop9OWN9\nax0lJTEe3qxESkRkpYyPj7N169Ns3fo07e1tUYcjIrPQbH7JKdM9UkqkckZZaZyjWmvZ3rmfnoFR\nmhOVUYckIlLwOjrauOLq26lOtNKzcxPN606MOiQRmUE9UpJTNLQvNx2/NgHAr7wr4khERIpHdaKV\n2sa1VNU1RR2KiMxCiZTklM7eYcpU+jzn2PoG4vEYP39yT9ShiIiIiOQEJVKSM5LJFF19wzTVqfR5\nrqmuLGPj+gba9w6xa9+BqMMRERERiZwSKckZPYOjTE6laK7XHJxcdNoJLQA8oF4pERERESVSkjs6\ne4KKfU1KpHLSicc0UV4a5xdP7CGZSkUdjoiIiEiklEhJztjTm06kVGgiF5WVlmDrG+jdP8bTHf1R\nhyMiIiISKSVSkjP29ARzb5rq1COVq046Jqgcdc8juyKORERERCRaKo0mOaOzV4vx5rqjVtfS0lDJ\nQ5u7+N3zhlndWB11SCJSxMbHx+noOLhY7fr1R1NeXh5hRIcn8/1oEV6R3KdESnLGnp5h6mvKKStV\nR2muisVinH3yEdx+/w6+/4s23vZqLRApItHJXLR2eKCL6666lA0bNkYd1iHTIrwi+UW/sUpOGBmb\nZODAOE3qjcp5J6xroKmugp8/sYfewdGowxGRIpdetLY60Rp1KMtCi/CK5A8lUpIT0oUmVPo898Xj\nMc46aTVTyRTff0BDT0RERKQ4KZGSnLCnRxX78slJxzTRUFvOPY/sYuuugajDEREREVlxSqQkJ3T2\nqmJfPimJx3jVWUeTSsH1332KsfGpqEMSERERWVFKpCQnqEcq/6xvreXFz2ulq3+EW37ydNThiIiI\niKwoJVKSEzp7hykrjVNbVRZ1KLIELz11DasSlfz0N7v55r1bSaVSUYckIiIisiKUSEnkkskUe3uH\naaqrIBaLRR2OLEFpSZzfO+84GmvL+d4v2vji9zczMalhfiIiIlL4lEhJ5HoGR5mcStGkin15KVFb\nwRsvPoEjmqq47/FOPvifv+CHD3UwNDIRdWgiIiIiWaMFeSVyKn2e/6ory/ijl23k50/u4ZGn9/G1\nu5/ma3c/TWtDFUeuqqG6sjT4U1FKTVUZqxurOLK5huZEpXohRWRJxsfH2bJlC729Q7S3L7wEw/j4\nOB0dwX6L2V+WLjk1OX1tJyaCm2hlZWW63lLwlEhJ5DpVaKIglJeVcMEL1/LiE1fz6DP7aN87xJ7e\nA3T1j8x5zKpEJeeesoZzTzmCVYmqFYxWRPJVR0cbV1x9O9WJVnp2bqJ53YnLur8s3ehQD9fc0kt1\nopOenZuoqmvW9ZaioERKIpfukVLp88JQXVHK2ScfwdknQyqVYmxiitHx4M/Y+BTDY5P07R+ju3+E\nbZ2DfOe+7XzvFzv43fOO47dfdBTxuHqoRGR+1YlWahvXMjywNyv7y9JlXmNdbykWSqQkcnt6gjWk\nGuvUI1VoYrEYleWlVJbP/lUzPjHF5vZ+fvbYbm69Zyu/8m7e+7pTaKjVZ0FERERym4pNSOQ6e4ap\nry6jrFQfx2JTXlbCqRua+dNXn8jzjmpg2+5Brv7qIwwOj0cdmoiIiMi89JurRGpkbJKBA+Oq2Ffk\nqipKueScYzjDWujsGeaar/2GA6Oq+iciIiK5S4mUREoV+yQtFovxstPW8oLjm+noGuKG7z6lBX5F\nREQkZymRkkjtUcU+yRCLxXjFmes5anUtj27t4f8e64w6JBEREZFZKZGSSHWqYp/MEIvFePVZR1NR\nFuerP36a7nnKp4uIiIhERYmURCpdsU89UpKpvqacl5+xnrGJKb74g00a4iciIiI5R+XPJVKdPcOU\nlcaprSqLOhTJMScd08hTbb1sbuvnye29PP+45qhDEhFZUHJqkvb2NoDpv0WyYXx8nI6O4DPW11dL\nb+8Q69cfTXl5ecSRFQ8lUhKZZDJFV98ITfUVxGJahFWeLRaLcf4L1rK9czPf+OlWTjq2ibg+JyKS\n40aHerjmll6qE5307NxE87oTow5JClRHRxtXXH071YlWAIYHurjuqkvZsGFjxJEVDw3tk8j0DI4y\nMR+8BCcAACAASURBVJVU6XOZU2tjFSce3Uh71xAPb+6KOhwRkUWpTrRS27iWqrqmqEORApf+rNU2\nrp1OqGTlKJGSyKRLn2t+lMznpaesIR6D2+7dxlQyGXU4IiIiIoASKYlQ576g0ITWkJL5NNZVcMpx\nzXT1j/DIln1RhyMiIiICKJGSCO0KE6lVCSVSMr8znxcMV/jRwx0RRyIiIv+/vXuPj6uu8z/+mklz\nbZJJmiZpm/QCTfm0UCh3ELBQ5eJlQV33J6y6/GQXXF3chy4u6rKrq/52F11+IPhbdV1AUdTFFdFF\nXCzKrVC03EoptP32nqZtmqZJc0+b2/z+OGfKEJI2aWbmnEzez8ejj86c23zmO+ecbz7nfM/3KyKe\ntHU2YWZR4NvAacBh4Hrn3Lak+VcCXwQGgO855+4ZwzofBj7lnLsgXXFL5uw90E00AuXFatonR1dR\nWsCCWSVs2d1O/b5O5s8qCTokEczsPOBrzrkVZlYH3AcMAa8BNzrn1G+/iEgWS+cdqfcDeX7S8wXg\n9sQMM8sF7gAuAy4GPm5mVf46+aOscwbw52mMVzIoHo+z90A3ZSX55OToxqgc29lWCcDvdFdKQsDM\nPgfcDSSuBN0B3OKcWw5EgPcFFZuIiGRGOv+CvRD4DYBzbg1wdtK8JcBW51y7c64feBZY7q/z6PB1\nzKwC+GfgM3gVlExybV199PYNMjNWGHQoMkmcMLuU8pJ8/rChiY7uvqDDEdkK/DFv1ElnOudW+a8f\nBS4NJCoREcmYdCZSpUBH0vtBv+leYl570rxOIDbKOnnAvcBNQFf6wpVM2qvno2ScIpEIZ51UyeBQ\nnGfXNwYdjkxxzrmH8JqmJyRf5OvCq9NERCSLpXNA3g4g+UGGqHMu0Xdx+7B5JUDbSOsAy4A64DtA\nAXCymd3hnLvpWAFUVuo5itEEXTYdG70xgebNLqWsrCjQWIYLWzxhEnTZvG1ZDU+u3cOajU1c+0en\nhGog56CPKQlcct/8iTrtmMK834Q1toMHi0edN2NG8VviPtryI6071uVTKcjPzqTxfs+Rfs8gTSSW\n4d85Fd9tpHIMW5klhDGmVEhnIrUauBL4mZmdD7yaNG8TsMjMyoFuvGZ9twHx4es4514AlgKY2Xzg\ngbEkUQDNzZ2p+i5ZpbKyJPCycTtbASicFqWtrSfQWJKVlRWFKp4wCUvZLKwpZXNDOy++tpcFs0qD\nDgcIxzEVVtlaeY5grZld7Jx7Gng38PhYVgrrfhPmfbq1dfTGKa2tXW+J+2jLj7TuWJdPpSA/O5PG\n+z1H+j2DMtFjYvh3TsV3G6kcw1RmCWE+n8DE6ql0Nu37BXDIzFbjdRrxN2b2p2Z2g/9c1E3ASuA5\n4F7nXONI6wzbZgQv2ZJJbu+BbiIRb4wgkfFYekIFAKvX7ws4EhHgjTrps8BXzOw5vIuUDwYXkoiI\nZELa7kj53b5+ctjkzUnzHwEeGcM6yfN3Aur6fJI70mNfcT7T1GOfjNMJs0spzJ/Gmg1NXP2OOu1D\nEpjkOsk5twW4JMh4REQks/QXiGRce3cfPYcH1NGEHJecaISTF5TT1dvP+m0tQYcjIiIiU5QSKck4\n9dgnE7V0wQwAfv+6mveJiIhIMJRIScbt8ROpilIlUnJ8qsoLKS/JZ922Fg73DQYdjoiIiExBSqQk\n4xp1R0omKBKJsHheGf0DQ6zfruZ9IiIiknlKpCTjGpq7iERghu5IyQScNLcMgBfd/oAjERERkako\nneNIibxFPB5nT3M35SXqsU8mpqqskLLiPF7ZeoC+/kHycnOCDklE0qSvr4+GhnoAdu2qT/nyQRoa\nHDgSY9hjzaTkcgGYO3c+eXl5oy6f/JuPZfl0CUsckhlKpCSjWjoOcahvkPmzpswgnZImkUgEm1vO\nmo1NrN/eyllWGXRIIpImDQ31fPq2hymKVdGyeyMVtUtSunyQDnW1cPtPWymKNYY+1kxKLpee9v3c\ndfNVLFy4aNTlk3/zsSyfLmGJQzJDtwQko3Y3e89HVZUVBhyJZAObp+Z9IlNFUayK4vIaCktmpGX5\nIE2mWDMpUS5Fsaq0LJ8uYYlD0k+JlGTUnuYuAGbGlEjJxFWXFxKbnse6rQfoHxgKOhwRERGZQpRI\nSUY17PcSqcoydTQhExeJRKirjXGobxDXcDDocERERGQKUSIlGbW7uYvcaVFi0/XgpaRGXU0MgHVb\n1A26iIiIZI4SKcmYgcEh9rX2MjNWQCQSCTocyRK1lcXk50ZZu6WZeDwedDgiIiIyRSiRkoxpbOlh\naChOpTqakBTKiUY4cU6M1s7DRzozEREREUk3JVKSMbubE89HKZGS1Fo4pxSAV7YeCDgSERERmSo0\njpRkzBuJlDqakNQ6cU4p0Qis3dLMlRcsCDocETlOGsxUMmks+1timYMHi2lq8jo1ys3NHXX5VMWg\nY2FyUCIlGbM70WOfuj6XFCvIm0ZtZTE7Gztp7zpMrDg/6JBE5DhoMFPJpLHsb8MHdy4sqUjp/jla\nDDoWJgclUpIxu5u7mV44jcJ87XaSenU1MXbt72LdthaWL5sTdDgicpwSg5mKZMJY9rfEMj3tTWnZ\nP0fbpo6F8NMzUpIRXb39HOw8THVZUdChSJZa6HeD/soWPSclIiIi6adESjKivqkTgOoZatYn6VFe\nks+M0nxe39lKX/9g0OGIiIhIllMiJRmxy0+kqsp1R0rSZ1FNjP6BITbUHww6FBEREclySqQkI3Y1\neR1NVJfrjpSkT6J53zp1gy4iIiJppkRKMqJ+Xyd5uVFi09V1p6TPnIrpFObn8MqWAwzF40GHIyIi\nIllMiZSk3eG+QZpae6gqKyQSiQQdjmSxaDTCwjkx2rv7qN/XGXQ4IiIiksWUSEnaNTR3EQeq9XyU\nZECdeu8TERGRDNCAPpJ2iY4m9HyUZMKCWSXkRCOs3dLMB5afGHQ4InIMfX19NDTUA7BrV/2R6UOD\nA0feJ09Ph0x+loxf8u/T398PQG5uLgBz584nL2/0xwaS96/h64/2W4+2T44W01jiSJWxxCaZo0RK\n0k499kkm5eXmML+6hO2NHTS39VJZpgReJMwaGur59G0PUxSromX3RipqlwBwqKuF23/aSlGs8U3T\n0yGTnyXjN/z3KSypoChWRU/7fu66+SoWLlw06rrJ+xfwpvVH+61H2ydHi2kscaTKWGKTzFHTPkm7\n+n2d5EQjVMQKgg5Fpoi6WjXvE5lMimJVFJfXUFgyY0zTMxmDhEPy75N4nUiOxrru8PWP9luPZ5mx\nxpEq2lfDQ4mUpNXA4BC7m7uZGSsgJ6qOJiQzFs7xEqm1W5oDjkRERESylRIpSau9B7oZHIpTPUPN\n+iRzSopymTWjiM0NbXQf6g86HBEREclCSqQkrXb6XVDPUiIlGbaoNsZQHF7d1hJ0KCIiIpKFlEhJ\nWm3f2wHA7AolUpJZi2oTzfv0nJSIiIiknhIpSavte9uZlhNhZkw9p0lmVZQWUFacx/ptLfQPDAUd\njoiIiGQZJVKSNof7Btl7oJvq8iJ1NCEZF4lEqKuJcbh/kE27DgYdjoiIiGQZjSMlaVPf1MlQXM36\nJDh1tTFedM2s3XKAU0+sCDocEUkjDaobbun4fcL+m4c9Ppk4JVKSNjsaE89HTQ84EpmqamcWU5CX\nw9otzXz08pOIRnRnVCRbaVDdcEvH7xP23zzs8cnEqWmfpM0biZTuSEkwotEIC+fEaO/qo97vQVJE\nspcGKg23dPw+Yf/Nwx6fTIwSKUmb7Xs7KMjLITY9L+hQZApT730iIiKSDkqkJC06evo40H6I2RVF\nRNScSgK0YFYJOdEIazc3Bx2KiIiIZBElUpIWO/V8lIREXm4O82eVsOdAN40t3UGHIyIiIllCiZSk\nxdY9ej5KwmPJvHIAnt+4P+BIREREJFukrdc+M4sC3wZOAw4D1zvntiXNvxL4IjAAfM85d89o65jZ\n6cA3gUF/+rXOOf1FFGKbG9oAqJmpO1ISvLraGDk5EdZsaOKqCxeouamkjZm9DLT7b7c75/4iyHhE\nRCR90nlH6v1AnnPuAuALwO2JGWaWC9wBXAZcDHzczKr8dfJHWOdO4FPOuRXAQ8Dn0xi3TFD/wBA7\n9nZQWVZAQZ562Jfg5efmsHBOKftae2jY3xV0OJKlzKwAwDm3wv+nJEpEJIulM5G6EPgNgHNuDXB2\n0rwlwFbnXLtzrh94Fljur/PoCOtc45x71X+dC/SmMW6ZoPp9nfQPDjG3sjjoUESOOHm+1/Xsmg1N\nAUciWWwZUGRmK83scTM7L+iAREQkfdKZSJUCHUnvB/2me4l57UnzOoHYaOs45/YBmNkFwI3AN9IW\ntUzY5t1es77aKiVSEh4nzC4lb1qUNRuaGIrHgw5HslM3cJtz7grgE8CPk+o9EQmxocEBdu2qZ9u2\nLezaVZ+xddOxnbDo6+tj27YtbN68mW3bttDX1xd0SCmXznZXHUBJ0vuoc27If90+bF4J0Ha0dczs\nauAW4D3OuZaxBFBZWXLshaaodJbNziav6dTJC2dSOj0/bZ+TLmVl6iBjNJO9bE45sYK1m5s50NXP\nKSdWpHTbOt8IsBnYCuCc22JmLcBsYM9oK4R5v8lUbAcP6qKbpN6MGcVUVpaMef861NXC7T9tpSjW\nSMvujVTULhnzZx3PuiPFd7TtjPX7JJYLg82bN/Pp2x6mKFZFT/t+7r/1w9TUnBR0WCmVzkRqNXAl\n8DMzOx94NWneJmCRmZXjXcFbDtwGxEdax8w+CnwcuMQ5d3CsATQ3d6bie2SdysqStJXNUDzO69tb\niE3PY6h/kLa2nrR8TrqUlRVNupgzJRvK5qSaGGs3N/OrVVupKkndQNHpPKYmu7BU6BlyHV5nSTea\n2Ry8VhaNR1shrPtNJvfp1lY9tyip19raRXNz57j2r6JYFcXlNfS0j78J+HjXHS2+0bYz1u+TWC4M\nWlu7jnyfxPuwxJZsIvVUOpsc/AI4ZGar8TqN+Bsz+1Mzu8F/LuomYCXwHHCvc65xlHVygLuAYuAh\nM3vSzL6cxrhlAvY0d9N7eIC5atYnITSvupiy4jye37ifnkP9QYcj2edeoNTMVgEPANcltcQQEZEs\nk7Y7Us65OPDJYZM3J81/BHhkDOsApLYNjqRNotvzWnU0ISEUiURYtnAmT6/by+9fb+KdZ9UGHZJk\nEefcAPBnQcchIiKZoYdgJaW2JDqaqNT4URJOS0+YQTQCT72yh7g6nRAREZHjpERKUmYoHmfDzoNM\nL5xGecnk62RCpobphbnU1cbY09zN9saOY68gIiIiMgIlUpIyu5o66ert58RZpUQikaDDERnV6Qtn\nAvD4S7sDjkREREQmKyVSkjKvbW8FYMHs0oAjETm6+bNKmBkr4PkNTexv0/jeIiIiMn7p7P5cppjX\ndnjDey2YNaW6O5ZJKBKJcP7J1Tzy+3p+84d6rn3X4qBDEsk6fX19NDS8Majo3LnzycvLe8v0bBh4\nVMIlMbAthHP/Cnt8MnZKpCQleg8PsHVPB7NmFFGYr91Kwm/xvHKeXd/IM682cuWFJ+i5PpEUa2io\nf9NgnHfdfBULFy5603Rg3IOfihzLRAbXzYSwxydjp6Z9khKbdh1kaCjOCbN1N0omh2g0wnknVzM4\nFGfl87uCDkckKyUG40wkTcOnF5fXUFgyI6DoJJsl9rGw7l9hj0/GRomUpMTrO/zno2bp+SiZPE5Z\nMIOSolyeeHk3TQd7gg5HREREJhElUpIS67e3kjctypyZGj9KJo9pOVEuOb2GgcE4P/ntZo0rJSIi\nImOmREombM+Bbprbepk/q4ScqLo9l8ll8bwy5lUVs357K69sORB0OCIiIjJJKJGSCXtp034AbG5Z\nwJGIjF8kEuGys+cSjcCPf7eZ3sMDQYckIiIik4ASKZmwF91+cqIRFtbEgg5F5LhUxAo4d0k1rR2H\nuffXG9TET0RERI5JiZRMyL7WHnY3d7NgVgn5uTlBhyNy3C46dTZzq4p5efMB/ucPGtdDREREjk6J\nlEzIS07N+iQ7RKMRrrpwAcWFuTy0avuRfVtERERkJBo5VSbkxU37iUagrlbN+mTym16QywfefgIP\nPLGV7/zyNf7ivSfztqWzgg5LZNLo6+ujocG7o7trl+7siqTC0ODAkeMplcdV8vEKMHfufPLy8gLb\nzmSkREqOW3NbL/VNXZwwu4SCPO1Kkh1mV0zn6hV1/OypbdzzyAbau/u44ty5RCLqkVLkWBoa6vn0\nbQ9TFKuiZfdGKmqXBB2SyKR3qKuF23/aSlGsMaXHVfLx2tO+n7tuvoqFCxcFtp3JSE375LitXt8I\nwOJ55QFHIpJac2ZO55p31lFYMI3/enIrd/5sHR3dfUGHJTIpFMWqKC6vobBkRtChiGSNdB1Xie0W\nxapCsZ3JRomUHJfBoSFWrdtLXm4Um6fnoyT7VJcX8bF3LWZ+dQnrt7fyD/es4Zl1exlSj34iIiKC\nEik5Tuu3tdLW1ccpC2aQN0299Ul2Ki7M5UMrFrLijBoO9w/y/Uc38S/3v0T9vs6gQxMREZGAKZGS\n4/L0uj0AnLawIuBIRNIrEolwzuIqrn/vEmxuGdv3dvDV+17g/pWOrt7+oMMTERGRgCiRknFr7TjE\nq9tamDWjiOryoqDDEcmIkqI83nfRCVy9oo4Zpfk8uXYPt/zH71m1bi9DQ2ruJyIiMtUokZJxe/qV\nvcTjsKxOd6Nk6pk/q4SPvWsxF58+h8P9Q9z36Ca+8O1nOdDWG3RoIiIikkFKpGRceg4N8LsXGyjM\nz2HJfPXWJ1NTTk6U85ZUc/17l3BSbYyNO1r50veeZ82GpqBDExERkQxRIiXj8vhLDfT2DXLu4mp1\nMiFTXqK53wdX1DE4FOe7D7/OT5/YoqZ+IiIiU4BGUZUx6z08wMrnGyjIy+H0RTODDkckFCKRCGct\nrqa8KJeHVm1n5fMN7Gnu5pPvX0phvk6xMjn09fXR0FB/5H0stjTAaERkooYf03PnzicvLy+w7QwN\nDrBr18S3Ezaq5WXMnnh5Nz2HB3j7abPJz9XdKJFkM0oL+LPLjYef28FrO1r5vw+s5W8+dDrFhblB\nhyZyTA0N9Xz6tocpilXR076f+28tprx8dtBhichxGn5M33XzVSxcuCiw7RzqauH2n7ZSFGuc0HbC\nRk37ZEwOdh7m17+vpyAvhzMXVQYdjkgo5efl8MHlC1l6wgx2NHby9R+/THt3X9BhiYxJUayK4vIa\nimJVQYciIimQqmM6bNsJEyVSMiYPPL6FQ32DLF82h/w83Y0SGU00GuHd583jjEUz2XOgm1t/9BKt\nHYeCDktERERSTImUHNOr21p4YdN+5lQUsUwD8IocUyQS4dKzajl3SRX7D/byLz96if0He4IOS0RE\nRFJIiZQcVc+hAe5f6YhG4Ipz5xGJRIIOSWRSiEQiXLxsDhedOpvWjsPc+qOXaWzpDjosERERSREl\nUjKqoXicu3/1Oi0dhzjv5GoqywqDDklkUolEIlywdBYrzqihvbuPr/9kLXsPKJkSERHJBkqkZFQP\nP7uDddtamF9dwoVL1XuTyPE6Z3EV7zyrlo7uPr7+k5fZ09wVdEgiIiIyQUqkZESr1zfy8OqdxKbn\ncdWFC4hG1aRPZCLOOqmSy86upbOnn6//ZC0N+5VMiYiITGYaR0reYtW6vfzg0U0U5OXwgbefqEFF\nRVLkjEWVRCIRHnuhgX/9yct89prTWTCrNOiwRN5kaHCAHTt20NrqJfupGDgzeTDO5EE5RSR1RjvO\nxjIYbjqWGe1YT16mv78fgNzc3De9PtpnhIn+QpYj4vE4j67ZxYNPbaMwP4erV9RRVa7nokRS6fS6\nmeREIzy6Zhdf+/HLfOoDp7L0RPWGKRP3rbt/wPOb2wGI9DZy37/delzbOdTVwpf+4/cTHoBz+DYT\ng3G27N5IRe2SCW1PRN5qtONsLIPhpmOZ0Y714csUllRQFKt602tgUgzcq0RKAOg+1M+9j2zkla0H\nmF4wjavfUcfMmJIokXQ49cQK8nNz+NVzO7nzwVe59gpj+bI5QYclk11OHjkVSwHI7ZxYy/3EwJmp\nlNhmT3tTSrcrIm8Y7TgbyzGd6mWOdqwnLzPS68lCz0hNcfF4nOc3NvHFe9bwytYDzKsu5mPvWqwk\nSiTNTppbxtXvqCNvWpT7Ht3ED1c6+geGgg5LRERExkh3pKawzQ1t/PKZ7Wza1UZONMJFp87m/JOr\n1bGESIbUVhZz7RXGL57ZzlNr97CzsYPr/+hk5sycHnRoIiIicgxKpKaYgcEhnl23h4ee2MKW3V5b\n+hPnlPLOM2spL8kPODqRqaesOJ+PXmb89sUGXtvRype//zzvu+gELj9nHrnT1GhAREQkrJRITQFD\nQ3E2N7TxkmtmzcYmunq9XlFOnF3K206ppqayOOAIRaa23GlR3nP+fBbVxnjshQZ+/vR2nlq7lw8s\nP4HzT56lu8QiIiIhlLZEysyiwLeB04DDwPXOuW1J868EvggMAN9zzt0z2jpmVgfcBwwBrwE3Oufi\n6Yp9shscGmLvgR62721nw86DbNjZSvehAQAK83O4aNkcTqop1XNQIiGzqLaM2spinnt9H69sOcA9\nj2zkoVXbWXFGDReeOpuyYt01DrNj1XsiIpJd0nlH6v1AnnPuAjM7D7jdn4aZ5QJ3AGcDPcBqM3sY\nuAjIH2GdO4BbnHOrzOw7wPuAX6Yx9klhKB6nrfMwzW297G/rZff+bnY0drCrqZO+pIfWS4pyWVZX\ngdWWMbe6hIoZ02lr6wkwchEZTWH+NN55Zi1nn1TJHzY2sWHnQX7+9HZ+/vR2Tpxdyml1FdTVxDhh\ndqnGeAufUes9ERHJPumshS8EfgPgnFtjZmcnzVsCbHXOtQOY2bPAcuBtwKMjrHOmc26V//pR4HIm\nYSIVj8dpbuulb2CIoaE48biXDA0NxZP+95riHe4fPPKvr2+Q7kMDdPb209nTR2dPH+3dfbS0H2Jg\n8M035iIRmFlawKyK6cyaUcS86mJmlOQTiahpkMhkEivO54pz5nHJshpe39nK5oY2duzrYHtjx5Fl\nyorzmFVRRHlxPiVFeZQU5VJSlMf0gmlMy4n6/yLk+P9Pi0aZWVZAQZ4SsDQ5Wr0nIiJZJp21aSnQ\nkfR+0Myizrkhf1570rxOIDbKOjlAchbQ5S876Ty5dg8/emxzSrZVkJdDRWkBZSX5lBfnU1acz4zS\nfKrLi/SAukgWyc/L4cyTKjnzpEp6Dw+wu7mLvQd6aGzt5mDHYTbVt41re7MrivjnG85PU7RT3tHq\nvbTLjcbJad8AQPzQfrZt2zLmdXftqqenfT8AvZ2tJKrdnvb97NpVP+HtjPZ6rMtNltdhiUPfZ2p8\nn+P5bsnH9FiO+4ksM9Hvk9hmmKUzkeoASpLeJ1cm7cPmlQBto6wzaGZDIyx7LJHKypJjL5VBV1+x\nhKuv0GjuIiJZ6mj13khSWk/9/c1/edzrnn/+mXzoQx+YcAyp2o6IpN9YjtdULZOt0nnrYjXwHgAz\nOx94NWneJmCRmZWbWR5es77njrLOWjO72H/9bmAVIiIi4XK0ek9ERLJMOu9I/QK4zMxW+++vM7M/\nBYqdc3eb2U3ASrxk7l7nXKOZvWUd///PAnf7SdcG4ME0xi0iInI8RqvDREQkC0XicfUiLiIiIiIi\nMh7qlUBERERERGSclEiJiIiIiIiMkxIpERERERGRccqqURnNLAp8GzgNOAxc75zbFmxUwTOzl3lj\n3K7twK3AfcAQ8Bpwo3NuyjwsZ2bnAV9zzq0wszpGKAszuwH4ODAA/JNz7teBBZxBw8rmDOBXQGIw\nmm875342FcvGzHKB7wHzgXzgn4CNaN8ZrWx2A48AiYHzpuy+k8zMqoCXgHfi7Tf3EZLzsJn9HXAl\nkAv8G14PhIHH59fr9wAn+bHcAAyGJLbQ1iXDYjsd+CZeuR0GrnXO7Q9DbEnTPgx8yjl3gf8+sHPF\nsLKrAu4GyvAGOLrWObczDGVnZovxjo043rn2+qD2ubDXkaPE10AKjotsuyP1fiDPPxC/ANwecDyB\nM7MCAOfcCv/fXwB3ALc455bjnRjeF2SMmWRmn8M7Keb7k95SFmY2C/hr4ALgCuBWv8fIrDZC2ZwF\n3JG07/xsqpYN8BGg2d9P3gV8C+/8on1n5LI5E7hd+84b/Ir8u0A33v4SmvOwmV0CvM2vOy8BTmSE\n/Tug8C4HpjvnLgK+CvxLGGILc10yQmx34iUpK4CHgM+bWXVIYsO/aPfnSe8DO1eMEN+/Avc75y4G\nvgQsDdHv+mW8P/Tf7k97b4BlF/Y6cqT4vkEKjotsS6QuBH4D4JxbA5wdbDihsAwoMrOVZva4P7bJ\nmc65xFhcjwKXBhdexm0F/pg3hs4eqSzOAVY75/qdcx3+OqdlPNLMG142Z+GdmJ82s3vMrBg4l6lZ\nNj/Dq0TBO2/2o30nYaSy0b7zVrcB3wEa/fdhOg9fDqw3s1/i3YV+GDgrJPH1AjEziwAxoC8ksYW5\nLhke2zXOucSYZrl4ZRrU8fim2MysAvhn4DNJ8QZ5rhhedhcAc83st3h/jD8RYHzDY+sFKvxjowTv\n2AgqtrDXkSPFl5LjItsSqVK8keUTBv1mAVNZN3Cbc+4K4BPAj4fN78KrnKYE59xDeLdrEyJJrzvx\nyqKUN5pCJk/PaiOUzRrgb/0rcduBf8Q7WU/Fsul2znWZWQneCfkfePP5c8ruOyOUzd8Dz6N95wgz\n+xje1dDH/EkR3nzuCfo8XImX/P4JXj3xE8IT32qgANiEd0fvm4QgtjDXJcNjc87tAzCzC4Ab8a7E\nBx6b//fZvcBNeL9jQmDn0RF+1wVAq3PuMmAX8HkCOpeNENv/A+7CG1+1Cnia4H7XUNeRI9VTzrkm\nmPhxkW1JRgfeDp4Qdc4NBRVMSGzGT56cc1uAFqA6aX4J0BZAXGGRvH+U4pXF8P2oBDiYyaBC8k4v\niwAACD9JREFU4hfOubWJ18AZTOGyMbO5eFcjf+ic+0+07xwxrGweQPvOcNfhDdT7JHA68AO85CUh\n6PPwAeAx59yAc24zcIg3//EQZHyfw7tCbHhl90O8q8cJQZddQqjPB2Z2Nd4d0fc451pCEttZQJ0f\n138CJ5vZHXh/yAYdW0IL3h1a8O7Wnk04yg7gR8DbnXNLgPvxmtIFVnZhryNHqKdSclxkWyK1GngP\ngN+E7dWjLz4lXIf/rJiZzcHbKR4zs4v9+e8GVo2y7lSwdoSyeB54u5nlm1kMWIL3oORU8xszO8d/\nfSnwIlO0bPx2048Bn3PO3edP1r7DqGWjfSeJc+5i59wlflv8V4Br8cooLOfhZ/GeG0jUE0XA4yGJ\nbzpvtDQ5iNdJ1kjHXtBCez4ws4/iXXG/xDm3058ceGzOuRecc0v94+IaYINz7ibghaBjS/Is8F7/\n9cV+HIGXna8I744JeE2Gy4KKLex15Ejxpeq4yKpe+/CufF5mZqv999cFGUxI3At838wSFc11eFdY\n7vYfoNsAPBhUcAFK9PD0WYaVhd+rzDeBZ/AuNtzinOsLKM4gJMrmE8C3zKwf7yT9cf/W+FQsm1vw\nrtB/ycwS7aw/DXxT+86IZfMZ4Bvad0YVZ4RzT1DBOOd+bWbLzex5vN/mr4CdIYnvNrw67Bm8O1F/\nh9fzYRhig3DXJXG/+dxdQD3wkJkBPOWc+0rQsQ17H0lMc87tC8G5Ivl3vcfMPol3R+XDzrn2kJTd\n9cCDZnYIr9e5G5xzTQHFFvY6cnh8OcBSvPPchI6LSDw+ZXq9FhERERERSYlsa9onIiIiIiKSdkqk\nRERERERExkmJlIiIiIiIyDgpkRIRERERERknJVIiIiIiIiLjpERKRERERERknLJtHCnJcma2ANgM\nvD5s1n84574zyjpfBuLOua8c5+dtBy53zv0uafpOYLlzbtc4t/dxoCMxqrY/7Qrga/7bOmAf0AVs\nd859cLwxp4KZlQHfAk71J+0B/to5tzWIeEREJgvVU5mhekrCQImUTEZ7nHNnjGP5iQ6W1o830OKp\nzrmuCW7zAuDJ5AnOuZXASgAzexL4R+fcqhHWzaRbgVedcx8BMLNrgJ8CZwUalYjI5KB6Kv1UT0ng\nlEhJVjGzDwN/j1eBvADc4M8618xWAzXA9/3Rq6PAncA7/OXvd8796wib3Qs8BtwO/OUIn/kF4H/h\njZS90jn3eTMrBf4TqPYX+wrQA1wJrDCzvc65347yNSL+dnOA24CL/W3f55y708wu8b8jwELgQaAd\neL+/7nucc/vNbDfwOHA60Al8xDlXb2bn+9+7ADgA/KVzbtuwGKqBJjOLOueG8CqnTj+uAryrgBfi\nVd7/xzn3X6Nt18yeAlqAU4Crgdl+eeQCO/BGY28dpSxERLKK6inVU5I99IyUTEZzzGztsH+nmFkN\ncAdwmXNuKd5J/b3+OtXAJXhXqm42s2LgE3gV1qnAucAHzew9o3zm3wJXmNmlyRPN7F3AmcA5/v81\nZvYRvMpih3PubOCjwEXOuceBh4EvHqVygjeuIt6A19TjLOA84H1mdpE/71zgY3gn/U8C+51z5wCv\nAtckygl41Dm3DHgA+KaZ5fqvb3TOnQ78O15FOtw/AX8O7DOzB/zXiSYjfw0UOecWA5cCXzzGduPA\nOn/5vXhXES93zp2JV/F//ShlISIyGameUj0lU4ASKZmM9jrnzhj273XgbcCzzrm9AM65a51z/+2v\n8z/OuX7nXAveVagZwAq8q2dx51wv8GPgnSN9oHOuE6/CuNuv3MC7qnYpXuXxkv/vLOBk4Dng/Wb2\nC+AivBM+SeuNxaXAVWa2FvgDXmW6FO+E/5pzbo8f9wG8K3oA9UCZ/zq5jfsP8a5ongS0Oude8r/X\ng0CdmZUM+74vAwuAP8Fr6/9Z4Bn/6uNyvLLCOdfknDsVsFG2W+pvco3//3nAPOAp/3vdiNfeXkQk\nm6ieUj0lU4Ca9kk26SPp5G9mM5PeDyYtF/enR3lzZRHlKMeEc+63ZvZbvKuJyevc6Zz7hv+Z5UC/\nc67LzBYD78JrJvFZYEnS549FFLjZOfdLf9uVeM0Wzve/a7KBEdZPnhb134908SSCd1X0CDP7Lt5D\nu6uAVWb2VWALcAZeM4nkcq5j5Eo3ebu9SXE865x7n79uAVAywroiItlI9dTo01RPyaSjO1KSTV4E\nzjOzRHvvu4CrjrL8E8D/NrOomRUBH/anHc1ngcvxmiPE/eX/zMymm9k04CG8phefAL7iX/G6Eagy\nsxheJZE7xu/zBPBxM5vmX4l7Bq+pxNFEeKOymOH3tARwHfA/gAMqzOxsADP7ELDTOdc2bDsG/K2Z\nJbZVg1fZbAVWAR/y168CnsK7wjjSdg8O2+7zwNvMbJH//h+Akdr7i4hkI9VTqqckiyiRkslopLbn\nd/pNJT4NrDSz9Xhds37fX2f41bU48F1gN7AOeBn476QmFsOXBd7UdGKa//4R4Od4TQLWA2udcz/A\na1JgZvYq8DReD0fteO23bzGzPx7D9/x3vKtra/FO7Pf6V97iI3yf5FgT8/rxKs91wGXAZ5xzfXgP\n0v6bX0Z/5b8f7hq8Nvk7zOx1vHbkH/Yrsm8D3f52fwt8yjnXMZbtOuf24bVj/y+/bM4AbhpDWYiI\nTCaqp1RPyRQQiccn2uOmiISRmfU65wqDjkNERGQkqqdkstMdKZHspaskIiISZqqnZFLTHSkRERER\nEZFx0h0pERERERGRcVIiJSIiIiIiMk5KpERERERERMZJiZSIiIiIiMg4KZESEREREREZJyVSIiIi\nIiIi4/T/Ac6Zb5Dh/H6lAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10d72cf90>"
]
}
],
"prompt_number": 30
},
{
"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