<jupyter_start><jupyter_text>Agora vamos falar de aprendizado supervisionado, usando um algoritmo clássico: Support Vector Machine (SVM).<jupyter_code>#Importando bibliotecas básicas
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>Segue o link para visualizar os dados:     https://github.com/gilvandrocesardemedeiros/GEDataScience/raw/master/Codes/Data/INMET-Dados_Diarios_PortoAlegre_1980-2017.csv<jupyter_code>#Lendo os dados
dataSet = pd.read_csv("https://github.com/gilvandrocesardemedeiros/GEDataScience/raw/master/Codes/Data/INMET-Dados_Diarios_PortoAlegre_1980-2017.csv",
                      skiprows = 16, sep=';')
#Transformando data em variável do tipo datetime
dataSet["Data"] = pd.to_datetime(dataSet["Data"], format = "%d/%m/%Y")
#Visualizando cabeçalho dos dados
dataSet.head()
#Visualizando descrição resumida dos dados
dataSet.describe()<jupyter_output><empty_output><jupyter_text>Esse problema encontrado agora na base de dados já foi enfrentado anteriormente, portanto, vamos agilizar o processo com a função "OrganizarDados"<jupyter_code>def OrganizarDados(dataSet):
    #Transformando data em variável do tipo datetime
    dataSet["Data"] = pd.to_datetime(dataSet["Data"], format = "%d/%m/%Y")
    #Atribuindo "Data" como índice para a base de dados
    dataSet = dataSet.set_index("Data")
    #Separando os dados em dois dataframes, um para as 00:00 h e outro para as 12:00 h
    dataSet00, dataSet12 = dataSet[dataSet["Hora"] == 0], dataSet[dataSet["Hora"] == 1200]
    #Descartando as colunas "Hora", "Estacao" e "Unnamed: 11" 
    dataSet00, dataSet12 = dataSet00.drop(columns = ["Hora", "Estacao", "Unnamed: 11"]), dataSet12.drop(columns = ["Hora", "Estacao", "Unnamed: 11"])
    #Eliminando colunas completas por "NaN" em cada uma das bases de dados
    dataSet00 = dataSet00.drop(columns = ["Precipitacao","TempMinima"])
    dataSet12 = dataSet12.drop(columns = ["TempMaxima","Insolacao","Evaporacao Piche","Temp Comp Media","Umidade Relativa Media","Velocidade do Vento Media"])
    #Criando o intervalo completo de tempo de 01-01-2005 à 31-12-2017
    dataInicial = '2005-01-01'
    dataFinal = '2017-12-31'
    tempo = pd.date_range(dataInicial, dataFinal)
    #Atribuindo este intervalo de tempo à um dataSet provisório
    dataSetProv = pd.DataFrame()
    dataSetProv["Data"] = tempo
    #Atribuindo o índice para o dataSet provisório como sendo a coluna de datas
    dataSetProv = dataSetProv.set_index("Data")
    #Mesclando o dataSet provisório como sendo o resultado da junção dos dataSet00 e dataSet12
    dataSetProv = dataSetProv.join(dataSet00).join(dataSet12)
    #Tornando o dataSet como sendo o dataSet provisório
    dataSet = dataSetProv  
    return dataSet
#Aplicando a função ao dataSet
dataSet = OrganizarDados(dataSet)
#Tornando a informação de mês uma variável do dataSet
dataSet["Mes"] = dataSet.index.month
#Eliminando eventos inconsistentes da base de dados
dataSet = dataSet.dropna()
#Resentando o índice do dataSet
dataSet = dataSet.reset_index(drop = True)
#Visualizando cabeçalho dos dados
dataSet.head()
#Visualizando descrição resumida dos dados
dataSet.describe()
#Separando a coluna "Mes" do DataFrame
mes = dataSet["Mes"].values
dataSet = dataSet.drop(columns = "Mes")
from sklearn.model_selection import train_test_split
#Separando os conjuntos de treino e teste com os dados embaralhados, sendo 80% para treino e 20% para teste
X_train, X_test, y_train, y_test = train_test_split(dataSet, mes, test_size = 0.2, random_state = 9)
from sklearn.preprocessing import StandardScaler
#Efetuando uma transformação no conjunto de dados - também já estudamos isso
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)<jupyter_output><empty_output><jupyter_text>Vamos agora utilizar o algoritmo SVM para Classificação, disponibilizado na biblioteca Scikit-Learn. Segue link para a documentação:https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.htmlsklearn.svm.LinearSVC<jupyter_code>from sklearn.svm import SVC
#Criação do objeto SVC como "classifier"
classifier = SVC(C = 10000000.0, kernel = 'rbf', random_state = 0, gamma = 0.0001)
#Treinando o modelo classificador
classifier.fit(X_train, y_train)
#Previsão para os valores de teste
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
#Avaliando o modelo com matriz de confusão
confusion_matrix(y_test, y_pred)
#Convertendo a matriz de confusão para um DataFrame, para facilitar a visualização
cm = pd.DataFrame(confusion_matrix(y_test, y_pred))
#Declarando títulos para as colunas e os índices da matriz de confusão, para facilitar a interpretação
cm.columns = ["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]
cm.index = ["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]
#Imprimindo a matriz de confusão
cm<jupyter_output><empty_output>