Análisis de datos con las librerías 'pandas' y 'folium'

Antes de empezar, creamos variables para la localización de Zaragoza y usarla al ejecutar las funciones de folium

In [3]:
url_zgz='https://www.zaragoza.es/sede/servicio/transporte/accidentalidad-trafico/accidente.csv'
geo_zgz=[41.649693,-0.887712]

En primer lugar, instalamos la librería porque el paquete (folium) no se encuentra dentro de las librerías de las que dispone Jupyterhub

In [7]:
!pip install folium
Requirement already satisfied: folium in ./.local/lib/python3.8/site-packages (0.12.1.post1)
Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from folium) (1.21.1)
Requirement already satisfied: jinja2>=2.9 in /usr/lib/python3/dist-packages (from folium) (2.10.1)
Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (from folium) (2.25.0)
Requirement already satisfied: branca>=0.3.0 in ./.local/lib/python3.8/site-packages (from folium) (0.4.2)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests->folium) (2020.6.20)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests->folium) (1.25.8)
Requirement already satisfied: idna<3,>=2.5 in /usr/lib/python3/dist-packages (from requests->folium) (2.8)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/lib/python3/dist-packages (from requests->folium) (3.0.4)

Importamos las dos librerías. A pandas en concreto la llamamos pd para referenciarla así y no tener que escribir el nombre completo cada vez

In [9]:
import pandas as pd
import folium

Generamos una variable que guarda los datos de la función de folium (el mapa con las coordinadas asignadas a la variable geo_zgz)

In [13]:
mapa_zgz = folium.Map(location=geo_zgz)

Llamamos a la variable que contenía los datos de la función de folium. Esto nos mostrará un mapa con la información de nuestra localización

In [14]:
mapa_zgz
Out[14]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Llamamos al URL que contiene el archivo CSV con la función de pandas read_csv y después analizamos con nano qué delimitadores tiene este archuivo en concreto y comprobamos que es ;, de manera que utilizamos este signo, especificando que ese es el delimitador

In [16]:
df_zgz = pd.read_csv(url_zgz,delimiter= ';')

Del dataframe df_zgz averiguamos el nombre de sus columnas

In [18]:
 df_zgz.columns
Out[18]:
Index(['id', 'year', 'type', 'accidentType', 'firstAddress', 'secondAddress',
       'geometry', 'reason', 'area', 'creationDate', 'daniosMateriales',
       'falloMecanico', 'estadoPavimento', 'tipoEstadoPavimento',
       'estadoAtmosfera', 'tipoEstadoAtmosfera', 'afectado', 'vehiculo'],
      dtype='object')

Indicamos qué columna queremos que se visualice, en este caso, la columna 'reason'

In [19]:
df_zgz['reason']
Out[19]:
0             PERDIDA del control por FALTA de ATENCIÓN
1                   DISTANCIA DE SEGURIDAD, no mantener
2             PERDIDA del control por FALTA de ATENCIÓN
3           CEDA EL PASO, no respetar prioridad de paso
4          PERDIDA del control por VELOCIDAD INADECUADA
5               Caída de ocupante en Transporte Público
6           PEATÓN cruza calz SIN PREFER. fuera de paso
7     INVADIR otro carril en el mismo sentido de cir...
8             PERDIDA del control por FALTA de ATENCIÓN
9     INVADIR otro carril en el mismo sentido de cir...
10              Caída de ocupante en Transporte Público
11            PERDIDA del control por FALTA de ATENCIÓN
12            PERDIDA del control por FALTA de ATENCIÓN
13            PERDIDA del control por FALTA de ATENCIÓN
14    PEATÓN cruza calz SIN PREFER. en PASO CON semá...
15            PERDIDA del control por FALTA de ATENCIÓN
16                  DISTANCIA DE SEGURIDAD, no mantener
17            PERDIDA del control por FALTA de ATENCIÓN
18            PERDIDA del control por FALTA de ATENCIÓN
19            PERDIDA del control por FALTA de ATENCIÓN
20                       PUERTA abierta incorrectamente
21            PERDIDA del control por FALTA de ATENCIÓN
22            PERDIDA del control por FALTA de ATENCIÓN
23                                         MARCHA ATRÁS
24         PERDIDA del control por VELOCIDAD INADECUADA
25              SEMÁFORO, no respetar prioridad de paso
26    INVADIR otro carril en el mismo sentido de cir...
27                       PUERTA abierta incorrectamente
28    INVADIR otro carril en el mismo sentido de cir...
29    INVADIR otro carril en el mismo sentido de cir...
30                  DISTANCIA DE SEGURIDAD, no mantener
31    INVADIR otro carril en el mismo sentido de cir...
32                                         OTRAS CAUSAS
33    INVADIR otro carril en el mismo sentido de cir...
34                                         MARCHA ATRÁS
35            PERDIDA del control por FALTA de ATENCIÓN
36    INVADIR otro carril en el mismo sentido de cir...
37    PEATÓN cruza calz CON PREFER. en PASO  CON sem...
38                                         MARCHA ATRÁS
39                                         MARCHA ATRÁS
40                                         OTRAS CAUSAS
41    PEATÓN cruza calz CON PREFER. en PASO  SIN sem...
42            PERDIDA del control por FALTA de ATENCIÓN
43            PERDIDA del control por FALTA de ATENCIÓN
44            PERDIDA del control por FALTA de ATENCIÓN
45    INVADIR otro carril en el mismo sentido de cir...
46                  DISTANCIA DE SEGURIDAD, no mantener
47            PERDIDA del control por FALTA de ATENCIÓN
48            PERDIDA del control por FALTA de ATENCIÓN
49            PERDIDA del control por FALTA de ATENCIÓN
Name: reason, dtype: object

Utilizamos la función unique para saber los valores distintos que existen en la columna reason

In [20]:
df_zgz['reason'].unique()
Out[20]:
array(['PERDIDA del control por FALTA de ATENCIÓN',
       'DISTANCIA DE SEGURIDAD, no mantener',
       'CEDA EL PASO, no respetar prioridad de paso',
       'PERDIDA del control por VELOCIDAD INADECUADA',
       'Caída de ocupante en Transporte Público',
       'PEATÓN cruza calz SIN PREFER. fuera de paso',
       'INVADIR otro carril en el mismo sentido de circulación',
       'PEATÓN cruza calz SIN PREFER. en PASO CON semáforo',
       'PUERTA abierta incorrectamente', 'MARCHA ATRÁS',
       'SEMÁFORO, no respetar prioridad de paso', 'OTRAS CAUSAS',
       'PEATÓN cruza calz CON PREFER. en PASO  CON semáforo',
       'PEATÓN cruza calz CON PREFER. en PASO  SIN semáforo'],
      dtype=object)

Utilizamos la función unique para saber los valores distintos que existen en la columna type

In [21]:
df_zgz['type'].unique()
Out[21]:
array(['SALIDA CALZADA', 'COLISIÓN ALCANCE', 'COLIS FRONTOLATERAL',
       'OTRAS', 'ATROPELLO', 'CAIDA SOBRE CALZADA', 'COLIS. MARCHA ATRÁS',
       'COLISIÓN LATERAL'], dtype=object)