Created
July 29, 2020 12:43
-
-
Save borgeslt/1c0ccacf706782e978389993f4db58af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "IGTI_Desafio_1.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"authorship_tag": "ABX9TyP9SdUa8SQ6eHGLV9M9Y7jv" | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Ni_8aduuXqBH", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# *Bootcamp* IGTI - Analista de *Machine Learning*: Desafio Módulo 1 -- Fundamentos\n", | |
"\n", | |
"Aplicação dos conceitos de análise e modelamento de Machine Learning aprendidos no Módulo 1 do Bootcamp.\n", | |
"\n", | |
"**Objetivos:**\n", | |
"* *Exploratory Data Analysis* (EDA) - Análise exploratória dos dados\n", | |
"* Preparação dos dados\n", | |
"* Análise de modelos - Regressão Linear / Árvore de Decisão " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "aIxxhTdYcqSP", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"## **Introdução ao Desafio**\n", | |
"\n", | |
"Neste desafio iremos utilizar uma versáo modificada do *dataset* *\"Bike Sharing\"* disponível no [***UCI Machine Learning Repository***](https://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset). Serão abordados todos os conceitos apresentados durante a disciplina **Fundamentos de *Machine Learning* (FAM)**.\n", | |
"\n", | |
"No arquivo iremos trabalhar com um conjunto de informações sobre o compartilhamento de bicicletas, com dados sobre as condições climáticas, localização das bicicletas, entre outros.\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tVML3nnGfX6i", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### Dicionário de Variáveis\n", | |
"\n", | |
">```instant``` - index do registro\n", | |
">\n", | |
"> ```dteday``` - data\n", | |
">\n", | |
"> ```season``` - estação do ano (1: winter, 2: spring, 3: summer, 4: fall)\n", | |
">\n", | |
"> ```yr``` - ano (0: 2011, 1: 2012)\n", | |
">\n", | |
"> ```mnth``` - mês (1 a 12)\n", | |
">\n", | |
"> ```hr``` - hora (0 a 23)\n", | |
">\n", | |
"> ```holiday``` - se o dia é um feriado ou não\n", | |
">\n", | |
"> ```weekday``` - dia de semana\n", | |
">\n", | |
"> ```workingday``` - se o dia é um fim de semana e não feriado = 1, se não for = 0\n", | |
">\n", | |
"> ```temp``` - temperatura normalizada em Celsius\n", | |
">\n", | |
">```atemp``` - sensação térmica normalizada em Celsius.\n", | |
">\n", | |
"> ```hum``` - Umidade normalizada. Os valores são divididos em 100 (máx)\n", | |
">\n", | |
"> ```windspeed``` - velocidade do vento normalizada. Os valores são divididos em 67 (máx)\n", | |
">\n", | |
"> ```casual``` - contagem de usuários casuais\n", | |
">\n", | |
"> ```registered``` - contagem de usuários registrados\n", | |
">\n", | |
"> ```cnt``` - contagem total de alugéis de bicicletas entre casuais e resgistrados" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "LGV_ILiujmew", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"## **Mãos-à-Obra**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "MhrQfD6Sg4zr", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 72 | |
}, | |
"outputId": "5b051374-9b42-4d1b-f6ae-efcb3a9f9dee" | |
}, | |
"source": [ | |
"# importar as bibliotecas e métodos utilizados\n", | |
"from sklearn import datasets #sklearn é uma das lib mais utilizadas em ML, ela contém, além dos \n", | |
" #datasets, várias outras funções úteis para a análise de dados\n", | |
" # essa lib será sua amiga durante toda sua carreira\n", | |
"import pandas as pd # importa a lib Pandas. Essa lib é utilizada para lidar com dataframes (TABELAS) \n", | |
" #de forma mais amigável. \n", | |
"from sklearn.model_selection import train_test_split,KFold,cross_val_score, cross_val_predict # esse método é utilizado para dividir o \n", | |
" # conjunto de dados em grupos de treinamento e test\n", | |
"from sklearn.svm import SVC #importa o algoritmo svm para ser utilizado \n", | |
"from sklearn import tree # importa o algoritmo arvore de decisão\n", | |
"from sklearn.linear_model import LogisticRegression #importa o algoritmo de regressão logística\n", | |
"from sklearn.metrics import mean_absolute_error #utilizada para o calculo do MAE\n", | |
"from sklearn.metrics import mean_squared_error #utilizada para o calculo do MSE\n", | |
"from sklearn.metrics import r2_score #utilizada para o calculo do R2\n", | |
"from sklearn import metrics #utilizada para as métricas de comparação entre os métodos\n", | |
"import matplotlib.pyplot as plt\n", | |
"import seaborn as sns\n", | |
"import numpy as np\n", | |
"from sklearn.ensemble import RandomForestClassifier\n", | |
"from sklearn.tree import DecisionTreeClassifier \n", | |
"from sklearn.neighbors import KNeighborsClassifier\n", | |
"from sklearn import svm" | |
], | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n", | |
" import pandas.util.testing as tm\n" | |
], | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "O2eQVX1RhGzg", | |
"colab_type": "code", | |
"colab": { | |
"resources": { | |
"http://localhost:8080/nbextensions/google.colab/files.js": { | |
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK", | |
"ok": true, | |
"headers": [ | |
[ | |
"content-type", | |
"application/javascript" | |
] | |
], | |
"status": 200, | |
"status_text": "" | |
} | |
}, | |
"base_uri": "https://localhost:8080/", | |
"height": 73 | |
}, | |
"outputId": "34208633-eff3-4605-a43f-df544086dabe" | |
}, | |
"source": [ | |
"from google.colab import files\n", | |
"upload = files.upload()" | |
], | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <input type=\"file\" id=\"files-7e8be7ff-a3db-45f4-b052-028748257913\" name=\"files[]\" multiple disabled\n", | |
" style=\"border:none\" />\n", | |
" <output id=\"result-7e8be7ff-a3db-45f4-b052-028748257913\">\n", | |
" Upload widget is only available when the cell has been executed in the\n", | |
" current browser session. Please rerun this cell to enable.\n", | |
" </output>\n", | |
" <script src=\"/nbextensions/google.colab/files.js\"></script> " | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
}, | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Saving comp_bikes_mod.csv to comp_bikes_mod.csv\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "29K6IyqbhUBZ", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 202 | |
}, | |
"outputId": "56f5e193-0af8-48e7-8ed3-8a9b796d6c9f" | |
}, | |
"source": [ | |
"# importar o dataset\n", | |
"df = pd.read_csv('comp_bikes_mod.csv')\n", | |
"\n", | |
"# visualizar as primeiras 5 entradas do dataset\n", | |
"df.head()" | |
], | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>instant</th>\n", | |
" <th>dteday</th>\n", | |
" <th>season</th>\n", | |
" <th>yr</th>\n", | |
" <th>mnth</th>\n", | |
" <th>hr</th>\n", | |
" <th>holiday</th>\n", | |
" <th>weekday</th>\n", | |
" <th>workingday</th>\n", | |
" <th>weathersit</th>\n", | |
" <th>temp</th>\n", | |
" <th>atemp</th>\n", | |
" <th>hum</th>\n", | |
" <th>windspeed</th>\n", | |
" <th>casual</th>\n", | |
" <th>registered</th>\n", | |
" <th>cnt</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>6.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0.2879</td>\n", | |
" <td>0.81</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>13.0</td>\n", | |
" <td>16.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2.0</td>\n", | |
" <td>2011-01-01</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>6.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0.22</td>\n", | |
" <td>0.2727</td>\n", | |
" <td>0.80</td>\n", | |
" <td>0.0</td>\n", | |
" <td>8.0</td>\n", | |
" <td>32.0</td>\n", | |
" <td>40.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>3.0</td>\n", | |
" <td>2011-01-01</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>2.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>6.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.22</td>\n", | |
" <td>0.2727</td>\n", | |
" <td>0.80</td>\n", | |
" <td>0.0</td>\n", | |
" <td>5.0</td>\n", | |
" <td>27.0</td>\n", | |
" <td>32.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>4.0</td>\n", | |
" <td>2011-01-01</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>6.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.24</td>\n", | |
" <td>0.2879</td>\n", | |
" <td>0.75</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>10.0</td>\n", | |
" <td>13.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>5.0</td>\n", | |
" <td>2011-01-01</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>6.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.24</td>\n", | |
" <td>0.2879</td>\n", | |
" <td>0.75</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" instant dteday season yr ... windspeed casual registered cnt\n", | |
"0 1.0 NaN 1.0 0.0 ... 0.0 3.0 13.0 16.0\n", | |
"1 2.0 2011-01-01 1.0 0.0 ... 0.0 8.0 32.0 40.0\n", | |
"2 3.0 2011-01-01 1.0 0.0 ... 0.0 5.0 27.0 32.0\n", | |
"3 4.0 2011-01-01 1.0 0.0 ... 0.0 3.0 10.0 13.0\n", | |
"4 5.0 2011-01-01 1.0 0.0 ... 0.0 0.0 1.0 1.0\n", | |
"\n", | |
"[5 rows x 17 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "55WGAGTEhtkC", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 433 | |
}, | |
"outputId": "40e63252-280e-431d-b94f-b06e60f82914" | |
}, | |
"source": [ | |
"# visualizar as informações do dataset\n", | |
"df.info()" | |
], | |
"execution_count": 5, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"RangeIndex: 17379 entries, 0 to 17378\n", | |
"Data columns (total 17 columns):\n", | |
" # Column Non-Null Count Dtype \n", | |
"--- ------ -------------- ----- \n", | |
" 0 instant 15641 non-null float64\n", | |
" 1 dteday 15641 non-null object \n", | |
" 2 season 15641 non-null float64\n", | |
" 3 yr 15641 non-null float64\n", | |
" 4 mnth 15641 non-null float64\n", | |
" 5 hr 15641 non-null float64\n", | |
" 6 holiday 15641 non-null float64\n", | |
" 7 weekday 15641 non-null float64\n", | |
" 8 workingday 15641 non-null float64\n", | |
" 9 weathersit 15641 non-null float64\n", | |
" 10 temp 15641 non-null float64\n", | |
" 11 atemp 15641 non-null float64\n", | |
" 12 hum 15641 non-null float64\n", | |
" 13 windspeed 15641 non-null float64\n", | |
" 14 casual 15641 non-null float64\n", | |
" 15 registered 15641 non-null float64\n", | |
" 16 cnt 15641 non-null float64\n", | |
"dtypes: float64(16), object(1)\n", | |
"memory usage: 2.3+ MB\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "D45EQVhJh7Rg", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Quantas instâncias e atributos existem, respectivamente?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "zEx6rLKoiHUm", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "678edcf0-66d6-4937-eb22-7320df4a70ce" | |
}, | |
"source": [ | |
"df.shape" | |
], | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(17379, 17)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Bg_wIGkzjeuN", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Quantos tipos de dados existem no dataset?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "xQi-EIpqjrxv", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "029ddc6f-e411-4c32-96b9-7aa550d9cacf" | |
}, | |
"source": [ | |
"print(\"Tipos de dados existentes: {}\".format(df.dtypes.nunique()))" | |
], | |
"execution_count": 7, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Tipos de dados existentes: 2\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2UjwhgnBiIr7", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Qual é a proporção (em %) de valores nulos na coluna \"temp\" (temperatura ambiente normalizada)?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "BMnWSD9niYUP", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "11c0d6a6-01d4-4d30-d794-8588a946ad76" | |
}, | |
"source": [ | |
"print(\"Valore nulos:\\t{}\".format(round(((df.temp.isnull().sum()/df.shape[0]) * 100),2)) + \"%\")" | |
], | |
"execution_count": 8, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Valore nulos:\t10.0%\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "0kZ2QHobl25Q", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Eliminar as linhas que contenham valores nulos para a coluna \"dteday\"**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "2x7R4QODijRE", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 52 | |
}, | |
"outputId": "00eeeafc-a75d-4b7a-e325-51f412ddf464" | |
}, | |
"source": [ | |
"# eliminando as entradas\n", | |
"df_clean = df.dropna(subset=['dteday'], axis=0)\n", | |
"\n", | |
"# comparação\n", | |
"print(\"Antes:\\t{}\".format(df.shape))\n", | |
"print(\"Depois:\\t{}\".format(df_clean.shape))" | |
], | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Antes:\t(17379, 17)\n", | |
"Depois:\t(15641, 17)\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "aWOCqVG7kLLC", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Qual o valor médio para os dados da coluna \"temp\" depois de retirar as linhas que continham valores nulos?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Xo0ro22Kkzye", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "c6f7db9e-1265-47dd-c547-c9fb17f33241" | |
}, | |
"source": [ | |
"print(\"média:\\t{}\".format(round(df_clean.temp.mean(),4)))" | |
], | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"média:\t0.4969\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "ONAqU2y5k6ly", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Qual o desivio padrão para os dados da coluna \"windspeed\" após a retirada das linhas com valores nulos da coluna \"dteday\"?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6K2ig-OXlP43", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "a37cdf43-a53b-4fda-9f0f-08b59e74d633" | |
}, | |
"source": [ | |
"print(\"Desvio:\\t{}\".format(round(df_clean.windspeed.std(),4)))" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Desvio:\t0.1223\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "LAsOKQnfltwM", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Após a eliminação das linhas com valores nulos na coluna \"dteday\", transforme a coluna \"season\" em valores categóricos. Quantas categorias diferentes existem?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "L0vBifN19LXq", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 243 | |
}, | |
"outputId": "e940debf-8df8-4650-d934-f7e9610ea8d1" | |
}, | |
"source": [ | |
"df_clean.loc[:,'season'].astype(\"category\")" | |
], | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"1 1.0\n", | |
"2 1.0\n", | |
"3 1.0\n", | |
"4 1.0\n", | |
"5 1.0\n", | |
" ... \n", | |
"17373 1.0\n", | |
"17374 NaN\n", | |
"17375 1.0\n", | |
"17377 1.0\n", | |
"17378 NaN\n", | |
"Name: season, Length: 15641, dtype: category\n", | |
"Categories (4, float64): [1.0, 2.0, 3.0, 4.0]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "-XJH5Yhf9128", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 433 | |
}, | |
"outputId": "6b73e2fe-a696-4473-ea09-63bd6e10bdf5" | |
}, | |
"source": [ | |
"# confirmando a mudança\n", | |
"df_clean.info()" | |
], | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"Int64Index: 15641 entries, 1 to 17378\n", | |
"Data columns (total 17 columns):\n", | |
" # Column Non-Null Count Dtype \n", | |
"--- ------ -------------- ----- \n", | |
" 0 instant 14060 non-null float64\n", | |
" 1 dteday 15641 non-null object \n", | |
" 2 season 14061 non-null float64\n", | |
" 3 yr 14076 non-null float64\n", | |
" 4 mnth 14062 non-null float64\n", | |
" 5 hr 14068 non-null float64\n", | |
" 6 holiday 14076 non-null float64\n", | |
" 7 weekday 14078 non-null float64\n", | |
" 8 workingday 14097 non-null float64\n", | |
" 9 weathersit 14078 non-null float64\n", | |
" 10 temp 14066 non-null float64\n", | |
" 11 atemp 14076 non-null float64\n", | |
" 12 hum 14070 non-null float64\n", | |
" 13 windspeed 14082 non-null float64\n", | |
" 14 casual 14071 non-null float64\n", | |
" 15 registered 14090 non-null float64\n", | |
" 16 cnt 14079 non-null float64\n", | |
"dtypes: float64(16), object(1)\n", | |
"memory usage: 2.1+ MB\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tfiBN0w4_Gj1", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Agora podemos ver que o tipo da coluna \"season\" foi mudada corretamente para category" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "0h4XHz3onqRa", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Transforme a coluna \"dteday\" no tipo \"datetime\", utilizando o dataset limpo de valores nulos. Qual é a última data presente no dataset(YYYY-MM-DD)?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "tO38Ch2Bo0Lw", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "4a43bda8-7ce9-4790-e4a3-2fc82deffc63" | |
}, | |
"source": [ | |
"type(df_clean.dteday) # confirmando o tipo de dado na coluna" | |
], | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"pandas.core.series.Series" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "NHbgkNYFraDL", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 121 | |
}, | |
"outputId": "f757ddce-2bcc-43be-ae3b-a717dda4cee6" | |
}, | |
"source": [ | |
"# converter os tipos de dados da coluna\n", | |
"#df_clean['dteday']=pd.to_datetime(df_clean.loc[:,'dteday'],format=\"%Y-%m-%d\")\n", | |
"\n", | |
"df_clean['dteday'] = pd.to_datetime(df_clean['dteday'], format=\"%Y-%m-%d\")\n", | |
"#pd.to_datetime(df_clean['dteday'],format=\"%Y-%m-%d\")" | |
], | |
"execution_count": 15, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: \n", | |
"A value is trying to be set on a copy of a slice from a DataFrame.\n", | |
"Try using .loc[row_indexer,col_indexer] = value instead\n", | |
"\n", | |
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", | |
" after removing the cwd from sys.path.\n" | |
], | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "jslxtECx_QmT", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 433 | |
}, | |
"outputId": "55acfe92-b181-4116-e9df-80cfd6c40fc4" | |
}, | |
"source": [ | |
"# confirmando a mudança\n", | |
"df_clean.info()" | |
], | |
"execution_count": 16, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"Int64Index: 15641 entries, 1 to 17378\n", | |
"Data columns (total 17 columns):\n", | |
" # Column Non-Null Count Dtype \n", | |
"--- ------ -------------- ----- \n", | |
" 0 instant 14060 non-null float64 \n", | |
" 1 dteday 15641 non-null datetime64[ns]\n", | |
" 2 season 14061 non-null float64 \n", | |
" 3 yr 14076 non-null float64 \n", | |
" 4 mnth 14062 non-null float64 \n", | |
" 5 hr 14068 non-null float64 \n", | |
" 6 holiday 14076 non-null float64 \n", | |
" 7 weekday 14078 non-null float64 \n", | |
" 8 workingday 14097 non-null float64 \n", | |
" 9 weathersit 14078 non-null float64 \n", | |
" 10 temp 14066 non-null float64 \n", | |
" 11 atemp 14076 non-null float64 \n", | |
" 12 hum 14070 non-null float64 \n", | |
" 13 windspeed 14082 non-null float64 \n", | |
" 14 casual 14071 non-null float64 \n", | |
" 15 registered 14090 non-null float64 \n", | |
" 16 cnt 14079 non-null float64 \n", | |
"dtypes: datetime64[ns](1), float64(16)\n", | |
"memory usage: 2.1 MB\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "lbwVi587kXm9", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "b6aa8a2a-3edb-4fa3-b474-153b64190d85" | |
}, | |
"source": [ | |
"print(\"Última Data:\\t{}\".format(df_clean['dteday'].iloc[-1]))" | |
], | |
"execution_count": 17, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Última Data:\t2012-12-31 00:00:00\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "mFG_TwV6sgre", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Após a retirada das linhas que continham valores nulos para a coluna \"dteday\". Considerando o boxplot da variável \"windspeed\"**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "fnoTVSqOxnah", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 265 | |
}, | |
"outputId": "29a4b07a-27a0-4f74-cad2-510f518d28b8" | |
}, | |
"source": [ | |
"df_clean.boxplot(['windspeed']);" | |
], | |
"execution_count": 18, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "YQawPmsHyrT7", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **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.**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "03W4mXey1jKt", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 367 | |
}, | |
"outputId": "94792de2-fa85-4016-8f4b-4ef96fddb551" | |
}, | |
"source": [ | |
"# criar um novo dataframe com as colunas pedidas\n", | |
"df_correlacao = df_clean[['season','temp','atemp','hum','windspeed','cnt']]\n", | |
"\n", | |
"matriz_corr = df_correlacao.corr() # cria a matriz de correlação\n", | |
"\n", | |
"import seaborn as sn\n", | |
"\n", | |
"#plotar a matriz\n", | |
"plt.figure(figsize=(6,6))\n", | |
"sn.heatmap(matriz_corr,annot=True,vmin=-1,vmax=1,center=0,cmap='RdBu',fmt='.2f',square=True,linecolor='white');" | |
], | |
"execution_count": 19, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x432 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "LYaTnaYSC7bP", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **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.**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "S37QP3fjDwuC", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 104 | |
}, | |
"outputId": "b02ef9c3-35c2-44b3-b8e4-c837db32a62d" | |
}, | |
"source": [ | |
"#substituir os valores nulos pela média\n", | |
"df_clean.loc[:,'hum'].fillna(df_clean.loc[:,'hum'].mean(), inplace=True)\n", | |
"df_clean.loc[:,'cnt'].fillna(df_clean.loc[:,'cnt'].mean(), inplace=True)\n", | |
"df_clean.loc[:,'casual'].fillna(df_clean.loc[:,'casual'].mean(), inplace=True)" | |
], | |
"execution_count": 20, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py:6245: SettingWithCopyWarning: \n", | |
"A value is trying to be set on a copy of a slice from a DataFrame\n", | |
"\n", | |
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", | |
" self._update_inplace(new_data)\n" | |
], | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "JZkS6g3rIKUw", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# realizando a análise da regressão\n", | |
"x1 = df_clean['hum'].values #variável independente\n", | |
"x2 = df_clean['casual'].values #variavel independente\n", | |
"y = df_clean['cnt'].values # variável dependente" | |
], | |
"execution_count": 21, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "2S7jSChDJu-i", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"x1_reshaped = x1.reshape(-1,1) # coloca os dados em 2D\n", | |
"x2_reshaped = x2.reshape(-1,1) # coloca os dados em 2D\n", | |
"\n", | |
"x = np.column_stack((x1_reshaped,x2_reshaped)) # agrupa as variaveis preditoras" | |
], | |
"execution_count": 22, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "WYl0tw-6GM-S", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# importar o modelo de regressão linear univariada\n", | |
"from sklearn.linear_model import LinearRegression" | |
], | |
"execution_count": 23, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "W_6cn8EBIp6e", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# realiza a construção do modelo de regressão\n", | |
"reg = LinearRegression()\n", | |
"regressao = reg.fit (x, y) # encontra ps coeficientes" | |
], | |
"execution_count": 24, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ktfukC6uI_9X", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# realiza a previsão\n", | |
"previsao = reg.predict(x)" | |
], | |
"execution_count": 25, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "upv8JVIpKWI4", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# análise do modelo\n", | |
"from sklearn.metrics import r2_score" | |
], | |
"execution_count": 26, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Isu6PtxBKb7I", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 52 | |
}, | |
"outputId": "f5b330a6-79c5-4bb0-a9c1-918f7ffd7ab5" | |
}, | |
"source": [ | |
"# parâmetros encontrados\n", | |
"print('Y = {}X {}'.format(reg.coef_, reg.intercept_))\n", | |
"\n", | |
"R_2 = r2_score(y, previsao) #calcula R2\n", | |
"\n", | |
"print(\"Coeficiente de Determinação (R2):\", (round(R_2,3)))" | |
], | |
"execution_count": 27, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Y = [-99.75012328 2.21512197]X 173.29337505135362\n", | |
"Coeficiente de Determinação (R2): 0.406\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "lSC2dkkcKur6", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Utilize os mesmos dados da questão anterior (\"hum\" e \"casual\" como variáveis independentes e \"cnt\" como variavel dependente). Aplique a árvore de decisão como regressão. Qual é o valor aproximado de R2? Utilize as entradas como teste e valores \"default\".**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "9DSgZLaZusIv", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"from sklearn.preprocessing import MinMaxScaler\n", | |
"scaler = MinMaxScaler()\n", | |
"scaled_df = scaler.fit_transform(x)" | |
], | |
"execution_count": 28, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "iRkOpQQC64EB", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"from sklearn.tree import DecisionTreeRegressor # importar a árvore de decisão como regressor" | |
], | |
"execution_count": 29, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "PDY6zrJlBtrt", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"entrada_arvore = scaled_df[:,1].reshape(-1,1) # entrada para a regressão via árvore\n", | |
"saida_arvore = scaled_df[:,1].reshape(-1,1) # saída para a regressão via árvore" | |
], | |
"execution_count": 30, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "bVtnNeIZFHvG", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"x_train, x_teste, y_train, y_test = train_test_split(x, y)" | |
], | |
"execution_count": 31, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "CaEwRj9ma6ZU", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 121 | |
}, | |
"outputId": "d1f91468-8515-4b75-8a14-a23751391938" | |
}, | |
"source": [ | |
"arvore_regressora = DecisionTreeRegressor() # define o objeto para a árvore\n", | |
"arvore_regressora.fit(x, y) # aplica a regressao" | |
], | |
"execution_count": 32, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse', max_depth=None,\n", | |
" max_features=None, max_leaf_nodes=None,\n", | |
" min_impurity_decrease=0.0, min_impurity_split=None,\n", | |
" min_samples_leaf=1, min_samples_split=2,\n", | |
" min_weight_fraction_leaf=0.0, presort='deprecated',\n", | |
" random_state=None, splitter='best')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 32 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "iVBhwn4fb1r3", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# realiza a previsao\n", | |
"previsao_arvore = arvore_regressora.predict(x)" | |
], | |
"execution_count": 33, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "7ALblwSSb-VR", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 52 | |
}, | |
"outputId": "2ded5eb4-f91c-4a05-f6c4-071f7b4590ac" | |
}, | |
"source": [ | |
"print(\"Erro Absoluto:\", metrics.mean_absolute_error(y, previsao_arvore))\n", | |
"print(\"Mean Squared Error:\", metrics.mean_squared_error(y, previsao_arvore))" | |
], | |
"execution_count": 34, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Erro Absoluto: 58.54911405435064\n", | |
"Mean Squared Error: 8577.336772824097\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "se95etwAcmAY", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "e81dc8c9-5f4a-4806-bcbd-70f216058ee8" | |
}, | |
"source": [ | |
"R_2_a = r2_score(y, previsao_arvore) #calcula R2\n", | |
"\n", | |
"print(\"Coeficiente de Determinação (R2):\", (R_2_a))" | |
], | |
"execution_count": 35, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Coeficiente de Determinação (R2): 0.7098339715834964\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "CDytk1AOjg0F", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### **Qual *insight* podemos encontrar comparando os valores de R2 encontrado com a regressão linear e com a árvore de decisão?**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6IGzsSd4kFZu", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 52 | |
}, | |
"outputId": "7cb5d7b7-4099-4b8b-9e2d-e00a297e115f" | |
}, | |
"source": [ | |
"print(\"Coeficiente de Determinação (R2) - Regressão:\", R_2)\n", | |
"print(\"Coeficiente de Determinação (R2) - Árvore de Decisão:\", R_2_a)" | |
], | |
"execution_count": 36, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Coeficiente de Determinação (R2) - Regressão: 0.4059859251122173\n", | |
"Coeficiente de Determinação (R2) - Árvore de Decisão: 0.7098339715834964\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "3dy_DHeOsVCb", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Comparando os dois resultandos, podemos chega à conclusão que o valor encontrado pela Árvore de Decisão possui maior valor, se aproximando mais de 1." | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment