<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Decision Tree
Você pode baixar o dataset em https
Step1:  No código acima, fizemos a leitura do arquivo informando que não há cabeçalho (obrigatório) e embaralhamos os dados.
A coluna 6 (0-6) representa a classe.
Step2:  Um problema é que nossos atributos categóricos são strings, e a implementção de Decision Tree do scikit-learn só aceita atributos numéricos. Precisamos converter os atributos.
O Pandas possui um tipo de dados categórico ("category") que simplifica essa conversão.
Step3:  Faremos a separação dos dados em conjunto de treino e teste
Step4:  Preparação de dados ok!
Vamos ao que interessa...
<ASSISTANT_TASK:>
Python Code:
import os
import pandas as pd
import math
import numpy as np
from sklearn.tree import DecisionTreeClassifier
headers = ["buying", "maint", "doors", "persons","lug_boot", "safety", "class"]
data = pd.read_csv("car_data.csv", header=None, names=headers)
data = data.sample(frac=1).reset_index(drop=True) # shuffle
Explanation: Decision Tree
Você pode baixar o dataset em https://archive.ics.uci.edu/ml/datasets/Car+Evaluation.
End of explanation
data.head()
data.dtypes
Explanation: No código acima, fizemos a leitura do arquivo informando que não há cabeçalho (obrigatório) e embaralhamos os dados.
A coluna 6 (0-6) representa a classe.
End of explanation
for h in headers:
    data[h] = data[h].astype('category')
    data[h] = data[h].cat.codes
data.set_index("class", inplace=True)
data.head()
Explanation: Um problema é que nossos atributos categóricos são strings, e a implementção de Decision Tree do scikit-learn só aceita atributos numéricos. Precisamos converter os atributos.
O Pandas possui um tipo de dados categórico ("category") que simplifica essa conversão.
End of explanation
size = len(data)
train_size = int(math.floor(size * 0.7))
train_data = data[:train_size]
test_data = data[train_size:]
Explanation: Faremos a separação dos dados em conjunto de treino e teste
End of explanation
d_tree = DecisionTreeClassifier(criterion="gini")
d_tree.fit(train_data, train_data.index) 
d_tree.predict(test_data.iloc[:, 0:6])
d_tree.score(test_data, test_data.index)
# desenha a arvore
import graphviz 
from sklearn import tree
dot_data = tree.export_graphviz(d_tree, out_file=None, feature_names=["buying", "maint", "doors", "persons","lug_boot", "safety", "class"]) 
graph = graphviz.Source(dot_data) 
graph.render("car_dataset")
Explanation: Preparação de dados ok!
Vamos ao que interessa...
End of explanation
<END_TASK>