Carlos Flores
8 min read

Categories

Tags

Reglas del sistema de predicción del clima.

En ocasiones no necesitamos de un modelo complejo.

El siguiente cuaderno es un ejemplo de un buen análisis para encontrar reglas lógicas que podemos integrar en nuestro código.

El interés del análisis es encontrar una regla para determinar en qué condiciones un niño puede salir a jugar.

#Paqueterías a usar en el siguiente script
library(dplyr)
library(tidyr)
library(ggplot2)

options(repr.plot.width=10, repr.plot.height=8)

Nuestro conjunto de datos tiene cuenta con 4 variables Perspectiva, Temperatura, Humedad, Viento.

Busquemos las condiciones en que los niños salen a jugar.

#Importación de la base de datos
Clima <- read.csv("~/Documentos/2_Facultad/IA/Proyecto_1/Clima.csv")
Clima
<th scope=col>Perspectiva</th><th scope=col>Temperatura</th><th scope=col>Humedad</th><th scope=col>Viento</th><th scope=col>Jugar</th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><fct></th><th scope=col><fct></th>
A data.frame: 14 × 5
Soleado 29.085NoNo
Soleado 27.090SiNo
Nublado 28.086NoSi
Lluvioso21.096NoSi
Lluvioso20.080NoSi
Lluvioso18.070SiNo
Nublado 17.065SiSi
Soleado 22.095NoNo
Soleado 20.570NoSi
Lluvioso24.080NoSi
Soleado 24.070SiSi
Nublado 22.090SiSi
Nublado 27.075NoSi
Lluvioso21.691SiNo

Antes de contestar preguntas particulares ¿Cuándo se considera una alta temperatura “hace calor” y cuándo se tiene una alta humedad?

Primero veamos cómo tenemos dividos nuestros datos

¿Cuántos Si y No tengo en la variable jugar?

Clima %>%
  group_by(Jugar) %>%
  summarise(Conteo = n())
<th scope=col>Jugar</th><th scope=col>Conteo</th><th scope=col><fct></th><th scope=col><int></th>
A tibble: 2 × 2
No5
Si9

Ahora veamos si existe un patrón para salir a jugar, tomando en cuenta sólo la variable perspectiva.

Conteo = Clima %>%
  group_by(Jugar, Perspectiva) %>%
  summarise(Conteo = n())

Conteo
<th scope=col>Jugar</th><th scope=col>Perspectiva</th><th scope=col>Conteo</th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><int></th>
A grouped_df: 5 × 3
NoLluvioso2
NoSoleado 3
SiLluvioso3
SiNublado 4
SiSoleado 2

Podemos ver que nublado es un buen clima para salir a jugar.

ggplot(Clima, aes(x = Jugar, fill = Perspectiva)) + geom_bar() +
  labs(title = 'Casos en los que se juega',subtitle = 'En los días nublados siempre se juega')

pyregex example

Comencemos a vizualizar la variable temperatura y humedad para encontrar un patrón.

Veamos estadísticas descriptivas.

summary(Clima)
   Perspectiva  Temperatura       Humedad      Viento Jugar
 Lluvioso:5    Min.   :17.00   Min.   :65.00   No:8   No:5  
 Nublado :4    1st Qu.:20.62   1st Qu.:71.25   Si:6   Si:9  
 Soleado :5    Median :22.00   Median :82.50                
               Mean   :22.94   Mean   :81.64                
               3rd Qu.:26.25   3rd Qu.:90.00                
               Max.   :29.00   Max.   :96.00                

Podemos ver que la temperatura mínima es 17 con una máxima de 29 y la humedad mínima de 65 con máxima de 96.

Visualizando la temperatura y humedad de forma individual podemos comenzar a observar que si la temperatura es mayor a 25 grados los niños no salen a jugar, de igual forma, si la humedad es mayor a 85.

ggplot(Clima, aes(x = Temperatura, y = Perspectiva)) +
  geom_point(aes(color = Jugar)) +
  labs(title = "Temperatura Mínima de 17 y Máxima de 29",subtitle = "¿Qué pasará con temperaturas bajas, influye el viento?")

ggplot(Clima, aes(x = Humedad, y = Perspectiva)) +
  geom_point(aes(color = Jugar)) +
  labs(title = "Humedad Mínima de 65 y Máxima de 96",subtitle = "¿Qué pasa con humedades altas, influye el viento?")

pyregex example

pyregex example

Veamos la relación de todas las variables, temperatura, humedad y viento.

ggplot(Clima, aes(x = Temperatura, y = Humedad, size = Viento)) +
  geom_point(aes(color = Perspectiva)) +
  facet_wrap(~Jugar) +
  labs(title = 'Humedad, Temperatura y Viento',subtitle = 'Los niños salen a jugar cuando está nublado')
Warning message:
“Using size for a discrete variable is not advised.”

pyregex example

Podemos concluir que los niños siempre salen cuando está nublado.

Ahora sólo enfoquemonos en los días soleados y lluviosos.

  1. Juegan cuando está lluvioso y no hay viento aunque la humedad sea mayor a 90

  2. Juegan cuando la temperatura es menor a 27 grados y la humedad es menor que 95

#Enfoquemonos en los días Soleados y Lluviosos,
ggplot(filter(Clima,Perspectiva != 'Nublado'), aes(x = Temperatura, y = Humedad, size = Viento)) +
  geom_point(aes(color = Perspectiva)) +
  facet_wrap(~Jugar) +
  labs(title = 'Soleado y Lluvioso',subtitle = '')
Warning message:
“Using size for a discrete variable is not advised.”

pyregex example

¿Cuándo la humedad es alta?

No podemos determinar cuándo se considera una humedad alta, la variable viento parece tener relevancia al momento de decidir, ya que en días soleados la humedad mayor a 94 se considera alta.

¿A qué temperatura se considera como calor?

Aunque tengamos viento, si la temperatura es mayor a 27 grados no salen a jugar.

Podemos decir que a más de 27 grados tenemos temperaturas altas.

#Hemos creados las reglas para salir a jugar para este conjunto de datos.
Clima[Clima$Perspectiva == 'Nublado',]
Clima[Clima$Perspectiva == 'Lluvioso' & Clima$Viento == 'No',]
Clima[Clima$Perspectiva == 'Soleado' & Clima$Temperatura < 27 & Clima$Humedad < 95,]
<th scope=col>Perspectiva</th><th scope=col>Temperatura</th><th scope=col>Humedad</th><th scope=col>Viento</th><th scope=col>Jugar</th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><fct></th><th scope=col><fct></th><th scope=row>3</th><th scope=row>7</th><th scope=row>12</th><th scope=row>13</th>
A data.frame: 4 × 5
Nublado2886NoSi
Nublado1765SiSi
Nublado2290SiSi
Nublado2775NoSi
<th scope=col>Perspectiva</th><th scope=col>Temperatura</th><th scope=col>Humedad</th><th scope=col>Viento</th><th scope=col>Jugar</th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><fct></th><th scope=col><fct></th><th scope=row>4</th><th scope=row>5</th><th scope=row>10</th>
A data.frame: 3 × 5
Lluvioso2196NoSi
Lluvioso2080NoSi
Lluvioso2480NoSi
<th scope=col>Perspectiva</th><th scope=col>Temperatura</th><th scope=col>Humedad</th><th scope=col>Viento</th><th scope=col>Jugar</th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><fct></th><th scope=col><fct></th><th scope=row>9</th><th scope=row>11</th>
A data.frame: 2 × 5
Soleado20.570NoSi
Soleado24.070SiSi

Al introducir todo en una misma sentencia de código hemos creado una regla estándar.

#Todo junto
Clima$test <- ifelse((Clima$Perspectiva == 'Nublado') |
                        (Clima$Perspectiva == 'Lluvioso' & Clima$Viento == 'No') |
                        (Clima$Perspectiva == 'Soleado' & Clima$Temperatura < 27 & Clima$Humedad < 95),'SI','NO')

Clima
<th scope=col>Perspectiva</th><th scope=col>Temperatura</th><th scope=col>Humedad</th><th scope=col>Viento</th><th scope=col>Jugar</th><th scope=col>test</th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><chr></th>
A data.frame: 14 × 6
Soleado 29.085NoNoNO
Soleado 27.090SiNoNO
Nublado 28.086NoSiSI
Lluvioso21.096NoSiSI
Lluvioso20.080NoSiSI
Lluvioso18.070SiNoNO
Nublado 17.065SiSiSI
Soleado 22.095NoNoNO
Soleado 20.570NoSiSI
Lluvioso24.080NoSiSI
Soleado 24.070SiSiSI
Nublado 22.090SiSiSI
Nublado 27.075NoSiSI
Lluvioso21.691SiNoNO

Wow!! hemos creado Inteligencia Artificial apartir de entender el comportamiento descriptivo de nuestros datos.