Last active
December 9, 2020 14:29
-
-
Save joaovicente/36e41023ede8e4da46975ba045ac2d38 to your computer and use it in GitHub Desktop.
Revisions
-
joaovicente revised this gist
Dec 9, 2020 . 1 changed file with 1 addition and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -855,6 +855,7 @@ "\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)" -
joaovicente revised this gist
Dec 9, 2020 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -855,7 +855,6 @@ "\n", "* [pandas.pydata.org](https://pandas.pydata.org/)\n", "* [matplotlib.org](https://matplotlib.org/)\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)" -
joaovicente revised this gist
Dec 9, 2020 . 1 changed file with 1 addition and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -855,6 +855,7 @@ "\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)" -
joaovicente revised this gist
Oct 7, 2020 . 1 changed file with 113 additions and 113 deletions.There are no files selected for viewing
-
joaovicente revised this gist
Oct 6, 2020 . 1 changed file with 27 additions and 42 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -388,7 +388,7 @@ }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { @@ -414,99 +414,87 @@ " <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>4.838</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>a</td>\n", " <td>6.793</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>a</td>\n", " <td>4.758</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>a</td>\n", " <td>5.351</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>a</td>\n", " <td>3.495</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>2.104</td>\n", " </tr>\n", " <tr>\n", " <th>296</th>\n", " <td>c</td>\n", " <td>2.987</td>\n", " </tr>\n", " <tr>\n", " <th>297</th>\n", " <td>c</td>\n", " <td>2.647</td>\n", " </tr>\n", " <tr>\n", " <th>298</th>\n", " <td>c</td>\n", " <td>2.607</td>\n", " </tr>\n", " <tr>\n", " <th>299</th>\n", " <td>c</td>\n", " <td>3.236</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>300 rows × 2 columns</p>\n", "</div>" ], "text/plain": [ " name att1\n", "0 a 4.838\n", "1 a 6.793\n", "2 a 4.758\n", "3 a 5.351\n", "4 a 3.495\n", ".. ... ...\n", "295 c 2.104\n", "296 c 2.987\n", "297 c 2.647\n", "298 c 2.607\n", "299 c 3.236\n", "\n", "[300 rows x 2 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -528,17 +516,14 @@ "]\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", -
joaovicente revised this gist
Oct 6, 2020 . 1 changed file with 306 additions and 80 deletions.There are no files selected for viewing
-
joaovicente created this gist
Sep 29, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,674 @@ { "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" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating Pandas" ] }, { "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": [ "# 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": [ "# 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": [ "## Create 3 series of data to compare with each other later" ] }, { "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>name</th>\n", " <th>att1</th>\n", " <th>att2</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>a</td>\n", " <td>7.720</td>\n", " <td>17.0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>a</td>\n", " <td>4.488</td>\n", " <td>17.0</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>a</td>\n", " <td>6.082</td>\n", " <td>17.0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>a</td>\n", " <td>7.346</td>\n", " <td>17.0</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>a</td>\n", " <td>6.603</td>\n", " <td>17.0</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>295</th>\n", " <td>c</td>\n", " <td>4.526</td>\n", " <td>15.6</td>\n", " </tr>\n", " <tr>\n", " <th>296</th>\n", " <td>c</td>\n", " <td>3.590</td>\n", " <td>15.6</td>\n", " </tr>\n", " <tr>\n", " <th>297</th>\n", " <td>c</td>\n", " <td>3.688</td>\n", " <td>15.6</td>\n", " </tr>\n", " <tr>\n", " <th>298</th>\n", " <td>c</td>\n", " <td>4.356</td>\n", " <td>15.6</td>\n", " </tr>\n", " <tr>\n", " <th>299</th>\n", " <td>c</td>\n", " <td>2.546</td>\n", " <td>15.6</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>300 rows × 3 columns</p>\n", "</div>" ], "text/plain": [ " name att1 att2\n", "0 a 7.720 17.0\n", "1 a 4.488 17.0\n", "2 a 6.082 17.0\n", "3 a 7.346 17.0\n", "4 a 6.603 17.0\n", ".. ... ... ...\n", "295 c 4.526 15.6\n", "296 c 3.590 15.6\n", "297 c 3.688 15.6\n", "298 c 4.356 15.6\n", "299 c 2.546 15.6\n", "\n", "[300 rows x 3 columns]" ] }, "execution_count": 4, "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, att2s = [], [], []\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", " # Another attribute showing use of some numpy capabilities (round, mean, array operations)\n", " att2s += [np.round(np.mean(np.array(att1s))*3,1) for i in range(sd.num_samples)]\n", " # Create Panda 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", " df['att2'] = att2s\n", " return df\n", "\n", "df = series_constructor(my_series_descriptor_list)\n", "# Inspect data frame\n", "df" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Write Data Frame to CSV\n", "df.to_csv('randomSamples.csv', encoding='utf-8', index=False)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Read Data Frame from CSV\n", "df1 = pd.DataFrame(pd.read_csv('randomSamples.csv'))" ] }, { "cell_type": "code", "execution_count": 7, "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": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "a\n", "count 100.000000\n", "mean 5.670590\n", "std 1.335251\n", "min 3.001000\n", "25% 4.589750\n", "50% 5.691500\n", "75% 6.813000\n", "max 7.813000\n", "Name: attr1, dtype: float64\n", "\n", "b\n", "count 100.000000\n", "mean 6.396540\n", "std 1.448266\n", "min 4.017000\n", "25% 5.131500\n", "50% 6.304000\n", "75% 7.559750\n", "max 8.999000\n", "Name: attr1, dtype: float64\n", "\n", "c\n", "count 100.000000\n", "mean 3.531500\n", "std 0.960461\n", "min 2.018000\n", "25% 2.611000\n", "50% 3.657000\n", "75% 4.446000\n", "max 4.995000\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": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "a AxesSubplot(0.1,0.15;0.235294x0.75)\n", "b AxesSubplot(0.382353,0.15;0.235294x0.75)\n", "c AxesSubplot(0.664706,0.15;0.235294x0.75)\n", "dtype: object" ] }, "execution_count": 9, "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": 10, "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": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Combined histogram')" ] }, "execution_count": 11, "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": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Attr1')" ] }, "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": [ "# 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": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Mean att by name')" ] }, "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 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", "* [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 }