diff --git a/Music recommendation feature.ipynb b/Music recommendation feature.ipynb new file mode 100644 index 00000000..ae88dc6c --- /dev/null +++ b/Music recommendation feature.ipynb @@ -0,0 +1 @@ +{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":8726191,"sourceType":"datasetVersion","datasetId":5236926}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Content Based Recommendation Systems\n\nA recommendation system (or recommender system) is a class of machine learning that uses data to help predict, narrow down, and find what people are looking for among an exponentially growing number of options.\n\nRecommendation systems are divided into three:\n\n* Collaborative Filtering\n* Content Based RS\n* Hybrid Models\n\nIn this notebook we are going to discuss Content Based RS.\n\n## Content Based Recommendation Systems\n\n* Content-based filtering methods are based on a description of the item and a profile of the user's preferences. These methods are best suited to situations where there is known data on an item (name, location, description, etc.), but not on the user. Content-based recommenders treat recommendation as a user-specific classification problem and learn a classifier for the user's likes and dislikes based on an item's features.\n* It is used to models such as TF_IDF and Word2Vec in order to capture similarity.\n* It is very powerful that a item adding newly is recommend. \n* A key issue with content-based filtering is whether the system can learn user preferences from users' actions regarding one content source and use them across other content types. When the system is limited to recommending content of the same type as the user is already using, the value from the recommendation system is significantly less than when other content types from other services can be recommended.\n* To overcome this, most content-based recommender systems now use some form of the hybrid system.\n* Content-based recommender systems can also include opinion-based recommender systems. ","metadata":{"_uuid":"211893b3-b34f-45c2-8bba-ae96b890ff26","_cell_guid":"64ffe843-0f51-4bf5-9d01-3479b120064d","trusted":true}},{"cell_type":"markdown","source":"## What is TF-IDF?\n\nTF-IDF stands for Term Frequency Inverse Document Frequency of records. It can be defined as the calculation of how relevant a word in a series or corpus is to a text. The meaning increases proportionally to the number of times in the text a word appears but is compensated by the word frequency in the corpus (data-set).\n\nTF-IDF is a weight factor which a word display important into document and had been calculated with statistics method. TF-IDF method use to a lot domains (sentiment analysis, RS, stop words filterin etc.) This method is divided into two. Fistly we will analyze Term Frequency(TF).\n\n### Term Frequency\n\nIn document d, the frequency represents the number of instances of a given word t. Therefore, we can see that it becomes more relevant when a word appears in the text, which is rational. Since the ordering of terms is not significant, we can use a vector to describe the text in the bag of term models. For each specific term in the paper, there is an entry with the value being the term frequency.\nThe weight of a term that occurs in a document is simply proportional to the term frequency.\n\n### Inverse Document Frequency\n\nMainly, it tests how relevant the word is. The key aim of the search is to locate the appropriate records that fit the demand. Since tf considers all terms equally significant, it is therefore not only possible to use the term frequencies to measure the weight of the term in the paper. First, find the document frequency of a term t by counting the number of documents containing the term:\n\n**TF-IDF method used as multipy TF value and IDF value. (TF * IDF)**\n\nI have applied this method in my model. And I have found the similarity in between with cosine distance.","metadata":{"_uuid":"ef5594de-1f51-4f29-a84f-19136909b11e","_cell_guid":"87fdf135-277f-4fce-af94-b69dcb9ff45e","trusted":true}},{"cell_type":"markdown","source":"","metadata":{"_uuid":"2f2f516a-e4cc-4223-94d7-9e373614f9ef","_cell_guid":"2db1677c-31ac-4739-bb17-934203a8c590","trusted":true}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# For Text\n\nimport matplotlib.pyplot as plt\nimport seaborn as sb\n\nfrom sklearn.metrics.pairwise import cosine_similarity\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.manifold import TSNE\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\n\n# Capture similarity \nfrom sklearn.metrics.pairwise import linear_kernel\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":"969f5946-9174-4282-a6ad-d3735e6d38ae","_cell_guid":"c91fd311-1267-464c-9f00-6d899c98ac9a","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:35.099082Z","iopub.execute_input":"2024-07-18T06:43:35.099880Z","iopub.status.idle":"2024-07-18T06:43:37.958493Z","shell.execute_reply.started":"2024-07-18T06:43:35.099838Z","shell.execute_reply":"2024-07-18T06:43:37.957125Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Let's get to know our dataset.","metadata":{"_uuid":"f815a9d3-982d-4783-8ff2-a97788b32b76","_cell_guid":"d0583ba6-7426-4f13-b439-4f1a1a4f063c","trusted":true}},{"cell_type":"code","source":"\n\ndata=pd.read_csv(\"/kaggle/input/musicaldata/musicaldata.csv\")\ndata.head(4000)","metadata":{"_uuid":"7835eb94-3a34-4253-a5d9-5ed64b45283d","_cell_guid":"0ff8ee63-f975-46ed-8346-450fef2d00f1","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:37.960867Z","iopub.execute_input":"2024-07-18T06:43:37.961541Z","iopub.status.idle":"2024-07-18T06:43:38.037706Z","shell.execute_reply.started":"2024-07-18T06:43:37.961497Z","shell.execute_reply":"2024-07-18T06:43:38.036554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"> I wanted to make a suggestion depends on the cast members, description and \"listed_in\" which contains the shows type but there is another column named \"type\" it is a bit confusing I know. >","metadata":{"_uuid":"f47c0286-051f-44b7-8f3b-dff2636c57a2","_cell_guid":"5e4f0150-982c-40c2-ae42-df0e5b50ca14","trusted":true}},{"cell_type":"markdown","source":"Drop nan values on these columns to make a proper matrix which contains linear_kernel values of selected strings.","metadata":{"_uuid":"9e742cf3-6450-474e-b320-42275dea7b1b","_cell_guid":"4d9511c6-3b3c-4a66-b1f8-b77c1eb16472","trusted":true}},{"cell_type":"code","source":"data.shape","metadata":{"_uuid":"86c52013-2fe9-4582-826e-83e63d83a71c","_cell_guid":"546f44f4-1e9f-4316-b67a-4147d1cc61ac","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:38.039377Z","iopub.execute_input":"2024-07-18T06:43:38.040377Z","iopub.status.idle":"2024-07-18T06:43:38.048032Z","shell.execute_reply.started":"2024-07-18T06:43:38.040335Z","shell.execute_reply":"2024-07-18T06:43:38.046782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.info()","metadata":{"_uuid":"c20641aa-17af-4e43-ab22-671baaf3af06","_cell_guid":"5ccfef9a-1c31-4211-977d-71895d623c2e","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:38.049427Z","iopub.execute_input":"2024-07-18T06:43:38.050029Z","iopub.status.idle":"2024-07-18T06:43:38.081228Z","shell.execute_reply.started":"2024-07-18T06:43:38.049999Z","shell.execute_reply":"2024-07-18T06:43:38.079843Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.isnull().sum()","metadata":{"_uuid":"488e4a21-2e98-4b64-b4b7-1f3a8774d197","_cell_guid":"8782b655-413f-407e-b6b0-95f80f0c86c4","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:38.085155Z","iopub.execute_input":"2024-07-18T06:43:38.085578Z","iopub.status.idle":"2024-07-18T06:43:38.097471Z","shell.execute_reply.started":"2024-07-18T06:43:38.085546Z","shell.execute_reply":"2024-07-18T06:43:38.096046Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.dropna(inplace = True)\ndata.isnull().sum().plot.bar()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-07-18T06:43:38.098926Z","iopub.execute_input":"2024-07-18T06:43:38.099358Z","iopub.status.idle":"2024-07-18T06:43:38.469804Z","shell.execute_reply.started":"2024-07-18T06:43:38.099322Z","shell.execute_reply":"2024-07-18T06:43:38.468707Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = data.drop(['track id'], axis = 1)\n\n\ndata","metadata":{"_uuid":"705daa1b-1a41-4765-a5c4-ca06243f8e73","_cell_guid":"9587614f-971d-4d90-a243-7059d10e7a53","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:38.471285Z","iopub.execute_input":"2024-07-18T06:43:38.472181Z","iopub.status.idle":"2024-07-18T06:43:38.503136Z","shell.execute_reply.started":"2024-07-18T06:43:38.472139Z","shell.execute_reply":"2024-07-18T06:43:38.501725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = data.sort_values(by=[' mood'], ascending=False)\ndata\n","metadata":{"_uuid":"7d10088e-9fb4-4e32-8a52-f0355a04e139","_cell_guid":"54bd07ed-5919-4c34-b8c2-537fc8bb4c63","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T06:43:38.504752Z","iopub.execute_input":"2024-07-18T06:43:38.505194Z","iopub.status.idle":"2024-07-18T06:43:38.531330Z","shell.execute_reply.started":"2024-07-18T06:43:38.505155Z","shell.execute_reply":"2024-07-18T06:43:38.530232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%capture\nsong_vectorizer = CountVectorizer(lowercase=False)\nsong_vectorizer.fit(data[' genre'])\n","metadata":{"_uuid":"f4e99d39-6244-4a54-bd59-da0c0b4eb263","_cell_guid":"4cc6a4dd-69da-4dd2-9e9f-3db4ad1bf9ec","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T07:20:14.961494Z","iopub.execute_input":"2024-07-18T07:20:14.962320Z","iopub.status.idle":"2024-07-18T07:20:15.016863Z","shell.execute_reply.started":"2024-07-18T07:20:14.962281Z","shell.execute_reply":"2024-07-18T07:20:15.015952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"27044823-561d-4684-9c1e-b58330477a09","_cell_guid":"b02809b0-533d-4f2a-a814-bcb371d4b623","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = data.sort_values(by=[' mood'], ascending=False).head(8407)\n","metadata":{"_uuid":"9b9c0d05-34c7-4fbe-b3e8-3da5311f79aa","_cell_guid":"0895c987-d693-4ec5-98f4-52964893929f","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T07:20:18.625596Z","iopub.execute_input":"2024-07-18T07:20:18.626296Z","iopub.status.idle":"2024-07-18T07:20:18.633823Z","shell.execute_reply.started":"2024-07-18T07:20:18.626259Z","shell.execute_reply":"2024-07-18T07:20:18.632754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_similarities(song_genre, datas):\n\n# Getting vector for the input song.\n text_array1 = song_vectorizer.transform(datas[datas[' genre']==song_genre][' mother tongue']).toarray()\n num_array1 = datas[datas[' genre']==song_genre].select_dtypes(include=np.number).to_numpy()\n\n# We will store similarity for each row of the dataset.\n sim = []\n for idx, row in data.iterrows():\n\t genre = row[' genre']\n\t\n\t# Getting vector for current song.\n\t text_array2 = song_vectorizer.transform(datas[datas[' genre']==genre][' mother tongue']).toarray()\n\t num_array2 = datas[datas[' genre']==genre].select_dtypes(include=np.number).to_numpy()\n\n\t# Calculating similarities for text as well as numeric features\n\t text_sim = cosine_similarity(text_array1, text_array2)[0][0]\n\t num_sim = cosine_similarity(num_array1, num_array2)[0][0]\n\t sim.append(text_sim + num_sim)\n\t\n return sim\n","metadata":{"_uuid":"7f64a3c5-6644-4500-b768-9588a1a1796e","_cell_guid":"f6ba9b5c-1cd6-4329-9716-768fc66b6185","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T07:21:22.321219Z","iopub.execute_input":"2024-07-18T07:21:22.322530Z","iopub.status.idle":"2024-07-18T07:21:22.332061Z","shell.execute_reply.started":"2024-07-18T07:21:22.322483Z","shell.execute_reply":"2024-07-18T07:21:22.330729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def recommend_songs(song_genre, datas=data):\n # Base case\n if data[data[' genre'] == song_genre].shape[0] == 0:\n print('This song is not so popular')\n \n for song in datas.sample(n=5)[' genre'].values:\n print(song)\n return\n \n datas['similarity_factor'] = get_similarities(song_genre, datas)\n \n datas.sort_values(by=['similarity_factor', ' mood'],\n ascending = [False, False],\n inplace=True)\n \n # First song will be the input song itself as the similarity will be highest.\n display(datas[[' genre', ' age', ' mother tongue']][2:7])\n","metadata":{"_uuid":"f42b9e20-bfde-468c-a061-baede0e7acc9","_cell_guid":"16949b27-8cac-4a55-84f8-c0109e8141f5","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T07:32:45.646510Z","iopub.execute_input":"2024-07-18T07:32:45.646931Z","iopub.status.idle":"2024-07-18T07:32:45.656010Z","shell.execute_reply.started":"2024-07-18T07:32:45.646887Z","shell.execute_reply":"2024-07-18T07:32:45.654684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"recommend_songs('classical')\n","metadata":{"_uuid":"123ddf07-1178-4198-82ac-3e4b0077b682","_cell_guid":"5c7396f0-7d3a-48f5-8c60-9dc8a74d671f","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-07-18T07:50:20.350621Z","iopub.execute_input":"2024-07-18T07:50:20.351890Z","iopub.status.idle":"2024-07-18T07:59:03.032540Z","shell.execute_reply.started":"2024-07-18T07:50:20.351829Z","shell.execute_reply":"2024-07-18T07:59:03.031273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"8fc6e3b5-9204-4b61-81f1-1ad298187b0b","_cell_guid":"0d8ef6be-f82b-4727-bf71-ae5e3b93b065","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"db38054b-03da-4b74-90c8-da0952e22e97","_cell_guid":"00755ea1-9ccb-48c3-b5bf-ed8502dba41a","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"ebeabf14-181a-4931-a489-3692eaa20b94","_cell_guid":"2c060445-e4a7-47f3-bc6e-77b60ca5f21d","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"fd7cc031-07e1-470a-b04e-e4914737aa34","_cell_guid":"f34ee388-4084-468f-bce4-f85059694cda","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n","metadata":{"_uuid":"8fe27341-f205-43b1-bbb0-1aeac550fa46","_cell_guid":"e6249211-42c8-4197-ab2d-cedf58afcd17","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"In this above. My model brought the recommendations I wanted to bring acording to the mood of the songs of different genres . Firstly it brought to Transformers movies.\n\n# Conclusion\n\n* In this notebook. I worked to explain content based recommendation system.\n* Content based RS models are powerful in new item recommendation. \n* In general it is used TF-IDF and Word2Vec model while content based RS designs.\n* TF-IDF method is the method which explains words frequency in document.\n* It can be created a recommendation model by using cosine distance with the aid of TF-IDF weights.\n\n","metadata":{"_uuid":"a5fbdfc2-4e81-4d76-985e-c10441e7fe32","_cell_guid":"8d31b41f-78cd-4b03-b692-8644e3d9a1be","trusted":true}}]} diff --git a/notebook10298254f6.ipynb b/notebook10298254f6.ipynb new file mode 100644 index 00000000..6e2e6500 --- /dev/null +++ b/notebook10298254f6.ipynb @@ -0,0 +1 @@ +{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":8726191,"sourceType":"datasetVersion","datasetId":5236926}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Content Based Recommendation Systems\n\nA recommendation system (or recommender system) is a class of machine learning that uses data to help predict, narrow down, and find what people are looking for among an exponentially growing number of options.\n\nRecommendation systems are divided into three:\n\n* Collaborative Filtering\n* Content Based RS\n* Hybrid Models\n\nIn this notebook we are going to discuss Content Based RS.\n\n## Content Based Recommendation Systems\n\n* Content-based filtering methods are based on a description of the item and a profile of the user's preferences. These methods are best suited to situations where there is known data on an item (name, location, description, etc.), but not on the user. Content-based recommenders treat recommendation as a user-specific classification problem and learn a classifier for the user's likes and dislikes based on an item's features.\n* It is used to models such as TF_IDF and Word2Vec in order to capture similarity.\n* It is very powerful that a item adding newly is recommend. \n* A key issue with content-based filtering is whether the system can learn user preferences from users' actions regarding one content source and use them across other content types. When the system is limited to recommending content of the same type as the user is already using, the value from the recommendation system is significantly less than when other content types from other services can be recommended.\n* To overcome this, most content-based recommender systems now use some form of the hybrid system.\n* Content-based recommender systems can also include opinion-based recommender systems.","metadata":{"_uuid":"cca15c56-4f26-4e9a-b4a8-2eca1c5ab108","_cell_guid":"d594d373-a86f-489c-87d1-45302b1b86a3","trusted":true}},{"cell_type":"markdown","source":"## What is TF-IDF?\n\nTF-IDF stands for Term Frequency Inverse Document Frequency of records. It can be defined as the calculation of how relevant a word in a series or corpus is to a text. The meaning increases proportionally to the number of times in the text a word appears but is compensated by the word frequency in the corpus (data-set).\n\nTF-IDF is a weight factor which a word display important into document and had been calculated with statistics method. TF-IDF method use to a lot domains (sentiment analysis, RS, stop words filterin etc.) This method is divided into two. Fistly we will analyze Term Frequency(TF).\n\n### Term Frequency\n\nIn document d, the frequency represents the number of instances of a given word t. Therefore, we can see that it becomes more relevant when a word appears in the text, which is rational. Since the ordering of terms is not significant, we can use a vector to describe the text in the bag of term models. For each specific term in the paper, there is an entry with the value being the term frequency.\nThe weight of a term that occurs in a document is simply proportional to the term frequency.\n\n### Inverse Document Frequency\n\nMainly, it tests how relevant the word is. The key aim of the search is to locate the appropriate records that fit the demand. Since tf considers all terms equally significant, it is therefore not only possible to use the term frequencies to measure the weight of the term in the paper. First, find the document frequency of a term t by counting the number of documents containing the term:\n\n**TF-IDF method used as multipy TF value and IDF value. (TF * IDF)**\n\nI have applied this method in my model. And I have found the similarity in between with cosine distance.","metadata":{"_uuid":"29f885c7-5339-4d8d-b99d-0585784e6cc0","_cell_guid":"7d0903c4-9308-4059-9076-d544ee9f8224","trusted":true}},{"cell_type":"markdown","source":"","metadata":{"_uuid":"f3c53cfc-5bc3-4ff8-91df-f20953eac67a","_cell_guid":"2b2b995e-6d6c-4452-9948-0bbb90228ada","trusted":true}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# For Text\n\nimport matplotlib.pyplot as plt\nimport seaborn as sb\n\nfrom sklearn.metrics.pairwise import cosine_similarity\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.manifold import TSNE\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\n\n# Capture similarity \nfrom sklearn.metrics.pairwise import linear_kernel\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":"fdaf36cf-4d9e-4ce2-9360-8417b6e445a1","_cell_guid":"c7427ab3-c6a6-433e-aa09-8469f15ff2fa","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:06.194729Z","iopub.execute_input":"2024-10-13T07:33:06.195208Z","iopub.status.idle":"2024-10-13T07:33:07.965888Z","shell.execute_reply.started":"2024-10-13T07:33:06.195163Z","shell.execute_reply":"2024-10-13T07:33:07.964662Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"/kaggle/input/musicaldata/musicaldata.csv\n","output_type":"stream"}]},{"cell_type":"markdown","source":"Let's get to know our dataset.","metadata":{"_uuid":"3c7eb90b-9f18-4613-ad7f-e6ce5f313c94","_cell_guid":"d039e612-5229-47f1-9b5c-0f3ced80c3f8","trusted":true}},{"cell_type":"code","source":"\n\ndata=pd.read_csv(\"/kaggle/input/musicaldata/musicaldata.csv\")\ndata.head(4000)","metadata":{"_uuid":"c0659919-7412-4f17-9e3c-62ea3bc44e4a","_cell_guid":"880bd5b0-e0cf-4df8-9da4-d40a3718e190","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:07.968352Z","iopub.execute_input":"2024-10-13T07:33:07.969507Z","iopub.status.idle":"2024-10-13T07:33:08.037031Z","shell.execute_reply.started":"2024-10-13T07:33:07.969427Z","shell.execute_reply":"2024-10-13T07:33:08.035890Z"},"trusted":true},"execution_count":3,"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":" track id genre amazement solemnity tenderness nostalgia \\\n0 1 classical 0 1 0 0 \n1 1 classical 0 0 0 1 \n2 1 classical 0 0 0 1 \n3 1 classical 0 0 0 0 \n4 1 classical 0 0 0 1 \n... ... ... ... ... ... ... \n3995 149 rock 0 0 1 0 \n3996 149 rock 0 0 0 1 \n3997 150 rock 0 0 0 0 \n3998 150 rock 0 1 0 0 \n3999 150 rock 0 1 0 1 \n\n calmness power joyful_activation tension sadness mood \\\n0 0 0 1 1 0 3 \n1 0 0 0 0 0 3 \n2 0 0 0 0 1 3 \n3 1 0 0 0 0 3 \n4 1 0 0 0 0 4 \n... ... ... ... ... ... ... \n3995 1 0 0 0 1 4 \n3996 1 0 0 0 1 3 \n3997 0 0 0 1 0 3 \n3998 1 0 0 0 0 3 \n3999 0 1 0 0 0 2 \n\n liked disliked age gender mother tongue \n0 1 0 21 1 English \n1 0 1 41 1 Dutch \n2 0 0 24 1 English \n3 0 0 32 0 Spanish \n4 0 1 21 0 English \n... ... ... ... ... ... \n3995 1 0 25 1 Dutch \n3996 1 0 24 0 French \n3997 0 1 38 0 English \n3998 0 0 23 0 Dutch \n3999 0 0 38 0 Dutch \n\n[4000 rows x 17 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 \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 \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 \n \n \n \n
track idgenreamazementsolemnitytendernessnostalgiacalmnesspowerjoyful_activationtensionsadnessmoodlikeddislikedagegendermother tongue
01classical010000110310211English
11classical000100000301411Dutch
21classical000100001300241English
31classical000010000300320Spanish
41classical000110000401210English
......................................................
3995149rock001010001410251Dutch
3996149rock000110001310240French
3997150rock000000010301380English
3998150rock010010000300230Dutch
3999150rock010101000200380Dutch
\n

4000 rows × 17 columns

\n
"},"metadata":{}}]},{"cell_type":"markdown","source":"> I wanted to make a suggestion depends on the cast members, description and \"listed_in\" which contains the shows type but there is another column named \"type\" it is a bit confusing I know. >","metadata":{"_uuid":"9c48687d-089d-4973-a961-1f0f3fd64222","_cell_guid":"bcbed148-1afc-4856-897c-2785218373a6","trusted":true}},{"cell_type":"markdown","source":"Drop nan values on these columns to make a proper matrix which contains linear_kernel values of selected strings.","metadata":{"_uuid":"ee78398d-7cba-4648-82c2-623599c65af1","_cell_guid":"e14fb5c6-5ecc-4d93-a689-051207177a1b","trusted":true}},{"cell_type":"code","source":"data.shape","metadata":{"_uuid":"1189e1aa-8de4-4b1d-9e73-9efc27b0a042","_cell_guid":"f9eb8186-2ed0-4582-9a22-b42262396c99","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.038298Z","iopub.execute_input":"2024-10-13T07:33:08.038675Z","iopub.status.idle":"2024-10-13T07:33:08.046585Z","shell.execute_reply.started":"2024-10-13T07:33:08.038636Z","shell.execute_reply":"2024-10-13T07:33:08.045399Z"},"trusted":true},"execution_count":4,"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"(8407, 17)"},"metadata":{}}]},{"cell_type":"code","source":"data.info()","metadata":{"_uuid":"57deefcf-30eb-49c3-8d31-0ed102606343","_cell_guid":"f976d69f-6068-495e-8c26-877647ac4072","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.048210Z","iopub.execute_input":"2024-10-13T07:33:08.048680Z","iopub.status.idle":"2024-10-13T07:33:08.080505Z","shell.execute_reply.started":"2024-10-13T07:33:08.048626Z","shell.execute_reply":"2024-10-13T07:33:08.079336Z"},"trusted":true},"execution_count":5,"outputs":[{"name":"stdout","text":"\nRangeIndex: 8407 entries, 0 to 8406\nData columns (total 17 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 track id 8407 non-null int64 \n 1 genre 8407 non-null object\n 2 amazement 8407 non-null int64 \n 3 solemnity 8407 non-null int64 \n 4 tenderness 8407 non-null int64 \n 5 nostalgia 8407 non-null int64 \n 6 calmness 8407 non-null int64 \n 7 power 8407 non-null int64 \n 8 joyful_activation 8407 non-null int64 \n 9 tension 8407 non-null int64 \n 10 sadness 8407 non-null int64 \n 11 mood 8407 non-null int64 \n 12 liked 8407 non-null int64 \n 13 disliked 8407 non-null int64 \n 14 age 8407 non-null int64 \n 15 gender 8407 non-null int64 \n 16 mother tongue 8407 non-null object\ndtypes: int64(15), object(2)\nmemory usage: 1.1+ MB\n","output_type":"stream"}]},{"cell_type":"code","source":"data.isnull().sum()","metadata":{"_uuid":"8f43e982-b57f-44d4-8d27-1278f4d02e33","_cell_guid":"b58e0982-ab1a-46b4-92b5-5e160bcf3de5","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.083661Z","iopub.execute_input":"2024-10-13T07:33:08.084062Z","iopub.status.idle":"2024-10-13T07:33:08.095794Z","shell.execute_reply.started":"2024-10-13T07:33:08.084022Z","shell.execute_reply":"2024-10-13T07:33:08.094615Z"},"trusted":true},"execution_count":6,"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"track id 0\n genre 0\n amazement 0\n solemnity 0\n tenderness 0\n nostalgia 0\n calmness 0\n power 0\n joyful_activation 0\n tension 0\n sadness 0\n mood 0\n liked 0\n disliked 0\n age 0\n gender 0\n mother tongue 0\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"data.dropna(inplace = True)\ndata.isnull().sum().plot.bar()\nplt.show()","metadata":{"_uuid":"1323b0f8-6392-4630-9228-cdd495832606","_cell_guid":"43838d57-110b-4cc7-b9c7-af19f24439a3","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.097340Z","iopub.execute_input":"2024-10-13T07:33:08.097826Z","iopub.status.idle":"2024-10-13T07:33:08.476431Z","shell.execute_reply.started":"2024-10-13T07:33:08.097775Z","shell.execute_reply":"2024-10-13T07:33:08.475143Z"},"trusted":true},"execution_count":7,"outputs":[{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAIGCAYAAACoDq6mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgHUlEQVR4nO3dd1gU1/s28HsBKdJFiiCIWCFijz0ahYgt9kSNigU1GlsAjZrYS2yxa4IaI6IxtqixBUXsiBXFiiIWsIAtgIgi5bx/8DI/VkDNNzu7Mt6f69orZnZ2nxmW3b05c4pKCCFAREREpBB6uj4AIiIiIk1iuCEiIiJFYbghIiIiRWG4ISIiIkVhuCEiIiJFYbghIiIiRWG4ISIiIkVhuCEiIiJFMdD1AehCTk4O7t+/D3Nzc6hUKl0fDhEREb0DIQSePXsGR0dH6OkV3T7zQYab+/fvw9nZWdeHQURERP+DhIQElC1btsj7P8hwY25uDiD3h2NhYaHjoyEiIqJ3kZqaCmdnZ+l7vCgfZLjJuxRlYWHBcENERFTMvK1LCTsUExERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaJoJdwsW7YMrq6uMDY2Rv369XHq1Kk37r9582ZUrVoVxsbG8PT0xJ49e4rcd/DgwVCpVFi4cKGGj5qIiIiKI9nDzcaNGxEQEIBJkyYhKioKNWrUgI+PDx4+fFjo/sePH0ePHj3g5+eHc+fOoWPHjujYsSMuXbpUYN9t27bhxIkTcHR0lPs0iIiIqJiQPdzMnz8fAwcORL9+/eDh4YGgoCCULFkSv/32W6H7L1q0CK1atcLo0aPh7u6OadOmoXbt2li6dKnafvfu3cPw4cPx+++/o0SJEnKfBhERERUTsoabV69e4ezZs/D29v6/gnp68Pb2RmRkZKGPiYyMVNsfAHx8fNT2z8nJQe/evTF69Gh89NFHbz2OjIwMpKamqt2IiIhImWQNN48fP0Z2djbs7e3Vttvb2yMxMbHQxyQmJr51/9mzZ8PAwAAjRox4p+OYOXMmLC0tpZuzs/O/PBMiIiIqLordaKmzZ89i0aJFCA4OhkqleqfHjBs3DikpKdItISFB5qMkIiIiXZE13JQuXRr6+vpISkpS256UlAQHB4dCH+Pg4PDG/Y8ePYqHDx/CxcUFBgYGMDAwwJ07dxAYGAhXV9dCn9PIyAgWFhZqNyIiIlImWcONoaEh6tSpg/DwcGlbTk4OwsPD0bBhw0If07BhQ7X9ASAsLEzav3fv3rhw4QLOnz8v3RwdHTF69Gjs3btXvpMhIiKiYsFA7gIBAQHo06cP6tati3r16mHhwoV4/vw5+vXrBwDw9fWFk5MTZs6cCQAYOXIkmjVrhnnz5qFt27bYsGEDzpw5gxUrVgAAbGxsYGNjo1ajRIkScHBwQJUqVeQ+HSIiInrPyR5uunXrhkePHmHixIlITExEzZo1ERoaKnUajo+Ph57e/zUgNWrUCOvXr8f48ePx/fffo1KlSti+fTuqVasm96ESERGRAqiEEELXB6FtqampsLS0REpKCvvfEBERFRPv+v1d7EZLEREREb0Jww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpilbCzbJly+Dq6gpjY2PUr18fp06deuP+mzdvRtWqVWFsbAxPT0/s2bNHui8zMxNjxoyBp6cnTE1N4ejoCF9fX9y/f1/u0yAiIqJiQPZws3HjRgQEBGDSpEmIiopCjRo14OPjg4cPHxa6//Hjx9GjRw/4+fnh3Llz6NixIzp27IhLly4BANLT0xEVFYUJEyYgKioKW7duxbVr19C+fXu5T4WIiIiKAZUQQshZoH79+vj444+xdOlSAEBOTg6cnZ0xfPhwjB07tsD+3bp1w/Pnz7Fr1y5pW4MGDVCzZk0EBQUVWuP06dOoV68e7ty5AxcXl7ceU2pqKiwtLZGSkgILC4v/8cyIiIhIm971+1vWlptXr17h7Nmz8Pb2/r+Cenrw9vZGZGRkoY+JjIxU2x8AfHx8itwfAFJSUqBSqWBlZVXo/RkZGUhNTVW7ERERkTLJGm4eP36M7Oxs2Nvbq223t7dHYmJioY9JTEz8V/u/fPkSY8aMQY8ePYpMcTNnzoSlpaV0c3Z2/h/OhoiIiIqDYj1aKjMzE19++SWEEPjll1+K3G/cuHFISUmRbgkJCVo8SiIiItImAzmfvHTp0tDX10dSUpLa9qSkJDg4OBT6GAcHh3faPy/Y3LlzBwcOHHjjtTcjIyMYGRn9j2dBRERExYmsLTeGhoaoU6cOwsPDpW05OTkIDw9Hw4YNC31Mw4YN1fYHgLCwMLX984JNbGws9u/fDxsbG3lOgIiIiIodWVtuACAgIAB9+vRB3bp1Ua9ePSxcuBDPnz9Hv379AAC+vr5wcnLCzJkzAQAjR45Es2bNMG/ePLRt2xYbNmzAmTNnsGLFCgC5waZr166IiorCrl27kJ2dLfXHKVWqFAwNDeU+JSIiInqPyR5uunXrhkePHmHixIlITExEzZo1ERoaKnUajo+Ph57e/zUgNWrUCOvXr8f48ePx/fffo1KlSti+fTuqVasGALh37x527NgBAKhZs6ZarYMHD+LTTz+V+5SIiIjoPSb7PDfvI85zQ0REVPy8F/PcEBEREWkbww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpilbCzbJly+Dq6gpjY2PUr18fp06deuP+mzdvRtWqVWFsbAxPT0/s2bNH7X4hBCZOnIgyZcrAxMQE3t7eiI2NlfMUiIiIqJiQPdxs3LgRAQEBmDRpEqKiolCjRg34+Pjg4cOHhe5//Phx9OjRA35+fjh37hw6duyIjh074tKlS9I+c+bMweLFixEUFISTJ0/C1NQUPj4+ePnypdynQ0RERO85lRBCyFmgfv36+Pjjj7F06VIAQE5ODpydnTF8+HCMHTu2wP7dunXD8+fPsWvXLmlbgwYNULNmTQQFBUEIAUdHRwQGBmLUqFEAgJSUFNjb2yM4OBjdu3d/6zGlpqbC0tISKSkpsLCw0NCZEhERkZze9ftb1pabV69e4ezZs/D29v6/gnp68Pb2RmRkZKGPiYyMVNsfAHx8fKT9b926hcTERLV9LC0tUb9+/SKfk4iIiD4cBnI++ePHj5GdnQ17e3u17fb29oiJiSn0MYmJiYXun5iYKN2ft62ofV6XkZGBjIwM6f9TU1P/3YkQERFRsfFBjJaaOXMmLC0tpZuzs7OuD4mIiIhkImu4KV26NPT19ZGUlKS2PSkpCQ4ODoU+xsHB4Y375/333zznuHHjkJKSIt0SEhL+p/MhIiKi95+s4cbQ0BB16tRBeHi4tC0nJwfh4eFo2LBhoY9p2LCh2v4AEBYWJu1fvnx5ODg4qO2TmpqKkydPFvmcRkZGsLCwULsRERGRMsna5wYAAgIC0KdPH9StWxf16tXDwoUL8fz5c/Tr1w8A4OvrCycnJ8ycORMAMHLkSDRr1gzz5s1D27ZtsWHDBpw5cwYrVqwAAKhUKnz77beYPn06KlWqhPLly2PChAlwdHREx44d5T4dIiIies/JHm66deuGR48eYeLEiUhMTETNmjURGhoqdQiOj4+Hnt7/NSA1atQI69evx/jx4/H999+jUqVK2L59O6pVqybt89133+H58+cYNGgQkpOT0aRJE4SGhsLY2Fju0yEiIqL3nOzz3LyPOM8NERFR8fNezHNDREREpG0MN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQosoWbp0+fomfPnrCwsICVlRX8/PyQlpb2xse8fPkSQ4cOhY2NDczMzNClSxckJSVJ90dHR6NHjx5wdnaGiYkJ3N3dsWjRIrlOgYiIiIoh2cJNz549cfnyZYSFhWHXrl04cuQIBg0a9MbH+Pv7Y+fOndi8eTMOHz6M+/fvo3PnztL9Z8+ehZ2dHdatW4fLly/jhx9+wLhx47B06VK5ToOIiIiKGZUQQmj6Sa9evQoPDw+cPn0adevWBQCEhoaiTZs2uHv3LhwdHQs8JiUlBba2tli/fj26du0KAIiJiYG7uzsiIyPRoEGDQmsNHToUV69exYEDB975+FJTU2FpaYmUlBRYWFj8D2dIRERE2vau39+ytNxERkbCyspKCjYA4O3tDT09PZw8ebLQx5w9exaZmZnw9vaWtlWtWhUuLi6IjIwsslZKSgpKlSqluYMnIiKiYs1AjidNTEyEnZ2deiEDA5QqVQqJiYlFPsbQ0BBWVlZq2+3t7Yt8zPHjx7Fx40bs3r37jceTkZGBjIwM6f9TU1Pf4SyIiIioOPpXLTdjx46FSqV64y0mJkauY1Vz6dIldOjQAZMmTULLli3fuO/MmTNhaWkp3ZydnbVyjERERKR9/6rlJjAwEH379n3jPm5ubnBwcMDDhw/VtmdlZeHp06dwcHAo9HEODg549eoVkpOT1VpvkpKSCjzmypUr8PLywqBBgzB+/Pi3Hve4ceMQEBAg/X9qaioDDhERkUL9q3Bja2sLW1vbt+7XsGFDJCcn4+zZs6hTpw4A4MCBA8jJyUH9+vULfUydOnVQokQJhIeHo0uXLgCAa9euIT4+Hg0bNpT2u3z5Mlq0aIE+ffpgxowZ73TcRkZGMDIyeqd9iYiIqHiTZbQUALRu3RpJSUkICgpCZmYm+vXrh7p162L9+vUAgHv37sHLywshISGoV68eAGDIkCHYs2cPgoODYWFhgeHDhwPI7VsD5F6KatGiBXx8fDB37lyplr6+/juFrjwcLUVERFT8vOv3tywdigHg999/x7Bhw+Dl5QU9PT106dIFixcvlu7PzMzEtWvXkJ6eLm1bsGCBtG9GRgZ8fHzw888/S/dv2bIFjx49wrp167Bu3Tppe7ly5XD79m25ToWIiIiKEdlabt5nbLkhIiIqfnQ6zw0RERGRrjDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiMNwQERGRojDcEBERkaIw3BAREZGiyBZunj59ip49e8LCwgJWVlbw8/NDWlraGx/z8uVLDB06FDY2NjAzM0OXLl2QlJRU6L5PnjxB2bJloVKpkJycLMMZEBERUXEkW7jp2bMnLl++jLCwMOzatQtHjhzBoEGD3vgYf39/7Ny5E5s3b8bhw4dx//59dO7cudB9/fz8UL16dTkOnYiIiIoxlRBCaPpJr169Cg8PD5w+fRp169YFAISGhqJNmza4e/cuHB0dCzwmJSUFtra2WL9+Pbp27QoAiImJgbu7OyIjI9GgQQNp319++QUbN27ExIkT4eXlhX/++QdWVlbvfHypqamwtLRESkoKLCws/tvJEhERkVa86/e3LC03kZGRsLKykoINAHh7e0NPTw8nT54s9DFnz55FZmYmvL29pW1Vq1aFi4sLIiMjpW1XrlzB1KlTERISAj29dzv8jIwMpKamqt2IiIhImWQJN4mJibCzs1PbZmBggFKlSiExMbHIxxgaGhZogbG3t5cek5GRgR49emDu3LlwcXF55+OZOXMmLC0tpZuzs/O/OyEiIiIqNv5VuBk7dixUKtUbbzExMXIdK8aNGwd3d3f06tXrXz8uJSVFuiUkJMh0hERERKRrBv9m58DAQPTt2/eN+7i5ucHBwQEPHz5U256VlYWnT5/CwcGh0Mc5ODjg1atXSE5OVmu9SUpKkh5z4MABXLx4EVu2bAEA5HUXKl26NH744QdMmTKl0Oc2MjKCkZHRu5wiERERFXP/KtzY2trC1tb2rfs1bNgQycnJOHv2LOrUqQMgN5jk5OSgfv36hT6mTp06KFGiBMLDw9GlSxcAwLVr1xAfH4+GDRsCAP7880+8ePFCeszp06fRv39/HD16FBUqVPg3p0JEREQK9a/Czbtyd3dHq1atMHDgQAQFBSEzMxPDhg1D9+7dpZFS9+7dg5eXF0JCQlCvXj1YWlrCz88PAQEBKFWqFCwsLDB8+HA0bNhQGin1eoB5/PixVO/fjJYiIiIi5ZIl3ADA77//jmHDhsHLywt6enro0qULFi9eLN2fmZmJa9euIT09Xdq2YMECad+MjAz4+Pjg559/lusQiYiISIFkmefmfcd5boiIiIofnc5zQ0RERKQrDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgMN0RERKQoDDdERESkKAw3REREpCgGuj4AXRBCAABSU1N1fCRERET0rvK+t/O+x4vyQYabZ8+eAQCcnZ11fCRERET0bz179gyWlpZF3q8Sb4s/CpSTk4P79+/D3NwcKpXqXz02NTUVzs7OSEhIgIWFhUxHyJqsqYy6rKmsmrqqy5qsmUcIgWfPnsHR0RF6ekX3rPkgW2709PRQtmzZ//QcFhYWWv1AYU3WLM51WVNZNXVVlzVZE8AbW2zysEMxERERKQrDDRERESkKw82/ZGRkhEmTJsHIyIg1WbPY1NRVXdZUVk1d1WVN1vy3PsgOxURERKRcbLkhIiIiRWG4ISIiIkVhuCEiIiJFYbghIiIiRWG4ISKNyMrKQkhICJKSknR9KERUiMzMTPTv3x+3bt3Seu2srCzs378fy5cvl5ZAun//PtLS0mSpx9FShVi8ePE77ztixAhZjuHo0aNYvnw54uLisGXLFjg5OWHt2rUoX748mjRpovF6bm5uOH36NGxsbNS2Jycno3bt2rh586bGa/bp0wd+fn5o2rSpxp+7KKGhoTAzM5N+hsuWLcPKlSvh4eGBZcuWwdraWpa6W7ZswaZNmxAfH49Xr16p3RcVFSVLTV2ca8mSJXH16lWUK1dO489dlOzsbAQHByM8PBwPHz5ETk6O2v0HDhyQpW5OTg5u3LhRaE05fqe1+Xrq4jOwVq1a77wcjqbeM507d37nfbdu3aqRmq+Li4vD6tWrERcXh0WLFsHOzg5///03XFxc8NFHH2m8nqWlJc6fP4/y5ctr/LmLcufOHbRq1Qrx8fHIyMjA9evX4ebmhpEjRyIjIwNBQUGaLyqoAFdXV7WbqampUKlUwtraWlhbWwuVSiVMTU1F+fLl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"},"metadata":{}}]},{"cell_type":"code","source":"data = data.drop(['track id'], axis = 1)\n\n\ndata","metadata":{"_uuid":"7544d9ad-5943-4c3e-b0a9-d182076eea2b","_cell_guid":"e548f824-acef-4dba-8309-c81ba42283ca","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.478236Z","iopub.execute_input":"2024-10-13T07:33:08.478837Z","iopub.status.idle":"2024-10-13T07:33:08.503828Z","shell.execute_reply.started":"2024-10-13T07:33:08.478782Z","shell.execute_reply":"2024-10-13T07:33:08.502655Z"},"trusted":true},"execution_count":8,"outputs":[{"execution_count":8,"output_type":"execute_result","data":{"text/plain":" genre amazement solemnity tenderness nostalgia calmness power \\\n0 classical 0 1 0 0 0 0 \n1 classical 0 0 0 1 0 0 \n2 classical 0 0 0 1 0 0 \n3 classical 0 0 0 0 1 0 \n4 classical 0 0 0 1 1 0 \n... ... ... ... ... ... ... ... \n8402 pop 1 1 0 0 0 0 \n8403 pop 0 0 0 1 0 0 \n8404 pop 0 0 0 0 0 0 \n8405 pop 1 0 0 0 0 0 \n8406 pop 1 0 0 0 0 0 \n\n joyful_activation tension sadness mood liked disliked age gender \\\n0 1 1 0 3 1 0 21 1 \n1 0 0 0 3 0 1 41 1 \n2 0 0 1 3 0 0 24 1 \n3 0 0 0 3 0 0 32 0 \n4 0 0 0 4 0 1 21 0 \n... ... ... ... ... ... ... ... ... \n8402 1 0 0 3 0 0 26 1 \n8403 1 0 1 3 0 1 29 0 \n8404 0 1 0 4 0 1 34 1 \n8405 1 1 0 5 0 0 39 1 \n8406 0 1 0 4 0 1 18 1 \n\n mother tongue \n0 English \n1 Dutch \n2 English \n3 Spanish \n4 English \n... ... \n8402 Russian \n8403 Russian \n8404 Polish \n8405 French \n8406 Russian \n\n[8407 rows x 16 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 \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 \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
genreamazementsolemnitytendernessnostalgiacalmnesspowerjoyful_activationtensionsadnessmoodlikeddislikedagegendermother tongue
0classical010000110310211English
1classical000100000301411Dutch
2classical000100001300241English
3classical000010000300320Spanish
4classical000110000401210English
...................................................
8402pop110000100300261Russian
8403pop000100101301290Russian
8404pop000000010401341Polish
8405pop100000110500391French
8406pop100000010401181Russian
\n

8407 rows × 16 columns

\n
"},"metadata":{}}]},{"cell_type":"code","source":"","metadata":{"_uuid":"1b44f336-d75d-4645-b483-44e5f887b560","_cell_guid":"b46575de-40e8-4968-b3a0-6e201c7a5169","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = data.sort_values(by=[' mood'], ascending=False)\ndata","metadata":{"_uuid":"124f2541-78e1-4fa5-8a5e-77d695687d0f","_cell_guid":"8bee36e8-a88f-4dc5-bfad-9d8d7d09b749","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.505368Z","iopub.execute_input":"2024-10-13T07:33:08.505850Z","iopub.status.idle":"2024-10-13T07:33:08.531549Z","shell.execute_reply.started":"2024-10-13T07:33:08.505808Z","shell.execute_reply":"2024-10-13T07:33:08.530527Z"},"trusted":true},"execution_count":9,"outputs":[{"execution_count":9,"output_type":"execute_result","data":{"text/plain":" genre amazement solemnity tenderness nostalgia calmness \\\n5883 electronic 0 0 0 0 1 \n6562 pop 0 0 0 0 0 \n4458 rock 0 0 1 0 0 \n1178 classical 0 0 0 0 0 \n6543 electronic 0 0 0 0 0 \n... ... ... ... ... ... ... \n5334 electronic 0 0 0 0 0 \n5332 electronic 0 0 1 0 1 \n2031 classical 0 0 0 1 1 \n2345 classical 0 0 0 1 0 \n1295 classical 0 0 1 0 1 \n\n power joyful_activation tension sadness mood liked disliked age \\\n5883 0 0 0 0 5 1 0 53 \n6562 0 0 1 0 5 0 1 25 \n4458 0 0 0 0 5 0 1 38 \n1178 0 0 0 1 5 0 0 33 \n6543 1 1 0 0 5 1 0 54 \n... ... ... ... ... ... ... ... ... \n5334 0 1 0 0 1 1 0 20 \n5332 0 0 0 0 1 0 0 25 \n2031 0 0 0 0 1 0 0 25 \n2345 0 1 0 0 1 1 0 33 \n1295 0 0 0 0 1 0 0 30 \n\n gender mother tongue \n5883 0 English \n6562 1 English \n4458 0 Dutch \n1178 0 Russian \n6543 0 Estonian \n... ... ... \n5334 1 French \n5332 0 English \n2031 1 Russian \n2345 0 Russian \n1295 1 English \n\n[8407 rows x 16 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 \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 \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
genreamazementsolemnitytendernessnostalgiacalmnesspowerjoyful_activationtensionsadnessmoodlikeddislikedagegendermother tongue
5883electronic000010000510530English
6562pop000000010501251English
4458rock001000000501380Dutch
1178classical000000001500330Russian
6543electronic000001100510540Estonian
...................................................
5334electronic000000100110201French
5332electronic001010000100250English
2031classical000110000100251Russian
2345classical000100100110330Russian
1295classical001010000100301English
\n

8407 rows × 16 columns

\n
"},"metadata":{}}]},{"cell_type":"code","source":"%%capture\nsong_vectorizer = CountVectorizer(lowercase=False)\nsong_vectorizer.fit(data[' genre'])","metadata":{"_uuid":"7bbefcab-7638-47dd-b592-8e5571e572fd","_cell_guid":"54454efe-e88b-45a0-9d25-f80c5a0035ba","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.533041Z","iopub.execute_input":"2024-10-13T07:33:08.533504Z","iopub.status.idle":"2024-10-13T07:33:08.594800Z","shell.execute_reply.started":"2024-10-13T07:33:08.533433Z","shell.execute_reply":"2024-10-13T07:33:08.593722Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"92fb6efd-e669-4ec6-b8d5-9159816d3ccd","_cell_guid":"8bf19c95-4be4-441f-b10f-1e5753deeace","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = data.sort_values(by=[' mood'], ascending=False).head(8407)","metadata":{"_uuid":"37cb1e22-e2f2-4a5c-a1ab-2e1cbe3312c8","_cell_guid":"f8287be2-15db-4368-9cdd-a9380689fd06","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.596500Z","iopub.execute_input":"2024-10-13T07:33:08.596889Z","iopub.status.idle":"2024-10-13T07:33:08.603445Z","shell.execute_reply.started":"2024-10-13T07:33:08.596850Z","shell.execute_reply":"2024-10-13T07:33:08.602557Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"def get_similarities(song_genre, datas):\n\n# Getting vector for the input song.\n text_array1 = song_vectorizer.transform(datas[datas[' genre']==song_genre][' mother tongue']).toarray()\n num_array1 = datas[datas[' genre']==song_genre].select_dtypes(include=np.number).to_numpy()\n\n# We will store similarity for each row of the dataset.\n sim = []\n for idx, row in data.iterrows():\n\t genre = row[' genre']\n\t\n\t# Getting vector for current song.\n\t text_array2 = song_vectorizer.transform(datas[datas[' genre']==genre][' mother tongue']).toarray()\n\t num_array2 = datas[datas[' genre']==genre].select_dtypes(include=np.number).to_numpy()\n\n\t# Calculating similarities for text as well as numeric features\n\t text_sim = cosine_similarity(text_array1, text_array2)[0][0]\n\t num_sim = cosine_similarity(num_array1, num_array2)[0][0]\n\t sim.append(text_sim + num_sim)\n\t\n return sim","metadata":{"_uuid":"2446d4e8-3d65-4c9f-9814-5117a85fbc4c","_cell_guid":"6ce791c5-fd3a-439c-b747-6861fc32c5c6","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.604749Z","iopub.execute_input":"2024-10-13T07:33:08.605122Z","iopub.status.idle":"2024-10-13T07:33:08.616061Z","shell.execute_reply.started":"2024-10-13T07:33:08.605065Z","shell.execute_reply":"2024-10-13T07:33:08.615025Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"def recommend_songs(song_genre, datas=data):\n # Base case\n if data[data[' genre'] == song_genre].shape[0] == 0:\n print('This song is not so popular')\n \n for song in datas.sample(n=5)[' genre'].values:\n print(song)\n return\n \n datas['similarity_factor'] = get_similarities(song_genre, datas)\n \n datas.sort_values(by=['similarity_factor', ' mood'],\n ascending = [False, False],\n inplace=True)\n \n # First song will be the input song itself as the similarity will be highest.\n display(datas[[' genre', ' age', ' mother tongue']][2:7])","metadata":{"_uuid":"f9b1672e-b8d3-41f2-bda3-d18fc6306d93","_cell_guid":"18501619-640c-418d-bde4-a98dfe9325f9","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.617517Z","iopub.execute_input":"2024-10-13T07:33:08.617957Z","iopub.status.idle":"2024-10-13T07:33:08.628758Z","shell.execute_reply.started":"2024-10-13T07:33:08.617908Z","shell.execute_reply":"2024-10-13T07:33:08.627732Z"},"trusted":true},"execution_count":13,"outputs":[]},{"cell_type":"code","source":"recommend_songs('classical')","metadata":{"_uuid":"444cba3e-4bcc-4e0c-9f8d-920a04e37178","_cell_guid":"ce074402-e969-4fe1-85bd-c5908c6bff61","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:33:08.630468Z","iopub.execute_input":"2024-10-13T07:33:08.631030Z","iopub.status.idle":"2024-10-13T07:41:43.863235Z","shell.execute_reply.started":"2024-10-13T07:33:08.630969Z","shell.execute_reply":"2024-10-13T07:41:43.862031Z"},"trusted":true},"execution_count":14,"outputs":[{"output_type":"display_data","data":{"text/plain":" genre age mother tongue\n246 classical 45 Korean\n528 classical 46 English\n85 classical 34 Portuguese\n580 classical 46 English\n587 classical 55 Dutch","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
genreagemother tongue
246classical45Korean
528classical46English
85classical34Portuguese
580classical46English
587classical55Dutch
\n
"},"metadata":{}}]},{"cell_type":"code","source":"\nimport streamlit as st\nst.header(\"music genre based age Recommendation System\" )","metadata":{"_uuid":"be98c715-a3eb-413d-9a68-b758d11db6f1","_cell_guid":"dc6a052e-9e86-4803-b4c3-1b3cc2feb275","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T08:01:06.254773Z","iopub.execute_input":"2024-10-13T08:01:06.256183Z","iopub.status.idle":"2024-10-13T08:02:24.385650Z","shell.execute_reply.started":"2024-10-13T08:01:06.256130Z","shell.execute_reply":"2024-10-13T08:02:24.383554Z"},"trusted":true},"execution_count":21,"outputs":[{"name":"stdout","text":"conda 24.9.0\n\u001b[33mWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/streamlit/\u001b[0m\u001b[33m\n\u001b[0m\u001b[33mWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/streamlit/\u001b[0m\u001b[33m\n\u001b[0m\u001b[33mWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/streamlit/\u001b[0m\u001b[33m\n\u001b[0m^C\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[21], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39msystem(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mconda -V\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 2\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39msystem(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpip install -q streamlit\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mstreamlit\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mst\u001b[39;00m\n\u001b[1;32m 5\u001b[0m st\u001b[38;5;241m.\u001b[39mheader(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmusic genre based age Recommendation System\u001b[39m\u001b[38;5;124m\"\u001b[39m )\n","\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'streamlit'"],"ename":"ModuleNotFoundError","evalue":"No module named 'streamlit'","output_type":"error"}]},{"cell_type":"code","source":"genre = data['genre'].values\ngenre","metadata":{"_uuid":"1b266fc4-5690-46d4-89d9-e7bee55b51ce","_cell_guid":"28f4c7e0-a5ad-4619-a36e-fa7e80c2ea72","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:41:44.405653Z","iopub.status.idle":"2024-10-13T07:41:44.406272Z","shell.execute_reply.started":"2024-10-13T07:41:44.405930Z","shell.execute_reply":"2024-10-13T07:41:44.405959Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if st.button('if st.button('Show Recommendation'):\n recommended_age = recommend_songs(song_genre, datas=data)\n recommended_age","metadata":{"_uuid":"b16edf29-3b36-4b08-8edf-0bbf284c9b29","_cell_guid":"9264a102-2179-40ec-8765-d8359ed601f1","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-10-13T07:41:44.408245Z","iopub.status.idle":"2024-10-13T07:41:44.408817Z","shell.execute_reply.started":"2024-10-13T07:41:44.408520Z","shell.execute_reply":"2024-10-13T07:41:44.408550Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"e1161ad4-d84b-413c-87b8-35e9f91686a5","_cell_guid":"7808e3c8-4331-43d6-a974-a6946b44cadd","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"_uuid":"f66e3d74-1fd8-4268-a34a-4dda1596f4c7","_cell_guid":"72985dcb-49dd-42ba-bc4b-c4d722190ba8","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"In this above. My model brought the recommendations I wanted to bring acording to the mood of the songs of different genres . Firstly it brought to Transformers movies.\n\n# Conclusion\n\n* In this notebook. I worked to explain content based recommendation system.\n* Content based RS models are powerful in new item recommendation. \n* In general it is used TF-IDF and Word2Vec model while content based RS designs.\n* TF-IDF method is the method which explains words frequency in document.\n* It can be created a recommendation model by using cosine distance with the aid of TF-IDF weights.","metadata":{"_uuid":"44c83c1a-3c0f-453d-b4ff-7fc5680f4c4a","_cell_guid":"03c84478-9f90-49ea-8c39-80e5b748160d","trusted":true}}]} \ No newline at end of file