diff --git a/lab-hypothesis-testing.ipynb b/lab-hypothesis-testing.ipynb index 0cc26d5..52690ee 100644 --- a/lab-hypothesis-testing.ipynb +++ b/lab-hypothesis-testing.ipynb @@ -27,6 +27,25 @@ "**Challenge 1**" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Columna\tTipo\tDescripción \n", + "Name\tstr\tNombre del Pokémon \n", + "Type 1\tstr\tTipo principal \n", + "Type 2\tstr/NaN\tTipo secundario \n", + "HP\tint/float\tVida base (3 NaN) \n", + "Attack\tint\tAtaque físico \n", + "Defense\tint\tDefensa física \n", + "Sp. Atk\tint\tAtaque especial \n", + "Sp. Def\tint\tDefensa especial \n", + "Speed\tint\tVelocidad \n", + "Generation\tint\tGeneración (1–6) \n", + "Legendary\tbool\t¿Es legendario? " + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -38,20 +57,17 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ - "#libraries\n", "import pandas as pd\n", - "import scipy.stats as st\n", - "import numpy as np\n", - "\n" + "from scipy.stats import ttest_ind #para los test\n" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 58, "metadata": {}, "outputs": [ { @@ -159,185 +175,367 @@ " 1\n", " False\n", " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed \\\n", + "0 Bulbasaur Grass Poison 45 49 49 65 65 45 \n", + "1 Ivysaur Grass Poison 60 62 63 80 80 60 \n", + "2 Venusaur Grass Poison 80 82 83 100 100 80 \n", + "3 Mega Venusaur Grass Poison 80 100 123 122 120 80 \n", + "4 Charmander Fire NaN 39 52 43 60 50 65 \n", + "\n", + " Generation Legendary \n", + "0 1 False \n", + "1 1 False \n", + "2 1 False \n", + "3 1 False \n", + "4 1 False " + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/pokemon.csv\")\n", + "df.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LE ECHO UN VISTAZO A LO QUE TIENE ESTE DATAFRAME" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
NameType 1Type 2HPAttackDefenseSp. AtkSp. DefSpeedGenerationLegendary
795DiancieRockFairy50100150100150506TrueboolNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN800.0
796Mega DiancieRockFairy501601101601101106True
797Hoopa ConfinedPsychicGhost8011060150130706Truefloat1.0NaN386.0NaNNaNNaNNaNNaNNaNNaNNaN
798Hoopa UnboundPsychicDark8016060170130806TrueintNaNNaNNaN800.0800.0800.0800.0800.0800.0800.0NaN
799VolcanionFireWater8011012013090706Truestr799.0800.0414.0NaNNaNNaNNaNNaNNaNNaNNaN
\n", - "

800 rows × 11 columns

\n", "
" ], "text/plain": [ - " Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def \\\n", - "0 Bulbasaur Grass Poison 45 49 49 65 65 \n", - "1 Ivysaur Grass Poison 60 62 63 80 80 \n", - "2 Venusaur Grass Poison 80 82 83 100 100 \n", - "3 Mega Venusaur Grass Poison 80 100 123 122 120 \n", - "4 Charmander Fire NaN 39 52 43 60 50 \n", - ".. ... ... ... .. ... ... ... ... \n", - "795 Diancie Rock Fairy 50 100 150 100 150 \n", - "796 Mega Diancie Rock Fairy 50 160 110 160 110 \n", - "797 Hoopa Confined Psychic Ghost 80 110 60 150 130 \n", - "798 Hoopa Unbound Psychic Dark 80 160 60 170 130 \n", - "799 Volcanion Fire Water 80 110 120 130 90 \n", - "\n", - " Speed Generation Legendary \n", - "0 45 1 False \n", - "1 60 1 False \n", - "2 80 1 False \n", - "3 80 1 False \n", - "4 65 1 False \n", - ".. ... ... ... \n", - "795 50 6 True \n", - "796 110 6 True \n", - "797 70 6 True \n", - "798 80 6 True \n", - "799 70 6 True \n", - "\n", - "[800 rows x 11 columns]" + " Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed \\\n", + "bool NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", + "float 1.0 NaN 386.0 NaN NaN NaN NaN NaN NaN \n", + "int NaN NaN NaN 800.0 800.0 800.0 800.0 800.0 800.0 \n", + "str 799.0 800.0 414.0 NaN NaN NaN NaN NaN NaN \n", + "\n", + " Generation Legendary \n", + "bool NaN 800.0 \n", + "float NaN NaN \n", + "int 800.0 NaN \n", + "str NaN NaN " ] }, - "execution_count": 3, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/pokemon.csv\")\n", - "df" + "df.apply(lambda col: col.apply(lambda x: type(x).__name__).value_counts())\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- We posit that Pokemons of type Dragon have, on average, more HP stats than Grass. Choose the propper test and, with 5% significance, comment your findings." + "Voy a verlo tb de otra manera para confirmar lo que tengo" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 60, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== INFORME COMPLETO DEL DATAFRAME ===\n", + "\n", + "🔹 Cantidad de valores únicos para Name:\n", + "800\n", + "\n", + "🔹 Tipos internos y cantidades para Name:\n", + "Name\n", + "str 799\n", + "float 1\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Name:\n", + "1\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Type 1:\n", + "18\n", + "\n", + "🔹 Tipos internos y cantidades para Type 1:\n", + "Type 1\n", + "str 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Type 1:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Type 2:\n", + "19\n", + "\n", + "🔹 Tipos internos y cantidades para Type 2:\n", + "Type 2\n", + "str 414\n", + "float 386\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Type 2:\n", + "386\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para HP:\n", + "94\n", + "\n", + "🔹 Tipos internos y cantidades para HP:\n", + "HP\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para HP:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Attack:\n", + "111\n", + "\n", + "🔹 Tipos internos y cantidades para Attack:\n", + "Attack\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Attack:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Defense:\n", + "103\n", + "\n", + "🔹 Tipos internos y cantidades para Defense:\n", + "Defense\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Defense:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Sp. Atk:\n", + "105\n", + "\n", + "🔹 Tipos internos y cantidades para Sp. Atk:\n", + "Sp. Atk\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Sp. Atk:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Sp. Def:\n", + "92\n", + "\n", + "🔹 Tipos internos y cantidades para Sp. Def:\n", + "Sp. Def\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Sp. Def:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Speed:\n", + "108\n", + "\n", + "🔹 Tipos internos y cantidades para Speed:\n", + "Speed\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Speed:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Generation:\n", + "6\n", + "\n", + "🔹 Tipos internos y cantidades para Generation:\n", + "Generation\n", + "int 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Generation:\n", + "0\n", + "------------------------------------------------------\n", + "\n", + "🔹 Cantidad de valores únicos para Legendary:\n", + "2\n", + "\n", + "🔹 Tipos internos y cantidades para Legendary:\n", + "Legendary\n", + "bool 800\n", + "Name: count, dtype: int64\n", + "\n", + "🔹 Cantidad de NaN para Legendary:\n", + "0\n", + "------------------------------------------------------\n" + ] + } + ], "source": [ - "#code here" + "\n", + "\n", + "df = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/pokemon.csv\")\n", + "\n", + "# --- INFORME COMPLETO ---\n", + "print(\"=== INFORME COMPLETO DEL DATAFRAME ===\")\n", + "\n", + "for col in df.columns:\n", + "\n", + " print(f\"\\n🔹 Cantidad de valores únicos para {col}:\")\n", + " print(df[col].nunique(dropna=False))\n", + "\n", + " print(f\"\\n🔹 Tipos internos y cantidades para {col}:\")\n", + " print(f\"{df[col].apply(lambda x: type(x).__name__).value_counts(dropna=False)}\")\n", + "\n", + " print(f\"\\n🔹 Cantidad de NaN para {col}:\")\n", + " print(df[col].isna().sum())\n", + " print(\"------------------------------------------------------\")\n", + "\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- We posit that Legendary Pokemons have different stats (HP, Attack, Defense, Sp.Atk, Sp.Def, Speed) when comparing with Non-Legendary. Choose the propper test and, with 5% significance, comment your findings.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "#code here" + "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Challenge 2**" + "Vemos que hay una celda diferente en Name. La voy a quitar por que no afecta a 800 columnas " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In this challenge, we will be working with california-housing data. The data can be found here:\n", - "- https://raw.githubusercontent.com/data-bootcamp-v4/data/main/california_housing.csv" + "En Name vamos a ver cual es el float" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 61, "metadata": {}, "outputs": [ { @@ -361,139 +559,1953 @@ " \n", " \n", " \n", - " longitude\n", - " latitude\n", - " housing_median_age\n", - " total_rooms\n", - " total_bedrooms\n", - " population\n", - " households\n", - " median_income\n", - " median_house_value\n", + " Name\n", + " Type 1\n", + " Type 2\n", + " HP\n", + " Attack\n", + " Defense\n", + " Sp. Atk\n", + " Sp. Def\n", + " Speed\n", + " Generation\n", + " Legendary\n", " \n", " \n", " \n", " \n", - " 0\n", - " -114.31\n", - " 34.19\n", - " 15.0\n", - " 5612.0\n", - " 1283.0\n", - " 1015.0\n", - " 472.0\n", - " 1.4936\n", - " 66900.0\n", - " \n", - " \n", - " 1\n", - " -114.47\n", - " 34.40\n", - " 19.0\n", - " 7650.0\n", - " 1901.0\n", - " 1129.0\n", - " 463.0\n", - " 1.8200\n", - " 80100.0\n", - " \n", - " \n", - " 2\n", - " -114.56\n", - " 33.69\n", - " 17.0\n", - " 720.0\n", - " 174.0\n", - " 333.0\n", - " 117.0\n", - " 1.6509\n", - " 85700.0\n", - " \n", - " \n", - " 3\n", - " -114.57\n", - " 33.64\n", - " 14.0\n", - " 1501.0\n", - " 337.0\n", - " 515.0\n", - " 226.0\n", - " 3.1917\n", - " 73400.0\n", - " \n", - " \n", - " 4\n", - " -114.57\n", - " 33.57\n", - " 20.0\n", - " 1454.0\n", - " 326.0\n", - " 624.0\n", - " 262.0\n", - " 1.9250\n", - " 65500.0\n", + " 62\n", + " NaN\n", + " Fighting\n", + " NaN\n", + " 65\n", + " 105\n", + " 60\n", + " 60\n", + " 70\n", + " 95\n", + " 1\n", + " False\n", " \n", " \n", "\n", "" ], "text/plain": [ - " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", - "0 -114.31 34.19 15.0 5612.0 1283.0 \n", - "1 -114.47 34.40 19.0 7650.0 1901.0 \n", - "2 -114.56 33.69 17.0 720.0 174.0 \n", - "3 -114.57 33.64 14.0 1501.0 337.0 \n", - "4 -114.57 33.57 20.0 1454.0 326.0 \n", + " Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed \\\n", + "62 NaN Fighting NaN 65 105 60 60 70 95 \n", "\n", - " population households median_income median_house_value \n", - "0 1015.0 472.0 1.4936 66900.0 \n", - "1 1129.0 463.0 1.8200 80100.0 \n", - "2 333.0 117.0 1.6509 85700.0 \n", - "3 515.0 226.0 3.1917 73400.0 \n", - "4 624.0 262.0 1.9250 65500.0 " + " Generation Legendary \n", + "62 1 False " ] }, - "execution_count": 5, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/california_housing.csv\")\n", - "df.head()" + "filas_float = df[df['Name'].apply(lambda x: isinstance(x, float))]\n", + "filas_float" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**We posit that houses close to either a school or a hospital are more expensive.**\n", + "Elimino esa fila , una carta de 800 tampoco influye nada.\n", + "Como se el indice la borro facil" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(799, 11)" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df.drop(index= 62).reset_index(drop=True) # para seguir limpiando reseteo el indice\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[ 'Grass', 'Fire', 'Water', 'Bug', 'Normal', 'Poison',\n", + " 'Electric', 'Ground', 'Fairy', 'Fighting', 'Psychic', 'Rock',\n", + " 'Ghost', 'Ice', 'Dragon', 'Dark', 'Steel', 'Flying']\n", + "Length: 18, dtype: str\n", + "------------------------\n", + "\n", + "[ 'Poison', nan, 'Flying', 'Dragon', 'Ground', 'Fairy',\n", + " 'Grass', 'Fighting', 'Psychic', 'Steel', 'Ice', 'Rock',\n", + " 'Dark', 'Water', 'Electric', 'Fire', 'Ghost', 'Bug',\n", + " 'Normal']\n", + "Length: 19, dtype: str\n" + ] + } + ], + "source": [ + "# Vamos a ver que hay en las columnas type1 y type2\n", + "print(df['Type 1'].unique())\n", + "print(\"------------------------\")\n", + "print(df['Type 2'].unique())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Type 1\n", + "Water 112\n", + "Normal 98\n", + "Grass 70\n", + "Bug 69\n", + "Psychic 57\n", + "Fire 52\n", + "Electric 44\n", + "Rock 44\n", + "Ground 32\n", + "Ghost 32\n", + "Dragon 32\n", + "Dark 31\n", + "Poison 28\n", + "Steel 27\n", + "Fighting 26\n", + "Ice 24\n", + "Fairy 17\n", + "Flying 4\n", + "Name: count, dtype: int64\n", + "------------------------------------\n", + "Type 2\n", + "NaN 385\n", + "Flying 97\n", + "Ground 35\n", + "Poison 34\n", + "Psychic 33\n", + "Fighting 26\n", + "Grass 25\n", + "Fairy 23\n", + "Steel 22\n", + "Dark 20\n", + "Dragon 18\n", + "Ice 14\n", + "Rock 14\n", + "Water 14\n", + "Ghost 14\n", + "Fire 12\n", + "Electric 6\n", + "Normal 4\n", + "Bug 3\n", + "Name: count, dtype: int64\n", + "------------------------------------\n" + ] + } + ], + "source": [ + "# Vamos a ver los tipos de esas columnas \n", + "lista_tipos = ['Type 1', 'Type 2']\n", + "for col in lista_tipos:\n", + " print(df[col].value_counts(dropna=False))\n", + " print(\"------------------------------------\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Challenge 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- We posit that Pokemons of type Dragon have, on average, more HP stats than Grass. \n", + " Choose the propper test and, with 5% significance, comment your findings." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p_value = 0.0015987219490841203\n", + "Rechazamos hipotesis nula H0: Pokémon tipo Dragon tiene mas HP que Pokémon tipo Grass.\n" + ] + } + ], + "source": [ + "# H0: HP Dragons = HP Grass (hipotesis nula)\n", + "# H1: HP Dragons > HP Grass (lo que queremos demostrar)\n", "\n", - "- School coordinates (-118, 34)\n", - "- Hospital coordinates (-122, 37)\n", + "from scipy.stats import ttest_ind\n", "\n", - "We consider a house (neighborhood) to be close to a school or hospital if the distance is lower than 0.50.\n", + "dragon_hp = df[df['Type 1'] == 'Dragon']['HP'].dropna() # miramos los Type_1 sus HP\n", + "grass_hp = df[df['Type 1'] == 'Grass']['HP'].dropna()\n", "\n", - "Hint:\n", - "- Write a function to calculate euclidean distance from each house (neighborhood) to the school and to the hospital.\n", - "- Divide your dataset into houses close and far from either a hospital or school.\n", - "- Choose the propper test and, with 5% significance, comment your findings.\n", - " " + "t_stat, p_value = ttest_ind(dragon_hp, grass_hp, equal_var=False)\n", + "\n", + "alpha = 0.05\n", + "\n", + "print(\"p_value =\", p_value)\n", + "\n", + "if p_value < alpha:\n", + " print(\"Rechazamos hipotesis nula H0: Pokémon tipo Dragon tiene mas HP que Pokémon tipo Grass.\")\n", + "else:\n", + " print(\"No rechazamos la hipotesis nula , pero tampoco podemos asegurar que Pokémon tipo Dragon tiene mas HP que Pokémon tipo Grass.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- We posit that Legendary Pokemons have different stats (HP, Attack, Defense, Sp.Atk, Sp.Def, Speed) when comparing with Non-Legendary. \n", + " Choose the propper test and, with 5% significance, comment your findings.\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameType 1Type 2HPAttackDefenseSp. AtkSp. DefSpeedGenerationLegendary
0BulbasaurGrassPoison4549496565451False
1IvysaurGrassPoison6062638080601False
2VenusaurGrassPoison808283100100801False
3Mega VenusaurGrassPoison80100123122120801False
4CharmanderFireNaN3952436050651False
\n", + "
" + ], + "text/plain": [ + " Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed \\\n", + "0 Bulbasaur Grass Poison 45 49 49 65 65 45 \n", + "1 Ivysaur Grass Poison 60 62 63 80 80 60 \n", + "2 Venusaur Grass Poison 80 82 83 100 100 80 \n", + "3 Mega Venusaur Grass Poison 80 100 123 122 120 80 \n", + "4 Charmander Fire NaN 39 52 43 60 50 65 \n", + "\n", + " Generation Legendary \n", + "0 1 False \n", + "1 1 False \n", + "2 1 False \n", + "3 1 False \n", + "4 1 False " + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()\n" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p_value = 1.0086617990318104e-13\n", + "Rechazamos hipotesis nula HP Legendary = HP No_Legendary\n", + "------------------------------------------\n", + "p_value = 2.411790840368659e-16\n", + "Rechazamos hipotesis nula Attack Legendary = Attack No_Legendary\n", + "------------------------------------------\n", + "p_value = 4.9269277035019174e-11\n", + "Rechazamos hipotesis nula Defense Legendary = Defense No_Legendary\n", + "------------------------------------------\n", + "p_value = 1.5653966266115418e-21\n", + "Rechazamos hipotesis nula Sp. Atk Legendary = Sp. Atk No_Legendary\n", + "------------------------------------------\n", + "p_value = 2.290991957008136e-15\n", + "Rechazamos hipotesis nula Sp. Def Legendary = Sp. Def No_Legendary\n", + "------------------------------------------\n", + "p_value = 9.88726762495576e-19\n", + "Rechazamos hipotesis nula Speed Legendary = Speed No_Legendary\n", + "------------------------------------------\n" + ] + } + ], + "source": [ + "# H0: Legendary(Attack, Defense, Sp. Atk, Sp. Def, Speed) = No_Legendary(Attack, Defense, Sp. Atk, Sp. Def, Speed) (hipotesis nula)\n", + "# H1: Legendary(Attack, Defense, Sp. Atk, Sp. Def, Speed) != No_Legendary(Attack, Defense, Sp. Atk, Sp. Def, Speed) (queremos demostrar)\n", + "\n", + "from scipy.stats import ttest_ind\n", + "\n", + "stats = ['HP','Attack','Defense','Sp. Atk','Sp. Def','Speed']\n", + "alpha = 0.05 \n", + "\n", + "for col in stats:\n", + " legendary = df[df['Legendary'] == True][col].dropna() # Cada grupo limpia sus propios NaN, porque no depende del otro.\n", + " non_legendary = df[df['Legendary'] == False][col].dropna()\n", + " \n", + " t_stat, p_value = ttest_ind(legendary, non_legendary, equal_var=False)\n", + "\n", + "\n", + " print(\"p_value =\", p_value )\n", + "\n", + " if p_value < alpha:\n", + " print(f\"Rechazamos hipotesis nula {col} Legendary = {col} No_Legendary\")\n", + " else:\n", + " print(f\"No rechazamos la hipotesis nula , pero tampoco podemos asegurar que {col} Legendary = {col} No_Legendary\")\n", + " print(\"------------------------------------------\")\n", + "\n", + " \n", + "\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Resultado : \n", + "Utilizando una Two Sample T-test con un nivel de significancia del 5%, comparamos las estadísticas de Pokémon legendarios y no legendarios en HP, Ataque, Defensa, Sp. Atk, sp. Defensa y velocidad.\n", + "En los seis casos se rechaza la hipotesis nula para cada estadistica y concluimos que los Pokémon legendarios tienen estadísticas medias significativamente diferentes en comparación con los Pokémon no legendarios." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Challenge 2**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this challenge, we will be working with california-housing data. The data can be found here:\n", + "- https://raw.githubusercontent.com/data-bootcamp-v4/data/main/california_housing.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
0-114.3134.1915.05612.01283.01015.0472.01.493666900.0
1-114.4734.4019.07650.01901.01129.0463.01.820080100.0
2-114.5633.6917.0720.0174.0333.0117.01.650985700.0
3-114.5733.6414.01501.0337.0515.0226.03.191773400.0
4-114.5733.5720.01454.0326.0624.0262.01.925065500.0
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -114.31 34.19 15.0 5612.0 1283.0 \n", + "1 -114.47 34.40 19.0 7650.0 1901.0 \n", + "2 -114.56 33.69 17.0 720.0 174.0 \n", + "3 -114.57 33.64 14.0 1501.0 337.0 \n", + "4 -114.57 33.57 20.0 1454.0 326.0 \n", + "\n", + " population households median_income median_house_value \n", + "0 1015.0 472.0 1.4936 66900.0 \n", + "1 1129.0 463.0 1.8200 80100.0 \n", + "2 333.0 117.0 1.6509 85700.0 \n", + "3 515.0 226.0 3.1917 73400.0 \n", + "4 624.0 262.0 1.9250 65500.0 " + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/california_housing.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**We posit that houses close to either a school or a hospital are more expensive.**\n", + "\n", + "- School coordinates (-118, 34)\n", + "- Hospital coordinates (-122, 37)\n", + "\n", + "We consider a house (neighborhood) to be close to a school or hospital if the distance is lower than 0.50.\n", + "\n", + "Hint:\n", + "- Write a function to calculate euclidean distance from each house (neighborhood) to the school and to the hospital.\n", + "- Divide your dataset into houses close and far from either a hospital or school.\n", + "- Choose the propper test and, with 5% significance, comment your findings.\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Coordenadas de School y Hospital \n", + "- School coordinates (-118, 34)\n", + "- Hospital coordinates (-122, 37)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le pongo nombre a las casas" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valuenumero_casa
0-114.3134.1915.05612.01283.01015.0472.01.493666900.0casa1
1-114.4734.4019.07650.01901.01129.0463.01.820080100.0casa2
2-114.5633.6917.0720.0174.0333.0117.01.650985700.0casa3
3-114.5733.6414.01501.0337.0515.0226.03.191773400.0casa4
4-114.5733.5720.01454.0326.0624.0262.01.925065500.0casa5
.................................
16995-124.2640.5852.02217.0394.0907.0369.02.3571111400.0casa16996
16996-124.2740.6936.02349.0528.01194.0465.02.517979000.0casa16997
16997-124.3041.8417.02677.0531.01244.0456.03.0313103600.0casa16998
16998-124.3041.8019.02672.0552.01298.0478.01.979785800.0casa16999
16999-124.3540.5452.01820.0300.0806.0270.03.014794600.0casa17000
\n", + "

17000 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -114.31 34.19 15.0 5612.0 1283.0 \n", + "1 -114.47 34.40 19.0 7650.0 1901.0 \n", + "2 -114.56 33.69 17.0 720.0 174.0 \n", + "3 -114.57 33.64 14.0 1501.0 337.0 \n", + "4 -114.57 33.57 20.0 1454.0 326.0 \n", + "... ... ... ... ... ... \n", + "16995 -124.26 40.58 52.0 2217.0 394.0 \n", + "16996 -124.27 40.69 36.0 2349.0 528.0 \n", + "16997 -124.30 41.84 17.0 2677.0 531.0 \n", + "16998 -124.30 41.80 19.0 2672.0 552.0 \n", + "16999 -124.35 40.54 52.0 1820.0 300.0 \n", + "\n", + " population households median_income median_house_value numero_casa \n", + "0 1015.0 472.0 1.4936 66900.0 casa1 \n", + "1 1129.0 463.0 1.8200 80100.0 casa2 \n", + "2 333.0 117.0 1.6509 85700.0 casa3 \n", + "3 515.0 226.0 3.1917 73400.0 casa4 \n", + "4 624.0 262.0 1.9250 65500.0 casa5 \n", + "... ... ... ... ... ... \n", + "16995 907.0 369.0 2.3571 111400.0 casa16996 \n", + "16996 1194.0 465.0 2.5179 79000.0 casa16997 \n", + "16997 1244.0 456.0 3.0313 103600.0 casa16998 \n", + "16998 1298.0 478.0 1.9797 85800.0 casa16999 \n", + "16999 806.0 270.0 3.0147 94600.0 casa17000 \n", + "\n", + "[17000 rows x 10 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"numero_casa\"] = \"casa\" + (df.index + 1).astype(str)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Paso las casas al inicio por que me gusta verlas en la primera columna" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numero_casalongitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
0casa1-114.3134.1915.05612.01283.01015.0472.01.493666900.0
1casa2-114.4734.4019.07650.01901.01129.0463.01.820080100.0
2casa3-114.5633.6917.0720.0174.0333.0117.01.650985700.0
3casa4-114.5733.6414.01501.0337.0515.0226.03.191773400.0
4casa5-114.5733.5720.01454.0326.0624.0262.01.925065500.0
\n", + "
" + ], + "text/plain": [ + " numero_casa longitude latitude housing_median_age total_rooms \\\n", + "0 casa1 -114.31 34.19 15.0 5612.0 \n", + "1 casa2 -114.47 34.40 19.0 7650.0 \n", + "2 casa3 -114.56 33.69 17.0 720.0 \n", + "3 casa4 -114.57 33.64 14.0 1501.0 \n", + "4 casa5 -114.57 33.57 20.0 1454.0 \n", + "\n", + " total_bedrooms population households median_income median_house_value \n", + "0 1283.0 1015.0 472.0 1.4936 66900.0 \n", + "1 1901.0 1129.0 463.0 1.8200 80100.0 \n", + "2 174.0 333.0 117.0 1.6509 85700.0 \n", + "3 337.0 515.0 226.0 3.1917 73400.0 \n", + "4 326.0 624.0 262.0 1.9250 65500.0 " + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.insert(0, 'numero_casa', df.pop('numero_casa'))\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vamos a ver la distancia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Funcion euclidea : para 2 puntos P1(x1,y1) p2(x2,y2) la distancia euclidea es: \n", + "np.sqrt((x1 - x2)**2 + (y1 - y2)**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def dist(x1, y1, x2, y2):\n", + " return np.sqrt((x1 - x2)**2 + (y1 - y2)**2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "School_coordinates= (-118, 34)\n", + "Hospital_coordinates = (-122, 37)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "def dist(x1, y1, x2, y2):\n", + " return np.sqrt((x1 - x2)**2 + (y1 - y2)**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numero_casalongitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valuedistancia_hospitaldistancia_school
0casa1-114.3134.1915.05612.01283.01015.0472.01.493666900.08.1873193.694888
1casa2-114.4734.4019.07650.01901.01129.0463.01.820080100.07.9662353.552591
2casa3-114.5633.6917.0720.0174.0333.0117.01.650985700.08.1430773.453940
3casa4-114.5733.6414.01501.0337.0515.0226.03.191773400.08.1544163.448840
4casa5-114.5733.5720.01454.0326.0624.0262.01.925065500.08.1835083.456848
.......................................
16995casa16996-124.2640.5852.02217.0394.0907.0369.02.3571111400.04.2336759.082070
16996casa16997-124.2740.6936.02349.0528.01194.0465.02.517979000.04.3323209.168915
16997casa16998-124.3041.8417.02677.0531.01244.0456.03.0313103600.05.35869410.057614
16998casa16999-124.3041.8019.02672.0552.01298.0478.01.979785800.05.32259310.026465
16999casa17000-124.3540.5452.01820.0300.0806.0270.03.014794600.04.2490129.115597
\n", + "

17000 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " numero_casa longitude latitude housing_median_age total_rooms \\\n", + "0 casa1 -114.31 34.19 15.0 5612.0 \n", + "1 casa2 -114.47 34.40 19.0 7650.0 \n", + "2 casa3 -114.56 33.69 17.0 720.0 \n", + "3 casa4 -114.57 33.64 14.0 1501.0 \n", + "4 casa5 -114.57 33.57 20.0 1454.0 \n", + "... ... ... ... ... ... \n", + "16995 casa16996 -124.26 40.58 52.0 2217.0 \n", + "16996 casa16997 -124.27 40.69 36.0 2349.0 \n", + "16997 casa16998 -124.30 41.84 17.0 2677.0 \n", + "16998 casa16999 -124.30 41.80 19.0 2672.0 \n", + "16999 casa17000 -124.35 40.54 52.0 1820.0 \n", + "\n", + " total_bedrooms population households median_income \\\n", + "0 1283.0 1015.0 472.0 1.4936 \n", + "1 1901.0 1129.0 463.0 1.8200 \n", + "2 174.0 333.0 117.0 1.6509 \n", + "3 337.0 515.0 226.0 3.1917 \n", + "4 326.0 624.0 262.0 1.9250 \n", + "... ... ... ... ... \n", + "16995 394.0 907.0 369.0 2.3571 \n", + "16996 528.0 1194.0 465.0 2.5179 \n", + "16997 531.0 1244.0 456.0 3.0313 \n", + "16998 552.0 1298.0 478.0 1.9797 \n", + "16999 300.0 806.0 270.0 3.0147 \n", + "\n", + " median_house_value distancia_hospital distancia_school \n", + "0 66900.0 8.187319 3.694888 \n", + "1 80100.0 7.966235 3.552591 \n", + "2 85700.0 8.143077 3.453940 \n", + "3 73400.0 8.154416 3.448840 \n", + "4 65500.0 8.183508 3.456848 \n", + "... ... ... ... \n", + "16995 111400.0 4.233675 9.082070 \n", + "16996 79000.0 4.332320 9.168915 \n", + "16997 103600.0 5.358694 10.057614 \n", + "16998 85800.0 5.322593 10.026465 \n", + "16999 94600.0 4.249012 9.115597 \n", + "\n", + "[17000 rows x 12 columns]" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['distancia_hospital'] = dist(Hospital_coordinates[0],Hospital_coordinates[1],df['longitude'],df['latitude'])\n", + "df['distancia_school'] = dist(School_coordinates[0],School_coordinates[1],df['longitude'],df['latitude'])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A mi me gusta hacerlo con lambda que puedes poner lo que quieras en vez de la x con una condicion" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "df[\"cercany_hospital\"] = df[\"distancia_hospital\"].apply(lambda x: True if x < 0.5 else False) # valor celda es 'lower' si x<0.5 sino 'far'\n", + "df[\"cercany_school\"] = df[\"distancia_school\"].apply(lambda x: True if x < 0.5 else False)\n", + "df['close_hospital_or_scholl'] = df[\"cercany_hospital\"] | df[\"cercany_school\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numero_casalongitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valuedistancia_hospitaldistancia_schoolcercany_hospitalcercany_schoolclose_hospital_or_scholl
0casa1-114.3134.1915.05612.01283.01015.0472.01.493666900.08.1873193.694888FalseFalseFalse
1casa2-114.4734.4019.07650.01901.01129.0463.01.820080100.07.9662353.552591FalseFalseFalse
2casa3-114.5633.6917.0720.0174.0333.0117.01.650985700.08.1430773.453940FalseFalseFalse
3casa4-114.5733.6414.01501.0337.0515.0226.03.191773400.08.1544163.448840FalseFalseFalse
4casa5-114.5733.5720.01454.0326.0624.0262.01.925065500.08.1835083.456848FalseFalseFalse
................................................
16995casa16996-124.2640.5852.02217.0394.0907.0369.02.3571111400.04.2336759.082070FalseFalseFalse
16996casa16997-124.2740.6936.02349.0528.01194.0465.02.517979000.04.3323209.168915FalseFalseFalse
16997casa16998-124.3041.8417.02677.0531.01244.0456.03.0313103600.05.35869410.057614FalseFalseFalse
16998casa16999-124.3041.8019.02672.0552.01298.0478.01.979785800.05.32259310.026465FalseFalseFalse
16999casa17000-124.3540.5452.01820.0300.0806.0270.03.014794600.04.2490129.115597FalseFalseFalse
\n", + "

17000 rows × 15 columns

\n", + "
" + ], + "text/plain": [ + " numero_casa longitude latitude housing_median_age total_rooms \\\n", + "0 casa1 -114.31 34.19 15.0 5612.0 \n", + "1 casa2 -114.47 34.40 19.0 7650.0 \n", + "2 casa3 -114.56 33.69 17.0 720.0 \n", + "3 casa4 -114.57 33.64 14.0 1501.0 \n", + "4 casa5 -114.57 33.57 20.0 1454.0 \n", + "... ... ... ... ... ... \n", + "16995 casa16996 -124.26 40.58 52.0 2217.0 \n", + "16996 casa16997 -124.27 40.69 36.0 2349.0 \n", + "16997 casa16998 -124.30 41.84 17.0 2677.0 \n", + "16998 casa16999 -124.30 41.80 19.0 2672.0 \n", + "16999 casa17000 -124.35 40.54 52.0 1820.0 \n", + "\n", + " total_bedrooms population households median_income \\\n", + "0 1283.0 1015.0 472.0 1.4936 \n", + "1 1901.0 1129.0 463.0 1.8200 \n", + "2 174.0 333.0 117.0 1.6509 \n", + "3 337.0 515.0 226.0 3.1917 \n", + "4 326.0 624.0 262.0 1.9250 \n", + "... ... ... ... ... \n", + "16995 394.0 907.0 369.0 2.3571 \n", + "16996 528.0 1194.0 465.0 2.5179 \n", + "16997 531.0 1244.0 456.0 3.0313 \n", + "16998 552.0 1298.0 478.0 1.9797 \n", + "16999 300.0 806.0 270.0 3.0147 \n", + "\n", + " median_house_value distancia_hospital distancia_school \\\n", + "0 66900.0 8.187319 3.694888 \n", + "1 80100.0 7.966235 3.552591 \n", + "2 85700.0 8.143077 3.453940 \n", + "3 73400.0 8.154416 3.448840 \n", + "4 65500.0 8.183508 3.456848 \n", + "... ... ... ... \n", + "16995 111400.0 4.233675 9.082070 \n", + "16996 79000.0 4.332320 9.168915 \n", + "16997 103600.0 5.358694 10.057614 \n", + "16998 85800.0 5.322593 10.026465 \n", + "16999 94600.0 4.249012 9.115597 \n", + "\n", + " cercany_hospital cercany_school close_hospital_or_scholl \n", + "0 False False False \n", + "1 False False False \n", + "2 False False False \n", + "3 False False False \n", + "4 False False False \n", + "... ... ... ... \n", + "16995 False False False \n", + "16996 False False False \n", + "16997 False False False \n", + "16998 False False False \n", + "16999 False False False \n", + "\n", + "[17000 rows x 15 columns]" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "cercany_hospital\n", + "False 15839\n", + "True 1161\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['cercany_hospital'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "cercany_school\n", + "False 11332\n", + "True 5668\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['cercany_school'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['numero_casa', 'longitude', 'latitude', 'housing_median_age',\n", + " 'total_rooms', 'total_bedrooms', 'population', 'households',\n", + " 'median_income', 'median_house_value', 'distancia_hospital',\n", + " 'distancia_school', 'cercany_hospital', 'cercany_school',\n", + " 'close_hospital_or_scholl'],\n", + " dtype='str')" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numero_casacercany_hospitalcercany_schoolclose_hospital_or_schollmedian_house_value
0casa1FalseFalseFalse66900.0
1casa2FalseFalseFalse80100.0
2casa3FalseFalseFalse85700.0
3casa4FalseFalseFalse73400.0
4casa5FalseFalseFalse65500.0
..................
16995casa16996FalseFalseFalse111400.0
16996casa16997FalseFalseFalse79000.0
16997casa16998FalseFalseFalse103600.0
16998casa16999FalseFalseFalse85800.0
16999casa17000FalseFalseFalse94600.0
\n", + "

17000 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " numero_casa cercany_hospital cercany_school close_hospital_or_scholl \\\n", + "0 casa1 False False False \n", + "1 casa2 False False False \n", + "2 casa3 False False False \n", + "3 casa4 False False False \n", + "4 casa5 False False False \n", + "... ... ... ... ... \n", + "16995 casa16996 False False False \n", + "16996 casa16997 False False False \n", + "16997 casa16998 False False False \n", + "16998 casa16999 False False False \n", + "16999 casa17000 False False False \n", + "\n", + " median_house_value \n", + "0 66900.0 \n", + "1 80100.0 \n", + "2 85700.0 \n", + "3 73400.0 \n", + "4 65500.0 \n", + "... ... \n", + "16995 111400.0 \n", + "16996 79000.0 \n", + "16997 103600.0 \n", + "16998 85800.0 \n", + "16999 94600.0 \n", + "\n", + "[17000 rows x 5 columns]" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_estudio =df[['numero_casa', 'cercany_hospital', 'cercany_school','close_hospital_or_scholl','median_house_value']]\n", + "df_estudio\n" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "close_hospital_or_scholl\n", + "False 10171\n", + "True 6829\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_estudio['close_hospital_or_scholl'].value_counts() # asi se los que me van a dar" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [], + "source": [ + "close_hospital_or_scholl = df_estudio[df_estudio['close_hospital_or_scholl'] == True]['median_house_value'] # grupos cerca de alguno\n", + "far_hospital_or_scholl = df_estudio[df_estudio['close_hospital_or_scholl'] == False]['median_house_value'] # grupos no cerca de ninguno\n" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t = 37.992330214201516 p = 3.0064957768591797e-301\n" + ] + } + ], + "source": [ + "# H0 =\tLas casas cercanas y lejanas tienen el mismo precio medio \n", + "# H1 = Las casas cercanas son más caras que las lejanas \n", + "\n", + "from scipy.stats import ttest_ind\n", + "\n", + "t_stat, p_value = ttest_ind(close_hospital_or_scholl, far_hospital_or_scholl, equal_var=False) # evalua los dos grupos COMPARANDO CERCA O LEJOS EN RELACION AL PRECIO\n", + "print(\"t =\", t_stat, \"p =\", p_value)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RECHAZA hipotesis nula → Las casas mas cercanas son mas caras\n" + ] + } + ], + "source": [ + "alpha = 0.05\n", + "\n", + "if p_value < alpha:\n", + " print(\"RECHAZA hipotesis nula → Las casas mas cercanas son mas caras\")\n", + "else:\n", + " print(\"NO RECHAZA hipotesis nula pero No asegura que las casas sean mas caras por cercania\")\n" + ] } ], "metadata": { @@ -512,7 +2524,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.14.2" } }, "nbformat": 4,