Skip to content

Instantly share code, notes, and snippets.

@mamacneil
Created September 26, 2018 11:27
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 mamacneil/667a648224373d23d0ed2047059e79fc to your computer and use it in GitHub Desktop.
Save mamacneil/667a648224373d23d0ed2047059e79fc to your computer and use it in GitHub Desktop.
Lecture 4 - Data wrangling
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lecture 4 - Data wrangling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Of all the advantages of modern computers the most dominant, awful activity is cleaning data. More than any other task, the job of finding and correcting data errors and putting the data into a machine-usable format dominates the daily lives of [Data Scientists](https://en.wikipedia.org/wiki/Data_science) who are pushing computers into all areas of the modern world. Is is estiamted that up to [80% of their time is spent data wrangling](https://www.nytimes.com/2014/08/18/technology/for-big-data-scientists-hurdle-to-insights-is-janitor-work.html), which makes the job far less sexy than it might first seem...\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The art of data wrangling lies in doing the most to get data in shape using the fewest possible lines. Anything that can be automated, due to **proper naming and data-storage convetions**, is the best, as you'll be able to do it again, over and over, with little extra effort. To do this effectively, let's look at a few of R's built in data types so we know what we're working with to start. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# What's your [vector](https://www.youtube.com/watch?v=fVq4_HhBK8Y)?\n",
"\n",
"<img src=\"airplane.jpg\" alt=\"airplane\" width=\"500\"/>\n",
"\n",
"The sandard, basic building block of R is the vector or array - a data structure consisting of a collection of elements identified by their relative positions. Pretty much everything is a vector of some sort. Even a single value is a vector, having a single index position:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = 2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"TRUE"
],
"text/latex": [
"TRUE"
],
"text/markdown": [
"TRUE"
],
"text/plain": [
"[1] TRUE"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"is.vector(x)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"2"
],
"text/latex": [
"2"
],
"text/markdown": [
"2"
],
"text/plain": [
"[1] 2"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x[1]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"&lt;NA&gt;"
],
"text/latex": [
"<NA>"
],
"text/markdown": [
"&lt;NA&gt;"
],
"text/plain": [
"[1] NA"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x[2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Those indexes can also be used on the fly, to change the dimension of an existing vector:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x[10] = 3"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>2</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>3</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 2\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item 3\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 2\n",
"2. &lt;NA&gt;\n",
"3. &lt;NA&gt;\n",
"4. &lt;NA&gt;\n",
"5. &lt;NA&gt;\n",
"6. &lt;NA&gt;\n",
"7. &lt;NA&gt;\n",
"8. &lt;NA&gt;\n",
"9. &lt;NA&gt;\n",
"10. 3\n",
"\n",
"\n"
],
"text/plain": [
" [1] 2 NA NA NA NA NA NA NA NA 3"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This vectorized behaviour is, unbenownst to most of us, awesome, because it makes some assumptions under the hood that are not immediately obvious. For example if we make a new object:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>4</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>9</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 4\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item 9\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 4\n",
"2. &lt;NA&gt;\n",
"3. &lt;NA&gt;\n",
"4. &lt;NA&gt;\n",
"5. &lt;NA&gt;\n",
"6. &lt;NA&gt;\n",
"7. &lt;NA&gt;\n",
"8. &lt;NA&gt;\n",
"9. &lt;NA&gt;\n",
"10. 9\n",
"\n",
"\n"
],
"text/plain": [
" [1] 4 NA NA NA NA NA NA NA NA 9"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = x**2\n",
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"R knows that we want to square each element of `x` to create the new object `y`. While this may not seem remarkable, try to think of how you would have to do it if R couldn't handle a vectorized input:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Task 1\n",
"---\n",
"\n",
"Create `y = x**2` one element at a time, where `x = c(2, 5, 7, 10)`. Code from Lecture 2 might be helpful here."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Your answer here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"A very important 'feature' of R, is that it recycles vectors - often without telling you - making it critical that you check the dimensions of things before and after you manipulate them. For example:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"3"
],
"text/latex": [
"3"
],
"text/markdown": [
"3"
],
"text/plain": [
"[1] 3"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = 1:3\n",
"z = 4:9\n",
"length(x)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"6"
],
"text/latex": [
"6"
],
"text/markdown": [
"6"
],
"text/plain": [
"[1] 6"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"length(z)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>4</li>\n",
"\t<li>10</li>\n",
"\t<li>18</li>\n",
"\t<li>7</li>\n",
"\t<li>16</li>\n",
"\t<li>27</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 4\n",
"\\item 10\n",
"\\item 18\n",
"\\item 7\n",
"\\item 16\n",
"\\item 27\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 4\n",
"2. 10\n",
"3. 18\n",
"4. 7\n",
"5. 16\n",
"6. 27\n",
"\n",
"\n"
],
"text/plain": [
"[1] 4 10 18 7 16 27"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x*z"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Which, once it messes up your *really important data* a few times, will give you reflexive twitches to check and check again that you're doing what you think you are. \n",
"\n",
"## c()\n",
"\n",
"R's workhorse vector object is the catenate function `c()`, the name of which means [\"*To connect things together, especially to form a chain*\"](https://en.wiktionary.org/wiki/catenate). What's really important about these objects is that they are by default **all of the same type**. So numbers go with numbers, and strings go with strings etc. Once again, R makes some default decisions about assigning classes to objects within these *atomic vectors*:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = c('This','is','intense','eh','?', 42)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'character'"
],
"text/latex": [
"'character'"
],
"text/markdown": [
"'character'"
],
"text/plain": [
"[1] \"character\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### list()\n",
"\n",
"Unlike atomic vectors such as `c()`, `list()` objects can hold any type of data, as a mixture. This increased flexability comes at the cost of decreased utility, with fewer automagic things built in and generally slower performance.\n",
"\n",
"One key feature is that list objects can also have names:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = list('one'=3, 'two'=45, 'three'='nutz')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<dl>\n",
"\t<dt>$one</dt>\n",
"\t\t<dd>3</dd>\n",
"\t<dt>$two</dt>\n",
"\t\t<dd>45</dd>\n",
"\t<dt>$three</dt>\n",
"\t\t<dd>'nutz'</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description}\n",
"\\item[\\$one] 3\n",
"\\item[\\$two] 45\n",
"\\item[\\$three] 'nutz'\n",
"\\end{description}\n"
],
"text/markdown": [
"$one\n",
": 3\n",
"$two\n",
": 45\n",
"$three\n",
": 'nutz'\n",
"\n",
"\n"
],
"text/plain": [
"$one\n",
"[1] 3\n",
"\n",
"$two\n",
"[1] 45\n",
"\n",
"$three\n",
"[1] \"nutz\"\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'one'</li>\n",
"\t<li>'two'</li>\n",
"\t<li>'three'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'one'\n",
"\\item 'two'\n",
"\\item 'three'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'one'\n",
"2. 'two'\n",
"3. 'three'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"one\" \"two\" \"three\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"names(x)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"45"
],
"text/latex": [
"45"
],
"text/markdown": [
"45"
],
"text/plain": [
"[1] 45"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x$two"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Many programming languages have this kind of behaviour, but in R the important reason to know about lists is that they are the buliding blocks for many kinds of objects, including `data.frame()` and other package function outputs. This is why you can use the `$` to access the columns in `data.frame()`.\n",
"\n",
"List indexing is also a bit different, in that it uses double-square brackets `[[]]` to do the indexing, often as a nested object."
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = list('this'=c(1,4,6,7:20), 'is'=TRUE, 'some'=2:7, 'list'=c(4,3,5.44))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>4</li>\n",
"\t<li>6</li>\n",
"\t<li>7</li>\n",
"\t<li>8</li>\n",
"\t<li>9</li>\n",
"\t<li>10</li>\n",
"\t<li>11</li>\n",
"\t<li>12</li>\n",
"\t<li>13</li>\n",
"\t<li>14</li>\n",
"\t<li>15</li>\n",
"\t<li>16</li>\n",
"\t<li>17</li>\n",
"\t<li>18</li>\n",
"\t<li>19</li>\n",
"\t<li>20</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 4\n",
"\\item 6\n",
"\\item 7\n",
"\\item 8\n",
"\\item 9\n",
"\\item 10\n",
"\\item 11\n",
"\\item 12\n",
"\\item 13\n",
"\\item 14\n",
"\\item 15\n",
"\\item 16\n",
"\\item 17\n",
"\\item 18\n",
"\\item 19\n",
"\\item 20\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 4\n",
"3. 6\n",
"4. 7\n",
"5. 8\n",
"6. 9\n",
"7. 10\n",
"8. 11\n",
"9. 12\n",
"10. 13\n",
"11. 14\n",
"12. 15\n",
"13. 16\n",
"14. 17\n",
"15. 18\n",
"16. 19\n",
"17. 20\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x[[1]]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'list'"
],
"text/latex": [
"'list'"
],
"text/markdown": [
"'list'"
],
"text/plain": [
"[1] \"list\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This kind of list creation is how data frames are made explicitly - except that they need to have the same length of items for each row, except where a single value gets recycled to the full column. And keep in mind, data frame columns are atomic vectors (have the same type)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Task 2\n",
"---\n",
"\n",
"Using `data.frame()` instead of `list()`, create a data frame object that holds something interesting"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Your answer here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Converting vector types\n",
"\n",
"Among all the things to give one fits about R it is the behaviour of *atomic vectors* - those vector types that specify inherent properties useful for getting things done can also cause super-annoying problems, particuarly when they are assumed to be `factors()`. \n",
"\n",
"Let's start with a numeric vector:"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = 22:7"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>22</li>\n",
"\t<li>21</li>\n",
"\t<li>20</li>\n",
"\t<li>19</li>\n",
"\t<li>18</li>\n",
"\t<li>17</li>\n",
"\t<li>16</li>\n",
"\t<li>15</li>\n",
"\t<li>14</li>\n",
"\t<li>13</li>\n",
"\t<li>12</li>\n",
"\t<li>11</li>\n",
"\t<li>10</li>\n",
"\t<li>9</li>\n",
"\t<li>8</li>\n",
"\t<li>7</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 22\n",
"\\item 21\n",
"\\item 20\n",
"\\item 19\n",
"\\item 18\n",
"\\item 17\n",
"\\item 16\n",
"\\item 15\n",
"\\item 14\n",
"\\item 13\n",
"\\item 12\n",
"\\item 11\n",
"\\item 10\n",
"\\item 9\n",
"\\item 8\n",
"\\item 7\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 22\n",
"2. 21\n",
"3. 20\n",
"4. 19\n",
"5. 18\n",
"6. 17\n",
"7. 16\n",
"8. 15\n",
"9. 14\n",
"10. 13\n",
"11. 12\n",
"12. 11\n",
"13. 10\n",
"14. 9\n",
"15. 8\n",
"16. 7\n",
"\n",
"\n"
],
"text/plain": [
" [1] 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'integer'"
],
"text/latex": [
"'integer'"
],
"text/markdown": [
"'integer'"
],
"text/plain": [
"[1] \"integer\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = x/2.3"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'numeric'"
],
"text/latex": [
"'numeric'"
],
"text/markdown": [
"'numeric'"
],
"text/plain": [
"[1] \"numeric\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = as.character(x)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'9.56521739130435'</li>\n",
"\t<li>'9.1304347826087'</li>\n",
"\t<li>'8.69565217391304'</li>\n",
"\t<li>'8.26086956521739'</li>\n",
"\t<li>'7.82608695652174'</li>\n",
"\t<li>'7.39130434782609'</li>\n",
"\t<li>'6.95652173913044'</li>\n",
"\t<li>'6.52173913043478'</li>\n",
"\t<li>'6.08695652173913'</li>\n",
"\t<li>'5.65217391304348'</li>\n",
"\t<li>'5.21739130434783'</li>\n",
"\t<li>'4.78260869565217'</li>\n",
"\t<li>'4.34782608695652'</li>\n",
"\t<li>'3.91304347826087'</li>\n",
"\t<li>'3.47826086956522'</li>\n",
"\t<li>'3.04347826086957'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item '9.56521739130435'\n",
"\\item '9.1304347826087'\n",
"\\item '8.69565217391304'\n",
"\\item '8.26086956521739'\n",
"\\item '7.82608695652174'\n",
"\\item '7.39130434782609'\n",
"\\item '6.95652173913044'\n",
"\\item '6.52173913043478'\n",
"\\item '6.08695652173913'\n",
"\\item '5.65217391304348'\n",
"\\item '5.21739130434783'\n",
"\\item '4.78260869565217'\n",
"\\item '4.34782608695652'\n",
"\\item '3.91304347826087'\n",
"\\item '3.47826086956522'\n",
"\\item '3.04347826086957'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. '9.56521739130435'\n",
"2. '9.1304347826087'\n",
"3. '8.69565217391304'\n",
"4. '8.26086956521739'\n",
"5. '7.82608695652174'\n",
"6. '7.39130434782609'\n",
"7. '6.95652173913044'\n",
"8. '6.52173913043478'\n",
"9. '6.08695652173913'\n",
"10. '5.65217391304348'\n",
"11. '5.21739130434783'\n",
"12. '4.78260869565217'\n",
"13. '4.34782608695652'\n",
"14. '3.91304347826087'\n",
"15. '3.47826086956522'\n",
"16. '3.04347826086957'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"9.56521739130435\" \"9.1304347826087\" \"8.69565217391304\" \"8.26086956521739\"\n",
" [5] \"7.82608695652174\" \"7.39130434782609\" \"6.95652173913044\" \"6.52173913043478\"\n",
" [9] \"6.08695652173913\" \"5.65217391304348\" \"5.21739130434783\" \"4.78260869565217\"\n",
"[13] \"4.34782608695652\" \"3.91304347826087\" \"3.47826086956522\" \"3.04347826086957\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'character'"
],
"text/latex": [
"'character'"
],
"text/markdown": [
"'character'"
],
"text/plain": [
"[1] \"character\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = as.factor(x)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>9.56521739130435</li>\n",
"\t<li>9.1304347826087</li>\n",
"\t<li>8.69565217391304</li>\n",
"\t<li>8.26086956521739</li>\n",
"\t<li>7.82608695652174</li>\n",
"\t<li>7.39130434782609</li>\n",
"\t<li>6.95652173913044</li>\n",
"\t<li>6.52173913043478</li>\n",
"\t<li>6.08695652173913</li>\n",
"\t<li>5.65217391304348</li>\n",
"\t<li>5.21739130434783</li>\n",
"\t<li>4.78260869565217</li>\n",
"\t<li>4.34782608695652</li>\n",
"\t<li>3.91304347826087</li>\n",
"\t<li>3.47826086956522</li>\n",
"\t<li>3.04347826086957</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 9.56521739130435\n",
"\\item 9.1304347826087\n",
"\\item 8.69565217391304\n",
"\\item 8.26086956521739\n",
"\\item 7.82608695652174\n",
"\\item 7.39130434782609\n",
"\\item 6.95652173913044\n",
"\\item 6.52173913043478\n",
"\\item 6.08695652173913\n",
"\\item 5.65217391304348\n",
"\\item 5.21739130434783\n",
"\\item 4.78260869565217\n",
"\\item 4.34782608695652\n",
"\\item 3.91304347826087\n",
"\\item 3.47826086956522\n",
"\\item 3.04347826086957\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 9.56521739130435\n",
"2. 9.1304347826087\n",
"3. 8.69565217391304\n",
"4. 8.26086956521739\n",
"5. 7.82608695652174\n",
"6. 7.39130434782609\n",
"7. 6.95652173913044\n",
"8. 6.52173913043478\n",
"9. 6.08695652173913\n",
"10. 5.65217391304348\n",
"11. 5.21739130434783\n",
"12. 4.78260869565217\n",
"13. 4.34782608695652\n",
"14. 3.91304347826087\n",
"15. 3.47826086956522\n",
"16. 3.04347826086957\n",
"\n",
"\n"
],
"text/plain": [
" [1] 9.56521739130435 9.1304347826087 8.69565217391304 8.26086956521739\n",
" [5] 7.82608695652174 7.39130434782609 6.95652173913044 6.52173913043478\n",
" [9] 6.08695652173913 5.65217391304348 5.21739130434783 4.78260869565217\n",
"[13] 4.34782608695652 3.91304347826087 3.47826086956522 3.04347826086957\n",
"16 Levels: 3.04347826086957 3.47826086956522 ... 9.56521739130435"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now looking at the array above, what's not clear? Seems like a numeric vector by all appearences. Ah but if it were thus..."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in Ops.factor(x, 10):\n",
"“‘*’ not meaningful for factors”"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"\t<li>&lt;NA&gt;</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\item <NA>\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. &lt;NA&gt;\n",
"2. &lt;NA&gt;\n",
"3. &lt;NA&gt;\n",
"4. &lt;NA&gt;\n",
"5. &lt;NA&gt;\n",
"6. &lt;NA&gt;\n",
"7. &lt;NA&gt;\n",
"8. &lt;NA&gt;\n",
"9. &lt;NA&gt;\n",
"10. &lt;NA&gt;\n",
"11. &lt;NA&gt;\n",
"12. &lt;NA&gt;\n",
"13. &lt;NA&gt;\n",
"14. &lt;NA&gt;\n",
"15. &lt;NA&gt;\n",
"16. &lt;NA&gt;\n",
"\n",
"\n"
],
"text/plain": [
" [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x*10"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"'factor'"
],
"text/latex": [
"'factor'"
],
"text/markdown": [
"'factor'"
],
"text/plain": [
"[1] \"factor\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ah ok, well let's just convert it to a numeric vector eh?"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>16</li>\n",
"\t<li>15</li>\n",
"\t<li>14</li>\n",
"\t<li>13</li>\n",
"\t<li>12</li>\n",
"\t<li>11</li>\n",
"\t<li>10</li>\n",
"\t<li>9</li>\n",
"\t<li>8</li>\n",
"\t<li>7</li>\n",
"\t<li>6</li>\n",
"\t<li>5</li>\n",
"\t<li>4</li>\n",
"\t<li>3</li>\n",
"\t<li>2</li>\n",
"\t<li>1</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 16\n",
"\\item 15\n",
"\\item 14\n",
"\\item 13\n",
"\\item 12\n",
"\\item 11\n",
"\\item 10\n",
"\\item 9\n",
"\\item 8\n",
"\\item 7\n",
"\\item 6\n",
"\\item 5\n",
"\\item 4\n",
"\\item 3\n",
"\\item 2\n",
"\\item 1\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 16\n",
"2. 15\n",
"3. 14\n",
"4. 13\n",
"5. 12\n",
"6. 11\n",
"7. 10\n",
"8. 9\n",
"9. 8\n",
"10. 7\n",
"11. 6\n",
"12. 5\n",
"13. 4\n",
"14. 3\n",
"15. 2\n",
"16. 1\n",
"\n",
"\n"
],
"text/plain": [
" [1] 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"as.numeric(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wha?\n",
"\n",
"What are these factors? Well factors in R are really categorical variables that store a set of integer values for each unique instance of the factor and a character value that is used when the factor is displayed. This is really useful for statistical models and some other plotting functions, but leads to unexpected behaviour more than one would like.\n",
"\n",
"So looking at a new array of nubmers with some duplicate values:"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>2</li>\n",
"\t<li>33</li>\n",
"\t<li>4</li>\n",
"\t<li>33</li>\n",
"\t<li>5</li>\n",
"\t<li>66</li>\n",
"\t<li>5</li>\n",
"\t<li>7</li>\n",
"\t<li>33</li>\n",
"\t<li>4</li>\n",
"\t<li>2</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 2\n",
"\\item 33\n",
"\\item 4\n",
"\\item 33\n",
"\\item 5\n",
"\\item 66\n",
"\\item 5\n",
"\\item 7\n",
"\\item 33\n",
"\\item 4\n",
"\\item 2\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 2\n",
"2. 33\n",
"3. 4\n",
"4. 33\n",
"5. 5\n",
"6. 66\n",
"7. 5\n",
"8. 7\n",
"9. 33\n",
"10. 4\n",
"11. 2\n",
"\n",
"\n"
],
"text/plain": [
" [1] 2 33 4 33 5 66 5 7 33 4 2 \n",
"Levels: 2 4 5 7 33 66"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = factor(c(2,33,4,33,5,66,5,7,33,4,2))\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>5</li>\n",
"\t<li>2</li>\n",
"\t<li>5</li>\n",
"\t<li>3</li>\n",
"\t<li>6</li>\n",
"\t<li>3</li>\n",
"\t<li>4</li>\n",
"\t<li>5</li>\n",
"\t<li>2</li>\n",
"\t<li>1</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 5\n",
"\\item 2\n",
"\\item 5\n",
"\\item 3\n",
"\\item 6\n",
"\\item 3\n",
"\\item 4\n",
"\\item 5\n",
"\\item 2\n",
"\\item 1\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 5\n",
"3. 2\n",
"4. 5\n",
"5. 3\n",
"6. 6\n",
"7. 3\n",
"8. 4\n",
"9. 5\n",
"10. 2\n",
"11. 1\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 5 2 5 3 6 3 4 5 2 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"as.numeric(x)"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'2'</li>\n",
"\t<li>'4'</li>\n",
"\t<li>'5'</li>\n",
"\t<li>'7'</li>\n",
"\t<li>'33'</li>\n",
"\t<li>'66'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item '2'\n",
"\\item '4'\n",
"\\item '5'\n",
"\\item '7'\n",
"\\item '33'\n",
"\\item '66'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. '2'\n",
"2. '4'\n",
"3. '5'\n",
"4. '7'\n",
"5. '33'\n",
"6. '66'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"2\" \"4\" \"5\" \"7\" \"33\" \"66\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"levels(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So `levels()` returns the unique levels, and `as.numeric()` returns the index positions into `levels()`. So"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Task 3\n",
"---\n",
"\n",
"Using `levels()` and `as.numeric()` return the original numeric vector for x using positional indexing."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Your answer here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It may occasionally be important to specify the order of factors, in which case this can be specified explicitly:"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>small</li>\n",
"\t<li>large</li>\n",
"\t<li>large</li>\n",
"\t<li>small</li>\n",
"\t<li>medium</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item small\n",
"\\item large\n",
"\\item large\n",
"\\item small\n",
"\\item medium\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. small\n",
"2. large\n",
"3. large\n",
"4. small\n",
"5. medium\n",
"\n",
"\n"
],
"text/plain": [
"[1] small large large small medium\n",
"Levels: small medium large"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = factor(c(\"small\", \"large\", \"large\", \"small\", \"medium\"), levels = c(\"small\", \"medium\", \"large\"))\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'small'</li>\n",
"\t<li>'medium'</li>\n",
"\t<li>'large'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'small'\n",
"\\item 'medium'\n",
"\\item 'large'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'small'\n",
"2. 'medium'\n",
"3. 'large'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"small\" \"medium\" \"large\" "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"levels(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tables\n",
"\n",
"People that love Excel loves them some [pivot tables](https://exceljet.net/things-to-know-about-excel-pivot-tables) - but dang they are awful (and unreproducible). Yet getting summary tables in an informative format is not unique to Excel. Any object-oriented programming language worth its salt will have some form of table function. \n",
"\n",
"In R, the table function does this work, typically using categorical factors to get the work done. Let's start by making a data frame:"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [],
"source": [
"# Make fake clinical trial data\n",
"set.seed(1234)\n",
"study_results = data.frame(subject = 1:100,\n",
" age = round(runif(100, 18, 65),0),\n",
" treatment = gl(2, 50, labels = c(\"Treatment\", \"Control\")),\n",
" trial = sample(paste(\"Trial\", LETTERS[1:5]), 100, replace = TRUE))"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>subject</th><th scope=col>age</th><th scope=col>treatment</th><th scope=col>trial</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>1 </td><td>23 </td><td>Treatment</td><td>Trial A </td></tr>\n",
"\t<tr><td>2 </td><td>47 </td><td>Treatment</td><td>Trial C </td></tr>\n",
"\t<tr><td>3 </td><td>47 </td><td>Treatment</td><td>Trial B </td></tr>\n",
"\t<tr><td>4 </td><td>47 </td><td>Treatment</td><td>Trial B </td></tr>\n",
"\t<tr><td>5 </td><td>58 </td><td>Treatment</td><td>Trial A </td></tr>\n",
"\t<tr><td>6 </td><td>48 </td><td>Treatment</td><td>Trial B </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llll}\n",
" subject & age & treatment & trial\\\\\n",
"\\hline\n",
"\t 1 & 23 & Treatment & Trial A \\\\\n",
"\t 2 & 47 & Treatment & Trial C \\\\\n",
"\t 3 & 47 & Treatment & Trial B \\\\\n",
"\t 4 & 47 & Treatment & Trial B \\\\\n",
"\t 5 & 58 & Treatment & Trial A \\\\\n",
"\t 6 & 48 & Treatment & Trial B \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"subject | age | treatment | trial | \n",
"|---|---|---|---|---|---|\n",
"| 1 | 23 | Treatment | Trial A | \n",
"| 2 | 47 | Treatment | Trial C | \n",
"| 3 | 47 | Treatment | Trial B | \n",
"| 4 | 47 | Treatment | Trial B | \n",
"| 5 | 58 | Treatment | Trial A | \n",
"| 6 | 48 | Treatment | Trial B | \n",
"\n",
"\n"
],
"text/plain": [
" subject age treatment trial \n",
"1 1 23 Treatment Trial A\n",
"2 2 47 Treatment Trial C\n",
"3 3 47 Treatment Trial B\n",
"4 4 47 Treatment Trial B\n",
"5 5 58 Treatment Trial A\n",
"6 6 48 Treatment Trial B"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(study_results)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first and simplest thing we can table is to get counts of something, say like the number of people in each trial:"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"Trial A Trial B Trial C Trial D Trial E \n",
" 16 19 23 18 24 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"table(study_results$trial)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"More interesting might be to see how well distributed the treatments and controls were per trial:"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" \n",
" FALSE TRUE\n",
" Trial A 7 9\n",
" Trial B 9 10\n",
" Trial C 11 12\n",
" Trial D 11 7\n",
" Trial E 12 12"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"table(study_results$trial,study_results$treatment=='Treatment')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"R also has an `xtab` (cross-tabular) function that gives you other kinds of summaries - by default the sum - for say, of all the ages in the study:"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" trial\n",
"treatment Trial A Trial B Trial C Trial D Trial E\n",
" Treatment 334 390 554 300 422\n",
" Control 284 285 457 393 434"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xtabs(age~treatment+trial,study_results)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Task 4\n",
"---\n",
"\n",
"Import the MLB pitching data and figure out how many total saves (`SV`) each team had in 2017, retuning them in order."
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"# Your answer here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Value matching\n",
"\n",
"Among the more useful things to do with a computer is compare matching elements of two different lists - in a stroke of serendipity this is remarkably tedious for people to do and remarkably easy for a computer. R has two distinct ways to do matching `%in%` and `match()`.\n",
"\n",
"## `%in%`\n",
"\n",
"The somewhat oddly written `%in%` function really just asks a simple question: is the first thing %within% the second. So with a simple list of numbers:"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [],
"source": [
"longarray = 1:10\n",
"shortarray = c(1,3,5,9)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>TRUE</li>\n",
"\t<li>FALSE</li>\n",
"\t<li>TRUE</li>\n",
"\t<li>FALSE</li>\n",
"\t<li>TRUE</li>\n",
"\t<li>FALSE</li>\n",
"\t<li>FALSE</li>\n",
"\t<li>FALSE</li>\n",
"\t<li>TRUE</li>\n",
"\t<li>FALSE</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item TRUE\n",
"\\item FALSE\n",
"\\item TRUE\n",
"\\item FALSE\n",
"\\item TRUE\n",
"\\item FALSE\n",
"\\item FALSE\n",
"\\item FALSE\n",
"\\item TRUE\n",
"\\item FALSE\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. TRUE\n",
"2. FALSE\n",
"3. TRUE\n",
"4. FALSE\n",
"5. TRUE\n",
"6. FALSE\n",
"7. FALSE\n",
"8. FALSE\n",
"9. TRUE\n",
"10. FALSE\n",
"\n",
"\n"
],
"text/plain": [
" [1] TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"longarray %in% shortarray"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>TRUE</li>\n",
"\t<li>TRUE</li>\n",
"\t<li>TRUE</li>\n",
"\t<li>TRUE</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item TRUE\n",
"\\item TRUE\n",
"\\item TRUE\n",
"\\item TRUE\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. TRUE\n",
"2. TRUE\n",
"3. TRUE\n",
"4. TRUE\n",
"\n",
"\n"
],
"text/plain": [
"[1] TRUE TRUE TRUE TRUE"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"shortarray %in% longarray"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Look carefully here at what is being compared, simply is each member of the left hand item also a member of the right hand item. It doesn't matter their order, but the left hand item is the length of what gets returned, because that's what is being checked.\n",
"\n",
"This kind of matching can also usefully apply to strings:"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'c'</li>\n",
"\t<li>'ab'</li>\n",
"\t<li>'B'</li>\n",
"\t<li>'bba'</li>\n",
"\t<li>'c'</li>\n",
"\t<li>NA</li>\n",
"\t<li>'@'</li>\n",
"\t<li>'bla'</li>\n",
"\t<li>'a'</li>\n",
"\t<li>'Ba'</li>\n",
"\t<li>'%'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'c'\n",
"\\item 'ab'\n",
"\\item 'B'\n",
"\\item 'bba'\n",
"\\item 'c'\n",
"\\item NA\n",
"\\item '@'\n",
"\\item 'bla'\n",
"\\item 'a'\n",
"\\item 'Ba'\n",
"\\item '\\%'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'c'\n",
"2. 'ab'\n",
"3. 'B'\n",
"4. 'bba'\n",
"5. 'c'\n",
"6. NA\n",
"7. '@'\n",
"8. 'bla'\n",
"9. 'a'\n",
"10. 'Ba'\n",
"11. '%'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"c\" \"ab\" \"B\" \"bba\" \"c\" NA \"@\" \"bla\" \"a\" \"Ba\" \"%\" "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Example from help('%in%')\n",
"sstr = c(\"c\",\"ab\",\"B\",\"bba\",\"c\",NA,\"@\",\"bla\",\"a\",\"Ba\",\"%\")\n",
"sstr"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'a'</li>\n",
"\t<li>'b'</li>\n",
"\t<li>'c'</li>\n",
"\t<li>'d'</li>\n",
"\t<li>'e'</li>\n",
"\t<li>'f'</li>\n",
"\t<li>'g'</li>\n",
"\t<li>'h'</li>\n",
"\t<li>'i'</li>\n",
"\t<li>'j'</li>\n",
"\t<li>'k'</li>\n",
"\t<li>'l'</li>\n",
"\t<li>'m'</li>\n",
"\t<li>'n'</li>\n",
"\t<li>'o'</li>\n",
"\t<li>'p'</li>\n",
"\t<li>'q'</li>\n",
"\t<li>'r'</li>\n",
"\t<li>'s'</li>\n",
"\t<li>'t'</li>\n",
"\t<li>'u'</li>\n",
"\t<li>'v'</li>\n",
"\t<li>'w'</li>\n",
"\t<li>'x'</li>\n",
"\t<li>'y'</li>\n",
"\t<li>'z'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'a'\n",
"\\item 'b'\n",
"\\item 'c'\n",
"\\item 'd'\n",
"\\item 'e'\n",
"\\item 'f'\n",
"\\item 'g'\n",
"\\item 'h'\n",
"\\item 'i'\n",
"\\item 'j'\n",
"\\item 'k'\n",
"\\item 'l'\n",
"\\item 'm'\n",
"\\item 'n'\n",
"\\item 'o'\n",
"\\item 'p'\n",
"\\item 'q'\n",
"\\item 'r'\n",
"\\item 's'\n",
"\\item 't'\n",
"\\item 'u'\n",
"\\item 'v'\n",
"\\item 'w'\n",
"\\item 'x'\n",
"\\item 'y'\n",
"\\item 'z'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'a'\n",
"2. 'b'\n",
"3. 'c'\n",
"4. 'd'\n",
"5. 'e'\n",
"6. 'f'\n",
"7. 'g'\n",
"8. 'h'\n",
"9. 'i'\n",
"10. 'j'\n",
"11. 'k'\n",
"12. 'l'\n",
"13. 'm'\n",
"14. 'n'\n",
"15. 'o'\n",
"16. 'p'\n",
"17. 'q'\n",
"18. 'r'\n",
"19. 's'\n",
"20. 't'\n",
"21. 'u'\n",
"22. 'v'\n",
"23. 'w'\n",
"24. 'x'\n",
"25. 'y'\n",
"26. 'z'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"a\" \"b\" \"c\" \"d\" \"e\" \"f\" \"g\" \"h\" \"i\" \"j\" \"k\" \"l\" \"m\" \"n\" \"o\" \"p\" \"q\" \"r\" \"s\"\n",
"[20] \"t\" \"u\" \"v\" \"w\" \"x\" \"y\" \"z\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'A'</li>\n",
"\t<li>'B'</li>\n",
"\t<li>'C'</li>\n",
"\t<li>'D'</li>\n",
"\t<li>'E'</li>\n",
"\t<li>'F'</li>\n",
"\t<li>'G'</li>\n",
"\t<li>'H'</li>\n",
"\t<li>'I'</li>\n",
"\t<li>'J'</li>\n",
"\t<li>'K'</li>\n",
"\t<li>'L'</li>\n",
"\t<li>'M'</li>\n",
"\t<li>'N'</li>\n",
"\t<li>'O'</li>\n",
"\t<li>'P'</li>\n",
"\t<li>'Q'</li>\n",
"\t<li>'R'</li>\n",
"\t<li>'S'</li>\n",
"\t<li>'T'</li>\n",
"\t<li>'U'</li>\n",
"\t<li>'V'</li>\n",
"\t<li>'W'</li>\n",
"\t<li>'X'</li>\n",
"\t<li>'Y'</li>\n",
"\t<li>'Z'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'A'\n",
"\\item 'B'\n",
"\\item 'C'\n",
"\\item 'D'\n",
"\\item 'E'\n",
"\\item 'F'\n",
"\\item 'G'\n",
"\\item 'H'\n",
"\\item 'I'\n",
"\\item 'J'\n",
"\\item 'K'\n",
"\\item 'L'\n",
"\\item 'M'\n",
"\\item 'N'\n",
"\\item 'O'\n",
"\\item 'P'\n",
"\\item 'Q'\n",
"\\item 'R'\n",
"\\item 'S'\n",
"\\item 'T'\n",
"\\item 'U'\n",
"\\item 'V'\n",
"\\item 'W'\n",
"\\item 'X'\n",
"\\item 'Y'\n",
"\\item 'Z'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'A'\n",
"2. 'B'\n",
"3. 'C'\n",
"4. 'D'\n",
"5. 'E'\n",
"6. 'F'\n",
"7. 'G'\n",
"8. 'H'\n",
"9. 'I'\n",
"10. 'J'\n",
"11. 'K'\n",
"12. 'L'\n",
"13. 'M'\n",
"14. 'N'\n",
"15. 'O'\n",
"16. 'P'\n",
"17. 'Q'\n",
"18. 'R'\n",
"19. 'S'\n",
"20. 'T'\n",
"21. 'U'\n",
"22. 'V'\n",
"23. 'W'\n",
"24. 'X'\n",
"25. 'Y'\n",
"26. 'Z'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"A\" \"B\" \"C\" \"D\" \"E\" \"F\" \"G\" \"H\" \"I\" \"J\" \"K\" \"L\" \"M\" \"N\" \"O\" \"P\" \"Q\" \"R\" \"S\"\n",
"[20] \"T\" \"U\" \"V\" \"W\" \"X\" \"Y\" \"Z\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Bulit-in letters\n",
"letters\n",
"LETTERS"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'c'</li>\n",
"\t<li>'B'</li>\n",
"\t<li>'c'</li>\n",
"\t<li>'a'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'c'\n",
"\\item 'B'\n",
"\\item 'c'\n",
"\\item 'a'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'c'\n",
"2. 'B'\n",
"3. 'c'\n",
"4. 'a'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"c\" \"B\" \"c\" \"a\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sstr[sstr %in% c(letters, LETTERS)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What comes back here, through some clever use of positional indexing, are the values of `sstr` that are letters (or LETTERS)."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## `match()`\n",
"\n",
"One of R's more useful functions for indexing one vector based on another is `match()`, which takes items in one list and finds their **index position** in another. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remember our perfect-batting 2017 baseball pitchers from two weeks ago? "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>Rk</th><th scope=col>Name</th><th scope=col>Age</th><th scope=col>Tm</th><th scope=col>Lg</th><th scope=col>G</th><th scope=col>PA</th><th scope=col>AB</th><th scope=col>R</th><th scope=col>H</th><th scope=col>⋯</th><th scope=col>SLG</th><th scope=col>OPS</th><th scope=col>OPS.</th><th scope=col>TB</th><th scope=col>GDP</th><th scope=col>HBP</th><th scope=col>SH</th><th scope=col>SF</th><th scope=col>IBB</th><th scope=col>Pos.Summary</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>641</th><td> 641 </td><td>Raisel Iglesias\\iglesra01</td><td>27 </td><td>CIN </td><td>NL </td><td>60 </td><td>1 </td><td>1 </td><td>0 </td><td>1 </td><td>⋯ </td><td>2 </td><td>3 </td><td>657 </td><td>2 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td></tr>\n",
"\t<tr><th scope=row>1321</th><td>1321 </td><td>Jose Torres*\\torrejo02 </td><td>23 </td><td>SDP </td><td>NL </td><td>57 </td><td>1 </td><td>1 </td><td>1 </td><td>1 </td><td>⋯ </td><td>1 </td><td>2 </td><td>439 </td><td>1 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllllllllllllllllllllllllll}\n",
" & Rk & Name & Age & Tm & Lg & G & PA & AB & R & H & ⋯ & SLG & OPS & OPS. & TB & GDP & HBP & SH & SF & IBB & Pos.Summary\\\\\n",
"\\hline\n",
"\t641 & 641 & Raisel Iglesias\\textbackslash{}iglesra01 & 27 & CIN & NL & 60 & 1 & 1 & 0 & 1 & ⋯ & 2 & 3 & 657 & 2 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n",
"\t1321 & 1321 & Jose Torres*\\textbackslash{}torrejo02 & 23 & SDP & NL & 57 & 1 & 1 & 1 & 1 & ⋯ & 1 & 2 & 439 & 1 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | Rk | Name | Age | Tm | Lg | G | PA | AB | R | H | ⋯ | SLG | OPS | OPS. | TB | GDP | HBP | SH | SF | IBB | Pos.Summary | \n",
"|---|---|\n",
"| 641 | 641 | Raisel Iglesias\\iglesra01 | 27 | CIN | NL | 60 | 1 | 1 | 0 | 1 | ⋯ | 2 | 3 | 657 | 2 | 0 | 0 | 0 | 0 | 0 | 1 | \n",
"| 1321 | 1321 | Jose Torres*\\torrejo02 | 23 | SDP | NL | 57 | 1 | 1 | 1 | 1 | ⋯ | 1 | 2 | 439 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | \n",
"\n",
"\n"
],
"text/plain": [
" Rk Name Age Tm Lg G PA AB R H ⋯ SLG OPS OPS. TB\n",
"641 641 Raisel Iglesias\\\\iglesra01 27 CIN NL 60 1 1 0 1 ⋯ 2 3 657 2 \n",
"1321 1321 Jose Torres*\\\\torrejo02 23 SDP NL 57 1 1 1 1 ⋯ 1 2 439 1 \n",
" GDP HBP SH SF IBB Pos.Summary\n",
"641 0 0 0 0 0 1 \n",
"1321 0 0 0 0 0 1 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mlb_batting = na.omit(read.csv(\"mlb2017_batting.txt\"))\n",
"mlb_batting[mlb_batting$BA==1 & mlb_batting$G>10, ]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Well let's figure out if they are actually closers, used in the last inning to shut down the other team. To do this, we'll need to import the pitching data from [Baseball-Reference.com](https://www.baseball-reference.com/leagues/MLB/2017-standard-pitching.shtml):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Create new dataframe from baseball data\n",
"mlb_pitching = na.omit(read.csv(\"mlb2017_pitching.txt\"))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'Rk'</li>\n",
"\t<li>'Name'</li>\n",
"\t<li>'Age'</li>\n",
"\t<li>'Tm'</li>\n",
"\t<li>'Lg'</li>\n",
"\t<li>'W'</li>\n",
"\t<li>'L'</li>\n",
"\t<li>'W.L.'</li>\n",
"\t<li>'ERA'</li>\n",
"\t<li>'G'</li>\n",
"\t<li>'GS'</li>\n",
"\t<li>'GF'</li>\n",
"\t<li>'CG'</li>\n",
"\t<li>'SHO'</li>\n",
"\t<li>'SV'</li>\n",
"\t<li>'IP'</li>\n",
"\t<li>'H'</li>\n",
"\t<li>'R'</li>\n",
"\t<li>'ER'</li>\n",
"\t<li>'HR'</li>\n",
"\t<li>'BB'</li>\n",
"\t<li>'IBB'</li>\n",
"\t<li>'SO'</li>\n",
"\t<li>'HBP'</li>\n",
"\t<li>'BK'</li>\n",
"\t<li>'WP'</li>\n",
"\t<li>'BF'</li>\n",
"\t<li>'ERA.'</li>\n",
"\t<li>'FIP'</li>\n",
"\t<li>'WHIP'</li>\n",
"\t<li>'H9'</li>\n",
"\t<li>'HR9'</li>\n",
"\t<li>'BB9'</li>\n",
"\t<li>'SO9'</li>\n",
"\t<li>'SO.W'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'Rk'\n",
"\\item 'Name'\n",
"\\item 'Age'\n",
"\\item 'Tm'\n",
"\\item 'Lg'\n",
"\\item 'W'\n",
"\\item 'L'\n",
"\\item 'W.L.'\n",
"\\item 'ERA'\n",
"\\item 'G'\n",
"\\item 'GS'\n",
"\\item 'GF'\n",
"\\item 'CG'\n",
"\\item 'SHO'\n",
"\\item 'SV'\n",
"\\item 'IP'\n",
"\\item 'H'\n",
"\\item 'R'\n",
"\\item 'ER'\n",
"\\item 'HR'\n",
"\\item 'BB'\n",
"\\item 'IBB'\n",
"\\item 'SO'\n",
"\\item 'HBP'\n",
"\\item 'BK'\n",
"\\item 'WP'\n",
"\\item 'BF'\n",
"\\item 'ERA.'\n",
"\\item 'FIP'\n",
"\\item 'WHIP'\n",
"\\item 'H9'\n",
"\\item 'HR9'\n",
"\\item 'BB9'\n",
"\\item 'SO9'\n",
"\\item 'SO.W'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'Rk'\n",
"2. 'Name'\n",
"3. 'Age'\n",
"4. 'Tm'\n",
"5. 'Lg'\n",
"6. 'W'\n",
"7. 'L'\n",
"8. 'W.L.'\n",
"9. 'ERA'\n",
"10. 'G'\n",
"11. 'GS'\n",
"12. 'GF'\n",
"13. 'CG'\n",
"14. 'SHO'\n",
"15. 'SV'\n",
"16. 'IP'\n",
"17. 'H'\n",
"18. 'R'\n",
"19. 'ER'\n",
"20. 'HR'\n",
"21. 'BB'\n",
"22. 'IBB'\n",
"23. 'SO'\n",
"24. 'HBP'\n",
"25. 'BK'\n",
"26. 'WP'\n",
"27. 'BF'\n",
"28. 'ERA.'\n",
"29. 'FIP'\n",
"30. 'WHIP'\n",
"31. 'H9'\n",
"32. 'HR9'\n",
"33. 'BB9'\n",
"34. 'SO9'\n",
"35. 'SO.W'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"Rk\" \"Name\" \"Age\" \"Tm\" \"Lg\" \"W\" \"L\" \"W.L.\" \"ERA\" \"G\" \n",
"[11] \"GS\" \"GF\" \"CG\" \"SHO\" \"SV\" \"IP\" \"H\" \"R\" \"ER\" \"HR\" \n",
"[21] \"BB\" \"IBB\" \"SO\" \"HBP\" \"BK\" \"WP\" \"BF\" \"ERA.\" \"FIP\" \"WHIP\"\n",
"[31] \"H9\" \"HR9\" \"BB9\" \"SO9\" \"SO.W\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"names(mlb_pitching)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The columns for pitching are different than for batting:\n",
"\n",
"- **Rk** -- Rank; This is a count of the rows from top to bottom. It is recalculated following the sorting of a column.\n",
"- **Name** -- Player Name; Bold can mean player is active for this team or player has appeared in MLB; * means LHP or LHB, # means switch hitter,+ can mean HOFer\n",
"- **Age** -- Player’s age at midnight of June 30th of that year\n",
"- **Lg** -- League; AL - American League (1901-present); NL - National League (1876-present); AA - American Association (1882-1891); UA - Union Association (1884); PL - Players League (1890); FL - Federal League (1914-1915); NA - National Association (1871-1875)\n",
"\n",
"- **W** -- Wins\n",
"- **L** -- Losses\n",
"- **W-L%** -- Win-Loss Percentage\n",
"W / (W + L)\n",
"For players, leaders need one decision for every ten team games.\n",
"For managers, minimum to qualify for leading is 320 games.\n",
"- **ERA** -- 9 * ER / IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played.\n",
"Bold indicates lowest ERA using current stats\n",
"Gold means awarded ERA title at end of year.\n",
"- **G** -- Games Played or Pitched\n",
"- **GS** -- Games Started\n",
"- **GF** -- Games Finished\n",
"- **CG** -- Complete Game\n",
"- **SHO** -- Shutouts\n",
"No runs allowed and a complete game.\n",
"- **SV** -- Saves\n",
"- **IP** -- Innings Pitched\n",
"- **H** -- Hits/Hits Allowed\n",
"- **R** -- Runs Scored/Allowed\n",
"- **ER** -- Earned Runs Allowed\n",
"- **HR** -- Home Runs Hit/Allowed\n",
"- **BB** -- Bases on Balls/Walks\n",
"- **IBB** -- Intentional Bases on Balls\n",
"First tracked in 1955.\n",
"- **SO** -- Strikeouts\n",
"- **HBP** -- Times Hit by a Pitch.\n",
"- **BK** -- Balks\n",
"- **WP** -- Wild Pitches\n",
"- **BF** -- Batters Faced\n",
"- **ERA+** -- ERA+\n",
"100*[lgERA/ERA]\n",
"Adjusted to the player’s ballpark(s).\n",
"- **FIP** -- Fielding Independent Pitching\n",
"this stat measures a pitcher's effectiveness at preventing HR, BB, HBP and causing SO\n",
"(13*HR + 3*(BB+HBP) - 2*SO)/IP + Constantlg\n",
"The constant is set so that each season MLB average FIP is the same as the MLB avg ERA\n",
"- **WHIP** -- (BB + H)/IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played\n",
"- **H9** -- 9 x H / IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played\n",
"- **HR9** -- 9 x HR / IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played\n",
"- **BB9** -- 9 x BB / IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played\n",
"- **SO9** -- 9 x SO / IP\n",
"For recent years, leaders need 1 IP\n",
"per team game played\n",
"- **SO/W** -- SO/W or SO/BB\n",
"For recent years, pitching leaders need 1 IP\n",
"per team game played.\n",
"No batting leaders computed."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How do we figure out if these pitchers are closers? Reading the [Wikipedia Closer page](https://en.wikipedia.org/wiki/Closer_(baseball)) we can see that the main statistic that ranks closers is [saves](https://en.wikipedia.org/wiki/Save_(baseball)) (`SV`) - being is the finishing pitcher in a game won by his team and entered the game when they were ahead. \n",
"\n",
"So looking at saves:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys\n2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y\n5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrl\nSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98\nhTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7C\nlP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmK\nPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZf\nsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJ\nxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19\nzn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNC\nUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU\n97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KT\nYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyA\ngccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/\nqwBnjX8BoJ98VQNcC+8AAEAASURBVHgB7N0LvHVlXS96iGuAIBAoopCXOuQFBUKEAkuLnRWJ\nESV1ws4npYtbqE1ll71J9oZ98qSRZhfalJCGpz5S6LGg7CaFVigKpaLG/eaN+0URhPP7y1rt\nOWdjznfM9c53Mdd4vs/n83vnGpc5x3i+z3jXWv81xhxzq600AgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQ2V2DrzX0Bz99QAk/K3j5vyh4/kvn/kNwzZbnZBAgQIECAAAECBAgQGJTA\nOenNg8l9HXk4816daAQIECBAgAABAgSaFfiqZnveZse3Tbf/MNm5I/+SebVcI0CAAAECBAgQ\nINCsgAKp2aHXcQIECBAgQIAAAQIEJgUUSJMipgkQIECAAAECBAgQaFZAgdTs0Os4AQIECBAg\nQIAAAQKTAgqkSRHTBAgQIECAAAECBAg0K6BAanbodZwAAQIECBAgQIAAgUkBBdKkiGkCBAgQ\nIECAAAECBJoVUCA1O/Q6ToAAAQIECBAgQIDApIACaVLENAECBAgQIECAAAECzQookJodeh0n\nQIAAAQIECBAgQGBSYNvJGQ1M754+7pbskNyb3Jncl2gECBAgQIAAAQIECDQu0MoZpIMyzuck\nn01uT65NrkpuSqpIujo5O9kr0QgQIECAAAECBAgQaFSghTNIp2VsT18Z3xvy+IGkiqQqjOpM\n0h7JfslJyXHJycn5iUaAAAECBAgQIECAAIFBCRyf3jySXJQcPKNnW2fZUcllSa1/RDLEdm46\nVelqV2TmKV0LzCNAgAABAgQIECDQisDQL7E7NgN5TVKPl88Y1CqKLkmOTu5JTkw0AgQIECBA\ngAABAgQaExh6gXRgxrMuqXug57jekfWuTPbtub7VCBAgQIAAAQIECBAYkMDQC6RbM1aHJNv1\nHLO6w10VVXUDB40AAQIECBAgQIAAgcYEhl4gnZfxPCC5IDlsxtjWe5COTC5OdkouTDQCBAgQ\nIECAAAECBBoTGPpd7OpudHsnZyTHJDcndWvv25K7k12Tuovd/sk+yUPJqcmliUaAAAECBAgQ\nIECAAIFBCjwtvXpHUgVS3ZBhNPUhsZ9K3pA8JRlyOzedq3Q1d7HrUjGPAAECBAgQIECgKYGh\n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\n0xbOOb/6+8nkmR3PqyKofhnvavW81yVv6Fj4UOZNc+xYfZOz6g8s+81Y67os6yo+Zjxl4Yt+\nO6/40hmvenyWvXNi+Z6Zvnxi3ujkPZnYdXTGytc/kcc6Rqa1N2XBT3UsfE/m1XE6rT03C66c\ntnCJ59ex9rRk2lnQW7LsvgXu/1PyWjtOeb36Q8PkZclTVm169jbp/VOTaWNWZ9cX9UegjQBd\nfwQ8f8aO1veO+h6yqPbkvNBXT3mx+uNK/dzVCKybQAsF0mnRPH1F9IY8fiCpHxj3JrsleyT1\ni85JSX1DODmZ9U0hi7UNJlC/UE/75bh+SXl4gf2pX1K2m/J69RfxL01ZtpbZtZ3/K/mDiSfX\nMf25ZNp+TKzea7JeqwqgH+tYu84OLHJbHZvYorPqh/K074X1C1FXofPLmf8LM/bq57JsVsEw\n46mdi2Ydw3XGrM4KTrYakyoWXzu5INM3J11jturwrCyfLK6/I/MuSLpavVZ9b/3mjoV/lHld\n26pVt0/qe+/v1cRIqzOFdUZ12vNGVu39Zf3iu8uUtessaP1MWFR7eV7oD2e8WP2f7fqDQ/2S\nXu8T7Go1xl1nR/fP/Ou6nrAy75o8TvtDSjlPa1UMd7Uak2nFWP1fWWQRUd+369jvavV9e5FF\n5o/n9d7StaGVeW/O4ykdy+v/zLRf7OsPM1/oeM5GmFXjfEPy1I6d/bXM+9qO+Wud9aQ8sbZV\n/0e7WhWn9XuatmmB+h43zbG+x9X3Oq2HQH3zGXKrv26cnlycHJLUD5Ijku9O6gfYS5LDkvrP\n+cLk2qR+qNU62jAE6pe6+qZw95S8bYHd3DOvddeU7dT2P7nAba2+VP2S0JXV5Yt8rG+s67Wt\nRe73rNf62iysXwSnHR+XTXly/UJUZ/D27cg/Zt60X3KzaO724jxj1jH8jhmvOG3Mav6s1jXO\nNW9Tret5s7ZVy7r2savg29S2N7W8fqmbNs51DJy4qReYY3mN/3VJ1/FxXuZP+4X63Vk2bR+r\nGHhBMtlWX+t5WTC5vVdn3uryyedVgT9tWzX/1MknrEx/bBPPe8KU561ldhXO0/ax/k8cs5YX\nnfKccroimTSs6T9Npjm+L8tm7eM3ZPlGbvP+n15LX6vgrl/qD00m/esPKIv8fpqXG2yr72Gz\nfp7V90Ctp0AdkENuVezUD5RnJvXX+0213bPC9UmdQaq/Jq21PS1P/FBSfx3t06pQ3SGp9esv\nTluq1RmAVyRf6thAffOvX0q6ltU3py8m9Y1ytNXxU8/r+qtm/fVpm6SeN9lmLavXezDpcpi2\nrPzqG2zXftQ+lO20Vtvp6nM9p35x61pWHnU8Tf4St+qRRZ2tXq/rr4n1F8gy6VpW/artlMlk\nm7ZsdT/q9Wqbo22WVR1/9dyu/yuzlk0bl9pu7WO93uR+1HbKuOv4mOUxa1xmLdvUMZxd6Wx1\nzHft41qP4drHOqYmPWrjZdW1rU0dw3V8zDtm047h2o9a1nXszBqXWcumHae1rVnLpu1HHTt1\nPHb1uawqXf9v6zm1n9NaPafr+85ax6y21/V/etZxWstq/6e1Oj6mfR/uGrNZx2ktq0xr9T1n\n2ved+j4yrXXtx6bGrF6va1ubGrM6Bia/D9d+Tfu/NGs/NucYnuUxbcxqrLv+v9dr1b50HcM1\nv/owzaosujzW8xiuY6qO0Xn2o/pUP0e6jp3qc6XLqv6vTDt2aj/q+2zX/+k6rmr+5P+lzFrT\nsbMs+1FO1bdp7fey4JXTFpo/LlCYQ24HpnMfSLp+kHb1u65zvTLZt2vhHPOuy7rfn8z64TP6\ncvXN4WuSrv/Io+tt7ten5QX+ZMqLVJ9vT7p+oD89869Jun6p+7rM/1Qy2eob8hOSGyYXZPrx\nSdl8rmPZkzKvzsJ0XTrxtMy/Pun6xjttP2o79Zr1vMm2a2bUD9LPTi7I9BOT2of6a8xke2pm\n3Jh0jde0/aj/a09Jrk0mW50Sr0tdbp1ckOm9k/rBUH+hnGz7Z0Y9p+sH6bT9qB8mtf9XJ5Ot\nfiGtsbllckGm90zqh0n9H5ls1a8y7Pp/9ozMr21NHjtbZ14dV/+WTLY6dqrfZTzZ6o8Y1Yfb\nJhdkusa5LsvqKpRrW2Xf9QNxmlX9oNkn6Tp2dsv82s+uY6eeU8dN/YV7si362Knjpi5B+vTk\nhjJd///q/3PXsfO1mX9TMs8xvE3Wr2OuvhdMttqHMuk6dvbK/PqFrsZmsu2XGZ9Juo6daeMy\n6xiuX7LqWK2+TbY9MqOOu65j58kr87u+/9UxXH2e59ipY2Pa9786hsvy88lk29T3v+vyhHn2\nY7usP+v7X3mV/2Sr7391/HYdw1+b+fMeO9vmOWv9/lfHRv1MmGyL/v5XFnWM3Dy5oUzXz+cv\nJ13f/+rYqbHs+gW+vu/UsTPP97/6mVT/Z25MJtus73/1M7z2b4jf/8r4umSybc73vxrn+r40\n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\nKn+RPDHR2hWYVSCViuOmnWPjpenq6veGWY+7j5A4PkYwGvmy/sB2VTJ6jNRl2s+d0v+6TPP2\nkfXr6x+dsq7ZwxOYVSBVbx0fwxtzPSKwIQXqTjOHJAqjDTl8j9lOO24eM/oNsWHHx4YYpoXu\n5L55tUOTx/d41brxxzOSZyU79FjfKm0JOD7aGm+9JUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQ+P/bu7tQz6oyDODZWAbpJKIkook55RRZU5haUDM2VtoU\njgRpEnZR4oXdBJokdpFgZVAKYhZBEBqUGCGaSgUmDEpfJJaOWUrBJON3aX5m1vPA2rD7M+cw\ncxhE9PfCw95r7Y9zzu9meFl77yFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEHgRCax6Ef0ufhUCBAgQePkK9N+jdckJyceTQ5M9kkeS/ySKAAECBAgQIECA\nAAECLwuBA/NXbkn+u4P8MXNrEkWAAAECBAgQIECAAIGXvMBe+Qu3Jc8nFyXvSQ5Pjk2+kjyb\ndBVJkxQERYAAAQIECBAgQIDAS1vgxPx5XTn60RJ/5nfH8fOXOG6aAAECBAjsVoE9d+vd3IwA\nAQIECOyawDvH6TctcdnXMn90csAOju+fuY3JEcm+yV+SLcntSatzJyV/S36ZLFZXq96cXJt0\nlarVfxc3JX0fqqtbtyU9/lQyr74f1felutK1d3JXcnNyd6IIECBAgAABAgQIECCwIoH35aqu\nIG1N3rQLd2jj82DSa/+ZPD32+0GHLyStfvjhvmT72M/m/+rPGT2QvGrMvjHbXyXTPR8a+3dm\n+/Zkqp5/Q9LznkvuH/vPZPu5RBEgQIAAAQIECBAgQGBFAm1irkzabLS5uTX5crI+6QrOjmp1\nJh9LHk6OSnqP1yabkzYpTyavS1pdgeq9P9zBrLp61PlvjrmuCP0m6e/wqaTj1geT/pw/Ja9O\nWqcnvfbryT5J661Jm7GuNHXlShEgQIAAAQIECBAgQGBFAm1Gzk62JW08pjyR/R8mhyTz6mNt\nNyafmU+O/T4O1+vfNsZHjPEVYzxtvjXmjxwTp45xr1+sCzLRe545Dlw4xseN8bT5UHbOSl4/\nTdgSIECAAAECBAgQIEBgpQJtlPruzznJ9UlXgtqY9DG49clS1Ufe1iZtcn6d9Jqjk6luyc6/\nkq4ytboS1FWh33Yw6pJse93nkz5ON8/UPPWDEa0PJD338aSN1seS6d7ZVQQIECBAgAABAgQI\nENj9Anvnln0Erp8Av3fh9msyvjzZmvw7acPSx+P+MfaPyXaqz2anx08bE5vHuKs9U/00Oz1n\nudw0nZxtV6+mn9Vrnk6uS+Y/N0NFgAABAgQIECBAgACBnRPYM6ddmbTRWa5+kYNtQt4yTupq\n0SNJG6M2JeclH0n6pbvLkp47b1T6ntATSVelWj9O2tDs18GozvW6NlEbl8i7Mz+v12Tw0eTS\npF/Q6/V9B2pDoggQIECAAAECBAgQILDLAltyRVeIDl7myv4fSW0+Dhvn9LG2jj89xvPNz8ex\n984ns//95Nnk0KTN0VXJvL6aQe/Zhmex9s3E8cn0LtSa7LchW6xzM9F7fGfxgDEBAgQIECBA\ngAABAgR2RuCcnNSmou8OtXlZrK7mdPXnD7MDN2S/17x/Ntfd/p9Kfdeox9Yn89qQQedvHNsT\ns51Xv2rXRq3vK62aH8h+V7l67SfG/E/GeNMYT5t+8a7nXTxN2BIgQIAAAQIECBAgQGBXBPqY\n2g+SNhb9dPfPkouSb4z9Ni0PJfNmaGqqfpf5TyZdLerqzYPJw0nvdXIyr34A4p6kx/6eLDZB\nmXrF95Ie76rWKUnv0ZWnzl2TTHVcdvq+07bkwuSE5ItJH7Pr6tTio3iZUgQIECBAgAABAgQI\nENh5gbNz6u+TNhhtSJpHk64WHZ7Mq83N5clzyXTu9uyfkRw15r6d7WJ9KRM9v4/T7ahemck2\nX/OPL7RBuzo5MJlXG6i/JtPP73l3JMckigABAgQIECBAgAABArtFoM3P2qTv+XTVZ7lanYPr\nkoOWO2mFx96Q696R9GcsVW2o+u7Uu5LlzlvqevMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4AQT+B9IgzAe1P+2q\nAAAAAElFTkSuQmCC",
"text/plain": [
"Plot with title “”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hist(mlb_pitching$SV,breaks=100, xlab='Saves', main='')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see there are a lot of zeros and ones - likely starting pitchers - so looking at just those with more than 3 saves:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys\n2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y\n5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrl\nSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98\nhTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7C\nlP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmK\nPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZf\nsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJ\nxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19\nzn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNC\nUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU\n97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KT\nYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyA\ngccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/\nqwBnjX8BoJ98VQNcC+8AAEAASURBVHgB7N0HvDRnXTf8xCQktBRCCb0F1AiIdJBepSggryAq\noo9UpTwgXUWD4AMP0kFBFOkIIkKkhCZSFOm8QSD0BBI6gQQSAmnv75/s8u4uM3t2NnfOvWeu\n7/X5/O7duWZmd67vtaf8z8zuvcceGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCKwF6rbDTi\nbWr8V07OTE4d8TgNjQABAgQIECBAgAABAmcLXDz/Pj/5xxmPA3L/b5Mqis5KzkiOSv440QgQ\nIECAAAECBAgQIDBKgYtmVMclVQS9ezLCfXL7kUlfFUbvSv45OXbSV4XTzyQaAQIECBAgQIAA\nAQIERiXw9IymiqPHJPtORvawSd/f5faQSV/dnC95VlLb3ybRCBAgQIAAAQIECBBoTGDPkY/3\n/RnfJZJDk3qfUbXXJbdI6tK705LZVmeOjklelTw6WbfV49wqqbNVq7Sahzrb9ZJVNj4X21wq\n+15zyf4nZt1/LllvFQECBAgQIECAAIFRC+w96tHtsUeN72PJtDiq4dZldV9OFoujWlfbfTW5\nSi2ci3aF7PuapM5KrdKqoKozXK9ITl9lhzW3eUL2u3fy44796xj2S+r9WSd1rNdFgAABAgQI\nECBAgMAOF6gPZ6hf9g+eGceDc/+HycVm+qZ365K7KlD+fNqxTbc3zPPUpX2rFlTrHtaLs2Ol\nq10jnXUMB3Wt1EeAAAECBAgQIECgBYE6azDm9vcZXJ2Z+Xhyk8lA/yG39SENdYanLjmbtrr0\n7D1JFUh1GZ5GgAABAgQIECBAgEBjAmO/xO7Dmc8HJH+TvDv5RFLF0aeTP0iOST6f1Bmmek9S\nnUG5f1LbaQQIECBAgAABAgQIEBilQH1Qw/9JvpzUGaIqhGbzgyy/KrlasjuaS+x2h7rnJECA\nAAECBAgQILAgMPYzSNPhfiN3HjvJXrmt9xpdOjklOS75XqIRIECAAAECBAgQINC4QCsF0uw0\n16fYHT/JbL/7BAgQIECAAAECBAg0LjD2D2lofHoNnwABAgQIECBAgACBIQIKpCFatiVAgAAB\nAgQIECBAYNQCCqRRT6/BESBAgAABAgQIECAwRECBNETLtgQIECBAgAABAgQIjFpAgTTq6TU4\nAgQIECBAgAABAgSGCCiQhmjZlgABAgQIECBAgACBUQsokEY9vQZHgAABAgQIECBAgMAQAQXS\nEC3bEiBAgAABAgQIECAwagEF0qin1+AIECBAgAABAgQIEBgioEAaomVbAgQIECBAgAABAgRG\nLaBAGvX0GhwBAgQIECBAgAABAkMEFEhDtGxLgAABAgQIECBAgMCoBRRIo55egyNAgAABAgQI\nECBAYIiAAmmIlm0JECBAgAABAgQIEBi1gAJp1NNrcAQIECBAgAABAgQIDBFQIA3Rsi0BAgQI\nECBAgAABAqMWUCCNenoNjgABAgQIECBAgACBIQIKpCFatiVAgAABAgQIECBAYNQCCqRRT6/B\nESBAgAABAgQIECAwRECBNETLtgQIECBAgAABAgQIjFpAgTTq6TU4AgQIECBAgAABAgSGCCiQ\nhmjZlgABAgQIECBAgACBUQsokEY9vQZHgAABAgQIECBAgMAQAQXSEC3bEiBAgAABAgQIECAw\nagEF0qin1+AIECBAgAABAgQIEBgioEAaomVbAgQIECBAgAABAgRGLaBAGvX0GhwBAgQIECBA\ngAABAkMEFEhDtGxLgAABAgQIECBAgMCoBRRIo55egyNAgAABAgQIECBAYIiAAmmIlm0JECBA\ngAABAgQIEBi1gAJp1NNrcAQIECBAgAABAgQIDBFQIA3Rsi0BAgQIECBAgAABAqMWUCCNenoN\njgABAgQIECBAgACBIQIKpCFatiVAgAABAgQIECBAYNQCCqRRT6/BESBAgAABAgQIECAwRECB\nNETLtgQIECBAgAABAgQIjFpAgTTq6TU4AgQIECBAgAABAgSGCCiQhmjZlgABAgQIECBAgACB\nUQsokEY9vQZHgAABAgQIECBAgMAQAQXSEC3bEiBAgAABAgQIECAwagEF0qin1+AIECBAgAAB\nAgQIEBgioEAaomVbAgQIECBAgAABAgRGLaBAGvX0GhwBAgQIECBAgAABAkMEFEhDtGxLgAAB\nAgQIECBAgMCoBRRIo55egyNAgAABAgQIECBAYIiAAmmIlm0JECBAgAABAgQIEBi1gAJp1NNr\ncAQIECBAgAABAgQIDBFQIA3Rsi0BAgQIECBAgAABAqMWUCCNenoNjgABAgQIECBAgACBIQIK\npCFatiVAgAABAgQIECBAYNQCCqRRT6/BESBAgAABAgQIECAwRECBNETLtgQIECBAgAABAgQI\njFpAgTTq6TU4AgQIECBAgAABAgSGCCiQhmjZlgABAgQIECBAgACBUQsokEY9vQZHgAABAgQI\nECBAgMAQAQXSEC3bEiBAgAABAgQIECAwagEF0qin1+AIECBAgAABAgQIEBgioEAaomVbAgQI\nECBAgAABAgRGLaBAGvX0GhwBAgQIECBAgAABAkMEFEhDtGxLgAABAgQIECBAgMCoBRRIo55e\ngyNAgAABAgQIECBAYIiAAmmIlm0JECBAgAABAgQIEBi1gAJp1NNrcAQIECBAgAABAgQIDBFQ\nIA3Rsi0BAgQIECBAgAABAqMWUCCNenoNjgABAgQIECBAgACBIQIKpCFatiVAgAABAgQIECBA\nYNQCCqRRT6/BESBAgAABAgQIECAwRECBNETLtgQIECBAgAABAgQIjFpAgTTq6TU4AgQIECBA\ngAABAgSGCCiQhmjZlgABAgQIECBAgACBUQsokEY9vQZHgAABAgQIECBAgMAQAQXSEC3bEiBA\ngAABAgQIECAwagEF0qin1+AIECBAgAABAgQIEBgioEAaomVbAgQIECBAgAABAgRGLaBAGvX0\nGhwBAgQIECBAgAABAkMEFEhDtGxLgAABAgQIECBAgMCoBRRIo55egyNAgAABAgQIECBAYIiA\nAmmIlm0JECBAgAABAgQIEBi1gAJp1NNrcAQIECBAgAABAgQIDBFQIA3Rsi0BAgQIECBAgAAB\nAqMWUCCNenoNjgABAgQIECBAgACBIQIKpCFatiVAgAABAgQIECBAYNQCCqRRT6/BESBAgAAB\nAgQIECAwRECBNETLtgQIECBAgAABAgQIjFpg71GPbuvBXT6b/GzyzeQzyQ8TjQABAgQIECBA\ngACBRgXGfgbp/pnXVybnX5jfq2f5Q8kxyVuTjyVfSx6d7JVoBAgQIECAAAECBAg0KDD2Aun6\nmdN7JuebmdvL5v57k+skH05ekLwq+UHy5OSpiUaAAAECBAgQIECAQIMCLV5iV0XQAcmDk+fO\nzPkFcv+FycOSNyfvSDQCBAgQIECAAAECBBoSaLFAulHm94PJbHFUU35Kcp/kdsktk3NTIB2S\n/V+UzJ65ymJv2793jRWbKPCYHNStlxzY57LugUvWW0WAAAECBAgQILChAi0WSFWMvLNnPupD\nGo5OrtazftXuulzv/cmqBdKls+11V31w2+12gTvmCE5P3tdxJD+XvrsnCqQOHF0ECBAgQIAA\ngU0XaLFA+kgmpT6koasdnM4qVF7ctXJAXxVIfzlg+xtm298fsL1Nd79AFdlP7DiMX09fnYHU\n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\nIPXA6CZAgAABAgQIECBAoD0BBVJ7c27EBAgQIECAAAECBAj0CCiQemB0EyBAgAABAgQIECDQ\nnoACqb05N2ICBAgQIECAAAECBHoEFEg9MLoJECBAgAABAgQIEGhPQIHU3pwbMQECBAgQIECA\nAAECPQIKpB4Y3QQIECBAgAABAgQItCegQGpvzo2YAAECBAgQIECAAIEeAQVSD4xuAgQIECBA\ngAABAgTaE1AgtTfnRkyAAAECBAgQIECAQI+AAqkHRjcBAgQIECBAgAABAu0JKJDam3MjJkCA\nAAECBAgQIECgR0CB1AOjmwABAgQIECBAgACB9gQUSO3NuRETIECAAAECBAgQINAjoEDqgdFN\ngAABAgQIECBAgEB7Agqk9ubciAkQIECAAAECBAgQ6BFQIPXA6CZAgAABAgQIECBAoD0BBVJ7\nc27EBAgQIECAAAECBAj0CCiQemB0EyBAgAABAgQIECDQnoACqb05N2ICBAgQIECAAAECBHoE\nFEg9MLoJECBAgAABAgQIEGhPQIHU3pwbMQECBAgQIECAAAECPQIKpB4Y3QQIECBAgAABAgQI\ntCegQGpvzo2YAAECBAgQIECAAIEeAQVSD4xuAgQIECBAgAABAgTaE1AgtTfnRkyAAAECBAgQ\nIECAQI+AAqkHRjcBAgQIECBAgAABAu0JKJDam3MjJkCAAAECBAgQIECgR0CB1AOjmwABAgQI\nECBAgACB9gQUSO3NuRETIECAAAECBAgQINAjoEDqgdFNgAABAgQIECBAgEB7Agqk9ubciAkQ\nIECAAAECBAgQ6BFQIPXA6CZAgAABAgQIECBAoD0BBVJ7c27EBAgQIECAAAECBAj0CCiQemB0\nEyBAgAABAgQIECDQnoACqb05N2ICBAgQIECAAAECBHoEFEg9MLoJECBAgAABAgQIEGhPQIHU\n3pwbMQECBAgQIECAAAECPQIKpB4Y3QQIECBAgAABAgQItCegQGpvzo2YAAECBAgQIECAAIEe\nAQVSD4xuAgQIECBAgAABAgTaE1AgtTfnRkyAAAECBAgQIECAQI+AAqkHRjcBAgQIECBAgAAB\nAu0JKJDam3MjJkCAAAECBAgQIECgR0CB1AOjmwABAgQIECBAgACB9gQUSO3NuRETIECAAAEC\nBAgQINAjoEDqgdFNgAABAgQIECBAgEB7Agqk9ubciAkQIECAAAECBAgQ6BFQIPXA6CZAgAAB\n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\nYE5AgTTHYYEAAQIECBAgQIAAgZYFFEgtz76xEyBAgAABAgQIECAwJ6BAmuOwQIAAAQIECBAg\nQIBAywIKpJZn39gJECBAgAABAgQIEJgTUCDNcVggQIAAAQIECBAgQKBlAQVSy7Nv7AQIECBA\ngAABAgQIzAkokOY4LBAgQIAAAQIECBAg0LKAAqnl2Td2AgQIECBAgAABAgTmBBRIcxwWCBAg\nQIAAAQIECBBoWUCB1PLsGzsBAgQIECBAgAABAnMCCqQ5DgsECBAgQIAAAQIECLQsoEBqefaN\nnQABAgQIECBAgACBOQEF0hyHBQIECBAgQIAAAQIEWhZQILU8+8ZOgAABAgQIECBAgMCcgAJp\njsMCAQIECBAgQIAAAQItCyiQWp59YydAgAABAgQIECBAYE5AgTTHYYEAAQIECBAgQIAAgZYF\n9m5w8AdlzAck+yY/SL6XnJxoBAgQIECAAAECBAg0LtDKGaRfyjz/ffLN5ITkS8nRyXFJFUlf\nSF6QXCzRCBAgQIAAAQIECBBoVKCFM0iPz9wePpnfL+f2/UkVSVUY1ZmkiySXS+6X3C15SPLK\nRCNAgAABAgQIECBAoDGBsRdIv5H5rOLoyORPko8mXW3PdN4keVryiuSY5L8SjQABAgQIECBA\ngACBhgSqMBhzq2LnBslhyY9WGGi9P+nYpM4gPWCF7fs2uVJWfCQ5X98GC/11qWO9J6q2P31h\n3a5crMsM7538uONB90pfHcMPk7M61p8/faclXcdXx79fckrS1Wrfes4zOlZWkb5PUs/b1S6Q\nzlOTMztW1n513LV+sdVru563bzxlXdt0vS62Gk85lVGX41bjKadyKMvFtuyYatt63nrOrvmp\n563xdD1uuvcoxz6LZce0lcWy10XNTY1p2dyW/65+XWxlUePtes2k++zj7XtdbDWeZa+LZa/V\net46pvra6vr62up1sexrZNkxbfU1UnNbx9P1mqp967i6vn7S/ZPvZV1ft1s5LhtP7Vuvya5j\nquddd263ep0vczw3X/NbvS6WfX3VMVXrm4Nljsu+5mtu67H7vkbqmGteu75ua35q33V+FtS+\nla7vq+le+v1vmeNWr/NlX1/1uqjx9H0Pq33Locui9q3j6pufetx6Hfd9jaxrsez731YWW70u\ntvqa77OosdS+fY71Wu37WVD7bvU1X/uu83Nx2feLZa/zc/P9r8ZSc7TO63wri2Vf8/V6e3Fy\nn0RbQaAmacztGhnc+5O+b1CLY/9uOo5KLr24YuDyMdn+7kl9ga3S6ovtoknXL0er7L/qNo/P\nhq9bsvGhWff5nvWXTP/3k7o0cbHVF+3lki8trpgs17pvJF3zUN+gauzHJV3tSuk8Jun6IXLh\n9F8w+XrS1a6Szs91rUjfwUk9Zs15V7tyOr/QtSJ9l0pOSros6mvqskmfxeWz7mtJ1zfH+mWo\nLvk8PulqdUz1uF0W0w8e+WbXjulbZlHvvasf1PWBJYutXps1B30W9bVShl2/EJXFZZJjkq52\nhXTWvHe97usbff3Bos/i0KyrYzorWWwHpmOf5FuLKybLyywunm3qdXpix771g+2KyTKLE7K+\n65eA+uWgvoaOTbpaPe5Xki6LC6V//+SrSVdb9lotwzru73TtmL5lFodkfX2ATX3dL7atLOpr\noPy7fsneN/2XSL6cdLWyqHVndKysr/nyqK+hrrZsPPW1tWfSZ1Gvqb7vf2VRX+9dX/N7pb++\nx/V9zde68+L7X70m6ntGPXZXW2ZR33PLt+/73zKL8/L7X31fru8JXW3Z97+yqJ8lm/T9b58c\nT31/PCbpaldI5/FJfe9dbLvz+199zdbPt8W21dd8fa+vr63t/v637LVa3//q6/PbSVdb9jVS\nX/P1c20di931/W+ZRY3/4/WPRqAE3pZ8OqlvVKu0+mKqL4anrrKxbQgQIECAAAECBAgQILCT\nBH47B1t/YT4iuf6SA6+/Kt4k+UBSf8H95UQjQIAAAQIECBAgQIDAqASq8HlYUpeJVKFUp+7/\nO3lT8qrJ7ftzW5eu1Po61f3QRCNAgAABAgQIECBAgMBoBa6UkVVBVNf7ViE0myqePpf8dVLX\njWoECBAgQIAAAQIECDQqUGdYWmv1Zs56Q/v0DZ0ntgZgvAQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYDcL7Lmb\n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\nI+LrtorlkyeZvm/t1pPll+S2mtfUOQ7+HYHA3iMYgyEQ2ESB+uv/jZOLJrPvRbpYln8+eX/i\nErsgNN7qj1T1i+vvJfUX/t9Oqnjual5TXSr6ZgXqQxgel9wt+ffZFbl/5mS5Poms2vQM5c1y\n/1/P7vn//6m+ah8858a/jQpUwfOcjrHX744PTL6cvCH5aFLNa+ocB/8SIECgaYFfy+jrUrqu\n/wfp1yfrHrUg9JhJ//+z0G+xTYH6JaNeQ69Lpu/76JPwmuqT0T8V+NXcqdfTYsFT6980WXfn\nWpi0o3L7tWT65vrqPiCpSzo/lvgjahC0nxLYLz31Ojvyp9acczme11QHjC4CBAi0IrCsQKoz\nA59K6izRXyZ1KcITJ8v1y7BG4OAQfDepXzTemdQZpK5M31TvNRUgbalAXa755qReU29Lfiu5\nS1K/yFbfa5LZds8sVP9HkvqjzW8kH03qks5rJRqBLoFlBZLXVJeYPgIECDQksKxAKoa6vO4t\nSV3aUr+EVN6aHJJoBOov+dPXxbLbg2aovKZmMNztFNg/vc9OqsiZvq5Ozv0/Ter/X1tsdVnn\nCcl027r/B4sbWSYwI7CsQKrNvKZmsNwlQIAAgW6B+iSgaycKo24fvcMFvKaGm7W2x/kz4Gsm\nV022unyzzjwdmvxCsm+iETi3Al5T51bQ/gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\n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",
"text/plain": [
"Plot with title “”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hist(mlb_pitching$SV[mlb_pitching$SV>3],breaks=100, xlab='Saves', main='')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We're likely looking at relievers or closers. The key thing we need to link the batting and pitching tables is the `name` column - we need to extract the names of interest from the batting column and use them to extract the number of saves for these two players.\n",
"\n",
"There are a few different ways one could do this in R, but a good one is the `match()` function, which finds the index locations of one list within another:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>Raisel Iglesias\\\\iglesra01</li>\n",
"\t<li>Jose Torres*\\\\torrejo02</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item Raisel Iglesias\\textbackslash{}\\textbackslash{}iglesra01\n",
"\\item Jose Torres*\\textbackslash{}\\textbackslash{}torrejo02\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. Raisel Iglesias\\\\iglesra01\n",
"2. Jose Torres*\\\\torrejo02\n",
"\n",
"\n"
],
"text/plain": [
"[1] Raisel Iglesias\\\\iglesra01 Jose Torres*\\\\torrejo02 \n",
"1230 Levels: A.J. Cole\\\\coleaj01 ... Zack Wheeler*\\\\wheelza01"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Possible closers from batting data\n",
"Pclosers = mlb_batting$Name[mlb_batting$BA==1&mlb_batting$G>10]\n",
"Pclosers"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>311</li>\n",
"\t<li>645</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 311\n",
"\\item 645\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 311\n",
"2. 645\n",
"\n",
"\n"
],
"text/plain": [
"[1] 311 645"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Index pitching data for these players\n",
"indx = match(Pclosers, mlb_pitching$Name)\n",
"indx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Take a second to look at this - we match the datasets in a specific direction, getting the index positions within the second match function argument, for the players corresponding to the first match function argument. Order here is important and you need to remember (or trial and error) which is which."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>Rk</th><th scope=col>Name</th><th scope=col>Age</th><th scope=col>Tm</th><th scope=col>Lg</th><th scope=col>W</th><th scope=col>L</th><th scope=col>W.L.</th><th scope=col>ERA</th><th scope=col>G</th><th scope=col>GS</th><th scope=col>GF</th><th scope=col>CG</th><th scope=col>SHO</th><th scope=col>SV</th><th scope=col>IP</th><th scope=col>H</th><th scope=col>R</th><th scope=col>ER</th><th scope=col>HR</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>395</th><td>395 </td><td>Raisel Iglesias\\iglesra01</td><td>27 </td><td>CIN </td><td>NL </td><td>3 </td><td>3 </td><td>0.500 </td><td>2.49 </td><td>63 </td><td>0 </td><td>57 </td><td>0 </td><td>0 </td><td>28 </td><td>76.0 </td><td>57 </td><td>22 </td><td>21 </td><td> 5 </td></tr>\n",
"\t<tr><th scope=row>828</th><td>828 </td><td>Jose Torres*\\torrejo02 </td><td>23 </td><td>SDP </td><td>NL </td><td>7 </td><td>4 </td><td>0.636 </td><td>4.21 </td><td>62 </td><td>0 </td><td>16 </td><td>0 </td><td>0 </td><td> 1 </td><td>68.1 </td><td>63 </td><td>34 </td><td>32 </td><td>13 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllllllllllllllll}\n",
" & Rk & Name & Age & Tm & Lg & W & L & W.L. & ERA & G & GS & GF & CG & SHO & SV & IP & H & R & ER & HR\\\\\n",
"\\hline\n",
"\t395 & 395 & Raisel Iglesias\\textbackslash{}iglesra01 & 27 & CIN & NL & 3 & 3 & 0.500 & 2.49 & 63 & 0 & 57 & 0 & 0 & 28 & 76.0 & 57 & 22 & 21 & 5 \\\\\n",
"\t828 & 828 & Jose Torres*\\textbackslash{}torrejo02 & 23 & SDP & NL & 7 & 4 & 0.636 & 4.21 & 62 & 0 & 16 & 0 & 0 & 1 & 68.1 & 63 & 34 & 32 & 13 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | Rk | Name | Age | Tm | Lg | W | L | W.L. | ERA | G | GS | GF | CG | SHO | SV | IP | H | R | ER | HR | \n",
"|---|---|\n",
"| 395 | 395 | Raisel Iglesias\\iglesra01 | 27 | CIN | NL | 3 | 3 | 0.500 | 2.49 | 63 | 0 | 57 | 0 | 0 | 28 | 76.0 | 57 | 22 | 21 | 5 | \n",
"| 828 | 828 | Jose Torres*\\torrejo02 | 23 | SDP | NL | 7 | 4 | 0.636 | 4.21 | 62 | 0 | 16 | 0 | 0 | 1 | 68.1 | 63 | 34 | 32 | 13 | \n",
"\n",
"\n"
],
"text/plain": [
" Rk Name Age Tm Lg W L W.L. ERA G GS GF CG SHO SV\n",
"395 395 Raisel Iglesias\\\\iglesra01 27 CIN NL 3 3 0.500 2.49 63 0 57 0 0 28\n",
"828 828 Jose Torres*\\\\torrejo02 23 SDP NL 7 4 0.636 4.21 62 0 16 0 0 1\n",
" IP H R ER HR\n",
"395 76.0 57 22 21 5\n",
"828 68.1 63 34 32 13"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Index the pitching data\n",
"mlb_pitching[indx,1:20]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From this we can see that with 28 saves one player (Raisel Iglesias) appears to be a closer - however with one save the other player clearly isn't (`SV=1`). Who the heck is Jose Torres? It looks like he was used as a short-relief pitcher - used in 68 innings but only allowed to come to bat once during his entire career. (Don't feel bad for him, as it turns out he's [not a nice guy](http://www.sandiegouniontribune.com/sports/sd-sp-padres-jose-torres-padres-arrest-0214-story.html).)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"---\n",
"# Task 5\n",
"---\n",
"\n",
"Use your index and matching skills to find oldest MLB pitcher to hit above 0.250 in 2017."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Your answer here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Several parts of today were cribbed from [Jenny Bryan](http://stat545.com/block004_basic-r-objects.html)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# What have you learned and what's next?\n",
"\n",
"The point of today's lab was to learn a few key aspects of R objects so we can wrangle them\n",
"\n",
"**You should at this point be comfortable:**\n",
" 1. Knowing about various vector types\n",
" 2. Understanding that not all R vectors act the same\n",
" 3. Handling factors\n",
" 4. Tables\n",
" 5. Value matching\n",
"\n",
"Next week we will delve into database-style operations, life-saving for reproducible, error-free research that will speed up many data wrangling operations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Assignment 1 - Excel from Hell - 'the revenge'\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment