"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot the sorted results\n",
+ "plt.bar(dice_roll_sorted['Dice_Roll'], dice_roll_sorted['Value'])\n",
+ "plt.xlabel('Dice_Roll')\n",
+ "plt.ylabel('Value')\n",
+ "plt.title('Dice Roll Results Sorted by Value')\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": [],
+ "source": [
+ "value_counts = dice_roll_sorted['Value'].value_counts().sort_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\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": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3.0"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_mean(data):\n",
+ " # Sum all the observations\n",
+ " total_sum = sum(data)\n",
+ " \n",
+ " # Count the number of observations\n",
+ " count = len(data)\n",
+ " \n",
+ " # Calculate the mean\n",
+ " mean = total_sum / count if count > 0 else 0\n",
+ "\n",
+ " return mean\n",
+ "\n",
+ "# Calculate the mean of the 'Value' column\n",
+ "mean_value = calculate_mean(dice_roll_sorted['Value'])\n",
+ "mean_value\n"
+ ]
+ },
+ {
+ "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": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\carmo\\AppData\\Local\\Temp\\ipykernel_19584\\1800913377.py:7: FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead.\n",
+ " for value, frequency in freq_distribution.iteritems():\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "3.0"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_mean_frequency(freq_distribution):\n",
+ " # Initialize total_sum and total_count\n",
+ " total_sum = 0\n",
+ " total_count = 0\n",
+ " \n",
+ " # Loop over the frequency distribution (index is value, value is frequency)\n",
+ " for value, frequency in freq_distribution.iteritems():\n",
+ " total_sum += value * frequency\n",
+ " total_count += frequency\n",
+ "\n",
+ " # Calculate the mean\n",
+ " mean = total_sum / total_count if total_count > 0 else 0\n",
+ "\n",
+ " return mean\n",
+ "\n",
+ "# Calculate the mean of the 'Value' column using the frequency distribution\n",
+ "mean_value_frequency = calculate_mean_frequency(value_counts)\n",
+ "mean_value_frequency\n"
+ ]
+ },
+ {
+ "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": [
+ {
+ "data": {
+ "text/plain": [
+ "2.5"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_median(data):\n",
+ " # Sort the data\n",
+ " sorted_data = sorted(data)\n",
+ " \n",
+ " # Count the number of observations\n",
+ " count = len(sorted_data)\n",
+ "\n",
+ " # Check if the count is even or odd\n",
+ " if count % 2 == 0:\n",
+ " # If even, the median is the average of the two middle numbers\n",
+ " median = (sorted_data[count // 2] + sorted_data[count // 2 - 1]) / 2\n",
+ " else:\n",
+ " # If odd, the median is the middle number\n",
+ " median = sorted_data[count // 2]\n",
+ "\n",
+ " return median\n",
+ "\n",
+ "# Calculate the median of the 'Value' column\n",
+ "median_value = calculate_median(dice_roll_sorted['Value'])\n",
+ "median_value\n"
+ ]
+ },
+ {
+ "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": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "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": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "value_counts_dice_thousand = roll_1000['value'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(value_counts_dice_thousand.index, value_counts_dice_thousand.values, color='purple', alpha=0.7)\n",
+ "plt.xlabel('Value')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Dice Roll Values (1000 Rolls)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "All the possible resulst seem to even out, the greater the size of the sample, the more evenly distributed this values are.\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": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts = ages_population['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts.index, observation_counts.values, color='orange', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"Based on this observation:\n",
+ "\n",
+ "The mean (average) age is likely to fall within the range of 35-40 years, as that is where the data is centered.\n",
+ "The standard deviation, which measures the amount of variation or dispersion in the data, is likely to be around 10-15 years. This is because most of the data seems to fall within this range on either side of the mean\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Calculate the exact mean and standard deviation and compare them with your guesses. Do they fall inside the ranges you guessed?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(36.56, 12.816499625976762)"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column\n",
+ "mean_age = ages_population['observation'].mean()\n",
+ "std_dev_age = ages_population['observation'].std()\n",
+ "\n",
+ "mean_age, std_dev_age\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "Comparing these values with our earlier estimates:\n",
+ "\n",
+ "The mean value does fall within the guessed range of 35-40 years.\n",
+ "The standard deviation is also within the guessed range of 10-15 years.\n",
+ "So, our estimates based on the frequency distribution plot were quite accurate.\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Now read the file `ages_population2.csv` . Calculate the frequency distribution and plot it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts2 = ages_population2['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts2.index, observation_counts2.values, color='red', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age (Dataset 2)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- What do you see? Is there any difference with the frequency distribution in step 1?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "In the first dataset (from 'ages_population.csv'), the age values were distributed in a bell-shaped curve (normal distribution) centered around 35-40 years, with a wide range of ages from around 0 to 70.\n",
+ "\n",
+ "In contrast, the second dataset (from 'ages_population2.csv') has a more narrow distribution, primarily covering ages from around 20 to 35. The data is still somewhat bell-shaped, but the peak is higher and narrower, indicating a lower spread in the data. The distribution is centered around 27-28 years, which is younger than the center of the distribution in the first dataset.\n",
+ "\n",
+ "These differences could suggest different population samples. For example, the second dataset might represent a population sample from a city with a younger demographic, while the first dataset might represent a more diverse or broader population sample.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 5.- Calculate the mean and standard deviation. Compare the results with the mean and standard deviation in step 2. What do you think?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(27.155, 2.969813932689186)"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column in the second dataset\n",
+ "mean_age2 = ages_population2['observation'].mean()\n",
+ "std_dev_age2 = ages_population2['observation'].std()\n",
+ "\n",
+ "mean_age2, std_dev_age2\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "Comparing these values with those from the first dataset:\n",
+ "\n",
+ "The mean age in the second dataset is lower than in the first dataset (27.16 vs 36.56 years), reflecting the younger age distribution we observed in the histogram.\n",
+ "The standard deviation in the second dataset is also significantly lower than in the first dataset (2.97 vs 12.82 years), indicating that the ages in the second dataset are more closely clustered around the mean.\n",
+ "The differences in the mean and standard deviation between the two datasets align with our observations from the histograms. The second dataset appears to represent a younger and less diverse age group compared to the first dataset.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 5\n",
+ "Now is the turn of `ages_population3.csv`.\n",
+ "\n",
+ "#### 1.- Read the file `ages_population3.csv`. Calculate the frequency distribution and plot it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAIhCAYAAABwnkrAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL8klEQVR4nO39eXgUZd7+f58NSZokJGwxm0CIrLKqLLLJIoIsZhB0JsioIDLiCAICtwrcSvBmU5TBcQEcMMAgEhdAIghEkSgCI6Ds80XUALLLGggQEnI9f/ikf3RlD53uTni/jqOPw67r01WfurpsOKnqapsxxggAAAAA4FDO0w0AAAAAgLchKAEAAACABUEJAAAAACwISgAAAABgQVACAAAAAAuCEgAAAABYEJQAAAAAwIKgBAAAAAAWBCUAAAAAsCAoASi2+fPny2az5foYM2aMp9srU6xzXaFCBYWHh6tz586aOnWqTp48meM1cXFxstlsRdrOpUuXFBcXp/Xr1xfpdbltq1atWnrggQeKtJ6CLF68WDNnzsx1zGazKS4uzqXbc7WvvvpKLVq0UGBgoGw2m5YvX17ga3bt2iWbzSZfX18dO3as5JssQEZGhho0aKBp06Y5lhXn+CysvXv3Ki4uTgcOHHBB9zdu48aNiouL07lz5wpV/+WXX6pr166KjIyU3W5XaGio7r33Xq1atcqpLiMjQ7Vr187z+AbgfgQlADcsPj5emzZtcnoMHz7c022VSdlznZSUpHfeeUd33HGHXn31Vd1+++368ssvnWoHDx6sTZs2FWn9ly5d0sSJE4sclIqzreLILyht2rRJgwcPLvEeissYo7/85S/y9fXVihUrtGnTJnXs2LHA182dO1eSlJmZqYULF5Z0mwV69913dfbsWT377LM5xopyfBbW3r17NXHiRK8KShMnTix0UDp9+rQaNWqkf/zjH1q7dq3mzJkjX19f9erVS4sWLXLU+fr66uWXX9Yrr7yi06dPl1D3AIrCx9MNACj9GjdurBYtWhSqNiMjQzabTT4+fPwUh3WuH3roIT333HNq3769+vbtq/379yssLEySVL16dVWvXr1E+7l06ZICAgLcsq2CtG7d2qPbL8jRo0d15swZ9enTR126dCnUa9LT0/XBBx+oWbNmOnXqlN5//3298MILJdxp3jIzMzV9+nQNGjRIgYGBOcaL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0ktq0qSJAgMDlZWVpdatWzutIyEhQZMmTdLcuXP10ksvqWLFiurTp49ee+01hYeHF/ozKbcbWBRW3bp1Hf/9pz/9ST169NDQoUMVGxurcuX+v3+3zp7fwswBgJJFUAJQ4qxnWUJCQiT98S+sed2pLCwszHGHvOPHj+cYty7L/stFenq603LrX1KrVKni+Nf+oUOH5rrt6OjofPYmp+wbIGR/Hyk/I0aM0L///W999tlnWr16tSpXrqy//vWvRdpeblauXKlr166pU6dO+dbdc889uueee3Tt2jVt3bpVb731lkaOHKmwsDD169evUNsqym8z5ffeZf8lPq/3rqC/tBekWrVquf7uUPZNM7KPwxtRpUoVlStXzuXb+fLLLx1nsqxhR5I2b96svXv3qmHDho7xEydO6NZbb3XUZGZm5jj+Q0JC1LRpU02ePDnX7Rb0PbmQkBCdOXOmSPsi5Tw+z58/r88//1wTJkzQiy++6KhLT08v9Pp3796tHTt2aP78+RowYIBjefbNYqx9z5w5UzNnztShQ4e0YsUKvfjiizp58qRWr15d6M8kV2rVqpVWr16t33//3Wnd2fvviuMTwI0hKAFwu3bt2qly5crau3evhg0blmedn5+fWrVqpaVLl2r69OmOv1BfuHBBiYmJTrVhYWGqUKGCdu7c6bT8s88+c3oeEBCgzp0768cff1TTpk3l5+d3w/vTtm1bVapUSbNnz1a/fv3yDRLNmzdX27Zt9eqrr2r37t166qmnbuhfqSXp0KFDGjNmjCpVqqQhQ4YU6jXly5fX3XffrQYNGuiDDz7QDz/8oH79+hXqLEpR7NmzRzt27HC6/G7x4sUKCgpyfAE+++5vO3fuVP369R11K1asyLE+u91e6N66dOmiZcuW6ejRo04BYOHChQoICHDJ7cQDAwN19913a+nSpXr99dfl7+8v6Y+zHYsWLVL16tVVr169Iq933rx5KleunJYuXapKlSo5jR0+fFiPPfaY3n//fb3++uuOyzYTEhKcbirwySef5LixygMPPKBVq1apdu3aqlKlSpH7atCggX755ZcivSa349Nms8kY4zjess2dOzfHzTPyOiaz/z+zrqOgM7Q1a9bUsGHD9NVXX+m7776TVPjPpPz6KQpjjJKTk1W5cuUcQTj7ktii3jADgOsRlAC4XcWKFfXWW29pwIABOnPmjB5++GGFhobq999/144dO/T7779r1qxZkqT/+7//U/fu3dW1a1eNHj1a165d06uvvqrAwECnf3m22Wx69NFH9f7776t27dpq1qyZvv/+ey1evDjH9t988021b99e99xzj/7+97+rVq1aunDhgn7++WclJiZq3bp1Rd6fN954Q4MHD9Z9992nv/3tbwoLC9PPP/+sHTt26O2333aqHzFihGJjY2Wz2fTMM88UaVu7d+92fH/i5MmT+vbbbxUfH6/y5ctr2bJljrNbuZk9e7bWrVunXr16qWbNmrpy5Yref/99SX9c0iX98f2vqKgoffbZZ+rSpYuqVq2qkJCQQt3KOjeRkZH605/+pLi4OEVERGjRokVKSkrSq6++qoCAAElSy5YtVb9+fY0ZM0aZmZmqUqWKli1bluttsJs0aaKlS5dq1qxZat68ucqVK5fnZZ8TJkxwfCfn5ZdfVtWqVfXBBx9o5cqVeu2113IEkOKaOnWqunbtqs6dO2vMmDHy8/PTu+++q927d+vDDz8s0hk46Y+zoNnfY+ndu3euNf/4xz+0cOFCTZ06VY0aNdIjjzyiN954Q+XLl9e9996rPXv26I033lClSpWcLut65ZVXlJSUpLZt22r48OGqX7++rly5ogMHDmjVqlWaPXt2vpeQdurUSa+88orj97OsCnt8BgcHq0OHDpo+fbrj+EpOTta8efNUuXJlp3U2btxYkvTee+8pKChIFSpUUHR0tBo0aKDatWvrxRdflDFGVatWVWJiopKSkpxef/78eXXu3Fn9+/dXgwYNFBQUpC1btmj16tXq27evpKJ9JmVfPvjmm29qwIAB8vX1Vf369RUUFJTrnPXu3VvNmjXTHXfcoWrVquno0aOaP3++kpOT9c477+T4HtnmzZtVvnx5l3xvEcAN8uSdJACUbgXd6Sr7bmIff/xxruPJycmmV69epmrVqsbX19fceuutplevXjnqV6xYYZo2bWr8/PxMzZo1zbRp03K9y9r58+fN4MGDTVhYmAkMDDQxMTHmwIEDud7FLSUlxQwaNMjceuutxtfX19xyyy2mbdu2ZtKkSQX2n9cd9latWuW4K1lAQIBp2LChefXVV3Psd3p6urHb7bnePSwv1jsM+vn5mdDQUNOxY0czZcoUc/LkyRyvsc7Rpk2bTJ8+fUxUVJSx2+2mWrVqpmPHjmbFihVOr/vyyy/NnXfeaex2u9Nd07LX9/vvvxe4LWP+uOtdr169zCeffGIaNWpk/Pz8TK1atcyMGTNyvP6nn34y3bp1M8HBweaWW24xzz77rFm5cmWOu52dOXPGPPzww6Zy5crGZrM5bTO393nXrl0mJibGVKpUyfj5+ZlmzZrleN+K+j7n5ttvvzX33nuvCQwMNP7+/qZ169YmMTEx1/UVdNe7mTNnGklm+fLledbMnj3bSDKffvqpMcaYK1eumFGjRpnQ0FBToUIF07p1a7Np0yZTqVIl89xzzzm99vfffzfDhw830dHRxtfX11StWtU0b97cjB8/3ly8eDHf3n7++Wdjs9nMRx995LS8OMfn4cOHzUMPPWSqVKligoKCTPfu3c3u3btNVFSU0536suckOjralC9f3uk92bt3r+natasJCgoyVapUMX/+85/NoUOHnI6FK1eumKeffto0bdrUBAcHG39/f1O/fn0zYcIEx50XsxX2M2ns2LEmMjLSlCtXrsA78r366qumZcuWpkqVKqZ8+fKmWrVq5v777zeff/55rvX33HNPjrvvAfAMmzH8ohmA0icuLk4TJ04slT/KmJiYqD/96U9auXKlevbs6el2UEZt3LhR7dq10wcffKD+/fu7bL0xMTHKzMzUF1984bJ14g+//PKL6tatqzVr1qhr166ebge46XHpHQC4yd69e3Xw4EGNHj1ad9xxh+OWzMCNSkpK0qZNm9S8eXP5+/trx44dmjZtmurWreu4vMxVpk6dqjvvvFNbtmxRy5YtXbrum92kSZPUpUsXQhLgJQhKAOAmzzzzjL777jvdddddWrBgQZG/uwLkJTg4WGvXrtXMmTN14cIFhYSEqEePHpo6dWqxbuedn8aNGys+Pj7XOxqi+DIzM1W7dm2NHTvW060A+P/j0jsAAAAAsChXcAkAAAAA3FwISgAAAABgQVACAAAAAIsyfzOHrKwsHT16VEFBQXxxGgAAALiJGWN04cIFRUZGOv0gd27KfFA6evSoatSo4ek2AAAAAHiJ3377TdWrV8+3pswHpaCgIEl/TEZwcLCHuwEAAADgKampqapRo4YjI+SnzAel7MvtgoODCUoAAAAACvWVHG7mAAAAAAAWBCUAAAAAsCAoAQAAAIAFQQkAAAAALAhKAAAAAGBBUAIAAAAAC4ISAAAAAFgQlAAAAADAgqAE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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "ages_population3 = pd.read_csv(\"C:\\\\Users\\\\carmo\\\\Desktop\\\\IronHack\\\\Week 3\\\\Day 3\\\\Descriptive-Stats\\\\data\\\\ages_population3.csv\")\n",
+ "\n",
+ "\n",
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts3 = ages_population3['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts3.index, observation_counts3.values, color='red', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age (Dataset 3)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Calculate the mean and standard deviation. Compare the results with the plot in step 1. What is happening?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(41.989, 16.144705959865934)"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column in the third dataset\n",
+ "mean_age3 = ages_population3['observation'].mean()\n",
+ "std_dev_age3 = ages_population3['observation'].std()\n",
+ "\n",
+ "mean_age3, std_dev_age3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'\\nThe frequency distribution of age values for the third dataset shows that the data is not symmetric and has a slightly bimodal distribution, with one peak around 35 years and another around 67 years.\\n\\nThe exact mean (average) age for this dataset is approximately 41.99 years, and the standard deviation is approximately 16.14 years.\\n\\nCompared to the first two datasets, this one has a higher mean age, suggesting that it represents an older population. The larger standard deviation indicates a greater spread in the data, which is consistent with the broader and more varied distribution visible in the histogram. The presence of two peaks in the distribution suggests that there might be two distinct age groups within this population sample.'"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "The frequency distribution of age values for the third dataset shows that the data is not symmetric and has a slightly bimodal distribution, with one peak around 35 years and another around 67 years.\n",
+ "\n",
+ "The exact mean (average) age for this dataset is approximately 41.99 years, and the standard deviation is approximately 16.14 years.\n",
+ "\n",
+ "Compared to the first two datasets, this one has a higher mean age, suggesting that it represents an older population. The larger standard deviation indicates a greater spread in the data, which is consistent with the broader and more varied distribution visible in the histogram. The presence of two peaks in the distribution suggests that there might be two distinct age groups within this population sample.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Calculate the four quartiles. Use the results to explain your reasoning for question in step 2. How much of a difference is there between the median and the mean?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(30.0, 40.0, 53.0)"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_quartiles_new(data):\n",
+ " # Sort the data\n",
+ " sorted_data = sorted(data)\n",
+ "\n",
+ " # Calculate Q2 (median)\n",
+ " Q2 = calculate_median(sorted_data)\n",
+ "\n",
+ " # Calculate indices for Q1 and Q3\n",
+ " mid_index = len(sorted_data) // 2\n",
+ " Q1_index = mid_index // 2\n",
+ " Q3_index = mid_index + Q1_index if len(sorted_data) % 2 == 0 else mid_index + Q1_index + 1\n",
+ "\n",
+ " # Calculate Q1 and Q3\n",
+ " if len(sorted_data) % 2 == 0: # even length\n",
+ " Q1 = (sorted_data[Q1_index] + sorted_data[Q1_index - 1]) / 2\n",
+ " Q3 = (sorted_data[Q3_index] + sorted_data[Q3_index - 1]) / 2\n",
+ " else: # odd length\n",
+ " Q1 = sorted_data[Q1_index]\n",
+ " Q3 = sorted_data[Q3_index]\n",
+ "\n",
+ " return Q1, Q2, Q3\n",
+ "\n",
+ "# Calculate the quartiles of the 'observation' column in the third dataset using the new function\n",
+ "Q1_3_new, Q2_3_new, Q3_3_new = calculate_quartiles_new(ages_population3['observation'])\n",
+ "Q1_3_new, Q2_3_new, Q3_3_new\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- Calculate other percentiles that might be useful to give more arguments to your reasoning."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "The difference between the mean (approximately 41.99 years) and the median (40.0 years) is about 2 years.\n",
+ "\n",
+ "Comparing the mean and median can provide insights into the shape of the distribution. When the mean and median are close, as they are in this case, it suggests that the data is somewhat symmetric around the mean/median. However, the histogram we plotted earlier showed a slightly bimodal distribution, indicating two groups within the population.\n",
+ "\n",
+ "The quartiles provide additional information. Half of the population is under 40 years old (the median), and 75% of the population is under 53 years old (Q3). The difference between Q3 and the maximum value in the dataset is quite large, which accounts for the long tail on the right side of the distribution (ages above 53). This tail is pulling the mean upwards, making it slightly larger than the median.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Bonus challenge\n",
+ "Compare the information about the three neighbourhoods. Prepare a report about the three of them. Remember to find out which are their similarities and their differences backing your arguments in basic statistics."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\n",
+ "\"\"\""
+ ]
+ }
+ ],
+ "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.10.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/your-code/main.ipynb b/your-code/main.ipynb
index 5759add..ec4b942 100644
--- a/your-code/main.ipynb
+++ b/your-code/main.ipynb
@@ -1,522 +1,1372 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Understanding Descriptive Statistics\n",
- "\n",
- "Import the necessary libraries here:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Libraries"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Challenge 1\n",
- "#### 1.- Define a function that simulates rolling a dice 10 times. Save the information in a dataframe.\n",
- "**Hint**: you can use the *choices* function from module *random* to help you with the simulation."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 2.- Plot the results sorted by value."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 3.- Now, calculate the frequency distribution.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\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": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 2.- Calculate the exact mean and standard deviation and compare them with your guesses. Do they fall inside the ranges you guessed?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 3.- Now read the file `ages_population2.csv` . Calculate the frequency distribution and plot it."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 4.- What do you see? Is there any difference with the frequency distribution in step 1?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 5.- Calculate the mean and standard deviation. Compare the results with the mean and standard deviation in step 2. What do you think?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Challenge 5\n",
- "Now is the turn of `ages_population3.csv`.\n",
- "\n",
- "#### 1.- Read the file `ages_population3.csv`. Calculate the frequency distribution and plot it."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 2.- Calculate the mean and standard deviation. Compare the results with the plot in step 1. What is happening?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 3.- Calculate the four quartiles. Use the results to explain your reasoning for question in step 2. How much of a difference is there between the median and the mean?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### 4.- Calculate other percentiles that might be useful to give more arguments to your reasoning."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Bonus challenge\n",
- "Compare the information about the three neighbourhoods. Prepare a report about the three of them. Remember to find out which are their similarities and their differences backing your arguments in basic statistics."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# your code here"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\"\"\"\n",
- "your comments here\n",
- "\"\"\""
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "ironhack-3.7",
- "language": "python",
- "name": "ironhack-3.7"
- },
- "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.7.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Understanding Descriptive Statistics\n",
+ "\n",
+ "Import the necessary libraries here:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Libraries\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import pandas as pd\n",
+ "import random"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 1\n",
+ "#### 1.- Define a function that simulates rolling a dice 10 times. Save the information in a dataframe.\n",
+ "**Hint**: you can use the *choices* function from module *random* to help you with the simulation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Dice_Roll Value\n",
+ "0 1 1\n",
+ "1 2 4\n",
+ "2 3 5\n",
+ "3 4 6\n",
+ "4 5 1\n",
+ "5 6 3\n",
+ "6 7 1\n",
+ "7 8 2\n",
+ "8 9 1\n",
+ "9 10 6\n"
+ ]
+ }
+ ],
+ "source": [
+ "# your code here\n",
+ "\n",
+ "def dicerollsim ():\n",
+ " dice_rolls = random.choices(range(1,7), k=10)\n",
+ " df = pd.DataFrame({'Dice_Roll': range(1,11),'Value': dice_rolls })\n",
+ "\n",
+ " return df\n",
+ "\n",
+ "dice_roll_df = dicerollsim()\n",
+ "\n",
+ "print(dice_roll_df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Plot the results sorted by value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot the sorted results\n",
+ "plt.bar(dice_roll_sorted['Dice_Roll'], dice_roll_sorted['Value'])\n",
+ "plt.xlabel('Dice_Roll')\n",
+ "plt.ylabel('Value')\n",
+ "plt.title('Dice Roll Results Sorted by Value')\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": [],
+ "source": [
+ "value_counts = dice_roll_sorted['Value'].value_counts().sort_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\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": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3.0"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_mean(data):\n",
+ " # Sum all the observations\n",
+ " total_sum = sum(data)\n",
+ " \n",
+ " # Count the number of observations\n",
+ " count = len(data)\n",
+ " \n",
+ " # Calculate the mean\n",
+ " mean = total_sum / count if count > 0 else 0\n",
+ "\n",
+ " return mean\n",
+ "\n",
+ "# Calculate the mean of the 'Value' column\n",
+ "mean_value = calculate_mean(dice_roll_sorted['Value'])\n",
+ "mean_value\n"
+ ]
+ },
+ {
+ "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": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\carmo\\AppData\\Local\\Temp\\ipykernel_19584\\1800913377.py:7: FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead.\n",
+ " for value, frequency in freq_distribution.iteritems():\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "3.0"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_mean_frequency(freq_distribution):\n",
+ " # Initialize total_sum and total_count\n",
+ " total_sum = 0\n",
+ " total_count = 0\n",
+ " \n",
+ " # Loop over the frequency distribution (index is value, value is frequency)\n",
+ " for value, frequency in freq_distribution.iteritems():\n",
+ " total_sum += value * frequency\n",
+ " total_count += frequency\n",
+ "\n",
+ " # Calculate the mean\n",
+ " mean = total_sum / total_count if total_count > 0 else 0\n",
+ "\n",
+ " return mean\n",
+ "\n",
+ "# Calculate the mean of the 'Value' column using the frequency distribution\n",
+ "mean_value_frequency = calculate_mean_frequency(value_counts)\n",
+ "mean_value_frequency\n"
+ ]
+ },
+ {
+ "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": [
+ {
+ "data": {
+ "text/plain": [
+ "2.5"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_median(data):\n",
+ " # Sort the data\n",
+ " sorted_data = sorted(data)\n",
+ " \n",
+ " # Count the number of observations\n",
+ " count = len(sorted_data)\n",
+ "\n",
+ " # Check if the count is even or odd\n",
+ " if count % 2 == 0:\n",
+ " # If even, the median is the average of the two middle numbers\n",
+ " median = (sorted_data[count // 2] + sorted_data[count // 2 - 1]) / 2\n",
+ " else:\n",
+ " # If odd, the median is the middle number\n",
+ " median = sorted_data[count // 2]\n",
+ "\n",
+ " return median\n",
+ "\n",
+ "# Calculate the median of the 'Value' column\n",
+ "median_value = calculate_median(dice_roll_sorted['Value'])\n",
+ "median_value\n"
+ ]
+ },
+ {
+ "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": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "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": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "value_counts_dice_thousand = roll_1000['value'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(value_counts_dice_thousand.index, value_counts_dice_thousand.values, color='purple', alpha=0.7)\n",
+ "plt.xlabel('Value')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Dice Roll Values (1000 Rolls)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "All the possible resulst seem to even out, the greater the size of the sample, the more evenly distributed this values are.\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": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts = ages_population['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts.index, observation_counts.values, color='orange', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"Based on this observation:\n",
+ "\n",
+ "The mean (average) age is likely to fall within the range of 35-40 years, as that is where the data is centered.\n",
+ "The standard deviation, which measures the amount of variation or dispersion in the data, is likely to be around 10-15 years. This is because most of the data seems to fall within this range on either side of the mean\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Calculate the exact mean and standard deviation and compare them with your guesses. Do they fall inside the ranges you guessed?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(36.56, 12.816499625976762)"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column\n",
+ "mean_age = ages_population['observation'].mean()\n",
+ "std_dev_age = ages_population['observation'].std()\n",
+ "\n",
+ "mean_age, std_dev_age\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "Comparing these values with our earlier estimates:\n",
+ "\n",
+ "The mean value does fall within the guessed range of 35-40 years.\n",
+ "The standard deviation is also within the guessed range of 10-15 years.\n",
+ "So, our estimates based on the frequency distribution plot were quite accurate.\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Now read the file `ages_population2.csv` . Calculate the frequency distribution and plot it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
observation
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
25.0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
31.0
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
29.0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
31.0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
29.0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " observation\n",
+ "0 25.0\n",
+ "1 31.0\n",
+ "2 29.0\n",
+ "3 31.0\n",
+ "4 29.0"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ages_population2 = pd.read_csv(\"C:\\\\Users\\\\carmo\\\\Desktop\\\\IronHack\\\\Week 3\\\\Day 3\\\\Descriptive-Stats\\\\data\\\\ages_population2.csv\")\n",
+ "ages_population2.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIhCAYAAABE54vcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNgklEQVR4nO3deVyU5f7/8fcoMAICbgmSqBzXXCs1S8tdzAU9WqlRZi5lx0xNPanHb4V9zTWNjp7UvhFoptmipscyMcsyrFxy7TzMSjEXotJAQRHk+v3hjzmNrDcgM+Dr+XjweDjXfd3X9bnnnmF4ey9jM8YYAQAAAAAKrYKrCwAAAACAsoYgBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAXguoqNjZXNZsv1Z/Lkya4ur1y59rmuVKmSgoKC1KVLF82ePVtJSUk51omMjJTNZrM0T1pamiIjI/XZZ59ZWi+3uerVq6e+fftaGqcgq1atUlRUVK7LbDabIiMjS3S+kvbJJ5+oTZs28vX1lc1m0/r16wtc5+DBg7LZbPL09NSZM2euf5EFyMjIUJMmTTRnzhxHW1Fen4X13XffKTIyUsePHy+B6osvPj5ekZGR+uOPPwrVf+3atXrwwQfVoEEDeXt7q169enrooYd09OhRp34ZGRmqX79+nq9vAKWLIAWgVMTExGjnzp1OP+PGjXN1WeVS9nMdFxenf/3rX7r11ls1d+5c3XLLLdq6datT31GjRmnnzp2Wxk9LS9OMGTMsB6mizFUU+QWpnTt3atSoUde9hqIyxmjQoEHy9PTUhg0btHPnTnXq1KnA9V5//XVJUmZmplasWHG9yyzQq6++qnPnzumpp57KsczK67OwvvvuO82YMcOtgtSMGTMKHaTmzp2rtLQ0TZ8+XZs3b9bMmTP17bff6vbbb9fhw4cd/Tw9PfXcc8/phRde0O+//36dqgdQWB6uLgDAjaF58+Zq06ZNofpmZGTIZrPJw4NfUUVx7XN933336emnn9bdd9+tgQMH6ujRowoMDJQk1a5dW7Vr176u9aSlpcnHx6dU5irInXfe6dL5C3L69GmdPXtWAwYMULdu3Qq1Tnp6ut566y21atVKv/32m9544w1NmTLlOleat8zMTM2fP18jRoyQr69vjuVWXp83io0bN6pmzZpObV27dlW9evX08ssvO4KyJD344IOaOHGili1bpn/84x+lXSqAP+GIFACX+uyzz2Sz2fTmm29q0qRJuvnmm2W32/XDDz9IkrZu3apu3brJ399fPj4+6tChgz755JMc42zatEm33nqr7Ha7QkND9dJLL+U4lez48eOy2WyKjY3NsX5up3wdPXpUERERqlmzpux2u2655Rb961//yrX+1atXa/r06QoODpa/v7+6d++uI0eO5Jhn8+bN6tatmwICAuTj46NbbrlFs2fPliS9+eabstlsuR61eeGFF+Tp6anTp08X+Jzmpk6dOlqwYIHOnz+vZcuWOdpzO91u27Zt6ty5s6pXry5vb2/VqVNH9913n9LS0nT8+HHddNNNkqQZM2Y4TtN69NFHncbbu3ev7r//flWtWlX169fPc65s69atU8uWLVWpUiX95S9/0T//+U+n5dmnhV17xCH7+c8+Ota5c2dt2rRJCQkJTqeRZcttPx86dEj9+/dX1apVValSJd16661avnx5rvMUdj/nZseOHerWrZv8/Pzk4+Oj9u3ba9OmTY7lkZGRjqA5ZcoU2Ww21atXr8Bx169fr99//12jRo3SsGHD9P3332vHjh05+qWnp2vSpEkKCgqSj4+POnbsqD179qhevXqO/ZctMTFRo0ePVu3ateXl5aXQ0FDNmDFDmZmZBdazYcMGnTp1SkOHDi2wb7a8Xp+7d+/WkCFDVK9ePccpbw8++KASEhIcfWJjY/XAAw9Ikrp06eLY59nv87i4OPXv31+1a9dWpUqV1KBBA40ePVq//fabUw2//vqrHn/8cYWEhMhut+umm25Shw4dchwlK+h3UmRkpP7+979LkkJDQx315HcE99oQJUnBwcGqXbu2fv75Z6d2Ly8vDR48WK+99pqMMfk8qwCuN4IUgFJx5coVZWZmOv382bRp03TixAktXbrU8b+zK1euVFhYmPz9/bV8+XK98847qlatmnr27On0h8snn3yi/v37y8/PT2+//bbmz5+vd955RzExMUWu97vvvlPbtm116NAhLViwQP/+97/Vp08fjRs3TjNmzMjR/x//+IcSEhL0+uuv67XXXtPRo0cVHh6uK1euOPpER0erd+/eysrKcmznuHHjdPLkSUnS4MGDFRQUlCOsZWZmatmyZRowYICCg4OLvE29e/dWxYoV9fnnn+fZ5/jx4+rTp4+8vLz0xhtvaPPmzZozZ458fX11+fJl1apVS5s3b5YkjRw50nGa5rPPPus0zsCBA9WgQQO9++67Wrp0ab517du3TxMmTNDTTz+tdevWqX379ho/frxeeukly9v46quvqkOHDgoKCnI6jTQvR44cUfv27XX48GH985//1Nq1a9W0aVM9+uijmjdvXo7+hdnPudm+fbu6du2q5ORkRUdHa/Xq1fLz81N4eLjWrFkj6eqpj2vXrpUkPfXUU9q5c6fWrVtX4DZHR0fLbrfroYce0ogRI2Sz2RQdHZ2j3/DhwxUVFaXhw4frgw8+0H333acBAwbkOP0sMTFRd9xxhz7++GM999xz+uijjzRy5EjNnj1bjz32WIH1bNq0STVr1lTTpk0L7Ptnub0+jx8/rsaNGysqKkoff/yx5s6dqzNnzqht27aOINSnTx/NmjVLkvSvf/3Lsc/79OkjSfrxxx911113acmSJdqyZYuee+45ff3117r77ruVkZHhmGvo0KFav369nnvuOW3ZskWvv/66unfv7nQKXWF+J40aNcpxSuPatWsd9dx+++2Wno+ffvpJCQkJatasWY5lnTt3VkJCgg4dOmRpTAAlzADAdRQTE2Mk5fqTkZFhPv30UyPJdOzY0Wm91NRUU61aNRMeHu7UfuXKFdOqVStzxx13ONratWtngoODzcWLFx1tKSkpplq1aubPv+aOHTtmJJmYmJgcdUoyzz//vONxz549Te3atU1ycrJTv7Fjx5pKlSqZs2fPGmOMo/7evXs79XvnnXeMJLNz505jjDHnz583/v7+5u677zZZWVl5Pl/PP/+88fLyMr/88oujbc2aNUaS2b59e57rGfPf53rXrl159gkMDDS33HKL03x/fo7ee+89I8ns27cvzzF+/fXXHM/XteM999xzeS77s7p16xqbzZZjvh49ehh/f3+TmprqtG3Hjh1z6pf9/H/66aeOtj59+pi6devmWvu1dQ8ZMsTY7XZz4sQJp369evUyPj4+5o8//nCap6D9nJc777zT1KxZ05w/f97RlpmZaZo3b25q167teE1kv0bnz5+f73jZjh8/bipUqGCGDBniaOvUqZPx9fU1KSkpjrbDhw8bSWbKlClO669evdpIMsOGDXO0jR492lSuXNkkJCQ49X3ppZeMJHP48OF8a7rlllvMvffem6O9KK/Pa2VmZpoLFy4YX19f88orrzja33333Ryvg9xkZWWZjIwMk5CQYCSZDz74wLGscuXKZsKECXmua+V30vz583N9vRZWRkaG6dy5s/H398/x2jTGmKNHjxpJZsmSJUUaH0DJ4IgUgFKxYsUK7dq1y+nnz9dA3XfffU794+PjdfbsWQ0bNszpKFZWVpbuvfde7dq1S6mpqUpNTdWuXbs0cOBAVapUybF+9v/2F8WlS5f0ySefaMCAAfLx8XGav3fv3rp06ZK++uorp3X69evn9Lhly5aS5DgFKT4+XikpKRozZky+d8n729/+Jkn6v//7P0fb4sWL1aJFC3Xs2LFI2/NnpoBTgW699VZ5eXnp8ccf1/Lly/XTTz8VaZ5r92d+mjVrplatWjm1RUREKCUlRXv37i3S/IW1bds2devWTSEhIU7tjz76qNLS0nIczSpoP+cmNTVVX3/9te6//35VrlzZ0V6xYkUNHTpUJ0+eLPTpgdeKiYlRVlaWRowY4WgbMWKEUlNTHUe6pKtHxCRp0KBBTuvff//9Oa5F/Pe//60uXbooODjY6bXfq1cvp7Hycvr06VxPVSuMa1+fFy5c0JQpU9SgQQN5eHjIw8NDlStXVmpqqv7zn/8UasykpCQ98cQTCgkJkYeHhzw9PVW3bl1JchrjjjvuUGxsrGbOnKmvvvrK6WiVVPjfScVljNHIkSP1xRdfaMWKFTlem9J/TwU8depUsecDUHRcyQ2gVNxyyy353myiVq1aTo9/+eUXSVf/0MvL2bNnZbPZlJWVpaCgoBzLc2srjN9//12ZmZlatGiRFi1alGufa6+vqF69utNju90uSbp48aKkq9dfSCrwZguBgYEaPHiwli1bpqlTp+rw4cP64osvnK4bKarU1FT9/vvvatGiRZ596tevr61bt2revHl68sknlZqaqr/85S8aN26cxo8fX+i5rt2f+clv313vO5P9/vvvudaafQrltfMXtJ9zc+7cORljLM1TGFlZWYqNjVVwcLBat27tOEWve/fu8vX1VXR0tOMOhdnjX3sTBw8Pjxzb9Msvv2jjxo3y9PTMdd5rX/vXunjxotN/ahRWbq/PiIgIffLJJ3r22WfVtm1b+fv7y2azqXfv3vk+59mysrIUFham06dP69lnn1WLFi3k6+urrKws3XnnnU5jrFmzRjNnztTrr7+uZ599VpUrV9aAAQM0b948BQUFFfp3Um432CgsY4xGjRqllStXavny5erfv3+u/bKf38I8BwCuH4IUALdw7VGaGjVqSJIWLVqU553WAgMDHXf4S0xMzLH82rbsPz7S09Od2q/9I7Zq1aqOowVPPvlkrnOHhobmszU5Zd+gIft6qPyMHz9eb775pj744ANt3rxZVapU0UMPPWRpvtxs2rRJV65cUefOnfPtd8899+iee+7RlStXtHv3bi1atEgTJkxQYGCghgwZUqi5rHw3VX77LvuP/Lz2XUF/1BekevXquX7vUvZNPbJfh8VRtWpVVahQocTn2bp1q+NI2LVhSJK++uorfffdd2ratKlj+S+//KKbb77Z0SczMzPH679GjRpq2bKlXnzxxVznLeg6vRo1aujs2bOWtkXK+fpMTk7Wv//9bz3//POaOnWqo196enqhxz906JD279+v2NhYDRs2zNGefTOba+uOiopSVFSUTpw4oQ0bNmjq1KlKSkrS5s2bC/07qaiyQ1RMTIyio6P18MMP59k3e/tL4vUJoOgIUgDcUocOHVSlShV99913Gjt2bJ79vLy8dMcdd2jt2rWaP3++4w/u8+fPa+PGjU59AwMDValSJR04cMCp/YMPPnB67OPjoy5duujbb79Vy5Yt5eXlVeztad++vQICArR06VINGTIk36DRunVrtW/fXnPnztWhQ4f0+OOPF+t/uSXpxIkTmjx5sgICAjR69OhCrVOxYkW1a9dOTZo00VtvvaW9e/dqyJAhhToKY8Xhw4e1f/9+p9P7Vq1aJT8/P8cF+tl3rztw4IAaN27s6Ldhw4Yc49nt9kLX1q1bN61bt06nT592CggrVqyQj49Pidwu3dfXV+3atdPatWv10ksvydvbW9LVoyUrV65U7dq11ahRI8vjRkdHq0KFClq7dq0CAgKclp08eVJDhw7VG2+8oZdeeslxWuiaNWucbnrw3nvv5bjxS9++ffXhhx+qfv36qlq1quW6mjRpoh9//NHSOrm9Pm02m4wxjtdbttdffz3HzT3yek1mv8+uHaOgI7x16tTR2LFj9cknn+jLL7+UVPjfSfnVkxdjjB577DHFxMRo2bJlGj58eL79s0+5tXpDDwAliyAFwC1VrlxZixYt0rBhw3T27Fndf//9qlmzpn799Vft379fv/76q5YsWSJJ+t///V/de++96tGjhyZNmqQrV65o7ty58vX1dfqfa5vNpocfflhvvPGG6tevr1atWumbb77RqlWrcsz/yiuv6O6779Y999yjv/3tb6pXr57Onz+vH374QRs3btS2bdssb8+CBQs0atQode/eXY899pgCAwP1ww8/aP/+/Vq8eLFT//Hjx2vw4MGy2WwaM2aMpbkOHTrkuH4jKSlJX3zxhWJiYlSxYkWtW7fOcXQsN0uXLtW2bdvUp08f1alTR5cuXdIbb7wh6eopY9LV68/q1q2rDz74QN26dVO1atVUo0aNQt2qOzfBwcHq16+fIiMjVatWLa1cuVJxcXGaO3eufHx8JElt27ZV48aNNXnyZGVmZqpq1apat25drrf5btGihdauXaslS5aodevWqlChQp6nlT7//POOa4Kee+45VatWTW+99ZY2bdqkefPm5QgoRTV79mz16NFDXbp00eTJk+Xl5aVXX31Vhw4d0urVqy0dwZOuHkX94IMP1LNnzzxP/3r55Ze1YsUKzZ49W82aNdODDz6oBQsWqGLFiuratasOHz6sBQsWKCAgQBUq/PeS6RdeeEFxcXFq3769xo0bp8aNG+vSpUs6fvy4PvzwQy1dujTfU1Q7d+6sF154wfH9Ydcq7OvT399fHTt21Pz58x2vr+3btys6OlpVqlRxGrN58+aSpNdee01+fn6qVKmSQkND1aRJE9WvX19Tp06VMUbVqlXTxo0bFRcX57R+cnKyunTpooiICDVp0kR+fn7atWuXNm/erIEDB0qy9jsp+/TEV155RcOGDZOnp6caN24sPz+/XJ+zcePGKTo6WiNGjFCLFi2crsG02+267bbbnPp/9dVXqlixYolcNwmgGFx2mwsAN4SC7tSVfTe0d999N9fl27dvN3369DHVqlUznp6e5uabbzZ9+vTJ0X/Dhg2mZcuWxsvLy9SpU8fMmTMn17vEJScnm1GjRpnAwEDj6+trwsPDzfHjx3O9C92xY8fMiBEjzM0332w8PT3NTTfdZNq3b29mzpxZYP153SHwww8/dNxVzcfHxzRt2tTMnTs3x3anp6cbu92e693P8nLtHRK9vLxMzZo1TadOncysWbNMUlJSjnWufY527txpBgwYYOrWrWvsdrupXr266dSpk9mwYYPTelu3bjW33XabsdvtTnd9yx7v119/LXAuY67e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AAAAlHeWglTDhg115swZffrpp5KkwYMH65///KcCAwOvS3EAAAAA4I4sXSNljHF6/NFHHyk1NbVECwIAAAAAd1ekm01kuzZYAQAAAMCNwFKQstlsOa6B4pooAAAAADcaS9dIGWP06KOPym63S5IuXbqkJ554Isdd+9auXVtyFQIAAACAm7EUpIYNG+b0+OGHHy7RYgAAAACgLLAUpGJiYq5XHXk6deqUpkyZoo8++kgXL15Uo0aNFB0drdatW0u6epRsxowZeu2113Tu3Dm1a9dO//rXv9SsWbNSrxUAAADAjaFIX8hbWs6dO6cOHTqoS5cu+uijj1SzZk39+OOPqlKliqPPvHnztHDhQsXGxqpRo0aaOXOmevTooSNHjsjPz891xQMAAPcVHu7a+TdudO38AIrNrYPU3LlzFRIS4nQkrF69eo5/G2MUFRWl6dOna+DAgZKk5cuXKzAwUKtWrdLo0aNLu2QAAAAANwC3DlIbNmxQz5499cADD2j79u26+eabNWbMGD322GOSpGPHjikxMVFhYWGOdex2uzp16qT4+Pg8g1R6errS09Mdj1NSUiRJGRkZysjIuI5bBKDIPD1dO39BvxtcWZ871ya5d33uXJtEfcXhzrVJBdcHwGUKmwdsxo2/DKpSpUqSpIkTJ+qBBx7QN998owkTJmjZsmV65JFHFB8frw4dOujUqVMKDg52rPf4448rISFBH3/8ca7jRkZGasaMGTnaV61aJR8fn+uzMQAAAADcXlpamiIiIpScnCx/f/88+7n1EamsrCy1adNGs2bNkiTddtttOnz4sJYsWaJHHnnE0e/a77IyxuT7/VbTpk3TxIkTHY9TUlIUEhKisLCwfJ8sAC40eLBr51+zJv/lrqzPnWuT3Ls+d65Nor7icOfapILrA+Ay2WerFcStg1StWrXUtGlTp7ZbbrlF77//viQpKChIkpSYmKhatWo5+iQlJSkwMDDPce12u+O7sP7M09NTnq4+1A8gd64+Daag3w2urM+da5Pcuz53rk2ivuJw59ok159aCCBPhc0DFa5zHcXSoUMHHTlyxKnt+++/V926dSVJoaGhCgoKUlxcnGP55cuXtX37drVv375UawUAAABw43DrI1JPP/202rdvr1mzZmnQoEH65ptv9Nprr+m1116TdPWUvgkTJmjWrFlq2LChGjZsqFmzZsnH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/dQxzrX7YsKECaZOnTrGy8vL3HTTTSYsLMzEx8eX7saVMQXti7S0NBMWFmZuuukm4+npaerUqWOGDRtmTpw44TQO74viK8zvKGOMWbZsmfH29jZ//PFHruPwvii+ESNGmLp16zqes27dujlClDF8VpSm/PYFnxWlK799wWdF2WEzxpjre8wLAAAAAMoXrpECAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLCFIAgHIvPj5eFStW1L333uvqUgAA5YTNGGNcXQQAANfTqFGjVLlyZb3++uv67rvvVKdOHVeXBAAo4zgiBQAo11JTU/XOO+/ob3/7m/r27avY2Fin5Rs2bFDDhg3l7e2tLl26aPny5bLZbPrjjz8cfeLj49WxY0d5e3srJCRE48aNU2pqauluCADArRCkAADl2po1a9S4cWM1btxYDz/8sGJiYpR9Msbx48d1//33669//av27dun0aNHa/r06U7rHzx4UD179tTAgQN14MABrVmzRjt27NDYsWNdsTkAADfBqX0AgHKtQ4cOGjRokMaPH6/MzEzVqlVLq1evVvfu3TV16lRt2rRJBw8edPT/n//5H7344os6d+6cqlSpokceeUTe3t5atmyZo8+OHTvUqVMnpaamqlKlSq7YLACAi3FECgBQbh05ckTffPONhgwZIkny8PDQ4MGD9cYbbziWt23b1mmdO+64w+nxnj17FBsbq8qVKzt+evbsqaysLB07dqx0NgQA4HY8XF0AAADXS3R0tDIzM3XzzTc72owx8vT01Llz52SMkc1mc1rn2hM1srKyNHr0aI0bNy7H+Ny0AgBuXAQpAEC5lJmZqRUrVmjBggUKCwtzWnbffffprbfeUpMmTfThhx86Ldu9e7fT49tvv12HDx9WgwYNrnvNAICyg2ukAADl0vr16zV48GAlJSUpICDAadn06dP14Ycfau3atWrcuLGefvppjRw5Uvv27dOkSZN08uRJ/fHHHwoICNCBAwd05513avjw4Xrsscfk6+ur//znP4qLi9OiRYtctHUAAFfjGikAQLkUHR2t7t275whR0tUjUvv27dO5c+f03nvvae3atWrZsqWWLFniuGuf3W6XJLVs2VLbt2/X0aNHdc899+i2227Ts88+q1q1apXq9gAA3AtHpAAA+JMXX3xRS5cu1c8//+zqUgAAboxrpAAAN7RXX31Vbdu2VfXq1fXll19q/vz5fEcUAKBABCkAwA3t6NGjmjlzps6ePas6depo0qRJmjZtmqvLAgC4OU7tAwAAAACLuNkEAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwKL/BwKW+1OfYgxoAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts2 = ages_population2['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts2.index, observation_counts2.values, color='red', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age (Dataset 2)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- What do you see? Is there any difference with the frequency distribution in step 1?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "In the first dataset (from 'ages_population.csv'), the age values were distributed in a bell-shaped curve (normal distribution) centered around 35-40 years, with a wide range of ages from around 0 to 70.\n",
+ "\n",
+ "In contrast, the second dataset (from 'ages_population2.csv') has a more narrow distribution, primarily covering ages from around 20 to 35. The data is still somewhat bell-shaped, but the peak is higher and narrower, indicating a lower spread in the data. The distribution is centered around 27-28 years, which is younger than the center of the distribution in the first dataset.\n",
+ "\n",
+ "These differences could suggest different population samples. For example, the second dataset might represent a population sample from a city with a younger demographic, while the first dataset might represent a more diverse or broader population sample.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 5.- Calculate the mean and standard deviation. Compare the results with the mean and standard deviation in step 2. What do you think?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(27.155, 2.969813932689186)"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column in the second dataset\n",
+ "mean_age2 = ages_population2['observation'].mean()\n",
+ "std_dev_age2 = ages_population2['observation'].std()\n",
+ "\n",
+ "mean_age2, std_dev_age2\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "Comparing these values with those from the first dataset:\n",
+ "\n",
+ "The mean age in the second dataset is lower than in the first dataset (27.16 vs 36.56 years), reflecting the younger age distribution we observed in the histogram.\n",
+ "The standard deviation in the second dataset is also significantly lower than in the first dataset (2.97 vs 12.82 years), indicating that the ages in the second dataset are more closely clustered around the mean.\n",
+ "The differences in the mean and standard deviation between the two datasets align with our observations from the histograms. The second dataset appears to represent a younger and less diverse age group compared to the first dataset.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Challenge 5\n",
+ "Now is the turn of `ages_population3.csv`.\n",
+ "\n",
+ "#### 1.- Read the file `ages_population3.csv`. Calculate the frequency distribution and plot it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAIhCAYAAABwnkrAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL8klEQVR4nO39eXgUZd7+f58NSZokJGwxm0CIrLKqLLLJIoIsZhB0JsioIDLiCAICtwrcSvBmU5TBcQEcMMAgEhdAIghEkSgCI6Ds80XUALLLGggQEnI9f/ikf3RlD53uTni/jqOPw67r01WfurpsOKnqapsxxggAAAAA4FDO0w0AAAAAgLchKAEAAACABUEJAAAAACwISgAAAABgQVACAAAAAAuCEgAAAABYEJQAAAAAwIKgBAAAAAAWBCUAAAAAsCAoASi2+fPny2az5foYM2aMp9srU6xzXaFCBYWHh6tz586aOnWqTp48meM1cXFxstlsRdrOpUuXFBcXp/Xr1xfpdbltq1atWnrggQeKtJ6CLF68WDNnzsx1zGazKS4uzqXbc7WvvvpKLVq0UGBgoGw2m5YvX17ga3bt2iWbzSZfX18dO3as5JssQEZGhho0aKBp06Y5lhXn+CysvXv3Ki4uTgcOHHBB9zdu48aNiouL07lz5wpV/+WXX6pr166KjIyU3W5XaGio7r33Xq1atcqpLiMjQ7Vr187z+AbgfgQlADcsPj5emzZtcnoMHz7c022VSdlznZSUpHfeeUd33HGHXn31Vd1+++368ssvnWoHDx6sTZs2FWn9ly5d0sSJE4sclIqzreLILyht2rRJgwcPLvEeissYo7/85S/y9fXVihUrtGnTJnXs2LHA182dO1eSlJmZqYULF5Z0mwV69913dfbsWT377LM5xopyfBbW3r17NXHiRK8KShMnTix0UDp9+rQaNWqkf/zjH1q7dq3mzJkjX19f9erVS4sWLXLU+fr66uWXX9Yrr7yi06dPl1D3AIrCx9MNACj9GjdurBYtWhSqNiMjQzabTT4+fPwUh3WuH3roIT333HNq3769+vbtq/379yssLEySVL16dVWvXr1E+7l06ZICAgLcsq2CtG7d2qPbL8jRo0d15swZ9enTR126dCnUa9LT0/XBBx+oWbNmOnXqlN5//3298MILJdxp3jIzMzV9+nQNGjRIgYGBOcaL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0ktq0qSJAgMDlZWVpdatWzutIyEhQZMmTdLcuXP10ksvqWLFiurTp49ee+01hYeHF/ozKbcbWBRW3bp1Hf/9pz/9ST169NDQoUMVGxurcuX+v3+3zp7fwswBgJJFUAJQ4qxnWUJCQiT98S+sed2pLCwszHGHvOPHj+cYty7L/stFenq603LrX1KrVKni+Nf+oUOH5rrt6OjofPYmp+wbIGR/Hyk/I0aM0L///W999tlnWr16tSpXrqy//vWvRdpeblauXKlr166pU6dO+dbdc889uueee3Tt2jVt3bpVb731lkaOHKmwsDD169evUNsqym8z5ffeZf8lPq/3rqC/tBekWrVquf7uUPZNM7KPwxtRpUoVlStXzuXb+fLLLx1nsqxhR5I2b96svXv3qmHDho7xEydO6NZbb3XUZGZm5jj+Q0JC1LRpU02ePDnX7Rb0PbmQkBCdOXOmSPsi5Tw+z58/r88//1wTJkzQiy++6KhLT08v9Pp3796tHTt2aP78+RowYIBjefbNYqx9z5w5UzNnztShQ4e0YsUKvfjiizp58qRWr15d6M8kV2rVqpVWr16t33//3Wnd2fvviuMTwI0hKAFwu3bt2qly5crau3evhg0blmedn5+fWrVqpaVLl2r69OmOv1BfuHBBiYmJTrVhYWGqUKGCdu7c6bT8s88+c3oeEBCgzp0768cff1TTpk3l5+d3w/vTtm1bVapUSbNnz1a/fv3yDRLNmzdX27Zt9eqrr2r37t166qmnbuhfqSXp0KFDGjNmjCpVqqQhQ4YU6jXly5fX3XffrQYNGuiDDz7QDz/8oH79+hXqLEpR7NmzRzt27HC6/G7x4sUKCgpyfAE+++5vO3fuVP369R11K1asyLE+u91e6N66dOmiZcuW6ejRo04BYOHChQoICHDJ7cQDAwN19913a+nSpXr99dfl7+8v6Y+zHYsWLVL16tVVr169Iq933rx5KleunJYuXapKlSo5jR0+fFiPPfaY3n//fb3++uuOyzYTEhKcbirwySef5LixygMPPKBVq1apdu3aqlKlSpH7atCggX755ZcivSa349Nms8kY4zjess2dOzfHzTPyOiaz/z+zrqOgM7Q1a9bUsGHD9NVXX+m7776TVPjPpPz6KQpjjJKTk1W5cuUcQTj7ktii3jADgOsRlAC4XcWKFfXWW29pwIABOnPmjB5++GGFhobq999/144dO/T7779r1qxZkqT/+7//U/fu3dW1a1eNHj1a165d06uvvqrAwECnf3m22Wx69NFH9f7776t27dpq1qyZvv/+ey1evDjH9t988021b99e99xzj/7+97+rVq1aunDhgn7++WclJiZq3bp1Rd6fN954Q4MHD9Z9992nv/3tbwoLC9PPP/+sHTt26O2333aqHzFihGJjY2Wz2fTMM88UaVu7d+92fH/i5MmT+vbbbxUfH6/y5ctr2bJljrNbuZk9e7bWrVunXr16qWbNmrpy5Yref/99SX9c0iX98f2vqKgoffbZZ+rSpYuqVq2qkJCQQt3KOjeRkZH605/+pLi4OEVERGjRokVKSkrSq6++qoCAAElSy5YtVb9+fY0ZM0aZmZmqUqWKli1bluttsJs0aaKlS5dq1qxZat68ucqVK5fnZZ8TJkxwfCfn5ZdfVtWqVfXBBx9o5cqVeu2113IEkOKaOnWqunbtqs6dO2vMmDHy8/PTu+++q927d+vDDz8s0hk46Y+zoNnfY+ndu3euNf/4xz+0cOFCTZ06VY0aNdIjjzyiN954Q+XLl9e9996rPXv26I033lClSpWcLut65ZVXlJSUpLZt22r48OGqX7++rly5ogMHDmjVqlWaPXt2vpeQdurUSa+88orj97OsCnt8BgcHq0OHDpo+fbrj+EpOTta8efNUuXJlp3U2btxYkvTee+8pKChIFSpUUHR0tBo0aKDatWvrxRdflDFGVatWVWJiopKSkpxef/78eXXu3Fn9+/dXgwYNFBQUpC1btmj16tXq27evpKJ9JmVfPvjmm29qwIAB8vX1Vf369RUUFJTrnPXu3VvNmjXTHXfcoWrVquno0aOaP3++kpOT9c477+T4HtnmzZtVvnx5l3xvEcAN8uSdJACUbgXd6Sr7bmIff/xxruPJycmmV69epmrVqsbX19fceuutplevXjnqV6xYYZo2bWr8/PxMzZo1zbRp03K9y9r58+fN4MGDTVhYmAkMDDQxMTHmwIEDud7FLSUlxQwaNMjceuutxtfX19xyyy2mbdu2ZtKkSQX2n9cd9latWuW4K1lAQIBp2LChefXVV3Psd3p6urHb7bnePSwv1jsM+vn5mdDQUNOxY0czZcoUc/LkyRyvsc7Rpk2bTJ8+fUxUVJSx2+2mWrVqpmPHjmbFihVOr/vyyy/NnXfeaex2u9Nd07LX9/vvvxe4LWP+uOtdr169zCeffGIaNWpk/Pz8TK1atcyMGTNyvP6nn34y3bp1M8HBweaWW24xzz77rFm5cmWOu52dOXPGPPzww6Zy5crGZrM5bTO393nXrl0mJibGVKpUyfj5+ZlmzZrleN+K+j7n5ttvvzX33nuvCQwMNP7+/qZ169YmMTEx1/UVdNe7mTNnGklm+fLledbMnj3bSDKffvqpMcaYK1eumFGjRpnQ0FBToUIF07p1a7Np0yZTqVIl89xzzzm99vfffzfDhw830dHRxtfX11StWtU0b97cjB8/3ly8eDHf3n7++Wdjs9nMRx995LS8OMfn4cOHzUMPPWSqVKligoKCTPfu3c3u3btNVFSU0536suckOjralC9f3uk92bt3r+natasJCgoyVapUMX/+85/NoUOHnI6FK1eumKeffto0bdrUBAcHG39/f1O/fn0zYcIEx50XsxX2M2ns2LEmMjLSlCtXrsA78r366qumZcuWpkqVKqZ8+fKmWrVq5v777zeff/55rvX33HNPjrvvAfAMmzH8ohmA0icuLk4TJ04slT/KmJiYqD/96U9auXKlevbs6el2UEZt3LhR7dq10wcffKD+/fu7bL0xMTHKzMzUF1984bJ14g+//PKL6tatqzVr1qhr166ebge46XHpHQC4yd69e3Xw4EGNHj1ad9xxh+OWzMCNSkpK0qZNm9S8eXP5+/trx44dmjZtmurWreu4vMxVpk6dqjvvvFNbtmxRy5YtXbrum92kSZPUpUsXQhLgJQhKAOAmzzzzjL777jvdddddWrBgQZG/uwLkJTg4WGvXrtXMmTN14cIFhYSEqEePHpo6dWqxbuedn8aNGys+Pj7XOxqi+DIzM1W7dm2NHTvW060A+P/j0jsAAAAAsChXcAkAAAAA3FwISgAAAABgQVACAAAAAIsyfzOHrKwsHT16VEFBQXxxGgAAALiJGWN04cIFRUZGOv0gd27KfFA6evSoatSo4ek2AAAAAHiJ3377TdWrV8+3pswHpaCgIEl/TEZwcLCHuwEAAADgKampqapRo4YjI+SnzAel7MvtgoODCUoAAAAACvWVHG7mAAAAAAAWBCUAAAAAsCAoAQAAAIAFQQkAAAAALAhKAAAAAGBBUAIAAAAAC4ISAAAAAFgQlAAAAADAgqAE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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "ages_population3 = pd.read_csv(\"C:\\\\Users\\\\carmo\\\\Desktop\\\\IronHack\\\\Week 3\\\\Day 3\\\\Descriptive-Stats\\\\data\\\\ages_population3.csv\")\n",
+ "\n",
+ "\n",
+ "# Calculate frequency distribution for the 'observation' column\n",
+ "observation_counts3 = ages_population3['observation'].value_counts().sort_index()\n",
+ "\n",
+ "# Create bar plot for frequency distribution\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.bar(observation_counts3.index, observation_counts3.values, color='red', alpha=0.7)\n",
+ "plt.xlabel('Age')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Frequency Distribution of Age (Dataset 3)')\n",
+ "plt.grid(axis='y')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 2.- Calculate the mean and standard deviation. Compare the results with the plot in step 1. What is happening?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(41.989, 16.144705959865934)"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the mean and standard deviation of the 'observation' column in the third dataset\n",
+ "mean_age3 = ages_population3['observation'].mean()\n",
+ "std_dev_age3 = ages_population3['observation'].std()\n",
+ "\n",
+ "mean_age3, std_dev_age3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'\\nThe frequency distribution of age values for the third dataset shows that the data is not symmetric and has a slightly bimodal distribution, with one peak around 35 years and another around 67 years.\\n\\nThe exact mean (average) age for this dataset is approximately 41.99 years, and the standard deviation is approximately 16.14 years.\\n\\nCompared to the first two datasets, this one has a higher mean age, suggesting that it represents an older population. The larger standard deviation indicates a greater spread in the data, which is consistent with the broader and more varied distribution visible in the histogram. The presence of two peaks in the distribution suggests that there might be two distinct age groups within this population sample.'"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "The frequency distribution of age values for the third dataset shows that the data is not symmetric and has a slightly bimodal distribution, with one peak around 35 years and another around 67 years.\n",
+ "\n",
+ "The exact mean (average) age for this dataset is approximately 41.99 years, and the standard deviation is approximately 16.14 years.\n",
+ "\n",
+ "Compared to the first two datasets, this one has a higher mean age, suggesting that it represents an older population. The larger standard deviation indicates a greater spread in the data, which is consistent with the broader and more varied distribution visible in the histogram. The presence of two peaks in the distribution suggests that there might be two distinct age groups within this population sample.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 3.- Calculate the four quartiles. Use the results to explain your reasoning for question in step 2. How much of a difference is there between the median and the mean?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(30.0, 40.0, 53.0)"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def calculate_quartiles_new(data):\n",
+ " # Sort the data\n",
+ " sorted_data = sorted(data)\n",
+ "\n",
+ " # Calculate Q2 (median)\n",
+ " Q2 = calculate_median(sorted_data)\n",
+ "\n",
+ " # Calculate indices for Q1 and Q3\n",
+ " mid_index = len(sorted_data) // 2\n",
+ " Q1_index = mid_index // 2\n",
+ " Q3_index = mid_index + Q1_index if len(sorted_data) % 2 == 0 else mid_index + Q1_index + 1\n",
+ "\n",
+ " # Calculate Q1 and Q3\n",
+ " if len(sorted_data) % 2 == 0: # even length\n",
+ " Q1 = (sorted_data[Q1_index] + sorted_data[Q1_index - 1]) / 2\n",
+ " Q3 = (sorted_data[Q3_index] + sorted_data[Q3_index - 1]) / 2\n",
+ " else: # odd length\n",
+ " Q1 = sorted_data[Q1_index]\n",
+ " Q3 = sorted_data[Q3_index]\n",
+ "\n",
+ " return Q1, Q2, Q3\n",
+ "\n",
+ "# Calculate the quartiles of the 'observation' column in the third dataset using the new function\n",
+ "Q1_3_new, Q2_3_new, Q3_3_new = calculate_quartiles_new(ages_population3['observation'])\n",
+ "Q1_3_new, Q2_3_new, Q3_3_new\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### 4.- Calculate other percentiles that might be useful to give more arguments to your reasoning."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "The difference between the mean (approximately 41.99 years) and the median (40.0 years) is about 2 years.\n",
+ "\n",
+ "Comparing the mean and median can provide insights into the shape of the distribution. When the mean and median are close, as they are in this case, it suggests that the data is somewhat symmetric around the mean/median. However, the histogram we plotted earlier showed a slightly bimodal distribution, indicating two groups within the population.\n",
+ "\n",
+ "The quartiles provide additional information. Half of the population is under 40 years old (the median), and 75% of the population is under 53 years old (Q3). The difference between Q3 and the maximum value in the dataset is quite large, which accounts for the long tail on the right side of the distribution (ages above 53). This tail is pulling the mean upwards, making it slightly larger than the median.\"\"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Bonus challenge\n",
+ "Compare the information about the three neighbourhoods. Prepare a report about the three of them. Remember to find out which are their similarities and their differences backing your arguments in basic statistics."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# your code here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\"\"\"\n",
+ "your comments here\n",
+ "\"\"\""
+ ]
+ }
+ ],
+ "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.10.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}