<jupyter_start><jupyter_text><jupyter_code>#Este programa é utilizado para o desenvolvimento do trabalho prático da disciplina FAM do bootcamp de MLE
#importando as bibliotecas
import pandas as pd #biblioteca utilizada para o tratamento de dados via dataframes 
import numpy as np #biblioteca utilizada para o tratamento de valores numéricos (vetores e matrizes)
import matplotlib.pyplot as plt #biblioteca utilizada para construir os gráficos

from google.colab import files  #biblioteca utilizada para carregar os dados para o google colab
uploaded = files.upload()
#realizando a leitura do arquivo (dataset)
nome_do_arquivo="comp_bikes_mod.csv"
dataframe = pd.read_csv(nome_do_arquivo)
#apresentando as 5 primeiras linhas do dataset
dataframe.head()<jupyter_output><empty_output><jupyter_text>**1.No dataset utilizado para o desafio, quantas instâncias e atributos existem, respectivamente?**<jupyter_code>dataframe.shape
print(f'Instâncias: {dataframe.shape[0]}\nAtributos: {dataframe.shape[1]}')<jupyter_output>Instâncias: 17379
Atributos: 17<jupyter_text>**2. Quantos tipos diferentes de dados existem no dataset do desafio?**<jupyter_code>dataframe.info() #verificando os tipos de variáveis e se existem ou não valores nulos
dataframe.dtypes.value_counts()<jupyter_output><empty_output><jupyter_text>**3. Qual é a proporção (em %) de valores nulos existente na coluna "temp" (temperatura ambiente normalizada)?**<jupyter_code>print(f'Valores nulos na coluna <<temp>>: {dataframe.temp.isna().sum()}')
print(f'Total de linhas no dataframe: {len(dataframe)}')
nulos_temp = (dataframe.temp.isna().sum() / len(dataframe)) * 100
print(f'Porcentagem de valores nulos em temp: {nulos_temp:.2f} %')<jupyter_output>Valores nulos na coluna <<temp>>: 1738
Total de linhas no dataframe: 17379
Porcentagem de valores nulos em temp: 10.00 %<jupyter_text>**4. Após retirar as linhas que contém valores nulos para a coluna "dteday", passamos a contar com quantas instancias e atributos, respectivamente?**<jupyter_code>print(f'Valores nulos na coluna <<dteday>>: {dataframe.dteday.isna().sum()}')
print(f'Valores não nulos na coluna <<dteday>>: {len(dataframe) - dataframe.dteday.isna().sum()}')
# Esse valor pode ser acessado com a função info()<jupyter_output>Valores nulos na coluna <<dteday>>: 1738
Valores não nulos na coluna <<dteday>>: 15641<jupyter_text>**5. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Qual é o valor médio para os dados da coluna "temp" (temperatura ambiente normalizada)?**<jupyter_code>media_temp = dataframe.temp[dataframe.dteday.isna()==False].mean()
print(f'Média <<temp>> normalizada: {media_temp:.4f}')<jupyter_output>Média <<temp>> normalizada: 0.4969<jupyter_text>**6. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Qual é o desvio padrão para os dados da coluna "windspeed" (velocidade do vento normalizada)?**<jupyter_code>desvio_wind = dataframe.windspeed[dataframe.dteday.isna()==False].std()
print(f'Desvio padrão <<windspeed>>: {desvio_wind:.4f}')<jupyter_output>Desvio padrão <<windspeed>>: 0.1223<jupyter_text>**7. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Transforme a coluna "season" em valores categóricos. Quantas categorias diferentes existem?**<jupyter_code>dataframe.season = pd.Categorical(dataframe.season)
dataframe.season.value_counts()
print('Quantidade de categorias: {}'.format(len(dataframe.season.value_counts())))<jupyter_output>Quantidade de categorias: 4<jupyter_text>> **8. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Transforme a coluna "dteday" no tipo "datetime". Qual é a última data presente no dataset ( YYYY-MM-DD)?**<jupyter_code>dataframe.dteday = pd.to_datetime(dataframe.dteday, format="%Y-%m-%d")
dataframe[dataframe.dteday.isna()==False].tail(1)<jupyter_output><empty_output><jupyter_text>**9. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Considerando o boxplot da variável "windspeed" (velocidade do vento), é CORRETO afirmar:**<jupyter_code>dataframe[dataframe.dteday.isna()==False].boxplot(['windspeed'])<jupyter_output><empty_output><jupyter_text>**10. Considere o dataset após a retirada das linhas que continham valores nulos para a coluna "dteday". Selecione as colunas "season", "temp", "atemp", "hum", "windspeed". Plot a matriz de correlação. Sobre as variáveis "hum" e "cnt", é CORRETO afirmar:**<jupyter_code>corr_mat = dataframe[dataframe.dteday.isna()==False][['cnt', 'hum', 'season', 'temp', 'atemp', 'windspeed']].corr()
corr_mat.style.format("{:.3}").background_gradient(cmap=plt.get_cmap('PuRd'))<jupyter_output><empty_output><jupyter_text>**11. Preencha os valores nulos das colunas "hum","cnt" e "casual" com os valores médios. Utilize as variáveis "hum" e "casual" como independentes e a "cnt" como dependente. Aplique uma regressão linear. Qual o valor de R2? Utilize as entradas como teste.**<jupyter_code># preencha os valores nulos das colunas "hum", "cnt" e "casual" com os valores médios
dataframe.hum.fillna(dataframe.hum.mean(), inplace=True)
dataframe.cnt.fillna(dataframe.cnt.mean(), inplace=True)
dataframe.casual.fillna(dataframe.casual.mean(), inplace=True)
data = dataframe[["hum", "cnt", "casual"]]
data.head()
# utilize as variáveis "hum" e "casual" como independentes e "cnt" como dependente
x = data[["hum", "casual"]].values
y = data.cnt.values
# aplique uma regressão linear
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
regressao = linreg.fit(x, y)
previsao = linreg.predict(x)
# parâmetros de regressão
print(f'Y = {linreg.coef_}X {linreg.intercept_}')
# cálculo do R2
from sklearn.metrics import r2_score
r_2 = r2_score(y, previsao)
print(f'Coeficiente de determinação (R2): {r_2}')<jupyter_output>Coeficiente de determinação (R2): 0.40561165206692495<jupyter_text>**12. Utilize os mesmos dados da questão anterior ("hum" e "casual" como variáveis independentes e "cnt" como variavel dependente). Aplique Árvore de Decisão como regressão. Qual é o valor aproximado de R2? Utilize as entradas como teste e valores "default".**<jupyter_code># aplicar árvore de decisão como regressão
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
tree = DecisionTreeRegressor()

# utilize as entradas como teste e valores "default"
xtrain, xtest, ytrain, ytest = train_test_split(x, y)
# aplicando a regressão
tree.fit(x, y)
# coeficiente R2
r2 = tree.score(xtest, ytest)
print(f'Coeficiente de determinação R2: {r2}')<jupyter_output>Coeficiente de determinação R2: 0.6906099624279474<jupyter_text>**13. Comparando os valores de R2 encontrado com a regressão linear e com a Árvore de Decisão, é CORRETO afirmar:**<jupyter_code>print(f'Coeficiente R2 com a regressão linear: {r_2}')
print(f'Coeficiente R2 com a Árvore de Decisão: {tree.score(xtest, ytest)}')
print('A Árvore de Decisão como regressor apresentou maior R2.')<jupyter_output>Coeficiente R2 com a regressão linear: 0.40561165206692495
Coeficiente R2 com a Árvore de Decisão: 0.6906099624279474
A Árvore de Decisão como regressor apresentou maior R2.<jupyter_text>**14. Comparando o SVM com a Árvore de Decisão é CORRETO afirmar:**<jupyter_code>from sklearn.svm import SVR
svm = SVR()
svm.fit(x, y)
svm_previsao = svm.predict(xtest)
print(f'Coeficiente R2 com o SVM: {svm.score(xtest, ytest)}')
print(f'Coeficiente R2 com a Árvore de Decisão: {tree.score(xtest, ytest)}')<jupyter_output>Coeficiente R2 com o SVM: 0.4197706023492682
Coeficiente R2 com a Árvore de Decisão: 0.6906099624279474
{'fraction_non_alphanumeric': 0.11295767333160218, 'fraction_numerical': 0.025967281225655673, 'mean_word_length': 6.949432404540763, 'pattern_counts': {'":': 0, '<': 71, '<?xml version=': 0, '>': 72, 'https://': 0, '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': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '605375', 'license': 'MIT', 'n_tokens_mistral': 2984, 'n_tokens_neox': 2831, 'n_words': 790, 'path': 'Desafio_Módulo_1_Mateus_Marinho.ipynb', 'repo_name': 'mateusmarinho/bootcamp_machine_learning', 'size': '7702'}