Type-wing Politics!: Discussing the Great Pokémon Debate
Hello everyone,
Its time for Round 2 of the greatest debate in Pokémon history, “Which of the Three Starters is the best”?
Do you remember our contenders?
We have:
- Charmander. The little lizard with the heat on it’s tail
- Squirtle. Who is cool but crude(Give him a break)
- Bulbasaur. The sentient cesear salad.
I our last post we examined the stats of the starters and figured out that bulbasuar has the highest stats in majority of the categories. We then looked at how these stats changed over the Pokémon’s evolutionary line and we saw that Charizard lead the charge with a huge gain in stat points.
In ranking I would give Bulbasaur first place. He starts off winning the highest amount of stats in most of the categories and ends only tied with Charizard Charmander would get second place, really winning because his final evolution Charizard gets a massive boost in stats. And in last place, would be Squirtle. He just never really leads in any way when it comes to stats. You could argue that hes the most balanced of the three starters and while that is true, being balanced rarely equates to be the best(or even being great…)
However, stats arent the only metrics we can use to examine what makes a good starter. Let’s look at Type Advantages and see how our starters compare.
Going Back to the Source
As I discussed in the first post, I got the idea to do a more in-depth analysis from two sources
- A communal debate at my go to bar.
- An article from Scientific American claiming to have scientifically determemined the best Kanto starter.
Here is the link to the article: https://blogs.scientificamerican.com/but-not-simpler/squirtle-i-should-choose-you-settling-a-great-pokemon-debate-with-science/
One of the issues with this article(and the point I discussed in my first post on this topic) was that it mostly ignores Pokémon stats.
The next issue I had was how it compares type advantage/disadvantage in order to reach it’s conclusion on which starter is best.
To summarize the paper’s approach and logic
- First comparing the type advantage/disadvantage of the starters and their evolutions against th Pokémon of gym leaders and elite four(videogame bosses).
- It creates a heatmap indicating weak,neutral, or strong,
- It concludes that squirtle has the most neutral matchups, therefore it is the better choice.
While this isn’t a terrible way to analysis this, I feel like it is misleading for a nmuber of reasons. First, it shortchanges the entire “Type Match-up interaction”. Second, while the author tends to focus on the first generation(Even admitting to have lost touch with the franchise at Pokemon X/Y) it ignores a whole plefora of data brought in by newer generations. And third, it just isnt nearly as comprensive as it should be to really contain decision making value.
What is the Type Match-up Interaction?
I want to apologize to anyone aware of how the Type Match-up Interaction works. I hope this post reaches people from all walks of life. In order for this analysis to be effective, I have to explain how some factors work as if it is your first time gaining this information. For some of your readers, this will be your first time seeing these factors and I want to make sure you are with us until the very end. For those of you more experienced in these factors I hope you can corroborate the information.
So if we were to boil any given Pokémon to its essentials, it would come down to a few objects:
- The Pokémon’s stat values(Attack, Special Attack, Defense, Special Defense, Speed, and HP)
- The Pokémon’s Type
- The Pokémon’s Move pool(The specific combat moves it can learn or aquire)
- The Pokémon’s Abilities(Something we will discuss way down the line)
Pokémon moves also contain a type.
There are 18 types in the current Pokémon format. Those types being:
Normal, Fire, Water, Electric, Grass, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost, Dragon, Dark, Steel, Fairy.
In combat, a Pokémon’s type and the move used agaisnt it maintain a Defense/ Attack relationship. Having the Pokémon’s type defend against the move’s types
This relationship has three basic outcomes:
- The defending Pokémon’s type is Weak to the move’s type resulting in additional damage dealt.
- The defending Pokémon’s type is Neutral to the move’s type resulting in standard damage dealt.
- The defending Pokémon’s type is Strong to the move’s type resulting in reduced damage dealt.
Some type relationships sometimes follow logic e.g, Fire moves are strong against Grass type pokemon, as in real life fire can burn plants Other relationships are based on existing mythologies, like fairy pokemon being weak to steel, as fairy creatures in many myths have an adverse interaction with iron and metal
Here is a chart summing up the relationships between how the types interact with one another:
OKAY, with all that said and done lets get to the data!!!
Remember: I used this dataset from Kaggle: https://www.kaggle.com/rounakbanik/pokemon
I made a subset of the data using the original Kanto starters.
My overall goal is to examine aspects of the starters in order to answer the question “Which starter is the best starter?”
# Load Packages
library(tidyverse)# This is R's #1 tool for data manipulation
library(RColorBrewer) # Used to have more control over the color palettes
library(ggthemes)
Our starters exhibit the following types:
- Bulbasaur has the dual typing of Grass and Poison, rather unique
- Squirtle has the typing of Water
- Charmander has the typing of Fire
I created a dataset which contained the type relationship between each starter and created this heatmap
p<- ggplot(data = TypeMatchupStarters, aes(y = Starter, x = Type,fill = Damage_Coefficient))+
geom_tile(color = "Black")+
coord_equal()+
labs(title = "Starters Defending Type Matchup",
x = "Attacking Types",
y = "Pokemon Starters")+
theme_fivethirtyeight()
p
p + scale_fill_gradientn(colours = hm.palette(100))+
Here we can already see some interesting things. Lets look at them individually:
Bulbasaur
- Weak to 4 types
- Strong to 5 types
- Neutral to 9 types
Squirtle
- Weak to 2 types
- Strong to 4 types
- Neutral to 12 types
Charmander
- Weak to 3 types
- Strong to 6 types
- Neutral to 9 types
This is a nice chunk of information but we can take our analysis a bit further
Pokémon Moves Dataset
Remember earlier how I said the relationship between type advantages/disadvantages was:
“Pokémon’s type defending against the attacking move type”. This means we need to start looking at Pokémon moves.
To get the data for the Pokémon’s moves I went to this website: https://pokemondb.net/move/all
I then used the package rvest to webscrape the data. While I wanted to include this process into the blog post, I decided it would be better not to overbloat this post and leave it out. If you guys are curious please send me an email and I will gladly supply you with this method.
After I scraped and cleaned the data, I had a dataset I could work with. If any of you are courious about the dataset it is on my Kaggle page: https://www.kaggle.com/supervegate/pokemon-moveset
# Load the dataset
# Check the dataset
head(All_Moves)
Which will give me a printout like:
# A tibble: 6 x 9
Name Type Category Effect Power Acc PP TM `Prob.(%)`
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 10,000,000 Volt Thunderbolt Electric Special Pikachu-exclusive Z-Move. 195 - 1 <NA> <NA>
2 Absorb Grass Special User recovers half the HP inflicted on oppone~ 20 100 25 <NA> -
3 Accelerock Rock Physical User attacks first. 40 100 20 <NA> <NA>
4 Acid Poison Special May lower opponent's Special Defense. 40 100 30 <NA> 10
5 Acid Armor Poison Status Sharply raises user's Defense. - - 20 <NA> -
6 Acid Downpour Poison Z-Move Poison type Z-Move. - - 1 <NA> <NA>
Because I have a more defined idea of how I am going to be using this dataset I am going to set into some light EDA. I will be asking myself two questions Q1. How many moves are in each type? Q2. How many moves are in each category?
Q1 How many moves are in each type?
move_types <- All_Moves %>%
count(Type)
move_types
Graphically expressed as
We can see here that majority of the moves available are of “normal” type, which is neutral to most Pokémon
Q2. How many moves are in each category? To explain breifly, Pokémon moves follow their own category, which interact with individual stats of the attacking and defending Pokémon.
- Moves of the physical category interact with the Attack and Defense stat scores
- Moves of the special category interact with the Special Attack and Special Defense stat scores
- Moves of the Status category usually don’t impose damage directly and have a wide range of effects
- Last, Z-moves which were introduced more recently, are type specific damaging moves.
# Q2. How are moves distributed by category?
move_cate <- All_Moves %>%
count(Category) %>%
mutate(Percentage = n / sum(n) * 100) %>%
mutate(Percentage_sig = sprintf("%0.2f", Percentage)) # Changes the significant figure up to two places
move_cate
# Lets make a basic plot to give us visual
ggplot(data = move_cate, aes(x = Category, y = Percentage, fill = Category)) +
geom_bar(stat = "identity")+
labs(x = "Move Category",
y = "Percentage of Occurance",
title = "Total Pokémon Moveset by Category")+
theme_hc()
You can see here, that I started calculating the counts by percentages instead of raw numbers.
Here we can see that by Category:
- Physical moves make up 38% of the movepool.
- Status makes up 35% of the movepool
- Special moves represent 25% of the movepool
- Z-moves represent 2% move pool
The Big Picture
Combinding our two objectives will get me to the final point I am trying to make.
Since Pokémon only take initial damage from Physical/Special/Z-moves lets removes Status and then lets do a count
Moves_NoStatus <- All_Moves %>%
filter(!Category == "Status") %>%
count(Type) %>%
mutate(Percentage = n / sum(n) * 100) %>%
mutate(Percentage_sig = sprintf("%0.2f", Percentage)) # Changes the significant figure up to two places
Moves_NoStatus
# A tibble: 18 x 4
Type n Percentage Percentage_sig
<chr> <int> <dbl> <chr>
1 Bug 20 4.22 4.22
2 Dark 24 5.06 5.06
3 Dragon 17 3.59 3.59
4 Electric 28 5.91 5.91
5 Fairy 13 2.74 2.74
6 Fighting 38 8.02 8.02
7 Fire 32 6.75 6.75
8 Flying 22 4.64 4.64
9 Ghost 19 4.01 4.01
10 Grass 26 5.49 5.49
11 Ground 21 4.43 4.43
12 Ice 21 4.43 4.43
13 Normal 89 18.8 18.78
14 Poison 16 3.38 3.38
15 Psychic 24 5.06 5.06
16 Rock 15 3.16 3.16
17 Steel 19 4.01 4.01
18 Water 30 6.33 6.33
Now we have the following items.
- The defending types of the starters
- How types interact with one another
- The percentage of move types.
Combinding theses items I was able to create this
# Next create a bar chart
ggplot(data = MatchupMovesStarters, aes(x = Type_Relationship, y = Percentage, fill = Type_Relationship))+
geom_bar(stat = "identity")+
facet_grid(. ~ Pokemon)+
labs(title = "Pokémon Starters Type Matchup",
subtitle = "The Typing Relationship Between the Original Pokémon starters and the Movepool",
x = "Typing Relationship",
y = "Move Total Percentage(%)")+
theme_economist_white()+
scale_fill_wsj("colors6")
Conclusion
Here we can see an interesting fact about the move types and their interaction with the Pokémon Starters In terms of the total amount of moves which can damage a Pokémon:
Bulbasaur
- Has the highest number of weak matchups
- Has beat Charmander(slightly) in neutral matchups
Charmander
- Has the highest number of strong matchups
Squirtle
- Has the highest number of neutral matchups
- Has the smallest number of Strong and Weak matchups
Since Bulbasaur has duel-typing it interacts with the type matchup in a more dynamic way. The duel-typing allows it to cast a wider influence on the match up which seems to have increased both its Strong and Weak match ups. As a result I think it loses in a general sense. In addition to losing the general fight, It seems like the moves Bulbasaur is weak to happen to be more popularily represented in the moveset as a whole.
Sorry my little green homie, but I think you lose this fight.
As for the winner, Squirtle gets the win in most general, or better put least hindering match ups. Charmander wins in most favorable match ups.
The true winner is up to you, but I would give this win to Squirtle.
Lets say each of our starters is getting relentlessly blasted by the metronome(Which has a random chance of being anymove in the entire moveset). Squirtle is going to be able to get hit by a majority of the moves without suffering from any type disadvantage.
I thought this was all together more conprehensive than the previous article. Thanks for reading, and thanks for being patient with me! Bye fellow Pokémon Masters!!