<jupyter_start><jupyter_text>Esta é uma folha de revisões em que para além de resolver os exercícios vai explicar os resultados obtidos.<jupyter_code>#Carregue o seguinte dataset a partir do github (pode aproveitar para criar uma conta no github)
#endereço: https://raw.githubusercontent.com/atrigo/mlExp/master/winequality/winequality-red.csv
#para um pandas dataframe e mostre as cinco primeiras linhas
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# ficheiro cvs
csv_file = "https://raw.githubusercontent.com/atrigo/mlExp/master/winequality/winequality-red.csv"

#https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"

# cvs para dataframe
data_vinho = pd.read_csv(csv_file)

print(data_vinho)

# 1ªs 5 linhas dataframe
print(data_vinho.head())


#Veja as dimensões do dataset e corra o método describe para verifique se existem
#valores em falta (missing values) em alguma coluna

print(data_vinho.shape)
data_vinho.describe
print(data_vinho.isnull().sum())
#Identifique as variáveis das características (features) e os rótulos (labels ou targets)
#Comente os valores dos targets
X = data_vinho.drop('quality', axis = 1).values
y = data_vinho['quality'].values.reshape(-1,1)
print(X)
print("Targets")
print(y)
#Utilizando a função abaixo para desenhar gráficos comente o impacto visual das diferentes
#caracterísitcas na qualidade do vinho - deverá apresentar tantos gráficos quantas as features
#vai precisar de importar a bilbioteca (package) seaborn

import seaborn as sns
sns.barplot(x= "quality", y= "fixed acidity", data = data_vinho)

#Features: fixed acidity,volatile acidity,citric acid,residual sugar,chlorides,free sulfur dioxide, total sulfur dioxide,density,pH,sulphates,alcohol,quality


sns.barplot(x= "quality", y= "volatile acidity", data = data_vinho)
sns.barplot(x= "quality", y= "citric acid", data = data_vinho)
sns.barplot(x= "quality", y= "residual sugar", data = data_vinho)
sns.barplot(x= "quality", y= "chlorides", data = data_vinho)
sns.barplot(x= "quality", y= "free sulfur dioxide", data = data_vinho)
sns.barplot(x= "quality", y= "total sulfur dioxide", data = data_vinho)
sns.barplot(x= "quality", y= "density", data = data_vinho)
sns.barplot(x= "quality", y= "pH", data = data_vinho)
sns.barplot(x= "quality", y= "sulphates", data = data_vinho)
sns.barplot(x= "quality", y= "alcohol", data = data_vinho)
#Crie dois datasets distintos, uma para as features e outro para o target

# Separar as caracterisitcas/features(x) dos rotulos/targets(y)
X = data_vinho[['fixed acidity','volatile acidity','citric acid','residual sugar','chlorides','free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol']]
y = data_vinho['quality']

print(y)
#Divida os datasets anteriores em datasets de treino e teste, utilizando uma função do Python
#O conjunto de teste deve ter 25% dos dados

from sklearn.model_selection import train_test_split


train, test = train_test_split(data_vinho, test_size=0.25)
train1=pd.DataFrame(train)
test1=pd.DataFrame(test)

train1_X = data_vinho[['fixed acidity','volatile acidity','citric acid','residual sugar','chlorides','free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol']]
train1_y = data_vinho['quality']
test1_X = data_vinho[['fixed acidity','volatile acidity','citric acid','residual sugar','chlorides','free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol']]
test1_y = data_vinho['quality']
#Defina um modelo de regressão linear, à semelhança do que fez em exercícios anteriores
#e treine o modelo
#X = data_vinho[['fixed acidity','volatile acidity','citric acid','residual sugar','chlorides',
#              'free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol']]
#y = data_vinho['quality']

regr = linear_model.LinearRegression()
regr.fit(train1_X, train1_y)
y_pred = regr.predict(test1_X)
#Apresente os coeficentes do modelo e comente-os


print('Coefficients: \n', regr.coef_)
print('MSE: %.2f' % mean_squared_error(df1_y_test, y_pred))
#Utilize o conjunto de teste para prever os dados e apresente um gráfico (scatter) 
#que compare os dados que obteve com os reais e comente
import matplotlib.pyplot as plt
import pandas as pd


plt.title("Features vs Target (teste (real) e previsto (azul))")
plt.scatter(test1["alcohol"], df1_y_test,  color='black')
plt.plot(test1, y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.xlabel("Feature - Fixed Acidity")
plt.ylabel("Target")
plt.show()

# Outputs 2 - previsao vs real
plt.title("Valores de teste previsto vs real")
plt.scatter(df1_y_test, y_pred,  color='black')
plt.xticks(())
plt.yticks(())
plt.xlabel("Real")
plt.ylabel("Previsto")
plt.show()
#Apresente o valor de R2 e comente
print('R2: %.2f' % r2_score(df1_y_test, y_pred))

#Utilizando o mesmo dataset crie um modelo, utilizando árvores de decisão
#Pode utilizar os conjuntos de treino e de teste anteriormente definidos

from sklearn import tree
decision_tree = tree.DecisionTreeClassifier(criterion='gini')
decision_tree.fit(train1, df1_y_train)
print('The accuracy of the Decision Tree classifier on training data is {:.2f}'.format(decision_tree.score(train1, df1_y_train)))
print('The accuracy of the Decision Tree classifier on test data is {:.2f}'.format(decision_tree.score(test1, df1_y_test)))

y_pred = decision_tree.predict(test1)
#Utilize a função score para testar a precisão (accuracy) do modelo
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
print("Acc: ",accuracy_score(df1_y_test, y_pred))
print("Precision: ", precision_score(df1_y_test, y_pred, average='macro'))
print("Recall: ", recall_score(df1_y_test, y_pred, average='macro'))
print("F1 Score: ", f1_score(df1_y_test, y_pred, average='macro'))


#Utilize o conjunto de teste para prever o modelo e apresente os cinco primeiros 
#registos da previsão e dos valores reais e compare para ver os resultados




#Utilizando a função classification_report apresente as diferentes métricas do modelo construído
from sklearn.svm import SVC
svm = SVC(kernel='rbf', random_state=0, gamma=.10, C=1.0)
svm.fit(train1, df1_y_train)
print('The accuracy of the SVM classifier on training data is {:.2f}'.format(svm.score(train1, df1_y_train)))
print('The accuracy of the SVM classifier on test data is {:.2f}'.format(svm.score(test1, df1_y_test)))

import xgboost as xgb
xgb_clf = xgb.XGBClassifier()
xgb_clf = xgb_clf.fit(train1, df1_y_train)

print('The accuracy of the XGBoost classifier on training data is {:.2f}'.format(xgb_clf.score(train1, df1_y_train)))
print('The accuracy of the XGBoost classifier on test data is {:.2f}'.format(xgb_clf.score(test1, df1_y_test)))
#Apresente a matriz de confusão (confusion_matrix) do modelo e comente so valores
from sklearn.metrics import confusion_matrix
print(confusion_matrix(df1_y_test, y_pred))
from sklearn.metrics import plot_confusion_matrix
plot_confusion_matrix(decision_tree, test1, df1_y_test)
import matplotlib.pyplot as plt
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11686328938237335, 'fraction_numerical': 0.010131852879944484, 'mean_word_length': 6.682302771855011, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '604414', 'license': 'MIT', 'n_tokens_mistral': 2665, 'n_tokens_neox': 2530, 'n_words': 714, 'path': 'Versao2/PyTrigo-V2-5-ML-Revisao.ipynb', 'repo_name': 'atrigo/PyTrigo', 'size': '7205'}