Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulgradie/9e6d6b5e1a7ff8c54305d71e75353bf6 to your computer and use it in GitHub Desktop.
Save paulgradie/9e6d6b5e1a7ff8c54305d71e75353bf6 to your computer and use it in GitHub Desktop.
Paul_G_DataScience_Blog
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pandas.DataFrame.Sum() - Which axis is which??"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pandas is a great tool for working with datasets in Python. There are a large number of ways to import data, explore data, engineer data, and cleanse data. Pandas also comes with a great set of wrappers for MatPlotLib, the core plotting library of the data science world (for now).\n",
"\n",
"For newbies, pandas can be confusing as hell. Unless you've already spent a lot of time dealing with data, and concerning yourself with indices, columns, and all of the functionality of Pandas that relies on basic understanding of what is meant by these words and the numbers that represent them, it can be difficult to grasp whats going on.\n",
"\n",
"I am no exception to this. I find myself repeating '0 is row, 1 is column, 0 is row, 1 is column', ad nauseum. And yet still, I find situations where I am newly confused on what they mean by 0 and 1."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Introducing pandas.crosstab() ...okay its new to me!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before I get to where I've been confused, let me introduce my most recent pandas discovery: The pd.crosstab function. This function is great for doing quick cross tabulations of data for quick comparisons. It can also provide a useful new data structure on which you can create useful plots."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from pandas import DataFrame\n",
"from pandas import crosstab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets say we've got some data:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = DataFrame({'Survived':[1,1,1,0,0,1,0,1,1,0,1,1,1,0], 'Sex': ['M','F','M','M','F','M','F','F','F','M','F','M','F','M']})"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1 9\n",
"0 5\n",
"Name: Survived, dtype: int64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.Survived.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"F 7\n",
"M 7\n",
"Name: Sex, dtype: int64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.Sex.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>M</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>F</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>F</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>M</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>M</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Survived\n",
"0 M 1\n",
"1 F 1\n",
"2 M 1\n",
"3 M 0\n",
"4 F 0\n",
"5 M 1\n",
"6 F 0\n",
"7 F 1\n",
"8 F 1\n",
"9 M 0\n",
"10 F 1\n",
"11 M 1\n",
"12 F 1\n",
"13 M 0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we've got 14 rows of toy data inspired from the 'Titanic' data. There are two columns, 'Sex' and 'Survived'. Lets say we want to know the total number of males and females that survived. We can use crosstab to accomplish this.\n",
"\n",
"Our labels are:\n",
"\n",
"`0 = Perished` \n",
"`1 = Survived` \n",
"\n",
"`F = Female \n",
"M = Male `"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Survived</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>2</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>M</th>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Survived 0 1\n",
"Sex \n",
"F 2 5\n",
"M 3 4"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tabs = crosstab(data.Sex, data.Survived)\n",
"tabs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we see that two Females and three males perished, while five females and four males survived. From here we can make some plots."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# to make plots in the notebook\n",
"%matplotlib inline \n",
"from matplotlib import style # to make our plots nice looking\n",
"style.use('fivethirtyeight') # random choice- 538 looks cool\n",
"\n",
"### Note styles are only availabe in recent versions of matplotlib"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1af740b8a20>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nHZLafEDQ0Y4fP65Ro0ZV3U5OTlZycrImT56sNWvWOHEyAHAMlw6JOxgwYICKioqcPQYAOA3nSAAA\nRggJAMAIIQEAGCEkAAAjhAQAYMThIbl//76jN+kW+LsAcFcODYmXl5du3rzpyE26jZs3bz7Ql34B\ngKtw6OdImjRport376q4uNiRm3ULHh4efA0xALfk8A8k+vj4OHqTAAA74mQ7AMAIIQEAGCEkAAAj\nhAQAYISQAACMEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIAMEJI\nAABGCAkAwAghAQAYISQAACOEBABgxGpI3nrrLfXv31+hoaEKDQ3VsGHDtGfPHkfMBgBwA1ZD0qZN\nGy1ZskTZ2dnKyspSbGyspk6dqlOnTjliPgCAi/OwtsDIkSOr3X7llVe0bt06HTt2TN27d7fbYAAA\n92A1JF917949bdu2TWVlZYqOjrbXTAAAN2JTSD755BPFx8ervLxcPj4+ysjIULdu3WpcJy8v76EM\nCNv0dvYABthXHK/vQW9nj1Brd509gAF33dctFkuNj9sUEovFogMHDqikpETbt2/X008/rV27diki\nIqLWGwa+xL7iBAc/c/YE9VJd3ddtComnp6c6dOggSerVq5f+8Y9/aPXq1Vq1apVdhwMAuL5afY6k\nsrJSFRUVD3sWAIAbsnpE8tprryk+Pl4hISEqLS3Vli1bdPDgQWVmZjpiPgCAi7MakoKCAj311FO6\nevWqmjVrpm7dumnLli0aMmSII+YDALg4qyFZs2aNI+YAALgprrUFADBCSAAARggJAMAIIQEAGCEk\nAAAjhAQAYISQAACMEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIA\nMEJIAABGCAkAwAghAQAYISQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAj\nhAQAYISQAACMEBIAgBFCAgAwYjUkqampGjRokEJDQ9WxY0dNnDhRn376qSNmAwC4AashOXjwoJ58\n8knt2bNHO3bskIeHh8aMGaPPP//cEfMBAFych7UFtm7dWu32m2++qbCwMB05ckTDhw+322AAAPfw\nwOdISktLVVlZKT8/P3vMAwBwM1aPSL5u4cKFioyMVHR0dI3L5eXl1XooZ+l70NvZI9TaXWcPYMAd\n9xX35777ujtz133dYrHU+PgDhWTRokU6cuSIdu/erUaNGhlt2CUd/MzZE9RLbrmvuDv2daeoq/u6\nzSF5+eWXtXXrVu3cuVPt27e340gAAHdiU0heeuklvfPOO9q5c6c6d+5s75kAAG7EakgWLFigTZs2\nKSMjQ35+fiooKJAk+fj4yNfX1+4DAgBcm9V3baWnp+u///2vRo8erS5dulT9rFy50hHzAQBcnNUj\nkqKiIkfMAQBwU1xrCwBghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYISQAACM\nEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIAMEJIAABGCAkAwAgh\nAQAYISQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYISQAACM2BSS\nQ4cOadKkSeratav8/Py0YcMGe88FAHATNoWkrKxMERERWrZsmZo2bWrvmQAAbsTDloXi4+MVHx8v\nSZozZ45dBwIAuBfOkQAAjNh0RFIbeXl59npqO/J29gD1knvuK+6Ofd0Z3HVft1gsNT5ut5BY27BL\nOviZsyeol9xyX3F37OtOUVf3dV7aAgAYISQAACM2vbRVWlqq/Px8SVJlZaUuXryokydPyt/fX6Gh\noXYdEADg2mw6Ijl+/LhiY2MVGxurW7duKTk5WbGxsUpKSrL3fAAAF2fTEcmAAQNUVFRk71kAAG6I\ncyQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYISQAACMEBIAgBFC\nAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIAMEJIAABGCAkAwAghAQAYISQA\nACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjNockPT1dPXr0UHBwsOLi4nT4\n8GF7zgUAcBM2hWTr1q1auHChEhMT9dFHHyk6OloTJkzQhQsX7D0fAMDF2RSStLQ0TZkyRTNmzFCX\nLl2UkpKi4OBgrV+/3t7zAQBcXIOioqL7NS1QUVGh1q1ba926dRozZkzV/QsWLNCnn36q9957z+5D\nAgBcl9UjkuvXr+vevXsKDAysdn9gYKCuXr1qt8EAAO6Bd20BAIxYDUlAQIAaNWqkwsLCavcXFhYq\nKCjIboMBANyD1ZB4enqqV69eysrKqnZ/VlaWYmJi7DYYAMA9eNiy0Ny5czV79mxFRUUpJiZG69ev\n15UrV/T444/bez4AgIuzKSRjx47VjRs3lJKSooKCAnXt2lWZmZkKCwuz93wAABdn9e2/cC2nTp1S\nRESEGjbkfRIAXAMhcTMtWrTQmTNnqt6OnZCQoBUrVqhVq1ZOngx4+CZNmmTTchs3brTzJKiJTS9t\nwXXcv1+9+4cPH1Z5ebmTpgHsa8+ePQoNDdUPf/hDZ4+CGhASAC5r3rx52rRpkw4fPqypU6dqypQp\nCgkJcfZY+BpeaHczDRo0UIMGDZw9BuAQS5Ys0SeffKKkpCQdP35cUVFRGj9+vLZv3647d+44ezz8\nD+dI3Iy/v78GDRokT09PSdIHH3ygH/zgB2ratGm15XjNGHVRQUGBNm7cqIyMDH3++efKzc2Vr6+v\ns8eq93hpy81Mnjy52u2EhAQnTQI43s2bN1VcXKyysjL5+PhwdO4iOCIB4NJu3bqld955R3/605+U\nm5urxx57TNOmTVNcXJyzR8P/cEQCwGXNmzdP27ZtU4cOHTR9+nT9+c9/lp+fn7PHwtdwRALAZfn7\n+6tt27aKiIio8WUszgk6F0ckAFzWpEmTOA/iBjgiAQAY4XMkAAAjhAQAYISQAACMEBJA0unTp/XE\nE0+oR48eCg4OVnh4uEaMGKHk5GRnjwa4PE62o97LycnRqFGj1KpVK02ePFlt2rTR5cuXlZubq337\n9qmgoMDZIwIujbf/ot777W9/K29vb2VlZalFixbVHrt69aqTpgLcBy9tod47d+6cwsPDvxERSQoK\nCqp2e9++fRoxYoRCQkIUEhKicePG6eTJk1WPFxYWqlOnTnr00UdVWVlZdf9nn32mdu3aafz48fb7\nRQAnISSo98LCwnTy5En985//rHG5zZs3a9y4cfLy8tKrr76qhQsX6vz58xoxYoTOnj0rSQoMDNTv\nfvc7HTlyRKtWrZL0xZeRPfPMM2rQoIFWrlxp998HcDTOkaDey87O1k9+8hNJUu/evfXII49owIAB\niouLk5eXlySprKxM3bp108iRI5WWlla1blFRkfr06aOBAwcqPT296v7Zs2dr27Ztys7O1sGDB7Vg\nwQKtXbuWqzWjTiIkgKSjR4/q97//vbKzs3Xz5k1JUrNmzZSUlKRp06Zp165dmjZtmrZt26bIyMhq\n686fP185OTk6c+ZM1X3FxcXq37+/mjdvrn//+98aMmSI/vjHPzr0dwIchZAAX3Hnzh2dPn1ae/bs\n0YoVK1RSUqLt27crNzdXv/zlL79zvYYNG+rGjRvV7tu9e7cmTZqkFi1a6NixYwoICLD3+IBT8K4t\n4CsaN26syMhIRUZGqm/fvho9erQyMzPVqVMnSdLq1avVpk0bm57rww8/lCSVlJTowoULhAR1FiEB\nvkNUVJQk6cqVKxo2bJgkqWXLlho4cKDVdbOzs5Wenq45c+bo3Xff1dNPP639+/erSZMm9hwZcAre\ntYV6Lzs7u9pbdb+0d+9eSZLFYtHgwYPVvHlzpaamqqKi4hvLXrt2req/S0pKNHfuXHXv3l1LlizR\n6tWrdebMGSUlJdnvlwCciHMkqPceeeQRlZaW6rHHHlOXLl1UWVmpEydOaNOmTVUfVGzXrp22bt2q\nWbNmyWKxaNy4cQoKCtKFCxf04YcfKjw8XGvWrJEkzZkzR1u2bNG+ffvUvXt3SdKiRYv0xhtvaPfu\n3YqOjnbmrws8dIQE9d4HH3ygHTt26OjRo7p06ZJu376tVq1aKS4uTomJiWrfvn3VsocPH1ZqaqqO\nHTtWtVxMTIyefPJJRUdH669//asmT56sV155RYmJiVXrlZeXKy4uTnfv3tWBAwfk7e3thN8UsA9C\nAgAwwjkSAIARQgIAMEJIAABGCAkAwAghAQAYISQAACOEBABghJAAAIwQEgCAEUICADDy/039Kb/G\ngyV5AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1af714b4f98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tabs.plot(kind='bar')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This looks cool, but lets try stacking."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1af7418bc88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tabs.plot(kind='bar', stacked=True); #add semicolon to remove message printout"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is neat! \n",
"\n",
"You may have noticed at the beginning that we were dealing with the same number of males and females (7 and 7), so its easy to make direct comparison between the two. What if these two groups weren't the same? Say we have 56 males and 137 females. How could we compare them?\n",
"\n",
"Lets rework this and say we are doing cross tab on more columns. We'll use the same data as above, but we'll throw in a third category - unknown sex.\n",
"\n",
"`Unk = Unknown`\n",
"\n",
"We could have also changed the number of males or famales in the previous example."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data2 = DataFrame({'Survived':[1,1,1,0,0,1,0,1,1,0,1,1,1,0], \n",
" 'Sex': ['M','F','Unk','M','Unk','M','F','F','F','Unk','F','M','F','M'], })"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Unk</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>M</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Unk</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>F</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Unk</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>M</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>F</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>M</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Survived\n",
"0 M 1\n",
"1 F 1\n",
"2 Unk 1\n",
"3 M 0\n",
"4 Unk 0\n",
"5 M 1\n",
"6 F 0\n",
"7 F 1\n",
"8 F 1\n",
"9 Unk 0\n",
"10 F 1\n",
"11 M 1\n",
"12 F 1\n",
"13 M 0"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data2"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Survived</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>M</th>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Unk</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Survived 0 1\n",
"Sex \n",
"F 1 5\n",
"M 2 3\n",
"Unk 2 1"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tab2 = crosstab(data2.Sex, data2.Survived)\n",
"tab2"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEsCAYAAADpQjX/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGrdJREFUeJzt3X1UVHXix/GPSoDAIqgIiShroohpGYrmFviImXl01VBL\nM0tr0/IhejDXtrSOtJG2R8XKzF+22Cl0fcRW7QFJM8V2JXtYlY7ZaiqiBizoRIq/P/rt/HZWZUa+\nzNyZeL/O8Zzmzr1zP3PvsY/36TsNSktLLwoAgFpqaHUAAIBvo0gAAEYoEgCAEYoEAGCEIgEAGKFI\nAABGKBIAgBGKBABghCKpI0VFRVZHgIexz+sn9vulKBIAgBGKBABghCIBABihSAAARvxcmenEiRN6\n9tln9f7776uiokKxsbGaP3++brnlFnfnA4A6VVlZqfPnz9d6+cDAQJWVldVhIu/g5+en4ODg2i3r\nbIbS0lINHDhQPXv2VE5Ojpo1a6bvvvtOERERtVohAFjlxx9/lCQ1adKk1p8REBCgwMDAuorkNSor\nK/Xjjz8qICDgqpd1WiQLFy5UVFSUXnvtNfu02NjYq14RAFjNZrMpNDTU6hheKSgoSOXl5bUqEqfX\nSDZt2qTExERNmDBB7dq10y233KKlS5fq4kV+DwuA72nQoIHVEbySyXZp4OwXEiMjIyVJkydP1rBh\nw/TFF1/oySef1DPPPKMHHnjgistZ8dBO1+cneXyd3mLv7NetjgB4vcDAQE7L16CkpEQ2m+2S6XFx\ncTUu57RIIiIi1LVrV23dutU+be7cucrNzVVBQUEt47pHyPjeVkewTMWKbVZHqHeKioqc/gWDdykr\nKzO6PiL9fHrsl3iNRKr99nF6aisyMlIdOnRwmNa+fXsdPXr0qlcGALjU4MGD9fjjj7t9PdHR0Vq5\ncmWdf67Ti+09e/bUN9984zDtm2++UUxMTJ2HAQCrnDp1ShkZGdq6dauKi4vVpEkTdezYUTNmzFCf\nPn3cuu7s7Gz5+bn0NIZXcpp88uTJSk1N1UsvvaThw4dr3759Wrp0qZ5++mlP5AMAjxg3bpzOnTun\nxYsX69e//rVOnTqlTz75RGfOnKn1Z1ZVVcnf39/pfOHh4bVehzdwemrrpptu0sqVK7V27VrdfPPN\neu655zRr1ixNnDjRE/kAwO1KS0v16aef6tlnn1VKSopat26tm266SY888ohGjBghSercubMWLVrk\nsNx/n5Lq3LmzMjIyNGXKFLVu3VqTJk1Samqqfv/73zssV15erqioKG3YsOGSz5k7d65SUlIuyZia\nmqonnnjC/jo7O1s9evRQZGSkEhMTlZWVperqavv7hw4d0uDBgxUZGalu3bpp8+bNhlvpylw6lho4\ncKAGDhzothAAYKWQkBCFhITovffeU8+ePY0upi9ZskSPPfaYtm3bposXLyovL0/z58/Xc889p4YN\nf/63+4YNGxQQEHDZ/6+mpaVpwYIFOnjwoNq3by9JOnz4sAoKCpSRkSFJWrFihebNm6cXX3xRN9xw\ng/7xj39o2rRpuuaaa/TAAw+ourpaY8eOVZMmTbR161adO3dOM2fOtD+QWdcYawtAvefn56esrCzl\n5OSoTZs2GjBggGbPnq3PPvvsqj+rV69emjZtmtq2bavrrrtOw4cP16lTp7R9+3b7PKtWrdKwYcMu\n+/BffHy8unTpopycHIf527Vrp8TERElSZmam5syZo6FDhyo2NlaDBg3S9OnT9cYbb0iStm3bpv37\n92vp0qW64YYb1LNnT2VkZBgNDVMTigQAJA0dOlT79+/XO++8o/79+6ugoED9+/fX/Pnzr+pzunbt\n6vC6adOm6tevn70Yjh8/ru3btystLe2Kn5GWlqbVq1fbX69atUp33nmnpJ9vCjh69KhmzJih6Oho\n+585c+bo22+/lSQdOHBALVu2dLgpqlu3bvYjorpGkQDA/wkMDFSfPn305JNPauvWrRo3bpxeeOEF\nVVVVqWHDhpeM6HG5f+FfbuDDUaNGaePGjbLZbPrLX/6i6Oho9erV64o5Ro4cqSNHjqigoECFhYU6\nePCgRo0aJUn26yALFizQ9u3b7X8+/fRT7dq1y+Tr1xpFAgBX0KFDB50/f142m03NmzfXiRMn7O/Z\nbDYdPHjQpc8ZNGiQJGnLli32o4uahiSJiopScnKyVq1apVWrVikpKck+xmGLFi107bXX6ttvv1Xb\ntm0v+fPv3MeOHXN43u9vf/ubw8X4uuS7Ny4DQB05c+aMxo8fr7Fjx6pTp04KCQlRYWGhFi5cqJSU\nFIWGhio5OVnZ2dnq16+fWrZsqfnz5+vChQsufX5gYKCGDBmizMxMffnllw6D4F5JWlqaZs+eLX9/\nf6Wnpzu899RTT+mJJ55QkyZNlJqaqp9++kmff/65jh8/rkcffVS9e/dW+/bt9bvf/U7z5s2TzWbT\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1af7414cc50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tab2.plot(kind='bar', stacked=True);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can plainly see that we are comparing three different groups with uneven numbrs of members, and here comes the point of this post.\n",
"\n",
"If I want to normalize all of my data, so that I can make it directly comparible, I can put them all on a scale from 0 to 1. This will basically allow me to then interpret the proportions of individuals who have survived or not as a percentage of their total group size.\n",
"\n",
"Lets see what this looks like."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#I redid the plots using this cell to make the plots wider\n",
"import matplotlib as plt\n",
"plt.rcParams['figure.figsize'] = (10, 4)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nf78++ugjLViwQGvXrtX48ePr9+AAwACCJgBUQ3p6ul599VXt379fly9fliS1bt1aS5cu1eTJk7V9\n+3ZNnjx9d+GJAAACYElEQVRZW7duVe/eva3Gzp8/X0ePHtWJEycsbRcuXNCgQYPk5uam7777TkOH\nDlViYmK9HhMAmELQBIAauHbtmr766ivt2rVLK1euVFFRkd577z1lZGRoyZIlNxzXpEkTnT9/3qpt\n586dmjhxotq2bauPP/5YHh4epssHgHrBU+cAUAO33HKLevfurd69e+uuu+7S6NGjlZSUpO7du0uS\nVq9erQ4dOtj0XXv27JEkFRUVKTs7m6AJoNEgaAJALfXv31+SlJubq/vuu0+S9Ktf/UohISFVjt2/\nf78SEhI0e/Zs/etf/9If/vAH7du3T82bNzdZMgDUC546BwAb7d+/32opol98+OGHkqQePXooNDRU\nbm5uWrFihUpKSq7re/bsWct/FxUVKSoqSnfccYdiY2O1evVqnThxQkuXLjV3EABQj7hHEwBsNHDg\nQF28eFEPPvigfH19VVZWpszMTG3atMmykHuXLl2UkpKiGTNmqEePHho7dqy8vLyUnZ2tPXv2qGfP\nnlqzZo0kafbs2dq8ebP27t2rO+64Q5L01FNP6fXXX9fOnTsVGBhoz8MFgFojaAKAjXbv3q1t27Yp\nPT1dP/zwg65evap27dopODhY0dHR6tq1q6VvWlqaVqxYoY8//tjSLygoSI899pgCAwP1wQcfKCIi\nQs8884yio6Mt44qLixUcHKyff/5ZBw8elKurqx2OFADqBkETAAAARnCPJgAAAIwgaAIAAMAIgiYA\nAACMIGgCAADACIImAAAAjCBoAgAAwAiCJgAAAIwgaAIAAMAIgiYAAACMIGgCAADAiP8HyQFjiAPa\nIn8AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1af7411f630>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"normalized = tab2.div(tab2.sum(1).astype(float), axis=0);\n",
"normalized.plot(kind='bar', stacked = True);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great! So now we are looking a proportions of each group that survived or didn't survive. \n",
"\n",
"This is really useful information because we can see that a greater proportion of females were able to survive which indicates some connection between the sex of an individual and their survival aboard the Titanc. If you were trying to classify survival across passengers for example, you may want to include Sex as a feature for determining the survival label."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### But back to the main question - what in the HECK is going on in this code:\n",
"\n",
"`normalized = tab2.div(tab2.sum(1).astype(float), axis=0);`\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets break it down.\n",
"\n",
"First, `tab2.div()`. This is a handy method for dividing the values of a dataframe by the values of something else."
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"The doc string looks like this.\n",
"\n",
"tab2.div(other, axis='columns', level=None, fill_value=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"'Other' is the value that you are dividing by and it can a Series, DataFrame, or even a constant. In this case, we are dividing by a constant: `tab2.sum(1)`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `For the full docs:`\n",
" \n",
"`other : Series, DataFrame, or constant` \n",
"`axis : {0, 1, ‘index’, ‘columns’}` \n",
"`For Series input, axis to match Series index on` \n",
"`fill_value : None or float value, default None` \n",
"`Fill missing (NaN) values with this value. If both DataFrame locations are missing, the result will be missing` \n",
"`level : int or name` \n",
"`Broadcast across a level, matching Index values on the passed MultiIndex level` "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### With the DataFrame.div() bit sorted, whats the meaning of tab2.sum(1)?\n",
"\n",
"DataFrames and Series have a handy sum function built in.\n",
"\n",
"`Signature: tab2.sum(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)`\n",
"\n",
"`Docstring:`\n",
"`Return the sum of the values for the requested axis`\n",
"\n",
"If you have NaN values, you can set `tab2.sum(skipna=True)`, specify only numeric values, and more.\n",
"In this case, we are only setting the axis.\n",
"\n",
"What does summing each axis look like?"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Survived</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>M</th>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Unk</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Survived 0 1\n",
"Sex \n",
"F 1 5\n",
"M 2 3\n",
"Unk 2 1"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tab2"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Survived\n",
"0 5\n",
"1 9\n",
"dtype: int64"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tab2.sum(0)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Sex\n",
"F 6\n",
"M 5\n",
"Unk 3\n",
"dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tab2.sum(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### For me this is where things got confusing. If I sum by row, I should get row sums... right?\n",
"\n",
"`Rows = 0, Columns = 1`\n",
"\n",
"But here, my intution tells me that if I do `tab2.sum('rows')`, I should get the result I see from `tab2.sum('columns')`, and vice versa. In other words for exampmle, if I wanted to know how many females there were, I would want the sum of that row.\n",
"\n",
"### In Pandas, the reverse will actually give you want you want! \n",
"\n",
"To remind ourselves, we are trying to understand:\n",
"\n",
"`normalized = tab2.div(tab2.sum(1).astype(float), axis=0);`\n",
"\n",
"So we are dividing `tab2` elements columnwise along the row axis (axis=0)..."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Survived</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>M</th>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Unk</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Survived 0 1\n",
"Sex \n",
"F 1 5\n",
"M 2 3\n",
"Unk 2 1"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tab2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... by the sum of each row. \n",
"\n",
"In longer words: tab2.sum(1) says sum up each row and return a Series (column?) coresponding to the row sums. How this translates to summing along the column axis, I'm not sure. Then `tab2.div(tab2.sum(1).astype(float), axis=0)` says divide each row (axis=0... that one kind of makes sense) by the corresponding row in the tab2.sum(1) object. Since they are row sums, you get proportion/total, which all together always sums to one.\n",
"\n",
"The final output is the normalized table,which looks like this:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Survived</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>0.166667</td>\n",
" <td>0.833333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>M</th>\n",
" <td>0.400000</td>\n",
" <td>0.600000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Unk</th>\n",
" <td>0.666667</td>\n",
" <td>0.333333</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Survived 0 1\n",
"Sex \n",
"F 0.166667 0.833333\n",
"M 0.400000 0.600000\n",
"Unk 0.666667 0.333333"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normalized"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Sex\n",
"F 1.0\n",
"M 1.0\n",
"Unk 1.0\n",
"dtype: float64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normalized.sum(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And we can seethat each row in the normalized data frame crosstabulated data frame sums to one. If we plot these using the stacked barplots we were using before we can clearly see the proportion of each group that survived or perished."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nf78++ugjLViwQGvXrtX48ePr9+AAwACCJgBUQ3p6ul599VXt379fly9fliS1bt1aS5cu1eTJk7V9\n+3ZNnjx9d+GJAAACYElEQVRZW7duVe/eva3Gzp8/X0ePHtWJEycsbRcuXNCgQYPk5uam7777TkOH\nDlViYmK9HhMAmELQBIAauHbtmr766ivt2rVLK1euVFFRkd577z1lZGRoyZIlNxzXpEkTnT9/3qpt\n586dmjhxotq2bauPP/5YHh4epssHgHrBU+cAUAO33HKLevfurd69e+uuu+7S6NGjlZSUpO7du0uS\nVq9erQ4dOtj0XXv27JEkFRUVKTs7m6AJoNEgaAJALfXv31+SlJubq/vuu0+S9Ktf/UohISFVjt2/\nf78SEhI0e/Zs/etf/9If/vAH7du3T82bNzdZMgDUC546BwAb7d+/32opol98+OGHkqQePXooNDRU\nbm5uWrFihUpKSq7re/bsWct/FxUVKSoqSnfccYdiY2O1evVqnThxQkuXLjV3EABQj7hHEwBsNHDg\nQF28eFEPPvigfH19VVZWpszMTG3atMmykHuXLl2UkpKiGTNmqEePHho7dqy8vLyUnZ2tPXv2qGfP\nnlqzZo0kafbs2dq8ebP27t2rO+64Q5L01FNP6fXXX9fOnTsVGBhoz8MFgFojaAKAjXbv3q1t27Yp\nPT1dP/zwg65evap27dopODhY0dHR6tq1q6VvWlqaVqxYoY8//tjSLygoSI899pgCAwP1wQcfKCIi\nQs8884yio6Mt44qLixUcHKyff/5ZBw8elKurqx2OFADqBkETAAAARnCPJgAAAIwgaAIAAMAIgiYA\nAACMIGgCAADACIImAAAAjCBoAgAAwAiCJgAAAIwgaAIAAMAIgiYAAACMIGgCAADAiP8HyQFjiAPa\nIn8AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1af74540be0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"normalized.plot(kind='bar', stacked=True);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So there you have it. \n",
"\n",
"Maybe this is a bug, or maybe yet to grasp a deeper Pandas... but it is currently beyond me why Pandas.DataFrame.sum() works the way it does. \n",
"\n",
"But at least it works, because its really handy!"
]
}
],
"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.11"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment