Ejercicio. De una estación meteorológica se obtiene un archivo.csv con los datos de los sensores disponibles durante una semana.
1. Lectura de archivo.csv y gráfica de datos
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.
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