Skip to content

Instantly share code, notes, and snippets.

@JuYoungAhn
Last active August 23, 2016 06:51
Show Gist options
  • Save JuYoungAhn/194c485fe21c2264f7ed185936699249 to your computer and use it in GitHub Desktop.
Save JuYoungAhn/194c485fe21c2264f7ed185936699249 to your computer and use it in GitHub Desktop.
Preprocessing and Plotting Kaggle Belkin Energy Disaggregation Competition Dataset. https://www.kaggle.com/c/belkin-energy-disaggregation-competition/data
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 281,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\"\"\" \n",
" Kaggle Belkin Energy Disaggregation Dataset - H1 CSV Data\n",
" https://www.kaggle.com/c/belkin-energy-disaggregation-competition/data\n",
" Written By JuYoungAhn https://github.com/JuYoungAhn\n",
"\"\"\"\n",
"%matplotlib inline\n",
"import tensorflow as tf\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 360,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\"\"\" Read Dataset : Phase 1 Data \"\"\"\n",
"# Insert Your File Path\n",
"current = pd.read_csv(\"//Users/ahn/downloads/belkin/LF1I_SPLIT.csv\", header=None, low_memory=False)\n",
"current.columns = ['phase1_current', 'phase1_current_harmonic1', 'phase1_current_harmonic2', 'phase1_current_harmonic3', 'phase1_current_harmonic4', 'phase1_current_harmonic5', 'phase1_nothing']\n",
"\n",
"voltage = pd.read_csv(\"//Users/ahn/downloads/belkin/LF1V_SPLIT.csv\", header=None, low_memory=False)\n",
"voltage.columns = ['phase1_voltage', 'phase1_voltage_harmonic1', 'phase1_voltage_harmonic2', 'phase1_voltage_harmonic3', 'phase1_voltage_harmonic4', 'phase1_voltage_harmonic5']\n",
"\n",
"timetick = pd.read_csv(\"//Users/ahn/downloads/belkin/TimeTicks1.csv\", header=None, low_memory=False)\n",
"timetick.columns = ['timestamp']\n",
"\n",
"# Delete Non rows\n",
"current = current[np.isfinite(current['phase1_current'])]\n",
"voltage = voltage[np.isfinite(voltage['phase1_voltage_harmonic1'])]\n",
"\n",
"# Drop nothing column.. csv file problem\n",
"current.drop('phase1_nothing', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 361,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\"\"\" Read Dataset : Phase 2 Data \"\"\"\n",
"# Insert Your File Path\n",
"current2 = pd.read_csv(\"//Users/ahn/downloads/belkin/LF2I_SPLIT.csv\", header=None, low_memory=False)\n",
"current2.columns = ['phase2_current', 'phase2_harmonic1', 'phase2_current_harmonic2', 'phase2_current_harmonic3', 'phase2_current_harmonic4', 'phase2_current_harmonic5']\n",
"\n",
"voltage2 = pd.read_csv(\"//Users/ahn/downloads/belkin/LF2V_SPLIT.csv\", header=None, low_memory=False)\n",
"voltage2.columns = ['phase2_voltage', 'phase2_voltage_harmonic1', 'phase2_voltage_harmonic2', 'phase2_voltage_harmonic3', 'phase2_voltage_harmonic4', 'phase2_voltage_harmonic5']\n",
"\n",
"timetick2 = pd.read_csv(\"//Users/ahn/downloads/belkin/TimeTicks2.csv\", header=None, low_memory=False)\n",
"timetick2.columns = ['timestamp']\n",
"\n",
"# Delete Non rows\n",
"current2 = current2[np.isfinite(current2['phase2_current'])]\n",
"voltage2 = voltage2[np.isfinite(voltage2['phase2_voltage_harmonic1'])]"
]
},
{
"cell_type": "code",
"execution_count": 362,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\"\"\" Read Tag Info (Event Info) \"\"\"\n",
"taginfo = pd.read_csv(\"//Users/ahn/downloads/belkin/TaggingInfo.csv\", header=None)\n",
"taginfo.columns = ['event_no', 'appliance', 'on', 'off']\n",
"\n",
"# change column type\n",
"taginfo['appliance'] = taginfo['appliance'].astype('str') # change event appliance data to str"
]
},
{
"cell_type": "code",
"execution_count": 363,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\"\"\" Preprocessing \"\"\"\n",
"# Merge Data set : Phase1\n",
"data = pd.concat([current, voltage], axis=1) # merge current, voltage \n",
"data = pd.concat([data, timetick], axis=1)\n",
"data['timestamp'] = data['timestamp'].astype('int') # change type\n",
"\n",
"# Merge Data set : Phase2 \n",
"data2 = pd.concat([current2, voltage2], axis=1) # merge current2, voltage2\n",
"data2 = pd.concat([data2, timetick2], axis=1) \n",
"data2['timestamp'] = data2['timestamp'].astype('int') # change type\n",
"\n",
"# Inner Join Phase1 And Phase2 On Timestamp\n",
"total_data = data.join(data2, lsuffix='_l', how=\"inner\")\n",
"total_data['event'] = 'none' # set default event"
]
},
{
"cell_type": "code",
"execution_count": 364,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"# Merge Event On timestamp\n",
"for i in range(len(taginfo)) : \n",
" on_time = taginfo['on'][i]\n",
" off_time = taginfo['off'][i]\n",
" \n",
" total_data.loc[total_data['timestamp'] == on_time, 'event'] = taginfo['appliance'][i] + ' On'\n",
" total_data.loc[total_data['timestamp'] == off_time, 'event'] = taginfo['appliance'][i] + ' Off'"
]
},
{
"cell_type": "code",
"execution_count": 365,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\"\"\" \n",
" There are errors in H1 dataset. \n",
" I fixed it manually. \n",
"\"\"\"\n",
"\n",
"total_data.loc[total_data['phase1_voltage'] == '-77-95', 'phase1_voltage'] = '-77.95'\n",
"total_data.loc[total_data['phase1_voltage'] == '95.75-', 'phase1_voltage'] = '95.75'\n",
"total_data.loc[total_data['phase1_voltage'] == '28-120', 'phase1_voltage'] = '28.12'\n",
"total_data.loc[total_data['phase1_voltage'] == '-86+89','phase1_voltage'] = '-86.89'\n",
"total_data.loc[total_data['phase1_voltage'] == '73.75-', 'phase1_voltage'] = '73.75'\n",
"total_data.loc[total_data['phase1_voltage'] == '113-47', 'phase1_voltage'] = '113.47'\n",
"total_data.loc[total_data['phase1_voltage'] == '-42.5-', 'phase1_voltage'] = '-42.5'\n",
"\n",
"total_data['phase1_voltage'] = total_data['phase1_voltage'].astype('float')\n",
"\n",
"total_data.loc[total_data['phase2_voltage'] == '-68+10', 'phase2_voltage'] = '-68.10'\n",
"total_data.loc[total_data['phase2_voltage'] == '81.5-9', 'phase2_voltage'] = '81.5'\n",
"total_data.loc[total_data['phase2_voltage'] == '24.75+', 'phase2_voltage'] = '24.75'\n",
"total_data.loc[total_data['phase2_voltage'] == '100+73', 'phase2_voltage'] = '100.73'\n",
"total_data.loc[total_data['phase2_voltage'] == '74-99.', 'phase2_voltage'] = '74.99'\n",
"total_data.loc[total_data['phase2_voltage'] == '80.5-9', 'phase2_voltage'] = '80.5'\n",
"total_data.loc[total_data['phase2_voltage'] == '66.5+1', 'phase2_voltage'] = '66.5'\n",
"\n",
"total_data['phase2_voltage'] = total_data['phase2_voltage'].astype('float')"
]
},
{
"cell_type": "code",
"execution_count": 366,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\"\"\" Export New Merged Data set \"\"\"\n",
"# Insert Your File Path\n",
"total_data.to_csv(\"belkin.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 367,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import tensorflow as tf\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 368,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"\"\"\" Read New Dataset \"\"\"\n",
"# Insert Your File Path\n",
"belkin = pd.read_csv(\"//Users/ahn/documents/python/belkin.csv\")\n",
"belkin.drop('Unnamed: 0', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 369,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>phase1_current</th>\n",
" <th>phase1_current_harmonic1</th>\n",
" <th>phase1_current_harmonic2</th>\n",
" <th>phase1_current_harmonic3</th>\n",
" <th>phase1_current_harmonic4</th>\n",
" <th>phase1_current_harmonic5</th>\n",
" <th>phase1_voltage</th>\n",
" <th>phase1_voltage_harmonic1</th>\n",
" <th>phase1_voltage_harmonic2</th>\n",
" <th>phase1_voltage_harmonic3</th>\n",
" <th>...</th>\n",
" <th>phase2_current_harmonic4</th>\n",
" <th>phase2_current_harmonic5</th>\n",
" <th>phase2_voltage</th>\n",
" <th>phase2_voltage_harmonic1</th>\n",
" <th>phase2_voltage_harmonic2</th>\n",
" <th>phase2_voltage_harmonic3</th>\n",
" <th>phase2_voltage_harmonic4</th>\n",
" <th>phase2_voltage_harmonic5</th>\n",
" <th>timestamp</th>\n",
" <th>event</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.247</td>\n",
" <td>0.0025</td>\n",
" <td>-0.0750</td>\n",
" <td>-0.0000</td>\n",
" <td>0.0523</td>\n",
" <td>0.0007</td>\n",
" <td>-112.20</td>\n",
" <td>0.0109</td>\n",
" <td>0.7112</td>\n",
" <td>0.0059</td>\n",
" <td>...</td>\n",
" <td>-0.3020</td>\n",
" <td>0.0049</td>\n",
" <td>-121.9</td>\n",
" <td>0.0077</td>\n",
" <td>0.3313</td>\n",
" <td>0.0068</td>\n",
" <td>2.0932</td>\n",
" <td>-0.0050</td>\n",
" <td>1334300401</td>\n",
" <td>none</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-0.246</td>\n",
" <td>-0.0040</td>\n",
" <td>-0.0410</td>\n",
" <td>-0.0000</td>\n",
" <td>0.0263</td>\n",
" <td>0.0069</td>\n",
" <td>-107.10</td>\n",
" <td>-0.0010</td>\n",
" <td>0.6845</td>\n",
" <td>0.0023</td>\n",
" <td>...</td>\n",
" <td>-0.2830</td>\n",
" <td>-0.0020</td>\n",
" <td>-120.8</td>\n",
" <td>-0.0120</td>\n",
" <td>0.4980</td>\n",
" <td>0.0016</td>\n",
" <td>1.1194</td>\n",
" <td>0.0057</td>\n",
" <td>1334300401</td>\n",
" <td>none</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-0.244</td>\n",
" <td>-0.0010</td>\n",
" <td>-0.0020</td>\n",
" <td>-0.0010</td>\n",
" <td>-0.0060</td>\n",
" <td>0.0045</td>\n",
" <td>-100.90</td>\n",
" <td>-0.0020</td>\n",
" <td>0.6028</td>\n",
" <td>0.0052</td>\n",
" <td>...</td>\n",
" <td>-0.2050</td>\n",
" <td>0.0080</td>\n",
" <td>-118.5</td>\n",
" <td>0.0097</td>\n",
" <td>0.6172</td>\n",
" <td>0.0038</td>\n",
" <td>-0.1040</td>\n",
" <td>0.0058</td>\n",
" <td>1334300401</td>\n",
" <td>none</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.242</td>\n",
" <td>-0.0050</td>\n",
" <td>0.0316</td>\n",
" <td>0.0007</td>\n",
" <td>-0.0420</td>\n",
" <td>0.0030</td>\n",
" <td>-93.73</td>\n",
" <td>0.0002</td>\n",
" <td>0.4679</td>\n",
" <td>0.0058</td>\n",
" <td>...</td>\n",
" <td>-0.0730</td>\n",
" <td>-0.0030</td>\n",
" <td>-115.2</td>\n",
" <td>-0.0130</td>\n",
" <td>0.6912</td>\n",
" <td>-0.0040</td>\n",
" <td>-1.3070</td>\n",
" <td>0.0097</td>\n",
" <td>1334300401</td>\n",
" <td>none</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-0.238</td>\n",
" <td>-0.0000</td>\n",
" <td>0.0758</td>\n",
" <td>0.0009</td>\n",
" <td>-0.0650</td>\n",
" <td>-0.0040</td>\n",
" <td>-85.70</td>\n",
" <td>-0.0090</td>\n",
" <td>0.2899</td>\n",
" <td>0.0051</td>\n",
" <td>...</td>\n",
" <td>0.0693</td>\n",
" <td>-0.0010</td>\n",
" <td>-110.7</td>\n",
" <td>0.0053</td>\n",
" <td>0.7092</td>\n",
" <td>0.0009</td>\n",
" <td>-2.2150</td>\n",
" <td>0.0010</td>\n",
" <td>1334300401</td>\n",
" <td>none</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
" phase1_current phase1_current_harmonic1 phase1_current_harmonic2 \\\n",
"0 -0.247 0.0025 -0.0750 \n",
"1 -0.246 -0.0040 -0.0410 \n",
"2 -0.244 -0.0010 -0.0020 \n",
"3 -0.242 -0.0050 0.0316 \n",
"4 -0.238 -0.0000 0.0758 \n",
"\n",
" phase1_current_harmonic3 phase1_current_harmonic4 \\\n",
"0 -0.0000 0.0523 \n",
"1 -0.0000 0.0263 \n",
"2 -0.0010 -0.0060 \n",
"3 0.0007 -0.0420 \n",
"4 0.0009 -0.0650 \n",
"\n",
" phase1_current_harmonic5 phase1_voltage phase1_voltage_harmonic1 \\\n",
"0 0.0007 -112.20 0.0109 \n",
"1 0.0069 -107.10 -0.0010 \n",
"2 0.0045 -100.90 -0.0020 \n",
"3 0.0030 -93.73 0.0002 \n",
"4 -0.0040 -85.70 -0.0090 \n",
"\n",
" phase1_voltage_harmonic2 phase1_voltage_harmonic3 ... \\\n",
"0 0.7112 0.0059 ... \n",
"1 0.6845 0.0023 ... \n",
"2 0.6028 0.0052 ... \n",
"3 0.4679 0.0058 ... \n",
"4 0.2899 0.0051 ... \n",
"\n",
" phase2_current_harmonic4 phase2_current_harmonic5 phase2_voltage \\\n",
"0 -0.3020 0.0049 -121.9 \n",
"1 -0.2830 -0.0020 -120.8 \n",
"2 -0.2050 0.0080 -118.5 \n",
"3 -0.0730 -0.0030 -115.2 \n",
"4 0.0693 -0.0010 -110.7 \n",
"\n",
" phase2_voltage_harmonic1 phase2_voltage_harmonic2 \\\n",
"0 0.0077 0.3313 \n",
"1 -0.0120 0.4980 \n",
"2 0.0097 0.6172 \n",
"3 -0.0130 0.6912 \n",
"4 0.0053 0.7092 \n",
"\n",
" phase2_voltage_harmonic3 phase2_voltage_harmonic4 \\\n",
"0 0.0068 2.0932 \n",
"1 0.0016 1.1194 \n",
"2 0.0038 -0.1040 \n",
"3 -0.0040 -1.3070 \n",
"4 0.0009 -2.2150 \n",
"\n",
" phase2_voltage_harmonic5 timestamp event \n",
"0 -0.0050 1334300401 none \n",
"1 0.0057 1334300401 none \n",
"2 0.0058 1334300401 none \n",
"3 0.0097 1334300401 none \n",
"4 0.0010 1334300401 none \n",
"\n",
"[5 rows x 27 columns]"
]
},
"execution_count": 369,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"belkin.head()"
]
},
{
"cell_type": "code",
"execution_count": 370,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\"\"\" Preprocess \"\"\"\n",
"# Define Apparent Power\n",
"belkin['phase1_power'] = belkin['phase1_current'] * belkin['phase1_voltage']\n",
"belkin['phase2_power'] = belkin['phase2_current'] * belkin['phase2_voltage']"
]
},
{
"cell_type": "code",
"execution_count": 375,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Event time : 332088 1334355690\n",
"Name: timestamp, dtype: int64\n",
"Event name : 332088 Washer On\n",
"Name: event, dtype: object\n"
]
},
{
"data": {
"image/png": "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\nha+UUgHi/wEHFJs4n/Of1QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x27f3b83d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\"\"\" Plotting \"\"\"\n",
"event_time = belkin[belkin['event'] != 'none']['timestamp'][0:1]\n",
"event_name = belkin[belkin['event'] != 'none']['event'][0:1]\n",
"\n",
"print 'Event time : ', event_time \n",
"print 'Event name : ', event_name\n",
"\n",
"time_step_size = 16\n",
"frequency = 6\n",
"\n",
"event_timestamp = int(event_time)\n",
"start_timestamp = int(event_time-time_step_size)\n",
"end_timestamp = int(event_time+time_step_size)\n",
"\n",
"event_idx = belkin[belkin['timestamp'] == event_timestamp].index[0]\n",
"start_idx = belkin[belkin['timestamp'] == start_timestamp].index[0]\n",
"end_idx = belkin[belkin['timestamp'] == end_timestamp].index[0]\n",
"\n",
"x_variable = 'timestamp'\n",
"y_variables = ['phase1_power', 'phase2_power']\n",
"\n",
"def viewGraph(start_idx, end_idx, x_variable, y_variables) :\n",
" for variable in y_variables :\n",
" plt.plot(belkin[start_idx:end_idx][x_variable], belkin[start_idx:end_idx][y_variables])\n",
" \n",
"viewGraph(start_idx, end_idx, x_variable, y_variables)\n",
"viewGraph(event_idx, event_idx+frequency, x_variable, y_variables)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "tensorflow",
"language": "python",
"name": "tensorflow"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment