Data Frame - R and Python

28 01 2013

Para acessar alguns dados com R, e poder realizar operaçoes, utilizamos a funçao data.frame podendo agrupando fatores entre outras operaçoes. Em Python a coisa pode ser bastante parecida e com diversas funcionabilidades do pacote Pandas [1] para Python.

Digamos uma tabela da seguinte maneira:

ID sp1 sp2 sp3
C1   1   3   2
C1   3   2   0
C1   2   1   1
C2   2   4   0
C2   1   3   1
C3   0   3   4
C3   2   1   2

O codigo para abrir como data.frame

#! /usr/bin/R
> dados = read.table('dados.txt', header=T)
> dados
  ID sp1 sp2 sp3
1 C1   1   3   2
2 C1   3   2   0
3 C1   2   1   1
4 C2   2   4   0
5 C2   1   3   1
6 C3   0   3   4
7 C3   2   1   2

> attach(dados)

# transformando a coluna ID em fator.
> dados$ID <- as.factor(dados$ID)
[1] 1 3 2 2 1 0 2

O que nao era necessario, pois ao carregar o data.frame o R ja´ reconhece essa coluna como factor.

> str(dados)
'data.frame':   7 obs. of  4 variables:
 $ ID : Factor w/ 3 levels "C1","C2","C3": 1 1 1 2 2 3 3
 $ sp1: int  1 3 2 2 1 0 2
 $ sp2: int  3 2 1 4 3 3 1
 $ sp3: int  2 0 1 0 1 4 2

para fazer uma media, por exemplo, utilizando o fator ID.

> tapply(dados$sp1, dados$ID, mean)
 C1  C2  C3 
2.0 1.5 1.0

Para fazer isso em Python, voce poderia usar o numpy, simplesmente, ou usar as elegantes ferramentas do "pandas". Para quem vem do R, o Pandas e uma forma facil de se entender com dados tabelados e cheios de fatores.

>>> import pandas as pd
>>> dados = pd.read_table('dados.txt',sep=" ")
>>> dados
   ID  sp1  sp2  sp3
0  C1    1    3    2
1  C1    3    2    0
2  C1    2    1    1
3  C2    2    4    0
4  C2    1    3    1
5  C3    0    3    4
6  C3    2    1    2

Acessar somente uma das colunas.

>>> dados['sp1']
0    1
1    3
2    2
3    2
4    1
5    0
6    2
Name: sp1

Para fazer a media, com a funçao groupby

>>> dados.groupby('ID').sp1.mean()
ID
C1    2.0
C2    1.5
C3    1.0
Name: sp1

Ainda e possivel fazer varias coisas com o objeto dados (que agora e um DataFrame). Por exemplo, pegar a media e a variancia, ordenados por ID.

>>> dados.groupby('ID').sp1.agg(['mean', 'var'])
    mean  var
ID           
C1   2.0  1.0
C2   1.5  0.5
C3   1.0  2.0

Ate mais.
[1] http://pandas.pydata.org/

This entry was tagged as

blog comments powered by Disqus