Analisando Arquivos CSV com Python, Pandas, NumPy e Matplotlib

Neste artigo, vamos explorar como abrir e analisar um arquivo CSV com encoding ANSI, separador ; e indicador de número flutuante como , usando as bibliotecas Python: Pandas, NumPy e Matplotlib.

Preparando o Ambiente

Primeiro, certifique-se de ter as bibliotecas necessárias instaladas. Você pode instalá-las usando o pip:

pip install pandas numpy matplotlib

Carregando o Arquivo CSV

Vamos começar importando as bibliotecas necessárias e carregando o arquivo CSV, pulando as 8 primeiras linhas:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Carregando o arquivo CSV
file_path = 'exercicio2024.CSV'
df = pd.read_csv(file_path, encoding='ANSI', sep=';', decimal=',', skiprows=8)

Explorando os Dados

Após carregar o arquivo, vamos explorar os dados para entender sua estrutura:

# Exibindo as primeiras linhas do DataFrame
print(df.head())

# Exibindo informações gerais sobre o DataFrame
print(df.info())

# Exibindo estatísticas descritivas
print(df.describe())

Limpando e Preparando os Dados

Podemos precisar limpar e preparar os dados antes de realizar análises mais profundas. Vamos lidar com valores ausentes e converter tipos de dados, se necessário:

# Substituindo valores ausentes
df.replace(-9999, np.nan, inplace=True)

# Convertendo colunas para os tipos de dados apropriados
df['DATA (YYYY-MM-DD)'] = pd.to_datetime(df['DATA (YYYY-MM-DD)'])
df['HORA (UTC)'] = pd.to_timedelta(df['HORA (UTC)'] + ':00')

Analisando os Dados

Vamos realizar algumas análises básicas, como calcular médias e visualizar dados:

# Calculando a média da temperatura do ar
mean_temp = df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].mean()
print(f'Média da temperatura do ar: {mean_temp:.2f}°C')

# Plotando a temperatura do ar ao longo do tempo
plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'], label='Temperatura do Ar')
plt.xlabel('Data e Hora')
plt.ylabel('Temperatura (°C)')
plt.title('Temperatura do Ar ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()

Exemplos com Matplotlib

# Calculando a média da temperatura do ar
mean_temp = df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].mean()
print(f'Média da temperatura do ar: {mean_temp:.2f}°C')

# Plotando a temperatura do ar ao longo do tempo
plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'], label='Temperatura do Ar')
plt.xlabel('Data e Hora')
plt.ylabel('Temperatura (°C)')
plt.title('Temperatura do Ar ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()
# Calculando a média da temperatura do ar
mean_temp = df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].mean()
print(f'Média da temperatura do ar: {mean_temp:.2f}°C')

# Plotando a temperatura do ar ao longo do tempo
plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'], label='Temperatura do Ar')
plt.xlabel('Data e Hora')
plt.ylabel('Temperatura (°C)')
plt.title('Temperatura do Ar ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.hist(df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].dropna(), bins=30, edgecolor='k')
plt.xlabel('Temperatura (°C)')
plt.ylabel('Frequência')
plt.title('Histograma da Temperatura do Ar')
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.hist(df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].dropna(), bins=30, edgecolor='k')
plt.xlabel('Temperatura (°C)')
plt.ylabel('Frequência')
plt.title('Histograma da Temperatura do Ar')
plt.grid(True)
plt.show()

plt.figure(figsize=(10, 5))
plt.hist(df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].dropna(), bins=30, edgecolor='k')
plt.xlabel('Temperatura (°C)')
plt.ylabel('Frequência')
plt.title('Histograma da Temperatura do Ar')
plt.grid(True)
plt.show()

plt.figure(figsize=(10, 5))
plt.boxplot(df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'].dropna())
plt.ylabel('Temperatura (°C)')
plt.title('Boxplot da Temperatura do Ar')
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.bar(df['DATA (YYYY-MM-DD)'], df['PRECIPITAÇÃO TOTAL, HORÁRIO (mm)'])
plt.xlabel('Data')
plt.ylabel('Precipitação (mm)')
plt.title('Precipitação Total por Data')
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['PRESSAO ATMOSFERICA AO NIVEL DA ESTACAO, HORARIA (mB)'], label='Pressão Atmosférica')
plt.xlabel('Data e Hora')
plt.ylabel('Pressão (mB)')
plt.title('Pressão Atmosférica ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()

plt.figure(figsize=(10, 5))
plt.scatter(df['TEMPERATURA DO AR - BULBO SECO, HORARIA (°C)'], df['UMIDADE RELATIVA DO AR, HORARIA (%)'])
plt.xlabel('Temperatura (°C)')
plt.ylabel('Umidade Relativa (%)')
plt.title('Temperatura vs. Umidade Relativa')
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
df['DIREÇÃO DO VENTO'] = pd.cut(df['VENTO, DIREÇÃO HORARIA (gr) (° (gr))'], bins=8, labels=['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'])
df['DIREÇÃO DO VENTO'].value_counts().plot(kind='bar', stacked=True)
plt.xlabel('Direção do Vento')
plt.ylabel('Frequência')
plt.title('Distribuição da Direção do Vento')
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['VENTO, VELOCIDADE HORARIA (m/s)'], label='Velocidade do Vento')
plt.xlabel('Data e Hora')
plt.ylabel('Velocidade (m/s)')
plt.title('Velocidade do Vento ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()

plt.figure(figsize=(10, 5))
plt.plot(df['DATA (YYYY-MM-DD)'] + df['HORA (UTC)'], df['RADIACAO GLOBAL (KJ/m²)'], label='Radiação Global')
plt.xlabel('Data e Hora')
plt.ylabel('Radiação Global (KJ/m²)')
plt.title('Radiação Global ao Longo do Tempo')
plt.legend()
plt.grid(True)
plt.show()
plt.figure(figsize=(10, 5))
plt.bar(df['DATA (YYYY-MM-DD)'], df['TEMPERATURA MÁXIMA NA HORA ANT. (AUT) (°C)'], label='Máxima')
plt.bar(df['DATA (YYYY-MM-DD)'], df['TEMPERATURA MÍNIMA NA HORA ANT. (AUT) (°C)'], label='Mínima', alpha=0.7)
plt.xlabel('Data')
plt.ylabel('Temperatura (°C)')
plt.title('Temperatura Máxima e Mínima por Data')
plt.legend()
plt.grid(True)
plt.show()

Edvaldo Guimrães Filho Avatar

Published by

Categories: ,

Leave a comment