diff --git "a/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" "b/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" new file mode 100644 index 0000000..404d0b9 --- /dev/null +++ "b/Week13_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" @@ -0,0 +1,1289 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "# ✅ 1. 기존 라이브러리 전부 삭제\n", + "!pip uninstall -y numpy scikit-learn lightgbm\n", + "\n", + "# ✅ 2. 호환되는 버전으로 재설치 (NumPy 1.24.4 기준)\n", + "!pip install numpy==1.24.4 scikit-learn==1.2.2 lightgbm==4.1.0 --no-cache-dir --force-reinstall\n", + "\n", + "# ✅ 3. 런타임 강제 재시작 (이 아래 코드는 자동 실행 안 되므로, 재시작 후 수동 실행 필요)\n", + "import os\n", + "os.kill(os.getpid(), 9)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "P_FpzFm1-yy1", + "outputId": "a4d1deb0-2b74-4575-cefb-5927d9255fa1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Found existing installation: numpy 2.3.1\n", + "Uninstalling numpy-2.3.1:\n", + " Successfully uninstalled numpy-2.3.1\n", + "Found existing installation: scikit-learn 1.2.2\n", + "Uninstalling scikit-learn-1.2.2:\n", + " Successfully uninstalled scikit-learn-1.2.2\n", + "Found existing installation: lightgbm 4.1.0\n", + "Uninstalling lightgbm-4.1.0:\n", + " Successfully uninstalled lightgbm-4.1.0\n", + "Collecting numpy==1.24.4\n", + " Downloading numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", + "Collecting scikit-learn==1.2.2\n", + " Downloading scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\n", + "Collecting lightgbm==4.1.0\n", + " Downloading lightgbm-4.1.0-py3-none-manylinux_2_28_x86_64.whl.metadata (19 kB)\n", + "Collecting scipy>=1.3.2 (from scikit-learn==1.2.2)\n", + " Downloading scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.0/62.0 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting joblib>=1.1.1 (from scikit-learn==1.2.2)\n", + " Downloading joblib-1.5.1-py3-none-any.whl.metadata (5.6 kB)\n", + "Collecting threadpoolctl>=2.0.0 (from scikit-learn==1.2.2)\n", + " Downloading threadpoolctl-3.6.0-py3-none-any.whl.metadata (13 kB)\n", + "Downloading numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.3/17.3 MB\u001b[0m \u001b[31m278.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.6/9.6 MB\u001b[0m \u001b[31m262.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading lightgbm-4.1.0-py3-none-manylinux_2_28_x86_64.whl (3.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m322.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading joblib-1.5.1-py3-none-any.whl (307 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.7/307.7 kB\u001b[0m \u001b[31m294.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m37.7/37.7 MB\u001b[0m \u001b[31m252.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading threadpoolctl-3.6.0-py3-none-any.whl (18 kB)\n", + "Installing collected packages: threadpoolctl, numpy, joblib, scipy, scikit-learn, lightgbm\n", + " Attempting uninstall: threadpoolctl\n", + " Found existing installation: threadpoolctl 3.6.0\n", + " Uninstalling threadpoolctl-3.6.0:\n", + " Successfully uninstalled threadpoolctl-3.6.0\n", + " Attempting uninstall: joblib\n", + " Found existing installation: joblib 1.5.1\n", + " Uninstalling joblib-1.5.1:\n", + " Successfully uninstalled joblib-1.5.1\n", + " Attempting uninstall: scipy\n", + " Found existing installation: scipy 1.15.3\n", + " Uninstalling scipy-1.15.3:\n", + " Successfully uninstalled scipy-1.15.3\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "pymc 5.23.0 requires numpy>=1.25.0, but you have numpy 1.24.4 which is incompatible.\n", + "mlxtend 0.23.4 requires scikit-learn>=1.3.1, but you have scikit-learn 1.2.2 which is incompatible.\n", + "tensorflow 2.18.0 requires numpy<2.1.0,>=1.26.0, but you have numpy 1.24.4 which is incompatible.\n", + "xarray-einstats 0.9.0 requires numpy>=1.25, but you have numpy 1.24.4 which is incompatible.\n", + "jaxlib 0.5.1 requires numpy>=1.25, but you have numpy 1.24.4 which is incompatible.\n", + "jax 0.5.2 requires numpy>=1.25, but you have numpy 1.24.4 which is incompatible.\n", + "treescope 0.1.9 requires numpy>=1.25.2, but you have numpy 1.24.4 which is incompatible.\n", + "blosc2 3.4.0 requires numpy>=1.26, but you have numpy 1.24.4 which is incompatible.\n", + "imbalanced-learn 0.13.0 requires scikit-learn<2,>=1.3.2, but you have scikit-learn 1.2.2 which is incompatible.\n", + "thinc 8.3.6 requires numpy<3.0.0,>=2.0.0, but you have numpy 1.24.4 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed joblib-1.5.1 lightgbm-4.1.0 numpy-1.24.4 scikit-learn-1.2.2 scipy-1.15.3 threadpoolctl-3.6.0\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import sklearn\n", + "import lightgbm\n", + "\n", + "print(\"✅ NumPy version:\", np.__version__)\n", + "print(\"✅ scikit-learn version:\", sklearn.__version__)\n", + "print(\"✅ LightGBM version:\", lightgbm.__version__)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZYWYGdKA-2ia", + "outputId": "71882b23-3df0-4bb6-e5de-384f9db5d406" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "✅ NumPy version: 1.24.4\n", + "✅ scikit-learn version: 1.2.2\n", + "✅ LightGBM version: 4.1.0\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_uqLq_eeesHC", + "outputId": "99c0bb80-1ff5-4750-f504-582b60e7df73" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 213 + }, + "id": "dVKutHzGdtne", + "outputId": "9aa28a6c-581f-4687-effa-5e707f2df716" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(1482535, 8)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " train_id name item_condition_id \\\n", + "0 0 MLB Cincinnati Reds T Shirt Size XL 3 \n", + "1 1 Razer BlackWidow Chroma Keyboard 3 \n", + "2 2 AVA-VIV Blouse 1 \n", + "\n", + " category_name brand_name price \\\n", + "0 Men/Tops/T-shirts NaN 10.0 \n", + "1 Electronics/Computers & Tablets/Components & P... Razer 52.0 \n", + "2 Women/Tops & Blouses/Blouse Target 10.0 \n", + "\n", + " shipping item_description \n", + "0 1 No description yet \n", + "1 0 This keyboard is in great condition and works ... \n", + "2 1 Adorable top with a hint of lace and a key hol... " + ], + "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", + "
train_idnameitem_condition_idcategory_namebrand_namepriceshippingitem_description
00MLB Cincinnati Reds T Shirt Size XL3Men/Tops/T-shirtsNaN10.01No description yet
11Razer BlackWidow Chroma Keyboard3Electronics/Computers & Tablets/Components & P...Razer52.00This keyboard is in great condition and works ...
22AVA-VIV Blouse1Women/Tops & Blouses/BlouseTarget10.01Adorable top with a hint of lace and a key hol...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "mercari_df" + } + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "from sklearn.linear_model import Ridge , LogisticRegression\n", + "from sklearn.model_selection import train_test_split , cross_val_score\n", + "from sklearn.feature_extraction.text import CountVectorizer , TfidfVectorizer\n", + "import pandas as pd\n", + "\n", + "mercari_df= pd.read_csv('/content/drive/MyDrive/EURON/13주차/train.tsv',sep='\\t')\n", + "print(mercari_df.shape)\n", + "mercari_df.head(3)" + ] + }, + { + "cell_type": "code", + "source": [ + "print(mercari_df.info())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ifBj_Mxee_J5", + "outputId": "49b88f6a-d9e8-4ddb-a82b-24da0a50a5f3" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "RangeIndex: 1482535 entries, 0 to 1482534\n", + "Data columns (total 8 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 train_id 1482535 non-null int64 \n", + " 1 name 1482535 non-null object \n", + " 2 item_condition_id 1482535 non-null int64 \n", + " 3 category_name 1476208 non-null object \n", + " 4 brand_name 849853 non-null object \n", + " 5 price 1482535 non-null float64\n", + " 6 shipping 1482535 non-null int64 \n", + " 7 item_description 1482529 non-null object \n", + "dtypes: float64(1), int64(3), object(4)\n", + "memory usage: 90.5+ MB\n", + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "y_train_df = mercari_df['price']\n", + "plt.figure(figsize=(6,4))\n", + "sns.histplot(y_train_df, bins=100)\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 388 + }, + "id": "XtDHtCIxfCEh", + "outputId": "27b85a1d-9d0c-44c5-af2a-f7a29738127e" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAFzCAYAAAAty0N3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMEBJREFUeJzt3XtYVPXe//8XIDPgYcBDgBQqZnkk8RBEB6stt+imvTPbd2rusiKtbiyVfZu6y1MnTXdaeazdnXrdu9L6XdsOanYZZlYSKokKJplpequASTBaCsh8fn/0ZV2OoAKig6vn47rmupj1ec9a7w9LZl6uWWvGzxhjBAAAYAP+vm4AAACgvhBsAACAbRBsAACAbRBsAACAbRBsAACAbRBsAACAbRBsAACAbRBsAACAbTTydQO/Jx6PR4cOHVKzZs3k5+fn63YAALhsGGN07NgxRUZGyt//7MdlCDaX0KFDhxQVFeXrNgAAuGwdOHBAV1111VnHCTaXULNmzST9tlNcLpePuwEA4PLhdrsVFRVlvZaeDcHmEqp8+8nlchFsAACog/OdysHJwwAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDb4SoXLXFlZmbKzs72WxcbGyuFw+KYhAAB8iGBzmcvOztao+R8oJLK9JKnk0A+alyrFxcX5uDMAAC49go0NhES2V8voLr5uAwAAn+McGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBsEGwAAYBs+DTYVFRWaNGmSoqOjFRwcrKuvvlrPPvusjDFWjTFGkydPVuvWrRUcHKzExETt3r3baz1FRUUaNmyYXC6XQkNDlZKSouPHj3vVbN++XbfccouCgoIUFRWlmTNnVunnvffeU6dOnRQUFKSYmBitXr3aa7wmvQAAAN/xabB58cUXtXDhQs2bN0/ffvutXnzxRc2cOVNz5861ambOnKlXX31VixYtUmZmppo0aaKkpCSdPHnSqhk2bJhyc3O1du1arVy5Uhs2bNDIkSOtcbfbrX79+qlt27bKysrSrFmzNHXqVL3++utWzcaNGzV06FClpKRo69atGjhwoAYOHKicnJxa9QIAAHzI+FBycrJ56KGHvJYNGjTIDBs2zBhjjMfjMREREWbWrFnWeHFxsXE6neadd94xxhizc+dOI8ls3rzZqvn444+Nn5+fOXjwoDHGmAULFpjmzZub0tJSq2b8+PGmY8eO1v177rnHJCcne/USHx9vHnnkkRr3cj4lJSVGkikpKalRfU1kZmaaxAlvmMGvbTSDX9toEie8YTIzM+tt/QAANAQ1fQ316RGbG2+8Uenp6fruu+8kSdu2bdOXX36pAQMGSJL27t2r/Px8JSYmWo8JCQlRfHy8MjIyJEkZGRkKDQ1V7969rZrExET5+/srMzPTqunTp48cDodVk5SUpLy8PP38889Wzenbqayp3E5NejlTaWmp3G631w0AAFw8jXy58QkTJsjtdqtTp04KCAhQRUWFnn/+eQ0bNkySlJ+fL0kKDw/3elx4eLg1lp+fr7CwMK/xRo0aqUWLFl410dHRVdZROda8eXPl5+efdzvn6+VM06dP17Rp02rwmwAAAPXBp0ds3n33Xb311lt6++239c0332jp0qX6xz/+oaVLl/qyrXozceJElZSUWLcDBw74uiUAAGzNp0dsxo0bpwkTJmjIkCGSpJiYGP3444+aPn26hg8froiICElSQUGBWrdubT2uoKBAsbGxkqSIiAgVFhZ6rffUqVMqKiqyHh8REaGCggKvmsr756s5ffx8vZzJ6XTK6XTW7JcBAAAumE+P2Pz666/y9/duISAgQB6PR5IUHR2tiIgIpaenW+Nut1uZmZlKSEiQJCUkJKi4uFhZWVlWzbp16+TxeBQfH2/VbNiwQeXl5VbN2rVr1bFjRzVv3tyqOX07lTWV26lJLwAAwLd8Gmz+9Kc/6fnnn9eqVau0b98+rVixQrNnz9Zdd90lSfLz89OYMWP03HPP6cMPP9SOHTt0//33KzIyUgMHDpQkde7cWf3799eIESO0adMmffXVVxo1apSGDBmiyMhISdK9994rh8OhlJQU5ebmavny5XrllVeUlpZm9TJ69GitWbNGL730knbt2qWpU6dqy5YtGjVqVI17AQAAPnaJrtKqltvtNqNHjzZt2rQxQUFBpn379uapp57yuizb4/GYSZMmmfDwcON0Ok3fvn1NXl6e13qOHj1qhg4dapo2bWpcLpd58MEHzbFjx7xqtm3bZm6++WbjdDrNlVdeaWbMmFGln3fffddce+21xuFwmK5du5pVq1Z5jdekl3Phcm8AAOqmpq+hfsac9jG/uKjcbrdCQkJUUlIil8tVL+vctGmTnlqxQy2ju0iSju7dqefvilFcXFy9rB8AgIagpq+hfFcUAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDZ8Hm4MHD+qvf/2rWrZsqeDgYMXExGjLli3WuDFGkydPVuvWrRUcHKzExETt3r3bax1FRUUaNmyYXC6XQkNDlZKSouPHj3vVbN++XbfccouCgoIUFRWlmTNnVunlvffeU6dOnRQUFKSYmBitXr3aa7wmvQAAAN/xabD5+eefddNNNykwMFAff/yxdu7cqZdeeknNmze3ambOnKlXX31VixYtUmZmppo0aaKkpCSdPHnSqhk2bJhyc3O1du1arVy5Uhs2bNDIkSOtcbfbrX79+qlt27bKysrSrFmzNHXqVL3++utWzcaNGzV06FClpKRo69atGjhwoAYOHKicnJxa9QIAAHzI+ND48ePNzTfffNZxj8djIiIizKxZs6xlxcXFxul0mnfeeccYY8zOnTuNJLN582ar5uOPPzZ+fn7m4MGDxhhjFixYYJo3b25KS0u9tt2xY0fr/j333GOSk5O9th8fH28eeeSRGvdyPiUlJUaSKSkpqVF9TWRmZprECW+Ywa9tNINf22gSJ7xhMjMz6239AAA0BDV9DfXpEZsPP/xQvXv31n/+538qLCxMPXr00D//+U9rfO/evcrPz1diYqK1LCQkRPHx8crIyJAkZWRkKDQ0VL1797ZqEhMT5e/vr8zMTKumT58+cjgcVk1SUpLy8vL0888/WzWnb6eypnI7NenlTKWlpXK73V43AABw8fg02Pzwww9auHChrrnmGn3yySd67LHH9MQTT2jp0qWSpPz8fElSeHi41+PCw8Otsfz8fIWFhXmNN2rUSC1atPCqqW4dp2/jbDWnj5+vlzNNnz5dISEh1i0qKup8vxIAAHABfBpsPB6PevbsqRdeeEE9evTQyJEjNWLECC1atMiXbdWbiRMnqqSkxLodOHDA1y0BAGBrPg02rVu3VpcuXbyWde7cWfv375ckRURESJIKCgq8agoKCqyxiIgIFRYWeo2fOnVKRUVFXjXVreP0bZyt5vTx8/VyJqfTKZfL5XUDAAAXj0+DzU033aS8vDyvZd99953atm0rSYqOjlZERITS09OtcbfbrczMTCUkJEiSEhISVFxcrKysLKtm3bp18ng8io+Pt2o2bNig8vJyq2bt2rXq2LGjdQVWQkKC13Yqayq3U5NeAACAb/k02IwdO1Zff/21XnjhBX3//fd6++239frrrys1NVWS5OfnpzFjxui5557Thx9+qB07duj+++9XZGSkBg4cKOm3Izz9+/fXiBEjtGnTJn311VcaNWqUhgwZosjISEnSvffeK4fDoZSUFOXm5mr58uV65ZVXlJaWZvUyevRorVmzRi+99JJ27dqlqVOnasuWLRo1alSNewEAAD52ia7SOquPPvrIdOvWzTidTtOpUyfz+uuve417PB4zadIkEx4ebpxOp+nbt6/Jy8vzqjl69KgZOnSoadq0qXG5XObBBx80x44d86rZtm2bufnmm43T6TRXXnmlmTFjRpVe3n33XXPttdcah8NhunbtalatWlXrXs6Fy70BAKibmr6G+hljjK/D1e+F2+1WSEiISkpK6u18m02bNumpFTvUMvq3c5WO7t2p5++KUVxcXL2sHwCAhqCmr6E+/0oFAACA+kKwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtkGwAQAAtlGn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efgy9dNPP6mioqLKpx6Hh4dr165dPuqqZjwej8aMGaObbrpJ3bp1s5bfe++9atu2rSIjI7V9+3aNHz9eeXl5+ve//y1Jys/Pr3a+lWOXUnx8vJYsWaKOHTvq8OHDmjZtmm655Rbl5OQoPz9fDoejyotLeHi41WdDmkt13n//fRUXF+uBBx6wll1O++dMlduvrr/T90lYWJjXeKNGjdSiRQuvmujo6CrrqBxr3rz5Rem/Jk6ePKnx48dr6NChXl8++MQTT6hnz55q0aKFNm7cqIkTJ+rw4cOaPXu2pIY3p/79+2vQoEGKjo7Wnj179Pe//10DBgxQRkaGAgICLuv9tHTpUjVr1kyDBg3yWt5Q91F1z9X19fx2thq3260TJ04oODi4zn0TbHDJpaamKicnR19++aXX8pEjR1o/x8TEqHXr1urbt6/27Nmjq6+++lK3eU4DBgywfr7uuusUHx+vtm3b6t13372gP8iG4n/+5380YMAARUZGWssup/3ze1NeXq577rlHxhgtXLjQaywtLc36+brrrpPD4dAjjzyi6dOnN8iP8h8yZIj1c0xMjK677jpdffXVWr9+vfr27evDzi7cm2++qWHDhikoKMhreUPdR2d7rm7oeCvqMtWqVSsFBARUORO9oKBAERERPurq/EaNGqWVK1fqs88+01VXXXXO2vj4eEnS999/L0mKiIiodr6VY74UGhqqa6+9Vt9//70iIiJUVlam4uJir5rT901DnsuPP/6oTz/9VA8//PA56y6n/VO5/XP9vURERKiwsNBr/NSpUyoqKmrQ+60y1Pz4449au3at19Ga6sTHx+vUqVPat2+fpIY5p9O1b99erVq18vp3djnupy+++EJ5eXnn/buSGsY+OttzdX09v52txuVyXfB/Dgk2lymHw6FevXopPT3dWubxeJSenq6EhAQfdlY9Y4xGjRqlFStWaN26dVUOq1YnOztbktS6dWtJUkJCgnbs2OH1pFb5RN6lS5eL0ndNHT9+XHv27FHr1q3Vq1cvBQYGeu2bvLw87d+/39o3DXkuixcvVlhYmJKTk89Zdzntn+joaEVERHjtE7fbrczMTK99UlxcrKysLKtm3bp18ng8VohLSEjQhg0bVF5ebtWsXbtWHTt29MnbG5WhZvfu3fr000/VsmXL8z4mOztb/v7+1ts5DW1OZ/q///s/HT161Ovf2eW2n6TfjoL26tVL3bt3P2+tL/fR+Z6r6+v5LSEhwWsdlTX18vp1wacfw2eWLVtmnE6nWbJkidm5c6cZOXKkCQ0N9ToTvaF47LHHTEhIiFm/fr3XJY2//vqrMcaY77//3jzzzDNmy5YtZu/eveaDDz4w7du3N3369LHWUXkJYb9+/Ux2drZZs2aNueKKK3xyifTf/vY3s379erN3717z1VdfmcTERNOqVStTWFhojPntcsg2bdqYdevWmS1btpiEhASTkJDQIOdyuoqKCtOmTRszfvx4r+WXw/45duyY2bp1q9m6dauRZGbPnm22bt1qXSE0Y8YMExoaaj744AOzfft2c+edd1Z7uXePHj1MZmam+fLLL80111zjdRlxcXGxCQ8PN/fdd5/Jyckxy5YtM40bN75ol0afa05lZWXmz3/+s7nqqqtMdna2199V5ZUnGzduNHPmzDHZ2dlmz5495l//+pe54oorzP33398g53Ts2DHz3//93yYjI8Ps3bvXfPrpp6Znz57mmmuuMSdPnrTW0ZD20/n+3Rnz2+XajRs3NgsXLqzy+Ia2j873XG1M/Ty/VV7uPW7cOPPtt9+a+fPnc7k3fjN37lzTpk0b43A4TFxcnPn666993VK1JFV7W7x4sTHGmP3795s+ffqYFi1aGKfTaTp06GDGjRvn9Tkpxhizb98+M2DAABMcHGxatWpl/va3v5ny8vJLPp/Bgweb1q1bG4fDYa688kozePBg8/3331vjJ06cMP/1X/9lmjdvbho3bmzuuusuc/jwYa91NJS5nO6TTz4xkkxeXp7X8sth/3z22WfV/hsbPny4Mea3S74nTZpkwsPDjdPpNH379q0yz6NHj5qhQ4eapk2bGpfLZR588EFz7Ngxr5pt27aZm2++2TidTnPllVeaGTNm+GROe/fuPevfVeVnD2VlZZn4+HgTEhJigoKCTOfOnc0LL7zgFRIa0px+/fVX069fP3PFFVeYwMBA07ZtWzNixIgq/1lrSPvpfP/ujDHmtddeM8HBwaa4uLjK4xvaPjrfc7Ux9ff89tlnn5nY2FjjcDhM+/btvbZxIfz+30QAAAAue5xjAwAAbINgAwAAbINgAwAAbINgAwAAbINgAwAAbINgAwAAbINgAwAAbINgA+B3bd++ffLz87O+IgLA5Y0P6APwu1ZRUaEjR46oVatWatSoka/bAXCBCDYAfrfKysrkcDh83QaAesRbUQBs47bbbtOoUaM0atQohYSEqFWrVpo0aZIq///Wrl07Pfvss7r//vvlcrk0cuTIat+Kys3N1R133CGXy6VmzZrplltu0Z49e6zxN954Q507d1ZQUJA6deqkBQsWXOqpAjgLjrsCsJWlS5cqJSVFmzZt0pYtWzRy5Ei1adNGI0aMkCT94x//0OTJkzVlypRqH3/w4EH16dNHt912m9atWyeXy6WvvvpKp06dkiS99dZbmjx5subNm6cePXpo69atGjFihJo0aaLhw4dfsnkCqB5vRQGwjdtuu02FhYXKzc2Vn5+fJGnChAn68MMPtXPnTrVr1049evTQihUrrMfs27dP0dHR2rp1q2JjY/X3v/9dy5YtU15engIDA6tso0OHDnr22Wc1dOhQa9lzzz2n1atXa+PGjRd/kgDOibeiANjKDTfcYIUaSUpISNDu3btVUVEhSerdu/c5H5+dna1bbrml2lDzyy+/aM+ePUpJSVHTpk2t23PPPef1VhUA3+GtKAC/K02aNDnneHBw8FnHjh8/Lkn65z//qfj4eK+xgICAC28OwAUj2ACwlczMTK/7X3/9ta655poaB4/rrrtOS5cuVXl5eZWjNuHh4YqMjNQPP/ygYcOG1VvPAOoPb0UBsJX9+/crLS1NeXl5eueddzR37lyNHj26xo8fNWqU3G63hgwZoi1btmj37t363//9X+Xl5UmSpk2bpunTp+vVV1/Vd999px07dmjx4sWaPXv2xZoSgFrgiA0AW7n//vt14sQJxcXFKSAgQKNHj9bIkSNr/PiWLVtq3bp1GjdunG699VYFBAQoNjZWN910kyTp4YcfVuPGjTVr1iyNGzdOTZo0UUxMjMaMGXORZgSgNrgqCoBt3HbbbYqNjdXLL7/s61YA+AhvRQEAANsg2AAAANvgrSgAAGAbHLEBAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC28f8D+GWREkjyWscAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "\n", + "y_train_df = np.log1p(y_train_df)\n", + "sns.histplot(y_train_df, bins=50)\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 449 + }, + "id": "mPp6TXWifDof", + "outputId": "eebde5b1-4562-4033-d331-9efd7f9f3316" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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7pxIBwAAcHPhHisAAACTEKwAAABMQrACAAAwCcEKAADAJAQrAAAAkxCsAAAATEKwAgAAMAnBCgAAwCQEKwC4Ad98840sFovy8/Od3QqAJoA3rwPADaiurtb333+v9u3b8800AAQrALhelZWVcnNzc3YbAJoQLgUCwP8ZMmSIEhISlJCQIC8vL7Vv314zZ85U7X9/durUSXPnztVTTz0lT09PTZgwoc5LgQUFBXr44Yfl6empNm3aaNCgQfr666+N8ffff1/dunWTh4eHunbtqnfffbexDxVAA+G8NQBcYvXq1YqLi9O+ffuUm5urCRMmqEOHDho/frwk6e2331ZycrJmzZpV5/rfffedBg8erCFDhmj79u3y9PTU559/rosXL0qS1qxZo+TkZC1dulT33HOPDh48qPHjx6t169aKjY1ttOME0DC4FAgA/2fIkCEqLi5WQUGBLBaLJOnFF1/Uxo0b9cUXX6hTp0665557tGHDBmOdb775RsHBwTp48KBCQkL00ksvae3atSosLFTLli0v28fdd9+tuXPnaty4ccayV199VVu2bNHu3bsb/iABNCguBQLAJe677z4jVElSeHi4jh8/rurqaklSaGhovevn5+dr0KBBdYaq8vJyff3114qLi9Ptt99uTK+++qrDpUIAzReXAgHgGrRu3bre8VatWv3oWFlZmSTpvffeU1hYmMNYixYtbrw5AE5HsAKAS+zdu9dhfs+ePercufNVB5/evXtr9erVqqqquuyslZ+fnwIDA/X3v/9dMTExpvUMoOngUiAAXOLkyZNKSkpSYWGh/vu//1tLlizR5MmTr3r9hIQE2Ww2jR07Vrm5uTp+/Lj+8Ic/qLCwUJL0yiuvKCUlRYsXL9aXX36pw4cPa+XKlVqwYEFDHRKARsQZKwC4xFNPPaUffvhB/fv3V4sWLTR58mRNmDDhqtdv166dtm/frqlTp+qBBx5QixYtFBISovvvv1+S9Oyzz+q2227TW2+9palTp6p169bq1auXEhMTG+iIADQmngoEgP8zZMgQhYSEaOHChc5uBUAzxaVAAAAAkxCsAAAATMKlQAAAAJNwxgoAAMAkBCsAAACTEKwAAABMQrACAAAwCcEKAADAJAQrAAAAkxCsAAAATEKwAgAAMMn/B/DvmCxMM/2dAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "mercari_df['price'] = np.log1p(mercari_df['price'])\n", + "mercari_df['price'].head(3)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 178 + }, + "id": "9tOSABSUfEvu", + "outputId": "6250185b-325f-4789-e28b-b086e982757a" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 2.397895\n", + "1 3.970292\n", + "2 2.397895\n", + "Name: price, dtype: float64" + ], + "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", + "
price
02.397895
13.970292
22.397895
\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "source": [ + "print('Shipping 값 유형:\\n',mercari_df['shipping'].value_counts())\n", + "print('item_condition_id 값 유형:\\n',mercari_df['item_condition_id'].value_counts())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YOQ0v3NUfGQd", + "outputId": "9f56bf91-37b7-4cad-db00-24b1cbcccb4f" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shipping 값 유형:\n", + " shipping\n", + "0 819435\n", + "1 663100\n", + "Name: count, dtype: int64\n", + "item_condition_id 값 유형:\n", + " item_condition_id\n", + "1 640549\n", + "3 432161\n", + "2 375479\n", + "4 31962\n", + "5 2384\n", + "Name: count, dtype: int64\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "boolean_cond= mercari_df['item_description']=='No description yet'\n", + "mercari_df[boolean_cond]['item_description'].count()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ziv-SEvNfIl0", + "outputId": "002f0d9b-745e-4c21-8499-1f72f2f7b50e" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "82489" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# apply lambda에서 호출되는 대,중,소 분할 함수 생성, 대,중,소 값을 리스트 반환\n", + "def split_cat(category_name):\n", + " try:\n", + " return category_name.split('/')\n", + " except:\n", + " return ['Other_Null' , 'Other_Null' , 'Other_Null']\n", + "\n", + "# 위의 split_cat( )을 apply lambda에서 호출하여 대,중,소 컬럼을 mercari_df에 생성.\n", + "mercari_df['cat_dae'], mercari_df['cat_jung'], mercari_df['cat_so'] = \\\n", + " zip(*mercari_df['category_name'].apply(lambda x : split_cat(x)))\n", + "\n", + "# 대분류만 값의 유형과 건수를 살펴보고, 중분류, 소분류는 값의 유형이 많으므로 분류 갯수만 추출\n", + "print('대분류 유형 :\\n', mercari_df['cat_dae'].value_counts())\n", + "print('중분류 갯수 :', mercari_df['cat_jung'].nunique())\n", + "print('소분류 갯수 :', mercari_df['cat_so'].nunique())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wT4sAiHHfKPJ", + "outputId": "f12b5085-7abb-49fd-9a5a-e76aec070070" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "대분류 유형 :\n", + " cat_dae\n", + "Women 664385\n", + "Beauty 207828\n", + "Kids 171689\n", + "Electronics 122690\n", + "Men 93680\n", + "Home 67871\n", + "Vintage & Collectibles 46530\n", + "Other 45351\n", + "Handmade 30842\n", + "Sports & Outdoors 25342\n", + "Other_Null 6327\n", + "Name: count, dtype: int64\n", + "중분류 갯수 : 114\n", + "소분류 갯수 : 871\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "mercari_df['brand_name'] = mercari_df['brand_name'].fillna(value='Other_Null')\n", + "mercari_df['category_name'] = mercari_df['category_name'].fillna(value='Other_Null')\n", + "mercari_df['item_description'] = mercari_df['item_description'].fillna(value='Other_Null')\n", + "\n", + "# 각 컬럼별로 Null값 건수 확인. 모두 0가 나와야 합니다.\n", + "mercari_df.isnull().sum()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 429 + }, + "id": "2l0ksOxEfNpg", + "outputId": "e4967d94-2e53-455f-b0cc-85abf6b9b944" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "train_id 0\n", + "name 0\n", + "item_condition_id 0\n", + "category_name 0\n", + "brand_name 0\n", + "price 0\n", + "shipping 0\n", + "item_description 0\n", + "cat_dae 0\n", + "cat_jung 0\n", + "cat_so 0\n", + "dtype: int64" + ], + "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", + "
0
train_id0
name0
item_condition_id0
category_name0
brand_name0
price0
shipping0
item_description0
cat_dae0
cat_jung0
cat_so0
\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "print('brand name 의 유형 건수 :', mercari_df['brand_name'].nunique())\n", + "print('brand name sample 5건 : \\n', mercari_df['brand_name'].value_counts()[:5])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Mmej2iV9fPsp", + "outputId": "1bf67ebe-e746-4f9e-ac4d-d971d7e26f11" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "brand name 의 유형 건수 : 4810\n", + "brand name sample 5건 : \n", + " brand_name\n", + "Other_Null 632682\n", + "PINK 54088\n", + "Nike 54043\n", + "Victoria's Secret 48036\n", + "LuLaRoe 31024\n", + "Name: count, dtype: int64\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "print('name 의 종류 갯수 :', mercari_df['name'].nunique())\n", + "print('name sample 7건 : \\n', mercari_df['name'][:7])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TCl0Ke1qfRdk", + "outputId": "af9ff4a5-f398-47f6-fc1f-c07d7a7d639f" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "name 의 종류 갯수 : 1225273\n", + "name sample 7건 : \n", + " 0 MLB Cincinnati Reds T Shirt Size XL\n", + "1 Razer BlackWidow Chroma Keyboard\n", + "2 AVA-VIV Blouse\n", + "3 Leather Horse Statues\n", + "4 24K GOLD plated rose\n", + "5 Bundled items requested for Ruie\n", + "6 Acacia pacific tides santorini top\n", + "Name: name, dtype: object\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "pd.set_option('max_colwidth', 200)\n", + "\n", + "# item_description의 평균 문자열 개수\n", + "print('item_description 평균 문자열 개수:',mercari_df['item_description'].str.len().mean())\n", + "\n", + "mercari_df['item_description'][:2]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 165 + }, + "id": "_fjUeqsrfSce", + "outputId": "87be51eb-195a-4672-ece9-e0f755fdd7a9" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "item_description 평균 문자열 개수: 145.71139703278507\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 No description yet\n", + "1 This keyboard is in great condition and works like it came out of the box. All of the ports are tested and work perfectly. The lights are customizable via the Razer Synapse app on your PC.\n", + "Name: item_description, dtype: object" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_description
0No description yet
1This keyboard is in great condition and works like it came out of the box. All of the ports are tested and work perfectly. The lights are customizable via the Razer Synapse app on your PC.
\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# name 속성에 대한 feature vectorization 변환\n", + "cnt_vec = CountVectorizer()\n", + "X_name = cnt_vec.fit_transform(mercari_df.name)\n", + "\n", + "# item_description 에 대한 feature vectorization 변환\n", + "tfidf_descp = TfidfVectorizer(max_features = 50000, ngram_range= (1,3) , stop_words='english')\n", + "X_descp = tfidf_descp.fit_transform(mercari_df['item_description'])\n", + "\n", + "print('name vectorization shape:',X_name.shape)\n", + "print('item_description vectorization shape:',X_descp.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DKkgzZNxfTfJ", + "outputId": "b946220e-7997-47d0-f82c-ecf865871e59" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "name vectorization shape: (1482535, 105757)\n", + "item_description vectorization shape: (1482535, 50000)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.preprocessing import LabelBinarizer\n", + "\n", + "# brand_name, item_condition_id, shipping 각 피처들을 희소 행렬 원-핫 인코딩 변환\n", + "lb_brand_name= LabelBinarizer(sparse_output=True)\n", + "X_brand = lb_brand_name.fit_transform(mercari_df['brand_name'])\n", + "\n", + "lb_item_cond_id = LabelBinarizer(sparse_output=True)\n", + "X_item_cond_id = lb_item_cond_id.fit_transform(mercari_df['item_condition_id'])\n", + "\n", + "lb_shipping= LabelBinarizer(sparse_output=True)\n", + "X_shipping = lb_shipping.fit_transform(mercari_df['shipping'])\n", + "\n", + "# cat_dae, cat_jung, cat_so 각 피처들을 희소 행렬 원-핫 인코딩 변환\n", + "lb_cat_dae = LabelBinarizer(sparse_output=True)\n", + "X_cat_dae= lb_cat_dae.fit_transform(mercari_df['cat_dae'])\n", + "\n", + "lb_cat_jung = LabelBinarizer(sparse_output=True)\n", + "X_cat_jung = lb_cat_jung.fit_transform(mercari_df['cat_jung'])\n", + "\n", + "lb_cat_so = LabelBinarizer(sparse_output=True)\n", + "X_cat_so = lb_cat_so.fit_transform(mercari_df['cat_so'])" + ], + "metadata": { + "id": "FDVF5wKFfUgy" + }, + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(type(X_brand), type(X_item_cond_id), type(X_shipping))\n", + "print('X_brand_shape:{0}, X_item_cond_id shape:{1}'.format(X_brand.shape, X_item_cond_id.shape))\n", + "print('X_shipping shape:{0}, X_cat_dae shape:{1}'.format(X_shipping.shape, X_cat_dae.shape))\n", + "print('X_cat_jung shape:{0}, X_cat_so shape:{1}'.format(X_cat_jung.shape, X_cat_so.shape))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zIaOASB5fV0j", + "outputId": "e12320ff-c9f7-4dd9-9df5-5bd3dc13ca93" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " \n", + "X_brand_shape:(1482535, 4810), X_item_cond_id shape:(1482535, 5)\n", + "X_shipping shape:(1482535, 1), X_cat_dae shape:(1482535, 11)\n", + "X_cat_jung shape:(1482535, 114), X_cat_so shape:(1482535, 871)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from scipy.sparse import hstack\n", + "import gc\n", + "\n", + "sparse_matrix_list = (X_name, X_descp, X_brand, X_item_cond_id,X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "\n", + "# 사이파이 sparse 모듈의 hstack 함수를 이용하여 앞에서 인코딩과 Vectorization을 수행한 데이터 셋을 모두 결합.\n", + "X_features_sparse= hstack(sparse_matrix_list).tocsr()\n", + "print(type(X_features_sparse), X_features_sparse.shape)\n", + "\n", + "# 데이터 셋이 메모리를 많이 차지하므로 사용 용도가 끝났으면 바로 메모리에서 삭제.\n", + "del X_features_sparse\n", + "gc.collect()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "w26Eb52efXOC", + "outputId": "d8d0074f-b53f-4459-e5b3-aa81ca1a9e3c" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " (1482535, 161569)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "source": [ + "def rmsle(y , y_pred):\n", + " # underflow, overflow를 막기 위해 log가 아닌 log1p로 rmsle 계산\n", + " return np.sqrt(np.mean(np.power(np.log1p(y) - np.log1p(y_pred), 2)))\n", + "\n", + "def evaluate_org_price(y_test , preds):\n", + "\n", + " # 원본 데이터는 log1p로 변환되었으므로 exmpm1으로 원복 필요.\n", + " preds_exmpm = np.expm1(preds)\n", + " y_test_exmpm = np.expm1(y_test)\n", + "\n", + " # rmsle로 RMSLE 값 추출\n", + " rmsle_result = rmsle(y_test_exmpm, preds_exmpm)\n", + " return rmsle_result" + ], + "metadata": { + "id": "70k_yBtMfYE8" + }, + "execution_count": 19, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import gc\n", + "from scipy.sparse import hstack\n", + "\n", + "def model_train_predict(model,matrix_list):\n", + " # scipy.sparse 모듈의 hstack 을 이용하여 sparse matrix 결합\n", + " X= hstack(matrix_list).tocsr()\n", + "\n", + " X_train, X_test, y_train, y_test=train_test_split(X, mercari_df['price'], test_size=0.2, random_state=156)\n", + "\n", + " # 모델 학습 및 예측\n", + " model.fit(X_train , y_train)\n", + " preds = model.predict(X_test)\n", + "\n", + " del X , X_train , X_test , y_train\n", + " gc.collect()\n", + "\n", + " return preds , y_test" + ], + "metadata": { + "id": "Eyjkx8vofZBW" + }, + "execution_count": 20, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "linear_model = Ridge(solver = \"lsqr\", fit_intercept=False)\n", + "\n", + "sparse_matrix_list = (X_name, X_brand, X_item_cond_id,X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "linear_preds , y_test = model_train_predict(model=linear_model ,matrix_list=sparse_matrix_list)\n", + "print('Item Description을 제외했을 때 rmsle 값:', evaluate_org_price(y_test , linear_preds))\n", + "\n", + "sparse_matrix_list = (X_descp, X_name, X_brand, X_item_cond_id,X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "linear_preds , y_test = model_train_predict(model=linear_model , matrix_list=sparse_matrix_list)\n", + "print('Item Description을 포함한 rmsle 값:', evaluate_org_price(y_test ,linear_preds))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fJtWdUCUfaVP", + "outputId": "131bd5ad-131e-4bc5-b560-c166583b4dd7" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Item Description을 제외했을 때 rmsle 값: 0.4983990938999374\n", + "Item Description을 포함한 rmsle 값: 0.46810475818676045\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from lightgbm import LGBMRegressor\n", + "\n", + "sparse_matrix_list = (X_descp, X_name, X_brand, X_item_cond_id,X_shipping, X_cat_dae, X_cat_jung, X_cat_so)\n", + "\n", + "lgbm_model = LGBMRegressor(n_estimators=200, learning_rate=0.5, num_leaves=125, random_state=156)\n", + "lgbm_preds , y_test = model_train_predict(model = lgbm_model , matrix_list=sparse_matrix_list)\n", + "print('LightGBM rmsle 값:', evaluate_org_price(y_test , lgbm_preds))" + ], + "metadata": { + "id": "E8bXLeiRfbsb" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "preds = lgbm_preds * 0.45 + linear_preds * 0.55\n", + "print('LightGBM과 Ridge를 ensemble한 최종 rmsle 값:', evaluate_org_price(y_test , preds))" + ], + "metadata": { + "id": "8Ma9qZvFfcvC" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git "a/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" new file mode 100644 index 0000000..f11e8e2 --- /dev/null +++ "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.ipynb" @@ -0,0 +1,5130 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "#8.6" + ], + "metadata": { + "id": "Jm_KPYyF5ZGy" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.datasets import fetch_20newsgroups\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "from sklearn.decomposition import LatentDirichletAllocation\n", + "\n", + "# 모터 사이클, 야구, 그래픽스, 윈도우즈, 중동, 기독교, 전자공학, 의학 8개 주제 추출\n", + "cats=['rec.motorcycles','rec.sport.baseball','comp.graphics','comp.windows.x','talk.politics.mideast','soc.religion.christian','sci.electronics','sci.med']\n", + "\n", + "# 위에서 cats 변수로 기재된 카테고리만 추출. fetch_20newsgroups()의 categories에 cats 입력\n", + "news_df=fetch_20newsgroups(subset='all',remove=('headers','footers','quotes'),categories=cats,random_state=0)\n", + "# LDA는 count 기반의 벡터화만 적용\n", + "count_vect=CountVectorizer(max_df=0.95,max_features=1000,min_df=2,stop_words='english',ngram_range=(1,2))\n", + "feat_vect=count_vect.fit_transform(news_df.data)\n", + "print('CountVectorizer Shape:',feat_vect.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MvUZ5-Xr02OH", + "outputId": "c3bbf09c-c7ac-45e3-c10f-492b8521f6f8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "CountVectorizer Shape: (7862, 1000)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "lda=LatentDirichletAllocation(n_components=8,random_state=0)\n", + "lda.fit(feat_vect)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "id": "WcvaWU9N3sWX", + "outputId": "dcc44ac4-6843-435d-8e10-460b1cb4bc2a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LatentDirichletAllocation(n_components=8, random_state=0)" + ], + "text/html": [ + "
LatentDirichletAllocation(n_components=8, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(lda.components_.shape)\n", + "lda.components_" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GFLi7BKz31ut", + "outputId": "fcf871b4-b2e7-45a9-cffc-35907eb5621a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(8, 1000)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[2.69030238e+02, 1.87798026e+02, 7.09003824e+01, ...,\n", + " 1.22710343e+01, 1.06329639e+02, 7.25995512e+01],\n", + " [1.25091799e-01, 2.46049106e+00, 1.25051902e-01, ...,\n", + " 2.80071176e+02, 1.25089783e-01, 5.05669662e+01],\n", + " [1.33978420e+02, 1.25042012e-01, 9.98277256e+01, ...,\n", + " 1.25092219e-01, 3.31078261e+01, 1.25028398e-01],\n", + " ...,\n", + " [2.98813886e+01, 1.88071366e+01, 1.14748730e+01, ...,\n", + " 1.93022584e+01, 5.29368271e+00, 1.44478198e+01],\n", + " [1.25074899e-01, 1.25105300e-01, 1.25004235e-01, ...,\n", + " 1.03576436e+02, 1.25100535e-01, 7.22276359e+01],\n", + " [1.25172284e-01, 1.03967760e+00, 1.25221075e-01, ...,\n", + " 5.31740996e+01, 1.25025929e-01, 1.25062991e-01]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "def display_topics(model,feature_names,no_top_words):\n", + " for topic_index, topic in enumerate(model.components_):\n", + " print('Topic #',topic_index)\n", + "\n", + " # components_ array에서 가장 값이 큰 순으로 정렬했을 때, 그 값의 array 인덱스를 반환\n", + " topic_word_indexes=topic.argsort()[::-1]\n", + " top_indexes=topic_word_indexes[:no_top_words]\n", + "\n", + " # top_indexes대상인 인덱스별로 feature_names에 해당하는 word_feature 추출 후 join으로 concat\n", + " feature_concat=' '.join([feature_names[i] for i in top_indexes])\n", + " print(feature_concat)\n", + "\n", + "# CountVectorizer 객체 내의 전체 word의 명칭을 get_features_names()를 통해 추출\n", + "feature_names=count_vect.get_feature_names_out()\n", + "\n", + "# 토픽별 가장 연관도가 높은 word를 15개만 추출\n", + "display_topics(lda,feature_names,15)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "buyelH_147_9", + "outputId": "99a4e734-5b61-48ab-fe50-c42b6abf6fb7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Topic # 0\n", + "10 year medical health 1993 20 12 disease cancer team patients research number new 11\n", + "Topic # 1\n", + "don just like know think good time ve does way really people want ll right\n", + "Topic # 2\n", + "image file jpeg output program gif images format files color entry use bit 03 02\n", + "Topic # 3\n", + "armenian armenians turkish people said turkey armenia government genocide turks muslim russian greek azerbaijan killed\n", + "Topic # 4\n", + "israel jews dos jewish israeli dos dos arab state people arabs palestinian adl ed anti peace\n", + "Topic # 5\n", + "edu com available graphics ftp window use mail data motif software version pub information server\n", + "Topic # 6\n", + "god people jesus church believe say christ does christian think christians did know bible man\n", + "Topic # 7\n", + "thanks use using does help like display need problem know server screen windows window program\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#8.7" + ], + "metadata": { + "id": "X5qdXFsF5bY0" + } + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/gdrive/')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QbwsLF0y9Q72", + "outputId": "57e5e402-0990-4b40-ffcb-b0700ce2e232" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/gdrive/\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "pd.set_option('display.max_colwidth',700)\n", + "\n", + "path='/content/gdrive/MyDrive/EURON/test/topics'\n", + "# path로 지정한 디렉터리 밑에 있는 모든 .data 파일들의 파일명을 리스트로 취합\n", + "all_files=glob.glob(os.path.join(path,'*.data'))\n", + "filename_list=[]\n", + "opinion_text=[]\n", + "\n", + "# 개별 파일들의 파일명은 filename_list 리스트로 취합\n", + "# 개별 파일들의 파일 내용은 DataFrame으로 로딩 후, 다시 string으로 변환하여 opinion_text 리스트로 취합\n", + "for file_ in all_files:\n", + " # 개별 파일을 읽어서 DataFrame으로 생성\n", + " df=pd.read_table(file_,index_col=None,header=0,encoding='latin1')\n", + " # 절대경로로 주어진 파일명을 가공. Linux에서 수행 시에는 아래 \\\\를 / 변경\n", + " # 맨 마지막 .data 확장자도 제거\n", + " filename_=file_.split('\\\\')[-1]\n", + " filename=filename_.split('.')[0]\n", + "\n", + " # 파일명 리스트와 파일 내용 리스트에 파일명과 파일 내용 추가\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "# 파일명 리스트와 파일 내용 리스트를 DataFrame으로 생성\n", + "document_df=pd.DataFrame({'filename':'filename_list','opinion_text':opinion_text})\n", + "document_df.head()" + ], + "metadata": { + "id": "XPoD65Hs4-Ou", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 362 + }, + "outputId": "9b737f2c-ea97-48b3-96df-d342ab2e77fe" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "0 filename_list \n", + "1 filename_list \n", + "2 filename_list \n", + "3 filename_list \n", + "4 filename_list \n", + "\n", + " opinion_text \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "1 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "2 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "3 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "4 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... " + ], + "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", + "
filenameopinion_text
0filename_listshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...
1filename_listThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...
2filename_list3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...
3filename_list, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...
4filename_list, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "document_df", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" Staff are friendly and helpful .\\n0 The staff in the morning seemed to need another cup of coffee as they weren't excited to see us .\\n1 A perfect hotel a perfect location perfect staff !\\n2 The front desk staff is more than eager to help, smile, make you happy .\\n3 The staff is friendly and we only went to one of the " Happy Hours" for a glass of wine as we were either at the baseball game or on the two tours we took in , busy time !\\n4 The front desk and the concierge staff were very helpful when we had a question .\\n5 The staff is helpful and knowledgable .\\n6 The room was clean and comfortable and the staff were friendly and helpful .\\n7 The staff was very helpful, got two great suggestions for dinner on the water, and booked the shuttle back to the Airport, way cheaper than a taxi !\\n8 The service was good, very friendly staff and we loved the free wine reception each night .\\n9 The staff at the desk very rarely welcomed you back from your day out sightseeing etc .\\n10 I found the concierge and front desk staff to be helpful and the housekeepers to be quite good .\\n11 The check in check out were very efficient, however my personal opinion was that the staff did not go out of their way to be friendly or welcoming .\\n12 On arrival, were met by friendly reception staff .\\n13 They have a parking garage, but they make you leave your vehicle for them to park and then if you want to take a drive later, you have to wait for the staff to get it .\\n14 The Tuscan staff moved our packed luggage into the new room, and my husband and I discovered that both of our phone chargers were missing .\\n15 Which is a pitty, because the location was wonderful, and two of the staff members were really nice .\\n16 Upon entering the elegant lobby we were greeted pleasantly by the staff .\\n17 Helpful staff and safe surrounds .\\n18 It has some charms in decor, and all staff gave very good service to us .\\n19 The staff are very friendly and helpful, particularly the concierges and the Manager's Reception is a nice touch .\\n20 The rooms were nice and the staff was very friendly .\\n21 but its nice and clean and the staff was really nice, and its located 2 blocks from the warfh\\n22 Staff was very friendly helpful .\\n23 There was a super market just across the street which was handy and the staff were sooo helpful !\\n24 Checking in was quick and easy, the staff we're pleasant and I requested a low floor room which I got .\\n25 However, the Tuscan Inn has the best of all worlds, great location, all the amenities, excellent staff, nice restaurant adjoining, and very reasonable prices .\\n26 the staff, while all polite, looked a bit distracted, and frankly disengaged .\\n27 not the incredible, enthusiastic staff describes in such stellar terms by some lucky visitors .\\n28 Hotel staff were all very friendly and knowledgeable .\\n29 The staff at the desk didn't go out of their way to be helpful .\\n30 The front desk staff were very friendly and efficient .\\n31 The staff is very rude and doesn't seem to care at all about their guests .\\n32 So clean, quiet, excellent location, delicious coffee bar every morning, staff helpful friendly .\\n33 The staff are very friendly and go out of their way to help you .\\n34 The staff concierge were all very helpful and gave us a lot of tips of what to see and where to eat .\\n35 The front desk staff was efficent and friendly .\\n36 I have to say I see everyone that reviews this hotel compliments the front desk staff I actually found from the second day on that they were most unhelpful and actually quite rude !\\n37 Also on my third day I came back from a long day sightseeing and stopped at the front desk to ask for milk and sugar to be sent up to the room as we wanted to have a coffee after our long day at which I was told to go into the restaurant and ask the waiting staff myself and take it up to my room myself !\\n38 All the staff was friendly, though I found the maintanence and housekeeping staff to be the warmest in the building .\\n39 The staff and service were exceptional .\\n40 Every hotel should have this staff !\\n41 Im actually still in the hotel and couldnt wait to write my review, but from the moment we arrived the staff at this best western could not have done more for us .\\n42 Every hotel should have the staff that is here at the Best western Tuscan inn .\\n43 Checkout early Wednesday morning took about 2 minutes to complete, no complaints with the staff .\\n44 The hotel staff , as a whole , were more than happy to go above and beyond to satisfy your request .\\n45 We found the staff very helpful especially Jose .\\n46 It has a good look, nice sitting area in the lobby, wine hour every night, friendly and helpful staff .\\n47 Good Location but what's with the Check in out staff ?\\n48 So I had problems with the check in and check out staff .\\n49 Do not know if I will stay there again, due to the problems with the staff at the check in out counter .\\n50 Also, the staff Chief Chief Concierge are very friendly knowledgable .\\n51 Hotel was comfortable and all the staff helpful and polite .\\n52 Jorge was extremely friendly and helpful, but the rest of the staff was less animated and warm .\\n53 also the wine gathering with the manager the one day i did attempt to attend it was so badly orgonised that i couldnt get to the table to get my wine so i just went tot he bar and had a drink there, but on the whole it was a great hotel and certain members of staff lift it out of the good to the great hotel that i experianced !\\n54 The staff was very helpful in giving us suggestions and directions when we asked .\\n55 Very close to Fisherman's Wharf, a grocery store located right across the street, and very helpful and friendly staff .\\n56 The staff are so friendly and the hotel is in a great location, just 2 blocks from Fisherman's Wharf , bus and cable car station .\\n57 The staff at this hotel make you feel so welcome and its service with a smile .\\n58 All the staff go the extra mile to assist in anyway they can and the staff of the ajoining Cafe Pescatore are just as welcoming, with great service and the food is excellent .\\n59 This hotel offers a lot , a great location, great staff, free wine tastings and morning coffee .\\n60 Staff were helpful and generally friendly .\\n61 The staff was helpful and friendly .\\n62 The staff were very helpful .\\n63 Staff was friendly and helpful , we had no issues .\\n64 Upon arriving downstairs, I found the duty manager staff napping on the guest ?\\n65 Would not stay here again, due to noise and staff, but ok for the price, if I would have paid rack rate, I would have been more upset .\\n66 The staff was wonderful, our room was very pretty with a view of the Fisherman's Wharf area .\\n67 I'd highly recommend the Tuscan Inn based on location, cheerfulness of staff, aesthetics in the room and general overall service .\\n68 Lunch time staff were miserable and in the evening we did not book so had ages to wait for a table, crowded and noisy .\\n69 The front desk staff were very friendly with a dedicated concierge desk where guests could book excursions or just get information .\\n70 We found the staff to be very helpful and courteous and we had no problems at all .\\n71 The staff was very friendly especially Jose !\\n72 We spent 2 nights and found the staff to be very friendly .\\n73 The hotel staff are really friendly .\\n74 The reception staff were very accommodating and said the hotel was fully booked but first thing in the morning they would move our luggage to a room over looking the courtyard .\\n75 Staff were knowledgeable and friendly .\\n76 The Concierge staff , exceptional and extremely helpful , right from suggestions on transportation excursion options to recommending an amazing restaurant .\\n77 This hotel seems to get very mixed reviews, particularly about the reception desk staff .\\n78 I can only think that some of the staff are very good and some equally bad, since our experience was a very positive one .\\n79 DIsappointed in Front Desk Staff and Room Size\\n80 The front desk staff couldn\\u0092t even be bothered to greet us hello .\\n81 The staff at the front desk could not have been more helpful and whilst we did not avail his services, the concierge always seemed to be busy with guests giving info and advice .\\n82 The hotel is charming and comfortable, and the staff is great .\\n83 The staff was amazing, and went out of their way to help us .\\n84 Helpful staff and great location\\n85 The staff at the hotel more than made up for the tiny rooms .\\n86 If you are looking for an inexpensive hotel to stay at where the staff will make your tour of their city a good experience, this is it .\\n87 The staff was very friendly and we really enjoyed their dinner recommendations .\\n88 The police were investigating something that had happened and staff would not cooperate so the police got very annoyed .\\n89 We arrived early in the morning and tried to check in and the front desk staff said they would have a room cleaned asap for us .\\n90 The front desk staff didn't seem to care but the concierge who took care of us was great he also had many suggestions and tips for us about the Bay area .\\n91 The highlight of this hotel for us was the service offered by the staff, particularly the two concierges on duty while we were there .\\n92 The lobby is nice, and the staff was very friendly .\\n93 a superb hotel with staff so helpful efficient, the food at the pescadora restaurant is a must, and to be quite honest better than most of the other places we ate at on the wharf whilst there, one of which being quoted to being the best , .\\n94 Afternoon wine tasting was a cool touch by the hotel staff, and proved very popular with most of the guest including us .\\n95 Staff were pleasant and helpful .\\n96 The staff were very helpful with suggesting places to eat and with directions of how to get to places eg .\\n97 The room was clean, the staff was great and it was CLOSE to Pier 39 and Fisherman's Wharf .\\n98 We found the reception staff, maids and porters friendly and helpful .\\n99 The room was always clean and the maid staff was friendly, saying " hello" and " have a nice day" as you passed .\\n100 Staff , Very friendly and helpful .\\n101 On the plus side some of the staff were nice and helpful especially the concierge who was most gracious .\\n102 No mention of the lies, arrogance and \\u0091up you attitude\\u0092 of some of the staff then ?\\n103 Right from checking in, the staff was unbelievable !\\n104 Every single staff member we came into contact with was extremely helpful and very nice !\\n105 We arrived wondering what to expect and as soon as we arrived the staff made us feel welcomed .\\n106 They also had a staffmember serve soda and wine in the loungy lobby area in the early evening, which was a nice bonus .\\n107 all the staff we encountered were super friendly and the hotel location is great .\\n108 The staff were helpful and efficient .\\n109 Checking in was easy, with very friendly, helpful front desk staff .\\n110 One of the friendliest desk concierge staffs I've encountered .\\n111 Everything was clean, good staff .\\n112 Really enjoyed the friendliness of the staff and the big rooms .\\n113 Rooms were well cleaned and reception staff helpful .\\n114 Staff was some of the nicest I have encountered in a long time .\\n115 Great rooms great staff great hotel\\n116 Tuscan Inn has exceptionally helpful and friendly staff .\\n117 There was never a time where I saw the concierge desk unstaffed .\\n118 Excellent location friendly staff clean and pleasant rooms\\n119 All the staff was excellent, but the concereige, Clay, really went above and beyond to help us find our way around San Fransisco .\\n120 I was very delighted with the pleasant and professional hotel staff all the way from the doormen to the desk clerks .\\n121 The Corceige was excellent and some of the hotel staff did care and others did not .\\n122 The staff very polite smiling and helpful .\\n123 The reception staff were very welcoming and the room was large and well appointed .\\n124 The staff members were extra helpful, the room well decorated, detailed, clean, and bright .\\n125 we found a friendly staff through out the hotel great location,rooms were small but as pointed out to me all land is prime in the area and all places have small rooms .\\n126 Staff at front desk was fine, obviously the restaurant could use some work .\\n127 Staff was pleasant, bellhops were more than happy to get us a cab .\\n128 There was no mention from hotel staff .\\n129 My husband mentioned to the front desk staff that it would have been appreciated if someone had told us about the renovations when we made our reservation or at check in and was told that the hotel manager set the policy that the staff was to not tell guests .\\n130 The location the rooms the staff the concierge the Managers nightly wine reception everything about this hotel made our holiday MAGIC .\\n131 We made sure to tip the housekeeping staff each morning, perhaps that insured that they did an outstanding job every day .\\n132 The front desk staff were very helpful .\\n133 The staff was great, all the way around, helpful and polite .\\n134 The staff were very friendly and you could book any trips you wanted with them .\\n135 The staff were very friendly and helpful during our stay .\\n136 The restaurant Pescatore was excellent, friendly staff, and enjoyable food .\\n137 From the time we walked into the lobby until the time we checked out the stafff was always very hellpful and the room was very nice, clean, and quiet .\\n138 The lobby was welcoming, the staff was friendly and we felt good about being there .\\n139 Hotel staff was polite and helpful .\\n140 The Staff helped make our stay a great experience .\\n141 Hotel staff was friendly and helpful .\\n142 He was one of the better concierge staff I've encountered at a hotel .\\n143 The entire staff was helpful .\\n144 The travel agent booked this hotel and this was the only hotel out of 10 that I did not book myself although hotel sounded ok This was part of the deal for the airfares Location is excellent , Rooms Ok Staff variable some very helpful others not so .\\n145 Staff were friendly and helpful and we enjoyed the complimentary wine tasting each evening .\\n146 A staff member must have gone in right after we checked out .\\n147 The staff gave the typical run around .\\n148 The reception staff were extremely helpful and polite and couldn\\u0092t do enough for you all in all a good stay for a couple of nights .\\n149 The check in was quick and fast and the staff and nice concierge was very pleasurable .\\n150 The staff were friendly and helpful,it was a good base from which to explore San Francisco .\\n151 The staff was so friendly and helpful and the concierge service was very knowledgeable .\\n152 All staff very friendly and could not have been more helpful .\\n153 All the staff were extremely helpful and polite and always saying hi when eye contact was made .\\n154 PositivesThe staff were friendly and helpful .\\n155 We were there for 10 nights, the staff were very friendly and pleased to help .\\n156 The front desk staff recommended " Fior d'Italia" for a dinner reservation .\\n157 The staff was very helpful and the rooms were well apportioned .\\n158 The staff were friendly and helpful .\\n159 The hotel staff was a hit and miss situation .\\n160 Staff was courteous and the wine hour each evening gave us a chance to meet many people from all over the world .\\n161 The next morning the hotel staff were very accomodating in changing our room and moving our belongings to an outside room which was not only larger, but had central air .\\n162 The hotel staff was consistently friendly and helpful throughout our stay, especially Cliff, the consierge, providing directions, maps, dinner recommendations and reservations, and suggestions for sightseeing .\\n163 The location is great, the staff very friendly and helpful, and the room was neat and clean though a bit small .\\n164 But the thing that impressed us the most was the overall friendliness and helpfulness of the entire staff .\\n165 We booked this by checking other travellers comments on Trip Advisor and were pleased with the helpfulness of the staff, the location and overall cleanliness and comfort of our room .\\n166 Great place to stay , very clean and confortable rooms and helpful staff .\\n167 The front desk staff was great, helpful on check, in, had supply of extra coffee supplies for the room and stamps for purchase, offered to mail our postcards, and the concierge desk seemed very busy .\\n168 The pleasant European theme is carried throughout this hotel and on arrival we were welcomed by efficient and friendly staff .\\n169 Diane from Edmonton, Alberta, CanadaWe stayed at the hotel May 22 to May 25, 2007 and found the staff and particularly the concierge very helpful .\\n170 The whole staff at the Tuscan Inn was very hospitable and I highly recommend this hotel .\\n171 The hotel is pretty much as you'd expect from the chain , nice clean rooms well serviced, and the staff were extremely helpful, very pleasant to deal with .\\n172 The staff were friendly and the free coffee and biscoti each morning and wine at 6pm each evening were occassions when one could meet other guests .\\n173 The staff were very pleasant but I don't think I'd stay there again .\\n174 Staff was all friendly and courteous .\\n175 Upon arriving late through no fault of our own and finding our room double booked we were put up in a nearby sister hotel until our room was ready the next day and they give us a complimentary bottle of champagne , after this though there were no more snags and everything went great , hotel staff friendly and helpful , rooms were quiet, clean and comfortable , food in the restaurant fabulous , the situation of the hotel was very convenient , just a few mins walk from fishermans wharf with a public transport stop, supermarket, small shops, bars and cafes also really close at hand , approx 10 mins walking distance for ferries to alcatraz and bay cruise, etc , would definitely stop here again\\n176 Staff very helpful and pleasant .\\n177 From start to finish the staff did not put a foot wrong .\\n178 The staff's professional, spirited attitude, , be they reservationist, valet, front desk, or housekeeper, , deserves 5 stars .\\n179 Staff were very pleasant, always asking if we needed directions or anything and smiling and opening doors etc .\\n180 Staff were very friendly and courteous .\\n181 It is in a really good position, is not too large, and the staff are really helpful, and, contrary to what we expected on visiting America for the first time, are not waiting around for tips all the time !\\n182 We arrived on the evening of december 5th, and the check, in staff were helpful and efficient .\\n183 We didn't enjoy it, because some of the staff seemed to have little English, and misunderstood our requests .\\n184 The only quibble we had with the Tuscan Inn was that outside our room was a large cupboard, and staff kept going in there, made quite a noise, and finished off by banging the door .\\n185 Hotel was Very nicely furnished, staff was Very helpful .\\n186 We were both delighted with the friendly staff, clean rooms and very convenient location .\\n187 Comfortable bed, staff was excellent .\\n188 Rooms are small but tastefully done, very clean and the staff friendly and helpful .\\n189 Good atmosphere, welcoming and quite cosy lobby and lounge, helpful and friendly staff Overall impressed .\\n190 The staff was very friendly and accomadating with any questions or requests .\\n191 The staff was friendly and polite, and the a .\\n192 staff were helpful although the valet parking and the laundry costs were extremely expensive .\\n193 location, friendly staff, beautiful rooms and comfy beds .\\n194 We found the staff extremely helpful and the room was clean , tidy , a decent size and the bed was extremely comfortable .\\n195 Top, notch staff and very clean and comfortable !\\n196 Downsides are disinterested staff, bordering on rude and quite small rooms .\\n197 The staff was exceptionally helpful and friendly, from the front desk, concierge, valet, and housekeeping .\\n198 Front desk staff even took the time to call a restaurant at pier 39 to inquire about the dress code for me even though they had a couple of people also waiting to ask questions or to check in .\\n199 The service from every staff member we encountered was delightful .\\n200 The staff were very polite and helpful, loved the large lobby area with the large fireplace where you were invited to sample wonderful wine and nibbles early evening and tea or coffee in the mornings .\\n201 The staff was really great, friendly, knowledgable, etc .\\n202 The staff at this hotel is superb, from the front desk staff to the housekeepers .\\n203 It is clean, decorated in boutique style, very relaxing, and has helpful staff .\\n204 The hotel is clean and comfortalbe with a knowledgeable and helpful staff .\\n205 Front desk staff were always pleasant .\\n206 Upon arrival, I was given the goings, on and was politely welcomed by all staff .\\n207 The front desk staff is AWESOME !\\n208 The staff was friendly, pleasant, and helpful, and a houseman went out of his way to dry my son's sneakers .\\n209 The staff attitude ranges from perfunctory to rude .\\n210 a staff member named Mark actually snapped at me at the wine tasting when I tried to find out what kind of wine was being offered .\\n211 The check in was easy, the staff friendly and helpful .\\n212 From the time we arrived we were made to feel most welcome by all staff .\\n213 Very friendly staff serving great breakfasts and evening meals .\\n214 Good hotel great location friendly staff .\\n215 It represents value for money, the rooms and bathrooms were impeccably clean, fresh linen daily, and the staff extremely helpful and friendly .\\n216 Staff were more than helpful and accommodating and we were were moved overlooking the street .\\n217 We asked the staff to empty the refrigerator and snack bar so we could stock our own items, they did it easily and quickly .\\n218 Found the staff friendly like the other reviews .\\n219 I found the staff to be helpful when required but unobtrusive otherwise .\\n220 It's modern, clean, efficient, comfortable, and professionally run with courteous staff .\\n221 I really didn't get a chance to experience the staff's level of service but the rooms are small as is the bathroom .\\n222 Staff was neither especially helpful or unhelpful .\\n223 The staff was not overly friendly nor helpful .\\n224 Our room was large and comfortable, and the staff was top, notch .\\n225 HOWEVER, the front desk staff is always more than willing to jump in with helpful advice and recommendations .\\n226 I've tried 4 or 5 of the local recommended restaurants, and the staff definitely knows what the area has to offer .\\n227 The front desk was very helpful as was the rest of the staff .\\n228 The reception staff were struggling a bit and our check in was done wrong Next day, our room keys stoped working even though we were there for 2 days , again a check in error .\\n229 The staff were very pleasant, the concierge Daniel made excellent reservations for us and the bed was extremely comfortable .\\n230 It is in a great location, the staff is always alert and courteous, the rooms are clean, the morning coffee and biscotti are a nice touch, the happy hour is a PLUS, and the price is right !\\n231 I could excuse this if staff was friendly but I left there dissapointed .\\n232 Our reservations were completely wrong and staff were clueless, so I thought, until further inquiries proved that they were lying through their teeth .\\n233 One morning I overheard people booking in experiencing similar difficluties and a staff member trying to be helpful, I offered some assistance and we were told by him that since Best Western shifted its booking facility offshore there's nothing that Tuscan Inn staff can do to help guests .\\n234 The staff was very friendly, we had no issues at all with the front desk .\\n235 I happened to go up to our room when the housekeeping staff was out in force , every single woman I passed said hello to me !\\n236 There appears to be no management actively involved with running this dump, cause when we asked to speak with one the front desk staff got very nervous and suddenly worked hard to find our lost reservation .\\n237 The staff is friendly and helpful .\\n238 The staff at check, in were nice enough, but unfortunately the concierge was not very helpful, giving us wrong information about our car hire location causing us to get 2 cab rides instead of one .\\n239 The reason that I liked this hotel so much was that it felt cosy and welcoming, the lobby had a log fire going constantly and all the staff were very friendly and helpful .\\n240 Staff and concierge were very helpful .\\n241 The staff of the hotel was very friendly and the evening cocktail hour was a great touch with many choices .\\n242 I will say that the beds were comfortable and select staff were friendly, but definitely not enough incentive to try my luck again at this hotel .\\n243 The room was inviting, the staff tremendously helpful and courteous, and the concierge was the best in the business .\\n244 The restaurant was decorated beautifully, the wait staff was professional without being snobby, the menu was creative and delicious .\\n245 The front desk and the housekeeping staff were equally as friendly .\\n246 The staff and faclilties were great !\\n247 The staff was friendly and very knowledgeable about everything we asked .\\n248 The entire staff was extremely friendly and accomodating .\\n249 A wonderful stay, staff especially friendly, complimentary wine tasting a definite plus, rooms well appointed and well kept .\\n250 We felt very welcomed by the freindly staff that was able to help us with all of our questions and needs .\\n251 The staff has a wine get, to, gether for the patrons in the lobby every evening at 5, 6 p .\\n252 The staff was friendly and accomodating .\\n253 Our rooms were so much nicer then we expected and the staff was friendly and helpful .\\n254 Great room, friendly staff, superb location , just a couple of blocks away from the hustle and bustle of Fisherman's Wharf and 2 minutes from the cable car turnaround that takes you straight to Union Square .\\n255 The staff is wonderful, they had knowledge of the city andthe area and helped us in so many ways .\\n256 The staff was friendly, courteous, professional and knowledgeable .\\n257 The staff is courteous and professional, and the concierge is very helpful .\\n258 It was great , very pretty, clean, nice staff, great wine hour every evening .\\n259 The food is lovely and the staff very friendly .\\n260 We ate breakfast there one day and were appalled at the slow service, rude waitstaff, and overpriced breakfast food .\\n261 The staff was friendly, courteous and always offering extra help even when I was checking out at 4am to catch a plane .\\n262 The rooms were clean and well appointed , the maid staff were excellent .\\n263 Great restaurant with a friendly staff .\\n264 The staff was beyond kind and helpful .\\n265 Our last visit we stayed at the Hyatt at FW and while it was " fine," The Tuscan Inn has much more charm, and a terrific staff !\\n266 We found the staff friendly and the drinks in the evening an added bonus .\\n267 the beds were VERY comfortable and we had a great room which overlooked the street below with the bay in the distance the valet and the porters all very friendly and nothing seemed to be too much trouble for any of the staff !\\n268 The only others with access to this food and drink were the cleaning staff .\\n269 The staff was very friendly and attentive .\\n270 The staff is friendly and the hotel itself is not what it appears from the outside .\\n271 The staff were helpful, it was in a great location, and was very charming .\\n272 Apart from that, the staff were very friendly and helpful, the rooms were nicely decorated, and the beds were very comfortable .\\n273 the rooms are very clean and are charmingly appointed the staff could not be friendlier, and they knock themselves out to make guests feel welcome .\\n274 The hotel was lovely , really clean with friendly helpful staff fantastically situated in between North Beach Fishermans Wharf .\\n275 The staff are 100% present and attentive to your every need .\\n276 VERY helpful staff allowed us to check in 4 hours early, and continued to impress !\\n277 Great hotel, great staff, great location not any problems what so ever .\\n278 The staff were helpful and attentive, the rooms were quite spacious and the whole place looked as if it was cared for .\\n279 the staff was very friendly and the location is great .\\n280 Staff was extremely friendly and helpful .\\n281 The staff seemed pleasant and efficient whenever I had dealings with them , indeed the only quibble I had was that the bell boys at the front were a little undermanned on occasions but I will not let this alter my view of the hotel overall .\\n282 My final thought , 1 recurring image during this week was the staff demonstarations outside a number of prominent hotels , many were day long vigils and many were noisy , the good news was that the Tuscan was not 1 of them !\\n283 The staff was friendly and the coffee biscotti snack in the morning and the wine in late afternoon were both very nice .\\n284 It was a lovely hotel and the front desk staff was so warm and welcoming to us as we arrived, , tired and still on NY time .\\n285 Staff accommodating and friendly .\\n286 Staff was friendly and the vino hour in the evening was a nice touch .\\n287 The hotel was clean and the staff was very friendly .\\n288 Hotel is nice and clean, in a very convenient location, and the staff is friendly and helpful .\\n289 Wasn't really impressed with the staff .\\n290 Found the staff helpful especially the lady concierge who supplied maps and bus routes for Lincoln Park .\\n291 The valet guy was extremely helpful and very friendly but the check in guest services staff on the whole uninterested and unhelpful .\\n292 The manager was a little grumpy when we first checked in but the rest of the staff were extremely friendly and helpful .\\n293 Other than that it was a pleasant stay, the room was clean, our bed was really comfortable and the reception staff were friendly .\\n294 The staff was friendly and helpful, the beds were comfortable, the rooms were clean, and the location was convenient .\\n295 Excellent staff and service and the adjoining Italian restaurant was superb .\\n296 A very cheerful staff and prompt service .\\n297 Friendly Staff Great Location !\\n298 The friendly, helpful and knowledgeable staff can do or help you with just about anything you want or need .\\n299 The hotel staff was great and housekeeping went so far as to organize the toiletries I had brough from home and had left scattered on the vanity .\\n300 The staff is friendly and helpful .\\n301 , pleasant staff, close to the Wharf, just a few blocks to the cable car turnaround, Pier 39 shopping, ferry boat tours .\\n302 Staff was helpful when they were not too busy .\\n303 The friendly staff bent over backward to make us feel welcome and comfortable !\\n304 The reservation staff helped me find a room cost much lower than " rack rate .\\n305 We ate two meals at the Pescatore Cafe, and the food was good, and the staff was exceptionally nice .\\n306 Also, the hotel staff was very helpful and considerate .\\n307 More intimate, close personal attention from the staff and exceptionally clean rooms .\\n308 Their curteous staff helped with our travel plans for tours and also assisted during check, out while the planes were still grounded .\\n309 The price was great, the staff was awesome, and the rooms were clean .\\n310 Especially the housekeeping staff .\\n311 The staff are friendly and there is one computer for internet access as well as free coffee and biscuits in the afternoon .\\n312 Staff were friendly and helpful .\\n313 The front desk staff were more than helpful .\\n314 The staff was very aggressive about checking the honor bar regularly, and even incorrectly charged us for using it this was reversed, but aggravating !\\n315 The staff is wonderful to deal with and very helpful if you need directions or advice .\\n316 Wonderful Hotel , Excellent Staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "nltk.download('punkt')\n", + "nltk.download('wordnet')\n", + "nltk.download('stopwords')\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "# 입력으로 들어온 token단어들에 대해서 lemmatization 어근 변환.\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "# TfidfVectorizer 객체 생성 시 tokenizer인자로 해당 함수를 설정하여 lemmatization 적용\n", + "# 입력으로 문장을 받아서 stop words 제거-> 소문자 변환 -> 단어 토큰화 -> lemmatization 어근 변환.\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JCwRqUpQ-BIE", + "outputId": "78fdcceb-d959-4631-e551-8da2cc39a425" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package punkt to /root/nltk_data...\n", + "[nltk_data] Unzipping tokenizers/punkt.zip.\n", + "[nltk_data] Downloading package wordnet to /root/nltk_data...\n", + "[nltk_data] Downloading package stopwords to /root/nltk_data...\n", + "[nltk_data] Unzipping corpora/stopwords.zip.\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "nltk.download('punkt_tab')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3ND-yHoEBI8H", + "outputId": "a65d222d-8378-436a-ce71-2a5a19585c59" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n", + "[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "tfidf_vect=TfidfVectorizer(tokenizer=LemNormalize,stop_words='english',ngram_range=(1,2),min_df=0.05,max_df=0.85)\n", + "# opinion_text 칼럼값으로 feature vectorization 수행\n", + "feature_vect=tfidf_vect.fit_transform(document_df['opinion_text'])" + ], + "metadata": { + "id": "j5tx_HJ_-olm" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "# 5개 집합으로 군집화 수행. 예제를 위해 동일한 클러스터링 결과 도출용 random_state=0\n", + "km_cluster=KMeans(n_clusters=5,max_iter=10000,random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label=km_cluster.labels_\n", + "cluster_centers=km_cluster.cluster_centers_" + ], + "metadata": { + "id": "KgH8SfA6ALT0" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "document_df['cluster_label']=cluster_label\n", + "document_df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "cvOGQWRM_MQ2", + "outputId": "e096bfa0-cb87-426f-980f-7edb7d37a8b4" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "0 filename_list \n", + "1 filename_list \n", + "2 filename_list \n", + "3 filename_list \n", + "4 filename_list \n", + "\n", + " opinion_text \\\n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "1 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "2 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "3 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "4 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... \n", + "\n", + " cluster_label \n", + "0 1 \n", + "1 2 \n", + "2 2 \n", + "3 2 \n", + "4 1 " + ], + "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", + "
filenameopinion_textcluster_label
0filename_listshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...1
1filename_listThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...2
2filename_list3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...2
3filename_list, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...2
4filename_list, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "document_df", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" Staff are friendly and helpful .\\n0 The staff in the morning seemed to need another cup of coffee as they weren't excited to see us .\\n1 A perfect hotel a perfect location perfect staff !\\n2 The front desk staff is more than eager to help, smile, make you happy .\\n3 The staff is friendly and we only went to one of the " Happy Hours" for a glass of wine as we were either at the baseball game or on the two tours we took in , busy time !\\n4 The front desk and the concierge staff were very helpful when we had a question .\\n5 The staff is helpful and knowledgable .\\n6 The room was clean and comfortable and the staff were friendly and helpful .\\n7 The staff was very helpful, got two great suggestions for dinner on the water, and booked the shuttle back to the Airport, way cheaper than a taxi !\\n8 The service was good, very friendly staff and we loved the free wine reception each night .\\n9 The staff at the desk very rarely welcomed you back from your day out sightseeing etc .\\n10 I found the concierge and front desk staff to be helpful and the housekeepers to be quite good .\\n11 The check in check out were very efficient, however my personal opinion was that the staff did not go out of their way to be friendly or welcoming .\\n12 On arrival, were met by friendly reception staff .\\n13 They have a parking garage, but they make you leave your vehicle for them to park and then if you want to take a drive later, you have to wait for the staff to get it .\\n14 The Tuscan staff moved our packed luggage into the new room, and my husband and I discovered that both of our phone chargers were missing .\\n15 Which is a pitty, because the location was wonderful, and two of the staff members were really nice .\\n16 Upon entering the elegant lobby we were greeted pleasantly by the staff .\\n17 Helpful staff and safe surrounds .\\n18 It has some charms in decor, and all staff gave very good service to us .\\n19 The staff are very friendly and helpful, particularly the concierges and the Manager's Reception is a nice touch .\\n20 The rooms were nice and the staff was very friendly .\\n21 but its nice and clean and the staff was really nice, and its located 2 blocks from the warfh\\n22 Staff was very friendly helpful .\\n23 There was a super market just across the street which was handy and the staff were sooo helpful !\\n24 Checking in was quick and easy, the staff we're pleasant and I requested a low floor room which I got .\\n25 However, the Tuscan Inn has the best of all worlds, great location, all the amenities, excellent staff, nice restaurant adjoining, and very reasonable prices .\\n26 the staff, while all polite, looked a bit distracted, and frankly disengaged .\\n27 not the incredible, enthusiastic staff describes in such stellar terms by some lucky visitors .\\n28 Hotel staff were all very friendly and knowledgeable .\\n29 The staff at the desk didn't go out of their way to be helpful .\\n30 The front desk staff were very friendly and efficient .\\n31 The staff is very rude and doesn't seem to care at all about their guests .\\n32 So clean, quiet, excellent location, delicious coffee bar every morning, staff helpful friendly .\\n33 The staff are very friendly and go out of their way to help you .\\n34 The staff concierge were all very helpful and gave us a lot of tips of what to see and where to eat .\\n35 The front desk staff was efficent and friendly .\\n36 I have to say I see everyone that reviews this hotel compliments the front desk staff I actually found from the second day on that they were most unhelpful and actually quite rude !\\n37 Also on my third day I came back from a long day sightseeing and stopped at the front desk to ask for milk and sugar to be sent up to the room as we wanted to have a coffee after our long day at which I was told to go into the restaurant and ask the waiting staff myself and take it up to my room myself !\\n38 All the staff was friendly, though I found the maintanence and housekeeping staff to be the warmest in the building .\\n39 The staff and service were exceptional .\\n40 Every hotel should have this staff !\\n41 Im actually still in the hotel and couldnt wait to write my review, but from the moment we arrived the staff at this best western could not have done more for us .\\n42 Every hotel should have the staff that is here at the Best western Tuscan inn .\\n43 Checkout early Wednesday morning took about 2 minutes to complete, no complaints with the staff .\\n44 The hotel staff , as a whole , were more than happy to go above and beyond to satisfy your request .\\n45 We found the staff very helpful especially Jose .\\n46 It has a good look, nice sitting area in the lobby, wine hour every night, friendly and helpful staff .\\n47 Good Location but what's with the Check in out staff ?\\n48 So I had problems with the check in and check out staff .\\n49 Do not know if I will stay there again, due to the problems with the staff at the check in out counter .\\n50 Also, the staff Chief Chief Concierge are very friendly knowledgable .\\n51 Hotel was comfortable and all the staff helpful and polite .\\n52 Jorge was extremely friendly and helpful, but the rest of the staff was less animated and warm .\\n53 also the wine gathering with the manager the one day i did attempt to attend it was so badly orgonised that i couldnt get to the table to get my wine so i just went tot he bar and had a drink there, but on the whole it was a great hotel and certain members of staff lift it out of the good to the great hotel that i experianced !\\n54 The staff was very helpful in giving us suggestions and directions when we asked .\\n55 Very close to Fisherman's Wharf, a grocery store located right across the street, and very helpful and friendly staff .\\n56 The staff are so friendly and the hotel is in a great location, just 2 blocks from Fisherman's Wharf , bus and cable car station .\\n57 The staff at this hotel make you feel so welcome and its service with a smile .\\n58 All the staff go the extra mile to assist in anyway they can and the staff of the ajoining Cafe Pescatore are just as welcoming, with great service and the food is excellent .\\n59 This hotel offers a lot , a great location, great staff, free wine tastings and morning coffee .\\n60 Staff were helpful and generally friendly .\\n61 The staff was helpful and friendly .\\n62 The staff were very helpful .\\n63 Staff was friendly and helpful , we had no issues .\\n64 Upon arriving downstairs, I found the duty manager staff napping on the guest ?\\n65 Would not stay here again, due to noise and staff, but ok for the price, if I would have paid rack rate, I would have been more upset .\\n66 The staff was wonderful, our room was very pretty with a view of the Fisherman's Wharf area .\\n67 I'd highly recommend the Tuscan Inn based on location, cheerfulness of staff, aesthetics in the room and general overall service .\\n68 Lunch time staff were miserable and in the evening we did not book so had ages to wait for a table, crowded and noisy .\\n69 The front desk staff were very friendly with a dedicated concierge desk where guests could book excursions or just get information .\\n70 We found the staff to be very helpful and courteous and we had no problems at all .\\n71 The staff was very friendly especially Jose !\\n72 We spent 2 nights and found the staff to be very friendly .\\n73 The hotel staff are really friendly .\\n74 The reception staff were very accommodating and said the hotel was fully booked but first thing in the morning they would move our luggage to a room over looking the courtyard .\\n75 Staff were knowledgeable and friendly .\\n76 The Concierge staff , exceptional and extremely helpful , right from suggestions on transportation excursion options to recommending an amazing restaurant .\\n77 This hotel seems to get very mixed reviews, particularly about the reception desk staff .\\n78 I can only think that some of the staff are very good and some equally bad, since our experience was a very positive one .\\n79 DIsappointed in Front Desk Staff and Room Size\\n80 The front desk staff couldn\\u0092t even be bothered to greet us hello .\\n81 The staff at the front desk could not have been more helpful and whilst we did not avail his services, the concierge always seemed to be busy with guests giving info and advice .\\n82 The hotel is charming and comfortable, and the staff is great .\\n83 The staff was amazing, and went out of their way to help us .\\n84 Helpful staff and great location\\n85 The staff at the hotel more than made up for the tiny rooms .\\n86 If you are looking for an inexpensive hotel to stay at where the staff will make your tour of their city a good experience, this is it .\\n87 The staff was very friendly and we really enjoyed their dinner recommendations .\\n88 The police were investigating something that had happened and staff would not cooperate so the police got very annoyed .\\n89 We arrived early in the morning and tried to check in and the front desk staff said they would have a room cleaned asap for us .\\n90 The front desk staff didn't seem to care but the concierge who took care of us was great he also had many suggestions and tips for us about the Bay area .\\n91 The highlight of this hotel for us was the service offered by the staff, particularly the two concierges on duty while we were there .\\n92 The lobby is nice, and the staff was very friendly .\\n93 a superb hotel with staff so helpful efficient, the food at the pescadora restaurant is a must, and to be quite honest better than most of the other places we ate at on the wharf whilst there, one of which being quoted to being the best , .\\n94 Afternoon wine tasting was a cool touch by the hotel staff, and proved very popular with most of the guest including us .\\n95 Staff were pleasant and helpful .\\n96 The staff were very helpful with suggesting places to eat and with directions of how to get to places eg .\\n97 The room was clean, the staff was great and it was CLOSE to Pier 39 and Fisherman's Wharf .\\n98 We found the reception staff, maids and porters friendly and helpful .\\n99 The room was always clean and the maid staff was friendly, saying " hello" and " have a nice day" as you passed .\\n100 Staff , Very friendly and helpful .\\n101 On the plus side some of the staff were nice and helpful especially the concierge who was most gracious .\\n102 No mention of the lies, arrogance and \\u0091up you attitude\\u0092 of some of the staff then ?\\n103 Right from checking in, the staff was unbelievable !\\n104 Every single staff member we came into contact with was extremely helpful and very nice !\\n105 We arrived wondering what to expect and as soon as we arrived the staff made us feel welcomed .\\n106 They also had a staffmember serve soda and wine in the loungy lobby area in the early evening, which was a nice bonus .\\n107 all the staff we encountered were super friendly and the hotel location is great .\\n108 The staff were helpful and efficient .\\n109 Checking in was easy, with very friendly, helpful front desk staff .\\n110 One of the friendliest desk concierge staffs I've encountered .\\n111 Everything was clean, good staff .\\n112 Really enjoyed the friendliness of the staff and the big rooms .\\n113 Rooms were well cleaned and reception staff helpful .\\n114 Staff was some of the nicest I have encountered in a long time .\\n115 Great rooms great staff great hotel\\n116 Tuscan Inn has exceptionally helpful and friendly staff .\\n117 There was never a time where I saw the concierge desk unstaffed .\\n118 Excellent location friendly staff clean and pleasant rooms\\n119 All the staff was excellent, but the concereige, Clay, really went above and beyond to help us find our way around San Fransisco .\\n120 I was very delighted with the pleasant and professional hotel staff all the way from the doormen to the desk clerks .\\n121 The Corceige was excellent and some of the hotel staff did care and others did not .\\n122 The staff very polite smiling and helpful .\\n123 The reception staff were very welcoming and the room was large and well appointed .\\n124 The staff members were extra helpful, the room well decorated, detailed, clean, and bright .\\n125 we found a friendly staff through out the hotel great location,rooms were small but as pointed out to me all land is prime in the area and all places have small rooms .\\n126 Staff at front desk was fine, obviously the restaurant could use some work .\\n127 Staff was pleasant, bellhops were more than happy to get us a cab .\\n128 There was no mention from hotel staff .\\n129 My husband mentioned to the front desk staff that it would have been appreciated if someone had told us about the renovations when we made our reservation or at check in and was told that the hotel manager set the policy that the staff was to not tell guests .\\n130 The location the rooms the staff the concierge the Managers nightly wine reception everything about this hotel made our holiday MAGIC .\\n131 We made sure to tip the housekeeping staff each morning, perhaps that insured that they did an outstanding job every day .\\n132 The front desk staff were very helpful .\\n133 The staff was great, all the way around, helpful and polite .\\n134 The staff were very friendly and you could book any trips you wanted with them .\\n135 The staff were very friendly and helpful during our stay .\\n136 The restaurant Pescatore was excellent, friendly staff, and enjoyable food .\\n137 From the time we walked into the lobby until the time we checked out the stafff was always very hellpful and the room was very nice, clean, and quiet .\\n138 The lobby was welcoming, the staff was friendly and we felt good about being there .\\n139 Hotel staff was polite and helpful .\\n140 The Staff helped make our stay a great experience .\\n141 Hotel staff was friendly and helpful .\\n142 He was one of the better concierge staff I've encountered at a hotel .\\n143 The entire staff was helpful .\\n144 The travel agent booked this hotel and this was the only hotel out of 10 that I did not book myself although hotel sounded ok This was part of the deal for the airfares Location is excellent , Rooms Ok Staff variable some very helpful others not so .\\n145 Staff were friendly and helpful and we enjoyed the complimentary wine tasting each evening .\\n146 A staff member must have gone in right after we checked out .\\n147 The staff gave the typical run around .\\n148 The reception staff were extremely helpful and polite and couldn\\u0092t do enough for you all in all a good stay for a couple of nights .\\n149 The check in was quick and fast and the staff and nice concierge was very pleasurable .\\n150 The staff were friendly and helpful,it was a good base from which to explore San Francisco .\\n151 The staff was so friendly and helpful and the concierge service was very knowledgeable .\\n152 All staff very friendly and could not have been more helpful .\\n153 All the staff were extremely helpful and polite and always saying hi when eye contact was made .\\n154 PositivesThe staff were friendly and helpful .\\n155 We were there for 10 nights, the staff were very friendly and pleased to help .\\n156 The front desk staff recommended " Fior d'Italia" for a dinner reservation .\\n157 The staff was very helpful and the rooms were well apportioned .\\n158 The staff were friendly and helpful .\\n159 The hotel staff was a hit and miss situation .\\n160 Staff was courteous and the wine hour each evening gave us a chance to meet many people from all over the world .\\n161 The next morning the hotel staff were very accomodating in changing our room and moving our belongings to an outside room which was not only larger, but had central air .\\n162 The hotel staff was consistently friendly and helpful throughout our stay, especially Cliff, the consierge, providing directions, maps, dinner recommendations and reservations, and suggestions for sightseeing .\\n163 The location is great, the staff very friendly and helpful, and the room was neat and clean though a bit small .\\n164 But the thing that impressed us the most was the overall friendliness and helpfulness of the entire staff .\\n165 We booked this by checking other travellers comments on Trip Advisor and were pleased with the helpfulness of the staff, the location and overall cleanliness and comfort of our room .\\n166 Great place to stay , very clean and confortable rooms and helpful staff .\\n167 The front desk staff was great, helpful on check, in, had supply of extra coffee supplies for the room and stamps for purchase, offered to mail our postcards, and the concierge desk seemed very busy .\\n168 The pleasant European theme is carried throughout this hotel and on arrival we were welcomed by efficient and friendly staff .\\n169 Diane from Edmonton, Alberta, CanadaWe stayed at the hotel May 22 to May 25, 2007 and found the staff and particularly the concierge very helpful .\\n170 The whole staff at the Tuscan Inn was very hospitable and I highly recommend this hotel .\\n171 The hotel is pretty much as you'd expect from the chain , nice clean rooms well serviced, and the staff were extremely helpful, very pleasant to deal with .\\n172 The staff were friendly and the free coffee and biscoti each morning and wine at 6pm each evening were occassions when one could meet other guests .\\n173 The staff were very pleasant but I don't think I'd stay there again .\\n174 Staff was all friendly and courteous .\\n175 Upon arriving late through no fault of our own and finding our room double booked we were put up in a nearby sister hotel until our room was ready the next day and they give us a complimentary bottle of champagne , after this though there were no more snags and everything went great , hotel staff friendly and helpful , rooms were quiet, clean and comfortable , food in the restaurant fabulous , the situation of the hotel was very convenient , just a few mins walk from fishermans wharf with a public transport stop, supermarket, small shops, bars and cafes also really close at hand , approx 10 mins walking distance for ferries to alcatraz and bay cruise, etc , would definitely stop here again\\n176 Staff very helpful and pleasant .\\n177 From start to finish the staff did not put a foot wrong .\\n178 The staff's professional, spirited attitude, , be they reservationist, valet, front desk, or housekeeper, , deserves 5 stars .\\n179 Staff were very pleasant, always asking if we needed directions or anything and smiling and opening doors etc .\\n180 Staff were very friendly and courteous .\\n181 It is in a really good position, is not too large, and the staff are really helpful, and, contrary to what we expected on visiting America for the first time, are not waiting around for tips all the time !\\n182 We arrived on the evening of december 5th, and the check, in staff were helpful and efficient .\\n183 We didn't enjoy it, because some of the staff seemed to have little English, and misunderstood our requests .\\n184 The only quibble we had with the Tuscan Inn was that outside our room was a large cupboard, and staff kept going in there, made quite a noise, and finished off by banging the door .\\n185 Hotel was Very nicely furnished, staff was Very helpful .\\n186 We were both delighted with the friendly staff, clean rooms and very convenient location .\\n187 Comfortable bed, staff was excellent .\\n188 Rooms are small but tastefully done, very clean and the staff friendly and helpful .\\n189 Good atmosphere, welcoming and quite cosy lobby and lounge, helpful and friendly staff Overall impressed .\\n190 The staff was very friendly and accomadating with any questions or requests .\\n191 The staff was friendly and polite, and the a .\\n192 staff were helpful although the valet parking and the laundry costs were extremely expensive .\\n193 location, friendly staff, beautiful rooms and comfy beds .\\n194 We found the staff extremely helpful and the room was clean , tidy , a decent size and the bed was extremely comfortable .\\n195 Top, notch staff and very clean and comfortable !\\n196 Downsides are disinterested staff, bordering on rude and quite small rooms .\\n197 The staff was exceptionally helpful and friendly, from the front desk, concierge, valet, and housekeeping .\\n198 Front desk staff even took the time to call a restaurant at pier 39 to inquire about the dress code for me even though they had a couple of people also waiting to ask questions or to check in .\\n199 The service from every staff member we encountered was delightful .\\n200 The staff were very polite and helpful, loved the large lobby area with the large fireplace where you were invited to sample wonderful wine and nibbles early evening and tea or coffee in the mornings .\\n201 The staff was really great, friendly, knowledgable, etc .\\n202 The staff at this hotel is superb, from the front desk staff to the housekeepers .\\n203 It is clean, decorated in boutique style, very relaxing, and has helpful staff .\\n204 The hotel is clean and comfortalbe with a knowledgeable and helpful staff .\\n205 Front desk staff were always pleasant .\\n206 Upon arrival, I was given the goings, on and was politely welcomed by all staff .\\n207 The front desk staff is AWESOME !\\n208 The staff was friendly, pleasant, and helpful, and a houseman went out of his way to dry my son's sneakers .\\n209 The staff attitude ranges from perfunctory to rude .\\n210 a staff member named Mark actually snapped at me at the wine tasting when I tried to find out what kind of wine was being offered .\\n211 The check in was easy, the staff friendly and helpful .\\n212 From the time we arrived we were made to feel most welcome by all staff .\\n213 Very friendly staff serving great breakfasts and evening meals .\\n214 Good hotel great location friendly staff .\\n215 It represents value for money, the rooms and bathrooms were impeccably clean, fresh linen daily, and the staff extremely helpful and friendly .\\n216 Staff were more than helpful and accommodating and we were were moved overlooking the street .\\n217 We asked the staff to empty the refrigerator and snack bar so we could stock our own items, they did it easily and quickly .\\n218 Found the staff friendly like the other reviews .\\n219 I found the staff to be helpful when required but unobtrusive otherwise .\\n220 It's modern, clean, efficient, comfortable, and professionally run with courteous staff .\\n221 I really didn't get a chance to experience the staff's level of service but the rooms are small as is the bathroom .\\n222 Staff was neither especially helpful or unhelpful .\\n223 The staff was not overly friendly nor helpful .\\n224 Our room was large and comfortable, and the staff was top, notch .\\n225 HOWEVER, the front desk staff is always more than willing to jump in with helpful advice and recommendations .\\n226 I've tried 4 or 5 of the local recommended restaurants, and the staff definitely knows what the area has to offer .\\n227 The front desk was very helpful as was the rest of the staff .\\n228 The reception staff were struggling a bit and our check in was done wrong Next day, our room keys stoped working even though we were there for 2 days , again a check in error .\\n229 The staff were very pleasant, the concierge Daniel made excellent reservations for us and the bed was extremely comfortable .\\n230 It is in a great location, the staff is always alert and courteous, the rooms are clean, the morning coffee and biscotti are a nice touch, the happy hour is a PLUS, and the price is right !\\n231 I could excuse this if staff was friendly but I left there dissapointed .\\n232 Our reservations were completely wrong and staff were clueless, so I thought, until further inquiries proved that they were lying through their teeth .\\n233 One morning I overheard people booking in experiencing similar difficluties and a staff member trying to be helpful, I offered some assistance and we were told by him that since Best Western shifted its booking facility offshore there's nothing that Tuscan Inn staff can do to help guests .\\n234 The staff was very friendly, we had no issues at all with the front desk .\\n235 I happened to go up to our room when the housekeeping staff was out in force , every single woman I passed said hello to me !\\n236 There appears to be no management actively involved with running this dump, cause when we asked to speak with one the front desk staff got very nervous and suddenly worked hard to find our lost reservation .\\n237 The staff is friendly and helpful .\\n238 The staff at check, in were nice enough, but unfortunately the concierge was not very helpful, giving us wrong information about our car hire location causing us to get 2 cab rides instead of one .\\n239 The reason that I liked this hotel so much was that it felt cosy and welcoming, the lobby had a log fire going constantly and all the staff were very friendly and helpful .\\n240 Staff and concierge were very helpful .\\n241 The staff of the hotel was very friendly and the evening cocktail hour was a great touch with many choices .\\n242 I will say that the beds were comfortable and select staff were friendly, but definitely not enough incentive to try my luck again at this hotel .\\n243 The room was inviting, the staff tremendously helpful and courteous, and the concierge was the best in the business .\\n244 The restaurant was decorated beautifully, the wait staff was professional without being snobby, the menu was creative and delicious .\\n245 The front desk and the housekeeping staff were equally as friendly .\\n246 The staff and faclilties were great !\\n247 The staff was friendly and very knowledgeable about everything we asked .\\n248 The entire staff was extremely friendly and accomodating .\\n249 A wonderful stay, staff especially friendly, complimentary wine tasting a definite plus, rooms well appointed and well kept .\\n250 We felt very welcomed by the freindly staff that was able to help us with all of our questions and needs .\\n251 The staff has a wine get, to, gether for the patrons in the lobby every evening at 5, 6 p .\\n252 The staff was friendly and accomodating .\\n253 Our rooms were so much nicer then we expected and the staff was friendly and helpful .\\n254 Great room, friendly staff, superb location , just a couple of blocks away from the hustle and bustle of Fisherman's Wharf and 2 minutes from the cable car turnaround that takes you straight to Union Square .\\n255 The staff is wonderful, they had knowledge of the city andthe area and helped us in so many ways .\\n256 The staff was friendly, courteous, professional and knowledgeable .\\n257 The staff is courteous and professional, and the concierge is very helpful .\\n258 It was great , very pretty, clean, nice staff, great wine hour every evening .\\n259 The food is lovely and the staff very friendly .\\n260 We ate breakfast there one day and were appalled at the slow service, rude waitstaff, and overpriced breakfast food .\\n261 The staff was friendly, courteous and always offering extra help even when I was checking out at 4am to catch a plane .\\n262 The rooms were clean and well appointed , the maid staff were excellent .\\n263 Great restaurant with a friendly staff .\\n264 The staff was beyond kind and helpful .\\n265 Our last visit we stayed at the Hyatt at FW and while it was " fine," The Tuscan Inn has much more charm, and a terrific staff !\\n266 We found the staff friendly and the drinks in the evening an added bonus .\\n267 the beds were VERY comfortable and we had a great room which overlooked the street below with the bay in the distance the valet and the porters all very friendly and nothing seemed to be too much trouble for any of the staff !\\n268 The only others with access to this food and drink were the cleaning staff .\\n269 The staff was very friendly and attentive .\\n270 The staff is friendly and the hotel itself is not what it appears from the outside .\\n271 The staff were helpful, it was in a great location, and was very charming .\\n272 Apart from that, the staff were very friendly and helpful, the rooms were nicely decorated, and the beds were very comfortable .\\n273 the rooms are very clean and are charmingly appointed the staff could not be friendlier, and they knock themselves out to make guests feel welcome .\\n274 The hotel was lovely , really clean with friendly helpful staff fantastically situated in between North Beach Fishermans Wharf .\\n275 The staff are 100% present and attentive to your every need .\\n276 VERY helpful staff allowed us to check in 4 hours early, and continued to impress !\\n277 Great hotel, great staff, great location not any problems what so ever .\\n278 The staff were helpful and attentive, the rooms were quite spacious and the whole place looked as if it was cared for .\\n279 the staff was very friendly and the location is great .\\n280 Staff was extremely friendly and helpful .\\n281 The staff seemed pleasant and efficient whenever I had dealings with them , indeed the only quibble I had was that the bell boys at the front were a little undermanned on occasions but I will not let this alter my view of the hotel overall .\\n282 My final thought , 1 recurring image during this week was the staff demonstarations outside a number of prominent hotels , many were day long vigils and many were noisy , the good news was that the Tuscan was not 1 of them !\\n283 The staff was friendly and the coffee biscotti snack in the morning and the wine in late afternoon were both very nice .\\n284 It was a lovely hotel and the front desk staff was so warm and welcoming to us as we arrived, , tired and still on NY time .\\n285 Staff accommodating and friendly .\\n286 Staff was friendly and the vino hour in the evening was a nice touch .\\n287 The hotel was clean and the staff was very friendly .\\n288 Hotel is nice and clean, in a very convenient location, and the staff is friendly and helpful .\\n289 Wasn't really impressed with the staff .\\n290 Found the staff helpful especially the lady concierge who supplied maps and bus routes for Lincoln Park .\\n291 The valet guy was extremely helpful and very friendly but the check in guest services staff on the whole uninterested and unhelpful .\\n292 The manager was a little grumpy when we first checked in but the rest of the staff were extremely friendly and helpful .\\n293 Other than that it was a pleasant stay, the room was clean, our bed was really comfortable and the reception staff were friendly .\\n294 The staff was friendly and helpful, the beds were comfortable, the rooms were clean, and the location was convenient .\\n295 Excellent staff and service and the adjoining Italian restaurant was superb .\\n296 A very cheerful staff and prompt service .\\n297 Friendly Staff Great Location !\\n298 The friendly, helpful and knowledgeable staff can do or help you with just about anything you want or need .\\n299 The hotel staff was great and housekeeping went so far as to organize the toiletries I had brough from home and had left scattered on the vanity .\\n300 The staff is friendly and helpful .\\n301 , pleasant staff, close to the Wharf, just a few blocks to the cable car turnaround, Pier 39 shopping, ferry boat tours .\\n302 Staff was helpful when they were not too busy .\\n303 The friendly staff bent over backward to make us feel welcome and comfortable !\\n304 The reservation staff helped me find a room cost much lower than " rack rate .\\n305 We ate two meals at the Pescatore Cafe, and the food was good, and the staff was exceptionally nice .\\n306 Also, the hotel staff was very helpful and considerate .\\n307 More intimate, close personal attention from the staff and exceptionally clean rooms .\\n308 Their curteous staff helped with our travel plans for tours and also assisted during check, out while the planes were still grounded .\\n309 The price was great, the staff was awesome, and the rooms were clean .\\n310 Especially the housekeeping staff .\\n311 The staff are friendly and there is one computer for internet access as well as free coffee and biscuits in the afternoon .\\n312 Staff were friendly and helpful .\\n313 The front desk staff were more than helpful .\\n314 The staff was very aggressive about checking the honor bar regularly, and even incorrectly charged us for using it this was reversed, but aggravating !\\n315 The staff is wonderful to deal with and very helpful if you need directions or advice .\\n316 Wonderful Hotel , Excellent Staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 5,\n \"samples\": [\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "

Distributions

\n", + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "document_df[document_df['cluster_label']==0].sort_values(by='filename')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 633 + }, + "id": "uOkQYDcDBhIm", + "outputId": "4a0c3d7e-243b-43ca-c1a2-a4079a072233" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "18 filename_list \n", + "27 filename_list \n", + "29 filename_list \n", + "39 filename_list \n", + "40 filename_list \n", + "41 filename_list \n", + "43 filename_list \n", + "\n", + " opinion_text \\\n", + "18 The staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ... \n", + "27 The Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ... \n", + "29 We arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u... \n", + "39 Great Location , Nice Rooms , H... \n", + "40 Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ... \n", + "41 The room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ... \n", + "43 Staff are friendl... \n", + "\n", + " cluster_label \n", + "18 0 \n", + "27 0 \n", + "29 0 \n", + "39 0 \n", + "40 0 \n", + "41 0 \n", + "43 0 " + ], + "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", + "
filenameopinion_textcluster_label
18filename_listThe staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ...0
27filename_listThe Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ...0
29filename_listWe arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u...0
39filename_listGreat Location , Nice Rooms , H...0
40filename_listParking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ...0
41filename_listThe room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ...0
43filename_listStaff are friendl...0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==0]\",\n \"rows\": 7,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 7,\n \"samples\": [\n \" The staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 All staff members are very courteous and go the extra mile in meeting your needs during your stay .\\n2 The staff was great and put us on the 30th floor with a view of the lake .\\n3 The staff is friendly and knowledgeable about the town and will go out of your way to be helpful .\\n4 Our whole stay it felt like the staff went out of their way to make sure we had the best visit possible .\\n5 Great rooms staff and location but extras overpriced .\\n6 The hotel staff was very nice, from the moment we drove up .\\n7 Positive , Great room, comfortable bedVery friendly staff, help you in any way they canInternet was $9 .\\n8 And all of the the staff were very professional, courteous and friendly .\\n9 Great location great staff great everything !\\n10 The staff was terrific both with my room and with the business aspects of our event .\\n11 The staff at the hotel are very helpful and nice .\\n12 Checkin was very swift and friendly staff explained everything very good .\\n13 The staff from front desk to concierge to housekeeping could not have been more professional and obliging .\\n14 The staff was friendly and courtious and was happy to help when we asked .\\n15 The bellhop staff were not very resourceful .\\n16 Despite that we enjoyed our mini trip and loved the staff .\\n17 The bed was comfortable the room was clean the view was fantastic and the staff was both helpful and friendly .\\n18 The staff is friendly enough and check in, check out went smoothly without incident .\\n19 The front desk staff was not mean, but not very informative either .\\n20 Some of the concierge staff were abit chilly at times, but the housekeeping service staff were extremely friendly and cheerful .\\n21 The hotel was a bit busy during this weekend, but the staff did a great job of helping me with whatever I needed .\\n22 My only criticism would be that perhaps due to the size of the building and it was busy that staff appeared a bit impersonal .\\n23 The Hotel staff were professional, but the fornt desk was somewhat slow at check in .\\n24 My father and I were in town for four days from Los Angeles to catch a game at Wrigley Stadium, and the front desk and bar staff were all very friendly and accommodating, providing recommendations to us about the attractions, and transportation services .\\n25 Instead we were offered a rude and incompetant staff, amateur and slow valet, over, priced internet, garage and fitness room access charges and an inept business office .\\n26 Room 1619 was a very nice room, had a great view, beds were soft and very nice to sleep in, TV was very nice, show was very nice, staff was awesome saw to every need I inquired about .\\n27 STAFFHas that midwestern charm .\\n28 The staff is quite accommodating .\\n29 I was very impressed with this hotel and its staff .\\n30 The rooms were great, the staff was excellent .\\n31 Very close to everything, or the front staff will hail a cab for you .\\n32 You come to a place like Trip Advisor and it\\u0092s so, so hard to tell fact from fiction or even to tell whether or not someone was having a bad day when they arrived or left or whether or not a guest was rude him herself and thus caused the hotel staff to be standoffish or what .\\n33 While we were there I would have to say I saw one or two people guests who were less than polite to the hotel staff .\\n34 If you walk in feeling entitled with your nose up in the air like they owe you something, then I daresay you might find something to squawk about, but the hotel staff I encountered doesn\\u0092t sound anything like the staff some reviewers have mentioned .\\n35 Thanks to the management and staff for our fabulous weekend .\\n36 The hotel was beautiful, clean, and the staff was wonderful .\\n37 Some nice extras and the staff was very professional and most helpful .\\n38 I compliment the hotel staff on their professionalism, their friendliness and their attention to detail .\\n39 The concierge staff was helpful and steered us in the direction of a great restaurant we could walk to .\\n40 The several staff folks with whom I interacted were all lovely, including day & night front desk, concierge, doorman, bartenders and restaurant servers .\\n41 We appreciated the elegant service and manner of the staff .\\n42 Where other hotel staff have sometimes acted " put out" for being asked to board our luggage after checkout while we amused ourselves until flight time, Swissotel staff were charming and kind about taking it off our hands .\\n43 The staff is always cheerful and helpful upon arrival and during my stay .\\n44 The staff is more than accomadating and will take care of any need you might have .\\n45 The staff was very friendly .\\n46 Staff was friendly and accomodating .\\n47 Very nice staff, who was friendly and helpful .\\n48 The staff is always very helpful .\\n49 no more bathrobes in corner rooms suites coffee service in room is parred way down the buffet offered in the cafe is not as bountiful, although the cafe staff is inpeccable and extremely gracious and will bring you what you wish check in staff not at all eager to upgrade you, even though you may be a frequent visitor .\\n50 Efficient & polite staff, exceptionally clean room .\\n51 Staff very friendly, they even found me out were i can get Timerland shoes .\\n52 Great hotel, wonderful and friendly staff, great location, fantastic view .\\n53 Welcoming and friendly staff !\\n54 We found the staff very pleasant and helpful .\\n55 , staff very slow to offer coffee & clear tables, and the cream on our table was off so had to ask for replacement, but in a nice tranquil setting with a good selection of fruits, cereals, pastries .\\n56 Hotel staff were excellent in providing us assistance when needed .\\n57 Great staff , we needed extra towels one morning and someone arrived within 5 minutes .\\n58 The staff was friendly, courtious, and helpful .\\n59 Great Location horrible staff .\\n60 Front Desk Staff were shockingly bad .\\n61 Concierge staff were snooty and were not very helpful .\\n62 The staff was very friendly .\\n63 The staff was helpful and very polite and friendly .\\n64 The rest of the staff are slow, and unresponisive .\\n65 The staff was very pleasant and easy to talk to for any questions .\\n66 Every member of the staff was courteous and helpful .\\n67 No problem with check, in or out, and the staff was most accomodating .\\n68 The staff was very accommodating, which you'd expect in a 4, star hotel .\\n69 We found plenty a nice restaurants that were recomended by the " natives" as they call themselves rather than hotel staff .\\n70 The hotel staff tend to be aware of the tourist traps since they are close by .\\n71 Great Facility and Location , So, So Staff .\\n72 My one issue was with the staff .\\n73 The front desk staff were friendly and relatively efficient but utterly lacked any warmth .\\n74 Staff was very accomodating .\\n75 I always tip housekeeping and the staff never disappointed .\\n76 front desk staff need customer service 101 .\\n77 The front desk staff was never very helpful when we had any requests for simple things .\\n78 Why is the cleaning staff telling us they are out of coffee for the rooms ?\\n79 If you dont mind the attitude of dealing with a rude staff, go for it .\\n80 Overall would stay elsewhrere downtown to many other properties who offer nicer staff assistance, quality for the price .\\n81 The staff seemed very helpful and friendly .\\n82 The hotel staff was not helpful at all .\\n83 stayed at swissotel for 5 nights , just myself and two children all the staff could not have been more welcoming, the room service was prompt and efficient and not overly expensive .\\n84 All the staff we encountered, from doorman to desk lady who checked us in, to check out, was professional and courteous .\\n85 The bartender and staff were the only bright spots in the lackluster weekend .\\n86 The check in was easy and the staff at the desk was courteous .\\n87 Very Nice Hotel Very Bad Staff .\\n88 The staff really need to take a class in interpersonal communication .\\n89 First of all the staff was very gracious and it is in a great location .\\n90 The staff was wonderful, our room was very comfortable with an amazing view of the Chicago River and Michigan Ave, Room service was superb .\\n91 The rooms are large and well, appointed , the staff was very professional and friendly, and the view was striking !\\n92 The waite staff was annoying :\\n93 The staff was unbelievably friendly and efficient .\\n94 Room service was good and the staff extremely friendly .\\n95 The staff at the hotel did not seem too overly helpful, but the staff at the Palms was absolutely excellent, as was the late, night dinner we had there on our arrival night .\\n96 The staff was very friendly and helpful too .\\n97 My husband took the car to the garage and the hotel staff picked him up .\\n98 The staff was nice, but no smiling faces or hellos as you passed by .\\n99 the hotel is very clean, well presented and the staff were quick and efficient .\\n100 Staff was very, very professional however, where is the smile ?\\n101 The actual hotel and rooms were very nice with amazing views, the staff was extremely rude .\\n102 The staff is very pleasant and are truly an international group .\\n103 The staff have impeccable manners !\\n104 But the staff treat you like royalty .\\n105 The hotel staff was courteous and helpful .\\n106 would be satisfactory for security, and a slight air of detachment by the staff .\\n107 Swissotel Chicago is good hotel, very nice, very helpful and nice staff .\\n108 The staff at the hotel is efficient although they didn\\u0092t distinguish themselves from other higher, end hotels .\\n109 The front desk staff can be clueless about this stuff, too, just handing you attitude if you complain .\\n110 At checkin, the staff never made eye contact and only went through the motions .\\n111 Bell staff was attentive and available .\\n112 From the moment we checked in, the staff was courteous and meet every need, including arranging for a crib for our daughter and making sure it was safely set up before leaving our room .\\n113 However, the staff was very friendly and helpful .\\n114 The young lady that checked us in was very pleasant and I was very appreciative of the articulate directions given to us by one of the staff members .\\n115 Check, in and check, out were a breeze , and the staff was just fine .\\n116 My biggest complaint is I got used to the Fairmont's treatment, the staff is very well trained to meet your every need and are over accomodating .\\n117 I guess the thing that bothers me most is that from the lobby decor and staff attitudes, this hotel is trying to be very snooty but then you go to your room and it is a piece of junk !\\n118 We found the staff to be helpful and friendly .\\n119 The hotel is in a great location, the staff is friendly and very service, oriented .\\n120 Got Swissotel for a very good price, but was a little anxious since some of the reviews on this site complained of slow elevator service, unhelpful staff, etc .\\n121 The clientele seemed upscale, the staff was friendly and I slept so soundly every night , I have absolutely nothing to complain about .\\n122 The staff was polite and helpful .\\n123 Staff was very accommodating and always smiling and ready to assist .\\n124 Staff were professional but not very friendly and distanced .\\n125 Nice comfortable furniture, a fireplace and very attentive wait staff .\\n126 The staff removed it immediately without problem and with a smile .\\n127 We were in Chicago for a concert and the staff were extremely helpful in providing various travel options for us to get to the venue .\\n128 Great Location and top notch Staff .\\n129 Previous reviewers complained of poor attitudes from the staff, But we found this to be very much the opposite .\\n130 the hotel staff was excellent, polite, courteous, and Helpful in every way .\\n131 we had such a memorable time in Chicago, and i would like to thank the staff of the Swissotel for making it such .\\n132 the service staff always left our rooms clean, and even arranged my girlfreinds jewelry for her, untangling her necklaces and earrings from each other, and leaving them evenly placed on the bureau !\\n133 All the staff at the hotel were the epitomy of politeness and professionalism .\\n134 The staff was absolutely excellent = full service, from front desk, to health club attendants, to business center personnel .\\n135 Staff are welcoming, room was spacious, spotless, and quality .\\n136 And the front desk staff dealt with folks with a general disdain .\\n137 The other big gripe was with the reception staff, who were rude .\\n138 The hotel staff was very courteous and helpful, switching our room to one with 2 double beds from a king, even suggesting local restaurants to eat at just a short walk away .\\n139 The bell staff was happy to hold my bags till I returned .\\n140 Front desk staff was not pleasant at all and did not bother to satisfy our room preferences .\\n141 Very classy entrance, nice staff .\\n142 From checking to checking out, I loved the room and the staff .\\n143 Everything was wonderful, including the staff and service .\\n144 Now on the side of the service andstaff, there is a real " snobbish" attitude that isprobably related to the fact that the Swedish, Germanprogeny of Europe work at the hotel, except as luggagehandlers, toilet cleaners and car parkers .\\n145 The front desk staff was friendly as well .\\n146 The location of the hotel is also good and the staff seemed friendly .\\n147 The hotel seemed understaffed at the front desk as there was only one agent when I checked in .\\n148 I thought that the concierge staff was OK, certainly not too pleasant, but adequate .\\n149 Of course I called downstairs and was put on endless hold due to them not being staffed sufficiently .\\n150 It's a block away from the Hyatt which I have also stayed at and isn't as nice as the Swissotel but at least its better staffed .\\n151 I agree with other reviewers who found the staff to be efficient, but not terribly personable .\\n152 Hotel is staff is courteous on the most part .\\n153 The front desk staff was professional and very helpful .\\n154 Swissotel has a famous restaurant inside it and the staff in there are charming and attentive .\\n155 Service was great as I was greeted immediately by bellstaff from my taxi and the desk person greeted me with a great smile .\\n156 Staff seemed efficient though not overly friendly, no good morning, etc .\\n157 The worst were the clorox, like smell on that floor and the level of service provided by the staff .\\n158 The staff is not helpful and sometimes hardly able to understand even a simple English sentence .\\n159 Back in the room, the cleaning staff never made it there before 4pm in the afternoon, not very exciting when you have to spend a rainy weekend in the windy city !\\n160 And due to the lack of a sign, you cannot indicate to the cleaning staff early in the day that the room is ready .\\n161 Extremely helpful staff, a very quiet, clean and safe property .\\n162 FIrst at check in the desk staff individuals were a bit rude and almost seemed to be looking down at people who are not business travelers .\\n163 I did not find the service staff to be above average in any way, with the exception of the lovely concierge .\\n164 Front desk staff were not super easy to work with but it wasn't too bad .\\n165 Beautiful Room Exceptional Staff .\\n166 The staff was so polite and catered to our every need .\\n167 We found the desk staff to be very friendly .\\n168 Great Hotel Very Friendly Staff .\\n169 At check, in, the front desk staff member wasn't overly friendly, but certainly wasn't rude .\\n170 The staff was extremely friendly and helpful .\\n171 From the beautiful lobby, to the freindly staff, to the spacious room, we were impressed .\\n172 The staff were extremely friendly and helpful .\\n173 The hotel staff were great, always on hand to help .\\n174 I remember the staff were friendly to us during our visit .\\n175 We were a little nervous after reading some of the reviews regarding the attitude of the staff, especially since we booked the room through a discount site .\\n176 I was concerned that the hotel staff would not be KID friendly, but they were all great !\\n177 They brought up an extra robe for our child upon request and when the ice machine was broke on the surrounding floors around us, the hotel staff went and got our ice for us !\\n178 The staff who answered the phone was happy to hang around so that he could complete his business .\\n179 The staff is quite unfriendly and unaccomodating .\\n180 The staff at the front desk were very helpful and friendly and couldn't have done more for us .\\n181 potential, but is probably in need of a renovation and some intense customer service training for its staff .\\n182 Staff was courteous without being " over the top" and was responsive to all requests .\\n183 The staff here was incredible .\\n184 The staff was very friendly and helpful .\\n185 The staff up there does tend to treat guests like recent parolees who might be about to commit new crimes or somehow misbehave .\\n186 Gorgeous hotel, great staff, fun bar lounge area and we were most impressed with the room .\\n187 the staff is very professional and friendly and they go out of their way to make your stay comfortable .\\n188 The room was clean, our beds were comfortble, and the staff was friendly and helpful , everyone from the bellmen to the concierge to the business, center staff .\\n189 I really did not have to deal with the staff too much, we asked for extra pillows and towels and they were brought right away, and check, in was easy .\\n190 Staff not very helpful or friendlyOverall, a so, so experience will not stay there again .\\n191 The cleaning staff was superb and everything was accessible .\\n192 The views were amazing, the rooms were comfortable and the staff was always helpful whenever I had a question .\\n193 The staff was friendly and helpful .\\n194 Staff were very helpful , when there was a problem with the bill it was immediately cleared up, with no arguing or hassle .\\n195 All staff were very helpful and friendly .\\n196 We stayed here April 22, 25 and loved everything about the hotel, the staff, and our room .\\n197 I cannot comment on room services, however the staff in the front desk were professional and helpful .\\n198 They treated us like royalty, the staff assisted us with information on some wonderful resturants and after hours entertainment .\\n199 Everything there was in great shape, and all the staff were wonderful .\\n200 The staff at the front desk and the concierge were a bunch of snobs as well , , very arrogant .\\n201 Very nice hotel with well trained staff .\\n202 The staff was courteous, professional and efficient the room very pleasant, and the location great !\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "source": [ + "document_df[document_df['cluster_label']==1].sort_values(by='filename')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 971 + }, + "id": "iQdnJp8fB1Vf", + "outputId": "80899a7a-cd6e-45b8-8283-6b4db6902edf" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "0 filename_list \n", + "4 filename_list \n", + "5 filename_list \n", + "6 filename_list \n", + "10 filename_list \n", + "11 filename_list \n", + "12 filename_list \n", + "13 filename_list \n", + "31 filename_list \n", + "35 filename_list \n", + "\n", + " opinion_text \\\n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "4 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... \n", + "5 A few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k... \n", + "6 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "10 I bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ... \n", + "11 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... \n", + "12 6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now... \n", + "13 Keep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi... \n", + "31 The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One... \n", + "35 After I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ... \n", + "\n", + " cluster_label \n", + "0 1 \n", + "4 1 \n", + "5 1 \n", + "6 1 \n", + "10 1 \n", + "11 1 \n", + "12 1 \n", + "13 1 \n", + "31 1 \n", + "35 1 " + ], + "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", + "
filenameopinion_textcluster_label
0filename_listshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...1
4filename_list, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...1
5filename_listA few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k...1
6filename_listWindows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...1
10filename_listI bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ...1
11filename_listheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...1
12filename_list6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now...1
13filename_listKeep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi...1
31filename_listThe Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One...1
35filename_listAfter I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ...1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==1]\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \" The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One word of advice is to be really careful about which anti, malware software you install since it will degrade performance both on and off the internet on these netbooks .\\n2 Whatever you elect to install I would highly recommend you benchmark the performance both before and after .\\n3 I expect to get 6, 7 hours in high performance mode .\\n4 faster overall performance, and shorter charge life on the battery .\\n5 Asus' center of excellance is in very reliable, very stable, high performance circuitry, mainly motherboards .\\n6 I have the Super Hybrid Engine set to auto mode, which I'm guessing is less than High or Super Performance .\\n7 Comes with unusually well, written documentation, though I'm still a little fuzzy on the different power, saving performance modes :\\n8 Overall though, I am happy with the performance .\\n9 4 PASS , Battery life is amazing, used the laptop in Super Performance Mode for over 6 hours of watching videos, checking email, connecting with USB Verizon broadband card, and still had battery life leftover .\\n10 As for the performance of this little computer, I've gotta tell ya :\\n11 The performance is great for it's size , remember these are not designed to be speed demons but to be highly portable and cordless for extended periods of time .\\n12 Just some advice , use Eset's anti, virus and not Norton, McAfee, CA or the like , if not you will loose a lot in performance .\\n13 Upgrade to 2gb of memory, but did not seem to make much different in performance in either xp or windows 7 .\\n14 I find that the performance is great for my use on just 1GB that comes with it .\\n15 I keep a couple of apps running and its performance is great .\\n16 Amazon seems to be concerned that I am simply experiencing performance or compatibility problems , , and that my computer thus does not qualify as defective by their criteria, , but I would contend that a new computer that cannot be supplied with electricity is a complete lemon .\\n17 The reviews on many of the higher resolutions netbooks also stated poor video and processing performance .\\n18 I haven't hit my swap yet in several weeks of heavy use, and performance has been more than satisfactory for what I do with it .\\n19 Replacing them isn't very hard given a screw and five minutes, and doing so noticeably ups the performance .\\n20 Otherwise its performance has been bug, free and met all expectations .\\n21 It enhances performance, but is not absolutely necessary because this unit is a full featured machine .\\n22 The Wireless performance is great .\\n23 0 out of 5 stars Excellent balance of performance and value, October 23, 2009\\n24 I am very satisfied with the performance of the Atom processor .\\n25 This did not affect me much, I can write without problems full university texts, media files run without any problem and the battery have been used for seven consecutive hours using the computer to the maximum in High Performance Mode without depleted .\\n26 The small size makes it very easy to carry compared to a standard laptop, the long battery life is really great, and the speed and performance using various wi, fi connections was better than I expected it to be .\\n27 The only area that I've seen, so far, where the performance is not adequate, is with some streaming videos, but that's not important to me .\\n28 0 out of 5 stars Excellant Portability and Performance, August 14, 2009\\n29 I'm actually downgrading in performance in getting this netbook but the performance lost is made up with the smaller form factor and greatly increased battery life .\\n30 I then loaded Windows 7 RC and the performance has been great .\\n31 After upgrading to 2Gb of memory and deleting useless pre, installed software, performance has not been an issues .\\n32 I have the following software installed and they work great, modest but tolerable performance reduction :\\n33 No noticeable performance reduction\\n34 Performance reduction here is much less than superpi would suggest .\\n35 My desktop is a very strong dual, core computer running windows 7 and I cant see a performance decrease doing everyday things on the netbook .\\n36 1 light weight, 2 long battery life, and 3 reasonable performance .\\n37 Performance is good, screen very good, wireless very good, numerous USB ports, and keyboard layout is excellent .\\n38 Battery performance couldn't be more nice, as well as performance .\\n39 Been very pleased with performance and battery life, however power supply went out after 60 days .\\n40 The performance is fantastic , opening a browser, establishing wireless connection, opening PDF documents, opening powerpoint files and word documents is comparable to my newest desktop PC .\\n41 I had thought the RAM was too small for good performance but I was wrong .\\n42 I spent a bit of time researching the various netbooks currently available and thought that the 1005HA, P had a nice mix of style, battery life, ergonomics, and performance .\\n43 The performance and speed of this laptop is amazing .\\n44 I was aprehensive about its capabilities while buying it but after using it for 15 odd days, i am very satisfied with its performance .\\n45 I use this setting but it shouldn't be used for movies as it inhibits performance during playback .\\n46 There's only 1 GB of RAM, and that's good enough for me since I'll only be running low, performance applications .\\n47 It freaked me out since I wasn't running anything high performance .\\n48 0 out of 5 stars Good ergonomics, exceptional battery, performance meets expectations .\\n49 Very acceptable performance for what netbooks are designed to do .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "code", + "source": [ + "document_df[document_df['cluster_label']==2].sort_values(by='filename')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "z2GrwuitCYhV", + "outputId": "6296b111-bf9c-4679-ed96-c40ac0452b5a" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "1 filename_list \n", + "2 filename_list \n", + "3 filename_list \n", + "7 filename_list \n", + "8 filename_list \n", + "9 filename_list \n", + "14 filename_list \n", + "15 filename_list \n", + "16 filename_list \n", + "17 filename_list \n", + "20 filename_list \n", + "23 filename_list \n", + "26 filename_list \n", + "32 filename_list \n", + "33 filename_list \n", + "\n", + " opinion_text \\\n", + "1 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "2 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "3 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "7 I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ... \n", + "8 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "9 As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ... \n", + "14 It is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ... \n", + "15 You also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no... \n", + "16 It's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ... \n", + "17 Another thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe... \n", + "20 It feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa... \n", + "23 I thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ... \n", + "26 Being able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ... \n", + "32 If a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ... \n", + "33 In fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ... \n", + "\n", + " cluster_label \n", + "1 2 \n", + "2 2 \n", + "3 2 \n", + "7 2 \n", + "8 2 \n", + "9 2 \n", + "14 2 \n", + "15 2 \n", + "16 2 \n", + "17 2 \n", + "20 2 \n", + "23 2 \n", + "26 2 \n", + "32 2 \n", + "33 2 " + ], + "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", + "
filenameopinion_textcluster_label
1filename_listThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...2
2filename_list3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...2
3filename_list, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...2
7filename_listI had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ...2
8filename_listAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...2
9filename_listAs always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ...2
14filename_listIt is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ...2
15filename_listYou also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no...2
16filename_listIt's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ...2
17filename_listAnother thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe...2
20filename_listIt feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa...2
23filename_listI thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ...2
26filename_listBeing able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ...2
32filename_listIf a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ...2
33filename_listIn fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ...2
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==2]\",\n \"rows\": 15,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 15,\n \"samples\": [\n \" Another thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lower zoom levels you have to reduce the amount of detail displayed .\\n2 it's a curiousity for most of us, traffic and content updates .\\n3 The text to speech is great for not having to look down at the screen endangering yourself and others on the road and after the voice updates the Garmin put out for the 255W the scratchiness and robotic sounding voice became crisp and very audible .\\n4 , Speed of map updates is awesome .\\n5 I first bought it from another site that was cheaper by $25 and they told me that I needed to buy a memory card to download map updates .\\n6 Another big name site did the same thing and told me that I would have to pay Garmin to update to the latest maps .\\n7 The navigation display shows more information, such as next turn street and speed limit, and the picture update is smooth instead of jerky as I have seen in other models .\\n8 Finally, be carefull around Washington DC, because this unit has not updated the actual and latest detours arownd monuments and buildings, therefore taking you to dead ends .\\n9 This clearly shows how often the map updates even when sitting still .\\n10 Upon plugging my Nuvi 255w in the PC for the first time, it immediately informed me of both a software update and a map update .\\n11 The map update are free for the first 60 days after registering .\\n12 The map update was about 2GB in size .\\n13 I have Comcast cable Internet and a quad, core PC with 4gb of ram and the map update took a little over an hour to download and install .\\n14 If you don't have a fast Internet connection the update will take some time .\\n15 I have held off from getting any GPS unit for a long time because I have a book of maps for the United States and I have always been able to update the travel atlas and supplement that with free maps from the internet via Google, Yahoo, etc .\\n16 _________________________ UPDATE__________________________\\n17 With the TomTom, if you update to the newest map firmware you get everything the Garmin 765 has minus the traffic .\\n18 And it is $79 a year to update the maps .\\n19 However, the points of interests are substandard, it would not pick up restuarants that we know have been there >3 yrs, and that was after we updated the maps, which was a 3 hr download .\\n20 > With your savings, you can buy Lifetime map updates from the Garmin web site for $119 !\\n21 > Links up flawlessly to my Mac using Garmin RoadTrip, WebUpdates, etc .\\n22 I ran the updater and there was an upgrade for the software and text for Jack TTS and Samantha TTS .\\n23 Today, I checked the Web updater again and their was a second update for Jack TTS and Samantha TTS .\\n24 Very disappointing that the product does not come with a standard power cable or even a USB cable , especially considering that is what you must have to use for software updates and product registration .\\n25 Then it said I needed to update some software I said OK .\\n26 5 It came with the latest maps Garmin City Navigator NT North America 2009 and I didn't have to update it .\\n27 The maps seem to be fairly updated .\\n28 I found too many users who said that the traffic update feature is not all that dependable a feature .\\n29 I found the maps to be inaccurate at first, but after I updated them from Garmin's website everything is golden .\\n30 Otherwise you can't update the maps !\\n31 Also make sure you update the unit software from the Garmin website on a regular basis .\\n32 Use the Webupdater so that the unit is running at its peak .\\n33 I avoided the more complex ones as I had read that FM updates can confuse the device and changing directions after the obstruction has been cleared is not a good option .\\n34 It can be done by phone but if you do it that way you don't get the one free update on the maps .\\n35 I updated to the latest 2010 map soon after I received the unit, so the map is accurate to me .\\n36 I also like the way that it connects to the internet to update all of its maps .\\n37 All I can really say about this, is update the Firm Ware straight out of the box, and when the GPS shows that it is acquiring signals don't skip that .\\n38 I also like the fact that Garmin makes the most recent map updates available rather than leave users hanging like some other GPS manufacturers .\\n39 Once you have the unit, you'll want to update the maps .\\n40 Once receiving the unit, you get one map update download which must be used within 60 days .\\n41 One guy posted on the forum that he had an older device and paid to update to the 2009 map 12 hours before the 2010 map was posted .\\n42 Directions and maps are easy to use, and if you miss a turn, it updates your route in seconds .\\n43 I discovered that I need it while trying to register the device and or to get updated maps at the Garmin website .\\n44 More often than not, the estimated arrival time is updated 1, 2 minutes before the last expected arrival time .\\n45 Map update , when you register it on, line you get an offer for one free map update .\\n46 I plan to wait almost the full 60 days to get the latest update, then probably never purchase an update .\\n47 By the time it needs a new update the unit will be obsolete .\\n48 MapSource also makes it easy to update your unit's map annually .\\n49 I have no need for the cell phone connection or traffic updates, just wanted a navigator to guide me from point A to point B as I get lost easily in my own town and to set up long trips .\\n50 The only nitpick disappointment was when I downloaded the free 2010 map update it dosn't show road extensions completed a few years ago .\\n51 Getting the prompted software update might have corrected that .\\n52 easy to connect to garmin to download your free updated map .\\n53 , Also very quick and I mean quick reroute when you miss a turn plus smooth update position when moving, not choppy on the screen .\\n54 , Updating the GPS took way to long and I have DSL , 4 hours to download a 2GB map update and 3 hours to install the program to the GPS .\\n55 I read that some Mac user could not get it to update at all .\\n56 , No traffic update but don't really need it\\n57 We started with a non, touch screen which was great, then we updated to the streetpilot C330 which was a dream .\\n58 The sound isn't that bad, Just make sure you get your free map update from the Garmin site within the 60 day time period .\\n59 Not so , tried the Garmin web site for an updated map and was told by Garmin that none was available .\\n60 Loading a map update is another experience I won't go into .\\n61 Haven't driven with it yet since the update but it seems crisp and with more detail .\\n62 Glad I updated the map and software .\\n63 Since the update , Drove it locally in San Diego and it worked fabulously .\\n64 in a test the day I received the unit, before map updates, I was directed to exit the freeway many miles before it made sense .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "code", + "source": [ + "document_df[document_df['cluster_label']==3].sort_values(by='filename')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 762 + }, + "id": "xQJLJp0TCZsN", + "outputId": "29660c46-583e-4288-f72c-3572d84c6c8d" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "19 filename_list \n", + "28 filename_list \n", + "34 filename_list \n", + "37 filename_list \n", + "38 filename_list \n", + "44 filename_list \n", + "45 filename_list \n", + "47 filename_list \n", + "49 filename_list \n", + "50 filename_list \n", + "\n", + " opinion_text \\\n", + "19 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ... \n", + "28 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ... \n", + "34 First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh... \n", + "37 Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ... \n", + "38 I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua... \n", + "44 After slowing down, transmission has to be kicked to speed up .\\n0 ... \n", + "45 I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ... \n", + "47 Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ... \n", + "49 It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ... \n", + "50 Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ... \n", + "\n", + " cluster_label \n", + "19 3 \n", + "28 3 \n", + "34 3 \n", + "37 3 \n", + "38 3 \n", + "44 3 \n", + "45 3 \n", + "47 3 \n", + "49 3 \n", + "50 3 " + ], + "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", + "
filenameopinion_textcluster_label
19filename_listRide seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ...3
28filename_listRide seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ...3
34filename_listFirst of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh...3
37filename_listDrivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ...3
38filename_listI previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua...3
44filename_listAfter slowing down, transmission has to be kicked to speed up .\\n0 ...3
45filename_listI love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ...3
47filename_listVery happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ...3
49filename_listIt's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ...3
50filename_listFront seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ...3
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==3]\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \" It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas mileage would be better .\\n2 There are trade offs that I have no problems with, my mileage after two tanks with mostly city driving is 21 but acceleration is very good, smooth, ride a little firm but enjoy the handling .\\n3 I chose it for the low emissions, value for the money, reliability and gas mileage .\\n4 The EPA mileage ratings and what the dealer bragged about mileage wise are a joke .\\n5 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n6 road noise is horrible, stereo sucks, terrible gas mileage etc .\\n7 Otherwise the gas mileage, service intervals, drive and dependability is still pristine .\\n8 I traded an 05 Acura TL for the gas mileage savings .\\n9 Runs better than AUDI A6 , Better Mileage \\n10 Gas mileage at first wasn't great but having reached 2500 miles, it seemed to go up dramatically in city driving .\\n11 Leased in Feb 2008 as a replacement to a Pilot, which had poor gas mileage .\\n12 I do miss the carry and load capacity of the Pilot, but the Accord gets decent gas mileage by comparison .\\n13 My old Buicks had far smoother shifts at far higher mileage .\\n14 It has excellent gas mileage drove from PHX to San on a half a gas of tank .\\n15 gas mileage sucks, i was getting 20 mpg on 05 accord v6 and seem to pull only 18 mpg on this one .\\n16 Gas mileage is only 20 around town and 26 to 27 on the highway with a four !\\n17 The car has met expectations, aside from the gas mileage and wind noise .\\n18 Almost half the mileage as compared to advertisement .\\n19 At first the Gas mileage was very poor but has really improved .\\n20 I wanted an inexpensive car with good mileage, and strong resale .\\n21 Very good mileage, getting about 28 mpg combined highway, and I have a heavy foot .\\n22 The 190 hp I4 engine is powerful and smooth enough to enjoy, without sacrificing fuel mileage .\\n23 great mileage, poor build quality of the car .\\n24 On top of all this, I get horrible gas mileage in city driving I get 15, 16 mpg .\\n25 It gets great gas mileage and love the car .\\n26 Mileage over three tanks has been 25 .\\n27 3 mpg as consistent full tank highway mileage .\\n28 The car drives great and gets better gas mileage than my 2000 Lincoln LS V8 .\\n29 It looks great, handles well, and gets good gas mileage .\\n30 The gas mileage has improved from 18MPG to 21 but that still is not good .\\n31 Gas mileage has been a bit disappointing, but it has been improving .\\n32 the variable cylinder management changes to 4 cyl when not under load, this helps with fuel mileage .\\n33 After owning a Honda Accord EX I had to go back to the Honda the gas mileage can't be beat .\\n34 Gas mileage is around 22, 23 in town and 29, 30 on the highway .\\n35 Fuel mileage has been less than expected .\\n36 It's no 8 cylinder GT, but it also gets double the gas mileage and so far, no problems .\\n37 Aside from missing the turbo's acceleration, I've preferred the Accord's better mileage, handling and comfort .\\n38 The manual transmission lets me control the car better and achieve higher mileage .\\n39 So beware, if you are trading in your V8 for a mileage vehicle, this is not it in my case .\\n40 The car is getting great gas mileage even though I have only been driving it 2 weeks .\\n41 Our 2008 Accord is very disappointing, our in town mileage is 14 .\\n42 Gets great gas mileage, I mostly drive city and I am currently receiving 25 .\\n43 I just love the VCM makes the car give great mileage .\\n44 Initial gas mileage looks good too .\\n45 Don't buy this car if you want good gas mileage .\\n46 I have a V, 6 with Variable Cylinder Management which is supposed to let the car run on 3,4 or 6 cylinders, as needed, to improve mileage .\\n47 My BMW 530i got better mileage .\\n48 It is fun to drive, I love the color, it has great features, the sound system is nice, the power is perfect and the gas mileage is great !\\n49 Fun to drive, fairly roomy, looks good, gas mileage is OK , but not as good as Honda advertises .\\n50 Gas mileage is wonderful, 1st tank 26 mpg with almost all city driving .\\n51 I had tons of room in my 4Runner, but I needed something that would get better gas mileage w o giving up power .\\n52 I am so very disappointed with the gas mileage !\\n53 I traded for better mileage, and this is what I got .\\n54 I will warn you though, that if you drive it like it should be driven, gas mileage isn't the best .\\n55 It feels safe, performs well, looks fantastic and gets decent gas mileage for its size .\\n56 The Accord is better than other those car on gas mileage and reliability .\\n57 Strangely, the gas mileage is not as good as the Acura but is acceptable .\\n58 Some reviewers were complaining about gas mileage .\\n59 Gas mileage is horrible too, 20 mpg city highway after 6000 miles .\\n60 If you are looking for a car that is affordable and well built this is the car for you bad gas mileage\\n61 In reality we have been very disappointed our in city mileage is 16, 17 and highway is better at 27 .\\n62 While the mileage is not bad it good be better, but as the acceleration is good for a 4 cylinder it's a trade, off .\\n63 I am sure as gas prices go up cars will be built to get better mileage at the expense of acceleration .\\n64 Good looking inside and out, comfortable and roomy, commendable performance, and excellent gas mileage .\\n65 I live in Chicago and drive downtown and back 2 times a week for school and am getting great mileage .\\n66 Only update is after about 5k miles the fuel mileage is less than I had anticipated .\\n67 Everything else such gas mileage, handling, stereo system is fine but it doesn't make up for the loud rattles and wind noise .\\n68 It's almost embarrassing driving such a nice car around a parking lot and have it sound like a high mileage beater .\\n69 So I saved $2 K upfront and will also save down the road since the 4 cylinder gets slightly better gas mileage .\\n70 It is a well built car that runs smooth and gets great gas mileage .\\n71 Gas mileage is still getting better though .\\n72 The gas mileage on the highway is about the same for both models .\\n73 Local mileage with the '08 has been about 24 mpg, and about 25 mpg with the '06's that we've leased .\\n74 I decided to go back to Honda as even with high mileage they keep their value .\\n75 Mileage , also not impressive , all I can get is about 24mpg, far from the 32 mpg you see on the window sticker .\\n76 Posted mileage ratings are for those who have a heavy right foot .\\n77 Gas mileage is fantastic especially going from a V8 SUV to a 4 cylinder sedan .\\n78 I was tempted to go for the V6, but I drive 42 miles one way to work and we have an '07 Odyssey with the variable cylinder management system and unless you're on long highway runs it doesn't get the gas mileage Honda claims .\\n79 I just love this car , and with almost double the highway gas mileage that I was getting with my Grand Cherokee , that adds a lot of $$ towards my monthly payment .\\n80 190 hp and superior gas mileage .\\n81 It wasn't worth saving the little difference in gas mileage for this Honda .\\n82 The gas mileage is about 45 to the gallon going on the highway with cruise at about 800 or 900 RPM and about 38 going 70 .\\n83 The Gas mileage is good, the acceleration sometime is slow when cold from 1st to 2nd gear .\\n84 I hope to get better mileage on extended highway trips .\\n85 I think the mileage would be even better with a 6, speed stick shift to drop the tachometer from ~2300 rpm to <2000 rpm at 60 mph .\\n86 Gas mileage has been improving and is now consistently 29 hwy 22 city .\\n87 Very peppy engine great fuel mileage 28, 30 combined .\\n88 I am not known to drive slowly so I am pleased with the mileage .\\n89 We bought this car with the expectations of getting a car that feels good with my bad back, gets good gas mileage, and is reliable .\\n90 So far, the reliability has been as expected, it is comfortable on my back, and the gas mileage has been pretty good .\\n91 It is great to drive, has many nice features and gets you there with great mileage .\\n92 Mileage is very good and we have already taken it on a long trip .\\n93 I had rather not have it and sacrifice the mileage .\\n94 The gas mileage has been as advertised, hitting 32 mpg on the highway when driving at 65 MPH .\\n95 Gas mileage after 1000 miles is averaging apprx 23, 24 mpg in a blend of city highway .\\n96 It has everything but good gas mileage .\\n97 This car has great gas mileage even with the V6 .\\n98 The best gas mileage I can get is 22 mpg which is mostly highway and the car sometimes hesitates during acceleration\\n99 I drive around 60 miles a day so fuel mileage was important .\\n100 First tank mileage was 27 mpg not bad at all .\\n101 highway mileage slightly over 30 as advertised .\\n102 with gas prices, wanted better mileage .\\n103 It gets good mileage on HWY = 30 but mediocre on local = 21 .\\n104 SUV, wanted something with better gas mileage and something that had good resale value .\\n105 The 4, door provides the room we needed, the exterior design keeps the sedan from looking boring, the gas mileage is great, the price point was right, and the reliability is terrific .\\n106 Gas mileage is disappointed, avg 20 mpg so far .\\n107 i just purchased my lx, p a couple of weeks ago, having driven a pick up for the last 25 years, i was really surprised at how much i like this car, going from a big v, 8 to a 4 is a change but the power is good, gas mileage is great .\\n108 At first the gas mileage was a disappointment, but as the car is now breaking in it's getting better .\\n109 I test the car and was very impressed with the looks and the 4cyl was adequate since gas mileage was very important to me .\\n110 I expected a little better gas mileage avg, approx 26 mpg .\\n111 poor gas mileage look close at your window sticker not the big mpg numbers but the ratings below, it tells you that you could get 17 mpg based on your driving habits .\\n112 The ride is excellent, and the fuel mileage is impressive so far .\\n113 Wanted something with better handling and gas mileage .\\n114 Great gas mileage for a v, 6 .\\n115 Gas mileage is horrible on highway at 21 mpg .\\n116 My mileage, is averaging about 28 .\\n117 I was a bit disappointed with the 4 Cyl mileage as I drive over a 100 miles a day round trip to work .\\n118 There seems to be no way to shut it off and mileage is about 26 27 highway .\\n119 Mileage jumps on the highway to 31 32 at normal speeds .\\n120 The car is very smooth for a v4, my first, but I thought that the gas mileage should be More about 38, 45 .\\n121 Around town gas mileage is not as good at 22 with a mix of city and high way .\\n122 Mileage looks like it will be a little less than the older V6 Hondas\\n123 Some here have complained of poor gas mileage, but I've had mine almost two weeks, driven 300 miles so far in mostly city driving, and have a bit more than a quarter of a tank left .\\n124 5L V6 scoots sporty handling and acceleration good sporty leather seats highway gas mileage appearance package worth having no dealer service yet Negatives :\\n125 Tough negotiations w 6 Wash DC dealers city gas mileage road noise no keyless memory link w driver profiles steering wheel quality and size console storage tray outside mirrors don ?\\n126 VCM works out nice for better mileage .\\n127 hard seats, hard ride, more road noise than expected, disappointing gas mileage .\\n128 And great gas mileage averaging 28 .\\n129 Very disappointed in mileage .\\n130 Nowhere near the mileage the sticker shows .\\n131 I love the appearance of the car from the outside, and it has a much bigger feel to it, ride is a little stiff but smooth, engine is very responsive, however gas mileage is diappointing getting 5 mpg less then 06 Accord .\\n132 My only really complaint is the gas mileage is not as good as advertised .\\n133 Mileage is decent around 24, 27 .\\n134 Traded in my Oddysey for better gas mileage and more comfort .\\n135 So far not super impressed with gas mileage, and comfort, well lets just say my dealership just ordered a new seat cushion for me today .\\n136 Gas mileage will surely improve, hopefully .\\n137 The trade, off is a bit lower mileage but still better than most out there .\\n138 Having had to give up my 99 Accord due to very high mileage 170K\\n139 My my, I have never experienced such smooth performance, stability, pick, up, mileage and comfort that I am enjoying with my new 2008 Honda Accord .\\n140 Mileage so far is the big disappointment, low 20's, old Accord was never below 27mpg .\\n141 Telling me how good the gas mileage is not true .\\n142 5 in nob the display under the speedometer could be more helpful telling me how many miles gallon I have, telling me how my speed affects my gas mileage .\\n143 Gas mileage is great for a vehicle with this type of performance .\\n144 The car has ample power, but the gas mileage has been disappointing .\\n145 The car is as big and roomy inside as my old Acura Rl, handles better and gets better gas mileage .\\n146 It's fun to drive, and gets great gas mileage .\\n147 The best gas mileage I have achieved for this 4 cyl .\\n148 Handles great, good mileage, and wonderful ride .\\n149 The Accord was quiet, was easy to drive, seemed to be the right size, and would provide decent mileage .\\n150 It was the combination I was looking for, great look, good value, decent gas mileage, and Honda's resale value .\\n151 The windshield wash barely hits the windshield but I am mostly disappointed in the gas mileage .\\n152 I do not know what these people are talking about saying it gets bad gas mileage !\\n153 Car rides great, good fuel mileage .\\n154 Gas mileage is not as advertised , 25 mpg at most .\\n155 Gas mileage is OK, averaging about 23, 24 city , 31 highway normal driving, I don't drive fast, but I don't drive slow either .\\n156 Fuel mileage is disappointing 15 18 city 22 26 hwy .\\n157 Gas mileage not quite as good as advertised .\\n158 Gas mileage is above average .\\n159 Great power, great ride, and pretty good fuel mileage .\\n160 Gas mileage is at it's highest 24 mpg usually 22 mpg hwy .\\n161 The VCM definitely helps the mileage , it was very noticeable when it activated in the beginning, but is barely detectable now, except for the dash indicator .\\n162 Little 4cyl 5 spd LX and it got awesome gas mileage .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "code", + "source": [ + "document_df[document_df['cluster_label']==4].sort_values(by='filename')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 714 + }, + "id": "AFz2x2L5CatF", + "outputId": "c81867ad-d60e-43e3-af13-9f71959eb3a1" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "21 filename_list \n", + "22 filename_list \n", + "24 filename_list \n", + "25 filename_list \n", + "30 filename_list \n", + "36 filename_list \n", + "42 filename_list \n", + "46 filename_list \n", + "48 filename_list \n", + "\n", + " opinion_text \\\n", + "21 The room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ... \n", + "22 Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo... \n", + "24 The food for our event was delicious .\\n0 ... \n", + "25 not customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv... \n", + "30 All in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ... \n", + "36 Mediocre room and service for a very extravagant price .\\n0 ... \n", + "42 Good Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ... \n", + "46 The wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ... \n", + "48 Both of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ... \n", + "\n", + " cluster_label \n", + "21 4 \n", + "22 4 \n", + "24 4 \n", + "25 4 \n", + "30 4 \n", + "36 4 \n", + "42 4 \n", + "46 4 \n", + "48 4 " + ], + "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", + "
filenameopinion_textcluster_label
21filename_listThe room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ...4
22filename_listGreat location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo...4
24filename_listThe food for our event was delicious .\\n0 ...4
25filename_listnot customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv...4
30filename_listAll in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ...4
36filename_listMediocre room and service for a very extravagant price .\\n0 ...4
42filename_listGood Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ...4
46filename_listThe wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ...4
48filename_listBoth of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ...4
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df[document_df['cluster_label']==4]\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \" The wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 The service was good, very friendly staff and we loved the free wine reception each night .\\n2 has free wireless and help you with transportation needs .\\n3 The nightly free wine tasting from 5 , 6 pm is a brilliant idea and gets guests together to socialise witheach other .\\n4 They have a happy hour where you have a couple offree drinks between 5 and 6 and this gives you a chance to meet other travellers .\\n5 free wifi and happy hour wine every afternoon !\\n6 The parking was free, which was great, and the hotel was conveniently located for public transport, and local attractions .\\n7 We were also told of the free wine reception at 5pm, great idea as it meant you could chat to your fellow guests .\\n8 Free internet access and Happy Hour every afternoon .\\n9 As said before, the free wine reception in the evening is Two Buck Chuck, drinkable, but certainly not anything to write home about .\\n10 The free wine tasting every night was a wonderful extra and welcomed relaxment in between a long day of sightseeing and evenings out .\\n11 That and also the free coffee and tea every morning were little extras that we felt made you feel like a welcomed guest and that they are going out of their way to make the hotel special .\\n12 Free internet in the lobby but none of any sort in the rooms .\\n13 The hotel lobby was lovely, real fire, large comfy chairs and free internet access in the corner .\\n14 There is a concierge, also free wine and appetizers in the afternoon .\\n15 00 for an adult with free entrance for shildren , , we were both fascinated for nearly two hours and it was not crowded .\\n16 We went down for the free wine reception, and had a great time .\\n17 The hotel has one computer available with free internet .\\n18 And free wifi throughout the hotel which worked flawlessly .\\n19 The room also has free wireless which I've read other hotels nearby don't .\\n20 Free Wifi in your room, and the free wine reception in the evenings was great .\\n21 The free happy hour really made the visit extra special , we met so many wonderful people during our 7 day stay this way .\\n22 I personally appreciated the free internet service in the hotel .\\n23 Free internet and a computer for use in the lobby was helpful .\\n24 The manager's cocktail hour was a nice touch, and the free coffee in the morning was also nice though I had to ask both mornings for hot chocolate to be brought out for the kids, and the advertised biscotti was no where to be found .\\n25 I didn't get to take advantage of the free coffee in the morning, but my husband and I did go to the 5pm, 6pm cocktail hour, which we enjoyed .\\n26 Coffee and biscotti were available in reception every morning free of charge or if you preferred, there was a restaurant in the hotel that served breakfast or a Starbucks round the corner .\\n27 This hotel offers a lot , a great location, great staff, free wine tastings and morning coffee .\\n28 I booked a standard king room and was up graded to a premier king free of charge upon our arrival .\\n29 This is a hassle, free place to stay with a dog .\\n30 The hotel had free coffee and drinks everyday and free access to wireless internet .\\n31 Free coffee and biscotti in the morning helped get the GF out of bed .\\n32 00 found most other places closing so it was Hobsons choiceThe best part of the stay were the free wine and eats in the lounge arond 17 :\\n33 The free wine and nibbles served between 5pm and 6pm were a lovely touch .\\n34 We did however take advantage of the free coffee and biscotti that was offered every morning in the lobby .\\n35 No bar as such in the hotel but they have free wine tasting every day at 5p .\\n36 The free wine beer and coffee hot chocolate biscotti is a wonderful touch and we took full advantage of it .\\n37 The late afternoon free wine reception was a really nice touch and we enjoyed this very much .\\n38 Although we didn't use it, there was free Internet access in the room .\\n39 l also enjoyed the morning coffee in the lobby and the free wine .\\n40 The lobby area was really pleasant and the free wine gets you talking to other guests .\\n41 The free morning hot cocoa and coffee was nice before our daily excursions .\\n42 The afternoon wine and cheese was a nice bonus as was the free Internet .\\n43 We were surprised and delighted when, on arrival, we were given tokens for free continental breakasts .\\n44 The reception area is compact and during the free evening wine sampling gets quite busy .\\n45 The free morning coffee is also well appreciated and attended .\\n46 The free drinks are great if you and like the feeling of getting something for nothing .\\n47 The free coffee and biscotti in the morning kept us going until breakfast .\\n48 Evening wine hour from 5, 6 was also good , free wine and nibbles and a chance to talk to other guests about places to visit , eat etc .\\n49 Very clean, get a glass of wine free between 5 6pm in the lobby .\\n50 Free high speed wireless Internet access, which in San Francisco most always has a charge .\\n51 With this hotel we received a free 1 hour tour cruise around Alcatraz and down to the Golden Gate Bridge .\\n52 You also get 2 free transportation passes each day of your stay that we used for the trolley systems .\\n53 And remember the MUNI passes were free !\\n54 The free drinks held every evening are welcoming after a long day out .\\n55 It was freezing cold in the room and I don't think it warmed up even with the heat on until the next day .\\n56 If you have any other questions please feel free to msg me and I will do my best to answer your questions .\\n57 The wine tasting in the afternoon made available from the manager was a really nice touch as was the free tea and coffee in the lobby in the morning which got you off to a great start for the day .\\n58 The hotel has free wireless .\\n59 At 5 o'clock every evening in the hotel lobby there is a free wine reception for an hour .\\n60 Nothing disappointed us about our stay and we didn\\u0092t even take advantage of the free wine tasting between 5, 6pm .\\n61 We did however make use of the free tea and coffee when we had an early start .\\n62 Earily evening free wine tasting .\\n63 In the morning free great coffee and biscotti in the lobby, with carry, out cups .\\n64 Another great thing about the hotel is that every day, they offer wine and beer from 5, 6pm for free for all hotel guests .\\n65 Then we picked up the free lobby coffee and the WSJ and the USA Today newspapers, thus having a cheap breakfast .\\n66 We particularly enjoyed the nightly 'manager's reception' when wine and nibbles are freely available !\\n67 The nightly free wine reception is a great way to meet people and find out what is worth seeing and what is not .\\n68 Free Wireless internet access .\\n69 Speaking of parking, you're going to have to pay and it's going to have to be valet service, as there are no free self park lots that are part of the hotel .\\n70 The staff were friendly and the free coffee and biscoti each morning and wine at 6pm each evening were occassions when one could meet other guests .\\n71 The hotel provides free hot drinks and biscotti in the mornings, which was good quality but why ?\\n72 Free wine and mingle from 5 to 6pm .\\n73 It really does save if you can get a deal with free parking, but the fee is not out of line .\\n74 There was a free wine tasting that the hotel put on that we were, unfortunately, too jet, lagged to participate in .\\n75 Every evening 5pm to 6pm, guests are invited to have free wine in the reception area and there is free coffee there every morning .\\n76 The hotel's evening wine hour and morning's biscotti hour also distinguish the property as a cut above, and our group, which has stayed at many a biz hotel, had no problem whatsoever in fact, a courtesy upgrade got us a fine meeting space with free internet, which even impressed our boss .\\n77 The great thing for us was the free parking .\\n78 We stayed at the BW Tuscan Inn only because they were offering a great winter deal , $99 for a room with king, size bed and free parking .\\n79 Overall, we would recommend this place to friends, especially if they are able to get a good discount and free parking .\\n80 Oh,yes, free coffee and biscotti for breakfast, and wine in the afternoon !\\n81 There's free coffee, teas at breakfast time with little biscotti and, best of all, from 5 til 6pm you get a free wine 'tasting' reception which, as long as you don't take the p\\n82 No free internet here though .\\n83 but it's great to get a couple of free drinks .\\n84 Excellent free wine reception in evening .\\n85 And free NEw York Times to go with it .\\n86 00 free wine and beer very popular and nice if you happen to catch it before you go out to dinner .\\n87 Being the lushes that we are, my wife and I took full advantage of the free happy hour, arriving promptly at five, and not leaving until six .\\n88 Stayed for two nights and really enjoyed the free wine in the evenings and biscotti and coffee and or wide range of teas in the morning .\\n89 Refrigerator, minibar, free wifi, iron board, hairdryer, down comforters and pillow top beds .\\n90 The lobby has a wine tasting for free between 5, 6pm each night and you meet dozens of really nice people from all over the world .\\n91 and the free coffee tea and beer wine daily was very nice and allowed for a cozy feeling among the quests .\\n92 The hotel offers free wifi to all guests who have a laptop .\\n93 Free coffee in the morning, free beer and wine in the afternoon, what more could you ask for ?\\n94 Free coffee in the lobby in the mornings is nice .\\n95 The free wine in the lounge each evening was very nice, and given with good grace , even the fourth glass !\\n96 Coffee and hot chocolate were also available free from 6am each morning, although there was also a coffee maker in the room .\\n97 The only criticism I have is that there was no safe in the room, although safety deposit boxes were available free of charge in reception .\\n98 The rest of the immediate neighborhood seemed safe and nondescript, and largely free of the homeless and the street people that are in evidence elsewhere in this costly city .\\n99 A complete disappointment , from losing the reservation made through Best Western toll, free number to charging our credit card for someone elses stay 3 WEEKS AFTER WE LEFT !\\n100 Dont let the " free" wine and biscotti fool you .\\n101 The free beer, wine etc and snacks on an afternoon was a lovely touch and helped you swap tips and chat to other guests .\\n102 The coffee and biscotti offered in the morning is a good way to start the day, and the free wine hour from 5 to 6 is very pleasant, although we were so busy we only attended twice .\\n103 Great free " coffee and" in the morning and a very pleasant afternoon complimentary wine .\\n104 I had read a prior review complaning about the fact the hotel had run out of the " free" morning biscotti's as promised to quests .\\n105 We also always look for free wifi .\\n106 Internet access was not free .\\n107 Free wireless internet in the room , fantastic !\\n108 Best feature was the freebie drinks in reception from 5, 6pm .\\n109 Free internet use in the reception area was a great touch .\\n110 Guests actually talk to one another during morning coffee, and the free hour of wine at 5 pm .\\n111 In the lobby they have free coffee, tea and biscotti everyday and have wine and snacks from 5 p to 6 p daily .\\n112 The concierge even gave us a pair of City Passes someone had turned in with four more days still on them, so we rode everywhere for free .\\n113 The afternoon wine beer was a great idea, as was the free morning tea cofee .\\n114 The use of the foyer for free drinks between 5, 6pm was popular especially with fellow Brits !\\n115 Free coffee and biscotti in the morning is a nice touch but we never made it back in time for free beer and wine from 5, 6pm .\\n116 The free morning coffee and evening wine reception were both good opportunities to meet other guests .\\n117 Morning coffee and biscotti was a nice touch as well as the all you can drink free wine hour in the evening .\\n118 Parking was $26 day , free valet with on and off priv .\\n119 The hotel was of a good standard, big clean rooms, decent bathroom and the free wine reception in the evening was an added bonus .\\n120 The staff are friendly and there is one computer for internet access as well as free coffee and biscuits in the afternoon .\\n121 During that time there is a very nice and knowledgable gentlemen who offers free chair massages .\\n122 It's location is fantastic if you want to get to the Ballpark, to the cable car, on and off the freeway, to the wharf, etc .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 1,\n \"samples\": [\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "# 3개의 집합으로 군집화\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "\n", + "\n", + "# 소속 클러스터를 cluster_label 컬럼으로 할당하고 cluster_label 값으로 정렬\n", + "document_df['cluster_label'] = cluster_label\n", + "document_df.sort_values(by='cluster_label')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "gmKLQttcCcCc", + "outputId": "b3f66527-526f-41d4-c3d5-cf90bd0d6735" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " filename \\\n", + "24 filename_list \n", + "25 filename_list \n", + "27 filename_list \n", + "28 filename_list \n", + "21 filename_list \n", + "22 filename_list \n", + "29 filename_list \n", + "30 filename_list \n", + "18 filename_list \n", + "19 filename_list \n", + "42 filename_list \n", + "39 filename_list \n", + "36 filename_list \n", + "37 filename_list \n", + "38 filename_list \n", + "34 filename_list \n", + "40 filename_list \n", + "48 filename_list \n", + "50 filename_list \n", + "49 filename_list \n", + "43 filename_list \n", + "47 filename_list \n", + "46 filename_list \n", + "45 filename_list \n", + "41 filename_list \n", + "11 filename_list \n", + "0 filename_list \n", + "6 filename_list \n", + "12 filename_list \n", + "13 filename_list \n", + "5 filename_list \n", + "4 filename_list \n", + "16 filename_list \n", + "31 filename_list \n", + "10 filename_list \n", + "35 filename_list \n", + "26 filename_list \n", + "17 filename_list \n", + "20 filename_list \n", + "23 filename_list \n", + "7 filename_list \n", + "1 filename_list \n", + "2 filename_list \n", + "3 filename_list \n", + "8 filename_list \n", + "9 filename_list \n", + "14 filename_list \n", + "15 filename_list \n", + "44 filename_list \n", + "33 filename_list \n", + "32 filename_list \n", + "\n", + " opinion_text \\\n", + "24 The food for our event was delicious .\\n0 ... \n", + "25 not customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv... \n", + "27 The Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ... \n", + "28 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ... \n", + "21 The room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ... \n", + "22 Great location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo... \n", + "29 We arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u... \n", + "30 All in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ... \n", + "18 The staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ... \n", + "19 Ride seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ... \n", + "42 Good Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ... \n", + "39 Great Location , Nice Rooms , H... \n", + "36 Mediocre room and service for a very extravagant price .\\n0 ... \n", + "37 Drivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ... \n", + "38 I previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua... \n", + "34 First of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh... \n", + "40 Parking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ... \n", + "48 Both of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ... \n", + "50 Front seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ... \n", + "49 It's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ... \n", + "43 Staff are friendl... \n", + "47 Very happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ... \n", + "46 The wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ... \n", + "45 I love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ... \n", + "41 The room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ... \n", + "11 headphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ... \n", + "0 short battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ... \n", + "6 Windows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ... \n", + "12 6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now... \n", + "13 Keep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi... \n", + "5 A few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k... \n", + "4 , I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t... \n", + "16 It's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ... \n", + "31 The Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One... \n", + "10 I bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ... \n", + "35 After I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ... \n", + "26 Being able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ... \n", + "17 Another thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe... \n", + "20 It feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa... \n", + "23 I thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ... \n", + "7 I had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ... \n", + "1 The voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ... \n", + "2 3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ... \n", + "3 , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi... \n", + "8 Another feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ... \n", + "9 As always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ... \n", + "14 It is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ... \n", + "15 You also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no... \n", + "44 After slowing down, transmission has to be kicked to speed up .\\n0 ... \n", + "33 In fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ... \n", + "32 If a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ... \n", + "\n", + " cluster_label \n", + "24 0 \n", + "25 0 \n", + "27 0 \n", + "28 0 \n", + "21 0 \n", + "22 0 \n", + "29 0 \n", + "30 0 \n", + "18 0 \n", + "19 0 \n", + "42 0 \n", + "39 0 \n", + "36 0 \n", + "37 0 \n", + "38 0 \n", + "34 0 \n", + "40 0 \n", + "48 0 \n", + "50 0 \n", + "49 0 \n", + "43 0 \n", + "47 0 \n", + "46 0 \n", + "45 0 \n", + "41 0 \n", + "11 1 \n", + "0 1 \n", + "6 1 \n", + "12 1 \n", + "13 1 \n", + "5 1 \n", + "4 1 \n", + "16 1 \n", + "31 1 \n", + "10 1 \n", + "35 1 \n", + "26 2 \n", + "17 2 \n", + "20 2 \n", + "23 2 \n", + "7 2 \n", + "1 2 \n", + "2 2 \n", + "3 2 \n", + "8 2 \n", + "9 2 \n", + "14 2 \n", + "15 2 \n", + "44 2 \n", + "33 2 \n", + "32 2 " + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenameopinion_textcluster_label
24filename_listThe food for our event was delicious .\\n0 ...0
25filename_listnot customer, oriented hotelvery low service levelboor reception\\n0 The room was quiet, clean, the bed and pillows were comfortable, and the serv...0
27filename_listThe Swissotel is one of our favorite hotels in Chicago and the corner rooms have the most fantastic views in the city .\\n0 The rooms look like they were just remodled and upgraded, there was an HD TV and a nice iHome docking station to put my iPod so I could set the alarm to wake up with my music instead of the radio .\\n1 ...0
28filename_listRide seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 ...0
21filename_listThe room was packed to capacity with queues at the food buffets .\\n0 The over zealous staff cleared our unfinished drinks while we were collecting cooked food and movement around the room with plates was difficult in the crowded circumstances .\\n1 ...0
22filename_listGreat location for tube and we crammed in a fair amount of sightseeing in a short time .\\n0 All in all, a normal chain hotel on a nice lo...0
29filename_listWe arrived at 23,30 hours and they could not recommend a restaurant so we decided to go to Tesco, with very limited choices but when you are hingry you do not careNext day they rang the bell at 8,00 hours to clean the room, not being very nice being waken up so earlyEvery day they gave u...0
30filename_listAll in all, a normal chain hotel on a nice location , I will be back if I do not find anthing closer to Picadilly for a better price .\\n0 ...0
18filename_listThe staff at Swissotel were not particularly nice .\\n0 Each time I waited at the counter for staff for several minutes and then was waved to the desk upon my turn with no hello or anything, or apology for waiting in line .\\n1 ...0
19filename_listRide seems comfortable and gas mileage fairly good averaging 26 city and 30 open road .\\n0 Seats are fine, in fact of all the smaller sedans this is the most comfortable I found for the price as I am 6', 2 and 250# .\\n1 Great gas mileage and comfortable on long trips ...0
42filename_listGood Value good location , ideal choice .\\n0 Great Location , Nice Rooms , Helpless Concierge\\n1 ...0
39filename_listGreat Location , Nice Rooms , H...0
36filename_listMediocre room and service for a very extravagant price .\\n0 ...0
37filename_listDrivers seat not comfortable, the car itself compared to other models of similar class .\\n0 ...0
38filename_listI previously owned a Toyota 4Runner which had incredible build quality and reliability .\\n0 I bought the Camry because of Toyota reliability and qua...0
34filename_listFirst of all, the interior has way too many cheap plastic parts like the cheap plastic center piece that houses the clock .\\n0 3 blown struts at 30,000 miles, interior trim coming loose and rattling squeaking, stains on paint, and bug splats taking paint off, premature uneven brake wear, on 3rd windsh...0
40filename_listParking was expensive but I think this is common for San Fran .\\n0 there is a fee for parking but well worth it seeing no where to park if you do have a car .\\n1 ...0
48filename_listBoth of us having worked in tourism for over 14 years were very disappointed at the level of service provided by this gentleman .\\n0 The service was good, very friendly staff and we loved the free wine reception each night .\\n1 ...0
50filename_listFront seats are very uncomfortable .\\n0 No memory seats, no trip computer, can only display outside temp with trip odometer .\\n1 ...0
49filename_listIt's quiet, get good gas mileage and looks clean inside and out .\\n0 The mileage is great, and I've had to get used to stopping less for gas .\\n1 Thought gas ...0
43filename_listStaff are friendl...0
47filename_listVery happy with my 08 Accord, performance is quite adequate it has nice looks and is a great long, distance cruiser .\\n0 6, 4, 3 eco engine has poor performance and gas mileage of 22 highway .\\n1 Overall performance is good but comfort level is poor .\\n2 ...0
46filename_listThe wine reception is a great idea as it is nice to meet other travellers and great having access to the free Internet access in our room .\\n0 They also have a computer available with free internet which is a nice bonus but I didn't find that out till the day before we left but was still able to get on there to check our flight to Vegas the next day .\\n1 ...0
45filename_listI love the new body style and the interior is a simple pleasure except for the center dash .\\n0 ...0
41filename_listThe room was not overly big, but clean and very comfortable beds, a great shower and very clean bathrooms .\\n0 The second room was smaller, with a very inconvenient bathroom layout, but at least it was quieter and we were able to sleep .\\n1 ...0
11filename_listheadphone jack i got a clear case for it and it i got a clear case for it and it like prvents me from being able to put the jack all the way in so the sound can b messsed up or i can get it in there and its playing well them go to move or something and it slides out .\\n0 Picture and sound quality are excellent for this typ of devic .\\n1 ...1
0filename_listshort battery life I moved up from an 8gb .\\n0 I love this ipod except for the battery life .\\n1 ...1
6filename_listWindows 7 is quite simply faster, more stable, boots faster, goes to sleep faster, comes back from sleep faster, manages your files better and on top of that it's beautiful to look at and easy to use .\\n0 , faster about 20% to 30% faster at running applications than my Vista , seriously\\n1 ...1
12filename_list6GHz 533FSB cpu, glossy display, 3, Cell 23Wh Li, ion Battery , and a 1 .\\n0 Not to mention that as of now...1
13filename_listKeep in mind that once you get in a room full of light or step outdoors screen reflections could become annoying .\\n0 I've used mine outsi...1
5filename_listA few other things I'd like to point out is that you must push the micro, sized right angle end of the ac adapter until it snaps in place or the battery may not charge .\\n0 The full size right shift k...1
4filename_list, I think the new keyboard rivals the great hp mini keyboards .\\n0 Since the battery life difference is minimum, the only reason to upgrade would be to get the better keyboard .\\n1 The keyboard is now as good as t...1
16filename_listIt's fast to acquire satellites .\\n0 If you've ever had a Brand X GPS take you on some strange route that adds 20 minutes to your trip, has you turn the wrong way down a one way road, tell you to turn AFTER you've passed the street, frequently loses the satellite signal, or has old maps missing streets, you know how important this stuff is .\\n1 ...1
31filename_listThe Eee Super Hybrid Engine utility lets users overclock or underclock their Eee PC's to boost performance or provide better battery life depending on their immediate requirements .\\n0 In Super Performance mode CPU, Z shows the bus speed to increase up to 169 .\\n1 One...1
10filename_listI bought the 8, gig Ipod Nano that has the built, in video camera .\\n0 Itunes has an on, line store, where you may purchase and download music and videos which will install onto the ipod .\\n1 ...1
35filename_listAfter I plugged it in to my USB hub on my computer to charge the battery the charging cord design is very clever !\\n0 After you have paged tru a 500, page book one, page, at, a, time to get from Chapter 2 to Chapter 15, see how excited you are about a low battery and all the time it took to get there !\\n1 ...1
26filename_listBeing able to change the font sizes is awesome !\\n0 For whatever reason, Amazon decided to make the Font on the Home Screen ...2
17filename_listAnother thing to consider was that I paid $50 less for the 750 and it came with the FM transmitter cable and a USB cord to connect it to your computer for updates and downloads .\\n0 update and reroute much _more_ quickly than my other GPS .\\n1 UPDATE ON THIS , It finally turned out that to see the elevation contours at lowe...2
20filename_listIt feels as easy to read as the K1 but doesn't seem any crisper to my eyes .\\n0 the white is really GREY, and to avoid considerable eye, strain I had to refresh pages every other page .\\n1 The dream has always been a portable electronic device that could hold a ton of reading material, automate subscriptions and fa...2
23filename_listI thought it would be fitting to christen my Kindle with the Stephen King novella UR, so went to the Amazon site on my computer and clicked on the button to buy it .\\n0 As soon as I'd clicked the button to confirm my order it appeared on my Kindle almost immediately !\\n1 ...2
7filename_listI had to uninstall anti, virus and selected other programs, some of which did not have listings in the Programs and Features Control Panel section .\\n0 This review briefly touches upon some of the key features and enhancements of Microsoft's latest OS .\\n1 ...2
1filename_listThe voice prompts and maps are wonderful especially when driving after dark .\\n0 I also thought the the voice prompts of the 750 where more pleasant sounding than the 255w's .\\n1 ...2
2filename_list3 quot widescreen display was a bonus .\\n0 This made for smoother graphics on the 255w of the vehicle moving along displayed roads, where the 750's display was more of a jerky movement .\\n1 ...2
3filename_list, and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This functi...2
8filename_listAnother feature on the 255w is a display of the posted speed limit on the road which you are currently on right above your current displayed speed .\\n0 I found myself not even looking at my car speedometer as I could easily see my current speed and the speed limit of my route at a glance .\\n1 ...2
9filename_listAs always, the video screen is sharp and bright .\\n0 2, inch screen and a glossy, polished aluminum finish that one CNET editor described as looking like a Christmas tree ornament .\\n1 ...2
14filename_listIt is easy to read and when touching the screen it works great !\\n0 and zoom out buttons on the 255w to the same side of the screen which makes it a bit easier .\\n1 ...2
15filename_listYou also get upscale features like spoken directions including street names and programmable POIs .\\n0 I used to hesitate to go out of my directions but no...2
44filename_listAfter slowing down, transmission has to be kicked to speed up .\\n0 ...2
33filename_listIn fact, the entire navigation structure has been completely revised , I'm still getting used to it but it's a huge step forward .\\n0 ...2
32filename_listIf a case was included, as with the Kindle 1, that would have been reflected in a higher price .\\n0 lower overall price, with nice leather cover .\\n1 ...2
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"document_df\",\n \"rows\": 51,\n \"fields\": [\n {\n \"column\": \"filename\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"filename_list\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"opinion_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 51,\n \"samples\": [\n \" , and is very, very accurate .\\n0 but for the most part, we find that the Garmin software provides accurate directions, whereever we intend to go .\\n1 This function is not accurate if you don't leave it in battery mode say, when you stop at the Cracker Barrell for lunch and to play one of those trangle games with the tees .\\n2 It provides immediate alternatives if the route from the online map program was inaccurate or blocked by an obstacle .\\n3 I've used other GPS units, as well as GPS built into cars and to this day NOTHING beats the accuracy of a Garmin GPS .\\n4 It got me from point A to point B with 100% accuracy everytime .\\n5 It has yet to disappoint, getting me everywhere with 100% accuracy .\\n6 0 out of 5 stars Honest, accurate review, , PLEASE READ !\\n7 Aside from that, every destination I've thrown at has been 100% accurate .\\n8 In closing, this is a fantastic GPS with some very nice features and is very accurate in directions .\\n9 Plus, I've always heard that there are quirks with any GPS being accurate, having POIs, etc .\\n10 DESTINATION TIME, , This is pretty accurate too .\\n11 But, it's always very accurate .\\n12 The map is pretty accurate and the Point of interest database also is good .\\n13 Most of the times, this info was very accurate .\\n14 I've even used it in the pedestrian mode, and it's amazing how accurate it is .\\n15 ONLY is only accurate when an ad says, Top sirloin steak, ONLY $1 .\\n16 The most accurate review stated that these machines are adjunct to a good map and signs on the interstate .\\n17 The directions are highly accurate down to a T .\\n18 Depending on what you are using it for, it is a nice adjunct to a travel trip and the directions are accurate and usually the quickest, but not always .\\n19 The screen is easy to see, the voice tells you where you are and it's very accurate .\\n20 It was accurate to the minute when it told me when I would arrive home .\\n21 0 out of 5 stars GPS Navigator doesn't navigate accurately on a straight road .\\n22 I was familiar with the streets and only used the Nuvi to get an accurate arrival time estimate .\\n23 but after that it is very easy and quite accurate to use .\\n24 The accuracy at this point is very good .\\n25 While the 255W routing seems generally accurate and logical, on my first use I discovered that it does have some errors in its internal map .\\n26 Bottom line is I wanted a unit that is accurate and had reliable satellite connection .\\n27 I've used it around town and find it to be extremely accurate .\\n28 I found the maps to be inaccurate at first, but after I updated them from Garmin's website everything is golden .\\n29 A lot of my friends' addresses are inaccurate by any GPS .\\n30 It loads quickly, have pretty accurate directions, and can recalculate quickly when I miss a turn .\\n31 Because the accuracy is good to the street address level, it may not be able to guide you to the exact location if your destination is inside a shopping mall .\\n32 I updated to the latest 2010 map soon after I received the unit, so the map is accurate to me .\\n33 I was blown away at the accuracy and routing capability this thing had .\\n34 I used it the day I bought it, and then this morning, and as soon as it comes on it is ready to navigate The only downfall of this product, and the only reason I did not give it 5 stars is the fact that the speed limit it displays for the road you are on isn't 100% accurate .\\n35 If your looking for a nice, accurate GPS for not so much money, got with this one .\\n36 0 out of 5 stars Inexpensive, accurate, plenty of features, August 6, 2009\\n37 The only glitch I have found so far is that the speed limits are not 100% accurate, although the GPS, amazingly, is able to very accurately tell you how fast your vehicle is moving .\\n38 I was a little disappointed in the inaccuracy of the posted speed limit, as I'm guilty of not paying close enough attention to those signs, especially w interstate speed traps that are constantly changing up and down .\\n39 The closest one that gives the most accurate route that I usually take is the Navigon .\\n40 After 2 weeks, it has yet to make a mistake, and is always completely accurate , even to the point of telling me which side of the street my destination is on .\\n41 It has worked well for local driving giving accurate directions for roads and streets .\\n42 The estimated time to arrival does not seem to calculate the travelling time accurately .\\n43 Accuracy is as good as any other unit, they all sometimes tell you you have arrived when you haven't, or continue to tell you to turn when you're already there .\\n44 Accuracy is determined by the maps .\\n45 Less traveled rural roads will not be accurate on any unit .\\n46 Accuracy is within a few yards .\\n47 What the 255w does best is find a street address, business, point of interest, hospital or airport and give you turn, by, turn directions with amazing accuracy .\\n48 The Garmin is loaded with very accurate maps that generally know the roads in even the remotest areas .\\n49 I'm really glad I bought it though, and like the easy to read graphics, the voice used to tell you the name of the street you are to turn on, the uncannily accurate estimates of mileage and time of arrival at your destination .\\n50 My new Garmin 255w had very Easy Set Up, Accurate Directions to locations, User Friendly Unit to anyone in my vehicle who tried it .\\n51 I had a GPS 10, years ago when I owned a boat that was difficult to use and with very poor accuracy so I had assumed that the road GPS wasn't any better .\\n52 Practiced visiting places I already knew to see how accurate the directions and maps would be .\\n53 Easy to use, excellent accuracy, nice and intuitive interface .\\n54 The directions provided have all been quite accurate thus far .\\n55 , Very Accurate but with one small glitch I found , I'll explain in the CONS\\n56 This is a great GPS, it is so easy to use and it is always accurate .\\n57 Very easy to operate and pretty accurate as well, only led me astray once and that was in northern Maine where roads are few and paved ones fewer .\\n58 Easy to use and amazed at how accurate this item is .\\n59 To date it's been a very easy to use and accurate .\\n60 Mounted really easily and has been very accurate .\\n61 seems to be rather accurate .\\n62 It was accurate on determing original directions and recalculating when necessary .\\n63 Highly accurate, POIs are great .\\n64 I can't believe how accurate and detailed the information estimated time of arrival,speed limits along the way,and detailed map of my route, to name a few .\\n65 Speed of calculation, accuracy, and simplicity of operation are top notch .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cluster_label\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 3,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "cluster_centers=km_cluster.cluster_centers_\n", + "print('cluster_centers shape:',cluster_centers.shape)\n", + "print(cluster_centers)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-ycBd07WC0n5", + "outputId": "c996dd09-a9f0-40f2-eca8-1f733061afe3" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "cluster_centers shape: (3, 4610)\n", + "[[0. 0.00100732 0.0011178 ... 0. 0.00117374 0.00092532]\n", + " [0.01151528 0. 0. ... 0.00361158 0. 0. ]\n", + " [0.00831295 0. 0. ... 0.00912297 0. 0. ]]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 군집별 top n 핵심 단어, 그 단어의 중심 위치 상댓값, 대상 파일명을 반환함\n", + "def get_cluster_details(cluster_model,cluster_data,feature_names,clusters_num,top_n_features=10):\n", + " cluster_details = {}\n", + "\n", + " # cluster_centers array 의 값이 큰 순으로 정렬된 index 값을 반환\n", + " # 군집 중심점(centroid)별 할당된 word 피처들의 거리값이 큰 순으로 값을 구하기 위함.\n", + " centroid_feature_ordered_ind = cluster_model.cluster_centers_.argsort()[:,::-1]\n", + "\n", + " #개별 군집별로 iteration하면서 핵심단어, 그 단어의 중심 위치 상대값, 대상 파일명 입력\n", + " for cluster_num in range(clusters_num):\n", + " # 개별 군집별 정보를 담을 데이터 초기화.\n", + " cluster_details[cluster_num] = {}\n", + " cluster_details[cluster_num]['cluster'] = cluster_num\n", + "\n", + " # cluster_centers_.argsort()[:,::-1] 로 구한 index 를 이용하여 top n 피처 단어를 구함.\n", + " top_feature_indexes = centroid_feature_ordered_ind[cluster_num, :top_n_features]\n", + " top_features = [ feature_names[ind] for ind in top_feature_indexes ]\n", + "\n", + " # top_feature_indexes를 이용해 해당 피처 단어의 중심 위치 상댓값 구함\n", + " top_feature_values = cluster_model.cluster_centers_[cluster_num, top_feature_indexes].tolist()\n", + "\n", + " # cluster_details 딕셔너리 객체에 개별 군집별 핵심 단어와 중심위치 상대값, 그리고 해당 파일명 입력\n", + " cluster_details[cluster_num]['top_features'] = top_features\n", + " cluster_details[cluster_num]['top_features_value'] = top_feature_values\n", + " filenames = cluster_data[cluster_data['cluster_label'] == cluster_num]['filename']\n", + " filenames = filenames.values.tolist()\n", + " cluster_details[cluster_num]['filenames'] = filenames\n", + "\n", + " return cluster_details" + ], + "metadata": { + "id": "7Is5YT_bDTkc" + }, + "execution_count": 21, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def print_cluster_details(cluster_details):\n", + " for cluster_num, cluster_detail in cluster_details.items():\n", + " print('####### Cluster {0}'.format(cluster_num))\n", + " print('Top features:', cluster_detail['top_features'])\n", + " print('Reviews 파일명 :',cluster_detail['filenames'][:7])\n", + " print('=============================')" + ], + "metadata": { + "id": "NsAyr-YiD39R" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "feature_names = tfidf_vect.get_feature_names_out()\n", + "\n", + "cluster_details = get_cluster_details(cluster_model=km_cluster, cluster_data=document_df,\\\n", + " feature_names=feature_names, clusters_num=3, top_n_features=10 )\n", + "print_cluster_details(cluster_details)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KGjPEvRiD5ij", + "outputId": "f03261e7-308f-45b8-86f7-eda63381796a" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "####### Cluster 0\n", + "Top features: ['room', 'hotel', 'service', 'staff', 'interior', 'food', 'location', 'seat', 'mileage', 'comfortable']\n", + "Reviews 파일명 : ['filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list']\n", + "=============================\n", + "####### Cluster 1\n", + "Top features: ['battery', 'battery life', 'keyboard', 'life', 'screen', 'video', 'performance', 'satellite', 'faster', 'size']\n", + "Reviews 파일명 : ['filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list']\n", + "=============================\n", + "####### Cluster 2\n", + "Top features: ['screen', 'direction', 'voice', 'map', 'kindle', 'button', 'page', 'feature', 'speed', 'font']\n", + "Reviews 파일명 : ['filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list', 'filename_list']\n", + "=============================\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# 8.8" + ], + "metadata": { + "id": "O4EDlNQ_EDEH" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "\n", + "def cos_similarity(v1, v2):\n", + " dot_product = np.dot(v1, v2)\n", + " l2_norm = (np.sqrt(sum(np.square(v1))) * np.sqrt(sum(np.square(v2))))\n", + " similarity = dot_product / l2_norm\n", + "\n", + " return similarity" + ], + "metadata": { + "id": "i4r1MvoZD76c" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "doc_list = ['if you take the blue pill, the story ends' ,\n", + " 'if you take the red pill, you stay in Wonderland',\n", + " 'if you take the red pill, I show you how deep the rabbit hole goes']\n", + "\n", + "tfidf_vect_simple = TfidfVectorizer()\n", + "feature_vect_simple = tfidf_vect_simple.fit_transform(doc_list)\n", + "print(feature_vect_simple.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AcN658t8F2a5", + "outputId": "1f87ea54-3c99-4572-afe4-c05cbd993c11" + }, + "execution_count": 28, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(3, 18)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# TFidfVectorizer로 transform()한 결과는 Sparse Matrix이므로 Dense Matrix로 변환.\n", + "feature_vect_dense = feature_vect_simple.todense()\n", + "\n", + "#첫번째 문장과 두번째 문장의 feature vector 추출\n", + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "\n", + "#첫번째 문장과 두번째 문장의 feature vector로 두개 문장의 Cosine 유사도 추출\n", + "similarity_simple = cos_similarity(vect1, vect2 )\n", + "print('문장 1, 문장 2 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XwoGPQVsF9ro", + "outputId": "ae5434c0-bb76-4aef-e418-7e972a93a883" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "문장 1, 문장 2 Cosine 유사도: 0.402\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "vect1 = np.array(feature_vect_dense[0]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect1, vect3 )\n", + "print('문장 1, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))\n", + "\n", + "vect2 = np.array(feature_vect_dense[1]).reshape(-1,)\n", + "vect3 = np.array(feature_vect_dense[2]).reshape(-1,)\n", + "similarity_simple = cos_similarity(vect2, vect3 )\n", + "print('문장 2, 문장 3 Cosine 유사도: {0:.3f}'.format(similarity_simple))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RvIB-leOGBmN", + "outputId": "a79bc038-06aa-4d2c-fdd5-a5a731317c42" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "문장 1, 문장 3 Cosine 유사도: 0.404\n", + "문장 2, 문장 3 Cosine 유사도: 0.456\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple)\n", + "print(similarity_simple_pair)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_Dc2eUVcGNgM", + "outputId": "b6a52fe0-b704-4a3e-9b3e-d2b14c056eda" + }, + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1. 0.40207758 0.40425045]]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "similarity_simple_pair = cosine_similarity(feature_vect_simple[0] , feature_vect_simple[1:])\n", + "print(similarity_simple_pair)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "E1I59aNEGW2_", + "outputId": "38b9cf26-19db-4b98-be76-820c2899d701" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0.40207758 0.40425045]]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "similarity_simple_pair = cosine_similarity(feature_vect_simple , feature_vect_simple)\n", + "print(similarity_simple_pair)\n", + "print('shape:',similarity_simple_pair.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Rg7aBuDHGcMI", + "outputId": "fda066b7-94e3-4656-ca05-94d4da3aaa61" + }, + "execution_count": 33, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1. 0.40207758 0.40425045]\n", + " [0.40207758 1. 0.45647296]\n", + " [0.40425045 0.45647296 1. ]]\n", + "shape: (3, 3)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from nltk.stem import WordNetLemmatizer\n", + "import nltk\n", + "import string\n", + "\n", + "remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)\n", + "lemmar = WordNetLemmatizer()\n", + "\n", + "# 입력으로 들어온 token단어들에 대해서 lemmatization 어근 변환.\n", + "def LemTokens(tokens):\n", + " return [lemmar.lemmatize(token) for token in tokens]\n", + "\n", + "# TfidfVectorizer 객체 생성 시 tokenizer인자로 해당 함수를 설정하여 lemmatization 적용\n", + "# 입력으로 문장을 받아서 stop words 제거-> 소문자 변환 -> 단어 토큰화 -> lemmatization 어근 변환.\n", + "def LemNormalize(text):\n", + " return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))\n" + ], + "metadata": { + "id": "tXvF2dLTGjgi" + }, + "execution_count": 34, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import glob, os\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.cluster import KMeans\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "path = r'/content/gdrive/MyDrive/EURON/test/topics'\n", + "all_files = glob.glob(os.path.join(path, \"*.data\"))\n", + "filename_list = []\n", + "opinion_text = []\n", + "\n", + "for file_ in all_files:\n", + " df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')\n", + " filename_ = file_.split('\\\\')[-1]\n", + " filename = filename_.split('.')[0]\n", + " filename_list.append(filename)\n", + " opinion_text.append(df.to_string())\n", + "\n", + "document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})\n", + "\n", + "tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english', ngram_range=(1,2), min_df=0.05, max_df=0.85 )\n", + "feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])\n", + "\n", + "km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)\n", + "km_cluster.fit(feature_vect)\n", + "cluster_label = km_cluster.labels_\n", + "cluster_centers = km_cluster.cluster_centers_\n", + "document_df['cluster_label'] = cluster_label" + ], + "metadata": { + "id": "KqYONdKUGnoq" + }, + "execution_count": 37, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "# cluster_label=2인 데이터는 호텔로 클러스터링된 데이터임. DataFrame에서 해당 Index를 추출\n", + "hotel_indexes = document_df[document_df['cluster_label']==2].index\n", + "print('호텔로 클러스터링 된 문서들의 DataFrame Index:', hotel_indexes)\n", + "\n", + "# 호텔로 클러스터링된 데이터 중 첫번째 문서를 추출하여 파일명 표시.\n", + "comparison_docname = document_df.iloc[hotel_indexes[0]]['filename']\n", + "print('##### 비교 기준 문서명 ',comparison_docname,' 와 타 문서 유사도######')\n", + "\n", + "''' document_df에서 추출한 Index 객체를 feature_vect로 입력하여 호텔 클러스터링된 feature_vect 추출\n", + "이를 이용하여 호텔로 클러스터링된 문서 중 첫번째 문서와 다른 문서간의 코사인 유사도 측정.'''\n", + "similarity_pair = cosine_similarity(feature_vect[hotel_indexes[0]] , feature_vect[hotel_indexes])\n", + "print(similarity_pair)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GkFZPBIDGpc-", + "outputId": "0ce6936e-20ce-4f6c-be2e-badcc589a8d9" + }, + "execution_count": 38, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "호텔로 클러스터링 된 문서들의 DataFrame Index: Index([1, 2, 3, 7, 8, 9, 14, 15, 17, 20, 23, 26, 32, 33, 44], dtype='int64')\n", + "##### 비교 기준 문서명 /content/gdrive/MyDrive/EURON/test/topics/voice_garmin_nuvi_255W_gps 와 타 문서 유사도######\n", + "[[1. 0.07586943 0.12148737 0.02967881 0.034098 0.0781002\n", + " 0.27548539 0.28499816 0.1016839 0.0530008 0.02354433 0.0448389\n", + " 0.01645305 0.03707414 0.01113892]]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import seaborn as sns\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "# argsort()를 이용하여 앞예제의 첫번째 문서와 타 문서간 유사도가 큰 순으로 정렬한 인덱스 반환하되 자기 자신은 제외.\n", + "sorted_index = similarity_pair.argsort()[:,::-1]\n", + "sorted_index = sorted_index[:, 1:]\n", + "\n", + "# 유사도가 큰 순으로 hotel_indexes를 추출하여 재 정렬.\n", + "hotel_sorted_indexes = hotel_indexes[sorted_index.reshape(-1)]\n", + "\n", + "# 유사도가 큰 순으로 유사도 값을 재정렬하되 자기 자신은 제외\n", + "hotel_1_sim_value = np.sort(similarity_pair.reshape(-1))[::-1]\n", + "hotel_1_sim_value = hotel_1_sim_value[1:]\n", + "\n", + "# 유사도가 큰 순으로 정렬된 Index와 유사도값을 이용하여 파일명과 유사도값을 Seaborn 막대 그래프로 시각화\n", + "hotel_1_sim_df = pd.DataFrame()\n", + "hotel_1_sim_df['filename'] = document_df.iloc[hotel_sorted_indexes]['filename']\n", + "hotel_1_sim_df['similarity'] = hotel_1_sim_value\n", + "\n", + "fig1 = plt.gcf()\n", + "sns.barplot(x='similarity', y='filename',data=hotel_1_sim_df)\n", + "plt.title(comparison_docname)\n", + "fig1.savefig('p553_hotel.tif', format='tif', dpi=300, bbox_inches='tight')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 492 + }, + "id": "r1khFqpbG5yM", + "outputId": "1b7b89bc-d5d0-473a-8dfb-eae5c97e468c" + }, + "execution_count": 39, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#8.9" + ], + "metadata": { + "id": "i9MIH85QHA2E" + } + }, + { + "cell_type": "code", + "source": [ + "# KoNLPy 설치\n", + "!pip install konlpy\n", + "\n", + "# Java 설치 (KoNLPy는 Java 기반 형태소 분석기 사용)\n", + "!apt-get install -y openjdk-11-jdk\n", + "\n", + "# JAVA_HOME 환경 변수 설정 (세션마다 다시 설정해줘야 함)\n", + "import os\n", + "os.environ[\"JAVA_HOME\"] = \"/usr/lib/jvm/java-11-openjdk-amd64\"" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UlqO1HKvIYg_", + "outputId": "d304ff01-632d-4336-89b7-70efe7ef498a" + }, + "execution_count": 46, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting konlpy\n", + " Downloading konlpy-0.6.0-py2.py3-none-any.whl.metadata (1.9 kB)\n", + "Collecting JPype1>=0.7.0 (from konlpy)\n", + " Downloading jpype1-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n", + "Requirement already satisfied: lxml>=4.1.0 in /usr/local/lib/python3.11/dist-packages (from konlpy) (5.4.0)\n", + "Requirement already satisfied: numpy>=1.6 in /usr/local/lib/python3.11/dist-packages (from konlpy) (2.0.2)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from JPype1>=0.7.0->konlpy) (24.2)\n", + "Downloading konlpy-0.6.0-py2.py3-none-any.whl (19.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m19.4/19.4 MB\u001b[0m \u001b[31m55.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading jpype1-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (494 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m494.1/494.1 kB\u001b[0m \u001b[31m30.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: JPype1, konlpy\n", + "Successfully installed JPype1-1.5.2 konlpy-0.6.0\n", + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "The following additional packages will be installed:\n", + " fonts-dejavu-core fonts-dejavu-extra libatk-wrapper-java\n", + " libatk-wrapper-java-jni libxt-dev libxtst6 libxxf86dga1 openjdk-11-jre\n", + " x11-utils\n", + "Suggested packages:\n", + " libxt-doc openjdk-11-demo openjdk-11-source visualvm mesa-utils\n", + "The following NEW packages will be installed:\n", + " fonts-dejavu-core fonts-dejavu-extra libatk-wrapper-java\n", + " libatk-wrapper-java-jni libxt-dev libxtst6 libxxf86dga1 openjdk-11-jdk\n", + " openjdk-11-jre x11-utils\n", + "0 upgraded, 10 newly installed, 0 to remove and 35 not upgraded.\n", + "Need to get 6,920 kB of archives.\n", + "After this operation, 16.9 MB of additional disk space will be used.\n", + "Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-dejavu-core all 2.37-2build1 [1,041 kB]\n", + "Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-dejavu-extra all 2.37-2build1 [2,041 kB]\n", + "Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxtst6 amd64 2:1.2.3-1build4 [13.4 kB]\n", + "Get:4 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxxf86dga1 amd64 2:1.1.5-0ubuntu3 [12.6 kB]\n", + "Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 x11-utils amd64 7.7+5build2 [206 kB]\n", + "Get:6 http://archive.ubuntu.com/ubuntu jammy/main amd64 libatk-wrapper-java all 0.38.0-5build1 [53.1 kB]\n", + "Get:7 http://archive.ubuntu.com/ubuntu jammy/main amd64 libatk-wrapper-java-jni amd64 0.38.0-5build1 [49.0 kB]\n", + "Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxt-dev amd64 1:1.2.1-1 [396 kB]\n", + "Get:9 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 openjdk-11-jre amd64 11.0.27+6~us1-0ubuntu1~22.04 [214 kB]\n", + "Get:10 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 openjdk-11-jdk amd64 11.0.27+6~us1-0ubuntu1~22.04 [2,895 kB]\n", + "Fetched 6,920 kB in 1s (4,905 kB/s)\n", + "Selecting previously unselected package fonts-dejavu-core.\n", + "(Reading database ... 126109 files and directories currently installed.)\n", + "Preparing to unpack .../0-fonts-dejavu-core_2.37-2build1_all.deb ...\n", + "Unpacking fonts-dejavu-core (2.37-2build1) ...\n", + "Selecting previously unselected package fonts-dejavu-extra.\n", + "Preparing to unpack .../1-fonts-dejavu-extra_2.37-2build1_all.deb ...\n", + "Unpacking fonts-dejavu-extra (2.37-2build1) ...\n", + "Selecting previously unselected package libxtst6:amd64.\n", + "Preparing to unpack .../2-libxtst6_2%3a1.2.3-1build4_amd64.deb ...\n", + "Unpacking libxtst6:amd64 (2:1.2.3-1build4) ...\n", + "Selecting previously unselected package libxxf86dga1:amd64.\n", + "Preparing to unpack .../3-libxxf86dga1_2%3a1.1.5-0ubuntu3_amd64.deb ...\n", + "Unpacking libxxf86dga1:amd64 (2:1.1.5-0ubuntu3) ...\n", + "Selecting previously unselected package x11-utils.\n", + "Preparing to unpack .../4-x11-utils_7.7+5build2_amd64.deb ...\n", + "Unpacking x11-utils (7.7+5build2) ...\n", + "Selecting previously unselected package libatk-wrapper-java.\n", + "Preparing to unpack .../5-libatk-wrapper-java_0.38.0-5build1_all.deb ...\n", + "Unpacking libatk-wrapper-java (0.38.0-5build1) ...\n", + "Selecting previously unselected package libatk-wrapper-java-jni:amd64.\n", + "Preparing to unpack .../6-libatk-wrapper-java-jni_0.38.0-5build1_amd64.deb ...\n", + "Unpacking libatk-wrapper-java-jni:amd64 (0.38.0-5build1) ...\n", + "Selecting previously unselected package libxt-dev:amd64.\n", + "Preparing to unpack .../7-libxt-dev_1%3a1.2.1-1_amd64.deb ...\n", + "Unpacking libxt-dev:amd64 (1:1.2.1-1) ...\n", + "Selecting previously unselected package openjdk-11-jre:amd64.\n", + "Preparing to unpack .../8-openjdk-11-jre_11.0.27+6~us1-0ubuntu1~22.04_amd64.deb ...\n", + "Unpacking openjdk-11-jre:amd64 (11.0.27+6~us1-0ubuntu1~22.04) ...\n", + "Selecting previously unselected package openjdk-11-jdk:amd64.\n", + "Preparing to unpack .../9-openjdk-11-jdk_11.0.27+6~us1-0ubuntu1~22.04_amd64.deb ...\n", + "Unpacking openjdk-11-jdk:amd64 (11.0.27+6~us1-0ubuntu1~22.04) ...\n", + "Setting up libxtst6:amd64 (2:1.2.3-1build4) ...\n", + "Setting up libxxf86dga1:amd64 (2:1.1.5-0ubuntu3) ...\n", + "Setting up openjdk-11-jre:amd64 (11.0.27+6~us1-0ubuntu1~22.04) ...\n", + "Setting up libxt-dev:amd64 (1:1.2.1-1) ...\n", + "Setting up fonts-dejavu-core (2.37-2build1) ...\n", + "Setting up fonts-dejavu-extra (2.37-2build1) ...\n", + "Setting up x11-utils (7.7+5build2) ...\n", + "Setting up openjdk-11-jdk:amd64 (11.0.27+6~us1-0ubuntu1~22.04) ...\n", + "update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jconsole to provide /usr/bin/jconsole (jconsole) in auto mode\n", + "Setting up libatk-wrapper-java (0.38.0-5build1) ...\n", + "Setting up libatk-wrapper-java-jni:amd64 (0.38.0-5build1) ...\n", + "Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...\n", + "Processing triggers for hicolor-icon-theme (0.17-2) ...\n", + "Processing triggers for libc-bin (2.35-0ubuntu3.8) ...\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libhwloc.so.15 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libumf.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtcm.so.1 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtcm_debug.so.1 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link\n", + "\n", + "Processing triggers for man-db (2.10.2-1) ...\n", + "Processing triggers for mailcap (3.70+nmu1ubuntu1) ...\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "train_df = pd.read_csv('/content/gdrive/MyDrive/EURON/test/ratings_train.txt', sep='\\t')\n", + "train_df.head(3)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 143 + }, + "id": "VB_CmX0mG8hS", + "outputId": "9b377cd6-9249-47fd-e1ff-67bfa3d109bf" + }, + "execution_count": 41, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id document label\n", + "0 9976970 아 더빙.. 진짜 짜증나네요 목소리 0\n", + "1 3819312 흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나 1\n", + "2 10265843 너무재밓었다그래서보는것을추천한다 0" + ], + "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", + "
iddocumentlabel
09976970아 더빙.. 진짜 짜증나네요 목소리0
13819312흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나1
210265843너무재밓었다그래서보는것을추천한다0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "train_df" + } + }, + "metadata": {}, + "execution_count": 41 + } + ] + }, + { + "cell_type": "code", + "source": [ + "train_df['label'].value_counts( )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 178 + }, + "id": "3KQV-ym3Hh1i", + "outputId": "c8dc5f59-2be2-415e-dd8f-b347671593e6" + }, + "execution_count": 42, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "label\n", + "0 75173\n", + "1 74827\n", + "Name: count, dtype: int64" + ], + "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", + "
count
label
075173
174827
\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import re\n", + "\n", + "train_df = train_df.fillna(' ')\n", + "# 정규 표현식을 이용하여 숫자를 공백으로 변경(정규 표현식으로 \\d 는 숫자를 의미함.)\n", + "train_df['document'] = train_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "# 테스트 데이터 셋을 로딩하고 동일하게 Null 및 숫자를 공백으로 변환\n", + "test_df = pd.read_csv('/content/gdrive/MyDrive/EURON/test/ratings_test.txt', sep='\\t')\n", + "test_df = test_df.fillna(' ')\n", + "test_df['document'] = test_df['document'].apply( lambda x : re.sub(r\"\\d+\", \" \", x) )\n", + "\n", + "# id 칼럼 삭제 수행\n", + "train_df.drop('id', axis=1, inplace=True)\n", + "test_df.drop('id', axis=1, inplace=True)" + ], + "metadata": { + "id": "NvAb3E0IIIBk" + }, + "execution_count": 44, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from konlpy.tag import Twitter\n", + "\n", + "twitter = Twitter()\n", + "def tw_tokenizer(text):\n", + " # 입력 인자로 들어온 text 를 형태소 단어로 토큰화 하여 list 객체 반환\n", + " tokens_ko = twitter.morphs(text)\n", + " return tokens_ko" + ], + "metadata": { + "id": "QRZ-b91gILMa" + }, + "execution_count": 47, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "# Twitter 객체의 morphs( ) 객체를 이용한 tokenizer를 사용. ngram_range는 (1,2)\n", + "tfidf_vect = TfidfVectorizer(tokenizer=tw_tokenizer, ngram_range=(1,2), min_df=3, max_df=0.9)\n", + "tfidf_vect.fit(train_df['document'])\n", + "tfidf_matrix_train = tfidf_vect.transform(train_df['document'])" + ], + "metadata": { + "id": "UbHSvHFOIiDo" + }, + "execution_count": 48, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Logistic Regression 을 이용하여 감성 분석 Classification 수행.\n", + "lg_clf = LogisticRegression(random_state=0, solver='liblinear')\n", + "\n", + "# Parameter C 최적화를 위해 GridSearchCV 를 이용.\n", + "params = { 'C': [1 ,3.5, 4.5, 5.5, 10 ] }\n", + "grid_cv = GridSearchCV(lg_clf , param_grid=params , cv=3 ,scoring='accuracy', verbose=1 )\n", + "grid_cv.fit(tfidf_matrix_train , train_df['label'] )\n", + "print(grid_cv.best_params_ , round(grid_cv.best_score_,4))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "APRjsQekIRGq", + "outputId": "abfac606-3ddc-45e0-f878-d1aff4e0266d" + }, + "execution_count": 49, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n", + "{'C': 3.5} 0.8593\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import accuracy_score\n", + "\n", + "# 학습 데이터를 적용한 TfidfVectorizer를 이용하여 테스트 데이터를 TF-IDF 값으로 Feature 변환함.\n", + "tfidf_matrix_test = tfidf_vect.transform(test_df['document'])\n", + "\n", + "# classifier 는 GridSearchCV에서 최적 파라미터로 학습된 classifier를 그대로 이용\n", + "best_estimator = grid_cv.best_estimator_\n", + "preds = best_estimator.predict(tfidf_matrix_test)\n", + "\n", + "print('Logistic Regression 정확도: ',accuracy_score(test_df['label'],preds))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OQ690V56IkUg", + "outputId": "adf5c170-24f5-45da-eb54-e2b46be61d2e" + }, + "execution_count": 50, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Logistic Regression 정확도: 0.86172\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "emnVJD1bIlrt" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git "a/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.pdf" "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.pdf" new file mode 100644 index 0000000..5f32486 Binary files /dev/null and "b/Week13_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\213\341\205\262\341\204\213\341\205\247\341\206\253.pdf" differ