terça-feira, 21 de julho de 2020

Como chamar métodos de uma série do Pandas

Quando estamos trabalhando com a biblioteca Pandas é normal ficar alterando entre séries e dataframe. Fazer uso dos métodos de uma série é uma ótima maneira de extrair o máximo da biblioteca Pandas.
Dataframe e séries possuem muitos métodos e atributos. Para descobrirmos alguns desses métodos e atributos podemos usar a função build-in do python dir. No exemplo abaixo vamos mostra a quantidade de métodos que as séries e os dataframe têm em comum. Uma coisa para se notar é que as séries e os dataframe têm um grande número de atributos e métodos com nomes iguais.

>>> import pandas as pd
>>> s_atr_metodos = set(dir(pd.Series))
>>> len(s_atr_metodos)
433 # número de métodos e atributos de uma série
>>> df_atr_metodos = set(dir(pd.DataFrame))
>>> len(df_atr_metodos)
430 # número de métodos e atributos de um dataframe
>>> len(s_atr_metodos & df_atr_metodos)
377 # Métodos e atributos em comum

Com esse exemplo percebemos que existem muitos atributos e métodos na biblioteca Pandas. Você deve estar pensando que são muitos para aprender, mas não se preocupe. Os programadores mais experientes só usam alguns desses métodos e atributos.
Nos tutoriais, que viram, vamos aprender os métodos e atributos das séries mais utilizados e poderosos. Como ficou claro no exemplo acima a maioria desses métodos e atributos tem um correspondente para os DataFrame.

Como fazer isso...

Agora vamos selecionar duas séries de tipos diferentes de um dataset. A coluna 'Diretor' é formada pelo tipo de dado object - Esse tipo de dado é utilizado, em sua maioria, para representar strings. E a coluna 'Codigo da obra'. Essa coluna é formada por números inteiros (int64). Veja o exemplo abaixo:

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv', encoding='latin-1')
>>> diretor = filmes['Diretor']
>>> cod = filmes['Codigo da obra']
>>> diretor.dtype
dtype('O')
>>> cod.dtype
dtype('int64')

Para saber quais são os cinco primeiros elementos de uma série usamos o método head. Se for preciso um número maior de elementos isso pode ser arranjado com parâmetros opcionais. Outro método, para visualizar dados de uma série, é o sample. Com esse método é possível pegar amostras de toda a série. Veja como utilizar esses métodos:

>>> diretor.head()
0    PAULO DE TARSO DE CARVALHO MORELLI
1        WAGNER DE ASSIS E PABLO URANGA
2             LENILDO MAURICIO DA SILVA
3                           DAISY MAYER
4                         PHILLIP NOYCE
Name: Diretor, dtype: object
>>> diretor.sample(n=6, random_state=32)
3601                          JEAN-FRANÇOIS RICHET
1663                                ETHAN MANIQUIS
4897                               DAVID BLAUSTEIN
3710    LUIZ DE FRANCA GUILHERME DE QUEIROGA FILHO
1641                                 ANTOINE FUQUA
2611                                       MAT ASS
Name: Diretor, dtype: object

O método sample() recebeu dois parâmetros. O primeiro (n) sinaliza o numero de elementos que queremos e o random_state define a semente que o método vai utilizar para gerar os números aleatórios.
Sabendo o tipo de dado de uma série, sabemos qual é a função que mais vamos utilizar. Um exemplo disso é o método value_counts(). Esse método retorna uma série contendo o nome dos elementos e quantas vezes esse valor se repete. No exemplo abaixo, vemos que o valor 'ROGER LEMOS' aparece vinte e seis vezes na série, enquanto 'DESIREE AKHAVAN' aparece uma vez apenas.

>>> diretor.value_counts()
LENILDO MAURICIO DA SILVA    218
JULIANO COSTA BENDAZOLI       69
JOSE ANTONIO GASPAR RAMOS     39
ROGER LEMOS                   26
LENILDO MAURÍCIO DA SILVA     22
                            ...
HUGO REYNALDO MATTAR           1
DESIREE AKHAVAN                1
CHARLES FERGUSON               1
JORGE PAIXÃO DA COSTA          1
JESUS GARCES LAMBERT           1
Name: Diretor, Length: 4976, dtype: int64

Embora esse método seja mais utilizado com séries com dados do tipo objeto, você também pode usa-la com séries com dados numéricos.
Se você precisar saber o tamanho de uma série a biblioteca Pandas fornece algumas formas de fazer isso, como o atributo size, shape e o método count(). E ainda temos a função interna do python len(). Veja como usar esses métodos:

>>> diretor.size
9262
>>> diretor.shape
(9262,)
>>> len(diretor)
9262
>>> diretor.count()
9262

O método count() retorna o número de elementos com valores, os elementos NaN não são contabilizados.
E ainda temos o método unique(). Esse método retorna todos os elementos únicos da série, deixando de lado os valores duplicados.

>>> diretor.unique()
array(['PAULO DE TARSO DE CARVALHO MORELLI',
       'WAGNER DE ASSIS E PABLO URANGA', 'LENILDO MAURICIO DA SILVA', ...,
       'ÁLVARO DELGADO-APARICIO L.', 'KIM HONG-SUN',
       'MARIO HUMBERTO MEIRELLES MOREIRA'], dtype=object)

As funções de estatísticas de uma série são: min(), que retorna o menor valor da série; max(), retorna o maior valor; mean(), que retorna a média entre os valores da série; e median(), que retorna a mediana.

>>> cod.min()
1
>>> cod.max()
20002501
>>> cod.mean()
10534938.192291081
>>> cod.median()
15004498.0

Se você esta com um pouco de pressa e precisa saber as informações do exemplo anterior com um método só. Você pode usar o método describe(). Com esse método você vai obter as informações básicas de estatística da série. Um exemplo:

>>> cod.describe()
count    9.262000e+03
mean     1.053494e+07
std      7.714715e+06
min      1.000000e+00
25%      4.165462e+05
50%      1.500450e+07
75%      1.600608e+07
max      2.000250e+07
Name: Codigo da obra, dtype: float64

Chamando o método quantile() obtemos o quantil de dados numéricos. Se passarmos um valor escalar como argumento, vamos receber uma saída escalar, e se passarmos uma lista vamos receber uma série.

>>> cod.quantile(0.3)
630214.2
>>> cod.quantile(
... [0.1, 0.2, 0.3, 0.4, 0.5]
... )
0.1       15196.1
0.2      278800.6
0.3      630214.2
0.4    14026379.0
0.5    15004498.0
Name: Codigo da obra, dtype: float64

Com o método count() podemos saber a quantidade de elementos de uma série que tem um valor definido. E se quiséssemos saber os valores que estão faltando? Nesse caso usaríamos o método isna(). Esse método retorna uma série com os valores True ou False para cada elemento de uma série. Por exemplo, se o primeiro elemento da série não tiver um valor o primeiro elemento da série, retornada pelo método isna(), vai ser True e False caso o elemento tenha um valor definido. E isso se repete até o último elemento das duas séries.

>>> diretor.isna()
0       False
1       False
2       False
3       False
4       False
        ...
9257    False
9258    False
9259    False
9260    False
9261    False
Name: Diretor, Length: 9262, dtype: bool

Nesse exemplo, o resultado do método isna() foi uma série com todos os valores False, isso pois a série que usamos não tem nenhum valor faltando.
Agora vamos supor que a série que usamos no exemplo anterior tivesse alguns valores faltando e quiséssemos preencher esse espaço vazio com o valor ‘Sem diretor’. Nesse caso usaríamos o método fillna(). Esse método preenche os valores vazios da série com o valor que recebe. Um exemplo de como fazer:

>>> diretor.fillna('Sem diretor')
0       PAULO DE TARSO DE CARVALHO MORELLI
1           WAGNER DE ASSIS E PABLO URANGA
2                LENILDO MAURICIO DA SILVA
3                              DAISY MAYER
4                            PHILLIP NOYCE
                       ...
9257                         ADAM SHANKMAN
9258         LANA WACHOWSKI ANDY WACHOWSKI
9259                        PETER CATTANEO
9260      MARIO HUMBERTO MEIRELLES MOREIRA
9261                 ANDRE BORELLI MARTINS
Name: Diretor, Length: 9262, dtype: object

Outra possibilidade é que você não queira adicionar um valor onde está faltando, mas sim remover esses elementos vazios. Nesse caso faríamos uso do método dropna(). Esse método remove todos os elementos vazios da série. Veja um exemplo de uso:

>>> diretor.dropna()
0       PAULO DE TARSO DE CARVALHO MORELLI
1           WAGNER DE ASSIS E PABLO URANGA
2                LENILDO MAURICIO DA SILVA
3                              DAISY MAYER
4                            PHILLIP NOYCE
                       ...
9257                         ADAM SHANKMAN
9258         LANA WACHOWSKI ANDY WACHOWSKI
9259                        PETER CATTANEO
9260      MARIO HUMBERTO MEIRELLES MOREIRA
9261                 ANDRE BORELLI MARTINS
Name: Diretor, Length: 9262, dtype: object

Nesse post aprendemos a utilizar alguns dos métodos mais utilizados na análise de dados com a biblioteca Pandas.
Os métodos que aprendemos a utilizar retornam diferentes tipos de dados.

Tem mais...

Com os exemplos que usamos, até agora nesse post, podemos saber se existem valores faltando na série observando o resultado do método count() (que retorna o número de elementos com valor) e o atributo size (que retorna o número total de elementos de uma série). Uma abordagem mais direta séria o atributo hasnans. Se tiver algum elemento sem valor, o valor do atributo será True, caso contrario será False.

0 comentários:

Postar um comentário