{"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":"import pandas as pd\nimport warnings\nwarnings.filterwarnings('ignore')\n\nraw_data = pd.read_csv(\"/kaggle/input/hackapucsp2023-enem/train.csv\")\nraw_data","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:00:55.163406Z","iopub.execute_input":"2023-03-03T01:00:55.164664Z","iopub.status.idle":"2023-03-03T01:01:00.132205Z","shell.execute_reply.started":"2023-03-03T01:00:55.164609Z","shell.execute_reply":"2023-03-03T01:01:00.130937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Separa as colunas que são object\nobject_columns = raw_data.select_dtypes(include=['object']).columns\n\n# Separando os dados de respostas e gabaritos\nanswers = raw_data[[col for col in object_columns if \"TX\" in col]]\ndata_to_encode = raw_data[[col for col in object_columns if \"TX\" not in col]]\n\ndata_to_encode.drop([\"TP_SEXO\", \"NO_MUNICIPIO_ESC\", \"SG_UF_ESC\", \"SG_UF_PROVA\", \"NO_MUNICIPIO_PROVA\"], inplace=True, axis=1)\n\ndata_to_encode","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:01:00.134679Z","iopub.execute_input":"2023-03-03T01:01:00.135064Z","iopub.status.idle":"2023-03-03T01:01:00.523767Z","shell.execute_reply.started":"2023-03-03T01:01:00.135029Z","shell.execute_reply":"2023-03-03T01:01:00.522356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_to_quantity = {\n    \"A\": 0,\n    \"B\": 1,\n    \"C\": 2,\n    \"D\": 3,\n    \"E\": 4\n}\n\n# A\tNenhuma Renda\n# B\tAté R$ 1.100,00\n# C\tDe R$ 1.100,01 até R$ 1.650,00.\n# D\tDe R$ 1.650,01 até R$ 2.200,00.\n# E\tDe R$ 2.200,01 até R$ 2.750,00.\n# F\tDe R$ 2.750,01 até R$ 3.300,00.\n# G\tDe R$ 3.300,01 até R$ 4.400,00.\n# H\tDe R$ 4.400,01 até R$ 5.500,00.\n# I\tDe R$ 5.500,01 até R$ 6.600,00.\n# J\tDe R$ 6.600,01 até R$ 7.700,00.\n# K\tDe R$ 7.700,01 até R$ 8.800,00.\n# L\tDe R$ 8.800,01 até R$ 9.900,00.\n# M\tDe R$ 9.900,01 até R$ 11.000,00.\n# N\tDe R$ 11.000,01 até R$ 13.200,00.\n# O\tDe R$ 13.200,01 até R$ 16.500,00.\n# P\tDe R$ 16.500,01 até R$ 22.000,00.\n# Q\tAcima de R$ 22.000,00.\n\nincome_map = {\n    \"A\": 0,\n    \"B\": 1100,\n    \"C\": 1650,\n    \"D\": 2200,\n    \"E\": 2750,\n    \"F\": 3300,\n    \"G\": 4400,\n    \"H\": 5500,\n    \"I\": 6600,\n    \"J\": 7700,\n    \"K\": 8800,\n    \"L\": 9900,\n    \"M\": 11000,\n    \"N\": 13200,\n    \"O\": 16500,\n    \"P\": 22000,\n    \"Q\": 22000\n}","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:01:00.525066Z","iopub.execute_input":"2023-03-03T01:01:00.525397Z","iopub.status.idle":"2023-03-03T01:01:00.535151Z","shell.execute_reply.started":"2023-03-03T01:01:00.525366Z","shell.execute_reply":"2023-03-03T01:01:00.533919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"columns_to_convert = [\"Q007\", \"Q008\", \"Q009\", \"Q010\", \"Q011\", \"Q012\", \"Q013\", \"Q014\", \"Q015\", \"Q016\", \"Q017\", \"Q018\", \"Q019\", \"Q020\", \"Q021\", \"Q022\", \"Q023\", \"Q024\", \"Q025\"]\n\nconverted_data = data_to_encode.copy()\n\nconverted_data[columns_to_convert] = data_to_encode[columns_to_convert].replace(categorical_to_quantity)\nconverted_data[\"Q006\"] = data_to_encode[\"Q006\"].replace(income_map)\n\nquantity_social_data = converted_data[columns_to_convert]\nquantity_social_data[\"Q006\"] = converted_data[\"Q006\"]\nquantity_social_data","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:01:00.536337Z","iopub.execute_input":"2023-03-03T01:01:00.536702Z","iopub.status.idle":"2023-03-03T01:01:03.402972Z","shell.execute_reply.started":"2023-03-03T01:01:00.536670Z","shell.execute_reply":"2023-03-03T01:01:03.401602Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"encoded_data = pd.get_dummies(data_to_encode[[\"Q001\", \"Q002\", \"Q003\", \"Q004\"]])\n\nencoded_data = pd.concat([encoded_data, raw_data.drop(object_columns, axis=1), quantity_social_data], axis=1)\nencoded_data.drop(\"ID\", inplace=True, axis=1)\n\n# Verifica valores nulos\nencoded_data.isnull().sum().sum()","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:03.406684Z","iopub.execute_input":"2023-03-03T01:01:03.407062Z","iopub.status.idle":"2023-03-03T01:01:03.709466Z","shell.execute_reply.started":"2023-03-03T01:01:03.407028Z","shell.execute_reply":"2023-03-03T01:01:03.708103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Correlação entre as variáveis\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\n# Filter only the columns with correlation higher than 0.5\ncorr = encoded_data.corr()\ncorr = corr[corr > 0.5]\ncorr = corr.dropna(how='all', axis=0)\ncorr = corr.dropna(how='all', axis=1)\nplt.figure(figsize=(30,30))\nsns.heatmap(corr, annot=True, fmt=\".2f\")\nplt.show()","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:03.712643Z","iopub.execute_input":"2023-03-03T01:01:03.713474Z","iopub.status.idle":"2023-03-03T01:01:12.183928Z","shell.execute_reply.started":"2023-03-03T01:01:03.713430Z","shell.execute_reply":"2023-03-03T01:01:12.182598Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Filtrando as colunas com correlação maior que 0.5, percebemos que as notas das areas de conhecimento e a nota das areas de competencia estão altamente correlacionadas. Assim podemos dizer que os participantes não tem uma grande diferença de desenvolvimento entre as areas de conhecimento e as areas de competencia.\n\nÉ possivel perceber que essas variáveis estão altamente correlacionadas com a nota da prova, o que é esperado, já que a nota da prova é a soma das notas das areas de conhecimento e das areas de competencia.\n\nSendo assim, podemos remover as colunas de areas de conhecimento e de areas de competencia, já que elas não agregam muito valor para o modelo, uma vez que só vamos ter esses dados depois que o participante já fez a prova. Então vamos fazer um modelo que preve a media final e o conceito com os dados socioeconômicos e alguns dados do participante, como:\n    Situação de conclusão do Ensino Médio (TP_ST_CONCLUSAO)\n    Tipo de escola do Ensino Médio (TP_ESCOLA)\n    Tipo de instituição que concluiu ou concluirá o Ensino Médio (TP_ENSINO)","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"code","source":"# Colunas de dados socioeconômicos\nsocioeconomic_columns = [col for col in encoded_data.columns if \"Q0\" in col]\n\n# Colunas de dados do participante\nparticipant_columns = [\n    \"TP_ST_CONCLUSAO\",\n    \"TP_ESCOLA\",\n    \"TP_ENSINO\"\n]\n\n# Dataframe com as colunas de dados socioeconômicos e dados do participante\nfeatures = encoded_data[socioeconomic_columns + participant_columns]\ntarget = raw_data[\"CONCEITO\"]\n\nfeatures","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:12.185627Z","iopub.execute_input":"2023-03-03T01:01:12.186912Z","iopub.status.idle":"2023-03-03T01:01:12.249897Z","shell.execute_reply.started":"2023-03-03T01:01:12.186856Z","shell.execute_reply":"2023-03-03T01:01:12.248548Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Separa os dados em treino e teste\nfrom sklearn.model_selection import train_test_split\n\nfeatures_train, features_test, target_train, target_test = train_test_split(features, target, test_size=0.2, random_state=42)\n\n# Treina o modelo\nfrom sklearn.ensemble import RandomForestClassifier\n\nmodel = RandomForestClassifier(n_estimators=100, random_state=42, n_jobs=-1)\nmodel.fit(features_train, target_train);","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:12.251735Z","iopub.execute_input":"2023-03-03T01:01:12.252188Z","iopub.status.idle":"2023-03-03T01:01:29.134556Z","shell.execute_reply.started":"2023-03-03T01:01:12.252142Z","shell.execute_reply":"2023-03-03T01:01:29.133205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Avalia o modelo\nmodel.score(features_test, target_test)","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:29.136515Z","iopub.execute_input":"2023-03-03T01:01:29.136964Z","iopub.status.idle":"2023-03-03T01:01:30.106576Z","shell.execute_reply.started":"2023-03-03T01:01:29.136909Z","shell.execute_reply":"2023-03-03T01:01:30.105358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\n# Vendo a importância das features\nimportances = model.feature_importances_\nindices = np.argsort(importances)[::-1]\n\n# Print the feature ranking\nprint(\"Feature ranking:\")\nfor f in range(features.shape[1]):\n    print(\"%d. feature %d (%f)\" % (f + 1, indices[f], importances[indices[f]]), features.columns[indices[f]])","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:30.108814Z","iopub.execute_input":"2023-03-03T01:01:30.109281Z","iopub.status.idle":"2023-03-03T01:01:30.222686Z","shell.execute_reply.started":"2023-03-03T01:01:30.109235Z","shell.execute_reply":"2023-03-03T01:01:30.221197Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Podemos ver que as features com maior importancia são:\n    Q006 - Renda familiar\n    Q005 - Incluindo você, quantas pessoas moram atualmente em sua residência?\n    Q022 - Na sua residência tem telefone celular?\n    Q009 - Na sua residência tem quartos para dormir?\n    Q024 - Na sua residência tem computador?\n","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"markdown","source":"Agora vamos criar uma variavel que representa a capacidade do aluno em cada uma das areas de conhecimento, indicando se ele está acima ou abaixo da média","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"code","source":"# Calcula a média de cada area de conhecimento\nmean_areas = raw_data[[\n    \"NU_NOTA_CN\",\n    \"NU_NOTA_CH\",\n    \"NU_NOTA_LC\",\n    \"NU_NOTA_MT\",\n    \"NU_NOTA_REDACAO\"\n]].mean()\n\n# Cria uma coluna falando se está acima ou abaixo da média\nfor col in mean_areas.index:\n    features[col + \"_A_CIMA_DA_MEDIA\"] = raw_data[col] > mean_areas[col]\n\nfeatures","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:30.224060Z","iopub.execute_input":"2023-03-03T01:01:30.224391Z","iopub.status.idle":"2023-03-03T01:01:30.287185Z","shell.execute_reply.started":"2023-03-03T01:01:30.224361Z","shell.execute_reply":"2023-03-03T01:01:30.285835Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Separa os dados em treino e teste\nfeatures_train, features_test, target_train, target_test = train_test_split(features, target, test_size=0.2, random_state=0)\n\n# Treina o modelo\nmodel = RandomForestClassifier(n_estimators=100, random_state=0, n_jobs=-1)\nmodel.fit(features_train, target_train);","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:30.288738Z","iopub.execute_input":"2023-03-03T01:01:30.289075Z","iopub.status.idle":"2023-03-03T01:01:46.552899Z","shell.execute_reply.started":"2023-03-03T01:01:30.289045Z","shell.execute_reply":"2023-03-03T01:01:46.551737Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Avalia o modelo com o classification report\nfrom sklearn.metrics import classification_report\n\nprint(classification_report(target_test, model.predict(features_test)))","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:46.554036Z","iopub.execute_input":"2023-03-03T01:01:46.554504Z","iopub.status.idle":"2023-03-03T01:01:48.542317Z","shell.execute_reply.started":"2023-03-03T01:01:46.554441Z","shell.execute_reply":"2023-03-03T01:01:48.541054Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Vendo a importância das features\nimportances = model.feature_importances_\nindices = np.argsort(importances)[::-1]\n\n# Print the feature ranking\nprint(\"Feature ranking:\")\nfor f in range(features.shape[1]):\n    print(\"%d. feature %d (%f)\" % (f + 1, indices[f], importances[indices[f]]), features.columns[indices[f]])","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:01:48.547009Z","iopub.execute_input":"2023-03-03T01:01:48.547427Z","iopub.status.idle":"2023-03-03T01:01:48.660549Z","shell.execute_reply.started":"2023-03-03T01:01:48.547387Z","shell.execute_reply":"2023-03-03T01:01:48.659215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Assim deve-se priorizar ter notas boas nas seguintes areas de conhecimento:\n    Redação\n    Ciências Humanas\n    Matemática\n    Linguagens e Códigos\n    Ciências da Natureza","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"code","source":"# Aplicando oversampling para balancear os dados\nfrom imblearn.over_sampling import SMOTE\n\nsmote = SMOTE(random_state=0)\nfeatures_train, target_train = smote.fit_resample(features_train, target_train)","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:01:48.662069Z","iopub.execute_input":"2023-03-03T01:01:48.662410Z","iopub.status.idle":"2023-03-03T01:03:33.030417Z","shell.execute_reply.started":"2023-03-03T01:01:48.662378Z","shell.execute_reply":"2023-03-03T01:03:33.029230Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Validando o oversampling\nfeatures_train.hist(figsize=(20,20))\nplt.show()","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:03:33.032095Z","iopub.execute_input":"2023-03-03T01:03:33.032824Z","iopub.status.idle":"2023-03-03T01:03:39.166122Z","shell.execute_reply.started":"2023-03-03T01:03:33.032770Z","shell.execute_reply":"2023-03-03T01:03:39.164561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target_train.hist()","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:03:39.167768Z","iopub.execute_input":"2023-03-03T01:03:39.168145Z","iopub.status.idle":"2023-03-03T01:03:39.463930Z","shell.execute_reply.started":"2023-03-03T01:03:39.168107Z","shell.execute_reply":"2023-03-03T01:03:39.462300Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Treina o modelo\nmodel = RandomForestClassifier(n_estimators=100, random_state=0, n_jobs=-1)\nmodel.fit(features_train, target_train);","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:03:39.465634Z","iopub.execute_input":"2023-03-03T01:03:39.466422Z","iopub.status.idle":"2023-03-03T01:04:13.259775Z","shell.execute_reply.started":"2023-03-03T01:03:39.466383Z","shell.execute_reply":"2023-03-03T01:04:13.258452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Avalia o modelo com o classification report\nprint(classification_report(target_test, model.predict(features_test)))","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2023-03-03T01:04:13.261072Z","iopub.execute_input":"2023-03-03T01:04:13.262074Z","iopub.status.idle":"2023-03-03T01:04:15.346028Z","shell.execute_reply.started":"2023-03-03T01:04:13.262024Z","shell.execute_reply":"2023-03-03T01:04:15.344595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Print the feature ranking\nprint(\"Feature ranking:\")\nfor f in range(features.shape[1]):\n    print(\"%d. feature %d (%f)\" % (f + 1, indices[f], importances[indices[f]]), features.columns[indices[f]])","metadata":{"execution":{"iopub.status.busy":"2023-03-03T01:04:15.347622Z","iopub.execute_input":"2023-03-03T01:04:15.348530Z","iopub.status.idle":"2023-03-03T01:04:15.357277Z","shell.execute_reply.started":"2023-03-03T01:04:15.348426Z","shell.execute_reply":"2023-03-03T01:04:15.355601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Print the feature ranking\nprint(\"Feature ranking:\")\nfor f in range(features.shape[1]):\n    print(\"%d. feature %d (%f)\" % (f + 1, indices[f], importances[indices[f]]), features.columns[indices[f]])","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:04:15.359161Z","iopub.execute_input":"2023-03-03T01:04:15.359686Z","iopub.status.idle":"2023-03-03T01:04:15.369924Z","shell.execute_reply.started":"2023-03-03T01:04:15.359611Z","shell.execute_reply":"2023-03-03T01:04:15.368816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Sample submission\nsubmission = pd.read_csv(\"/kaggle/input/hackapucsp2023-enem/test.csv\")\n\ncolumns_to_convert = [\"Q007\", \"Q008\", \"Q009\", \"Q010\", \"Q011\", \"Q012\", \"Q013\", \"Q014\", \"Q015\", \"Q016\", \"Q017\", \"Q018\", \"Q019\", \"Q020\", \"Q021\", \"Q022\", \"Q023\", \"Q024\", \"Q025\"]\n\nconverted_data = submission.copy()\n\nconverted_data[columns_to_convert] = submission[columns_to_convert].replace(categorical_to_quantity)\nconverted_data[\"Q006\"] = submission[\"Q006\"].replace(income_map)\n\nquantity_social_data = converted_data[columns_to_convert]\nquantity_social_data[\"Q006\"] = converted_data[\"Q006\"]\n\nencoded_data = pd.get_dummies(submission[[\"Q001\", \"Q002\", \"Q003\", \"Q004\"]])\n\nobject_columns = [col for col in object_columns if col != \"CONCEITO\"]\nencoded_data = pd.concat([encoded_data, submission.drop(object_columns, axis=1), quantity_social_data], axis=1)\n# encoded_data.drop(\"ID\", inplace=True, axis=1)\n\n# Colunas de dados socioeconômicos\nsocioeconomic_columns = [col for col in encoded_data.columns if \"Q0\" in col]\n\n# Colunas de dados do participante\nparticipant_columns = [\n    \"TP_ST_CONCLUSAO\",\n    \"TP_ESCOLA\",\n    \"TP_ENSINO\"\n]\n\n# Dataframe com as colunas de dados socioeconômicos e dados do participante\nfeatures = encoded_data[socioeconomic_columns + participant_columns]\n\n# Calcula a média de cada area de conhecimento\nmean_areas = submission[[\n    \"NU_NOTA_CN\",\n    \"NU_NOTA_CH\",\n    \"NU_NOTA_LC\",\n    \"NU_NOTA_MT\",\n    \"NU_NOTA_REDACAO\"\n]].mean()\n\n# Cria uma coluna falando se está acima ou abaixo da média\nfor col in mean_areas.index:\n    features[col + \"_A_CIMA_DA_MEDIA\"] = submission[col] > mean_areas[col]\n\nfeatures","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:04:15.371958Z","iopub.execute_input":"2023-03-03T01:04:15.372279Z","iopub.status.idle":"2023-03-03T01:04:18.807406Z","shell.execute_reply.started":"2023-03-03T01:04:15.372249Z","shell.execute_reply":"2023-03-03T01:04:18.806113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted = model.predict(features)\n\nsubmission = pd.DataFrame({\n    \"Id\": submission[\"ID\"],\n    \"Category\": predicted\n})\n\nsubmission.to_csv(\"submission.csv\", index=False)\nsubmission","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-03-03T01:04:18.808748Z","iopub.execute_input":"2023-03-03T01:04:18.809090Z","iopub.status.idle":"2023-03-03T01:04:20.801173Z","shell.execute_reply.started":"2023-03-03T01:04:18.809058Z","shell.execute_reply":"2023-03-03T01:04:20.799477Z"},"trusted":true},"execution_count":null,"outputs":[]}]}