• Nenhum resultado encontrado

An?lise de dados com Python

N/A
N/A
Protected

Academic year: 2021

Share "An?lise de dados com Python"

Copied!
5
0
0

Texto

(1)

An?lise de dados com Python

April 26, 2019

1

Introdução a análise de dados

Novidades:

O tratamento de campos do tipo Data Como renomear colunas

Tratar arquivo em lote (usando biblioteca glob) Agrupamento de dados (Resampling)

Conversão de arquivos de codificação ISO8859-15 para a codificação UTF-8 Conversão de arquivos do Windows para Linux

O uso do seaborn

1.1 O regime de chuvas em Ouro Branco-MG 1.2 A coleta de dados

As estações 2043052 (Ouro Branco), 2043101 (Lobo leite), 2043100 (Congonhas, Dom Oscar), 2043099 (Estação Congonhas Alto do Cruzeiro), 2043013 (Congonhas), 2043102 (Estação Con-gonhas, Joaquim Murtinho), 2043104 (Estação Conselheiro Lafaiete Gagé) estão localizadas em uma área, que possivelmente compartilham o mesmo regime de chuvas que a Cidade de Ouro Branco. No entanto, não é possível verificar essa informação, pois dessas seis estações apenas a estação 2043052 (Ouro Branco) e a estação 2043013 (Congonhas) tem dados disponíveis.

A 2043052 (Figura 1, apontada pelo número 1) fica localizada na base da Serra do Ouro Branco e é gerida pela “Aço Minas”, que iniciou a coleta de dados em maio de 1977 por pluviômetro. A telemetria foi iniciada em 2006 (Figura 1, apontada pelo número 1).

A estação 2043013 (Figura 1, apontada pelo número 2) é gerida pela CPRM/ANA Plu-viométrica, é uma Estação baseada em Linígrafo, Latitude -20,521944, Longitude -43,830000, que iniciou a coleta de addos em maio de 1941 por pluviômetro até 01/08/2012, quando passou a utilizar Telemetria (cujos daos não estão disponíveis).

Objetivos:

Geral: Verificar se houve alteração significativa no regime de chuvas de Ouro Branco desde 1977.

Específicos: Verificar se há dados disponíveis e confiáveis para o período (1977 a 2019); e veri-ficar a Confiabilidade dos dados.

Foram adquiridos os dados da Agência Naconal de Águas (ANA) sobre Chuvas das estações 2043052 e 2043013, no formato de arquivos CSV.

Observação: Essa análise é uma demonstração. Portanto, por razões didáticas, a simpliciade e o metódo computacional foram adotados como requisitos.

(2)

In [ ]: import matplotlib.pyplot as plt import numpy as np import pandas as pd import math import glob # Arquivos de dados #chuvas_C_02043052.csv #chuvas_C_02043013.csv

1.3 Conversão de arquivos de codificação ISO8859-15 para a codificação UTF-8

1.3.1 Conversão de arquivos do Windows para Linux

Primeiro vamos ver os arqivos e a estrutura deles. Para os usuários do Windows, talvez seja preciso salvar os arquivos em UTF-8.

In [ ]: # converte arquivos ISO8859-15 para UTF-8 for filex in glob.glob('*.csv'):

i = 0

file=open(filex,'r',encoding='ISO-8859-1',errors="ignore") outp = open('utf8'+filex,"w")

s = filex.split("_") s = s[2].split('.') s = s[0]

print(s)

for f in file.readlines(): outp.write(f)

# para ver o início do arquivo e entender sua estrutura # if i < 15:

# print(f)

# i += 1 file.close() outp.close()

2

Lendo arquivos de dados para o Pandas

Os arquivos considerados possuem 12 linhas de comentários antes da linha de títulos das colunas.

In [ ]: file = 'utf8chuvas_C_02043052.csv' s = file.split('C') s = s[1].split('.') s = s[0].split('_') s = s[1] print('Estação = ', s) df = pd.read_csv(file,

sep=';', # separador dos dados ; header=0, # linhas de cabeçalho

(3)

skiprows=12, # pula 12 linhas

thousands=None, # não numero com separador de milhares: 1.000 (mil)

decimal=',') # indica explictamente que o separador de decimais é a vírgula print(df.head()) file = 'utf8chuvas_C_02043013.csv' s = file.split('C') s = s[1].split('.') s = s[0].split('_') s = s[1] print('\n','---', '\n') print('Estação = ', s) df1 = pd.read_csv(file,

sep=';', # separador dos dados ; header=0, # linhas de cabeçalho skiprows=12, # pula 12 linhas

thousands=None, # não numero com separador de milhares: 1.000 (mil)

decimal=',') # indica explictamente que o separador de decimais é a vírgula print(df1.head())

3

Título das colunas

Os campos ao serem copiados foram movidos para a direita em relação ao título, de forma que os dados da coluna(título) estão exibidos na coluna seguinte. Vamos renomear as colunas.

In [ ]: campos = ['EstacaoCodigo','NivelConsistencia','Data',

'TipoMedicaoChuvas','Maxima','Total','DiaMaxima', 'NumDiasDeChuva'] bd = df[campos]

novosNomes = ['NivelConsistencia','Data','TipoMedicaoChuvas', 'Maxima','Total','DiaMaxima','sobra1','sobra2'] bd.columns = novosNomes

bd=bd.drop(['sobra1','sobra2', 'TipoMedicaoChuvas',], axis=1) print(bd.head())

print('\n', '---','\n')

bd1 = df1[campos]

bd1.columns = novosNomes

bd1=bd1.drop(['sobra1','sobra2','TipoMedicaoChuvas'], axis=1) print(bd1.head())

4

Excluindo registros com dados ausentes

In [ ]: # excluir os nan

bd.dropna(axis=0, how='any',inplace=True) print(bd.head())

print('\n', '---','\n') bd1.dropna(axis=0, how='any',inplace=True)

(4)

5

A quantidade de dados disponíveis

In [ ]: print(bd.shape[0])

print(bd1.shape[0])

Nota 1: a estação de Congonhas possui 1595 dados, considerando por “intuição” que o regime de chuvas é o memso nas duas cidades, vamos usar apenas a estação de Congonhas. Essa discrepância entre as disponibilidades, demonstra um alto grau de comprometimento da CPRM/ANA (empresa pública) e um certo grau de apatia por parte da Açominas (empresa pri-vada) em obter os dados.

Nota 2: Os 1595 dados, que são mensais, correspondem a (1595/12) as 133 anos (?). Vamos verificar o que ocorreu. A coluna ‘NivelConsistencia’ mantem o dado bruto ‘=1’ e o dado con-sistido ‘=2’. O dado concon-sistido significa que o dado bruto foi avaliado por um especialista para estabelecer a qualidade dos dados.

In [ ]: #Dados consistidos # Dados brutos

DB = bd1[bd1['NivelConsistencia']==2] print(DB.head(5))

print('\n \n','Dados consistidos:', DB.shape[0],' equivale a ') print(DB.shape[0]/12,'anos. [Obs.: De 1941 a 2018 = 77 anos.]','\n')

# Dados brutos

DB1 = bd1[bd1['NivelConsistencia']==1] #print(bd1.head(),'\n', bd1.shape[0])

Nota 3:Houve uma mudança no nome das variáveis que contem a base de dados. De db1 para DB## Transformando tipo Object em tipo DateTime

Para transformar o campo Data no tipo DateTime. usar o campo Data como indexador. In [ ]: DB['Data'] = pd.to_datetime(DB['Data'], dayfirst=True)

# o index baseado na data DB = DB.set_index('Data')

#copia o indice para coluna DB['Data'] = DB.index

# converte para um datetimeindex do tipo dia/mês/ano DB['Data'] = DB['Data'].dt.strftime('%m/%d/%Y') print(DB.head())

6

Visualizando os dados

Os gráficos abaixo permite verificar que a distribuição da “nuvem de dados” é aleatória (dis-tribuição randômica). Os dados estão distribuidos em uma série temporal, de intervalo mensal. In [ ]: import matplotlib.dates as mdates

(5)

plt.plot(DB["Data"], DB["Total"],'r-',DB["Data"], DB["Maxima"], 'y-',DB["Data"], DB["DiaMaxima"],'b-');

plt.legend(['Total mensal','Máxima mensal','Máxima do dia' ])

7

Média e distribuição

Calculando a média e plotando histograma.

In [ ]: print('média = ', DB['Maxima'].mean()) # histograma

#plt.figure(figsize=(15, 8)) plt.hist(DB['Maxima'])

#plt.grid()

8

Usando o seaborn

O seaborn é uma biblioteca que permite fazer gráficos melhores e mais bonitos que a matplotlib. Note que o histograma recebe como envoltória a curva normal.

In [ ]: import seaborn as sns sns.distplot(DB.Total)

8.1 Desenhando Boxplot

In [ ]: dados = [DB['Maxima'], DB['Total'], DB['DiaMaxima']] plt.figure(figsize=(10,20))

plt.boxplot(dados, showfliers=True, vert=True); # vert=False plt.grid()

8.2 Agrupando os dados mensais em dados anuais In [ ]: DBanual = DB.resample('Y').max()

print(DBanual.head())

plt.figure(figsize=(20, 10)) plt.plot(DBanual["Total"]);

Referências

Documentos relacionados

■ Para o Professor, na data da promulgação, a idade e o tempo de contribuição será 51/25 mulher e 56/30 homem, com o somatório de 81/91 e, a partir de janeiro/2022, só idade de

Neste modelo de interação, é proposto que o cátion do eletrólito indutor da separação de fase nos SAB intensifica a interação entre o ânion complexo e os segmentos EO do

No processo de transferência, para Pinheiro (2002) é necessário destacar e observar que diferentes contextos criam diferentes formas de atuação e de inserção

A função Scroll lock permite que algumas teclas de letras do teclado funcionem como teclas de direcção, de forma a permitir uma mais fácil navegação quando apenas é

João I Porta-estandarte Ala dos Namorados Abatises Covas de lobo Vanguarda castelhana Vanguarda portuguesa Ala esquerda castelhana. Exército português

No entanto, os dois usuários que avaliaram os serviços prestados como “ruim” responderam em questões anteriores que nunca entraram em contato com a biblioteca e que encontraram

Na Cowé a da H:'#po como que se sente que o motivo do viúvo é mais importante para a totalidade da obra do que, por exemplo,. o da busca do irmão, mais importante,

O idoso muito tempo foi mantido no esquecimento tanto pela família como pela sociedade, sentindo-se discriminado e excluído, contudo com o avanço da ciência, da