Visualización de datos en R

library(dplyr)
library(readr)
library(ggplot2)
library(data.table)
library(tidyr)

EJERCICIO 1:

Crear un nuevo dataframe que sea un subconjunto del dataframe original de dfFires. El subconjunto debe contener todos los incendios del Estado de Idaho y las columnas deben ser limitadas para que sólo estén presentes las columnas YEAR_, CAUSE y TOTALACRES. Cambie el nombre de las columnas. Agrupe los datos por CAUSE y YEAR_ y luego resuma por el total de acres quemados. Trazar los resultados.

dfFires = read_csv("C:/Users/ANGIE VANESA/Documents/2023-2/VISUALIZACION/RDataSets/StudyArea.csv", col_types = list(UNIT = col_character()), col_names = TRUE)
head(dfFires,5)
## # A tibble: 5 × 14
##     FID ORGANIZATI UNIT  SUBUNIT SUBUNIT2        FIRENAME CAUSE YEAR_ STARTDATED
##   <dbl> <chr>      <chr> <chr>   <chr>           <chr>    <chr> <dbl> <chr>     
## 1     0 FWS        81682 USCADBR San Diego Bay … PUMP HO… Human  2001 1/1/01 0:…
## 2     1 FWS        81682 USCADBR San Diego Bay … I5       Human  2002 5/3/02 0:…
## 3     2 FWS        81682 USCADBR San Diego Bay … SOUTHBAY Human  2002 6/1/02 0:…
## 4     3 FWS        81682 USCADBR San Diego Bay … MARINA   Human  2001 7/12/01 0…
## 5     4 FWS        81682 USCADBR San Diego Bay … HILL     Human  1994 9/13/94 0…
## # ℹ 5 more variables: CONTRDATED <chr>, OUTDATED <chr>, STATE <chr>,
## #   STATE_FIPS <dbl>, TOTALACRES <dbl>
data2 <- dfFires %>%select(STATE, YEAR_, CAUSE, TOTALACRES) %>%
  rename(Estado = STATE, Año = YEAR_, Causa = CAUSE, Acres_Quemados = TOTALACRES)%>% 
  filter(Estado=="Idaho") %>% select(Año,Causa,Acres_Quemados)
head(data2,5)
## # A tibble: 5 × 3
##     Año Causa   Acres_Quemados
##   <dbl> <chr>            <dbl>
## 1  1987 Human                5
## 2  1991 Natural            150
## 3  1991 Human              800
## 4  1990 Natural              2
## 5  1985 Human               38
data2 %>% filter(!is.na(Causa)) %>%  group_by(Año,Causa) %>% 
  summarise(Total_quemados=sum(Acres_Quemados)) %>%
  ggplot(aes(x=factor(Año),y=Total_quemados, fill=Causa))+
  geom_bar(stat = "identity", position = "stack")+labs(title = "Total de Acres Quemados por Año y Causa en el estado de Idago", 
                                                       x = "Año",y = "Total de Acres Quemados")+
  theme_minimal()+theme(axis.text.x = element_text(angle = 90, hjust = 1.7)) 

De la gráfica anterior vemos que en 2007 el total de ACRES quemados en el estado de idago, fueron por causas naturales, alcanzando más de los 2.250.000 millones en total. En general, la mayoría son por causas naturales. En 1988 gran parte de los reportes de ACRES fueron por causas humanas.

EJERCICIO 2:

Trabajaremos con el conjunto de datos de 120 años de historia olímpica adquirido por Randi Griffin en Randi-Griffin y puesto a disposición en athlete_events. - Su tarea consiste en identificar los cinco deportes más importantes según el mayor número de medallas otorgadas en el año 2016.

URL="https://raw.githubusercontent.com/lihkirun/AppliedStatisticMS/main/DataVisualizationRPython/Lectures/Python/PythonDataSets/athlete_events.csv"

Realizamos el cargue de los datos :

history=read.csv(URL)
head(history,5)
##   ID                     Name Sex Age Height Weight           Team NOC
## 1  1                A Dijiang   M  24    180     80          China CHN
## 2  2                 A Lamusi   M  23    170     60          China CHN
## 3  3      Gunnar Nielsen Aaby   M  24     NA     NA        Denmark DEN
## 4  4     Edgar Lindenau Aabye   M  34     NA     NA Denmark/Sweden DEN
## 5  5 Christine Jacoba Aaftink   F  21    185     82    Netherlands NED
##         Games Year Season      City         Sport
## 1 1992 Summer 1992 Summer Barcelona    Basketball
## 2 2012 Summer 2012 Summer    London          Judo
## 3 1920 Summer 1920 Summer Antwerpen      Football
## 4 1900 Summer 1900 Summer     Paris    Tug-Of-War
## 5 1988 Winter 1988 Winter   Calgary Speed Skating
##                              Event Medal
## 1      Basketball Men's Basketball  <NA>
## 2     Judo Men's Extra-Lightweight  <NA>
## 3          Football Men's Football  <NA>
## 4      Tug-Of-War Men's Tug-Of-War  Gold
## 5 Speed Skating Women's 500 metres  <NA>

Tenemos 271.116 registros con 15 columnas.

dim(history)
## [1] 271116     15
colnames(history)
##  [1] "ID"     "Name"   "Sex"    "Age"    "Height" "Weight" "Team"   "NOC"   
##  [9] "Games"  "Year"   "Season" "City"   "Sport"  "Event"  "Medal"

1. Genere un gráfico que indique el número de medallas concedidas en cada uno de los cinco principales deportes en 2016.

history %>%filter(Year == 2016) %>%filter(!is.na(Medal))%>% select(Sport,Medal)%>%count(Sport)%>% arrange(desc(n))%>% top_n(5,n)%>% ggplot()+geom_col(mapping =aes(x=reorder(Sport, -n), y=n),  fill = "lightgreen")+
  geom_text(aes(x = Sport, y = n, label = n), vjust = -0.5, size = 2.5, color = "black") +theme_light()+
  labs(title="Top 5 de Deportes con Mayor Cantidad de Medallas en 2016", x="Deporte", y="número de medalla")

El diagrama de barras anterior nos muestra el número de medallas obtenidas en los deportes del top5 en el 2016. La mayor cantidad de medallas fueron obtenidas en atletismo y natación, con 192 y 191 medallas respectivamente. Hockey fue el deporte con la menor cantidad de medallas obtenidas, alrededor de 99 medallas.

2. Trace un gráfico que represente la distribución de la edad de los ganadores de medallas en los cinco principales deportes en 2016.

top5<-history %>%filter(Year == 2016) %>%filter(!is.na(Medal))%>% select(Sport,Medal)%>%count(Sport)%>% arrange(desc(n))%>% top_n(5,n) %>% pull(Sport)
history %>%filter(Year == 2016) %>%filter(!is.na(Medal))%>% filter(Sport %in% top5) %>% 
  select(Sport,Medal, Age) %>% ggplot( aes(x = Age, fill = Sport))+
  geom_histogram(binwidth = 1, position = "identity", alpha = 1.2)+facet_wrap(~Sport)+theme_light()+
  labs(title="Histograma de la edad de ganadores en top 5 de deporte en el 2016", x="Edad", y="Frecuencia ")

Los histogramas anteriores nos muestran la distribución de la Edad de los ganadores de medallas en cada deporte del top 5 en el 2016. Vemos en los deportes de atletismo y natación que los ganadores de medallas en su mayoría tenían un rango de edad entre 22 a 30 años, mientras que en futboll la mayor frencuencia está en personas entre los 18 a 22 años.

3. Descubre qué equipos nacionales ganaron el mayor número de medallas en los cinco principales deportes en 2016.

equipo<-history %>%filter(Year == 2016) %>%filter(!is.na(Medal)) %>% filter(Sport %in% top5)%>% select(Medal, Team) %>%count(Team)%>% arrange(desc(n))
head(equipo, 10)
##             Team   n
## 1  United States 127
## 2        Germany  88
## 3  Great Britain  69
## 4         Canada  45
## 5      Australia  43
## 6    Netherlands  34
## 7        Jamaica  30
## 8         Sweden  21
## 9         France  20
## 10        Brazil  19

La tabla anterior nos muestra los países que obtuvieron la mayor cantidad de medallas en total , en los deportes principales del 2016. se realizará un diagrama de barras por deportes en el top 5 mostrando la frencuencia de medallas del top 5 de países en cada uno de estos deportes, esto debido a que hay muchos países y algunos con medallas obtenidas pero muy pocas.

history %>% filter(Year == 2016) %>% filter(!is.na(Medal)) %>% filter(Sport %in% top5) %>% select(Sport,Medal, Team) %>% group_by(Sport, Team) %>% summarise(n = n()) %>% arrange(Sport, desc(n))%>%group_by(Sport) %>%mutate(rank = row_number()) %>%
  filter(rank <= 5) %>% ggplot(aes(x = Sport, y = n, fill = Team)) +geom_bar(stat = "identity", position = 'dodge')+ geom_text(aes(label = n), position = position_dodge(width = 0.9), vjust = -0.5, size = 2)+
  labs(title = " Medallas para el TOP5 de países por Deporte (TOP5) ", x = "Deporte", y = "Frecuencia") +
  theme_light()+theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

El gráfico anterior nos muestra el top5 de países que se destacaron en el top 5 de deportes principales del 2016, siendo EEUU el país que mas medallas obtuvo, 46 en atletismo, 71 en natación y 10 en Rowing, para un total de 127 medallas , como lo indica la tabla “equipo”. El siguiente país es Alemania, con 35 medallas en Futbol, 33 en Hockey y 17 en Rowing para un total de 85 medallas, las 3 faltantes fueron obtenidas en otros deportes pero excluyendolos del top 5 de paises en aquellos deportes.

4. Observe la tendencia del peso medio de los atletas masculinos y femeninos ganadores en los cinco principales deportes en 2016.

  history %>%
  filter(Year == 2016) %>% filter(!is.na(Medal)) %>% filter(Sport %in% top5)%>% select(Sex,Weight,Sport)%>% 
  group_by(Sex, Sport)%>%summarise(AvgWeight = mean(Weight, na.rm = TRUE))%>%
  ggplot(aes(x=Sport,y=AvgWeight, fill=Sex))+ geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Peso Medio de ganadores por género en cinco deportes principales (2016)",
       x = "Deporte",y = "Peso Medio") + scale_fill_manual(values = c("M" = "lightgreen",
                                                                      "F" = "lightsalmon")) +theme_minimal()

El diagrama de barras anterior nos muestra los pesos medios para los ganadores (hombres y mujeres) en cada deporte de los principales del 2016. Para el caso de las mujeres que ganaron en atletismo, futbol y Hockey, sus pesos medios fueron similares y estuvieron alrededor de 60 a 65 kg. En todos los deportes, los hombres tuvieron un peso medio superior al peso medio de las mujeres. En rowing, ambos géneros tuvieron un peso medio superior que el peso medio de ganadores y ganadoras de los otros deportes.

EJERCICIO 3:

Considere el conjunto de datos us_state_population.tsv utilizado en la sección de Python, para la creación del mapa coroplético de Estados Unidos. Repita el procedimiento planteado en cada ítem de esta sección para obtener el nuevo dataframe con las nuevas columnas Year y Population. Realice unión y separación utilizando las columnas State y Code.

internet_usage_url ="https://raw.githubusercontent.com/lihkir/Uninorte/main/AppliedStatisticMS/DataVisualizationRPython/Lectures/Python/PythonDataSets/us_state_population.tsv"
internet_usage_df=read.table(internet_usage_url,header=TRUE, sep="\t", check.names = FALSE)
head(internet_usage_df,5)
##        State Code     2010     2011     2012     2013     2014     2015
## 1    Alabama   AL  4785448  4798834  4815564  4830460  4842481  4853160
## 2     Alaska   AK   713906   722038   730399   737045   736307   737547
## 3    Arizona   AZ  6407774  6473497  6556629  6634999  6733840  6833596
## 4   Arkansas   AR  2921978  2940407  2952109  2959549  2967726  2978407
## 5 California   CA 37320903 37641823 37960782 38280824 38625139 38953142
##       2016     2017     2018
## 1  4864745  4875120  4887871
## 2   741504   739786   737438
## 3  6945452  7048876  7171646
## 4  2990410  3002997  3013825
## 5 39209127 39399349 39557045
str(internet_usage_df)
## 'data.frame':    51 obs. of  11 variables:
##  $ State: chr  "Alabama" "Alaska" "Arizona" "Arkansas" ...
##  $ Code : chr  "AL" "AK" "AZ" "AR" ...
##  $ 2010 : int  4785448 713906 6407774 2921978 37320903 5048281 3579125 899595 605085 18845785 ...
##  $ 2011 : int  4798834 722038 6473497 2940407 37641823 5121771 3588023 907316 619602 19093352 ...
##  $ 2012 : int  4815564 730399 6556629 2952109 37960782 5193721 3594395 915188 634725 19326230 ...
##  $ 2013 : int  4830460 737045 6634999 2959549 38280824 5270482 3594915 923638 650431 19563166 ...
##  $ 2014 : int  4842481 736307 6733840 2967726 38625139 5351218 3594783 932596 662513 19860330 ...
##  $ 2015 : int  4853160 737547 6833596 2978407 38953142 5452107 3587509 941413 675254 20224249 ...
##  $ 2016 : int  4864745 741504 6945452 2990410 39209127 5540921 3578674 949216 686575 20629982 ...
##  $ 2017 : int  4875120 739786 7048876 3002997 39399349 5615902 3573880 957078 695691 20976812 ...
##  $ 2018 : int  4887871 737438 7171646 3013825 39557045 5695564 3572665 967171 702455 21299325 ...
internet_usage_df2=gather(internet_usage_df, 
                "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017","2018",
                key = "YEAR", 
                value = "POPULATION")
knitr::kable(head(internet_usage_df2, 10))
State Code YEAR POPULATION
Alabama AL 2010 4785448
Alaska AK 2010 713906
Arizona AZ 2010 6407774
Arkansas AR 2010 2921978
California CA 2010 37320903
Colorado CO 2010 5048281
Connecticut CT 2010 3579125
Delaware DE 2010 899595
District of Columbia DC 2010 605085
Florida FL 2010 18845785
data1 = unite(internet_usage_df2, State_code, State, Code)
knitr::kable(head(data1, 10))
State_code YEAR POPULATION
Alabama_AL 2010 4785448
Alaska_AK 2010 713906
Arizona_AZ 2010 6407774
Arkansas_AR 2010 2921978
California_CA 2010 37320903
Colorado_CO 2010 5048281
Connecticut_CT 2010 3579125
Delaware_DE 2010 899595
District of Columbia_DC 2010 605085
Florida_FL 2010 18845785

Podemos volver a separar la columna State_code en dos columnas usando el comando separate, de la siguiente manera:

data2 = separate(data1, "State_code",into = c("STATE", "CODE"))
knitr::kable(head(data2, 10))
STATE CODE YEAR POPULATION
Alabama AL 2010 4785448
Alaska AK 2010 713906
Arizona AZ 2010 6407774
Arkansas AR 2010 2921978
California CA 2010 37320903
Colorado CO 2010 5048281
Connecticut CT 2010 3579125
Delaware DE 2010 899595
District of 2010 605085
Florida FL 2010 18845785