No se trata de una pauta para repetir sino diferentes ejemplos para daros ideas e inspiraros.
Se ha seleccionado un conjunto de datos del National Highway Traffic Safety Administration. El sistema de informes de análisis de mortalidad fue creado en los Estados Unidos por la National Highway Traffic Safety Administration para proporcionar una medida global de la seguridad en las carreteras. (Fuente Wikipedia). Los datos pertenecen al año 2020. Se trata de un conjunto de registros de accidentes que recogen datos significativos que los describen. Todos los accidentes tienen alguna víctima mortal como mínimo. El objetivo analítico que tenemos en mente es entender que hace que un accidente sea grave y que quiere decir que sea grave. https://www.nhtsa.gov/crash-data-systems/fatality-analysis-reporting-system
Queremos hacer una primera aproximación al conjunto de datos escogido y responder a las preguntas más básicas: ¿Cuánto registros tiene? ¿Cuántas variables? ¿De qué tipología son? ¿Cómo se distribuyen los valores de las variables? ¿Hay problemas con los datos, por ejemplo, campos vacíos? ¿Puedo intuir ya el valor analítico de los datos? ¿Qué primeras conclusiones puedo extraer?
El primer paso para realizar un análisis exploratorio es cargar el fichero de datos.
path = 'accident-1.CSV'
accidentData <- read.csv(path, row.names=NULL)
Verificamos la estructura del juego de datos principal. Vemos el número de columnas que tenemos y ejemplos de los contenidos de las filas.
structure = str(accidentData)
## 'data.frame': 35766 obs. of 81 variables:
## $ STATE : int 1 1 1 1 1 1 1 1 1 1 ...
## $ STATENAME : chr "Alabama" "Alabama" "Alabama" "Alabama" ...
## $ ST_CASE : int 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 ...
## $ VE_TOTAL : int 1 4 2 1 1 2 1 2 2 2 ...
## $ VE_FORMS : int 1 4 2 1 1 2 1 2 2 2 ...
## $ PVH_INVL : int 0 0 0 0 0 0 0 0 0 0 ...
## $ PEDS : int 0 0 0 0 0 0 1 0 0 0 ...
## $ PERSONS : int 4 6 2 5 1 3 1 2 4 3 ...
## $ PERMVIT : int 4 6 2 5 1 3 1 2 4 3 ...
## $ PERNOTMVIT : int 0 0 0 0 0 0 1 0 0 0 ...
## $ COUNTY : int 51 73 117 15 37 103 73 25 45 95 ...
## $ COUNTYNAME : chr "ELMORE (51)" "JEFFERSON (73)" "SHELBY (117)" "CALHOUN (15)" ...
## $ CITY : int 0 350 0 0 0 0 330 0 0 1500 ...
## $ CITYNAME : chr "NOT APPLICABLE" "BIRMINGHAM" "NOT APPLICABLE" "NOT APPLICABLE" ...
## $ DAY : int 1 2 2 3 4 4 7 8 9 10 ...
## $ DAYNAME : int 1 2 2 3 4 4 7 8 9 10 ...
## $ MONTH : int 1 1 1 1 1 1 1 1 1 1 ...
## $ MONTHNAME : chr "January" "January" "January" "January" ...
## $ YEAR : int 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
## $ DAY_WEEK : int 4 5 5 6 7 7 3 4 5 6 ...
## $ DAY_WEEKNAME: chr "Wednesday" "Thursday" "Thursday" "Friday" ...
## $ HOUR : int 2 17 14 15 0 16 19 7 20 10 ...
## $ HOURNAME : chr "2:00am-2:59am" "5:00pm-5:59pm" "2:00pm-2:59pm" "3:00pm-3:59pm" ...
## $ MINUTE : int 58 18 55 20 45 55 23 15 0 2 ...
## $ MINUTENAME : chr "58" "18" "55" "20" ...
## $ NHS : int 0 0 0 0 0 0 0 0 0 1 ...
## $ NHSNAME : chr "This section IS NOT on the NHS" "This section IS NOT on the NHS" "This section IS NOT on the NHS" "This section IS NOT on the NHS" ...
## $ ROUTE : int 4 6 3 4 4 3 4 4 4 2 ...
## $ ROUTENAME : chr "County Road" "Local Street - Municipality" "State Highway" "County Road" ...
## $ TWAY_ID : chr "cr-4" "martin luther king jr dr" "sr-76" "CR-ALEXANDRIA WELLINGTON RD" ...
## $ TWAY_ID2 : chr "" "" "us-280" "" ...
## $ RUR_URB : int 1 2 1 1 1 1 2 1 1 1 ...
## $ RUR_URBNAME : chr "Rural" "Urban" "Rural" "Rural" ...
## $ FUNC_SYS : int 5 4 4 7 5 4 4 5 5 3 ...
## $ FUNC_SYSNAME: chr "Major Collector" "Minor Arterial" "Minor Arterial" "Local" ...
## $ RD_OWNER : int 2 4 1 2 2 1 4 2 2 1 ...
## $ RD_OWNERNAME: chr "County Highway Agency" "City or Municipal Highway Agency" "State Highway Agency" "County Highway Agency" ...
## $ MILEPT : int 0 0 49 0 0 390 0 0 0 3019 ...
## $ MILEPTNAME : chr "None" "None" "49" "None" ...
## $ LATITUDE : num 32.4 33.5 33.3 33.8 32.8 ...
## $ LATITUDENAME: chr "32.43313333" "33.48465833" "33.29994167" "33.79507222" ...
## $ LONGITUD : num -86.1 -86.8 -86.4 -85.9 -86.1 ...
## $ LONGITUDNAME: chr "-86.09485" "-86.83954444" "-86.36964167" "-85.88348611" ...
## $ SP_JUR : int 0 0 0 0 0 0 0 0 0 0 ...
## $ SP_JURNAME : chr "No Special Jurisdiction" "No Special Jurisdiction" "No Special Jurisdiction" "No Special Jurisdiction" ...
## $ HARM_EV : int 42 12 34 42 42 12 8 12 12 12 ...
## $ HARM_EVNAME : chr "Tree (Standing Only)" "Motor Vehicle In-Transport" "Ditch" "Tree (Standing Only)" ...
## $ MAN_COLL : int 0 6 0 0 0 2 0 1 1 2 ...
## $ MAN_COLLNAME: chr "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" "Angle" "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" ...
## $ RELJCT1 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ RELJCT1NAME : chr "No" "No" "No" "No" ...
## $ RELJCT2 : int 1 1 3 1 1 1 3 1 8 1 ...
## $ RELJCT2NAME : chr "Non-Junction" "Non-Junction" "Intersection-Related" "Non-Junction" ...
## $ TYP_INT : int 1 1 3 1 1 1 2 1 1 1 ...
## $ TYP_INTNAME : chr "Not an Intersection" "Not an Intersection" "T-Intersection" "Not an Intersection" ...
## $ WRK_ZONE : int 0 0 0 0 0 0 0 0 0 0 ...
## $ WRK_ZONENAME: chr "None" "None" "None" "None" ...
## $ REL_ROAD : int 4 1 4 4 4 1 1 1 1 1 ...
## $ REL_ROADNAME: chr "On Roadside" "On Roadway" "On Roadside" "On Roadside" ...
## $ LGT_COND : int 2 3 1 1 2 2 3 1 2 1 ...
## $ LGT_CONDNAME: chr "Dark - Not Lighted" "Dark - Lighted" "Daylight" "Daylight" ...
## $ WEATHER : int 1 2 2 10 2 1 1 1 10 10 ...
## $ WEATHERNAME : chr "Clear" "Rain" "Rain" "Cloudy" ...
## $ SCH_BUS : int 0 0 0 0 0 0 0 0 0 0 ...
## $ SCH_BUSNAME : chr "No" "No" "No" "No" ...
## $ RAIL : chr "0000000" "0000000" "0000000" "0000000" ...
## $ RAILNAME : chr "Not Applicable" "Not Applicable" "Not Applicable" "Not Applicable" ...
## $ NOT_HOUR : int 99 17 14 99 0 17 19 7 20 10 ...
## $ NOT_HOURNAME: chr "Unknown" "5:00pm-5:59pm" "2:00pm-2:59pm" "Unknown" ...
## $ NOT_MIN : int 99 18 58 99 45 0 23 21 0 3 ...
## $ NOT_MINNAME : chr "Unknown" "18" "58" "Unknown" ...
## $ ARR_HOUR : int 3 17 15 99 0 17 19 7 20 10 ...
## $ ARR_HOURNAME: chr "3:00am-3:59am" "5:00pm-5:59pm" "3:00pm-3:59pm" "Unknown EMS Scene Arrival Hour" ...
## $ ARR_MIN : int 10 26 15 99 55 19 29 28 10 7 ...
## $ ARR_MINNAME : chr "10" "26" "15" "Unknown EMS Scene Arrival Minutes" ...
## $ HOSP_HR : int 99 99 99 99 88 18 88 88 99 10 ...
## $ HOSP_HRNAME : chr "Unknown" "Unknown" "Unknown" "Unknown" ...
## $ HOSP_MN : int 99 99 99 99 88 51 88 88 99 29 ...
## $ HOSP_MNNAME : chr "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" ...
## $ FATALS : int 3 1 1 1 1 1 1 1 1 1 ...
## $ DRUNK_DR : int 1 0 0 0 0 0 0 0 0 0 ...
Vemos que tenemos 81 variables y 35766 registros
Revisamos la descripción de las variables contenidas en el fichero y si los tipos de variables se corresponden con las que hemos cargado. Las organizamos lógicamente para darles sentido y construimos un pequeño diccionario de datos utilizando la documentación auxiliar.
HECHOS A ESTUDIAR
DIMENSIÓN GEOGRÁFICA
DIMENSIÓN TEMPORAL
DIMENSIÓN CONDICICIONES ACCIDENTE
DIMENSIÓN METEOROLOGIA
OTROS
DIMENSIÓN SERVICIO EMERGENCIAS
DIMENSIÓN FACTORES RELACIONADOS ACCIDENTE
El siguiente paso será la limpieza de datos, mirando si hay valores vacíos o nulos.
print('NA')
## [1] "NA"
colSums(is.na(accidentData))
## STATE STATENAME ST_CASE VE_TOTAL VE_FORMS PVH_INVL
## 0 0 0 0 0 0
## PEDS PERSONS PERMVIT PERNOTMVIT COUNTY COUNTYNAME
## 0 0 0 0 0 0
## CITY CITYNAME DAY DAYNAME MONTH MONTHNAME
## 0 0 0 0 0 0
## YEAR DAY_WEEK DAY_WEEKNAME HOUR HOURNAME MINUTE
## 0 0 0 0 0 0
## MINUTENAME NHS NHSNAME ROUTE ROUTENAME TWAY_ID
## 0 0 0 0 0 0
## TWAY_ID2 RUR_URB RUR_URBNAME FUNC_SYS FUNC_SYSNAME RD_OWNER
## 0 0 0 0 0 0
## RD_OWNERNAME MILEPT MILEPTNAME LATITUDE LATITUDENAME LONGITUD
## 0 0 0 0 0 0
## LONGITUDNAME SP_JUR SP_JURNAME HARM_EV HARM_EVNAME MAN_COLL
## 0 0 0 0 0 0
## MAN_COLLNAME RELJCT1 RELJCT1NAME RELJCT2 RELJCT2NAME TYP_INT
## 0 0 0 0 0 0
## TYP_INTNAME WRK_ZONE WRK_ZONENAME REL_ROAD REL_ROADNAME LGT_COND
## 0 0 0 0 0 0
## LGT_CONDNAME WEATHER WEATHERNAME SCH_BUS SCH_BUSNAME RAIL
## 0 0 0 0 0 0
## RAILNAME NOT_HOUR NOT_HOURNAME NOT_MIN NOT_MINNAME ARR_HOUR
## 0 0 0 0 0 0
## ARR_HOURNAME ARR_MIN ARR_MINNAME HOSP_HR HOSP_HRNAME HOSP_MN
## 0 0 0 0 0 0
## HOSP_MNNAME FATALS DRUNK_DR
## 0 0 0
print('Blancos')
## [1] "Blancos"
colSums(accidentData=="")
## STATE STATENAME ST_CASE VE_TOTAL VE_FORMS PVH_INVL
## 0 0 0 0 0 0
## PEDS PERSONS PERMVIT PERNOTMVIT COUNTY COUNTYNAME
## 0 0 0 0 0 0
## CITY CITYNAME DAY DAYNAME MONTH MONTHNAME
## 0 0 0 0 0 0
## YEAR DAY_WEEK DAY_WEEKNAME HOUR HOURNAME MINUTE
## 0 0 0 0 0 0
## MINUTENAME NHS NHSNAME ROUTE ROUTENAME TWAY_ID
## 0 0 0 0 0 0
## TWAY_ID2 RUR_URB RUR_URBNAME FUNC_SYS FUNC_SYSNAME RD_OWNER
## 26997 0 0 0 0 0
## RD_OWNERNAME MILEPT MILEPTNAME LATITUDE LATITUDENAME LONGITUD
## 0 0 0 0 0 0
## LONGITUDNAME SP_JUR SP_JURNAME HARM_EV HARM_EVNAME MAN_COLL
## 0 0 0 0 0 0
## MAN_COLLNAME RELJCT1 RELJCT1NAME RELJCT2 RELJCT2NAME TYP_INT
## 0 0 0 0 0 0
## TYP_INTNAME WRK_ZONE WRK_ZONENAME REL_ROAD REL_ROADNAME LGT_COND
## 0 0 0 0 0 0
## LGT_CONDNAME WEATHER WEATHERNAME SCH_BUS SCH_BUSNAME RAIL
## 0 0 0 0 0 0
## RAILNAME NOT_HOUR NOT_HOURNAME NOT_MIN NOT_MINNAME ARR_HOUR
## 0 0 0 0 0 0
## ARR_HOURNAME ARR_MIN ARR_MINNAME HOSP_HR HOSP_HRNAME HOSP_MN
## 0 0 0 0 0 0
## HOSP_MNNAME FATALS DRUNK_DR
## 0 0 0
Vemos que no hay valores nulos en los datos. También verificamos si existen campos llenos de espacios en blanco. En este caso sí encontramos el campo TWAY_ID2 con 26997 valores en blanco. Valoramos no hacer ninguna acción de eliminar registros puesto que este campo no lo utilizaremos.
Vamos a crear histogramas y describir los valores para ver los datos en general de estos atributos para hacer una primera aproximación a los datos:
if (!require('ggplot2')) install.packages('ggplot2'); library('ggplot2')
if(!require('Rmisc')) install.packages('Rmisc'); library('Rmisc')
if(!require('dplyr')) install.packages('dplyr'); library('dplyr')
if(!require('xfun')) install.packages('xfun'); library('xfun')
summary(accidentData[c("FATALS","DRUNK_DR")])
## FATALS DRUNK_DR
## Min. :1.000 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:0.0000
## Median :1.000 Median :0.0000
## Mean :1.085 Mean :0.2664
## 3rd Qu.:1.000 3rd Qu.:1.0000
## Max. :8.000 Max. :4.0000
histList<- list()
n = c("FATALS","DRUNK_DR")
accidentDataAux= accidentData %>% select(all_of(n))
for(y in 1:ncol(accidentDataAux)){
col <- names(accidentDataAux)[y]
ggp <- ggplot(accidentDataAux, aes_string(x = col)) +
geom_histogram(bins = 30, fill = "cornflowerblue", color = "black",ggtittle = "Contador de ocurrencias por variable")
histList[[y]] <- ggp # añadimos cada plot a la lista vacía
}
multiplot(plotlist = histList, coles = 1)
## [1] 1
Observaciones:
Número de muertes: Todos los accidentes recogidos en estos datos reportan una muerte como mínimo. Siendo el accidente más grave con ocho víctimas y vemos que la distribución se acumula de forma muy evidente en una muerte por accidente.
Conductores bebidos involucrados en el accidente: Analizaremos con más detalle este dato más adelante para derivar un nuevo dato: Accidentes donde el alcohol está presente o no. De entrada, la media es de 0.26% de accidentes donde interviene un conductor bebido. La franja de conductores bebidos por accidente va de un conductor como mínimo a cuatro como máximo.
summary(accidentData[c("VE_TOTAL","VE_FORMS","PVH_INVL")])
## VE_TOTAL VE_FORMS PVH_INVL
## Min. : 1.00 Min. : 1.000 Min. : 0.00000
## 1st Qu.: 1.00 1st Qu.: 1.000 1st Qu.: 0.00000
## Median : 1.00 Median : 1.000 Median : 0.00000
## Mean : 1.56 Mean : 1.517 Mean : 0.04269
## 3rd Qu.: 2.00 3rd Qu.: 2.000 3rd Qu.: 0.00000
## Max. :15.00 Max. :15.000 Max. :10.00000
#Crearemos una lista para mostrar los atributos que interesan.
histList<- list()
n = c("VE_TOTAL","VE_FORMS","PVH_INVL")
accidentDataAux= accidentData %>% select(all_of(n))
for(y in 1:ncol(accidentDataAux)){
col <- names(accidentDataAux)[y]
ggp <- ggplot(accidentDataAux, aes_string(x = col)) +
geom_histogram(bins = 30, fill = "cornflowerblue", color = "black")
histList[[y]] <- ggp # añadimos cada plot a la lista vacía
}
multiplot(plotlist = histList, coles = 1)
## [1] 1
Observaciones en cuanto a los vehículos implicados.
Número de vehículos implicados (VE_TOTAL) en total está en la franja de 1 hasta 59 siendo este el valor máximo y una media de 1.5. Número de vehículos en movimiento implicados (VE_FORMS), el valor más habitual es 1 con un valor máximo también de 59. Prevemos que hay un valor extremo que habrá que tratar para poder sacar más información de esta variable. Número de vehículos estacionados implicados (PVH_INVL): Por lo que respecta a esta variable lo habitual es que no haya vehículos estacionados en los incidentes recogidos en estos datos. Con todo aparecen casos aislados donde incluso había 10 coches estacionados.
summary(accidentData[c("PEDS","PERSONS","PERMVIT","PERNOTMVIT")])
## PEDS PERSONS PERMVIT PERNOTMVIT
## Min. :0.0000 Min. : 0.000 Min. : 0.000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.:0.0000
## Median :0.0000 Median : 2.000 Median : 2.000 Median :0.0000
## Mean :0.2285 Mean : 2.173 Mean : 2.163 Mean :0.2387
## 3rd Qu.:0.0000 3rd Qu.: 3.000 3rd Qu.: 3.000 3rd Qu.:0.0000
## Max. :8.0000 Max. :61.000 Max. :61.000 Max. :9.0000
#Crearemos una lista para mostrar los atributos que interesan.
histList<- list()
n = c("PEDS","PERSONS","PERMVIT","PERNOTMVIT")
accidentDataAux= accidentData %>% select(all_of(n))
for(y in 1:ncol(accidentDataAux)){
col <- names(accidentDataAux)[y]
ggp <- ggplot(accidentDataAux, aes_string(x = col)) +
geom_histogram(bins = 30, fill = "cornflowerblue", color = "black")
histList[[y]] <- ggp # añadimos cada plot a la lista vacía
}
multiplot(plotlist = histList, coles = 1)
## [1] 1
Observaciones en cuanto a las personas implicadas en un accidente.
El número de peatones implicados (PEDS) es muy bajo siendo coherente con el tipo de vía que se estudia y dónde no es habitual que haya gente andando. Con todo el valor como media de 0.22 y máximo de 8 obliga a investigar más este dato. (PERSONS) El número de ocupantes de vehículo implicados se sitúa como media en 2.1 (PERMVIT) El número conductores y ocupantes de vehículos en circulación implicados tiene un valor de media de 2.1. Estas dos variables recogen la misma información, pero la cuantifican de diferente manera. El accidente con el mayor número de ocupantes es de 61 personas. Por lo que respecta al número peatones, ciclistas, personas en vehículos aparcados y otros (PERNOTMVIT) vemos que aumenta un poco la media respecto a peatón puesto que entendemos que se incluyen más casos.
Vamos a profundizar un poco en el tema de la relación del alcohol en los conductores y el número de accidentes.
accidentData$alcohol <- ifelse(accidentData$DRUNK_DR %in% c(0), 0, 1)
counts <- table(accidentData$alcohol)
barplot(prop.table(counts),col=c("green","red"), main="Accidentes con conductor bebido", legend.texto=c("No Alcohol","Sí Alcohol"),xlab ="Presencia Alcohol", ylab = "Porcentaje",ylim=c(0,0.8) )
## Warning in plot.window(xlim, ylim, log = log, ...): "legend.texto" is not a
## graphical parameter
## Warning in axis(if (horiz) 2 else 1, at = at.l, labels = names.arg, lty =
## axis.lty, : "legend.texto" is not a graphical parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...):
## "legend.texto" is not a graphical parameter
## Warning in axis(if (horiz) 1 else 2, cex.axis = cex.axis, ...): "legend.texto"
## is not a graphical parameter
Vemos que porcentualmente, en la gran mayoría de accidentes, alrededor del 75% no hay presencia de alcohol en el conductor. Los conductores que dan positivo están alrededor de un 22%. Hemos buscado contrastar el dato con otros países y estarían en un valor central donde los valores extremos máximo por país superan el 50% y los mínimos están sobre el 10%
Observamos ahora como se distribuyen las muertes por accidente.
df1 <- accidentData %>%
group_by(accidentData$FATALS) %>%
dplyr::summarise(counts = n())
df1
## # A tibble: 8 × 2
## `accidentData$FATALS` counts
## <int> <int>
## 1 1 33226
## 2 2 2154
## 3 3 289
## 4 4 71
## 5 5 20
## 6 6 4
## 7 7 1
## 8 8 1
counts <- table(accidentData$FATALS)
barplot(prop.table(counts),col=("red"),ylim=c(0,0.99),main="Distribución de la mortalidad a los accidentes",xlab ="Número de muertos", ylab = "Porcentaje")
Vemos que la mayoría de los accidentes tienen como mínimo un muerto. Vamos ahora a relacionar mortalidad y alcohol.
counts <- table(accidentData$alcohol, accidentData$FATALS)
colors <- c("green", "red")
barplot(prop.table(counts), beside = TRUE, col = colors,
ylim = c(0, 1), axes = TRUE,
xlab = "Número de muertos",
ylab = "Porcentaje",
main = "Accidentes por muertes y conductores positivos en alcohol",
legend = c("No Alcohol", "Alcohol"),
fill = colors)
## Warning in plot.window(xlim, ylim, log = log, ...): "fill" is not a graphical
## parameter
## Warning in axis(if (horiz) 2 else 1, at = at.l, labels = names.arg, lty =
## axis.lty, : "fill" is not a graphical parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...): "fill"
## is not a graphical parameter
## Warning in axis(if (horiz) 1 else 2, cex.axis = cex.axis, ...): "fill" is not a
## graphical parameter
Probaremos ahora si hay relación entre el estado donde ha pasado el accidente y el número de conductores bebidos. Filtramos los cinco estados donde hay más accidentes.
accidentDataST5=subset(accidentData, accidentData$STATENAME == "California" | accidentData$STATENAME == "Texas" | accidentData$STATENAME == "Florida" | accidentData$STATENAME == "Georgia" | accidentData$STATENAME == "North Carolina")
files=dim(accidentDataST5)[1]
ggplot(data=accidentDataST5[1:files,],aes(x=DRUNK_DR,fill=STATENAME))+geom_bar()+ggtitle("Relación entre conductor bebido y Estado")+labs(x="Número de conductores bebidos implicados")
Como reflexión este gráfico tiene que pasar por el filtro de percentuar el número de accidentes por estado y la población del estado para no sacar conclusiones apresuradas.
Veamos ahora como en un mismo gráfico de frecuencias podemos trabajar con 3 variables: FATALS, STATENAME y WEATHERNAME.
ggplot(data = accidentDataST5[1:files,],aes(x=FATALS,fill=STATENAME))+geom_bar(position="fill")+facet_wrap(~WEATHERNAME)+ggtitle("Número de muertes en accidente por Estado y clima")+labs(x="Número de muertes")
Esta gráfica está bien como mecánica de construcción, pero los resultados los ponemos en entredicho. Está bien como paso inicial, pero hay que profundizar mucho más.
Vamos a buscar las correlaciones en función de las muertes y unas variables elegidas que creemos que pueden ayudar a explicar el aumento de muertes por accidente:
DRUNK_DR conductores bebidos VE_TOTAL número de vehículos implicados en total VE_FORMS número de vehículos en movimiento implicados PVH_INVL número de vehículos estacionados implicados PEDS número de peatón implicados PERSONS número de ocupante de vehículo implicados PERMVIT número conductores y ocupantes implicados PERNOTMVIT número peatones, ciclistas… Cualquier cosa menos vehículo motorizado
# Utilizamos esta librería para usar la funcio multiplot()
if(!require('Rmisc')) install.packages('Rmisc'); library('Rmisc')
n = c("DRUNK_DR","VE_TOTAL","VE_FORMS","PVH_INVL","PEDS","PERSONS","PERMVIT","PERNOTMVIT")
accidentDataAux= accidentData %>% select(all_of(n))
histList2<- vector('list', ncol(accidentDataAux))
for(i in seq_along(accidentDataAux)){
message(i)
histList2[[i]]<-local({
i<-i
col <-log(accidentDataAux[[i]])
ggp<- ggplot(data = accidentDataAux, aes(x = accidentData$FATALS, y=col)) +
geom_point(color = "gray30") + geom_smooth(method = lm,color = "firebrick") +
theme_bw() + xlab("Muertes") + ylab(names(accidentDataAux)[i])
})
}
multiplot(plotlist = histList2, cols = 3)
Podemos ver que:
De forma general cualquier aumento en las variables elegidas implica un aumento de las muertes en el accidente.
El factor que hace aumentar más el número de víctimas son las variables relacionadas con los peatones y pasajeros de los coches involucrados en el accidente.
Utilizamos las columnas que nos interesa para hacer la matriz y la visualizaremos utilizando la función corrplot.
# https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
if(!require("corrplot")) install.packages("corrplot"); library("corrplot")
n = c("FATALS","DRUNK_DR","VE_TOTAL","VE_FORMS","PVH_INVL","PEDS","PERSONS","PERMVIT","PERNOTMVIT")
factores= accidentData %>% select(all_of(n))
res<-cor(factores)
corrplot(res,method="color",tl.col="black", tl.srt=30, order = "AOE",
number.cex=0.75,sig.level = 0.01, addCoef.col = "black")
No vemos que haya una correlación negativa significativa entre dos variables y sí una muy buena correlación ya previsible entre los peatones implicados y personas involucradas en el accidente que no van en coche (PEDS y PERNOTMVIT) Lo mismo podemos observar en cuanto al número de conductores y ocupantes implicados (PERMVIT) y el número de vehículos implicados en movimiento (VE_FORMS) o el total de vehículos (VE_TOTAL).
Vamos a probar si hay una correlación entre personas implicadas en el accidente y el número de muertes.
if (!require('tidyverse')) install.packages('tidyverse'); library('tidyverse')
## Loading required package: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange() masks plyr::arrange()
## ✖ purrr::compact() masks plyr::compact()
## ✖ dplyr::count() masks plyr::count()
## ✖ dplyr::desc() masks plyr::desc()
## ✖ dplyr::failwith() masks plyr::failwith()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::id() masks plyr::id()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::mutate() masks plyr::mutate()
## ✖ dplyr::rename() masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
cor.test(x = accidentData$PERSONS, y = accidentData$FATALS, method = "kendall")
##
## Kendall's rank correlation tau
##
## data: accidentData$PERSONS and accidentData$FATALS
## z = 53.008, p-value < 2.2e-16
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.2558174
ggplot(data = accidentData, aes(x = PERSONS, y = log(FATALS))) + geom_point(color = "gray30") + geom_smooth(color = "firebrick") + theme_bw() +ggtitle("Correlación entre personas implicadas en el accidente y número de muertes")
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
De la observación de este gráfico podemos concluir que efectivamente el número de muertes aumenta en función de las personas implicadas en un accidente pero que la correlación no es tan elevada ni continúa como se podía prever.
Si dos variables están altamente correlacionadas obviamente darán casi exactamente la misma información en un modelo de regresión, por ejemplo. Pero, al incluir las dos variables, en realidad estamos debilitando el modelo. No estamos añadiendo información incremental. En lugar de esto, estamos haciendo un modelo ruidoso. No es una buena idea.
Cómo hemos visto antes tenemos una correlación muy grande entre PEDS y PERNOTMVIT, por lo tanto, podríamos eliminar la columna de peatones (PEDS) y dejar el total de peatones y otros reflejado a PERNOTMVIT.
# accidentData$PEDS<- NULL
str(accidentData)
## 'data.frame': 35766 obs. of 82 variables:
## $ STATE : int 1 1 1 1 1 1 1 1 1 1 ...
## $ STATENAME : chr "Alabama" "Alabama" "Alabama" "Alabama" ...
## $ ST_CASE : int 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 ...
## $ VE_TOTAL : int 1 4 2 1 1 2 1 2 2 2 ...
## $ VE_FORMS : int 1 4 2 1 1 2 1 2 2 2 ...
## $ PVH_INVL : int 0 0 0 0 0 0 0 0 0 0 ...
## $ PEDS : int 0 0 0 0 0 0 1 0 0 0 ...
## $ PERSONS : int 4 6 2 5 1 3 1 2 4 3 ...
## $ PERMVIT : int 4 6 2 5 1 3 1 2 4 3 ...
## $ PERNOTMVIT : int 0 0 0 0 0 0 1 0 0 0 ...
## $ COUNTY : int 51 73 117 15 37 103 73 25 45 95 ...
## $ COUNTYNAME : chr "ELMORE (51)" "JEFFERSON (73)" "SHELBY (117)" "CALHOUN (15)" ...
## $ CITY : int 0 350 0 0 0 0 330 0 0 1500 ...
## $ CITYNAME : chr "NOT APPLICABLE" "BIRMINGHAM" "NOT APPLICABLE" "NOT APPLICABLE" ...
## $ DAY : int 1 2 2 3 4 4 7 8 9 10 ...
## $ DAYNAME : int 1 2 2 3 4 4 7 8 9 10 ...
## $ MONTH : int 1 1 1 1 1 1 1 1 1 1 ...
## $ MONTHNAME : chr "January" "January" "January" "January" ...
## $ YEAR : int 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
## $ DAY_WEEK : int 4 5 5 6 7 7 3 4 5 6 ...
## $ DAY_WEEKNAME: chr "Wednesday" "Thursday" "Thursday" "Friday" ...
## $ HOUR : int 2 17 14 15 0 16 19 7 20 10 ...
## $ HOURNAME : chr "2:00am-2:59am" "5:00pm-5:59pm" "2:00pm-2:59pm" "3:00pm-3:59pm" ...
## $ MINUTE : int 58 18 55 20 45 55 23 15 0 2 ...
## $ MINUTENAME : chr "58" "18" "55" "20" ...
## $ NHS : int 0 0 0 0 0 0 0 0 0 1 ...
## $ NHSNAME : chr "This section IS NOT on the NHS" "This section IS NOT on the NHS" "This section IS NOT on the NHS" "This section IS NOT on the NHS" ...
## $ ROUTE : int 4 6 3 4 4 3 4 4 4 2 ...
## $ ROUTENAME : chr "County Road" "Local Street - Municipality" "State Highway" "County Road" ...
## $ TWAY_ID : chr "cr-4" "martin luther king jr dr" "sr-76" "CR-ALEXANDRIA WELLINGTON RD" ...
## $ TWAY_ID2 : chr "" "" "us-280" "" ...
## $ RUR_URB : int 1 2 1 1 1 1 2 1 1 1 ...
## $ RUR_URBNAME : chr "Rural" "Urban" "Rural" "Rural" ...
## $ FUNC_SYS : int 5 4 4 7 5 4 4 5 5 3 ...
## $ FUNC_SYSNAME: chr "Major Collector" "Minor Arterial" "Minor Arterial" "Local" ...
## $ RD_OWNER : int 2 4 1 2 2 1 4 2 2 1 ...
## $ RD_OWNERNAME: chr "County Highway Agency" "City or Municipal Highway Agency" "State Highway Agency" "County Highway Agency" ...
## $ MILEPT : int 0 0 49 0 0 390 0 0 0 3019 ...
## $ MILEPTNAME : chr "None" "None" "49" "None" ...
## $ LATITUDE : num 32.4 33.5 33.3 33.8 32.8 ...
## $ LATITUDENAME: chr "32.43313333" "33.48465833" "33.29994167" "33.79507222" ...
## $ LONGITUD : num -86.1 -86.8 -86.4 -85.9 -86.1 ...
## $ LONGITUDNAME: chr "-86.09485" "-86.83954444" "-86.36964167" "-85.88348611" ...
## $ SP_JUR : int 0 0 0 0 0 0 0 0 0 0 ...
## $ SP_JURNAME : chr "No Special Jurisdiction" "No Special Jurisdiction" "No Special Jurisdiction" "No Special Jurisdiction" ...
## $ HARM_EV : int 42 12 34 42 42 12 8 12 12 12 ...
## $ HARM_EVNAME : chr "Tree (Standing Only)" "Motor Vehicle In-Transport" "Ditch" "Tree (Standing Only)" ...
## $ MAN_COLL : int 0 6 0 0 0 2 0 1 1 2 ...
## $ MAN_COLLNAME: chr "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" "Angle" "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" "The First Harmful Event was Not a Collision with a Motor Vehicle in Transport" ...
## $ RELJCT1 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ RELJCT1NAME : chr "No" "No" "No" "No" ...
## $ RELJCT2 : int 1 1 3 1 1 1 3 1 8 1 ...
## $ RELJCT2NAME : chr "Non-Junction" "Non-Junction" "Intersection-Related" "Non-Junction" ...
## $ TYP_INT : int 1 1 3 1 1 1 2 1 1 1 ...
## $ TYP_INTNAME : chr "Not an Intersection" "Not an Intersection" "T-Intersection" "Not an Intersection" ...
## $ WRK_ZONE : int 0 0 0 0 0 0 0 0 0 0 ...
## $ WRK_ZONENAME: chr "None" "None" "None" "None" ...
## $ REL_ROAD : int 4 1 4 4 4 1 1 1 1 1 ...
## $ REL_ROADNAME: chr "On Roadside" "On Roadway" "On Roadside" "On Roadside" ...
## $ LGT_COND : int 2 3 1 1 2 2 3 1 2 1 ...
## $ LGT_CONDNAME: chr "Dark - Not Lighted" "Dark - Lighted" "Daylight" "Daylight" ...
## $ WEATHER : int 1 2 2 10 2 1 1 1 10 10 ...
## $ WEATHERNAME : chr "Clear" "Rain" "Rain" "Cloudy" ...
## $ SCH_BUS : int 0 0 0 0 0 0 0 0 0 0 ...
## $ SCH_BUSNAME : chr "No" "No" "No" "No" ...
## $ RAIL : chr "0000000" "0000000" "0000000" "0000000" ...
## $ RAILNAME : chr "Not Applicable" "Not Applicable" "Not Applicable" "Not Applicable" ...
## $ NOT_HOUR : int 99 17 14 99 0 17 19 7 20 10 ...
## $ NOT_HOURNAME: chr "Unknown" "5:00pm-5:59pm" "2:00pm-2:59pm" "Unknown" ...
## $ NOT_MIN : int 99 18 58 99 45 0 23 21 0 3 ...
## $ NOT_MINNAME : chr "Unknown" "18" "58" "Unknown" ...
## $ ARR_HOUR : int 3 17 15 99 0 17 19 7 20 10 ...
## $ ARR_HOURNAME: chr "3:00am-3:59am" "5:00pm-5:59pm" "3:00pm-3:59pm" "Unknown EMS Scene Arrival Hour" ...
## $ ARR_MIN : int 10 26 15 99 55 19 29 28 10 7 ...
## $ ARR_MINNAME : chr "10" "26" "15" "Unknown EMS Scene Arrival Minutes" ...
## $ HOSP_HR : int 99 99 99 99 88 18 88 88 99 10 ...
## $ HOSP_HRNAME : chr "Unknown" "Unknown" "Unknown" "Unknown" ...
## $ HOSP_MN : int 99 99 99 99 88 51 88 88 99 29 ...
## $ HOSP_MNNAME : chr "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" "Unknown EMS Hospital Arrival Time" ...
## $ FATALS : int 3 1 1 1 1 1 1 1 1 1 ...
## $ DRUNK_DR : int 1 0 0 0 0 0 0 0 0 0 ...
## $ alcohol : num 1 0 0 0 0 0 0 0 0 0 ...
Seguidamente vayamos a asignar un 1 por accidentes que se producen de madrugada (01h a 06h en invierno) y un 0 para el resto de franja horaria, es decir, vamos a categorizar la variable HOUR y así tendremos una variable numérica que nos permitirá trabajar mejor en el futuro. La denominaremos madrugada. Después la utilizaremos para ver cómo se distribuyen los accidentes en las dos franjas horarias. Debemos tener en cuenta que la hora incluye el código 99 qué quiere decir que la hora no está informada. Miraremos de filtrar los registros con este valor para excluirlos.
accidentDataAux=subset(accidentData, accidentData$HOUR <= 24)
accidentData$madrugada <- NA
accidentData$madrugada[accidentDataAux$HOUR >=1 & accidentDataAux$HOUR <= 6] <- 1
accidentData$madrugada[accidentDataAux$HOUR ==0 | accidentDataAux$HOUR >6 ] <- 0
counts <- table(accidentData$madrugada)
barplot(prop.table(counts),col=c("green","red"),legend.texto=c("Resto del día","Madrugada"),ylim=c(0,1), main="Distribución de accidentes la madrugada y resto del día",xlab="0 Resto del día 1 Madrugada",ylab="Porcentaje" )
## Warning in plot.window(xlim, ylim, log = log, ...): "legend.texto" is not a
## graphical parameter
## Warning in axis(if (horiz) 2 else 1, at = at.l, labels = names.arg, lty =
## axis.lty, : "legend.texto" is not a graphical parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...):
## "legend.texto" is not a graphical parameter
## Warning in axis(if (horiz) 1 else 2, cex.axis = cex.axis, ...): "legend.texto"
## is not a graphical parameter
Ahora añadiremos un campo nuevo a los datos. Este campo contendrá el valor de la hora del accidente discretizada con un método simple de intervalos de igual amplitud.
summary(accidentDataAux[,"HOUR"])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 7.00 15.00 13.19 19.00 23.00
Discretizamos con intervalos. Los criterios de corte están cogidos de la Web del Parlamento de Cataluña.
accidentDataAux["segmento_horario"] <- cut(accidentDataAux$HOUR, breaks = c(0,4,11,14,18,22), labels = c("Madrugada", "Mañana", "Mediodía", "Anochecer","Noche"))
Observamos los datos discretizados y construimos un gráfico para analizar cómo se agrupan los accidentes.
head(accidentDataAux$segmento_horario)
## [1] Madrugada Anochecer Mediodía Anochecer <NA> Anochecer
## Levels: Madrugada Mañana Mediodía Anochecer Noche
plot(accidentDataAux$segmento_horario,main="Número de accidentes por segmento horario",xlab="Segmento horario", ylab="Cantidad",col = "ivory")
Ahora vamos a discretizar la variable que contiene el número de vehículos implicados en un accidente (VE_TOTALS) puesto que era una de las variables en que las distancias entre sus valores eran muy grandes:
# Utilizaremos la función discretize de arules: This function implements several basic unsupervised methods to convert a continuous variable into a categorical variable (factor) using different binning strategies.
# https://cran.r-project.org/web/packages/arules/index.html
if (!require('arules')) install.packages('arules'); library('arules')
## Loading required package: arules
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
##
## Attaching package: 'arules'
## The following object is masked from 'package:dplyr':
##
## recode
## The following objects are masked from 'package:base':
##
## abbreviate, write
set.seed(2)
table(discretize(accidentData$VE_TOTAL, "cluster" ))
##
## [1,1.57) [1.57,3.38) [3.38,15]
## 19972 14972 822
hist(accidentData$VE_TOTAL, main="Número de accidentes por vehículos implicados con kmeans",xlab="Vehículos implicados", ylab="Cantidad",col = "ivory")
abline(v=discretize(accidentData$VE_TOTAL, method="cluster", onlycuts=TRUE),col="red")
Podemos observar que sin pasar ningún argumento y permitiendo que el algoritmo elija el conjunto de particiones se muestran tres clústeres que agrupan los vehículos implicados en las franjas mencionadas. Podemos asignar el propio clúster como una variable más al dataset para trabajar después.
accidentData$VE_TOTAL_KM<- (discretize(accidentData$VE_TOTAL, "cluster" ))
head(accidentData$VE_TOTAL_KM)
## [1] [1,1.5) [2.73,15] [1.5,2.73) [1,1.5) [1,1.5) [1.5,2.73)
## Levels: [1,1.5) [1.5,2.73) [2.73,15]
Ahora normalizaremos el número de muertes por el máximo añadiendo un nuevo campo a los datos que contendrá el valor.
accidentData$FATALS_NM<- (accidentData$FATALS/max(accidentData[,"FATALS"]))
head(accidentData$FATALS_NM)
## [1] 0.375 0.125 0.125 0.125 0.125 0.125
Supongamos que queremos normalizar por la diferencia para ubicar entre 0 y 1 la variable del número de muertes del accidente dado que el algoritmo de minería que utilizaremos así lo requiere. Observamos la distribución de la variable original y las generadas.
accidentData$FATALS_ND = (accidentData$FATALS-min(accidentData$FATALS))/(max(accidentData$FATALS)-min(accidentData$FATALS))
max(accidentData$FATALS)
## [1] 8
min(accidentData$FATALS)
## [1] 1
hist(accidentData$FATALS,xlab="Muertos", col="ivory",ylab="Cantidad", main="Número de muertes en accidente")
hist(accidentData$FATALS_NM,xlab="Muertos",ylab="Cantidad",col="ivory", main="Muertos normalizado por el máximo")
hist(accidentData$FATALS_ND,xlab="Muertos",ylab="Cantidad", col="ivory", main="Muertos normalizado por la diferencia")
A continuación, vamos a normalizar las otras columnas para asegurarnos que cada variable contribuye por igual en nuestro análisis.
# Definimos la función de normalización
nor <-function(x) { (x -min(x))/(max(x)-min(x))}
# Guardamos un nuevo dataset normalizado
accidentData$type<- NULL
n = c("FATALS","DRUNK_DR","VE_TOTAL","VE_FORMS","PVH_INVL","PEDS","PERSONS","PERMVIT","PERNOTMVIT")
accidentData<- accidentData %>% select(all_of(n))
accidentData_nor <- as.data.frame(lapply(accidentData, nor))
head(accidentData_nor)
## FATALS DRUNK_DR VE_TOTAL VE_FORMS PVH_INVL PEDS PERSONS PERMVIT
## 1 0.2857143 0.25 0.00000000 0.00000000 0 0 0.06557377 0.06557377
## 2 0.0000000 0.00 0.21428571 0.21428571 0 0 0.09836066 0.09836066
## 3 0.0000000 0.00 0.07142857 0.07142857 0 0 0.03278689 0.03278689
## 4 0.0000000 0.00 0.00000000 0.00000000 0 0 0.08196721 0.08196721
## 5 0.0000000 0.00 0.00000000 0.00000000 0 0 0.01639344 0.01639344
## 6 0.0000000 0.00 0.07142857 0.07142857 0 0 0.04918033 0.04918033
## PERNOTMVIT
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
Tanto el análisis de componentes principales, principal componente analysis (PCA) en inglés, como la descomposición de valores singulares, singular value decomposition (SVD) en inglés, son técnicas que nos permitan trabajar con nuevas características llamadas componentes, que ciertamente son independientes entre sí. En realidad, estas dos técnicas nos permiten representar el juego de datos en un nuevo sistema de coordenadas que denominamos componentes principales. Este sistema está mejor adaptado a la distribución del juego de datos, de forma que recoge mejor su variabilidad.
Aplicamos el análisis de componentes principales al dataset. Empezamos ejecutando la función prcomp().
pca.acc <- prcomp(accidentData_nor)
summary(pca.acc)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 0.1168 0.08755 0.0690 0.0484 0.03269 0.02437 0.01072
## Proportion of Variance 0.4520 0.25389 0.1577 0.0776 0.03539 0.01967 0.00381
## Cumulative Proportion 0.4520 0.70584 0.8635 0.9411 0.97652 0.99619 1.00000
## PC8 PC9
## Standard deviation 5.213e-15 2.159e-15
## Proportion of Variance 0.000e+00 0.000e+00
## Cumulative Proportion 1.000e+00 1.000e+00
Como se puede observar la función summary, nos devuelve la proporción de varianza aplicada al conjunto total de cada atributo. Gracias a esto, el atributo 1 explica el 0.452 de variabilidad del total de datos; en cambio, el atributo 7 explica solo el 0.000381.
A continuación, se muestra un histograma para ver el peso de cada atributo sobre el conjunto total de datos:
if (!require('factoextra')) install.packages('factoextra'); library('factoextra')
## Loading required package: factoextra
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
#Los valores propios corresponden a la cantidad de variación explicada por cada componente principal (PC).
ev= get_eig(pca.acc)
ev
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 1.364366e-02 4.519469e+01 45.19469
## Dim.2 7.664656e-03 2.538921e+01 70.58391
## Dim.3 4.760727e-03 1.576993e+01 86.35384
## Dim.4 2.342530e-03 7.759642e+00 94.11348
## Dim.5 1.068327e-03 3.538839e+00 97.65232
## Dim.6 5.937915e-04 1.966938e+00 99.61926
## Dim.7 1.149407e-04 3.807416e-01 100.00000
## Dim.8 2.717197e-29 9.000729e-26 100.00000
## Dim.9 4.659472e-30 1.543453e-26 100.00000
fviz_eig(pca.acc)
En este ejercicio se decidió utilizar el método de Káiser para decidir cuales de las variables obtenidas serán escogidas. Este criterio mantendrá todas aquellas variables cuya varianza sea superior a 1.
# Calculamos la varianza de los componentes principales a partir de la desviación estándar
var_acc <- pca.acc$sdev^2
var_acc
## [1] 1.364366e-02 7.664656e-03 4.760727e-03 2.342530e-03 1.068327e-03
## [6] 5.937915e-04 1.149407e-04 2.717197e-29 4.659472e-30
Con los resultados obtenidos es muy complicado decidir cuáles son los componentes principales componentes a escoger. Este hecho podría estar causado por no haber escalado los datos previamente. Por lo tanto, el siguiente paso es escalar los datos y volver a calcular la varianza para ver qué datos selecciona.
# Escalamos los datos
acc_scale <- scale(accidentData_nor)
# Calculamos las componentes principales
pca.acc_scale <- prcomp(acc_scale)
# Mostramos la varianza de dichas variables:
var_acc_scale <- pca.acc_scale$sdev^2
head(var_acc_scale)
## [1] 3.5632826 1.8581532 1.1186798 1.0185157 0.8423082 0.5603141
Después de analizar la varianza y aplicando el criterio de Káiser nos quedaremos con los componentes principales 1,2,3 y 4 que son los superiores a 1. Este criterio tiene el problema de sobreestimar el número de factores, pero a pesar de ello es el que aplicaremos para analizar los resultados.
Mostramos el histograma de porcentaje de varianza explicado con los datos escalados:
fviz_eig(pca.acc_scale)
ev = get_eig(pca.acc_scale)
ev
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 3.563283e+00 3.959203e+01 39.59203
## Dim.2 1.858153e+00 2.064615e+01 60.23817
## Dim.3 1.118680e+00 1.242978e+01 72.66795
## Dim.4 1.018516e+00 1.131684e+01 83.98479
## Dim.5 8.423082e-01 9.358980e+00 93.34377
## Dim.6 5.603141e-01 6.225712e+00 99.56948
## Dim.7 3.874645e-02 4.305161e-01 100.00000
## Dim.8 4.353003e-26 4.836670e-25 100.00000
## Dim.9 2.164538e-26 2.405042e-25 100.00000
Los valores propios se pueden utilizar para determinar el número de componentes principales a retener después de la PCA (Kaiser 1961):
Un valor propio > 1 indica que los PCs representan más varianza de la que representa una de las variables originales de los datos estandarizados. Esto se utiliza habitualmente como punto de corte para el cual se conservan los PCs. Esto solo es cierto cuando los datos están estandarizados.
También podemos limitar el número de componentes a este número que representa una determinada fracción de la varianza total. Por ejemplo, si estamos satisfecho con el 80% de la varianza total explicada, usamos el número de componentes para conseguirlo que son los 4 componentes principales vistos antes.
Continuamos con el análisis de los componentes principales. Después de aplicar el método Káiser se han seleccionado los 4 componentes principales.
var <- get_pca_var(pca.acc_scale)
var
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
Los componentes de get_pca_var() se pueden utilizar en el diagrama de variables de la siguiente manera:
#Utilizamos los 4 componentes principales encontrados antes
head(var$coord[,1:4],11)
## Dim.1 Dim.2 Dim.3 Dim.4
## FATALS -0.30725642 0.07606945 0.28817514 -0.73967833
## DRUNK_DR -0.04921565 -0.38170799 -0.26454706 -0.58497489
## VE_TOTAL -0.83708697 0.28706095 -0.34390477 0.13727724
## VE_FORMS -0.86483356 0.18416941 -0.02398033 0.21866655
## PVH_INVL -0.06062570 0.30358100 -0.85844575 -0.18336810
## PEDS 0.48249027 0.82661079 0.13673775 -0.08353380
## PERSONS -0.88514448 0.21755791 0.19732665 -0.07582156
## PERMVIT -0.88736748 0.19749105 0.22352113 -0.06716534
## PERNOTMVIT 0.45872440 0.85355861 0.04773257 -0.10804664
La calidad de representación de las variables en el mapa de factores se denomina cos2 (coseno cuadrado, coordenadas cuadradas). Podemos acceder al cos2 de la siguiente manera:
head(var$cos2[,1:4],11)
## Dim.1 Dim.2 Dim.3 Dim.4
## FATALS 0.094406509 0.005786562 0.083044911 0.547124037
## DRUNK_DR 0.002422180 0.145700988 0.069985146 0.342195618
## VE_TOTAL 0.700714591 0.082403990 0.118270488 0.018845040
## VE_FORMS 0.747937080 0.033918370 0.000575056 0.047815060
## PVH_INVL 0.003675475 0.092161422 0.736929104 0.033623861
## PEDS 0.232796860 0.683285394 0.018697211 0.006977896
## PERSONS 0.783480750 0.047331446 0.038937806 0.005748910
## PERMVIT 0.787421038 0.039002717 0.049961697 0.004511183
## PERNOTMVIT 0.210428078 0.728562294 0.002278398 0.011674076
corrplot(var$cos2[,1:4], is.corre=FALSE)
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "is.corre" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "is.corre" is not a graphical parameter
## Warning in title(title, ...): "is.corre" is not a graphical parameter
También es posible crear un diagrama de barras de variables cos2 mediante la función fviz_cos2():
fviz_cos2(pca.acc_scale, choice = "var", axes = 1:2)
Un cos2 elevado indica una buena representación de la variable en el componente principal. En este caso, la variable se coloca cerca de la circunferencia del círculo de correlación.
Un cos2 bajo indica que la variable no está perfectamente representada por los PC. En este caso, la variable está cerca del centro del círculo.
Para una variable dada, la suma del cos2 de todos los componentes principales es igual a uno.
Si una variable está perfectamente representada por solo dos componentes principales (Dim.1 y Dim.2), la suma del cos2 en estos dos PCs es igual a uno. En este caso las variables se colocarán en el círculo de correlaciones.
Para algunas de las variables, pueden ser necesarios más de 2 componentes para representar perfectamente los datos. En este caso las variables se sitúan dentro del círculo de correlaciones.
En resumen:
fviz_pca_var(pca.acc_scale,
col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
)
Las contribuciones de las variables en la contabilización de la variabilidad de un determinado componente principal se expresan en porcentaje.
Las variables que están correlacionadas con PC1 (es decir, Dim.1) y PC2 (es decir, Dim.2) son las más importantes para explicar la variabilidad en el conjunto de datos.
Las variables que no están correlacionadas con ningún PC o con las últimas dimensiones son variables con una contribución baja y se pueden eliminar para simplificar el análisis global.
La contribución de las variables se puede extraer de la siguiente manera:
head(var$contrib[,1:4],11)
## Dim.1 Dim.2 Dim.3 Dim.4
## FATALS 2.64942527 0.3114147 7.42347448 53.7177824
## DRUNK_DR 0.06797608 7.8411720 6.25604798 33.5974816
## VE_TOTAL 19.66486180 4.4347254 10.57232696 1.8502454
## VE_FORMS 20.99011424 1.8253807 0.05140488 4.6945826
## PVH_INVL 0.10314857 4.9598398 65.87489045 3.3012610
## PEDS 6.53321358 36.7722855 1.67136397 0.6851044
## PERSONS 21.98761218 2.5472306 3.48069265 0.5644400
## PERMVIT 22.09819245 2.0990044 4.46613018 0.4429174
## PERNOTMVIT 5.90545583 39.2089469 0.20366845 1.1461852
Cuando más grande sea el valor de la contribución, más contribución habrá al componente.
corrplot(var$contrib[,1:4], is.cor=FALSE)
Las variables más importantes (que más contribuyen) se pueden resaltar a la gráfica de correlación de la siguiente manera:
fviz_pca_var(pca.acc_scale, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)
Las variables correlacionadas positivas apuntan al mismo lado de la trama. Las variables correlacionadas negativas apuntan a lados opuestos del gráfico. Por ejemplo, vemos que las personas involucradas en un accidente (PVH_INVL) y conductor bebido (DRUNK_DR) apuntan direcciones opuestas por tanto no están nada correlacionas, además lo hemos visto antes puesto que tienen un coeficiente de correlación de -0.01.
Se observa que las variables que más aportan a las componentes principales son PEDS y PERNOTMVIT por un lado y VE_TOTAL, VE_FORMS, PERSONS y PERMVIT por otro. Esto es debido al hecho que están correlacionadas. En concreto por el diagrama de correlación de antes de que PEDS está muy bien correlacionada con PERNOTMVIT. De otra banda VE_TOTAL, VE_FORMS, PERSONS y PERMVIT están también bastante correlacionadas. La correlación de FATALS con este grupo de variables no es elevada, pero apunta en la misma dirección.
Podrían ahora rehacer los componentes excluyendo las variables que no aportan información. Una vez rehechas estas nuevas variables sustituyen a las originales que las forman y se podrían utilizar por ejemplo como un indicador de gravedad de accidente puesto que incluye vehículo en movimiento, parado, peatones, conductores y otros implicados en una sola variable.
Los datos estudiados contemplan accidentes de tráfico con víctimas en las redes de autopistas en los EUUU a largo del 2020. Todos los registros tienen un identificador único de accidente y una serie de hechos principales como número de muertos, número de conductores bebidos, vehículos y personas implicadas. Tenemos que añadir otras variables que los caracterizan agrupadas por ubicación geográfica, temporal, condiciones específicas del accidente, meteorológicas, la intervención del servicio de emergencias y otros factores.
Revisados los datos parecen bien informados. Los datos están bastante limpios y bien documentados. No plantean graves problemas de campos con valores nulos o vacíos y tienen bastante potencial para generar nuevos indicadores a partir de los datos.
Podemos afirmar que a lo largo del 2020 en las autopistas de EE. UU. sucedieron 35766 accidentes en los que perdieron la vida 38824 personas. Pretendiamos extraer relaciones entre la presencia de alcohol en los conductores y el número de accidentes, pero las conclusiones no fueron claras. Las relaciones más obvias comprobadas son el incremento de muertes en función del incremento del número de vehículos, pasajeros y peatones implicados.
Habría que profundizar mucho más. Sí que podemos perfilar cómo son los accidentes típicos en cuanto al número de vehículos y personas, conductores o peatones implicados.
El más habitual es un muerto por accidente incrementándose este valor en función de las variables relacionadas. Los conductores bebidos aparecen en uno de cada cuatro accidentes mortales aproximadamente. Los vehículos implicados en los accidentes son típicamente uno pudiéndose incrementar a dos en los casos más típicos. El número de peatones implicados es relativamente bajo dado el tipo de vía que estamos estudiando.
En cuanto al consumo de alcohol, con el grado de profundidad estudiado, no se observa un estado donde las proporcionalidades del número de conductor con presencia de alcohol sean superiores a otros estados.
Estudiando el número de muertes en accidente en relación con el estado donde ha sucedido y la condición climática, vemos necesario profundizar con técnicas por ejemplo de agregación para ver cómo se agrupan y poder obtener un perfil.
Se ha estudiado la franja horaria de la madrugada para ver si acumula un mayor número de accidentes, no siendo así. Parece que el número de accidentes mantiene también proporcionalidad respecto las franjas horarias. Se ha estudiado el número de accidentes por segmento horario con una discretización fijada en intervalo arbitrarios. La mayor presencia de accidentes en horario por la mañana y anochecer (ir y volver al trabajo) hace pensar en que queda pendiente estudiar dado el tipo de vía la distribución horaria de los accidentes lunes a viernes respecto a los fines de semana y festivos para ver si hay horas donde se acumulan más accidentes mortales.
Finalmente, con la técnica de los componentes principales hemos generado una nueva variable que combina otras variables con una correlación inicial que se podría considerar como índice de gravedad del accidente.
A partir de un juego de datos que te parezca interesante, propón un proyecto completo de minería de datos. La organización de la respuesta tiene que coincidir en las fases típicas del ciclo de vida de un proyecto de minería de datos. No hay que realizar las tareas de la fase.
Se espera por lo tanto que se responda de forma argumentada a las siguientes preguntas (Metodología CRISP-DM):
Para cada fase indica cuál es el objetivo de la fase y el producto que se obtendrá. Utiliza ejemplos de qué y cómo podrían ser las tareas. Si hay alguna característica que hace diferente el ciclo de vida de un proyecto de minería respecto a otros proyectos indícalo.
Extensión mínima: 400 palabras
Para este ejercicio, vamos a trabajar con el famoso videojuego POKEMON. Dicho videojuego es una adaptación de la seríe de dibujos animados o “anime” del mismo nombre. En dicho videojuego, el jugador es un entrenador de pokemons. Los pokemos son animales imaginarios con ciertas caracteristicas fisicas que además tienen habilidades de combate. El fin del juego es enfrentarse con los pokemos de otro jugador, el ganador del combate recibe puntos de experiencia que sirven para aprender nuevas habilidades o, evolucionar al siguiente nivel.
Para el proceso de obtención de conocimiento que nos brinda la minería de datos, tilizaremos el dataset “pokedex.csv” descargado de la web https://www.kaggle.com/. En dicho dataset encontramos las caracteristicas de todos y cada uno de los pokemos de la seríe de anime y el videjuego del mismo nombre.
Para el proceso de miníera de datos vamos a implementar cada una de las fases del ciclo de vida de minado de datos y resolviendo las cuestiones asociadas a cada una.
1.- Definición de la tarea de minería de datos.
Vamos a precisar cual es el objetivo el proyecto, para ello, respondemos a la pregunta ¿Qué neceista el negocio?. El objetivo del proyecto es evaluar que tipo de pokemon es el más idoneo para ganar todos los combates y de ese modo poder crear el algoritmo del siguiente videojuego de la saga POKEMON, en el cual se equilibren las posibilidades de éxito en el videojuego independientemente del poquemon que escoja el jugador, y que de ese modo, el jugador pueda conseguir subir de nivel en el videojuego por su destreza jugando y no por el tipo de pokemon elegido. De este modo, la recompensa de juegar al videojuego será mayor al experimentar la satisfacción de conseguir el objetivo por méritos propios.
En este mismo punto, también, debemos responder a la siguiente pregunta ¿Qué datos tenemos/necesitamos?¿Están limpios?.
En primer lugar vamos a obtener todos los campos que componen el dataset y vamos a discernir los valiosos de los vanales.
path = 'pokedex.csv'
pokemonData <- read.csv(path, row.names=NULL)
structure = str(pokemonData)
## 'data.frame': 1215 obs. of 12 variables:
## $ Image : chr "images/1.png" "images/2.png" "images/3.png" "images/4.png" ...
## $ Index : int 1 2 3 3 4 5 6 6 6 7 ...
## $ Name : chr "Bulbasaur" "Ivysaur" "Venusaur" "Venusaur Mega Venusaur" ...
## $ Type.1 : chr "Grass" "Grass" "Grass" "Grass" ...
## $ Type.2 : chr "Poison" "Poison" "Poison" "Poison" ...
## $ Total : int 318 405 525 625 309 405 534 634 634 314 ...
## $ HP : int 45 60 80 80 39 58 78 78 78 44 ...
## $ Attack : int 49 62 82 100 52 64 84 130 104 48 ...
## $ Defense : int 49 63 83 123 43 58 78 111 78 65 ...
## $ SP..Atk.: int 65 80 100 122 60 80 109 130 159 50 ...
## $ SP..Def : int 65 80 100 120 50 65 85 85 115 64 ...
## $ Speed : int 45 60 80 80 65 80 100 100 100 43 ...
Podemos observar que tenemos 1215 objetos, los cuales están definidos por 12 variables. A continuación, explicamos cada variable y su valor dentro del proceso de minería para obtener el conocimiento deseado, descartando aquellos que sean innecesarios.
- Image, este campo nos muestra la imagen del pokemon. Puesto que necesitamos saber cuales son sus habilidades de combate, este campo es descartado por ser innecesario.
- Index, este campo nos muestra la posición del pokemon dentro del listado de todos los pokemos. Este campo no define una habilidad de combate, es solamente un indice de ordenación y por ese motivo, es eliminado del proceso por ser innecesario.
- Name, este campo identifica a cada pokemon de forma univoca, ya que, solo se dispone de un nombre por pokemon. Al identificar cada pokemon este campo se utilizara.
- Type.1, es el tipo, familia o grupo al que pertenece un pokemon. Tiene importancia al haber familias o tipos que son superiores a otros y por lo tanto, será utilizado aunque su presencia en el proceso de minado está supeditado a que no produzca inconsistencias.
- Type.2, es un segundo tipo, familio o grupo por el cual pueden ser agrupados los pokemos. Al igual que con la variable Type.1, su necesidad está relacionada con la posiblidad de producir algún problema en el minado.
- Total, es el valor de la suma de todos los puntos de sus caracteristicas. Si bien, tiene elementos repetidos, es un valor descriptivo en combinación con los valores de las direferentes caracteristicas o destrezas. Se mantiene en el proceso.
- HP, es el nivel de energía o la capacidad máxima de sufrir daño. Es fundamental en el proceso de minado, ya que es una caracteristica descriptiva del poder de un pokemon.
- Attack, es el nivel de energía que se le resta al oponenete por ataque. Este dato es significativo, un pokemon con mucho poder de ataque puede eliminar a un pokemon que tenga un bajo nivel de HP en pocos golpes y demúestra, el pdoer de un pokemon sobre otro.
- Defense, es el nivel de energía capaz de bloquear del ataque del oponenete. Este dato es significativo, hace a los pokemon resistentes y junto con un buen attacke, marca la direferencia.
- SP..Atk y SP..Def, hacen referencia a los mismos valores anteriores, pero especifican un nivel de ataque o defensa superiores a los normales al ser especiales. Estas caracteristicas se activan de forma aleatoria o en momentos determinados. Aunque, puede darse el caso de no activarse en un combate, estas caracteristicas tienen su importancia al igual que las anteriores.
- Speed, marca la velocidad de ataque y designa al pokemon que será el pimero en atacar. Es vital, al ser una caracteristica que da ventaja al pokemon con mayor velocidad.
A continuación, vamos a buscar valores nulos en las variables y tras ver los resultados volveremos a plantear la decisión de las variables seleccionadas.
print('NA')
## [1] "NA"
colSums(is.na(pokemonData))
## Image Index Name Type.1 Type.2 Total HP Attack
## 0 0 0 0 0 0 0 0
## Defense SP..Atk. SP..Def Speed
## 0 0 0 0
print('Blancos')
## [1] "Blancos"
colSums(pokemonData=="")
## Image Index Name Type.1 Type.2 Total HP Attack
## 0 0 0 0 546 0 0 0
## Defense SP..Atk. SP..Def Speed
## 0 0 0 0
Obsevamos que no hay valores nulos en el dataset, pero si existen 546 objetos que no tienen un segundo typo. De los 1215 objetos totales, hace un 44,94% de objetos que no disponen de un segundo typo. Ya que es un valor muy elevado y puedo provocar insconsistencias, no se considerá necesario y también se eliminara para los siguientes pasos del proceso de minado.
No vamos a buscar duplicados, aunque hay valores muy repetidos, su importancia es en conjunto y no por separado, con el resto de caracteristicas.
Los campos seleccionados para el minado serán los siguientes: Name, Type.1, HP, Attack, Defense, SP..Atk, SP..Def, Speed
Ahora entramos en la segunda fase en la cual, prepararemos los datos para el minado.
2.- Prepración de datos.
Para empezar vamos a eliminar las variables que no han sido seleccionadas, que son: Image, Index, Type.2 y Total. Una vez eliminado esos datos vamos a calcular nuevos datos de la siguiente manera: Debido a que las defensas protegen de gastar x puntos de HP, vamos a crear una columna que sea Capacity y que marcara el numero de ataques capaz de soportar con su nivel de defensa. Del mismo modo para calcular dicha capacidad se sumarán tanto las habilitades Defense y SP..Def y se dividira HP por el resultado de la suma
A continuación Sumamos la capacidad de ataque total que tiene cada pokemon y calcularemos la medía aritmetica, ya que cuando se produce un ataque especial, no se realice además una ataque normal. Con la medía cubrimos la posibilidad de que se pueda producir uno u otro.
Por último eliminaremos todos los campos utilizados para los calculos y dejaremos los campos calculados
Una vez reducida la dimensionalidad del dataset, vamos a normalizarla en un rango de [0,1] y para ello utilizaremos el procedimiento min-max, que consiste en dividir todos los valores de una variable por el máximo de ellos.
Con estos procesos hemos respondido a la pregunta ¿cómo organizamos los datos?
pokemonData<- pokemonData[, !(names(pokemonData) %in% c("Image", "Index","Type.2", "Total"))]
pokemonData$Capacity <- 0
pokemonData$Capacity <- pokemonData$HP / (pokemonData$Defense + pokemonData$SP..Def)
pokemonData$Power <- 0
pokemonData$Power <- (pokemonData$Attack + pokemonData$SP..Atk)/2
pokemonData<- pokemonData[, !(names(pokemonData) %in% c("Attack","HP","Defense","SP..Atk.","SP..Def"))]
pokemonData$Speed<- pokemonData$Speed / max(pokemonData$Speed)
pokemonData$Capacity <- pokemonData$Capacity/max(pokemonData$Capacity)
pokemonData$Power<- pokemonData$Power / max(pokemonData$Power)
print(pokemonData)
## Name Type.1 Speed Capacity Power
## 1 Bulbasaur Grass 0.225 0.153508772 0.31666667
## 2 Ivysaur Grass 0.300 0.163170163 0.39444444
## 3 Venusaur Grass 0.400 0.170006072 0.50555556
## 4 Venusaur Mega Venusaur Grass 0.400 0.128029264 0.61666667
## 5 Charmander Fire 0.325 0.163082437 0.31111111
## 6 Charmeleon Fire 0.400 0.183378500 0.40000000
## 7 Charizard Fire 0.500 0.186094070 0.53611111
## 8 Charizard Mega Charizard X Fire 0.500 0.154761905 0.72222222
## 9 Charizard Mega Charizard Y Fire 0.500 0.157167530 0.73055556
## 10 Squirtle Water 0.215 0.132644272 0.27222222
## 11 Wartortle Water 0.290 0.143402778 0.35555556
## 12 Blastoise Water 0.390 0.149864499 0.46666667
## 13 Blastoise Mega Blastoise Water 0.390 0.130732861 0.66111111
## 14 Caterpie Bug 0.225 0.318181818 0.13888889
## 15 Metapod Bug 0.150 0.243055556 0.12500000
## 16 Butterfree Bug 0.350 0.179487179 0.37500000
## 17 Weedle Bug 0.250 0.311111111 0.15277778
## 18 Kakuna Bug 0.175 0.233333333 0.13888889
## 19 Beedrill Bug 0.375 0.210648148 0.37500000
## 20 Beedrill Mega Beedrill Bug 0.725 0.210648148 0.45833333
## 21 Pidgey Normal 0.280 0.207407407 0.22222222
## 22 Pidgeotto Normal 0.355 0.233333333 0.30555556
## 23 Pidgeot Normal 0.505 0.222605364 0.41666667
## 24 Pidgeot Mega Pidgeot Normal 0.605 0.201736111 0.59722222
## 25 Rattata Normal 0.360 0.166666667 0.22500000
## 26 Rattata Alolan Rattata Dark 0.360 0.166666667 0.22500000
## 27 Raticate Normal 0.485 0.164529915 0.36388889
## 28 Raticate Alolan Raticate Dark 0.385 0.194444444 0.30833333
## 29 Spearow Normal 0.350 0.255009107 0.25277778
## 30 Fearow Normal 0.500 0.200617284 0.41944444
## 31 Ekans Poison 0.275 0.138888889 0.27777778
## 32 Arbok Poison 0.400 0.157657658 0.44444444
## 33 Pikachu Electric 0.450 0.151234568 0.29166667
## 34 Pikachu Partner Pikachu Electric 0.600 0.159090909 0.43055556
## 35 Raichu Electric 0.550 0.172839506 0.50000000
## 36 Raichu Alolan Raichu Electric 0.550 0.172839506 0.50000000
## 37 Sandshrew Ground 0.200 0.169082126 0.26388889
## 38 Sandshrew Alolan Sandshrew Ice 0.200 0.155555556 0.23611111
## 39 Sandslash Ground 0.325 0.176767677 0.40277778
## 40 Sandslash Alolan Sandslash Ice 0.325 0.157657658 0.34722222
## 41 Nidoran♀ Poison 0.205 0.232487923 0.24166667
## 42 Nidorina Poison 0.280 0.223132969 0.32500000
## 43 Nidoqueen Poison 0.380 0.203488372 0.46388889
## 44 Nidoran♂ Poison 0.250 0.223611111 0.26944444
## 45 Nidorino Poison 0.325 0.211805556 0.35277778
## 46 Nidoking Poison 0.425 0.207236842 0.51944444
## 47 Clefairy Fairy 0.175 0.240904621 0.29166667
## 48 Clefable Fairy 0.300 0.226653033 0.45833333
## 49 Vulpix Fire 0.325 0.140740741 0.25277778
## 50 Vulpix Alolan Vulpix Ice 0.325 0.140740741 0.25277778
## 51 Ninetales Fire 0.500 0.162222222 0.43611111
## 52 Ninetales Alolan Ninetales Ice 0.545 0.162222222 0.41111111
## 53 Jigglypuff Normal 0.100 0.993827160 0.25000000
## 54 Wigglytuff Normal 0.225 0.573099415 0.43055556
## 55 Zubat Poison 0.275 0.207407407 0.20833333
## 56 Golbat Poison 0.450 0.201149425 0.40277778
## 57 Oddish Grass 0.150 0.145833333 0.34722222
## 58 Gloom Grass 0.200 0.160919540 0.41666667
## 59 Vileplume Grass 0.250 0.166666667 0.52777778
## 60 Paras Bug 0.125 0.123737374 0.31944444
## 61 Parasect Bug 0.150 0.145833333 0.43055556
## 62 Venonat Bug 0.225 0.222222222 0.26388889
## 63 Venomoth Bug 0.450 0.201646091 0.43055556
## 64 Diglett Ground 0.475 0.055555556 0.25000000
## 65 Diglett Alolan Diglett Ground 0.450 0.051851852 0.25000000
## 66 Dugtrio Ground 0.600 0.113425926 0.41666667
## 67 Dugtrio Alolan Dugtrio Ground 0.550 0.104700855 0.41666667
## 68 Meowth Normal 0.450 0.207407407 0.23611111
## 69 Meowth Alolan Meowth Dark 0.450 0.207407407 0.23611111
## 70 Meowth Galarian Meowth Steel 0.200 0.204678363 0.29166667
## 71 Persian Normal 0.575 0.202222222 0.37500000
## 72 Persian Alolan Persian Dark 0.575 0.202222222 0.37500000
## 73 Psyduck Water 0.275 0.198412698 0.32500000
## 74 Golduck Water 0.425 0.196905767 0.49166667
## 75 Mankey Fighting 0.350 0.194444444 0.31944444
## 76 Primeape Fighting 0.475 0.194444444 0.45833333
## 77 Growlithe Fire 0.300 0.225146199 0.38888889
## 78 Growlithe Hisuian Growlithe Fire 0.275 0.245614035 0.38888889
## 79 Arcanine Fire 0.475 0.218750000 0.58333333
## 80 Arcanine Hisuian Arcanine Fire 0.450 0.230902778 0.58333333
## 81 Poliwag Water 0.450 0.194444444 0.25000000
## 82 Poliwhirl Water 0.450 0.219806763 0.31944444
## 83 Poliwrath Water 0.350 0.189189189 0.45833333
## 84 Abra Psychic 0.450 0.138888889 0.34722222
## 85 Kadabra Psychic 0.525 0.155555556 0.43055556
## 86 Alakazam Psychic 0.600 0.152777778 0.51388889
## 87 Alakazam Mega Alakazam Psychic 0.750 0.125816993 0.62500000
## 88 Machop Fighting 0.175 0.320261438 0.31944444
## 89 Machoke Fighting 0.225 0.239316239 0.41666667
## 90 Machamp Fighting 0.275 0.212121212 0.54166667
## 91 Bellsprout Grass 0.200 0.299145299 0.40277778
## 92 Weepinbell Grass 0.275 0.266081871 0.48611111
## 93 Victreebel Grass 0.350 0.230452675 0.56944444
## 94 Tentacool Water 0.350 0.115226337 0.25000000
## 95 Tentacruel Water 0.500 0.168168168 0.41666667
## 96 Geodude Rock 0.100 0.119658120 0.30555556
## 97 Geodude Alolan Geodude Rock 0.100 0.119658120 0.30555556
## 98 Graveler Rock 0.175 0.133680556 0.38888889
## 99 Graveler Alolan Graveler Rock 0.175 0.133680556 0.38888889
## 100 Golem Rock 0.225 0.159544160 0.48611111
## 101 Golem Alolan Golem Rock 0.225 0.159544160 0.48611111
## 102 Ponyta Fire 0.450 0.162037037 0.41666667
## 103 Ponyta Galarian Ponyta Psychic 0.450 0.162037037 0.41666667
## 104 Rapidash Fire 0.525 0.168518519 0.50000000
## 105 Rapidash Galarian Rapidash Psychic 0.525 0.168518519 0.50000000
## 106 Slowpoke Water 0.075 0.333333333 0.29166667
## 107 Slowpoke Galarian Slowpoke Psychic 0.075 0.333333333 0.29166667
## 108 Slowbro Water 0.150 0.194444444 0.48611111
## 109 Slowbro Mega Slowbro Water 0.150 0.142094017 0.56944444
## 110 Slowbro Galarian Slowbro Poison 0.150 0.223905724 0.55555556
## 111 Magnemite Electric 0.225 0.077777778 0.36111111
## 112 Magneton Electric 0.350 0.117845118 0.50000000
## 113 Farfetch'd Normal 0.300 0.172839506 0.41111111
## 114 Farfetch'd Galarian Farfetch'd Fighting 0.275 0.172839506 0.42500000
## 115 Doduo Normal 0.375 0.170138889 0.33333333
## 116 Dodrio Normal 0.550 0.179487179 0.47222222
## 117 Seel Water 0.225 0.202222222 0.25000000
## 118 Dewgong Water 0.350 0.200000000 0.38888889
## 119 Grimer Poison 0.125 0.311111111 0.33333333
## 120 Grimer Alolan Grimer Poison 0.125 0.311111111 0.33333333
## 121 Muk Poison 0.250 0.233333333 0.47222222
## 122 Muk Alolan Muk Poison 0.250 0.233333333 0.47222222
## 123 Shellder Water 0.200 0.093333333 0.30555556
## 124 Cloyster Water 0.350 0.086419753 0.50000000
## 125 Gastly Ghost 0.400 0.179487179 0.37500000
## 126 Haunter Ghost 0.475 0.175000000 0.45833333
## 127 Gengar Ghost 0.550 0.172839506 0.54166667
## 128 Gengar Mega Gengar Ghost 0.650 0.133333333 0.65277778
## 129 Onix Rock 0.350 0.066395664 0.20833333
## 130 Drowzee Psychic 0.210 0.172839506 0.25277778
## 131 Hypno Psychic 0.335 0.178678679 0.40555556
## 132 Krabby Water 0.250 0.101449275 0.36111111
## 133 Kingler Water 0.375 0.129629630 0.50000000
## 134 Voltorb Electric 0.500 0.148148148 0.23611111
## 135 Voltorb Hisuian Voltorb Electric 0.500 0.148148148 0.23611111
## 136 Electrode Electric 0.750 0.155555556 0.36111111
## 137 Electrode Hisuian Electrode Electric 0.750 0.155555556 0.36111111
## 138 Exeggcute Grass 0.200 0.186666667 0.27777778
## 139 Exeggutor Grass 0.275 0.230902778 0.61111111
## 140 Exeggutor Alolan Exeggutor Grass 0.225 0.230902778 0.63888889
## 141 Cubone Ground 0.175 0.134099617 0.25000000
## 142 Marowak Ground 0.225 0.122807018 0.36111111
## 143 Marowak Alolan Marowak Fire 0.225 0.122807018 0.36111111
## 144 Hitmonlee Fighting 0.435 0.119291070 0.43055556
## 145 Hitmonchan Fighting 0.380 0.102880658 0.38888889
## 146 Lickitung Normal 0.150 0.233333333 0.31944444
## 147 Koffing Poison 0.175 0.111111111 0.34722222
## 148 Weezing Poison 0.300 0.133040936 0.48611111
## 149 Weezing Galarian Weezing Poison 0.300 0.133040936 0.48611111
## 150 Rhyhorn Ground 0.125 0.248888889 0.31944444
## 151 Rhydon Ground 0.200 0.247474747 0.48611111
## 152 Chansey Normal 0.250 0.883838384 0.11111111
## 153 Tangela Grass 0.300 0.163082437 0.43055556
## 154 Kangaskhan Normal 0.450 0.255208333 0.37500000
## 155 Kangaskhan Mega Kangaskhan Normal 0.500 0.204166667 0.51388889
## 156 Horsea Water 0.300 0.122807018 0.30555556
## 157 Seadra Water 0.425 0.152777778 0.44444444
## 158 Goldeen Water 0.315 0.159090909 0.28333333
## 159 Seaking Water 0.340 0.214559387 0.43611111
## 160 Staryu Water 0.425 0.106060606 0.31944444
## 161 Starmie Water 0.575 0.137254902 0.48611111
## 162 Mr. Mime Psychic 0.450 0.084084084 0.40277778
## 163 Mr. Mime Galarian Mr. Mime Ice 0.500 0.125448029 0.43055556
## 164 Scyther Bug 0.525 0.170138889 0.45833333
## 165 Jynx Ice 0.475 0.194444444 0.45833333
## 166 Electabuzz Electric 0.525 0.178012520 0.49444444
## 167 Magmar Fire 0.465 0.178012520 0.54166667
## 168 Pinsir Bug 0.425 0.148692810 0.50000000
## 169 Pinsir Mega Pinsir Bug 0.525 0.120370370 0.61111111
## 170 Tauros Normal 0.550 0.176767677 0.38888889
## 171 Tauros Combat Breed Fighting 0.500 0.166666667 0.38888889
## 172 Tauros Blaze Breed Fighting 0.500 0.166666667 0.38888889
## 173 Tauros Aqua Breed Fighting 0.500 0.166666667 0.38888889
## 174 Magikarp Water 0.400 0.103703704 0.06944444
## 175 Gyarados Water 0.405 0.206393544 0.51388889
## 176 Gyarados Mega Gyarados Water 0.405 0.154579265 0.62500000
## 177 Lapras Water 0.300 0.288888889 0.47222222
## 178 Ditto Normal 0.240 0.194444444 0.26666667
## 179 Eevee Normal 0.275 0.185990338 0.27777778
## 180 Eevee Partner Eevee Normal 0.375 0.163082437 0.38888889
## 181 Vaporeon Water 0.325 0.326164875 0.48611111
## 182 Jolteon Electric 0.650 0.163082437 0.48611111
## 183 Flareon Fire 0.325 0.148692810 0.62500000
## 184 Porygon Normal 0.200 0.174329502 0.40277778
## 185 Omanyte Rock 0.175 0.087813620 0.36111111
## 186 Omastar Rock 0.275 0.139601140 0.48611111
## 187 Kabuto Rock 0.275 0.086419753 0.37500000
## 188 Kabutops Rock 0.400 0.133333333 0.50000000
## 189 Aerodactyl Rock 0.650 0.222222222 0.45833333
## 190 Aerodactyl Mega Aerodactyl Rock 0.750 0.172839506 0.56944444
## 191 Snorlax Normal 0.150 0.355555556 0.48611111
## 192 Articuno Ice 0.425 0.155555556 0.50000000
## 193 Articuno Galarian Articuno Psychic 0.475 0.189189189 0.58333333
## 194 Zapdos Electric 0.500 0.200000000 0.59722222
## 195 Zapdos Galarian Zapdos Fighting 0.500 0.194444444 0.58333333
## 196 Moltres Fire 0.450 0.200000000 0.62500000
## 197 Moltres Galarian Moltres Dark 0.450 0.162790698 0.51388889
## 198 Dratini Dragon 0.250 0.167836257 0.31666667
## 199 Dragonair Dragon 0.350 0.175720165 0.42777778
## 200 Dragonite Dragon 0.400 0.181481481 0.65000000
## 201 Mewtwo Psychic 0.650 0.229012346 0.73333333
## 202 Mewtwo Mega Mewtwo X Psychic 0.650 0.206111111 0.95555556
## 203 Mewtwo Mega Mewtwo Y Psychic 0.700 0.216959064 0.95555556
## 204 Mew Psychic 0.500 0.194444444 0.55555556
## 205 Chikorita Grass 0.225 0.134615385 0.27222222
## 206 Bayleef Grass 0.300 0.145833333 0.34722222
## 207 Meganium Grass 0.400 0.155555556 0.45833333
## 208 Cyndaquil Fire 0.325 0.163082437 0.31111111
## 209 Quilava Fire 0.400 0.183378500 0.40000000
## 210 Typhlosion Fire 0.500 0.186094070 0.53611111
## 211 Typhlosion Hisuian Typhlosion Fire 0.475 0.174164963 0.56388889
## 212 Totodile Water 0.215 0.173611111 0.30277778
## 213 Croconaw Water 0.290 0.176767677 0.38611111
## 214 Feraligatr Water 0.390 0.180631451 0.51111111
## 215 Sentret Normal 0.100 0.172292546 0.22500000
## 216 Furret Normal 0.450 0.277777778 0.33611111
## 217 Hoothoot Normal 0.250 0.271317829 0.18333333
## 218 Noctowl Normal 0.350 0.266362253 0.37777778
## 219 Ledyba Bug 0.275 0.141414141 0.16666667
## 220 Ledian Bug 0.425 0.133680556 0.25000000
## 221 Spinarak Bug 0.150 0.194444444 0.27777778
## 222 Ariados Bug 0.200 0.194444444 0.41666667
## 223 Crobat Poison 0.650 0.206597222 0.44444444
## 224 Chinchou Water 0.335 0.310283688 0.26111111
## 225 Lanturn Water 0.335 0.362769486 0.37222222
## 226 Pichu Electric 0.300 0.155555556 0.20833333
## 227 Cleffa Fairy 0.075 0.234270415 0.19444444
## 228 Igglybuff Normal 0.075 1.000000000 0.19444444
## 229 Togepi Fairy 0.100 0.104700855 0.16666667
## 230 Togetic Fairy 0.200 0.112573099 0.33333333
## 231 Natu Psychic 0.350 0.172839506 0.33333333
## 232 Xatu Psychic 0.475 0.180555556 0.47222222
## 233 Mareep Electric 0.175 0.251633987 0.29166667
## 234 Flaaffy Electric 0.225 0.236714976 0.37500000
## 235 Ampharos Electric 0.275 0.200000000 0.52777778
## 236 Ampharos Mega Ampharos Electric 0.225 0.162790698 0.72222222
## 237 Bellossom Grass 0.250 0.149572650 0.47222222
## 238 Marill Water 0.200 0.272222222 0.11111111
## 239 Azumarill Water 0.250 0.243055556 0.30555556
## 240 Sudowoodo Rock 0.150 0.151234568 0.36111111
## 241 Politoed Water 0.350 0.200000000 0.45833333
## 242 Hoppip Grass 0.250 0.143274854 0.19444444
## 243 Skiploom Grass 0.400 0.185990338 0.25000000
## 244 Jumpluff Grass 0.550 0.176767677 0.30555556
## 245 Aipom Normal 0.425 0.194444444 0.30555556
## 246 Sunkern Grass 0.150 0.194444444 0.16666667
## 247 Sunflora Grass 0.150 0.208333333 0.50000000
## 248 Yanma Bug 0.475 0.280864198 0.38888889
## 249 Wooper Water 0.075 0.305555556 0.19444444
## 250 Wooper Paldean Wooper Poison 0.075 0.305555556 0.19444444
## 251 Quagsire Water 0.175 0.246296296 0.41666667
## 252 Espeon Psychic 0.550 0.163082437 0.54166667
## 253 Umbreon Dark 0.325 0.153935185 0.34722222
## 254 Murkrow Dark 0.455 0.277777778 0.47222222
## 255 Slowking Water 0.150 0.194444444 0.48611111
## 256 Slowking Galarian Slowking Poison 0.150 0.194444444 0.48611111
## 257 Misdreavus Ghost 0.425 0.160919540 0.40277778
## 258 Unown Psychic 0.240 0.194444444 0.40000000
## 259 Wobbuffet Psychic 0.165 0.636973180 0.18333333
## 260 Girafarig Normal 0.425 0.209401709 0.47222222
## 261 Pineco Bug 0.075 0.155555556 0.27777778
## 262 Forretress Bug 0.200 0.145833333 0.41666667
## 263 Dunsparce Normal 0.225 0.288065844 0.37500000
## 264 Gligar Ground 0.425 0.148692810 0.30555556
## 265 Steelix Steel 0.150 0.110062893 0.38888889
## 266 Steelix Mega Steelix Steel 0.150 0.089743590 0.50000000
## 267 Snubbull Fairy 0.150 0.259259259 0.33333333
## 268 Granbull Fairy 0.225 0.259259259 0.50000000
## 269 Qwilfish Water 0.425 0.180555556 0.41666667
## 270 Qwilfish Hisuian Qwilfish Dark 0.425 0.180555556 0.41666667
## 271 Scizor Bug 0.325 0.151234568 0.51388889
## 272 Scizor Mega Scizor Bug 0.375 0.113425926 0.59722222
## 273 Shuckle Bug 0.025 0.016908213 0.05555556
## 274 Heracross Bug 0.425 0.183006536 0.45833333
## 275 Heracross Mega Heracross Bug 0.375 0.141414141 0.62500000
## 276 Sneasel Dark 0.575 0.164529915 0.36111111
## 277 Sneasel Hisuian Sneasel Fighting 0.575 0.164529915 0.36111111
## 278 Teddiursa Normal 0.200 0.233333333 0.36111111
## 279 Ursaring Normal 0.275 0.233333333 0.56944444
## 280 Slugma Fire 0.100 0.194444444 0.30555556
## 281 Magcargo Fire 0.150 0.116666667 0.38888889
## 282 Swinub Ice 0.250 0.277777778 0.22222222
## 283 Piloswine Ice 0.250 0.277777778 0.44444444
## 284 Corsola Water 0.175 0.133040936 0.33333333
## 285 Corsola Galarian Corsola Ghost 0.150 0.116666667 0.33333333
## 286 Remoraid Water 0.325 0.194444444 0.36111111
## 287 Octillery Water 0.225 0.194444444 0.58333333
## 288 Delibird Ice 0.375 0.194444444 0.33333333
## 289 Mantine Water 0.350 0.157407407 0.33333333
## 290 Skarmory Steel 0.350 0.120370370 0.33333333
## 291 Houndour Dark 0.325 0.218750000 0.38888889
## 292 Houndoom Dark 0.475 0.224358974 0.55555556
## 293 Houndoom Mega Houndoom Dark 0.575 0.162037037 0.63888889
## 294 Kingdra Water 0.425 0.153508772 0.52777778
## 295 Phanpy Ground 0.200 0.350000000 0.27777778
## 296 Donphan Ground 0.250 0.194444444 0.50000000
## 297 Porygon2 Normal 0.300 0.178678679 0.51388889
## 298 Stantler Normal 0.425 0.223534558 0.50000000
## 299 Smeargle Normal 0.375 0.267361111 0.11111111
## 300 Tyrogue Fighting 0.175 0.194444444 0.19444444
## 301 Hitmontop Fighting 0.350 0.094850949 0.36111111
## 302 Smoochum Ice 0.325 0.218750000 0.31944444
## 303 Elekid Electric 0.475 0.190217391 0.35555556
## 304 Magby Fire 0.415 0.190217391 0.40277778
## 305 Miltank Normal 0.500 0.211111111 0.33333333
## 306 Blissey Normal 0.275 0.683908046 0.23611111
## 307 Raikou Electric 0.575 0.200000000 0.55555556
## 308 Entei Fire 0.500 0.279513889 0.56944444
## 309 Suicune Water 0.425 0.169082126 0.45833333
## 310 Larvitar Rock 0.205 0.194444444 0.30277778
## 311 Pupitar Rock 0.255 0.194444444 0.41388889
## 312 Tyranitar Rock 0.305 0.185185185 0.63611111
## 313 Tyranitar Mega Tyranitar Rock 0.355 0.144032922 0.71944444
## 314 Lugia Psychic 0.550 0.145148670 0.50000000
## 315 Ho-oh Fire 0.450 0.168943534 0.66666667
## 316 Celebi Psychic 0.500 0.194444444 0.55555556
## 317 Treecko Grass 0.350 0.172839506 0.30555556
## 318 Grovyle Grass 0.475 0.176767677 0.41666667
## 319 Sceptile Grass 0.600 0.181481481 0.52777778
## 320 Sceptile Mega Sceptile Grass 0.725 0.170138889 0.70833333
## 321 Torchic Fire 0.225 0.194444444 0.36111111
## 322 Combusken Fire 0.275 0.194444444 0.47222222
## 323 Blaziken Fire 0.400 0.222222222 0.63888889
## 324 Blaziken Mega Blaziken Fire 0.500 0.194444444 0.80555556
## 325 Mudkip Water 0.200 0.194444444 0.33333333
## 326 Marshtomp Water 0.250 0.194444444 0.40277778
## 327 Swampert Water 0.300 0.216049383 0.54166667
## 328 Swampert Mega Swampert Water 0.350 0.176767677 0.68055556
## 329 Poochyena Dark 0.175 0.209401709 0.23611111
## 330 Mightyena Dark 0.350 0.209401709 0.41666667
## 331 Zigzagoon Normal 0.300 0.180216802 0.16666667
## 332 Zigzagoon Galarian Zigzagoon Dark 0.300 0.180216802 0.16666667
## 333 Linoone Normal 0.500 0.248633880 0.33333333
## 334 Linoone Galarian Linoone Dark 0.500 0.248633880 0.33333333
## 335 Wurmple Bug 0.100 0.269230769 0.18055556
## 336 Silcoon Bug 0.075 0.243055556 0.16666667
## 337 Beautifly Bug 0.325 0.233333333 0.47222222
## 338 Cascoon Bug 0.075 0.243055556 0.16666667
## 339 Dustox Bug 0.325 0.145833333 0.27777778
## 340 Lotad Water 0.150 0.194444444 0.19444444
## 341 Lombre Water 0.250 0.194444444 0.30555556
## 342 Ludicolo Water 0.350 0.183006536 0.44444444
## 343 Seedot Grass 0.150 0.194444444 0.19444444
## 344 Nuzleaf Grass 0.300 0.340277778 0.36111111
## 345 Shiftry Grass 0.400 0.291666667 0.52777778
## 346 Taillow Normal 0.425 0.259259259 0.23611111
## 347 Swellow Normal 0.625 0.212121212 0.44444444
## 348 Wingull Water 0.425 0.259259259 0.23611111
## 349 Pelipper Water 0.325 0.137254902 0.40277778
## 350 Ralts Psychic 0.200 0.181481481 0.19444444
## 351 Kirlia Psychic 0.250 0.164197531 0.27777778
## 352 Gardevoir Psychic 0.400 0.146913580 0.52777778
## 353 Gardevoir Mega Gardevoir Psychic 0.500 0.132222222 0.69444444
## 354 Surskit Bug 0.325 0.185185185 0.22222222
## 355 Masquerain Bug 0.400 0.189043210 0.44444444
## 356 Shroomish Grass 0.175 0.194444444 0.22222222
## 357 Breloom Grass 0.350 0.166666667 0.52777778
## 358 Slakoth Normal 0.150 0.245614035 0.26388889
## 359 Vigoroth Normal 0.450 0.230452675 0.37500000
## 360 Slaking Normal 0.500 0.353535354 0.70833333
## 361 Nincada Bug 0.200 0.100462963 0.20833333
## 362 Ninjask Bug 0.800 0.249707602 0.38888889
## 363 Shedinja Bug 0.200 0.005185185 0.33333333
## 364 Whismur Normal 0.140 0.541062802 0.28333333
## 365 Loudred Normal 0.240 0.379844961 0.39444444
## 366 Exploud Normal 0.340 0.297385621 0.50555556
## 367 Makuhita Fighting 0.125 0.466666667 0.22222222
## 368 Hariyama Fighting 0.250 0.466666667 0.44444444
## 369 Azurill Normal 0.100 0.243055556 0.11111111
## 370 Nosepass Rock 0.150 0.051851852 0.25000000
## 371 Skitty Normal 0.250 0.243055556 0.22222222
## 372 Delcatty Normal 0.450 0.226851852 0.33333333
## 373 Sableye Dark 0.250 0.138888889 0.38888889
## 374 Sableye Mega Sableye Dark 0.100 0.081018519 0.47222222
## 375 Mawile Steel 0.250 0.138888889 0.38888889
## 376 Mawile Mega Mawile Steel 0.250 0.088383838 0.44444444
## 377 Aron Steel 0.150 0.138888889 0.30555556
## 378 Lairon Steel 0.200 0.122807018 0.38888889
## 379 Aggron Steel 0.250 0.113425926 0.47222222
## 380 Aggron Mega Aggron Steel 0.250 0.087813620 0.55555556
## 381 Meditite Fighting 0.300 0.106060606 0.22222222
## 382 Medicham Fighting 0.400 0.155555556 0.33333333
## 383 Medicham Mega Medicham Fighting 0.500 0.137254902 0.50000000
## 384 Electrike Electric 0.325 0.194444444 0.30555556
## 385 Manectric Electric 0.525 0.226851852 0.50000000
## 386 Manectric Mega Manectric Electric 0.675 0.170138889 0.58333333
## 387 Plusle Electric 0.475 0.202898551 0.37500000
## 388 Minun Electric 0.475 0.172839506 0.31944444
## 389 Volbeat Bug 0.425 0.157986111 0.33333333
## 390 Illumise Bug 0.425 0.157986111 0.33333333
## 391 Roselia Grass 0.325 0.155555556 0.44444444
## 392 Gulpin Poison 0.200 0.256813417 0.23888889
## 393 Swalot Poison 0.275 0.234270415 0.40555556
## 394 Carvanha Water 0.325 0.437500000 0.43055556
## 395 Sharpedo Water 0.475 0.340277778 0.59722222
## 396 Sharpedo Mega Sharpedo Water 0.525 0.201646091 0.69444444
## 397 Wailmer Water 0.300 0.722222222 0.38888889
## 398 Wailord Water 0.300 0.734567901 0.50000000
## 399 Numel Fire 0.175 0.274509804 0.34722222
## 400 Camerupt Fire 0.200 0.187739464 0.56944444
## 401 Camerupt Mega Camerupt Fire 0.100 0.132791328 0.73611111
## 402 Torkoal Fire 0.100 0.129629630 0.47222222
## 403 Spoink Psychic 0.300 0.202898551 0.26388889
## 404 Grumpig Psychic 0.400 0.177777778 0.37500000
## 405 Spinda Normal 0.300 0.194444444 0.33333333
## 406 Trapinch Ground 0.050 0.194444444 0.40277778
## 407 Vibrava Ground 0.350 0.194444444 0.33333333
## 408 Flygon Ground 0.500 0.194444444 0.50000000
## 409 Cacnea Grass 0.175 0.243055556 0.47222222
## 410 Cacturne Grass 0.275 0.226851852 0.63888889
## 411 Swablu Normal 0.250 0.129629630 0.22222222
## 412 Altaria Dragon 0.400 0.149572650 0.38888889
## 413 Altaria Mega Altaria Dragon 0.400 0.135658915 0.61111111
## 414 Zangoose Normal 0.450 0.236574074 0.48611111
## 415 Seviper Poison 0.325 0.236574074 0.55555556
## 416 Lunatone Rock 0.350 0.233333333 0.41666667
## 417 Solrock Rock 0.350 0.233333333 0.41666667
## 418 Barboach Water 0.300 0.231481481 0.26111111
## 419 Whiscash Water 0.300 0.297067901 0.42777778
## 420 Corphish Water 0.175 0.167222222 0.36111111
## 421 Crawdaunt Water 0.275 0.175000000 0.58333333
## 422 Baltoy Ground 0.275 0.124444444 0.22222222
## 423 Claydol Ground 0.375 0.103703704 0.38888889
## 424 Lileep Rock 0.115 0.156504065 0.28333333
## 425 Cradily Rock 0.215 0.163943355 0.45000000
## 426 Anorith Rock 0.375 0.175000000 0.37500000
## 427 Armaldo Rock 0.225 0.162037037 0.54166667
## 428 Feebas Water 0.400 0.103703704 0.06944444
## 429 Milotic Water 0.405 0.181100218 0.44444444
## 430 Castform Normal 0.350 0.194444444 0.38888889
## 431 Castform Sunny Form Fire 0.350 0.194444444 0.38888889
## 432 Castform Rainy Form Water 0.350 0.194444444 0.38888889
## 433 Castform Snowy Form Ice 0.350 0.194444444 0.38888889
## 434 Kecleon Normal 0.200 0.122807018 0.41666667
## 435 Shuppet Ghost 0.225 0.251633987 0.38333333
## 436 Banette Ghost 0.325 0.194444444 0.55000000
## 437 Banette Mega Banette Ghost 0.375 0.157524613 0.71666667
## 438 Duskull Ghost 0.125 0.043209877 0.19444444
## 439 Dusclops Ghost 0.125 0.059829060 0.36111111
## 440 Tropius Grass 0.255 0.226470588 0.38888889
## 441 Chimecho Psychic 0.325 0.171568627 0.40277778
## 442 Absol Dark 0.375 0.210648148 0.56944444
## 443 Absol Mega Absol Dark 0.575 0.210648148 0.73611111
## 444 Wynaut Psychic 0.115 0.384837963 0.12777778
## 445 Snorunt Ice 0.250 0.194444444 0.27777778
## 446 Glalie Ice 0.400 0.194444444 0.44444444
## 447 Glalie Mega Glalie Ice 0.500 0.194444444 0.66666667
## 448 Spheal Ice 0.125 0.272222222 0.26388889
## 449 Sealeo Ice 0.225 0.250000000 0.37500000
## 450 Walrein Ice 0.325 0.237654321 0.48611111
## 451 Clamperl Water 0.160 0.097222222 0.38333333
## 452 Huntail Water 0.260 0.118827160 0.55000000
## 453 Gorebyss Water 0.260 0.118827160 0.55000000
## 454 Relicanth Water 0.275 0.199430199 0.37500000
## 455 Luvdisc Water 0.485 0.139351852 0.19444444
## 456 Bagon Dragon 0.250 0.194444444 0.31944444
## 457 Shelgon Dragon 0.250 0.168518519 0.43055556
## 458 Salamence Dragon 0.500 0.230902778 0.68055556
## 459 Salamence Mega Salamence Dragon 0.600 0.167929293 0.73611111
## 460 Beldum Steel 0.150 0.111111111 0.25000000
## 461 Metang Steel 0.250 0.129629630 0.36111111
## 462 Metagross Steel 0.350 0.141414141 0.63888889
## 463 Metagross Mega Metagross Steel 0.550 0.119658120 0.69444444
## 464 Regirock Rock 0.250 0.103703704 0.41666667
## 465 Regice Ice 0.250 0.103703704 0.41666667
## 466 Registeel Steel 0.250 0.103703704 0.41666667
## 467 Latias Dragon 0.550 0.141414141 0.52777778
## 468 Latias Mega Latias Dragon 0.550 0.115226337 0.66666667
## 469 Latios Dragon 0.550 0.163742690 0.61111111
## 470 Latios Mega Latios Dragon 0.550 0.141414141 0.80555556
## 471 Kyogre Water 0.450 0.169082126 0.69444444
## 472 Kyogre Primal Kyogre Water 0.450 0.155555556 0.91666667
## 473 Groudon Ground 0.450 0.169082126 0.69444444
## 474 Groudon Primal Groudon Ground 0.450 0.155555556 0.91666667
## 475 Rayquaza Dragon 0.475 0.226851852 0.83333333
## 476 Rayquaza Mega Rayquaza Dragon 0.575 0.204166667 1.00000000
## 477 Jirachi Steel 0.500 0.194444444 0.55555556
## 478 Deoxys Normal Forme Psychic 0.750 0.194444444 0.83333333
## 479 Deoxys Attack Forme Psychic 0.750 0.486111111 1.00000000
## 480 Deoxys Defense Forme Psychic 0.450 0.060763889 0.38888889
## 481 Deoxys Speed Forme Psychic 0.900 0.108024691 0.52777778
## 482 Turtwig Grass 0.155 0.179738562 0.31388889
## 483 Grotle Grass 0.180 0.194444444 0.40000000
## 484 Torterra Grass 0.280 0.194444444 0.51111111
## 485 Chimchar Fire 0.305 0.194444444 0.32222222
## 486 Monferno Fire 0.405 0.239316239 0.43333333
## 487 Infernape Fire 0.540 0.208137715 0.57777778
## 488 Piplup Water 0.200 0.189092762 0.31111111
## 489 Prinplup Water 0.250 0.172839506 0.40833333
## 490 Empoleon Water 0.300 0.172839506 0.54722222
## 491 Starly Normal 0.300 0.259259259 0.23611111
## 492 Staravia Normal 0.400 0.237654321 0.31944444
## 493 Staraptor Normal 0.500 0.254273504 0.47222222
## 494 Bidoof Normal 0.155 0.286805556 0.22222222
## 495 Bibarel Normal 0.355 0.256018519 0.38888889
## 496 Kricketot Bug 0.125 0.175474255 0.13888889
## 497 Kricketune Bug 0.325 0.293572985 0.38888889
## 498 Shinx Electric 0.225 0.257352941 0.29166667
## 499 Luxio Electric 0.300 0.238095238 0.40277778
## 500 Luxray Electric 0.350 0.196905767 0.59722222
## 501 Budew Grass 0.275 0.148148148 0.22222222
## 502 Roserade Grass 0.450 0.137254902 0.54166667
## 503 Cranidos Rock 0.290 0.372222222 0.43055556
## 504 Rampardos Rock 0.290 0.342929293 0.63888889
## 505 Shieldon Rock 0.150 0.056634304 0.23333333
## 506 Bastiodon Rock 0.150 0.076252723 0.27500000
## 507 Burmy Plant Cloak Bug 0.180 0.172839506 0.16111111
## 508 Burmy Sandy Cloak Bug 0.180 0.172839506 0.16111111
## 509 Burmy Trash Cloak Bug 0.180 0.172839506 0.16111111
## 510 Wormadam Plant Cloak Bug 0.180 0.122807018 0.38333333
## 511 Wormadam Sandy Cloak Bug 0.180 0.122807018 0.38333333
## 512 Wormadam Trash Cloak Bug 0.180 0.122807018 0.38333333
## 513 Mothim Bug 0.330 0.272222222 0.52222222
## 514 Combee Bug 0.350 0.138888889 0.16666667
## 515 Vespiquen Bug 0.200 0.133442266 0.44444444
## 516 Pachirisu Electric 0.475 0.145833333 0.25000000
## 517 Buizel Water 0.425 0.329059829 0.34722222
## 518 Floatzel Water 0.575 0.314814815 0.52777778
## 519 Cherubi Grass 0.175 0.178571429 0.26944444
## 520 Cherrim Grass 0.425 0.183933934 0.40833333
## 521 Shellos Water 0.170 0.268686869 0.29166667
## 522 Gastrodon Water 0.195 0.287777778 0.48611111
## 523 Ambipom Normal 0.575 0.220959596 0.44444444
## 524 Drifloon Ghost 0.350 0.448717949 0.30555556
## 525 Drifblim Ghost 0.400 0.595238095 0.47222222
## 526 Buneary Normal 0.425 0.213888889 0.30555556
## 527 Lopunny Normal 0.525 0.140432099 0.36111111
## 528 Lopunny Mega Lopunny Normal 0.675 0.133040936 0.52777778
## 529 Mismagius Ghost 0.525 0.141414141 0.45833333
## 530 Honchkrow Dark 0.355 0.373931624 0.63888889
## 531 Glameow Normal 0.425 0.241209564 0.26944444
## 532 Purugly Normal 0.560 0.224480578 0.40555556
## 533 Chingling Psychic 0.225 0.175000000 0.26388889
## 534 Stunky Poison 0.370 0.278409091 0.28888889
## 535 Skuntank Poison 0.420 0.312934028 0.45555556
## 536 Bronzor Steel 0.115 0.128875969 0.13333333
## 537 Bronzong Steel 0.165 0.112308429 0.46666667
## 538 Bonsly Rock 0.050 0.138888889 0.25000000
## 539 Mime Jr. Psychic 0.300 0.057613169 0.26388889
## 540 Happiny Normal 0.150 0.555555556 0.05555556
## 541 Chatot Normal 0.455 0.339719029 0.43611111
## 542 Spiritomb Ghost 0.175 0.090020576 0.51111111
## 543 Gible Dragon 0.210 0.250617284 0.30555556
## 544 Gabite Dragon 0.410 0.220370370 0.38888889
## 545 Garchomp Dragon 0.510 0.233333333 0.58333333
## 546 Garchomp Mega Garchomp Dragon 0.460 0.200000000 0.80555556
## 547 Munchlax Normal 0.025 0.420000000 0.34722222
## 548 Riolu Fighting 0.300 0.194444444 0.29166667
## 549 Lucario Fighting 0.450 0.194444444 0.62500000
## 550 Lucario Mega Lucario Fighting 0.560 0.172292546 0.79166667
## 551 Hippopotas Ground 0.160 0.220370370 0.30555556
## 552 Hippowdon Ground 0.235 0.221052632 0.50000000
## 553 Skorupi Poison 0.325 0.107279693 0.22222222
## 554 Drapion Poison 0.475 0.147147147 0.41666667
## 555 Croagunk Poison 0.250 0.233333333 0.33888889
## 556 Toxicroak Poison 0.425 0.248290598 0.53333333
## 557 Carnivine Grass 0.230 0.199845679 0.52777778
## 558 Finneon Water 0.330 0.162867996 0.27222222
## 559 Lumineon Water 0.455 0.165637860 0.38333333
## 560 Mantyke Water 0.250 0.102941176 0.22222222
## 561 Snover Grass 0.200 0.212121212 0.34444444
## 562 Abomasnow Grass 0.300 0.218750000 0.51111111
## 563 Abomasnow Mega Abomasnow Grass 0.150 0.166666667 0.73333333
## 564 Weavile Dark 0.625 0.181481481 0.45833333
## 565 Magnezone Electric 0.300 0.132791328 0.55555556
## 566 Lickilicky Normal 0.250 0.225146199 0.45833333
## 567 Rhyperior Ground 0.200 0.241741742 0.54166667
## 568 Tangrowth Grass 0.250 0.222222222 0.58333333
## 569 Electivire Electric 0.475 0.191885965 0.60555556
## 570 Magmortar Fire 0.415 0.180041152 0.61111111
## 571 Togekiss Fairy 0.400 0.157407407 0.47222222
## 572 Yanmega Bug 0.475 0.235524257 0.53333333
## 573 Leafeon Grass 0.475 0.129629630 0.47222222
## 574 Glaceon Ice 0.325 0.123306233 0.52777778
## 575 Gliscor Ground 0.475 0.145833333 0.38888889
## 576 Mamoswine Ice 0.400 0.305555556 0.55555556
## 577 Porygon-Z Normal 0.450 0.227969349 0.59722222
## 578 Gallade Psychic 0.400 0.146913580 0.52777778
## 579 Gallade Mega Gallade Psychic 0.550 0.125925926 0.63888889
## 580 Probopass Rock 0.200 0.079096045 0.36111111
## 581 Dusknoir Ghost 0.225 0.064814815 0.45833333
## 582 Froslass Ice 0.550 0.194444444 0.44444444
## 583 Rotom Electric 0.455 0.126262626 0.40277778
## 584 Rotom Heat Rotom Electric 0.430 0.090861890 0.47222222
## 585 Rotom Wash Rotom Electric 0.430 0.090861890 0.47222222
## 586 Rotom Frost Rotom Electric 0.430 0.090861890 0.47222222
## 587 Rotom Fan Rotom Electric 0.430 0.090861890 0.47222222
## 588 Rotom Mow Rotom Electric 0.430 0.090861890 0.47222222
## 589 Uxie Psychic 0.475 0.112179487 0.41666667
## 590 Mesprit Psychic 0.400 0.148148148 0.58333333
## 591 Azelf Psychic 0.575 0.208333333 0.69444444
## 592 Dialga Steel 0.450 0.176767677 0.75000000
## 593 Dialga Origin Forme Steel 0.450 0.162037037 0.69444444
## 594 Palkia Water 0.500 0.159090909 0.75000000
## 595 Palkia Origin Forme Water 0.600 0.159090909 0.69444444
## 596 Heatran Fire 0.385 0.166928721 0.61111111
## 597 Regigigas Normal 0.500 0.194444444 0.66666667
## 598 Giratina Altered Forme Ghost 0.450 0.243055556 0.55555556
## 599 Giratina Origin Forme Ghost 0.450 0.291666667 0.66666667
## 600 Cresselia Psychic 0.425 0.202898551 0.40277778
## 601 Phione Water 0.400 0.194444444 0.44444444
## 602 Manaphy Water 0.500 0.194444444 0.55555556
## 603 Darkrai Dark 0.625 0.151234568 0.62500000
## 604 Shaymin Land Forme Grass 0.500 0.194444444 0.55555556
## 605 Shaymin Sky Forme Grass 0.635 0.259259259 0.61944444
## 606 Arceus Normal 0.600 0.194444444 0.66666667
## 607 Victini Psychic 0.500 0.194444444 0.55555556
## 608 Snivy Grass 0.315 0.159090909 0.25000000
## 609 Servine Grass 0.415 0.155555556 0.33333333
## 610 Serperior Grass 0.565 0.153508772 0.41666667
## 611 Tepig Fire 0.225 0.280864198 0.30000000
## 612 Pignite Fire 0.275 0.318181818 0.45277778
## 613 Emboar Fire 0.325 0.329059829 0.61944444
## 614 Oshawott Water 0.225 0.237654321 0.32777778
## 615 Dewott Water 0.300 0.243055556 0.43888889
## 616 Samurott Water 0.350 0.238351254 0.57777778
## 617 Samurott Hisuian Samurott Water 0.425 0.241379310 0.57777778
## 618 Patrat Normal 0.210 0.224358974 0.25000000
## 619 Watchog Normal 0.385 0.169082126 0.40277778
## 620 Lillipup Normal 0.275 0.194444444 0.23611111
## 621 Herdier Normal 0.300 0.194444444 0.31944444
## 622 Stoutland Normal 0.400 0.183641975 0.43055556
## 623 Purrloin Dark 0.330 0.215465465 0.27777778
## 624 Liepard Dark 0.530 0.248888889 0.48888889
## 625 Pansage Grass 0.320 0.202546296 0.29444444
## 626 Simisage Grass 0.505 0.231481481 0.54444444
## 627 Pansear Fire 0.320 0.202546296 0.29444444
## 628 Simisear Fire 0.505 0.231481481 0.54444444
## 629 Panpour Water 0.320 0.202546296 0.29444444
## 630 Simipour Water 0.505 0.231481481 0.54444444
## 631 Munna Psychic 0.120 0.295555556 0.25555556
## 632 Musharna Psychic 0.145 0.250617284 0.45000000
## 633 Pidove Normal 0.215 0.243055556 0.25277778
## 634 Tranquill Normal 0.325 0.231837607 0.35277778
## 635 Unfezant Normal 0.465 0.230452675 0.50000000
## 636 Blitzle Electric 0.380 0.273437500 0.30555556
## 637 Zebstrika Electric 0.580 0.231481481 0.50000000
## 638 Roggenrola Rock 0.075 0.194444444 0.27777778
## 639 Boldore Rock 0.100 0.187739464 0.43055556
## 640 Gigalith Rock 0.125 0.157407407 0.54166667
## 641 Woobat Psychic 0.360 0.293927649 0.27777778
## 642 Swoobat Psychic 0.570 0.236868687 0.37222222
## 643 Drilbur Ground 0.340 0.274509804 0.31944444
## 644 Excadrill Ground 0.440 0.342222222 0.51388889
## 645 Audino Normal 0.250 0.232881137 0.33333333
## 646 Audino Mega Audino Normal 0.250 0.158950617 0.38888889
## 647 Timburr Fighting 0.175 0.324074074 0.29166667
## 648 Gurdurr Fighting 0.200 0.244855967 0.40277778
## 649 Conkeldurr Fighting 0.225 0.255208333 0.54166667
## 650 Tympole Water 0.320 0.243055556 0.27777778
## 651 Palpitoad Water 0.345 0.265151515 0.36111111
## 652 Seismitoad Water 0.370 0.272222222 0.50000000
## 653 Throh Fighting 0.225 0.274509804 0.36111111
## 654 Sawk Fighting 0.425 0.194444444 0.43055556
## 655 Sewaddle Bug 0.210 0.134615385 0.25833333
## 656 Swadloon Bug 0.210 0.125816993 0.31388889
## 657 Leavanny Bug 0.460 0.182291667 0.48055556
## 658 Venipede Bug 0.285 0.119047619 0.20833333
## 659 Whirlipede Bug 0.235 0.087390762 0.26388889
## 660 Scolipede Bug 0.560 0.147679325 0.43055556
## 661 Cottonee Grass 0.330 0.141414141 0.17777778
## 662 Whimsicott Grass 0.580 0.145833333 0.40000000
## 663 Petilil Grass 0.150 0.175000000 0.29166667
## 664 Lilligant Grass 0.450 0.181481481 0.47222222
## 665 Lilligant Hisuian Lilligant Grass 0.525 0.181481481 0.43055556
## 666 Basculin Red-Striped Form Water 0.490 0.226851852 0.47777778
## 667 Basculin Blue-Striped Form Water 0.490 0.226851852 0.47777778
## 668 Basculin White-Striped Form Water 0.490 0.226851852 0.47777778
## 669 Sandile Ground 0.325 0.277777778 0.29722222
## 670 Krokorok Ground 0.370 0.259259259 0.35277778
## 671 Krookodile Ground 0.460 0.246296296 0.50555556
## 672 Darumaka Fire 0.250 0.302469136 0.29166667
## 673 Darumaka Galarian Darumaka Ice 0.250 0.302469136 0.29166667
## 674 Darmanitan Standard Mode Fire 0.475 0.371212121 0.47222222
## 675 Darmanitan Zen Mode Fire 0.275 0.194444444 0.47222222
## 676 Darmanitan Galarian Standard Mode Ice 0.475 0.371212121 0.47222222
## 677 Darmanitan Galarian Zen Mode Ice 0.675 0.371212121 0.52777778
## 678 Maractus Grass 0.300 0.217661692 0.53333333
## 679 Dwebble Bug 0.275 0.162037037 0.27777778
## 680 Crustle Bug 0.225 0.136111111 0.47222222
## 681 Scraggy Dark 0.240 0.138888889 0.30555556
## 682 Scrafty Dark 0.290 0.109903382 0.37500000
## 683 Sigilyph Psychic 0.485 0.175000000 0.44722222
## 684 Yamask Ghost 0.150 0.098518519 0.23611111
## 685 Yamask Galarian Yamask Ground 0.150 0.098518519 0.23611111
## 686 Cofagrigus Ghost 0.150 0.090222222 0.40277778
## 687 Tirtouga Water 0.110 0.141891892 0.36388889
## 688 Carracosta Water 0.160 0.145342312 0.53055556
## 689 Archen Rock 0.350 0.237654321 0.51666667
## 690 Archeops Rock 0.550 0.224358974 0.70000000
## 691 Trubbish Poison 0.325 0.156810036 0.25000000
## 692 Garbodor Poison 0.375 0.189701897 0.43055556
## 693 Zorua Dark 0.325 0.194444444 0.40277778
## 694 Zorua Hisuian Zorua Normal 0.350 0.170138889 0.40277778
## 695 Zoroark Dark 0.525 0.194444444 0.62500000
## 696 Zoroark Hisuian Zoroark Normal 0.550 0.178240741 0.62500000
## 697 Minccino Normal 0.375 0.267361111 0.25000000
## 698 Cinccino Normal 0.575 0.243055556 0.44444444
## 699 Gothita Psychic 0.225 0.152173913 0.23611111
## 700 Gothorita Psychic 0.275 0.150537634 0.33333333
## 701 Gothitelle Psychic 0.325 0.132791328 0.41666667
## 702 Solosis Psychic 0.100 0.194444444 0.37500000
## 703 Duosion Psychic 0.150 0.229797980 0.45833333
## 704 Reuniclus Psychic 0.150 0.267361111 0.52777778
## 705 Ducklett Water 0.275 0.241111111 0.24444444
## 706 Swanna Water 0.490 0.231481481 0.48333333
## 707 Vanillite Ice 0.220 0.127272727 0.31944444
## 708 Vanillish Ice 0.295 0.141666667 0.40277778
## 709 Vanilluxe Ice 0.395 0.153395062 0.56944444
## 710 Deerling Normal 0.375 0.233333333 0.27777778
## 711 Sawsbuck Normal 0.475 0.222222222 0.44444444
## 712 Emolga Electric 0.515 0.178240741 0.41666667
## 713 Karrablast Bug 0.300 0.216049383 0.31944444
## 714 Escavalier Bug 0.100 0.129629630 0.54166667
## 715 Foongus Grass 0.075 0.268333333 0.30555556
## 716 Amoonguss Grass 0.150 0.295555556 0.47222222
## 717 Frillish Water 0.200 0.158436214 0.29166667
## 718 Jellicent Water 0.300 0.222222222 0.40277778
## 719 Alomomola Water 0.325 0.513333333 0.31944444
## 720 Joltik Bug 0.325 0.194444444 0.28888889
## 721 Galvantula Bug 0.540 0.226851852 0.48333333
## 722 Ferroseed Grass 0.050 0.096672944 0.20555556
## 723 Ferrothorn Grass 0.100 0.116509222 0.41111111
## 724 Klink Steel 0.150 0.119658120 0.27777778
## 725 Klang Steel 0.250 0.129629630 0.41666667
## 726 Klinklang Steel 0.450 0.116666667 0.47222222
## 727 Tynamo Electric 0.300 0.170138889 0.27777778
## 728 Eelektrik Electric 0.200 0.180555556 0.44444444
## 729 Eelektross Electric 0.250 0.206597222 0.61111111
## 730 Elgyem Psychic 0.150 0.194444444 0.38888889
## 731 Beheeyem Psychic 0.200 0.171568627 0.55555556
## 732 Litwick Ghost 0.100 0.176767677 0.26388889
## 733 Lampent Ghost 0.275 0.194444444 0.37500000
## 734 Chandelure Ghost 0.400 0.129629630 0.55555556
## 735 Axew Dragon 0.285 0.178888889 0.32500000
## 736 Fraxure Dragon 0.335 0.213888889 0.43611111
## 737 Haxorus Dragon 0.485 0.184722222 0.57500000
## 738 Cubchoo Ice 0.200 0.267361111 0.36111111
## 739 Beartic Ice 0.250 0.230902778 0.55555556
## 740 Cryogonal Ice 0.525 0.168168168 0.40277778
## 741 Shelmet Bug 0.125 0.129629630 0.22222222
## 742 Accelgor Bug 0.725 0.311111111 0.47222222
## 743 Stunfisk Ground 0.160 0.231633273 0.40833333
## 744 Stunfisk Galarian Stunfisk Ground 0.160 0.231633273 0.40833333
## 745 Mienfoo Fighting 0.325 0.175000000 0.38888889
## 746 Mienshao Fighting 0.525 0.210648148 0.61111111
## 747 Druddigon Dragon 0.240 0.166358025 0.50000000
## 748 Golett Ground 0.175 0.229444444 0.30277778
## 749 Golurk Ground 0.275 0.216319444 0.49722222
## 750 Pawniard Dark 0.300 0.159090909 0.34722222
## 751 Bisharp Dark 0.350 0.148692810 0.51388889
## 752 Bouffalant Normal 0.275 0.194444444 0.41666667
## 753 Rufflet Normal 0.300 0.272222222 0.33333333
## 754 Braviary Normal 0.400 0.259259259 0.50000000
## 755 Braviary Hisuian Braviary Psychic 0.325 0.305555556 0.54166667
## 756 Vullaby Dark 0.300 0.194444444 0.27777778
## 757 Mandibuzz Dark 0.400 0.213888889 0.33333333
## 758 Heatmor Fire 0.325 0.250420875 0.56111111
## 759 Durant Bug 0.545 0.140972222 0.43611111
## 760 Deino Dark 0.190 0.202222222 0.30555556
## 761 Zweilous Dark 0.290 0.200000000 0.41666667
## 762 Hydreigon Dark 0.490 0.198765432 0.63888889
## 763 Larvesta Bug 0.300 0.194444444 0.37500000
## 764 Volcarona Bug 0.500 0.194444444 0.54166667
## 765 Cobalion Steel 0.540 0.176064124 0.50000000
## 766 Terrakion Rock 0.540 0.196604938 0.55833333
## 767 Virizion Grass 0.540 0.176064124 0.50000000
## 768 Tornadus Incarnate Forme Flying 0.555 0.204814815 0.66666667
## 769 Tornadus Therian Forme Flying 0.605 0.180718954 0.58333333
## 770 Thundurus Incarnate Forme Electric 0.555 0.204814815 0.66666667
## 771 Thundurus Therian Forme Electric 0.505 0.204814815 0.69444444
## 772 Reshiram Dragon 0.450 0.176767677 0.75000000
## 773 Zekrom Dragon 0.450 0.176767677 0.75000000
## 774 Landorus Incarnate Forme Ground 0.505 0.203594771 0.66666667
## 775 Landorus Therian Forme Ground 0.455 0.203594771 0.69444444
## 776 Kyurem Dragon 0.475 0.270061728 0.72222222
## 777 Kyurem White Kyurem Dragon 0.475 0.255847953 0.80555556
## 778 Kyurem Black Kyurem Dragon 0.475 0.255847953 0.80555556
## 779 Keldeo Ordinary Form Water 0.540 0.196604938 0.55833333
## 780 Keldeo Resolute Form Water 0.540 0.196604938 0.55833333
## 781 Meloetta Aria Forme Normal 0.450 0.189701897 0.56944444
## 782 Meloetta Pirouette Forme Normal 0.640 0.232867598 0.56944444
## 783 Genesect Bug 0.495 0.145321637 0.66666667
## 784 Chespin Grass 0.190 0.197979798 0.30277778
## 785 Quilladin Grass 0.285 0.155047204 0.37222222
## 786 Chesnaught Grass 0.320 0.173716864 0.50277778
## 787 Fennekin Fire 0.300 0.155555556 0.29722222
## 788 Braixen Fire 0.365 0.179253472 0.41388889
## 789 Delphox Fire 0.520 0.169573643 0.50833333
## 790 Froakie Water 0.355 0.189814815 0.32777778
## 791 Frogadier Water 0.485 0.194444444 0.40555556
## 792 Greninja Water 0.610 0.202898551 0.55000000
## 793 Greninja Ash-Greninja Water 0.660 0.202898551 0.82777778
## 794 Bunnelby Normal 0.285 0.199699700 0.18888889
## 795 Diggersby Normal 0.390 0.214646465 0.29444444
## 796 Fletchling Normal 0.310 0.216049383 0.25000000
## 797 Fletchinder Fire 0.420 0.225337487 0.35833333
## 798 Talonflame Fire 0.630 0.216666667 0.43055556
## 799 Scatterbug Bug 0.175 0.227350427 0.17222222
## 800 Spewpa Bug 0.145 0.194444444 0.13611111
## 801 Vivillon Bug 0.445 0.311111111 0.39444444
## 802 Litleo Fire 0.360 0.215277778 0.34166667
## 803 Pyroar Fire 0.530 0.242351047 0.49166667
## 804 Flabébé Fairy 0.210 0.145009416 0.27500000
## 805 Floette Fairy 0.260 0.144827586 0.33333333
## 806 Florges Fairy 0.375 0.136636637 0.49166667
## 807 Skiddo Grass 0.260 0.244444444 0.35277778
## 808 Gogoat Grass 0.340 0.334498834 0.54722222
## 809 Pancham Fighting 0.215 0.236868687 0.35555556
## 810 Pangoro Fighting 0.290 0.247949292 0.53611111
## 811 Furfrou Normal 0.510 0.194444444 0.40277778
## 812 Espurr Psychic 0.340 0.211500975 0.30833333
## 813 Meowstic Male Psychic 0.520 0.183297948 0.36388889
## 814 Meowstic Female Psychic 0.520 0.183297948 0.36388889
## 815 Honedge Steel 0.140 0.127737226 0.31944444
## 816 Doublade Steel 0.175 0.115298716 0.43055556
## 817 Aegislash Shield Forme Steel 0.300 0.083333333 0.27777778
## 818 Aegislash Blade Forme Steel 0.300 0.233333333 0.77777778
## 819 Spritzee Fairy 0.115 0.242666667 0.31944444
## 820 Aromatisse Fairy 0.145 0.243961353 0.47500000
## 821 Swirlix Fairy 0.245 0.196025294 0.29722222
## 822 Slurpuff Fairy 0.360 0.198067633 0.45833333
## 823 Inkay Dark 0.225 0.208193042 0.25277778
## 824 Malamar Dark 0.365 0.205180641 0.44444444
## 825 Binacle Rock 0.250 0.132791328 0.25277778
## 826 Barbaracle Rock 0.340 0.139303483 0.44166667
## 827 Skrelp Poison 0.150 0.162037037 0.33333333
## 828 Dragalge Poison 0.220 0.118675013 0.47777778
## 829 Clauncher Water 0.220 0.155555556 0.30833333
## 830 Clawitzer Water 0.295 0.155994978 0.53611111
## 831 Helioptile Electric 0.350 0.225146199 0.27500000
## 832 Heliolisk Electric 0.545 0.165144597 0.45555556
## 833 Tyrunt Rock 0.240 0.184881603 0.37222222
## 834 Tyrantrum Rock 0.355 0.179151061 0.52777778
## 835 Amaura Rock 0.230 0.264995084 0.35000000
## 836 Aurorus Rock 0.290 0.291666667 0.48888889
## 837 Sylveon Fairy 0.300 0.189458689 0.48611111
## 838 Hawlucha Fighting 0.590 0.219806763 0.46111111
## 839 Dedenne Electric 0.505 0.210125448 0.38611111
## 840 Carbink Rock 0.250 0.064814815 0.27777778
## 841 Goomy Dragon 0.200 0.159090909 0.29166667
## 842 Sliggoo Dragon 0.300 0.159303882 0.43888889
## 843 Sliggoo Hisuian Sliggoo Steel 0.200 0.115079365 0.43888889
## 844 Goodra Dragon 0.400 0.159090909 0.58333333
## 845 Goodra Hisuian Goodra Steel 0.300 0.124444444 0.58333333
## 846 Klefki Steel 0.375 0.124531835 0.44444444
## 847 Phantump Ghost 0.190 0.154835391 0.33333333
## 848 Trevenant Ghost 0.280 0.209212377 0.48611111
## 849 Pumpkaboo Average Size Ghost 0.255 0.152444444 0.30555556
## 850 Pumpkaboo Small Size Ghost 0.280 0.136888889 0.30555556
## 851 Pumpkaboo Large Size Ghost 0.230 0.168000000 0.30555556
## 852 Pumpkaboo Super Size Ghost 0.205 0.183555556 0.30555556
## 853 Gourgeist Average Size Ghost 0.420 0.128313593 0.41111111
## 854 Gourgeist Small Size Ghost 0.495 0.108573040 0.39722222
## 855 Gourgeist Large Size Ghost 0.345 0.148054146 0.42500000
## 856 Gourgeist Super Size Ghost 0.270 0.167794698 0.43888889
## 857 Bergmite Ice 0.140 0.178240741 0.28055556
## 858 Avalugg Ice 0.140 0.160628019 0.44722222
## 859 Avalugg Hisuian Avalugg Ice 0.190 0.167929293 0.44722222
## 860 Noibat Flying 0.275 0.207407407 0.20833333
## 861 Noivern Flying 0.615 0.206597222 0.46388889
## 862 Xerneas Fairy 0.495 0.253886010 0.72777778
## 863 Yveltal Dark 0.495 0.253886010 0.72777778
## 864 Zygarde 50% Forme Dragon 0.475 0.194444444 0.50277778
## 865 Zygarde 10% Forme Dragon 0.575 0.134615385 0.44722222
## 866 Zygarde Complete Forme Dragon 0.425 0.388888889 0.53055556
## 867 Diancie Rock 0.250 0.064814815 0.55555556
## 868 Diancie Mega Diancie Rock 0.550 0.088383838 0.88888889
## 869 Hoopa Hoopa Confined Psychic 0.350 0.163742690 0.72222222
## 870 Hoopa Hoopa Unbound Psychic 0.400 0.163742690 0.91666667
## 871 Volcanion Fire 0.350 0.148148148 0.66666667
## 872 Rowlet Grass 0.210 0.251851852 0.29166667
## 873 Dartrix Grass 0.260 0.209195402 0.40277778
## 874 Decidueye Grass 0.350 0.173333333 0.57500000
## 875 Decidueye Hisuian Decidueye Grass 0.300 0.195555556 0.57500000
## 876 Litten Fire 0.350 0.218750000 0.34722222
## 877 Torracat Fire 0.450 0.252777778 0.45833333
## 878 Incineroar Fire 0.300 0.205246914 0.54166667
## 879 Popplio Water 0.200 0.176767677 0.33333333
## 880 Brionne Water 0.250 0.155555556 0.44444444
## 881 Primarina Water 0.300 0.163742690 0.55555556
## 882 Pikipek Normal 0.325 0.226851852 0.29166667
## 883 Trumbeak Normal 0.375 0.213888889 0.34722222
## 884 Toucannon Normal 0.300 0.207407407 0.54166667
## 885 Yungoos Normal 0.225 0.311111111 0.27777778
## 886 Gumshoos Normal 0.225 0.285185185 0.45833333
## 887 Grubbin Bug 0.230 0.203086420 0.32500000
## 888 Charjabug Bug 0.180 0.130392157 0.38055556
## 889 Vikavolt Bug 0.215 0.181481481 0.59722222
## 890 Crabrawler Fighting 0.315 0.175747863 0.34444444
## 891 Crabominable Fighting 0.215 0.261959877 0.53888889
## 892 Oricorio Baile Style Fire 0.465 0.208333333 0.46666667
## 893 Oricorio Pom-Pom Style Electric 0.465 0.208333333 0.46666667
## 894 Oricorio Pa'u Style Psychic 0.465 0.208333333 0.46666667
## 895 Oricorio Sensu Style Ghost 0.465 0.208333333 0.46666667
## 896 Cutiefly Bug 0.420 0.194444444 0.27777778
## 897 Ribombee Bug 0.620 0.179487179 0.41666667
## 898 Rockruff Rock 0.300 0.218750000 0.26388889
## 899 Rockruff Own Tempo Rockruff Rock 0.300 0.218750000 0.26388889
## 900 Lycanroc Midday Form Rock 0.560 0.224358974 0.47222222
## 901 Lycanroc Midnight Form Rock 0.410 0.220370370 0.47222222
## 902 Lycanroc Dusk Form Rock 0.550 0.224358974 0.47777778
## 903 Wishiwashi Solo Form Water 0.200 0.388888889 0.12500000
## 904 Wishiwashi School Form Water 0.150 0.066037736 0.77777778
## 905 Mareanie Poison 0.225 0.170565302 0.26666667
## 906 Toxapex Poison 0.175 0.066137566 0.32222222
## 907 Mudbray Ground 0.225 0.217777778 0.40277778
## 908 Mudsdale Ground 0.175 0.210210210 0.50000000
## 909 Dewpider Water 0.135 0.119175627 0.22222222
## 910 Araquanid Water 0.210 0.118055556 0.33333333
## 911 Fomantis Grass 0.175 0.222222222 0.29166667
## 912 Lurantis Grass 0.225 0.151234568 0.51388889
## 913 Morelull Grass 0.075 0.119658120 0.27777778
## 914 Shiinotic Grass 0.150 0.129629630 0.37500000
## 915 Salandit Poison 0.385 0.233333333 0.31944444
## 916 Salazzle Poison 0.585 0.220370370 0.48611111
## 917 Stufful Normal 0.250 0.272222222 0.33333333
## 918 Bewear Normal 0.300 0.333333333 0.50000000
## 919 Bounsweet Grass 0.160 0.214912281 0.16666667
## 920 Steenee Grass 0.310 0.210648148 0.22222222
## 921 Tsareena Grass 0.360 0.142857143 0.47222222
## 922 Comfey Fairy 0.500 0.099166667 0.37222222
## 923 Oranguru Normal 0.300 0.184210526 0.41666667
## 924 Passimian Fighting 0.400 0.259259259 0.44444444
## 925 Wimpod Bug 0.400 0.138888889 0.15277778
## 926 Golisopod Bug 0.200 0.126811594 0.51388889
## 927 Sandygast Ghost 0.075 0.171111111 0.34722222
## 928 Palossand Ghost 0.175 0.178678679 0.48611111
## 929 Pyukumuku Water 0.025 0.082264957 0.25000000
## 930 Type: Null Normal 0.295 0.194444444 0.52777778
## 931 Silvally Normal 0.475 0.194444444 0.52777778
## 932 Minior Meteor Form Rock 0.300 0.116666667 0.33333333
## 933 Minior Core Form Rock 0.600 0.194444444 0.55555556
## 934 Komala Normal 0.325 0.157986111 0.52777778
## 935 Turtonator Fire 0.180 0.106060606 0.46944444
## 936 Togedemaru Electric 0.480 0.185866013 0.38333333
## 937 Mimikyu Ghost 0.480 0.115615616 0.38888889
## 938 Bruxish Water 0.460 0.188888889 0.48611111
## 939 Drampa Normal 0.180 0.172348485 0.54166667
## 940 Dhelmise Ghost 0.200 0.143274854 0.60277778
## 941 Jangmo-o Dragon 0.225 0.159090909 0.27777778
## 942 Hakamo-o Dragon 0.325 0.133680556 0.38888889
## 943 Kommo-o Dragon 0.425 0.126811594 0.58333333
## 944 Tapu Koko Electric 0.650 0.170138889 0.58333333
## 945 Tapu Lele Psychic 0.475 0.143274854 0.59722222
## 946 Tapu Bulu Grass 0.375 0.129629630 0.59722222
## 947 Tapu Fini Water 0.425 0.111111111 0.47222222
## 948 Cosmog Psychic 0.185 0.269713262 0.16111111
## 949 Cosmoem Psychic 0.185 0.063825276 0.16111111
## 950 Solgaleo Psychic 0.485 0.271825397 0.69444444
## 951 Lunala Psychic 0.485 0.271825397 0.69444444
## 952 Nihilego Rock 0.515 0.238139825 0.50000000
## 953 Buzzwole Bug 0.395 0.216724537 0.53333333
## 954 Pheromosa Bug 0.755 0.373123123 0.76111111
## 955 Xurkitree Electric 0.415 0.227308294 0.72777778
## 956 Celesteela Steel 0.305 0.184912854 0.57777778
## 957 Kartana Grass 0.545 0.141632373 0.66666667
## 958 Guzzlord Dark 0.215 0.818134172 0.55000000
## 959 Necrozma Psychic 0.395 0.198538012 0.65000000
## 960 Necrozma Dusk Mane Necrozma Psychic 0.385 0.159839925 0.75000000
## 961 Necrozma Dawn Wings Necrozma Psychic 0.385 0.159839925 0.75000000
## 962 Necrozma Ultra Necrozma Psychic 0.645 0.194444444 0.92777778
## 963 Magearna Steel 0.325 0.135265700 0.62500000
## 964 Marshadow Fighting 0.625 0.205882353 0.59722222
## 965 Poipole Poison 0.365 0.194444444 0.40555556
## 966 Naganadel Poison 0.605 0.194444444 0.55555556
## 967 Stakataka Rock 0.065 0.076032764 0.51111111
## 968 Blacephalon Fire 0.535 0.156144781 0.77222222
## 969 Zeraora Electric 0.715 0.220788530 0.59444444
## 970 Meltan Steel 0.170 0.178888889 0.33333333
## 971 Melmetal Steel 0.170 0.252403846 0.61944444
## 972 Grookey Grass 0.325 0.216049383 0.29166667
## 973 Thwackey Grass 0.400 0.209401709 0.38888889
## 974 Rillaboom Grass 0.425 0.243055556 0.51388889
## 975 Scorbunny Fire 0.345 0.243055556 0.30833333
## 976 Raboot Fire 0.470 0.210648148 0.39166667
## 977 Cinderace Fire 0.595 0.207407407 0.50277778
## 978 Sobble Water 0.350 0.243055556 0.30555556
## 979 Drizzile Water 0.450 0.229797980 0.43055556
## 980 Inteleon Water 0.600 0.209401709 0.58333333
## 981 Skwovet Normal 0.125 0.302469136 0.25000000
## 982 Greedent Normal 0.100 0.274509804 0.41666667
## 983 Rookidee Flying 0.285 0.211111111 0.22222222
## 984 Corvisquire Flying 0.385 0.240404040 0.30555556
## 985 Corviknight Flying 0.335 0.200584795 0.38888889
## 986 Blipbug Bug 0.225 0.149572650 0.12500000
## 987 Dottler Bug 0.150 0.114379085 0.23611111
## 988 Orbeetle Bug 0.450 0.101449275 0.34722222
## 989 Nickit Dark 0.250 0.194444444 0.20833333
## 990 Thievul Dark 0.450 0.181481481 0.40277778
## 991 Gossifleur Grass 0.050 0.129629630 0.22222222
## 992 Eldegoss Grass 0.300 0.111111111 0.36111111
## 993 Wooloo Normal 0.240 0.163333333 0.22222222
## 994 Dubwool Normal 0.440 0.147368421 0.38888889
## 995 Chewtle Water 0.220 0.220959596 0.28333333
## 996 Drednaw Water 0.370 0.221518987 0.45277778
## 997 Yamper Electric 0.130 0.229444444 0.23611111
## 998 Boltund Electric 0.605 0.223611111 0.50000000
## 999 Rolycoly Rock 0.150 0.116666667 0.22222222
## 1000 Carkol Rock 0.250 0.194444444 0.33333333
## 1001 Coalossal Rock 0.150 0.203703704 0.44444444
## 1002 Applin Grass 0.100 0.129629630 0.22222222
## 1003 Flapple Grass 0.350 0.194444444 0.56944444
## 1004 Appletun Grass 0.150 0.267361111 0.51388889
## 1005 Silicobra Ground 0.230 0.161777778 0.25555556
## 1006 Sandaconda Ground 0.355 0.143589744 0.47777778
## 1007 Cramorant Flying 0.425 0.181481481 0.47222222
## 1008 Arrokuda Water 0.330 0.227777778 0.28611111
## 1009 Barraskewda Water 0.680 0.215656566 0.50833333
## 1010 Toxel Electric 0.200 0.222222222 0.25555556
## 1011 Toxtricity Amped Form Electric 0.375 0.208333333 0.58888889
## 1012 Toxtricity Low Key Form Electric 0.375 0.208333333 0.58888889
## 1013 Sizzlipede Fire 0.225 0.204678363 0.31944444
## 1014 Centiskorch Fire 0.325 0.250896057 0.56944444
## 1015 Clobbopus Fighting 0.160 0.176767677 0.32777778
## 1016 Grapploct Fighting 0.210 0.183006536 0.52222222
## 1017 Sinistea Ghost 0.250 0.157126824 0.33055556
## 1018 Polteageist Ghost 0.350 0.130353818 0.55277778
## 1019 Hatenna Psychic 0.195 0.166666667 0.23888889
## 1020 Hattrem Psychic 0.245 0.160628019 0.35000000
## 1021 Hatterene Psychic 0.145 0.111952862 0.62777778
## 1022 Impidimp Dark 0.250 0.250000000 0.27777778
## 1023 Morgrem Dark 0.350 0.252777778 0.37500000
## 1024 Grimmsnarl Dark 0.300 0.263888889 0.59722222
## 1025 Obstagoon Dark 0.475 0.198717949 0.41666667
## 1026 Perrserker Steel 0.250 0.170138889 0.44444444
## 1027 Cursola Ghost 0.150 0.129629630 0.66666667
## 1028 Sirfetch'd Fighting 0.325 0.136220967 0.56388889
## 1029 Mr. Rime Ice 0.350 0.177777778 0.54166667
## 1030 Runerigus Ground 0.150 0.090222222 0.40277778
## 1031 Milcery Fairy 0.170 0.173267327 0.25000000
## 1032 Alcremie Fairy 0.320 0.128968254 0.47222222
## 1033 Falinks Fighting 0.375 0.157986111 0.47222222
## 1034 Pincurchin Electric 0.075 0.103703704 0.53333333
## 1035 Snom Ice 0.100 0.179487179 0.19444444
## 1036 Frosmoth Ice 0.325 0.181481481 0.52777778
## 1037 Stonjourner Rock 0.350 0.250896057 0.40277778
## 1038 Eiscue Ice Face Ice 0.250 0.145833333 0.40277778
## 1039 Eiscue Noice Face Ice 0.650 0.243055556 0.40277778
## 1040 Indeedee Male Psychic 0.475 0.155555556 0.47222222
## 1041 Indeedee Female Psychic 0.425 0.160130719 0.41666667
## 1042 Morpeko Full Belly Mode Electric 0.485 0.194444444 0.45833333
## 1043 Morpeko Hangry Mode Electric 0.485 0.194444444 0.45833333
## 1044 Cufant Steel 0.200 0.285714286 0.33333333
## 1045 Copperajah Steel 0.150 0.343800322 0.58333333
## 1046 Dracozolt Electric 0.375 0.218750000 0.50000000
## 1047 Arctozolt Electric 0.275 0.205882353 0.52777778
## 1048 Dracovish Water 0.375 0.194444444 0.44444444
## 1049 Arctovish Water 0.275 0.184210526 0.47222222
## 1050 Duraludon Steel 0.425 0.164983165 0.59722222
## 1051 Dreepy Dragon 0.410 0.181481481 0.27777778
## 1052 Drakloak Dragon 0.510 0.264444444 0.38888889
## 1053 Dragapult Dragon 0.710 0.228148148 0.61111111
## 1054 Zacian Hero of Many Battles Fairy 0.690 0.155555556 0.55555556
## 1055 Zacian Crowned Sword Fairy 0.740 0.155555556 0.63888889
## 1056 Zamazenta Hero of Many Battles Fighting 0.690 0.155555556 0.55555556
## 1057 Zamazenta Crowned Shield Fighting 0.640 0.127777778 0.55555556
## 1058 Eternatus Poison 0.650 0.286549708 0.63888889
## 1059 Eternatus Eternamax Poison 0.650 0.198333333 0.66666667
## 1060 Kubfu Fighting 0.360 0.212121212 0.39722222
## 1061 Urshifu Single Strike Style Fighting 0.485 0.243055556 0.53611111
## 1062 Urshifu Rapid Strike Style Fighting 0.485 0.243055556 0.53611111
## 1063 Zarude Dark 0.525 0.204166667 0.52777778
## 1064 Regieleki Electric 1.000 0.311111111 0.55555556
## 1065 Regidrago Dragon 0.400 0.777777778 0.55555556
## 1066 Glastrier Ice 0.150 0.162037037 0.58333333
## 1067 Spectrier Ghost 0.650 0.277777778 0.58333333
## 1068 Calyrex Psychic 0.400 0.243055556 0.44444444
## 1069 Calyrex Ice Rider Psychic 0.250 0.138888889 0.69444444
## 1070 Calyrex Shadow Rider Psychic 0.750 0.216049383 0.69444444
## 1071 Wyrdeer Normal 0.325 0.272486772 0.58333333
## 1072 Kleavor Bug 0.425 0.164983165 0.50000000
## 1073 Ursaluna Ground 0.250 0.273273273 0.51388889
## 1074 Ursaluna Bloodmoon Ground 0.260 0.237537538 0.56944444
## 1075 Basculegion Male Water 0.390 0.333333333 0.53333333
## 1076 Basculegion Female Water 0.390 0.333333333 0.53333333
## 1077 Sneasler Fighting 0.600 0.222222222 0.47222222
## 1078 Overqwil Dark 0.425 0.206597222 0.50000000
## 1079 Enamorus Incarnate Forme Fairy 0.530 0.191851852 0.69444444
## 1080 Enamorus Therian Forme Fairy 0.230 0.137037037 0.69444444
## 1081 Sprigatito Grass 0.325 0.157126824 0.29444444
## 1082 Floragato Grass 0.415 0.188271605 0.38888889
## 1083 Meowscarada Grass 0.615 0.211111111 0.53055556
## 1084 Fuecoco Fire 0.180 0.263187430 0.30000000
## 1085 Crocalor Fire 0.245 0.231617647 0.40277778
## 1086 Skeledirge Fire 0.330 0.231111111 0.51388889
## 1087 Quaxly Water 0.250 0.237654321 0.31944444
## 1088 Quaxwell Water 0.325 0.217777778 0.41666667
## 1089 Quaquaval Water 0.425 0.213261649 0.56944444
## 1090 Lechonk Normal 0.175 0.247058824 0.22222222
## 1091 Oinkologne Male Normal 0.325 0.275985663 0.44166667
## 1092 Oinkologne Female Normal 0.325 0.279513889 0.41388889
## 1093 Tarountula Bug 0.100 0.160130719 0.19444444
## 1094 Spidops Bug 0.175 0.131086142 0.36388889
## 1095 Nymble Bug 0.225 0.197435897 0.18611111
## 1096 Lokix Bug 0.460 0.207602339 0.42777778
## 1097 Pawmi Electric 0.300 0.388888889 0.25000000
## 1098 Pawmo Electric 0.425 0.291666667 0.34722222
## 1099 Pawmot Electric 0.525 0.209401709 0.51388889
## 1100 Tandemaus Normal 0.375 0.216049383 0.25000000
## 1101 Maushold Family of Four Normal 0.555 0.198467433 0.38888889
## 1102 Maushold Family of Three Normal 0.555 0.198467433 0.38888889
## 1103 Fidough Fairy 0.325 0.115111111 0.23611111
## 1104 Dachsbun Fairy 0.475 0.113675214 0.36111111
## 1105 Smoliv Grass 0.150 0.166087963 0.25833333
## 1106 Dolliv Grass 0.165 0.146537842 0.36388889
## 1107 Arboliva Grass 0.195 0.152428811 0.53888889
## 1108 Squawkabilly Green Plumage Normal 0.460 0.312636166 0.39166667
## 1109 Squawkabilly Blue Plumage Normal 0.460 0.312636166 0.39166667
## 1110 Squawkabilly Yellow Plumage Normal 0.460 0.312636166 0.39166667
## 1111 Squawkabilly White Plumage Normal 0.460 0.312636166 0.39166667
## 1112 Nacli Rock 0.125 0.194444444 0.25000000
## 1113 Naclstack Rock 0.175 0.141414141 0.26388889
## 1114 Garganacl Rock 0.175 0.176767677 0.40277778
## 1115 Charcadet Fire 0.175 0.194444444 0.27777778
## 1116 Armarouge Fire 0.375 0.183641975 0.51388889
## 1117 Ceruledge Fire 0.425 0.162037037 0.51388889
## 1118 Tadbulb Electric 0.225 0.312134503 0.25000000
## 1119 Bellibolt Electric 0.225 0.243614304 0.46388889
## 1120 Wattrel Electric 0.350 0.207407407 0.26388889
## 1121 Kilowattrel Electric 0.625 0.226851852 0.48611111
## 1122 Maschiff Dark 0.255 0.210210210 0.32777778
## 1123 Mabosstiff Dark 0.425 0.194444444 0.50000000
## 1124 Shroodle Poison 0.375 0.222222222 0.29166667
## 1125 Grafaiai Poison 0.550 0.178832117 0.48611111
## 1126 Bramblin Grass 0.300 0.239316239 0.30555556
## 1127 Brambleghast Grass 0.450 0.152777778 0.54166667
## 1128 Toedscool Ground 0.350 0.115226337 0.25000000
## 1129 Toedscruel Ground 0.500 0.168168168 0.41666667
## 1130 Klawf Rock 0.375 0.160130719 0.37500000
## 1131 Capsakid Grass 0.250 0.243055556 0.34444444
## 1132 Scovillain Grass 0.375 0.194444444 0.60000000
## 1133 Rellor Bug 0.150 0.135122411 0.22500000
## 1134 Rabsca Bug 0.225 0.157657658 0.45833333
## 1135 Flittle Psychic 0.375 0.194444444 0.25000000
## 1136 Espathra Psychic 0.525 0.307870370 0.44722222
## 1137 Tinkatink Fairy 0.290 0.178389399 0.22222222
## 1138 Tinkatuff Fairy 0.390 0.184509327 0.27777778
## 1139 Tinkaton Fairy 0.470 0.181623932 0.40277778
## 1140 Wiglett Water 0.475 0.077777778 0.25000000
## 1141 Wugtrio Water 0.600 0.113425926 0.41666667
## 1142 Bombirdier Flying 0.410 0.160130719 0.45277778
## 1143 Finizen Water 0.375 0.340277778 0.25000000
## 1144 Palafin Zero Form Water 0.500 0.290215589 0.34166667
## 1145 Palafin Hero Form Water 0.500 0.211352657 0.73888889
## 1146 Varoom Steel 0.235 0.162037037 0.27777778
## 1147 Revavroom Steel 0.450 0.198159943 0.48055556
## 1148 Cyclizar Dragon 0.605 0.209401709 0.50000000
## 1149 Orthworm Steel 0.325 0.136111111 0.40277778
## 1150 Glimmet Rock 0.300 0.183006536 0.38888889
## 1151 Glimmora Rock 0.430 0.188758934 0.51388889
## 1152 Greavard Ghost 0.170 0.169082126 0.25277778
## 1153 Houndstone Ghost 0.340 0.142131980 0.41944444
## 1154 Flamigo Flying 0.450 0.231078905 0.52777778
## 1155 Cetoddle Ice 0.215 0.494117647 0.27222222
## 1156 Cetitan Ice 0.365 0.550925926 0.43888889
## 1157 Veluza Water 0.350 0.253623188 0.50000000
## 1158 Dondozo Water 0.175 0.324074074 0.45833333
## 1159 Tatsugiri Curly Form Dragon 0.410 0.170609319 0.47222222
## 1160 Tatsugiri Droopy Form Dragon 0.410 0.170609319 0.47222222
## 1161 Tatsugiri Stretchy Form Dragon 0.410 0.170609319 0.47222222
## 1162 Annihilape Fighting 0.450 0.251633987 0.45833333
## 1163 Clodsire Poison 0.100 0.315972222 0.33333333
## 1164 Farigiraf Normal 0.300 0.333333333 0.55555556
## 1165 Dudunsparce Two-Segment Form Normal 0.275 0.313620072 0.51388889
## 1166 Dudunsparce Three-Segment Form Normal 0.275 0.313620072 0.51388889
## 1167 Kingambit Dark 0.250 0.189701897 0.54166667
## 1168 Great Tusk Ground 0.435 0.243055556 0.51111111
## 1169 Scream Tail Fairy 0.555 0.208982347 0.36111111
## 1170 Brute Bonnet Grass 0.275 0.218013468 0.57222222
## 1171 Flutter Mane Ghost 0.675 0.112573099 0.52777778
## 1172 Slither Wing Bug 0.405 0.179649758 0.61111111
## 1173 Sandy Shocks Electric 0.505 0.181623932 0.56111111
## 1174 Iron Treads Ground 0.530 0.184210526 0.51111111
## 1175 Iron Bundle Ice 0.680 0.125159642 0.56666667
## 1176 Iron Hands Fighting 0.250 0.340277778 0.52777778
## 1177 Iron Jugulis Dark 0.540 0.220214190 0.56111111
## 1178 Iron Moth Fire 0.550 0.183006536 0.58333333
## 1179 Iron Thorns Rock 0.360 0.200458190 0.56666667
## 1180 Frigibax Dragon 0.275 0.280864198 0.30555556
## 1181 Arctibax Dragon 0.310 0.267175573 0.38888889
## 1182 Baxcalibur Dragon 0.435 0.251248439 0.61111111
## 1183 Gimmighoul Chest Form Ghost 0.050 0.125000000 0.29166667
## 1184 Gimmighoul Roaming Form Ghost 0.400 0.250000000 0.29166667
## 1185 Gholdengo Steel 0.420 0.181899642 0.53611111
## 1186 Wo-Chien Dark 0.350 0.140661939 0.50000000
## 1187 Chien-Pao Dark 0.675 0.214559387 0.58333333
## 1188 Ting-Lu Dark 0.225 0.294037940 0.45833333
## 1189 Chi-Yu Dark 0.500 0.106944444 0.59722222
## 1190 Roaring Moon Dragon 0.595 0.237403101 0.53888889
## 1191 Iron Valiant Fairy 0.580 0.191851852 0.69444444
## 1192 Koraidon Fighting 0.675 0.180878553 0.61111111
## 1193 Miraidon Electric 0.675 0.180878553 0.61111111
## 1194 Walking Wake Water 0.545 0.221264368 0.57777778
## 1195 Iron Leaves Grass 0.520 0.178571429 0.55555556
## 1196 Dipplin Grass 0.200 0.163742690 0.48611111
## 1197 Poltchageist Grass 0.250 0.157126824 0.33055556
## 1198 Sinistcha Grass 0.350 0.148446834 0.50277778
## 1199 Okidogi Poison 0.400 0.170259812 0.51666667
## 1200 Munkidori Poison 0.530 0.219373219 0.56944444
## 1201 Fezandipiti Poison 0.495 0.165324745 0.44722222
## 1202 Ogerpon Teal Mask Grass 0.550 0.172839506 0.50000000
## 1203 Ogerpon Wellspring Mask Grass 0.550 0.172839506 0.50000000
## 1204 Ogerpon Hearthflame Mask Grass 0.550 0.172839506 0.50000000
## 1205 Ogerpon Cornerstone Mask Grass 0.550 0.172839506 0.50000000
## 1206 Archaludon Steel 0.425 0.179487179 0.63888889
## 1207 Hydrapple Grass 0.220 0.216959064 0.55555556
## 1208 Gouging Fire Fire 0.455 0.190809969 0.50000000
## 1209 Raging Bolt Electric 0.375 0.270061728 0.58333333
## 1210 Iron Boulder Rock 0.620 0.186170213 0.52222222
## 1211 Iron Crown Steel 0.490 0.168269231 0.53888889
## 1212 Terapagos Normal Form Normal 0.300 0.205882353 0.36111111
## 1213 Terapagos Terastal Form Normal 0.425 0.167929293 0.55555556
## 1214 Terapagos Stellar Form Normal 0.425 0.282828283 0.65277778
## 1215 Pecharunt Poison 0.440 0.137992832 0.48888889
2.- Modelado
Vamos a tomar como ejemplo para el modelado, el arbol de decisión. (https://www.crehana.com/blog/transformacion-digital/arboles-decision-mineria-datos/)
Debido a que nos enfrenteamos aun escenario simple, donde solo disponemos de unas pocas variables normalizadas y el conocimiento que queremos encontrar es muy conciso, vamos a utilizar este modelo por su facilidad de implementación y sobre todo de interprestación. Vamos a poder ver claramente las decisiones tomadas y obtener el conocimiento esperado.
Además, hay que tener en cuenta que tenemos la variable Type.1, que nos sirve para crear categorías y precimanete el modelo de arboles de decisión, pueden trabajar tanto con valores númericos como categoricos.
Para el modelado se utilizarán las varaibles Power, Capacity y Speed. El proceso trata de crear grupos cada vez más homogeneos basandose en las variables.
Se creara un entrenamiento en el cual el modelo, trabajara con el dataset y creara subconjuntos relacionando las variables seleccioandas para ello. Tras realizar el entrenamiento, podremos ver el resultado en forma de árbol, donde sus ramas son las decisiones según las variables y el resultado posible.
library(rpart)
library(rpart.plot)
set.seed(123)#Nos aseguramos que siempre se crean las mismas particiones
pokemonData$victoria<- sample(c(0,1), size = nrow(pokemonData), replace = TRUE)#creamos una variable victoria, que la rellenaremos con valores 0 ó 1.
trainingObjects<- sample(1:nrow(pokemonData), size = 0.7 * nrow(pokemonData))#capturamos el 70% por ciento de los objetos para el grupo entrenamiento.
trainingData<- pokemonData[trainingObjects, ]#cargamos los objetos de entrenamiento en su grupo.
testData<- pokemonData[-trainingObjects, ]#cargamos el resto de objetos en el grupo de prueba.
modelTree<- rpart(victoria ~ Power + Capacity + Speed, data = trainingData, method = "class")#configuramos el árbol para su posterior ejecución.
rpart.plot(modelTree)
3.- Evaluación
Ahora vamos a responder a la pregunta ¿qué modelo cumple mejor con los objetivos del negocio?.
Claramente es mejor el árbol de decisión. Tenemos que tener en cuenta que necesitamos saber en que situaciones tenemos a un pokemon que puede ganar todo los combates, para ello, debemos entender que caracteristicas son las que hacen posible este hecho. Las preguntas que, en este caso, se hace el árbol de decisión, nos informa con que valor de una propiedad se puede ganar un combate. Esta información es expuesta de forma clara y concisa.
Del mismo modo que nos informa de que valor tiene que tener una caracteristica para llevar al exito en el combate, tambien nos informa de que variables son las más relevantes. En este caso, no nos dice que poquemos es más fuerte, pero si nos informa de que combinación de caracteristicas en cada momento es la que lleva al existo.
Por último, es un modelo que es robusto ante inconsistencias y ruido.
4.- Implementación.
A partir del juego de datos utilizado en el ejemplo de la PEC, realiza las tareas previas a la generación de un modelo de minería de datos explicadas en los módulos “El proceso de minería de datos” y “Preprocesado de los datos y gestión de características”.
Puedes utilizar de referencia el ejemplo de la PEC, pero procura cambiar el enfoque y analizar los datos en función de las diferentes dimensiones que presentan los datos. Así, no se puede utilizar la combinación de variables utilizada en el ejemplo: “FATALS”,“DRUNK_DR”,“VE_TOTAL”,“VE_FORMS”,“PVH_INVL”,“PEDS”,“PERSONS”,“PERMVIT”,“PERNOTMVIT”. Se debe analizar cualquier otra combinación que puede incluir (o no) algunas de estas variables con otras nuevas.
Opcionalmente y valorable se pueden añadir al estudio datos de otros años para realizar comparaciones temporales (https://www.nhtsa.gov/file-downloads?p=nhtsa/downloads/FARS/) o añadir otros hechos a estudiar relacionados, por ejemplo, el consumo de drogas en los accidentes (https://static.nhtsa.gov/nhtsa/downloads/FARS/2020/National/FARS2020NationalCSV.zip)
# Cargamos el juego de datos
# Redacta aquí el código R para el estudio del juego de datos
Escribe aquí la respuesta a la pregunta