{"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":"markdown","source":"# **Traninng column **\n\n* event_name: イベントの種類を分類する\n1. navigate_click\n2. person_click\n3. object_click\n4. cutscene_click\n5. object_hover\n* name: イベントの詳細な種類を分類する\n1. basic\n2. undefined\n3. close\n4. open\n5. prev\n* level(1~22): イベントが発生したゲームのレベルを分類する\n* page(1~6): ページ番号を分類するために使用される\n* room_coor_x, room_coor_y, screen_coor_x, screen_coor_y: クリックの座標情報を予測するために使用される\n* fullscreen, hq, music: ゲームの設定を分類するために使用される\n* elapsed_time: 各イベントの発生時刻の差分から、ユーザーがゲームをプレイするために要した時間を予測するために使用される\n* hover_duration: マウスオーバーの時間を予測するために使用される\n* text: プレイヤーが見たテキストを分類するために使用される\n* fqid: 各イベントのIDを分類するために使用される\n1. worker\n2. archivist\n3. gramps\n4. wells\n5. toentry\n* room_fqid, text_fqid: 各部屋やテキストのIDを分類するために使用される\n1. tunic.historicalsociety.entry\n2. tunic.wildlife.center\n3. tunic.library.frontdesk\n4. tunic.humanecology.frontdesk\n5. tunic.historicalsociety.frontdesk\n* level_group: 各グループのレベルを分類するために使用される\n1. 0～4\n2. 5～12\n3. 13~22\n* correct:正解・不正解の判定として使用される\n\n['event_name', 'name', 'level', 'page','fqid','room_fqid', 'fullscreen', 'hq', 'music', 'level_group', 'session_level'","metadata":{"execution":{"iopub.status.busy":"2023-04-25T01:03:38.385791Z","iopub.execute_input":"2023-04-25T01:03:38.386495Z","iopub.status.idle":"2023-04-25T01:03:38.428757Z","shell.execute_reply.started":"2023-04-25T01:03:38.386454Z","shell.execute_reply":"2023-04-25T01:03:38.426921Z"}}},{"cell_type":"code","source":"##データ確認\nimport pandas as pd\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv') \n\ndf\n\n","metadata":{"execution":{"iopub.status.busy":"2023-05-31T05:25:12.754610Z","iopub.execute_input":"2023-05-31T05:25:12.755834Z","iopub.status.idle":"2023-05-31T05:25:12.871485Z","shell.execute_reply.started":"2023-05-31T05:25:12.755779Z","shell.execute_reply":"2023-05-31T05:25:12.870284Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n","metadata":{}},{"cell_type":"markdown","source":"**特徴量エンジニアリング** <br>\nNaNの値を同等データと比較し、適切な値に変更する。 <br>\n\n・同等データとは <br>\npage,event_name、nameなどが同一なデータ群.","metadata":{}},{"cell_type":"code","source":"\n###欠損値を含む列を取得\nimport numpy as np\nimport pandas as pd\n\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv') \n\n# 欠損値を含む列を調べる\ncolumns_with_nan = df.columns[df.isna().any()].tolist()\n\n# 結果の表示\nprint(columns_with_nan)","metadata":{"execution":{"iopub.status.busy":"2023-05-31T00:06:39.722426Z","iopub.execute_input":"2023-05-31T00:06:39.722797Z","iopub.status.idle":"2023-05-31T00:06:39.787301Z","shell.execute_reply.started":"2023-05-31T00:06:39.722762Z","shell.execute_reply":"2023-05-31T00:06:39.786167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"|# NaNが含まれるデータ項目\n['page', 'room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y', 'hover_duration', 'text', 'fqid', 'text_fqid']\n\n|* 補完する項目|　　　      　    |参照項目|　　　　　　　　               |算出方法|\n|1. 'page' 　　　　　　        ・event_name・name                      ・average | \n|1. 'room_coor_x'　　　　　 　 ・page ・event_name ・name ・level       ・average |\n|1. 'room_coor_y'　　　　　　  ・page ・event_name ・name ・level       ・average　|　\n|1. 'screen_coor_x           ・page ・event_name ・name ・level       ・average　　|\n|1. 'screen_coor_y           ・page ・event_name ・name ・level       ・average　　|\n|1. 'hover_duration'         ・page ・event_name ・name ・level       ・average　　|\n\n","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"|補完する項目|参照項目|算出方法|\n|:-|:-|:-|\n|page|1.event_name,2.name|average | \n|room_coor_x|1.page,2.event_name,3.name,4.level|average |\n|room_coor_y|1.page,2.event_name,3.name4.level|average|\n|screen_coor_x|1.page,2.event_name,3.name4.level|average|\n|screen_coor_y|1.page,2.event_name,3.name4.level|average|\n|hover_duration|1.page,2.event_name,3.name4.level|average|","metadata":{}},{"cell_type":"markdown","source":"# **Preprocess <br>**\n## NaN Value Impute","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"import pandas as pd\n\ndef fill_missing_data(df, col_to_fill, ref_cols, fill_method='mean'):\n    missing_rows = df[df[col_to_fill].isnull()]\n    grouped = df.groupby(ref_cols)\n    if fill_method == 'mean':\n        fill_value = grouped[col_to_fill].mean()\n    elif fill_method == 'median':\n        fill_value = grouped[col_to_fill].median()\n    else:\n        raise ValueError(f\"Unsupported fill method '{fill_method}'.\")\n    merged = pd.merge(missing_rows[ref_cols], fill_value, on=ref_cols, how='left')\n    merged.columns = list(ref_cols) + [col_to_fill+'_filled']\n    \n    df = pd.merge(df, merged, on=ref_cols, how='left')\n    df[col_to_fill] = df[col_to_fill].fillna(df[col_to_fill+'_filled'])\n    df = df.drop(col_to_fill+'_filled', axis=1)\n \n    return df\n\ndef count_missing_values(df, column):\n    missing_count = df[column].isnull().sum()\n    return missing_count\n\n\ndef calculate_nan_ratio(df, column):\n    total_count = len(df)\n    nan_count = df[column].isnull().sum()\n    nan_ratio = (nan_count / total_count) * 100\n    return nan_ratio\n","metadata":{"execution":{"iopub.status.busy":"2023-05-31T03:19:15.205420Z","iopub.execute_input":"2023-05-31T03:19:15.206137Z","iopub.status.idle":"2023-05-31T03:19:15.218796Z","shell.execute_reply.started":"2023-05-31T03:19:15.206098Z","shell.execute_reply":"2023-05-31T03:19:15.217268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv') \nprint(len(df))\ndf_count = count_missing_values(df,'page')\n#pageがNaNの時、elapsed_timeが同じカラム列のpageのmeanを算出\ndf = fill_missing_data(df, 'page', ['elapsed_time'], fill_method='mean')\n\n# ノルムに値が無いかどうかをチェックし、条件に一致するレコードを削除する\ndf = df.dropna(subset=['page','event_name'], how='all')\n\n# 重複した行を削除する\ndf = df.drop_duplicates(subset=['session_id', 'index'])\n\n# df_count = count_missing_values(df,'page')\n\ndf2 =calculate_nan_ratio(df,'page')\nprint(len(df))\ndf\n\ndf_count\nprint(df2)","metadata":{"execution":{"iopub.status.busy":"2023-05-31T03:19:16.672567Z","iopub.execute_input":"2023-05-31T03:19:16.672941Z","iopub.status.idle":"2023-05-31T03:19:16.716647Z","shell.execute_reply.started":"2023-05-31T03:19:16.672906Z","shell.execute_reply":"2023-05-31T03:19:16.715391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##確認用\nimport pandas as pd\n\ndf = pd.DataFrame({\n    'city': ['Tokyo', 'Tokyo', 'Osaka', 'Osaka', 'Fukuoka', 'Fukuoka', 'Kanagawa','NaN','NaN'],\n    'temp': [25, 28, None, 30, None, 32, None,None,None],\n    'humidity': [50, 60, 50, None, 60, 70 ,None,None,None]\n})\ndf_count = count_missing_values(df,'humidity')\n\ndf = fill_missing_data(df, 'temp', ['city'], fill_method='mean')\n# ノルムに値が無いかどうかをチェックし、条件に一致するレコードを削除する\ndf = df.dropna(subset=['temp', 'humidity'], how='all')\n\ndf = fill_missing_data(df, 'humidity', ['temp'], fill_method='mean')\n\n\ndf\ndf_count","metadata":{"execution":{"iopub.status.busy":"2023-05-31T03:14:53.325786Z","iopub.execute_input":"2023-05-31T03:14:53.326816Z","iopub.status.idle":"2023-05-31T03:14:53.362340Z","shell.execute_reply.started":"2023-05-31T03:14:53.326755Z","shell.execute_reply":"2023-05-31T03:14:53.360750Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv') \nprint(len(df))\n\ndf = fill_missing_data(df, 'page', ['event_name'], fill_method='mean')\n\n# ノルムに値が無いかどうかをチェックし、条件に一致するレコードを削除する\ndf = df.dropna(subset=['page','event_name'], how='all')\n\n# 重複した行を削除する\ndf = df.drop_duplicates(subset=['session_id', 'index'])\n\n\nprint(len(df))\ndf","metadata":{"execution":{"iopub.status.busy":"2023-05-31T02:17:03.813503Z","iopub.execute_input":"2023-05-31T02:17:03.813882Z","iopub.status.idle":"2023-05-31T02:17:08.309751Z","shell.execute_reply.started":"2023-05-31T02:17:03.813847Z","shell.execute_reply":"2023-05-31T02:17:08.308248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Sicense","metadata":{}},{"cell_type":"code","source":"import dask.dataframe as dd\n\n# trainデータとtestデータのパスを指定する\ntrain_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\ntest_path = '/kaggle/input/predict-student-performance-from-game-play/train.csv'\n\n# trainデータとtestデータを読み込む\ntrain_data = dd.read_csv(train_path)\ntest_data = dd.read_csv(test_path)\n\n# trainデータの行数と列数を表示する\nprint(\"Trainデータの行数:\", train_data.shape[0])\nprint(\"Trainデータの列数:\", train_data.shape[1])\n\n# testデータの行数と列数を表示する\nprint(\"Testデータの行数:\", test_data.shape[0])\nprint(\"Testデータの列数:\", test_data.shape[1])\n","metadata":{"execution":{"iopub.status.busy":"2023-05-29T01:43:10.903936Z","iopub.execute_input":"2023-05-29T01:43:10.904412Z","iopub.status.idle":"2023-05-29T01:43:14.409732Z","shell.execute_reply.started":"2023-05-29T01:43:10.904364Z","shell.execute_reply":"2023-05-29T01:43:14.408547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import numpy as np\n# import dask.dataframe as dd\n# from matplotlib import pyplot as plt\n# import seaborn as sns\n\n# # trainデータとtestデータのパスを指定する\n# train_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\n# test_path = '/kaggle/input/predict-student-performance-from-game-play/train.csv'\n\n# # データをマージ\n# train_data = dd.read_csv(train_path)\n# test_data = dd.read_csv(test_path)\n\n# test_data[\"Survived\"] = np.nan\n# df = dd.concat([train_data, test_data], ignore_index=True, sort=False)\n\n# result = df[[\"elapsed_time\", \"level\"]].describe().compute()\n# print(result)\n\n\n##GPU\nimport numpy as np\nimport cudf\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\n\n# trainデータとtestデータのパスを指定する\ntrain_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\ntest_path = '/kaggle/input/predict-student-performance-from-game-play/train.csv'\n\n# データをマージ\ntrain_data = cudf.read_csv(train_path)\ntest_data = cudf.read_csv(test_path)\n\ntest_data[\"Survived\"] = np.nan\ndf = cudf.concat([train_data, test_data], ignore_index=True, sort=False)\n\nresult = df[[\"elapsed_time\", \"level\"]].describe()\nprint(result)\n","metadata":{"execution":{"iopub.status.busy":"2023-05-31T00:13:16.681408Z","iopub.execute_input":"2023-05-31T00:13:16.682298Z","iopub.status.idle":"2023-05-31T00:14:22.114174Z","shell.execute_reply.started":"2023-05-31T00:13:16.682258Z","shell.execute_reply":"2023-05-31T00:14:22.113055Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ##分割\n# df_train = df[df[\"Survived\"].notnull()]\n# df_test = df[df[\"Survived\"].isnull()]\n\n##数値データ##の要約統計量を確認\n# 数値カラムの抽出\nnumeric_columns = df.dtypes[df.dtypes != \"object\"].index.tolist()\n\n# 数値カラムに対してdescribeを実行\nfor column in numeric_columns:\n    result = df[column].describe().compute()\n    print(f\"Column: {column}\")\n    print(result)","metadata":{"execution":{"iopub.status.busy":"2023-05-29T02:26:59.088557Z","iopub.execute_input":"2023-05-29T02:26:59.089636Z","iopub.status.idle":"2023-05-29T02:27:18.362557Z","shell.execute_reply.started":"2023-05-29T02:26:59.089577Z","shell.execute_reply":"2023-05-29T02:27:18.360731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# カテゴリカラムの抽出\ncategorical_columns = df.select_dtypes(include=[\"object\"]).columns.tolist()\n\n# カテゴリカラムに対してdescribeを実行\nfor column in categorical_columns:\n    result = df[column].describe().compute()\n    print(f\"Column: {column}\")\n    print(result)\n    print()","metadata":{"execution":{"iopub.status.busy":"2023-05-29T01:49:39.384440Z","iopub.execute_input":"2023-05-29T01:49:39.384976Z","iopub.status.idle":"2023-05-29T01:49:48.342726Z","shell.execute_reply.started":"2023-05-29T01:49:39.384928Z","shell.execute_reply":"2023-05-29T01:49:48.341530Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport dask.dataframe as dd\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\n\n# trainデータとtestデータのパスを指定する\ntrain_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\ntest_path = '/kaggle/input/predict-student-performance-from-game-play/train.csv'\n\n# データをマージ\ntrain_data = dd.read_csv(train_path)\ntest_data = dd.read_csv(test_path)\n\ndf = dd.concat([train_data, test_data], ignore_index=True, sort=False)\n\n\n##分割\n# df_train = df[df[\"Survived\"].notnull()]\n# df_test = df[df[\"Survived\"].isnull()]\n\n# print(df_train.shape)  # (891, 12)\n# print(df_test.shape)   # (418, 12)\n\n##選択\n# df = df_train\n#df = df_test\n\n##相関\ndef plot_corr(df, columns, scale=2.0, cell_size=2.0):\n    plt.figure(figsize=(6.4*scale, 4.8*scale))\n\n    # 表示メイン\n    sns.heatmap(df[columns].corr(), annot=True, annot_kws={\"size\": cell_size}, vmax=1, vmin=-1, fmt='.1f', cmap='RdBu')\n\n    plt.xticks(range(len(columns)), columns, rotation=45)\n    plt.yticks(range(len(columns)), columns, rotation=0)\n\n    plt.tight_layout()\n    plt.show()\n\n# 表示例\nplot_corr(df, df.columns)\n","metadata":{"execution":{"iopub.status.busy":"2023-05-29T03:58:22.559349Z","iopub.execute_input":"2023-05-29T03:58:22.559788Z","iopub.status.idle":"2023-05-29T03:58:42.385304Z","shell.execute_reply.started":"2023-05-29T03:58:22.559738Z","shell.execute_reply":"2023-05-29T03:58:42.380304Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\n\n# testデータのパスを指定する\n #testdata\ntest_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\ndf = pd.read_csv(test_path)\n #traindata\n#train_path = '/kaggle/input/predict-student-performance-from-game-play/test.csv'\n#df = pd.read_csv(train_path)\n# 相関図を作成\ndef plot_corr(df, columns, scale=3.0, cell_size=10.0):\n    plt.figure(figsize=(5*scale, 4*scale))\n    corr_matrix = df[columns].corr()\n    sns.heatmap(corr_matrix, annot=True, annot_kws={\"size\": cell_size}, vmax=1, vmin=-1, fmt='.1f', cmap='RdBu')\n    plt.xticks(range(len(columns)), columns, rotation=45)\n    plt.yticks(range(len(columns)), columns, rotation=0)\n    plt.tight_layout()\n    plt.show()\n\n# 表示例\nplot_corr(df, df.columns)\n","metadata":{"execution":{"iopub.status.busy":"2023-05-29T03:51:59.339369Z","iopub.execute_input":"2023-05-29T03:51:59.339854Z","iopub.status.idle":"2023-05-29T03:52:00.562859Z","shell.execute_reply.started":"2023-05-29T03:51:59.339808Z","shell.execute_reply":"2023-05-29T03:52:00.561743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Dense\n\n# モデルの定義\nmodel = Sequential()\nmodel.add(Dense(units=64, activation='relu', input_dim=100))\nmodel.add(Dense(units=10, activation='softmax'))\n\n# モデルのコンパイル\nmodel.compile(loss='categorical_crossentropy',\n              optimizer='sgd',\n              metrics=['accuracy'])\n\n# モデルの学習\nmodel.fit(x_train, y_train, epochs=10, batch_size=32)\n","metadata":{"execution":{"iopub.status.busy":"2023-05-12T04:36:20.463579Z","iopub.execute_input":"2023-05-12T04:36:20.464281Z","iopub.status.idle":"2023-05-12T04:36:31.857107Z","shell.execute_reply.started":"2023-05-12T04:36:20.464243Z","shell.execute_reply":"2023-05-12T04:36:31.855416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## One-Hot-Vecter","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport random\nimport numpy as np\n\n# test = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv') #test\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/test.csv', usecols=['event_name', 'name', 'level', 'page','fqid','room_fqid', 'fullscreen', 'hq', 'music', 'level_group', 'session_level'])\n#ラベルの追加\ndf['correct'] = np.random.randint(0,1)\n\n# カテゴリカルデータをone-hotベクトルに変換event_name\t　name　　　page　fqid\t　room_fqid\tlevel_group\tsession_level\ncategorical_columns = ['event_name', 'name', 'level', 'page','fqid','room_fqid', 'fullscreen', 'hq', 'music', 'level_group', 'session_level']\nfor col in categorical_columns:\n    col_onehot = pd.get_dummies(df[col])\n    col_onehot.columns = [col + '_' + str(sub_col) for sub_col in col_onehot.columns]\n    df = pd.concat([df, col_onehot], axis=1)\n    df.drop(col, axis=1, inplace=True)\n\n# 変換が完了したDataFrameを表示\ndf\n\n# # # CSVファイルとして保存\n#df.to_csv('One-Hot-Vecter.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-05-31T06:42:40.016867Z","iopub.execute_input":"2023-05-31T06:42:40.017585Z","iopub.status.idle":"2023-05-31T06:42:40.122638Z","shell.execute_reply.started":"2023-05-31T06:42:40.017542Z","shell.execute_reply":"2023-05-31T06:42:40.121120Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Model**\n","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\n\ndef create_model(input_size, hidden_size, num_classes):\n    # モデルの定義\n    model = Sequential()\n    model.add(Dense(hidden_size, activation='relu', input_shape=(input_size,)))\n\n    # 隠れ層の追加\n    model.add(Dense(hidden_size, activation='relu'))\n    model.add(Dense(hidden_size, activation='relu'))\n    model.add(Dense(hidden_size, activation='relu'))\n\n    # 出力層の追加\n    model.add(Dense(num_classes, activation='softmax'))\n    \n    return model\n","metadata":{"execution":{"iopub.status.busy":"2023-06-05T01:40:05.652469Z","iopub.execute_input":"2023-06-05T01:40:05.653097Z","iopub.status.idle":"2023-06-05T01:40:15.415654Z","shell.execute_reply.started":"2023-06-05T01:40:05.653051Z","shell.execute_reply":"2023-06-05T01:40:15.414491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"教師あり学習<br>\n\n||インスタンス|||||ラベル|\n|:-|:-|:-|:-|:-|:-|:-|\n|page|1.event_name,2.name|average |average | average | average | average | ","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\n\n# train.csvとtrain_labels.csvを結合する\ndf_train = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train.csv')\ndf_labels = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\n\n# train.csvとtrain_labels.csvをsession_idをキーとして連結\ndf_merged = pd.concat([df_train, df_labels], axis=1)\n\n# 結合後のデータフレームから'correct'列をターゲット 'y' として抽出\ny = df_merged['correct'].values\n\n# 特徴量として利用する列を選択\nfeatures = ['session_id', 'elapsed_time', 'room_coor_x', 'room_coor_y']  # 列名を適宜指定\n\n# 特徴量行列 'X' の作成\nX = df_merged[features].values\n\n# クラス数を取得\nnum_classes = len(df_merged['correct'].unique())  # クラス数を正しく取得\n\n# クラスの数に応じてターゲットをOne-hotエンコード\ny = tf.keras.utils.to_categorical(y, num_classes)\n\n# データ型を最適化\nX = X.astype(np.float32)\ny = y.astype(np.float32)\n\n# モデルの作成\ninput_size = X.shape[1]\nhidden_size = 20\n\nmodel = Sequential()\nmodel.add(Dense(hidden_size, activation='relu', input_shape=(input_size,)))\nmodel.add(Dense(num_classes, activation='softmax'))\n\n# モデルのコンパイル\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n\n# モデルのサマリーを表示\nmodel.summary()\n\n# バッチ処理を使用してモデルのトレーニング\nbatch_size = 32\nsteps_per_epoch = len(X) // batch_size\n\nmodel.fit(X, y, epochs=50, batch_size=batch_size, steps_per_epoch=steps_per_epoch)\n\n# モデルの推論\nX_test = np.random.random((10, input_size))\npredictions = model.predict(X_test)\n","metadata":{"execution":{"iopub.status.busy":"2023-06-05T01:40:26.672370Z","iopub.execute_input":"2023-06-05T01:40:26.673390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\n\n# train.csvとtrain_labels.csvを結合する\ndf_train = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train.csv')\ndf_labels = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\n\n# train.csvとtrain_labels.csvをsession_idをキーとして連結\ndf_merged = pd.concat([df_train, df_labels], axis=1)\n\n# 結合後のデータフレームから'correct'列をターゲット 'y' として抽出\ny = df_merged['correct'].values\ny","metadata":{"execution":{"iopub.status.busy":"2023-06-05T02:47:06.360406Z","iopub.execute_input":"2023-06-05T02:47:06.361042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##GPU\nimport pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\n\n# TensorFlowのGPUサポートを有効にする\ngpus = tf.config.experimental.list_physical_devices('GPU')\nif gpus:\n    try:\n        tf.config.experimental.set_memory_growth(gpus[0], True)\n    except RuntimeError as e:\n        print(e)\n\n# train.csvとtrain_labels.csvを結合する\ndf_train = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train.csv')\ndf_labels = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\n\n# train.csvとtrain_labels.csvをsession_idをキーとして連結\ndf_merged = pd.concat([df_train, df_labels], axis=1)\n\n# 結合後のデータフレームから'correct'列をターゲット 'y' として抽出\ny = df_merged['correct'].values\n\n# 特徴量として利用する列を選択\nfeatures = ['session_id', 'elapsed_time', 'room_coor_x', 'room_coor_y']  # 列名を適宜指定\n\n# 特徴量行列 'X' の作成\nX = df_merged[features].values\n\n# クラス数を取得\nnum_classes = len(df_merged['correct'].unique())  # クラス数を正しく取得\n\n# クラスの数に応じてターゲットをOne-hotエンコード\ny = tf.keras.utils.to_categorical(y, num_classes)\n\n# データ型を最適化\nX = X.astype(np.float32)\ny = y.astype(np.float32)\n\n# モデルの作成\ninput_size = X.shape[1]\nhidden_size = 20\n\n# モデルをGPU上で実行するためのラッパーを作成\nstrategy = tf.distribute.OneDeviceStrategy('GPU:0')\nwith strategy.scope():\n    model = Sequential()\n    model.add(Dense(hidden_size, activation='relu', input_shape=(input_size,)))\n    model.add(Dense(num_classes, activation='softmax'))\n\n    # モデルのコンパイル\n    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n\n    # モデルのサマリーを表示\n    model.summary()\n\n    # バッチ処理を使用してモデルのトレーニング\n    batch_size = 32\n    steps_per_epoch = len(X) // batch_size\n\n    # データセットを作成\n    dataset = tf.data.Dataset.from_tensor_slices((X, y)).batch(batch_size)\n\n    # バッチ処理を使用してモデルのトレーニング\n    model.fit(dataset, epochs=50, steps_per_epoch=steps_per_epoch)\n\n    # モデルの推論\n    X_test = np.random.random((10, input_size))\n    predictions = model.predict(X_test)\n","metadata":{"execution":{"iopub.status.busy":"2023-06-01T06:48:26.183217Z","iopub.execute_input":"2023-06-01T06:48:26.183753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##TPU\nimport pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\n\n# TPUの初期化\ntry:\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()  # TPUの接続を解決\n    tf.config.experimental_connect_to_cluster(tpu)\n    tf.tpu.experimental.initialize_tpu_system(tpu)\n    strategy = tf.distribute.TPUStrategy(tpu)\nexcept ValueError:\n    strategy = tf.distribute.OneDeviceStrategy(\"GPU\")  # TPUが利用できない場合はGPUを使用\n\n# train.csvとtrain_labels.csvを結合する\ndf_train = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train.csv')\ndf_labels = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\n\n# train.csvとtrain_labels.csvをsession_idをキーとして連結\ndf_merged = pd.concat([df_train, df_labels], axis=1)\n\n# 結合後のデータフレームから'correct'列をターゲット 'y' として抽出\ny = df_merged['correct'].values\n\n# 特徴量として利用する列を選択\nfeatures = ['session_id', 'elapsed_time', 'room_coor_x', 'room_coor_y']  # 列名を適宜指定\n\n# 特徴量行列 'X' の作成\nX = df_merged[features].values\n\n# クラス数を取得\nnum_classes = len(df_merged['correct'].unique())  # クラス数を正しく取得\n\n# クラスの数に応じてターゲットをOne-hotエンコード\ny = tf.keras.utils.to_categorical(y, num_classes)\n\n# データ型を最適化\nX = X.astype(np.float32)\ny = y.astype(np.float32)\n\n# モデルの作成とトレーニング\ninput_size = X.shape[1]\nhidden_size = 20\n\nwith strategy.scope():\n    # モデルの作成\n    model = Sequential()\n    model.add(Dense(hidden_size, activation='relu', input_shape=(input_size,)))\n    model.add(Dense(num_classes, activation='softmax'))\n\n    # モデルのコンパイル\n    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n\n    # モデルのサマリーを表示\n    model.summary()\n\n# バッチ処理を使用してモデルのトレーニング\nbatch_size = 32\nsteps_per_epoch = len(X) // batch_size\n\n# データセットを作成\ndataset = tf.data.Dataset.from_tensor_slices((X, y)).batch(batch_size)\n\n# バッチ処理を使用してモデルのトレーニング\nwith strategy.scope():\n    model.fit(dataset, epochs=50,\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\ndf = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv');\n\ndf","metadata":{"execution":{"iopub.status.busy":"2023-06-01T06:41:31.638408Z","iopub.execute_input":"2023-06-01T06:41:31.639460Z","iopub.status.idle":"2023-06-01T06:41:32.024574Z","shell.execute_reply.started":"2023-06-01T06:41:31.639409Z","shell.execute_reply":"2023-06-01T06:41:32.023592Z"},"trusted":true},"execution_count":null,"outputs":[]}]}