import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data_2022 = pd.read_csv('suaci/sistema-unico-de-atencion-ciudadana-2022.csv', sep=';')
data_2021 = pd.read_csv('suaci/sistema-unico-de-atencion-ciudadana-2021.csv', sep=';')
data_2020 = pd.read_csv('suaci/sistema-unico-de-atencion-ciudadana-2020.csv', sep=',')
data_2019 = pd.read_csv('suaci/sistema-unico-de-atencion-ciudadana-2019.csv', sep=',')
data_2018 = pd.read_csv('suaci/sistema-unico-de-atencion-ciudadana-2018.csv', sep=',')
datas = [data_2022, data_2021, data_2020, data_2019, data_2018]
sizes = [len(d) for d in datas]
sizes
[104912, 754638, 574435, 989629, 893291]
Conteo de denuncias por barrio para el año 2022.
# Count denuncias por barrio
barrio_counts_2022 = data_2022['domicilio_barrio'].value_counts()
bcdf = pd.DataFrame(barrio_counts_2022)
#Change keys to domicilio_barrio,count
# make index a column
bcdf = bcdf.reset_index()
# rename columns
bcdf.columns = ['domicilio_barrio', 'count']
bcdf.to_csv('barrio_counts_2022.csv', index=False)
mosquitos_2022 = data_2022[data_2022['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2022 = mosquitos_2022['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2022 = mosquitos_2022['domicilio_barrio'].value_counts()[0:10][::-1]
mosquitos_2021 = data_2021[data_2021['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2021 = mosquitos_2021['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2021 = mosquitos_2021['domicilio_barrio'].value_counts()[0:10][::-1]
mosquitos_2020 = data_2020[data_2020['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2020 = mosquitos_2020['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2020 = mosquitos_2020['domicilio_barrio'].value_counts()[0:10][::-1]
mosquitos_2019 = data_2019[data_2019['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2019 = mosquitos_2019['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2019 = mosquitos_2019['domicilio_barrio'].value_counts()[0:10][::-1]
mosquitos_2019 = data_2019[data_2019['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2019 = mosquitos_2019['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2019 = mosquitos_2019['domicilio_barrio'].value_counts()[0:10][::-1]
mosquitos_2018 = data_2018[data_2018['subcategoria'] == 'ENFERMEDADES TRANSMITIDAS POR MOSQUITOS']
barrios_ms_2018 = mosquitos_2018['domicilio_barrio'].value_counts()[0:10][::-1]
barrios_ms_2018 = mosquitos_2018['domicilio_barrio'].value_counts()[0:10][::-1]
import functools as ft
mosquitos = {
"2022": mosquitos_2022,
"2021": mosquitos_2021,
"2020": mosquitos_2020,
"2019": mosquitos_2019,
"2018": mosquitos_2018
}
keys = [list(v.keys().to_series()) for k, v in mosquitos.items()]
for key in zip(keys[0], keys[1], keys[2], keys[3], keys[4]):
print(key)
('contacto', 'contacto', 'contacto', 'contacto', 'contacto') ('periodo', 'periodo', 'periodo', 'periodo', 'periodo') ('categoria', 'categoria', 'categoria', 'categoria', 'categoria') ('subcategoria', 'subcategoria', 'subcategoria', 'subcategoria', 'subcategoria') ('prestacion', 'prestacion', 'concepto', 'concepto', 'concepto') ('tipo_prestacion', 'tipo_prestacion', 'tipo_prestacion', 'tipo_prestacion', 'tipo_prestacion') ('fecha_ingreso', 'fecha_ingreso', 'fecha_ingreso', 'fecha_ingreso', 'fecha_ingreso') ('hora_ingreso', 'hora_ingreso', 'hora_ingreso', 'hora_ingreso', 'hora_ingreso') ('domicilio_comuna', 'domicilio_comuna', 'domicilio_cgpc', 'domicilio_cgpc', 'domicilio_cgpc') ('domicilio_barrio', 'domicilio_barrio', 'domicilio_barrio', 'domicilio_barrio', 'domicilio_barrio') ('domicilio_calle', 'domiclio_calle', 'domicilio_calle', 'domicilio_calle', 'domicilio_calle') ('domicilio_altura', 'domicilio_altura', 'domicilio_altura', 'domicilio_altura', 'domicilio_altura') ('domicilio_esquina_proxima', 'domicilio_esquina_proxima', 'domicilio_esquina_proxima', 'domicilio_esquina_proxima', 'domicilio_esquina_proxima') ('lat', 'lat', 'lat', 'lat', 'lat') ('lon', 'lon', 'long', 'long', 'long') ('canal', 'canal', 'canal', 'canal', 'canal') ('genero', 'genero', 'genero', 'genero', 'genero') ('estado_del_contacto', 'estado_del_contacto', 'estado_del_contacto', 'estado_del_contacto', 'estado_del_contacto') ('fecha_cierre_contacto', 'fecha_cierre_contacto', 'fecha_cierre_contacto', 'fecha_cierre_contacto', 'fecha_cierre_contacto')
for k, v in mosquitos.items():
try:
v.rename(columns={'long': 'lon'}, inplace=True)
v.rename(columns={'concepto': 'prestacion'}, inplace=True)
except:
pass
for k, v in mosquitos.items():
v.to_csv(f"mosquitos-{k}.csv", index=False, sep=";")
_ = plt.figure(figsize=(20,10))
_ = plt.bar(barrios_ms_2022.index, barrios_ms_2022.values)
_ = plt.figure(figsize=(20,10))
_ = plt.pie(barrios_ms_2022.values, labels=barrios_ms_2022.index, autopct='%1.1f%%')
# Plot all years in one fig, with a subplot for each year
fig, axs = plt.subplots(5, 1, figsize=(20, 20))
for i, (k, v) in enumerate(mosquitos.items()):
axs[i].pie(v['domicilio_barrio'].value_counts()[0:10][::-1].values, labels=v['domicilio_barrio'].value_counts()[0:10][::-1].index, autopct='%1.1f%%')
axs[i].set_title(k)
plt.show()
len(mosquitos_2021)
1060
mosquitos_total = pd.concat([mosquitos_2022, mosquitos_2021, mosquitos_2020, mosquitos_2019, mosquitos_2018])
mosquitos_total["domicilio_barrio"] = mosquitos_total["domicilio_barrio"].str.upper()
mes_f = lambda x: x % 100
anio_f = lambda x: x // 100
#mosquitos_total_palermo = mosquitos_total[mosquitos_total["domicilio_barrio"] == "PALERMO"]
mosquitos_total["mes"] = mosquitos_total["periodo"].apply(mes_f)
mosquitos_total["anio"] = mosquitos_total["periodo"].apply(anio_f)
mosquitos_total
contacto | periodo | categoria | subcategoria | prestacion | tipo_prestacion | fecha_ingreso | hora_ingreso | domicilio_comuna | domicilio_barrio | ... | lat | lon | canal | genero | estado_del_contacto | fecha_cierre_contacto | domiclio_calle | domicilio_cgpc | mes | anio | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1785 | 00002269/22 | 202201 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | Criaderos de mosquitos | Reporte | 2022-01-04 | 08:59:23 | 3.0 | SAN CRISTOBAL | ... | -34.627571 | -58.395442 | Boti | Masculino | Abierto | NaN | NaN | NaN | 1 | 2022 |
4356 | 00006028/22 | 202201 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | Criaderos de mosquitos | Reporte | 2022-01-06 | 18:03:11 | 6.0 | CABALLITO | ... | -34.616716 | -58.454184 | GCS Web | Femenino | Abierto | NaN | NaN | NaN | 1 | 2022 |
4848 | 00006269/22 | 202201 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | Criaderos de mosquitos | Reporte | 2022-01-06 | 20:49:44 | 14.0 | PALERMO | ... | -34.569974 | -58.420226 | GCS Web | Masculino | Abierto | NaN | NaN | NaN | 1 | 2022 |
4871 | 00005409/22 | 202201 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | Información sobre enfermedades transmitidas po... | Solicitud | 2022-01-06 | 12:25:45 | 1.0 | SAN NICOLAS | ... | -34.600055 | -58.378397 | App BA 147 | Femenino | Abierto | NaN | NaN | NaN | 1 | 2022 |
5365 | 00005196/22 | 202201 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | Criaderos de mosquitos | Reporte | 2022-01-06 | 10:43:06 | 10.0 | FLORESTA | ... | -34.631738 | -58.479428 | App BA 147 | Masculino | Abierto | NaN | NaN | NaN | 1 | 2022 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
883066 | 01606962/18 | 201812 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | CRIADEROS DE MOSQUITOS | SOLICITUD | 2018-12-26 | 05:45:19 p.m. | NaN | PALERMO | ... | -34.59148 | -58.414135 | 147 | femenino | Abierto | NaN | NaN | COMUNA 14 | 12 | 2018 |
884487 | 01609557/18 | 201812 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | CRIADEROS DE MOSQUITOS | SOLICITUD | 2018-12-27 | 10:03:58 a.m. | NaN | RECOLETA | ... | -34.593322 | -58.400479 | App | masculino | Abierto | NaN | NaN | COMUNA 2 | 12 | 2018 |
885678 | 01611514/18 | 201812 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | CRIADEROS DE MOSQUITOS | SOLICITUD | 2018-12-27 | 01:49:37 p.m. | NaN | PARQUE AVELLANEDA | ... | -34.640531 | -58.478674 | 147 | femenino | Abierto | NaN | NaN | COMUNA 9 | 12 | 2018 |
887110 | 01613995/18 | 201812 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | CRIADEROS DE MOSQUITOS | SOLICITUD | 2018-12-27 | 09:22:15 p.m. | NaN | BOCA | ... | -34.639052 | -58.366368 | 147 | femenino | Abierto | NaN | NaN | COMUNA 4 | 12 | 2018 |
890825 | 01620381/18 | 201812 | SALUD Y SERVICIOS SOCIALES | ENFERMEDADES TRANSMITIDAS POR MOSQUITOS | CRIADEROS DE MOSQUITOS | SOLICITUD | 2018-12-29 | 01:34:20 p.m. | NaN | PALERMO | ... | -34.579045 | -58.405114 | App | masculino | Abierto | NaN | NaN | COMUNA 14 | 12 | 2018 |
2255 rows × 23 columns
mosquitos_total["fecha"] = pd.to_datetime(mosquitos_total["anio"].astype(str) + "-" + mosquitos_total["mes"].astype(str) + "-01")
mosquitos_total["fecha_ingreso"] = pd.to_datetime(mosquitos_total["fecha_ingreso"], infer_datetime_format=True)
# Scatter plot of ocurring dates, in the x axis is the date, in the y axis is the number of denuncias
# The column "fecha_ingreso" is the date when the denuncia was made
data_key = "fecha"
data_x = mosquitos_total[data_key].value_counts().sort_index().index
data_y = mosquitos_total[data_key].value_counts().sort_index().values
# fill data x with missing dates
for d in pd.date_range(start=data_x.min(), end=data_x.max(), freq='MS'):
if d not in data_x:
data_x = data_x.append(pd.Index([d]))
data_y = np.append(data_y, 0)
data_x = data_x.sort_values()
data_y = data_y[data_x.argsort()]
_ = plt.figure(figsize=(20,10))
_ = plt.scatter(data_x, data_y)
data_x, len(data_x)
(DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01', '2018-05-01', '2018-06-01', '2018-07-01', '2018-08-01', '2018-09-01', '2018-10-01', '2018-11-01', '2018-12-01', '2019-01-01', '2019-02-01', '2019-03-01', '2019-04-01', '2019-05-01', '2019-06-01', '2019-07-01', '2019-08-01', '2019-09-01', '2019-10-01', '2019-11-01', '2019-12-01', '2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01', '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01', '2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01', '2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01', '2021-05-01', '2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01', '2021-10-01', '2021-11-01', '2021-12-01', '2022-01-01', '2022-02-01', '2022-03-01'], dtype='datetime64[ns]', freq=None), 51)
# Cuadratic regression with numpy
# ignore every month with 0 denuncias
#data_x = data_x[data_y != 0]
#data_y = data_y[data_y != 0]
x = np.array(range(len(data_x)))
y = data_y
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
xp = np.linspace(0, len(data_x), 100)
_ = plt.figure(figsize=(20,10))
_ = plt.scatter(x, y)
_ = plt.plot(xp, p(xp), '-', color="red")
# get betas of the regression
z
array([ 1.17819005, 14.76093514])
# Cant of denuncias for a given date
given_date = "2025-01-01"
# months from "2018_01_01" to given_date
n_months = len(pd.date_range(start="2018-01-01", end=given_date, freq="MS"))
n_months
85
Proyección para el año 2025
p(n_months)
114.90708898944189
Gráfico de la regresión
# project 60 months into the future
xp = np.linspace(0, len(data_x) + 60, 100)
_ = plt.figure(figsize=(20,10))
_ = plt.scatter(x, y)
_ = plt.plot(xp, p(xp), '-', color="red")
canales = mosquitos_2021["canal"].value_counts()
total = sum(canales.values)
# Percentage of denuncias by canal
for k, v in canales.items():
print(f"{k}: {round(v/total*100, 2)}%")
GCS Web: 47.55% App BA 147: 39.15% Call Center: 5.47% Boti: 4.72% Operador GCBA: 1.7% Comuna: 0.85% Mail 147: 0.47% Operador FIXIT: 0.09%