pandas

23
pandas

Upload: tiago-guimaraes

Post on 15-Apr-2017

125 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Pandas

pandas

Page 2: Pandas

Quais problemas pandas resolve?• Python

• Bom para manipulação e preparação de dados, mas nem tanto para análise e modelagem.

• Pandas• Fornece estruturas de dados e ferramentas de análise de alta

performance e fáceis de usar para oPython.• Permite realizar todo o fluxo de análise de dados dentro do Python,

sem ter que mudar para uma linguagem de domínio, como o R.• Benefícios

• Mais foco no produto final e menos no desenvolvimento.• API simples e elegante.• Alta performance.

Page 3: Pandas

pandasNutshell

• Estruturas de dados de alta performance• IO Tools• Alinhamento inteligente de dados• Limpeza de dados ausentes• Funcionalidade parecida com SQL (GroupBy, joins,

etc.)• Séries Temporais• Indexação Inteligente

Page 4: Pandas

pandas

Estruturas de Dados

Page 5: Pandas

pandas

Seriespandas.Series• Sequência

unidimensional de dados rotulados (indexados)

>>> import pandas as pd>>> s = pd.Series(list('abcdef'))>>> s0 a1 b2 c3 d4 e5 f>>> s = pd.Series([2, 4, 6, 8])>>> s0 21 42 63 8

Page 6: Pandas

pandas

SeriesTrabalhando com índices• O índice de uma série

pode ser espeificado

• Valores podem ser selecionados pelo índice

• Múltiplos valores podem ser selecionados com múltiplos índices

>>> s = pd.Series([2,4,6,7],... index=['f','a','c','e'])>>> sf 2a 4c 6e 7>>> s['a']4>>> s[['a','c']]a 4c 6

Page 7: Pandas

pandas

SeriesTrabalhando com índices• Pense numa série como

um dicionário de tamanho fixo com chaves ordenadas.

• Só que, ao contrário de um dicionário, as chaves/índices não precisam ser únicas.

>>> s2 = pd.Series(range(4),... index=list('abab'))>>> s2a 0b 1a 2b 3>>> s2['a']a 0a 2

Page 8: Pandas

pandas

SeriesOperações• Filtering/Selecting• Operações do tipo

NumPy

>>> sf 2a 4c 6e 8>>> s[s > 4]c 6e 8>>> s>4f Falsea Falsec Truee True>>> s*2f 4a 8c 12e 16

Page 9: Pandas

pandas

SeriesDados incompletos• Os objetos do pandas

podem acomodar dados incompletos

>>> sdata = {'b':100, 'c':150, 'd':200}>>> s = pd.Series(sdata)>>> sb 100c 150d 200>>> s = pd.Series(sdata, index=list('abcd'))>>> sa NaNb 100c 150d 200>>> s*2a NaNb 200c 300d 400

Page 10: Pandas

pandas

SeriesAlinhamento automático• Diferente dos arrays do

NumPy, os dados são alinhados automaticamente pelo índice.

>>> s2 = pd.Series([1,2,3],... index = ['c', 'b', 'a'])>>> s2c 1b 2a 3>>> sa NaNb 100c 150d 200>>> s * s2a NaNb 200c 150d NaN

Page 11: Pandas

pandas

DataFramepandas.DataFrame• Estrutura de dados que

contém uma coleção ordenada de colunas

• Tem um índice para as linhas e outro para as colunas

• Considere como um dicionário de Series, que compartilham o mesmo índice.

• Na prática é uma tabela de SQL

Page 12: Pandas

pandasDataFrame

Várias formas de criar um dataframe• Lista de dicionários

(registros)

• Dicionário de listas

>>> data = [... {'a':1, 'b':2},... {'a': 5, 'b': 10, 'c': 20},... ]>>> df = pd.DataFrame(data)>>> df a b c0 1 2 NaN1 5 10 20

>>> data2 = {'um': [1, 2, 3, 4],... 'dois': [4,3,2,1]... }>>> df2 = pd.DataFrame(data2)>>> df2 dois um0 4 11 3 22 2 33 1 4

Page 13: Pandas

pandasDataFrame

Várias formas de criar um dataframe• Dicionário de

dicionários

• … e várias outras formas.

>>> pub_pagante = {... 'CAM': {2010: 18.8, 2011: 19.1},... 'CRU': {2008: 9.7, 2010: 9.7, 2011: 9.8}... }>>> torcedores = pd.DataFrame(pub_pagante)>>> torcedores CAM CRU2008 NaN 9.72010 18.8 9.72011 19.1 9.8

Page 14: Pandas

pandas

DataFrame • Colunas são acessadas

como Series• por notação de

dicionário• via atributo

• Linhas são acessadas pela posição usando o atributo ou por nome (usando o atributo ix).

>>> torcedores['CAM']2008 NaN2010 18.82011 19.1

>>> torcedores.CRU2008 9.72010 9.72011 9.8

>>> type(torcedores.CRU)<class 'pandas.core.series.Series'>

>>> torcedores.ix[2010]CAM 18.8CRU 9.7

Page 15: Pandas

pandas

DataFrame • Novas colunas podem

ser adicionadas ao DataFrame por computação ou definição direta

>>> torcedores['AMG'] = numpy.NaN>>> torcedores CAM CRU AMG2008 NaN 9.7 NaN2010 18.8 9.7 NaN2011 19.1 9.8 NaN

>>> torcedores['TOG'] = torcedores['CAM'] / 2>>> torcedores CAM CRU AMG TOG2008 NaN 9.7 NaN NaN2010 18.8 9.7 NaN 9.402011 19.1 9.8 NaN 9.55

Page 16: Pandas

pandas

Reindexação • Criação de um novo

objeto em conformidade com um novo índice

>>> obj = pd.Series(['preto', 'azul', 'verde'],... index=[0,2,4])>>> obj0 preto2 azul4 verde

>>> obj.reindex(range(4))0 preto1 NaN2 azul3 NaN

>>> obj.reindex(range(5), fill_value='branco')0 preto1 branco2 azul3 branco4 verde

>>> obj.reindex(range(5), method='ffill')0 preto1 preto2 azul3 azul4 verde

Page 17: Pandas

pandas

Sumarização

>>> torcedores CAM CRU AMG TOG2008 NaN 9.7 NaN NaN2010 18.8 9.7 NaN 9.402011 19.1 9.8 NaN 9.55

>>> torcedores.sum()CAM 37.90CRU 29.20AMG NaNTOG 18.95

>>> torcedores.mean()CAM 18.950000CRU 9.733333AMG NaNTOG 9.475000

>>> torcedores.describe() CAM CRU AMG TOGcount 2.000000 3.000000 0 2.000000mean 18.950000 9.733333 NaN 9.475000std 0.212132 0.057735 NaN 0.106066min 18.800000 9.700000 NaN 9.40000025% 18.875000 9.700000 NaN 9.43750050% 18.950000 9.700000 NaN 9.47500075% 19.025000 9.750000 NaN 9.512500max 19.100000 9.800000 NaN 9.550000

Page 18: Pandas

pandasIndexação

Booleana

>>> torcedores CAM CRU AMG TOG2008 NaN 9.7 NaN NaN2010 18.8 9.7 NaN 9.40201119.1 9.8 NaN 9.55

>>> torcedores < 9.8 CAM CRU AMG TOG2008 False True False False2010 False True False True2011 False False False True

>>> torcedores[torcedores < 9.8] = 0>>> torcedores CAM CRU AMG TOG2008 NaN 0.0 NaN NaN2010 18.8 0.0 NaN 02011 19.1 9.8 NaN 0

Page 19: Pandas

pandasLeitura de Dados

Suporte para várias fontes de dados• Arquivo texto

• read_csv • read_table

• Dados estruturados (JSON, XML, HTML)

• Excel (depende dos pacotes xlrd e openpyxl)

• Bancos de dados• pandas.io.sql module

(read_frame)

>>> tips = pd.read_csv('tips.csv')>>> tips.head(10) total_bill tip sex smoker day time size0 16.99 1.01 Female No Sun Dinner 21 10.34 1.66 Male No Sun Dinner 32 21.01 3.50 Male No Sun Dinner 33 23.68 3.31 Male No Sun Dinner 24 24.59 3.61 Female No Sun Dinner 45 25.29 4.71 Male No Sun Dinner 46 8.77 2.00 Male No Sun Dinner 27 26.88 3.12 Male No Sun Dinner 48 15.04 1.96 Male No Sun Dinner 29 14.78 3.23 Male No Sun Dinner 2

Page 20: Pandas

pandasPlotagem de

DadosUsando matplotlib

>>> tips['tip_pct'] = tips['tip'] / tips['total_bill']>>> tips['tip_pct'].hist(bins=50)

Page 21: Pandas

pandasO que eu não falei

• Agregação de Dados• GroupBy • Merge (SQL Joins)• Tabelas Dinâmicas

• Séries Temporais• Períodos/Frequências • Operações com Séries

Temporais com frequências diferentes

• Escala automática para plots

• Análises Financeiras/Estatísticas Avançadas• Análise por quartis, decis

e centis• Regressão Linear

• IO• read/write csv• read/write excel• read/write hdf• read/write sql• read/write json• read/write msgpack

(experimental)• read/write html• read/write gbq

(experimental)• read/write stata• read/write clipboard• read/write pickle

• Dados em Painel• Customização de Plots• IPython• IPython Notebook

Page 23: Pandas

pandas

Obrigado!

Tiago Guimarães@[email protected]