www.artedosdados.com.br
Resumo - O objetivo deste relatório é apresentar a biblioteca pandas como ferramenta para análise de dados. Será reproduzido o estudo disponível em http://rpubs.com/leandro_guerra/Storm_Database_Study, que foi inicialmente construído em R. O objetivo não é comparar as duas linguagens, mas sim introduzir o conceito de dataframes dentro do Python. Também não pensamos em otimização de código, visto que os conceitos básicos devem ser entendidos antes de pensar em uma solução mais efetiva.
In [1]:
#Importando as bibliotecas necessárias para análise
import pandas as pd
import io
import urllib2
import bz2
In [2]:
#Abrindo a URL e descompactando o arquivo .bz2
url = "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
raw_bz2 = urllib2.urlopen(url).read()
data = bz2.decompress(raw_bz2)
df = pd.read_csv(io.BytesIO(data))
df.head()
Out[2]:
In [3]:
#Selecionando apenas os atributos mais relevantes
In [4]:
subSet = df[['BGN_DATE','PROPDMG','CROPDMG','EVTYPE','INJURIES','FATALITIES']]
In [5]:
subSet
Out[5]:
In [6]:
#Verificando o dataframe
In [7]:
subSet.head()
Out[7]:
In [8]:
#Inserindo nova variável
In [9]:
subSet['ECONOMICDMG'] = subSet['PROPDMG'] + subSet['CROPDMG']
In [10]:
subSet.head()
Out[10]:
In [11]:
#Vamos criar outro dataframe, agregando as informações por ano
In [12]:
import datetime
#Vamos manipular datas e converter BGN_DATE do formato string para o formato datetime
In [13]:
subSet['BGN_DATE'] = pd.to_datetime(subSet['BGN_DATE'])
In [14]:
subSet.head(5)
Out[14]:
In [15]:
#Agrupamento das data por ano
In [16]:
subSet['BGN_DATE'] = subSet.BGN_DATE.apply(datetime.date.strftime, args=('%Y',))
In [17]:
subSet.head(5)
Out[17]:
Importamos agora a biblioteca numpy para os cálculos de média, soma e desvio padrão
In [18]:
import numpy as np
Agrupamos os dados em uma variável auxiliar (para preservar o dataframe original) - Dados agrupados por ano e tipo de evento
In [19]:
aux =subSet[['BGN_DATE','EVTYPE','INJURIES','FATALITIES','ECONOMICDMG']].groupby(['BGN_DATE','EVTYPE'])
Seleção dos atributos utilizados para análise com os repectivos valores de média, desvio e soma
In [20]:
aux = aux[['INJURIES','FATALITIES','ECONOMICDMG']].agg([np.mean, np.std, np.sum])
Exemplo da estrutura agregada
In [21]:
aux['FATALITIES']['sum']
Out[21]:
Agora, agregamos os novos dados à variável eventYear e fazemos a concatenação de cada atributo Renomeamos a coluna 'sum' para o respectivo nome da ocorrência
In [22]:
eventYear = pd.DataFrame(aux['FATALITIES']['sum']).rename(columns={'sum': 'FATALITIES'}, inplace=False)
In [23]:
eventYear['INJURIES'] = aux['INJURIES']['sum']
In [24]:
eventYear['ECONOMICDMG'] = aux['ECONOMICDMG']['sum']
Dados agregados por ano e tipo de evento, associados a cada ocorrência.
In [25]:
eventYear.head()
Out[25]:
In [26]:
type(eventYear)
Out[26]:
In [27]:
for cada in eventYear:
print cada
In [28]:
eventYear[['FATALITIES']].sum()
Out[28]:
In [28]: