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.

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)
data
from 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_rn

3. 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}%")