Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Falha no scatterplot

Pessoal, Ao inserir o 'teste_y' no 'hue' dentro do scatterplot, recebo o erro: ValueError: Data must be 1-dimensional. Segue o código para análise:

from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import pandas as pd
import seaborn as sns


uri = "https://gist.githubusercontent.com/guilhermesilveira/1b7d5475863c15f484ac495bd70975cf/raw/16aff7a0aee67e7c100a2a48b676a2d2d142f646/projects.csv"
dados = pd.read_csv(uri)

mapa = {'unfinished' : 'nao_concluido' , 'expected_hours' : 'horas_previstas', 'price': 'preco'}
dados = dados.rename(columns = mapa)

# podemos trocar os valores de 1 para 0 e 0 para 1, a fim de facilitar o trabalho:

troca = {
    1:0,
    0:1
}

dados['Finalizado'] = dados.nao_concluido.map(troca)

SEED = 10

x = dados[['horas_previstas','preco']]
y = dados[['Finalizado']]

treino_x, teste_x, treino_y, teste_y = train_test_split(x,y, random_state = SEED, test_size = 0.25, stratify = y)

model = LinearSVC()
model.fit(treino_x, treino_y)
previsoes = model.predict(teste_x)

acertos = accuracy_score(teste_y, previsoes)


sns.scatterplot(x='horas_previstas', y='preco', hue = teste_y, data=teste_x)

Conseguem me ajudar? Obrigado!

1 resposta
solução!

Olá Renner, tudo bem com você?

O erro ValueError: Data must be 1-dimensional ,está ocorrendo porque o parâmetro 'hue' no scatterplot do seaborn espera uma Series unidimensional (1D), mas 'y' está recebendo um DataFrame, que é bidimensional (2D).

Para corrigir esse erro, basta remover um conjunto de colchetes ([ ]) no momento de atribuição da variável y, dessa forma, será atribuído uma Series, ficando da seguinte forma:

y = dados['Finalizado']

Após realizar essa mudança, basta executar o seu código e verificar o resultado apresentado.

Código completo com correção aplicada

from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import pandas as pd
import seaborn as sns


uri = "https://gist.githubusercontent.com/guilhermesilveira/1b7d5475863c15f484ac495bd70975cf/raw/16aff7a0aee67e7c100a2a48b676a2d2d142f646/projects.csv"
dados = pd.read_csv(uri)

mapa = {'unfinished' : 'nao_concluido' , 'expected_hours' : 'horas_previstas', 'price': 'preco'}
dados = dados.rename(columns = mapa)

# podemos trocar os valores de 1 para 0 e 0 para 1, a fim de facilitar o trabalho:

troca = {
    1:0,
    0:1
}

dados['Finalizado'] = dados.nao_concluido.map(troca)

SEED = 10

x = dados[['horas_previstas','preco']]
y = dados['Finalizado']

treino_x, teste_x, treino_y, teste_y = train_test_split(x,y, random_state = SEED, test_size = 0.25, stratify = y)

model = LinearSVC()
model.fit(treino_x, treino_y)
previsoes = model.predict(teste_x)

acertos = accuracy_score(teste_y, previsoes)


sns.scatterplot(x='horas_previstas', y='preco', hue = teste_y, data=teste_x)

Resutado

Imagem contendo o gráfico resultante da execução do código acima

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!