{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import MinMaxScaler\nfrom sklearn.feature_selection import chi2\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n# import os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import dask\nimport dask.dataframe as dd","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"path ='/kaggle/input/ashrae-energy-prediction/'\nbuilding_meta=dd.read_csv(f'{path}building_metadata.csv')\nweather_tr=dd.read_csv(f'{path}weather_train.csv')                         \ntest=dd.read_csv(f'{path}test.csv')\ntrain=dd.read_csv(f'{path}train.csv')\nweather_tst=dd.read_csv(f'{path}weather_test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# del building_meta, weather_tr, train, test, weather_tst","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(building_meta.head())\nprint(building_meta.shape)\nprint(train.shape)\nprint(test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"## Memory optimization\n\n# Original code from https://www.kaggle.com/gemartin/load-data-reduce-memory-usage by @gemartin\n# Modified to support timestamp type, categorical type\n# Modified to add option to use float16\n\nfrom pandas.api.types import is_datetime64_any_dtype as is_datetime\nfrom pandas.api.types import is_categorical_dtype\n\ndef reduce_mem_usage(df, use_float16=False):\n    \"\"\"\n    Iterate through all the columns of a dataframe and modify the data type to reduce memory usage.        \n    \"\"\"\n    \n    start_mem = df.memory_usage().sum() / 1024**2\n    print(\"Memory usage of dataframe is {:.2f} MB\".format(start_mem))\n    \n    for col in df.columns:\n        if is_datetime(df[col]) or is_categorical_dtype(df[col]):\n            continue\n        col_type = df[col].dtype\n        \n        if col_type != object:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == \"int\":\n                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)  \n            else:\n                if use_float16 and c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                    df[col] = df[col].astype(np.float16)\n                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)\n        else:\n            df[col] = df[col].astype(\"category\")\n\n    end_mem = df.memory_usage().sum() / 1024**2\n    print(\"Memory usage after optimization is: {:.2f} MB\".format(end_mem))\n    print(\"Decreased by {:.1f}%\".format(100 * (start_mem - end_mem) / start_mem))\n    \n    return df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train=reduce_mem_usage(train,use_float16=True)\n# weather_tr=reduce_mem_usage(weather_tr,use_float16=True)\n# building_meta=reduce_mem_usage(building_meta,use_float16=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# sample_train_nj = train.sample(frac=.1) # sample nj: not joined\n# sample_train_nj.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# sample_train_nj.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![image.png](attachment:image.png)","attachments":{"image.png":{"image/png":"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"}}},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge = train.merge(building_meta , on='building_id' , how ='left')\ntrain_merge = train_merge.merge(weather_tr, on=['site_id', 'timestamp'], how='left')\ntrain_merge.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# most building in the sample has null values in floor count and year built so we can remove them \nprint('features with null values:\\n' ,train_merge.isnull().sum() *100 /train_merge.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"## note: every building may have multiple meters(0: electricity, 1: chilledwater, 2: steam, 3: hotwater) \n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Anova\n\nH0: feature and target are uncorrelated\n\nH1: feature and target are correlated\nf_classif result is [f_value, p_value]. p_value<0.05 rejects the null hypothesis(H0) and means that feature and target are correlated"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.feature_selection import f_classif\nfrom sklearn.preprocessing import LabelEncoder","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"le = LabelEncoder()\ntrain_merge['primary_use'] = le.fit_transform(train_merge['primary_use'])\ntrain_merged_anova = train_merge.sample(frac = 0.1)\nprint(le.classes_)\ntrain_merged_anova.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merged_anova_nona = train_merged_anova.dropna()\ntrain_merged_anova_nona.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merged_anova_nona.min()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merged_anova_nona.dew_temperature += 9.4\ntrain_merged_anova_nona.precip_depth_1_hr += 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"f_classif(train_merged_anova_nona.meter.values.reshape((-1,1)), train_merged_anova_nona.meter_reading.values.reshape((-1)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"f_classif(train_merged_anova_nona.primary_use.values.reshape((-1,1)), train_merged_anova_nona.meter_reading.values.reshape((-1)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"f_classif(train_merged_anova_nona.floor_count.values.reshape((-1,1)), train_merged_anova_nona.meter_reading.values.reshape((-1)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge['timestamp'] = dd.to_datetime(train_merge['timestamp'] )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, axes = plt.subplots(1, 1, figsize=(14, 6), dpi=100)\ntrain_merge[['timestamp', 'meter_reading']].set_index('timestamp').resample('H').mean()['meter_reading'].plot(ax=axes, label='By hour', alpha=0.8).set_ylabel('Meter reading', fontsize=14);\ntrain_merge[['timestamp', 'meter_reading']].set_index('timestamp').resample('D').mean()['meter_reading'].plot(ax=axes, label='By day', alpha=1).set_ylabel('Meter reading', fontsize=14);\naxes.set_title('Mean Meter reading by hour and day', fontsize=16);\naxes.legend();","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge.groupby('meter').meter_reading.agg(['mean', 'std', 'median'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"weather_tr.dropna().groupby('site_id').mean()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"columns = weather_tr.drop(['timestamp', 'site_id'], axis =1).columns\nweather_tr_scaled = weather_tr.copy()\nweather_tr_scaled[columns] = MinMaxScaler().fit_transform(weather_tr_scaled[columns])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"weather_tr_scaled.groupby('site_id').boxplot(column=list(columns),\n                                             layout=(-1,1), sharex=False,\n                                             fontsize=13, figsize=(15,50))\nplt.tight_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ncorr = train_merge.corr()\nmask = np.zeros_like(corr, dtype=np.bool)\nmask[np.triu_indices_from(mask)] = True\nf, ax = plt.subplots(figsize=(11, 9))\nsns.heatmap(corr, mask=mask, annot = True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce=reduce_mem_usage(train_merge,use_float16=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"columns = train_merge.drop(['building_id', 'timestamp','site_id',], axis=1).columns\ncolumns = list(columns)\ncolumns","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"round(len(columns)/2)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## relation of different parameters on meter reading"},{"metadata":{"trusted":true},"cell_type":"code","source":"del train_merge, train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nplt.figure(figsize=(15, 20))\nfor i, column in enumerate(columns):\n    ax = plt.subplot(round(len(columns)/2) +1, 2, i+1)\n    train_merge.plot(ax=ax, kind = 'scatter', x = column, y = 'meter_reading')\n    \nplt.tight_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"## Feature engineering\n* mean & std, Min & Max of air_temperature of sites\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge.groupby('building_id').air_temperature.agg(['mean', 'std', 'min', 'max']).compute()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge['month'] = train_merge.timestamp.map(lambda x:x.month)\ntrain_merge['day'] = train_merge.timestamp.map(lambda x:x.day)\ntrain_merge['hour'] = train_merge.timestamp.map(lambda x:x.hour)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce.tail()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge.groupby(['month','day']).air_temperature.agg(['mean', 'std', 'min', 'max']).compute()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del train, train_merge","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Creating a Baseline.\nBaseline: mean of meter_reading in previus years"},{"metadata":{"trusted":true},"cell_type":"code","source":"test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_merge = test.merge(building_meta , on='building_id' , how ='left')\ntest_merge = test_merge.merge(weather_tst, on=['site_id', 'timestamp'], how='left')\ntest_merge.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_merge = reduce_mem_usage(test_merge)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import gc\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del weather_tr, weather_tst,test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_merge['timestamp'] = dd.to_datetime(test_merge['timestamp'] )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_merge['month'] = test_merge.timestamp.map(lambda x:x.month)\ntest_merge['day'] = test_merge.timestamp.map(lambda x:x.day)\ntest_merge['hour'] = test_merge.timestamp.map(lambda x:x.hour)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge_reduce.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def baseline_predict(sample):\n    #find the mean of rows in train data where month&day&hour is same as given sample\n    return train_merge[(train_merge.building_id==sample.building_id) & (train_merge.month==sample.month) & (train_merge.day==sample.day) & (train_merge.hour==sample.hour)].meter_reading.mean()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_merge['pred_meter_reading'] = test_merge.apply(baseline_predict, axis = 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"baseline_predict(test_merge.iloc[4000,:])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_merge.loc[0, :].compute()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}