{"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_minor":4,"nbformat":4,"cells":[{"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)\n\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\nimport os\nfor 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 20GB 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","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-25T01:41:28.805809Z","iopub.execute_input":"2022-07-25T01:41:28.806642Z","iopub.status.idle":"2022-07-25T01:41:28.815566Z","shell.execute_reply.started":"2022-07-25T01:41:28.806602Z","shell.execute_reply":"2022-07-25T01:41:28.814374Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**必要なライブラリのインストール**","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sklearn\nimport warnings\nfrom sklearn.linear_model import LinearRegression","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:31.418910Z","iopub.execute_input":"2022-07-25T01:41:31.419339Z","iopub.status.idle":"2022-07-25T01:41:31.425016Z","shell.execute_reply.started":"2022-07-25T01:41:31.419302Z","shell.execute_reply":"2022-07-25T01:41:31.423930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**テスト用データの読み込みと欠損値の確認**","metadata":{}},{"cell_type":"code","source":"test = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/test.csv')\ntest.isna().sum()\ntest","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:33.583064Z","iopub.execute_input":"2022-07-25T01:41:33.583708Z","iopub.status.idle":"2022-07-25T01:41:33.621616Z","shell.execute_reply.started":"2022-07-25T01:41:33.583669Z","shell.execute_reply":"2022-07-25T01:41:33.620767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**訓練用データの読み込みと欠損値の確認**","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/train.csv')\ntrain.isna().sum()\ntrain['date'] = pd.to_datetime(train['date'])#訓練データの日付をdatetime型に変換\ntrain","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:37.078054Z","iopub.execute_input":"2022-07-25T01:41:37.078493Z","iopub.status.idle":"2022-07-25T01:41:39.754973Z","shell.execute_reply.started":"2022-07-25T01:41:37.078450Z","shell.execute_reply":"2022-07-25T01:41:39.753862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**プロット用の売上データの下準備**","metadata":{}},{"cell_type":"code","source":"train_sales = train[['date','sales']].copy()\ntrain_sales.set_index('date', inplace=True)\ntrain_plot=train_sales.resample('D').sum()\n#train_sales","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:43.595354Z","iopub.execute_input":"2022-07-25T01:41:43.596432Z","iopub.status.idle":"2022-07-25T01:41:43.706019Z","shell.execute_reply.started":"2022-07-25T01:41:43.596382Z","shell.execute_reply":"2022-07-25T01:41:43.705032Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**提出用データの確認**","metadata":{}},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/sample_submission.csv')\nsubmission","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:45.990321Z","iopub.execute_input":"2022-07-25T01:41:45.990675Z","iopub.status.idle":"2022-07-25T01:41:46.013789Z","shell.execute_reply.started":"2022-07-25T01:41:45.990642Z","shell.execute_reply":"2022-07-25T01:41:46.012873Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**原油価格データの読み込み**","metadata":{}},{"cell_type":"code","source":"oil = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/oil.csv')\noil['date'] = pd.to_datetime(oil['date'])\noil","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:48.789329Z","iopub.execute_input":"2022-07-25T01:41:48.789681Z","iopub.status.idle":"2022-07-25T01:41:48.809822Z","shell.execute_reply.started":"2022-07-25T01:41:48.789649Z","shell.execute_reply":"2022-07-25T01:41:48.808650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**オイル価格の推移**","metadata":{}},{"cell_type":"code","source":"oil['dcoilwtico'].plot()","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:55.034861Z","iopub.execute_input":"2022-07-25T01:41:55.035943Z","iopub.status.idle":"2022-07-25T01:41:55.206106Z","shell.execute_reply.started":"2022-07-25T01:41:55.035871Z","shell.execute_reply":"2022-07-25T01:41:55.205168Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**売上データの推移**","metadata":{}},{"cell_type":"code","source":"train_plot['sales'].plot()","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:41:57.735088Z","iopub.execute_input":"2022-07-25T01:41:57.735444Z","iopub.status.idle":"2022-07-25T01:41:57.968451Z","shell.execute_reply.started":"2022-07-25T01:41:57.735412Z","shell.execute_reply":"2022-07-25T01:41:57.967569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"オイルの価格が高い時ほど売上が少なくなっているので、売上とオイル価格には何かしらの関係性が見られる。\n学習用データの日付データには欠損値がいくらか存在するので、オイル価格を各区間ごと(400日間隔)に平均値を取って学習用データに取り込む。これは400日間隔でオイルの価格は大きな変動を見せていることに起因する。","metadata":{}},{"cell_type":"markdown","source":"**原油価格の区間別の平均値を取得**","metadata":{}},{"cell_type":"code","source":"a = oil['dcoilwtico'][0:400].mean()\nb = oil['dcoilwtico'][400:800].mean()\nc = oil['dcoilwtico'][800:].mean()\nprint(a)\nprint(b)\nprint(c)","metadata":{"execution":{"iopub.status.busy":"2022-07-25T01:42:01.735416Z","iopub.execute_input":"2022-07-25T01:42:01.735761Z","iopub.status.idle":"2022-07-25T01:42:01.743820Z","shell.execute_reply.started":"2022-07-25T01:42:01.735730Z","shell.execute_reply":"2022-07-25T01:42:01.742509Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**学習用データの下準備**","metadata":{}},{"cell_type":"code","source":"train = pd.get_dummies(train,columns = ['family','store_nbr'],drop_first=True)#ダミー変数の生成\ntest = pd.get_dummies(test,columns = ['family','store_nbr'],drop_first=True)\ntest = test.reindex(labels=test.columns,axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-07-24T00:57:18.446910Z","iopub.execute_input":"2022-07-24T00:57:18.447283Z","iopub.status.idle":"2022-07-24T00:57:20.033346Z","shell.execute_reply.started":"2022-07-24T00:57:18.447253Z","shell.execute_reply":"2022-07-24T00:57:20.032392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**訓練データとテスト用データにオイルの価格を追加**","metadata":{}},{"cell_type":"code","source":"df1 = train.copy()\ndf2 = pd.DataFrame(oil,columns = ['date','dcoilwtico'])\ntrain = pd.merge(df1,df2,left_on='date',right_on = 'date',how = 'left')\n#test = test.assign(dcoilwtico = train['dcoilwtico'].mean())\ntest = test.assign(dcoilwtico = c)","metadata":{"execution":{"iopub.status.busy":"2022-07-24T00:57:33.561825Z","iopub.execute_input":"2022-07-24T00:57:33.562376Z","iopub.status.idle":"2022-07-24T00:57:35.790481Z","shell.execute_reply.started":"2022-07-24T00:57:33.562334Z","shell.execute_reply":"2022-07-24T00:57:35.789489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**訓練データの欠損値を区間ごとにわけた平均値で補完**","metadata":{}},{"cell_type":"code","source":"from datetime import datetime\ntrain.loc[(train[\"date\"] < datetime(2014,7,16)) & (train[\"dcoilwtico\"].isnull()),\"dcoilwtico\"] = a\ntrain.loc[(datetime(2014,7,16) < train[\"date\"]) & (train[\"date\"] < datetime(2016,1,27)) & (train[\"dcoilwtico\"].isnull()),\"dcoilwtico\"] = b\ntrain.loc[(datetime(2016,1,27) < train[\"date\"]) & (train[\"dcoilwtico\"].isnull()),\"dcoilwtico\"] = c\n#& (train[\"date\"] < datetime(2017,8,31))","metadata":{"execution":{"iopub.status.busy":"2022-07-24T00:57:39.372646Z","iopub.execute_input":"2022-07-24T00:57:39.372993Z","iopub.status.idle":"2022-07-24T00:57:39.477884Z","shell.execute_reply.started":"2022-07-24T00:57:39.372962Z","shell.execute_reply":"2022-07-24T00:57:39.476933Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**学習開始**","metadata":{}},{"cell_type":"code","source":"warnings.filterwarnings (\"ignore\")\n\ntrain_x=train.copy()\ntrain_x.drop(columns = ['sales','date','id'],inplace = True , axis = 1)\ntrain_y=train.sales\n\nmodel = LinearRegression()  #線形回帰モデルの呼び出し\nmodel.fit(train_x, train_y)  #モデルの訓練\n\ntest_x = test.copy()\ntest_x.drop(columns = ['id','date'] , inplace = True , axis = 1)\n#test_x.drop('id' , inplace = True , axis = 1)\n\nprint(model.predict(test_x))  #予測値の表示\npred = model.predict(test_x)","metadata":{"execution":{"iopub.status.busy":"2022-07-24T00:57:45.245445Z","iopub.execute_input":"2022-07-24T00:57:45.246354Z","iopub.status.idle":"2022-07-24T00:58:13.121333Z","shell.execute_reply.started":"2022-07-24T00:57:45.246319Z","shell.execute_reply":"2022-07-24T00:58:13.118509Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**予測値を提出用ファイルに書き込み**","metadata":{}},{"cell_type":"code","source":"submission['sales'] = pred\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-24T00:58:17.906816Z","iopub.execute_input":"2022-07-24T00:58:17.907193Z","iopub.status.idle":"2022-07-24T00:58:18.003817Z","shell.execute_reply.started":"2022-07-24T00:58:17.907156Z","shell.execute_reply":"2022-07-24T00:58:18.002737Z"},"trusted":true},"execution_count":null,"outputs":[]}]}