Análisis de Datos de Temperatura A Largo Plazo

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 15

|Gestion Sostenible Del Agua

Curso de Python en Hidrologia – Parte II


Sesión 4 – Análisis de datos de temperatura a largo plazo

Objetivos:

Análisis de datos de estaciones meteorológicas como precipitación, nieve y temperatura


durante un período de 150 años. Exploración de datos, generación de métricas y
diagnóstico del desarrollo de los parámetros meteorológicos.

Exploración de datos climáticos con Python y Pandas

Se va crear una carpeta notebook con el nombre de está session. Luego se va importar
las librerías necesarias.

import pandas as pd

import matplotlib.pyplot as plt

Ahora abra directamente el archivo de datos climáticos. El archivo se encuentra en el


directorio "Datos" de esta sesión.

#open the csv

climateData =
pd.read_csv('../Data/2368871.csv',parse_dates=True,index_col=2)

#check the data types

print(climateData.dtypes)

Luego verifique el tipo de índice.

print(climateData.index)

Después de eso, verifique la descripción de los valores.


|Gestion Sostenible Del Agua

climateData.describe()

Luego vamos a mostrar algunas columnas:

climateData =
climateData.drop(['STATION','NAME','ACSH','AWND','EVAP','PSUN','TAVG',
'TOBS'],axis=1)

climateData.describe()

Luego se va explorer las variables de precipitación, nieve Then explore precipitation,


snowfall y profundidad de nieve para un año determinado.
|Gestion Sostenible Del Agua

for station in stationNames:

#filter dataframe for the station

stationDf = dataDf.loc[dataDf.STATION==station]

# apply date as index

stationDf.index = stationDf.DATE

# create new column on compiled dataframe

compDf[station] = stationDf.PRCP

Luego crearemos un gráfico.

fig = plt.figure(figsize=(12,8))

climateData['2009-10':'2010-09'].PRCP.plot()

climateData['2009-10':'2010-09'].SNOW.plot()

climateData['2009-10':'2010-09'].SNWD.plot()

plt.ylim(0)

plt.legend()
|Gestion Sostenible Del Agua

plt.ylabel('Height (in)')

plt.show()

Distribución temporal de los datos climáticos

Ahora que estamos trabajando con la temperatura, en el siguiente código mostraremos


un gráfico de temperatura mínima y máxima mensualmente.

averageData = climateData.groupby([lambda x:x.month]).mean()

averageData[['TMIN','TMAX']].plot()
|Gestion Sostenible Del Agua

Luego cambie la unidad de temperatura.

climateData['tMaxC'] = (climateData.TMAX - 32)*5/9

climateData['tMinC'] = (climateData.TMIN - 32)*5/9

Luego crea un dataframe con valores de temperatura.

tempData = climateData.loc[:,['tMaxC','tMinC']]

tempData.head()
|Gestion Sostenible Del Agua

Luego obtenga datos mensuales por año:

monthlyData =
tempData.groupby(climateData.index.to_period('M')).median()

monthlyData.tMaxC.plot()

Ahora obtenga una revisión de los datos de febrero:

febData = monthlyData[monthlyData.index.month==2]

febData.tMaxC.plot()

febData.tMinC.plot()
|Gestion Sostenible Del Agua

Luego se va realizar diferencia entre tmax y tmin, pero primero hacemos una copia:

febData = febData.copy()

febData['deltaT'] = febData.tMaxC - febData.tMinC

febData['deltaT'].plot()
|Gestion Sostenible Del Agua

Análisis de datos de temperatura mínima y máxima

Luego se va realizar una revision de los datos de septiembre.

sepData = monthlyData[monthlyData.index.month==7]

sepData.tMaxC.plot()

sepData.tMinC.plot()
|Gestion Sostenible Del Agua

Implementación de modelo de regresión lineal para diagnosticar la


evolución de los parámetros meteorológicos en relación con el
cambio climáticom

Luego importar las siguiente librerias.

from sklearn import datasets, linear_model

from sklearn.metrics import mean_squared_error, r2_score

import numpy as np

Luego se va crear un objeto de regression linear.

sepRegr = linear_model.LinearRegression()

Luega se va entrenar al modelo usando los conjuntos de entrenamiento.


|Gestion Sostenible Del Agua

sepTrain = np.array([[i] for i in range(sepData.shape[0])])

sepRegr.fit(sepTrain, sepData.tMaxC)

#sepTest = np.arange(0,sepData.shape[0])[np.newaxis].T

sepPred = sepRegr.predict(sepTrain)

sepData = sepData.copy()

sepData['tMaxPredict'] = sepPred

#sepTrain

Luego creamos una gráfica de regresión lineal.

fig, ax = plt.subplots(figsize=(12,4))

sepData.tMaxC.plot()

sepData.tMaxPredict.plot()

ax.grid()

ax.set_title('September')

ax.legend()

ax.text(0.7,0.1,'Slope = %.5f'%sepRegr.coef_[0],
transform=ax.transAxes)

ax.text(0.7,0.2,'Mean squared error =


%.2f'%mean_squared_error(sepData.tMaxC, sepPred),
transform=ax.transAxes)

ax.text(0.7,0.3,'Determination coeff = %.2f'%r2_score(sepData.tMaxC,


sepPred), transform=ax.transAxes)

plt.show()
|Gestion Sostenible Del Agua

Luego se va realizar un grafico compuesto.

fig, ax = plt.subplots(figsize=(12,10))

sepData.tMaxC.plot(c='deeppink')

sepData.tMaxPredict.plot(c='deeppink', ls='--')

febData.tMaxC.plot(c='royalblue')

febData.tMaxPredict.plot(c='royalblue', ls='--')

ax.grid()

ax.legend()

plt.show()
|Gestion Sostenible Del Agua

Comprobando la variabilidad durante décadas

Ahora, analizamos la desviación estándar usando los siguientes scripts:

stdData = climateData.groupby(climateData.index.to_period('M')).std()

stdData.tMaxC.plot()

febStd = stdData[stdData.index.month==2]

sepStd = stdData[stdData.index.month==7]

fig, ax = plt.subplots(figsize=(12,6))

febStd.tMaxC.plot(c='gold')

sepStd.tMaxC.plot()

ax.grid()

ax.legend()

plt.show()
|Gestion Sostenible Del Agua

Luego analizamos la variabilidad en decadas.

import scipy.stats as st

dec1900 = climateData['1900':'1910']

per10List = []

medianList = []

per90List = []

for m in range(12):

monthData = dec1900[dec1900.index.month==m]

per10 = st.scoreatpercentile(monthData.tMaxC,10)

per50 = st.scoreatpercentile(monthData.tMaxC,50)

per90 = st.scoreatpercentile(monthData.tMaxC,90)

per10List.append(per10)
|Gestion Sostenible Del Agua

medianList.append(per50)

per90List.append(per90)

fig = plt.figure(figsize=(16,4))

plt.plot(range(12),per10List,alpha=0.5,c='crimson')

plt.plot(range(12),medianList,c='crimson',label='dec1900')

plt.plot(range(12),per90List,alpha=0.5,c='crimson')

plt.legend()

Finalmente, agregamos el siguiente script:

def plotPeriod(start,stop,color):

periodData = climateData[start:stop]

per10List = []

medianList = []

per90List = []

for m in range(12):

monthData = periodData[periodData.index.month==m]

per10 = st.scoreatpercentile(monthData.tMaxC,10)

per50 = st.scoreatpercentile(monthData.tMaxC,50)

per90 = st.scoreatpercentile(monthData.tMaxC,90)

per10List.append(per10)

medianList.append(per50)

per90List.append(per90)

plt.plot(range(12),per10List,alpha=0.5,ls='--',c=color)
|Gestion Sostenible Del Agua

plt.plot(range(12),medianList,lw=2,c=color,label='From %s to
%s'%(start,stop))

plt.plot(range(12),per90List,alpha=0.5,ls='--',c=color)

fig = plt.figure(figsize=(18,6))

plotPeriod('1900','1940','royalblue')

plotPeriod('1940','1980','crimson')

plotPeriod('1980','2020','gold')

plt.legend()

plt.grid()

plt.show()

fig = plt.figure(figsize=(18,12))

plotPeriod('1855','1955','aqua')

plotPeriod('1955','1985','lightskyblue')

plotPeriod('1985','2005','dodgerblue')

plotPeriod('2005','2015','royalblue')

plotPeriod('2015','2020','gold')

plt.legend()

plt.grid()

plt.show()

También podría gustarte