{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Άσκηση text mining.ipynb","provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"TPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"CvdzwUp0mebD"},"source":["# Άσκηση: μελέτη επίδρασης προεπεξεργασίας στη διαστατικότητα και την ομαδοποίηση\n","\n","\n","\n","Αρχικά κάνουμε update και import τις βιβλιοθήκες που θα χρειαστούμε."]},{"cell_type":"code","metadata":{"id":"35-RlmEMmebG","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1637501964585,"user_tz":-120,"elapsed":14216,"user":{"displayName":"Giorgos Siolas","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GjxnZOAObbc3X0z9X2rs1N_1geznqhrotkq3KF-p_M=s64","userId":"10127542075805046236"}},"outputId":"ff93079e-c91e-4ed3-a191-f7800df0862c"},"source":["!pip install --upgrade scikit-learn\n","!pip install --upgrade numpy\n","!pip install --upgrade scipy\n","!pip install --upgrade nltk"],"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: scikit-learn in /usr/local/lib/python3.7/dist-packages (1.0.1)\n","Requirement already satisfied: scipy>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn) (1.7.2)\n","Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn) (1.1.0)\n","Requirement already satisfied: numpy>=1.14.6 in /usr/local/lib/python3.7/dist-packages (from scikit-learn) (1.21.4)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn) (3.0.0)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (1.21.4)\n","Requirement already satisfied: scipy in /usr/local/lib/python3.7/dist-packages (1.7.2)\n","Requirement already satisfied: numpy<1.23.0,>=1.16.5 in /usr/local/lib/python3.7/dist-packages (from scipy) (1.21.4)\n","Requirement already satisfied: nltk in /usr/local/lib/python3.7/dist-packages (3.6.5)\n","Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from nltk) (1.1.0)\n","Requirement already satisfied: click in /usr/local/lib/python3.7/dist-packages (from nltk) (7.1.2)\n","Requirement already satisfied: tqdm in /usr/local/lib/python3.7/dist-packages (from nltk) (4.62.3)\n","Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.7/dist-packages (from nltk) (2021.11.10)\n"]}]},{"cell_type":"code","metadata":{"id":"aoGLewGiEomz","executionInfo":{"status":"ok","timestamp":1637501965000,"user_tz":-120,"elapsed":432,"user":{"displayName":"Giorgos Siolas","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GjxnZOAObbc3X0z9X2rs1N_1geznqhrotkq3KF-p_M=s64","userId":"10127542075805046236"}}},"source":["import numpy as np\n","from sklearn.feature_extraction.text import TfidfVectorizer\n","from sklearn.cluster import KMeans\n","from sklearn.metrics import silhouette_score\n","import matplotlib.pyplot as plt\n","%matplotlib inline"],"execution_count":2,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ua5-z6r4mebN"},"source":["Φέρνουμε το σύνολο κειμένων μας (Reuters)."]},{"cell_type":"code","metadata":{"id":"zCUw7JWfmebP","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1637501966624,"user_tz":-120,"elapsed":1628,"user":{"displayName":"Giorgos Siolas","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GjxnZOAObbc3X0z9X2rs1N_1geznqhrotkq3KF-p_M=s64","userId":"10127542075805046236"}},"outputId":"61d05125-74f5-4e27-9442-a529710b17ea"},"source":["import nltk\n","\n","\n","nltk.download('reuters') # κατεβάζουμε το dataset\n","from nltk.corpus import reuters # το κάνουμε import\n","\n","# List of document ids\n","documents = reuters.fileids()\n"," \n","train_docs_id = list(filter(lambda doc: doc.startswith(\"train\"),\n"," documents))\n","\n","train_docs = [reuters.raw(doc_id) for doc_id in train_docs_id]"],"execution_count":3,"outputs":[{"output_type":"stream","name":"stderr","text":["[nltk_data] Downloading package reuters to /root/nltk_data...\n","[nltk_data] Package reuters is already up-to-date!\n"]}]},{"cell_type":"markdown","metadata":{"id":"eajysVOHv_22"},"source":["Τα δεδομένα μας θα είναι τα πρώτα 500 έγγραφα του train set"]},{"cell_type":"code","metadata":{"id":"4TQkSfnmv6xH","executionInfo":{"status":"ok","timestamp":1637501966625,"user_tz":-120,"elapsed":15,"user":{"displayName":"Giorgos Siolas","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GjxnZOAObbc3X0z9X2rs1N_1geznqhrotkq3KF-p_M=s64","userId":"10127542075805046236"}}},"source":["data = train_docs[:500]"],"execution_count":4,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"dcWNXljdmebU"},"source":["Θα χρησιμοποιήσουμε το [TF-IDF Vectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html) του scikit-learn προκειμένου να μετατρέψουμε τα κείμενά μας σε έναν πίνακα διανυσμάτων. Καλείστε να πειραματιστείτε και να επιλέξετε εσείς τα ορίσματα του TF-IDF. Στη συνέχεια θα χρησιμοποιήσουμε τον αλγόριθμο k-means και τη μετρική silhouette για να εντοπίσουμε τον αριθμό των ομάδων στις οποίες ανήκουν τα κείμενα. Για να μπορέσουμε να δούμε και ορισμένα στοιχεία για τις θεματικές ενότητες στις οποίες ανήκουν τα κείμενα, θα τυπώσουμε τους πιο σημαντικούς όρους της κάθε ομάδας.\n","\n","1. Δοκιμάστε να τρέξετε τον TF-IDF Vectorizer χωρίς παραμέτρους. Τι διαστάσεις έχει το διάνυσμα TF-IDF; Τα αποτελέσματα βγάζουν νόημα;\n","2. Δοκιμάστε να τρέξετε τον Vectorizer, αφαιρώντας τα english stopwords (παράμετρος stop_words='english'). Τι διαστάσεις έχει τώρα το διάνυσμα; Βελτιώθηκε καθόλου η ποιότητα του clustering;\n","3. Δοκιμάστε να τρέξετε τον Vectorizer, αφαιρώντας και τους όρους που εμφανίζονται σε λιγότερα από 10 documents (παράμετρος min_df=10). Τι διαστάσεις έχει το διάνυσμα; Βελτιώθηκε το clustering;\n","4. Δοκιμάστε να τρέξετε τον Vectorizer, αφαιρώντας και τους όρους που εμφανίζονται σε περισσότερα από το 50% των κειμένων (παράμετρος max_df=0.5). Βελτιώνει αυτό το clustering;\n","5. Δοκιμάστε να βελτιώσετε περαιτέρω την ποιότητα του clustering. Αυξήστε το μέγιστο k σε 50. Σε πόσες κατηγορίες χωρίζεται το σύνολο των κειμένων μας; Ποια είναι η θεματική ενότητα της κάθε κατηγορίας; Πως θα μπορούσαν να βελτιωθούν περισσότερο τα αποτελέσματα (πχ τί λείπει από τον TfidfVectorizer);"]},{"cell_type":"markdown","metadata":{"id":"GxH5xO8B06gR"},"source":["## 1. \n","διαστάσεις (500, 6998)"]},{"cell_type":"code","metadata":{"id":"WXIlUPsLvnPV","colab":{"base_uri":"https://localhost:8080/","height":334},"executionInfo":{"status":"ok","timestamp":1637502443735,"user_tz":-120,"elapsed":60053,"user":{"displayName":"Giorgos Siolas","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GjxnZOAObbc3X0z9X2rs1N_1geznqhrotkq3KF-p_M=s64","userId":"10127542075805046236"}},"outputId":"a0f567b4-0f9a-4e10-c43e-7763ecc1e101"},"source":["vectorizer = TfidfVectorizer()\n","\n","tf_idf_array = vectorizer.fit_transform(data).toarray()\n","print('TF-IDF array shape:', tf_idf_array.shape)\n","\n","silhouette_scores = []\n","for k in range(2, 20):\n"," km = KMeans(k)\n"," preds = km.fit_predict(tf_idf_array)\n"," silhouette_scores.append(silhouette_score(tf_idf_array, preds))\n"," \n","plt.plot(range(2, 20), silhouette_scores)\n","best_k = np.argmax(silhouette_scores) + 2 # +2 γιατί ξεκινάμε το range() από k=2 και όχι από 0 που ξεκινάει η αρίθμηση της λίστας\n","plt.scatter(best_k, silhouette_scores[best_k-2], color='r') # για τον ίδιο λόγο το καλύτερο k είναι αυτό 2 θέσεις παρακάτω από το index της λίστας\n","plt.xlim([2,19])\n","plt.annotate(\"best k\", xy=(best_k, silhouette_scores[best_k-2]), xytext=(5, silhouette_scores[best_k-2]),arrowprops=dict(arrowstyle=\"->\")) # annotation\n","print('Maximum average silhouette score for k =', best_k)\n","\n","km = KMeans(best_k)\n","km.fit(tf_idf_array)\n","terms = vectorizer.get_feature_names_out()\n","order_centroids = km.cluster_centers_.argsort()[:, ::-1]\n","for i in range(best_k):\n"," out = \"Cluster %d:\" % i\n"," for ind in order_centroids[i, :10]:\n"," out += ' %s' % terms[ind]\n"," print(out)"],"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["TF-IDF array shape: (500, 6998)\n","Maximum average silhouette score for k = 2\n","Cluster 0: the to of in said and pct for it dlrs\n","Cluster 1: vs cts loss mln net 000 shr revs profit qtr\n"]},{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAYcAAAD4CAYAAAAHHSreAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhV1dX48e/KSGYIJJAwSxgSQKJEcEAREQUntM5Vq9W3DnVsa99i+6uvtbXV1kprtXXCobROdQJlcgacUECGQEBCmEkgCRBCQkhusn5/3BN6yUBuwp2SrM/z5Mm55+yz77oZ7rpn7332FlXFGGOM8RQW7ACMMcaEHksOxhhjGrHkYIwxphFLDsYYYxqx5GCMMaaRiGAH4As9evTQAQMGBDsMY4xpV5YtW1aiqilNHesQyWHAgAEsXbo02GEYY0y7IiJbmjvmVbOSiEwWkfUiki8i05o4Hi0irznHl4jIgAbH+4nIARG512PfZhFZLSIrRGSpx/5kEflARDY437t5E6MxxhjfaTE5iEg48CQwBcgCrhaRrAbFbgL2qmoGMB14pMHxx4B5TVQ/QVWzVTXHY9804CNVHQx85Dw2js2bNzNixIhjrufTTz/liy++aPLYAw88wKOPPnrMz2GMab+8uXIYA+SraoGqVgOvAlMblJkKvORsvwFMFBEBEJGLgU3AGi9j8qzrJeBiL88zrXC05GCMMd4kh97ANo/H2519TZZRVRdQBnQXkXjgF8BvmqhXgfdFZJmI3Oyxv6eqFjrbRUDPpoISkZtFZKmILC0uLvbiZXQcLpeLa665hszMTC677DIqKysBWLZsGePHj2f06NGce+65FBa6f4yPP/44WVlZHH/88Vx11VVs3ryZp556iunTp5Odnc3ixYubfa5nn32WKVOmcPDgwYC8NmNMaPB3h/QDwHRVPeBcSHgap6o7RCQV+EBE1qnqIs8Cqqoi0uTkT6r6DPAMQE5OTqeaIGr9+vXMmDGD0047jRtvvJG///3v3H333dx5553MmjWLlJQUXnvtNX71q1/x/PPP8/DDD7Np0yaio6PZt28fXbt25dZbbyU+Pp5777232ed54okn+OCDD3jnnXeIjo4O4Cs0xgSbN8lhB9DX43EfZ19TZbaLSASQBJQCY4HLROSPQFegTkSqVPUJVd0BoKq7ReRt3M1Xi4BdIpKmqoUikgbsbjHCZctgwAB46CG45hqcenn//feJjY3l9NNP9+JlBobL5aKysvLwV0VFxVG3TznlFMaNG3dEHX379uW0004D4Nprr+Xxxx9n8uTJ5ObmMmnSJABqa2tJS0sD4Pjjj+eaa67h4osv5uKLvWul++c//0nfvn155513iIyM9OFPwBjTHniTHL4BBovIQNxJ4Crg+w3KzAauB74ELgM+Vvd0r4fflUXkAeCAqj4hInFAmKqWO9vnAA82qOth5/ssr17Jli1ws7t1asXw4fz85z9n69atvPjii16dDlBXV9eqN+62bLtcLmJjY4mNjSUuLq7F7erq6kZxNrwKExFUleHDh/Pll182Kj9nzhwWLVrEu+++y0MPPcTq1atb/FmMHDmSFStWsH37dgYOHOj1z9AY0zG0mBxU1SUidwALgHDgeVVdIyIPAktVdTYwA5gpIvnAHtwJ5Gh6Am87b3IRwMuqOt859jDwuojcBGwBrmgpxj0xiXBwP4WVlVx6443kRkdz5plncskll/D666/zwgsvePXmfejQIWJiYlp8446JiSEuLo64uDiSkpJIS0vz6o0+NjaW6OjoRm/urbV161a+/PJLTjnlFF5++WXGjRvH0KFDKS4uPry/pqaG7777jszMTLZt28aECRMYN24cr776KgcOHCAhIYH9+/c3+xwnnHACt912GxdddBELFiwgPT39mGI2xrQvXvU5qOpcYG6Dffd7bFcBl7dQxwMe2wXAqGbKlQITvYmr3o7EVN7rfzw9133GhupqwmNjcblcREdH07NnT68/qcfExBzzG3cgDB06lCeffJIbb7yRrKwsbrvtNqKionjjjTe46667KCsrw+Vycc899zBkyBCuvfZaysrKUFXuuusuunbtyoUXXshll13GrFmz+Nvf/tZk09u4ceN49NFHOf/88/nggw/o0aNHEF6tMSYYpCMs9pPcvY92v/EJZrzxIKfXlfLpiy/y6KOPsmzZMh5++GFuuOGGYIdojDEhR0SWNbjP7LAOMX1G/72F9CrZxi3f+xX/HlbDhAkTmDBhAmvXrmX37pb7s40xxhypQ8zKGq51vPTls6TGRXJjYTIbdpUDkJWVxZlnnhnc4Iwxph3qEMmB0aNJXbeKmXefTWR4GNfN+JrteyuDHZUxxrRbHSM5OPp1j+WfN46h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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"fITDN0cmtMQW"},"source":["## 2-5. "]}]}