Visualización de datos COVID-19 usando matplotlib en Python

Se siente surrealista imaginar cómo el virus comenzó a propagarse desde una persona que es el paciente cero hasta cuatro millones en la actualidad. Fue posible gracias al sistema de transporte. Anteriormente, no teníamos ni una fracción del sistema de transporte que tenemos hoy.

Bueno, las buenas prácticas que puede seguir por ahora son desinfectar sus productos comestibles y mantenerlos inactivos durante uno o dos días. Hasta que encontremos una vacuna que podría estar a años de distancia, mantener la distancia social en lugares públicos es la única forma de reducir la cantidad de casos. Asegúrese de tomar vitamina C en forma de tabletas adicionales o en forma de alimentos. Bueno, no evitará que contraiga corona, pero al menos si se infecta, su inmunidad será más fuerte que la de la persona que no lo tomó para combatir el virus. La última práctica es reemplazar sus apretones de manos con Namaste o Wakanda Salute.

Empezando

Revisaremos algunos gráficos básicos disponibles en matplotlib y lo haremos más agradable estéticamente.

Aquí están las visualizaciones que diseñaremos usando matplotlib

  • ¿Trama simple?—?Manejo de fechas
  • Gráfico circular
  • Parcela de barra 
     

Enlace a los conjuntos de datos (CSV): Haga clic aquí

Inicializando conjunto de datos

Importación de un conjunto de datos en la serie temporal de casos de Covid-19 India

data = pd.read_csv('case_time_series.csv')

El conjunto de datos case_time_series.csv tiene 7 columnas. Recopilaremos diarios confirmados, diarios recuperados y diarios fallecidos en variables como array.

Y = data.iloc[61:,1].values #Stores Daily Confirmed
R = data.iloc[61:,3].values #Stores Daily Recovered
D = data.iloc[61:,5].values #Stores Daily Deceased
X = data.iloc[61:,0] #Stores Date

La variable ‘ Y’ almacena los casos de coronavirus ‘Confirmados diariamente’

La variable ‘ R’ almacena los casos de coronavirus ‘Recuperados diariamente’

La variable ‘D almacena los casos de coronavirus ‘Diario fallecido’

Y la variable ‘X’ almacena la columna ‘Fecha’

Trazado Trazado simple

Seguiremos el método orientado a objetos para el trazado. La función plot toma dos argumentos que son los valores del eje X y los valores del eje Y. En este caso, pasaremos la variable ‘X’ que tiene ‘Fechas’ y la variable ‘Y’ que tiene ‘Diario confirmado’ para trazar.

Ejemplo:

Python3

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
 
data = pd.read_csv('case_time_series.csv')
 
Y = data.iloc[61:,1].values
R = data.iloc[61:,3].values
D = data.iloc[61:,5].values
X = data.iloc[61:,0]
 
plt.plot(X,Y)

Producción:

Obtenemos un diagrama simple sobre la ejecución del código anterior que se ve así, donde el eje X tiene fechas y el eje Y tiene el número de casos confirmados. Pero esta no es la mejor representación para valores de conjuntos de datos grandes a lo largo de los ejes, ya que puede ver que las ‘Fechas’ se superponen en el eje X. Para superar este desafío, presentaremos algunas funciones nuevas para tener más control sobre la estética del gráfico.

Estética

Para tener control sobre la estética del gráfico, como etiquetas, títulos, color y tamaño, aplicaremos más funciones, como se muestra a continuación.

plt.figure(figsize=(25,8))

Esto crea un lienzo para el gráfico donde el primer valor ’25’ es la posición del argumento ancho y ‘8’ es la posición del argumento alto del gráfico.

ax = plt.axes()

Vamos a crear un objeto de los ejes del gráfico como ‘ax’ para que sea más fácil implementar funciones.

ax.grid(linewidth=0.4, color='#8f8f8f') 

La función ‘.grid’ le permite crear líneas de cuadrícula a lo largo del gráfico. El ancho de las líneas de la cuadrícula se puede ajustar simplemente pasando un argumento ‘ancho de línea’ y cambiando su color pasando el argumento ‘color’.

ax.set_facecolor("black") 

ax.set_xlabel('\nDate',size=25,
              color='#4bb4f2')
              
ax.set_ylabel('Number of Confirmed Cases\n',
               size=25,color='#4bb4f2')

‘.set_facecolor’ le permite establecer el color de fondo del gráfico que aquí es negro. ‘.set_xlabel’ y ‘.set_ylabel’ le permiten configurar la etiqueta a lo largo de ambos ejes cuyo tamaño y color se pueden modificar.

ax.plot(X,Y,
        color='#1F77B4',
        marker='o',
        linewidth=4,
        markersize=15,
        markeredgecolor='#035E9B')

Ahora trazamos el gráfico nuevamente con ‘X’ como Fechas e ‘Y’ como Confirmación diaria llamando a la función de trazado. La línea de trazado, el marcador y el color se pueden modificar pasando color, linewidth?—?para cambiar el color y ajustar el ancho de la línea de trazado y el marcador, markersize, markeredgecolor?—?para crear un marcador que es el círculo en este caso, ajuste el tamaño del marcador y definir el color del borde del marcador.

Código completo:

Python3

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
data = pd.read_csv('case_time_series.csv')
 
Y = data.iloc[61:,1].values
R = data.iloc[61:,3].values
D = data.iloc[61:,5].values
X = data.iloc[61:,0]
 
plt.figure(figsize=(25,8))
 
ax = plt.axes()
ax.grid(linewidth=0.4, color='#8f8f8f')
 
ax.set_facecolor("black")
ax.set_xlabel('\nDate',size=25,color='#4bb4f2')
ax.set_ylabel('Number of Confirmed Cases\n',
              size=25,color='#4bb4f2')
 
ax.plot(X,Y,
        color='#1F77B4',
        marker='o',
        linewidth=4,
        markersize=15,
        markeredgecolor='#035E9B')

Producción:

Aún así, como podemos ver, las fechas se superponen y las etiquetas a lo largo de los ejes no son lo suficientemente claras. Así que ahora vamos a cambiar las marcas de los ejes y también anotar los gráficos.

plt.xticks(rotation='vertical',size='20',color='white')
plt.yticks(size=20,color='white')
plt.tick_params(size=20,color='white')

‘.xticks’ y ‘.yticks’ le permiten modificar las fechas y la fuente diaria confirmada. Para que las fechas no se superpongan entre sí, las representaremos verticalmente pasando ‘rotación = vertical’. Para que los ticks sean fáciles de leer, cambiamos el color de fuente a blanco y el tamaño a 20.

‘.tick_params’ le permite modificar el tamaño y el color de los guiones que actúan como un puente entre los ticks y el gráfico.

for i,j in zip(X,Y):
    ax.annotate(str(j),xy=(i,j+100),
                color='white',size='13')

‘.anotar’ le permite anotar en el gráfico. Aquí hemos escrito un código para anotar los puntos graficados ejecutando un bucle for que traza en los puntos graficados. El str(j) contiene la variable ‘Y’ que se confirma diariamente. Cualquier string pasada se trazará. El XY son las coordenadas donde se debe trazar la string. Y finalmente se puede definir el color y el tamaño. Tenga en cuenta que hemos agregado +100 a j en las coordenadas XY para que la string no se superponga con el marcador y esté a una distancia de 100 unidades en el eje Y?—?.

ax.annotate('Second Lockdown 15th April',
            xy=(15.2, 860),
            xytext=(19.9,500),
            color='white',
            size='25',
            arrowprops=dict(color='white',
                            linewidth=0.025))

Para anotar una flecha que apunta a una posición en el gráfico y su cola sostiene la string, podemos definir el argumento ‘arrowprops’ junto con las coordenadas de su cola definidas por ‘xytext’. Tenga en cuenta que la alteración de ‘arrowprops’ se puede hacer usando un diccionario.

plt.title("COVID-19 IN : Daily Confirmed\n",
          size=50,color='#28a9ff')

Finalmente definimos un título por ‘.title’ y pasando string, su tamaño y color.

Código completo:

Python3

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
data = pd.read_csv('case_time_series.csv')
 
Y = data.iloc[61:,1].values
R = data.iloc[61:,3].values
D = data.iloc[61:,5].values
X = data.iloc[61:,0]
 
plt.figure(figsize=(25,8))
 
ax = plt.axes()
ax.grid(linewidth=0.4, color='#8f8f8f')
 
ax.set_facecolor("black")
ax.set_xlabel('\nDate',size=25,color='#4bb4f2')
ax.set_ylabel('Number of Confirmed Cases\n',
              size=25,color='#4bb4f2')
 
plt.xticks(rotation='vertical',size='20',color='white')
plt.yticks(size=20,color='white')
plt.tick_params(size=20,color='white')
 
for i,j in zip(X,Y):
    ax.annotate(str(j),xy=(i,j+100),color='white',size='13')
     
ax.annotate('Second Lockdown 15th April',
            xy=(15.2, 860),
            xytext=(19.9,500),
            color='white',
            size='25',
            arrowprops=dict(color='white',
                            linewidth=0.025))
 
plt.title("COVID-19 IN : Daily Confirmed\n",
          size=50,color='#28a9ff')
 
ax.plot(X,Y,
        color='#1F77B4',
        marker='o',
        linewidth=4,
        markersize=15,
        markeredgecolor='#035E9B')

Producción:

python-matplotlib-covid-19

Gráfico circular

Trazaremos el gráfico circular de transmisión para comprender cómo se propaga el virus en función de los viajes, la visita al lugar y el motivo desconocido.

Inicializando conjunto de datos

slices = [62, 142, 195]
activities = ['Travel', 'Place Visit', 'Unknown']

Por lo tanto, hemos creado segmentos de lista en función de los cuales se dividirá nuestro gráfico circular y se valorarán las actividades correspondientes.

Trazado de gráfico circular

cols=['#4C8BE2','#00e061','#fe073a']
exp = [0.2,0.02,0.02]
plt.pie(slices,
labels=activities, 
textprops=dict(size=25,color='black'),
radius=3,
colors=cols,
autopct='%2.2f%%',
explode=exp,
shadow=True,
startangle=90)
plt.title('Transmission\n\n\n\n',color='#4fb4f2',size=40)

Para trazar un gráfico circular, llamamos a la función ‘.pie’ que toma valores x, que son ‘rebanadas’ aquí, según esto, el pastel se divide seguido de etiquetas que tienen la string correspondiente a los valores que representa. Estos valores de string se pueden modificar con ‘textprops’. Para cambiar el radio o el tamaño de Pie, lo llamamos ‘radio’. Para la estética llamamos ‘sombra’ como True y ‘startangle’ = 90. Podemos definir los colores para asignar pasando una lista de colores correspondientes. Para espaciar cada parte de Pie, podemos pasar la lista de valores correspondientes para ‘explotar’. El ‘autopct’ define el número de posiciones que se pueden mostrar. En este caso, autopct permite 2 posiciones antes y después del lugar decimal.

Código completo :

Python3

slices = [62, 142, 195]
activities = ['Travel', 'Place Visit', 'Unknown']
 
cols=['#4C8BE2','#00e061','#fe073a']
exp = [0.2,0.02,0.02]
 
plt.pie(slices,labels=activities,
        textprops=dict(size=25,color='black'),
        radius=3,
        colors=cols,
        autopct='%2.2f%%',
        explode=exp,
        shadow=True,
        startangle=90)
 
plt.title('Transmission\n\n\n\n',color='#4fb4f2',size=40)

Producción:

Parcela de barra 

Ahora vamos a trazar el tipo de gráfico más común, que es un gráfico de barras. Aquí estaremos trazando los casos de coronavirus sabios del distrito para un estado. 

Inicializando conjunto de datos

data = pd.read_csv('district.csv')
data.head()

re=data.iloc[:30,5].values
de=data.iloc[:30,4].values
co=data.iloc[:30,3].values
x=list(data.iloc[:30,0])

Las tiendas ‘re’ Los pacientes corona recuperados cuentan para todos los distritos.

Tiendas ‘de’ Los pacientes corona fallecidos cuentan para todos los distritos.

Tiendas ‘co’ Los pacientes corona confirmados cuentan para todos los distritos. 

‘x’ nombres de Distrito almacenados.

Trazado de gráfico de barras

plt.figure(figsize=(25,10))
ax=plt.axes()

ax.set_facecolor('black')
ax.grid(linewidth=0.4, color='#8f8f8f')


plt.xticks(rotation='vertical',
           size='20',
           color='white')#ticks of X

plt.yticks(size='20',color='white')


ax.set_xlabel('\nDistrict',size=25,
              color='#4bb4f2')
ax.set_ylabel('No. of cases\n',size=25,
              color='#4bb4f2')


plt.tick_params(size=20,color='white')


ax.set_title('Maharashtra District wise breakdown\n',
             size=50,color='#28a9ff')

El código para la estética será el mismo que vimos en la trama anterior. Lo único que cambiará es llamar a la función de barra.

plt.bar(x,co,label='re')
plt.bar(x,re,label='re',color='green')
plt.bar(x,de,label='re',color='red')

for i,j in zip(x,co):
    ax.annotate(str(int(j)),
                xy=(i,j+3),
                color='white',
                size='15')

plt.legend(['Confirmed','Recovered','Deceased'],
           fontsize=20)

Para trazar un gráfico de barras llamamos ‘.bar’ y le pasamos los valores del eje x y del eje y. Aquí llamamos a la función de trazado tres veces para los tres casos (es decir, recuperado, confirmado, fallecido) y los tres valores se trazan con respecto al eje y y el eje x son comunes para los tres, que son nombres de distrito. Como puede ver, anotamos solo para números confirmados iterando sobre el valor de casos confirmados. Además, hemos mencionado ‘.leyenda’ para indicar las leyendas del gráfico.

Código completo:

Python3

data = pd.read_csv('district.csv')
data.head()
 
re=data.iloc[:30,5].values
de=data.iloc[:30,4].values
co=data.iloc[:30,3].values
x=list(data.iloc[:30,0])
 
plt.figure(figsize=(25,10))
ax=plt.axes()
 
ax.set_facecolor('black')
ax.grid(linewidth=0.4, color='#8f8f8f')
 
 
plt.xticks(rotation='vertical',
           size='20',
           color='white')#ticks of X
 
plt.yticks(size='20',color='white')
 
 
ax.set_xlabel('\nDistrict',size=25,
              color='#4bb4f2')
ax.set_ylabel('No. of cases\n',size=25,
              color='#4bb4f2')
 
 
plt.tick_params(size=20,color='white')
 
 
ax.set_title('Maharashtra District wise breakdown\n',
             size=50,color='#28a9ff')
 
plt.bar(x,co,label='re')
plt.bar(x,re,label='re',color='green')
plt.bar(x,de,label='re',color='red')
 
for i,j in zip(x,co):
    ax.annotate(str(int(j)),
                xy=(i,j+3),
                color='white',
                size='15')
 
plt.legend(['Confirmed','Recovered','Deceased'],
           fontsize=20)

Producción:

Publicación traducida automáticamente

Artículo escrito por smarthardik10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *