From a025988e86e9e1ca624ea0d75b7ae8b4f6ca8c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cdanielmdepaoli=E2=80=9D?= <“danielmdepaoli@gmail.com”> Date: Mon, 14 Aug 2023 09:01:02 +0100 Subject: [PATCH] Lab Done --- your-code/challenge-1.ipynb | 453 ++++++++++++++++++++++++++++++++++-- your-code/challenge-2.ipynb | 372 +++++++++++++++++++++++++++-- 2 files changed, 784 insertions(+), 41 deletions(-) diff --git a/your-code/challenge-1.ipynb b/your-code/challenge-1.ipynb index c1bb43d..303ed82 100755 --- a/your-code/challenge-1.ipynb +++ b/your-code/challenge-1.ipynb @@ -19,12 +19,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Import libraries\n", - "import pandas as pd" + "import pandas as pd \n", + "import numpy as np\n", + "import scipy.stats as st " ] }, { @@ -38,11 +40,265 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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 2TotalHPAttackDefenseSp. AtkSp. DefSpeedGenerationLegendary
01BulbasaurGrassPoison3184549496565451False
12IvysaurGrassPoison4056062638080601False
23VenusaurGrassPoison525808283100100801False
33VenusaurMega VenusaurGrassPoison62580100123122120801False
44CharmanderFireNaN3093952436050651False
..........................................
795719DiancieRockFairy60050100150100150506True
796719DiancieMega DiancieRockFairy700501601101601101106True
797720HoopaHoopa ConfinedPsychicGhost6008011060150130706True
798720HoopaHoopa UnboundPsychicDark6808016060170130806True
799721VolcanionFireWater6008011012013090706True
\n", + "

800 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " # Name Type 1 Type 2 Total HP Attack Defense \\\n", + "0 1 Bulbasaur Grass Poison 318 45 49 49 \n", + "1 2 Ivysaur Grass Poison 405 60 62 63 \n", + "2 3 Venusaur Grass Poison 525 80 82 83 \n", + "3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n", + "4 4 Charmander Fire NaN 309 39 52 43 \n", + ".. ... ... ... ... ... .. ... ... \n", + "795 719 Diancie Rock Fairy 600 50 100 150 \n", + "796 719 DiancieMega Diancie Rock Fairy 700 50 160 110 \n", + "797 720 HoopaHoopa Confined Psychic Ghost 600 80 110 60 \n", + "798 720 HoopaHoopa Unbound Psychic Dark 680 80 160 60 \n", + "799 721 Volcanion Fire Water 600 80 110 120 \n", + "\n", + " Sp. Atk Sp. Def Speed Generation Legendary \n", + "0 65 65 45 1 False \n", + "1 80 80 60 1 False \n", + "2 100 100 80 1 False \n", + "3 122 120 80 1 False \n", + "4 60 50 65 1 False \n", + ".. ... ... ... ... ... \n", + "795 100 150 50 6 True \n", + "796 160 110 110 6 True \n", + "797 150 130 70 6 True \n", + "798 170 130 80 6 True \n", + "799 130 90 70 6 True \n", + "\n", + "[800 rows x 13 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here:\n" + "pokemon = pd.read_csv(\"Pokemon.csv\")\n", + "pokemon" ] }, { @@ -58,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -74,9 +330,9 @@ " dict: a dictionary of t-test scores for each feature where the feature name is the key and the p-value is the value\n", " \"\"\"\n", " results = {}\n", - "\n", - " # Your code here\n", - " \n", + " for feature in features:\n", + " t_value, p_value = st.ttest_ind(s1, s2)\n", + " results[feature] = p_value\n", " return results" ] }, @@ -101,11 +357,63 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'HP': 0.0,\n", + " 'Attack': 0.0,\n", + " 'Defense': 0.0,\n", + " 'Sp. Atk': 0.0,\n", + " 'Sp. Def': 0.0,\n", + " 'Speed': 0.0,\n", + " 'Total': 0.0}" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n" + "t_test_features((pokemon[\"Legendary\"]==True), (pokemon[\"Legendary\"]==False), \n", + " features=['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Total'])" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'HP': 3.330647684846191e-15,\n", + " 'Attack': 7.827253003205333e-24,\n", + " 'Defense': 1.5842226094427255e-12,\n", + " 'Sp. Atk': 6.314915770427266e-41,\n", + " 'Sp. Def': 1.8439809580409594e-26,\n", + " 'Speed': 2.3540754436898437e-21,\n", + " 'Total': 3.0952457469652825e-52}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def t_test_features(s1, s2, features=['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Total']):\n", + " results = {}\n", + " for feature in features:\n", + " t_value, p_value = st.ttest_ind(s1[feature], s2[feature])\n", + " results[feature] = p_value\n", + " return results\n", + "\n", + "t_test_features(pokemon[pokemon[\"Legendary\"]==True], pokemon[pokemon[\"Legendary\"]==False], \n", + " features=['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Total'])" ] }, { @@ -133,11 +441,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'HP': 0.13791881412813622,\n", + " 'Attack': 0.24050968418101445,\n", + " 'Defense': 0.5407630349194362,\n", + " 'Sp. Atk': 0.14119788176331508,\n", + " 'Sp. Def': 0.1678122623160639,\n", + " 'Speed': 0.0028356954812578704,\n", + " 'Total': 0.5599140649014442}" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n" + "t_test_features(pokemon[pokemon[\"Generation\"]==1], pokemon[pokemon[\"Generation\"]==2], \n", + " features=['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Total'])" ] }, { @@ -165,11 +491,80 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "( # Name Type 1 Type 2 Total HP Attack Defense \\\n", + " 0 1 Bulbasaur Grass Poison 318 45 49 49 \n", + " 1 2 Ivysaur Grass Poison 405 60 62 63 \n", + " 2 3 Venusaur Grass Poison 525 80 82 83 \n", + " 3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n", + " 6 6 Charizard Fire Flying 534 78 84 78 \n", + " .. ... ... ... ... ... .. ... ... \n", + " 795 719 Diancie Rock Fairy 600 50 100 150 \n", + " 796 719 DiancieMega Diancie Rock Fairy 700 50 160 110 \n", + " 797 720 HoopaHoopa Confined Psychic Ghost 600 80 110 60 \n", + " 798 720 HoopaHoopa Unbound Psychic Dark 680 80 160 60 \n", + " 799 721 Volcanion Fire Water 600 80 110 120 \n", + " \n", + " Sp. Atk Sp. Def Speed Generation Legendary \n", + " 0 65 65 45 1 False \n", + " 1 80 80 60 1 False \n", + " 2 100 100 80 1 False \n", + " 3 122 120 80 1 False \n", + " 6 109 85 100 1 False \n", + " .. ... ... ... ... ... \n", + " 795 100 150 50 6 True \n", + " 796 160 110 110 6 True \n", + " 797 150 130 70 6 True \n", + " 798 170 130 80 6 True \n", + " 799 130 90 70 6 True \n", + " \n", + " [414 rows x 13 columns],\n", + " # Name Type 1 Type 2 Total HP Attack Defense Sp. Atk \\\n", + " 4 4 Charmander Fire NaN 309 39 52 43 60 \n", + " 5 5 Charmeleon Fire NaN 405 58 64 58 80 \n", + " 9 7 Squirtle Water NaN 314 44 48 65 50 \n", + " 10 8 Wartortle Water NaN 405 59 63 80 65 \n", + " 11 9 Blastoise Water NaN 530 79 83 100 85 \n", + " .. ... ... ... ... ... ... ... ... ... \n", + " 775 705 Sliggoo Dragon NaN 452 68 75 53 83 \n", + " 776 706 Goodra Dragon NaN 600 90 100 70 110 \n", + " 788 712 Bergmite Ice NaN 304 55 69 85 32 \n", + " 789 713 Avalugg Ice NaN 514 95 117 184 44 \n", + " 792 716 Xerneas Fairy NaN 680 126 131 95 131 \n", + " \n", + " Sp. Def Speed Generation Legendary \n", + " 4 50 65 1 False \n", + " 5 65 80 1 False \n", + " 9 64 43 1 False \n", + " 10 80 58 1 False \n", + " 11 105 78 1 False \n", + " .. ... ... ... ... \n", + " 775 113 60 6 False \n", + " 776 150 80 6 False \n", + " 788 35 28 6 False \n", + " 789 46 28 6 False \n", + " 792 98 99 6 True \n", + " \n", + " [386 rows x 13 columns])" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n" + "type_1 = pokemon[~pokemon[\"Type 2\"].isnull()]\n", + " \n", + "type_2 = pokemon[pokemon[\"Type 2\"].isnull()]\n", + " \n", + "t_test_feautures = (type_1, type_2)\n", + "t_test_feautures" ] }, { @@ -199,11 +594,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Difference Attack vs. Defense: TtestResult(statistic=4.325566393330478, pvalue=1.7140303479358558e-05, df=799)\n", + "Difference Sp. Atk vs. Sp. Def: TtestResult(statistic=0.853986188453353, pvalue=0.3933685997548122, df=799)\n" + ] + } + ], "source": [ - "# Your code here\n" + "attack_defense = st.ttest_rel(pokemon[\"Attack\"], pokemon[\"Defense\"])\n", + "sp_atk_def = st.ttest_rel(pokemon[\"Sp. Atk\"], pokemon[\"Sp. Def\"])\n", + "print(f\"Difference Attack vs. Defense: {attack_defense}\")\n", + "print(f\"Difference Sp. Atk vs. Sp. Def: {sp_atk_def}\")" ] }, { @@ -225,7 +632,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -239,7 +646,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.9" } }, "nbformat": 4, diff --git a/your-code/challenge-2.ipynb b/your-code/challenge-2.ipynb index 1f0e335..164bcf0 100755 --- a/your-code/challenge-2.ipynb +++ b/your-code/challenge-2.ipynb @@ -17,21 +17,279 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Import libraries\n", - "import pandas as pd" + "import pandas as pd \n", + "import numpy as np\n", + "import scipy.stats as st \n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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 2TotalHPAttackDefenseSp. AtkSp. DefSpeedGenerationLegendary
01BulbasaurGrassPoison3184549496565451False
12IvysaurGrassPoison4056062638080601False
23VenusaurGrassPoison525808283100100801False
33VenusaurMega VenusaurGrassPoison62580100123122120801False
44CharmanderFireNaN3093952436050651False
..........................................
795719DiancieRockFairy60050100150100150506True
796719DiancieMega DiancieRockFairy700501601101601101106True
797720HoopaHoopa ConfinedPsychicGhost6008011060150130706True
798720HoopaHoopa UnboundPsychicDark6808016060170130806True
799721VolcanionFireWater6008011012013090706True
\n", + "

800 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " # Name Type 1 Type 2 Total HP Attack Defense \\\n", + "0 1 Bulbasaur Grass Poison 318 45 49 49 \n", + "1 2 Ivysaur Grass Poison 405 60 62 63 \n", + "2 3 Venusaur Grass Poison 525 80 82 83 \n", + "3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n", + "4 4 Charmander Fire NaN 309 39 52 43 \n", + ".. ... ... ... ... ... .. ... ... \n", + "795 719 Diancie Rock Fairy 600 50 100 150 \n", + "796 719 DiancieMega Diancie Rock Fairy 700 50 160 110 \n", + "797 720 HoopaHoopa Confined Psychic Ghost 600 80 110 60 \n", + "798 720 HoopaHoopa Unbound Psychic Dark 680 80 160 60 \n", + "799 721 Volcanion Fire Water 600 80 110 120 \n", + "\n", + " Sp. Atk Sp. Def Speed Generation Legendary \n", + "0 65 65 45 1 False \n", + "1 80 80 60 1 False \n", + "2 100 100 80 1 False \n", + "3 122 120 80 1 False \n", + "4 60 50 65 1 False \n", + ".. ... ... ... ... ... \n", + "795 100 150 50 6 True \n", + "796 160 110 110 6 True \n", + "797 150 130 70 6 True \n", + "798 170 130 80 6 True \n", + "799 130 90 70 6 True \n", + "\n", + "[800 rows x 13 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Load the data:\n" + "pokemon = pd.read_csv(\"Pokemon.csv\")\n", + "pokemon" ] }, { @@ -58,16 +316,70 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Grass', 'Fire', 'Water', 'Bug', 'Normal', 'Poison', 'Electric',\n", + " 'Ground', 'Fairy', 'Fighting', 'Psychic', 'Rock', 'Ghost', 'Ice',\n", + " 'Dragon', 'Dark', 'Steel', 'Flying', nan], dtype=object)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_types = pd.concat([pokemon['Type 1'], pokemon['Type 2']]).unique()\n", + "unique_types" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "19" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n", - "\n", - "\n", "len(unique_types) # you should see 19" ] }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Grass', 'Fire', 'Water', 'Bug', 'Normal', 'Poison', 'Electric',\n", + " 'Ground', 'Fairy', 'Fighting', 'Psychic', 'Rock', 'Ghost', 'Ice',\n", + " 'Dragon', 'Dark', 'Steel', 'Flying'], dtype=object)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_types = pd.concat([pokemon['Type 1'], pokemon['Type 2']]).dropna().unique()\n", + "unique_types" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -85,13 +397,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pokemon_totals = []\n", "\n", - "# Your code here\n", + "for pokemon_type in unique_types:\n", + " type_totals = pokemon[pokemon[\"Type 1\"]==pokemon_type][\"Total\"]\n", + " pokemon_totals.append(type_totals)\n", "\n", "len(pokemon_totals) # you should see 18" ] @@ -111,11 +436,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "F_onewayResult(statistic=4.63876748166055, pvalue=2.077215448842098e-09)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n" + "st.f_oneway(*pokemon_totals)" ] }, { @@ -137,7 +473,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -151,7 +487,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.9" } }, "nbformat": 4,