Exemplos de Uso do Método get_pcd_metadata(idPCD)
Neste notebook, vamos explorar o método get_pcd_metadata(idPCD) da classe PcdsApiClient para obter os metadados de uma PCD específica. Também vamos integrar esses metadados com outros dados, como dados de temperatura, para criar um relatório mais completo.
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 1: Obtendo Metadados da PCD¶
Neste exemplo, vamos obter os metadados de uma PCD específica e analisar como esses dados podem ser utilizados em conjunto com outros métodos para obter informações adicionais.
pcd_id = 70122
print(f'Recuperando metadados da PCD com ID {pcd_id}...')
metadata = pcds.get_pcd_metadata(pcd_id)
print(metadata)Recuperando metadados da PCD com ID 70122...
{'numero': 70122, 'habilitado': True, 'dataCadastro': '2024-05-20T11:41:51.303', 'cidade': 'Natal', 'estado': 'RN', 'pais': 'Brasil', 'latitude': '-5.836667047785668', 'longitude': '-35.20705791138854', 'altitude': 42, 'estacao': 'Natal Solarimetrica', 'privado': False, 'proprietario': {'nome': 'LAVAT', 'responsavel': None, 'companhiaOrgao': 'INPE-CRN-NATAL', 'departamentoSecao': 'LAVAT', 'id': None, 'ativo': True}, 'ativo': True}import folium
# Criando o mapa centrado na localização da PCD
latitude = float(metadata['latitude'])
longitude = float(metadata['longitude'])
mapa = folium.Map(location=[latitude, longitude], zoom_start=12)
# Informações para o popup
info = f"""
<b>Estação:</b> {metadata['estacao']}<br>
<b>Cidade:</b> {metadata['cidade']}<br>
<b>Estado:</b> {metadata['estado']}<br>
<b>País:</b> {metadata['pais']}<br>
<b>Latitude:</b> {metadata['latitude']}<br>
<b>Longitude:</b> {metadata['longitude']}<br>
<b>Altitude:</b> {metadata['altitude']} m<br>
<b>Proprietário:</b> {metadata['proprietario']['nome']}<br>
<b>Companhia/Órgão:</b> {metadata['proprietario']['companhiaOrgao']}<br>
"""
# Adicionando um marcador no mapa
folium.Marker(
location=[latitude, longitude],
popup=folium.Popup(info, max_width=300),
tooltip=metadata['estacao']
).add_to(mapa)
# Salvando o mapa em um arquivo HTML
mapa.save('mapa_pcd.html')
# Exibindo o mapa no Jupyter Notebook (se aplicável)
mapaOs metadados foram recuperados com sucesso. Agora, vamos utilizar essas informações para obter os dados de temperatura e criar um relatório visual que inclui detalhes sobre a PCD e suas medições.
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 70122...
{'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-01-01'
end_date = '2023-01-02'
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 70122 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, e também incluir uma visão geral dos metadados da PCD.
# 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)
# Criando o gráfico de barras
plt.figure(figsize=(12, 6))
bars = plt.bar(df['Data'], df['TempOut (°C)'], color=df['Color'])
plt.title('Temperaturas Externas com Faixas de Cor')
plt.xlabel('Data')
plt.ylabel('Temperatura (°C)')
plt.xticks(rotation=45)
plt.grid(axis='y')
# 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')
plt.tight_layout()
plt.show()Relatório Final¶
Neste relatório, recuperamos os metadados e os dados de temperatura de uma PCD específica. Os metadados fornecem informações sobre a localização e configuração da PCD, enquanto os dados de temperatura foram visualizados em um gráfico de barras colorido, destacando diferentes faixas de temperatura com cores distintas.