Michael Macaulay

Deve saber as funções do Pandas para a jornada de aprendizado de máquina

Nó Fonte: 1865356

Este artigo foi publicado como parte do Blogathon de Ciência de Dados

Introdução

Bem, há uma boa possibilidade de que você possa!

Para cientistas de dados que usam Python como linguagem de programação primária, o pacote Pandas é uma ferramenta de análise de dados obrigatória. O pacote Pandas tem tudo que um cientista de dados precisa, e cada curso nos ensinou como utilizá-lo no início. É tão grande, poderoso e executa quase todas as manipulações tabulares que você possa imaginar. No entanto, essa amplitude pode ser uma desvantagem às vezes.

Ele tem muitos recursos bonitos que resolvem casos raros, cenários diferentes.

Uma das principais desvantagens do pandas é que ele luta com grandes conjuntos de dados porque o pandas armazena suas estruturas de dados na RAM, que pode se tornar insuficiente conforme o tamanho dos dados aumenta. Use PySpark ou Dask para isso.

Embora o pacote Pandas seja amplamente utilizado, ainda existem muitas funções que as pessoas podem ignorar, seja por ser menos utilizado ou por não terem conhecimento da sua existência. Este post pretende reintroduzir você a esses recursos e demonstrar que o Pandas é muito mais competente do que você sabia anteriormente.

Pipe

Para realizar a limpeza de dados de forma concisa e compacta nos pandas, pode-se usar as funções Pipe, que permitem combinar várias funções em uma operação.

Por exemplo, se você gosta de aplicar funções como drop_duplicates, encode_categoricals, remove_outliers que aceitam seus argumentos.

df_cleaned = (diamonds.pipe (drop_duplicates). pipe (remove_outliers, ['price', 'carat', 'depth']). pipe (encode_categoricals, ['cut', 'color', 'clarity']))

Fatorar

Esta função é uma alternativa ao Sklearns Label Encoder.

# Cuidado com os [0] diamantes no final ["cut_enc"] = pd.factorize (diamantes ["cut"]) [0] >>> diamantes ["cut_enc"]. Amostra (5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nome: cut_enc, dtype: int64

Fatorar resulta em uma tupla de valores: o valor codificado e uma lista de categorias exclusivas.

valores, únicos = pd.factorize (losangos ["cortar"], classificar = Verdadeiro) >>> valores [: 10] matriz ([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype = int64) >>> exclusivo ['Ideal', 'Premium', 'Muito bom', 'Bom', 'Razoável']

Explodir

Explode | funções de pandas

Foto por Edewaa Foster on Unsplash

Explode é uma função com um nome interessante. Vamos começar com um exemplo e depois uma explicação:

df = pd.Series ([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]). to_frame ("sujo") >>> df
dados | funções de pandas
Imagem do autor

A coluna do recurso possui duas linhas denotadas com listas. Esse tipo de dados está disponível em pesquisas nas quais algumas perguntas aceitam escolhas múltiplas.

>>> df.explode ("sujo", ignore_index = True)
dados explodem
Imagem do autor

Esta função pega uma célula com uma matriz de valores e explode em várias linhas. Para manter a ordem de um índice numérico, use ignore_index como True.

Entre

Para recursos numéricos de indexação booleana em um intervalo, esta é uma função útil:

# Obtenha diamantes com preços entre 3500 e 3700 dólares diamantes [diamantes ["preço"]. Entre (3500, 3700, inclusive = "nenhum")]. Amostra (5)
entre dados | funções de pandas
Imagem do autor

 

T

O DataFrame tem um atributo T simples, conhecido como transpor. Podemos não usá-lo com frequência, o método de descrição é útil ao visualizar os dataframes.

>>> boston.describe (). T.head (10)
transpor
Imagem do autor

 

Opções de pandas

Pode-se usar configurações globais de pandas que ajudam a ajustar e alterar os comportamentos padrão.

>>> dir (pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

Consiste em 5 módulos. Vamos ver as opções disponíveis na tela. Existem muitas opções disponíveis, mas eu uso principalmente max_columns.

>>> dir (pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'largura']

A maioria das pessoas usa max_columns e precisão

# Remova o limite para exibir o número de colunas pd.options.display.max_columns = Nenhum # Mostrar apenas 5 números após o decimal pd.options.display.precision = 5 # elimina a notação científica

Convert_dtypes

Todos sabemos que os pandas têm o hábito irritante de marcar algumas colunas como tipos de dados de objeto. Em vez de definir seus tipos diretamente, você pode usar o método convert dtypes, que tenta deduzir o melhor tipo de dados:

sample = pd.read_csv ("data / station_day.csv", usecols = ["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId object CO float64 O3 float64 AQI_Bucket objeto dtype: objeto >>> sample.convert_dtypes (). dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: objeto

Selecione_dtypes

Pelo nome, creio que fica claro o que a função faz. Você pode usar as opções de inclusão e exclusão para especificar colunas que incluem ou omitem tipos de dados específicos.

Escolha apenas colunas numéricas com np.number, por exemplo:

# Escolha apenas colunas numéricas diamonds.select_dtypes (include = np.number) .head ()
selecionar tipos d
Imagem do autor

 

Máscara

Esta função ajuda a substituir valores onde a condição personalizada não é satisfeita.

# Criar dados de amostra idades = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]). To_frame ("idades") idades
máscara | dados
Imagem do autor

Depois de realizar a operação acima.

mascaramento realizado
Imagem do autor

Mínimo e máximo

Embora min e max sejam bem conhecidos, ele tem algumas propriedades melhores para alguns casos extremos.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90, 100, 5) para lib em bibliotecas}, índice = índice) >>> df
min e max
Imagem do autor 

O DataFrame fictício acima mostra os resultados de quatro bibliotecas de aumento de gradiente diferentes em cinco conjuntos de dados. Estamos procurando o pacote que teve o melhor desempenho em cada conjunto de dados. Veja como fazer isso com o máximo de maneira elegante:

>>> df.max (axis = 1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 Loan Default 97.96728 dtype: float64

Maior e menor

O nlargest e nsmallest é útil para visualizar os primeiros N ou ~ (top N) valores de uma variável.

diamonds.nlargest (5, "preço")
maior e menor
Imagem do autor
diamonds.nsmallest (5, "preço")
o menor
Imagem do autor

 

Idxmax e Idxmin

Os pandas retornam o maior / menor número quando você chama max ou min em uma coluna. No entanto, existem situações em que você precisa da posição de mín. / Máx., Que essas funções não fornecem.

Em vez disso, você pode usar idxmax / idxmin:

>>> diamonds.price.idxmax () 27749 >>> diamonds.carat.idxmin () 14

Valor_Contagens

Uma maneira comum de encontrar a porcentagem dos valores ausentes é combinar isnull e somar e dividir pelo tamanho da matriz.

Mas value_counts com argumentos relevantes faz a mesma coisa:

habitação = pd.read_csv ("train.csv") >>> habitação ["FireplaceQu"]. value_counts (dropna = False, normalize = True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Nome: FireplaceQu, dtype: float64

Clipe

A função de clipe ajuda a encontrar outliers fora de uma faixa e substituí-los por limites rígidos.

>>> age.clip (50, 60)
dados para clipe
Imagem do autor

 

At_time e Betweeen_time

Essas funções são úteis ao trabalhar com séries temporais de alta granularidade.

at_time ajuda a obter valores em uma data ou hora específica.

index = pd.date_range ("2021-08-01", period = 100, freq = "H") df = pd.DataFrame ({"col": list (range (100))}, index = index) >> > df.head ()
exemplo at_time | funções de pandas
Imagem do autor

>>> df.at_time (“15:00”)

.at_time | funções de pandas
Imagem do autor

between_time usado para buscar linhas dentro de um intervalo personalizado.

from datetime import datetime >>> df.between_time ("09:45", "12:00")
entre_tempo
Imagem do autor

 

Intervalo_de_datas

Esta função ajuda a criar índices de séries temporais com frequência de dias úteis. O mundo financeiro tem esse tipo de frequência. Portanto, esta função pode ser útil no momento de reindexar séries temporais com a função de reindexar.

series = pd.bdate_range ("2021-01-01", "2021-01-31") # Um período de um mês >>> len (série) 21

At e Iat

Esses dois acessadores são substancialmente mais rápidos do que loc e iloc. No entanto, eles têm uma desvantagem. Eles só permitem que você escolha ou substitua um valor de cada vez:

# [índice, rótulo] >>> diamonds.at [234, "cut"] 'Ideal' # [índice, índice] >>> diamonds.iat [1564, 4] 61.2 # Substitua 16541ª linha da coluna de preço >> > diamonds.at [16541, "preço"] = 10000

Argsort

Esta função ajuda a extrair índices que classificariam um array de recursos.

dicas.reset_index (inplace = True, drop = True) sort_idx = dicas ["total_bill"]. argsort (kind = "mergesort") # Agora, classifique `dicas` com base em total_bill dicas.iloc [sort_idx] .head ()
arg_sort
Imagem do autor

 

Acessor Cat

Os pandas permitem funções integradas de python em datas e strings usando acessadores como str ou dt.

>>> diamonds.dtypes quilate float64 categoria de corte cor categoria clareza categoria profundidade float64 tabela float64 preço int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Pode-se usar muitas funções especiais usando o acessador cat em colunas categóricas. Possui funções como categorias para encontrar itens exclusivos, rename_categories para renomear os recursos.

diamantes ["new_cuts"] = diamantes ["cut"]. cat.rename_categories (list ("ABCDE")) >>> diamantes ["new_cuts"]. cat.categories Index (['A', 'B', ' C ',' D ',' E '], dtype =' objeto ')

Verifique isto para obter mais uma lista de funções em acessor de gato.

Espremer

Apertar é uma função usada em circunstâncias raras, porém agravantes.

Quando um único valor é retornado de uma condição usada para criar um subconjunto de um DataFrame, este é um desses casos. Considere o seguinte cenário:

subconjunto = diamonds.loc [diamonds.index >> subconjunto
preço

Mesmo se houver apenas uma célula, retorne o DataFrame. É inconveniente, pois agora você deve usar .loc com o nome da coluna e o índice para obter o preço.

Você não precisa se souber apertar. Um eixo pode ser removido de um DataFrame ou Series de célula única usando esta função. Considere o seguinte cenário:

>>> subset.squeeze () 326

É possível especificar o eixo a ser removido. Ele só tinha retornado escalar agora.

>>> subset.squeeze ("colunas") # ou "linhas" 0 326 Nome: preço, dtype: int64

Observe que esta função só funciona para Series ou DataFrame com valores únicos.

Excel_escritor

É uma classe genérica para criar arquivos Excel e escrever DataFrame nele. Considere, temos esses dois conjuntos de dados.

# Carregue dois conjuntos de dados diamonds = sns.load_dataset ("diamonds") tips = sns.load_dataset ("dicas") # Grave no mesmo arquivo Excel com pd.ExcelWriter ("data / data.xlsx") como escritor: diamonds.to_excel (escritor, sheet_name = "diamantes") dicas.to_excel (escritor, sheet_name = "dicas")

Possui propriedades para especificar o formato DateTime a ser usado, se você precisa de um novo arquivo ou modificar um existente, o que acontece se existir uma planilha. Verifique isto documentação para mais detalhes.

Conclusão

Não é uma visão geral exaustiva dos pandas e do documentação contém mais informações sobre o código e recursos. Recomendo que você experimente diferentes variações dos snippets de código fornecidos aqui, bem como vários parâmetros. Pode-se compreender totalmente o poder dos pandas fazendo isso.

Bibliotecas como Dask e datatable estão gradualmente substituindo o Pandas com seus novos recursos para lidar com grandes conjuntos de dados. O Pandas continua sendo a ferramenta de manipulação de dados mais amplamente usada na comunidade de ciência de dados Python. Por causa de quão bem ela se encaixa na pilha SciPy atual, a biblioteca serve como um paradigma para outros pacotes seguirem e construirem.

Espero que você tenha achado este post esclarecedor e obrigado pela leitura.

As mídias mostradas neste artigo não são propriedade da Analytics Vidhya e são usadas a critério do autor.

Fonte: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Carimbo de hora:

Mais de Análise Vidhya