<jupyter_start><jupyter_text>**Enunciado**
Neste desafio final, vamos empregar boa parte dos conceitos mostrados no decorrer de
todos os módulos do **Bootcamp** para a análise e a classificação de veículos do conhecido
dataset **“cars”**. 

> Esse dataset contém um conjunto de informações sobre vários veículos
pesquisados. 

>Existem dados, por exemplo, sobre a potência do veículo, sobre a origem e
cilindradas cúbicas. 

____
Para essa análise, vamos empregar os conceitos de redução da dimensionalidade com o **PCA**, clusterização com o **K-Means** e **Classificações** com algoritmos supervisionados. 1. Acessar o link abaixo e realizar o download do arquivo **cars.csv**.<jupyter_code>import numpy as np
import pandas as pd
import requests
def transpose(d):
  return pd.DataFrame(d).transpose()
url ='https://drive.google.com/uc?export=download&id=1Gjumb68_WrOOJr-7YUKH3yFk6rNJrHH2'
cars = pd.read_csv(url)
cars_original = cars.copy()
cars.describe().T
cars.info()
cars.tail(3)<jupyter_output><empty_output><jupyter_text>2. Para a implementação dos algoritmos, utilizear as definições abaixo:<jupyter_code>from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression

random_state = 42

scaler = StandardScaler()
pca = PCA(n_components=7)
kmeans = KMeans(n_clusters=3,random_state=random_state)
dtc = DecisionTreeClassifier(random_state=random_state)
lr = LogisticRegression(random_state=random_state)<jupyter_output><empty_output><jupyter_text>3. Para as questões que envolvem a construção de modelos supervisionados, você
deve utilizar o dataset original para definir a eficiência dos veículos.

 Além disso, deveutilizar as variáveis:  **['cylinders' ,'cubicinches' ,'hp' ,'weightlbs' ,'timeto-60']** como entrada. 
 
 A saída deve ser a classificação de eficiência do veículo.<jupyter_code>#cars = cars[['cylinders' ,'cubicinches' ,'hp' ,'weightlbs' ,'time-to-60']]<jupyter_output><empty_output><jupyter_text>1 .Após a utilização da biblioteca pandas para a leitura dos dados sobre os valores lidos, é CORRETO afirmar que:<jupyter_code>transpose(cars.isna().sum())
transpose(cars.dtypes)<jupyter_output><empty_output><jupyter_text>2. Realize a transformação das colunas **“cubicinches”** e “weightlbs” do tipo **“string”** para o tipo numérico utilizando o **pd.to_numeric()**, utilizando o parâmetro  errors='coerce'. Após essa transformação, é CORRETO afirmar:<jupyter_code>cars.cubicinches =  pd.to_numeric(cars.cubicinches,errors='coerce')
transpose(cars.isna().sum())<jupyter_output><empty_output><jupyter_text>3. Indique quais eram os índices dos valores presentes no dataset que **“forçaram”** o pandas a compreender a variável **“cubicinches”** como string.<jupyter_code>#coerce =  Análise inválida será definida como NaN.
cars_original[cars_original.cubicinches==' '].index<jupyter_output><empty_output><jupyter_text>4. Após a transformação das variáveis “string” para os valores numéricos, quantos valores nulos (células no dataframe) passaram a existir no dataset?<jupyter_code>cars.weightlbs =  pd.to_numeric(cars.weightlbs,errors='coerce')

transpose(cars.isna().sum())<jupyter_output><empty_output><jupyter_text>5. Substitua os valores nulos introduzidos no dataset após a transformação pelo valor médio das colunas.  Qual é o novo valor médio da coluna **“weightlbs”**?<jupyter_code>cars.loc[cars.cubicinches.isna(),'cubicinches'] =  cars.cubicinches.mean()
cars.loc[cars.weightlbs.isna(),'weightlbs'] =  cars.weightlbs.mean()

cars.weightlbs.mean()<jupyter_output><empty_output><jupyter_text>6. Após substituir os valores nulos pela média das colunas, selecione as colunas **['mpg', 'cylinders', 'cubicinches', 'hp', 'weightlbs', 'time-to-60', 'year']**. Qual é o valor da mediana para a característica 'mpg'?<jupyter_code>cars.mpg.median()<jupyter_output><empty_output><jupyter_text>7. Qual é a afirmação CORRETA sobre o valor de 14,00 para a variável “time-to-60”?<jupyter_code>transpose(cars['time-to-60'].describe())<jupyter_output><empty_output><jupyter_text>8. Sobre o coeficiente de correlação de Pearson entre as variáveis “cylinders” e “mpg”, é correto afirmar, EXCETO:<jupyter_code>cars[['cylinders','mpg']].corr()<jupyter_output><empty_output><jupyter_text>9. Sobre o boxplot da variável “hp”, é correto afirmar, EXCETO:
Grupo de escolhas da pergunta<jupyter_code>cars.hp.plot.box()<jupyter_output><empty_output><jupyter_text>10. Após normalizado, utilizando a função StandardScaler(), qual é o maior valor para a variável “hp”?<jupyter_code>print('Antes:\t',cars.hp.max())
cars.hp = scaler.fit_transform(cars.hp.values.reshape(-1,1))
print('Depois:\t',cars.hp.max())<jupyter_output>Antes:	 230
Depois:	 3.05870398977614<jupyter_text>11. Aplicando o PCA, conforme a definição acima, qual é o valor da variância explicada com pela primeira componente principal?<jupyter_code>pca.fit(cars[cars.columns[:-1]])
pca.explained_variance_
pca.components_<jupyter_output><empty_output><jupyter_text>12. Utilize os três primeiros componentes principais para construir o K-means com um número de 3 clusters. Sobre os clusters, é INCORRETO afirmar que:<jupyter_code>k = kmeans.fit(pca.components_[:3])
k.cluster_centers_<jupyter_output><empty_output><jupyter_text>13. Após todo o processamento realizado nos itens anteriores, crie uma coluna que contenha a variável de eficiência do veículo. Veículos que percorrem mais de 25 milhas com um galão (“mpg”>25) devem ser considerados eficientes. Utilize as colunas ['cylinders' ,'cubicinches'            ,'hp' ,'weightlbs','time-to-60'] como entradas e como saída a coluna de eficiência criada.

Utilizando a árvore de decisão como mostrado, qual é a acurácia do modelo?<jupyter_code>cars['eficientes'] = 0
cars.loc[cars.mpg>25,'eficientes']=1
x = cars[['cylinders' ,'cubicinches' ,'hp' ,'weightlbs','time-to-60']]
x = scaler.transform(x)
y =  cars['eficientes']
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.3,random_state=random_state)
from sklearn.metrics import accuracy_score
dtc = DecisionTreeClassifier(random_state=random_state)
dtc = dtc.fit(xtrain,ytrain)
predicts  = dtc.predict(xtest)
accuracy_score(ytest,predicts)<jupyter_output><empty_output><jupyter_text>14. Sobre a matriz de confusão obtida após a aplicação da árvore de decisão, como mostrado anteriormente, é INCORRETO afirmar:<jupyter_code>from sklearn.metrics import confusion_matrix
verdadeiro_negativo, falso_positivo, falso_negativo, verdadeiro_positivo = confusion_matrix(ytest,predicts).ravel()
print('verdadeiro_negativo:\t',verdadeiro_negativo)
print('falso_positivo:\t\t',falso_positivo)
print('falso_negativo:\t\t',falso_negativo)
print('verdadeiro_positivo:\t',verdadeiro_positivo)<jupyter_output>verdadeiro_negativo:	 33
falso_positivo:		 8
falso_negativo:		 2
verdadeiro_positivo:	 36<jupyter_text>15. Utilizando a mesma divisão de dados entre treinamento e teste empregada para a análise anterior, aplique o modelo de regressão logística como mostrado na descrição do trabalho.


Comparando os resultados obtidos com o modelo de árvore de decisão, é INCORRETO afirmar que:<jupyter_code>lr = LogisticRegression(random_state=random_state) 
lr = lr.fit(xtrain,ytrain)
predicts  = lr.predict(xtest)
accuracy_score(ytest,predicts)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10657596371882086, 'fraction_numerical': 0.012404961984793917, 'mean_word_length': 7.019251336898396, 'pattern_counts': {'":': 0, '<': 71, '<?xml version=': 0, '>': 75, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '18', 'dir': 'jupyter-structured-clean-dedup', 'id': '203868', 'license': 'Apache-2.0', 'n_tokens_mistral': 2919, 'n_tokens_neox': 2792, 'n_words': 658, 'path': 'IGTI_Módulo_5_[Desafio_Final].ipynb', 'repo_name': 'franckepeixoto/igti-ml', 'size': '7497'}