{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pokemon\n", "\n", "This example uses the 'pokemon' and 'combats' datasets to predict the winner of a 1-on-1 Pokemon battle. You can download the Jupyter Notebook of the study here and two datasets:\n", "\n", "pokemon\n", "\n", "\n", "combats\n", "\n", "\n", "We will follow the data science cycle (Data Exploration - Data Preparation - Data Modeling - Model Evaluation - Model Deployment) to solve this problem.\n", "\n", "## Initialization\n", "\n", "This example uses the following version of VerticaPy:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'0.9.0'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import verticapy as vp\n", "vp.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Connect to Vertica. This example uses an existing connection called \"VerticaDSN.\" For details on how to create a connection, use see the connection tutorial." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "vp.connect(\"VerticaDSN\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's ingest the datasets." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
123
First_pokemon
Int
123
Second_pokemon
Int
123
Winner
Int
1166
212626
313737
414343
515454
Rows: 1-5 | Columns: 3
" ], "text/plain": [ " First_pokemon Second_pokemon Winner \n", "1 1 6 6 \n", "2 1 26 26 \n", "3 1 37 37 \n", "4 1 43 43 \n", "5 1 54 54 \n", "Rows: 1-5 | Columns: 3" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import verticapy.stats as st\n", "vp.drop('combats')\n", "combats = vp.read_csv('data/combats.csv')\n", "combats.head(5)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
123
ID
Int
Abc
Name
Varchar(50)
Abc
Type_1
Varchar(20)
Abc
Type_2
Varchar(20)
123
HP
Int
123
Attack
Int
123
Defense
Int
123
Sp_Atk
Int
123
Sp_Def
Int
123
Speed
Int
123
Generation
Int
010
Legendary
Boolean
11BulbasaurGrassPoison4549496565451
22IvysaurGrassPoison6062638080601
33VenusaurGrassPoison808283100100801
44Mega VenusaurGrassPoison80100123122120801
55CharmanderFire[null]3952436050651
Rows: 1-5 | Columns: 12
" ], "text/plain": [ " ID Name Type_1 Type_2 HP \\\\\n", "1 1 Bulbasaur Grass Poison 45 \\\\\n", "2 2 Ivysaur Grass Poison 60 \\\\\n", "3 3 Venusaur Grass Poison 80 \\\\\n", "4 4 Mega Venusaur Grass Poison 80 \\\\\n", "5 5 Charmander Fire None 39 \\\\\n", " Attack Defense Sp_Atk Sp_Def Speed \\\\\n", "1 49 49 65 65 45 \\\\\n", "2 62 63 80 80 60 \\\\\n", "3 82 83 100 100 80 \\\\\n", "4 100 123 122 120 80 \\\\\n", "5 52 43 60 50 65 \\\\\n", " Generation Legendary \n", "1 1 False \n", "2 1 False \n", "3 1 False \n", "4 1 False \n", "5 1 False \n", "Rows: 1-5 | Columns: 12" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vp.drop('pokemon')\n", "pokemon = vp.read_csv('data/pokemon.csv')\n", "pokemon.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration and Preparation\n", "\n", "The table 'combats' will be joined to the table 'pokemon' to predict the winner. \n", "\n", "The 'pokemon' table contains the information on each Pokemon. Let's describe this table." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
dtype
count
top
top_percent
unique
"ID"int80010.125800.0
"Name"varchar(50)799Deino0.125799.0
"Type_1"varchar(20)800Water14.018.0
"Type_2"varchar(20)414[null]48.2518.0
"HP"int800608.37594.0
"Attack"int8001005.0111.0
"Defense"int800706.75103.0
"Sp_Atk"int800606.375105.0
"Sp_Def"int800806.592.0
"Speed"int800505.75108.0
"Generation"int800120.756.0
"Legendary"boolean800
91.8752.0
Rows: 1-12 | Columns: 6
" ], "text/plain": [ " dtype count top top_percent unique \n", "\"ID\" int 800 1 0.125 800.0 \n", "\"Name\" varchar(50) 799 Deino 0.125 799.0 \n", "\"Type_1\" varchar(20) 800 Water 14.0 18.0 \n", "\"Type_2\" varchar(20) 414 None 48.25 18.0 \n", "\"HP\" int 800 60 8.375 94.0 \n", "\"Attack\" int 800 100 5.0 111.0 \n", "\"Defense\" int 800 70 6.75 103.0 \n", "\"Sp_Atk\" int 800 60 6.375 105.0 \n", "\"Sp_Def\" int 800 80 6.5 92.0 \n", "\"Speed\" int 800 50 5.75 108.0 \n", "\"Generation\" int 800 1 20.75 6.0 \n", "\"Legendary\" boolean 800 False 91.875 2.0 \n", "Rows: 1-12 | Columns: 6" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pokemon.describe(method = \"categorical\", unique = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pokemon's 'Name', 'Generation', and whether or not it's 'Legendary' will never influence the outcome of the battle, so we can drop these columns." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
123
ID
Int
Abc
Type_1
Varchar(20)
Abc
Type_2
Varchar(20)
123
HP
Int
123
Attack
Int
123
Defense
Int
123
Sp_Atk
Int
123
Sp_Def
Int
123
Speed
Int
11GrassPoison454949656545
22GrassPoison606263808060
33GrassPoison80828310010080
44GrassPoison8010012312212080
55Fire[null]395243605065
66Fire[null]586458806580
77FireFlying78847810985100
88FireDragon7813011113085100
99FireFlying7810478159115100
1010Water[null]444865506443
1111Water[null]596380658058
1212Water[null]79831008510578
1313Water[null]7910312013511578
1414Bug[null]453035202045
1515Bug[null]502055252530
1616BugFlying604550908070
1717BugPoison403530202050
1818BugPoison452550252535
1919BugPoison659040458075
2020BugPoison65150401580145
2121NormalFlying404540353556
2222NormalFlying636055505071
2323NormalFlying8380757070101
2424NormalFlying83808013580121
2525Normal[null]305635253572
2626Normal[null]558160507097
2727NormalFlying406030313170
2828NormalFlying6590656161100
2929Poison[null]356044405455
3030Poison[null]608569657980
3131Electric[null]355540505090
3232Electric[null]6090559080110
3333Ground[null]507585203040
3434Ground[null]75100110455565
3535Poison[null]554752404041
3636Poison[null]706267555556
3737PoisonGround909287758576
3838Poison[null]465740404050
3939Poison[null]617257555565
4040PoisonGround8110277857585
4141Fairy[null]704548606535
4242Fairy[null]957073959060
4343Fire[null]384140506565
4444Fire[null]73767581100100
4545NormalFairy1154520452520
4646NormalFairy1407045855045
4747PoisonFlying404535304055
4848PoisonFlying758070657590
4949GrassPoison455055756530
5050GrassPoison606570857540
5151GrassPoison7580851109050
5252BugGrass357055455525
5353BugGrass609580608030
5454BugPoison605550405545
5555BugPoison706560907590
5656Ground[null]105525354595
5757Ground[null]3580505070120
5858Normal[null]404535404090
5959Normal[null]6570606565115
6060Water[null]505248655055
6161Water[null]808278958085
6262Fighting[null]408035354570
6363Fighting[null]6510560607095
6464Fire[null]557045705060
6565Fire[null]90110801008095
6666Water[null]405040404090
6767Water[null]656565505090
6868WaterFighting909595709070
6969Psychic[null]2520151055590
7070Psychic[null]40353012070105
7171Psychic[null]55504513595120
7272Psychic[null]55506517595150
7373Fighting[null]708050353535
7474Fighting[null]8010070506045
7575Fighting[null]9013080658555
7676GrassPoison507535703040
7777GrassPoison659050854555
7878GrassPoison80105651007070
7979WaterPoison4040355010070
8080WaterPoison80706580120100
8181RockGround4080100303020
8282RockGround5595115454535
8383RockGround80120130556545
8484Fire[null]508555656590
8585Fire[null]65100708080105
8686WaterPsychic906565404015
8787WaterPsychic95751101008030
8888WaterPsychic95751801308030
8989ElectricSteel253570955545
9090ElectricSteel5060951207070
9191NormalFlying526555586260
9292NormalFlying358545353575
9393NormalFlying60110706060100
9494Water[null]654555457045
9595WaterIce907080709570
9696Poison[null]808050405025
9797Poison[null]105105756510050
9898Water[null]3065100452540
9999WaterIce5095180854570
100100GhostPoison3035301003580
Rows: 1-100 of 800 | Columns: 9
" ], "text/plain": [ " ID Type_1 Type_2 HP Attack \\\\\n", "1 1 Grass Poison 45 49 \\\\\n", "2 2 Grass Poison 60 62 \\\\\n", "3 3 Grass Poison 80 82 \\\\\n", "4 4 Grass Poison 80 100 \\\\\n", "5 5 Fire None 39 52 \\\\\n", "6 6 Fire None 58 64 \\\\\n", "7 7 Fire Flying 78 84 \\\\\n", "8 8 Fire Dragon 78 130 \\\\\n", "9 9 Fire Flying 78 104 \\\\\n", "10 10 Water None 44 48 \\\\\n", "11 11 Water None 59 63 \\\\\n", "12 12 Water None 79 83 \\\\\n", "13 13 Water None 79 103 \\\\\n", "14 14 Bug None 45 30 \\\\\n", "15 15 Bug None 50 20 \\\\\n", "16 16 Bug Flying 60 45 \\\\\n", "17 17 Bug Poison 40 35 \\\\\n", "18 18 Bug Poison 45 25 \\\\\n", "19 19 Bug Poison 65 90 \\\\\n", "20 20 Bug Poison 65 150 \\\\\n", "21 21 Normal Flying 40 45 \\\\\n", "22 22 Normal Flying 63 60 \\\\\n", "23 23 Normal Flying 83 80 \\\\\n", "24 24 Normal Flying 83 80 \\\\\n", "25 25 Normal None 30 56 \\\\\n", "26 26 Normal None 55 81 \\\\\n", "27 27 Normal Flying 40 60 \\\\\n", "28 28 Normal Flying 65 90 \\\\\n", "29 29 Poison None 35 60 \\\\\n", "30 30 Poison None 60 85 \\\\\n", "31 31 Electric None 35 55 \\\\\n", "32 32 Electric None 60 90 \\\\\n", "33 33 Ground None 50 75 \\\\\n", "34 34 Ground None 75 100 \\\\\n", "35 35 Poison None 55 47 \\\\\n", "36 36 Poison None 70 62 \\\\\n", "37 37 Poison Ground 90 92 \\\\\n", "38 38 Poison None 46 57 \\\\\n", "39 39 Poison None 61 72 \\\\\n", "40 40 Poison Ground 81 102 \\\\\n", "41 41 Fairy None 70 45 \\\\\n", "42 42 Fairy None 95 70 \\\\\n", "43 43 Fire None 38 41 \\\\\n", "44 44 Fire None 73 76 \\\\\n", "45 45 Normal Fairy 115 45 \\\\\n", "46 46 Normal Fairy 140 70 \\\\\n", "47 47 Poison Flying 40 45 \\\\\n", "48 48 Poison Flying 75 80 \\\\\n", "49 49 Grass Poison 45 50 \\\\\n", "50 50 Grass Poison 60 65 \\\\\n", "51 51 Grass Poison 75 80 \\\\\n", "52 52 Bug Grass 35 70 \\\\\n", "53 53 Bug Grass 60 95 \\\\\n", "54 54 Bug Poison 60 55 \\\\\n", "55 55 Bug Poison 70 65 \\\\\n", "56 56 Ground None 10 55 \\\\\n", "57 57 Ground None 35 80 \\\\\n", "58 58 Normal None 40 45 \\\\\n", "59 59 Normal None 65 70 \\\\\n", "60 60 Water None 50 52 \\\\\n", "61 61 Water None 80 82 \\\\\n", "62 62 Fighting None 40 80 \\\\\n", "63 63 Fighting None 65 105 \\\\\n", "64 64 Fire None 55 70 \\\\\n", "65 65 Fire None 90 110 \\\\\n", "66 66 Water None 40 50 \\\\\n", "67 67 Water None 65 65 \\\\\n", "68 68 Water Fighting 90 95 \\\\\n", "69 69 Psychic None 25 20 \\\\\n", "70 70 Psychic None 40 35 \\\\\n", "71 71 Psychic None 55 50 \\\\\n", "72 72 Psychic None 55 50 \\\\\n", "73 73 Fighting None 70 80 \\\\\n", "74 74 Fighting None 80 100 \\\\\n", "75 75 Fighting None 90 130 \\\\\n", "76 76 Grass Poison 50 75 \\\\\n", "77 77 Grass Poison 65 90 \\\\\n", "78 78 Grass Poison 80 105 \\\\\n", "79 79 Water Poison 40 40 \\\\\n", "80 80 Water Poison 80 70 \\\\\n", "81 81 Rock Ground 40 80 \\\\\n", "82 82 Rock Ground 55 95 \\\\\n", "83 83 Rock Ground 80 120 \\\\\n", "84 84 Fire None 50 85 \\\\\n", "85 85 Fire None 65 100 \\\\\n", "86 86 Water Psychic 90 65 \\\\\n", "87 87 Water Psychic 95 75 \\\\\n", "88 88 Water Psychic 95 75 \\\\\n", "89 89 Electric Steel 25 35 \\\\\n", "90 90 Electric Steel 50 60 \\\\\n", "91 91 Normal Flying 52 65 \\\\\n", "92 92 Normal Flying 35 85 \\\\\n", "93 93 Normal Flying 60 110 \\\\\n", "94 94 Water None 65 45 \\\\\n", "95 95 Water Ice 90 70 \\\\\n", "96 96 Poison None 80 80 \\\\\n", "97 97 Poison None 105 105 \\\\\n", "98 98 Water None 30 65 \\\\\n", "99 99 Water Ice 50 95 \\\\\n", "100 100 Ghost Poison 30 35 \\\\\n", "... ... ... ... ... ... \\\\\n", " Defense Sp_Atk Sp_Def Speed \n", "1 49 65 65 45 \n", "2 63 80 80 60 \n", "3 83 100 100 80 \n", "4 123 122 120 80 \n", "5 43 60 50 65 \n", "6 58 80 65 80 \n", "7 78 109 85 100 \n", "8 111 130 85 100 \n", "9 78 159 115 100 \n", "10 65 50 64 43 \n", "11 80 65 80 58 \n", "12 100 85 105 78 \n", "13 120 135 115 78 \n", "14 35 20 20 45 \n", "15 55 25 25 30 \n", "16 50 90 80 70 \n", "17 30 20 20 50 \n", "18 50 25 25 35 \n", "19 40 45 80 75 \n", "20 40 15 80 145 \n", "21 40 35 35 56 \n", "22 55 50 50 71 \n", "23 75 70 70 101 \n", "24 80 135 80 121 \n", "25 35 25 35 72 \n", "26 60 50 70 97 \n", "27 30 31 31 70 \n", "28 65 61 61 100 \n", "29 44 40 54 55 \n", "30 69 65 79 80 \n", "31 40 50 50 90 \n", "32 55 90 80 110 \n", "33 85 20 30 40 \n", "34 110 45 55 65 \n", "35 52 40 40 41 \n", "36 67 55 55 56 \n", "37 87 75 85 76 \n", "38 40 40 40 50 \n", "39 57 55 55 65 \n", "40 77 85 75 85 \n", "41 48 60 65 35 \n", "42 73 95 90 60 \n", "43 40 50 65 65 \n", "44 75 81 100 100 \n", "45 20 45 25 20 \n", "46 45 85 50 45 \n", "47 35 30 40 55 \n", "48 70 65 75 90 \n", "49 55 75 65 30 \n", "50 70 85 75 40 \n", "51 85 110 90 50 \n", "52 55 45 55 25 \n", "53 80 60 80 30 \n", "54 50 40 55 45 \n", "55 60 90 75 90 \n", "56 25 35 45 95 \n", "57 50 50 70 120 \n", "58 35 40 40 90 \n", "59 60 65 65 115 \n", "60 48 65 50 55 \n", "61 78 95 80 85 \n", "62 35 35 45 70 \n", "63 60 60 70 95 \n", "64 45 70 50 60 \n", "65 80 100 80 95 \n", "66 40 40 40 90 \n", "67 65 50 50 90 \n", "68 95 70 90 70 \n", "69 15 105 55 90 \n", "70 30 120 70 105 \n", "71 45 135 95 120 \n", "72 65 175 95 150 \n", "73 50 35 35 35 \n", "74 70 50 60 45 \n", "75 80 65 85 55 \n", "76 35 70 30 40 \n", "77 50 85 45 55 \n", "78 65 100 70 70 \n", "79 35 50 100 70 \n", "80 65 80 120 100 \n", "81 100 30 30 20 \n", "82 115 45 45 35 \n", "83 130 55 65 45 \n", "84 55 65 65 90 \n", "85 70 80 80 105 \n", "86 65 40 40 15 \n", "87 110 100 80 30 \n", "88 180 130 80 30 \n", "89 70 95 55 45 \n", "90 95 120 70 70 \n", "91 55 58 62 60 \n", "92 45 35 35 75 \n", "93 70 60 60 100 \n", "94 55 45 70 45 \n", "95 80 70 95 70 \n", "96 50 40 50 25 \n", "97 75 65 100 50 \n", "98 100 45 25 40 \n", "99 180 85 45 70 \n", "100 30 100 35 80 \n", "... ... ... ... ... \n", "Rows: 1-100 of 800 | Columns: 9" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pokemon.drop([\"Generation\", \n", " \"Legendary\", \n", " \"Name\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 'ID' will be the key to join the data. By joining the data, we will be able to create more relevant features." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "fights = pokemon.join(combats, \n", " on = {\"ID\": \"First_Pokemon\"}, \n", " how = \"inner\",\n", " expr1 = [\"Sp_Atk AS Sp_Atk_1\", \n", " \"Speed AS Speed_1\", \n", " \"Sp_Def AS Sp_Def_1\", \n", " \"Defense AS Defense_1\", \n", " \"Type_1 AS Type_1_1\", \n", " \"Type_2 AS Type_2_1\", \n", " \"HP AS HP_1\", \n", " \"Attack AS Attack_1\"],\n", " expr2 = [\"First_Pokemon\", \n", " \"Second_Pokemon\", \n", " \"Winner\"]).join(pokemon, \n", " on = {\"Second_Pokemon\": \"ID\"}, \n", " how = \"inner\",\n", " expr2 = [\"Sp_Atk AS Sp_Atk_2\", \n", " \"Speed AS Speed_2\", \n", " \"Sp_Def AS Sp_Def_2\", \n", " \"Defense AS Defense_2\", \n", " \"Type_1 AS Type_1_2\", \n", " \"Type_2 AS Type_2_2\", \n", " \"HP AS HP_2\", \n", " \"Attack AS Attack_2\"],\n", " expr1 = [\"Sp_Atk_1\", \n", " \"Speed_1\", \n", " \"Sp_Def_1\", \n", " \"Defense_1\", \n", " \"Type_1_1\", \n", " \"Type_2_1\", \n", " \"HP_1\", \n", " \"Attack_1\", \n", " \"Winner\", \n", " \"Second_pokemon\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Features engineering is the key. Here, we can create features that describe the stat differences between the first and second Pokemon. We can also change 'winner' to a binary value: 1 if the first pokemon won and 0 otherwise." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
123
Sp_Atk_diff
Integer
123
Speed_diff
Integer
123
Sp_Def_diff
Integer
123
Defense_diff
Integer
123
HP_diff
Integer
123
Attack_diff
Integer
Abc
Type_1_1
Varchar(20)
Abc
Type_1_2
Varchar(20)
Abc
Type_2_1
Varchar(20)
Abc
Type_2_2
Varchar(20)
123
Winner
Integer
1-15-350-9-13-15GrassFirePoison[null]0
215-52-5-11-10-32GrassNormalPoison[null]0
3-10-31-20-38-45-43GrassPoisonPoisonGround0
415-200978GrassFirePoison[null]0
525010-1-15-6GrassBugPoisonPoison0
60-10-20-31-45-81GrassFightingPoison[null]0
70-10-20-31-45-81GrassFightingPoison[null]0
80-450-6-5-36GrassFirePoison[null]0
9-60-100-36-50-46GrassGrassPoisonPsychic0
1030-42-45-4-5-71GrassFightingPoison[null]0
11-35-70-20-36-15-26GrassWaterPoisonPsychic0
120-35-5-56-15-66GrassRockPoisonWater0
13-5-25-5-16-16-35GrassDragonPoison[null]0
14-35-35-35-46-46-85GrassDragonPoisonFlying0
1529-5919-1519GrassNormalPoisonFlying0
169-22911-3011GrassWaterPoisonElectric0
1725250-161029GrassFairyPoison[null]1
18-155-40-36-109GrassFairyPoisonFlying1
19010209-109GrassElectricPoison[null]1
20-3515-45-31-50-26GrassWaterPoisonPsychic1
21-7-3171-3-23GrassPsychicPoison[null]0
22-25-400-16-25-31GrassNormalPoisonPsychic0
23505-26-45-71GrassFairyPoison[null]0
245-55-31-55-51GrassIcePoisonGround0
25-75-70-25-41-30-41GrassDarkPoisonFire0
265-55-71-45-71GrassGroundPoison[null]0
273510351410-6GrassDarkPoison[null]1
2810-403519519GrassWaterPoisonFlying1
29-100-55-70-16-23-36GrassPsychicPoisonFairy0
305-255-31-15-81GrassGrassPoisonFighting0
312015-25-86154GrassRockPoison[null]1
32-15-55-20-36-15-51GrassFightingPoisonPsychic0
330-2025954GrassElectricPoison[null]0
3422512-4-256GrassPoisonPoison[null]1
35-5-153014-85-21GrassWaterPoison[null]0
36-50-105-11-25-66GrassGrassPoisonDark0
3719-15246-51GrassWaterPoisonGround0
38-50-15-51-30-76GrassRockPoisonBug0
3955-55-21-15-41GrassNormalPoison[null]1
40-7-6-22-34-54-19GrassGrassPoisonFlying0
4115-5-35-151-35-51GrassRockPoison[null]0
42-29-2115-1-25-45GrassBugPoisonFlying0
4324-29242-18-14GrassPoisonPoisonDark0
44-5-15-2542524GrassPsychicPoisonFairy0
4515-3710-16-23-41GrassDragonPoisonGround0
465-50-10-61-25-41GrassPoisonPoisonDark0
47-25-1-7-23-29-51GrassGrassPoison[null]0
4820-80-20-16-25-71GrassDarkPoisonIce0
49-65-20-30-61-20-11GrassIcePoison[null]0
50-40-41-42-58-5-16GrassElectricPoisonFire0
51-40-41-42-58-5-16GrassElectricPoisonFire0
52-10-68-30-46-30-26GrassGrassPoison[null]0
53200204-20-14GrassFirePoison[null]0
54-33-562-14-30-49GrassGrassPoison[null]0
5529235-1-5-6GrassNormalPoisonFlying1
5635-1226-10154GrassBugPoisonPoison0
57-15-202595-16GrassDarkPoison[null]0
58-30-20-45-46-25-6GrassPsychicPoison[null]0
59-22-532-14-30-38GrassWaterPoisonFlying0
60-10-585-11-10-26GrassElectricPoisonFlying0
61-5-5-20-46-15-31GrassSteelPoison[null]0
62-35-10059-35-21GrassBugPoison[null]0
63301015-1-14-25GrassGroundPoisonGhost1
645-25-5-51-20-76GrassDarkPoisonSteel0
655-25-5-51-20-76GrassDarkPoisonSteel0
66-80-56-15-21-34-56GrassElectricPoisonFlying0
67-64-63-25-41-46-23GrassWaterPoisonFighting0
68-12-83-12-41-55-79GrassNormalPoisonFighting0
69-44-64-29-3-17-6GrassElectricPoisonNormal0
70157512-21GrassGhostPoisonGrass1
7120-530202110GrassFirePoison[null]0
7235-525-47-15-38GrassGroundPoison[null]0
7340104023145GrassPoisonPoison[null]1
7430-515232221GrassFirePoison[null]0
7520300-170-33GrassBugPoisonGrass1
7640353013-20-18GrassPoisonPoison[null]0
771510-20-12-45-43GrassPoisonPoison[null]1
78-35-3525181512GrassGhostPoisonPoison0
79-20040-52-57GrassGrassPoison[null]0
8010-21-50-46-35-93GrassWaterPoisonDark0
81-50-15-17-70-23GrassWaterPoisonIce0
8215-2010-420-53GrassRockPoisonWater0
83-74-70-20-37-46-128GrassPsychicPoisonFighting0
84361732-110-3GrassWaterPoison[null]1
85404015-22542GrassFairyPoison[null]1
86404015-22542GrassFairyPoison[null]1
87020-25-22522GrassFairyPoisonFlying1
88-50-50-153-5-3GrassPsychicPoison[null]0
89-5-3138210-23GrassDarkPoisonFlying0
90-5-3138210-23GrassDarkPoisonFlying0
91-30-2010-7-20-58GrassFirePoisonFighting0
92604050281517GrassBugPoison[null]1
9315-5604315-28GrassWaterPoisonDark0
94-35-55203-5-88GrassDarkPoison[null]0
95301030131012GrassIcePoison[null]1
96-40-400-17-20-58GrassIcePoison[null]0
97-3485-425-22GrassWaterPoison[null]1
985005033207GrassNormalPoisonFlying0
9920031140-23GrassElectricPoison[null]0
1003330-58-105010GrassRockPoisonSteel0
Rows: 1-100 | Columns: 11
" ], "text/plain": [ " Sp_Atk_diff Speed_diff Sp_Def_diff Defense_diff \\\\\n", "1 -15 -35 0 -9 \\\\\n", "2 15 -52 -5 -11 \\\\\n", "3 -10 -31 -20 -38 \\\\\n", "4 15 -20 0 9 \\\\\n", "5 25 0 10 -1 \\\\\n", "6 0 -10 -20 -31 \\\\\n", "7 0 -10 -20 -31 \\\\\n", "8 0 -45 0 -6 \\\\\n", "9 -60 -10 0 -36 \\\\\n", "10 30 -42 -45 -4 \\\\\n", "11 -35 -70 -20 -36 \\\\\n", "12 0 -35 -5 -56 \\\\\n", "13 -5 -25 -5 -16 \\\\\n", "14 -35 -35 -35 -46 \\\\\n", "15 29 -5 9 19 \\\\\n", "16 9 -22 9 11 \\\\\n", "17 25 25 0 -16 \\\\\n", "18 -15 5 -40 -36 \\\\\n", "19 0 10 20 9 \\\\\n", "20 -35 15 -45 -31 \\\\\n", "21 -7 -3 17 1 \\\\\n", "22 -25 -40 0 -16 \\\\\n", "23 5 0 5 -26 \\\\\n", "24 5 -5 5 -31 \\\\\n", "25 -75 -70 -25 -41 \\\\\n", "26 5 -5 5 -71 \\\\\n", "27 35 10 35 14 \\\\\n", "28 10 -40 35 19 \\\\\n", "29 -100 -55 -70 -16 \\\\\n", "30 5 -25 5 -31 \\\\\n", "31 20 15 -25 -86 \\\\\n", "32 -15 -55 -20 -36 \\\\\n", "33 0 -20 25 9 \\\\\n", "34 22 5 12 -4 \\\\\n", "35 -5 -15 30 14 \\\\\n", "36 -50 -10 5 -11 \\\\\n", "37 19 -15 24 6 \\\\\n", "38 -5 0 -15 -51 \\\\\n", "39 5 5 -55 -21 \\\\\n", "40 -7 -6 -22 -34 \\\\\n", "41 15 -5 -35 -151 \\\\\n", "42 -29 -21 15 -1 \\\\\n", "43 24 -29 24 2 \\\\\n", "44 -5 -15 -25 4 \\\\\n", "45 15 -37 10 -16 \\\\\n", "46 5 -50 -10 -61 \\\\\n", "47 -25 -1 -7 -23 \\\\\n", "48 20 -80 -20 -16 \\\\\n", "49 -65 -20 -30 -61 \\\\\n", "50 -40 -41 -42 -58 \\\\\n", "51 -40 -41 -42 -58 \\\\\n", "52 -10 -68 -30 -46 \\\\\n", "53 20 0 20 4 \\\\\n", "54 -33 -56 2 -14 \\\\\n", "55 29 2 35 -1 \\\\\n", "56 35 -12 26 -10 \\\\\n", "57 -15 -20 25 9 \\\\\n", "58 -30 -20 -45 -46 \\\\\n", "59 -22 -53 2 -14 \\\\\n", "60 -10 -58 5 -11 \\\\\n", "61 -5 -5 -20 -46 \\\\\n", "62 -35 -100 5 9 \\\\\n", "63 30 10 15 -1 \\\\\n", "64 5 -25 -5 -51 \\\\\n", "65 5 -25 -5 -51 \\\\\n", "66 -80 -56 -15 -21 \\\\\n", "67 -64 -63 -25 -41 \\\\\n", "68 -12 -83 -12 -41 \\\\\n", "69 -44 -64 -29 -3 \\\\\n", "70 15 7 5 1 \\\\\n", "71 20 -5 30 20 \\\\\n", "72 35 -5 25 -47 \\\\\n", "73 40 10 40 23 \\\\\n", "74 30 -5 15 23 \\\\\n", "75 20 30 0 -17 \\\\\n", "76 40 35 30 13 \\\\\n", "77 15 10 -20 -12 \\\\\n", "78 -35 -35 25 18 \\\\\n", "79 -20 0 40 -52 \\\\\n", "80 10 -21 -50 -46 \\\\\n", "81 -5 0 -15 -17 \\\\\n", "82 15 -20 10 -42 \\\\\n", "83 -74 -70 -20 -37 \\\\\n", "84 36 17 32 -1 \\\\\n", "85 40 40 15 -2 \\\\\n", "86 40 40 15 -2 \\\\\n", "87 0 20 -25 -22 \\\\\n", "88 -50 -50 -15 3 \\\\\n", "89 -5 -31 38 21 \\\\\n", "90 -5 -31 38 21 \\\\\n", "91 -30 -20 10 -7 \\\\\n", "92 60 40 50 28 \\\\\n", "93 15 -5 60 43 \\\\\n", "94 -35 -55 20 3 \\\\\n", "95 30 10 30 13 \\\\\n", "96 -40 -40 0 -17 \\\\\n", "97 -34 8 5 -42 \\\\\n", "98 50 0 50 33 \\\\\n", "99 20 0 31 14 \\\\\n", "100 33 30 -58 -105 \\\\\n", " HP_diff Attack_diff Type_1_1 Type_1_2 Type_2_1 \\\\\n", "1 -13 -15 Grass Fire Poison \\\\\n", "2 -10 -32 Grass Normal Poison \\\\\n", "3 -45 -43 Grass Poison Poison \\\\\n", "4 7 8 Grass Fire Poison \\\\\n", "5 -15 -6 Grass Bug Poison \\\\\n", "6 -45 -81 Grass Fighting Poison \\\\\n", "7 -45 -81 Grass Fighting Poison \\\\\n", "8 -5 -36 Grass Fire Poison \\\\\n", "9 -50 -46 Grass Grass Poison \\\\\n", "10 -5 -71 Grass Fighting Poison \\\\\n", "11 -15 -26 Grass Water Poison \\\\\n", "12 -15 -66 Grass Rock Poison \\\\\n", "13 -16 -35 Grass Dragon Poison \\\\\n", "14 -46 -85 Grass Dragon Poison \\\\\n", "15 -15 19 Grass Normal Poison \\\\\n", "16 -30 11 Grass Water Poison \\\\\n", "17 10 29 Grass Fairy Poison \\\\\n", "18 -10 9 Grass Fairy Poison \\\\\n", "19 -10 9 Grass Electric Poison \\\\\n", "20 -50 -26 Grass Water Poison \\\\\n", "21 -3 -23 Grass Psychic Poison \\\\\n", "22 -25 -31 Grass Normal Poison \\\\\n", "23 -45 -71 Grass Fairy Poison \\\\\n", "24 -55 -51 Grass Ice Poison \\\\\n", "25 -30 -41 Grass Dark Poison \\\\\n", "26 -45 -71 Grass Ground Poison \\\\\n", "27 10 -6 Grass Dark Poison \\\\\n", "28 5 19 Grass Water Poison \\\\\n", "29 -23 -36 Grass Psychic Poison \\\\\n", "30 -15 -81 Grass Grass Poison \\\\\n", "31 15 4 Grass Rock Poison \\\\\n", "32 -15 -51 Grass Fighting Poison \\\\\n", "33 5 4 Grass Electric Poison \\\\\n", "34 -25 6 Grass Poison Poison \\\\\n", "35 -85 -21 Grass Water Poison \\\\\n", "36 -25 -66 Grass Grass Poison \\\\\n", "37 -5 1 Grass Water Poison \\\\\n", "38 -30 -76 Grass Rock Poison \\\\\n", "39 -15 -41 Grass Normal Poison \\\\\n", "40 -54 -19 Grass Grass Poison \\\\\n", "41 -35 -51 Grass Rock Poison \\\\\n", "42 -25 -45 Grass Bug Poison \\\\\n", "43 -18 -14 Grass Poison Poison \\\\\n", "44 25 24 Grass Psychic Poison \\\\\n", "45 -23 -41 Grass Dragon Poison \\\\\n", "46 -25 -41 Grass Poison Poison \\\\\n", "47 -29 -51 Grass Grass Poison \\\\\n", "48 -25 -71 Grass Dark Poison \\\\\n", "49 -20 -11 Grass Ice Poison \\\\\n", "50 -5 -16 Grass Electric Poison \\\\\n", "51 -5 -16 Grass Electric Poison \\\\\n", "52 -30 -26 Grass Grass Poison \\\\\n", "53 -20 -14 Grass Fire Poison \\\\\n", "54 -30 -49 Grass Grass Poison \\\\\n", "55 -5 -6 Grass Normal Poison \\\\\n", "56 15 4 Grass Bug Poison \\\\\n", "57 5 -16 Grass Dark Poison \\\\\n", "58 -25 -6 Grass Psychic Poison \\\\\n", "59 -30 -38 Grass Water Poison \\\\\n", "60 -10 -26 Grass Electric Poison \\\\\n", "61 -15 -31 Grass Steel Poison \\\\\n", "62 -35 -21 Grass Bug Poison \\\\\n", "63 -14 -25 Grass Ground Poison \\\\\n", "64 -20 -76 Grass Dark Poison \\\\\n", "65 -20 -76 Grass Dark Poison \\\\\n", "66 -34 -56 Grass Electric Poison \\\\\n", "67 -46 -23 Grass Water Poison \\\\\n", "68 -55 -79 Grass Normal Poison \\\\\n", "69 -17 -6 Grass Electric Poison \\\\\n", "70 2 -21 Grass Ghost Poison \\\\\n", "71 21 10 Grass Fire Poison \\\\\n", "72 -15 -38 Grass Ground Poison \\\\\n", "73 14 5 Grass Poison Poison \\\\\n", "74 22 21 Grass Fire Poison \\\\\n", "75 0 -33 Grass Bug Poison \\\\\n", "76 -20 -18 Grass Poison Poison \\\\\n", "77 -45 -43 Grass Poison Poison \\\\\n", "78 15 12 Grass Ghost Poison \\\\\n", "79 -5 7 Grass Grass Poison \\\\\n", "80 -35 -93 Grass Water Poison \\\\\n", "81 -70 -23 Grass Water Poison \\\\\n", "82 0 -53 Grass Rock Poison \\\\\n", "83 -46 -128 Grass Psychic Poison \\\\\n", "84 10 -3 Grass Water Poison \\\\\n", "85 25 42 Grass Fairy Poison \\\\\n", "86 25 42 Grass Fairy Poison \\\\\n", "87 5 22 Grass Fairy Poison \\\\\n", "88 -5 -3 Grass Psychic Poison \\\\\n", "89 0 -23 Grass Dark Poison \\\\\n", "90 0 -23 Grass Dark Poison \\\\\n", "91 -20 -58 Grass Fire Poison \\\\\n", "92 15 17 Grass Bug Poison \\\\\n", "93 15 -28 Grass Water Poison \\\\\n", "94 -5 -88 Grass Dark Poison \\\\\n", "95 10 12 Grass Ice Poison \\\\\n", "96 -20 -58 Grass Ice Poison \\\\\n", "97 5 -22 Grass Water Poison \\\\\n", "98 20 7 Grass Normal Poison \\\\\n", "99 0 -23 Grass Electric Poison \\\\\n", "100 0 10 Grass Rock Poison \\\\\n", " Type_2_2 Winner \n", "1 None 0 \n", "2 None 0 \n", "3 Ground 0 \n", "4 None 0 \n", "5 Poison 0 \n", "6 None 0 \n", "7 None 0 \n", "8 None 0 \n", "9 Psychic 0 \n", "10 None 0 \n", "11 Psychic 0 \n", "12 Water 0 \n", "13 None 0 \n", "14 Flying 0 \n", "15 Flying 0 \n", "16 Electric 0 \n", "17 None 1 \n", "18 Flying 1 \n", "19 None 1 \n", "20 Psychic 1 \n", "21 None 0 \n", "22 Psychic 0 \n", "23 None 0 \n", "24 Ground 0 \n", "25 Fire 0 \n", "26 None 0 \n", "27 None 1 \n", "28 Flying 1 \n", "29 Fairy 0 \n", "30 Fighting 0 \n", "31 None 1 \n", "32 Psychic 0 \n", "33 None 0 \n", "34 None 1 \n", "35 None 0 \n", "36 Dark 0 \n", "37 Ground 0 \n", "38 Bug 0 \n", "39 None 1 \n", "40 Flying 0 \n", "41 None 0 \n", "42 Flying 0 \n", "43 Dark 0 \n", "44 Fairy 0 \n", "45 Ground 0 \n", "46 Dark 0 \n", "47 None 0 \n", "48 Ice 0 \n", "49 None 0 \n", "50 Fire 0 \n", "51 Fire 0 \n", "52 None 0 \n", "53 None 0 \n", "54 None 0 \n", "55 Flying 1 \n", "56 Poison 0 \n", "57 None 0 \n", "58 None 0 \n", "59 Flying 0 \n", "60 Flying 0 \n", "61 None 0 \n", "62 None 0 \n", "63 Ghost 1 \n", "64 Steel 0 \n", "65 Steel 0 \n", "66 Flying 0 \n", "67 Fighting 0 \n", "68 Fighting 0 \n", "69 Normal 0 \n", "70 Grass 1 \n", "71 None 0 \n", "72 None 0 \n", "73 None 1 \n", "74 None 0 \n", "75 Grass 1 \n", "76 None 0 \n", "77 None 1 \n", "78 Poison 0 \n", "79 None 0 \n", "80 Dark 0 \n", "81 Ice 0 \n", "82 Water 0 \n", "83 Fighting 0 \n", "84 None 1 \n", "85 None 1 \n", "86 None 1 \n", "87 Flying 1 \n", "88 None 0 \n", "89 Flying 0 \n", "90 Flying 0 \n", "91 Fighting 0 \n", "92 None 1 \n", "93 Dark 0 \n", "94 None 0 \n", "95 None 1 \n", "96 None 0 \n", "97 None 1 \n", "98 Flying 0 \n", "99 None 0 \n", "100 Steel 0 \n", "Rows: 1-100 | Columns: 11" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fights[\"Sp_Atk_diff\"] = fights[\"Sp_Atk_1\"] - fights[\"Sp_Atk_2\"]\n", "fights[\"Speed_diff\"] = fights[\"Speed_1\"] - fights[\"Speed_2\"]\n", "fights[\"Sp_Def_diff\"] = fights[\"Sp_Def_1\"] - fights[\"Sp_Def_2\"]\n", "fights[\"Defense_diff\"] = fights[\"Defense_1\"] - fights[\"Defense_2\"]\n", "fights[\"HP_diff\"] = fights[\"HP_1\"] - fights[\"HP_2\"]\n", "fights[\"Attack_diff\"] = fights[\"Attack_1\"] - fights[\"Attack_2\"]\n", "fights[\"Winner\"] = st.case_when(fights[\"Winner\"] == fights[\"Second_pokemon\"], 0, 1)\n", "fights = fights[[\"Sp_Atk_diff\", \"Speed_diff\", \"Sp_Def_diff\", \n", " \"Defense_diff\", \"HP_diff\", \"Attack_diff\", \n", " \"Type_1_1\", \"Type_1_2\", \"Type_2_1\", \"Type_2_2\", \n", " \"Winner\"]]\n", "display(fights)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Missing values can not be handled by most machine learning models. Let's see which features we should impute." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
count
"Sp_Atk_diff"50000.0
"Speed_diff"50000.0
"Sp_Def_diff"50000.0
"Defense_diff"50000.0
"HP_diff"50000.0
"Attack_diff"50000.0
"Type_1_1"50000.0
"Type_1_2"50000.0
"Type_2_1"25969.0
"Type_2_2"26015.0
"Winner"50000.0
Rows: 1-11 | Columns: 2
" ], "text/plain": [ " count \n", "\"Sp_Atk_diff\" 50000.0 \n", "\"Speed_diff\" 50000.0 \n", "\"Sp_Def_diff\" 50000.0 \n", "\"Defense_diff\" 50000.0 \n", "\"HP_diff\" 50000.0 \n", "\"Attack_diff\" 50000.0 \n", "\"Type_1_1\" 50000.0 \n", "\"Type_1_2\" 50000.0 \n", "\"Type_2_1\" 25969.0 \n", "\"Type_2_2\" 26015.0 \n", "\"Winner\" 50000.0 \n", "Rows: 1-11 | Columns: 2" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fights.count()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In terms of missing values, our only concern is the Pokemon's second type (Type_2_1 and Type_2_2). Since some Pokemon only have one type, these features are MNAR (missing values not at random). We can impute the missing values by creating another category." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "24031 elements were filled.\n", "23985 elements were filled.\n" ] }, { "data": { "text/html": [ "
123
Sp_Atk_diff
Integer
123
Speed_diff
Integer
123
Sp_Def_diff
Integer
123
Defense_diff
Integer
123
HP_diff
Integer
123
Attack_diff
Integer
Abc
Type_1_1
Varchar(20)
Abc
Type_1_2
Varchar(20)
Abc
Type_2_1
Varchar(20)
Abc
Type_2_2
Varchar(20)
123
Winner
Integer
1-15-350-9-13-15GrassFirePoisonNo0
215-52-5-11-10-32GrassNormalPoisonNo0
3-10-31-20-38-45-43GrassPoisonPoisonGround0
415-200978GrassFirePoisonNo0
525010-1-15-6GrassBugPoisonPoison0
60-10-20-31-45-81GrassFightingPoisonNo0
70-10-20-31-45-81GrassFightingPoisonNo0
80-450-6-5-36GrassFirePoisonNo0
9-60-100-36-50-46GrassGrassPoisonPsychic0
1030-42-45-4-5-71GrassFightingPoisonNo0
11-35-70-20-36-15-26GrassWaterPoisonPsychic0
120-35-5-56-15-66GrassRockPoisonWater0
13-5-25-5-16-16-35GrassDragonPoisonNo0
14-35-35-35-46-46-85GrassDragonPoisonFlying0
1529-5919-1519GrassNormalPoisonFlying0
169-22911-3011GrassWaterPoisonElectric0
1725250-161029GrassFairyPoisonNo1
18-155-40-36-109GrassFairyPoisonFlying1
19010209-109GrassElectricPoisonNo1
20-3515-45-31-50-26GrassWaterPoisonPsychic1
21-7-3171-3-23GrassPsychicPoisonNo0
22-25-400-16-25-31GrassNormalPoisonPsychic0
23505-26-45-71GrassFairyPoisonNo0
245-55-31-55-51GrassIcePoisonGround0
25-75-70-25-41-30-41GrassDarkPoisonFire0
265-55-71-45-71GrassGroundPoisonNo0
273510351410-6GrassDarkPoisonNo1
2810-403519519GrassWaterPoisonFlying1
29-100-55-70-16-23-36GrassPsychicPoisonFairy0
305-255-31-15-81GrassGrassPoisonFighting0
312015-25-86154GrassRockPoisonNo1
32-15-55-20-36-15-51GrassFightingPoisonPsychic0
330-2025954GrassElectricPoisonNo0
3422512-4-256GrassPoisonPoisonNo1
35-5-153014-85-21GrassWaterPoisonNo0
36-50-105-11-25-66GrassGrassPoisonDark0
3719-15246-51GrassWaterPoisonGround0
38-50-15-51-30-76GrassRockPoisonBug0
3955-55-21-15-41GrassNormalPoisonNo1
40-7-6-22-34-54-19GrassGrassPoisonFlying0
4115-5-35-151-35-51GrassRockPoisonNo0
42-29-2115-1-25-45GrassBugPoisonFlying0
4324-29242-18-14GrassPoisonPoisonDark0
44-5-15-2542524GrassPsychicPoisonFairy0
4515-3710-16-23-41GrassDragonPoisonGround0
465-50-10-61-25-41GrassPoisonPoisonDark0
47-25-1-7-23-29-51GrassGrassPoisonNo0
4820-80-20-16-25-71GrassDarkPoisonIce0
49-65-20-30-61-20-11GrassIcePoisonNo0
50-40-41-42-58-5-16GrassElectricPoisonFire0
51-40-41-42-58-5-16GrassElectricPoisonFire0
52-10-68-30-46-30-26GrassGrassPoisonNo0
53200204-20-14GrassFirePoisonNo0
54-33-562-14-30-49GrassGrassPoisonNo0
5529235-1-5-6GrassNormalPoisonFlying1
5635-1226-10154GrassBugPoisonPoison0
57-15-202595-16GrassDarkPoisonNo0
58-30-20-45-46-25-6GrassPsychicPoisonNo0
59-22-532-14-30-38GrassWaterPoisonFlying0
60-10-585-11-10-26GrassElectricPoisonFlying0
61-5-5-20-46-15-31GrassSteelPoisonNo0
62-35-10059-35-21GrassBugPoisonNo0
63301015-1-14-25GrassGroundPoisonGhost1
645-25-5-51-20-76GrassDarkPoisonSteel0
655-25-5-51-20-76GrassDarkPoisonSteel0
66-80-56-15-21-34-56GrassElectricPoisonFlying0
67-64-63-25-41-46-23GrassWaterPoisonFighting0
68-12-83-12-41-55-79GrassNormalPoisonFighting0
69-44-64-29-3-17-6GrassElectricPoisonNormal0
70157512-21GrassGhostPoisonGrass1
7120-530202110GrassFirePoisonNo0
7235-525-47-15-38GrassGroundPoisonNo0
7340104023145GrassPoisonPoisonNo1
7430-515232221GrassFirePoisonNo0
7520300-170-33GrassBugPoisonGrass1
7640353013-20-18GrassPoisonPoisonNo0
771510-20-12-45-43GrassPoisonPoisonNo1
78-35-3525181512GrassGhostPoisonPoison0
79-20040-52-57GrassGrassPoisonNo0
8010-21-50-46-35-93GrassWaterPoisonDark0
81-50-15-17-70-23GrassWaterPoisonIce0
8215-2010-420-53GrassRockPoisonWater0
83-74-70-20-37-46-128GrassPsychicPoisonFighting0
84361732-110-3GrassWaterPoisonNo1
85404015-22542GrassFairyPoisonNo1
86404015-22542GrassFairyPoisonNo1
87020-25-22522GrassFairyPoisonFlying1
88-50-50-153-5-3GrassPsychicPoisonNo0
89-5-3138210-23GrassDarkPoisonFlying0
90-5-3138210-23GrassDarkPoisonFlying0
91-30-2010-7-20-58GrassFirePoisonFighting0
92604050281517GrassBugPoisonNo1
9315-5604315-28GrassWaterPoisonDark0
94-35-55203-5-88GrassDarkPoisonNo0
95301030131012GrassIcePoisonNo1
96-40-400-17-20-58GrassIcePoisonNo0
97-3485-425-22GrassWaterPoisonNo1
985005033207GrassNormalPoisonFlying0
9920031140-23GrassElectricPoisonNo0
1003330-58-105010GrassRockPoisonSteel0
Rows: 1-100 of 50000 | Columns: 11
" ], "text/plain": [ " Sp_Atk_diff Speed_diff Sp_Def_diff Defense_diff \\\\\n", "1 -15 -35 0 -9 \\\\\n", "2 15 -52 -5 -11 \\\\\n", "3 -10 -31 -20 -38 \\\\\n", "4 15 -20 0 9 \\\\\n", "5 25 0 10 -1 \\\\\n", "6 0 -10 -20 -31 \\\\\n", "7 0 -10 -20 -31 \\\\\n", "8 0 -45 0 -6 \\\\\n", "9 -60 -10 0 -36 \\\\\n", "10 30 -42 -45 -4 \\\\\n", "11 -35 -70 -20 -36 \\\\\n", "12 0 -35 -5 -56 \\\\\n", "13 -5 -25 -5 -16 \\\\\n", "14 -35 -35 -35 -46 \\\\\n", "15 29 -5 9 19 \\\\\n", "16 9 -22 9 11 \\\\\n", "17 25 25 0 -16 \\\\\n", "18 -15 5 -40 -36 \\\\\n", "19 0 10 20 9 \\\\\n", "20 -35 15 -45 -31 \\\\\n", "21 -7 -3 17 1 \\\\\n", "22 -25 -40 0 -16 \\\\\n", "23 5 0 5 -26 \\\\\n", "24 5 -5 5 -31 \\\\\n", "25 -75 -70 -25 -41 \\\\\n", "26 5 -5 5 -71 \\\\\n", "27 35 10 35 14 \\\\\n", "28 10 -40 35 19 \\\\\n", "29 -100 -55 -70 -16 \\\\\n", "30 5 -25 5 -31 \\\\\n", "31 20 15 -25 -86 \\\\\n", "32 -15 -55 -20 -36 \\\\\n", "33 0 -20 25 9 \\\\\n", "34 22 5 12 -4 \\\\\n", "35 -5 -15 30 14 \\\\\n", "36 -50 -10 5 -11 \\\\\n", "37 19 -15 24 6 \\\\\n", "38 -5 0 -15 -51 \\\\\n", "39 5 5 -55 -21 \\\\\n", "40 -7 -6 -22 -34 \\\\\n", "41 15 -5 -35 -151 \\\\\n", "42 -29 -21 15 -1 \\\\\n", "43 24 -29 24 2 \\\\\n", "44 -5 -15 -25 4 \\\\\n", "45 15 -37 10 -16 \\\\\n", "46 5 -50 -10 -61 \\\\\n", "47 -25 -1 -7 -23 \\\\\n", "48 20 -80 -20 -16 \\\\\n", "49 -65 -20 -30 -61 \\\\\n", "50 -40 -41 -42 -58 \\\\\n", "51 -40 -41 -42 -58 \\\\\n", "52 -10 -68 -30 -46 \\\\\n", "53 20 0 20 4 \\\\\n", "54 -33 -56 2 -14 \\\\\n", "55 29 2 35 -1 \\\\\n", "56 35 -12 26 -10 \\\\\n", "57 -15 -20 25 9 \\\\\n", "58 -30 -20 -45 -46 \\\\\n", "59 -22 -53 2 -14 \\\\\n", "60 -10 -58 5 -11 \\\\\n", "61 -5 -5 -20 -46 \\\\\n", "62 -35 -100 5 9 \\\\\n", "63 30 10 15 -1 \\\\\n", "64 5 -25 -5 -51 \\\\\n", "65 5 -25 -5 -51 \\\\\n", "66 -80 -56 -15 -21 \\\\\n", "67 -64 -63 -25 -41 \\\\\n", "68 -12 -83 -12 -41 \\\\\n", "69 -44 -64 -29 -3 \\\\\n", "70 15 7 5 1 \\\\\n", "71 20 -5 30 20 \\\\\n", "72 35 -5 25 -47 \\\\\n", "73 40 10 40 23 \\\\\n", "74 30 -5 15 23 \\\\\n", "75 20 30 0 -17 \\\\\n", "76 40 35 30 13 \\\\\n", "77 15 10 -20 -12 \\\\\n", "78 -35 -35 25 18 \\\\\n", "79 -20 0 40 -52 \\\\\n", "80 10 -21 -50 -46 \\\\\n", "81 -5 0 -15 -17 \\\\\n", "82 15 -20 10 -42 \\\\\n", "83 -74 -70 -20 -37 \\\\\n", "84 36 17 32 -1 \\\\\n", "85 40 40 15 -2 \\\\\n", "86 40 40 15 -2 \\\\\n", "87 0 20 -25 -22 \\\\\n", "88 -50 -50 -15 3 \\\\\n", "89 -5 -31 38 21 \\\\\n", "90 -5 -31 38 21 \\\\\n", "91 -30 -20 10 -7 \\\\\n", "92 60 40 50 28 \\\\\n", "93 15 -5 60 43 \\\\\n", "94 -35 -55 20 3 \\\\\n", "95 30 10 30 13 \\\\\n", "96 -40 -40 0 -17 \\\\\n", "97 -34 8 5 -42 \\\\\n", "98 50 0 50 33 \\\\\n", "99 20 0 31 14 \\\\\n", "100 33 30 -58 -105 \\\\\n", "... ... ... ... ... \\\\\n", " HP_diff Attack_diff Type_1_1 Type_1_2 Type_2_1 \\\\\n", "1 -13 -15 Grass Fire Poison \\\\\n", "2 -10 -32 Grass Normal Poison \\\\\n", "3 -45 -43 Grass Poison Poison \\\\\n", "4 7 8 Grass Fire Poison \\\\\n", "5 -15 -6 Grass Bug Poison \\\\\n", "6 -45 -81 Grass Fighting Poison \\\\\n", "7 -45 -81 Grass Fighting Poison \\\\\n", "8 -5 -36 Grass Fire Poison \\\\\n", "9 -50 -46 Grass Grass Poison \\\\\n", "10 -5 -71 Grass Fighting Poison \\\\\n", "11 -15 -26 Grass Water Poison \\\\\n", "12 -15 -66 Grass Rock Poison \\\\\n", "13 -16 -35 Grass Dragon Poison \\\\\n", "14 -46 -85 Grass Dragon Poison \\\\\n", "15 -15 19 Grass Normal Poison \\\\\n", "16 -30 11 Grass Water Poison \\\\\n", "17 10 29 Grass Fairy Poison \\\\\n", "18 -10 9 Grass Fairy Poison \\\\\n", "19 -10 9 Grass Electric Poison \\\\\n", "20 -50 -26 Grass Water Poison \\\\\n", "21 -3 -23 Grass Psychic Poison \\\\\n", "22 -25 -31 Grass Normal Poison \\\\\n", "23 -45 -71 Grass Fairy Poison \\\\\n", "24 -55 -51 Grass Ice Poison \\\\\n", "25 -30 -41 Grass Dark Poison \\\\\n", "26 -45 -71 Grass Ground Poison \\\\\n", "27 10 -6 Grass Dark Poison \\\\\n", "28 5 19 Grass Water Poison \\\\\n", "29 -23 -36 Grass Psychic Poison \\\\\n", "30 -15 -81 Grass Grass Poison \\\\\n", "31 15 4 Grass Rock Poison \\\\\n", "32 -15 -51 Grass Fighting Poison \\\\\n", "33 5 4 Grass Electric Poison \\\\\n", "34 -25 6 Grass Poison Poison \\\\\n", "35 -85 -21 Grass Water Poison \\\\\n", "36 -25 -66 Grass Grass Poison \\\\\n", "37 -5 1 Grass Water Poison \\\\\n", "38 -30 -76 Grass Rock Poison \\\\\n", "39 -15 -41 Grass Normal Poison \\\\\n", "40 -54 -19 Grass Grass Poison \\\\\n", "41 -35 -51 Grass Rock Poison \\\\\n", "42 -25 -45 Grass Bug Poison \\\\\n", "43 -18 -14 Grass Poison Poison \\\\\n", "44 25 24 Grass Psychic Poison \\\\\n", "45 -23 -41 Grass Dragon Poison \\\\\n", "46 -25 -41 Grass Poison Poison \\\\\n", "47 -29 -51 Grass Grass Poison \\\\\n", "48 -25 -71 Grass Dark Poison \\\\\n", "49 -20 -11 Grass Ice Poison \\\\\n", "50 -5 -16 Grass Electric Poison \\\\\n", "51 -5 -16 Grass Electric Poison \\\\\n", "52 -30 -26 Grass Grass Poison \\\\\n", "53 -20 -14 Grass Fire Poison \\\\\n", "54 -30 -49 Grass Grass Poison \\\\\n", "55 -5 -6 Grass Normal Poison \\\\\n", "56 15 4 Grass Bug Poison \\\\\n", "57 5 -16 Grass Dark Poison \\\\\n", "58 -25 -6 Grass Psychic Poison \\\\\n", "59 -30 -38 Grass Water Poison \\\\\n", "60 -10 -26 Grass Electric Poison \\\\\n", "61 -15 -31 Grass Steel Poison \\\\\n", "62 -35 -21 Grass Bug Poison \\\\\n", "63 -14 -25 Grass Ground Poison \\\\\n", "64 -20 -76 Grass Dark Poison \\\\\n", "65 -20 -76 Grass Dark Poison \\\\\n", "66 -34 -56 Grass Electric Poison \\\\\n", "67 -46 -23 Grass Water Poison \\\\\n", "68 -55 -79 Grass Normal Poison \\\\\n", "69 -17 -6 Grass Electric Poison \\\\\n", "70 2 -21 Grass Ghost Poison \\\\\n", "71 21 10 Grass Fire Poison \\\\\n", "72 -15 -38 Grass Ground Poison \\\\\n", "73 14 5 Grass Poison Poison \\\\\n", "74 22 21 Grass Fire Poison \\\\\n", "75 0 -33 Grass Bug Poison \\\\\n", "76 -20 -18 Grass Poison Poison \\\\\n", "77 -45 -43 Grass Poison Poison \\\\\n", "78 15 12 Grass Ghost Poison \\\\\n", "79 -5 7 Grass Grass Poison \\\\\n", "80 -35 -93 Grass Water Poison \\\\\n", "81 -70 -23 Grass Water Poison \\\\\n", "82 0 -53 Grass Rock Poison \\\\\n", "83 -46 -128 Grass Psychic Poison \\\\\n", "84 10 -3 Grass Water Poison \\\\\n", "85 25 42 Grass Fairy Poison \\\\\n", "86 25 42 Grass Fairy Poison \\\\\n", "87 5 22 Grass Fairy Poison \\\\\n", "88 -5 -3 Grass Psychic Poison \\\\\n", "89 0 -23 Grass Dark Poison \\\\\n", "90 0 -23 Grass Dark Poison \\\\\n", "91 -20 -58 Grass Fire Poison \\\\\n", "92 15 17 Grass Bug Poison \\\\\n", "93 15 -28 Grass Water Poison \\\\\n", "94 -5 -88 Grass Dark Poison \\\\\n", "95 10 12 Grass Ice Poison \\\\\n", "96 -20 -58 Grass Ice Poison \\\\\n", "97 5 -22 Grass Water Poison \\\\\n", "98 20 7 Grass Normal Poison \\\\\n", "99 0 -23 Grass Electric Poison \\\\\n", "100 0 10 Grass Rock Poison \\\\\n", "... ... ... ... ... ... \\\\\n", " Type_2_2 Winner \n", "1 No 0 \n", "2 No 0 \n", "3 Ground 0 \n", "4 No 0 \n", "5 Poison 0 \n", "6 No 0 \n", "7 No 0 \n", "8 No 0 \n", "9 Psychic 0 \n", "10 No 0 \n", "11 Psychic 0 \n", "12 Water 0 \n", "13 No 0 \n", "14 Flying 0 \n", "15 Flying 0 \n", "16 Electric 0 \n", "17 No 1 \n", "18 Flying 1 \n", "19 No 1 \n", "20 Psychic 1 \n", "21 No 0 \n", "22 Psychic 0 \n", "23 No 0 \n", "24 Ground 0 \n", "25 Fire 0 \n", "26 No 0 \n", "27 No 1 \n", "28 Flying 1 \n", "29 Fairy 0 \n", "30 Fighting 0 \n", "31 No 1 \n", "32 Psychic 0 \n", "33 No 0 \n", "34 No 1 \n", "35 No 0 \n", "36 Dark 0 \n", "37 Ground 0 \n", "38 Bug 0 \n", "39 No 1 \n", "40 Flying 0 \n", "41 No 0 \n", "42 Flying 0 \n", "43 Dark 0 \n", "44 Fairy 0 \n", "45 Ground 0 \n", "46 Dark 0 \n", "47 No 0 \n", "48 Ice 0 \n", "49 No 0 \n", "50 Fire 0 \n", "51 Fire 0 \n", "52 No 0 \n", "53 No 0 \n", "54 No 0 \n", "55 Flying 1 \n", "56 Poison 0 \n", "57 No 0 \n", "58 No 0 \n", "59 Flying 0 \n", "60 Flying 0 \n", "61 No 0 \n", "62 No 0 \n", "63 Ghost 1 \n", "64 Steel 0 \n", "65 Steel 0 \n", "66 Flying 0 \n", "67 Fighting 0 \n", "68 Fighting 0 \n", "69 Normal 0 \n", "70 Grass 1 \n", "71 No 0 \n", "72 No 0 \n", "73 No 1 \n", "74 No 0 \n", "75 Grass 1 \n", "76 No 0 \n", "77 No 1 \n", "78 Poison 0 \n", "79 No 0 \n", "80 Dark 0 \n", "81 Ice 0 \n", "82 Water 0 \n", "83 Fighting 0 \n", "84 No 1 \n", "85 No 1 \n", "86 No 1 \n", "87 Flying 1 \n", "88 No 0 \n", "89 Flying 0 \n", "90 Flying 0 \n", "91 Fighting 0 \n", "92 No 1 \n", "93 Dark 0 \n", "94 No 0 \n", "95 No 1 \n", "96 No 0 \n", "97 No 1 \n", "98 Flying 0 \n", "99 No 0 \n", "100 Steel 0 \n", "... ... ... \n", "Rows: 1-100 of 50000 | Columns: 11" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fights[\"Type_2_1\"].fillna(\"No\")\n", "fights[\"Type_2_2\"].fillna(\"No\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use the current_relation method to see how our data preparation so far on the vDataFrame generates SQL code." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(\n", " SELECT\n", " \"Sp_Atk_diff\",\n", " \"Speed_diff\",\n", " \"Sp_Def_diff\",\n", " \"Defense_diff\",\n", " \"HP_diff\",\n", " \"Attack_diff\",\n", " \"Type_1_1\",\n", " \"Type_1_2\",\n", " COALESCE(\"Type_2_1\", 'No') AS \"Type_2_1\",\n", " COALESCE(\"Type_2_2\", 'No') AS \"Type_2_2\",\n", " \"Winner\" \n", " FROM\n", " (\n", " SELECT\n", " \"Sp_Atk_diff\",\n", " \"Speed_diff\",\n", " \"Sp_Def_diff\",\n", " \"Defense_diff\",\n", " \"HP_diff\",\n", " \"Attack_diff\",\n", " \"Type_1_1\",\n", " \"Type_1_2\",\n", " \"Type_2_1\",\n", " \"Type_2_2\",\n", " \"Winner\" \n", " FROM\n", " (\n", " SELECT\n", " \"Sp_Atk_diff\",\n", " \"Speed_diff\",\n", " \"Sp_Def_diff\",\n", " \"Defense_diff\",\n", " \"HP_diff\",\n", " \"Attack_diff\",\n", " \"Type_1_1\",\n", " \"Type_1_2\",\n", " \"Type_2_1\",\n", " \"Type_2_2\",\n", " \"Winner\" \n", " FROM\n", " (\n", " SELECT\n", " \"Sp_Atk_1\",\n", " \"Speed_1\",\n", " \"Sp_Def_1\",\n", " \"Defense_1\",\n", " \"Type_1_1\",\n", " \"Type_2_1\",\n", " \"HP_1\",\n", " \"Attack_1\",\n", " CASE WHEN (\"Winner\") = (\"Second_pokemon\") THEN 0 ELSE 1 END AS \"Winner\",\n", " \"Second_pokemon\",\n", " \"Sp_Atk_2\",\n", " \"Speed_2\",\n", " \"Sp_Def_2\",\n", " \"Defense_2\",\n", " \"Type_1_2\",\n", " \"Type_2_2\",\n", " \"HP_2\",\n", " \"Attack_2\",\n", " (\"Sp_Atk_1\") - (\"Sp_Atk_2\") AS \"Sp_Atk_diff\",\n", " (\"Speed_1\") - (\"Speed_2\") AS \"Speed_diff\",\n", " (\"Sp_Def_1\") - (\"Sp_Def_2\") AS \"Sp_Def_diff\",\n", " (\"Defense_1\") - (\"Defense_2\") AS \"Defense_diff\",\n", " (\"HP_1\") - (\"HP_2\") AS \"HP_diff\",\n", " (\"Attack_1\") - (\"Attack_2\") AS \"Attack_diff\" \n", " FROM\n", " (\n", " SELECT\n", " \"Sp_Atk_1\",\n", " \"Speed_1\",\n", " \"Sp_Def_1\",\n", " \"Defense_1\",\n", " \"Type_1_1\",\n", " \"Type_2_1\",\n", " \"HP_1\",\n", " \"Attack_1\",\n", " \"Winner\",\n", " \"Second_pokemon\",\n", " \"Sp_Atk_2\",\n", " \"Speed_2\",\n", " \"Sp_Def_2\",\n", " \"Defense_2\",\n", " \"Type_1_2\",\n", " \"Type_2_2\",\n", " \"HP_2\",\n", " \"Attack_2\" \n", " FROM\n", " (\n", " SELECT\n", " x.Sp_Atk_1,\n", " x.Speed_1,\n", " x.Sp_Def_1,\n", " x.Defense_1,\n", " x.Type_1_1,\n", " x.Type_2_1,\n", " x.HP_1,\n", " x.Attack_1,\n", " x.Winner,\n", " x.Second_pokemon,\n", " y.Sp_Atk AS Sp_Atk_2,\n", " y.Speed AS Speed_2,\n", " y.Sp_Def AS Sp_Def_2,\n", " y.Defense AS Defense_2,\n", " y.Type_1 AS Type_1_2,\n", " y.Type_2 AS Type_2_2,\n", " y.HP AS HP_2,\n", " y.Attack AS Attack_2 \n", " FROM\n", " (\n", " SELECT\n", " * \n", " FROM\n", " (\n", " SELECT\n", " \"Sp_Atk_1\",\n", " \"Speed_1\",\n", " \"Sp_Def_1\",\n", " \"Defense_1\",\n", " \"Type_1_1\",\n", " \"Type_2_1\",\n", " \"HP_1\",\n", " \"Attack_1\",\n", " \"First_Pokemon\",\n", " \"Second_Pokemon\",\n", " \"Winner\" \n", " FROM\n", " (\n", " SELECT\n", " x.Sp_Atk AS Sp_Atk_1,\n", " x.Speed AS Speed_1,\n", " x.Sp_Def AS Sp_Def_1,\n", " x.Defense AS Defense_1,\n", " x.Type_1 AS Type_1_1,\n", " x.Type_2 AS Type_2_1,\n", " x.HP AS HP_1,\n", " x.Attack AS Attack_1,\n", " y.First_Pokemon,\n", " y.Second_Pokemon,\n", " y.Winner \n", " FROM\n", " (\n", " SELECT\n", " * \n", " FROM\n", " (\n", " SELECT\n", " \"ID\",\n", " \"Type_1\",\n", " \"Type_2\",\n", " \"HP\",\n", " \"Attack\",\n", " \"Defense\",\n", " \"Sp_Atk\",\n", " \"Sp_Def\",\n", " \"Speed\" \n", " FROM\n", " \"v_temp_schema\".\"_verticapy_tmp_pokemon_dbadmin_41763_7947029521_\") \n", "VERTICAPY_SUBTABLE) AS x INNER JOIN \"v_temp_schema\".\"_verticapy_tmp_combats_dbadmin_41763_4463605028_\" AS y ON x.\"ID\" = y.\"First_Pokemon\") \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE) AS x INNER JOIN (\n", " SELECT\n", " * \n", " FROM\n", " (\n", " SELECT\n", " \"ID\",\n", " \"Type_1\",\n", " \"Type_2\",\n", " \"HP\",\n", " \"Attack\",\n", " \"Defense\",\n", " \"Sp_Atk\",\n", " \"Sp_Def\",\n", " \"Speed\" \n", " FROM\n", " \"v_temp_schema\".\"_verticapy_tmp_pokemon_dbadmin_41763_7947029521_\") \n", "VERTICAPY_SUBTABLE) AS y ON x.\"Second_Pokemon\" = y.\"ID\") \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE) \n", "VERTICAPY_SUBTABLE\n" ] } ], "source": [ "print(fights.current_relation())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "VerticaPy will remember your modifications and always generate an up-to-date SQL query.\n", "\n", "Let's look at the correlations between all the variables." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
"Sp_Atk_diff"
"Speed_diff"
"Sp_Def_diff"
"Defense_diff"
"HP_diff"
"Attack_diff"
"Winner"
"Sp_Atk_diff"1.00.4619430859128380.5314807226346120.2585411009169010.4291709331580310.3690502523546550.350263540845479
"Speed_diff"0.4619430859128381.00.2854009399588280.05206441796056860.2352423483159560.3716072163548170.737667958118482
"Sp_Def_diff"0.5314807226346120.2854009399588281.00.5287256988374210.439987736272430.2957872186278620.240803911855112
"Defense_diff"0.2585411009169010.05206441796056860.5287256988374211.00.3598954611981390.475134855396230.107501699533193
"HP_diff"0.4291709331580310.2352423483159560.439987736272430.3598954611981391.00.5132511517135970.231763909809698
"Attack_diff"0.3690502523546550.3716072163548170.2957872186278620.475134855396230.5132511517135971.00.361674114012681
"Winner"0.3502635408454790.7376679581184820.2408039118551120.1075016995331930.2317639098096980.3616741140126811.0
Rows: 1-7 | Columns: 8
" ], "text/plain": [ " \"Sp_Atk_diff\" \"Speed_diff\" \"Sp_Def_diff\" \\\\\n", "\"Sp_Atk_diff\" 1.0 0.461943085912838 0.531480722634612 \\\\\n", "\"Speed_diff\" 0.461943085912838 1.0 0.285400939958828 \\\\\n", "\"Sp_Def_diff\" 0.531480722634612 0.285400939958828 1.0 \\\\\n", "\"Defense_diff\" 0.258541100916901 0.0520644179605686 0.528725698837421 \\\\\n", "\"HP_diff\" 0.429170933158031 0.235242348315956 0.43998773627243 \\\\\n", "\"Attack_diff\" 0.369050252354655 0.371607216354817 0.295787218627862 \\\\\n", "\"Winner\" 0.350263540845479 0.737667958118482 0.240803911855112 \\\\\n", " \"Defense_diff\" \"HP_diff\" \"Attack_diff\" \\\\\n", "\"Sp_Atk_diff\" 0.258541100916901 0.429170933158031 0.369050252354655 \\\\\n", "\"Speed_diff\" 0.0520644179605686 0.235242348315956 0.371607216354817 \\\\\n", "\"Sp_Def_diff\" 0.528725698837421 0.43998773627243 0.295787218627862 \\\\\n", "\"Defense_diff\" 1.0 0.359895461198139 0.47513485539623 \\\\\n", "\"HP_diff\" 0.359895461198139 1.0 0.513251151713597 \\\\\n", "\"Attack_diff\" 0.47513485539623 0.513251151713597 1.0 \\\\\n", "\"Winner\" 0.107501699533193 0.231763909809698 0.361674114012681 \\\\\n", " \"Winner\" \n", "\"Sp_Atk_diff\" 0.350263540845479 \n", "\"Speed_diff\" 0.737667958118482 \n", "\"Sp_Def_diff\" 0.240803911855112 \n", "\"Defense_diff\" 0.107501699533193 \n", "\"HP_diff\" 0.231763909809698 \n", "\"Attack_diff\" 0.361674114012681 \n", "\"Winner\" 1.0 \n", "Rows: 1-7 | Columns: 8" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "fights.corr(method = \"spearman\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many variables are correlated to the response column. We have enough information to create our predictive model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Machine Learning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some really important features are categorical. Random forest can handle them. Besides, we need trees deep enough to compare all the different types." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f2f79b984e74447f83a5b6166a15ca29" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "
auc
prc_auc
accuracy
log_loss
precision
recall
f1_score
mcc
informedness
markedness
csi
time
1-fold0.99083298773428520.9896219161449040.52970118804752190.055518763606997600.0000.0-0.470298811952478140.04.846796751022339
2-fold0.99333991478889690.99277363744011240.52865707434052760.045626193903778100.0000.0-0.471342925659472440.04.647046804428101
3-fold0.9911872316429460.99028786481518560.5286452077828490.053957324804620600.0000.0-0.471354792217151040.04.96301794052124
avg0.99178671138870930.99089447280006740.52900115672363280.051700760771798770.00.00.00.00.0-0.47099884327636720.04.81895383199056
std0.00135672502316110220.00166111911558417830.00060627394354136650.0053183451146886760.00.00.00.00.00.00060627394354136650.00.15981508319353024
Rows: 1-5 | Columns: 13
" ], "text/plain": [ " auc prc_auc accuracy \\\\\n", "1-fold 0.9908329877342852 0.989621916144904 0.5297011880475219 \\\\\n", "2-fold 0.9933399147888969 0.9927736374401124 0.5286570743405276 \\\\\n", "3-fold 0.991187231642946 0.9902878648151856 0.528645207782849 \\\\\n", "avg 0.9917867113887093 0.9908944728000674 0.5290011567236328 \\\\\n", "std 0.0013567250231611022 0.0016611191155841783 0.0006062739435413665 \\\\\n", " log_loss precision recall f1_score \\\\\n", "1-fold 0.0555187636069976 0 0.0 0 \\\\\n", "2-fold 0.0456261939037781 0 0.0 0 \\\\\n", "3-fold 0.0539573248046206 0 0.0 0 \\\\\n", "avg 0.05170076077179877 0.0 0.0 0.0 \\\\\n", "std 0.005318345114688676 0.0 0.0 0.0 \\\\\n", " mcc informedness markedness csi \\\\\n", "1-fold 0 0.0 -0.47029881195247814 0.0 \\\\\n", "2-fold 0 0.0 -0.47134292565947244 0.0 \\\\\n", "3-fold 0 0.0 -0.47135479221715104 0.0 \\\\\n", "avg 0.0 0.0 -0.4709988432763672 0.0 \\\\\n", "std 0.0 0.0 0.0006062739435413665 0.0 \\\\\n", " time \n", "1-fold 4.846796751022339 \n", "2-fold 4.647046804428101 \n", "3-fold 4.96301794052124 \n", "avg 4.81895383199056 \n", "std 0.15981508319353024 \n", "Rows: 1-5 | Columns: 13" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from verticapy.learn.ensemble import RandomForestClassifier\n", "from verticapy.learn.model_selection import cross_validate\n", "\n", "predictors = fights.get_columns(exclude_columns = ['Winner'])\n", "model = RandomForestClassifier(\"rf_pokemon\", \n", " n_estimators = 50, \n", " max_depth = 100, \n", " max_leaf_nodes = 400, \n", " nbins = 100)\n", "cross_validate(model, fights, predictors, \"Winner\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have an excellent model with an average AUC of more than 99%. Let's create a model with the entire dataset and look at the importance of each feature." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
importance
sign
speed_diff79.831
attack_diff5.351
sp_atk_diff3.331
type_2_22.21
type_2_12.171
type_1_11.731
type_1_21.631
hp_diff1.571
sp_def_diff1.291
defense_diff0.91
Rows: 1-10 | Columns: 3
" ], "text/plain": [ " importance sign \n", "speed_diff 79.83 1 \n", "attack_diff 5.35 1 \n", "sp_atk_diff 3.33 1 \n", "type_2_2 2.2 1 \n", "type_2_1 2.17 1 \n", "type_1_1 1.73 1 \n", "type_1_2 1.63 1 \n", "hp_diff 1.57 1 \n", "sp_def_diff 1.29 1 \n", "defense_diff 0.9 1 \n", "Rows: 1-10 | Columns: 3" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.fit(fights, \n", " predictors, \n", " \"Winner\").features_importance()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Based on our model, it seems that a Pokemon's speed and attack stats are the strongest predictors for the winner of a battle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "We've solved our problem in a Pandas-like way, all without ever loading data into memory!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }