Demonstração de Uso do pySINDA
Este notebook apresenta como utilizar o novo cliente unificado SindaClient da biblioteca pySINDA e demonstra o uso das ferramentas de análise de dados (módulo analytics) para processar séries temporais de sensores meteorológicos.
1. Importação e Inicialização¶
import os
from pysinda import (
SindaClient,
clean_data,
detect_outliers,
resample_time_series,
summarize_time_series,
compute_wind_components
)
# O cliente lê as variáveis de ambiente SINDA_API_KEY e SINDA_API_URL por padrão
client = SindaClient(api_key="824de6b3360bad91ed65c3343038d346d462c519db0d3a204de18b7994b615ee", url="http://localhost:8000/api/client")
print("Módulos importados com sucesso!")Módulos importados com sucesso!
client.get_all()[]available_period = client.get_period_availability(30800)
data = client.get_data(30800, "01-01-2012", "31-01-2012", to_df=True)
datafrom pySINDA import plot_time_series
plot_time_series(data, time_col="Tempo", variables=["TempAr (C)", "UmidRel (%)"])2. Consulta de Listas de PCDs (Plataformas de Coleta de Dados)¶
Podemos obter a listagem de PCDs e convertê-las automaticamente para DataFrames do Pandas usando o argumento to_df=True.
# Recupera uma lista resumida de todas as PCDs disponíveis
# df_pcds = client.get_all_resumed(to_df=True)
# df_pcds.head()# Buscar PCDs ativas/completas no estado do Rio Grande do Norte (RN)
# df_rn = client.get_pcds_by_state("RN", to_df=True)
# df_rn3. Dados de uma PCD Específica¶
Com o ID de uma PCD, podemos verificar sua disponibilidade e buscar suas leituras.
pcd_id = 70112 # Exemplo de ID
# Consultar sensores disponíveis na PCD
# sensores = client.get_sensors(pcd_id)
# print("Sensores:", sensores)
# Consultar o período disponível de dados
# disponibilidade = client.get_period_availability(pcd_id)
# print("Período disponível:", disponibilidade)# Buscar os dados de sensores para um determinado período
# df_dados = client.get_data(idPCD=pcd_id, data_inicial="2023-01-01", data_final="2023-02-01", to_df=True)
# df_dados.head()4. Análise de Dados e Qualidade (Analytics)¶
O pySINDA possui funções específicas de análise temporal para facilitar o trabalho de cientistas de dados.
4.1. Limpeza de Dados e Remoção de Outliers¶
A função clean_data identifica automaticamente outliers usando Z-score e preenche lacunas com interpolação linear.
# df_cleaned = clean_data(df_dados, time_col='Data', fill_method='interpolate', outlier_threshold=3.0)
# df_cleaned.head()4.2. Decomposição de Ventos (Componentes U e V)¶
A velocidade e a direção do vento podem ser convertidas em componentes zonais (U) e meridionais (V) para modelagem física e análise vetorial.
# df_wind = compute_wind_components(df_cleaned, speed_col='VelocidadeVento', dir_col='DirecaoVento')
# df_wind[['VelocidadeVento', 'DirecaoVento', 'wind_U', 'wind_V']].head()4.3. Resampling e Agrupamento Temporal¶
Use resample_time_series para calcular médias diárias, mensais ou horárias de forma simples.
# df_diario = resample_time_series(df_wind, time_col='Data', rule='D', agg='mean')
# df_diario.head()4.4. Sumarização Estatística e Completude¶
Verifique a completude temporal da série e métricas estatísticas essenciais.
# summary = summarize_time_series(df_dados, time_col='Data')
# print(f"Registros: {summary['total_records']} (Início: {summary['start_time']} - Fim: {summary['end_time']})")
# print("Resumo por Variável:")
# for col, stats in summary['variables'].items():
# print(f" {col}: média={stats['mean']:.2f}, dados ausentes={stats['missing_percentage']:.1f}%")