Ciência de dados com pandas
Nas postagens anteriores, fizemos uma pequena introdução à ciência de dados e iniciamos nossa exploração da biblioteca pandas. Neste post, seguiremos explorando mais algumas funcionalidades essenciais do pacote pandas para a área.
Consulte nossa postagem anterior para informações sobre instalação e comandos básicos para abrir e explorar arquivos com pandas. Neste post, nosso foco será um tema bastante importante em ciência de dados: como lidar com dados ausentes.
Dados
Usaremos os dados mostrados abaixo. Para acompanhar a postagem, copie os dados num arquivo que deve ser nomeado como revisoes.csv. Esses dados foram obtidos na internet e possuem revisões sobre um grande site de comércio online acompanhadas de um número de estrelas correspondentes.
review,stars
"É impossível contato com o mercado livre em caso de devolução, ficamos a mercê aos procedimentos e atualizações deles. Não tem nenhum e-mail ou outro meio para entrar em contato direto, tudo direciona para respostas prontas. Não passa nenhuma segurança.",1
"Comprei um determinado produto um jaleco branco para meu trabalho e era para entregar em sete dias não entregaram o número de rastreamento não servia para nada e aumentaram mais 7 dias amanhã é o último dia e ainda não chegou eu adorava o MercadoLivre agora estou odiando!",
"E um aplicativo muito fácil de entender e prático de usar.mas eu algumas vezes fiz pedidos e não veio no dia esperando e sem um aviso prévio se quer,viu avisado só no dia seguinte do dia previsto o que me deixou indignado", 3
"Comprei uma vez, porém não fui feliz. Meu pedido não chegou.....demorou um pouco pra ter do extorno do dinheiro.Mais foi solucionado!",3
"Nada mal no geral, demoraram um pouco mais entregaram.",4
"Site muito seguro .só faço minha compras por esse site. Entrega no prazo estimado.ou seja conforme o combinado com o vendedor.a entrega Chega em sua residência.amei todos meus pedidos....💜💜👏👏👏👏",4
"Muito bom app super recomendo minha prima experiência com Mercado livre achei ótimo, meus itens chegaram 4 dias após a compra e são exatamente como as fotos do anúncio😍👏👏👏",
"Compra e entrega rapida, comprei uma bateria para celular na sexta e consegui retirar ja em 3 dias em uma parceira do mercado livre muito rapido e sem dor de cabeça",5
"Mercado livre: o pior atendimento do mundo, com pessoas super despreparadas, uma selva, nao uma empresa. Ridículo!!! Nao compre no Mercado livre, nao toque tambor para maluco dancar!",
"O que está acontecendo com o mercado livre?? Nos últimos dois meses os atrasados nas entregas está demais. 40% dos meus pedidos que escolhi a opção de entregar no meu endereço chegaram atrasadas, alguns com atraso de quase um mês. E antes que questionem, foram compras nacionais. Só não tive atrasos nos pedido com a opção de retirada em empresa parceira do mesmo. Espero que resolvam esse problema o quanto antes.",3
"No dia 16/04/2023 comprei uma escova secadora Bivolt da marca QUANTA no valor de R$ 189,00, chegou no dia 24/04/2023. Em menos de 7 dias apresentou defeito, entrei em contato com o mercado livre e falaram que não podem estornar o valor da compra e aceitar o produto PORQUE EU USEI O PRODUTO; hahahaha, Eu compro um produto, ele estraga, to pagando e agora fico com uma escova estragada e tenho que pagar? NÃO FAZ NENHUM SENTIDO ISSO",1
"Comprei um ventilador de teto ventisol com controle remoto,E quando chegou foi estalado e não funcionou, pediram para fazer a devolução e fiz enbalei tudo certo só que eles não aceitam e mandaram de volta, só que o produto voltou todo solto na caixa, e todo riscado e eles não resolveram",1
"muito bom entrega super rapida, sensacional!!!",4
"Rapaz eu gosto de comprar por eles mais deixa muito a desejar com a entrega deles , a shoope ta começando a dar de 10 neles por calsa de frete tá, eu pedir o produto com eles pq prescisava na mesma semana e eles fizeram oque?? Jogou pra outra semana sendo que paguei pelo frete FULL e se soubesse que iria atrasar pediria pela shoope pq sairia mais barato e com frete incluso pra semana seguinte. Ta ficando pessimo o frete deles",
"Login exasperante. Mesmo vc configurando o Google autheticator corretamente para a (sem palavras) verificação em duas etapas, mesmo vc configurando pelo horário e sincronizando o aparelho, o ML nunca lê e nunca aceita o código. Assim o login fica impossivel. A opção é fotografar sua identidade e esperar 24 horas, o que é tão insultuoso quanto nunca dar acesso por senha e código. Estou impossibilitada de acessar e devolver uma compra. Não posso esperar 24 horas.",1
Verificando a presença de dados ausentes
O primeiro passo para usar estes dados é criar um código Python, importar o pandas e abrir o arquivo CSV. Não se esqueça de atualizar o código abaixo com a localização correta de seu arquivo.
import pandas as pd
filename = 'Localização do seu arquivo/revisoes.csv'
df = pd.read_csv(filename)
Em seguida, exploraremos como verificar e lidar com dados ausentes no nosso conjunto de dados. Para lidar com dados ausentes, primeiro é preciso verificar se eles existem no nosso arquivo com o comando isnull() ou isna(). Ambos os comandos são equivalentes e retornam True quando encontram valores ausentes e False quando não encontram. Outro comando parecido é o notnull() que verifica os dados não ausentes.
print(df.isnull())
review stars
0 False False
1 False True
2 False False
3 False False
4 False False
5 False False
6 False True
7 False False
8 False True
9 False False
10 False False
11 False False
12 False False
13 False True
14 False False
O comando isnull() mostra que temos dados ausentes, mas quantos serão? Isso pode ser verificado com o comando isnull().sum().
print(df.isnull().sum())
Nossos dados têm 15 amostras com duas colunas. A primeira tem revisões e a segunda tem o número de estrelas atribuídas pelos clientes. O comando isnull().sum() mostra que não existe nenhuma revisão faltando, mas existem 4 amostras sem estrelas atribuídas (resultado mostrado abaixo).
review 0
stars 4
dtype: int64
Nosso problema agora é entender como lidar com esses dados ausentes.
Remoção de dados ausentes
Um dos tratamentos mais comuns para dados ausentes é a simples remoção de suas amostras. Isso pode ser feito com o comando dropna().
print(df.dropna())
Se nenhum eixo for especificado, o dropna() remove todas as linhas que possuem dados ausentes como mostrado no nosso exemplo abaixo. No nosso caso, foram removidas as linhas com índices 1, 6, 8 e 13. Mas o dropna() também pode ser usado com especificação de eixos.
review stars
0 É impossível contato com o mercado livre em ca... 1.0
2 E um aplicativo muito fácil de entender e prát... 3.0
3 Comprei uma vez, porém não fui feliz. Meu pedi... 3.0
4 Nada mal no geral, demoraram um pouco mais ent... 4.0
5 Site muito seguro .só faço minha compras por e... 4.0
7 Compra e entrega rapida, comprei uma bateria p... 5.0
9 O que está acontecendo com o mercado livre?? N... 3.0
10 No dia 16/04/2023 comprei uma escova secadora ... 1.0
11 Comprei um ventilador de teto ventisol com con... 1.0
12 muito bom entrega super rapida, sensacional!!! 4.0
14 Login exasperante. Mesmo vc configurando o Goo... 1.0
Se ele for usado com a opção axis=0, ele continuará removendo as linhas com dados faltantes. Porém, se o eixo for especificado como 1 (df.dropna(axis=1)), ele remove as colunas com dados ausentes.
print(df.dropna(axis=1))
review
0 É impossível contato com o mercado livre em ca...
1 Comprei um determinado produto um jaleco branc...
2 E um aplicativo muito fácil de entender e prát...
3 Comprei uma vez, porém não fui feliz. Meu pedi...
4 Nada mal no geral, demoraram um pouco mais ent...
5 Site muito seguro .só faço minha compras por e...
6 Muito bom app super recomendo minha prima expe...
7 Compra e entrega rapida, comprei uma bateria p...
8 Mercado livre: o pior atendimento do mundo, co...
9 O que está acontecendo com o mercado livre?? N...
10 No dia 16/04/2023 comprei uma escova secadora ...
11 Comprei um ventilador de teto ventisol com con...
12 muito bom entrega super rapida, sensacional!!!
13 Rapaz eu gosto de comprar por eles mais deixa ...
14 Login exasperante. Mesmo vc configurando o Goo...
Opções de preenchimento de dados ausentes: fillna()
Um dos grandes problemas em ciências de dados se refere ao preenchimento de dados ausentes. Sempre que possível, eles devem ser descartados com o comando dropna(). Mas, em vários cenários, isso não é a opção mais adequada. Para esses casos, o pandas conta com alguns recursos de preenchimento.
Um dos principais métodos de preenchimento de dados ausentes do pandas é o fillna(). Ele permite a substituição de valores faltantes por um valor pré-definido. No exemplo abaixo, escolhemos 0 para fazer os preenchimentos.
print(df.fillna(0))
review stars
0 É impossível contato com o mercado livre em ca... 1.0
1 Comprei um determinado produto um jaleco branc... 0.0
2 E um aplicativo muito fácil de entender e prát... 3.0
3 Comprei uma vez, porém não fui feliz. Meu pedi... 3.0
4 Nada mal no geral, demoraram um pouco mais ent... 4.0
5 Site muito seguro .só faço minha compras por e... 4.0
6 Muito bom app super recomendo minha prima expe... 0.0
7 Compra e entrega rapida, comprei uma bateria p... 5.0
8 Mercado livre: o pior atendimento do mundo, co... 0.0
9 O que está acontecendo com o mercado livre?? N... 3.0
10 No dia 16/04/2023 comprei uma escova secadora ... 1.0
11 Comprei um ventilador de teto ventisol com con... 1.0
12 muito bom entrega super rapida, sensacional!!! 4.0
13 Rapaz eu gosto de comprar por eles mais deixa ... 0.0
14 Login exasperante. Mesmo vc configurando o Goo... 1.0
Opções de preenchimento de dados ausentes: ffill()
Outro método de preenchimento de dados ausentes é o ffill().
print(df.ffill())
O comando ffill() preenche os dados faltantes com os valores imediatamente acima deles. Veja o resultado para nosso exemplo (índices 1, 6, 8 e 13).
review stars
0 É impossível contato com o mercado livre em ca... 1.0
1 Comprei um determinado produto um jaleco branc... 1.0
2 E um aplicativo muito fácil de entender e prát... 3.0
3 Comprei uma vez, porém não fui feliz. Meu pedi... 3.0
4 Nada mal no geral, demoraram um pouco mais ent... 4.0
5 Site muito seguro .só faço minha compras por e... 4.0
6 Muito bom app super recomendo minha prima expe... 4.0
7 Compra e entrega rapida, comprei uma bateria p... 5.0
8 Mercado livre: o pior atendimento do mundo, co... 5.0
9 O que está acontecendo com o mercado livre?? N... 3.0
10 No dia 16/04/2023 comprei uma escova secadora ... 1.0
11 Comprei um ventilador de teto ventisol com con... 1.0
12 muito bom entrega super rapida, sensacional!!! 4.0
13 Rapaz eu gosto de comprar por eles mais deixa ... 4.0
14 Login exasperante. Mesmo vc configurando o Goo... 1.0
Opções de preenchimento de dados ausentes: bfill()
Outra opção para preencher dados ausentes com pandas é o comando bfill(). Ele é bem parecido com o comando ffill() mostrado acima. A diferença é que, ao invés de preencher um dado ausente com o valor acima dele, o comando bfill() usa o valor abaixo do dado faltante.
print(df.bfill())
Esse é o resultado obtido (índices 1, 6, 8 e 13).
review stars
0 É impossível contato com o mercado livre em ca... 1.0
1 Comprei um determinado produto um jaleco branc... 3.0
2 E um aplicativo muito fácil de entender e prát... 3.0
3 Comprei uma vez, porém não fui feliz. Meu pedi... 3.0
4 Nada mal no geral, demoraram um pouco mais ent... 4.0
5 Site muito seguro .só faço minha compras por e... 4.0
6 Muito bom app super recomendo minha prima expe... 5.0
7 Compra e entrega rapida, comprei uma bateria p... 5.0
8 Mercado livre: o pior atendimento do mundo, co... 3.0
9 O que está acontecendo com o mercado livre?? N... 3.0
10 No dia 16/04/2023 comprei uma escova secadora ... 1.0
11 Comprei um ventilador de teto ventisol com con... 1.0
12 muito bom entrega super rapida, sensacional!!! 4.0
13 Rapaz eu gosto de comprar por eles mais deixa ... 1.0
14 Login exasperante. Mesmo vc configurando o Goo... 1.0
Interpolação linear para preenchimento de dados ausentes
Alem do ffill() e bfill(), outra alternativa do pandas para preenchimento de dados ausentes é o comando interpolate(). Ele costuma ser usado com um método linear, como mostrado no trecho de código abaixo. Na prática, esse método usa os valores vizinhos ao dado que precisa ser preenchido e calcula um valor médio a partir deles. Veja abaixo como implementar esse comando nos nossos dados.
print(df.interpolate(method='linear'))
E esse é o resultado (índices 1, 6, 8 e 13).
review stars
0 É impossível contato com o mercado livre em ca... 1.0
1 Comprei um determinado produto um jaleco branc... 2.0
2 E um aplicativo muito fácil de entender e prát... 3.0
3 Comprei uma vez, porém não fui feliz. Meu pedi... 3.0
4 Nada mal no geral, demoraram um pouco mais ent... 4.0
5 Site muito seguro .só faço minha compras por e... 4.0
6 Muito bom app super recomendo minha prima expe... 4.5
7 Compra e entrega rapida, comprei uma bateria p... 5.0
8 Mercado livre: o pior atendimento do mundo, co... 4.0
9 O que está acontecendo com o mercado livre?? N... 3.0
10 No dia 16/04/2023 comprei uma escova secadora ... 1.0
11 Comprei um ventilador de teto ventisol com con... 1.0
12 muito bom entrega super rapida, sensacional!!! 4.0
13 Rapaz eu gosto de comprar por eles mais deixa ... 2.5
14 Login exasperante. Mesmo vc configurando o Goo... 1.0
Como escolher o melhor método de preenchimento? Não existe uma regra geral. A escolha varia de caso a caso, mas a melhor opção sempre é explorar as alternativas existentes e decidir qual é a mais adequada para o seu projeto. No próximo post sobre o pacote pandas, exploraremos mais alguns comandos importantes como apply() para aplicar funções em dados e merge() para combinar conjuntos de dados.