diff --git a/exercises/day4/Day_4_exercise_2.ipynb b/exercises/day4/Day_4_exercise_2.ipynb index a7a1bb2..9bec10b 100644 --- a/exercises/day4/Day_4_exercise_2.ipynb +++ b/exercises/day4/Day_4_exercise_2.ipynb @@ -81,9 +81,72 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
# Votes | Rating | Year | Runtime | URL | Genres | Title
0126807| 8.5|1957|5280|https://images-na....
171379| 8.2|1925|4320|https://images-na....
2700599| 8.3|2009|5760|https://images-na....
327632| 8.3|1928|6840|https://images-na....
4228498| 8.4|1959|8160|https://images-na....
\n", + "
" + ], + "text/plain": [ + " # Votes | Rating | Year | Runtime | URL | Genres | Title\n", + "0 126807| 8.5|1957|5280|https://images-na.... \n", + "1 71379| 8.2|1925|4320|https://images-na.... \n", + "2 700599| 8.3|2009|5760|https://images-na.... \n", + "3 27632| 8.3|1928|6840|https://images-na.... \n", + "4 228498| 8.4|1959|8160|https://images-na.... " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import pandas\n", "movies = pandas.read_table('../../downloads/250.imdb')\n", @@ -114,9 +177,122 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
# VotesRatingYearRuntimeURLGenresTitle
01268078.519575280https://images-na.ssl-images-amazon.com/images...Drama,WarPaths of Glory
1713798.219254320https://images-na.ssl-images-amazon.com/images...Adventure,Comedy,Drama,FamilyThe Gold Rush
27005998.320095760https://images-na.ssl-images-amazon.com/images...Animation,Adventure,Comedy,FamilyUp
3276328.319286840https://images-na.ssl-images-amazon.com/images...Biography,Drama,HistoryThe Passion of Joan of Arc
42284988.419598160https://images-na.ssl-images-amazon.com/images...Action,Adventure,Crime,Mystery,ThrillerNorth by Northwest
\n", + "
" + ], + "text/plain": [ + " # Votes Rating Year Runtime \\\n", + "0 126807 8.5 1957 5280 \n", + "1 71379 8.2 1925 4320 \n", + "2 700599 8.3 2009 5760 \n", + "3 27632 8.3 1928 6840 \n", + "4 228498 8.4 1959 8160 \n", + "\n", + " URL \\\n", + "0 https://images-na.ssl-images-amazon.com/images... \n", + "1 https://images-na.ssl-images-amazon.com/images... \n", + "2 https://images-na.ssl-images-amazon.com/images... \n", + "3 https://images-na.ssl-images-amazon.com/images... \n", + "4 https://images-na.ssl-images-amazon.com/images... \n", + "\n", + " Genres Title \n", + "0 Drama,War Paths of Glory \n", + "1 Adventure,Comedy,Drama,Family The Gold Rush \n", + "2 Animation,Adventure,Comedy,Family Up \n", + "3 Biography,Drama,History The Passion of Joan of Arc \n", + "4 Action,Adventure,Crime,Mystery,Thriller North by Northwest " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "movies = pandas.read_table('../../downloads/250.imdb', sep='|')\n", "movies.head()" @@ -147,9 +323,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['# Votes ', ' Rating ', ' Year ', ' Runtime ', ' URL ', ' Genres ',\n", + " ' Title'],\n", + " dtype='object')" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "movies.columns" ] @@ -171,9 +360,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'DataFrame' object has no attribute 'Rating'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/_z/_lsc_j_s3t15pr9j4cbjv7ch0000gn/T/ipykernel_16787/2139141513.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovies\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRating\u001b[0m \u001b[0;31m# no whitespaces\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/anaconda3/envs/python-workshop/lib/python3.9/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 5483\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5484\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5485\u001b[0m ):\n\u001b[1;32m 5486\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5487\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'Rating'" + ] + } + ], "source": [ "movies.Rating # no whitespaces" ] @@ -509,7 +711,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -540,25 +742,25 @@ " \n", " \n", " \n", - " 0\n", + " 0\n", " 1\n", " 2\n", " 30\n", " \n", " \n", - " 1\n", + " 1\n", " 2\n", " 3\n", " 35\n", " \n", " \n", - " 2\n", + " 2\n", " 3\n", " 5\n", " 40\n", " \n", " \n", - " 3\n", + " 3\n", " 4\n", " 10\n", " 50\n", @@ -575,7 +777,7 @@ "3 4 10 50" ] }, - "execution_count": 1, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -595,7 +797,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -608,7 +810,7 @@ "Name: height, dtype: int64" ] }, - "execution_count": 2, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -626,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -657,7 +859,7 @@ " \n", " \n", " \n", - " 1\n", + " 1\n", " 2\n", " 3\n", " 35\n", @@ -671,7 +873,7 @@ "1 2 3 35" ] }, - "execution_count": 19, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -689,7 +891,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -698,7 +900,7 @@ "10" ] }, - "execution_count": 5, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -717,7 +919,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -748,7 +950,7 @@ " \n", " \n", " \n", - " 3\n", + " 3\n", " 4\n", " 10\n", " 50\n", @@ -762,7 +964,7 @@ "3 4 10 50" ] }, - "execution_count": 6, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -773,7 +975,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -783,7 +985,7 @@ "Name: age, dtype: int64" ] }, - "execution_count": 9, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -794,7 +996,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -803,7 +1005,7 @@ "4" ] }, - "execution_count": 11, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -822,24 +1024,24 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 5, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -847,13 +1049,13 @@ } ], "source": [ - "df.height.plot(x='circumference', y='height')" + "df.plot(x='circumference', y='height')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -867,7 +1069,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.9.4" } }, "nbformat": 4, diff --git a/lectures/Day_4.ipynb b/lectures/Day_4.ipynb index 51f6509..eab1520 100644 --- a/lectures/Day_4.ipynb +++ b/lectures/Day_4.ipynb @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -94,6 +94,19 @@ "print(sorted(['2000', '30', '100']))" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "ord('2')" + ] + }, { "cell_type": "markdown", "metadata": { @@ -595,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "lines_to_next_cell": 0 }, @@ -607,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": { "lines_to_next_cell": 0 }, @@ -619,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -630,7 +643,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": { "lines_to_next_cell": 0 }, @@ -642,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -723,7 +736,7 @@ } }, "source": [ - "#### What is a function?\n", + "### What is a function?\n", "- A named piece of code that performs a specific task\n", "- A relation (mapping) between inputs (arguments) and output (return value)" ] @@ -1044,8 +1057,7 @@ } }, "source": [ - "### Keyword arguments\n", - "- A way to give a name explicitly to a function for clarity" + "### Keyword arguments\n" ] }, { @@ -1054,7 +1066,7 @@ "metadata": {}, "outputs": [], "source": [ - "sorted('file', reverse=True)" + "fh = open('files/recipes.txt', mode='w', encoding='utf-8')" ] }, { @@ -1063,8 +1075,18 @@ "metadata": {}, "outputs": [], "source": [ - "attribute = 'gene_id \"unknown gene\"'\n", - "attribute.split(sep=' ', maxsplit=1)" + "sorted([1, 4, 100, 5, 6], reverse=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Why do we use keyword arguments?" ] }, { @@ -1073,23 +1095,44 @@ "metadata": {}, "outputs": [], "source": [ - "# print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n", - "print('x=', end='')\n", - "print('1')" + "record = 'gene_id INSR \"insulin receptor\"'\n", + "\n", + "record.split(' ', 2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "record.split(sep=' ', maxsplit=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* It increases the clarity and redability" ] }, { "cell_type": "markdown", "metadata": { - "cell_marker": "'''", "slideshow": { "slide_type": "slide" } }, "source": [ - "### Keyword arguments cont.\n", - "- Can be used in both ways, with or without keyword, if there is no ambiguity\n", - "- Arguments after `*` must be keyword arguments, e.g. sorted()" + "### The order of keyword arguments does not matter" ] }, { @@ -1098,7 +1141,7 @@ "metadata": {}, "outputs": [], "source": [ - "open('files/recipes.txt', 'w', encoding='utf-8')" + "fh = open('files/recipes.txt', mode='w', encoding='utf-8'); fh.close()" ] }, { @@ -1107,7 +1150,7 @@ "metadata": {}, "outputs": [], "source": [ - "open('files/recipes.txt', mode='w', encoding='utf-8')" + "fh = open('files/recipes.txt', encoding='utf-8', mode='w'); fh.close()" ] }, { @@ -1119,7 +1162,8 @@ } }, "source": [ - "- The order of keyword arguments does not matter" + "### Can be used in both ways, with or without keyword \n", + "- if there is no ambiguity" ] }, { @@ -1128,7 +1172,7 @@ "metadata": {}, "outputs": [], "source": [ - "open('files/recipes.txt', mode='w', encoding='utf-8')" + "fh = open('files/recipes.txt', 'w', encoding='utf-8'); fh.close()" ] }, { @@ -1137,7 +1181,7 @@ "metadata": {}, "outputs": [], "source": [ - "open('files/recipes.txt', encoding='utf-8', mode='w')" + "fh = open('files/recipes.txt', mode='w', encoding='utf-8'); fh.close()" ] }, { @@ -1149,7 +1193,38 @@ } }, "source": [ - "- Positional arguments must be in front of keyword arguments" + "### But there are some exceptions " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fh = open('files/recipes.txt', encoding='utf-8', 'w'); fh.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Positional arguments must be in front of keyword arguments" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Restrictions by purpose" ] }, { @@ -1158,7 +1233,37 @@ "metadata": {}, "outputs": [], "source": [ - "open('files/recipes.txt', encoding='utf-8', 'w')" + "sorted([1, 4, 100, 5, 6], reverse=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted([1, 4, 100, 5, 6], True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "sorted(iterable, /, *, key=None, reverse=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- arguments before `/` must be specified with position\n", + "- arguments after `*` must be specified with keyword" ] }, { @@ -1264,7 +1369,7 @@ "### Small detour: Python's value for missing values: `None`\n", "\n", "- Default value for optional arguments\n", - "- Implicit return value of functions without a `return`\n", + "- Implicit return value of functions without a `return` statement\n", "- `None` is `None`, not anything else" ] }, @@ -1274,7 +1379,7 @@ "metadata": {}, "outputs": [], "source": [ - "bool(None)" + "None == 0" ] }, { @@ -1292,7 +1397,7 @@ "metadata": {}, "outputs": [], "source": [ - "None == 0" + "None == ''" ] }, { @@ -1301,7 +1406,7 @@ "metadata": {}, "outputs": [], "source": [ - "None == ''" + "bool(None)" ] }, { @@ -1435,9 +1540,12 @@ "source": [ "### A short note on code structure\n", "\n", - "- functions\n", - "- modules (files)\n", - "- documentation" + "- Functions\n", + " - e.g. sum(), print(), open()\n", + "- Modules\n", + " - files containing a collection of functions and methods, e.g. string.py \n", + "- Documentation\n", + " - docstring, comments" ] }, { @@ -1449,7 +1557,7 @@ } }, "source": [ - "#### Why functions?\n", + "### Why functions?\n", "- Cleaner code\n", "- Better defined tasks in code\n", "- Re-usability\n", @@ -1465,7 +1573,7 @@ } }, "source": [ - "#### Why modules?\n", + "### Why modules?\n", "\n", "- Cleaner code\n", "- Better defined tasks in code\n", @@ -1496,7 +1604,7 @@ } }, "source": [ - "#### Example of modules" + "### Example of modules" ] }, { @@ -1521,31 +1629,14 @@ ] }, { - "cell_type": "markdown", - "metadata": { - "cell_marker": "'''", - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Python standard modules\n", - "\n", - "Check out the [module index](https://docs.python.org/3/py-modindex.html)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "cell_marker": "'''", - "slideshow": { - "slide_type": "slide" - } - }, + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "How to find the right module?\n", + "import os\n", "\n", - "How to understand it?" + "os.system(\"date\")" ] }, { @@ -1557,19 +1648,21 @@ } }, "source": [ - "How to find the right module?\n", + "How to find the right module and instructions?\n", "\n", - "- Look at the [module index](https://docs.python.org/3/py-modindex.html)\n", + "- Look at the [module index](https://docs.python.org/3/py-modindex.html) for Python standard modules\n", "- Search [PyPI](http://pypi.org)\n", + "- Search https://www.w3schools.com/python/\n", "- Ask your colleagues\n", - "- Search the web!" + "- Search the web\n", + "- Use ChatGPT" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "slide" + "slide_type": "fragment" } }, "source": [ @@ -1599,6 +1692,19 @@ "text = 'Programming,is,cool'" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "help(text.split)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -1620,8 +1726,8 @@ } }, "source": [ - "- For slightly more complicated problems, e.g. how to download Python logo from internet with `urllib`\n", - "- URL: https://www.python.org/static/img/python-logo@2x.png" + "#### For slightly more complicated problems\n", + "- e.g. how to download Python logo from internet with `urllib`, given the URL https://www.python.org/static/img/python-logo@2x.png" ] }, { @@ -1639,6 +1745,17 @@ "help(urllib)" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Probably easier to find the answer by searching the web or using ChatGPT" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1647,7 +1764,11 @@ } }, "source": [ - "- Sometimes easier to find the answer by searching the web" + "### One minute exercise \n", + "- get help from ChatGPT (https://chat.openai.com/)\n", + "\n", + "Using Python to download the Python logo from internet with urllib\n", + "providing the url as https://www.python.org/static/img/python-logo@2x.png" ] }, { @@ -1660,9 +1781,14 @@ }, "outputs": [], "source": [ - "import urllib\n", - "url = 'https://www.python.org/static/img/python-logo@2x.png'\n", - "urllib.request.urlretrieve(url, 'files/python-logo.png')" + "import urllib.request\n", + "\n", + "url = \"https://www.python.org/static/img/python-logo@2x.png\"\n", + "filename = \"python-logo.png\" # The name you want to give to the downloaded file\n", + "\n", + "urllib.request.urlretrieve(url, filename)\n", + "\n", + "print(\"Download completed.\")" ] }, { @@ -1696,7 +1822,7 @@ "metadata": { "cell_marker": "'''", "slideshow": { - "slide_type": "slide" + "slide_type": "skip" } }, "source": [ @@ -1708,7 +1834,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], @@ -1723,7 +1849,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "skip" } }, "outputs": [], @@ -1737,7 +1863,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "skip" } }, "outputs": [], @@ -1783,7 +1909,9 @@ } }, "outputs": [], - "source": [] + "source": [ + "help(process_file)" + ] }, { "cell_type": "markdown", @@ -1821,19 +1949,6 @@ " print(col[9:])" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "help(process_file)" - ] - }, { "cell_type": "markdown", "metadata": { @@ -1843,7 +1958,7 @@ } }, "source": [ - "Your code may have two types of users:\n", + "### Your code may have two types of users:\n", "\n", "- library users\n", "- maintainers (maybe yourself!)" @@ -1858,7 +1973,7 @@ } }, "source": [ - "Write documentation for both of them!\n", + "### Write documentation for both of them!\n", "\n", "- library users (docstrings):\n", " ```python\n", @@ -1906,7 +2021,7 @@ } }, "source": [ - "### Places for documentation:" + "### Places for documentation" ] }, { @@ -1917,24 +2032,11 @@ "source": [ "- At the beginning of the file\n", "\n", - "```python\n", - "\"\"\"\n", - "This module provides functions for ...\n", - "\"\"\"\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [], - "source": [ - "from files import timeit\n" + " ```python\n", + " \"\"\"\n", + " This module provides functions for ...\n", + " \"\"\"\n", + " ```" ] }, { @@ -1973,7 +2075,7 @@ } }, "source": [ - "### Comments:" + "### Comments" ] }, { @@ -1986,42 +2088,50 @@ ] }, { - "cell_type": "markdown", - "metadata": { - "cell_marker": "'''" - }, + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "```py\n", - "my_list[5] += other_list[3] # explain why you do this!\n", - "```" + "my_list[5] += other_list[3] # explain why you do this!" ] }, { "cell_type": "markdown", "metadata": { - "cell_marker": "'''", "slideshow": { "slide_type": "slide" } }, "source": [ - "### Read more:\n", - "\n", - "https://realpython.com/documenting-python-code/\n", - "\n", - "https://www.python.org/dev/peps/pep-0008/?#comments" + "### Demo: write a Python script with documentation and use it" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": { "cell_marker": "'''", "slideshow": { - "slide_type": "skip" + "slide_type": "slide" } }, "source": [ - "### Formatting" + "### Read more:\n", + "\n", + "https://realpython.com/documenting-python-code/\n", + "\n", + "https://www.python.org/dev/peps/pep-0008/?#comments" ] }, { @@ -2175,7 +2285,18 @@ " - transform\n", " - aggregate\n", " - plot\n", - "- Main hero: the `DataFrame` type:" + "- Main hero: the `DataFrame` type" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### DataFrame " ] }, { @@ -2187,29 +2308,10 @@ ] }, { - "attachments": { - "01_table_dataframe1.svg": { - "image/svg+xml": [ - "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTQzLjE5NDk2bW0iCiAgIGhlaWdodD0iMTA0LjMwNjE1bW0iCiAgIHZpZXdCb3g9IjAgMCAxNDMuMTk0OTYgMTA0LjMwNjE1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmcxMDI4MCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40IChmOGRjZTkxLCAyMDE5LTA4LTAyKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iMDFfdGFibGVfZGF0YWZyYW1lLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEwMjc0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIwLjciCiAgICAgaW5rc2NhcGU6Y3g9IjM1NS42NTMxNyIKICAgICBpbmtzY2FwZTpjeT0iMTQyLjgwMjQ1IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTU1MSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NDkiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjQ5IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNyIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEwMjc3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjIuNjEzNDE5LC05Ni4wOTc3ODkpIj4KICAgIDxnCiAgICAgICBpZD0iZzg4OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk5OTA3NTMsMCwwLDAuOSw5LjQzNjQxNjMsMTQuODI1MDg4KSIKICAgICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTExNjgxNSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMjMuNjQ3MzQ5LDE0MS4xNjI4MSBIIDQ4LjUzNTI5IFYgMTI4Ljk3NDg1IEggMjMuNjQ3MzQ5IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gNTAuMDYzMzM5LDEyNy40NDY4IEggNzQuOTUxMjkxIFYgMTE1LjI1ODg0IEggNTAuMDYzMzM5IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSA1MC4wNjMzMzksMTQxLjE2MjgxIEggNzQuOTUxMjkxIFYgMTI4Ljk3NDg1IEggNTAuMDYzMzM5IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMjMuNjQ3MzM5LDE1My44NjI4MSBIIDQ4LjUzNTI5IFYgMTQxLjY3NDg2IEggMjMuNjQ3MzM5IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSA1MC4wNjMzMzksMTUzLjg2MjgxIEggNzQuOTUxMjkxIFYgMTQxLjY3NDg2IEggNTAuMDYzMzM5IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi02IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gNzUuNDYzMzQxLDEyNy40NDY4IEggMTAwLjM1MTMgViAxMTUuMjU4ODQgSCA3NS40NjMzNDEgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDc1LjQ2MzM0MSwxNDEuMTYyODEgSCAxMDAuMzUxMyBWIDEyOC45NzQ4NSBIIDc1LjQ2MzM0MSBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0zIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gNzUuNDYzMzQxLDE1My44NjI4MSBIIDEwMC4zNTEzIFYgMTQxLjY3NDg2IEggNzUuNDYzMzQxIFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctNSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDIzLjY0NzM0OSwxNzkuMjYyODQgSCA0OC41MzUyOSBWIDE2Ny4wNzQ4NyBIIDIzLjY0NzM0OSBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDUwLjA2MzMzOSwxNzkuMjYyODQgSCA3NC45NTEyOTEgViAxNjcuMDc0ODcgSCA1MC4wNjMzMzkgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSA3NS40NjMzNDEsMTc5LjI2Mjg0IEggMTAwLjM1MTMgViAxNjcuMDc0ODcgSCA3NS40NjMzNDEgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy01LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAyMy42NDczNDksMTkxLjk2Mjg0IEggNDguNTM1MjkgViAxNzkuNzc0ODggSCAyMy42NDczNDkgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTAtNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDUwLjA2MzMzOSwxOTEuOTYyODQgSCA3NC45NTEyOTEgViAxNzkuNzc0ODggSCA1MC4wNjMzMzkgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDc1LjQ2MzM0MSwxOTEuOTYyODQgSCAxMDAuMzUxMyBWIDE3OS43NzQ4OCBIIDc1LjQ2MzM0MSBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTAwLjg2MzM0LDEyNy40NDY4IGggMjQuODg3OTQgdiAtMTIuMTg3OTYgaCAtMjQuODg3OTQgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS00IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTAwLjg2MzM1LDE0MS4xNjI4MSBoIDI0Ljg4NzkzIHYgLTEyLjE4Nzk2IGggLTI0Ljg4NzkzIHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEwMC44NjMzNCwxNTMuODYyODEgaCAyNC44ODc5NCB2IC0xMi4xODc5NSBoIC0yNC44ODc5NCB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi03IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTAwLjg2MzM1LDE3OS4yNjI4NCBoIDI0Ljg4NzkzIHYgLTEyLjE4Nzk3IGggLTI0Ljg4NzkzIHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTctMSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEwMC44NjMzNSwxOTEuOTYyODQgaCAyNC44ODc5MyB2IC0xMi4xODc5NiBoIC0yNC44ODc5MyB6IiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzkzNSIKICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjExMTE2ODE1Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMjMuNjQ3MzQ5LDE2Ni41NjI4MyBIIDQ4LjUzNTI5IFYgMTU0LjM3NDg3IEggMjMuNjQ3MzQ5IFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTciCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNTAuMDYzMzM5LDE2Ni41NjI4MyBIIDc0Ljk1MTI5MSBWIDE1NC4zNzQ4NyBIIDUwLjA2MzMzOSBaIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNzUuNDYzMzQxLDE2Ni41NjI4MyBIIDEwMC4zNTEzIFYgMTU0LjM3NDg3IEggNzUuNDYzMzQxIFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctOCIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAxMDAuODYzMzUsMTY2LjU2MjgzIGggMjQuODg3OTMgdiAtMTIuMTg3OTYgaCAtMjQuODg3OTMgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2ODk3MjA1O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTIiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gMTI2LjI2MzM0LDE2Ni41NjI4MyBoIDI0Ljg4NzkyIHYgLTEyLjE4Nzk2IGggLTI0Ljg4NzkyIHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTQiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPC9nPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMjYuMjYzMzMsMTI3LjQ0NjggaCAyNC44ODc5MyB2IC0xMi4xODc5NiBoIC0yNC44ODc5MyB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEyNi4yNjMzNCwxNDEuMTYyODEgaCAyNC44ODc5MiB2IC0xMi4xODc5NiBoIC0yNC44ODc5MiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41Njg5NzIwNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEyNi4yNjMzMywxNTMuODYyODEgaCAyNC44ODc5MyB2IC0xMi4xODc5NSBoIC0yNC44ODc5MyB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi03LTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMjYuMjYzMzQsMTc5LjI2Mjg0IGggMjQuODg3OTIgdiAtMTIuMTg3OTcgaCAtMjQuODg3OTIgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItNy0xLTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY4OTcyMDU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMjYuMjYzMzQsMTkxLjk2Mjg0IGggMjQuODg3OTIgdiAtMTIuMTg3OTYgaCAtMjQuODg3OTIgeiIgLz4KICAgICAgPHRleHQKICAgICAgICAgaWQ9InRleHQ0NzI0Ny05IgogICAgICAgICB5PSIyMDAuMzA0MDMiCiAgICAgICAgIHg9IjEwMC41NTAxMyIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTAuNTgzMzMzMDJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI5Mzk5NjU3IgogICAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIj48dHNwYW4KICAgICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6Ny4wNTU1NTUzNHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOm1vbm9zcGFjZTtzdHJva2Utd2lkdGg6MC4yOTM5OTY1NyIKICAgICAgICAgICB5PSIyMDAuMzA0MDMiCiAgICAgICAgICAgeD0iMTAwLjU1MDEzIgogICAgICAgICAgIGlkPSJ0c3BhbjQ3MjQ1LTciCiAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSI+Y29sdW1uPC90c3Bhbj48L3RleHQ+CiAgICAgIDx0ZXh0CiAgICAgICAgIGlkPSJ0ZXh0NDcyNDctMSIKICAgICAgICAgeT0iMTAzLjgxMzA4IgogICAgICAgICB4PSI3Ni4zMDY2NzEiCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEwLjU4MzMzMzAycHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yOTM5OTY1NyIKICAgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjEwLjU4MzMzMzAycHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246bW9ub3NwYWNlO3N0cm9rZS13aWR0aDowLjI5Mzk5NjU3IgogICAgICAgICAgIHk9IjEwMy44MTMwOCIKICAgICAgICAgICB4PSI3Ni4zMDY2NzEiCiAgICAgICAgICAgaWQ9InRzcGFuNDcyNDUtMyIKICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIj5EYXRhRnJhbWU8L3RzcGFuPjwvdGV4dD4KICAgICAgPHJlY3QKICAgICAgICAgeT0iMTEzLjYxNjg5IgogICAgICAgICB4PSIxMDAuNTUwNzMiCiAgICAgICAgIGhlaWdodD0iNzkuOTg3OTA3IgogICAgICAgICB3aWR0aD0iMjUuNTEzMTY1IgogICAgICAgICBpZD0icmVjdDg1MCIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yOTM5OTY1NztzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICA8cmVjdAogICAgICAgICB5PSIxNTQuMTA3MTUiCiAgICAgICAgIHg9IjIyLjc0NTcxIgogICAgICAgICBoZWlnaHQ9IjEyLjc3MTAyOSIKICAgICAgICAgd2lkdGg9IjEyOS4zMDcxOSIKICAgICAgICAgaWQ9InJlY3Q4NTAtMyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yOTM5OTY1NztzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICA8dGV4dAogICAgICAgICBpZD0idGV4dDQ3MjQ3LTktNiIKICAgICAgICAgeT0iMTYyLjQxODQ3IgogICAgICAgICB4PSIxNTMuMDcxODciCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEwLjU4MzMzMzAycHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yOTM5OTY1NyIKICAgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjcuMDU1NTU1MzRweDtmb250LWZhbWlseTptb25vc3BhY2U7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjptb25vc3BhY2U7c3Ryb2tlLXdpZHRoOjAuMjkzOTk2NTciCiAgICAgICAgICAgeT0iMTYyLjQxODQ3IgogICAgICAgICAgIHg9IjE1My4wNzE4NyIKICAgICAgICAgICBpZD0idHNwYW40NzI0NS03LTciCiAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSI+cm93PC90c3Bhbj48L3RleHQ+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K" - ] - } - }, "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "skip" - } - }, - "source": [ - "\n", - "![01_table_dataframe1.svg](attachment:01_table_dataframe1.svg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" + "slide_type": "slide" } }, "source": [ @@ -2223,14 +2325,31 @@ "outputs": [], "source": [ "import pandas as pd\n", - "df = pd.DataFrame({\n", + "data = {\n", " 'age': [1,2,3,4],\n", " 'circumference': [2,3,5,10],\n", " 'height': [30, 35, 40, 50]\n", - "})\n", + "}\n", + "df = pd.DataFrame(data)\n", "df" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "# add row index\n", + "row_index = [\"tree1\", \"tree2\", \"tree3\", \"tree4\"]\n", + "df = df.set_index(pd.Index(row_index))\n", + "help(pd.Index)" + ] + }, { "cell_type": "markdown", "metadata": { @@ -2287,7 +2406,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2305,7 +2424,7 @@ }, "outputs": [], "source": [ - "df = pd.read_table('../downloads/Orange_1.tsv') \n", + "df = pd.read_table('../downloads/Orange_1.tsv')\n", "df" ] }, @@ -2331,7 +2450,87 @@ } }, "source": [ - "#### Selecting columns from a dataframe\n", + "### Read data from Excel file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "df2 = pd.read_excel('../downloads/Orange_1.xlsx')\n", + "df2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Overview of your data, basic statistics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Selecting columns from a dataframe\n", "```py\n", "dataframe.columnname\n", "dataframe['columnname']\n", @@ -2346,21 +2545,14 @@ ] }, { - "attachments": { - "03_subset_columns.svg": { - "image/svg+xml": [ - "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMzA1LjM5NDM1bW0iCiAgIGhlaWdodD0iNzcuMjE2MDcybW0iCiAgIHZpZXdCb3g9IjAgMCAzMDUuMzk0MzUgNzcuMjE2MDcyIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4OTgxIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKGY4ZGNlOTEsIDIwMTktMDgtMDIpIgogICBzb2RpcG9kaTpkb2NuYW1lPSIwM19zdWJzZXRfY29sdW1ucy5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM4OTc1Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MkxlbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzJMZW5kLTctNi05LTQtNi02LTEiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDcyNTMtMS00LTMtNi0wLTUtMSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gOC43MTg1ODc4LDQuMDMzNzM1MiAtMi4yMDcyODk1LDAuMDE2MDEzMjYgOC43MTg1ODg0LC00LjAwMTcwNzggYyAtMS43NDU0OTg0LDIuMzcyMDYwOSAtMS43MzU0NDA4LDUuNjE3NDUxOSAtNmUtNyw4LjAzNTQ0MyB6IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMS4xLDAsMCwtMS4xLC0xLjEsMCkiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjAuNyIKICAgICBpbmtzY2FwZTpjeD0iNTE1LjM5NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjE4OC40MzYyNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE1NTEiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODQ5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjciCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4OTc4Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjEuOTQyNCwtMTEyLjQ5MzE1KSI+CiAgICA8ZwogICAgICAgaWQ9ImcxMDk4MSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk5ODMyMDUsMCwwLDAuODk5MzMyNDQsLTYuOTM2MTUxNywxNS4yMTA5ODkpIgogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjExMTYyNzEiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjQ0MDAxOTFlLTYpIgogICAgICAgICBpZD0iZzEwMzAwIgogICAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjEuMTExNjI3MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJNIDYuNDkxOTY1MiwxMzguNjUzMTkgSCAzMS4zNzk5MDUgViAxMjYuNDY1MTggSCA2LjQ5MTk2NTIgWiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNS01LTYtMiIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAzMi45MDc5NTUsMTI0LjkzNzE4IGggMjQuODg3OTYgdiAtMTIuMTg4IGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTE3LTQ3LTMtNy0yIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDMyLjkwNzk1NSwxMzguNjUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtOC0xLTUtOCIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSA2LjQ5MTk1NTIsMTUxLjM1MzE5IEggMzEuMzc5OTA1IFYgMTM5LjE2NTE4IEggNi40OTE5NTUyIFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTEtNi00LTMtOSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAzMi45MDc5NTUsMTUxLjM1MzE5IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS0xLTAtMjAtNS03IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDU4LjMwNzk1NSwxMjQuOTM3MTggaCAyNC44ODc5NiB2IC0xMi4xODggaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTYtNy0wLTEtNi0zIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDU4LjMwNzk1NSwxMzguNjUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS01LTAtNjQtMy0yLTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gNTguMzA3OTU1LDE1MS4zNTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTMtNC0zNy0wLTktMSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSA2LjQ5MTk2NTIsMTY0LjA1MzE5IEggMzEuMzc5OTA1IFYgMTUxLjg2NTI4IEggNi40OTE5NjUyIFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctMC01LTAtMS0yIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDMyLjkwNzk1NSwxNjQuMDUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODc5MSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtOC04LTQtMi05IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDU4LjMwNzk1NSwxNjQuMDUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODc5MSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTgtNTEtMTAtOC03LTMiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNi40OTE5NjUyLDE3Ni43NTMxOSBIIDMxLjM3OTkwNSBWIDE2NC41NjUxOCBIIDYuNDkxOTY1MiBaIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03NC01LTgtOC0xLTMiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gMzIuOTA3OTU1LDE3Ni43NTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktMS04LTUtMi04LTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNi40OTE5NTUyLDE4OS40NTMxOSBIIDMxLjM3OTkwNSBWIDE3Ny4yNjUxOCBIIDYuNDkxOTU1MiBaIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0xLTYtMC01LTctMSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAzMi45MDc5NTUsMTg5LjQ1MzE5IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS0xLTAtMi00LTktMCIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSA1OC4zMDc5NTUsMTc2Ljc1MzE5IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNS0wLTY0LTItNy0yLTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gNTguMzA3OTU1LDE4OS40NTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTMtNC0zNy04LTUtMC0zIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEuNzY1NTM0ZS02LDIuNjAxMTg1KSIKICAgICAgICAgaWQ9ImcxMDMzMSIKICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjExMTYyNzEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMjIxLjY4NjM2LDEzNi4wNTIgaCAyNC44ODc5NCB2IC0xMi4xODggaCAtMjQuODg3OTQgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNS01LTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE5NS4yNzAzNywxMjIuMzM1OTkgaCAyNC44ODc5NiB2IC0xMi4xODggaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctMTctNDctMy03IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xOTUuMjcwMzcsMTM2LjA1MiBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktMS04LTEtNSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMjIxLjY4NjM3LDE0OC43NTIwMSBoIDI0Ljg4Nzk1IHYgLTEyLjE4ODAyIGggLTI0Ljg4Nzk1IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTEtNi00LTMiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE5NS4yNzAzNywxNDguNzUyMDEgaCAyNC44ODc5NiBWIDEzNi41NjQgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS0xLTAtMjAtNSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTY5Ljg3MDM3LDEyMi4zMzU5OSBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNi03LTAtMS02IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xNjkuODcwMzcsMTM2LjA1MiBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTUtMC02NC0zLTIiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE2OS44NzAzNywxNDguNzUyMDEgaCAyNC44ODc5NiBWIDEzNi41NjQgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTItMy00LTM3LTAtOSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMjIxLjY4NjM2LDE2MS40NTIwMSBoIDI0Ljg4Nzk0IFYgMTQ5LjI2NDEgaCAtMjQuODg3OTQgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy0wLTUtMC0xIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xOTUuMjcwMzcsMTYxLjQ1MjAxIGggMjQuODg3OTYgViAxNDkuMjY0MSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtOC04LTQtMiIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTY5Ljg3MDM3LDE2MS40NTIwMSBoIDI0Ljg4Nzk2IFYgMTQ5LjI2NDEgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUxLTEwLTgtNyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDE2MS40NTIwMSBoIDI0Ljg4Nzk2IFYgMTQ5LjI2NDEgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItMC02Ny0yLTAiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE0NC40NzAzNywxMjIuMzM1OTkgaCAyNC44ODc5NiB2IC0xMi4xODggaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctOC04LTAtMi05IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xNDQuNDcwMzcsMTM2LjA1MiBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMS04LTAtMyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDE0OC43NTIwMSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAyIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0wLTE5LTI0LTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTExOS4wNzAzNywxNjEuNDUyMDEgaCAyNC44ODc5MyBWIDE0OS4yNjQxIGggLTI0Ljg4NzkzIHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTQtNy04NS01LTAiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTExOS4wNzAzNywxMjIuMzM1OTkgaCAyNC44ODc5MyB2IC0xMi4xODggaCAtMjQuODg3OTMgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctOC0yLTUtMDEtOC02IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTM2LjA1MiBoIDI0Ljg4NzkzIHYgLTEyLjE4ODAxIGggLTI0Ljg4NzkzIHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0yLTYtNTktNC0yIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTQ4Ljc1MjAxIGggMjQuODg3OTMgViAxMzYuNTY0IGggLTI0Ljg4NzkzIHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0xLTQtNy0wLTYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTIyMS42ODYzNiwxNzQuMTUyIGggMjQuODg3OTQgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTQgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNS04LTgtMSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTk1LjI3MDM3LDE3NC4xNTIgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtOC01LTItOCIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMjIxLjY4NjM3LDE4Ni44NTIwMSBoIDI0Ljg4Nzk1IHYgLTEyLjE4ODAyIGggLTI0Ljg4Nzk1IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTEtNi0wLTUtNyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTk1LjI3MDM3LDE4Ni44NTIwMSBoIDI0Ljg4Nzk2IFYgMTc0LjY2NCBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTEtMC0yLTQtOSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTY5Ljg3MDM3LDE3NC4xNTIgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS01LTAtNjQtMi03LTIiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE2OS44NzAzNywxODYuODUyMDEgaCAyNC44ODc5NiBWIDE3NC42NjQgaCAtMjQuODg3OTYgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNzA3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTItMy00LTM3LTgtNS0wIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xNDQuNDcwMzcsMTc0LjE1MiBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FkYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0xLTgtNS01LTIiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Im0gLTE0NC40NzAzNywxODYuODUyMDEgaCAyNC44ODc5NiB2IC0xMi4xODgwMiBoIC0yNC44ODc5NiB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMC0xOS0yLTItMyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMTE5LjA3MDM3LDE3NC4xNTIgaCAyNC44ODc5MyB2IC0xMi4xODgwMSBoIC0yNC44ODc5MyB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA3MDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMi02LTU5LTctOC03IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTg2Ljg1MjAxIGggMjQuODg3OTMgViAxNzQuNjY0IGggLTI0Ljg4NzkzIHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDcwNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0xLTQtNy0zLTYtNSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8L2c+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNjEwOS0yLTktNi05LTciCiAgICAgICAgIGQ9Im0gLTY4LjEyNDM3OSwxNTEuMTA4MjMgaCA0Ny44ODk1OSIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC40NDQ2NTA4NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO21hcmtlci1lbmQ6dXJsKCNBcnJvdzJMZW5kLTctNi05LTQtNi02LTEpIiAvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==" - ] - } - }, "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "skip" + "slide_type": "slide" } }, "source": [ - "![03_subset_columns.svg](attachment:03_subset_columns.svg)" + "### Selecting one column" ] }, { @@ -2373,7 +2565,7 @@ }, "outputs": [], "source": [ - "df.columns" + "df" ] }, { @@ -2386,7 +2578,7 @@ }, "outputs": [], "source": [ - "df[['height', 'age']]" + "df.age" ] }, { @@ -2399,7 +2591,7 @@ }, "outputs": [], "source": [ - "df.height" + "df['age']" ] }, { @@ -2410,32 +2602,125 @@ } }, "source": [ - "#### Calculating aggregated summary statistics" + "### Selecting multiple columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df[['age', 'height']]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "df[['height', 'age']] # what's the difference?" ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Selecting rows from a dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ - "![06_reduction](img/06_reduction.png)" + "df" ] }, { - "attachments": { - "06_reduction.svg": { - "image/svg+xml": [ - "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjc4LjY1NjkybW0iCiAgIGhlaWdodD0iNzcuMjE2MDQ5bW0iCiAgIHZpZXdCb3g9IjAgMCAyNzguNjU2OTIgNzcuMjE2MDQ5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmcxMTE1MSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40IChmOGRjZTkxLCAyMDE5LTA4LTAyKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iMDZfcmVkdWN0aW9uLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczExMTQ1Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MkxlbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzJMZW5kLTctNi05LTQtMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNzI1My0xLTQtMy02LTkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuNjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDguNzE4NTg3OCw0LjAzMzczNTIgLTIuMjA3Mjg5NSwwLjAxNjAxMzI2IDguNzE4NTg4NCwtNC4wMDE3MDc4IGMgLTEuNzQ1NDk4NCwyLjM3MjA2MDkgLTEuNzM1NDQwOCw1LjYxNzQ1MTkgLTZlLTcsOC4wMzU0NDMgeiIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTEuMSwwLDAsLTEuMSwtMS4xLDApIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIwLjciCiAgICAgaW5rc2NhcGU6Y3g9IjYyNi44MDgwNCIKICAgICBpbmtzY2FwZTpjeT0iLTEwNC41MDgwMiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE1NTEiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODQ5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjciCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMTE0OCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMuNTQ2NTQ1NywtMTA2LjQ0NTU1KSI+CiAgICA8ZwogICAgICAgaWQ9Imc5MjEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg5OTgxNTkxLDAsMCwwLjg5OTMzMjQ0LDE0LjMxMzgwOCwxNC42MDIxOTQpIgogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjExMTYzNzEyIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDMuODAyNTgsMTMyLjYwNTU0IEggMjguNjkwNTIgViAxMjAuNDE3NTcgSCAzLjgwMjU4IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTE3LTQwIgogICAgICAgICBzdHlsZT0iZmlsbDojMTUwNDU4O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMzAuMjE4NTcsMTE4Ljg4OTUyIEggNTUuMTA2NTIgViAxMDYuNzAxNTcgSCAzMC4yMTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtOTQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxNDAzNTc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAzMC4yMTg1NywxMzIuNjA1NTQgSCA1NS4xMDY1MiBWIDEyMC40MTc1NyBIIDMwLjIxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTEtNSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDMuODAyNTcsMTQ1LjMwNTU0IEggMjguNjkwNTIgViAxMzMuMTE3NTggSCAzLjgwMjU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtMS00IgogICAgICAgICBzdHlsZT0iZmlsbDojMTQwMzU3O2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMzAuMjE4NTcsMTQ1LjMwNTU0IEggNTUuMTA2NTIgViAxMzMuMTE3NTggSCAzMC4yMTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNi03LTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSA1NS42MTg1NywxMTguODg5NTIgSCA4MC41MDY1MyBWIDEwNi43MDE1NyBIIDU1LjYxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTUtMC02IgogICAgICAgICBzdHlsZT0iZmlsbDojZmZjOTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gNTUuNjE4NTcsMTMyLjYwNTU0IEggODAuNTA2NTMgViAxMjAuNDE3NTcgSCA1NS42MTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0zLTQtMzkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmM5MDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSA1NS42MTg1NywxNDUuMzA1NTQgSCA4MC41MDY1MyBWIDEzMy4xMTc1OCBIIDU1LjYxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctMC05NSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDMuODAyNTgsMTU4LjAwNTU1IEggMjguNjkwNTIgViAxNDUuODE3NTkgSCAzLjgwMjU4IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC04LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxNDAzNTc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAzMC4yMTg1NywxNTguMDA1NTUgSCA1NS4xMDY1MiBWIDE0NS44MTc1OSBIIDMwLjIxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctOC01MS0xIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZjOTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gNTUuNjE4NTcsMTU4LjAwNTU1IEggODAuNTA2NTMgViAxNDUuODE3NTkgSCA1NS42MTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTUtNi0zIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMy44MDI1OCwxNzAuNzA1NTYgSCAyOC42OTA1MiBWIDE1OC41MTc2IEggMy44MDI1OCBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMC02LTAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxNDAzNTc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAzMC4yMTg1NywxNzAuNzA1NTYgSCA1NS4xMDY1MiBWIDE1OC41MTc2IEggMzAuMjE4NTcgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMjEtOSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmYzkwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDU1LjYxODU3LDE3MC43MDU1NiBIIDgwLjUwNjUzIFYgMTU4LjUxNzYgSCA1NS42MTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTUtMi05Ni05IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMy44MDI1OCwxODMuNDA1NTcgSCAyOC42OTA1MiBWIDE3MS4yMTc2MSBIIDMuODAyNTggWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTAtNy00LTEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxNDAzNTc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAzMC4yMTg1NywxODMuNDA1NTcgSCA1NS4xMDY1MiBWIDE3MS4yMTc2MSBIIDMwLjIxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctOC01LTItOC0zNCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmYzkwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDU1LjYxODU3LDE4My40MDU1NyBIIDgwLjUwNjUzIFYgMTcxLjIxNzYxIEggNTUuNjE4NTcgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItMC01OCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDgxLjAxODU4LDE1OC4wMDU1NSBoIDI0Ljg4Nzk0IFYgMTQ1LjgxNzU5IEggODEuMDE4NTggWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctOC04LTUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA4MS4wMTg1NywxMTguODg5NTIgaCAyNC44ODc5NSBWIDEwNi43MDE1NyBIIDgxLjAxODU3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0xLTczIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gODEuMDE4NTgsMTMyLjYwNTU0IGggMjQuODg3OTQgViAxMjAuNDE3NTcgSCA4MS4wMTg1OCBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMC0zIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gODEuMDE4NTcsMTQ1LjMwNTU0IGggMjQuODg3OTUgViAxMzMuMTE3NTggSCA4MS4wMTg1NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi03LTItODkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA4MS4wMTg1OCwxNzAuNzA1NTYgaCAyNC44ODc5NCBWIDE1OC41MTc2IEggODEuMDE4NTggWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItNy0xLTI5LTU1IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gODEuMDE4NTgsMTgzLjQwNTU3IGggMjQuODg3OTQgViAxNzEuMjE3NjEgSCA4MS4wMTg1OCBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDYxMDktMi05LTYtOS0wIgogICAgICAgICBkPSJtIDE0OS43MzA5MSwxNDUuMDYwNjIgaCA0Ny44ODk1OCIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC40NDQ2NTQ4NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO21hcmtlci1lbmQ6dXJsKCNBcnJvdzJMZW5kLTctNi05LTQtMikiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTQtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzE1MDQ1ODtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDIzMC42NDM0OCwxNDQuNzk3NTUgaCAyNC44ODc5NSB2IC0xMi4xODc5NiBoIC0yNC44ODc5NSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTYtOCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2U1MDM4NztmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMTIxNDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDI1Ny4wNTk0OCwxNDQuNzk3NTUgaCAyNC44ODc5NSB2IC0xMi4xODc5NiBoIC0yNC44ODc5NSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi05MC0yIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIxMjE0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMjMwLjY0MzQ4LDE1Ny40OTc1NSBoIDI0Ljg4Nzk1IFYgMTQ1LjMwOTYgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS00LTMiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlNTAzODc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjEyMTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAyNTcuMDU5NDgsMTU3LjQ5NzU1IGggMjQuODg3OTUgViAxNDUuMzA5NiBoIC0yNC44ODc5NSB6IiAvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==" - ] + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.loc[0] # select the first row" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.loc[1:3] # select from row 2 to 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.loc[[1, 3]] # select row 2 and 4" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" } }, + "source": [ + "### Selecting cells from a dataframe " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.loc[[1, 3], ['age', 'height']]" + ] + }, + { "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "skip" + "slide_type": "slide" } }, "source": [ - "![06_reduction.svg](attachment:06_reduction.svg)" + "### Run statistics on specific rows, columns, cells" ] }, { @@ -2452,7 +2737,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "-" } }, "outputs": [], @@ -2465,12 +2750,29 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "slide" } }, "outputs": [], "source": [ - "df['age'].max()" + "df.loc[1:3, ['age']].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "cell_marker": "'''", + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Selecting data from a dataframe by index\n", + "```py\n", + "dataframe.iloc[index]\n", + "dataframe.iloc[start:stop]\n", + "```\n", + "Further reading from pandas documentation: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html" ] }, { @@ -2481,7 +2783,7 @@ } }, "source": [ - "#### Creating new column derived from existing column" + "### Creating new column derived from existing column" ] }, { @@ -2492,21 +2794,36 @@ ] }, { - "attachments": { - "05_newcolumn_1.svg": { - "image/svg+xml": [ - "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMzI0LjQ0NTM3bW0iCiAgIGhlaWdodD0iNzcuNzI2MzExbW0iCiAgIHZpZXdCb3g9IjAgMCAzMjQuNDQ1MzcgNzcuNzI2MzExIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc5MjY1IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKGY4ZGNlOTEsIDIwMTktMDgtMDIpIgogICBzb2RpcG9kaTpkb2NuYW1lPSIwNV9uZXdjb2x1bW5fMS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM5MjU5Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MkxlbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzJMZW5kLTctNi05LTQiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDcyNTMtMS00LTMtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gOC43MTg1ODc4LDQuMDMzNzM1MiAtMi4yMDcyODk1LDAuMDE2MDEzMjYgOC43MTg1ODg0LC00LjAwMTcwNzggYyAtMS43NDU0OTg0LDIuMzcyMDYwOSAtMS43MzU0NDA4LDUuNjE3NDUxOSAtNmUtNyw4LjAzNTQ0MyB6IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMS4xLDAsMCwtMS4xLC0xLjEsMCkiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjAuNyIKICAgICBpbmtzY2FwZTpjeD0iNjYyLjM2OTQyIgogICAgIGlua3NjYXBlOmN5PSIxLjQ4MjIyNTciCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNTUxIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOTI2MiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEzLjQ0Nzk1LC0yOS4wODMyNzUpIj4KICAgIDxnCiAgICAgICBpZD0iZzkzOCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk5ODM4MzUsMCwwLDAuODk5MzMzMjUsNC44ODUzNTk3LDYuODM5OTQ2NikiCiAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjEuMTExNjIyNjkiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03NC01LTkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA4My4yMzc0Nyw1NS43NTM1MyBoIDI0Ljg4Nzk1IFYgNDMuNTY1NTYgSCA4My4yMzc0NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy0xNy03My04IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTA5LjY1MzQ3LDQyLjAzNzUxIGggMjQuODg3OTYgViAyOS44NDk1NiBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtMi0xIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTA5LjY1MzQ3LDU1Ljc1MzUzIGggMjQuODg3OTYgViA0My41NjU1NiBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0xLTcyLTAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA4My4yMzc0Niw2OC40NTM1MyBoIDI0Ljg4Nzk2IFYgNTYuMjY1NTcgSCA4My4yMzc0NiBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTEtMTMtNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEwOS42NTM0Nyw2OC40NTM1MyBoIDI0Ljg4Nzk2IFYgNTYuMjY1NTcgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTYtNy00LTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMzUuMDUzNDcsNDIuMDM3NTEgaCAyNC44ODc5NiBWIDI5Ljg0OTU2IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTUtMC05NC0wIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTM1LjA1MzQ3LDU1Ljc1MzUzIGggMjQuODg3OTYgViA0My41NjU1NiBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0zLTQtMS0xIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTM1LjA1MzQ3LDY4LjQ1MzUzIGggMjQuODg3OTYgViA1Ni4yNjU1NyBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTAtOTUtMCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDgzLjIzNzQ3LDgxLjE1MzU0IGggMjQuODg3OTUgViA2OC45NjU1OCBIIDgzLjIzNzQ3IFoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC04LTc0LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMDkuNjUzNDcsODEuMTUzNTQgaCAyNC44ODc5NiBWIDY4Ljk2NTU4IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctOC01MS0xLTUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMzUuMDUzNDcsODEuMTUzNTQgaCAyNC44ODc5NiBWIDY4Ljk2NTU4IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctNS02LTIyLTEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA4My4yMzc0Nyw5My44NTM1NSBoIDI0Ljg4Nzk1IFYgODEuNjY1NTkgSCA4My4yMzc0NyBaIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMC02LTEtOSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEwOS42NTM0Nyw5My44NTM1NSBoIDI0Ljg4Nzk2IFYgODEuNjY1NTkgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMjEtNjItNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEzNS4wNTM0Nyw5My44NTM1NSBoIDI0Ljg4Nzk2IFYgODEuNjY1NTkgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy01LTItOTYtMC0xIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gODMuMjM3NDcsMTA2LjU1MzU2IGggMjQuODg3OTUgViA5NC4zNjU2IEggODMuMjM3NDcgWiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTAtNy00LTItMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEwOS42NTM0NywxMDYuNTUzNTYgaCAyNC44ODc5NiBWIDk0LjM2NTYgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMi04LTItMSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDEzNS4wNTM0NywxMDYuNTUzNTYgaCAyNC44ODc5NiBWIDk0LjM2NTYgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItMC05LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxNjAuNDUzNDgsODEuMTUzNTQgaCAyNC44ODc5NSBWIDY4Ljk2NTU4IGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTgtOC03LTAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxNjAuNDUzNDcsNDIuMDM3NTEgaCAyNC44ODc5NiBWIDI5Ljg0OTU2IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0xLTQtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDE2MC40NTM0OCw1NS43NTM1MyBoIDI0Ljg4Nzk1IFYgNDMuNTY1NTYgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS01LTAtMy04IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTYwLjQ1MzQ3LDY4LjQ1MzUzIGggMjQuODg3OTYgViA1Ni4yNjU1NyBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi03LTItNTYtNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDE2MC40NTM0OCw5My44NTM1NSBoIDI0Ljg4Nzk1IFYgODEuNjY1NTkgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItNy0xLTI5LTEtNCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDE2MC40NTM0OCwxMDYuNTUzNTYgaCAyNC44ODc5NSBWIDk0LjM2NTYgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTItNC03LTQtOS0xIgogICAgICAgICBzdHlsZT0iZmlsbDojZTUwMzg3O2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMTg1Ljg1MzQ4LDgxLjE1MzU0IEggMjEwLjc0MTQgViA2OC45NjU1OCBoIC0yNC44ODc5MiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTItNS0wMy0yLTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlNzA0ODg7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAxODUuODUzNDgsNDIuMDM3NTEgSCAyMTAuNzQxNCBWIDI5Ljg0OTU2IGggLTI0Ljg4NzkyIHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0yLTYtMS00LTgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlNTAzODc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAxODUuODUzNDgsNTUuNzUzNTMgSCAyMTAuNzQxNCBWIDQzLjU2NTU2IGggLTI0Ljg4NzkyIHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0xLTQtMi00LTkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlNTAzODc7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAxODUuODUzNDgsNjguNDUzNTMgSCAyMTAuNzQxNCBWIDU2LjI2NTU3IGggLTI0Ljg4NzkyIHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTctNi02LTctNS02IgogICAgICAgICBzdHlsZT0iZmlsbDojZTUwMzg3O2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMTg1Ljg1MzQ4LDkzLjg1MzU1IEggMjEwLjc0MTQgViA4MS42NjU1OSBoIC0yNC44ODc5MiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi03LTEtMi0zLTctOS0wIgogICAgICAgICBzdHlsZT0iZmlsbDojZTUwMzg3O2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMTg1Ljg1MzQ4LDEwNi41NTM1NiBIIDIxMC43NDE0IFYgOTQuMzY1NiBoIC0yNC44ODc5MiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03NC01LTktNCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC0xMTMuMTkxOTIsNTUuMjQzMjcgaCAyNC44ODc5NSBWIDQzLjA1NTMgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctMTctNzMtOC03IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gLTg2Ljc3NTkyLDQxLjUyNzI1IGggMjQuODg3OTUgViAyOS4zMzkzIGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktMS0yLTEtOCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC04Ni43NzU5Miw1NS4yNDMyNyBoIDI0Ljg4Nzk1IFYgNDMuMDU1MyBoIC0yNC44ODc5NSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0xLTcyLTAtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC0xMTMuMTkxOTMsNjcuOTQzMjcgaCAyNC44ODc5NiBWIDU1Ljc1NTMxIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtMS0xMy03LTMiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtODYuNzc1OTIsNjcuOTQzMjcgaCAyNC44ODc5NSBWIDU1Ljc1NTMxIGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi02LTctNC02LTciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtNjEuMzc1OTIsNDEuNTI3MjUgaCAyNC44ODc5NiBWIDI5LjMzOTMgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNS0wLTk0LTAtNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC02MS4zNzU5Miw1NS4yNDMyNyBoIDI0Ljg4Nzk2IFYgNDMuMDU1MyBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0zLTQtMS0xLTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtNjEuMzc1OTIsNjcuOTQzMjcgaCAyNC44ODc5NiBWIDU1Ljc1NTMxIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctMC05NS0wLTMiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtMTEzLjE5MTkyLDgwLjY0MzI4IGggMjQuODg3OTUgViA2OC40NTUzMiBoIC0yNC44ODc5NSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtOC03NC0yLTciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtODYuNzc1OTIsODAuNjQzMjggaCAyNC44ODc5NSBWIDY4LjQ1NTMyIGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTctOC01MS0xLTUtMiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC02MS4zNzU5Miw4MC42NDMyOCBoIDI0Ljg4Nzk2IFYgNjguNDU1MzIgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy01LTYtMjItMS01IgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gLTExMy4xOTE5Miw5My4zNDMyOSBoIDI0Ljg4Nzk1IFYgODEuMTU1MzMgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTAtNi0xLTktMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC04Ni43NzU5Miw5My4zNDMyOSBoIDI0Ljg4Nzk1IFYgODEuMTU1MzMgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMjEtNjItNy03IgogICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gLTYxLjM3NTkyLDkzLjM0MzI5IGggMjQuODg3OTYgViA4MS4xNTUzMyBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTUtMi05Ni0wLTEtNiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC0xMTMuMTkxOTIsMTA2LjA0MzMgaCAyNC44ODc5NSBWIDkzLjg1NTM0IGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0wLTctNC0yLTMtOCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC04Ni43NzU5MiwxMDYuMDQzMyBoIDI0Ljg4Nzk1IFYgOTMuODU1MzQgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUtMi04LTItMS0xIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gLTYxLjM3NTkyLDEwNi4wNDMzIGggMjQuODg3OTYgViA5My44NTUzNCBoIC0yNC44ODc5NiB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi0wLTktMi0zIgogICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjU2OTIwNDgxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gLTM1Ljk3NTkxLDgwLjY0MzI4IGggMjQuODg3OTQgViA2OC40NTUzMiBoIC0yNC44ODc5NCB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTgtNy0wLTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtMzUuOTc1OTIsNDEuNTI3MjUgaCAyNC44ODc5NSBWIDI5LjMzOTMgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS00LTEtNC02LTQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtMzUuOTc1OTEsNTUuMjQzMjcgaCAyNC44ODc5NCBWIDQzLjA1NTMgaCAtMjQuODg3OTQgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS01LTAtMy04LTAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtMzUuOTc1OTIsNjcuOTQzMjcgaCAyNC44ODc5NSBWIDU1Ljc1NTMxIGggLTI0Ljg4Nzk1IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTctMi01Ni03LTMiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNTY5MjA0ODE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAtMzUuOTc1OTEsOTMuMzQzMjkgaCAyNC44ODc5NCBWIDgxLjE1NTMzIGggLTI0Ljg4Nzk0IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTctMS0yOS0xLTQtNSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC41NjkyMDQ4MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIC0zNS45NzU5MSwxMDYuMDQzMyBoIDI0Ljg4Nzk0IFYgOTMuODU1MzQgaCAtMjQuODg3OTQgeiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg2MTA5LTItOS02LTkiCiAgICAgICAgIGQ9Ik0gMTQuNDM5MzEsNzMuNzM1MDQgSCA2Mi4zMjg4OSIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC40NDQ2NDkxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyLWVuZDp1cmwoI0Fycm93MkxlbmQtNy02LTktNCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K" - ] + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "df['radius'] = df['circumference'] / 2.0 / math.pi\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" } }, + "source": [ + "![03_subset_rows](img/03_subset_rows.png)" + ] + }, + { "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "skip" + "slide_type": "slide" } }, "source": [ - "![05_newcolumn_1.svg](attachment:05_newcolumn_1.svg)" + "### Expand dataframe by concatenating " ] }, { @@ -2515,63 +2832,74 @@ "metadata": {}, "outputs": [], "source": [ - "import math\n", - "df['radius'] = df['circumference'] / 2.0 / math.pi\n", - "df" + "df1 = pd.DataFrame({\n", + " 'age': [1,2,3,4],\n", + " 'circumference': [2,3,5,10],\n", + " 'height': [30, 35, 40, 50]\n", + "})" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df2 = pd.DataFrame({\n", + " 'name': ['palm', 'ada', 'ek', 'olive'],\n", + " 'price': [1423, 2000, 102, 30]\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": { - "cell_marker": "'''", "slideshow": { "slide_type": "slide" } }, + "outputs": [], "source": [ - "#### Selecting rows from a dataframe by index\n", - "```py\n", - "dataframe.iloc[index]\n", - "dataframe.iloc[start:stop]\n", - "```" + "df1" ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ - "![03_subset_rows](img/03_subset_rows.png)" + "df2" ] }, { - "attachments": { - "03_subset_rows.svg": { - "image/svg+xml": [ - "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMzIwLjU2NjQ3bW0iCiAgIGhlaWdodD0iNjkuNDk0MzE2bW0iCiAgIHZpZXdCb3g9IjAgMCAzMjAuNTY2NDcgNjkuNDk0MzE2IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4OTgxIgogICBzb2RpcG9kaTpkb2NuYW1lPSIwM19zdWJzZXRfcm93cy5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNCAoZjhkY2U5MSwgMjAxOS0wOC0wMikiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM4OTc1Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MkxlbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzJMZW5kLTctNi05LTQtNi02LTEiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDcyNTMtMS00LTMtNi0wLTUtMSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gOC43MTg1ODc4LDQuMDMzNzM1MiAtMi4yMDcyODk1LDAuMDE2MDEzMjYgOC43MTg1ODg0LC00LjAwMTcwNzggYyAtMS43NDU0OTg0LDIuMzcyMDYwOSAtMS43MzU0NDA4LDUuNjE3NDUxOSAtNmUtNyw4LjAzNTQ0MyB6IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMS4xLDAsMCwtMS4xLC0xLjEsMCkiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjAuNDk0OTc0NzUiCiAgICAgaW5rc2NhcGU6Y3g9IjgzOC4yOTQ3MSIKICAgICBpbmtzY2FwZTpjeT0iMzQuODMyNDU1IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJnMTA5ODEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTU1MSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NDkiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjQ5IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNyIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTg5NzgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNi42NzI3NSwtMTE2LjM1NDAyKSI+CiAgICA8ZwogICAgICAgaWQ9ImcxMDk4MSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk5ODMyMDUsMCwwLDAuODk5MzMyNDQsLTYuOTM2MTUxNywxNS4yMTA5ODkpIgogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjExMTYyNzEiPgogICAgICA8ZwogICAgICAgICBpZD0iZzExNDUwIgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg5OTgzOTk3LDAsMCwwLjg5OTI1NzkyLC00LjM5MTU0OTMsMTUuMjIyMjQzKSIKICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjIzNTc2MDU3Ij4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xLjE0MDQzNjFlLTUpIgogICAgICAgICAgIGlkPSJnMTEzNDciCiAgICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjIzNTc2MDU3Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNS01LTYtNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gNi40OTE5NywxNTcuNzAyNCBoIDI0Ljg4Nzk0IHYgLTEyLjE4OCBIIDYuNDkxOTcgWiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctMTctNDctMy03LTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIDMyLjkwNzk2LDE0My45ODYzOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBIIDMyLjkwNzk2IFoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktMS04LTEtNS05IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0iTSAzMi45MDc5NiwxNTcuNzAyNCBIIDU3Ljc5NTkyIFYgMTQ1LjUxNDM5IEggMzIuOTA3OTYgWiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTItMS02LTQtMy01IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0iTSA2LjQ5MTk2LDE3MC40MDI0MSBIIDMxLjM3OTkxIFYgMTU4LjIxNDM5IEggNi40OTE5NiBaIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTEtMC0yMC01LTAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJNIDMyLjkwNzk2LDE3MC40MDI0MSBIIDU3Ljc5NTkyIFYgMTU4LjIxNDQgSCAzMi45MDc5NiBaIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNi03LTAtMS02LTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIDU4LjMwNzk2LDE0My45ODYzOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBIIDU4LjMwNzk2IFoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTUtMC02NC0zLTItOCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Ik0gNTguMzA3OTYsMTU3LjcwMjQgSCA4My4xOTU5MiBWIDE0NS41MTQzOSBIIDU4LjMwNzk2IFoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTMtNC0zNy0wLTktNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Ik0gNTguMzA3OTYsMTcwLjQwMjQxIEggODMuMTk1OTIgViAxNTguMjE0NCBIIDU4LjMwNzk2IFoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTgtOC0wLTItOS0yIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSA4My43MDc5NiwxNDMuOTg2MzkgaCAyNC44ODc5NiB2IC0xMi4xODggSCA4My43MDc5NiBaIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMS04LTAtMy0yIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSA4My43MDc5NiwxNTcuNzAyNCBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBIIDgzLjcwNzk2IFoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0wLTE5LTI0LTYtNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gODMuNzA3OTYsMTcwLjQwMjQxIGggMjQuODg3OTYgViAxNTguMjE0MzkgSCA4My43MDc5NiBaIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTItNS0wMS04LTYtMCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gMTA5LjEwNzk2LDE0My45ODYzOSBoIDI0Ljg4NzkzIHYgLTEyLjE4OCBoIC0yNC44ODc5MyB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMi02LTU5LTQtMi02IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAxMDkuMTA3OTYsMTU3LjcwMjQgaCAyNC44ODc5MyB2IC0xMi4xODgwMSBoIC0yNC44ODc5MyB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMS00LTctMC02LTEiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIDEwOS4xMDc5NiwxNzAuNDAyNDEgaCAyNC44ODc5MyBWIDE1OC4yMTQ0IGggLTI0Ljg4NzkzIHoiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImcxMTM3OCIKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjEuMjM1NzYwNTciPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03NC01LTUtNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZmFiYWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTIyMS42ODYzNiwxMzguNjUzMTggaCAyNC44ODc5NCB2IC0xMi4xODggaCAtMjQuODg3OTQgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctMTctNDctMy03IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FmYWJhYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTk1LjI3MDM3LDEyNC45MzcxNyBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtOC0xLTUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xOTUuMjcwMzcsMTM4LjY1MzE4IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTItMS02LTQtMyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTIyMS42ODYzNywxNTEuMzUzMTkgaCAyNC44ODc5NSB2IC0xMi4xODgwMiBoIC0yNC44ODc5NSB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTEtMC0yMC01IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTk1LjI3MDM3LDE1MS4zNTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi02LTctMC0xLTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xNjkuODcwMzcsMTI0LjkzNzE3IGggMjQuODg3OTYgdiAtMTIuMTg4IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTUtMC02NC0zLTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWRhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xNjkuODcwMzcsMTM4LjY1MzE4IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTItMy00LTM3LTAtOSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTE2OS44NzAzNywxNTEuMzUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS03LTAtNS0wLTEiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0yMjEuNjg2MzYsMTY0LjA1MzE5IGggMjQuODg3OTQgdiAtMTIuMTg3OTEgaCAtMjQuODg3OTQgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS04LTgtOC00LTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xOTUuMjcwMzcsMTY0LjA1MzE5IGggMjQuODg3OTYgdiAtMTIuMTg3OTEgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNy04LTUxLTEwLTgtNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTE2OS44NzAzNywxNjQuMDUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODc5MSBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTgtMi0wLTY3LTItMCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTE0NC40NzAzNywxNjQuMDUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODc5MSBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTgtMC0yLTkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xNDQuNDcwMzcsMTI0LjkzNzE3IGggMjQuODg3OTYgdiAtMTIuMTg4IGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0xLTgtMC0zIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FkYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDEzOC42NTMxOCBoIDI0Ljg4Nzk2IHYgLTEyLjE4OCBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMC0xOS0yNC02IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDE1MS4zNTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAyIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktOC0yLTQtNy04NS01LTAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWRhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTY0LjA1MzE5IGggMjQuODg3OTI4IHYgLTEyLjE4NzkxIGggLTI0Ljg4NzkyOCB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy04LTItNS0wMS04LTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTI0LjkzNzE3IGggMjQuODg3OTI4IHYgLTEyLjE4OCBoIC0yNC44ODc5MjggeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtOS00LTItNi01OS00LTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWRhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTM4LjY1MzE4IGggMjQuODg3OTI4IHYgLTEyLjE4ODAxIGggLTI0Ljg4NzkyOCB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMS00LTctMC02IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTE5LjA3MDM3LDE1MS4zNTMxOSBoIDI0Ljg4NzkyOCB2IC0xMi4xODgwMSBoIC0yNC44ODc5MjggeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNzQtNS04LTgtMSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTIyMS42ODYzNiwxNzYuNzUzMTggaCAyNC44ODc5NCB2IC0xMi4xODgwMSBoIC0yNC44ODc5NCB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTEtOC01LTItOCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmNhMDA7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTE5NS4yNzAzNywxNzYuNzUzMTggaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMi0xLTYtMC01LTciCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWZhYmFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0yMjEuNjg2MzcsMTg5LjQ1MzE5IGggMjQuODg3OTUgdiAtMTIuMTg4MDIgaCAtMjQuODg3OTUgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTctNS0xLTAtMi00LTkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWRhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xOTUuMjcwMzcsMTg5LjQ1MzE5IGggMjQuODg3OTYgdiAtMTIuMTg4MDEgaCAtMjQuODg3OTYgeiIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0ODkxLTEtNTAtOC0yLTEtNS0wLTY0LTItNy0yIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTY5Ljg3MDM3LDE3Ni43NTMxOCBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0yLTMtNC0zNy04LTUtMCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNhZGFiYWI7ZmlsbC1vcGFjaXR5OjAuMzkyMTU2ODY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjMyNzY5NDc7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICAgIGQ9Im0gLTE2OS44NzAzNywxODkuNDUzMTkgaCAyNC44ODc5NiB2IC0xMi4xODgwMSBoIC0yNC44ODc5NiB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItMS05LTQtMS04LTUtNS0yIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmY2EwMDtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDE3Ni43NTMxOCBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAxIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi03LTUtNS0wLTE5LTItMi0zIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2FkYWJhYjtmaWxsLW9wYWNpdHk6MC4zOTIxNTY4NjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC42MzI3Njk0NztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgICAgZD0ibSAtMTQ0LjQ3MDM3LDE4OS40NTMxOSBoIDI0Ljg4Nzk2IHYgLTEyLjE4ODAyIGggLTI0Ljg4Nzk2IHoiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDg5MS0xLTUwLTgtMi0xLTktNC0yLTYtNTktNy04LTciCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZjYTAwO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTc2Ljc1MzE4IGggMjQuODg3OTI4IHYgLTEyLjE4ODAxIGggLTI0Ljg4NzkyOCB6IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4OTEtMS01MC04LTItNy01LTUtMS00LTctMy02LTUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojYWRhYmFiO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjYzMjc2OTQ3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgICBkPSJtIC0xMTkuMDcwMzcsMTg5LjQ1MzE5IGggMjQuODg3OTI4IHYgLTEyLjE4ODAxIGggLTI0Ljg4NzkyOCB6IiAvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuNDk0MzA0Mjc7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjQXJyb3cyTGVuZC03LTYtOS00LTYtNi0xKSIKICAgICAgICAgICBkPSJtIC02OC4xNjE3MDYsMTUxLjEwODIzIGggNDcuODg5NTkiCiAgICAgICAgICAgaWQ9InBhdGg2MTA5LTItOS02LTktNyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K" - ] - } - }, - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": { "slideshow": { - "slide_type": "skip" + "slide_type": "slide" } }, + "outputs": [], "source": [ - "![03_subset_rows.svg](attachment:03_subset_rows.svg)" + "pd.concat([df1, df2], axis=1)" ] }, { - "cell_type": "code", - "execution_count": 41, + "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "slide" } }, - "outputs": [], "source": [ - "df.iloc[1:3]" + "### Selecting/filtering the dataframe by condition\n", + "e.g. \n", + "* Only trees with age larger than 100 \n", + "* Only tree with circumference shorter than 20" ] }, { @@ -2583,7 +2911,7 @@ } }, "source": [ - "#### Slightly bigger data frame of orange trees " + "### Slightly bigger data frame of orange trees " ] }, { @@ -2620,6 +2948,46 @@ "df.Tree.unique()" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Selecting with condition" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df[df['Tree'] == 1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df[df.age > 500]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df[(df.age > 500) & (df.circumference < 100)]" + ] + }, { "cell_type": "code", "execution_count": null, @@ -2638,7 +3006,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "subslide" + "slide_type": "skip" } }, "outputs": [], @@ -2657,7 +3025,8 @@ } }, "source": [ - "#### Finding the maximal circumference and then filter the data frame by it" + "### Small exercise 1\n", + "* find the maximal circumference and then filter the data frame by it" ] }, { @@ -2666,7 +3035,7 @@ "metadata": {}, "outputs": [], "source": [ - "df.head()" + "df[df.circumference == df.circumference.max() ]" ] }, { @@ -2674,7 +3043,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], @@ -2688,7 +3057,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], @@ -2701,11 +3070,11 @@ "metadata": { "cell_marker": "'''", "slideshow": { - "slide_type": "slide" + "slide_type": "skip" } }, "source": [ - "#### Filter with multiple conditions" + "### Filter with multiple conditions" ] }, { @@ -2713,7 +3082,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], @@ -2729,7 +3098,7 @@ } }, "source": [ - "## Exercise\n", + "### Small exercise 2\n", "\n", "Here's a dictionary of students and their grades:\n", "```\n", @@ -2742,16 +3111,21 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": { "slideshow": { - "slide_type": "slide" + "slide_type": "skip" } }, "outputs": [], "source": [ - "import pandas as pd\n", - "\n", "students = {'student': ['bob', 'sam', 'joe'], 'grade': [1, 3, 4]}\n", "\n", "df = pd.DataFrame(students)\n", @@ -2786,7 +3160,21 @@ "outputs": [], "source": [ "small_df = pd.read_table('../downloads/Orange_1.tsv')\n", - "small_df.plot(x='age', y='height')" + "small_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "small_df.plot(x='age', y='height', kind='line') # plot the relationship of age and height\n", + "# try with other types of plots, e.g. scatter" ] }, { @@ -2798,9 +3186,7 @@ } }, "source": [ - "#### Plotting\n", - "\n", - "What if no plot shows up?" + "### What if no plots shows up?" ] }, { @@ -2813,7 +3199,8 @@ }, "outputs": [], "source": [ - "%pylab inline # jupyter notebooks, run magic commands" + "import matplotlib.pyplot as plt\n", + "plt.show()" ] }, { @@ -2826,9 +3213,7 @@ }, "outputs": [], "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.show()" + "%matplotlib inline" ] }, { @@ -2840,7 +3225,20 @@ } }, "source": [ - "#### Plotting - bars" + "### Plotting - bars" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "small_df[['age']].plot(kind='bar')" ] }, { @@ -2848,11 +3246,11 @@ "metadata": { "cell_marker": "'''", "slideshow": { - "slide_type": "-" + "slide_type": "slide" } }, "source": [ - "- Plot a bar chart" + "### Plotting multiple columns" ] }, { @@ -2860,12 +3258,12 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "skip" + "slide_type": "-" } }, "outputs": [], "source": [ - "df[['circumference', 'age']].plot(kind='bar')" + "small_df[['circumference', 'age']].plot(kind='bar')" ] }, { @@ -2873,35 +3271,75 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], "source": [ - "df[['circumference', 'age']].plot(kind='bar')" + "df[['circumference', 'age']].plot(kind='bar', figsize=(12, 8), fontsize=16)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Plotting histogram" ] }, { "cell_type": "code", "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "small_df.plot(kind='hist', y = 'age')" + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, + "source": [ + "### Plotting box" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, "outputs": [], "source": [ - "df[['circumference', 'age']].plot(kind='bar', figsize=(12, 8), fontsize=16)" + "small_df.plot(kind='box', y = 'age')" ] }, { "cell_type": "markdown", "metadata": { - "cell_marker": "'''", "slideshow": { "slide_type": "slide" } }, + "source": [ + "Further reading: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "cell_marker": "'''", + "slideshow": { + "slide_type": "skip" + } + }, "source": [ "#### Scatterplot\n", "\n", @@ -2913,7 +3351,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, "outputs": [], "source": [ "df.plot(kind=\"scatter\", x='age', y='circumference',\n", @@ -2925,7 +3367,7 @@ "metadata": { "cell_marker": "'''", "slideshow": { - "slide_type": "slide" + "slide_type": "skip" } }, "source": [ @@ -2940,7 +3382,7 @@ "execution_count": null, "metadata": { "slideshow": { - "slide_type": "-" + "slide_type": "skip" } }, "outputs": [], @@ -2954,7 +3396,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "slide" + "slide_type": "skip" } }, "source": [ @@ -2964,7 +3406,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, "outputs": [], "source": [ "df.groupby('Tree')" @@ -2973,7 +3419,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, "outputs": [], "source": [ "df.groupby('Tree').plot(kind=\"line\", x='age', y='circumference')" @@ -2982,7 +3432,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, "outputs": [], "source": [ "df.groupby('Tree').groups" @@ -2999,23 +3453,17 @@ }, "source": [ "### Exercise 2 (~30 minutes)\n", - "\n", "- Go to Canvas, `Modules -> Day 4 -> Exercise 2 - day 4` \n", - "\n", "- **Easy**:\n", " - Explore the `Orange_1.tsv`\n", - "\n", "- **Medium/hard**:\n", " - Use Pandas to read IMDB\n", " - Explore it by making graphs\n", - " \n", "- **Extra exercises**:\n", " - Read the pandas documentation :)\n", " - Start exploring your own data\n", - "\n", - "After exercise, do Quiz 4.2 and then take a break\n", - "\n", - "After break, working on the project" + "- After exercise, do Quiz 4.2 and then take a break\n", + "- After break, working on the project" ] } ], diff --git a/lectures/Day_4.slides.embedded.html b/lectures/Day_4.slides.embedded.html index 6242606..e7e57c7 100644 --- a/lectures/Day_4.slides.embedded.html +++ b/lectures/Day_4.slides.embedded.html @@ -1,13108 +1,14493 @@ - - - + -Day_4 slides - - +Day_4 slides - - + - - - - - - - - - + + + - - + - - + + + + + + - +
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-

Start by doing today's quiz

-

Go to Canvas, Modules -> Day 4 -> Review Day 3

-

~20 minutes

+
-
-
-
-

In what ways does the type of an object matter?

    -
  • Questions 1, 2 and 3
  • -
+
-
-
-
-

In what ways does the type of an object matter?

    -
  • Each type store a specific type of information

    -
      -
    • int for integers,
    • -
    • float for floating point values (decimals),
    • -
    • str for strings,
    • -
    • list for lists,
    • -
    • dict for dictionaries.
    • -
    -
  • -
  • Each type supports different operations, functions and methods.

    -
  • -
-
-
-
+
+
-
-
-
-
    -
  • Each type supports different functions
  • -
+
+
-
-
-
-
    -
  • Each type supports different methods
  • +
+
+
-
-
-
-

Convert string to number

    -
  • Questions 4, 5 and 6
  • -
+
+
+
-
-
-
-

Convert to boolean: 1, 0, '1', '0', '', {}

    -
  • Question 7
  • +
+
-
-
-
-
    -
  • Python and the truth: true and false values
  • -
+
+
-
-
-
+
-
-
-
In [ ]:
-
-
-
1 == True
-
-
-
-
-
-
-
-
In [ ]:
-
-
-
x = 1
-if x is True:
-    print(repr(x), 'is true!')
-else:
-    print(repr(x), 'is false!')
-
+
+
+
+
-
-
-
-

Container types, when should you use which? (Question 8)

    -
  • lists: when order is important
  • -
  • dictionaries: to keep track of the relation between keys and values
  • -
  • sets: to check for membership. No order, no duplicates.
  • +
-
-
-
In [43]:
-
-
-
genre_list = ["comedy", "drama", "drama", "sci-fi"]
-genre_list
-
+
+
+
-
-
-
-

Python syntax (Question 9)

+
+
-
-
-
-

Converting between strings and lists

    -
  • Question 10
  • +
-
-
-
In [ ]:
-
-
-
list("hello")
-
+
+
-
-
-
-

What is a function?

    -
  • A named piece of code that performs a specific task
  • -
  • A relation (mapping) between inputs (arguments) and output (return value)
  • -
+
-
-
-
-

TODAY

    -
  • More on functions:
      -
    • scop of variables
    • -
    • positional arguments and keyword arguments
    • -
    • return statement
    • -
    -
  • -
  • Reusing code:
      -
    • comments and documentation
    • -
    • importing modules: using libraries
    • -
    -
  • -
  • Pandas - explore your data!
  • -
-
-
-
-
-
-

More on functions: scope - global vs local variables

    -
  • Global variables can be accessed inside the function
  • +
+
-
-
-
-
    -
  • Change in the function will not change the global variable
  • -
-
+
+
-
-
-
-
    -
  • Pass global variable as argument
  • +
+
-
-
-
-

More on functions: scope - global vs local variables cont.

List as global variables

-
-
-
-
-
-
In [ ]:
-
-
-
MOVIES = ['Toy story', 'Home alone']
-
-def change_movie():
-    MOVIES = ['Fargo', 'The Usual Suspects']
-    print(f'MOVIES inside the function = {MOVIES}')
-
-print(f'MOVIES outside the function before change = {MOVIES}')
-change_movie()
-print(f'MOVIES outside the function after change  = {MOVIES}')
-
+
+
-
-
-
-

Will the global variable never to changed by function?

+
-
-
-
-

More on functions: return statement

A function that counts the number of occurences of 'C' in the argument string.

+