Skip to content

Instantly share code, notes, and snippets.

@joaovicente
Last active December 9, 2020 14:29
Show Gist options
  • Save joaovicente/36e41023ede8e4da46975ba045ac2d38 to your computer and use it in GitHub Desktop.
Save joaovicente/36e41023ede8e4da46975ba045ac2d38 to your computer and use it in GitHub Desktop.
Pandas 101
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pandas-101\n",
"A very hands-on introduction to Pandas and Matplotlib to compare series of data."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from matplotlib.ticker import MaxNLocator\n",
"import pandas as pd\n",
"from lorem_text import lorem\n",
"import inflection"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Creating DataFrames"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b\n",
"0 1 2\n",
"1 2 4"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create using List of records (array of dictionaries)\n",
"list_of_dicts = [{'a':1,'b':2},{'a':2, 'b':4}] \n",
"df = pd.DataFrame(list_of_dicts)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b\n",
"0 1 2\n",
"1 2 4"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create using List of column values\n",
"a = [1,2]\n",
"b = [2,4]\n",
"df = pd.DataFrame({'a':a, 'b':b})\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Manipulating DataFrames"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>i</th>\n",
" <th>ixi</th>\n",
" <th>i2</th>\n",
" <th>s</th>\n",
" <th>s1</th>\n",
" <th>s2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>88.46</td>\n",
" <td>necessitatibus</td>\n",
" <td>NECESSITATIBUS</td>\n",
" <td>Necessitatibus 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" <td>96.46</td>\n",
" <td>explicabo eaque fugiat</td>\n",
" <td>EXPLICABO EAQUE FUGIAT</td>\n",
" <td>Explicabo Eaque Fugiat 3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5</td>\n",
" <td>25</td>\n",
" <td>112.46</td>\n",
" <td>dolores repudiandae corrupti officii...</td>\n",
" <td>DOLORES REPUDIANDAE CORRUPTI OFFICII...</td>\n",
" <td>Dolores Repudiandae Corrupti Officii...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>7</td>\n",
" <td>49</td>\n",
" <td>136.46</td>\n",
" <td>beatae repellendus nesciunt necessit...</td>\n",
" <td>BEATAE REPELLENDUS NESCIUNT NECESSIT...</td>\n",
" <td>Beatae Repellendus Nesciunt Necessit...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>9</td>\n",
" <td>81</td>\n",
" <td>168.46</td>\n",
" <td>magni voluptas vel quae illo impedit...</td>\n",
" <td>MAGNI VOLUPTAS VEL QUAE ILLO IMPEDIT...</td>\n",
" <td>Magni Voluptas Vel Quae Illo Impedit...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>91</td>\n",
" <td>8281</td>\n",
" <td>8368.46</td>\n",
" <td>sint repudiandae ducimus nulla quasi...</td>\n",
" <td>SINT REPUDIANDAE DUCIMUS NULLA QUASI...</td>\n",
" <td>Sint Repudiandae Ducimus Nulla Quasi...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>93</td>\n",
" <td>8649</td>\n",
" <td>8736.46</td>\n",
" <td>inventore debitis vel beatae provide...</td>\n",
" <td>INVENTORE DEBITIS VEL BEATAE PROVIDE...</td>\n",
" <td>Inventore Debitis Vel Beatae Provide...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>95</td>\n",
" <td>9025</td>\n",
" <td>9112.46</td>\n",
" <td>veniam sit perferendis deserunt comm...</td>\n",
" <td>VENIAM SIT PERFERENDIS DESERUNT COMM...</td>\n",
" <td>Veniam Sit Perferendis Deserunt Comm...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>97</td>\n",
" <td>9409</td>\n",
" <td>9496.46</td>\n",
" <td>laborum dolores totam autem earum in...</td>\n",
" <td>LABORUM DOLORES TOTAM AUTEM EARUM IN...</td>\n",
" <td>Laborum Dolores Totam Autem Earum In...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>99</td>\n",
" <td>9801</td>\n",
" <td>9888.46</td>\n",
" <td>earum quae totam eligendi magnam nam...</td>\n",
" <td>EARUM QUAE TOTAM ELIGENDI MAGNAM NAM...</td>\n",
" <td>Earum Quae Totam Eligendi Magnam Nam...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>50 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" i ixi i2 s \\\n",
"0 1 1 88.46 necessitatibus \n",
"1 3 9 96.46 explicabo eaque fugiat \n",
"2 5 25 112.46 dolores repudiandae corrupti officii... \n",
"3 7 49 136.46 beatae repellendus nesciunt necessit... \n",
"4 9 81 168.46 magni voluptas vel quae illo impedit... \n",
".. .. ... ... ... \n",
"45 91 8281 8368.46 sint repudiandae ducimus nulla quasi... \n",
"46 93 8649 8736.46 inventore debitis vel beatae provide... \n",
"47 95 9025 9112.46 veniam sit perferendis deserunt comm... \n",
"48 97 9409 9496.46 laborum dolores totam autem earum in... \n",
"49 99 9801 9888.46 earum quae totam eligendi magnam nam... \n",
"\n",
" s1 \\\n",
"0 NECESSITATIBUS \n",
"1 EXPLICABO EAQUE FUGIAT \n",
"2 DOLORES REPUDIANDAE CORRUPTI OFFICII... \n",
"3 BEATAE REPELLENDUS NESCIUNT NECESSIT... \n",
"4 MAGNI VOLUPTAS VEL QUAE ILLO IMPEDIT... \n",
".. ... \n",
"45 SINT REPUDIANDAE DUCIMUS NULLA QUASI... \n",
"46 INVENTORE DEBITIS VEL BEATAE PROVIDE... \n",
"47 VENIAM SIT PERFERENDIS DESERUNT COMM... \n",
"48 LABORUM DOLORES TOTAM AUTEM EARUM IN... \n",
"49 EARUM QUAE TOTAM ELIGENDI MAGNAM NAM... \n",
"\n",
" s2 \n",
"0 Necessitatibus 1 \n",
"1 Explicabo Eaque Fugiat 3 \n",
"2 Dolores Repudiandae Corrupti Officii... \n",
"3 Beatae Repellendus Nesciunt Necessit... \n",
"4 Magni Voluptas Vel Quae Illo Impedit... \n",
".. ... \n",
"45 Sint Repudiandae Ducimus Nulla Quasi... \n",
"46 Inventore Debitis Vel Beatae Provide... \n",
"47 Veniam Sit Perferendis Deserunt Comm... \n",
"48 Laborum Dolores Totam Autem Earum In... \n",
"49 Earum Quae Totam Eligendi Magnam Nam... \n",
"\n",
"[50 rows x 6 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A larger DataFrame including numbers and text\n",
"i = range(1,100,2)\n",
"\n",
"# Create dataframe with column i [1, 3, 5, ... , 99]\n",
"df = pd.DataFrame({'i':i})\n",
"\n",
"# Create column ixi as the square of i\n",
"df['ixi'] = df['i'] * df['i']\n",
"\n",
"# Another column showing use of some numpy capabilities (round, mean, array operations)\n",
"df['i2'] = np.round(df['i'].std()*3,2) + df['ixi']\n",
"\n",
"# Create column s with random words, number of words based on column i\n",
"df['s'] = df['i'].apply(lambda x: lorem.words(x))\n",
"\n",
"# Standard string manipulation\n",
"df['s1'] = df['s'].str.upper()\n",
"\n",
"# Custom string manipulation\n",
"df['s2'] = df['s'].apply(lambda x: inflection.titleize(x)) + ' ' + df['i'].astype(str)\n",
"\n",
"# DataFrame Display options\n",
"pd.set_option('display.max_colwidth', 40) # Defaults to 50\n",
"pd.set_option('display.max_rows', 10) # Defaults to 60\n",
"\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create 3 series of data to compare with each other later"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>att1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>a</td>\n",
" <td>5.660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>a</td>\n",
" <td>3.095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>a</td>\n",
" <td>7.614</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>a</td>\n",
" <td>3.708</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>a</td>\n",
" <td>5.888</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>295</th>\n",
" <td>c</td>\n",
" <td>4.348</td>\n",
" </tr>\n",
" <tr>\n",
" <th>296</th>\n",
" <td>c</td>\n",
" <td>2.193</td>\n",
" </tr>\n",
" <tr>\n",
" <th>297</th>\n",
" <td>c</td>\n",
" <td>2.787</td>\n",
" </tr>\n",
" <tr>\n",
" <th>298</th>\n",
" <td>c</td>\n",
" <td>3.191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>299</th>\n",
" <td>c</td>\n",
" <td>3.145</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>300 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" name att1\n",
"0 a 5.660\n",
"1 a 3.095\n",
"2 a 7.614\n",
"3 a 3.708\n",
"4 a 5.888\n",
".. ... ...\n",
"295 c 4.348\n",
"296 c 2.193\n",
"297 c 2.787\n",
"298 c 3.191\n",
"299 c 3.145\n",
"\n",
"[300 rows x 2 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create 3 series of samples\n",
"num_samples = 100\n",
"class SeriesDescriptor:\n",
" def __init__(self, name, lower, upper, num_samples):\n",
" self.name = name\n",
" self.lower = lower\n",
" self.upper = upper\n",
" self.num_samples = num_samples\n",
"\n",
"my_series_descriptor_list = [\n",
" SeriesDescriptor('a',3,8,num_samples), \n",
" SeriesDescriptor('b',4,9,num_samples), \n",
" SeriesDescriptor('c',2,5,num_samples)\n",
"]\n",
"\n",
"def series_constructor(series_descriptor_list):\n",
" names, att1s = [], []\n",
" for sd in series_descriptor_list:\n",
" names += [sd.name for i in range(sd.num_samples)]\n",
" # Random number between sd.lower and sd.upper\n",
" att1s += [np.round(np.random.uniform(sd.lower, sd.upper),3) for i in range(sd.num_samples)]\n",
" # Create DataFrame with first two columns\n",
" df = pd.DataFrame({'name': names, 'att1': att1s})\n",
" # Insert another column (just to demonstrate how to do do)\n",
" return df\n",
"\n",
"df = series_constructor(my_series_descriptor_list)\n",
"# Inspect data frame\n",
"\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Write Data Frame to CSV\n",
"df.to_csv('randomSamples.csv', encoding='utf-8', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Read Data Frame from CSV\n",
"df1 = pd.DataFrame(pd.read_csv('randomSamples.csv'))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['a', 'b', 'c']\n"
]
}
],
"source": [
"# Rename column from att1 to attr1\n",
"df1.rename(columns = {'att1': 'attr1'}, inplace = True)\n",
"\n",
"# Select desired columns (dropping att2)\n",
"df2 = df1[['name','attr1']]\n",
"\n",
"# Remove 'name:c' samples\n",
"remove = False\n",
"if remove:\n",
" df3 = df2[df2.name != 'c']\n",
"else:\n",
" df3 = df2\n",
"\n",
"# Group data frame by 'name' column\n",
"dfg = df3.groupby(df3.name)\n",
"keys = list(dfg.groups.keys())\n",
"print(keys)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"a\n",
"count 100.000000\n",
"mean 5.437810\n",
"std 1.438505\n",
"min 3.029000\n",
"25% 4.202750\n",
"50% 5.528000\n",
"75% 6.655500\n",
"max 7.922000\n",
"Name: attr1, dtype: float64\n",
"\n",
"b\n",
"count 100.000000\n",
"mean 6.483480\n",
"std 1.469393\n",
"min 4.102000\n",
"25% 5.151750\n",
"50% 6.482500\n",
"75% 7.767000\n",
"max 8.955000\n",
"Name: attr1, dtype: float64\n",
"\n",
"c\n",
"count 100.000000\n",
"mean 3.554870\n",
"std 0.845622\n",
"min 2.029000\n",
"25% 2.869250\n",
"50% 3.602000\n",
"75% 4.294750\n",
"max 4.977000\n",
"Name: attr1, dtype: float64\n"
]
}
],
"source": [
"# Show statistics for each queryName engineExecutionTimeInMillis\n",
"for key in keys:\n",
" print(\"\\n\" + key)\n",
" print(dfg.get_group(key)['attr1'].describe())"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"a AxesSubplot(0.1,0.15;0.235294x0.75)\n",
"b AxesSubplot(0.382353,0.15;0.235294x0...\n",
"c AxesSubplot(0.664706,0.15;0.235294x0...\n",
"dtype: object"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Quick boxplot\n",
"dfg.boxplot(layout=(1,len(keys)))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Split histogram\n",
"lower_limit = np.round(df3['attr1'].min()-1)\n",
"higher_limit = np.round(df3['attr1'].max()+1)\n",
"for i in dfg.groups.keys():\n",
" dfg.get_group(i)['attr1'].plot(kind='hist')\n",
" plt.title(f\"{i} attr1 histogram\")\n",
" plt.xlim(lower_limit,higher_limit)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Combined histogram')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Joined histogram\n",
"dfg['attr1'].plot(kind='hist', alpha=0.3)\n",
"plt.legend()\n",
"plt.title(\"Combined histogram\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Attr1')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# A scatter plot with jitter\n",
"ax = plt.figure().gca()\n",
"ax.xaxis.set_ticklabels([])\n",
"ax.xaxis.set_visible(False)\n",
"plt.xlim(0, len(keys) + 1)\n",
"size = 6\n",
"\n",
"# Order series by attr1 mean\n",
"mean_ordered_keys = list(dfg.mean().sort_values('attr1', ascending=True).index)\n",
"\n",
"x = 1 \n",
"for key in mean_ordered_keys:\n",
" serie = dfg.get_group(key)['attr1'].tolist()\n",
" serie_jitter = [np.random.uniform(x-0.2,x+0.2) for i in serie]\n",
" plt.scatter(serie_jitter, serie, label=key, s=size, alpha=0.7)\n",
" x += 1\n",
" \n",
"plt.legend(loc='upper right')\n",
"plt.title(\"Scatter plot with jitter\")\n",
"plt.ylabel(\"Attr1\", size=14)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Mean att by name')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# A bar chart to compare column means \n",
"df.groupby(df.name).mean().plot(kind='bar')\n",
"plt.legend()\n",
"plt.title(\"Mean att by name\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References and further reading\n",
"\n",
"* [pandas.pydata.org](https://pandas.pydata.org/)\n",
"* [matplotlib.org](https://matplotlib.org/)\n",
"* [15 ways to create a Pandas DataFrame](https://towardsdatascience.com/15-ways-to-create-a-pandas-dataframe-754ecc082c17)\n",
"* [Using Pandas DataFrame guide by Shane Lynn](https://www.shanelynn.ie/using-pandas-dataframe-creating-editing-viewing-data-in-python/)\n",
"* [Don't compare averages by Martin Fowler](https://martinfowler.com/articles/dont-compare-averages.html)\n",
"* [Choosing a good chart by Extreme Presentation](https://extremepresentation.com/wp-content/uploads/choosing-a-good-chart-09-1.pdf)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment