From 408fda8edfb826b1df6985165d0686c81f13720a Mon Sep 17 00:00:00 2001 From: jacko460 <jacko460@student.liu.se> Date: Thu, 28 Nov 2024 12:18:08 +0100 Subject: [PATCH] problem 1 done --- l4/TM-Lab4.ipynb | 214 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 190 insertions(+), 24 deletions(-) diff --git a/l4/TM-Lab4.ipynb b/l4/TM-Lab4.ipynb index 48f5d30..2acab09 100644 --- a/l4/TM-Lab4.ipynb +++ b/l4/TM-Lab4.ipynb @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "deletable": false, "editable": false, @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "deletable": false, "editable": false, @@ -120,9 +120,91 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>category</th>\n", + " <th>sentiment</th>\n", + " <th>text</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>music</td>\n", + " <td>neg</td>\n", + " <td>i bought this album because i loved the title song . it 's such a great song , how bad can the rest of the album be , right ? well , the rest of the songs are just filler and are n't worth the money i paid for this . it 's either shameless bubblegum or oversentimentalized depressing tripe . kenny chesney is a popular artist and as a result he is in the cookie cutter category of the nashville music scene . he 's gotta pump out the albums so the record company can keep lining their pockets while the suckers out there keep buying this garbage to perpetuate more garbage coming out of that town . i 'll get down off my soapbox now . but country music really needs to get back to it 's roots and stop this pop nonsense . what country music really is and what it is considered to be by mainstream are two different things .</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>music</td>\n", + " <td>neg</td>\n", + " <td>i was misled and thought i was buying the entire cd and it contains one song</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>books</td>\n", + " <td>neg</td>\n", + " <td>i have introduced many of my ell , high school students to lois lowery and the depth of her characters . she is a brilliant writer and capable of inspiring fierce passion in her readers as they encounter shocking details of her utopian worlds . i was anxious to read this companion novel and had planned to share it with my class this january . although the series is written for 6th graders and older , this book 's simplicity , in its message , language and writing style will inspire no one . i am sadly disappointed</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>books</td>\n", + " <td>pos</td>\n", + " <td>anything you purchase in the left behind series is an excellent read . these books are great and very close to the bible . i have the entire set . amazon is a great shopping site and they ship fast . i would recommend these to any christian wanting to know about what to expect during the return of christ ! they are fiction but still makes a good point</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>dvd</td>\n", + " <td>pos</td>\n", + " <td>i loved these movies , and i cant wiat for the third one ! very funny , not suitable for chilren</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " category sentiment \\\n", + "0 music neg \n", + "1 music neg \n", + "2 books neg \n", + "3 books pos \n", + "4 dvd pos \n", + "\n", + " text \n", + "0 i bought this album because i loved the title song . it 's such a great song , how bad can the rest of the album be , right ? well , the rest of the songs are just filler and are n't worth the money i paid for this . it 's either shameless bubblegum or oversentimentalized depressing tripe . kenny chesney is a popular artist and as a result he is in the cookie cutter category of the nashville music scene . he 's gotta pump out the albums so the record company can keep lining their pockets while the suckers out there keep buying this garbage to perpetuate more garbage coming out of that town . i 'll get down off my soapbox now . but country music really needs to get back to it 's roots and stop this pop nonsense . what country music really is and what it is considered to be by mainstream are two different things . \n", + "1 i was misled and thought i was buying the entire cd and it contains one song \n", + "2 i have introduced many of my ell , high school students to lois lowery and the depth of her characters . she is a brilliant writer and capable of inspiring fierce passion in her readers as they encounter shocking details of her utopian worlds . i was anxious to read this companion novel and had planned to share it with my class this january . although the series is written for 6th graders and older , this book 's simplicity , in its message , language and writing style will inspire no one . i am sadly disappointed \n", + "3 anything you purchase in the left behind series is an excellent read . these books are great and very close to the bible . i have the entire set . amazon is a great shopping site and they ship fast . i would recommend these to any christian wanting to know about what to expect during the return of christ ! they are fiction but still makes a good point \n", + "4 i loved these movies , and i cant wiat for the third one ! very funny , not suitable for chilren " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pd.set_option('display.max_colwidth', None)\n", "df.head()" @@ -157,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "deletable": false, "nbgrader": { @@ -172,12 +254,75 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<Compressed Sparse Row sparse matrix of dtype 'float64'\n", + "\twith 954629 stored elements and shape (11914, 46925)>\n", + " Coords\tValues\n", + " (0, 5904)\t0.056929425503622226\n", + " (0, 41949)\t0.08871509850773031\n", + " (0, 2200)\t0.12878618103532022\n", + " (0, 4687)\t0.049990934843139635\n", + " (0, 25057)\t0.07972497370578226\n", + " (0, 41787)\t0.21550414938872559\n", + " (0, 42272)\t0.08751936359847944\n", + " (0, 38871)\t0.14374254531641648\n", + " (0, 22502)\t0.09040211869379988\n", + " (0, 40449)\t0.06429030175302079\n", + " (0, 18713)\t0.044436413072373164\n", + " (0, 20556)\t0.05271819406050571\n", + " (0, 4170)\t0.06279703318273992\n", + " (0, 6980)\t0.0881303883930043\n", + " (0, 35111)\t0.16074473556255148\n", + " (0, 29214)\t0.09472887649028774\n", + " (0, 4600)\t0.0718196911674412\n", + " (0, 35499)\t0.06431081194600634\n", + " (0, 45614)\t0.0478290012138695\n", + " (0, 38876)\t0.06742052297220374\n", + " (0, 3212)\t0.10453317434877729\n", + " (0, 23098)\t0.040835261598743754\n", + " (0, 16304)\t0.1217614426568117\n", + " (0, 2675)\t0.08300156850282825\n", + " (0, 46300)\t0.06605615495132\n", + " :\t:\n", + " (11913, 32444)\t0.07922618423770325\n", + " (11913, 6294)\t0.05863819402358507\n", + " (11913, 42792)\t0.12543932408492287\n", + " (11913, 11533)\t0.07437313257929593\n", + " (11913, 42024)\t0.07025000460686229\n", + " (11913, 19337)\t0.07605517235233637\n", + " (11913, 32951)\t0.08479262474849049\n", + " (11913, 8859)\t0.08853424584225827\n", + " (11913, 1950)\t0.06515689023034478\n", + " (11913, 42020)\t0.07226804019811872\n", + " (11913, 4924)\t0.1349954584575545\n", + " (11913, 29438)\t0.08713346374692296\n", + " (11913, 31398)\t0.08589788637265237\n", + " (11913, 32599)\t0.08204034937040544\n", + " (11913, 29040)\t0.06770143044434682\n", + " (11913, 30758)\t0.15401898409780365\n", + " (11913, 5438)\t0.33917049899396196\n", + " (11913, 28990)\t0.07700949204890183\n", + " (11913, 46361)\t0.07986215367610885\n", + " (11913, 14484)\t0.08126293577144417\n", + " (11913, 35261)\t0.0901513300951947\n", + " (11913, 25685)\t0.0901513300951947\n", + " (11913, 46553)\t0.0901513300951947\n", + " (11913, 45196)\t0.09742264016600881\n", + " (11913, 35491)\t0.09742264016600881\n" + ] + } + ], "source": [ - "vectorizer, reviews = ..., ...\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "vectorizer = TfidfVectorizer()\n", + "\n", + "reviews = vectorizer.fit_transform(df['text'])\n", + "print(reviews)\n" ] }, { @@ -191,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "deletable": false, "nbgrader": { @@ -223,8 +368,8 @@ " Returns:\n", " The trained k-means classifier.\n", " \"\"\"\n", - " # YOUR CODE HERE\n", - " raise NotImplementedError()" + " kmeans = KMeans(n_clusters=n_clusters).fit(data)\n", + " return kmeans\n" ] }, { @@ -257,15 +402,17 @@ "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", - "\n", + "import numpy as np\n", "def plot_cluster_size(kmeans):\n", " \"\"\"Produce & display a bar plot with the number of documents per cluster.\n", "\n", " Arguments:\n", " kmeans: The trained k-means classifier.\n", " \"\"\"\n", - " # YOUR CODE HERE\n", - " raise NotImplementedError()" + " clusters_amounts = np.unique(kmeans.labels_, return_counts=True)\n", + " plt.bar(clusters_amounts[0], clusters_amounts[1])\n", + " plt.show()\n", + "\n" ] }, { @@ -279,9 +426,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "kmeans = fit_kmeans(reviews, 3)\n", "plot_cluster_size(kmeans)" @@ -303,7 +468,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": { "deletable": false, "nbgrader": { @@ -337,8 +502,9 @@ " cluster. Example:\n", " [[\"first\", \"foo\", ...], [\"second\", \"bar\", ...], [\"third\", \"baz\", ...]]\n", " \"\"\"\n", - " # YOUR CODE HERE\n", - " raise NotImplementedError()" + " centers = kmeans.cluster_centers_\n", + " labels = kmeans.labels_\n", + " print()" ] }, { @@ -366,8 +532,8 @@ "source": [ "summaries = compute_cluster_summaries(kmeans, vectorizer, 10)\n", "\n", - "for idx, terms in enumerate(summaries):\n", - " print(f\"Cluster {idx}: {', '.join(terms)}\")" + "#for idx, terms in enumerate(summaries):\n", + "# print(f\"Cluster {idx}: {', '.join(terms)}\")" ] }, { @@ -850,7 +1016,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -864,7 +1030,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.11.0" } }, "nbformat": 4, -- GitLab