1. Lectura de los datos

climate <- read_excel("C:/Users/user/Downloads/climate.xlsx")
head(climate)

2. ¿Cuántas observaciones hay?

nrow(climate)
## [1] 308

3. ¿Cuál es la estructura de los datos?

str(climate)
## tibble [308 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Year    : num [1:308] 1983 1983 1983 1983 1983 ...
##  $ Month   : num [1:308] 5 6 7 8 9 10 11 12 1 2 ...
##  $ MEI     : chr [1:308] "2556.0" "2167.0" "1741.0" "1.13" ...
##  $ CO2     : chr [1:308] "345.96" "345.52" "344.15" "342.25" ...
##  $ CH4     : chr [1:308] "1638.59" "1633.71" "1633.22" "1631.35" ...
##  $ N2O     : chr [1:308] "303677.0" "303746.0" "303795.0" "303839.0" ...
##  $ CFC-11  : chr [1:308] "191324.0" "192057.0" "192818.0" "193602.0" ...
##  $ CFC-12  : chr [1:308] "350113.0" "351848.0" "353725.0" "355633.0" ...
##  $ TSI     : chr [1:308] "1.3661024E7" "1.3661208E7" "1366285.0" "1.3664202E7" ...
##  $ Aerosols: chr [1:308] "863.0" "794.0" "731.0" "673.0" ...
##  $ Temp    : chr [1:308] "109.0" "118.0" "137.0" "176.0" ...

4. Visualización por cada variable

numeric_vars <- climate %>% select(where(is.numeric))
if (ncol(numeric_vars) > 0) {
  climate_long <- pivot_longer(
    data = numeric_vars,
    cols = everything(),
    names_to = "Variable",
    values_to = "Valor"
  )
  ggplot(climate_long, aes(x = Valor)) +
    facet_wrap(~Variable, scales = "free") +
    geom_histogram(bins = 30, fill = "steelblue", color = "black") +
    theme_minimal()

} else {
  message("No hay variables numéricas para graficar.")
}

5. Detección y eliminación de datos atípicos

climate$Temp <- as.numeric(climate$Temp)

Q1 <- quantile(climate$Temp, 0.25, na.rm = TRUE)
Q3 <- quantile(climate$Temp, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1

climate <- filter(climate, Temp >= (Q1 - 1.5 * IQR) & Temp <= (Q3 + 1.5 * IQR))

6. Imputación de datos faltantes

colSums(is.na(climate))
##     Year    Month      MEI      CO2      CH4      N2O   CFC-11   CFC-12 
##        0        0        1        1        2        1        1        0 
##      TSI Aerosols     Temp 
##        2        0        0
climate <- climate %>%
  mutate(across(where(is.numeric), ~ ifelse(is.na(.), mean(., na.rm = TRUE), .)))

7. Año con la temperatura más baja

climate[which.min(climate$Temp), c("Year", "Temp")]

8. ¿Distribución normal del CO2?

climate$CO2 <- as.numeric(climate$CO2)


hist(climate$CO2, col = "skyblue", main = "Histograma de CO2")

qqnorm(climate$CO2)
qqline(climate$CO2, col = "red")

shapiro.test(climate$CO2)
## 
##  Shapiro-Wilk normality test
## 
## data:  climate$CO2
## W = 0.96393, p-value = 6.493e-07

9. Evolución del CO2

ggplot(climate, aes(x = Year, y = CO2)) +
  geom_line(color = "darkgreen") +
  labs(title = "Evolución del CO2", x = "Año", y = "CO2")

10-15. Análisis mensual

climate %>% group_by(Month) %>% summarise(temp_prom = mean(Temp)) %>% arrange(desc(temp_prom)) %>% slice(1)
climate %>% group_by(Month) %>% summarise(temp_prom = mean(Temp)) %>% arrange(temp_prom) %>% slice(1)
climate %>% group_by(Month) %>% summarise(co2_prom = mean(CO2)) %>% arrange(desc(co2_prom)) %>% slice(1)
climate %>% group_by(Month) %>% summarise(co2_prom = mean(CO2)) %>% arrange(co2_prom) %>% slice(1)
climate %>% group_by(Month) %>% summarise(ch4_prom = mean(CH4)) %>% arrange(desc(ch4_prom)) %>% slice(1)
climate %>% group_by(Month) %>% summarise(ch4_prom = mean(CH4)) %>% arrange(ch4_prom) %>% slice(1)

Conclusión

El análisis exploratorio realizado a partir del conjunto de datos climate.xlsx permitió aplicar de forma práctica los conceptos fundamentales del preprocesamiento y visualización de datos en R. A través de técnicas de limpieza, imputación y detección de valores atípicos, se preparó una base de datos confiable para su análisis. Posteriormente, mediante herramientas gráficas como histogramas, boxplots y líneas de tendencia, se identificaron patrones relevantes en variables climáticas como la temperatura, el CO₂ y el CH₄.

Los resultados evidenciaron, por ejemplo, qué meses registran los valores promedio más altos y bajos para cada variable, y permitieron evaluar la distribución de datos como el CO₂, cuya normalidad fue cuestionada estadísticamente. Asimismo, se observó una tendencia creciente en los niveles de CO₂ a lo largo del tiempo, lo que refleja un posible impacto del cambio climático.

Este trabajo no solo reforzó habilidades técnicas en R, sino también la capacidad de interpretar datos climáticos desde un enfoque crítico y aplicado. En conjunto, se alcanzaron satisfactoriamente los objetivos de la unidad, fortaleciendo las competencias analíticas necesarias para futuras aplicaciones de minería de datos en entornos reales.