{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualizing Google Forms Data with Seaborn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the second part of an article from [Practical Business Python](htp://pbpython.com) describing how to retrieve and analyze data from a Google Form.\n", "\n", "Please review [part 1](http://pbpython.com/pandas-google-forms-part1.html) for the details of how to set up authentication and get the data into the pandaqs dataframe.\n", "\n", "The full article corresponding to this notebook is [here](http://pbpython.com/pandas-google-forms-part2.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bring in our standard imports as well as the authentication libraries we will need to get access to our form." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import gspread\n", "from oauth2client.client import SignedJwtAssertionCredentials\n", "import pandas as pd\n", "import json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import Ipython display as well as graphing libraries. For this article, we will be using [seaborn](http://stanford.edu/~mwaskom/software/seaborn/index.html)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from IPython.display import display\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setup authentication process to pull in the survey data stored in the Google Sheet." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "SCOPE = [\"https://spreadsheets.google.com/feeds\"]\n", "SECRETS_FILE = \"Pbpython-key.json\"\n", "SPREADSHEET = \"PBPython User Survey (Responses)\"\n", "# Based on docs here - http://gspread.readthedocs.org/en/latest/oauth2.html\n", "# Load in the secret JSON key (must be a service account)\n", "json_key = json.load(open(SECRETS_FILE))\n", "# Authenticate using the signed key\n", "credentials = SignedJwtAssertionCredentials(json_key['client_email'],\n", " json_key['private_key'], SCOPE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now open up the file and read all data in a DataFrame" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
How frequently do you use the following tools? [Javascript]How frequently do you use the following tools? [Python]How frequently do you use the following tools? [R]How frequently do you use the following tools? [Ruby]How frequently do you use the following tools? [SQL]How frequently do you use the following tools? [VBA]How useful is the content on practical business python?How would you like to be notified about new articles on this site?TimestampWhat suggestions do you have for future content?What version of python would you like to see used for the examples on the site?Which OS do you use most frequently?Which python distribution do you primarily use?
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3RSS6/9/2015 23:22:432.7MacIncluded with OS - Mac
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3Reddit6/10/2015 1:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2Planet Python6/10/2015 1:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3Planet Python6/10/2015 1:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3Leave me alone - I will find it if I need it6/10/2015 4:10:17I don't careMacAnaconda
\n", "
" ], "text/plain": [ " How frequently do you use the following tools? [Javascript] \\\n", "0 Once a month \n", "1 Once a month \n", "2 Infrequently \n", "3 Never \n", "4 Once a month \n", "\n", " How frequently do you use the following tools? [Python] \\\n", "0 A couple times a week \n", "1 Daily \n", "2 Daily \n", "3 Daily \n", "4 Daily \n", "\n", " How frequently do you use the following tools? [R] \\\n", "0 Infrequently \n", "1 A couple times a week \n", "2 Once a month \n", "3 Once a month \n", "4 Infrequently \n", "\n", " How frequently do you use the following tools? [Ruby] \\\n", "0 Never \n", "1 Never \n", "2 Never \n", "3 Never \n", "4 Infrequently \n", "\n", " How frequently do you use the following tools? [SQL] \\\n", "0 Once a month \n", "1 Infrequently \n", "2 Daily \n", "3 A couple times a week \n", "4 Once a month \n", "\n", " How frequently do you use the following tools? [VBA] \\\n", "0 Never \n", "1 Infrequently \n", "2 Never \n", "3 Once a month \n", "4 Never \n", "\n", " How useful is the content on practical business python? \\\n", "0 3 \n", "1 3 \n", "2 2 \n", "3 3 \n", "4 3 \n", "\n", " How would you like to be notified about new articles on this site? \\\n", "0 RSS \n", "1 Reddit \n", "2 Planet Python \n", "3 Planet Python \n", "4 Leave me alone - I will find it if I need it \n", "\n", " Timestamp What suggestions do you have for future content? \\\n", "0 6/9/2015 23:22:43 \n", "1 6/10/2015 1:19:08 \n", "2 6/10/2015 1:40:29 \n", "3 6/10/2015 1:55:46 \n", "4 6/10/2015 4:10:17 \n", "\n", " What version of python would you like to see used for the examples on the site? \\\n", "0 2.7 \n", "1 2.7 \n", "2 3.4+ \n", "3 2.7 \n", "4 I don't care \n", "\n", " Which OS do you use most frequently? \\\n", "0 Mac \n", "1 Windows \n", "2 Windows \n", "3 Mac \n", "4 Mac \n", "\n", " Which python distribution do you primarily use? \n", "0 Included with OS - Mac \n", "1 Anaconda \n", "2 Official python.org binaries \n", "3 Official python.org binaries \n", "4 Anaconda " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gc = gspread.authorize(credentials)\n", "# Open up the workbook based on the spreadsheet name\n", "workbook = gc.open(SPREADSHEET)\n", "# Get the first sheet\n", "sheet = workbook.sheet1\n", "# Extract all data into a dataframe\n", "results = pd.DataFrame(sheet.get_all_records())\n", "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to do some cleanup to make the data easier to analyze." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampsuggestionsversionosdistro
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3RSS2015-06-09 23:22:432.7MacIncluded with OS - Mac
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3Reddit2015-06-10 01:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2Planet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3Planet Python2015-06-10 01:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3Leave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3 \n", "1 Infrequently Infrequently 3 \n", "2 Daily Never 2 \n", "3 A couple times a week Once a month 3 \n", "4 Once a month Never 3 \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " suggestions version os distro \n", "0 2.7 Mac Included with OS - Mac \n", "1 2.7 Windows Anaconda \n", "2 3.4+ Windows Official python.org binaries \n", "3 2.7 Mac Official python.org binaries \n", "4 I don't care Mac Anaconda " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do some minor cleanups on the data\n", "# Rename the columns to make it easier to manipulate\n", "# The data comes in through a dictionary so we can not assume order stays the\n", "# same so must name each column\n", "column_names = {'Timestamp': 'timestamp',\n", " 'What version of python would you like to see used for the examples on the site?': 'version',\n", " 'How useful is the content on practical business python?': 'useful',\n", " 'What suggestions do you have for future content?': 'suggestions',\n", " 'How frequently do you use the following tools? [Python]': 'freq-py',\n", " 'How frequently do you use the following tools? [SQL]': 'freq-sql',\n", " 'How frequently do you use the following tools? [R]': 'freq-r',\n", " 'How frequently do you use the following tools? [Javascript]': 'freq-js',\n", " 'How frequently do you use the following tools? [VBA]': 'freq-vba',\n", " 'How frequently do you use the following tools? [Ruby]': 'freq-ruby',\n", " 'Which OS do you use most frequently?': 'os',\n", " 'Which python distribution do you primarily use?': 'distro',\n", " 'How would you like to be notified about new articles on this site?': 'notify'\n", " }\n", "results.rename(columns=column_names, inplace=True)\n", "results.timestamp = pd.to_datetime(results.timestamp)\n", "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a small number of free form comments. Let's strip those out and remove them from the results." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "suggestions = results[results.suggestions.str.len() > 0][\"suggestions\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since there are only a small number of comments, just print them out.\n", "However, if we had more comments and wanted to do more analysis we certainly good." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'A bit more coverage on how to make presentations - which in a lot of corporations just means powerpoint slides with python, from a business analyst perspective, of course'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Add some other authors to the website which can publish equally relevant content. Would be nice to see more frequent updates if possible, keep up the good work!'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'How to produce graphics using Python, Google Forms.'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Awesome site - keep up the good work'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Great job on the site. Nice to see someone writing about actual Python use cases. So much writing is done elsewhere about software development without the connection to actual business work.'" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for index, row in suggestions.iteritems():\n", " display(row)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Drop the suggestions. We won't use them any more." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistro
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3RSS2015-06-09 23:22:432.7MacIncluded with OS - Mac
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3Reddit2015-06-10 01:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2Planet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3Planet Python2015-06-10 01:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3Leave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3 \n", "1 Infrequently Infrequently 3 \n", "2 Daily Never 2 \n", "3 A couple times a week Once a month 3 \n", "4 Once a month Never 3 \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " version os distro \n", "0 2.7 Mac Included with OS - Mac \n", "1 2.7 Windows Anaconda \n", "2 3.4+ Windows Official python.org binaries \n", "3 2.7 Mac Official python.org binaries \n", "4 I don't care Mac Anaconda " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.drop(\"suggestions\", axis=1, inplace=True)\n", "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explore the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For Numeric columns, start with describe to see what we have" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useful
count55.000000
mean2.072727
std0.790090
min1.000000
25%1.000000
50%2.000000
75%3.000000
max3.000000
\n", "
" ], "text/plain": [ " useful\n", "count 55.000000\n", "mean 2.072727\n", "std 0.790090\n", "min 1.000000\n", "25% 1.000000\n", "50% 2.000000\n", "75% 3.000000\n", "max 3.000000" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we only have 1, 2, 3 as options the numeric results aren't telling us that much. I am going to convert the number to more useful descriptions." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistro
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3-highRSS2015-06-09 23:22:432.7MacIncluded with OS - Mac
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2015-06-10 01:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2015-06-10 01:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3-high \n", "1 Infrequently Infrequently 3-high \n", "2 Daily Never 2-medium \n", "3 A couple times a week Once a month 3-high \n", "4 Once a month Never 3-high \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " version os distro \n", "0 2.7 Mac Included with OS - Mac \n", "1 2.7 Windows Anaconda \n", "2 3.4+ Windows Official python.org binaries \n", "3 2.7 Mac Official python.org binaries \n", "4 I don't care Mac Anaconda " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['useful'] = results['useful'].map({1: '1-low', 2: '2-medium', 3: '3-high'})\n", "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Value counts give us an easy distribution view into the raw numbers" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2.7 23\n", "3.4+ 18\n", "I don't care 14\n", "dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results[\"version\"].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use normalize to see it by percentage." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Windows 0.381818\n", "Linux 0.363636\n", "Mac 0.254545\n", "dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.os.value_counts(normalize=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While the numbers are useful, wouldn't it be nicer to visually show the results?\n", "\n", "Seaborn's [factorplot](http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.factorplot.html) is helpful for showing this kind of categorical data.\n", "\n", "Because factorplot is so powerful, I'll build up step by step to show how it can be used for complex data analysis.\n", "\n", "First, look at number of users by OS." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\neAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"os\", data=results, palette=\"BuPu\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is easy to order the results using x_order" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"os\", x_order=[\"Linux\", \"Windows\", \"Mac\"], data=results, palette=\"BuPu\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do a similar plot on python version" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nngfr3VcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"version\", data=results, palette=\"BuPu\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is useful but wouldn't it be better to compare with OS and preferred python version? This is where factorplot starts to show more versatility. The key component is to use hue to automatically slice the data by python version (in this case)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAFhCAYAAAARLP+gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGjNJREFUeJzt3XucHWWd5/FPQ0AUhwiBBCYGYnTywwVRQUSRAYHRl+sO\nA4NyU7wOoiijK7OKIzqYBVHBC66oOIs6XpCLQhBQBBVWrgLqMhpZfhkXIeGSBAgQ7iTkzB9VDYem\nkz7pdNXpp/N5v1716j51qut5TlUn336qnnqegU6ngyRJpVmv3xWQJGk0DDBJUpEMMElSkQwwSVKR\nDDBJUpEMMElSkSY1ufOIeAkwFzgpM78REVsDZwAvBa4GDsjM+5usgyRpYmqsBRYRk4ATgQuAwYfN\nTgDOBLYAbgMOb6p8SdLE1liAZeYKYB/gbmCgXv1Z4NTMfAS4Bti4qfIlSRNbo/fA6hDrfj0vM5dH\nxAbAQcB3mixfkjRxtd6JIyKeA5wFfD4z/9x2+ZKkiaHRThxDRcSGwI+AkzPzkh5+ZB6wXbO10lib\nP38+3/r5dUydvnXjZS25fQHvft0rmT17duNlST0aGHkTjYU2Aqz7ZB4DnNtjeAFs30B91LCImP2F\nub/KrbaZ1VZ50el05rdSmKRxo7EAi4jdgMu7Xn8duBmYFRH/Wq8+LzP3b6oOkqSJq7EAy8wr8UFp\nSVJDDBhJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElS\nkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEM\nMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJ\nUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRJjW584h4CTAXOCkzvxER\n04Gzge2BS4C3ZubjTdZBkjQxNdYCi4hJwInABV2rPwVcCDwfWA68u6nyJUkTW2MBlpkrgH2Au4FO\nvXoP4MuZ+QDwNeBvmipfkjSxNXoPrA6xbs/KzIfr728BtmqyfEnSxNXoPbARDPSwzTxgu6YrorGV\nmVx446I2y8vWCpNG1sv/bRoDbfdCfCQinlt/Pwu4Y4Ttt6f6ZXApaImIGPZsNqQur++f28WlXtSS\nNgKs+6T+EjgqIp4HfBC4qIXyJUkTUGOXECNiN+Dyrtdfo7rn9UPgKKreid9pqnxJ0sTWWIBl5pUM\n38Lbo6kyJUnrDkfikCQVyQCTJBXJAJMkFckAkyQVyQCTJBXJAJMkFckAkyQVyQCTJBXJAJMkFckA\nkyQVyQCTJBXJAJMkFckAkyQVyQCTJBXJAJMkFckAkyQVyQCTJBXJAJMkFckAkyQVaVK/K1CSgYGB\nDYGZLRZ5S6fTebzF8iSpGAbYmpk57aA5OWnylo0XtOL+RSw+69gA5jdemCQVyABbQ5Mmb8kGU6b3\nuxqStM7zHpgkqUgGmCSpSAaYJKlIBpgkqUgGmCSpSAaYJKlIBpgkqUgGmCSpSAaYJKlIBpgkqUgG\nmCSpSAaYJKlIBpgkqUgGmCSpSAaYJKlIBpgkqUgGmCSpSAaYJKlIBpgkqUiT2i4wIjYAvg3sA9wF\nHJWZ57ddD0lS2frRAtsPeC6wFXAQ8KU+1EGSVLh+BNiSutz1gJVUrTBJktZI6wGWmb8CHgCWAVcC\n/6PtOkiSytd6gEXE3wIbA88DXgt8bTWbzwM642XJzFzrA7AG6vL6/rnXdPE4uazji1rSj0uIuwJz\nM3NZZl4PPBERm69i2+2BgfGyRESM1UHoRV1e3z/3mi4eJ5d1fFFLWu+FCPwJ2D8i5gKzgWnAPX2o\nhySpYP0IsO8DewALqDpwvDczbXZLktZI6wGWmY8D72i7XEnSxOJIHJKkIhlgkqQiGWCSpCIZYJKk\nIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZ\nYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCS\npCIZYJKkIhlgkqQiGWCSpCIZYJKkIhlgkqQiGWCSpCIZYJIkIuKyiNis3/VYEyMGWERcOuT1hhFx\nXXNVkiQ1JSIGhlufmXtm5tK267M2Jq3qjYg4EDgEeG1EzO16awrw/KYrJknqTURcBeyXmXdFxPuA\nzYFD66/fyMxjIuKTwAxgx4j4IPADYCpwPvAW4FLgTcB04PvAC4BfAG8F9gd2BPYFngPsn5nXtPgR\nh7W6FtgPgX8GHgZOBb5RL8cBOzVfNUlSj86kCh+AA4C3UzVAtgG2jYgdgMeBAeDVwM7A8cDzgJ8A\n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\nJBXJAJMkFckAkyQVyQCTJBXJAJMkFckAkyQVyQCTJBVpUr8rIJWi88QKgJkDAwNtFHdLp9N5vI2C\nxtKK5cuhvWM0s41CNH4ZYFKPVjxwD8d++7CLp87YrNFylixcypx3nRbA/EYLasC9SxYx7aA5F0+a\nvGXjZT1627zGy9D4ZoBJa2DqjM2Y/oIt+l2NcW3S5C3ZYMr0xstZft9i4MHGy9H45T0wSVKRDDBJ\nUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKR\nDDBJUpEMMElSkQwwSVKRDDBJUpEMMElSkQwwSVKRJvWj0Ij4IvBO4F7giMy8pB/1kCSVq/UAi4jX\nAS8HZgE7AycD27VdD0lS2fpxCfEG4NDMvA+4Anh2H+ogSSpc6y2wzLyr6+XhwNfbroMkqXx968QR\nEYcBO2TmSavZbB7QWd2Smdl0XdcF9XFc7bHudfGcrD3Px/izBudELelLgEXE4cAumXnYCJtuDwys\nbomIaLKu64r6OK72WPe6eE7Wnudj/FmDc6KW9KMTx2zgQOD1bZctSZo4+tGN/kBgL2BF/YdhB9g0\nM5f1oS6SpEL1oxPH8cDxbZcrSZpYHIlDklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQk\nA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANM\nklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJU\nJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVCQDTJJUJANMklQkA0ySVKRJ\nbRcYEZ8H3gUsAt6Rmb9puw6SpPK1GmAR8RpgDyCAXYFTgFe1WQdJ0sTQ9iXEvYHTMvPuzDwfmBIR\nz225DpKkCaDtAJsG3Nb1+hZgq5brIEmaAFq/BzbEANBZ250suX3BGFRlZPcsvoMV9z/SSllPPHgX\nSxa2U9aShUvHfp+ek1HzfPSm9H8jWnsDnc5a50fPIuIY4N7M/Fr9+k/ASzPzodYqIUmaENpugV0C\nfCMifgjsCdxheEmSRqPVe2CZeT1wEXAT8HHgA22WL0maOFq9hChJ0lhxJA5JUpEMMElSkQwwSVKR\nDLBRiojtI+KyIesuiIj/0q86TWQR8fuImNX1+saI+K9dr+dGxB8j4jk97u+0iNi7ibrqmep/Lysj\nYuch6zMijutXvVS2fj/IPKFk5j79rsMEdhmwO3BzRGwOPKd+fVH9/iuBF2Vmr0+22nupfX8G3gxc\nD1WoUZ1Hz4VGxQAbQxFxIXA08DpgCnAAsDnw7sw8PyJuAnbIzMcj4njgP4AngF0y8x8j4lDgNZl5\nRJ8+wnh2GfB3wL8BuwHfA/4aICJeTPWf43UR8SrgBOBOqsc0BoA3Zea1EXEkMAeYTz2kWUQMAKcC\nBwL3AEcCy+ufeX9EvAX4WGbuEBFbAacDH6vLn1HX64DMfLjxI1C2DvBbqn8bR9fr3gT8HBiIiPcA\nx1EF2mmZeVRErAd8k+rczAP2z8zbW6+5xi0vIY6t7r8k96L6D/Z9wBHDvN8BOpn5fSAiYkfgQzz1\nj1tPdzlVcFF//QWwfkRsRNUSu4ynjm8H2BnYDvgS8M56u08CrwbeBrym3m5/4IXANsA7qMLsGmDH\nel+vARZHxCb195fV250ATKZ6ON/Lxr15AvhD/bsO8DdUAQbVH3yvAJ4PvCEitqQ6N5sCU4GzgPe2\nW12NdwZYMzrATzLzLuBqqv/ohjNQf/0gcDFwcmYua6F+xcnMpcCDEfGXwC7AtcB1VNPx7EYVLIPH\nswOcUx/LweO/TbWbnJ+ZfwJ+VW+/I/CDzFyWmVcBDwAbA49FxLOBrYG5dZm71uV8n2pmhf2Abzun\n3Rr5EfDmiHgRcCvweL1+APi/wH1U0y1NBnYC5mbmQ5n5xcz8l35UWOOXAdacx+qvK3n6f6yD33d3\nNtgcWEZ1SUqrdhnwBqqW66PAlVStoldSBVW3weM/eMwHqFoAg9bren/9Ies79b73pgq0a6nCa0fg\n15l5TWa+neqy5TeHdkzQsAZ/7y+manntD5xTr5tCdaVix8xcj6fO5dBzIz2NAdauZcCr61bE3kAn\nIiYBn6O6DLZvRGzTzwqOc5dRXUYa/A/uSuBvqcbUfHSEn10AvDgiXhgRf0V9/wz4DXBIRGwSEbsD\nz8rMu6laaP+dKrz+naoF9lBmroiIz0TErsANVPcx9xy7jzixZebjQAIH8VQHnE2Ah4GHImJf4EVU\nUy9dDxwYEZMj4siI+Eo/6qzxywBbO3vUXYNXRsRK4Fld7w293wXwNeDHwE+prv2vR/Wf5Pn1zemP\nU81SreFdQdUKuhKgvkS7KVWwwfDHfPBe48PAiVSBdTrwy/r9H1ONzbkA+N/Ae+r1V1OF3DWZuYLq\nsuJV9Xs/o7qM+ADVHx6nj9knnLg6PHVOfgjc3PVHx5+pOmksoGqdfQn4LtW5WUA1b+ChwGdbrK8K\n4FiIkqQi2QKTJBXJAJMkFckAkyQVyQCTJBXJAJMkFckAkyQVyQCTJBXJAJMkFcnpVLROiIg5wOFU\nv/PnAB+hGkFjL+Ah4HOZ+cX+1VDSmrIFpgkvIvYEDqEaz3Bb4MVUU6psDGwBvKzaLPyDTiqI/2C1\nLtgFODczFwBExJlUc0/dSTWVzaWZ6VxTUmFsgWld0D2lDVS/949l5qHAt4BtI+KSetJLSYUwwLQu\n+DXw9xExIyKmAm8BromIo6lGlP8p1YSXs/pYR0lryADThJeZl1NNf3I98Efgd8BPgNcCS4H5wEWZ\neWO/6ihpzTmdiiSpSLbAJElFMsAkSUUywCRJRTLAJElFMsAkSUUywCRJRTLAJElFMsAkSUX6T+W6\nXptza1QiAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"os\", hue=\"version\", x_order=[\"Linux\", \"Windows\", \"Mac\"], data=results, palette=\"Paired\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because seaborn knows how to work with dataframes, we just need to pass in the column names for the various arguments and it will do the analysis and presentation.\n", "\n", "How about if we try to see if there is any relationship between how useful the site is and OS/Python choice? We can add the useful column into the plot using col." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAAFgCAYAAAAik9VrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4ZHdZL/rvTprIJMEEEjgxEKL2ixJRgYCEMItXvedg\nBAyDTCKDKDMX8IgcRUAUBByI4j0JKDKJQDSCDIkiUzBBuAgh5g1cjGkCnU4IEklCBlLnj1UNO53e\n3bs7u6r2Xv35PE8/XVV71e/9Va+ud9X+1hqWJpNJAAAAABin/RY9AQAAAABmR/gDAAAAMGLCHwAA\nAIARE/4AAAAAjJjwBwAAAGDEhD8AAAAAI7Zp0ROAeaiqWyf5WJKvd/fRKyzz+CR37e6n72WNY5K8\nKclJ3f2yFZb5pyTP7e5P7k0NgHmade+sqgOS/FmS45JcluSl3f26vZ/xqmqek+T/SvITSX50b3s+\nwLzMoRffKskbktwvydeSvKa7X7OT5U5L8pvd/bEdHv/LJCd397t2UeOb3X3jPZ0bsHaEP+wrfjTJ\nBRk+7K9ksreDV9X3J3lekr/ZzaKTG1IHYM5m2juTPCPJQUlun+SIJB+pqr/u7q/egDF3Z5Jk0t0n\nzbAGwFqadS9+ZpKzkvx8ktsl+XhVvaW7L1xNje5+zCpq+PwLCyb8YV2rqp9K8pTu/rnp/ROTfDBD\nyPLWJA/I8G3x73X3q6vqkCQnJrl/kksy/GJxRpL3T4f8dFW9O8nW7v7D6ZhfSHLfFerfJsmXd/Kj\n+3X3h5fdP7+7f66qXrgHr+3FSZ6c4X34ziRPT3Jakqd192er6vczfCv9E1W1Kcm/J7l9d1+72hrA\nvmkD9c53JHljd1+a5DNVdXGSmya5Tvgz3WvyHUlelOTSJI9KckKSSvKi7v6jnb2G7v7bqrrt9Lk/\nkuGb7UmSpap6YpIf6e6nV9XWJJu7+9KqOjbDN9sPWk3dnb1+gGTj9OLuftF0+aUkN0vyX9M/O3NM\nVb01yU2SPKu731xVb8qw5887q+rlGT7fnpfk1CRXdvdvJrmmqp6e5KVJLkzy0O7+7Mr/esBaE/6w\n0Wz/1uDeGTZOt05yyyS/NQ1IfjfJPyR5WJIjk7w7w7clP51h4/uQ6UZpZ2NeT3dvzSrOjdXdV+3J\ni6iq+yd5ZJJ7ZNjovyvJY5J8IMl9knw2yd2SXDU9LOKuSf5Z8APspfXaO8/bfruqHprkX7p7y04W\nvTpD4HJEklcneX2Sn5nO9c+T/NHOXkNV/UOS5yY5J8M35j+Z4ZeS7fOfLLu9M6upC7Ba67IXJ8m0\n/lUZgu7HdPflKyx61PTPA5O8LMmbp3OYVNUPJ3lckqOT3CjJe5K8cfq8/ZMsJblNhgDoqUl+ZTVz\nA9aGEz6zEU0yHPe8NcM3It/b3U/p7msyHKv8miTfTHJ2kjtk+OC+NP2zHiwluXuSd3X3+dPDG96W\nYUN5apL7VNWBSS5P8snpsvfLEAwB7K112zur6pcy/MLwuF0s9o7uviLJmUk+Pg2JPp7kwOnP75fr\nv4Y7Jrlzkrd19xXd/bdJLpouv9rXtru6AHtiXfbiaf39M5wT7bVVdYcVFt2+t+Y/ZQiutlvK0G9P\n6+4vdndn2HNyu/2T/Mm0n35kh+cCc2DPH9a7Sa4bUt40yVJ3/1eSX5ieAO+nquplSR6cYWN5VHef\nvXyQ6W63uxpzp/bg0IWVnv+mDIcJTJLcYoc5LN+I75fk2iSfyPBtyn0zbBg/k+GDwL2TPGl39QCm\nNkzvnB4ue/skx23fu3GF3nnF9O9rk1y57Pb2XrrSa1jKdb8Z33/Z69nZa9vxde2uLsBKNkQvnu55\n+fHu/nKSM6rqzCT3qKrfTvIL2Xkv3vGzbKbzWt5bl++xfu00YNpOD4U5E/6w3l2a5KiqOjjJf8tw\nSNTfV9WDM3yj+0dJ/j7JbyT5viQfTfLcqnpWhm9Ltm9MdxzznlX1ugxXmNn+7e31NkJ7srvssjG+\nvdHr7kcnefT2+1W1/eY/Jzmxql6b4ZeJRyV5XXdPqursDEHPy5L8W5JnJ7lld5+/B/MA9m0bondW\n1c9kuDrNQ3Z4/kq9c6f1plZ6DZ9L8oiq+tj0/vZvm5ePc2mS+1XVPyZ57Arj+0UF2FMbohdn+KLx\nZ6rqmRnC+GOTvLi735bhtARJvt2Ld9ULz0ny0qo6LMNhbT+X4dxGwDrgsC/WuzOSdJItSV6Z5O+m\nj3803zkZ3rlJ3tvdn0vywgzHT1+Q4WR6b+ju7ed12B7KvC3JnTLs+v8jGTZUSzsss0eq6per6tok\nv53kJVV1bVU9ZIXFJ9NvW96UYU+fzyX51PR+Mhz6dd8kn+jur2f4ReVjOxsIYAUbondmOP/OcdOe\nuf3Pjr/o7GjHettvr/Qafj/DHpUXZ/gF56x859vp7c/9/Qwng/5sktP3sC7ASjZKL/5fGUKkL2U4\nzcDvdvdZKyy7Uh+cdPcnkrw3wyFrr5/evmaF5+mhMGdLk8ls33dV9cgkf5jhBGKP7+7TZloQAACA\nuaqqGyf5nxmuWHZ5hgDrD7v7Hbt8IjAXM93zZ7qL4+9nuIzhQ5M8ZZb1AAAAmL/u/maG3y//NckX\nknw+yTsXOing22a6509VHZ/kAd39yzMrAgAAAMCKZn3C58OTHFBVX0xy4yRP727pLwAAAMCczDr8\nWcpwxvi7JTkyw3GfK4U/Z2U4eRkAq7cnVyDSZwH2nD57A5177rl5y+mvzCGHHzTXutu2XJJHHfO8\nbN68ea51gT3mippzMOvwZ2uSj3X3JUkuqaoLq+rg7v7qTpY9asZzAdjX6bMAs6XP7kRVbT7htOf3\nYXe49SJq12QyOXfuhQHWmVmHP6cmeUFVvS7JbZLccoXgBwAAAIAZmOnVvrr7wgyXef9chsO9fnWW\n9QAAAAC4rlnv+ZPuPjHJibOuAwAAAMD1zXTPHwAAAAAWS/gDAAAAMGLCHwAAAIARE/4AAAAAjJjw\nBwAAAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACM\nmPAHAAAAYMSEPwAAAAAjJvwBAAAAGDHhDwAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAA\nAIyY8AcAAABgxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4A\nAAAAjJjwBwAAAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET\n/gAAAACMmPAHAAAAYMSEPwAAAAAjJvwBAAAAGDHhDwAAAMCIbZrVwFV1lyT/suyhf+ruB8yqHgAA\nAADXN7PwJ8l3J/mz7n7qDGsAAAAAsAuzPOzr5kkum+H4AAAAAOzGLPf8uXmS+1TVl5N8M8nTu/s9\nM6wHAPu8paWlA5IcsaDy500mk6sWVBsAgBXMMvw5O8kJSf4qyd2SvL2qvre7r11h+bOS3GmG8wEY\no6U9WFaf3Qd0d15/6pk55LDbzbXutgvOzxMedPe51oQ50WdvoO7OaVtOWlTtXkhhYE/sSZ9lL80s\n/Onuzyb57PTuR6tqa5JbJ7lwhaccNau5AJBEn90nVNXmV538ob7t7Y9cRO2aTCbnzr0wrB/67E5U\n1eYTTnv+QkIYfQlgMMurfT0jyQ8leXaSo5Mc1N0rBT8AAAAAzMAsD/s6MclbkmxLcn6Sx8+wFgAA\nAAA7McvDvi5PctysxgcAAABg92Z5qXcAAAAAFkz4AwAAADBiwh8AAACAERP+AAAAAIyY8AcAAABg\nxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjJjwBwAA\nAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACMmPAH\nAAAAYMSEPwAAAAAjJvwBAAAAGDHhDwAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAAAIyY\n8AcAAABgxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAA\njJjwBwAAAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiM08/Kmq766qLVX1f8+6FgAAAADXNY89f16S\nZEuSyRxqAQAAALDMTMOfqrprku9J8qEkS7OsBQAAAMD1bZrVwFW1f5LfTfLIJM+NPX8AWIeWlpYO\nSHLEgsqfN5lMrlpQbQAA9hEzC3+SPDPJW7v74qpayu73/DkryZ1mOB+AMdqTvSr12Z3o7rzl9Ffm\nkMMPmmvdbVsuyaOOed6aj9vdeffZW9d83FXW7oUUhtnSZ2+g7s5pW05aVG19CdY/RwnNwSzDn+OS\nHFtVJ07vP7+qfqK7/3GF5Y+a4VwA0Gd3qqo2n3Da8/uwO9x6EbVrMpmcu8Zjbn7VyR9ayC87s3g9\nsMHoszuxvc8uqLa+BJAZhj/dfZ/tt6vq5Uk+sovgBwAAAIAZmMfVvgAAAABYkFke9vVt3f0/51EH\nAAAAgOuy5w8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACMmPAHAAAAYMSEPwAAAAAj\nJvwBAAAAGDHhDwAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAAAIyY8AcAAABgxIQ/AAAA\nACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjJjwBwAAAGDEhD8A\nAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACM2KZFTwAAAABg\nPauqA5O8LcmxSTrJs5K8OskPJ/lckgd395cXN8Nds+cPAAAAwK49Mck5SW6V5LVJXpgh9Ll5kucn\nue3iprZ7wh8AAACAXTsiyfu6+8ok70tyYJLXJLlXhgDo7MVNbfeEPwAAAAC79sUkP11V35Xkvye5\nJMn3Jzk9yUEZ9v5Zt3Yb/lTVP+5w/4CqOnN2UwIAAABYV/53hrDnq0melOS3kzw3yTeS/FqS9y5u\naru34gmfq+r4JI9Mcr+qOnnZjw5O8r2znhgAAADAetDd38iwx89y91rEXPbGrq729ddJPpPkQUle\nl2Rp+vi3kpw143kBAAAAsAZWDH+6e5LhTNY3r6qDM+zxs913J/nKjOcGAAAAwA20qz1/kiRV9dok\nj03y70muXfajH5vVpAAAAABYG7sNf5I8LslR3f0fs54MAAAAAGtrNZd6/7dcd48fAAAAADaI1ez5\n894kp1TVe5JcMX1s0t2/s6snVdUBSU5MclySbUme092n3JDJAgAAALBnVhP+TJK8c9n9pZUW3MFx\nSa5McmiSH0ny5iTCHwAAAGCvLC0tHZDkiDUe9rzJZHLVSj+sqqOS/HF333/ZY3+X5AXdffYaz2Um\ndhv+dPdv7c3A3f32JG+vqv2S3CLJlr0ZBwAAAGDqiBe89i/7kMNutyaDbbvg/Pze0x5TSc7dk+d1\n9/9YkwnMyWqu9nXFsrv7JbkmyTe6+9BV1rg8ySVJfmrPp3d9M0r5VmuXaSC7Z/0BwMoWuJ280fTv\nq+dc17YZYEbG/LvXIYfdLre9/ZGzGn5VqurdSV6Q5EFJDk7y80luleQJ3X1KVZ2T5M7dfVVVvTTJ\n55N8K8k9uvvpVfXoJPfq7qfOY76r2fPnJttvV9V3JfmV7MEHg+6+cVU9IMmbktx5F4ueleROqxgv\nrz/1zKxVyrda2y44P0940N3nWnOMrD9Yc6s9FDdZZZ/d13R3Ttty0qJq9wzGzLvP3rrWw6629pq/\nnn3NoraT53zqjJxy7hXZdOBt5lbzmq9vzYd/+xFzq3cD6LM30Nj6LGwU3Z23nP7KHHL4QXOtu23L\nJXnUMc/bk6fsSZ9dTybLbj8gyb2T3DfJUzOc8mayw7KT7n5TVT22qu6S5JlJHjivya7mnD/f1t1X\nVtXrknwlyWt3tWxVHZvk4u4+p7v/sao2VdWtuvviFZ5y1GrmUFWbX3Xyh3oRKV9V1WQy2aNdwbgu\n6w8WalV9dl9TVZtPOO35C/nlYBZ9aXufXcsx96C2PnsDLWo7edEFW7Lpwstyo4MPm2vdEf6f0Wd3\nYmx9FjaK7e+9w+5w60XU3pfee5Mk7+nui6rq9CTPWWG57SHXM5J8JMmzuvvSeUwwWd1hXz+77O5+\nSY5N8p+rGPuOSR5cVY/J8A3ILXcR/AAAAABsRFdO/7423wl5Jstu33TZsrdKcmmSw+cztcFq9vx5\nZL6zu9IkwyQftorn/UWSeyY5L8nXkjxpL+YHAAAAsNFcmuSeVXVuhsO7/rWqNiX5vST3SfKOqnpr\nd//HPCazmnP+PCJJqurQDMeobVvNwN19dZJfmv4BAAAAuMG2XXD+Isa6b1Vdu+z+actu73h+nyT5\nkyR/m+Tfk5ya4UiqZyU5pbsvqKpfz3A6nblcNWw1h33dO8lfJrlJkqWqujTJL3T3GbOeHAAAAMAy\n500vzb6mY+7qh919VobwZmc+t2y5rUmOmd5+Y5I37mLMDyb54J5OdG+t5rCvP07y7O4+OUmq6pFJ\n/jTJXWY5MQAAAIDlppeQ31dOJr1mVkqulvu+JH+/7P7fJNk8m+kAAAAAsJZWs+fPZ5M8rapOyHCm\n6l9N8q8znRUAAAAAa2I1e/78UpKHJ7kkycVJfjrJE2Y5KQAAAADWxmrCn7smuWV33zTJzZNUkh+f\n6awAAAAAWBOrCX9+N9NLj3X3JMn9p48BAAAAsM6t5pw/N0vytWX3L89w7h8AAACAuVlaWjogyRFr\nPOx506uI7VRVHZXkM0nu0d2fWPZ4J3l7d79ojeez5lYT/pyQ5B+q6m+S7J/koUn+35nOCgAAAOD6\njjj04S/uTQfeZk0Gu+brW3PhX/1mZfeXj//3JA9L8onk24HQTZNM1mQiM7bb8Ke7f6OqPpTkHkmu\nTfKU7v6nWU8MAAAAYEebDrxNbnTwYfMsOUnyySQPSvKC6WMPTXJqkqWqelKSl2QIg07s7udU1X5J\nTkpyfJKzkjykuy+Y56SXW82eP+nuUzO8KAAAAIB9zbeSfLaq7tLdn0ryE0n+JMkPJTk4yd2SXJrk\nn6vqFUmOTfI9SQ5J8pTpn/+1iIknqwx/AAAAAPZx70jysKq6NMl/JNl+nqClJP9fhhBokuTADFdO\nP7m7L0vy6gXM9TpWc7UvAAAAgH3V9otevT/DHj8PSfLO6WMHJ/nlJHfp7v2SnD59fJLhvMnrgvAH\nAAAAYDe6+6okneThSd47ffgWGa6KfllV/WyS709yaIYTQx9fVQdW1dOq6o8XMeftHPYFAAAAbBjX\nfH3rvMea5DtX9frrJI/p7m9WVTJcBey7kpyf5A1JXpPkjUmOTPLTSc7LEBg9dM0mvReEPwAAAMBG\ncd700uxrOuauftjdn0vyqOntU5KcMr39znzn8K/lXjH9+8nTPwsn/AEAAAA2hMlkclWScxc9j43G\nOX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAAAIyY8AcAAABgxFztCwAAANgQlpaWDkhyxBoPe970\nKmI7VVWfSXJcd39xev/sJM/t7vdO75+cZHOSo7v78t0Vq6oTk7y1u/9hTWa/CsIfAAAAYKM44jff\n8MQ+5PCD1mSwbVsuyYt/8cTKri8f/8Ek90nyxaq6VZKbTu+/d/rzuyf5/u6+YpVlJ3s7370l/AEA\nAAA2jEMOPyiH3eHW8yz5wSQPTvLnSY5N8pdJ7p0kVfWDSf49yZlV9eNJfifJV5L8apKlJA/t7jOq\n6mlJXpwhZPrS9LlLSV6X5PgkX03ytCRXT5/zK1X1qCS/1t13rqrbJnlzkl+b1j98Oq+fX83eRs75\nAwAAALCyD2cIfTL9+7Qk+1fVjTPsAfTBfGdvnkmSo5PcKclrkjx+utyLktwzyWOS3Gu63EOSfF+S\n2yd5XIYg6ONJ7jId615JLqyqW0xvf3C63O8kOTDJB5L80GpegPAHAAAAYAXdfUmSb1TVf0tyjyRn\nJDkzyY9nCIM+mGEvn2QIdd7Z3ZcmOT1DSHP7YZg+t7u/kORD0+XvkuQt3X1pd38syX8luVmSK6vq\nJklul+Tkac1jpnXelOSBSY5L8obu/pfVvAbhDwAAAMCufTDJTyWZdPc3k3w0w944d88Q8ix35fTv\nSYaQZynJt5b9fL9lP99/h8cn07EfmCEMOiND8HOXJP/c3R/v7sdmONTspKo6ejWTF/4AAAAA7NoH\nkzwl3wl6Pprkvyf58jQM2pXzk/xgVX1fVf1ApucLSvIvSR5ZVbeoqvsk+a7uvjjDnkHPyhD8/GuG\nPX8u6+5rqurlVXVMkk8n+XyS+69m8k74DAAAAGwY27ZcsoixPpJh75uXJEl3X1RV35PkLdOfL7+C\n1/Lz/0y6+/KqekWGsOfzSbZf4v1vk/xkhnDowiRPmj5+eoaA6Nengc/Nkrx/+rP3ZTj067ZJPpnk\n4auZvPAHAAAA2CjOm16afU3H3N0C3f31JDfa4bE7Lrt95+nNZy977Iwkj5refnWSV+9k6F+Z/lk+\n7jeSfNey+/dddvtDSY7c3Xx3JPwBAAAANoTJZHJVhsulswec8wcAAABgxIQ/AAAAACMm/AEAAAAY\nMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjNimWReoqlcneXySryV5and/YNY1\nAQAAABjMNPypqgcl+bEkRyY5OskfJLnTLGsCAAAA8B2zPuzr00ke3d3/meQjSW4y43oAAAAALDPT\nPX+6+6Jld5+c5E9nWW+Wrrn66iQ5Ymlpad6lbzT9++p5F05y3mQyuWoBdUdjaWnpgCRHLKi89QfM\nzT64ndRj2WsL/HywqPfLEXOuxxpa4P/XUfXZBf07zrse69jMz/mTJFX1xCR37u4n7mKxs7KKQ8K6\nO+8+e+uazW21vrZtaw59+Ivfv+nA28y17je/dFae9vNX5JDDD5pr3W1bLsmjjnnemo+7qPU3rd0L\nqJm3nP7K0aw/1qU9+U17VX12X9PdOW3LSYuqveZ9yXZy9mbZYxe5nVyERWyb98Ka99nuzutPPTOH\nHHa7vZ/VXjjnU2fklHOvyCLep4uyQf6PrWuL+Dw7xs+y3Z37/K+3zfX9t4Hee3P/5mhfNI8TPj85\nydG7CX6S5KhVjrf5VSd/aCFNfNOBt8mNDj5srjWv/s8Lc8jh38hhd7j1XOsmSVXVZDI5d43HXNj6\nm8XrWUXNzSec9vwey/pjw1tVn93XbH+fLqj2qPrsvrSdnFWPXeT6W4QRbqv26PPsbW9/5Kzncx0X\nXbAlmy68bCHv0+Qbc6253Qj/j83doj7Pjm3dVdXmw578Zz3P95/3HsvN+oTPm5Mcn+QnZ1kHAAAA\ngJ2b9Z4/xyd5QJJrqipJJkm+p7svnXFdAAAAADL7Ez6/NMlLZ1kDAAAAgJXN+lLvAAAAACyQ8AcA\nAABgxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjJjw\nBwAAAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACM\nmPAHAAAAYMSEPwAAAAAjJvwBAAAAGDHhDwAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAA\nAIyY8AcAAABgxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4A\nAAAAjJjwBwAAAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBGb\nefhTVT9cVV+oqqfMuhYAAAAA1zXT8KeqNiV5RZK/m2UdAAAAAHZupuFPd1+T5H8kuXiWdQAAAADY\nuU2zLtDd11TVrMvALl1z9dVJcsTS0tK8Sx8x74KztLS0dEAW85puNP376jnXPW8ymVw155oLtw+u\n5yPmXA+ADWyB28lkH/1sspYWuP4WURO+bebhzx44K8mddrdQd+fdZ2+dw3To7p7BmAtZf1/btjWH\nPvzF79904G3mWvebXzprrvWWm9X6e/2pZ+aQw2631kPv0jmfOiOnnHtF5rn+rvn61nz4tx8xt3o3\nwJ4kmqvus/vKek7G+T61nZy9Way76bj71Pqb1b/jGptJn92X1vMijenz0LYLzs8THnT3udZMhtd7\n2paTFlF3Zn12UZ9z/v7CuZZcqD1cf3P/hn5fNM/wZ7Kbnx+1mkGqavOrTv7QRvigsOFVVU0mk3PX\neMyFrb9NB94mNzr4sLnWvPo/L0zyjbnW3G6W6++2tz9yLYfdrYsu2JJNF1429/U3i3/DBdujPruv\nrOexvk/Xckyub1b9YV9bf/t6n531ZBjX56Fp7bm/Z6pq8wmnPX/u/19n3WcX8TknF14215qLNML+\nvuHN61LvS5HmAQAAAMzdTPf8qapjk3x42f0/SXLr7r5klnUBAAAAGMw0/Onuj2Z+excBAAAAsAPB\nDAAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAAAIyY8AcAAABgxIQ/AAAAACMm/AEAAAAY\nMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjJjwBwAAAGDEhD8AAAAAIyb8AQAA\nABgx4Q8AAADAiAl/AAAAAEZM+AMAAAAwYsIfAAAAgBET/gAAAACMmPAHAAAAYMSEPwAAAAAjJvwB\nAAAAGDHhDwAAAMCICX8AAAAARkz4AwAAADBiwh8AAACAERP+AAAAAIyY8AcAAABgxIQ/AAAAACMm\n/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgDAAAAMGLCHwAAAIARE/4AAAAAjJjwBwAAAGDEhD8AAAAA\nIyb8AQAAABixTbMcvKp+P8kvJtma5HHd/S+zrAcAAADAdc0s/KmqeyW5b5JKckyS1yb58VnVAwAA\nAOD6ZnmJyGfhAAAIsElEQVTY1wOTnNjdF3f3KUkOrqqbz7AeAAAAADuY5WFfhyb55LL75yW5bZLP\n39CBt11w/g0dYo999cIv55qvXzH3ut/6xkXZtmX+dbdtuWR2Y1t/M2f93XDXfH1rkhyxtLQ017pJ\nMplMzp170R3sK+s58T5dK/vS+pvlukv2nfWnz+4b6znRZ9e45iLeM0fMuu/tSJ9dG2N877H3liaT\nyUwGrqoTkvx9d79nev+0JL/c3V+YSUEAAAAArmeWh319Ocntl90/IslXZlgPAAAAgB3M8rCvDyT5\ns6r66yT3T/Ll7r5shvUAAAAA2MHM9vzp7k8keW+Sc5L8epJfnVUtAAAAAHZuZuf8AQAAAGDxZnnO\nHwAAAAAWTPgDAAAAMGLCHwAAAIARm+XVvvZZVfXqJI9P8rUkT+3uD0wf/94k5++w+DO7+4/nO0O2\nq6oDkpyY5Lgk25I8p7tP2clyf5DksO7++TlPcfSq6lZJPt7dP7CLZX4jyVe6+6Q9GPfQJG/v7vtW\n1c9299+uwXRZJ/TZjUOfXTx9lr2hz24c+uzi6bNsBMKfNVZVD0ryY0mOTHJ0kj9Icqck6e4vZdne\nVlX1riTvW8A0+Y7jklyZ5NAkP5LkzUmus7GsqrsmuVuSL+/w+I8luaS7/2M+U92n7c2Z6a9I8l/T\n289OYmM5EvrshqPPbgz6LN+mz244+uzGoM+yUMKftffpJI/u7v+sqo8kucnOFqqq+yXZ1t2fn+fk\nuK7ufnuSt1fVfklukWTL8p9X1f5JXp7k15M8fYen3yfJOUlsLGegqh6S5E+TXJLkI0m2Th9/cZJf\nyfAh54Xd/RdV9YdJvpLkV5MsJXlokjOTvLaq/jTJfarqi9195LLxb5vkr5P8aJK/S/ILGT7kvj3J\nHZOcleS47v5yVZ2V5DNJvpTkFUnekuSeGd7vv9DdO34DymzpsxuIPrt+6bPsgj67geiz65c+y3ri\nnD9rrLsv6u4LpnefnOHNvjPPT/K785kVq3B5kj9P8owdHn9GkrcluXAnz1ma8Zz2da9I8rAk90/y\n40km02+tHpLh28cHJvmdqrpFhm9Sjp4+/pokj+/uSXe/r7ufmuQ/lm8op16YYSN5SIZ1+ZNJjkjy\nWxk+OL0/yWOnyx6c5F1JXpDkRUnekeSgJK9N8pK1fuHsmj67Yemz648+y07psxuWPrv+6LOsG8Kf\nGamqJya5c3e/cic/qyTXdvd5c58YO9XdN07y6CRv2v5YVR2e5IHd/fos2zBW1Uur6tokr07y3qq6\ntqqOn/ecx6yqbpzkRt39ke7emuQ9GdbBXZKc3N3buruTfCpJZdhYvrO7L01yepIDV1Hmrkne1t2X\nd/cjuvt9Sb6e5Hcy7GL7wgwbzSTZ1N3v6O5JkmOSvC7DNzVvnc6JBdBnNxZ9dn3RZ1kNfXZj0WfX\nF32W9cZhXzNQVU9OcnR3P3GFRX42w5ufBauqY5Nc3N3ndPc/VtWmqrpVd1+cITn/memGcfvyb+zu\nxyb5jap6ZpJ/234CRNbUUpJrl93fHlRPkuy/w+Pbj5++ctkyq/kWa8exkuTFSX4vw7Hyv5jk+6aP\nf3PZMlcm2dzdX1hFDWZEn9049Nl1S59ll/TZjUOfXbf0WdYV4c8aq6rNSY7P0GhXcs8MaSyLd8ck\nD66qx2TYxfKWSb6aJNMz8Z+UfPvbrZdON5TL2VV2Brr7iqpKVd0jwxVFfiZJJ/lkkmdPj4m+VYbj\nm3sVQ96sqm7W3Zcte+wTSR47HesPkrw7wzcjFyW5XZJH5PpXM0mSM5I8Y3rFhockObi7X7U3r5O9\no89uOPrsOqTPsiv67Iajz65D+izrjfBn7R2f5AFJrhn6a5LkeUlu3N0vm94/LNOTfbFwf5Hhw8t5\nGS5l+qQkz6mq5esrGTaK1zlDf3f/4bwmuQ/Y2dUPfi3DMcxfS/KBJEvd/emqeluSszMc1/7c7v6v\n6XttsmysHcf7bIaTGR6+7LGXJfmrJM/J8M3lOzOs57dmOOnhM5P8zbTe8vFenuSNSS7IcBK9R+zF\n6+WG0Wc3Fn12fdBn2RP67Maiz64P+izr2tJksjdXnAMAAABgI3DCZwAAAIARE/4AAAAAjJjwBwAA\nAGDEhD8AAAAAIyb8AQAAABgx4Q8AAADAiAl/YA9U1Uuq6rmLngfAWOmzALOlz8K+aWkymSx6DgAA\nAADMyKZFTwBmqarOTPLM7v749P5pSf4myUOT3D3JliRP6O7Tq+ovklyY5MlJ7pzkt6bLXZvkpO7+\nf6rqpUm+1t2vqqrjkrwyyaFJTk/yS919QVWdl+RFSV6d5Kokj+/uU+f0kgHmSp8FmC19FlgLDvti\n7N6c5GFJUlWHJLljkock+eMkt0zyuCSvny579fTn35vkZknumeR2Se6QZFNV3TrJJMmkqm6R5MQk\nv5hhY3lWkpfvMM7tMmxMnznTVwiwWPoswGzps8ANJvxh7N6W5Gentx+W5J1J7p3kHUmuTPLxJD9Q\nVbfKsCH8u+7+RpJzk3w0ybMzfGvy3O6+aDrOUpIfTPL/d/dHu/uKJCclOXpZ3TdMH/9wkoNm+PoA\nFk2fBZgtfRa4wYQ/jFp3X5jki1V1dJLjk/xFho3kzbt7v+mf/bv74ulTLp8+71vd/aQkr0lycJJT\nq+rQZUPveLKs/XZ47PLp39dm2LgCjJI+CzBb+iywFoQ/7AvenOSJSb6nuz+V4XjmF1TVTavq/lX1\nxh2fUFX3qKrfS/KtJKdleK/cbdkiZyc5sqqOraqbJfnlDN+6AOyL9FmA2dJngRtE+MO+4F1JHpnk\nrdP7T01y3yTbMhwr/b+XLbv9245PZzhW+itJvpTkggwbzSSZTHel/aUMx1d/JcmRSX59hfouqQeM\nnT4LMFv6LHCDuNQ7AAAAwIjZ8wcAAABgxIQ/AAAAACMm/AEAAAAYMeEPAAAAwIgJfwAAAABGTPgD\nAAAAMGLCHwAAAIAR+z8NSjOscNgrtgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"version\", hue=\"os\", data=results, col=\"useful\", palette=\"Paired\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we can add a column, we can also add a row and seaborn takes care of the rest.\n", "\n", "In looking at the data, we have two different versions of winpython so clean that up first." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "results['distro'] = results['distro'].str.replace('WinPython', 'winpython')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistro
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3-highRSS2015-06-09 23:22:432.7MacIncluded with OS - Mac
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2015-06-10 01:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2015-06-10 01:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3-high \n", "1 Infrequently Infrequently 3-high \n", "2 Daily Never 2-medium \n", "3 A couple times a week Once a month 3-high \n", "4 Once a month Never 3-high \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " version os distro \n", "0 2.7 Mac Included with OS - Mac \n", "1 2.7 Windows Anaconda \n", "2 3.4+ Windows Official python.org binaries \n", "3 2.7 Mac Official python.org binaries \n", "4 I don't care Mac Anaconda " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also look at the distros. Since there is some overlap with the distros and os, let's only look at a subset of distros. For instance, someone using winpython is not going to be using it on a Mac." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Anaconda 22\n", "Official python.org binaries 13\n", "Included with OS - Linux 11\n", "Included with OS - Mac 4\n", "winpython 3\n", "Docker Python image 1\n", "3rd party packager 1\n", "dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['distro'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most meaningful data would be looking at the Anaconda and Official python.org binaries. Let's filter all of our data only on these two values." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistro
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2015-06-10 01:19:082.7WindowsAnaconda
2InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2015-06-10 01:55:462.7MacOfficial python.org binaries
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda
5Once a monthDailyA couple times a week1-lowFeedly2015-06-10 04:53:492.7WindowsOfficial python.org binaries
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "5 Once a month Daily \n", "\n", " freq-sql freq-vba useful \\\n", "1 Infrequently Infrequently 3-high \n", "2 Daily Never 2-medium \n", "3 A couple times a week Once a month 3-high \n", "4 Once a month Never 3-high \n", "5 A couple times a week 1-low \n", "\n", " notify timestamp \\\n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "5 Feedly 2015-06-10 04:53:49 \n", "\n", " version os distro \n", "1 2.7 Windows Anaconda \n", "2 3.4+ Windows Official python.org binaries \n", "3 2.7 Mac Official python.org binaries \n", "4 I don't care Mac Anaconda \n", "5 2.7 Windows Official python.org binaries " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results_distro = results[results[\"distro\"].isin([\"Anaconda\", \"Official python.org binaries\"])]\n", "results_distro.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now do our factorplot with multiple columns and rows using row and col." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nOXetj7n1219f60POxHcu/WYuu/DS9W7GqsyqnbvLuZq285CFhYX1bsqqzOL3amfM87yux+/R1m9e\nlgu2Xj63+i7YunVmx97s52pa31x/dzfD+5pzNR/zPK/r9D52yCz7r6U2S1+5u33m2FWz+v2b899s\nh/gMAsub6RxDSyzuMScrbLvG1vvDA6szPU+b+510vTx/bQ+3+52r56x3A3YLu9953T08bQbHHM25\nWuO+a95Gc56S3f5c7Yz1Oa/PmW91ydyf4+bpK58z3+o2kTn/zTaK/nkWv1eMwyyDoa8kucWi5UOS\nXDD9+YIl226Z5MszbAsAAADATFTV9ZO8KclhSTrJ7yY5Lsltk/xbkvt191fWr4XLm+UcQ6cleUxV\nHVhVD0zyle6+LEm6+0tJrlNV966qmyd5yHR/AAAAgN3NY5Kck+SGGW6+9cwMgdC+SX4/yUHr17SV\nzSwY6u5PJHl3hv+YP07yxKp6elU9c7rL45K8LMm/JHlFd39+Vm0BAAAAmKFDkvxjd38vyT8muX6S\nFye5a4Zw6LPr17SVLUwmS6f7AQAAAGC1qur3MkyZ8wdJHp7kyCQnJXlnkocluUV3P3f9Wri8eU4+\nDQAAALAZ/Z8Mcwx9I8MlZE/OMGLo5Ax3aX/EurVsB4wYAgAAABipWU4+DQAAAMAG5lKyOaqq45I8\nKsm3kjy+u0+brr95ki8s2f2p3f3X823hOFXVtZOcmOEa0K8neVp3v3M7+x2f5Gbd/YA5N3HTqaob\nJvlId/+PFfb5kyQXdPerduK4N07y5u6+e1X9ene/Yw2ay5zpKzcu/eV86StZib5y49JXzpe+Eq45\nwdCcVNV9kvxMkp9Mcqckxye5TZJ095eyaPRWVZ2SYRZz5uPIJN9LcuMkP53kDRkmCPuRqrpjkp9N\n8pUl638myTe7+z/n09RR2ZXrXL+T5NLpz7+XxBv4bkZfueHpLzcefeUI6Ss3PH3lxqOvhBUIhubn\nU0ke1t0XV9UZSa6zvZ2q6vAkX+/uf59n48asu9+c5M1VtUeS6yX54uLtVbVnkhck+eMME4gtdrck\n5yTx5r0GquqoJCck+WaSM5J8dbr+uUmekOFD1jO7+7VV9ZIkFyR5YpKFJPdP8vEkL62qE5Lcrar+\no7t/ctHxD0ryliS3T/L3SR6a4UP1m5P8VJKzkxzZ3V+pqrOTfDrJl5L8RYZJ434+w+/yQ7t76bex\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.factorplot(\"version\", hue=\"os\", data=results_distro, col=\"useful\", row=\"distro\", margin_titles=True, sharex=False)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Responses over time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We know that we have 55 results now. It would be interesting to see how those results came in over time. Using this method, we can very simply look at this by any time period we want.\n", "\n", "The seaborn's [timeseries](http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.tsplot.html) supports this type of analysis and much more.\n", "\n", "For ease of calculating responses over time, add a count colum for each response." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistrocount
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3-highRSS2015-06-09 23:22:432.7MacIncluded with OS - Mac1
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2015-06-10 01:19:082.7WindowsAnaconda1
2InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries1
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2015-06-10 01:55:462.7MacOfficial python.org binaries1
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda1
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3-high \n", "1 Infrequently Infrequently 3-high \n", "2 Daily Never 2-medium \n", "3 A couple times a week Once a month 3-high \n", "4 Once a month Never 3-high \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " version os distro count \n", "0 2.7 Mac Included with OS - Mac 1 \n", "1 2.7 Windows Anaconda 1 \n", "2 3.4+ Windows Official python.org binaries 1 \n", "3 2.7 Mac Official python.org binaries 1 \n", "4 I don't care Mac Anaconda 1 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results[\"count\"] = 1\n", "results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get totals over time, set our index to the timestamp" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifyversionosdistrocount
timestamp
2015-06-09 23:22:43Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3-highRSS2.7MacIncluded with OS - Mac1
2015-06-10 01:19:08Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2.7WindowsAnaconda1
2015-06-10 01:40:29InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python3.4+WindowsOfficial python.org binaries1
2015-06-10 01:55:46NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2.7MacOfficial python.org binaries1
2015-06-10 04:10:17Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need itI don't careMacAnaconda1
\n", "
" ], "text/plain": [ " freq-js freq-py \\\n", "timestamp \n", "2015-06-09 23:22:43 Once a month A couple times a week \n", "2015-06-10 01:19:08 Once a month Daily \n", "2015-06-10 01:40:29 Infrequently Daily \n", "2015-06-10 01:55:46 Never Daily \n", "2015-06-10 04:10:17 Once a month Daily \n", "\n", " freq-r freq-ruby \\\n", "timestamp \n", "2015-06-09 23:22:43 Infrequently Never \n", "2015-06-10 01:19:08 A couple times a week Never \n", "2015-06-10 01:40:29 Once a month Never \n", "2015-06-10 01:55:46 Once a month Never \n", "2015-06-10 04:10:17 Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "timestamp \n", "2015-06-09 23:22:43 Once a month Never 3-high \n", "2015-06-10 01:19:08 Infrequently Infrequently 3-high \n", "2015-06-10 01:40:29 Daily Never 2-medium \n", "2015-06-10 01:55:46 A couple times a week Once a month 3-high \n", "2015-06-10 04:10:17 Once a month Never 3-high \n", "\n", " notify \\\n", "timestamp \n", "2015-06-09 23:22:43 RSS \n", "2015-06-10 01:19:08 Reddit \n", "2015-06-10 01:40:29 Planet Python \n", "2015-06-10 01:55:46 Planet Python \n", "2015-06-10 04:10:17 Leave me alone - I will find it if I need it \n", "\n", " version os distro \\\n", "timestamp \n", "2015-06-09 23:22:43 2.7 Mac Included with OS - Mac \n", "2015-06-10 01:19:08 2.7 Windows Anaconda \n", "2015-06-10 01:40:29 3.4+ Windows Official python.org binaries \n", "2015-06-10 01:55:46 2.7 Mac Official python.org binaries \n", "2015-06-10 04:10:17 I don't care Mac Anaconda \n", "\n", " count \n", "timestamp \n", "2015-06-09 23:22:43 1 \n", "2015-06-10 01:19:08 1 \n", "2015-06-10 01:40:29 1 \n", "2015-06-10 01:55:46 1 \n", "2015-06-10 04:10:17 1 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_results = results.set_index('timestamp')\n", "total_results.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use pandas TimeGrouper to summarize the data by day and do a cumulative sum. We could easily do this for any time period too." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "timestamp\n", "2015-06-09 1\n", "2015-06-10 17\n", "2015-06-11 22\n", "2015-06-12 26\n", "2015-06-13 27\n", "2015-06-14 30\n", "2015-06-15 33\n", "2015-06-16 34\n", "2015-06-17 35\n", "2015-06-18 41\n", "2015-06-19 46\n", "2015-06-20 49\n", "2015-06-21 49\n", "2015-06-22 50\n", "2015-06-23 51\n", "2015-06-24 52\n", "2015-06-25 52\n", "2015-06-26 53\n", "2015-06-27 53\n", "2015-06-28 53\n", "2015-06-29 53\n", "2015-06-30 53\n", "2015-07-01 53\n", "2015-07-02 55\n", "Freq: D, Name: count, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "running_results = total_results.groupby(pd.TimeGrouper('D'))[\"count\"].count().cumsum()\n", "running_results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To label the x-axis we need to define our time range" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nbKiwy3dFAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "step = pd.Series(range(0,len(running_results)), name=\"Days\")\n", "sns.tsplot(running_results, value=\"Total Responses\", time=step, color=\"husl\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Heatmaps and Clustermaps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final section of data to analyze is the frequency with which readers are using different technology. I am going to use a [heatmap](http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.heatmap.html#seaborn.heatmap) to look for any interesting insights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at the data again." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
freq-jsfreq-pyfreq-rfreq-rubyfreq-sqlfreq-vbausefulnotifytimestampversionosdistrocount
0Once a monthA couple times a weekInfrequentlyNeverOnce a monthNever3-highRSS2015-06-09 23:22:432.7MacIncluded with OS - Mac1
1Once a monthDailyA couple times a weekNeverInfrequentlyInfrequently3-highReddit2015-06-10 01:19:082.7WindowsAnaconda1
2InfrequentlyDailyOnce a monthNeverDailyNever2-mediumPlanet Python2015-06-10 01:40:293.4+WindowsOfficial python.org binaries1
3NeverDailyOnce a monthNeverA couple times a weekOnce a month3-highPlanet Python2015-06-10 01:55:462.7MacOfficial python.org binaries1
4Once a monthDailyInfrequentlyInfrequentlyOnce a monthNever3-highLeave me alone - I will find it if I need it2015-06-10 04:10:17I don't careMacAnaconda1
\n", "
" ], "text/plain": [ " freq-js freq-py freq-r freq-ruby \\\n", "0 Once a month A couple times a week Infrequently Never \n", "1 Once a month Daily A couple times a week Never \n", "2 Infrequently Daily Once a month Never \n", "3 Never Daily Once a month Never \n", "4 Once a month Daily Infrequently Infrequently \n", "\n", " freq-sql freq-vba useful \\\n", "0 Once a month Never 3-high \n", "1 Infrequently Infrequently 3-high \n", "2 Daily Never 2-medium \n", "3 A couple times a week Once a month 3-high \n", "4 Once a month Never 3-high \n", "\n", " notify timestamp \\\n", "0 RSS 2015-06-09 23:22:43 \n", "1 Reddit 2015-06-10 01:19:08 \n", "2 Planet Python 2015-06-10 01:40:29 \n", "3 Planet Python 2015-06-10 01:55:46 \n", "4 Leave me alone - I will find it if I need it 2015-06-10 04:10:17 \n", "\n", " version os distro count \n", "0 2.7 Mac Included with OS - Mac 1 \n", "1 2.7 Windows Anaconda 1 \n", "2 3.4+ Windows Official python.org binaries 1 \n", "3 2.7 Mac Official python.org binaries 1 \n", "4 I don't care Mac Anaconda 1 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.head()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Daily 36\n", "A couple times a week 15\n", "Once a month 3\n", " 1\n", "dtype: int64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results[\"freq-py\"].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we need to do is construct a single DataFrame with all the value_counts for the specific technology.\n", "First we will create a list containing each value count." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[Daily 36\n", " A couple times a week 15\n", " Once a month 3\n", " 1\n", " dtype: int64, A couple times a week 18\n", " Daily 13\n", " Infrequently 13\n", " Never 5\n", " Once a month 4\n", " 2\n", " dtype: int64, Never 24\n", " Infrequently 16\n", " Once a month 5\n", " Daily 4\n", " 3\n", " A couple times a week 3\n", " dtype: int64, Never 45\n", " Infrequently 7\n", " 2\n", " Once a month 1\n", " dtype: int64, Never 18\n", " Once a month 16\n", " Infrequently 12\n", " Daily 5\n", " A couple times a week 3\n", " 1\n", " dtype: int64, Never 37\n", " Infrequently 7\n", " Once a month 6\n", " Daily 3\n", " 2\n", " dtype: int64]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_counts = []\n", "for tech in [\"freq-py\", \"freq-sql\", \"freq-r\", \"freq-ruby\", \"freq-js\", \"freq-vba\"]:\n", " all_counts.append(results[tech].value_counts())\n", "display(all_counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, concat the lists along axis=1.\n", "\n", "Fill in any nan values with 0 too." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PythonSQLRRubyjavascriptVBA
123212
A couple times a week15183030
Daily36134053
Infrequently013167127
Never0524451837
Once a month3451166
\n", "
" ], "text/plain": [ " Python SQL R Ruby javascript VBA\n", " 1 2 3 2 1 2\n", "A couple times a week 15 18 3 0 3 0\n", "Daily 36 13 4 0 5 3\n", "Infrequently 0 13 16 7 12 7\n", "Never 0 5 24 45 18 37\n", "Once a month 3 4 5 1 16 6" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tech_usage = pd.concat(all_counts, keys=[\"Python\", \"SQL\", \"R\", \"Ruby\", \"javascript\", \"VBA\"], axis=1)\n", "tech_usage = tech_usage.fillna(0)\n", "tech_usage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have a nice table but there are a few problems.\n", "\n", "First, we have one column with blank values that we don't want.\n", "\n", "Secondly, we would like to order from Daily -> Never. Use reindex to accomplish both tasks." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PythonSQLRRubyjavascriptVBA
Daily36134053
A couple times a week15183030
Once a month3451166
Infrequently013167127
Never0524451837
\n", "
" ], "text/plain": [ " Python SQL R Ruby javascript VBA\n", "Daily 36 13 4 0 5 3\n", "A couple times a week 15 18 3 0 3 0\n", "Once a month 3 4 5 1 16 6\n", "Infrequently 0 13 16 7 12 7\n", "Never 0 5 24 45 18 37" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tech_usage = tech_usage.reindex([\"Daily\", \"A couple times a week\", \"Once a month\", \"Infrequently\", \"Never\"])\n", "tech_usage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that the data is in the correct table format, we can create a heatmap." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(tech_usage, annot=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, what does this tell us?\n", "\n", "Not surprisingly, most people use python very frequently.\n", "\n", "Additionally, it looks like very few survey takers are using Ruby or VBA." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A variation of the heatmap is the [clustermap](http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.clustermap.html#seaborn.clustermap). The main feature it does is that it tries to reorganize the data to more easily see relationships/clusters." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.clustermap(tech_usage, annot=True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "At first glance, it may seem to be a repeat but you'll notice that the order of the axes are different.\n", "\n", "For instance, python and SQL are clusterd in the lower right with higher usage and Ruby and VBA have a cluster in the upper left with lower usage." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }