Social Analytics and Strategic Intelligence
Session 1: Explore and Query Let’s bring the data in long format (ByYear_LongStats):
rm(list = ls())
denguelink1='https://github.com/SocialAnalytics-StrategicIntelligence/TableOperations/raw/main/dataFiles/ByYear_LongStats.pkl'
library(reticulate)
use_python("C:/Users/jpnav/anaconda3")
py_install("pandas") # install pandas for R environment
+ "C:/Users/jpnav/anaconda3/condabin/conda.bat" "install" "--yes" "--prefix" "C:/Users/jpnav/anaconda3" "-c" "conda-forge" "pandas"
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... done
==> WARNING: A newer version of conda exists. <==
current version: 23.7.4
latest version: 24.3.0
Please update conda by running
$ conda update -n base -c defaults conda
Or to minimize the number of packages updated during conda update use
conda install conda=24.3.0
## Package Plan ##
environment location: C:\Users\jpnav\anaconda3
added / updated specs:
- pandas
The following packages will be downloaded:
package | build
---------------------------|-----------------
ca-certificates-2024.2.2 | h56e8100_0 152 KB conda-forge
certifi-2024.2.2 | pyhd8ed1ab_0 157 KB conda-forge
pandas-2.1.4 | py311hf62ec03_0 13.6 MB
------------------------------------------------------------
Total: 13.9 MB
The following packages will be UPDATED:
pandas 2.0.3-py311hf62ec03_0 --> 2.1.4-py311hf62ec03_0
The following packages will be SUPERSEDED by a higher-priority channel:
ca-certificates pkgs/main::ca-certificates-2024.3.11-~ --> conda-forge::ca-certificates-2024.2.2-h56e8100_0
certifi pkgs/main/win-64::certifi-2024.2.2-py~ --> conda-forge/noarch::certifi-2024.2.2-pyhd8ed1ab_0
Downloading and Extracting Packages
ca-certificates-2024 | 152 KB | | 0%
certifi-2024.2.2 | 157 KB | | 0% [A
pandas-2.1.4 | 13.6 MB | | 0% [A[A
ca-certificates-2024 | 152 KB | # | 11%
pandas-2.1.4 | 13.6 MB | | 0% [A[A
ca-certificates-2024 | 152 KB | ########## | 100%
ca-certificates-2024 | 152 KB | ########## | 100%
pandas-2.1.4 | 13.6 MB | 4 | 5% [A[A
pandas-2.1.4 | 13.6 MB | 9 | 10% [A[A
certifi-2024.2.2 | 157 KB | # | 10% [A
pandas-2.1.4 | 13.6 MB | #5 | 16% [A[A
pandas-2.1.4 | 13.6 MB | ##4 | 24% [A[A
certifi-2024.2.2 | 157 KB | ########## | 100% [A
certifi-2024.2.2 | 157 KB | ########## | 100% [A
pandas-2.1.4 | 13.6 MB | ###1 | 32% [A[A
pandas-2.1.4 | 13.6 MB | ###8 | 39% [A[A
pandas-2.1.4 | 13.6 MB | ####5 | 45% [A[A
pandas-2.1.4 | 13.6 MB | ##### | 51% [A[A
pandas-2.1.4 | 13.6 MB | #####6 | 57% [A[A
pandas-2.1.4 | 13.6 MB | ######2 | 63% [A[A
pandas-2.1.4 | 13.6 MB | ####### | 70% [A[A
pandas-2.1.4 | 13.6 MB | #######6 | 77% [A[A
pandas-2.1.4 | 13.6 MB | ########2 | 83% [A[A
pandas-2.1.4 | 13.6 MB | ########7 | 88% [A[A
pandas-2.1.4 | 13.6 MB | #########2 | 93% [A[A
pandas-2.1.4 | 13.6 MB | #########7 | 98% [A[A
pandas-2.1.4 | 13.6 MB | ########## | 100% [A[A
[A
[A[A
Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done
pd <- import("pandas")
dengueLongStats <- pd$read_pickle(denguelink1)
reticulate::py_last_error()
NULL
str(dengueLongStats)
'data.frame': 177 obs. of 4 variables:
$ ano : num 2000 2000 2000 2001 2001 ...
$ enfermedad: Ord.factor w/ 3 levels "SIN_SEÑALES"<..: 1 1 1 1 1 1 3 3 3 1 ...
$ statsName : chr "edad_mean" "edad_median" "case_sum" "edad_mean" ...
$ statsValue: num 29.5 27 4324 30.6 28 ...
- attr(*, "pandas.index")=RangeIndex(start=0, stop=177, step=1)
#Creación de subset para facilitar trabajo
datamean <- subset(dengueLongStats, statsName == "edad_mean")
#Gráfico
library(ggplot2)
library(dplyr)
last_mean <- datamean %>%
group_by(enfermedad) %>%
filter(ano == max(ano))
ggplot(data=datamean, aes(x=ano, y=statsValue, color=enfermedad)) +
geom_smooth(se=TRUE, method="loess")+
scale_y_log10(labels=scales::comma) +
scale_color_manual(values=c("SIN_SEÑALES" = "yellow", "ALARMA" = "orange", "GRAVE" = "red")) +
theme_light() +
labs(title="Edad media del contagiado de dengue (2010-2022)",
x="Año",
y="Edad Promedio",
color="Grado del Dengue")+
theme(plot.title = element_text(hjust = 0.4, face="bold", size=18))+
geom_text(data=last_mean, aes(label=round(statsValue)), hjust=-0.1, vjust=0.5, color="black", show.legend = FALSE)
La edad media del contagiado de dengue vario a través de los años? Fue lo mismo segun gravedad? Respuesta: Como se observa en el gráfico, la edad media del contagiado de dengue sí ha ido variando a través de los años. Las variaciones más notorias se dieron en años anteriores al 2010. Este fenómeno puede deberse a que anterior a dicho año la recopilación de datos referente al dengue era más bien pobre. Posterior al mencionado año, la edad promedio de los contagiados no ha variado de forma notoria, siendo los más afectados, al año 2022, los adultos jóvenes en sus 30 tempranos o 20 tardíos en los 3 grados del dengue: sin señal (sin síntomas), en alarma (con síntomas) y graves.
#Creación de subset para facilitar trabajo
datacase <- subset(dengueLongStats, statsName == "case_sum")
#Gráfico
library(ggplot2)
library(dplyr)
last_values <- datacase %>%
group_by(enfermedad) %>%
filter(ano == max(ano))
ggplot(data=datacase, aes(x=ano, y=statsValue, color=enfermedad)) +
geom_smooth(se=TRUE, method="loess")+
scale_y_log10(labels=scales::comma) +
scale_color_manual(values=c("SIN_SEÑALES" = "yellow", "ALARMA" = "orange", "GRAVE" = "red")) +
theme_light() +
labs(title="Número de casos a lo largo del tiempo (2010-2022)",
x="Año",
y="Número de casos",
color="Grado del dengue")+
theme(plot.title = element_text(hjust = 0.5, face="bold", size=18))+
geom_text(data=last_values, aes(label=statsValue), hjust=-0.1, vjust=0.5, color="black", show.legend = FALSE) +
scale_x_continuous(limits = c(min(datacase$ano), max(datacase$ano) + 1.5))
La cantidad de casos varió a través de los años? Fue lo mismo según gravedad? Respuesta: Referente a la cantidad de casos, se observa en el gráfico que el dengue de grado alarma (con síntomas) vio un aumento significativo en su número de casos entre los años 2005 y 2015, siendo 7370 casos al año 2022. Pese a ello, el número de estos casos no se compara a la cantidad de casos sin señales (sin síntomas), que al año 2022 se registraban 48625 casos. Aún con ello, este tipo de casos no han variado en demasía a través de los años como sí lo hicieron los casos de alarma. Para añadir, los casos de dengue grave se han mantenido relativamente estables, sin aumentar ni disminuir de forma significativa.
Most affected provinces through the years?
The data worst_ProvYear_alarma_Frequency tell us the frequency of the worst province by region by year:
denguelink2='https://github.com/SocialAnalytics-StrategicIntelligence/TableOperations/raw/main/dataFiles/worst_ProvYear_alarma_Frequency.csv'
dengueProvWorst <- read.csv(denguelink2)
str(dengueProvWorst)
'data.frame': 43 obs. of 3 variables:
$ departamento: chr "AMAZONAS" "AMAZONAS" "ANCASH" "ANCASH" ...
$ provincia : chr "BAGUA" "UTCUBAMBA" "CASMA" "SANTA" ...
$ case : int 6 6 5 3 1 7 1 1 10 2 ...
For instance, LORETO has data for 14 years:
dengueProvWorst[dengueProvWorst$departamento=='LORETO',]
In one year, ALTO AMAZONAS was the worst case of people with alarm situation; while MAYNAS had that position for 13 years.
What is the worst cases?
dengueProvWorst[order(-dengueProvWorst$case),]
We could see the distribution of the worst provinces:
library(dplyr)
dengueProvWorst_peor <- dengueProvWorst %>% filter(case >= 10)
baseHeat = ggplot(dengueProvWorst_peor, aes(x = reorder(departamento,case), y = reorder(provincia,case), fill=case)) + theme_classic()
heatDefault = baseHeat + geom_tile()
heatBetter=heatDefault +scale_fill_gradient(low = 'yellow',high = 'black',name="Años con\nmayor cantidad\nde casos")
heatBetter + theme(axis.text.x = element_text(angle = 60,vjust = 1,hjust = 1, size=5),
axis.text.y = element_text(size=5),
axis.title.x = element_text(size=10),
axis.title.y = element_text(size=10)) +
geom_text(aes(label=case),
size=4,fontface='bold', color='white')+
labs(x="Departamento", y="Provincia", title="Peores provincias por año con más casos de dengue")+
theme(plot.title = element_text(hjust = 0.5, face="bold", size=15))
Cuales fueron las provincias mas afectadas con contagiados a lo largo de los años?
Respuesta: Como se puede ver en el gráfico, las provincias más afectadas a lo largo de los años han sido las provincias de Maynas y Tambopata, siendo en 13 ocasiones las provincias que más casos de dengue registraron en su departamento. Estas son seguidas de Tumbes y Coronel Portillo. En particular, se observa que estas provincias más afectadas son de la región selva, y si no, de climas sumamente cálidos así como lluviosos. Esto es evidente dada la naturaleza del aedes aegypti, quien se ve favorecido de este tipo de climas. Como conclusión, los departamentos de Madre de Dios y Loreto deben realizar un esfuerzo en la prevención y cuidado del dengue en las provincias de Tambopata y Maynas. En general, todos los departamentos presentes en el gráfico deben de prestar atención y cuidado a las provincias observables, dado que ser por 10 años o más la provincia con mayor cantidad de contagios del dengue no es un asunto menor y denota falta de acción por parte de los gobiernos locales.
Let’ see the info about rateAlarma:
denguelink3='https://raw.githubusercontent.com/SocialAnalytics-StrategicIntelligence/TableOperations/main/dataFiles/ByYearPlace.pkl'
dengueYearPlace <- pd$read_pickle(denguelink3)
str(dengueYearPlace)
'data.frame': 203 obs. of 4 variables:
$ ano : num 2012 2012 2012 2012 2012 ...
$ departamento : chr "AMAZONAS" "ANCASH" "CAJAMARCA" "HUANUCO" ...
$ rateAlarma : num 0.1263 0.0211 0.1772 0.3092 0.0613 ...
$ rateAlarma.cut: Ord.factor w/ 6 levels "less10%"<"10-25%"<..: 2 1 2 3 1 1 2 2 2 1 ...
- attr(*, "pandas.index")=RangeIndex(start=0, stop=203, step=1)
Basic stats:
summary(dengueYearPlace)
ano departamento rateAlarma rateAlarma.cut
Min. :2012 Length:203 Min. :0.00000 less10% :97
1st Qu.:2015 Class :character 1st Qu.:0.03673 10-25% :46
Median :2017 Mode :character Median :0.10378 25-50 :47
Mean :2017 Mean :0.19514 51-75% : 5
3rd Qu.:2020 3rd Qu.:0.28067 75-100% : 5
Max. :2022 Max. :1.58333 above100%: 3
Where and when?
baseHeat = ggplot(dengueYearPlace, aes(x = as.factor(ano),
y = reorder(departamento, rateAlarma),
fill=rateAlarma.cut)) + theme_classic()
heatDefault = baseHeat + geom_tile(show.legend = T)
heatBetter=heatDefault +scale_fill_brewer(palette = "Reds")
heatBetter + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, size=8),
axis.text.y = element_text(size=4),
legend.text = element_text(size=8)) +
labs(x = "Año", y = "Departamento", fill = "Casos alarmantes", title = "Evolución de los casos alarmantes de dengue por departamento")+
theme(plot.title = element_text(hjust = 0.3, face="bold", size=12))
Qué relación habia entre los casos alarmantes no graves y los asintomaticos segun departamento a lo largo de los años? Respuesta: Los casos alarmantes no graves a lo largo de los años han ido bajando su porcentaje en proporción al número de casos asintomáticos.