"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "df.sort_values(by=0)\n",
+ "df[0].plot.bar()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Calculate the frequency distribution and plot it. What is the relation between this plot and the plot above? Describe it with words."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "df[0].plot.hist()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"\\nWe can see that the plot above shows the number of occurrences.\\nThe first plot shows in each dice throw what is the value of the dice. It doesn't retrieve the absolute frequency of analyzed data.\\n\""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "We can see that the plot above shows the number of occurrences.\n",
+ "The first plot shows in each dice throw what is the value of the dice. It doesn't retrieve the absolute frequency of analyzed data.\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 2\n",
+ "Now, using the dice results obtained in *challenge 1*, your are going to define some functions that will help you calculate the mean of your data in two different ways, the median and the four quartiles. \n",
+ "\n",
+ "#### 1.- Define a function that computes the mean by summing all the observations and dividing by the total number of observations. You are not allowed to use any methods or functions that directly calculate the mean value. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 3.5\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "\n",
+ "def mean_(x): #defining func\n",
+ " '''\n",
+ " below we have the sum of the values of the dice throws and below (divisor) the count of dice throws (10) \n",
+ " '''\n",
+ " return x.sum()/x.count()\n",
+ "\n",
+ "mean_(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- First, calculate the frequency distribution. Then, calculate the mean using the values of the frequency distribution you've just computed. You are not allowed to use any methods or functions that directly calculate the mean value. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 3.5\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "\n",
+ "'''\n",
+ "my approach:\n",
+ "create dict in which...\n",
+ "_keys=set of values of the dice throws (can be from 1 to 6, as we know)\n",
+ "_values=freq of the keys\n",
+ "'''\n",
+ "\n",
+ "freq_distrib=dict() #instantiate dict.\n",
+ "\n",
+ "for x in set(df[0]):\n",
+ " freq_distrib[x]=list(df[0]).count(x)/df.count() #create freq ratio for each key here.\n",
+ " \n",
+ "#mean will be equal to keys*values\n",
+ "sum( [ freq_distrib[x]*x for x in freq_distrib ] ) #multiplying all then summing afterwards the elements of the list."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Define a function to calculate the median. You are not allowed to use any methods or functions that directly calculate the median value. \n",
+ "**Hint**: you might need to define two computation cases depending on the number of observations used to calculate the median."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "5\n",
+ "[1, 1, 2, 2, 2, 5, 5, 5, 6, 6]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "3.5"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "import math\n",
+ "\n",
+ "def median_(x):\n",
+ " '''\n",
+ " median is computed differently depending on the cardinality of the dataframe.\n",
+ " we can use a logical gateway to differ these calculus.\n",
+ " '''\n",
+ " index=int(len(x)/2)\n",
+ " print(index)\n",
+ " \n",
+ " x=sorted(list(x))\n",
+ " print(x)\n",
+ " \n",
+ " if len(x)%2==0: #if cardinality is even, then it's calculated as it can be seen below.\n",
+ " first_middle_number=x[index]\n",
+ " second_middle_number=x[index-1]\n",
+ " final_median=(first_middle_number+second_middle_number)/2\n",
+ " return final_median\n",
+ " \n",
+ " elif len(x)%2!=0: #if cardinality is odd, then it's calculated as it can be seen below.\n",
+ " index=round(int(len(x)/2))\n",
+ " final_median=x[int(len(x)/2)]\n",
+ " return final_median\n",
+ " else:\n",
+ " pass \n",
+ " \n",
+ "median_(df[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- Define a function to calculate the four quartiles. You can use the function you defined above to compute the median but you are not allowed to use any methods or functions that directly calculate the quartiles. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "5\n",
+ "[1, 1, 2, 2, 2, 5, 5, 5, 6, 6]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'Quartiles are, respectively: Q1=2, Q2=3.5, and Q3=5.\\n Additionally, the interquartile range is 3.'"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "def four_quartiles_of_the_apocalypse(x):\n",
+ " '''\n",
+ " first things first: we have to sort the inputted column of the df\n",
+ " '''\n",
+ " x=sorted(list(x))\n",
+ " \n",
+ " index=len(x)-1\n",
+ " \n",
+ " #q1 can be computed like below. \n",
+ " index_q1=int(index*0.25)\n",
+ " q1=x[index_q1]\n",
+ " \n",
+ " #q2 can be computed like below. \n",
+ " q2=median_(x)\n",
+ " \n",
+ " #q3 can be computed like below. \n",
+ " index_q3=int(index*0.75)\n",
+ " q3=x[index_q3]\n",
+ " \n",
+ " #bonus:\n",
+ " interquartile_range=q3-q1\n",
+ " \n",
+ " return f'''Quartiles are, respectively: Q1={q1}, Q2={q2}, and Q3={q3}.\n",
+ " Additionally, the interquartile range is {interquartile_range}.'''\n",
+ "\n",
+ "four_quartiles_of_the_apocalypse(df[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 3\n",
+ "Read the csv `roll_the_dice_hundred.csv` from the `data` folder.\n",
+ "#### 1.- Sort the values and plot them. What do you see?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Unnamed: 0
\n",
+ "
roll
\n",
+ "
value
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
count
\n",
+ "
100.000000
\n",
+ "
100.000000
\n",
+ "
100.000000
\n",
+ "
\n",
+ "
\n",
+ "
mean
\n",
+ "
49.500000
\n",
+ "
49.500000
\n",
+ "
3.740000
\n",
+ "
\n",
+ "
\n",
+ "
std
\n",
+ "
29.011492
\n",
+ "
29.011492
\n",
+ "
1.703354
\n",
+ "
\n",
+ "
\n",
+ "
min
\n",
+ "
0.000000
\n",
+ "
0.000000
\n",
+ "
1.000000
\n",
+ "
\n",
+ "
\n",
+ "
25%
\n",
+ "
24.750000
\n",
+ "
24.750000
\n",
+ "
2.000000
\n",
+ "
\n",
+ "
\n",
+ "
50%
\n",
+ "
49.500000
\n",
+ "
49.500000
\n",
+ "
4.000000
\n",
+ "
\n",
+ "
\n",
+ "
75%
\n",
+ "
74.250000
\n",
+ "
74.250000
\n",
+ "
5.000000
\n",
+ "
\n",
+ "
\n",
+ "
max
\n",
+ "
99.000000
\n",
+ "
99.000000
\n",
+ "
6.000000
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Unnamed: 0 roll value\n",
+ "count 100.000000 100.000000 100.000000\n",
+ "mean 49.500000 49.500000 3.740000\n",
+ "std 29.011492 29.011492 1.703354\n",
+ "min 0.000000 0.000000 1.000000\n",
+ "25% 24.750000 24.750000 2.000000\n",
+ "50% 49.500000 49.500000 4.000000\n",
+ "75% 74.250000 74.250000 5.000000\n",
+ "max 99.000000 99.000000 6.000000"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "df=pd.read_csv(\"roll_the_dice_hundred.csv\")\n",
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"\\nI see the dice was thrown 100x.\\nThe mean of these 100x throws is 3.74000.\\nThe std is 1.703354.\\nAs expected, 25% of the values of the dice throws are between 1 and 2.\\nAs more or less expected, 50% of the values of the dice throws are between 1 and 4 (ideally it'll be between 1 and 3 as we'll see afterwards).\\nAs expected, 75% of the values of the dice throws are between 1 and 5.\\n\""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "I see the dice was thrown 100x.\n",
+ "The mean of these 100x throws is 3.74000.\n",
+ "The std is 1.703354.\n",
+ "As expected, 25% of the values of the dice throws are between 1 and 2.\n",
+ "As more or less expected, 50% of the values of the dice throws are between 1 and 4 (ideally it'll be between 1 and 3 as we'll see afterwards).\n",
+ "As expected, 75% of the values of the dice throws are between 1 and 5.\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Using the functions you defined in *challenge 2*, calculate the mean value of the hundred dice rolls."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Unnamed: 0 49.50\n",
+ "roll 49.50\n",
+ "value 3.74\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "mean_(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Now, calculate the frequency distribution.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{1: Unnamed: 0 0.12\n",
+ "roll 0.12\n",
+ "value 0.12\n",
+ "dtype: float64, 2: Unnamed: 0 0.17\n",
+ "roll 0.17\n",
+ "value 0.17\n",
+ "dtype: float64, 3: Unnamed: 0 0.14\n",
+ "roll 0.14\n",
+ "value 0.14\n",
+ "dtype: float64, 4: Unnamed: 0 0.22\n",
+ "roll 0.22\n",
+ "value 0.22\n",
+ "dtype: float64, 5: Unnamed: 0 0.12\n",
+ "roll 0.12\n",
+ "value 0.12\n",
+ "dtype: float64, 6: Unnamed: 0 0.23\n",
+ "roll 0.23\n",
+ "value 0.23\n",
+ "dtype: float64}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1 12\n",
+ "2 17\n",
+ "3 14\n",
+ "4 22\n",
+ "5 12\n",
+ "6 23\n",
+ "Name: value, dtype: int64"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "\n",
+ "#we can go through the complicated way...\n",
+ "freq_distrib=dict() #instantiate dict.\n",
+ "\n",
+ "for x in set(df['value']):\n",
+ " freq_distrib[x]=list(df['value']).count(x)/df.count() #create freq ratio for each key here.\n",
+ "\n",
+ "print(freq_distrib) \n",
+ "#mean will be equal to keys*values\n",
+ "sum( [ freq_distrib[x]*x for x in freq_distrib ] ) #multiplying all then summing afterwards the elements of the list.\n",
+ "\n",
+ "\n",
+ "#or a built in way...\n",
+ "pd.value_counts(df['value']).sort_index()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- Plot the histogram. What do you see (shape, values...) ? How can you connect the mean value to the histogram? "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#if what is required is a histogram for the values of the dice throws then:\n",
+ "df['value'].plot.hist()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'\\nyour comments here\\n'"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 5.- Read the `roll_the_dice_thousand.csv` from the `data` folder. Plot the frequency distribution as you did before. Has anything changed? Why do you think it changed?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Unnamed: 0
\n",
+ "
roll
\n",
+ "
value
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
count
\n",
+ "
1000.000000
\n",
+ "
1000.000000
\n",
+ "
1000.000000
\n",
+ "
\n",
+ "
\n",
+ "
mean
\n",
+ "
499.500000
\n",
+ "
499.500000
\n",
+ "
3.447000
\n",
+ "
\n",
+ "
\n",
+ "
std
\n",
+ "
288.819436
\n",
+ "
288.819436
\n",
+ "
1.711175
\n",
+ "
\n",
+ "
\n",
+ "
min
\n",
+ "
0.000000
\n",
+ "
0.000000
\n",
+ "
1.000000
\n",
+ "
\n",
+ "
\n",
+ "
25%
\n",
+ "
249.750000
\n",
+ "
249.750000
\n",
+ "
2.000000
\n",
+ "
\n",
+ "
\n",
+ "
50%
\n",
+ "
499.500000
\n",
+ "
499.500000
\n",
+ "
3.000000
\n",
+ "
\n",
+ "
\n",
+ "
75%
\n",
+ "
749.250000
\n",
+ "
749.250000
\n",
+ "
5.000000
\n",
+ "
\n",
+ "
\n",
+ "
max
\n",
+ "
999.000000
\n",
+ "
999.000000
\n",
+ "
6.000000
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Unnamed: 0 roll value\n",
+ "count 1000.000000 1000.000000 1000.000000\n",
+ "mean 499.500000 499.500000 3.447000\n",
+ "std 288.819436 288.819436 1.711175\n",
+ "min 0.000000 0.000000 1.000000\n",
+ "25% 249.750000 249.750000 2.000000\n",
+ "50% 499.500000 499.500000 3.000000\n",
+ "75% 749.250000 749.250000 5.000000\n",
+ "max 999.000000 999.000000 6.000000"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "df=pd.read_csv(\"roll_the_dice_thousand.csv\")\n",
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'\\nI see the dice was thrown 100x.\\nThe mean of these 100x throws is 3.74000.\\nThe std is 1.703354.\\nAs expected, 25% of the values of the dice throws are between 1 and 2.\\nAs expected, 50% of the values of the dice throws are between 1 and 3.\\nAs expected, 75% of the values of the dice throws are between 1 and 5.\\n'"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "I see the dice was thrown 100x.\n",
+ "The mean of these 100x throws is 3.74000.\n",
+ "The std is 1.703354.\n",
+ "As expected, 25% of the values of the dice throws are between 1 and 2.\n",
+ "As expected, 50% of the values of the dice throws are between 1 and 3.\n",
+ "As expected, 75% of the values of the dice throws are between 1 and 5.\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 4\n",
+ "In the `data` folder of this repository you will find three different files with the prefix `ages_population`. These files contain information about a poll answered by a thousand people regarding their age. Each file corresponds to the poll answers in different neighbourhoods of Barcelona.\n",
+ "\n",
+ "#### 1.- Read the file `ages_population.csv`. Calculate the frequency distribution and plot it as we did during the lesson. Try to guess the range in which the mean and the standard deviation will be by looking at the plot. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.0 2\n",
+ "2.0 2\n",
+ "4.0 1\n",
+ "5.0 2\n",
+ "6.0 2\n",
+ " ..\n",
+ "69.0 1\n",
+ "70.0 1\n",
+ "71.0 1\n",
+ "73.0 1\n",
+ "82.0 1\n",
+ "Name: observation, Length: 72, dtype: int64\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'\\nMean shall be circa 35.\\nStd shall be circa 10.\\n'"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAD4CAYAAAAD6PrjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAXDUlEQVR4nO3dfbBU9Z3n8fdXIaKIoyI6BnCuTjERhhDUq3HQuCozxpAManzCGMVEBysD5cMmlUFXjWOVNU4e0FhudHXiU8YH8AE1mp2MutkxpFCEeAdBwsadELzCCjEOqMQo+t0/+tyTK16hL97u03Lfr6qu7vPrc7o/dLf343no05GZSJIEsF3VASRJrcNSkCSVLAVJUslSkCSVLAVJUmlA1QE+iD322CPb2tqqjiFJHyqLFi36TWYO6+m+D3UptLW1sXDhwqpjSNKHSkT8+v3uc/ORJKlkKUiSSpaCJKn0od6nIOnD4a233qKzs5M33nij6ij9yqBBgxgxYgQDBw6sexlLQVLDdXZ2MmTIENra2oiIquP0C5nJyy+/TGdnJ/vuu2/dy7n5SFLDvfHGGwwdOtRCaKKIYOjQob1eO7MUJDWFhdB8W/OaWwqSpJL7FCQ1XdvMR/r08VZc9dmtW27FCj73uc+xZMmSPs3TWx0dHaxatYpJkyYB8NBDD/Hcc88xc+bMpmexFLRN6+s/Pr2xtX+o9OG2ceNGBgzo3Z/Wjo4OFi5cWJbC5MmTmTx5ciPibZGbjyT1G7NmzWLs2LGMHTuWa665Bqj9EZ86dSrjxo3jpJNOYsOGDQDMnDmTMWPGMG7cOL72ta8BsHbtWk488UQOPvhgDj74YH72s58BcPnllzNt2jSOOeYYzjzzTD75yU+ydOnS8nmPPPJIFi1axIIFC5gwYQIHHHAAEyZMYPny5bz55ptcdtllzJ49m/HjxzN79mxuvfVWZsyYAcCvf/1rJk6cyLhx45g4cSIrV64E4KyzzuK8885jwoQJ7Lffftx777198hpZCpL6hUWLFnHLLbfw1FNP8eSTT3LTTTfxyiuvsHz5cqZNm8bixYvZZZdd+N73vsdvf/tb5s6dy9KlS1m8eDGXXHIJAOeffz4XXnghTz/9NPfddx/nnHPOux7/wQcf5M4772TKlCnMmTMHgNWrV7Nq1SoOOugg9t9/f5544gmeeeYZrrjiCi6++GI+8pGPcMUVV3DqqafS0dHBqaee+q7cM2bM4Mwzz2Tx4sWcfvrpnHfeeeV9q1evZt68eTz88MN9tqnJUpDUL8ybN48TTjiBwYMHs/POO/P5z3+en/70p4wcOZLDDjsMgC9+8YvMmzePXXbZhUGDBnHOOedw//33s9NOOwHw2GOPMWPGDMaPH8/kyZNZv349r776KlDb5LPjjjsCcMopp3DPPfcAMGfOHE4++WQA1q1bx8knn8zYsWO58MIL37U28X7mz5/PF77wBQDOOOMM5s2bV953/PHHs9122zFmzBheeumlPnmdLAVJ/UJm9ji+6WGbEcGAAQNYsGABJ554Ig888ADHHnssAO+88w7z58+no6ODjo4OXnzxRYYMGQLA4MGDy8cYPnw4Q4cOZfHixcyePZspU6YAcOmll3LUUUexZMkSfvjDH27VN7y7591hhx22+O/rrYaVQkSMjIifRMSyiFgaEecX45dHxIsR0VFcJnVb5qKIeD4ilkfEpxuVTVL/c8QRR/DAAw+wYcMGXn/9debOncunPvUpVq5cyfz58wG46667OPzww3nttddYt24dkyZN4pprrqGjowOAY445huuuu658zK7xnkyZMoVvfvObrFu3jo9//ONAbU1h+PDhANx6663lvEOGDCnXODY1YcIE7r77bgDuuOMODj/88K1/EerQyKOPNgJfzcyfR8QQYFFEPFrcd3Vmfrv7zBExBpgC/DnwUeCxiPizzHy7gRklVaCKI7MOPPBAzjrrLA455BAAzjnnHHbbbTdGjx7NbbfdxrnnnsuoUaP4yle+wrp16zjuuON44403yEyuvvpqAK699lqmT5/OuHHj2LhxI0cccQQ33HBDj8930kkncf7553PppZeWY1//+teZOnUqs2bN4uijjy7HjzrqKK666irGjx/PRRdd9K7Hufbaa/nyl7/Mt771LYYNG8Ytt9zS1y/Nu0RfrXJs8YkiHgSuAw4DXuuhFC4CyMx/KKZ/DFyemfPf7zHb29vTH9nR5nhIamtYtmwZo0ePrjpGv9TTax8RizKzvaf5m7JPISLagAOAp4qhGRGxOCJujojdirHhwAvdFussxjZ9rGkRsTAiFq5du7aBqSWp/2l4KUTEzsB9wAWZuR64HvhTYDywGvhO16w9LP6e1ZjMvDEz2zOzfdiwHn9i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\n",
+ "text/plain": [
+ "