{"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)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\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":"2023-02-24T15:21:57.135841Z","iopub.execute_input":"2023-02-24T15:21:57.136252Z","iopub.status.idle":"2023-02-24T15:21:57.145629Z","shell.execute_reply.started":"2023-02-24T15:21:57.136221Z","shell.execute_reply":"2023-02-24T15:21:57.144796Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 1. Obtaining training dataset:","metadata":{}},{"cell_type":"code","source":"df_tr = pd.read_csv('/kaggle/input/digit-recognizer/train.csv') #Training dataset\ndf_test = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:21:57.753829Z","iopub.execute_input":"2023-02-24T15:21:57.754795Z","iopub.status.idle":"2023-02-24T15:22:01.715172Z","shell.execute_reply.started":"2023-02-24T15:21:57.754757Z","shell.execute_reply":"2023-02-24T15:22:01.714215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_tr.shape","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.717238Z","iopub.execute_input":"2023-02-24T15:22:01.717662Z","iopub.status.idle":"2023-02-24T15:22:01.724793Z","shell.execute_reply.started":"2023-02-24T15:22:01.717630Z","shell.execute_reply":"2023-02-24T15:22:01.723602Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#target attribute popped\nX_train = df_tr.drop(labels='label', axis=1).values\ny_train = df_tr['label'].values","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.726289Z","iopub.execute_input":"2023-02-24T15:22:01.726612Z","iopub.status.idle":"2023-02-24T15:22:01.857924Z","shell.execute_reply.started":"2023-02-24T15:22:01.726583Z","shell.execute_reply":"2023-02-24T15:22:01.856714Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The pixel columns and the target is now separate!","metadata":{}},{"cell_type":"markdown","source":"## 2. Showing the digits plotted","metadata":{}},{"cell_type":"code","source":"def plot_digit(digit):\n    digit_image = digit.reshape(28,28)\n    plt.imshow(digit_image, cmap=plt.cm.binary)\n    plt.axis(\"off\")","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.861758Z","iopub.execute_input":"2023-02-24T15:22:01.862308Z","iopub.status.idle":"2023-02-24T15:22:01.871952Z","shell.execute_reply.started":"2023-02-24T15:22:01.862254Z","shell.execute_reply":"2023-02-24T15:22:01.871028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"example = 42 #you may change example here\nplot_digit(X_train[example])\nprint(y_train[example])","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.873317Z","iopub.execute_input":"2023-02-24T15:22:01.873885Z","iopub.status.idle":"2023-02-24T15:22:01.966234Z","shell.execute_reply.started":"2023-02-24T15:22:01.873831Z","shell.execute_reply":"2023-02-24T15:22:01.965156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Dimensionality Reduction using PCA (Principal Component Analysis)","metadata":{}},{"cell_type":"markdown","source":"**Principal Component Analysis (PCA)** is a widely used technique in data analysis and machine learning that helps in reducing the dimensionality of a dataset. Here are some of the reasons why PCA is needed:\n\n-> **Reducing the number of features**: In many real-world applications, datasets may contain a large number of features or variables, making it challenging to analyze or visualize the data. PCA can help in reducing the number of features while retaining most of the variance or information in the data. This reduces the computational and storage costs of analyzing the data and makes it easier to visualize and interpret.\n\n-> **Identifying patterns and correlations**: PCA can help in identifying patterns and correlations between the features in a dataset. It does this by finding the directions of maximum variance or information in the data, which can help in understanding the underlying structure and relationships between the features.\n\n-> **Improving the performance of machine learning models**: High-dimensional datasets with many features can lead to overfitting and poor performance of machine learning models. By reducing the number of features using PCA, we can simplify the problem and improve the performance of the models.\n\n-> **Data compression**: PCA can also be used for data compression, which can be useful for storing and transmitting large datasets efficiently. By retaining only the most important principal components of the data, we can reduce the size of the dataset without losing much information.","metadata":{}},{"cell_type":"code","source":"from sklearn.decomposition import PCA","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.967936Z","iopub.execute_input":"2023-02-24T15:22:01.968600Z","iopub.status.idle":"2023-02-24T15:22:01.974505Z","shell.execute_reply.started":"2023-02-24T15:22:01.968558Z","shell.execute_reply":"2023-02-24T15:22:01.973062Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pca = PCA(n_components=150)\npca.fit(X_train)\n\nX_train_pca = pca.transform(X_train)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:01.976371Z","iopub.execute_input":"2023-02-24T15:22:01.976798Z","iopub.status.idle":"2023-02-24T15:22:07.211750Z","shell.execute_reply.started":"2023-02-24T15:22:01.976740Z","shell.execute_reply":"2023-02-24T15:22:07.210043Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_pca_recovered = pca.inverse_transform(X_train_pca) #recovery for preservation/","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.214292Z","iopub.execute_input":"2023-02-24T15:22:07.214887Z","iopub.status.idle":"2023-02-24T15:22:07.625844Z","shell.execute_reply.started":"2023-02-24T15:22:07.214814Z","shell.execute_reply":"2023-02-24T15:22:07.625033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"example = 42 #you may change example here : position after dimensionality reduction\nplot_digit(X_train_pca_recovered[example])\nprint(y_train[example])","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.627719Z","iopub.execute_input":"2023-02-24T15:22:07.628545Z","iopub.status.idle":"2023-02-24T15:22:07.717263Z","shell.execute_reply.started":"2023-02-24T15:22:07.628499Z","shell.execute_reply":"2023-02-24T15:22:07.716091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4. Machine Learning Modelling","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier\nfrom sklearn.svm import LinearSVC, SVC\nfrom sklearn.neural_network import MLPClassifier\n\nrandom_forest = RandomForestClassifier(n_estimators=100, random_state=42)\nextra_trees = ExtraTreesClassifier(n_estimators=100, random_state=42)\nsvm = SVC()\nmlpnn = MLPClassifier(random_state=42)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.722276Z","iopub.execute_input":"2023-02-24T15:22:07.722993Z","iopub.status.idle":"2023-02-24T15:22:07.730269Z","shell.execute_reply.started":"2023-02-24T15:22:07.722946Z","shell.execute_reply":"2023-02-24T15:22:07.729315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Splitting the training and validation set:","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import cross_validate, StratifiedKFold, train_test_split\nX_tr, X_valid, y_tr, y_valid = train_test_split(X_train_pca, y_train, test_size=0.2, random_state=123)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.732419Z","iopub.execute_input":"2023-02-24T15:22:07.732832Z","iopub.status.idle":"2023-02-24T15:22:07.771956Z","shell.execute_reply.started":"2023-02-24T15:22:07.732792Z","shell.execute_reply":"2023-02-24T15:22:07.770181Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_valid.shape","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.774229Z","iopub.execute_input":"2023-02-24T15:22:07.775618Z","iopub.status.idle":"2023-02-24T15:22:07.786703Z","shell.execute_reply.started":"2023-02-24T15:22:07.775552Z","shell.execute_reply":"2023-02-24T15:22:07.785226Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"svm.fit(X_tr, y_tr) #SVM\nsvm.score(X_tr, y_tr)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:22:07.788773Z","iopub.execute_input":"2023-02-24T15:22:07.790066Z","iopub.status.idle":"2023-02-24T15:23:47.853687Z","shell.execute_reply.started":"2023-02-24T15:22:07.790005Z","shell.execute_reply":"2023-02-24T15:23:47.852637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"99% accuracy!","metadata":{}},{"cell_type":"code","source":"random_forest.fit(X_tr, y_tr)\n\n# Display the score on the train\nrandom_forest.score(X_tr, y_tr)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:23:47.854966Z","iopub.execute_input":"2023-02-24T15:23:47.855231Z","iopub.status.idle":"2023-02-24T15:24:38.659998Z","shell.execute_reply.started":"2023-02-24T15:23:47.855207Z","shell.execute_reply":"2023-02-24T15:24:38.659173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"extra_trees.fit(X_tr,y_tr)\nextra_trees.score(X_tr,y_tr)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:24:38.661284Z","iopub.execute_input":"2023-02-24T15:24:38.661546Z","iopub.status.idle":"2023-02-24T15:24:51.270583Z","shell.execute_reply.started":"2023-02-24T15:24:38.661523Z","shell.execute_reply":"2023-02-24T15:24:51.269696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mlpnn.fit(X_tr,y_tr)\nmlpnn.score(X_tr,y_tr)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:24:51.271520Z","iopub.execute_input":"2023-02-24T15:24:51.271772Z","iopub.status.idle":"2023-02-24T15:25:27.092922Z","shell.execute_reply.started":"2023-02-24T15:24:51.271748Z","shell.execute_reply":"2023-02-24T15:25:27.091564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Ensembling by Voting:","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import VotingClassifier\nestimators = [\n    (\"random_forest\", random_forest),\n    (\"extra_trees\", extra_trees),\n    (\"svm\", svm),\n    (\"mlpnn\", mlpnn),\n]","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:25:27.098867Z","iopub.execute_input":"2023-02-24T15:25:27.102697Z","iopub.status.idle":"2023-02-24T15:25:27.111817Z","shell.execute_reply.started":"2023-02-24T15:25:27.102636Z","shell.execute_reply":"2023-02-24T15:25:27.110527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"voting_clf = VotingClassifier(estimators)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:25:27.117524Z","iopub.execute_input":"2023-02-24T15:25:27.120914Z","iopub.status.idle":"2023-02-24T15:25:27.128714Z","shell.execute_reply.started":"2023-02-24T15:25:27.120844Z","shell.execute_reply":"2023-02-24T15:25:27.127558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\nvoting_clf.fit(X_tr, y_tr)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:25:27.134168Z","iopub.execute_input":"2023-02-24T15:25:27.135200Z","iopub.status.idle":"2023-02-24T15:27:23.957652Z","shell.execute_reply.started":"2023-02-24T15:25:27.135147Z","shell.execute_reply":"2023-02-24T15:27:23.956443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"voting_clf.score(X_valid, y_valid)\ny_pred = voting_clf.predict(X_valid)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:27:23.959655Z","iopub.execute_input":"2023-02-24T15:27:23.960430Z","iopub.status.idle":"2023-02-24T15:27:54.200435Z","shell.execute_reply.started":"2023-02-24T15:27:23.960381Z","shell.execute_reply":"2023-02-24T15:27:54.199599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"voting_clf.score(X_valid, y_valid)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:27:54.201619Z","iopub.execute_input":"2023-02-24T15:27:54.202027Z","iopub.status.idle":"2023-02-24T15:28:10.306708Z","shell.execute_reply.started":"2023-02-24T15:27:54.202000Z","shell.execute_reply":"2023-02-24T15:28:10.306013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:10.307813Z","iopub.execute_input":"2023-02-24T15:28:10.308256Z","iopub.status.idle":"2023-02-24T15:28:10.313242Z","shell.execute_reply.started":"2023-02-24T15:28:10.308230Z","shell.execute_reply":"2023-02-24T15:28:10.312405Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_valid","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:10.314326Z","iopub.execute_input":"2023-02-24T15:28:10.315073Z","iopub.status.idle":"2023-02-24T15:28:10.325157Z","shell.execute_reply.started":"2023-02-24T15:28:10.315044Z","shell.execute_reply":"2023-02-24T15:28:10.324308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"svm.score(X_valid,y_valid)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:10.326500Z","iopub.execute_input":"2023-02-24T15:28:10.326761Z","iopub.status.idle":"2023-02-24T15:28:26.283447Z","shell.execute_reply.started":"2023-02-24T15:28:10.326730Z","shell.execute_reply":"2023-02-24T15:28:26.282548Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mlpnn.score(X_valid,y_valid)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:26.284930Z","iopub.execute_input":"2023-02-24T15:28:26.285222Z","iopub.status.idle":"2023-02-24T15:28:26.322449Z","shell.execute_reply.started":"2023-02-24T15:28:26.285195Z","shell.execute_reply":"2023-02-24T15:28:26.321251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"As the SVM is showing high training and validation accuracy, we will proceed with the same","metadata":{}},{"cell_type":"markdown","source":"## 5. Bringing in the test set","metadata":{}},{"cell_type":"code","source":"df_test","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:26.324344Z","iopub.execute_input":"2023-02-24T15:28:26.324702Z","iopub.status.idle":"2023-02-24T15:28:26.361329Z","shell.execute_reply.started":"2023-02-24T15:28:26.324667Z","shell.execute_reply":"2023-02-24T15:28:26.360349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = df_test.values","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:26.362874Z","iopub.execute_input":"2023-02-24T15:28:26.363456Z","iopub.status.idle":"2023-02-24T15:28:26.368319Z","shell.execute_reply.started":"2023-02-24T15:28:26.363412Z","shell.execute_reply":"2023-02-24T15:28:26.367144Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:26.376238Z","iopub.execute_input":"2023-02-24T15:28:26.377061Z","iopub.status.idle":"2023-02-24T15:28:26.384081Z","shell.execute_reply.started":"2023-02-24T15:28:26.377024Z","shell.execute_reply":"2023-02-24T15:28:26.382913Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pca = PCA(n_components=150)\npca.fit(X_test)\n\nX_test_pca = pca.transform(X_test)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:26.385625Z","iopub.execute_input":"2023-02-24T15:28:26.386427Z","iopub.status.idle":"2023-02-24T15:28:29.215188Z","shell.execute_reply.started":"2023-02-24T15:28:26.386386Z","shell.execute_reply":"2023-02-24T15:28:29.213728Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test_pca_recovered = pca.inverse_transform(X_train_pca)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:29.217771Z","iopub.execute_input":"2023-02-24T15:28:29.218823Z","iopub.status.idle":"2023-02-24T15:28:29.618636Z","shell.execute_reply.started":"2023-02-24T15:28:29.218751Z","shell.execute_reply":"2023-02-24T15:28:29.617792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"example = 47 #you may change example here : position after dimensionality reduction\nplot_digit(X_test_pca_recovered[example])","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:28:29.620134Z","iopub.execute_input":"2023-02-24T15:28:29.620694Z","iopub.status.idle":"2023-02-24T15:28:29.683639Z","shell.execute_reply.started":"2023-02-24T15:28:29.620653Z","shell.execute_reply":"2023-02-24T15:28:29.682826Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred_test = svm.predict(X_test_pca)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:29:10.630379Z","iopub.execute_input":"2023-02-24T15:29:10.630743Z","iopub.status.idle":"2023-02-24T15:30:04.075864Z","shell.execute_reply.started":"2023-02-24T15:29:10.630714Z","shell.execute_reply":"2023-02-24T15:30:04.075026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred_test","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred_test.shape","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:30:34.724664Z","iopub.execute_input":"2023-02-24T15:30:34.725134Z","iopub.status.idle":"2023-02-24T15:30:34.730951Z","shell.execute_reply.started":"2023-02-24T15:30:34.725100Z","shell.execute_reply":"2023-02-24T15:30:34.730255Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 6. Submission Time :)","metadata":{}},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/digit-recognizer/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:31:40.821689Z","iopub.execute_input":"2023-02-24T15:31:40.822749Z","iopub.status.idle":"2023-02-24T15:31:40.845902Z","shell.execute_reply.started":"2023-02-24T15:31:40.822710Z","shell.execute_reply":"2023-02-24T15:31:40.845132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:31:47.631916Z","iopub.execute_input":"2023-02-24T15:31:47.632821Z","iopub.status.idle":"2023-02-24T15:31:47.642687Z","shell.execute_reply.started":"2023-02-24T15:31:47.632787Z","shell.execute_reply":"2023-02-24T15:31:47.641899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['Label'] = y_pred_test","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:32:10.175162Z","iopub.execute_input":"2023-02-24T15:32:10.175503Z","iopub.status.idle":"2023-02-24T15:32:10.180945Z","shell.execute_reply.started":"2023-02-24T15:32:10.175476Z","shell.execute_reply":"2023-02-24T15:32:10.179919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:32:13.761047Z","iopub.execute_input":"2023-02-24T15:32:13.761545Z","iopub.status.idle":"2023-02-24T15:32:13.775033Z","shell.execute_reply.started":"2023-02-24T15:32:13.761493Z","shell.execute_reply":"2023-02-24T15:32:13.774185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T15:32:54.589459Z","iopub.execute_input":"2023-02-24T15:32:54.590596Z","iopub.status.idle":"2023-02-24T15:32:54.623507Z","shell.execute_reply.started":"2023-02-24T15:32:54.590548Z","shell.execute_reply":"2023-02-24T15:32:54.622792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}