8.3.1 Archivos.csv con Python – Ejercicio con gráfica de temperatura y Humedad

Ejercicio. De una estación meteorológica se obtiene un archivo.csv con los datos de los sensores disponibles durante una semana.

2021_10_EstMeteorologica.csv

EstacionMeteorologica01

1. Lectura de archivo.csv y gráfica de datos

EstacionMeteorologica02
a. Realice la lectura de los datos desde el archivo.csv en una tabla de Pandas, muestre los nombres de las columnas

b. Añada una columna de fecha-hora con tipo de dato datetime unificando las columnas «Date» y «Time»

c. Realice la gráfica de los datos obtenidos para la variable temperatura «TEMP» vs «fecha«.

Referencia: Basic Time Series Plotting. Unidata. https://unidata.github.io/python-training/workshop/Time_Series/basic-time-series-plotting/

1.1 Solución propuesta

literal a

Para leer o cargar el archivo.csv con pandas y realizar la gráfica se usarán las librerías «pandas» y «matplotlib». La lectura del archivo usa los parámetros de separador de datos ';' y separador decimal ','. El nombre del archivo es parte del bloque de ingreso.

tabla = pd.read_csv(narchivo, sep=';',decimal=',')

literal b

Para manejar las fechas, se concatenan los valores de las columnas 'Date' y 'Time' conformando una cadena de caracteres en cada casilla de la columna 'fecha'.
Para manejar los datos y operaciones con fechas se usan el tipo de datos datetime. El formato de lectura se indica como"%d/%m/%Y %H:%M:%S" dado por una cadena de caracteres

fechaformato = "%d/%m/%Y %H:%M:%S"
tabla['fecha'] = pd.to_datetime(tabla['fecha'],
                                format=fechaformato)

literal c

La gráfica se realiza usando los datos de las columnas de fecha y temperatura.

Instrucciones Python

# lecturas archivo.csv de estación meteorológica
import pandas as pd
import matplotlib.pyplot as plt

# INGRESO
narchivo = "2021_10_EstMeteorologica.csv"

# PROCEDIMIENTO
tabla = pd.read_csv(narchivo, sep=';',decimal=',')
n = len(tabla)

# fechas concatenando columnas de texto
tabla['fecha'] = tabla['Date']+' '+tabla['Time']

# convierte a datetime
fechaformato = "%d/%m/%Y %H:%M:%S"
tabla['fecha'] = pd.to_datetime(tabla['fecha'],
                                format=fechaformato)
# SALIDA
print('columnas: ', list(tabla.keys()))

# grafica
x_horas = tabla['fecha']
y_temp  = tabla['TEMP']
plt.plot(x_horas,y_temp,'*')
plt.title('Temperatura')
plt.grid()
plt.show()

2. Separar datos por días y graficar

d. Para realizar un análisis por día y comparar entre varios días, se requiere encontrar los intervalos de inicio y fin de día.

e. Realizar la gráfica comparativa de los días.

EstacionMeteorologica03

2.1 Solución propuesta

literal d

Los intervalos se pueden entregar como una lista de los índices de las filas donde cambia el día.

literal d

Para que las gráficas se superpongan en las mismas horas, sin cambiar de día, se realiza una operación de desplazamiento pd.Timedelta(days=j) a las fechas antes de hacer cada línea de gráfica.

Las etiquetas en el eje x se cambia al formato '%H:%M' mediante la librería matplotlib.dates y la instrucción DateFormatter.

La gráfica para 7 días se presenta muchos datos, por lo que para análisis es preferible algo más simplificado, como comparar dos días para simplificar visualmente.

Instrucciones Python

# lecturas archivo.csv de estación meteorológica
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, DayLocator

# INGRESO
narchivo = "2021OctubreEstMetorologica.csv"

# PROCEDIMIENTO
tabla = pd.read_csv(narchivo, sep=';',decimal=',')
n = len(tabla)

# fechas concatenando columnas de texto
tabla['fecha'] = tabla['Date']+' '+tabla['Time']

# convierte a datetime
fechaformato = "%d/%m/%Y %H:%M:%S"
tabla['fecha'] = pd.to_datetime(tabla['fecha'],
                                format=fechaformato)

# serie por días
diaIndice = [0] # indice inicial
for i in range(1,n-1,1):
    i0_fecha = tabla['fecha'][i-1]
    i1_fecha = tabla['fecha'][i]
    if i0_fecha.day != i1_fecha.day:
        diaIndice.append(i)
diaIndice.append(len(tabla)-1) # indice final
m = len(diaIndice)

# SALIDA
print('columnas: ', list(tabla.keys()))
print('SerieDia: ',diaIndice)
print('días en serie: ', len(diaIndice))

# grafica
figura, grafica = plt.subplots()
marcador = ['.','o','v','^','<','>','1']
for j in range(0,7,1):
    i0 = diaIndice[j]
    i1 = diaIndice[j+1]
    x_horas = tabla['fecha'][i0:i1]-pd.Timedelta(days=j)
    y_temp  = tabla['TEMP'][i0:i1]
    etiqueta = str(tabla['fecha'][i0].month)+'-'
    etiqueta = etiqueta + str(tabla['fecha'][i0].day)
    
    grafica.scatter(x_horas,y_temp,
                    marker = marcador[j%7],
                    label=etiqueta)
    
# formato de eje
grafica.xaxis.set_major_formatter(DateFormatter('%H:%M'))
plt.legend()
plt.title('Temperatura')
plt.grid()
plt.show()

Otros temas de desarrollo

Regresión polinomial de grado m – Ejercicio Temperatura para un día