Skip to content

Instantly share code, notes, and snippets.

@JesseZhuang
Created December 19, 2018 06:01
Show Gist options
  • Save JesseZhuang/6f23a2f84bd50a711ea25338f86ae1c1 to your computer and use it in GitHub Desktop.
Save JesseZhuang/6f23a2f84bd50a711ea25338f86ae1c1 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat_minor": 1,
"cells": [
{
"source": "### Import the JSON File with Industry Lab Sensor Data",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 1,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 1,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>52760_5_temperature_value</td>\n <td>item0001</td>\n <td>2018-02-19T07:05:00.165Z</td>\n <td>20.5</td>\n </tr>\n <tr>\n <th>1</th>\n <td>47406_3_temperature_value</td>\n <td>item0002</td>\n <td>2018-02-19T07:05:00.240Z</td>\n <td>20.61</td>\n </tr>\n <tr>\n <th>2</th>\n <td>452B5_3_temperature_value</td>\n <td>item0003</td>\n <td>2018-02-19T07:05:00.316Z</td>\n <td>19.89</td>\n </tr>\n <tr>\n <th>3</th>\n <td>452F9_3_temperature_value</td>\n <td>item0004</td>\n <td>2018-02-19T07:05:00.388Z</td>\n <td>19.7</td>\n </tr>\n <tr>\n <th>4</th>\n <td>4521C_3_temperature_value</td>\n <td>item0005</td>\n <td>2018-02-19T07:05:00.460Z</td>\n <td>18.89</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname time value\n0 52760_5_temperature_value item0001 2018-02-19T07:05:00.165Z 20.5\n1 47406_3_temperature_value item0002 2018-02-19T07:05:00.240Z 20.61\n2 452B5_3_temperature_value item0003 2018-02-19T07:05:00.316Z 19.89\n3 452F9_3_temperature_value item0004 2018-02-19T07:05:00.388Z 19.7\n4 4521C_3_temperature_value item0005 2018-02-19T07:05:00.460Z 18.89"
},
"output_type": "execute_result"
}
],
"source": "# The code was removed by Watson Studio for sharing."
},
{
"source": "### Check the Structure of the Data Frame",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 2,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df = df_data_1"
},
{
"execution_count": 3,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 3,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>52760_5_temperature_value</td>\n <td>item0001</td>\n <td>2018-02-19T07:05:00.165Z</td>\n <td>20.5</td>\n </tr>\n <tr>\n <th>1</th>\n <td>47406_3_temperature_value</td>\n <td>item0002</td>\n <td>2018-02-19T07:05:00.240Z</td>\n <td>20.61</td>\n </tr>\n <tr>\n <th>2</th>\n <td>452B5_3_temperature_value</td>\n <td>item0003</td>\n <td>2018-02-19T07:05:00.316Z</td>\n <td>19.89</td>\n </tr>\n <tr>\n <th>3</th>\n <td>452F9_3_temperature_value</td>\n <td>item0004</td>\n <td>2018-02-19T07:05:00.388Z</td>\n <td>19.7</td>\n </tr>\n <tr>\n <th>4</th>\n <td>4521C_3_temperature_value</td>\n <td>item0005</td>\n <td>2018-02-19T07:05:00.460Z</td>\n <td>18.89</td>\n </tr>\n <tr>\n <th>5</th>\n <td>51A51_5_temperature_value</td>\n <td>item0006</td>\n <td>2018-02-19T07:05:00.534Z</td>\n <td>21.812</td>\n </tr>\n <tr>\n <th>6</th>\n <td>512F5_5_temperature_value</td>\n <td>item0007</td>\n <td>2018-02-19T07:05:00.607Z</td>\n <td>21</td>\n </tr>\n <tr>\n <th>7</th>\n <td>45974_3_temperature_value</td>\n <td>item0008</td>\n <td>2018-02-19T07:05:00.687Z</td>\n <td>21.06</td>\n </tr>\n <tr>\n <th>8</th>\n <td>52686_5_temperature_value</td>\n <td>item0009</td>\n <td>2018-02-19T07:05:00.760Z</td>\n <td>21</td>\n </tr>\n <tr>\n <th>9</th>\n <td>45152_3_temperature_value</td>\n <td>item0010</td>\n <td>2018-02-19T07:05:00.839Z</td>\n <td>20.2</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname time value\n0 52760_5_temperature_value item0001 2018-02-19T07:05:00.165Z 20.5\n1 47406_3_temperature_value item0002 2018-02-19T07:05:00.240Z 20.61\n2 452B5_3_temperature_value item0003 2018-02-19T07:05:00.316Z 19.89\n3 452F9_3_temperature_value item0004 2018-02-19T07:05:00.388Z 19.7\n4 4521C_3_temperature_value item0005 2018-02-19T07:05:00.460Z 18.89\n5 51A51_5_temperature_value item0006 2018-02-19T07:05:00.534Z 21.812\n6 512F5_5_temperature_value item0007 2018-02-19T07:05:00.607Z 21\n7 45974_3_temperature_value item0008 2018-02-19T07:05:00.687Z 21.06\n8 52686_5_temperature_value item0009 2018-02-19T07:05:00.760Z 21\n9 45152_3_temperature_value item0010 2018-02-19T07:05:00.839Z 20.2"
},
"output_type": "execute_result"
}
],
"source": "df.head(10)"
},
{
"execution_count": 4,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 4,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>760514</th>\n <td>476CA_4_carbonDioxide_value</td>\n <td>item0131</td>\n <td>2018-04-26T14:00:03.218Z</td>\n <td>798</td>\n </tr>\n <tr>\n <th>760515</th>\n <td>46CF4_4_carbonDioxide_value</td>\n <td>item0104</td>\n <td>2018-04-26T14:00:03.259Z</td>\n <td>543</td>\n </tr>\n <tr>\n <th>760516</th>\n <td>45974_4_carbonDioxide_value</td>\n <td>item0122</td>\n <td>2018-04-26T14:00:03.280Z</td>\n <td>744</td>\n </tr>\n <tr>\n <th>760517</th>\n <td>4692E_4_carbonDioxide_value</td>\n <td>item0114</td>\n <td>2018-04-26T14:00:03.301Z</td>\n <td>795</td>\n </tr>\n <tr>\n <th>760518</th>\n <td>South_Workarea_3_Air</td>\n <td>item0157</td>\n <td>2018-04-26T14:00:03.321Z</td>\n <td>500</td>\n </tr>\n <tr>\n <th>760519</th>\n <td>47406_4_carbonDioxide_value</td>\n <td>item0126</td>\n <td>2018-04-26T14:00:03.341Z</td>\n <td>641</td>\n </tr>\n <tr>\n <th>760520</th>\n <td>47888_4_carbonDioxide_value</td>\n <td>item0083</td>\n <td>2018-04-26T14:00:03.362Z</td>\n <td>896</td>\n </tr>\n <tr>\n <th>760521</th>\n <td>45C72_4_carbonDioxide_value</td>\n <td>item0109</td>\n <td>2018-04-26T14:00:03.383Z</td>\n <td>730</td>\n </tr>\n <tr>\n <th>760522</th>\n <td>46C8A_4_carbonDioxide_value</td>\n <td>item0072</td>\n <td>2018-04-26T14:00:03.403Z</td>\n <td>565</td>\n </tr>\n <tr>\n <th>760523</th>\n <td>Loisach_Occupancy</td>\n <td>item0146</td>\n <td>2018-04-26T14:00:52.918Z</td>\n <td>occupied</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname time \\\n760514 476CA_4_carbonDioxide_value item0131 2018-04-26T14:00:03.218Z \n760515 46CF4_4_carbonDioxide_value item0104 2018-04-26T14:00:03.259Z \n760516 45974_4_carbonDioxide_value item0122 2018-04-26T14:00:03.280Z \n760517 4692E_4_carbonDioxide_value item0114 2018-04-26T14:00:03.301Z \n760518 South_Workarea_3_Air item0157 2018-04-26T14:00:03.321Z \n760519 47406_4_carbonDioxide_value item0126 2018-04-26T14:00:03.341Z \n760520 47888_4_carbonDioxide_value item0083 2018-04-26T14:00:03.362Z \n760521 45C72_4_carbonDioxide_value item0109 2018-04-26T14:00:03.383Z \n760522 46C8A_4_carbonDioxide_value item0072 2018-04-26T14:00:03.403Z \n760523 Loisach_Occupancy item0146 2018-04-26T14:00:52.918Z \n\n value \n760514 798 \n760515 543 \n760516 744 \n760517 795 \n760518 500 \n760519 641 \n760520 896 \n760521 730 \n760522 565 \n760523 occupied "
},
"output_type": "execute_result"
}
],
"source": "df.tail(10)"
},
{
"execution_count": 5,
"cell_type": "code",
"metadata": {
"scrolled": false
},
"outputs": [
{
"execution_count": 5,
"metadata": {},
"data": {
"text/plain": "array(['52760_5_temperature_value', '47406_3_temperature_value',\n '452B5_3_temperature_value', '452F9_3_temperature_value',\n '4521C_3_temperature_value', '51A51_5_temperature_value',\n '512F5_5_temperature_value', '45974_3_temperature_value',\n '52686_5_temperature_value', '45152_3_temperature_value',\n '51BEB_5_temperature_value', '45A95_3_temperature_value',\n '516AF_5_temperature_value', '51711_5_temperature_value',\n '51B62_5_temperature_value', '476CA_3_temperature_value',\n '51174_5_temperature_value', '511D3_5_temperature_value',\n '45A94_3_temperature_value', '5161B_5_temperature_value',\n '454CA_3_temperature_value', '510FD_5_temperature_value',\n '4562F_3_temperature_value', '51A63_5_temperature_value',\n '51B5C_5_temperature_value', '47888_3_temperature_value',\n '451E8_3_temperature_value', '5131F_5_temperature_value',\n '51C0A_5_temperature_value', '46C8A_3_temperature_value',\n '52259_5_temperature_value', '4548D_3_temperature_value',\n '451B7_3_temperature_value', '51B6F_5_temperature_value',\n '5140A_5_temperature_value', '52444_5_temperature_value',\n '51B88_5_temperature_value', '515B5_5_temperature_value',\n '52774_5_temperature_value', '45C72_3_temperature_value',\n '5130A_5_temperature_value', '51B0E_5_temperature_value',\n '51166_5_temperature_value', '5257C_5_temperature_value',\n '45534_3_temperature_value', '4692E_3_temperature_value',\n '51183_5_temperature_value', '522AE_5_temperature_value',\n '455DB_3_temperature_value', '4560C_3_temperature_value',\n '45731_3_temperature_value', '5245A_5_temperature_value',\n '450EC_3_temperature_value', '51B56_5_temperature_value',\n '452FC_3_temperature_value', '46CF4_3_temperature_value',\n '52443_5_temperature_value', '45735_3_temperature_value',\n '510E0_5_temperature_value', '52268_5_temperature_value',\n '52439_5_temperature_value', '45590_3_temperature_value',\n '45140_3_temperature_value', '455D9_3_temperature_value',\n '456C6_3_temperature_value', '4674C_3_temperature_value',\n '45A95_4_carbonDioxide_value', '4674C_4_carbonDioxide_value',\n '476CA_4_carbonDioxide_value', '46CF4_4_carbonDioxide_value',\n '45974_4_carbonDioxide_value', '4692E_4_carbonDioxide_value',\n '47406_4_carbonDioxide_value', '47888_4_carbonDioxide_value',\n '46C8A_4_carbonDioxide_value', '45C72_4_carbonDioxide_value',\n '46C8A_3_humidity_value', '47406_3_humidity_value',\n '45152_5_illuminance_value', '45A95_3_humidity_value',\n '451E8_3_humidity_value', '45A94_6_pressure_value',\n '45534_3_humidity_value', '450EC_5_illuminance_value',\n '4521C_3_humidity_value', '45735_3_humidity_value',\n '4560C_3_humidity_value', '454CA_5_illuminance_value',\n '451B7_5_illuminance_value', '454CA_3_humidity_value',\n '451E8_5_illuminance_value', '45140_3_humidity_value',\n '46CF4_3_humidity_value', '45974_6_pressure_value',\n '452B5_3_humidity_value', '47888_3_humidity_value',\n '4674C_6_pressure_value', '455DB_3_humidity_value',\n '47888_6_pressure_value', '45731_5_illuminance_value',\n '4562F_3_humidity_value', '476CA_6_pressure_value',\n '45731_3_humidity_value', '4674C_3_humidity_value',\n '45590_5_illuminance_value', '450EC_3_humidity_value',\n '476CA_3_humidity_value', '45A94_3_humidity_value',\n '45A95_6_pressure_value', '45590_3_humidity_value',\n '47406_6_pressure_value', '46CF4_6_pressure_value',\n '4548D_3_humidity_value', '45974_3_humidity_value',\n '456C6_3_humidity_value', '455D9_3_humidity_value',\n '46C8A_6_pressure_value', '4692E_3_humidity_value',\n '45152_3_humidity_value', '45C72_3_humidity_value',\n '4548D_5_illuminance_value', '4562F_5_illuminance_value',\n '455DB_5_illuminance_value', '451B7_3_humidity_value',\n '45C72_6_pressure_value', '45534_5_illuminance_value',\n '45140_5_illuminance_value', '452F9_5_illuminance_value',\n '4521C_5_illuminance_value', '452FC_5_illuminance_value',\n '452FC_3_humidity_value', '452B5_5_illuminance_value',\n '452F9_3_humidity_value', '4692E_6_pressure_value',\n '456C6_5_illuminance_value', '455D9_5_illuminance_value',\n '45735_5_illuminance_value', 'Wuerm_Occupancy',\n 'Mangfall_Occupancy', 'Think_Box_Occupancy', 'Loisach_Occupancy',\n 'Port_Of_Rotterdam_Occupancy', 'Amper_Occupancy',\n 'Shinano_Occupancy', 'Isar_Occupancy', '4560C_5_illuminance_value',\n 'meetingroom_door_contact_value', 'office_door_contact_value',\n 'DEV_WASP_AGR_MESHLIUM_DEV_value', 'fridge_door_contact_value',\n 'smarthome_door_contact_value', 'liquidSensor_liquidDetected_value',\n '46CE5_3_humidity_value', '46CE5_5_illuminance_value',\n '46CE5_3_temperature_value', 'South_Workarea_3_Air',\n 'Yangtze_Occupancy', 'Floor23_SmartMeter_Value',\n 'Floor23_SmartMeter_Power', 'EnOceanAgri_relativeHumidity_value',\n 'EnOceanAgri_luminanceIntensity_value', 'Floor23_Curtain_Move',\n 'Floor23_Window_Handle_Status', 'Floor23_Curtain',\n 'ESP8266_600194107B29_IRRIGATOR_WATERLEVEL',\n 'ESP8266_600194107B29_IRRIGATOR_SOIL_MOIS', 'Server_Floor23_Ping',\n 'Server_Floor23_KEVAG_Upload', 'Server_Floor23_KEVAG_Download',\n 'Server_Floor23_KEVAG_Ping', 'Server_Floor23_NetDSign_Upload',\n 'Server_Floor23_NetDSign_Download', 'Server_Floor23_NetDSign_Ping'], dtype=object)"
},
"output_type": "execute_result"
}
],
"source": "df.itemname.unique()"
},
{
"source": "### Format Yanzi Sensor Data ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 6,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df['id'] = df['itemname'].str.split('_').str[0]"
},
{
"execution_count": 7,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df['temperature'] = df[df['itemname'].str.contains('temperature')]['value'].astype(float)\ndf['carbonDioxide'] = df[df['itemname'].str.contains('carbonDioxide')]['value'].astype(float)\ndf['humidity'] = df[df['itemname'].str.contains('humidity')]['value'].astype(float)\ndf['illuminance'] = df[df['itemname'].str.contains('illuminance')]['value'].astype(float)\ndf['pressure'] = df[df['itemname'].str.contains('pressure')]['value'].astype(float)\ndf['Occupancy'] = df[df['itemname'].str.contains('Occupancy')]['value']"
},
{
"execution_count": 8,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 8,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n <th>id</th>\n <th>temperature</th>\n <th>carbonDioxide</th>\n <th>humidity</th>\n <th>illuminance</th>\n <th>pressure</th>\n <th>Occupancy</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>52760_5_temperature_value</td>\n <td>item0001</td>\n <td>2018-02-19T07:05:00.165Z</td>\n <td>20.5</td>\n <td>52760</td>\n <td>20.50</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>1</th>\n <td>47406_3_temperature_value</td>\n <td>item0002</td>\n <td>2018-02-19T07:05:00.240Z</td>\n <td>20.61</td>\n <td>47406</td>\n <td>20.61</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>2</th>\n <td>452B5_3_temperature_value</td>\n <td>item0003</td>\n <td>2018-02-19T07:05:00.316Z</td>\n <td>19.89</td>\n <td>452B5</td>\n <td>19.89</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>3</th>\n <td>452F9_3_temperature_value</td>\n <td>item0004</td>\n <td>2018-02-19T07:05:00.388Z</td>\n <td>19.7</td>\n <td>452F9</td>\n <td>19.70</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>4</th>\n <td>4521C_3_temperature_value</td>\n <td>item0005</td>\n <td>2018-02-19T07:05:00.460Z</td>\n <td>18.89</td>\n <td>4521C</td>\n <td>18.89</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname time value \\\n0 52760_5_temperature_value item0001 2018-02-19T07:05:00.165Z 20.5 \n1 47406_3_temperature_value item0002 2018-02-19T07:05:00.240Z 20.61 \n2 452B5_3_temperature_value item0003 2018-02-19T07:05:00.316Z 19.89 \n3 452F9_3_temperature_value item0004 2018-02-19T07:05:00.388Z 19.7 \n4 4521C_3_temperature_value item0005 2018-02-19T07:05:00.460Z 18.89 \n\n id temperature carbonDioxide humidity illuminance pressure \\\n0 52760 20.50 NaN NaN NaN NaN \n1 47406 20.61 NaN NaN NaN NaN \n2 452B5 19.89 NaN NaN NaN NaN \n3 452F9 19.70 NaN NaN NaN NaN \n4 4521C 18.89 NaN NaN NaN NaN \n\n Occupancy \n0 NaN \n1 NaN \n2 NaN \n3 NaN \n4 NaN "
},
"output_type": "execute_result"
}
],
"source": "df.head()"
},
{
"execution_count": 9,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 9,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n <th>id</th>\n <th>temperature</th>\n <th>carbonDioxide</th>\n <th>humidity</th>\n <th>illuminance</th>\n <th>pressure</th>\n <th>Occupancy</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>760519</th>\n <td>47406_4_carbonDioxide_value</td>\n <td>item0126</td>\n <td>2018-04-26T14:00:03.341Z</td>\n <td>641</td>\n <td>47406</td>\n <td>NaN</td>\n <td>641.0</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>760520</th>\n <td>47888_4_carbonDioxide_value</td>\n <td>item0083</td>\n <td>2018-04-26T14:00:03.362Z</td>\n <td>896</td>\n <td>47888</td>\n <td>NaN</td>\n <td>896.0</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>760521</th>\n <td>45C72_4_carbonDioxide_value</td>\n <td>item0109</td>\n <td>2018-04-26T14:00:03.383Z</td>\n <td>730</td>\n <td>45C72</td>\n <td>NaN</td>\n <td>730.0</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>760522</th>\n <td>46C8A_4_carbonDioxide_value</td>\n <td>item0072</td>\n <td>2018-04-26T14:00:03.403Z</td>\n <td>565</td>\n <td>46C8A</td>\n <td>NaN</td>\n <td>565.0</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>760523</th>\n <td>Loisach_Occupancy</td>\n <td>item0146</td>\n <td>2018-04-26T14:00:52.918Z</td>\n <td>occupied</td>\n <td>Loisach</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>occupied</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname time \\\n760519 47406_4_carbonDioxide_value item0126 2018-04-26T14:00:03.341Z \n760520 47888_4_carbonDioxide_value item0083 2018-04-26T14:00:03.362Z \n760521 45C72_4_carbonDioxide_value item0109 2018-04-26T14:00:03.383Z \n760522 46C8A_4_carbonDioxide_value item0072 2018-04-26T14:00:03.403Z \n760523 Loisach_Occupancy item0146 2018-04-26T14:00:52.918Z \n\n value id temperature carbonDioxide humidity illuminance \\\n760519 641 47406 NaN 641.0 NaN NaN \n760520 896 47888 NaN 896.0 NaN NaN \n760521 730 45C72 NaN 730.0 NaN NaN \n760522 565 46C8A NaN 565.0 NaN NaN \n760523 occupied Loisach NaN NaN NaN NaN \n\n pressure Occupancy \n760519 NaN NaN \n760520 NaN NaN \n760521 NaN NaN \n760522 NaN NaN \n760523 NaN occupied "
},
"output_type": "execute_result"
}
],
"source": "df.tail()"
},
{
"execution_count": 10,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 10,
"metadata": {},
"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>temperature</th>\n <th>carbonDioxide</th>\n <th>humidity</th>\n <th>illuminance</th>\n <th>pressure</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>count</th>\n <td>342704.000000</td>\n <td>50509.000000</td>\n <td>160660.000000</td>\n <td>102881.000000</td>\n <td>58900.000000</td>\n </tr>\n <tr>\n <th>mean</th>\n <td>22.124608</td>\n <td>531.344414</td>\n <td>16.940346</td>\n <td>162.919545</td>\n <td>943.730369</td>\n </tr>\n <tr>\n <th>std</th>\n <td>1.815222</td>\n <td>168.712879</td>\n <td>5.128360</td>\n <td>449.858628</td>\n <td>8.895958</td>\n </tr>\n <tr>\n <th>min</th>\n <td>12.930000</td>\n <td>395.000000</td>\n <td>4.000000</td>\n <td>0.000000</td>\n <td>922.680000</td>\n </tr>\n <tr>\n <th>25%</th>\n <td>21.000000</td>\n <td>412.000000</td>\n <td>14.000000</td>\n <td>0.460000</td>\n <td>936.760000</td>\n </tr>\n <tr>\n <th>50%</th>\n <td>22.000000</td>\n <td>472.000000</td>\n <td>17.000000</td>\n <td>14.720000</td>\n <td>944.010000</td>\n </tr>\n <tr>\n <th>75%</th>\n <td>23.230000</td>\n <td>579.000000</td>\n <td>20.000000</td>\n <td>162.380000</td>\n <td>950.040000</td>\n </tr>\n <tr>\n <th>max</th>\n <td>32.780000</td>\n <td>2215.000000</td>\n <td>34.000000</td>\n <td>15857.580000</td>\n <td>967.260000</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " temperature carbonDioxide humidity illuminance \\\ncount 342704.000000 50509.000000 160660.000000 102881.000000 \nmean 22.124608 531.344414 16.940346 162.919545 \nstd 1.815222 168.712879 5.128360 449.858628 \nmin 12.930000 395.000000 4.000000 0.000000 \n25% 21.000000 412.000000 14.000000 0.460000 \n50% 22.000000 472.000000 17.000000 14.720000 \n75% 23.230000 579.000000 20.000000 162.380000 \nmax 32.780000 2215.000000 34.000000 15857.580000 \n\n pressure \ncount 58900.000000 \nmean 943.730369 \nstd 8.895958 \nmin 922.680000 \n25% 936.760000 \n50% 944.010000 \n75% 950.040000 \nmax 967.260000 "
},
"output_type": "execute_result"
}
],
"source": "df.describe()"
},
{
"source": "### Visualize Data with Pixidust",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 11,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": "Pixiedust database opened successfully\nTable VERSION_TRACKER created successfully\nTable METRICS_TRACKER created successfully\n\nShare anonymous install statistics? (opt-out instructions)\n\nPixieDust will record metadata on its environment the next time the package is installed or updated. The data is anonymized and aggregated to help plan for future releases, and records only the following values:\n\n{\n \"data_sent\": currentDate,\n \"runtime\": \"python\",\n \"application_version\": currentPixiedustVersion,\n \"space_id\": nonIdentifyingUniqueId,\n \"config\": {\n \"repository_id\": \"https://github.com/ibm-watson-data-lab/pixiedust\",\n \"target_runtimes\": [\"Data Science Experience\"],\n \"event_id\": \"web\",\n \"event_organizer\": \"dev-journeys\"\n }\n}\nYou can opt out by calling pixiedust.optOut() in a new cell.\n"
},
{
"output_type": "display_data",
"data": {
"text/html": "\n <div style=\"margin:10px\">\n <a href=\"https://github.com/ibm-watson-data-lab/pixiedust\" target=\"_new\">\n <img src=\"https://github.com/ibm-watson-data-lab/pixiedust/raw/master/docs/_static/pd_icon32.png\" style=\"float:left;margin-right:10px\"/>\n </a>\n <span>Pixiedust version 1.1.14</span>\n </div>\n ",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": "Pixiedust runtime updated. Please restart kernel\nTable USER_PREFERENCES created successfully\nTable service_connections created successfully\n"
},
{
"output_type": "display_data",
"data": {
"text/html": "<div>Warning: You are not running the latest version of PixieDust. Current is 1.1.14, Latest is 1.1.15</div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/html": "\n <div>Please copy and run the following command in a new cell to upgrade: <span style=\"background-color:#ececec;font-family:monospace;padding:0 5px\">!pip install --user --upgrade pixiedust</span></div>\n ",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/html": "<div>Please restart kernel after upgrading.</div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
}
],
"source": "import pixiedust"
},
{
"execution_count": 12,
"cell_type": "code",
"metadata": {
"pixiedust": {
"displayParams": {
"no_margin": "true",
"lineChartType": "subplots",
"title": "Shinano Meeting Room",
"filter": "{\"regex\": \"false\", \"constraint\": \"None\", \"field\": \"id\", \"case_matter\": \"false\", \"value\": \"4674C\"}",
"handlerId": "lineChart",
"valueFields": "temperature",
"rendererId": "matplotlib",
"timeseries": "true",
"keyFields": "time",
"legend": "true"
}
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "<style type=\"text/css\">.pd_warning{display:none;}</style><div class=\"pd_warning\"><em>Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter</em></div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {
"pixieapp_metadata": null
}
}
],
"source": "display(df)"
},
{
"source": "### Filter on Shinano and Fill Missing Values",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 13,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano = df[df['id'].isin(['4674C', 'Shinano'])].copy()"
},
{
"execution_count": 14,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano.sort_values(by='time', inplace=True)"
},
{
"execution_count": 15,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano.index = pd.to_datetime(df_shinano.time)"
},
{
"execution_count": 16,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano.fillna(method='ffill', inplace=True)"
},
{
"execution_count": 17,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano.fillna(method='bfill', inplace=True)"
},
{
"execution_count": 18,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 18,
"metadata": {},
"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>itemname</th>\n <th>sensorname</th>\n <th>time</th>\n <th>value</th>\n <th>id</th>\n <th>temperature</th>\n <th>carbonDioxide</th>\n <th>humidity</th>\n <th>illuminance</th>\n <th>pressure</th>\n <th>Occupancy</th>\n </tr>\n <tr>\n <th>time</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2018-02-19 07:05:05.008</th>\n <td>4674C_3_temperature_value</td>\n <td>item0066</td>\n <td>2018-02-19T07:05:05.008Z</td>\n <td>18.5</td>\n <td>4674C</td>\n <td>18.50</td>\n <td>455.0</td>\n <td>16.0</td>\n <td>NaN</td>\n <td>950.51</td>\n <td>free</td>\n </tr>\n <tr>\n <th>2018-02-19 07:10:00.118</th>\n <td>4674C_4_carbonDioxide_value</td>\n <td>item0095</td>\n <td>2018-02-19T07:10:00.118Z</td>\n <td>455</td>\n <td>4674C</td>\n <td>18.50</td>\n <td>455.0</td>\n <td>16.0</td>\n <td>NaN</td>\n <td>950.51</td>\n <td>free</td>\n </tr>\n <tr>\n <th>2018-02-19 07:15:01.061</th>\n <td>4674C_6_pressure_value</td>\n <td>item0096</td>\n <td>2018-02-19T07:15:01.061Z</td>\n <td>950.51</td>\n <td>4674C</td>\n <td>18.50</td>\n <td>455.0</td>\n <td>16.0</td>\n <td>NaN</td>\n <td>950.51</td>\n <td>free</td>\n </tr>\n <tr>\n <th>2018-02-19 07:15:01.460</th>\n <td>4674C_3_humidity_value</td>\n <td>item0094</td>\n <td>2018-02-19T07:15:01.460Z</td>\n <td>16</td>\n <td>4674C</td>\n <td>18.50</td>\n <td>455.0</td>\n <td>16.0</td>\n <td>NaN</td>\n <td>950.51</td>\n <td>free</td>\n </tr>\n <tr>\n <th>2018-02-19 07:15:01.574</th>\n <td>4674C_3_temperature_value</td>\n <td>item0066</td>\n <td>2018-02-19T07:15:01.574Z</td>\n <td>18.58</td>\n <td>4674C</td>\n <td>18.58</td>\n <td>455.0</td>\n <td>16.0</td>\n <td>NaN</td>\n <td>950.51</td>\n <td>free</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " itemname sensorname \\\ntime \n2018-02-19 07:05:05.008 4674C_3_temperature_value item0066 \n2018-02-19 07:10:00.118 4674C_4_carbonDioxide_value item0095 \n2018-02-19 07:15:01.061 4674C_6_pressure_value item0096 \n2018-02-19 07:15:01.460 4674C_3_humidity_value item0094 \n2018-02-19 07:15:01.574 4674C_3_temperature_value item0066 \n\n time value id temperature \\\ntime \n2018-02-19 07:05:05.008 2018-02-19T07:05:05.008Z 18.5 4674C 18.50 \n2018-02-19 07:10:00.118 2018-02-19T07:10:00.118Z 455 4674C 18.50 \n2018-02-19 07:15:01.061 2018-02-19T07:15:01.061Z 950.51 4674C 18.50 \n2018-02-19 07:15:01.460 2018-02-19T07:15:01.460Z 16 4674C 18.50 \n2018-02-19 07:15:01.574 2018-02-19T07:15:01.574Z 18.58 4674C 18.58 \n\n carbonDioxide humidity illuminance pressure \\\ntime \n2018-02-19 07:05:05.008 455.0 16.0 NaN 950.51 \n2018-02-19 07:10:00.118 455.0 16.0 NaN 950.51 \n2018-02-19 07:15:01.061 455.0 16.0 NaN 950.51 \n2018-02-19 07:15:01.460 455.0 16.0 NaN 950.51 \n2018-02-19 07:15:01.574 455.0 16.0 NaN 950.51 \n\n Occupancy \ntime \n2018-02-19 07:05:05.008 free \n2018-02-19 07:10:00.118 free \n2018-02-19 07:15:01.061 free \n2018-02-19 07:15:01.460 free \n2018-02-19 07:15:01.574 free "
},
"output_type": "execute_result"
}
],
"source": "df_shinano.head()"
},
{
"execution_count": 19,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano.drop(['illuminance'], axis=1, inplace=True)"
},
{
"execution_count": 20,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 20,
"metadata": {},
"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>temperature</th>\n <th>carbonDioxide</th>\n <th>humidity</th>\n <th>pressure</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>count</th>\n <td>22744.000000</td>\n <td>22744.000000</td>\n <td>22744.000000</td>\n <td>22744.000000</td>\n </tr>\n <tr>\n <th>mean</th>\n <td>21.716864</td>\n <td>617.600114</td>\n <td>17.815732</td>\n <td>941.909597</td>\n </tr>\n <tr>\n <th>std</th>\n <td>2.472216</td>\n <td>232.130746</td>\n <td>3.968186</td>\n <td>8.905109</td>\n </tr>\n <tr>\n <th>min</th>\n <td>15.210000</td>\n <td>398.000000</td>\n <td>7.000000</td>\n <td>922.980000</td>\n </tr>\n <tr>\n <th>25%</th>\n <td>20.280000</td>\n <td>431.000000</td>\n <td>15.000000</td>\n <td>934.630000</td>\n </tr>\n <tr>\n <th>50%</th>\n <td>21.720000</td>\n <td>558.000000</td>\n <td>18.000000</td>\n <td>942.615000</td>\n </tr>\n <tr>\n <th>75%</th>\n <td>22.810000</td>\n <td>706.000000</td>\n <td>20.000000</td>\n <td>948.130000</td>\n </tr>\n <tr>\n <th>max</th>\n <td>32.780000</td>\n <td>2215.000000</td>\n <td>31.000000</td>\n <td>962.590000</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " temperature carbonDioxide humidity pressure\ncount 22744.000000 22744.000000 22744.000000 22744.000000\nmean 21.716864 617.600114 17.815732 941.909597\nstd 2.472216 232.130746 3.968186 8.905109\nmin 15.210000 398.000000 7.000000 922.980000\n25% 20.280000 431.000000 15.000000 934.630000\n50% 21.720000 558.000000 18.000000 942.615000\n75% 22.810000 706.000000 20.000000 948.130000\nmax 32.780000 2215.000000 31.000000 962.590000"
},
"output_type": "execute_result"
}
],
"source": "df_shinano.describe()"
},
{
"execution_count": 21,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 21,
"metadata": {},
"data": {
"text/plain": "array(['free', 'occupied'], dtype=object)"
},
"output_type": "execute_result"
}
],
"source": "df_shinano.Occupancy.unique()"
},
{
"execution_count": 22,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 22,
"metadata": {},
"data": {
"text/plain": "Occupancy\nfree 16948\noccupied 5796\nName: time, dtype: int64"
},
"output_type": "execute_result"
}
],
"source": "df_shinano.groupby('Occupancy')['time'].nunique()"
},
{
"source": "### Plot Sensor Values depending on Occupancy State",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 23,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import matplotlib.pyplot as plt"
},
{
"execution_count": 24,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 24,
"metadata": {},
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x2b25dd4ceb00>"
},
"output_type": "execute_result"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": "<matplotlib.figure.Figure at 0x2b25dd4d5320>"
},
"metadata": {}
}
],
"source": "df_shinano.temperature.plot()"
},
{
"source": "### Build Simple Prediction Model",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 25,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "from sklearn.model_selection import train_test_split"
},
{
"execution_count": 26,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano_model = df_shinano.copy()"
},
{
"execution_count": 27,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "df_shinano_model.loc[df_shinano_model.Occupancy == 'free', 'Occupancy'] = 0\ndf_shinano_model.loc[df_shinano_model.Occupancy == 'occupied', 'Occupancy'] = 1"
},
{
"execution_count": 28,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 28,
"metadata": {},
"data": {
"text/plain": "array([0, 0, 0, ..., 0, 0, 0])"
},
"output_type": "execute_result"
}
],
"source": "y = df_shinano_model['Occupancy'].values\ny"
},
{
"execution_count": 29,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 29,
"metadata": {},
"data": {
"text/plain": "array([[ 18.5 , 455. , 16. , 950.51],\n [ 18.5 , 455. , 16. , 950.51],\n [ 18.5 , 455. , 16. , 950.51],\n ..., \n [ 22.22, 815. , 21. , 949.91],\n [ 22.39, 815. , 21. , 949.91],\n [ 22.39, 812. , 21. , 949.91]])"
},
"output_type": "execute_result"
}
],
"source": "X = df_shinano_model.loc[:, ['temperature', 'carbonDioxide', 'humidity', 'pressure']].values\nX"
},
{
"execution_count": 30,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
},
{
"execution_count": 31,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "import numpy as np\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import classification_report\nfrom sklearn.model_selection import learning_curve"
},
{
"execution_count": 32,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None,\n n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5)):\n plt.figure()\n plt.title(title)\n if ylim is not None:\n plt.ylim(*ylim)\n plt.xlabel(\"Training examples\")\n plt.ylabel(\"Score\")\n train_sizes, train_scores, test_scores = learning_curve(\n estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)\n train_scores_mean = np.mean(train_scores, axis=1)\n train_scores_std = np.std(train_scores, axis=1)\n test_scores_mean = np.mean(test_scores, axis=1)\n test_scores_std = np.std(test_scores, axis=1)\n plt.grid()\n\n plt.fill_between(train_sizes, train_scores_mean - train_scores_std,\n train_scores_mean + train_scores_std, alpha=0.1,\n color=\"r\")\n plt.fill_between(train_sizes, test_scores_mean - test_scores_std,\n test_scores_mean + test_scores_std, alpha=0.1, color=\"g\")\n plt.plot(train_sizes, train_scores_mean, 'o-', color=\"r\",\n label=\"Training score\")\n plt.plot(train_sizes, test_scores_mean, 'o-', color=\"g\",\n label=\"Cross-validation score\")\n\n plt.legend(loc=\"best\")\n return plt"
},
{
"execution_count": 33,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "clf = RandomForestClassifier(n_estimators=10)"
},
{
"execution_count": 34,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 34,
"metadata": {},
"data": {
"text/plain": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n max_depth=None, max_features='auto', 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, n_estimators=10, n_jobs=1,\n oob_score=False, random_state=None, verbose=0,\n warm_start=False)"
},
"output_type": "execute_result"
}
],
"source": "clf.fit(X_train, y_train)"
},
{
"execution_count": 35,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"execution_count": 35,
"metadata": {},
"data": {
"text/plain": "0.92767641239832932"
},
"output_type": "execute_result"
}
],
"source": "clf.score(X_test, y_test)"
},
{
"execution_count": 36,
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": "predictions = clf.predict(X_test)"
},
{
"execution_count": 37,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": " precision recall f1-score support\n\n 0 0.95 0.95 0.95 3377\n 1 0.86 0.86 0.86 1172\n\navg / total 0.93 0.93 0.93 4549\n\n"
}
],
"source": "print(classification_report(y_test, predictions))"
},
{
"execution_count": 38,
"cell_type": "code",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": "<matplotlib.figure.Figure at 0x2b25dd25fb00>"
},
"metadata": {}
}
],
"source": "title = 'Learning Curves (Random Forest)'\nestimator = clf\nplot_learning_curve(estimator, title, X_train, y_train)\nplt.show()"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.5",
"name": "python3",
"language": "python"
},
"language_info": {
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"version": "3.5.5",
"name": "python",
"file_extension": ".py",
"pygments_lexer": "ipython3",
"codemirror_mode": {
"version": 3,
"name": "ipython"
}
}
},
"nbformat": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment