Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Exemplos de Uso do Método get_data(idPCD, data_inicial, data_final)

Neste notebook, exploramos como utilizar o método get_data(idPCD, data_inicial, data_final) da classe PcdsApiClient para obter e processar dados de uma PCD em um intervalo de datas especificado. Além disso, vamos usar outros métodos para garantir que o intervalo de datas esteja dentro do período de disponibilidade e aplicar filtros para análises detalhadas. Neste exemplo, também visualizaremos os dados com gráficos de barras coloridos conforme a faixa de temperatura.

from pySINDA import PcdsApiClient
import pandas as pd
import matplotlib.pyplot as plt

# Token de autenticação
token = 'seu_token'

# Instanciando o cliente
pcds = PcdsApiClient(token)

Exemplo: Visualização de Temperatura com Gráfico de Barras Colorido

Neste exemplo, vamos obter dados de temperatura para um PCD específico e visualizar as temperaturas em um gráfico de barras, destacando as faixas de temperatura com cores diferentes.

pcd_id = 70123
print(f'Recuperando período de disponibilidade da PCD com ID {pcd_id}...')
period_availability = pcds.get_period_availability(pcd_id)
print(period_availability)
Recuperando período de disponibilidade da PCD com ID 70123...
{'data_inicial': '2006-01-25T00:00:00', 'data_final': '2024-08-06T00:00:00'}

O período de disponibilidade da PCD é de 2006-01-25 a 2024-08-06. Vamos agora obter dados de temperatura para um intervalo de datas dentro desse período, por exemplo, de 2023-01-01 a 2023-01-02.

start_date = '2023-02-15'
end_date = '2023-02-15'
print(f'Recuperando dados da PCD com ID {pcd_id} entre {start_date} e {end_date}...')
data = pcds.get_data(pcd_id, start_date, end_date)
print(data)
Recuperando dados da PCD com ID 70123 entre 2023-01-01 e 2023-01-02...
[{'Data': '2023-01-01 00:00:00', 'TempOut (°C)': '24.2', 'HiTemp (°C)': '24.2', 'OutHum (%)': '88', 'DewPt (°C)': '22.1', 'WindSpeed (m/s)': '0.4', 'WindDir (deg)': '157.5', 'HiSpeed (m/s)': '1.8', 'HeatIndex (°C)': '26.0', 'Bar (Hg)': '1004.7', 'Rain (mm)': '0.0', 'SolarRad (W/m2)': '0', 'HiSolarRad (W/m2)': '0', 'UVIndex (Numeric)': '0.0', 'ET (mm)': '0.0'}, {'Data': '2023-01-01 00:10:00', 'TempOut (°C)': '24.1', 'HiTemp (°C)': '24.2', 'OutHum (%)': '88', 'DewPt (°C)': '21.9', 'WindSpeed (m/s)': '0.0', 'WindDir (deg)': '', 'HiSpeed (m/s)': '0.0', 'HeatIndex (°C)': '25.9', 'Bar (Hg)': '1004.5', 'Rain (mm)': '0.0', 'SolarRad (W/m2)': '0', 'HiSolarRad (W/m2)': '0', 'UVIndex (Numeric)': '0.0', 'ET (mm)': '0.0'}, ...]

Os dados foram recuperados com sucesso. Vamos agora processar esses dados e criar um gráfico de barras colorido com base na faixa de temperatura.

# Convertendo os dados em um DataFrame
df = pd.DataFrame(data)

# Convertendo a coluna 'Data' para o tipo datetime
df['Data'] = pd.to_datetime(df['Data'])

# Convertendo a coluna 'TempOut (°C)' para numérico
df['TempOut (°C)'] = pd.to_numeric(df['TempOut (°C)'], errors='coerce')

# Definindo cores com base na faixa de temperatura
def color_temp(temp):
    if temp >= 30:
        return 'red'
    elif temp >= 25:
        return 'orange'
    elif temp >= 20:
        return 'yellow'
    else:
        return 'blue'

df['Color'] = df['TempOut (°C)'].apply(color_temp)

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

# Configurando o estilo do seaborn
sns.set(style="whitegrid")

# Criando o gráfico de barras
plt.figure(figsize=(14, 7))
bars = sns.barplot(x='Data', y='TempOut (°C)', data=df, palette=df['Color'].tolist())
plt.title('Temperaturas Externas com Faixas de Cor', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Temperatura (°C)', fontsize=14)

# Simplificando a legenda do eixo x
num_ticks = 10  # Número de ticks que você quer mostrar
tick_labels = df['Data'][::len(df)//num_ticks]  # Seleciona labels em intervalos regulares
plt.xticks(ticks=range(0, len(df), len(df)//num_ticks), labels=tick_labels, rotation=45)

plt.grid(axis='y', linestyle='--', alpha=0.7)

# Adicionando uma legenda
colors = {'red': 'Acima de 30°C', 'orange': 'Entre 25°C e 30°C', 'yellow': 'Entre 20°C e 25°C', 'blue': 'Abaixo de 20°C'}
handles = [plt.Line2D([0], [0], color=color, lw=4) for color in colors.keys()]
labels = [labels for labels in colors.values()]
plt.legend(handles, labels, title='Faixa de Temperatura', title_fontsize='13', fontsize='11')

plt.tight_layout()
plt.show()
/tmp/ipykernel_98836/278352523.py:2195: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  bars = sns.barplot(x='Data', y='TempOut (°C)', data=df, palette=df['Color'].tolist())
<Figure size 1400x700 with 1 Axes>