Skip to content

Instantly share code, notes, and snippets.

@jkoyan
Last active September 4, 2017 20:00
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 jkoyan/eedfb9e738def3c7820b8d7daa65fa44 to your computer and use it in GitHub Desktop.
Save jkoyan/eedfb9e738def3c7820b8d7daa65fa44 to your computer and use it in GitHub Desktop.
Primer on Univariate and Bivariate Statistics
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Univariate and Bivariate statistics -\n",
"In this post we will look at Univariate Statistics and Bivariate Statistics. Both are methods to analyze and describe the data with a summary statistic. A summary number calculated from the data is called a statistic.\n",
"\n",
"* Full disclosure that the definitions and notes in the following sections were taken from the book - [\"Forecasting Principles and Practice\"](https://www.otexts.org/fpp) by Ron J Hyndman and George Athanasopoulos, It's a Comprehensive introduction to the latest forecasting methods using R. \n",
"\n",
"* Notes were also taken from exercises offered by dataquest.io.\n",
"\n",
"\n",
"\n",
"- Univariate Descriptive Statistics:\n",
"For a single data set, the most widely used statistics are the average and median. Following are a list of the different types of univariate statistic -\n",
" - Mean\n",
" - Median\n",
" - Mode\n",
" - Variance\n",
" - Standard Deviation\n",
" - Inter Quartile Range\n",
"\n",
"- BiVariate Statistics:\n",
"Here's a couple of bivariate statistics that are used to measure the relationship between two variables.\n",
" - Covariance\n",
" - Correlation Coefficient\n",
" \n",
"In the following code blocks let's take a look at each of the above mentioned methods.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Population Mean\n",
" - This is the average of an entire dataset, For example to calculate the Average height of all men above 35 in the USA.\n",
" \n",
"- Sample Mean\n",
" - While it will be a daunting task to calculate the avarege height of all men above the age of 35 in the USA, but it will be relatively easier to poll a subset (read) of the population, provided the sample is a good representaiton of the general population.\n",
" \\begin{align}\n",
" \\bar{x}=1/N\\sum_{i=1}^{n}xi\n",
" \\end{align}\n",
" where N denotes the total number of observations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The wing_lengths variable is a list that contains the length of the wings of a house fly in millimeters. In the next code cells we will be working with this dataset to calculate the univariate statistics.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy import stats\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ModeResult(mode=array([45]), count=array([10]))\n",
"Mean of wing lengths - 45.5\n",
"Median of wing lengths - 45.5\n",
"Mode of wing lengths - ModeResult(mode=array([45]), count=array([10]))\n"
]
}
],
"source": [
"wing_lengths = [36, 37, 38, 38, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 53, 53, 54, 55]\n",
"wing_mean = np.mean(wing_lengths)\n",
"wing_median = np.median(wing_lengths)\n",
"wing_mode = stats.mode(wing_lengths)\n",
"print(wing_mode)\n",
"print(\"Mean of wing lengths - {}\".format(wing_mean))\n",
"print(\"Median of wing lengths - {}\".format(wing_median))\n",
"print(\"Mode of wing lengths - {}\".format(wing_mode))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mean and the median of this dataset is the same at 45.5.\n",
"\n",
"Let's plot the histogram and the mean for the wing_lengths dataset\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1bfc5716668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(wing_lengths, bins=10, color=\"g\")\n",
"plt.axvline(wing_mean, color=\"r\")\n",
"plt.xlabel(\"wing spans\")\n",
"plt.title(\"Histogram of wing lengths of flies in mm \")\n",
"# To improve the data-ink ratio we will remove the ticks from both axes\n",
"# We also want to remove the spines to tell a compelling story\n",
"ax = plt.gca()\n",
"ax.tick_params(bottom = \"off\", left=\"off\")\n",
"spines = ax.spines\n",
"for k,spine in spines.items():\n",
" spine.set_visible(False)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Variance\n",
"The formula to calculate the variance is -\n",
"\\begin{equation*}\n",
"{var}=1/N\\sum_{i=1}^n(xi-\\bar{x})^2\n",
"\\end{equation*}\n",
"_ Where N is the total number of observations and x bar is the mean _"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The variance of the wing length dataset is 15.21\n"
]
}
],
"source": [
"# write a function to calculate the variance of a dataset, assume the input will be a list\n",
"def calc_variance(data):\n",
" mean = np.mean(data)\n",
" return np.mean([(x-mean)**2 for x in data])\n",
"wing_length_variance = calc_variance(wing_lengths)\n",
"print(\"The variance of the wing length dataset is {}\".format(wing_length_variance))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Standard deviation\n",
"The standard deviation gives an idea how much spread there is in the data around the mean.\n",
"The formula to calculate the standard deviation is -\n",
"\\begin{equation*}\n",
"\\sigma=\\sqrt{1/N\\sum_{i=1}^n(xi-\\bar{x})^2}\n",
"\\end{equation*}\n",
"_ Which is the square root of the variance _\n",
"\\begin{equation*}\n",
"\\sigma=\\sqrt{var}\n",
"\\end{equation*}"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Standard deviation of the wing length dataset is 3.9\n",
"Standard deviation of the wing length dataset using numpy 3.9\n"
]
}
],
"source": [
"# we can use the calc_variance method to calculate the standard deviation\n",
"std_dev = calc_variance(wing_lengths)**(1/2)\n",
"print(\"Standard deviation of the wing length dataset is {}\".format(std_dev))\n",
"\n",
"# lets validate the answer by using the numpy method\n",
"std_dev_numpy = np.std(wing_lengths)\n",
"print(\"Standard deviation of the wing length dataset using numpy {}\".format(std_dev_numpy))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot the Standard deviations\n",
"Next we will plot the data points that are 1, 2 and 3 standard deviations from the mean."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1bfc5685550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(wing_lengths, bins=10, color=\"g\")\n",
"plt.axvline(wing_mean, color=\"r\", label=\"Mean\")\n",
"plt.xlabel(\"wing spans\")\n",
"plt.title(\"Histogram of wing lengths of flies in mm \")\n",
"# To improve the data-ink ratio we will remove the ticks from both axes\n",
"# We also want to remove the spines to tell a compelling story\n",
"ax = plt.gca()\n",
"ax.tick_params(bottom = \"off\", left=\"off\")\n",
"spines = ax.spines\n",
"for k,spine in spines.items():\n",
" spine.set_visible(False)\n",
"plt.axvline(wing_mean+std_dev,color=\"b\", label=\"1 stddev\")\n",
"plt.axvline(wing_mean-std_dev, color=\"b\")\n",
"plt.axvline(wing_mean-2*std_dev, color=\"y\", label=\"2 stddev\")\n",
"plt.axvline(wing_mean+2*std_dev, color=\"y\")\n",
"plt.axvline(wing_mean-3*std_dev, color=\"orange\", label=\"3 stddev\")\n",
"plt.axvline(wing_mean+3*std_dev, color=\"orange\")\n",
"ax.legend(loc=\"upper right\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Observations :\n",
"From the plot above, we can infer the following -\n",
"- About 68% of the data is within 1 standard deviation.\n",
"- 95% of the data is within 2 standard deviations\n",
"- 100% of the data points are within the 3 standard deviations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Bivariate statistics\n",
"In the next section we will look at bivariate statistics i.e. the relationship between two columns. We will be using scatter plots to get an intuiton of the data. We will also be employing statistical tools such the correlation coeficient to analyze if two columns have a linear relationship.\n",
"\n",
"We'll be calculating statistics using data from the National Basketball Association (NBA). Here are the first few rows of the CSV file we'll explore:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>player</th>\n",
" <th>pos</th>\n",
" <th>age</th>\n",
" <th>bref_team_id</th>\n",
" <th>g</th>\n",
" <th>gs</th>\n",
" <th>mp</th>\n",
" <th>fg</th>\n",
" <th>fga</th>\n",
" <th>fg.</th>\n",
" <th>...</th>\n",
" <th>drb</th>\n",
" <th>trb</th>\n",
" <th>ast</th>\n",
" <th>stl</th>\n",
" <th>blk</th>\n",
" <th>tov</th>\n",
" <th>pf</th>\n",
" <th>pts</th>\n",
" <th>season</th>\n",
" <th>season_end</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Quincy Acy</td>\n",
" <td>SF</td>\n",
" <td>23</td>\n",
" <td>TOT</td>\n",
" <td>63</td>\n",
" <td>0</td>\n",
" <td>847</td>\n",
" <td>66</td>\n",
" <td>141</td>\n",
" <td>0.468</td>\n",
" <td>...</td>\n",
" <td>144</td>\n",
" <td>216</td>\n",
" <td>28</td>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>30</td>\n",
" <td>122</td>\n",
" <td>171</td>\n",
" <td>2013-2014</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Steven Adams</td>\n",
" <td>C</td>\n",
" <td>20</td>\n",
" <td>OKC</td>\n",
" <td>81</td>\n",
" <td>20</td>\n",
" <td>1197</td>\n",
" <td>93</td>\n",
" <td>185</td>\n",
" <td>0.503</td>\n",
" <td>...</td>\n",
" <td>190</td>\n",
" <td>332</td>\n",
" <td>43</td>\n",
" <td>40</td>\n",
" <td>57</td>\n",
" <td>71</td>\n",
" <td>203</td>\n",
" <td>265</td>\n",
" <td>2013-2014</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Jeff Adrien</td>\n",
" <td>PF</td>\n",
" <td>27</td>\n",
" <td>TOT</td>\n",
" <td>53</td>\n",
" <td>12</td>\n",
" <td>961</td>\n",
" <td>143</td>\n",
" <td>275</td>\n",
" <td>0.520</td>\n",
" <td>...</td>\n",
" <td>204</td>\n",
" <td>306</td>\n",
" <td>38</td>\n",
" <td>24</td>\n",
" <td>36</td>\n",
" <td>39</td>\n",
" <td>108</td>\n",
" <td>362</td>\n",
" <td>2013-2014</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Arron Afflalo</td>\n",
" <td>SG</td>\n",
" <td>28</td>\n",
" <td>ORL</td>\n",
" <td>73</td>\n",
" <td>73</td>\n",
" <td>2552</td>\n",
" <td>464</td>\n",
" <td>1011</td>\n",
" <td>0.459</td>\n",
" <td>...</td>\n",
" <td>230</td>\n",
" <td>262</td>\n",
" <td>248</td>\n",
" <td>35</td>\n",
" <td>3</td>\n",
" <td>146</td>\n",
" <td>136</td>\n",
" <td>1330</td>\n",
" <td>2013-2014</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Alexis Ajinca</td>\n",
" <td>C</td>\n",
" <td>25</td>\n",
" <td>NOP</td>\n",
" <td>56</td>\n",
" <td>30</td>\n",
" <td>951</td>\n",
" <td>136</td>\n",
" <td>249</td>\n",
" <td>0.546</td>\n",
" <td>...</td>\n",
" <td>183</td>\n",
" <td>277</td>\n",
" <td>40</td>\n",
" <td>23</td>\n",
" <td>46</td>\n",
" <td>63</td>\n",
" <td>187</td>\n",
" <td>328</td>\n",
" <td>2013-2014</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 31 columns</p>\n",
"</div>"
],
"text/plain": [
" player pos age bref_team_id g gs mp fg fga fg. \\\n",
"0 Quincy Acy SF 23 TOT 63 0 847 66 141 0.468 \n",
"1 Steven Adams C 20 OKC 81 20 1197 93 185 0.503 \n",
"2 Jeff Adrien PF 27 TOT 53 12 961 143 275 0.520 \n",
"3 Arron Afflalo SG 28 ORL 73 73 2552 464 1011 0.459 \n",
"4 Alexis Ajinca C 25 NOP 56 30 951 136 249 0.546 \n",
"\n",
" ... drb trb ast stl blk tov pf pts season season_end \n",
"0 ... 144 216 28 23 26 30 122 171 2013-2014 2013 \n",
"1 ... 190 332 43 40 57 71 203 265 2013-2014 2013 \n",
"2 ... 204 306 38 24 36 39 108 362 2013-2014 2013 \n",
"3 ... 230 262 248 35 3 146 136 1330 2013-2014 2013 \n",
"4 ... 183 277 40 23 46 63 187 328 2013-2014 2013 \n",
"\n",
"[5 rows x 31 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"nba_data = pd.read_csv(\"nba_2013.csv\")\n",
"nba_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each row holds data on a single player for a single season. It contains the player's team, the total number of points the player scored, and other information.\n",
"\n",
"- Here are some of the interesting columns:\n",
"\n",
" - player - The player's name\n",
" - pts - The total number of points the player scored\n",
" - ast - The player's total number of assists\n",
" - fg. - The player's field goal percentage for the season"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Much of statistics deals with analyzing how variables impact each other, and the first step is to graph them out with a scatterplot.\n",
"\n",
"While graphing them out, we can look at correlation. If two variables change together (ie, when one goes up, the other goes up), we know that they are correlated.\n",
"\n",
"* Make a scatterplot of the \"fta\" (free throws attempted) column against the \"pts\" column.\n",
"* Make a scatterplot of the \"stl\" (steals) column against the \"pf\" column."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1bfc77424e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cols =[\"fta\", \"pts\", \"stl\", \"pf\"]\n",
"titles =[\"Free throw assists vs. Pts\", \"Steals vs. Personal Fouls\"]\n",
"fig = plt.figure(figsize=(10,4))\n",
"col_index = 0\n",
"for i in range(0,2):\n",
" ax = fig.add_subplot(1,2, i+1)\n",
" ax.scatter(nba_data[cols[col_index]] , nba_data[cols[col_index+1]])\n",
" ax.set_xlabel(cols[col_index])\n",
" ax.set_ylabel(cols[col_index+1])\n",
" ax.set_title(titles[i])\n",
" col_index = col_index+2\n",
" ax.tick_params(left=\"off\", bottom=\"off\")\n",
" spines = ax.spines\n",
" for k,s in ax.spines.items():\n",
" s.set_visible(False)\n",
" \n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The slope for both the plots moves in the positive upward direction indicating a positive linear relationship.\n",
"Measuring correlation can be a big help when we need to analyze a lot of variables. This spares us from having to eyeball all the columns.\n",
"\n",
"- The most common way to measure correlation is Pearson's r, which we also call as the r-value.\n",
"\n",
" - A r value ranges from -1 to 1. \n",
" - -1 indicates a perfect negative linear relation. This would appear as a straight, downward-sloping line.\n",
" - 0 indicates no relation at all. We'd see a scatterplot with points that appear random.\n",
" - 1 indicates a perfect positive relationship. This would appear as a straight, upward-sloping line on our plots.\n",
" \n",
" In the following code cells we will be using a method from the scipy.stats.stats module to calculate the r.\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The correlation coefficient i.e. the r value between fta and pts variables is 0.9189785384020999\n"
]
}
],
"source": [
"from scipy.stats.stats import pearsonr\n",
"r, p_value = pearsonr(nba_data[\"fta\"], nba_data[\"pts\"])\n",
"print(\"The correlation coefficient i.e. the r value between fta and pts variables is {}\".format(r))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The correlation coefficient i.e. the r value between stl and pf variabes is 0.7376282167485283\n"
]
}
],
"source": [
"r, p_value = pearsonr(nba_data[\"stl\"], nba_data[\"pf\"])\n",
"print(\"The correlation coefficient i.e. the r value between stl and pf variabes is {}\".format(r))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Two variables are correlated when they both vary individually, but in similar ways. \n",
"For example correlation occurs when if one variable goes up, the second variable also goes up. This is called covariance. \n",
"\n",
"Covariance refers to how different variables vary jointly. There's a limit to how much two variables can covary. This is because each variable has it's own variance. These individual variances set a maximum theoretical limit on the covariance between two variables. In other words, a set of variables can't covary more from the mean than the two variables individually vary from the mean.\n",
"\n",
"Two variables reach the maximum covariance when they vary in an identical way (i.e. you see a straight line on the plot).\n",
"\n",
"The r-value is the ratio betnween the actual covariance and the maximum possible positive covariance.\n",
"Let's look at actual covariance first, Mathematically speaking covariance between two variables looks like this\n",
"The formula to calculate the variance is -\n",
"\n",
"\\begin{equation*}\n",
"{cov(x,y)} = {1/N\\sum_{i=1}^n(xi-\\bar{x})(yi-\\bar{y})}\n",
"\\end{equation*}\n",
"_ Where N is the total number of observations and x bar is the mean of the x variable and y bar is the mean of the y variable _\n",
"\n",
"Next let's calculate the covariance between two variables -\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The covariance between fta and pts is 56618.4139807487\n",
"The covariance between stl and pf is 1823.3548480513134\n"
]
}
],
"source": [
"import numpy as np\n",
"def calc_covariance(col1, col2):\n",
" xbar = np.mean(col1)\n",
" ybar = np.mean(col2)\n",
" N = len(col1)\n",
" xvar = [(x-xbar) for x in col1]\n",
" yvar = [ (y-ybar) for y in col2]\n",
" codeviates = [ xvar[i]*yvar[i] for i in range(len(col1))]\n",
" return np.mean(codeviates)\n",
"\n",
"cov_fta_pts = calc_covariance(nba_data[\"fta\"], nba_data[\"pts\"])\n",
"print(\"The covariance between fta and pts is {}\".format(cov_fta_pts))\n",
"\n",
"cov_stl_pf = calc_covariance(nba_data[\"stl\"], nba_data[\"pf\"])\n",
"print(\"The covariance between stl and pf is {}\".format(cov_stl_pf))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we know how to calculate the actual covaraince, let's look at how to calculate the correlation coefficient using the following formula -\n",
"\n",
"\\begin{equation*}\n",
"{r} = {cov(x,y)}/{\\sigma x\\sigma y}\n",
"\\end{equation*}\n",
"_Where sigma x and sigma y are the standard deviations of x and y datasets and the product of the standard deviations represent the maximum possible deviation between the two variables._\n",
"\n",
"We can use the std method on a pandas dataseries to calculate the standard deviation, such as -\n",
"```\n",
"nba_data[\"fta\"].std()\n",
"```\n",
"\n",
"We can use the cov function in numpy to compute the covariance of two variables, The following code returns the covariance between the pf and stl columns:\n",
"```\n",
"cov(nba_data[\"pf\"], nba_data[\"stl\"])[0,1]\n",
"```\n",
"\n",
"In the next cell, let's write a method to calculate the r-value"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The correlation coefficient for fta vs. pts is 0.9189785384021004\n"
]
}
],
"source": [
"def correlation_coeff(col1, col2):\n",
" covar = np.cov(col1, col2)[0,1]\n",
" return covar/(col1.std()*col2.std())\n",
"\n",
"r_fta_pts = correlation_coeff(nba_data[\"fta\"], nba_data[\"pts\"])\n",
"print(\"The correlation coefficient for fta vs. pts is {}\".format(r_fta_pts))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That wraps up the walkthrough and hopefully brief discussion of univariate bivariate statistics. \n",
"The python notebook for this post is available [here]() on github. "
]
}
],
"metadata": {
"anaconda-cloud": {},
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment