{ "cells": [ { "cell_type": "markdown", "id": "59db57ac-d174-4c88-b395-2204273a30f1", "metadata": {}, "source": [ "# Using Python for learning statistics Part 1" ] }, { "cell_type": "markdown", "id": "282bf6aa-0555-4852-9a6b-1b58eb935b1c", "metadata": {}, "source": [ "This Juppyter notebook contains the code examples form the blog post [Python coding skills for statistics Part 1](https://docs.google.com/document/d/16WJnYeezBevUBvsYpbklW04ukvrtG_8QVdfsbd15pqg/edit).\n", "\n", "I've intentionally left empty code cells throughout the notebook,\n", "which you can use to try some Python commands on your own.\n", "For example,\n", "you can copy-paste some of the commands in previous cells,\n", "modify them and run to see what happens.\n", "Try to break things, that's the best way to learn!\n", "\n", "**To run a code cell, press** the play button in the menu bar, or use the keyboard shortcut **SHIFT+ENTER**." ] }, { "cell_type": "code", "execution_count": null, "id": "ed5832a3-6014-47df-96f9-f0d969c94077", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3f689330-7def-4935-be79-520d1c0190b6", "metadata": {}, "source": [ "## What can python do for you?" ] }, { "cell_type": "markdown", "id": "7bf445c3-2d7c-48ac-90be-84417d51f685", "metadata": {}, "source": [ "### Using Python as a calculator" ] }, { "cell_type": "code", "execution_count": 1, "id": "6ff440f2-f2c4-4821-8af0-1bec72c2b608", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "5.5" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2.1 + 3.4" ] }, { "cell_type": "code", "execution_count": 2, "id": "a5d156a0-ac2f-4271-95e6-1f22f499b535", "metadata": {}, "outputs": [], "source": [ "num1 = 2.1" ] }, { "cell_type": "code", "execution_count": 3, "id": "1d87588a-e92e-4225-9ace-dbe533c4f4f6", "metadata": {}, "outputs": [], "source": [ "num2 = 3.4" ] }, { "cell_type": "code", "execution_count": 4, "id": "a7eaa89b-cf12-477c-94b6-30641373ea55", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.5" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num1 + num2" ] }, { "cell_type": "code", "execution_count": null, "id": "27790060-6a22-4f9f-93e4-b85ff7273287", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "678eddd7-8f7e-483b-ab28-eb28db48c6bd", "metadata": {}, "source": [ "Let's now compute the avarage of the numbers `num1` and `num2`." ] }, { "cell_type": "code", "execution_count": 5, "id": "305c829d-680e-4652-8399-2f55b40bee57", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "2.75" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(num1 + num2) / 2" ] }, { "cell_type": "code", "execution_count": null, "id": "08222c31-5369-4801-b65b-4733726f534b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d84a4c83-e628-4d28-a559-883c3af78a13", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a63a1efe-8635-45a9-8beb-9c9d05fad193", "metadata": {}, "source": [ "### Powerful primitives and builtin functions" ] }, { "cell_type": "code", "execution_count": 6, "id": "57b9fab6-d2bd-4ebf-a191-eb83f81d6a0b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "75.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grades = [80, 90, 70, 60]\n", "avg = sum(grades) / len(grades)\n", "avg" ] }, { "cell_type": "code", "execution_count": null, "id": "1e3e7128-4902-4ee8-b83b-0e2bbfc31764", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "719d9567-6585-4794-89ba-e314cc8e148e", "metadata": {}, "source": [ "### For loops" ] }, { "cell_type": "code", "execution_count": 7, "id": "e097b267-e125-4f0f-bb06-5e6ef837fb48", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "75.0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total = 0\n", "for grade in grades:\n", " total = total + grade\n", "avg = total / len(grades)\n", "avg" ] }, { "cell_type": "code", "execution_count": null, "id": "31dca516-7c74-42a8-9b93-44098a0249df", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "960b0808-0fff-47eb-9d7e-9069d3074c14", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### Functions" ] }, { "cell_type": "markdown", "id": "92fff3a7-8337-4f7a-945d-80b93292f18e", "metadata": {}, "source": [ "Python functions are ..." ] }, { "cell_type": "markdown", "id": "31e5063f-59da-423e-a7ba-60f9e1906af3", "metadata": {}, "source": [ "To **define** the Python function,\n", "we use the `def` keyword followed by the function name,\n", "then we then specify the function input in parentheses,\n", "and end with the symbol `:`,\n", "which tells us \"body\" of the function is about to start.\n", "The function body is a four-spaces-indented code block that specifies all the\n", "calculations the function performs,\n", "and ends with a `return` statement for the output of the function.\n", "\n", "```\n", "def ():\n", " \n", " \n", " \n", " return \n", "```" ] }, { "cell_type": "markdown", "id": "f5142273-ad49-459a-8b55-32ffccee1db1", "metadata": {}, "source": [ "#### Example 1: sample mean\n", "\n", "We want to define a Python function `mean` that computes the mean from a given sample (a list of values).\n", "\n", "The mathematical definition of the mean is $\\mathbf{Mean}(\\mathbf{x}) = \\frac{1}{n} \\sum_{i=1}^{i=n} x_i$,\n", "where $\\mathbf{x} = [x_1, x_2, x_3, \\ldots, x_n]$ is a sample of size $n$ (a list of values).\n", "\n", "The code for the function is as follows:" ] }, { "cell_type": "code", "execution_count": 8, "id": "ab6e7d58-79f9-4afd-9f85-b814b45eb1bb", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "def mean(values):\n", " total = 0\n", " for value in values:\n", " total = total + value\n", " avg = total / len(values)\n", " return avg" ] }, { "cell_type": "markdown", "id": "346a10de-ad20-425a-b65b-c471874a7d3e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "To **call** the function `mean` with input `grades`, we use the Python code `mean(grades)`." ] }, { "cell_type": "code", "execution_count": 9, "id": "ab56d567-0758-4b70-9b97-fb2cd1283deb", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "75.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grades = [80, 90, 70, 60]\n", "mean(grades)" ] }, { "cell_type": "code", "execution_count": null, "id": "bf781976-47b4-4a89-9f99-fdda0c48dd8a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "795538a1-fa68-43c8-b8ce-461d67d57842", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "#### Exmample 2: math function (bonus topic)\n", "\n", "In math, \n", "a function is a mapping from input values (usually denoted x) to output values (usually denoted y).\n", "Consider the mapping that doubles the input and adds five to it,\n", "which we can express as the math function $f(x) = 2x+5$.\n", "For any input $x$,\n", "the output of the function $f$ is denoted $f(x)$ and is equal to $2x+5$.\n", "For example, $f(3)$ describes the output of the function when the input is $x=3$,\n", "and it is equal to $2(3)+5 = 6 + 5 = 11$.\n", "The Python equivalent of the math function $f(x) = 2x+5$ is shown below. " ] }, { "cell_type": "code", "execution_count": 10, "id": "00fd3024-4329-4899-af02-2023a5e722f1", "metadata": {}, "outputs": [], "source": [ "def f(x):\n", " y = 2*x + 5\n", " return y" ] }, { "cell_type": "markdown", "id": "87abe9ef-97b1-4744-816b-7619539eff4e", "metadata": {}, "source": [ "To **call** the function `f` with input `x`, we simply writhe `f(x)` in Python,\n", "which is the same as the math notation we use for \"evaluate the function at the value x.\"" ] }, { "cell_type": "code", "execution_count": 11, "id": "88d9656c-913f-4617-999b-d98460ec070d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "11" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(3)" ] }, { "cell_type": "code", "execution_count": null, "id": "5c4a84ba-e05d-4714-a525-8a2640147321", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2483aa87-3da4-4b21-9f1c-be9899ba851f", "metadata": {}, "source": [ "## Why do you need coding for statistics?" ] }, { "cell_type": "markdown", "id": "3fdcf50f-49c5-4368-a924-ce53289cf298", "metadata": {}, "source": [ "### Data visualization" ] }, { "cell_type": "code", "execution_count": 12, "id": "a70a4bc4-50a7-4b50-8706-b2295bf57eb4", "metadata": {}, "outputs": [], "source": [ "prices = [11.8, 10, 11, 8.6, 8.3, 9.4, 8, 6.8, 8.5]" ] }, { "cell_type": "code", "execution_count": 13, "id": "5891ee22-6a6c-416d-a1bb-b283bb6a6519", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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rV+/vvbu3TuYYRexz9vzjh07asOGDbVq1arqdDr15ptvDmTOxW62PX/yySd166231oUXXlgrVqyoiYmJuuGGG+rQoUNzvk7rouH111+vv//97zO3F154oaqqfvrTnw54snbZunVrPfzww/XAAw/UO++8U1u3bq177rmnfve73w16tNb5xS9+US+88EJt37693n777dqwYUOtX7++/va3vw16tEXt+PHjddFFF9WDDz74mV+/55576v77769HHnmkXn311VqxYkVdccUV9eGHH/Z50sXt8/Z8/Pjx+u53v1tbt27t82TtMtueT5w4Ubt3764tW7bU7t27a8eOHbVnz576wQ9+MPcLNS130003NevWrWump6cHPUqrXHXVVc2mTZtOO/bjH/+4uf766wc0UTudOHGiWbp0afP888+fdvySSy5pbr/99gFN1T5V1Tz77LMz/z09Pd2MjY01995778yxo0ePNkNDQ81TTz01gAnb4d/3/K/279/fVFXzxhtv9HWmNpptz6e89tprTVU1Bw4cmNO5W/dOw7/6+OOP6/HHH69NmzYtyF+qtZhddtll9dJLL9W7775bVVVvvfVWvfzyy3XllVcOeLJ2+cc//lEnT56sZcuWnXZ8+fLl9fLLLw9oqvbbv39/HT58uNavXz9zbOXKlfWd73ynXnnllQFOBr1x7Nix6nQ69dWvfnVO95v3L6xaDJ577rk6evRo3XjjjYMepXVuu+226na7df7559fSpUvr5MmTddddd9X1118/6NFaZXh4uC699NK6884769vf/naNjo7WU089Va+88kqde+65gx6vtQ4fPlxVVaOjo6cdHx0dnfkaLFYffvhh3XrrrXXdddfN+ZeFtfqdhkcffbSuvPLKmpiYGPQorfPMM8/UE088UU8++WTt3r27HnvssbrvvvvqscceG/RorbN9+/Zqmqa+/vWv19DQUN1///113XXXzflX2gJ88skn9bOf/ayapqmHH354zvdv7TsNBw4cqBdffLF27Ngx6FFa6ZZbbqnbbrutrr322qqquvDCC+vAgQN1991318aNGwc8XbusW7eu/vjHP9bx48er2+3W+Ph4XXPNNbV27dpBj9ZaY2NjVVV15MiRGh8fnzl+5MiRuvjiiwc0FXwxp4LhwIED9fvf/35ev5K8tX9U2bZtW33ta1+rq666atCjtNKJEyc+9SfdpUuX1vT09IAmar8VK1bU+Ph4vf/++7Vz58764Q9/OOiRWmvNmjU1NjZWL7300syxbrdbr776al166aUDnAzm51Qw7N27t1588cVatWrVvM7Tyncapqena9u2bbVx48Y644xWPsSBu/rqq+uuu+6q1atX1wUXXFBvvPFG/fa3v61NmzYNerTW2blzZzVNU9/61rdq3759dcstt9T5559fP//5zwc92qL2wQcf1L59+2b+e//+/fXmm2/WWWedVatXr66bb765fvOb39R5551Xa9asqS1bttTExET96Ec/GtzQi9Dn7fm9996rv/71rzP/ZsCePXuq6p/v9px6x4fPN9uex8fH6yc/+Unt3r27nn/++Tp58uTMZ3POOuusOvPMM/MLzfdHOhaynTt3NlXV7NmzZ9CjtFa3221uuummZvXq1c2yZcuatWvXNrfffnvz0UcfDXq01nn66aebtWvXNmeeeWYzNjbWbN68uTl69Oigx1r0du3a1VTVp24bN25smuafP3a5ZcuWZnR0tBkaGmouv/xy/0+Zh8/b87Zt2z7z63fcccdA515sZtvzqR9n/azbrl275nQdvxobAIi09jMNAEBviQYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACL/B/y6ZpnmPzipAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.stripplot(x=prices, jitter=0)" ] }, { "cell_type": "code", "execution_count": 14, "id": "02caade4-678c-4681-893b-04e22a865903", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGdCAYAAAD0e7I1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAl6UlEQVR4nO3df3RU9Z3/8dfwa4JKUhBJAiQQhIbwK/wQddI9C2okUpaS07Osy9duIgpn9QSFZg/aVJEC9YzWQqRLlh9bIa5sxNpC7HEp2RCMLJuIQJIWqLCySzMRM8EUyJAAA2bm+4eHaackkYRkbuaT5+Oce07nzr133nOL8Dw3dzI2v9/vFwAAgKF6WT0AAABAVyJ2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABitj9UDhJrP59Pnn3+uAQMGyGazWT0OAAC4CX6/XxcvXtTQoUPVq1f7rtX0uNj5/PPPFRcXZ/UYAACgA2pqajR8+PB27dPjYmfAgAGSvjpZkZGRFk8DAABuhsfjUVxcXODf8fbocbFz/UdXkZGRxA4AAGGmI7egcIMyAAAwGrEDAACMRuwAAACjETsAAMBoxA4AADAasQMAAIxG7AAAAKMROwAAwGjEDgAAMBqxAwAAjNZtYueVV16RzWbTsmXL2tzu3Xff1dixYxUREaGJEydq9+7doRkQAACEpW4RO4cOHdLmzZs1adKkNrcrKyvTggUL9OSTT6qyslLp6elKT0/XsWPHQjQpAAAIN5bHTmNjox577DH967/+qwYOHNjmtuvXr9cjjzyi5cuXKykpSWvWrNHUqVO1YcOGEE0LAADCjeXfep6VlaU5c+YoNTVVP/7xj9vctry8XNnZ2UHr0tLSVFhY2Oo+Xq9XXq838Njj8dzSvOgeXC6X6uvrrR7DeIMHD1Z8fLzVYwDALbE0dnbs2KGKigodOnToprZ3u92Kjo4OWhcdHS23293qPk6nU6tWrbqlOdG9uFwujR2bpMuXL1k9ivH6979NJ058QvAACGuWxU5NTY2WLl2q4uJiRUREdNnr5OTkBF0N8ng8iouL67LXQ9err6/X5cuXdN8TKxUZO9LqcYzlqf2DDm5dpfr6emIHQFizLHaOHDmis2fPaurUqYF1zc3N2r9/vzZs2CCv16vevXsH7RMTE6O6urqgdXV1dYqJiWn1dex2u+x2e+cOj24hMnakBsUnWj0GAKCbs+wG5YceekhHjx5VVVVVYLnnnnv02GOPqaqq6obQkSSHw6GSkpKgdcXFxXI4HKEaGwAAhBnLruwMGDBAEyZMCFp3++2368477wysz8jI0LBhw+R0OiVJS5cu1YwZM7R27VrNmTNHO3bs0OHDh7Vly5aQzw8AAMKD5R89b4vL5VJtbW3gcUpKigoKCrRlyxYlJyfrl7/8pQoLC2+IJgAAgOss/+j5nystLW3zsSTNnz9f8+fPD81AAAAg7HXrKzsAAAC3itgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGM3S2Nm4caMmTZqkyMhIRUZGyuFw6De/+U2r2+fn58tmswUtERERIZwYAACEmz5Wvvjw4cP1yiuvaMyYMfL7/XrzzTc1b948VVZWavz48S3uExkZqZMnTwYe22y2UI0LAADCkKWxM3fu3KDHL7/8sjZu3KiPPvqo1dix2WyKiYkJxXgAAMAA3eaenebmZu3YsUNNTU1yOBytbtfY2KgRI0YoLi5O8+bN0/Hjx9s8rtfrlcfjCVoAAEDPYXnsHD16VHfccYfsdrueeuop7dq1S+PGjWtx28TERG3dulXvvfeetm/fLp/Pp5SUFH322WetHt/pdCoqKiqwxMXFddVbAQAA3ZDlsZOYmKiqqiodPHhQTz/9tDIzM/X73/++xW0dDocyMjI0efJkzZgxQzt37tRdd92lzZs3t3r8nJwcNTQ0BJaampqueisAAKAbsvSeHUnq16+fRo8eLUmaNm2aDh06pPXr17cZMNf17dtXU6ZM0alTp1rdxm63y263d9q8AAAgvFh+Zecv+Xw+eb3em9q2ublZR48eVWxsbBdPBQAAwpWlV3ZycnI0e/ZsxcfH6+LFiyooKFBpaamKiookSRkZGRo2bJicTqckafXq1br//vs1evRoXbhwQa+99pqqq6u1aNEiK98GAADoxiyNnbNnzyojI0O1tbWKiorSpEmTVFRUpIcffliS5HK51KvXny4+nT9/XosXL5bb7dbAgQM1bdo0lZWVtXpDMwAAgKWx88Ybb7T5fGlpadDj3Nxc5ebmduFEAADANN3unh0AAIDOROwAAACjETsAAMBoxA4AADAasQMAAIxG7AAAAKMROwAAwGjEDgAAMBqxAwAAjEbsAAAAoxE7AADAaMQOAAAwGrEDAACMRuwAAACjETsAAMBoxA4AADAasQMAAIxG7AAAAKMROwAAwGjEDgAAMBqxAwAAjEbsAAAAoxE7AADAaMQOAAAwGrEDAACMRuwAAACjETsAAMBoxA4AADAasQMAAIxG7AAAAKMROwAAwGjEDgAAMBqxAwAAjGZp7GzcuFGTJk1SZGSkIiMj5XA49Jvf/KbNfd59912NHTtWERERmjhxonbv3h2iaQEAQDiyNHaGDx+uV155RUeOHNHhw4f14IMPat68eTp+/HiL25eVlWnBggV68sknVVlZqfT0dKWnp+vYsWMhnhwAAIQLS2Nn7ty5+va3v60xY8bom9/8pl5++WXdcccd+uijj1rcfv369XrkkUe0fPlyJSUlac2aNZo6dao2bNgQ4skBAEC46Db37DQ3N2vHjh1qamqSw+FocZvy8nKlpqYGrUtLS1N5eXmrx/V6vfJ4PEELAADoOSyPnaNHj+qOO+6Q3W7XU089pV27dmncuHEtbut2uxUdHR20Ljo6Wm63u9XjO51ORUVFBZa4uLhOnR8AAHRvlsdOYmKiqqqqdPDgQT399NPKzMzU73//+047fk5OjhoaGgJLTU1Npx0bAAB0f32sHqBfv34aPXq0JGnatGk6dOiQ1q9fr82bN9+wbUxMjOrq6oLW1dXVKSYmptXj2+122e32zh0aAACEDcuv7Pwln88nr9fb4nMOh0MlJSVB64qLi1u9xwcAAMDSKzs5OTmaPXu24uPjdfHiRRUUFKi0tFRFRUWSpIyMDA0bNkxOp1OStHTpUs2YMUNr167VnDlztGPHDh0+fFhbtmyx8m0AAIBuzNLYOXv2rDIyMlRbW6uoqChNmjRJRUVFevjhhyVJLpdLvXr96eJTSkqKCgoK9OKLL+qHP/yhxowZo8LCQk2YMMGqtwAAALo5S2PnjTfeaPP50tLSG9bNnz9f8+fP76KJAACAabrdPTsAAACdidgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGM3S2HE6nZo+fboGDBigIUOGKD09XSdPnmxzn/z8fNlstqAlIiIiRBMDAIBwY2nsfPjhh8rKytJHH32k4uJiXbt2TbNmzVJTU1Ob+0VGRqq2tjawVFdXh2hiAAAQbvpY+eJ79uwJepyfn68hQ4boyJEj+uu//utW97PZbIqJienq8QAAgAG61T07DQ0NkqRBgwa1uV1jY6NGjBihuLg4zZs3T8ePH291W6/XK4/HE7QAAICeo9vEjs/n07Jly/Stb31LEyZMaHW7xMREbd26Ve+99562b98un8+nlJQUffbZZy1u73Q6FRUVFVji4uK66i0AAIBuqNvETlZWlo4dO6YdO3a0uZ3D4VBGRoYmT56sGTNmaOfOnbrrrru0efPmFrfPyclRQ0NDYKmpqemK8QEAQDdl6T071y1ZskTvv/++9u/fr+HDh7dr3759+2rKlCk6depUi8/b7XbZ7fbOGBMAAIQhS6/s+P1+LVmyRLt27dK+ffuUkJDQ7mM0Nzfr6NGjio2N7YIJAQBAuLP0yk5WVpYKCgr03nvvacCAAXK73ZKkqKgo9e/fX5KUkZGhYcOGyel0SpJWr16t+++/X6NHj9aFCxf02muvqbq6WosWLbLsfQAAgO7L0tjZuHGjJGnmzJlB67dt26bHH39ckuRyudSr158uQJ0/f16LFy+W2+3WwIEDNW3aNJWVlWncuHGhGhsAAIQRS2PH7/d/7TalpaVBj3Nzc5Wbm9tFEwEAANN0m09jAQAAdAViBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABitQ7EzatQo/fGPf7xh/YULFzRq1KhbHgoAAKCzdCh2/vCHP6i5ufmG9V6vV2fOnLnloQAAADpLu74I9Ne//nXgfxcVFSkqKirwuLm5WSUlJRo5cmSnDQcAAHCr2hU76enpkiSbzabMzMyg5/r27auRI0dq7dq1nTYcAADArWpX7Ph8PklSQkKCDh06pMGDB3fJUAAAAJ2lXbFz3enTpzt7DgAAgC7RodiRpJKSEpWUlOjs2bOBKz7Xbd269ZYHAwAA6Awdip1Vq1Zp9erVuueeexQbGyubzdbZcwEAAHSKDsXOpk2blJ+fr3/4h3/o7HkAAAA6VYd+z87Vq1eVkpLS2bMAAAB0ug7FzqJFi1RQUNDZswAAAHS6Dv0Y68qVK9qyZYv27t2rSZMmqW/fvkHPr1u3rlOGAwAAuFUdip3f/e53mjx5siTp2LFjQc9xszIAAOhOOhQ7H3zwQWfPAQAA0CU6dM8OAABAuOjQlZ0HHnigzR9X7du3r8MDAQAAdKYOxc71+3Wuu3btmqqqqnTs2LEbviAUAADASh2Kndzc3BbX/+hHP1JjY+MtDQQAANCZOvWene9973t8LxYAAOhWOjV2ysvLFRER0ZmHBAAAuCUd+jHWd7/73aDHfr9ftbW1Onz4sFasWNEpgwEAAHSGDsVOVFRU0ONevXopMTFRq1ev1qxZszplMAAAgM7QodjZtm1bZ88BAADQJW7pnp0jR45o+/bt2r59uyorK9u9v9Pp1PTp0zVgwAANGTJE6enpOnny5Nfu9+6772rs2LGKiIjQxIkTtXv37o6MDwAAeoAOxc7Zs2f14IMPavr06Xr22Wf17LPPatq0aXrooYf0xRdf3PRxPvzwQ2VlZemjjz5ScXGxrl27plmzZqmpqanVfcrKyrRgwQI9+eSTqqysVHp6utLT02/4ji4AAACpg7HzzDPP6OLFizp+/LjOnTunc+fO6dixY/J4PHr22Wdv+jh79uzR448/rvHjxys5OVn5+flyuVw6cuRIq/usX79ejzzyiJYvX66kpCStWbNGU6dO1YYNGzryVgAAgOE6dM/Onj17tHfvXiUlJQXWjRs3Tnl5ebd0g3JDQ4MkadCgQa1uU15eruzs7KB1aWlpKiwsbHF7r9crr9cbeOzxeDo8HwAgvLlcLtXX11s9hvEGDx6s+Ph4q8cI6FDs+Hw+9e3b94b1ffv2lc/n69AgPp9Py5Yt07e+9S1NmDCh1e3cbreio6OD1kVHR8vtdre4vdPp1KpVqzo0EwDAHC6XS2PHJuny5UtWj2K8/v1v04kTn3Sb4OlQ7Dz44INaunSp3n77bQ0dOlSSdObMGX3/+9/XQw891KFBsrKydOzYMR04cKBD+7cmJycn6EqQx+NRXFxcp74GAKD7q6+v1+XLl3TfEysVGTvS6nGM5an9gw5uXaX6+vrwjp0NGzboO9/5jkaOHBkIh5qaGk2YMEHbt29v9/GWLFmi999/X/v379fw4cPb3DYmJkZ1dXVB6+rq6hQTE9Pi9na7XXa7vd0zAQDMFBk7UoPiE60eAyHUodiJi4tTRUWF9u7dqxMnTkiSkpKSlJqa2q7j+P1+PfPMM9q1a5dKS0uVkJDwtfs4HA6VlJRo2bJlgXXFxcVyOBztem0AANAztOvTWPv27dO4cePk8Xhks9n08MMP65lnntEzzzyj6dOna/z48fqv//qvmz5eVlaWtm/froKCAg0YMEBut1tut1uXL18ObJORkaGcnJzA46VLl2rPnj1au3atTpw4oR/96Ec6fPiwlixZ0p63AgAAeoh2xc7rr7+uxYsXKzIy8obnoqKi9I//+I9at27dTR9v48aNamho0MyZMxUbGxtY3nnnncA2LpdLtbW1gccpKSkqKCjQli1blJycrF/+8pcqLCxs86ZmAADQc7Xrx1i//e1v9eqrr7b6/KxZs/TTn/70po/n9/u/dpvS0tIb1s2fP1/z58+/6dcBAAA9V7uu7NTV1bX4kfPr+vTp067foAwAANDV2hU7w4YNa/NrGX73u98pNjb2locCAADoLO2KnW9/+9tasWKFrly5csNzly9f1sqVK/U3f/M3nTYcAADArWrXPTsvvviidu7cqW9+85tasmSJEhO/+j0FJ06cUF5enpqbm/XCCy90yaAAAAAd0a7YiY6OVllZmZ5++mnl5OQEbjC22WxKS0tTXl7eDV/lAAAAYKV2/1LBESNGaPfu3Tp//rxOnTolv9+vMWPGaODAgV0xHwAAwC3p0G9QlqSBAwdq+vTpnTkLAABAp2vXDcoAAADhhtgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGszR29u/fr7lz52ro0KGy2WwqLCxsc/vS0lLZbLYbFrfbHZqBAQBA2LE0dpqampScnKy8vLx27Xfy5EnV1tYGliFDhnTRhAAAINz1sfLFZ8+erdmzZ7d7vyFDhugb3/hG5w8EAACME5b37EyePFmxsbF6+OGH9d///d9tbuv1euXxeIIWAADQc4RV7MTGxmrTpk361a9+pV/96leKi4vTzJkzVVFR0eo+TqdTUVFRgSUuLi6EEwMAAKtZ+mOs9kpMTFRiYmLgcUpKiv73f/9Xubm5euutt1rcJycnR9nZ2YHHHo+H4AEAoAcJq9hpyb333qsDBw60+rzdbpfdbg/hRAAAoDsJqx9jtaSqqkqxsbFWjwEAALopS6/sNDY26tSpU4HHp0+fVlVVlQYNGqT4+Hjl5OTozJkz+rd/+zdJ0uuvv66EhASNHz9eV65c0c9//nPt27dP//mf/2nVWwAAAN2cpbFz+PBhPfDAA4HH1++tyczMVH5+vmpra+VyuQLPX716Vf/0T/+kM2fO6LbbbtOkSZO0d+/eoGMAAAD8OUtjZ+bMmfL7/a0+n5+fH/T4ueee03PPPdfFUwEAAJOE/T07AAAAbSF2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEazNHb279+vuXPnaujQobLZbCosLPzafUpLSzV16lTZ7XaNHj1a+fn5XT4nAAAIX5bGTlNTk5KTk5WXl3dT258+fVpz5szRAw88oKqqKi1btkyLFi1SUVFRF08KAADCVR8rX3z27NmaPXv2TW+/adMmJSQkaO3atZKkpKQkHThwQLm5uUpLS+uqMQEAQBizNHbaq7y8XKmpqUHr0tLStGzZslb38Xq98nq9gccej6erxpMkuVwu1dfXd+lr9HSffPKJ1SP0KJzvruf1emW3260ew3j8We65wip23G63oqOjg9ZFR0fL4/Ho8uXL6t+//w37OJ1OrVq1KiTzuVwujR2bpMuXL4Xk9Xq6a96rVo9gtMsNf5Rk0/e+9z2rRzGfzSb5/VZP0WPwd0fPE1ax0xE5OTnKzs4OPPZ4PIqLi+uS16qvr9fly5d03xMrFRk7skteA1Lt0XId+/UWffnll1aPYrRrly5K8mvy/3tedyWMtXocY13/88x57nr83dFzhVXsxMTEqK6uLmhdXV2dIiMjW7yqI0l2uz3kl4cjY0dqUHxiSF+zJ/HU/sHqEXqUO4bE8+e5C13/88x57nr83dFzhdXv2XE4HCopKQlaV1xcLIfDYdFEAACgu7M0dhobG1VVVaWqqipJX320vKqqSi6XS9JXP4LKyMgIbP/UU0/p//7v//Tcc8/pxIkT+pd/+Rf94he/0Pe//30rxgcAAGHA0tg5fPiwpkyZoilTpkiSsrOzNWXKFL300kuSpNra2kD4SFJCQoL+4z/+Q8XFxUpOTtbatWv185//nI+dAwCAVll6z87MmTPlb+MTCC39duSZM2eqsrKyC6cCAAAmCat7dgAAANqL2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYrVvETl5enkaOHKmIiAjdd999+vjjj1vdNj8/XzabLWiJiIgI4bQAACCcWB4777zzjrKzs7Vy5UpVVFQoOTlZaWlpOnv2bKv7REZGqra2NrBUV1eHcGIAABBOLI+ddevWafHixVq4cKHGjRunTZs26bbbbtPWrVtb3cdmsykmJiawREdHh3BiAAAQTiyNnatXr+rIkSNKTU0NrOvVq5dSU1NVXl7e6n6NjY0aMWKE4uLiNG/ePB0/frzVbb1erzweT9ACAAB6Dktjp76+Xs3NzTdcmYmOjpbb7W5xn8TERG3dulXvvfeetm/fLp/Pp5SUFH322Wctbu90OhUVFRVY4uLiOv19AACA7svyH2O1l8PhUEZGhiZPnqwZM2Zo586duuuuu7R58+YWt8/JyVFDQ0NgqampCfHEAADASn2sfPHBgwerd+/eqqurC1pfV1enmJiYmzpG3759NWXKFJ06darF5+12u+x2+y3PCgAAwpOlV3b69eunadOmqaSkJLDO5/OppKREDofjpo7R3Nyso0ePKjY2tqvGBAAAYczSKzuSlJ2drczMTN1zzz2699579frrr6upqUkLFy6UJGVkZGjYsGFyOp2SpNWrV+v+++/X6NGjdeHCBb322muqrq7WokWLrHwbAACgm7I8dh599FF98cUXeumll+R2uzV58mTt2bMncNOyy+VSr15/ugB1/vx5LV68WG63WwMHDtS0adNUVlamcePGWfUWAABAN2Z57EjSkiVLtGTJkhafKy0tDXqcm5ur3NzcEEwFAABMEHafxgIAAGgPYgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGI3YAQAARiN2AACA0YgdAABgtG4RO3l5eRo5cqQiIiJ033336eOPP25z+3fffVdjx45VRESEJk6cqN27d4doUgAAEG4sj5133nlH2dnZWrlypSoqKpScnKy0tDSdPXu2xe3Lysq0YMECPfnkk6qsrFR6errS09N17NixEE8OAADCgeWxs27dOi1evFgLFy7UuHHjtGnTJt12223aunVri9uvX79ejzzyiJYvX66kpCStWbNGU6dO1YYNG0I8OQAACAd9rHzxq1ev6siRI8rJyQms69Wrl1JTU1VeXt7iPuXl5crOzg5al5aWpsLCwha393q98nq9gccNDQ2SJI/Hc4vT36ixsVGSdK76pL70Xu704+MrntpqSVLDmU/Vt4/N4mnMxXkODc5z6HCuQ8Pjdkn66t/Ezvy39vqx/H5/+3f2W+jMmTN+Sf6ysrKg9cuXL/ffe++9Le7Tt29ff0FBQdC6vLw8/5AhQ1rcfuXKlX5JLCwsLCwsLAYsNTU17e4NS6/shEJOTk7QlSCfz6dz587pzjvvlM3WPcve4/EoLi5ONTU1ioyMtHocY3GeQ4PzHBqc59DhXIfGX55nv9+vixcvaujQoe0+lqWxM3jwYPXu3Vt1dXVB6+vq6hQTE9PiPjExMe3a3m63y263B637xje+0fGhQygyMpL/kEKA8xwanOfQ4DyHDuc6NP78PEdFRXXoGJbeoNyvXz9NmzZNJSUlgXU+n08lJSVyOBwt7uNwOIK2l6Ti4uJWtwcAAD2b5T/Gys7OVmZmpu655x7de++9ev3119XU1KSFCxdKkjIyMjRs2DA5nU5J0tKlSzVjxgytXbtWc+bM0Y4dO3T48GFt2bLFyrcBAAC6Kctj59FHH9UXX3yhl156SW63W5MnT9aePXsUHR0tSXK5XOrV608XoFJSUlRQUKAXX3xRP/zhDzVmzBgVFhZqwoQJVr2FTme327Vy5cobfvyGzsV5Dg3Oc2hwnkOHcx0anXmebX5/Rz7DBQAAEB4s/6WCAAAAXYnYAQAARiN2AACA0YgdAABgNGKnGxk5cqRsNtsNS1ZWltWjGaW5uVkrVqxQQkKC+vfvr7vvvltr1qzp2PetoE0XL17UsmXLNGLECPXv318pKSk6dOiQ1WOFtf3792vu3LkaOnSobDbbDd8L6Pf79dJLLyk2Nlb9+/dXamqqPv30U2uGDWNfd5537typWbNmBX4bf1VVlSVzmqCtc33t2jU9//zzmjhxom6//XYNHTpUGRkZ+vzzz9v1GsRON3Lo0CHV1tYGluLiYknS/PnzLZ7MLK+++qo2btyoDRs26JNPPtGrr76qn/zkJ/rnf/5nq0czzqJFi1RcXKy33npLR48e1axZs5SamqozZ85YPVrYampqUnJysvLy8lp8/ic/+Yl+9rOfadOmTTp48KBuv/12paWl6cqVKyGeNLx93XluamrSX/3VX+nVV18N8WTmaetcX7p0SRUVFVqxYoUqKiq0c+dOnTx5Ut/5znfa9yLt/jYthMzSpUv9d999t9/n81k9ilHmzJnjf+KJJ4LWffe73/U/9thjFk1kpkuXLvl79+7tf//994PWT5061f/CCy9YNJVZJPl37doVeOzz+fwxMTH+1157LbDuwoULfrvd7n/77bctmNAMf3me/9zp06f9kvyVlZUhnclUbZ3r6z7++GO/JH91dfVNH5crO93U1atXtX37dj3xxBPd9gtLw1VKSopKSkr0P//zP5Kk3/72tzpw4IBmz55t8WRm+fLLL9Xc3KyIiIig9f3799eBAwcsmspsp0+fltvtVmpqamBdVFSU7rvvPpWXl1s4GdB5GhoaZLPZ2vU9l5b/BmW0rLCwUBcuXNDjjz9u9SjG+cEPfiCPx6OxY8eqd+/eam5u1ssvv6zHHnvM6tGMMmDAADkcDq1Zs0ZJSUmKjo7W22+/rfLyco0ePdrq8YzkdrslKfAb6K+Ljo4OPAeEsytXruj555/XggUL2vUlrFzZ6abeeOMNzZ49u0NfZY+2/eIXv9C///u/q6CgQBUVFXrzzTf105/+VG+++abVoxnnrbfekt/v17Bhw2S32/Wzn/1MCxYsCPoKGAC4GdeuXdPf/d3fye/3a+PGje3alys73VB1dbX27t2rnTt3Wj2KkZYvX64f/OAH+vu//3tJ0sSJE1VdXS2n06nMzEyLpzPL3XffrQ8//FBNTU3yeDyKjY3Vo48+qlGjRlk9mpFiYmIkSXV1dYqNjQ2sr6ur0+TJky2aCrh110Onurpa+/bta9dVHYkrO93Stm3bNGTIEM2ZM8fqUYx06dKlG64s9O7dWz6fz6KJzHf77bcrNjZW58+fV1FRkebNm2f1SEZKSEhQTEyMSkpKAus8Ho8OHjwoh8Nh4WRAx10PnU8//VR79+7VnXfe2e5jcGWnm/H5fNq2bZsyMzPVpw//93SFuXPn6uWXX1Z8fLzGjx+vyspKrVu3Tk888YTVoxmnqKhIfr9fiYmJOnXqlJYvX66xY8dq4cKFVo8WthobG3Xq1KnA49OnT6uqqkqDBg1SfHy8li1bph//+McaM2aMEhIStGLFCg0dOlTp6enWDR2Gvu48nzt3Ti6XK/D7Xk6ePCnpq6tr16+w4ea0da5jY2P1t3/7t6qoqND777+v5ubmwP1ngwYNUr9+/W7uRW7lI2LofEVFRX5J/pMnT1o9irE8Ho9/6dKl/vj4eH9ERIR/1KhR/hdeeMHv9XqtHs0477zzjn/UqFH+fv36+WNiYvxZWVn+CxcuWD1WWPvggw/8km5YMjMz/X7/Vx8/X7FihT86Otpvt9v9Dz30EH+fdMDXnedt27a1+PzKlSstnTsctXWur3+0v6Xlgw8+uOnXsPn9/NpYAABgLu7ZAQAARiN2AACA0YgdAABgNGIHAAAYjdgBAABGI3YAAIDRiB0AAGA0YgcAABiN2AEAAEYjdgAAgNGIHQAAYDRiBwAAGO3/A7Cy9MWrXah5AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.histplot(x=prices)" ] }, { "cell_type": "code", "execution_count": 15, "id": "8455cb4d-6c7b-4341-80a2-bd67126f5383", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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pIgGACBFNAAAKS0XDdddd11UKpU/XVauXFn2aC1leHg4+vr6Ys6cOdHW1hbz5s2L559/flx/y5y/NzAwEKtXr45rr7022tra4o477oj9+/eXPdaE9/nnn8fSpUuju7s7KpVKfPzxx7/7flEU8eyzz0ZXV1e0tbXFokWL4tChQ+UMO4FdbJ23bdsWixcvjpkzZ0alUokDBw6UMudE93frfPbs2Vi7dm0sWLAgpk2bFt3d3fH444/H8ePHx7ydlouG/fv3x48//jh62bVrV0REPPTQQyVP1lo2bdoUb7zxRrz22mvx7bffxqZNm2Lz5s3x6quvlj1ay3nqqadi165d8c4778Q333wTixcvjkWLFsUPP/xQ9mgT2unTp+OWW26J119//S+/v3nz5njllVfizTffjC+++CKmTZsWd999dwwODjZ40ontYut8+vTpuPPOO2PTpk0Nnqy1/N06nzlzJvr7+6Ovry/6+/tj27ZtcfDgwbjnnnvGvqGixa1ataqYN29eMTIyUvYoLWXJkiXFihUrfnfbAw88UDz22GMlTdSazpw5U0yePLnYvn37726/7bbbivXr15c0VeuJiOKjjz4a/XpkZKTo7OwsXnzxxdHbTp06VVSr1WLr1q0lTNga/rjOFzpy5EgREcVXX33V0Jla0d+t83lffvllERHF0aNHx/TYLXem4UK//fZbvPvuu7FixYqm/FCtieyOO+6IPXv2xHfffRcREV9//XXs3bs3ent7S56stZw7dy6Gh4ejVqv97va2trbYu3dvSVO1viNHjsSJEydi0aJFo7fNmDEjbr/99ti3b1+Jk8Gl8csvv0SlUokrr7xyTPcb9wdWTQQff/xxnDp1Kp544omyR2k569ati3q9HvPnz4/JkyfH8PBwbNiwIR577LGyR2sp7e3tsXDhwnj++efjpptuio6Ojti6dWvs27cvrr/++rLHa1knTpyIiIiOjo7f3d7R0TH6PZioBgcHY+3atbFs2bIxf1hYS59peOutt6K3tze6u7vLHqXlfPjhh/Hee+/F+++/H/39/fH222/HSy+9FG+//XbZo7Wcd955J4qiiGuuuSaq1Wq88sorsWzZsjF/pC3A2bNn4+GHH46iKOKNN94Y8/1b9kzD0aNHY/fu3bFt27ayR2lJa9asiXXr1sWjjz4aERELFiyIo0ePxsaNG2P58uUlT9da5s2bF5999lmcPn066vV6dHV1xSOPPBJz584te7SW1dnZGRERJ0+ejK6urtHbT548GbfeemtJU8H/z/lgOHr0aHzyySfj+kjylv1RZcuWLXH11VfHkiVLyh6lJZ05c+ZPP+lOnjw5RkZGSpqo9U2bNi26urri559/jp07d8a9995b9kgta86cOdHZ2Rl79uwZva1er8cXX3wRCxcuLHEyGJ/zwXDo0KHYvXt3zJw5c1yP05JnGkZGRmLLli2xfPnymDKlJf+JpVu6dGls2LAhZs+eHTfffHN89dVX8fLLL8eKFSvKHq3l7Ny5M4qiiBtvvDEOHz4ca9asifnz58eTTz5Z9mgT2q+//hqHDx8e/frIkSNx4MCBuOqqq2L27NmxevXqeOGFF+KGG26IOXPmRF9fX3R3d8d9991X3tAT0MXW+aefforvv/9+9G8GHDx4MCL+d7bn/BkfLu7v1rmrqysefPDB6O/vj+3bt8fw8PDoe3OuuuqqmDp1an5D4/2Vjma2c+fOIiKKgwcPlj1Ky6rX68WqVauK2bNnF7VarZg7d26xfv36YmhoqOzRWs4HH3xQzJ07t5g6dWrR2dlZrFy5sjh16lTZY014n376aRERf7osX768KIr//dplX19f0dHRUVSr1eKuu+6yTxmHi63zli1b/vL7zz33XKlzTzR/t87nf531ry6ffvrpmLbjo7EBgJSWfU8DAHBpiQYAIEU0AAApogEASBENAECKaAAAUkQDAJAiGgCAFNEAAKSIBgAgRTQAACmiAQBI+S9LP1Vxlv4agwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.boxplot(x=prices)" ] }, { "cell_type": "code", "execution_count": null, "id": "821cd7f4-9a4a-4c0f-b541-26c5b24abc6f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8e2d5bc9-fb90-4076-af3a-5d1199767b42", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d501518b-8e77-4f7d-9346-82f3c071c1e0", "metadata": {}, "source": [ "### Descriptive statistics" ] }, { "cell_type": "markdown", "id": "5727115b-f58d-44ca-bf14-98eca6ac0ea4", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "#### Data manipulations using Pandas" ] }, { "cell_type": "code", "execution_count": 16, "id": "e4b22ff8-db8a-413b-bc55-61f2b64a0de9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " East West\n", "0 7.7 11.8\n", "1 5.9 10.0\n", "2 7.0 11.0\n", "3 4.8 8.6\n", "4 6.3 8.3\n", "5 6.3 9.4\n", "6 5.5 8.0\n", "7 5.4 6.8\n", "8 6.5 8.5\n" ] } ], "source": [ "import pandas as pd\n", "epriceswide = pd.read_csv(\"https://nobsstats.com/datasets/epriceswide.csv\")\n", "print(epriceswide)" ] }, { "cell_type": "code", "execution_count": 17, "id": "386037ed-cadc-455c-81b7-7877bbbbd706", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(epriceswide)" ] }, { "cell_type": "markdown", "id": "3b7b850f-2022-4a84-ab3b-bf7bf145cd7b", "metadata": {}, "source": [ "We want to extract only the second column which is called \"West\":" ] }, { "cell_type": "code", "execution_count": 18, "id": "38c52689-1b5a-4053-8f76-c10a7b76cd72", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 11.8\n", "1 10.0\n", "2 11.0\n", "3 8.6\n", "4 8.3\n", "5 9.4\n", "6 8.0\n", "7 6.8\n", "8 8.5\n", "Name: West, dtype: float64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW = epriceswide[\"West\"]\n", "pricesW" ] }, { "cell_type": "code", "execution_count": 19, "id": "927b21a6-7b75-4ac5-b93c-2b5632e0b608", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "pandas.core.series.Series" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(pricesW)" ] }, { "cell_type": "code", "execution_count": 20, "id": "cd3b487a-545b-4680-b315-2e7d0471d63d", "metadata": {}, "outputs": [], "source": [ "# # ALT. we can input data by specifying lists of values\n", "# pricesW = pd.Series([11.8,10,11,8.6,8.3,9.4,8,6.8,8.5])" ] }, { "cell_type": "code", "execution_count": null, "id": "5cba1717-1e3b-4f94-b908-9c15381ce079", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a70b603e-1fcd-4271-8c56-ba75ba5b2b4e", "metadata": {}, "source": [ "#### Descriptive statistics using pandas" ] }, { "cell_type": "code", "execution_count": 21, "id": "70075246-d2b0-48f0-9c26-b00b20c05bc7", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW.count()" ] }, { "cell_type": "code", "execution_count": 22, "id": "4bf01229-90ea-4352-a26e-7d4fa6c766c2", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "9.155555555555557" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW.mean()" ] }, { "cell_type": "code", "execution_count": 23, "id": "083041a3-4007-4ccd-aec5-2dbaba3fd41b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8.6" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW.median()" ] }, { "cell_type": "code", "execution_count": 24, "id": "aaff543c-6428-48b7-922a-3b3273324402", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "1.5621388471508475" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW.std()" ] }, { "cell_type": "code", "execution_count": 25, "id": "81a08643-8207-4130-93f8-8e9227f54c2e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "count 9.000000\n", "mean 9.155556\n", "std 1.562139\n", "min 6.800000\n", "25% 8.300000\n", "50% 8.600000\n", "75% 10.000000\n", "max 11.800000\n", "Name: West, dtype: float64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricesW.describe()" ] }, { "cell_type": "code", "execution_count": null, "id": "0060b041-0300-4c5d-b92b-49e0b7f26511", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "345999ef-eab8-4c4d-b590-38cffc41460f", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### Data cleaning" ] }, { "cell_type": "code", "execution_count": null, "id": "c63e5acf-1ba4-4ee7-a392-cea2a5be8b13", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d23d66f9-3842-41c4-b6d4-48e039a9c42b", "metadata": {}, "source": [ "## How much Python do you need to know?\n", "\n", "I remind you the key aspect is to learn how to use Python as a calculator.\n", "\n", "I talked about the `for`-loops and function definitions only to make sure you can **read Python code**,\n", "but you don't need to write any such code to learn statistics.\n", "As long as you know how to call functions and run code cells in a notebook,\n", "then you'll still benefit from all the educational power that Python has to offer.\n", "\n" ] }, { "cell_type": "markdown", "id": "28fae377-556f-4e40-b477-5add145298ea", "metadata": {}, "source": [ "## Conclusion\n", "\n", "Python = good for your life!" ] }, { "cell_type": "markdown", "id": "e959a84d-532e-4138-9652-239cf888d279", "metadata": {}, "source": [ "## Links\n", "\n", "- Book website [noBSstats.com](https://nobsstats.com/intro.html): contains all the notebooks, demos, and visualizations from the book.\n", "- [Detailed book outline](https://docs.google.com/document/d/1fwep23-95U-w1QMPU31nOvUnUXE2X3s_Dbk5JuLlKAY/edit): continuously updated list of the topics that are covered in each section\n", "- [Python tutorial](https://nobsstats.com/tutorials/python_tutorial.html): introduction to Python syntax, data types, functions and other constructs.\n", " See also the [Pandas tutorial](https://nobsstats.com/tutorials/pandas_tutorial.html) (WIP) and the [Seaborn tutorial](https://nobsstats.com/tutorials/seaborn_tutorial.html) (WIP).\n", "- Previous blog posts about statistics book:\n", " - [Outline of the stats curriculum research](https://minireference.com/blog/fixing-the-introductory-statistics-curriculum/)\n", " - [Book proposal](https://minireference.com/blog/no-bullshit-guide-to-statistics-progress-update/)\n", " - [Stats survey results](https://minireference.com/blog/what-stats-do-people-want-to-learn/)\n", " - [Python coding skills for statistics - PART 2](https://docs.google.com/document/d/1XusbfJoZ7CQxbeWPPXMM84BA-VeUn8lkPUuUy7RcW8M/edit): probability and statistics procedures\n", " - PART 3: coming soon" ] }, { "cell_type": "code", "execution_count": null, "id": "87d99089-d5ef-4202-81ab-0b6634e21ede", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "77d4957e-93ec-4dac-b79f-4ef446e01a44", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### Python error messages" ] }, { "cell_type": "code", "execution_count": 26, "id": "9753d6e6-ed60-4991-b1ff-877bc0a3f8c7", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [ "raises-exception" ] }, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "division by zero", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[26], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;241;43m3\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\n", "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" ] } ], "source": [ "3/0" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" } }, "nbformat": 4, "nbformat_minor": 5 }