8
respostas

Eu não consigo usar o pd.get_dummies()

Eu não consigo usar o pd.get_dummies():

... Ydummies_df = Y_df Xdummies_df = pd.get_dummies(X_df) ...

Traceback (most recent call last): File "classifica_buscas.py", line 12, in Xdummies_df = pd.get_dummies(X_df) AttributeError: 'module' object has no attribute 'get_dummies'

8 respostas

Bom dia Rubens, pode enviar o código inteiro pf? Como parece haver problema no carregamento do pd, é legal ver como está sendo carregado etc

Boa Tarde! Tá ai o código

# -*- coding: UTF-8 -*-
from collections import Counter
import pandas as pd
import csv

df = pd.read_csv('buscas.csv')    

Y_df = df['comprou']        
X_df = df[['home', 'busca', 'logado']]

Ydummies_df = Y_df
Xdummies_df = pd.get_dummies(X_df)

X = Xdummies_df.values
Y = Ydummies_df.values

porcentagem_de_treino = 0.9

tamanho_de_treino = porcentagem_de_treino * len(y)
tamanho_de_teste = len(y) - tamanho_de_treino

treino_dados = X[:tamanho_de_treino]
treino_marcacoes = Y[:tamanho_de_treino]

teste_dados = X[-tamanho_de_teste:]
teste_marcacoes = Y[-tamanho_de_teste:]



from sklearn.naive_bayes import MultinomialNB
modelo = MultinomialNB()
modelo.fit(treino_dados, treino_marcacoes)

resultado = modelo.predict(teste_dados)
acertos = (resultado == teste_marcacoes)

total_de_acertos = sum(acertos)
total_de_elementos = len(teste_dados)
taxa_de_acerto = 100.0 * total_de_acertos / total_de_elementos

print("Taxa de acerto do algoritmo: %f" %taxa_de_acerto)
print(total_de_elementos)

# a eficacia do algoritmo que chuta tudo 0 e 1
acerto_base = max(Counter(teste_marcacoes).itervalues())
taxa_de_acerto_base = 100.0 * acerto_base / len(teste_marcacoes)
print("Taxa de acerto base: %f" %taxa_de_acerto_base)
#print(Xdummies)
#print(y)

Bom dia Rubens,

Não estou achando nada de errado, poderia conferir a versão do python usada? Outro teste, vamos isolar para ver se achamos o que não está sendo carregado. Voce pode testar um exemplo de pandas da propria documentação, bem simples. Entra no python na linha de comando e tenta:

import pandas as pd
s = pd.Series(list('abca'))
s1 = ['a', 'b']
pd.get_dummies(s1)

Guilherme, tive o mesmo problema do Rubens. Testei esse trecho de código num arquivo separado e funcionou. Vi alguns exemplos na Internet em que ele usa o get_dummies(dataframe[prefixo e colunas]) Você pode explicar melhor o que esse trecho que você escreveu faz exatamente?

Pessoal, consegui resolver o problema apenas acrescentando o índice 'busca' no x_df: x_dummies = pd.get_dummies(x_df['busca'])

Obrigado Instrutor e Angela!

Eu estou um pouco atarefado e ainda não voltei ao código, mas vou testar essa ultima solução e qualquer coisa eu tento a solução do Guilherme.

Que ótimo Angela, topa compartilhar como ficou o código final conosco?

Oi, Guilherme.

Segue o código, porém ainda não está rodando como deveria. Ele retorna 'sim' 'não'... deixei a dúvida em outro tópico...

import pandas as pd
df = pd.read_csv('busca.csv')

x_df = df[['home', 'busca', 'logado']]
y_df = df['comprou']

x_dummies = pd.get_dummies(x_df['busca'])
y_dummies = y_df

x = x_dummies.values
y = y_dummies.values

porcentagem_de_treino = 0.9
tamanho_de_treino = int(porcentagem_de_treino * len(y))
tamanho_de_teste = len(y) - tamanho_de_treino

treino_dados = x[:tamanho_de_treino]
treino_marcacoes = y[:tamanho_de_treino]

teste_dados = x[-tamanho_de_teste:]
teste_marcacoes = y[-tamanho_de_teste:]

from sklearn.naive_bayes import MultinomialNB
modelo = MultinomialNB
modelo.fit(treino_dados, treino_marcacoes)

resultado = modelo.predict(teste_dados)
diferencas = resultado - teste_marcacoes

acertos = [d for d in diferencas if d==0]
total_de_acertos = len(acertos)
total_de_elementos = len(teste_dados)
taxa_de_acerto = 100.0 * total_de_acertos/ total_de_elementos

print(taxa_de_acerto)
print(total_de_elementos)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software