pandas
TRANSCRIPT
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.
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
pandas
Estruturas de Dados
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
pandasPlotagem de
DadosUsando matplotlib
>>> tips['tip_pct'] = tips['tip'] / tips['total_bill']>>> tips['tip_pct'].hist(bins=50)
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
pandasPara saber mais
Livro Documentaçãohttp://pandas.pydata.org/pandas-docs/stable/
Vídeos de Introdução
• Data analysis in Python with pandas – PyCon US 2012
• 10-minute tour of pandas