Skip to content
Snippets Groups Projects
Introduction-to-Pandas--master.ipynb 673 KiB
Newer Older
Andreas Herten's avatar
Andreas Herten committed
       "      <td>True</td>\n",
       "      <td>0.220000</td>\n",
       "      <td>42.040000</td>\n",
       "      <td>42.838333</td>\n",
       "      <td>0.583333</td>\n",
       "      <td>...</td>\n",
       "      <td>7.226667</td>\n",
       "      <td>132.061667</td>\n",
       "      <td>4.806585e+07</td>\n",
       "      <td>816298.000000</td>\n",
       "      <td>7.215000</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>2.891667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5.333333</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>73.601667</td>\n",
       "      <td>10.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.168333</td>\n",
       "      <td>19.628333</td>\n",
       "      <td>20.313333</td>\n",
       "      <td>0.191667</td>\n",
       "      <td>...</td>\n",
       "      <td>2.725000</td>\n",
       "      <td>48.901667</td>\n",
       "      <td>4.975288e+07</td>\n",
       "      <td>818151.000000</td>\n",
       "      <td>7.210000</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.986667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5.333333</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>43.990000</td>\n",
       "      <td>10.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.138333</td>\n",
       "      <td>12.810000</td>\n",
       "      <td>13.305000</td>\n",
       "      <td>0.135000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.426667</td>\n",
       "      <td>27.735000</td>\n",
       "      <td>5.511165e+07</td>\n",
       "      <td>820465.666667</td>\n",
       "      <td>7.253333</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.745000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.333333</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>31.225000</td>\n",
       "      <td>10.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.116667</td>\n",
       "      <td>9.325000</td>\n",
       "      <td>9.740000</td>\n",
       "      <td>0.088333</td>\n",
       "      <td>...</td>\n",
       "      <td>1.066667</td>\n",
       "      <td>19.353333</td>\n",
       "      <td>5.325783e+07</td>\n",
       "      <td>819558.166667</td>\n",
       "      <td>7.288333</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.275000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5.333333</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>24.896667</td>\n",
       "      <td>10.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.140000</td>\n",
       "      <td>7.468333</td>\n",
       "      <td>7.790000</td>\n",
       "      <td>0.070000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.771667</td>\n",
       "      <td>14.950000</td>\n",
       "      <td>6.075634e+07</td>\n",
       "      <td>815307.666667</td>\n",
       "      <td>7.225000</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.496667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5.333333</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>20.215000</td>\n",
       "      <td>10.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.106667</td>\n",
       "      <td>6.165000</td>\n",
       "      <td>6.406667</td>\n",
       "      <td>0.051667</td>\n",
       "      <td>...</td>\n",
       "      <td>0.630000</td>\n",
       "      <td>12.271667</td>\n",
       "      <td>6.060652e+07</td>\n",
       "      <td>815456.333333</td>\n",
       "      <td>7.201667</td>\n",
       "      <td>112500.0</td>\n",
       "      <td>1.265738e+09</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.990000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>6 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             id  Tasks/Node  Threads/Task  Runtime Program / s  Scale  \\\n",
       "Nodes                                                                   \n",
       "1      5.333333         3.0           8.0           185.023333   10.0   \n",
       "2      5.333333         3.0           8.0            73.601667   10.0   \n",
       "3      5.333333         3.0           8.0            43.990000   10.0   \n",
       "4      5.333333         3.0           8.0            31.225000   10.0   \n",
       "5      5.333333         3.0           8.0            24.896667   10.0   \n",
       "6      5.333333         3.0           8.0            20.215000   10.0   \n",
       "\n",
       "       Plastic  Avg. Neuron Build Time / s  Min. Edge Build Time / s  \\\n",
       "Nodes                                                                  \n",
       "1         True                    0.220000                 42.040000   \n",
       "2         True                    0.168333                 19.628333   \n",
       "3         True                    0.138333                 12.810000   \n",
       "4         True                    0.116667                  9.325000   \n",
       "5         True                    0.140000                  7.468333   \n",
       "6         True                    0.106667                  6.165000   \n",
       "\n",
       "       Max. Edge Build Time / s  Min. Init. Time / s  ...  Presim. Time / s  \\\n",
       "Nodes                                                 ...                     \n",
       "1                     42.838333             0.583333  ...          7.226667   \n",
       "2                     20.313333             0.191667  ...          2.725000   \n",
       "3                     13.305000             0.135000  ...          1.426667   \n",
       "4                      9.740000             0.088333  ...          1.066667   \n",
       "5                      7.790000             0.070000  ...          0.771667   \n",
       "6                      6.406667             0.051667  ...          0.630000   \n",
       "\n",
       "       Sim. Time / s  Virt. Memory (Sum) / kB  Local Spike Counter (Sum)  \\\n",
       "Nodes                                                                      \n",
       "1         132.061667             4.806585e+07              816298.000000   \n",
       "2          48.901667             4.975288e+07              818151.000000   \n",
       "3          27.735000             5.511165e+07              820465.666667   \n",
       "4          19.353333             5.325783e+07              819558.166667   \n",
       "5          14.950000             6.075634e+07              815307.666667   \n",
       "6          12.271667             6.060652e+07              815456.333333   \n",
       "\n",
       "       Average Rate (Sum)  Number of Neurons  Number of Connections  \\\n",
       "Nodes                                                                 \n",
       "1                7.215000           112500.0           1.265738e+09   \n",
       "2                7.210000           112500.0           1.265738e+09   \n",
       "3                7.253333           112500.0           1.265738e+09   \n",
       "4                7.288333           112500.0           1.265738e+09   \n",
       "5                7.225000           112500.0           1.265738e+09   \n",
       "6                7.201667           112500.0           1.265738e+09   \n",
       "\n",
       "       Min. Delay  Max. Delay  Unaccounted Time / s  \n",
       "Nodes                                                \n",
       "1             1.5         1.5              2.891667  \n",
       "2             1.5         1.5              1.986667  \n",
       "3             1.5         1.5              1.745000  \n",
       "4             1.5         1.5              1.275000  \n",
       "5             1.5         1.5              1.496667  \n",
       "6             1.5         1.5              0.990000  \n",
       "\n",
       "[6 rows x 21 columns]"
      ]
     },
     "execution_count": 97,
Andreas Herten's avatar
Andreas Herten committed
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"Nodes\").mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Pivoting\n",
    "\n",
    "* Combine categorically-similar columns\n",
    "* Creates hierarchical index\n",
    "* Respected during plotting!\n",
    "* A pivot table has three *layers*; if confused, think about these questions\n",
    "    - `index`: »What's on the `x` axis?«\n",
    "    - `values`: »What value do I want to plot?«\n",
    "    - `columns`: »What categories do I want [to be in the legend]?«\n",
    "* All can be populated from base data frame\n",
    "* Might be aggregated, if needed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
Andreas Herten's avatar
Andreas Herten committed
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "df_demo[\"H\"] = [(-1)**n for n in range(5)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
Andreas Herten's avatar
Andreas Herten committed
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "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>H</th>\n",
       "      <th>-1</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>-3.918282</th>\n",
       "      <td>NaN</td>\n",
       "      <td>7.389056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>-2.504068</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1.700594</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>-1.918282</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.515929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>-0.213769</th>\n",
       "      <td>0.972652</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.518282</th>\n",
       "      <td>2.952492</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "H                -1         1\n",
       "F                            \n",
       "-3.918282       NaN  7.389056\n",
       "-2.504068       NaN  1.700594\n",
       "-1.918282       NaN  0.515929\n",
       "-0.213769  0.972652       NaN\n",
       " 0.518282  2.952492       NaN"
      ]
     },
     "execution_count": 99,
Andreas Herten's avatar
Andreas Herten committed
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_pivot = df_demo.pivot_table(\n",
    "    index=\"F\",\n",
    "    values=\"G\",\n",
    "    columns=\"H\"\n",
    ")\n",
    "df_pivot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
Andreas Herten's avatar
Andreas Herten committed
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_pivot.plot();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "exercise": "task",
Andreas Herten's avatar
Andreas Herten committed
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Task 7\n",
    "<a name=\"task7\"></a>\n",
Andreas Herten's avatar
Andreas Herten committed
    "\n",
    "* Create a pivot table based on the NEST `df` data frame\n",
    "* Let the `x` axis show the number of nodes; display the values of the simulation time `\"Sim. Time / s\"` for the tasks per node and threas per task configurations\n",
    "* Please plot a bar plot\n",
    "* Done? [pollev.com/aherten538](https://pollev.com/aherten538)"
Andreas Herten's avatar
Andreas Herten committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
Andreas Herten's avatar
Andreas Herten committed
   "metadata": {
    "exercise": "solution",
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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nH0YEREREZEy4/QLAUVEREREKhunT88QEREREalsFJpFREREROxQaBYRERERsUOhWURERETEDoVmERERERE7FJpFruGbb75h6dKlnDlzpsD2lStXllNFUhyxsbHEx8cDsGrVKqZNm8aWLVvKuSopiYiIiPIuQRx05MgR2+MffviBiIgIIiMjOXz4cDlWJY7avXs3KSkpAERHRzNlyhTWrFlTzlVVLFpyTuT/iYyM5OjRo9SvX5+tW7cyevRowsLCAOjatSvr1q0r5wqlKEuWLGHp0qVYLBZatWrF+fPneeyxx9i5cycPPPAAQ4cOLe8S5TrGjh1baNvOnTt59NFHAZg5c2ZZlyTF8L9/H5ctW8aXX35J9+7dAVi3bh09e/bkmWeeKecK5XqmT5/OsWPHmD17NsuWLeOf//wnf/3rX/n++++pXbs24eHh5V1iheD0m5tIvnPnzhW5/4477iijSqS4du3axbp16zCZTPTr14+BAwfi7u5Ox44d0XfMim/NmjVs2bKFxMREOnfuzL59+/Dw8KBnz5706NFDobkCq169OtHR0bz44otUq1YNgH379tGiRYtyrkyKIyoqis8//5xbb70VgB49etCjRw+F5gps7969bNy4ETc3N7777juioqJwd3enV69edO7cubzLqzAUmkvJkCFDiI2Nxc/Pr1DQMhgM7Nixo5wqE3usVisGgwGAO++8kw8//JDnnnuO2267zbZdKi6LxYK7uzsBAQEMHDgQDw8P2768vLxyrEzsGT16NO3ateP999/n1VdfpWXLlnz22Wd07dq1vEsTB+Tm5mKxWKhRowbe3t627e7u7hiNmg1akXl6epKUlISfnx81atQgPT0dd3d3MjIyMJkUFf9H0zNKSVpaGn369GHixIk0a9asvMuRYpg3bx4xMTGMGTPGdgv4Q4cOMWzYMLKzszl06FA5VyhFmTNnDvv37+fzzz/Hzc0NgJ9//pnw8HAefvhhhg0bVs4Vij1Xrlxh4sSJ3HHHHezZs4eNGzeWd0nigP79+3Pq1CkMBgOtW7cmIiKCH374gXfeeYeHH36YESNGlHeJch07d+5k0qRJdOrUidzcXPbt20dQUBB79uzhhRdeoFu3buVdYoWg0FyKjhw5wqpVq5g6dWp5lyLF9MMPP+Dn50f9+vVt286fP8/ixYt56623yrEyccSBAwd48MEHbc9PnjxJXFwcwcHB5ViVFNeqVavYunUrixcvLu9SpBhOnjxJSkoKTZs25dChQ6SmpvLwww+Xd1liR1xcHN988w2nT58mLy+PmjVr8sgjj9hOHolCs4iIiIiIXZpkJCIiIiJih0KziIiIiIgdCs0iIuXo7Nmz3H333axatarA9kWLFjFmzBiH+7l06RJ33323s8sTEZH/UmgWESlnRqORt99+m1OnTpV3KSIich1afE9EpJx5enry3HPP8dprr/Hll1/i7u5u25eamsrkyZP5+eefMRgMPPTQQ7z66quYTCa++uorZs+ejZeXF3/+858L9Llq1SpWrFiBxWKhevXqjB8/nvr163Pw4EEiIiKwWCxA/pryHTp0KNP3KyLiinSmWUSkAnjppZfw8vJi9uzZBbZPmzaN6tWrs3HjRtasWcPx48dZvHgxiYmJjBs3jg8++IC1a9cSEBBge83+/fuJjo5m2bJlREdH88ILLzB8+HAAPvjgA5577jnWrl3LjBkz2LdvX5m+TxERV6UzzSIiFYDRaOSdd96ha9eutG3b1rb9+++/Z8WKFRgMBtzd3enduzefffYZdevWpVGjRjRo0ACAXr168d577wHw3Xffcfr0aXr37m3rJzk5mStXrtCxY0emTJnCzp07ad26Na+++mrZvlERERel0CwiUkHccccdTJo0idGjR9OlSxcA2zSK/7FYLOTm5mIwGPjjMvt/vNWtxWIhLCyMN954w/Y8ISGBW265hd69e/PII4+wd+9edu/ezbx589iwYQO+vr5l8A5FRFyXpmeIiFQgHTt2pF27dnz22WcAtG3blmXLlmG1WsnOziYqKorWrVvTvHlzTpw4wc8//wzA2rVrbX20adOGzZs3k5CQAMCKFSt49tlnAejduzfHjh2jW7duTJ06lZSUFJKTk8v4XYqIuB6daRYRqWDCw8M5dOiQ7fG0adMIDQ0lJyeHhx56iBdffBF3d3ciIyN5/fXXqVKlSoHbhj/00EMMGjSIgQMHYjAY8PHxYd68eRgMBl5//XVmzJjB+++/j9FoZNiwYdSuXbu83qqIiMvQbbRFREREROzQ9AwRERERETsUmkVERERE7FBoFhERERGxQ6FZRERERMQOhWYRERERETsUmkVERERE7FBoFhERERGxQ6FZRERERMSO/wPgkCk9ZX0M6wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.pivot_table(\n",
    "    index=[\"Nodes\"],\n",
    "    columns=[\"Tasks/Node\", \"Threads/Task\"],\n",
    "    values=\"Sim. Time / s\",\n",
    ").plot(kind=\"bar\", figsize=(12, 4));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "exercise": "task",
Andreas Herten's avatar
Andreas Herten committed
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<a name=\"taskb\"></a>\n",
    "\n",
Andreas Herten's avatar
Andreas Herten committed
    "* Bonus task\n",
    "    - Use `Sim. Time / s` and `Presim. Time / s` as values to show\n",
    "    - Show a stack of those two values inside the pivot table"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## The End\n",
    "\n",
    "* Pandas works on data frames\n",
    "* Slice frames to your likings\n",
    "* Plot frames\n",
    "    - Together with Matplotlib, Seaborn, others\n",
    "* Pivot tables are next level greatness\n",
    "* Thanks for being here! 😍"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "exercise": "task"
   },
   "source": [
    "<span class=\"feedback\">Tell me what you think about this tutorial! <a href=\"mailto:a.herten@fz-juelich.de\">a.herten@fz-juelich.de</a></span>"
Andreas Herten's avatar
Andreas Herten committed
  }
 ],
 "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.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}