{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "collapsed_sections": [ "JCeTELmaSD9R", "61vkNVxlzzyW" ], "machine_shape": "hm", "gpuType": "A100" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "ac5a633935c04013a0a850fe39975116": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_61e818edc44c44e8a3d8303eee8ff91c", "IPY_MODEL_672ea5d57f04454a8b96ab13232d5237", "IPY_MODEL_49dbac60cb814000a5aa59985466fd81" ], "layout": "IPY_MODEL_949c68abb0784a5b911a5e03d1f429ad" } }, "61e818edc44c44e8a3d8303eee8ff91c": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e4ffaccaa9184c83837e36be0beb30f5", "placeholder": "​", "style": "IPY_MODEL_f55ed7599ef546e2a02a2d83beae41d7", "value": "Map: 100%" } }, "672ea5d57f04454a8b96ab13232d5237": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_65be8f1e2cc042a98003cb68a99e46d0", "max": 12528, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_946454de1bf543f8911aea42cd0d64dc", "value": 12528 } }, "49dbac60cb814000a5aa59985466fd81": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7435c281bf8f4480b3542eb34d8826c9", "placeholder": "​", "style": "IPY_MODEL_b7189a93516242edb18e739331bcb1d7", "value": " 12528/12528 [00:04<00:00, 2504.94 examples/s]" } }, "949c68abb0784a5b911a5e03d1f429ad": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e4ffaccaa9184c83837e36be0beb30f5": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f55ed7599ef546e2a02a2d83beae41d7": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "65be8f1e2cc042a98003cb68a99e46d0": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "946454de1bf543f8911aea42cd0d64dc": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "7435c281bf8f4480b3542eb34d8826c9": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b7189a93516242edb18e739331bcb1d7": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "8adfee87f17445159c1fdced536dc85c": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_071989bc2f3b4ea8a0ca7ea871844aca", "IPY_MODEL_caa8dc7da70c4a91940f72647c0855ed", "IPY_MODEL_389215a286de468eb666908e98ce8c5d" ], "layout": "IPY_MODEL_7bb192ab8d8d4a4d87958e35c78e4fd8" } }, "071989bc2f3b4ea8a0ca7ea871844aca": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c6b087846a6a4b8abe1bc04593e2edc9", "placeholder": "​", "style": "IPY_MODEL_371a00a75b9745c1bc50d412731a5f8a", "value": "Map: 100%" } }, "caa8dc7da70c4a91940f72647c0855ed": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_de656fc10762480aa127286dc10d0c95", "max": 3132, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_66e71a906bfc4f679ef2e7c3361c7cac", "value": 3132 } }, "389215a286de468eb666908e98ce8c5d": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_01c50a06ef2f45f7b4ceabb7e7583416", "placeholder": "​", "style": "IPY_MODEL_328167df4a454a7fa65f12d91de86b6b", "value": " 3132/3132 [00:01<00:00, 2501.72 examples/s]" } }, "7bb192ab8d8d4a4d87958e35c78e4fd8": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c6b087846a6a4b8abe1bc04593e2edc9": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "371a00a75b9745c1bc50d412731a5f8a": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "de656fc10762480aa127286dc10d0c95": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "66e71a906bfc4f679ef2e7c3361c7cac": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "01c50a06ef2f45f7b4ceabb7e7583416": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "328167df4a454a7fa65f12d91de86b6b": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } } } }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "source": [ "# Environment Setup" ], "metadata": { "id": "gPNw1aaGyjAl" } }, { "cell_type": "markdown", "source": [ "Install requirements" ], "metadata": { "id": "AHiYkD3MWL6H" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "OABT3lobb-x4" }, "outputs": [], "source": [ "!pip install datasets\n", "!pip install transformers datasets torch\n", "!pip install evaluate accelerate transformers[torch] -U\n", "!pip install accelerate -U\n", "!pip install kaggle" ] }, { "cell_type": "markdown", "source": [ "Import essential libraries" ], "metadata": { "id": "rcxjr7gkWNq9" } }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import ast\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ], "metadata": { "id": "G1jOqd8AypnY" }, "execution_count": 2, "outputs": [] }, { "cell_type": "markdown", "source": [ "Important variables for reproducibility" ], "metadata": { "id": "mGa4k5BOrLZl" } }, { "cell_type": "code", "source": [ "# We will use this seed for all random functions to ensure that they are deterministic and reproducable\n", "RANDOM_SEED = 3109" ], "metadata": { "id": "PznmBW7WrLDK" }, "execution_count": 3, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Data Setup" ], "metadata": { "id": "JCeTELmaSD9R" } }, { "cell_type": "markdown", "source": [ "Import Dataset from Kaggle" ], "metadata": { "id": "MuHIubz0ZOhT" } }, { "cell_type": "code", "source": [ "from google.colab import files\n", "!pip install -q kaggle\n", "files.upload()\n", "!mkdir -p ~/.kaggle\n", "!cp kaggle.json ~/.kaggle/\n", "!chmod 600 /root/.kaggle/kaggle.json\n", "!kaggle datasets download -d rounakbanik/the-movies-dataset\n", "!ls\n", "!mkdir data\n", "!unzip the-movies-dataset.zip -d data" ], "metadata": { "id": "xxhY4MyKSF06", "colab": { "base_uri": "https://localhost:8080/", "height": 281 }, "outputId": "ee16925e-ccec-479b-90c5-19ddd22f3c30" }, "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", " \n", " \n", " Upload widget is only available when the cell has been executed in the\n", " current browser session. Please rerun this cell to enable.\n", " \n", " " ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Saving kaggle.json to kaggle.json\n", "Downloading the-movies-dataset.zip to /content\n", "100% 228M/228M [00:01<00:00, 210MB/s]\n", "100% 228M/228M [00:01<00:00, 189MB/s]\n", "kaggle.json sample_data the-movies-dataset.zip\n", "Archive: the-movies-dataset.zip\n", " inflating: data/credits.csv \n", " inflating: data/keywords.csv \n", " inflating: data/links.csv \n", " inflating: data/links_small.csv \n", " inflating: data/movies_metadata.csv \n", " inflating: data/ratings.csv \n", " inflating: data/ratings_small.csv \n" ] } ] }, { "cell_type": "markdown", "source": [ "# Data Integration" ], "metadata": { "id": "a_Rubw0-VO0T" } }, { "cell_type": "markdown", "source": [ "Create a new CSV with 'genres' from movies_metadata.csv and 'keywords' from keywords.csv, joined together on 'id'" ], "metadata": { "id": "hkzC-cvvV30G" } }, { "cell_type": "code", "source": [ "# Read in 'movies_metadata' and 'keywords'\n", "df1 = pd.read_csv('data/movies_metadata.csv' , low_memory=False)\n", "df2 = pd.read_csv('data/keywords.csv' , low_memory=False)\n", "\n", "# Convert the 'id' columns to strings\n", "df1['id'] = df1['id'].astype(str)\n", "df2['id'] = df2['id'].astype(str)\n", "\n", "# Merge the csv files on 'id' matching\n", "merged_df = pd.merge(df1, df2, on='id')\n", "# Select only the 'genres' and 'keywords' columns of the newly merged csv\n", "merged_df = merged_df.loc[:,['genres', 'keywords']]" ], "metadata": { "id": "vX8yN5TCVYgq" }, "execution_count": 52, "outputs": [] }, { "cell_type": "markdown", "source": [ "Convert the dictionary contents of both 'genres' and 'keywords' columns into tuples" ], "metadata": { "id": "xXRnYB0SZY3W" } }, { "cell_type": "code", "source": [ "evaluated_df = merged_df\n", "\n", "# Apply 'literal_eval' from ast library to each entry (converting string representation of dictionaries into python dictionaries)\n", "evaluated_df['genres'] = evaluated_df['genres'].apply(ast.literal_eval)\n", "evaluated_df['keywords'] = evaluated_df['keywords'].apply(ast.literal_eval)\n", "\n", "# We are only interested in the 'names' of keywords and genres\n", "def extract_names(dict_list):\n", " return [d['name'] for d in dict_list if 'name' in d]\n", "\n", "# Extract the 'name' values of the evaluated dictionaries\n", "evaluated_df['genres'] = evaluated_df['genres'].apply(extract_names)\n", "evaluated_df['keywords'] = evaluated_df['keywords'].apply(extract_names)\n", "\n", "# Convert the extracted 'name' lists into tuples (tuples work much better with Pandas dataframe functions)\n", "evaluated_df['genres'] = evaluated_df['genres'].apply(tuple)\n", "evaluated_df['keywords'] = evaluated_df['keywords'].apply(tuple)\n" ], "metadata": { "id": "sFDpPNtFVrsC" }, "execution_count": 53, "outputs": [] }, { "cell_type": "code", "source": [ "# After data selection, the final step should be the 'df' (what the next sections will work with)\n", "df = evaluated_df" ], "metadata": { "id": "3Q-YaxyDXgsU" }, "execution_count": 54, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Data Cleaning" ], "metadata": { "id": "wByCZNDfb5wm" } }, { "cell_type": "markdown", "source": [ "Filter out rows with missing values" ], "metadata": { "id": "kDGz7lq0Utqp" } }, { "cell_type": "code", "source": [ "no_empty_df = df.copy()" ], "metadata": { "id": "LVDpjecYnaMI" }, "execution_count": 55, "outputs": [] }, { "cell_type": "code", "source": [ "# Set 'no_empty_df' to be 'no_empty_df' where the 'genres' in each row has more than 0 list items\n", "no_empty_df = no_empty_df[no_empty_df['genres'].apply(lambda x: len(x) > 0)]\n", "\n", "# Set 'no_empty_df' to be 'no_empty_df' where the 'keywords' in each row has more than 0 list items\n", "no_empty_df = no_empty_df[no_empty_df['keywords'].apply(lambda x: len(x) > 0)]" ], "metadata": { "id": "PVf7m1aZoBBg" }, "execution_count": 56, "outputs": [] }, { "cell_type": "code", "source": [ "# Calculate how many rows were \"lost\"\n", "before = len(df)\n", "after = len(no_empty_df)\n", "\n", "print((before - after), 'rows with missing values removed')" ], "metadata": { "id": "lbo2wtXdpV-D", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0fc6e67c-615d-4253-f7e4-9926d0ad07be" }, "execution_count": 57, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "15199 rows with missing values removed\n" ] } ] }, { "cell_type": "code", "source": [ "display(no_empty_df)" ], "metadata": { "id": "PaeSob9oL0mE", "colab": { "base_uri": "https://localhost:8080/", "height": 423 }, "outputId": "2b524bb4-db27-4a25-ddca-282e678bafeb" }, "execution_count": 58, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " genres \\\n", "0 (Animation, Comedy, Family) \n", "1 (Adventure, Fantasy, Family) \n", "2 (Romance, Comedy) \n", "3 (Comedy, Drama, Romance) \n", "4 (Comedy,) \n", "... ... \n", "46472 (Horror, Mystery, Thriller) \n", "46473 (Mystery, Horror) \n", "46474 (Horror,) \n", "46477 (Drama, Family) \n", "46478 (Drama,) \n", "\n", " keywords \n", "0 (jealousy, toy, boy, friendship, friends, riva... \n", "1 (board game, disappearance, based on children'... \n", "2 (fishing, best friend, duringcreditsstinger, o... \n", "3 (based on novel, interracial relationship, sin... \n", "4 (baby, midlife crisis, confidence, aging, daug... \n", "... ... \n", "46472 (revenge, murder, serial killer, new york city... \n", "46473 (blair witch,) \n", "46474 (witch, mythology, legend, serial killer, mock... \n", "46477 (tragic love,) \n", "46478 (artist, play, pinoy) \n", "\n", "[31283 rows x 2 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genreskeywords
0(Animation, Comedy, Family)(jealousy, toy, boy, friendship, friends, riva...
1(Adventure, Fantasy, Family)(board game, disappearance, based on children'...
2(Romance, Comedy)(fishing, best friend, duringcreditsstinger, o...
3(Comedy, Drama, Romance)(based on novel, interracial relationship, sin...
4(Comedy,)(baby, midlife crisis, confidence, aging, daug...
.........
46472(Horror, Mystery, Thriller)(revenge, murder, serial killer, new york city...
46473(Mystery, Horror)(blair witch,)
46474(Horror,)(witch, mythology, legend, serial killer, mock...
46477(Drama, Family)(tragic love,)
46478(Drama,)(artist, play, pinoy)
\n", "

31283 rows × 2 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "Remove duplicate entries from the DataFrame" ], "metadata": { "id": "Q6nTDmakV2Px" } }, { "cell_type": "code", "source": [ "no_dupe_df = no_empty_df.drop_duplicates(keep='first')" ], "metadata": { "id": "ATgt4KQ0qND7" }, "execution_count": 59, "outputs": [] }, { "cell_type": "code", "source": [ "print(no_dupe_df)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "aFbj8hykN0qi", "outputId": "3f67161d-3a4a-4562-ad31-5d835f000942" }, "execution_count": 60, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " genres \\\n", "0 (Animation, Comedy, Family) \n", "1 (Adventure, Fantasy, Family) \n", "2 (Romance, Comedy) \n", "3 (Comedy, Drama, Romance) \n", "4 (Comedy,) \n", "... ... \n", "46472 (Horror, Mystery, Thriller) \n", "46473 (Mystery, Horror) \n", "46474 (Horror,) \n", "46477 (Drama, Family) \n", "46478 (Drama,) \n", "\n", " keywords \n", "0 (jealousy, toy, boy, friendship, friends, riva... \n", "1 (board game, disappearance, based on children'... \n", "2 (fishing, best friend, duringcreditsstinger, o... \n", "3 (based on novel, interracial relationship, sin... \n", "4 (baby, midlife crisis, confidence, aging, daug... \n", "... ... \n", "46472 (revenge, murder, serial killer, new york city... \n", "46473 (blair witch,) \n", "46474 (witch, mythology, legend, serial killer, mock... \n", "46477 (tragic love,) \n", "46478 (artist, play, pinoy) \n", "\n", "[28251 rows x 2 columns]\n" ] } ] }, { "cell_type": "code", "source": [ "df = no_dupe_df" ], "metadata": { "id": "eC10c-4cYGQg" }, "execution_count": 61, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Data Balancing" ], "metadata": { "id": "9mDwq5AWcEcl" } }, { "cell_type": "code", "source": [ "category_analysis = df.copy()\n", "category_analysis['genre_lengths'] = category_analysis['genres'].apply(len)\n", "\n", "display(category_analysis)" ], "metadata": { "id": "JzB093uRcElc", "colab": { "base_uri": "https://localhost:8080/", "height": 423 }, "outputId": "a841737d-0fbb-4d15-a99c-02a9a9fcabb7" }, "execution_count": 62, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " genres \\\n", "0 (Animation, Comedy, Family) \n", "1 (Adventure, Fantasy, Family) \n", "2 (Romance, Comedy) \n", "3 (Comedy, Drama, Romance) \n", "4 (Comedy,) \n", "... ... \n", "46472 (Horror, Mystery, Thriller) \n", "46473 (Mystery, Horror) \n", "46474 (Horror,) \n", "46477 (Drama, Family) \n", "46478 (Drama,) \n", "\n", " keywords genre_lengths \n", "0 (jealousy, toy, boy, friendship, friends, riva... 3 \n", "1 (board game, disappearance, based on children'... 3 \n", "2 (fishing, best friend, duringcreditsstinger, o... 2 \n", "3 (based on novel, interracial relationship, sin... 3 \n", "4 (baby, midlife crisis, confidence, aging, daug... 1 \n", "... ... ... \n", "46472 (revenge, murder, serial killer, new york city... 3 \n", "46473 (blair witch,) 2 \n", "46474 (witch, mythology, legend, serial killer, mock... 1 \n", "46477 (tragic love,) 2 \n", "46478 (artist, play, pinoy) 1 \n", "\n", "[28251 rows x 3 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genreskeywordsgenre_lengths
0(Animation, Comedy, Family)(jealousy, toy, boy, friendship, friends, riva...3
1(Adventure, Fantasy, Family)(board game, disappearance, based on children'...3
2(Romance, Comedy)(fishing, best friend, duringcreditsstinger, o...2
3(Comedy, Drama, Romance)(based on novel, interracial relationship, sin...3
4(Comedy,)(baby, midlife crisis, confidence, aging, daug...1
............
46472(Horror, Mystery, Thriller)(revenge, murder, serial killer, new york city...3
46473(Mystery, Horror)(blair witch,)2
46474(Horror,)(witch, mythology, legend, serial killer, mock...1
46477(Drama, Family)(tragic love,)2
46478(Drama,)(artist, play, pinoy)1
\n", "

28251 rows × 3 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "
\n", "
\n" ] }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "plt.ylabel('No. of Movies')\n", "plt.xlabel('No. of Genres')\n", "\n", "plt.title(\"Multi-Genre Distribution\")\n", "plt.hist(category_analysis['genre_lengths'], bins=10)\n", "plt.show()" ], "metadata": { "id": "zBYqWZPyeEPY", "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "outputId": "9827a695-92af-4f72-fed9-7c1c80dc24be" }, "execution_count": 63, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAIklEQVR4nO3de3zP9f//8fvbZkc2x23GsJzNoVAaRWVZLEVOY+QU6beF+STzybEDwxdFsagcQpFTsShnYY2EkFA5FdsSNsdhe/3+6Lv317uNXtO293vcrpfL+3Lxer4e79fr8Xrvze5er+f79bYYhmEIAAAAt1XE3g0AAAAUBoQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJuAeN3r0aFksFlO1c+bMkcVi0bFjx/K3qbvUY489pscee6xA9mWxWDR69GjrctbP+cyZMwWy/8qVK6tnz54Fsi+goBCaAAeWFVIsFou2bt2abb1hGAoICJDFYtHTTz+dZ/sdO3asVqxYkSfbSklJUUxMjOrWratixYrJzc1NVatWVa9evXI8psKiZ8+e1p+NxWJRsWLFdN9996lDhw5aunSpMjMz82Q/27dv1+jRo3X+/Pk82V5ecuTegPzgbO8GAPwzNzc3LVy4UI888ojN+ObNm/Xbb7/J1dU1T/c3duxYdejQQW3btrUZ7969u8LDw03vb8eOHQoLC9OFCxcUHh6u/v37y9XVVUePHtWKFSs0Z84cbd68Wc2aNcvT/guKq6urPvjgA0nSlStXdPz4ca1cuVIdOnTQY489ps8//1xeXl7W+q+//jrX+9i+fbvGjBmjnj17qkSJEqafd+XKFTk75+8/8bfr7dChQypShP+X4+5CaAIKgdatW+uzzz7T1KlTbX4RLly4UA0bNiywSy5OTk5ycnIyVXvu3Dm1bdtWzs7O2rNnj2rWrGmz/s0339Snn34qd3f3/Gj1ti5fviwPD49/vR1nZ2d169bNZuzNN99UbGyshg0bpr59+2rRokXWdS4uLv96n7eTmZmpa9euyc3NTW5ubvm6r3+S10EecAT8NwAoBLp06aI///xTa9eutY5du3ZNS5YsUdeuXbPVb9q0SRaLRZs2bbIZP3bsmCwWi+bMmXPLfVksFl26dElz5861XnrKmpuSmzlNcXFxOn36tN5+++1sgSlrP126dNGDDz5oM/7777+rd+/e8vX1laurq4KCgvTRRx/leHyLFy/WW2+9pQoVKsjNzU0tWrTQzz//bFP72GOPqU6dOtq1a5eaNWsmDw8P/fe//5Ukpaena9SoUapatapcXV0VEBCgV199Venp6f94fLcTExOjli1b6rPPPtPhw4dtevn7nKZp06YpKChIHh4eKlmypBo1aqSFCxdK+mse0pAhQyRJgYGB1p9H1utvsVgUFRWlBQsWKCgoSK6urlqzZo113c1zmrKcOXNGnTp1kpeXl0qXLq2BAwfq6tWr1vW3e4/cvM1/6i2nOU2//vqrOnbsqFKlSsnDw0MPP/yw4uPjbWpy87MFChpnmoBCoHLlygoODtYnn3yiVq1aSZJWr16t1NRUhYeHa+rUqXm2r48//lgvvPCCHnroIfXr10+SVKVKlVxvZ+XKlXJ3d9dzzz1n+jnJycl6+OGHrWGgbNmyWr16tfr06aO0tDQNGjTIpj42NlZFihTRK6+8otTUVE2YMEERERFKTEy0qfvzzz/VqlUrhYeHq1u3bvL19VVmZqaeeeYZbd26Vf369VOtWrW0b98+TZkyRYcPH/7Xc7q6d++ur7/+WmvXrlX16tVzrJk1a5YGDBigDh06WMPLDz/8oMTERHXt2lXPPfecDh8+rE8++URTpkxRmTJlJElly5a1bmPDhg1avHixoqKiVKZMGVWuXPm2fXXq1EmVK1fWuHHj9O2332rq1Kk6d+6c5s2bl6vjM9PbzZKTk9WkSRNdvnxZAwYMUOnSpTV37lw988wzWrJkidq1a2dTb/ZnCxQkQhNQSHTt2lXDhg3TlStX5O7urgULFqh58+by9/fP0/1069ZN/fv313333Zft0lNu/PTTT6pRo4aKFi1qM37hwgWbMznu7u7y9PSUJL322mvKyMjQvn37VLp0aUlS//791aVLF40ePVovvviizeW8q1evas+ePdbLXiVLltTAgQO1f/9+1alTx1qXlJSkuLg4vfjii9ax+fPna926ddq8ebPNXLE6deqof//+2r59u5o0aXLHx5+1/19++eWWNfHx8QoKCtJnn32W4/p69eqpQYMG+uSTT9S2bdscA9GhQ4e0b98+1a5d21RfgYGB+vzzzyVJkZGR8vLy0vTp0/XKK6+oXr16prZhtrebxcbGKjk5Wd9884319e7bt6/q1aunwYMH69lnn7WZA2X2ZwsUJC7PAYVEp06ddOXKFa1atUoXLlzQqlWrcrw05yjS0tJUrFixbOPdu3dX2bJlrY+hQ4dK+uuTgEuXLlWbNm1kGIbOnDljfYSGhio1NVXff/+9zbZ69eplM0/o0UcflfTXZaCbubq6qlevXjZjn332mWrVqqWaNWva7OuJJ56QJG3cuPFfHX/WsV+4cOGWNSVKlNBvv/2mnTt33vF+mjdvbjowSX8FpZu9/PLLkqQvv/zyjnsw48svv9RDDz1kE1CLFSumfv366dixY/rxxx9t6s3+bIGCxJkmoJAoW7asQkJCtHDhQl2+fFkZGRnq0KGDXXtKTU3VlStXrMsuLi4qVaqUJKl48eK6ePFitue8/vrrioqKkiQ9+eST1vE//vhD58+f18yZMzVz5swc95eSkmKzXLFiRZvlkiVLSvprEvrNypcvn20S9pEjR3Tw4MFbXk76+75yK+vYixcvfsuaoUOHat26dXrooYdUtWpVtWzZUl27dlXTpk1N7ycwMDBXfVWrVs1muUqVKipSpEi+33vr+PHjaty4cbbxWrVqWdfffAbJ7M8WKEiEJqAQ6dq1q/r27aukpCS1atXqlh9Bv9XNKjMyMvK0n4EDB2ru3LnW5ebNm1snn9esWVN79+7V9evXbS7R3eoSUNZ9jbp166YePXrkWPP3597qk3yGYdgs5/QJvczMTNWtW1eTJ0/OcRsBAQE5jpu1f/9+SVLVqlVvWVOrVi0dOnRIq1at0po1a7R06VJNnz5dI0eO1JgxY0zt599++vDv75WCeu/8E7M/W6AgEZqAQqRdu3Z68cUX9e2339p8lP3vsv5X/vebDh4/ftzUfszeIfzVV1+1mfeUtV9Jevrpp/Xtt99q+fLl6tSp0z9uq2zZsipevLgyMjIUEhJiav//RpUqVbR37161aNHC9PHmxscffyyLxWJzNi0nnp6e6ty5szp37qxr167pueee01tvvaVhw4bJzc0tz3s7cuSIzdmpn3/+WZmZmdY5Sbl57+Smt0qVKunQoUPZxn/66SfresDRMacJKESKFSumGTNmaPTo0WrTps0t6ypVqiQnJydt2bLFZnz69Omm9uPp6WnqLs+1a9dWSEiI9dGwYUPrupdeekm+vr6Kjo62+dh9lr+fMXByclL79u21dOlS61mam/3xxx+mejerU6dO+v333zVr1qxs665cuaJLly7d8bZjY2P19ddfq3Pnztkuh93szz//tFl2cXFR7dq1ZRiGrl+/LknWSfJ5ddft9957z2Z52rRpkmT9VKaXl5fKlClj6r2Tm95at26tHTt2KCEhwTp26dIlzZw5U5UrV87VvCzAXjjTBBQyt7p0dTNvb2917NhR06ZNk8ViUZUqVbRq1SrT83QaNmyodevWafLkyfL391dgYGCO81Fup1SpUlq+fLnatGmj+vXrKzw8XA8++KCKFi2qkydPWj8xdvPcldjYWG3cuFGNGzdW3759Vbt2bZ09e1bff/+91q1bp7Nnz+aqh9vp3r27Fi9erP79+2vjxo1q2rSpMjIy9NNPP2nx4sX66quv1KhRo9tu48aNG5o/f76kvz7tdfz4cX3xxRf64Ycf9Pjjj99yblaWli1bys/PT02bNpWvr68OHjyod999V2FhYda5UFlB9LXXXlN4eLiKFi2qNm3aWANLbh09elTPPPOMnnrqKSUkJGj+/Pnq2rWr6tevb6154YUXFBsbqxdeeEGNGjXSli1bcgy+uektJibGesuMAQMGqFSpUpo7d66OHj2qpUuXcvdwFAqEJuAuNW3aNF2/fl1xcXFydXVVp06dNHHiRFMf1548ebL69eun4cOH68qVK+rRo0euQ5MkBQcHa//+/Zo8ebLi4+O1aNEiZWZmqnz58nrkkUc0c+ZM66eiJMnX11c7duzQ66+/rmXLlmn69OkqXbq0goKCNH78+Fzv/3aKFCmiFStWaMqUKZo3b56WL18uDw8P3XfffRo4cOAt7610s/T0dHXv3l2S5OHhIR8fHzVs2FAjR45Uu3bt/jEIvPjii1qwYIEmT56sixcvqkKFChowYICGDx9urXnwwQf1xhtvKC4uTmvWrFFmZqaOHj16x6Fp0aJFGjlypGJiYuTs7KyoqChNnDjRpmbkyJH6448/tGTJEi1evFitWrXS6tWr5ePjY1OXm958fX21fft2DR06VNOmTdPVq1dVr149rVy5UmFhYXd0LEBBsxjMqgMAAPhHnA8FAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJnCfpjySmZmpU6dOqXjx4vnylQwAACDvGYahCxcuyN/f/x/vrUZoyiOnTp3611/wCQAA7OPkyZOqUKHCbWsITXkk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7du350d/AAAADiHXocnZ2VlPP/20FixYoJSUFE2ZMkXHjh3T448/ripVquRHjwAAAHZ3x/dpkiQPDw+Fhobq3LlzOn78uA4ePJhXfQEAADiUXJ9pkqTLly9rwYIFat26tcqXL6+3335b7dq104EDB/K6PwAAAIeQ6zNN4eHhWrVqlTw8PNSpUyeNGDFCwcHB+dEbAACAw8h1aHJyctLixYsVGhoqJyen/OgJAADA4eQ6NC1YsCA/+gAAAHBodzSnafPmzWrTpo2qVq2qqlWr6plnntE333yT170BAAA4jFyHpvnz5yskJEQeHh4aMGCABgwYIHd3d7Vo0UILFy7Mjx4BAADsLtdfo1KrVi3169dP0dHRNuOTJ0/WrFmz7tnbDvA1KrAXvkYFAO5cvn6Nyq+//qo2bdpkG3/mmWd09OjR3G4OAACgUMh1aAoICND69euzja9bt04BAQF50hQAAICjyfWn5/7zn/9owIAB2rNnj5o0aSJJ2rZtm+bMmaN33nknzxsEAABwBLkOTS+99JL8/Pw0adIkLV68WNJf85wWLVqkZ599Ns8bBAAAcAR39N1z7dq1U7t27fK6FwAAAId1R/dpAgAAuNeYPtN03333mar79ddf77gZAAAAR2U6NB07dkyVKlVS165d5ePjk589AQAAOBzToWnRokX66KOPNHnyZLVq1Uq9e/dW69atVaQIV/gAAMDdz3Ti6dixo1avXq2ff/5ZDRs2VHR0tAICAhQTE6MjR47kZ48AAAB2l+vTROXLl9drr72mI0eOaOHChUpMTFTNmjV17ty5/OgPAADAIdzRLQeuXr2qJUuW6KOPPlJiYqI6duwoDw+PvO4NAADAYeQqNCUmJurDDz/U4sWLdd9996l3795aunSpSpYsmV/9AQAAOATToSkoKEgpKSnq2rWrNm/erPr16+dnXwAAAA7FdGg6ePCgPD09NW/ePH388ce3rDt79myeNAYAAOBITIem2bNn52cfAAAADs10aOrRo0d+9gEAAODQuDMlAACACYQmAAAAEwhNAAAAJpgKTWlpafndBwAAgEMzFZpKliyplJQUSdITTzyh8+fP52dPAAAADsdUaCpWrJj+/PNPSdKmTZt0/fr1fG0KAADA0Zi65UBISIgef/xx1apVS5LUrl07ubi45Fi7YcOGvOsOAADAQZgKTfPnz9fcuXP1yy+/aPPmzQoKCuILegEAwD3FVGhyd3dX//79JUnfffedxo8frxIlSuRnXwAAAA7F9B3Bs2zcuNH6Z8MwJEkWiyXvOgIAAHBAd3Sfpnnz5qlu3bpyd3eXu7u76tWrd9sv8QUAACjscn2mafLkyRoxYoSioqLUtGlTSdLWrVvVv39/nTlzRtHR0XneJAAAgL3lOjRNmzZNM2bM0PPPP28de+aZZxQUFKTRo0cTmgAAwF0p15fnTp8+rSZNmmQbb9KkiU6fPp0nTQEAADiaXIemqlWravHixdnGFy1apGrVquVJUwAAAI4m15fnxowZo86dO2vLli3WOU3btm3T+vXrcwxTAAAAd4Ncn2lq3769EhMTVaZMGa1YsUIrVqxQmTJltGPHDrVr1y4/egQAALC7XJ9pkqSGDRtq/vz5ed0LAACAw7qj+zQBAADcawhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMCHPQtP06dP1+uuv59XmAAAAHEqehaalS5dqzpw5ebU5AAAAh3JH92nKyfr16/NqUwAAAA7nX51pMgxDhmHkVS8AAAAO645C07x581S3bl25u7vL3d1d9erV08cff5zXvQEAADiMXF+emzx5skaMGKGoqCjrF/Zu3bpV/fv315kzZxQdHZ3nTQIAANhbrkPTtGnTNGPGDD3//PPWsWeeeUZBQUEaPXo0oQkAANyVcn157vTp02rSpEm28SZNmuj06dN50hQAAICjyXVoqlq1qhYvXpxtfNGiRapWrVqeNAUAAOBocn15bsyYMercubO2bNlindO0bds2rV+/PscwBQAAcDfI9Zmm9u3bKzExUWXKlNGKFSu0YsUKlSlTRjt27FC7du3yo0er2NhYWSwWDRo0yDp29epVRUZGqnTp0ipWrJjat2+v5ORkm+edOHFCYWFh8vDwkI+Pj4YMGaIbN27Y1GzatEkNGjSQq6urqlatyo06AQCAjTu6uWXDhg01f/78vO7ltnbu3Kn3339f9erVsxmPjo5WfHy8PvvsM3l7eysqKkrPPfectm3bJknKyMhQWFiY/Pz8tH37dp0+fVrPP/+8ihYtqrFjx0qSjh49qrCwMPXv318LFizQ+vXr9cILL6hcuXIKDQ0t0OMEAACOqVB8Ye/FixcVERGhWbNmqWTJktbx1NRUffjhh5o8ebKeeOIJNWzYULNnz9b27dv17bffSpK+/vpr/fjjj5o/f77uv/9+tWrVSm+88Ybee+89Xbt2TZIUFxenwMBATZo0SbVq1VJUVJQ6dOigKVOm2OV4AQCA4zEdmooUKSInJ6fbPpyd8+xbWWxERkYqLCxMISEhNuO7du3S9evXbcZr1qypihUrKiEhQZKUkJCgunXrytfX11oTGhqqtLQ0HThwwFrz922HhoZatwEAAGA65SxfvvyW6xISEjR16lRlZmbmSVM3+/TTT/X9999r586d2dYlJSXJxcVFJUqUsBn39fVVUlKStebmwJS1Pmvd7WrS0tJ05coVubu7Z9t3enq60tPTrctpaWm5PzgAAFBomA5Nzz77bLaxQ4cOKSYmRitXrlRERIRef/31PG3u5MmTGjhwoNauXSs3N7c83fa/NW7cOI0ZM8bebQAAgAJyR3OaTp06pb59+6pu3bq6ceOG9uzZo7lz56pSpUp52tyuXbuUkpKiBg0ayNnZWc7Oztq8ebOmTp0qZ2dn+fr66tq1azp//rzN85KTk+Xn5ydJ8vPzy/Zpuqzlf6rx8vLK8SyTJA0bNkypqanWx8mTJ/PikAEAgIPKVWhKTU3V0KFDVbVqVR04cEDr16/XypUrVadOnXxprkWLFtq3b5/27NljfTRq1EgRERHWPxctWlTr16+3PufQoUM6ceKEgoODJUnBwcHat2+fUlJSrDVr166Vl5eXateuba25eRtZNVnbyImrq6u8vLxsHgAA4O5l+vLchAkTNH78ePn5+emTTz7J8XJdXitevHi2QObp6anSpUtbx/v06aPBgwerVKlS8vLy0ssvv6zg4GA9/PDDkqSWLVuqdu3a6t69uyZMmKCkpCQNHz5ckZGRcnV1lST1799f7777rl599VX17t1bGzZs0OLFixUfH5/vxwgAAAoH06EpJiZG7u7uqlq1qubOnau5c+fmWLds2bI8a86MKVOmqEiRImrfvr3S09MVGhqq6dOnW9c7OTlp1apVeumllxQcHCxPT0/16NHDZv5VYGCg4uPjFR0drXfeeUcVKlTQBx98wD2aAACAlcUwDMNMYc+ePWWxWP6xbvbs2f+6qcIoLS1N3t7eSk1NzZdLdZVjOOuFnB2LDbN3CwBQaOXm97fpM018rQgAALiXFYo7ggMAANgboQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARnezcA4N5TOSbe3i3k2rHYMHu3AMDOONMEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGCCQ4emcePG6cEHH1Tx4sXl4+Ojtm3b6tChQzY1V69eVWRkpEqXLq1ixYqpffv2Sk5Otqk5ceKEwsLC5OHhIR8fHw0ZMkQ3btywqdm0aZMaNGggV1dXVa1aVXPmzMnvwwMAAIWIQ4emzZs3KzIyUt9++63Wrl2r69evq2XLlrp06ZK1Jjo6WitXrtRnn32mzZs369SpU3ruuees6zMyMhQWFqZr165p+/btmjt3rubMmaORI0daa44ePaqwsDA9/vjj2rNnjwYNGqQXXnhBX331VYEeLwAAcFwWwzAMezdh1h9//CEfHx9t3rxZzZo1U2pqqsqWLauFCxeqQ4cOkqSffvpJtWrVUkJCgh5++GGtXr1aTz/9tE6dOiVfX19JUlxcnIYOHao//vhDLi4uGjp0qOLj47V//37rvsLDw3X+/HmtWbPGVG9paWny9vZWamqqvLy88vzYK8fE5/k2cXc4Fhtm7xZyrTC+nwvj6wzgn+Xm97dDn2n6u9TUVElSqVKlJEm7du3S9evXFRISYq2pWbOmKlasqISEBElSQkKC6tataw1MkhQaGqq0tDQdOHDAWnPzNrJqsrYBAADgbO8GzMrMzNSgQYPUtGlT1alTR5KUlJQkFxcXlShRwqbW19dXSUlJ1pqbA1PW+qx1t6tJS0vTlStX5O7unq2f9PR0paenW5fT0tL+3QECAACHVmjONEVGRmr//v369NNP7d2KpL8mqXt7e1sfAQEB9m4JAADko0IRmqKiorRq1Spt3LhRFSpUsI77+fnp2rVrOn/+vE19cnKy/Pz8rDV//zRd1vI/1Xh5eeV4lkmShg0bptTUVOvj5MmT/+oYAQCAY3Po0GQYhqKiorR8+XJt2LBBgYGBNusbNmyookWLav369daxQ4cO6cSJEwoODpYkBQcHa9++fUpJSbHWrF27Vl5eXqpdu7a15uZtZNVkbSMnrq6u8vLysnkAAIC7l0PPaYqMjNTChQv1+eefq3jx4tY5SN7e3nJ3d5e3t7f69OmjwYMHq1SpUvLy8tLLL7+s4OBgPfzww5Kkli1bqnbt2urevbsmTJigpKQkDR8+XJGRkXJ1dZUk9e/fX++++65effVV9e7dWxs2bNDixYsVH1/4PuEDAADyh0OfaZoxY4ZSU1P12GOPqVy5ctbHokWLrDVTpkzR008/rfbt26tZs2by8/PTsmXLrOudnJy0atUqOTk5KTg4WN26ddPzzz+v119/3VoTGBio+Ph4rV27VvXr19ekSZP0wQcfKDQ0tECPFwAAOK5CdZ8mR8Z9mmAvhfH+QYXx/VwYX2cA/+yuvU8TAACAvRCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMcLZ3AwBQGFSOibd3C7l2LDbM3i0AdxXONAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAAAAJhCaAAAATCA0AQAAmEBoAgAAMMHZ3g04mvfee08TJ05UUlKS6tevr2nTpumhhx6yd1sAcE+oHBNv7xZy7VhsmL1bQAHhTNNNFi1apMGDB2vUqFH6/vvvVb9+fYWGhiolJcXerQEAADsjNN1k8uTJ6tu3r3r16qXatWsrLi5OHh4e+uijj+zdGgAAsDNC0/+6du2adu3apZCQEOtYkSJFFBISooSEBDt2BgAAHAFzmv7XmTNnlJGRIV9fX5txX19f/fTTT9nq09PTlZ6ebl1OTU2VJKWlpeVLf5npl/Nluyj88us9l594PxcM3hsFo2L0Z/Zu4Y7sHxNq7xYcQtbfE8Mw/rGW0HSHxo0bpzFjxmQbDwgIsEM3uJd5v23vDuCoeG/gdnh/2Lpw4YK8vb1vW0No+l9lypSRk5OTkpOTbcaTk5Pl5+eXrX7YsGEaPHiwdTkzM1Nnz55V6dKlZbFY8rS3tLQ0BQQE6OTJk/Ly8srTbRcG9/rxS7wGHP+9ffwSr8G9fvxS/r0GhmHowoUL8vf3/8daQtP/cnFxUcOGDbV+/Xq1bdtW0l9BaP369YqKispW7+rqKldXV5uxEiVK5GuPXl5e9+xfFonjl3gNOP57+/glXoN7/fil/HkN/ukMUxZC000GDx6sHj16qFGjRnrooYf09ttv69KlS+rVq5e9WwMAAHZGaLpJ586d9ccff2jkyJFKSkrS/fffrzVr1mSbHA4AAO49hKa/iYqKyvFynD25urpq1KhR2S4H3ivu9eOXeA04/nv7+CVeg3v9+CXHeA0shpnP2AEAANzjuLklAACACYQmAAAAEwhNAAAAJhCaAAAATCA0ObAtW7aoTZs28vf3l8Vi0YoVK+zdUoEaN26cHnzwQRUvXlw+Pj5q27atDh06ZO+2CsyMGTNUr149643cgoODtXr1anu3ZTexsbGyWCwaNGiQvVspMKNHj5bFYrF51KxZ095tFajff/9d3bp1U+nSpeXu7q66devqu+++s3dbBaZy5crZ3gMWi0WRkZH2bq1AZGRkaMSIEQoMDJS7u7uqVKmiN954w9T3xOUHbjngwC5duqT69eurd+/eeu655+zdToHbvHmzIiMj9eCDD+rGjRv673//q5YtW+rHH3+Up6envdvLdxUqVFBsbKyqVasmwzA0d+5cPfvss9q9e7eCgoLs3V6B2rlzp95//33Vq1fP3q0UuKCgIK1bt8667Ox87/yzfe7cOTVt2lSPP/64Vq9erbJly+rIkSMqWbKkvVsrMDt37lRGRoZ1ef/+/XryySfVsWNHO3ZVcMaPH68ZM2Zo7ty5CgoK0nfffadevXrJ29tbAwYMKPB+7p2/fYVQq1at1KpVK3u3YTdr1qyxWZ4zZ458fHy0a9cuNWvWzE5dFZw2bdrYLL/11luaMWOGvv3223sqNF28eFERERGaNWuW3nzzTXu3U+CcnZ1z/P7Le8H48eMVEBCg2bNnW8cCAwPt2FHBK1u2rM1ybGysqlSpoubNm9upo4K1fft2PfvsswoLC5P015m3Tz75RDt27LBLP1yeQ6GRmpoqSSpVqpSdOyl4GRkZ+vTTT3Xp0iUFBwfbu50CFRkZqbCwMIWEhNi7Fbs4cuSI/P39dd999ykiIkInTpywd0sF5osvvlCjRo3UsWNH+fj46IEHHtCsWbPs3ZbdXLt2TfPnz1fv3r3z/IvhHVWTJk20fv16HT58WJK0d+9ebd261W4nFDjThEIhMzNTgwYNUtOmTVWnTh17t1Ng9u3bp+DgYF29elXFihXT8uXLVbt2bXu3VWA+/fRTff/999q5c6e9W7GLxo0ba86cOapRo4ZOnz6tMWPG6NFHH9X+/ftVvHhxe7eX73799VfNmDFDgwcP1n//+1/t3LlTAwYMkIuLi3r06GHv9grcihUrdP78efXs2dPerRSYmJgYpaWlqWbNmnJyclJGRobeeustRURE2KUfQhMKhcjISO3fv19bt261dysFqkaNGtqzZ49SU1O1ZMkS9ejRQ5s3b74ngtPJkyc1cOBArV27Vm5ubvZuxy5u/t90vXr11LhxY1WqVEmLFy9Wnz597NhZwcjMzFSjRo00duxYSdIDDzyg/fv3Ky4u7p4MTR9++KFatWolf39/e7dSYBYvXqwFCxZo4cKFCgoK0p49ezRo0CD5+/vb5T1AaILDi4qK0qpVq7RlyxZVqFDB3u0UKBcXF1WtWlWS1LBhQ+3cuVPvvPOO3n//fTt3lv927dqllJQUNWjQwDqWkZGhLVu26N1331V6erqcnJzs2GHBK1GihKpXr66ff/7Z3q0UiHLlymX7D0KtWrW0dOlSO3VkP8ePH9e6deu0bNkye7dSoIYMGaKYmBiFh4dLkurWravjx49r3LhxhCbgZoZh6OWXX9by5cu1adOme24CaE4yMzOVnp5u7zYKRIsWLbRv3z6bsV69eqlmzZoaOnToPReYpL8mxf/yyy/q3r27vVspEE2bNs12m5HDhw+rUqVKdurIfmbPni0fHx/rhOh7xeXLl1WkiO30aycnJ2VmZtqlH0KTA7t48aLN/yiPHj2qPXv2qFSpUqpYsaIdOysYkZGRWrhwoT7//HMVL15cSUlJkiRvb2+5u7vbubv8N2zYMLVq1UoVK1bUhQsXtHDhQm3atElfffWVvVsrEMWLF882f83T01OlS5e+Z+a1vfLKK2rTpo0qVaqkU6dOadSoUXJyclKXLl3s3VqBiI6OVpMmTTR27Fh16tRJO3bs0MyZMzVz5kx7t1agMjMzNXv2bPXo0eOeuuWE9NeniN966y1VrFhRQUFB2r17tyZPnqzevXvbpyEDDmvjxo2GpGyPHj162Lu1ApHTsUsyZs+ebe/WCkTv3r2NSpUqGS4uLkbZsmWNFi1aGF9//bW927Kr5s2bGwMHDrR3GwWmc+fORrly5QwXFxejfPnyRufOnY2ff/7Z3m0VqJUrVxp16tQxXF1djZo1axozZ860d0sF7quvvjIkGYcOHbJ3KwUuLS3NGDhwoFGxYkXDzc3NuO+++4zXXnvNSE9Pt0s/FsOw0201AQAAChHu0wQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCcE+7fPmy2rdvLy8vL1ksFp0/f97eLQFwUIQmAAWqZ8+eslgsio2NtRlfsWKFLBZLgfczd+5cffPNN9q+fbtOnz4tb2/vHOuuXbumiRMnqkGDBvL09JS3t7fq16+v4cOH69SpUwXcNQB7IDQBKHBubm4aP368zp07Z+9W9Msvv6hWrVqqU6eO/Pz8cgxu6enpevLJJzV27Fj17NlTW7Zs0b59+zR16lSdOXNG06ZNy9cer127lq/bB2AOoQlAgQsJCZGfn5/GjRt327qlS5cqKChIrq6uqly5siZNmpTrfd1uG4899pgmTZqkLVu2yGKx6LHHHstxG1OmTNHWrVu1YcMGDRgwQA0bNlTFihXVvHlzxcXFaezYsdbazMxMjRs3ToGBgXJ3d1f9+vW1ZMkS6/pNmzbJYrFo/fr1atSokTw8PNSkSRMdOnTIWjN69Gjdf//9+uCDDxQYGCg3NzdJ0vnz5/XCCy+obNmy8vLy0hNPPKG9e/dan7d37149/vjjKl68uLy8vNSwYUN99913uX7NAOSM0ASgwDk5OWns2LGaNm2afvvttxxrdu3apU6dOik8PFz79u3T6NGjNWLECM2ZM8f0fv5pG8uWLVPfvn0VHBys06dPa9myZTlu55NPPtGTTz6pBx54IMf1N5+dGjdunObNm6e4uDgdOHBA0dHR6tatmzZv3mzznNdee02TJk3Sd999J2dn52zf2v7zzz9r6dKlWrZsmfbs2SNJ6tixo1JSUrR69Wrt2rVLDRo0UIsWLXT27FlJUkREhCpUqKCdO3dq165diomJUdGiRU2/XgD+gV2+JhjAPatHjx7Gs88+axiGYTz88MNG7969DcMwjOXLlxs3/5PUtWtX48knn7R57pAhQ4zatWub3peZbQwcONBo3rz5bbfj5uZmDBgwwGasbdu2hqenp+Hp6WkEBwcbhmEYV69eNTw8PIzt27fb1Pbp08fo0qWLYRiGsXHjRkOSsW7dOuv6+Ph4Q5Jx5coVwzAMY9SoUUbRokWNlJQUa80333xjeHl5GVevXrXZdpUqVYz333/fMAzDKF68uDFnzpzbHguAO8eZJgB2M378eM2dO1cHDx7Mtu7gwYNq2rSpzVjTpk115MgRZWRkmNp+XmzjVqZPn649e/aod+/eunz5sqS/zg5dvnxZTz75pIoVK2Z9zJs3T7/88ovN8+vVq2f9c7ly5SRJKSkp1rFKlSqpbNmy1uW9e/fq4sWLKl26tM22jx49at324MGD9cILLygkJESxsbHZ9gng33G2dwMA7l3NmjVTaGiohg0bpp49e9q7nVuqVq2azZwj6f+CTqlSpaxjFy9elCTFx8erfPnyNvWurq42yzdfNsu6vJeZmWkd8/T0tKm/ePGiypUrp02bNmXrr0SJEpL+mgvVtWtXxcfHa/Xq1Ro1apQ+/fRTtWvXzsxhAvgHhCYAdhUbG6v7779fNWrUsBmvVauWtm3bZjO2bds2Va9eXU5OTqa2nRfbkKQuXbpo+PDh2r179y3nNUlS7dq15erqqhMnTqh58+amt29GgwYNlJSUJGdnZ1WuXPmWddWrV1f16tUVHR2tLl26aPbs2YQmII8QmgDYVd26dRUREaGpU6fajP/nP//Rgw8+qDfeeEOdO3dWQkKC3n33XU2fPt1a06JFC7Vr105RUVE5btvMNsyIjo5WfHy8WrRooVGjRunRRx9VyZIldfjwYa1evdoawIoXL65XXnlF0dHRyszM1COPPKLU1FRt27ZNXl5e6tGjRy5fnf8TEhKi4OBgtW3bVhMmTFD16tV16tQpxcfHq127dgoKCtKQIUPUoUMHBQYG6rffftPOnTvVvn37O94ngL+x96QqAPeWmyeCZzl69Kjh4uJi/P2fpCVLlhi1a9c2ihYtalSsWNGYOHGizfpKlSoZo0aNuu3+/mkbZiaCG8Zfk7xjY2ON+vXrG+7u7oarq6tRs2ZNIzo62jhx4oS1LjMz03j77beNGjVqGEWLFjXKli1rhIaGGps3bzYM4/8mgp87d876nN27dxuSjKNHjxqG8ddE8Pr162frIS0tzXj55ZcNf39/o2jRokZAQIARERFhnDhxwkhPTzfCw8ONgIAAw8XFxfD39zeioqKsk8sB/HsWwzAMO+c2AAAAh8en5wAAAEwgNAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgwv8HXPnqQCyZaP4AAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "combination_counts = category_analysis.groupby('genres').size()\n", "\n", "for genres_tuple, count in combination_counts.items():\n", " print(f\"Genres Tuple: {genres_tuple}, Count: {count}\")" ], "metadata": { "id": "726LDHbfd6k8" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "single_category = category_analysis[category_analysis['genre_lengths'] == 1]\n", "double_category = category_analysis[category_analysis['genre_lengths'] == 2]\n", "triple_category = category_analysis[category_analysis['genre_lengths'] == 3]\n", "\n", "#20 genres\n", "single_category_stats = single_category.groupby('genres').size()\n", "display(single_category_stats.mean())\n", "\n", "#20 nCr 2 = 190 / actual = 160\n", "double_category_stats = double_category.groupby('genres').size()\n", "display(double_category_stats.describe())\n", "\n", "#20 nCr 3 = 1140 / actual 468\n", "triple_category_stats = triple_category.groupby('genres').size()\n", "display(triple_category_stats.describe())\n", "\n", "category_analysis_stats = category_analysis.groupby('genres').size()" ], "metadata": { "id": "-mMEtUYChw67" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from collections import Counter\n", "\n", "double_combinations = set()\n", "unique_genres = set()\n", "\n", "for _, row in double_category.iterrows():\n", " double_combinations.add(tuple(sorted(row['genres'])))\n", " unique_genres.update(row['genres'])\n", "\n", "all_genres = []\n", "for genre_tuple in double_combinations:\n", " all_genres.extend(genre_tuple)\n", "\n", "genre_counts = Counter(all_genres)\n", "\n", "genres = list(genre_counts.keys())\n", "counts = list(genre_counts.values())\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.bar(genres, counts)\n", "\n", "plt.title('2 Genre Combinations')\n", "plt.xlabel('Genre Name')\n", "plt.ylabel('No. of Combinations')\n", "\n", "plt.xticks(rotation=90)\n", "\n", "plt.show()" ], "metadata": { "id": "gBO4cqH_f-fk", "colab": { "base_uri": "https://localhost:8080/", "height": 608 }, "outputId": "c2e60772-a38d-41c2-cfa9-28a09d4b6163" }, "execution_count": 66, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/IAAAJ8CAYAAABdr5okAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYu0lEQVR4nOzdeZxN9ePH8fedwcxgxr4vY8a+E2XPGiaRJUl20mYpkiiFVCNl19dSGEtEkhIJY9+ShJB9GWQJoTHWmc/vDz831yxmasY5J6/n43Eedc859857Zsy9532Wz3EZY4wAAAAAAIAjeFkdAAAAAAAAJB5FHgAAAAAAB6HIAwAAAADgIBR5AAAAAAAchCIPAAAAAICDUOQBAAAAAHAQijwAAAAAAA5CkQcAAAAAwEEo8gAAAAAAOAhFHgAA2M6RI0fkcrn08ccf33PdQYMGyeVy3YdUcatVq5Zq1apl2dcHADx4KPIAgP+8n376Sd27d1fJkiWVLl065c+fX08//bT27duXpNfZsWOHOnXqpKCgIPn6+ip9+vQqV66c+vbtq0OHDqVQ+vsjOjpaU6dOVa1atZQ5c2b5+PioQIEC6tSpk7Zs2WJ1PMvt3r1bgwYN0pEjR6yOAgCAXMYYY3UIAABS0lNPPaX169erZcuWKlOmjE6dOqVx48YpMjJSmzZtUqlSpe75Gp9++qleeuklZc2aVW3atFGxYsV08+ZN7dy5U1999ZXOnz+vK1euyNvb+z58R8nrypUrat68uZYsWaJHH31UjRs3VubMmXXkyBHNnTtX+/btU0REhPLmzXvfMh05ckRBQUH66KOP1KdPnwTXvXnzpm7evClfX98UyzNv3jy1bNlSK1eujHX0/fr165KkNGnSpNjXBwDgTqmsDgAAQErr3bu3Zs2a5VG0WrVqpdKlS2vo0KGaOXNmgs/fsGGDXnrpJVWrVk3fffed/P39PZYPHz5c77//fopkT0hMTIyuX7/+rwvs66+/riVLlmjkyJF69dVXPZYNHDhQI0eO/Fevn9JSpUqlVKms26ShwAMA7jdOrQcA/OdVrVo1VtkqXLiwSpYsqd9+++2ezx88eLBcLpc+//zzWCVeknx9fTVkyJBYR+N//PFHNWzYUBkyZFDatGlVs2ZNrV+/3mOd29d3HzhwQB07dlTGjBmVIUMGderUSVFRUR7rulwude/eXZ9//rlKliwpHx8fLVmyRJJ04sQJde7cWTly5JCPj49KliypKVOm3PN7O378uCZOnKjHHnssVomXJG9vb/Xp08fjaPwvv/yikJAQBQQEKH369Kpbt642bdrk8bywsDC5XC6tW7dOPXv2VLZs2ZQxY0a98MILun79ui5cuKD27dsrU6ZMypQpk/r27av4ThIcOXKkAgMD5efnp5o1a2rnzp1x/gzj+lktWLBApUqVcv9Mbv+8bjt69KhefvllFS1aVH5+fsqSJYtatmzpcQp9WFiYWrZsKUmqXbu2XC6XXC6XVq1aJSnua+TPnDmjLl26KEeOHPL19VXZsmU1bdo0j3XuHAdg0qRJKliwoHx8fPTwww/rp59+8lj31KlT6tSpk/LmzSsfHx/lypVLTz75JKf6A8ADiiPyAIAHkjFGp0+fVsmSJRNcLyoqSitWrFCtWrWSdGr5ihUrFBISogoVKmjgwIHy8vLS1KlTVadOHa1du1aPPPKIx/pPP/20goKCFBoaqq1bt+qzzz5T9uzZ9eGHH8Z63blz56p79+7KmjWrChQooNOnT6ty5cru8potWzZ9//336tKliy5duhRnQb/t+++/182bN9WuXbtEfV+7du1SjRo1FBAQoL59+yp16tSaOHGiatWqpdWrV6tSpUoe6/fo0UM5c+bU4MGDtWnTJk2aNEkZM2bUhg0blD9/fn3wwQdavHixPvroI5UqVUrt27f3eP706dP1119/qVu3brp69apGjx6tOnXq6Ndff1WOHDkSzLpu3TrNnz9fL7/8svz9/TVmzBi1aNFCERERypIli6Rb4yds2LBBzzzzjPLmzasjR45o/PjxqlWrlnbv3q20adPq0UcfVc+ePTVmzBi9+eabKl68uCS5/3u3K1euqFatWjpw4IC6d++uoKAgffnll+rYsaMuXLigV155xWP9WbNm6a+//tILL7wgl8ulYcOGqXnz5jp06JBSp04tSWrRooV27dqlHj16qECBAjpz5oyWLVumiIgIFShQIFG/OwDAf4gBAOABNGPGDCPJTJ48OcH1tm/fbiSZV199Ndayc+fOmT/++MM9Xbt2zRhjTExMjClcuLBp0KCBiYmJca8fFRVlgoKCzGOPPeaeN3DgQCPJdO7c2eO1mzVrZrJkyeIxT5Lx8vIyu3bt8pjfpUsXkytXLnP27FmP+c8884zJkCGDiYqKivf769Wrl5FkfvnllwR/Drc1bdrUpEmTxhw8eNA97/fffzf+/v7m0Ucfdc+bOnWqkRTrZ1ClShXjcrnMiy++6J538+ZNkzdvXlOzZk33vMOHDxtJxs/Pzxw/ftw9/8cffzSSTK9evdzzbv8M7yTJpEmTxhw4cMA97/bvcuzYse55cf1sNm7caCSZ6dOnu+d9+eWXRpJZuXJlrPVr1qzpkX3UqFFGkpk5c6Z73vXr102VKlVM+vTpzaVLlzy+xyxZspjz58+71/3mm2+MJLNw4UJjjDF//vmnkWQ++uijWF8bAPBg4tR6AMADZ8+ePerWrZuqVKmiDh06JLjupUuXJEnp06ePtSw4OFjZsmVzT99++60kadu2bdq/f7+effZZnTt3TmfPntXZs2d1+fJl1a1bV2vWrFFMTIzHa7344osej2vUqKFz5865v/5tNWvWVIkSJdyPjTH66quv1LhxYxlj3F/r7NmzatCggS5evKitW7fe8/uL65KBu0VHR2vp0qVq2rSpgoOD3fNz5cqlZ599VuvWrYuVt0uXLh6nvVeqVEnGGHXp0sU9z9vbWxUrVoxz5P+mTZsqT5487sePPPKIKlWqpMWLF98zb7169VSwYEH34zJlyiggIMDj6/j5+bn//8aNGzp37pwKFSqkjBkzJvhzS8jixYuVM2dOtW7d2j0vderU6tmzpyIjI7V69WqP9Vu1aqVMmTK5H9eoUUOS3Dn9/PyUJk0arVq1Sn/++ec/ygQA+G/h1HoAwAPl1KlTatSokTJkyKB58+bdc5T52wU3MjIy1rJvvvlGN27c0Pbt2z1GVt+/f78kJbiT4OLFix7lLX/+/B7Lby/7888/FRAQ4J4fFBTksd4ff/yhCxcuaNKkSZo0aVKcX+vMmTPx5rj92n/99Ve869z5taKiolS0aNFYy4oXL66YmBgdO3bM43KFu7+vDBkySJLy5csXa35cJbVw4cKx5hUpUkRz5869Z967v7Z06+d659e5cuWKQkNDNXXqVJ04ccLjOv2LFy/e82vE5ejRoypcuLC8vDyPl9w+Ff/o0aMJ5rzzdy9JPj4++vDDD/Xaa68pR44cqly5sp544gm1b99eOXPm/EcZAQDORpEHADwwLl68qJCQEF24cEFr165V7ty57/mcQoUKKVWqVLEGWJNuHR2XFGvE9NtH2z/66COVK1cuzte9+wh/fDsUzF0DwN15BPnOr9W2bdt4dxyUKVMmzvmSVKxYMUnSr7/+Gm/WfyO+7yuu+Xd/ryn1te/8Oj169NDUqVP16quvqkqVKsqQIYNcLpeeeeaZWGdNpJTE5Hz11VfVuHFjLViwQD/88IPefvtthYaGasWKFSpfvvx9yQkAsA+KPADggXD16lU1btxY+/bt0/Llyz1OT09IunTp3AO5nThxwuM07/jcPp07ICBA9erV+1e57yVbtmzy9/dXdHT0P/paISEh8vb21syZM+854F22bNmUNm1a7d27N9ayPXv2yMvLK9aR9n/r9tkNd9q3b1+yDfA2b948dejQQcOHD3fPu3r1qi5cuOCx3t2j4ickMDBQO3bsUExMjMdR+T179riX/xMFCxbUa6+9ptdee0379+9XuXLlNHz48HvePhEA8N/DNfIAgP+86OhotWrVShs3btSXX36pKlWqJOn577zzjqKjo9W2bds4T7G/+0hyhQoVVLBgQX388cdxrv/HH38k7RtIgLe3t1q0aKGvvvoqzrMG7vW18uXLp65du2rp0qUaO3ZsrOUxMTEaPny4jh8/Lm9vb9WvX1/ffPONx23PTp8+rVmzZql69eoelwEkhwULFujEiRPux5s3b9aPP/6okJCQZHl9b2/vWL+/sWPHKjo62mNeunTpJClWwY/L448/rlOnTmnOnDnueTdv3tTYsWOVPn1695kciRUVFaWrV696zCtYsKD8/f117dq1JL0WAOC/gSPyAID/vNdee03ffvutGjdurPPnz8c6gtm2bdsEn1+jRg2NGzdOPXr0UOHChdWmTRsVK1ZM169f1759+/T5558rTZo07uuVvby89NlnnykkJEQlS5ZUp06dlCdPHp04cUIrV65UQECAFi5cmGzf39ChQ7Vy5UpVqlRJXbt2VYkSJXT+/Hlt3bpVy5cv1/nz5xN8/vDhw3Xw4EH17NlT8+fP1xNPPKFMmTIpIiJCX375pfbs2aNnnnlGkvTee+9p2bJlql69ul5++WWlSpVKEydO1LVr1zRs2LBk+55uK1SokKpXr66XXnpJ165d06hRo5QlSxb17ds3WV7/iSee0IwZM5QhQwaVKFFCGzdu1PLly923p7utXLly8vb21ocffqiLFy/Kx8dHderUUfbs2WO95vPPP6+JEyeqY8eO+vnnn1WgQAHN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bdu2VcaMGd3rHDx4UMWLF49V9KwQERGhnTt3KjIyUuXLl7fl3VbWrl2rGjVqWB3jnv744w916tRJ33//fZzLo6Oj73Oi+Hl5xX+HZJfLZaushw4dUmhoqLZv367IyEg99NBDeuONN1S6dGmro8Xp+vXrOnDggCIjI1WiRAmlT5/e6kixOO2zauvWrZo6dapmz54tLy8vtW/fXs8995yKFSvmXmfnzp16+OGHLb1NpVO2qW4zxmjZsmXavn27/Pz8VKZMGT366KNWx7IPa08IgFX2799vChcubNKmTWvKly9vypcvb9KmTWuKFi3qcQqL1W7evGnmzZtnhgwZYoYMGWLmz59vbt68aXWsRNmwYYMZPny4+fbbb62O4pY5c2azZ88eY0zswaP8/PysjBanmJgYs2bNGhMVFWV1lHuKiYkx7733nkmXLp17MClfX18zYMAAq6M52p2Dc9092Wlwrjp16phZs2YlOLjRjRs3bHEdckBAgHn++efN5s2b410nKirKdqev49979tlnTbVq1cxPP/1k0qVLZ5YuXWpmzJhhihYt6h7jBYl3/fp106lTJ/fp9EgeN27cMNOmTTMnT560OkqieXl5mQYNGpi5c+ea69evx7lOZGSkpQMLO2mbConDEfkH1OOPPy5jjD7//HNlzpxZknTu3Dm1bdtWXl5eWrRokcUJpQMHDujxxx/XiRMnVLRoUUnS3r17lS9fPi1atEgFCxa0OKHzZMqUSevXr1eJEiU8bj2zbt06tWjRQqdPn7Y6ooeYmBj5+vpq165dtjwKFxcnHOmQbh2Z27t3rySpaNGice6Vx39TVFSU0qZNa3WMezLGaN68eVq5cmWctx60+tTa8uXLx7olVny2bt2awmkSJ1euXPrmm2/0yCOPKCAgQFu2bFGRIkX07bffatiwYVq3bp3VER0nQ4YM2rZtm4KCgqyOEqfmzZsrLCxMAQEBat68eYLrWv03dae0adPqt99+U2BgoNVR7ik6OlozZ85UkyZNlClTJqvjxMsJ21RjxozR888/L19fX40ZMybBdXv27HmfUtkX18g/oFavXq1Nmza5S7wkZcmSRUOHDlW1atUsTPa3nj17qmDBgh45b+9s6Nmzpy12Ntzt999/17p16+Lc6LTDG079+vU1atQoTZo0SdKt0xMjIyM1cODAWPfptAMvLy8VLlxY586ds+2Hzm0XL15UdHS0MmfOrBIlSrjnnz9/XqlSpbLN/ZkvX76sHj16aPr06e5/o97e3mrfvr3Gjh3riIJnF99++22i17XLJQCStGfPHqVOndp92u8333yjqVOnqkSJEho0aJDSpEljccJbXn31VU2cOFG1a9dWjhw5El2a75emTZu6///q1av63//+pxIlSqhKlSqSpE2bNmnXrl16+eWXLUoY2+XLl5U9e3ZJt3bs/vHHHypSpIhKly5tm50Nd1q9erU+/vhj9yWAJUqU0Ouvv26ryxiaNm2qBQsWqFevXlZHiVOGDBncfzsZMmSwOE3iPfLII/rll18cUeS9vb31wgsv6NFHH7V1kXfCNtXIkSPVpk0b+fr6auTIkfGu53K5bLFdbTWOyD+gMmfOrO+++05Vq1b1mL9+/Xo1btxY58+ftyjZ39KlS6dNmzbFusZs+/btqlatmiIjIy1KFrewsDC98MILSpMmjbJkyeKx0elyuXTo0CEL091y/PhxNWjQQMYY7d+/XxUrVtT+/fuVNWtWrVmzxr2BZycLFy7UsGHDNH78+FjXHNtJSEiIGjduHGujfcKECfr222+1ePFii5J5euGFF7R8+XKNGzfOvdNu3bp16tmzpx577DGNHz/e4oSe4tsj73K55Ovrq0KFCunRRx+1ZGyPhK7hvZPdrud9+OGH1a9fP7Vo0UKHDh1SyZIl1axZM/30009q1KiRbQYazZw5s2bOnGnLnYx3e+6555QrVy4NGTLEY/7AgQN17NgxTZkyxaJknh5++GG99957atCggZo0aaKMGTMqNDRUY8aM0bx583Tw4EGrI7rNnDlTnTp1UvPmzd3vVevXr9fXX3+tsLAwPfvssxYnvOW9997T8OHDVbduXVWoUEHp0qXzWE7Z+Gfmzp2r/v37q1evXnH+XO00MKMkVaxYUR9++KHq1q1rdZQEOWWbColk4Wn9sFC7du1MyZIlzaZNm0xMTIyJiYkxGzduNKVKlTIdOnSwOp4xxphMmTK57yF8p3Xr1tny9nN58+Y17733nomOjrY6SoJu3LhhZsyYYV5//XXz0ksvmU8//dTW10vdeRtCX19f296GMFOmTGb37t2x5v/2228mc+bMFiSKW5YsWczKlStjzV+xYoXJmjXr/Q90DwUKFHCPO5A5c2aTOXNm43K5TLp06UyOHDmMy+UyBQsWNBEREVZHdYyAgAD3WChDhw419evXN8bcem/NmzevldE8FChQwPz2229Wx0iUgIAAs2/fvljz9+3bZ4vbj96+hnvGjBlm6tSpxhhjtmzZYrJmzep+b/3iiy8sTBhbsWLFzIgRI2LNHz58uClWrJgFieJWoECBeKegoCCr43kYMmSIY67nj29cFLuNj3Lb999/b8qVK2cWLlxofv/9d3Px4kWPyS6csk0Vl5s3b5pffvnFnD9/3uootsGp9Q+oMWPGqEOHDqpSpYp7FOibN2+qSZMmGj16tMXpbnniiSf0/PPPa/LkyXrkkUckST/++KNefPFFW52meltUVJSeeeaZRB+ls0qqVKnUtm1bq2Mkml2ODt7LtWvXdPPmzVjzb9y4YekItXeLiopSjhw5Ys3Pnj27oqKiLEiUsA8++ECTJk3SZ5995h4X48CBA3rhhRf0/PPPq1q1anrmmWfUq1cvzZs3z+K0zmCMcV9WsXz5cj3xxBOSpHz58uns2bNWRvMwaNAgDR48WFOmTJGfn5/VcRLk5+en9evXxzpddf369fL19bUo1d8KFiyowMBA1a5dW7Vr19bx48dVoUIFHT16VHv27FH+/PmVNWtWq2N6OHTokBo3bhxrfpMmTfTmm29akChuhw8ftjpCon355ZcaOHCgKlWqpLZt2+rpp5+23e/9Nif9XCW5zxxq0qSJxxmZxhhbnZXllG0q6dblVaVLl1aXLl0UHR2tRx99VBs3blTatGn13XffqVatWlZHtByn1j+AjDE6duyYsmXLphMnTrivPStevLgKFSpkcbq/XbhwQR06dNDChQtj7WwICwuz3bVeffv2VebMmdWvXz+ro3hw6nW8TlO7dm2VKlVKY8eO9ZjfrVs37dixQ2vXrrUomae6desqS5Ysmj59urtgXLlyRR06dND58+e1fPlyixN6KliwoL766iuVK1fOY/4vv/ziPjV8w4YNatGihU6ePHlfszl1UJ46deooX758qlevnrp06aLdu3erUKFCWr16tTp06KAjR45YHVHSrX+XzZo10/r161WgQIFYtx600zXdQ4cO1eDBg9W1a1ePHc9TpkzR22+/bfnnwqpVq9zTjz/+qOvXrys4OFh16tRxl/u4dvBZqVChQnr99df1wgsveMyfMGGChg8fbsvbpTrBrl279Pnnn+uLL77Q8ePH9dhjj6lNmzZq2rQpY6T8C6tXr05wec2aNe9Tkv+OvHnzasGCBapYsaIWLFigbt26aeXKlZoxY4ZWrFih9evXWx3RchT5B5ATRq280/79+7Vnzx5J9tvZcKfo6Gg98cQTunLlSpz3ux4xYoQluZx6He+dDh48qKlTp+rgwYMaPXq0smfPru+//1758+dXyZIlrY4n6daRt3r16unhhx92XyMXHh6un376SUuXLrXN4Ew7d+5UgwYNdO3aNZUtW1bSrXEnfH199cMPP9jm53lb2rRptWbNGlWsWNFj/k8//aSaNWsqKipKR44cUalSpe77uBlBQUHasmWLsmTJkuCI1XYZI+O2HTt2qE2bNoqIiFDv3r01cOBASVKPHj107tw5zZo1y+KEtzz99NNauXKlnnrqqTgHu7ud2y7mzp2r0aNHe+wcf+WVV/T0009bnMzT1atXtWHDBnex37x5s27cuKFixYpp165dVsdzGz9+vF599VV17tzZPZ7P+vXrFRYWptGjR8cq+Fbp3LlzgsvtMj5CXNavX69Zs2bpyy+/1NWrV3Xp0iWrI3mYMWOGJkyYoMOHD2vjxo0KDAzUqFGjFBQUpCeffNLqeI4VHR2tBQsWuN+rSpYsqSZNmlgy1kxCfH19deDAAeXNm1fPP/+80qZNq1GjRunw4cMqW7as7f69WoEi/4AqWbKkJk+erMqVK1sd5T/jvffe0zvvvKOiRYvG2uh0uVxasWKFhemca/Xq1QoJCVG1atW0Zs0a/fbbbwoODtbQoUO1ZcsWW51OvW3bNn300Ufatm2b/Pz8VKZMGfXv3992O8yioqL0+eefe+wga9OmjS1PX27UqJFOnTqlzz77TOXLl5d062h8165dlTNnTn333XdauHCh3nzzTf36668Wp3W2q1evytvbO9ZOSKukS5dOP/zwg6pXr251lP+k69eva/369fr+++81ceJERUZG2m5n7tdff63hw4d77Bx5/fXXbVXimjVr5vH4xo0b2rlzpy5cuKA6derY6pZud9u2bZtmzpypL774QufOnbPVZWDjx4/XO++8o1dffVXvv/++du7cqeDgYIWFhWnatGlauXKl1RHjFBUVpYiICF2/ft1jvl0G53PSrZ0DAwP16aefqm7dugoKCtL48ePVqFEj7dq1S9WrV9eff/5pdUTLUeQfUHYdtbJ3794aMmSI0qVLp969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mVinLlqdddSoUeratWucdwHIkCGDXnjhBY0YMUI1atSwIF3cevbsqZUrV6p27drKkiULA9wlg7ffflvNmzfXwYMH3aOXh4eHa9asWZo3b57F6f72559/xrq7jt1s3rxZkydP1ujRoxUUFKTOnTurTZs2tr0jgCSlT59e586dU/78+bV06VL17t1bkuTr66srV65YnC62F198URUrVtSiRYuUK1cu274HOGWbysfHR61bt1br1q119OhRhYWF6eWXX9bNmze1a9cuj1voPsgo8g8oJ4xceluRIkUcce/bunXr2n6E5U6dOilVqlT67rvvbP1Bc6eKFSvqvffeU7169bR69WqNHz9e0q3RTHPkyGFxur8NGDBAly9fliS9++67euKJJ1SjRg1lyZJFc+bMsTjd35o1a6bw8HBVqlRJPXr0UNu2bTV58mRFRETYYmyMu93ON3ToUKujJKhv375auXKlxo8fr3bt2umTTz7RiRMnNHHiRNtl79ixoyIiIvT222/b8n1g+/bt+vDDD+NdXr9+fVuNOyHdup73q6++cl/Pi3+vcePGWrBggT744APNmzdPfn5+Klu2rFasWGGru660bNlSS5cutcXI5PGpWLGiKlasqJEjR2revHmaOnWq3njjDTVu3FhdunTRY489ZnXEWB577DE999xzKl++vPbt26fHH39ckrRr1y5bbmft379f8+bNU6FChayOkiCnbFPdycvLyz2IsNU7mu3GZe7eFY//tEuXLiVqPavuh9y7d28NGTJE6dKlc+99jY/V9+W924QJEzR48GC1adPGtiMsp0uXTj///LOKFStmdZRE2759u9q0aaNjx46pd+/e7vuh9+jRQ+fOndOsWbMsThi/8+fPu29NY1cbN27Uxo0bVbhwYTVu3NjqOLH06NFD06dPV+HCheP8u7LL+0D+/Pk1ffp01apVSwEBAdq6dasKFSqkGTNmaPbs2Vq8eLHVEd38/f21du1alStXzuoocfL19dXOnTvj3SA+cOCASpcubaujcoGBgfrhhx8c9d7qNJcuXdLs2bM1efJk/fzzz7bZoA8NDdWIESPUqFEjlS5dOtZgZz179rQoWcIOHz6sLl26aPXq1frjjz9stXNEki5cuKABAwbo2LFjeumll9SwYUNJ0sCBA5UmTRq99dZbFif0VKdOHfXt29ed06527NihNm3aKCIiwtbbVNeuXdP8+fM1ZcoUrVu3Tk888YQ6deqkhg0bysvLy+p4tkGRf8Dc3qt1L1Z9QNauXVtff/21MmbMmOCtpVwul1asWHEfk91bQm8sdjlt/eGHH9bIkSNVvXp1q6P8a1evXpW3t7ftR4jFv+OU94H06dNr9+7dyp8/v/Lmzav58+frkUce0eHDh1W6dGlFRkZaHdGtRIkS+vzzz2139tVtBQsW1PDhw+O9y8b8+fPVp08fHTp06P4GS8DUqVO1ZMkSTZ06VWnTprU6zn/KmjVrNHnyZH311VfKnTu3mjdvrhYtWujhhx+2OpokxXmb3NtcLpet/p1K0vHjxxUWFqawsDBFRUWpffv2eu+992x9OzIn+PrrrzVgwAC9/vrrce7QKVOmjEXJEsdO21Qvv/yyvvjiC+XLl899GUjWrFmtjmVLFPkHzOrVq93/b4zR448/rs8++0x58uTxWK9mzZr3O5rboUOHFBQUZOujmE5y51kYW7Zs0YABA/TBBx/E+UFj1ZkYCenQoYO6dOmiRx991OooCbp69arGjh0b7y2Itm7dalGy2H7//XetW7cuzpx2PXpkd2XKlNHYsWNVs2ZN1atXT+XKldPHH3+sMWPGaNiwYTp+/LjVEd2WLl2q4cOHa+LEibY8RbVHjx5atWqVfvrpJ/n6+nosu3Llih555BHVrl1bY8aMsShhbOXLl9fBgwdljFGBAgVivbfa6e/fCU6dOqWwsDBNnjxZly5d0tNPP60JEyZo+/btKlGihNXxHOf69ev6+uuvNXnyZK1du1YhISHq3LmzQkJC5O3tbXW8eK1du1YTJ07UoUOH9OWXXypPnjyaMWOGgoKCbHdAIq6DObdPB7fLwRyn8PLyUv78+VW+fPkEu8D8+fPvYyp7osg/4Pz9/bV9+3ZbDcbl7e2tkydPKnv27JKkVq1aacyYMba9dkeSYmJiFBYWpvnz5+vIkSNyuVwKDg5WixYt1K5dO0t3Stx9FsbtD5U72fmDpmnTplq8eLECAwPVqVMndejQIdaOJzto06aNli5dqqeeeko5cuSI9TO+ffqa1cLCwvTCCy8oTZo0sQblsuPRozvdLsN58+a1OMnfDh06pAIFCmj06NHy9vZWz549tXz5cjVu3FjGGN24cUMjRozQK6+8YnVUt0yZMikqKko3b95U2rRpY5XO8+fPW5TsltOnT+uhhx6St7e3unfvrqJFi0qS9uzZo08++UTR0dHaunWrrT4TBg8enOByu/z9O0Hjxo21Zs0aNWrUSG3atFHDhg3dRwrtXOSvX7+uw4cPq2DBgrY7up0lSxb5+/urQ4cOateunXv76m522pn/1VdfqV27dmrTpo1mzJih3bt3Kzg4WOPGjdPixYttdbmSJB09ejTB5VYO1Jw5c2bt27dPWbNmveflfla//0u3xnFJzHbz1KlT70Mae6PIP+DsWOS9vLx06tQp9weNHTPeyRijxo0ba/HixSpbtqyKFSsmY4x+++03/frrr2rSpIl7QEEr3HkWxr1YeSZGQv744w/NmDFD06ZN0+7du1WvXj117txZTZs2tcVpYNKt0bQXL17svguEXeXLl08vvvii+vfv74jrzGJiYvTee+9p+PDh7tPT/f399dprr+mtt96y/HuIb8fj1atX9fPPP6tQoUK2O6Vy2rRpCS7v0KHDfUoSv6NHj+qll17SDz/84B5V3+VyqUGDBvrkk08SPJ0ZzpYqVSr17NlTL730kgoXLuyeb9ciHxUVpR49erj/rvbt26fg4GD16NFDefLkUb9+/SxO6Hm0OK6CZMed+eXLl1evXr3Uvn17j+3AX375RSEhITp16pTVER1j2rRpeuaZZ+Tj46OwsLAES7Id3v+RePbaZQg4UFhYmNasWaPw8PBY1/OuWLFCTZs21fTp0y27NV3NmjX17rvvqk+fPo69djNbtmzq3bu3evfura1bt2rq1Klq37690qdPr7Zt2+rll1/22OCzQp48eeTv729phsSIiorSM888Y3kBTqy33nrLPWr97Z0k69at06BBg3T16lW9//77lua7e1/44sWLFRoaquDgYFveKlNyxoZaYGCgFi9erD///FMHDhyQMUaFCxe29e2yJOnnn3/Wb7/9JkkqWbKkbcchsLN169Zp8uTJqlChgooXL6527drpmWeesTpWvPr376/t27dr1apVHgOd1atXT4MGDbJFkV+5cqXVEZJs7969cV5SlyFDBl24cOH+B0qEGTNmaMKECTp8+LA2btyowMBAjRo1SkFBQXryyScty9WhQwddunRJ165dU/PmzS3LgRRwn+5XD5tKnz69OXTokNUxPHh5eZkzZ864H9sx450ee+wxExoaGu/y999/39SvX/8+JorNy8vLnD592tIM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U6xcuVKlnp+fD4VCgc8//xwaGo8mDH7zzTcvnXno0KGQy+W4e/cuxo4d+9LvR0REJAWcWk9ERKQGvvzyS7S0tMDZ2RnJycm4cuUKrl69ij179qCkpEQ52uzp6YnRo0fD398fx48fx82bN3H27FksW7YMeXl5L5Vh7ty5qKqqwowZM5Cbm4uysjJ8//33CAoKanVG/NOsW7cOsbGxaGhoUNbs7Ozw8OFDbNmyBTdu3MDu3bsRHR39UnkBwN7eHoGBgZg1axZSUlJQXl6OnJwcrF27Ft99991Lvz8REZEY2MgTERGpAVtbW1y8eBGenp5YunQphgwZAmdnZ2zZsgWLFy/G6tWrATyaVn7kyBG4uLggKCgI9vb2CAgIwK1bt2Bubv5SGXr16oXs7GzI5XJ4eXnByckJ4eHhMDExUY6iPw93d3e4u7ujpaVFWRsyZAg2btyI9evXw9HREV9//TXWrl37Unn/EBcXh1mzZmHRokXo378//P39kZubiz59+ryS9yciIupoMkEQBLFDEBEREREREdHz4Yg8ERERERERkRphI09ERERERESkRtjIExEREREREakRNvJEREREREREaoSNPBEREREREZEaYSNPREREREREpEbYyBMRERERERGpETbyRERERERERGqEjTwRERERERGRGmEjT0RERERERKRG2MgTERERERERqZH/A8mevuEeGCbbAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "from collections import Counter\n", "\n", "triple_combinations = set()\n", "unique_genres = set()\n", "\n", "for _, row in triple_category.iterrows():\n", " triple_combinations.add(tuple(sorted(row['genres'])))\n", " unique_genres.update(row['genres'])\n", "\n", "all_genres = []\n", "for genre_tuple in triple_combinations:\n", " all_genres.extend(genre_tuple)\n", "\n", "genre_counts = Counter(all_genres)\n", "\n", "genres = list(genre_counts.keys())\n", "counts = list(genre_counts.values())\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.bar(genres, counts)\n", "\n", "plt.title('3 Genre Combinations')\n", "plt.xlabel('Genre Name')\n", "plt.ylabel('No. of Combinations')\n", "\n", "plt.xticks(rotation=90)\n", "\n", "plt.show()" ], "metadata": { "id": "am3AlYNA7-cv", "colab": { "base_uri": "https://localhost:8080/", "height": 611 }, "outputId": "e1309d35-e520-49ea-b90b-cf68da125542" }, "execution_count": 67, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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5dPcuXO1YcMGjR49+p4G/bvV4cOHVbNmTb300ksqWrSovLy8NH/+fJ0/f975ewEAPDoo7QCAh87LL7+syZMna/z48bp48aL8/PxUtmxZDRs2TA0bNryn53jjjTdUsWJFjRo1St9//73CwsKUKlUqFShQQG3bttUbb7zhMlJ5tWrVtGnTJg0aNEiff/65Ll++rGzZsql8+fLq1KlTin5/gYGB2rp1qz766CPNmzdPX375pTJlyqRixYolmOc9MWnSpNGSJUsUEhKiadOmadCgQYqKilKOHDlUo0YNzZw503lbQLFixbRu3Tr16dNHQ4YMUXx8vMqXL69vvvkmwRztKaFNmzby8PDQ6NGjdeHCBT311FP6/PPPlT179hR5/jFjxsjT01MzZ87UtWvXVKlSJa1YsUK1a9d22S5btmyaMGGChgwZog4dOiguLk6hoaGJlnZfX1+tXr1avXv31rRp0xQZGanHH39cU6dOVbt27ZKdMXfu3GrRooVWrlypGTNmyMvLS4ULF9acOXPUtGnTf/utAwDclMOk9CgwAAAAAAAgRXBPOwAAAAAANkVpBwAAAADApijtAAAAAADYFKUdAAAAAACborQDAAAAAGBTlHYAAAAAAGyKedolxcfH69y5c/Lz85PD4bA6DgAAAADgIWeM0T///KMcOXLIwyPp8+mUdknnzp1T7ty5rY4BAAAAAHjEnDlzRrly5UpyPaVdkp+fn6QbPyx/f3+L0wAAAAAAHnaRkZHKnTu3s48mhdIuOS+J9/f3p7QDAAAAAB6Yu92izUB0AAAAAADYFKUdAAAAAACborQDAAAAAGBTlHYAAAAAAGyK0g4AAAAAgE1R2gEAAAAAsClKOwAAAAAANkVpBwAAAADApijtAAAAAADYFKUdAAAAAACborQDAAAAAGBTlHYAAAAAAGyK0g4AAAAAgE1R2gEAAAAAsClKOwAAAAAANkVpBwAAAADApijtAAAAAADYFKUdAAAAAACborQDAAAAAGBTXlYHwMMrX++frY4gSTo5tL7VEQAAAADgX+FMOwAAAAAANkVpBwAAAADApijtAAAAAADYFKUdAAAAAACborQDAAAAAGBTlHYAAAAAAGyK0g4AAAAAgE1R2gEAAAAAsClKOwAAAAAANkVpBwAAAADApijtAAAAAADYFKUdAAAAAACborQDAAAAAGBTlHYA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wzx16lQdO3ZMY8aMUdasWbVkyRLlyZNHxYoVsySTu97PKt24V3DMmDEuJfitt97SSy+9ZHEyV+4yIrN04++9Vq1aevLJJ533365cuVLbtm3TsmXLbDMg5d69e1W7dm1FR0erVKlSkm7cz+rj46NffvnFsr+npOzZs0ctW7bU6dOn1bNnT+d7fteuXXXx4kXNmjXLsmxBQUHavn27MmXKdMfZOOw2pk2aNGm0du1alStXzmX5tm3bVLVqVUVFRenkyZMqXry4re5xdgdxcXFasGCB87W1WLFiatiwoS3GB7jVkSNHdPDgQUn2PAh604wZMzRhwgSdOHFCmzZtUt68eTV69GgFBQXphRdesDpeojZs2KBZs2bp+++/17Vr12y1P20lSvsjIG3atPrll19UuXJlq6Pc1eDBg/Xhhx/q8ccfT3CAweFwaNWqVRamc5U3b1599dVXqlmzpoKCgjR+/HjVr19f+/btU+XKlfX3339bHTGB69eva8OGDVqyZIkmTpyoy5cv26oMzZ8/XyNGjHApQu+++67t3lgaN27s8nFMTIz27t2rS5cuqUaNGrabnmTNmjWqW7euKlWqpLVr1+rAgQPKnz+/hg4dqu3bt1t++Sbur2LFimny5MmqUKGC1VHuateuXfr000+1a9cu+fr6qmTJkurTp4/tDjhERUVp5syZLjvtLVu2tP0taLe6du2aPD09Exwcx93Vr19fYWFh+vrrr1WmTBlJN86yv/baa8qWLZt++uknLVq0SO+//75+++03i9PeEBUVpdOnT+v69esuy+00GJk7TafmDsaPH68PP/xQ3bt318cff6y9e/cqf/78CgkJ0bRp0xQaGmp1xETt2rVL33zzjb799ltdvHjRVrdHWYnS/ggoXLiw5syZY6sX5qRkyJBBo0aNUrt27ayOclcDBgzQ6NGjlT17dkVFRenw4cPy9vbWlClT9NVXX2nTpk1WR9T169e1efNmhYaGOi+Tz507t6pUqaIqVaqoatWqypMnj9UxHwrx8fF64403VKBAAfXq1cvqOC4qVqyoZs2aqWfPni5zoG/dulVNmjTR77//bnVEt3Pp0iXNnTtXx48f1zvvvKOMGTNq586dCgwMVM6cOa2O58IdRmQG3ElYWJhat26tlStXulwiXbNmTc2YMUOBgYEKDQ1VTEyMnnvuOUuz/vnnnwoODtaS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c+jQIbNu3TqzZs0al4eduMN7Va9evUzevHnNqlWrTGxsrImNjTUrV640efPmNW+//bbV8Vw89thjZuXKlcYYYzZu3Gh8fX3NxIkTTYMGDUzjxo0tTmeMh4fHPT1wA6X9IbZy5UpTpEgRExERkWDdpUuXTNGiRc3atWstSJa4mJgYM3DgQHPmzBmro9zVtWvXzKxZs0ytWrVMmjRpTLNmzczSpUtNfHy81dHc1pNPPmkGDhyYYHn//v3NE088YUGipOXJk8cMHTrU6hj3zN/f31kshg4dap577jljjDHr1683uXLlsjJaAtHR0ebMmTPm1KlTLg87iYuLM3Xq1DH58+c3zz//vGncuLHLw26KFStmPv744wTLBw0aZIoXL25BosSlT5/eHD9+3BhzoxivWrXKGGPM0aNHja+vr5XRXKRJk8b5bzJbtmxmx44dxpgbJcPf39/KaA+Nq1evmoiICJeHXVy/ft3UqFHDHD582Ooo92TTpk0mKCjIeHh4GIfD4fKwWyFyh/eq6Oho89JLLxmHw2FSpUplUqVKZTw9PU1wcLBtTi7d5Ovr63yt6tWrl2ndurUxxpi9e/eazJkzWxnNGGOMw+Ew+fLlM/379zcLFixI8oEbuDz+ITZ69Gi99tpriY7GGhAQoE6dOmnkyJF65plnLEiXkJeXl4YPH+4WI917e3urRYsWatGihU6dOqWQkBC9+eabio2N1b59+1ymAsK96devn5o0aaJjx445RztduXKlZs2apblz51qcztXff/+dYORYOzPGOC/hX7FihZ5//nlJN0Zr/uuvv6yM5nT48GF16NBBGzdudFlubDJH9626deum0NBQVa9eXZkyZbLt4HM3ucvIvMWLF9fu3bsVFBSk8uXLa/jw4UqdOrUmTZqk/PnzWx3PKVeuXPrjjz+UJ08eFShQQMuWLdMTTzyhbdu22WYQsludP39e77zzjlauXKkLFy4kuK3LLn9bV65c0Xvvvac5c+bo4sWLCdbbJWeqVKlcptSyu9dff13lypXTzz//rOzZs9v69cod3qtSp06t7777ToMGDdLu3bvl6+urEiVK2PJS83Tp0unixYvKkyePli1bpp49e0q6MS/61atXLU4nbd26VZMnT9aYMWMUFBSk9u3bq2XLlraeRchKlPaH2O7duzVs2LAk1z/33HO2uk9QkmrWrOk2I93f5OHh4Rw0yS47Fe6oQYMGWrBggT755BPNnTtXvr6+KlWqlFatWmW70cSbNWumZcuW2Wbk3bspV66cBg8erFq1amnNmjUaP368pBsjzAYGBlqc7obg4GB5eXnpp59+sv2O5bRp0/TDDz847xO0O3cZmbdv3766cuWKJOmjjz7S888/r2eeeUaZMmXSd999Z3G6/2ncuLFWrlyp8uXLq2vXrmrVqpUmT56s06dP22Z8gFu1a9dOp0+fVr9+/Wz9t9WrVy+FhoZq/Pjxat26tb744gudPXtWEydO1NChQ62O5+Lm79xuuRJz5MgRzZ07VwULFrQ6yl25w3vVTY899pgee+wxq2Pc0bPPPqtXX31VZcqU0eHDh1WvXj1J0r59+2yxn12uXDmVK1dOo0aN0ty5czV16lS99957atCggTp06KBnn33W6oi24jC3H3LFQ8PHx0d79+5N8oX66NGjKlGihC2Ott00YcIEDRw4UC1btrT1SPfR0dGaN2+epkyZovXr1+v5559XcHCw6tSpIw8PD6vjPRQiIyM1e/ZsTZ48WTt27LDVAZEhQ4Zo5MiRql+/vkqUKJFggJ9u3bpZlCxxu3fvVsuWLXXmzBn17NnTOd90165ddfHiRc2aNcvihFLatGm1Y8cOFS5c2Oood5U3b1798ssvts8aGRl5T9vZeW7s8PBw59RVdrVp0yZt2rRJhQoVUoMGDayOk4Cfn5/WrVun0qVLWx3ljvLkyaPp06erWrVq8vf3186dO1WwYEHNmDFDs2fP1uLFi62O6NS1a1dNnz5dhQoVSnRfJbGBf61So0YN9erVS3Xq1LE6yl3t2bNHLVu21OnTp231XtWzZ08NGjRIadOmdZ6tToqdfveXLl1S3759debMGb3xxhvOfwP9+/dX6tSp9cEHH1icMKETJ06oQ4cOWrNmjf7880/bnbSxEqX9IVagQAGNGDEiyVGZ582bp3feeUfHjx9/sMHu4E6F1y6XyL755pv69ttvlTt3buelPJkzZ7Y61kNj7dq1mjx5sn744QflyJFDTZo0UdOmTfXkk09aHc0pselebnI4HLb6m7qTa9euydPT0xajCj/55JMaNWqUKleubHWUu5o6daqWLl2qqVOnJjpXs13cvArobuzwuor7p2jRopo5c6atrqpITLp06bR//37lyZNHuXLl0rx58/TUU0/pxIkT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KMgsX77cGOP6dzVt2jRTpEgRK6PhX+BMO2xhz549Gj58eJLr69aty4B5D7m0adOqffv2at++vQ4dOuQ8i9G7d289++yzWrhwodURnf78889E7726cuWKbcZeuFVMTIwWLlyoqVOnatmyZSpZsqS6d++uV155xXmv2Pz589W+ffsHPs+0ccM7tLp27ap//vlH+/btU5EiRSRJ+/fvV9u2bdWtWzfNnj3b4oQ33H7W6tq1a3r99dcTTE9ll0Ezy5Urp2vXril//vy2vPf6piFDhuj555/X0qVLEx000U5TPkk3Xpfee+89zZkzRxcvXkyw3upLTx0OR4LXTTu+jt4qPDw80SkfCxcubJt/pzeNGzdOX331lRo1auQyr3y5cuX0zjvvWJjsf24942ruMGimlYwxateunby9vSXZ//VUkl577TW99dZbmjJlihwOh86dO6dNmzbpnXfeUb9+/ayOh2SitMMWwsPD7ziYR2BgoP7+++8HmAhWevzxxzV8+HANGTJEixYt0pQpU6yO5KJcuXL6+eef1bVrV0n/28H8+uuvVbFiRSujJSp79uyKi4vTK6+8oq1btyY6X3P16tWVPn36B55Nsv8O+u2WLl2qFStWOAu7dGNarS+++ELPPfechclcBQQEuHzcqlUri5LcmxYtWujs2bP65JNPEh2Izi6GDBmiX375xTm46+0D0dlNr169FBoaqvHjx6t169b64osvdPbsWU2cONGlxFnFHctQqVKl9Pnnnyc4mfD555+rVKlSFqVK3IkTJxK9dcfb21tXrlyxIFFCt49Z4unpqQoVKtjqfvHbbzOx8+vpiRMnFBQUpN69eys+Pl41a9ZUVFSUqlSpIm9vb73zzjvO/Re4D0o7bCEuLu6Oo297enoqNjb2ASaCHXh6eqpRo0Zq1KiR1VFcfPLJJ6pbt67279+v2NhYjRkzRvv379fGjRuTNbjagzJq1Cg1a9YswdSPt0qfPr1OnDjxAFP9z2OPPXbXsmOns1fx8fGJDt6XKlWqBNN/WcndZrDYuHGjNm3aZLvSc7sRI0ZoypQpateundVR7smiRYs0ffp0VatWTcHBwXrmmWdUsGBB5c2bVzNnzlTLli0tzedOZeim4cOHq379+lqxYoXzQO2mTZt05swZy0fkvl1QUJB27dqVYHyApUuXuhx4xJ250+tpgQIFlDdvXlWv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xZ49e7Bz504cOHBA/WfCw8Nx/vx5JCcno7CwENOmTYOPjw9u3rz5zNxERERaRyAiIiKtcuHCBQGAkJqaqlG3tLQU5HK5IJfLhffee08QBEHIysoSunbtKjQ2Nmrca29vL+zcuVMQBEFYuXKlIJPJhJqaGvX1ZcuWCW+88Yb6tZubmzB06FCN91i7dq3g7e2tUSsvLxcACNevX281e0ZGhgBAqKqqEmJiYoTu3bsL1dXVgiAIgrm5uRAfH9/m596/f79gaWmpfh0fHy8AEEpKStS1d999V5DJZEJtba26NnHiROHdd98VBEEQvv/+e8HQ0FC4c+eOxnt7enoKy5cvb/PvJiIi0lYcaSciItIRubm5+O677zBo0CD1tHOFQoG6ujpYWlrC1NRU/U9ZWRlKS0vVf9bGxgZmZmbq19bW1rh3757G+w8fPlzjtUKhQEZGhsb7DhgwAAA03rstoaGhsLS0xMaNG1u9furUKXh6eqJ3794wMzPDrFmzcP/+fY1N9mQyGezt7dWvraysYGNjA1NTU43ab5+lqKgISqUSjo6OGrnPnDnTrsxERETahhvRERERaRkHBwdIJBJcv35do25nZwcAkEql6lpdXR2sra1bXbNtYWGh/tnY2FjjmkQigUql0qg9ORW/rq4Ofn5+rTbd1tbWz/wcRkZGiI6Oxt///neEh4drXLt9+zYmT56MefPmITo6Gt27d0d2djZCQ0PR1NQEmUzWZu6nfZa6ujoYGhqioKAAhoaGGvf9vtEnIiLSFWzaiYiItIylpSUmTJiAbdu2YcGCBW2uaweAYcOGoaKiAkZGRrCxsXmhOYYNG4aDBw/CxsYGRkZ/7JFh2rRp+Pjjj7F69WqNekFBAVQqFT799FMYGDye+Pf1118/d+ahQ4dCqVTi3r17GDt27HO/HxERkdg4PZ6IiEgLffHFF2huboarqytSUlJw7do1XL9+HXv37kVxcbF6FNnLywujR49GQEAATpw4gdu3b+PcuXNYsWIF8vPznyvD/PnzUVlZiZkzZyIvLw+lpaX49ttvERwc3OIM9qfZsGED4uLiUF9fr645ODjg0aNH2Lp1K27duoU9e/YgJibmufICgKOjI4KCgjB79mykpqairKwMubm5WL9+Pb755pvnfn8iIqLOxqadiIhIC9nb2+PSpUvw8vLC8uXLMWTIELi6umLr1q1YunQp1q5dC+Dx1PCjR49i3LhxCA4OhqOjIwIDA/H999/DysrquTL06tULOTk5UCqV8Pb2houLCyIiImBhYaEeHW8PDw8PeHh4oLm5WV0bMmQINm/ejI0bN8LZ2RlfffUV1q9f/1x5fxMfH4/Zs2djyZIl6N+/PwICApCXl4fXX3/9hbw/ERFRZ5IIgiCIHYKIiIiIiIiIWuJIOxEREREREZGWYtNOREREREREpKXYtBMRERERERFpKTbtRERERERERFqKTTsRERERERGRlmLTTkRERERERKSl2LQTERERERERaSk27URERERERERaik07ERERERERkZZi005ERERERESkpdi0ExEREREREWmp/wdeMxlPTWluOQAAAABJRU5ErkJggg==\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "##balancing single genres\n", "\n", "general_mean = single_category.groupby('genres').size()\n", "print(general_mean)\n", "\n", "sc_mean = int(single_category_stats.mean())\n", "\n", "balanced_df= pd.DataFrame()\n", "\n", "for genre in unique_genres:\n", " single_genre_df = single_category[single_category['genres'].apply(lambda x: genre in x)]\n", "\n", " count1 = len(single_genre_df)\n", "\n", " if count1 > sc_mean:\n", " # Undersample\n", " sampled_df = single_genre_df.sample(n=sc_mean, random_state=RANDOM_SEED)\n", " elif count1 < sc_mean:\n", " # Oversample\n", " sampled_df = single_genre_df.sample(n=sc_mean, replace=True, random_state=RANDOM_SEED)\n", " else:\n", " sampled_df = single_genre_df\n", "\n", " balanced_df = pd.concat([balanced_df, sampled_df], ignore_index=True)" ], "metadata": { "id": "6c4HRBY_TfzC", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "dfd9bc41-11b0-4e30-8cdb-c16ae9cce60f" }, "execution_count": 68, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "genres\n", "(Action,) 155\n", "(Adventure,) 81\n", "(Animation,) 111\n", "(Comedy,) 1702\n", "(Crime,) 101\n", "(Documentary,) 1294\n", "(Drama,) 2845\n", "(Family,) 37\n", "(Fantasy,) 42\n", "(Foreign,) 3\n", "(History,) 8\n", "(Horror,) 675\n", "(Music,) 61\n", "(Mystery,) 46\n", "(Romance,) 54\n", "(Science Fiction,) 139\n", "(TV Movie,) 3\n", "(Thriller,) 258\n", "(War,) 23\n", "(Western,) 252\n", "dtype: int64\n" ] } ] }, { "cell_type": "code", "source": [ "#Balancing Double-combinations\n", "\n", "dc_mean = int(double_category_stats.mean())\n", "\n", "for genre_combinations in double_combinations:\n", "\n", " double_genre_df = double_category[double_category['genres'].apply(lambda x: all(genre in x for genre in genre_combinations))]\n", "\n", " count = len(double_genre_df)\n", "\n", " if count > dc_mean:\n", " # Undersample\n", " sampled_df = double_genre_df.sample(n=dc_mean, random_state=RANDOM_SEED)\n", " elif count < dc_mean:\n", " # Oversample\n", " sampled_df = double_genre_df.sample(n=dc_mean, replace=True, random_state=RANDOM_SEED)\n", " else:\n", " sampled_df = double_genre_df\n", "\n", " balanced_df = pd.concat([balanced_df, sampled_df], ignore_index=True)" ], "metadata": { "id": "OYvSbbOH19NN" }, "execution_count": 69, "outputs": [] }, { "cell_type": "code", "source": [ "tc_mean = int(triple_category_stats.mean())\n", "\n", "for genre_combinations in triple_combinations:\n", "\n", " triple_genre_df = triple_category[triple_category['genres'].apply(lambda x: all(genre in x for genre in genre_combinations))]\n", "\n", " count = len(triple_genre_df)\n", "\n", " if count > tc_mean:\n", " # Undersample\n", " sampled_df = triple_genre_df.sample(n=tc_mean, random_state=RANDOM_SEED)\n", " elif count < tc_mean:\n", " # Oversample\n", " sampled_df = triple_genre_df.sample(n=tc_mean, replace=True, random_state=RANDOM_SEED)\n", " else:\n", " sampled_df = triple_genre_df\n", "\n", " balanced_df = pd.concat([balanced_df, sampled_df], ignore_index=True)" ], "metadata": { "id": "R8obi3NT7DiT" }, "execution_count": 70, "outputs": [] }, { "cell_type": "code", "source": [ "# Exploding the list_column\n", "exploded_df = balanced_df.explode('genres')\n", "\n", "# Group by the exploded column and count occurrences\n", "grouped = exploded_df.groupby('genres').size()\n", "print(grouped.index)\n", "\n", "y_pos = np.arange(len(grouped))\n", "\n", "# Calculate the mean and median (using numpy)\n", "mean_occurrences = np.mean(grouped)\n", "median_occurrences = np.median(grouped)\n", "\n", "# Create the bar chart\n", "plt.bar(y_pos, grouped, align='center', alpha=0.5)\n", "\n", "# Adding the labels and title\n", "plt.xticks(y_pos, grouped.index, rotation='vertical')\n", "plt.ylabel('No. of entries')\n", "plt.title('Movie Genre Distribution')\n", "\n", "# Add the mean and median lines (red and green respectively)\n", "plt.axhline(y=mean_occurrences, color='r', linestyle='-', label=f'Mean: {mean_occurrences:.2f}')\n", "plt.axhline(y=median_occurrences, color='g', linestyle='--', label=f'Median: {median_occurrences:.2f}')\n", "\n", "# Show illustration\n", "plt.legend()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 628 }, "id": "-DTwfZTQ8umI", "outputId": "a05e91f3-ee1c-47a2-c8d6-f95f3369f044" }, "execution_count": 71, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Index(['Action', 'Adventure', 'Animation', 'Comedy', 'Crime', 'Documentary',\n", " 'Drama', 'Family', 'Fantasy', 'Foreign', 'History', 'Horror', 'Music',\n", " 'Mystery', 'Romance', 'Science Fiction', 'TV Movie', 'Thriller', 'War',\n", " 'Western'],\n", " dtype='object', name='genres')\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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OzuUKVMGP/74I16+fCnti4yMhKWlpZQMAUBAQAB0dHRw5swZqUzdunVhYGAglQkMDMTNmzfx+vXrbI+ZlJSE+Ph4uYWIiIj+uwp1QtSoUSOsXLkShw4dwpQpU3D06FEEBQUhLS0NABAbGws7Ozu5x+jp6aF48eKIjY2Vytjb28uVyVjPKPOpsLAwWFhYSIuzs7O6nxoREREVIgV6yexz2rZtK/1dsWJFVKpUCZ6enjhy5Ajq16+vseOOGjUKgwcPltbj4+OZFBEREf2HFeoWok95eHjAxsYGd+7cAQA4ODjg2bNncmVSU1Px6tUrqd+Rg4MDnj59KlcmYz2nvkmGhoYwNzeXW4iIiOi/q0glRP/++y9evnwJR0dHAICPjw/evHmDCxcuSGUOHz6M9PR01KxZUypz7NgxpKSkSGUOHDiAMmXKwMrKKn+fABERERVKBZoQJSQkICoqClFRUQCA6OhoREVFISYmBgkJCRg2bBhOnz6N+/fv49ChQ2jevDlKliyJwMBAAEC5cuXQqFEj9OjRA2fPnsXJkyfRt29ftG3bFk5OTgCA9u3bw8DAAN26dcO1a9ewfv16zJkzR+6SGBEREWm3Ak2Izp8/jypVqqBKlSoAgMGDB6NKlSoYO3YsdHV1cfnyZTRr1gylS5dGt27dUK1aNRw/flxuLqI1a9agbNmyqF+/Pho3bow6depgyZIl0n4LCwvs378f0dHRqFatGoYMGYKxY8dyyD0RERFJCrRTtZ+fH4QQOe7ft2/fZ2MUL15cmoQxJ5UqVcLx48cVrh8RERFphyLVh4iIiIhIE5gQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWK9Bbd5DmzTpwSy1xBjUorZY4REREhRFbiIiIiEjrsYWIiIgKBFuwqTBhCxERERFpPbYQERERFQJsMStYbCEiIiIirceEiIiIiLQeL5kREeUDdV0OAXhJhEgT2EJEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1OA8RERH95/A2GKQothARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9zkOkiHfvAF1dtYfVe5+onkDv3uVr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f423b98iNjYWBgYGsLS0lHuMvb09YmNjAQCxsbFyyVDG/ox9OQkLC4OFhYW0ODs7q/eJERERUaFSqC+ZBQUFSX9XqlQJNWvWhKurKzZs2ABjY2ONHXfUqFEYPHiwtB4fH8+kiIiI6D+sULcQfcrS0hKlS5fGnTt34ODggOTkZLx580auzNOnT6U+Rw4ODllGnWWsZ9cvKYOhoSHMzc3lFiIiIvrvKlIJUUJCAu7evQtHR0dUq1YN+vr6OHTokLT/5s2biImJgY+PDwDAx8cHV65cwbNnz6QyBw4cgLm5Oby8vPK9/kRERFQ4FepLZkOHDkXTpk3h6uqKx48fY9y4cdDV1UW7du1gYWGBbt26YfDgwShevDjMzc3Rr18/+Pj44KuvvgIANGzYEF5eXujYsSOmTp2K2NhYjB49Gn369IGhoWEBPzsiIiIqLAp1QvTvv/+iXbt2ePnyJWxtbVGnTh2cPn0atra2AIBZs2ZBR0cHrVu3RlJSEgIDA7Fw4ULp8bq6uti5cyd+/PFH+Pj4oFixYujcuTMmTJhQUE+JiIiICqFCnRCtW7cu1/1GRkZYsGABFixYkGMZV1dX7N69W91VIyIiov+QItWHiIiIiEgTmBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqvUCdEYWFh+PLLL2FmZgY7Ozu0aNECN2/elCvj5+cHmUwmt/Tq1UuuTExMDJo0aQITExPY2dlh2LBhSE1Nzc+nQkRERIWYXkFXIDdHjx5Fnz598OWXXyI1NRU//fQTGjZsiOvXr6NYsWJSuR49emDChAnSuomJifR3WloamjRpAgcHB5w6dQpPnjxBp06doK+vj0mTJuXr8yEiIqLCqVAnRHv37pVbDw8Ph52dHS5cuIC6detK201MTODg4JBtjP379+P69es4ePAg7O3tUblyZUycOBEjRoxAaGgoDAwMNPociIiIqPAr1JfMPhUXFwcAKF68uNz2NWvWwMbGBhUqVMCoUaOQmJgo7YuMjETFihVhb28vbQsMDER8fDyuXbuW7XGSkpIQHx8vtxAREdF/V6FuIcosPT0dAwcORO3atVGhQgVpe/v27eHq6gonJydcvnwZI0aMwM2bN7FlyxYAQGxsrFwyBEBaj42NzfZYYWFhGD9+vIaeCRERERU2RSYh6tOnD65evYoTJ07Ibe/Zs6f0d8WKFeHo6Ij69evj7t278PT0VOpYo0aNwuDBg6X1+Ph4ODs7K1dxIiIiKvSKxCWzvn37YufOnYiIiMAXX3yRa9maNWsCAO7cuQMAcHBwwNOnT+XKZKzn1O/I0NAQ5ubmcgsRERH9dxXqhEgIgb59+2Lr1q04fPgw3N3dP/uYqKgoAICjoyMAwMfHB1euXMGzZ8+kMgcOHIC5uTm8vLw0Um8iIiIqWgr1JbM+ffpg7dq1+Ouvv2BmZib1+bGwsICxsTHu3r2LtWvXonHjxrC2tsbly5cxaNAg1K1bF5UqVQIANGzYEF5eXujYsSOmTp2K2NhYjB49Gn369IGhoWFBPj0iIiIqJAp1C9GiRYsQFxcHPz8/ODo6Ssv69esBAAYGBjh48CAaNmyIsmXLYsiQIWjdujV27NghxdDV1cXOnTuhq6sLHx8fdOjQAZ06dZKbt4iIiIi0W6FuIRJC5Lrf2dkZR48e/WwcV1dX7N69W13VIiIiov+YQt1CRERERJQfmBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1mNCRERERFqPCRERERFpPSZEREREpPWYEBEREZHWY0JEREREWo8JEREREWk9JkRERESk9ZgQERERkdZjQkRERERajwkRERERaT0mRERERKT1mBARERGR1tOqhGjB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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "df = balanced_df" ], "metadata": { "id": "ABM7lXP2kaU5" }, "execution_count": 72, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Data Normalization" ], "metadata": { "id": "dbdr0WMATGxg" } }, { "cell_type": "code", "source": [ "normalized_df = df.copy()" ], "metadata": { "id": "wLSm3rfOmlOG" }, "execution_count": 73, "outputs": [] }, { "cell_type": "markdown", "source": [ "Drop the 'genre_lengths' column (used for data balancing)" ], "metadata": { "id": "nniSshz5m0nt" } }, { "cell_type": "code", "source": [ "normalized_df.drop('genre_lengths', axis=1, inplace=True)" ], "metadata": { "id": "2cZ6GiCRm5EW" }, "execution_count": 74, "outputs": [] }, { "cell_type": "code", "source": [ "import torch" ], "metadata": { "id": "LL-aJtSloCxF" }, "execution_count": 75, "outputs": [] }, { "cell_type": "code", "source": [ "unique_genres = set(genre for sublist in df['genres'] for genre in sublist)\n", "unique_genres = sorted(list(unique_genres))\n", "\n", "genre_to_index = {genre: i for i, genre in enumerate(unique_genres)}\n", "\n", "import numpy as np\n", "\n", "def encode_genres(genres, genre_to_index):\n", " encoding = np.zeros(len(genre_to_index), dtype=int)\n", " for genre in genres:\n", " encoding[genre_to_index[genre]] = 1\n", " return encoding\n", "\n", "# Apply encoding to each row\n", "normalized_df['genres'] = normalized_df['genres'].apply(lambda x: encode_genres(x, genre_to_index))\n" ], "metadata": { "id": "ScuklEfAn_ad" }, "execution_count": 76, "outputs": [] }, { "cell_type": "markdown", "source": [ "Convert the keyword tuples to text strings" ], "metadata": { "id": "CFRkQBbZrW29" } }, { "cell_type": "code", "source": [ "normalized_df['keywords'] = normalized_df['keywords'].apply(lambda x: ', '.join(map(str, x)))" ], "metadata": { "id": "0okiGBSrrYjb" }, "execution_count": 77, "outputs": [] }, { "cell_type": "code", "source": [ "df = normalized_df" ], "metadata": { "id": "0UFbquTlsZjH" }, "execution_count": 78, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Dataset Splitting" ], "metadata": { "id": "UsvEz0a81eey" } }, { "cell_type": "code", "source": [ "from datasets import DatasetDict, Dataset\n", "from sklearn.model_selection import train_test_split\n", "\n", "df['labels'] = df['genres']\n", "df.drop('genres', axis=1, inplace=True)\n", "dataset = Dataset.from_pandas(df)\n", "# Split the dataset into training and testing sets\n", "split_dataset = dataset.train_test_split(test_size=0.2, seed=RANDOM_SEED)" ], "metadata": { "id": "lAFvmm-H8OYi" }, "execution_count": 79, "outputs": [] }, { "cell_type": "code", "source": [ "from transformers import DistilBertTokenizer\n", "\n", "\n", "# Initialize the tokenizer\n", "tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')\n", "\n", "# Function to tokenize the text data\n", "def tokenize_function(examples):\n", " return tokenizer(examples['keywords'], padding='max_length', truncation=True, max_length=512)\n", "\n", "# Apply the tokenization to the dataset\n", "tokenized_datasets = split_dataset.map(tokenize_function, batched=True)" ], "metadata": { "id": "HDPcn2hc90r-", "colab": { "base_uri": "https://localhost:8080/", "referenced_widgets": [ "ac5a633935c04013a0a850fe39975116", "61e818edc44c44e8a3d8303eee8ff91c", "672ea5d57f04454a8b96ab13232d5237", "49dbac60cb814000a5aa59985466fd81", "949c68abb0784a5b911a5e03d1f429ad", "e4ffaccaa9184c83837e36be0beb30f5", "f55ed7599ef546e2a02a2d83beae41d7", "65be8f1e2cc042a98003cb68a99e46d0", "946454de1bf543f8911aea42cd0d64dc", "7435c281bf8f4480b3542eb34d8826c9", "b7189a93516242edb18e739331bcb1d7", "8adfee87f17445159c1fdced536dc85c", "071989bc2f3b4ea8a0ca7ea871844aca", "caa8dc7da70c4a91940f72647c0855ed", "389215a286de468eb666908e98ce8c5d", "7bb192ab8d8d4a4d87958e35c78e4fd8", "c6b087846a6a4b8abe1bc04593e2edc9", "371a00a75b9745c1bc50d412731a5f8a", "de656fc10762480aa127286dc10d0c95", "66e71a906bfc4f679ef2e7c3361c7cac", "01c50a06ef2f45f7b4ceabb7e7583416", "328167df4a454a7fa65f12d91de86b6b" ], "height": 81 }, "outputId": "3a7259ae-623c-49c8-8ede-c1b45f400aaa" }, "execution_count": 80, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Map: 0%| | 0/12528 [00:00 0.5).astype(int)\n", " # Calculate metrics\n", " precision, recall, f1, _ = precision_recall_fscore_support(labels, predictions, average='samples')\n", " acc = accuracy_score(labels, predictions)\n", " hamming = hamming_loss(labels, predictions)\n", "\n", " return {\n", " 'accuracy': acc,\n", " 'f1': f1,\n", " 'precision': precision,\n", " 'recall': recall,\n", " 'hamming_loss': hamming\n", " }\n" ], "metadata": { "id": "y1etEIiDtfZR" }, "execution_count": 91, "outputs": [] }, { "cell_type": "code", "source": [ "trainer = Trainer(\n", " model=model,\n", " args=training_args,\n", " train_dataset=train_dataset,\n", " eval_dataset=test_dataset,\n", " data_collator=custom_collator,\n", " compute_metrics=compute_metrics,\n", ")" ], "metadata": { "id": "pDDtLfuBB0vT" }, "execution_count": 92, "outputs": [] }, { "cell_type": "code", "source": [ "display(train_dataset)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 86 }, "id": "EXohfDa_zYFA", "outputId": "9ef26bc9-d514-40bc-e727-2c66f826ce7f" }, "execution_count": 93, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Dataset({\n", " features: ['keywords', 'labels', 'input_ids', 'attention_mask'],\n", " num_rows: 12528\n", "})" ] }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "trainer.train()" ], "metadata": { "id": "9Zzlf8j4B24L", "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "outputId": "796be6d8-d0c0-4eb6-b148-d2e8c320f6eb" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":8: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch['labels'] = torch.tensor(batch['labels'], dtype=torch.float)\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", "
\n", " \n", " \n", " [ 299/1176 03:43 < 11:00, 1.33 it/s, Epoch 1.52/6]\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EpochTraining LossValidation LossAccuracyF1PrecisionRecallHamming LossRuntimeSamples Per SecondSteps Per Second
1No log0.2772960.0000000.0000000.0000000.0000000.08183312.513300250.2940003.916000

" ] }, "metadata": {} }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", ":8: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch['labels'] = torch.tensor(batch['labels'], dtype=torch.float)\n" ] } ] }, { "cell_type": "code", "source": [ "results = trainer.evaluate()" ], "metadata": { "id": "Qns4wSQxtrR5", "colab": { "base_uri": "https://localhost:8080/", "height": 126 }, "outputId": "d0ca8abe-5a92-420a-f35f-ea38efaac91c" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":8: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch['labels'] = torch.tensor(batch['labels'], dtype=torch.float)\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", "

\n", " \n", " \n", " [98/98 00:12]\n", "
\n", " " ] }, "metadata": {} }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ] }, { "cell_type": "code", "source": [ "print(results)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uU3d40U04cdy", "outputId": "152c3201-ba21-4d96-8674-ff08c29519ac" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{'eval_loss': 0.11773193627595901, 'eval_accuracy': 0.6669859514687101, 'eval_f1': 0.7603630724320378, 'eval_precision': 0.7963761174968071, 'eval_recall': 0.7502128565346956, 'eval_hamming_loss': 0.03204022988505747, 'eval_runtime': 12.7661, 'eval_samples_per_second': 245.338, 'eval_steps_per_second': 7.677, 'epoch': 6.0}\n" ] } ] }, { "cell_type": "code", "source": [ "model.save_pretrained('./saved_model')\n", "tokenizer.save_pretrained('./saved_model')" ], "metadata": { "id": "vNxaJzgMBx4R", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "b2c626aa-78bc-434d-8893-68627527f313" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "('./saved_model/tokenizer_config.json',\n", " './saved_model/special_tokens_map.json',\n", " './saved_model/vocab.txt',\n", " './saved_model/added_tokens.json',\n", " './saved_model/tokenizer.json')" ] }, "metadata": {}, "execution_count": 176 } ] }, { "cell_type": "code", "source": [ "!zip -r /content/model.zip /content/saved_model" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "PoSveDHL4uCH", "outputId": "033de9d3-34c0-44be-95fb-38a09f870366" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " adding: content/saved_model/ (stored 0%)\n", " adding: content/saved_model/config.json (deflated 62%)\n", " adding: content/saved_model/vocab.txt (deflated 53%)\n", " adding: content/saved_model/model.safetensors (deflated 8%)\n", " adding: content/saved_model/tokenizer_config.json (deflated 76%)\n", " adding: content/saved_model/tokenizer.json (deflated 71%)\n", " adding: content/saved_model/special_tokens_map.json (deflated 42%)\n" ] } ] } ] }