diff --git a/Amazon_Sentimental_Analysis.ipynb b/Amazon_Sentimental_Analysis.ipynb
new file mode 100644
index 0000000..9c92ab2
--- /dev/null
+++ b/Amazon_Sentimental_Analysis.ipynb
@@ -0,0 +1,1090 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "gpuType": "T4",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "HlAYzxmF628V"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib as plt\n",
+ "import pandas as pd\n",
+ "import nltk\n",
+ "import matplotlib.pyplot as plt\n",
+ "from nltk.sentiment import SentimentIntensityAnalyzer\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report\n",
+ "import seaborn as sns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git clone https://github.com/ZahraAlharz/Selection-Python.git"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "5BKSQxhG-HQS",
+ "outputId": "44c329c0-0081-40d0-aa60-1d0ee78cf678"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "fatal: destination path 'Selection-Python' already exists and is not an empty directory.\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "nltk.download('punkt')\n",
+ "nltk.download('vader_lexicon')\n",
+ "nltk.download('stopwords')"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "xEnOyv11Xk5A",
+ "outputId": "9652672a-217e-40ae-ee9f-583dc4b84d61"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
+ "[nltk_data] Package punkt is already up-to-date!\n",
+ "[nltk_data] Downloading package vader_lexicon to /root/nltk_data...\n",
+ "[nltk_data] Package vader_lexicon is already up-to-date!\n",
+ "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
+ "[nltk_data] Package stopwords is already up-to-date!\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 136
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df = pd.read_csv(\"/content/Selection-Python/One_product.csv\")"
+ ],
+ "metadata": {
+ "id": "G_we7Za6-UO-"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.head()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 776
+ },
+ "id": "l5iEReKSg8Iy",
+ "outputId": "ca512356-f2a8-4f8e-a4c4-35fcbfd2ad6e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " id name \\\n",
+ "0 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "1 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "2 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "3 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "4 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "\n",
+ " asins brand categories \\\n",
+ "0 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "1 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "2 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "3 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "4 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "\n",
+ " keys manufacturer \\\n",
+ "0 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "1 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "2 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "3 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "4 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "\n",
+ " reviews.date reviews.dateAdded \\\n",
+ "0 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "1 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "2 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "3 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "4 2017-01-12T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "\n",
+ " reviews.dateSeen ... \\\n",
+ "0 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "1 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "2 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "3 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "4 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "\n",
+ " reviews.doRecommend reviews.id reviews.numHelpful reviews.rating \\\n",
+ "0 True NaN 0 5 \n",
+ "1 True NaN 0 5 \n",
+ "2 True NaN 0 5 \n",
+ "3 True NaN 0 4 \n",
+ "4 True NaN 0 5 \n",
+ "\n",
+ " reviews.sourceURLs \\\n",
+ "0 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "1 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "2 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "3 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "4 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "\n",
+ " reviews.text \\\n",
+ "0 This product so far has not disappointed. My c... \n",
+ "1 great for beginner or experienced person. Boug... \n",
+ "2 Inexpensive tablet for him to use and learn on... \n",
+ "3 I've had my Fire HD 8 two weeks now and I love... \n",
+ "4 I bought this for my grand daughter when she c... \n",
+ "\n",
+ " reviews.title reviews.userCity \\\n",
+ "0 Kindle NaN \n",
+ "1 very fast NaN \n",
+ "2 Beginner tablet for our 9 year old son. NaN \n",
+ "3 Good!!! NaN \n",
+ "4 Fantastic Tablet for kids NaN \n",
+ "\n",
+ " reviews.userProvince reviews.username \n",
+ "0 NaN Adapter \n",
+ "1 NaN truman \n",
+ "2 NaN DaveZ \n",
+ "3 NaN Shacks \n",
+ "4 NaN explore42 \n",
+ "\n",
+ "[5 rows x 21 columns]"
+ ],
+ "text/html": [
+ "\n",
+ "
\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " name | \n",
+ " asins | \n",
+ " brand | \n",
+ " categories | \n",
+ " keys | \n",
+ " manufacturer | \n",
+ " reviews.date | \n",
+ " reviews.dateAdded | \n",
+ " reviews.dateSeen | \n",
+ " ... | \n",
+ " reviews.doRecommend | \n",
+ " reviews.id | \n",
+ " reviews.numHelpful | \n",
+ " reviews.rating | \n",
+ " reviews.sourceURLs | \n",
+ " reviews.text | \n",
+ " reviews.title | \n",
+ " reviews.userCity | \n",
+ " reviews.userProvince | \n",
+ " reviews.username | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " This product so far has not disappointed. My c... | \n",
+ " Kindle | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Adapter | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " great for beginner or experienced person. Boug... | \n",
+ " very fast | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " truman | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " Inexpensive tablet for him to use and learn on... | \n",
+ " Beginner tablet for our 9 year old son. | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " DaveZ | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " I've had my Fire HD 8 two weeks now and I love... | \n",
+ " Good!!! | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Shacks | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-12T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " I bought this for my grand daughter when she c... | \n",
+ " Fantastic Tablet for kids | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " explore42 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 21 columns
\n",
+ "
\n",
+ "
\n",
+ "
\n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "df"
+ }
+ },
+ "metadata": {},
+ "execution_count": 138
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.info()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "gCO7BFQ2-URm",
+ "outputId": "6784e1ef-4cbb-4eec-dea6-28b05333a860"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "RangeIndex: 2814 entries, 0 to 2813\n",
+ "Data columns (total 21 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 id 2814 non-null object \n",
+ " 1 name 2814 non-null object \n",
+ " 2 asins 2814 non-null object \n",
+ " 3 brand 2814 non-null object \n",
+ " 4 categories 2814 non-null object \n",
+ " 5 keys 2814 non-null object \n",
+ " 6 manufacturer 2814 non-null object \n",
+ " 7 reviews.date 2814 non-null object \n",
+ " 8 reviews.dateAdded 2814 non-null object \n",
+ " 9 reviews.dateSeen 2814 non-null object \n",
+ " 10 reviews.didPurchase 0 non-null float64\n",
+ " 11 reviews.doRecommend 2814 non-null bool \n",
+ " 12 reviews.id 0 non-null float64\n",
+ " 13 reviews.numHelpful 2814 non-null int64 \n",
+ " 14 reviews.rating 2814 non-null int64 \n",
+ " 15 reviews.sourceURLs 2814 non-null object \n",
+ " 16 reviews.text 2814 non-null object \n",
+ " 17 reviews.title 2814 non-null object \n",
+ " 18 reviews.userCity 0 non-null float64\n",
+ " 19 reviews.userProvince 0 non-null float64\n",
+ " 20 reviews.username 2814 non-null object \n",
+ "dtypes: bool(1), float64(4), int64(2), object(14)\n",
+ "memory usage: 442.6+ KB\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "id": "8RMJKoZc-UUR",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "9aff0a2c-5e28-4257-e0d9-2df7c1535115"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 140
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "PkD-EeQr-UaW"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.info()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "l-rfcGXBC3cx",
+ "outputId": "2dc90236-49f2-4dcc-dcf0-b3f0a11f8b5a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "RangeIndex: 2814 entries, 0 to 2813\n",
+ "Data columns (total 21 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 id 2814 non-null object \n",
+ " 1 name 2814 non-null object \n",
+ " 2 asins 2814 non-null object \n",
+ " 3 brand 2814 non-null object \n",
+ " 4 categories 2814 non-null object \n",
+ " 5 keys 2814 non-null object \n",
+ " 6 manufacturer 2814 non-null object \n",
+ " 7 reviews.date 2814 non-null object \n",
+ " 8 reviews.dateAdded 2814 non-null object \n",
+ " 9 reviews.dateSeen 2814 non-null object \n",
+ " 10 reviews.didPurchase 0 non-null float64\n",
+ " 11 reviews.doRecommend 2814 non-null bool \n",
+ " 12 reviews.id 0 non-null float64\n",
+ " 13 reviews.numHelpful 2814 non-null int64 \n",
+ " 14 reviews.rating 2814 non-null int64 \n",
+ " 15 reviews.sourceURLs 2814 non-null object \n",
+ " 16 reviews.text 2814 non-null object \n",
+ " 17 reviews.title 2814 non-null object \n",
+ " 18 reviews.userCity 0 non-null float64\n",
+ " 19 reviews.userProvince 0 non-null float64\n",
+ " 20 reviews.username 2814 non-null object \n",
+ "dtypes: bool(1), float64(4), int64(2), object(14)\n",
+ "memory usage: 442.6+ KB\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "id": "hw5xQ95UC9Ya",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "48384178-bb1a-491c-c589-d2ecd7045a9d"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 142
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['name'] = df['name'].astype(str)\n",
+ "df['reviews.numHelpful'] = df['reviews.numHelpful'].astype(float)\n",
+ "df['reviews.rating'] = df['reviews.rating'].astype(float)\n",
+ "df['reviews.text'] = df['reviews.text'].astype(str)\n",
+ "df['reviews.title'] = df['reviews.title'].astype(str)"
+ ],
+ "metadata": {
+ "id": "dRTGRzjIZhVb"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "IVi3lS-th5qz",
+ "outputId": "608ecc5d-66f7-4ef3-9da7-59a35b8cb374"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 144
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['reviews.numHelpful'] = df['reviews.numHelpful'].dropna()\n",
+ "df['reviews.rating'] = df['reviews.rating'].dropna()"
+ ],
+ "metadata": {
+ "id": "U0mMTXQSiPFA"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "8ssJahi2ivjZ",
+ "outputId": "a319286e-c298-48f3-e6af-d663133e0aa2"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 146
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "sid = SentimentIntensityAnalyzer()"
+ ],
+ "metadata": {
+ "id": "3dLPk4DHXkZT"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def get_sentiment_label(score):\n",
+ " if score > 0.05:\n",
+ " return 'positive'\n",
+ " elif score < -0.05:\n",
+ " return 'negative'\n",
+ " else:\n",
+ " return 'neutral'"
+ ],
+ "metadata": {
+ "id": "BWV_g-qZTUMd"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def analyze_sentiment(text):\n",
+ " scores = sid.polarity_scores(text)\n",
+ " compound_score = scores['compound']\n",
+ " return get_sentiment_label(compound_score)"
+ ],
+ "metadata": {
+ "id": "JdY5eba8TZIy"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['sentiment'] = df['reviews.text'].apply(analyze_sentiment)"
+ ],
+ "metadata": {
+ "id": "MO7FazRMc4_-"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['true_sentiment'] = pd.cut(df['reviews.rating'], bins=[0, 1, 3, 5], labels=['negative', 'neutral', 'positive'])"
+ ],
+ "metadata": {
+ "id": "tHyVtYk1jVGi"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "true_labels = df['true_sentiment']\n",
+ "predicted_labels = df['sentiment']"
+ ],
+ "metadata": {
+ "id": "PnGm5Z6cT1G3"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "cm = confusion_matrix(true_labels, predicted_labels)"
+ ],
+ "metadata": {
+ "id": "PZaVGKnchtVm"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "plt.figure(figsize=(8, 6))\n",
+ "sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Blues\")\n",
+ "plt.title(\"Confusion Matrix\")\n",
+ "plt.xlabel(\"Predicted Labels\")\n",
+ "plt.ylabel(\"True Labels\")\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "id": "cSgvucObUExk",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 564
+ },
+ "outputId": "7c4d554f-96af-4e1e-f958-1d5da67a1159"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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q8lX5eZm/+8lX758Sk83nFQRYC/pyhWdOnVKbdoz/QW5V7qRrtTUVGeXATiU02628ff3186dO++4f+fOnSpZsuRdz2O1WuXl5WX3YFj7nwlp0lSzP5qlzZs26syZ01r3/VotmD/Xbs00ICdNmvgv7d61U2fOnFb03h81eGCE8uVzU6vWbZ1dGlxE0pUr+uXQIf1y6JAk6czp0/rl0CHFnD2rpKQkTZvynvbvi9bZs2f088EbS6adi4vT46EtnVw5Miu33GwTFRWlRx55REWKFFGJEiXUsWNHHT582O6Yq1evKjw8XMWKFZOnp6c6d+6suLg4u2NOnjypNm3aqFChQipRooSGDRum69ev2x2zceNGPfTQQ7JarapUqZLmzZuX5c/NaYnk0KFD1bdvX+3Zs0fNmjWzNY1xcXFat26dZs+erXfffddZ5bm0V157XTOmTdX4cWN08eIF+ZUooSefekYv9g93dmlwUXFxsXplWKTi4+NV1NdXtR+qowWLvmB9PuSYgwd/Uu+e/1tH990JUZKk9h2e0Oujxuj48d/0zbIliv/zT/n4+OiBB6tr7qcLValSZWeVjHvUpk2bFB4erkceeUTXr1/Xq6++qhYtWujnn39W4cKFJUmDBw/WypUr9eWXX8rb21sRERHq1KmTfvjhB0k3vlikTZs28vf319atWxUTE6Pu3burQIECGj9+vCTp+PHjatOmjfr166eFCxdq3bp16t27t0qVKqXQ0NBM12sxDMNp45WLFy/W5MmTtWfPHqWlpUm6MYRap04dRUZG6umnnzZ13qvX734MAADIXTycuJZMsbDPHXbuC/O7mn7t+fPnVaJECW3atEmNGzdWQkKC/Pz8tGjRIj355JOSpF9++UVVq1bVtm3bVK9ePX333Xdq27atzp49awvqZs2apREjRuj8+fNyd3fXiBEjtHLlSv3000+29+rSpYvi4+O1alXmvzXMqetIPvPMM9q+fbuSkpJ05swZnTlzRklJSdq+fbvpJhIAACA3SUlJ0aVLl+wet644cycJCQmSZBuB2bNnj65du6bmzf833ez+++9X2bJlbTcob9u2TdWrV7ebIhgaGqpLly7p4MGDtmP+eo6bx9ztJudb5YoFyQsUKKBSpUqpVKlSKlCggLPLAQAALsaRcySjoqLk7e1t94iKirprTenp6Ro0aJAaNGigBx98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\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(classification_report(true_labels, predicted_labels))"
+ ],
+ "metadata": {
+ "id": "RMhWSLbgUI_z",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "0cf2e3ab-cf37-43a1-b52a-89125b854654"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " precision recall f1-score support\n",
+ "\n",
+ " negative 0.05 0.31 0.08 26\n",
+ " neutral 0.09 0.09 0.09 121\n",
+ " positive 0.97 0.91 0.94 2667\n",
+ "\n",
+ " accuracy 0.87 2814\n",
+ " macro avg 0.37 0.44 0.37 2814\n",
+ "weighted avg 0.92 0.87 0.90 2814\n",
+ "\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.to_csv('output.csv', index=False)"
+ ],
+ "metadata": {
+ "id": "r50k8evJULZ_"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Copy_of_Untitled8.ipynb b/Copy_of_Untitled8.ipynb
new file mode 100644
index 0000000..3389d77
--- /dev/null
+++ b/Copy_of_Untitled8.ipynb
@@ -0,0 +1,1238 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "gpuType": "T4",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 134,
+ "metadata": {
+ "id": "HlAYzxmF628V"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib as plt\n",
+ "import pandas as pd\n",
+ "import nltk\n",
+ "import matplotlib.pyplot as plt\n",
+ "from nltk.sentiment import SentimentIntensityAnalyzer\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report\n",
+ "import seaborn as sns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git clone https://github.com/ZahraAlharz/Selection-Python.git"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "5BKSQxhG-HQS",
+ "outputId": "44c329c0-0081-40d0-aa60-1d0ee78cf678"
+ },
+ "execution_count": 135,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "fatal: destination path 'Selection-Python' already exists and is not an empty directory.\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "nltk.download('punkt')\n",
+ "nltk.download('vader_lexicon')\n",
+ "nltk.download('stopwords')"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "xEnOyv11Xk5A",
+ "outputId": "9652672a-217e-40ae-ee9f-583dc4b84d61"
+ },
+ "execution_count": 136,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
+ "[nltk_data] Package punkt is already up-to-date!\n",
+ "[nltk_data] Downloading package vader_lexicon to /root/nltk_data...\n",
+ "[nltk_data] Package vader_lexicon is already up-to-date!\n",
+ "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
+ "[nltk_data] Package stopwords is already up-to-date!\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 136
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df = pd.read_csv(\"/content/Selection-Python/One_product.csv\")"
+ ],
+ "metadata": {
+ "id": "G_we7Za6-UO-"
+ },
+ "execution_count": 137,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.head()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 776
+ },
+ "id": "l5iEReKSg8Iy",
+ "outputId": "ca512356-f2a8-4f8e-a4c4-35fcbfd2ad6e"
+ },
+ "execution_count": 138,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " id name \\\n",
+ "0 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "1 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "2 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "3 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "4 AVqkIhwDv8e3D1O-lebb All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... \n",
+ "\n",
+ " asins brand categories \\\n",
+ "0 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "1 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "2 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "3 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "4 B01AHB9CN2 Amazon Electronics,iPad & Tablets,All Tablets,Fire Ta... \n",
+ "\n",
+ " keys manufacturer \\\n",
+ "0 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "1 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "2 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "3 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "4 841667104676,amazon/53004484,amazon/b01ahb9cn2... Amazon \n",
+ "\n",
+ " reviews.date reviews.dateAdded \\\n",
+ "0 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "1 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "2 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "3 2017-01-13T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "4 2017-01-12T00:00:00.000Z 2017-07-03T23:33:15Z \n",
+ "\n",
+ " reviews.dateSeen ... \\\n",
+ "0 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "1 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "2 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "3 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "4 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z ... \n",
+ "\n",
+ " reviews.doRecommend reviews.id reviews.numHelpful reviews.rating \\\n",
+ "0 True NaN 0 5 \n",
+ "1 True NaN 0 5 \n",
+ "2 True NaN 0 5 \n",
+ "3 True NaN 0 4 \n",
+ "4 True NaN 0 5 \n",
+ "\n",
+ " reviews.sourceURLs \\\n",
+ "0 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "1 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "2 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "3 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "4 http://reviews.bestbuy.com/3545/5620406/review... \n",
+ "\n",
+ " reviews.text \\\n",
+ "0 This product so far has not disappointed. My c... \n",
+ "1 great for beginner or experienced person. Boug... \n",
+ "2 Inexpensive tablet for him to use and learn on... \n",
+ "3 I've had my Fire HD 8 two weeks now and I love... \n",
+ "4 I bought this for my grand daughter when she c... \n",
+ "\n",
+ " reviews.title reviews.userCity \\\n",
+ "0 Kindle NaN \n",
+ "1 very fast NaN \n",
+ "2 Beginner tablet for our 9 year old son. NaN \n",
+ "3 Good!!! NaN \n",
+ "4 Fantastic Tablet for kids NaN \n",
+ "\n",
+ " reviews.userProvince reviews.username \n",
+ "0 NaN Adapter \n",
+ "1 NaN truman \n",
+ "2 NaN DaveZ \n",
+ "3 NaN Shacks \n",
+ "4 NaN explore42 \n",
+ "\n",
+ "[5 rows x 21 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " name | \n",
+ " asins | \n",
+ " brand | \n",
+ " categories | \n",
+ " keys | \n",
+ " manufacturer | \n",
+ " reviews.date | \n",
+ " reviews.dateAdded | \n",
+ " reviews.dateSeen | \n",
+ " ... | \n",
+ " reviews.doRecommend | \n",
+ " reviews.id | \n",
+ " reviews.numHelpful | \n",
+ " reviews.rating | \n",
+ " reviews.sourceURLs | \n",
+ " reviews.text | \n",
+ " reviews.title | \n",
+ " reviews.userCity | \n",
+ " reviews.userProvince | \n",
+ " reviews.username | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " This product so far has not disappointed. My c... | \n",
+ " Kindle | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Adapter | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " great for beginner or experienced person. Boug... | \n",
+ " very fast | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " truman | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " Inexpensive tablet for him to use and learn on... | \n",
+ " Beginner tablet for our 9 year old son. | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " DaveZ | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-13T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " I've had my Fire HD 8 two weeks now and I love... | \n",
+ " Good!!! | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Shacks | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " AVqkIhwDv8e3D1O-lebb | \n",
+ " All-New Fire HD 8 Tablet, 8 HD Display, Wi-Fi,... | \n",
+ " B01AHB9CN2 | \n",
+ " Amazon | \n",
+ " Electronics,iPad & Tablets,All Tablets,Fire Ta... | \n",
+ " 841667104676,amazon/53004484,amazon/b01ahb9cn2... | \n",
+ " Amazon | \n",
+ " 2017-01-12T00:00:00.000Z | \n",
+ " 2017-07-03T23:33:15Z | \n",
+ " 2017-06-07T09:04:00.000Z,2017-04-30T00:45:00.000Z | \n",
+ " ... | \n",
+ " True | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 5 | \n",
+ " http://reviews.bestbuy.com/3545/5620406/review... | \n",
+ " I bought this for my grand daughter when she c... | \n",
+ " Fantastic Tablet for kids | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " explore42 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 21 columns
\n",
+ "
\n",
+ "
\n",
+ "
\n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "df"
+ }
+ },
+ "metadata": {},
+ "execution_count": 138
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.info()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "gCO7BFQ2-URm",
+ "outputId": "6784e1ef-4cbb-4eec-dea6-28b05333a860"
+ },
+ "execution_count": 139,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "RangeIndex: 2814 entries, 0 to 2813\n",
+ "Data columns (total 21 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 id 2814 non-null object \n",
+ " 1 name 2814 non-null object \n",
+ " 2 asins 2814 non-null object \n",
+ " 3 brand 2814 non-null object \n",
+ " 4 categories 2814 non-null object \n",
+ " 5 keys 2814 non-null object \n",
+ " 6 manufacturer 2814 non-null object \n",
+ " 7 reviews.date 2814 non-null object \n",
+ " 8 reviews.dateAdded 2814 non-null object \n",
+ " 9 reviews.dateSeen 2814 non-null object \n",
+ " 10 reviews.didPurchase 0 non-null float64\n",
+ " 11 reviews.doRecommend 2814 non-null bool \n",
+ " 12 reviews.id 0 non-null float64\n",
+ " 13 reviews.numHelpful 2814 non-null int64 \n",
+ " 14 reviews.rating 2814 non-null int64 \n",
+ " 15 reviews.sourceURLs 2814 non-null object \n",
+ " 16 reviews.text 2814 non-null object \n",
+ " 17 reviews.title 2814 non-null object \n",
+ " 18 reviews.userCity 0 non-null float64\n",
+ " 19 reviews.userProvince 0 non-null float64\n",
+ " 20 reviews.username 2814 non-null object \n",
+ "dtypes: bool(1), float64(4), int64(2), object(14)\n",
+ "memory usage: 442.6+ KB\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "id": "8RMJKoZc-UUR",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "9aff0a2c-5e28-4257-e0d9-2df7c1535115"
+ },
+ "execution_count": 140,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 140
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "PkD-EeQr-UaW"
+ },
+ "execution_count": 140,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.info()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "l-rfcGXBC3cx",
+ "outputId": "2dc90236-49f2-4dcc-dcf0-b3f0a11f8b5a"
+ },
+ "execution_count": 141,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "RangeIndex: 2814 entries, 0 to 2813\n",
+ "Data columns (total 21 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 id 2814 non-null object \n",
+ " 1 name 2814 non-null object \n",
+ " 2 asins 2814 non-null object \n",
+ " 3 brand 2814 non-null object \n",
+ " 4 categories 2814 non-null object \n",
+ " 5 keys 2814 non-null object \n",
+ " 6 manufacturer 2814 non-null object \n",
+ " 7 reviews.date 2814 non-null object \n",
+ " 8 reviews.dateAdded 2814 non-null object \n",
+ " 9 reviews.dateSeen 2814 non-null object \n",
+ " 10 reviews.didPurchase 0 non-null float64\n",
+ " 11 reviews.doRecommend 2814 non-null bool \n",
+ " 12 reviews.id 0 non-null float64\n",
+ " 13 reviews.numHelpful 2814 non-null int64 \n",
+ " 14 reviews.rating 2814 non-null int64 \n",
+ " 15 reviews.sourceURLs 2814 non-null object \n",
+ " 16 reviews.text 2814 non-null object \n",
+ " 17 reviews.title 2814 non-null object \n",
+ " 18 reviews.userCity 0 non-null float64\n",
+ " 19 reviews.userProvince 0 non-null float64\n",
+ " 20 reviews.username 2814 non-null object \n",
+ "dtypes: bool(1), float64(4), int64(2), object(14)\n",
+ "memory usage: 442.6+ KB\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "id": "hw5xQ95UC9Ya",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "48384178-bb1a-491c-c589-d2ecd7045a9d"
+ },
+ "execution_count": 142,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 142
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['name'] = df['name'].astype(str)\n",
+ "df['reviews.numHelpful'] = df['reviews.numHelpful'].astype(float)\n",
+ "df['reviews.rating'] = df['reviews.rating'].astype(float)\n",
+ "df['reviews.text'] = df['reviews.text'].astype(str)\n",
+ "df['reviews.title'] = df['reviews.title'].astype(str)"
+ ],
+ "metadata": {
+ "id": "dRTGRzjIZhVb"
+ },
+ "execution_count": 143,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "IVi3lS-th5qz",
+ "outputId": "608ecc5d-66f7-4ef3-9da7-59a35b8cb374"
+ },
+ "execution_count": 144,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 144
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['reviews.numHelpful'] = df['reviews.numHelpful'].dropna()\n",
+ "df['reviews.rating'] = df['reviews.rating'].dropna()"
+ ],
+ "metadata": {
+ "id": "U0mMTXQSiPFA"
+ },
+ "execution_count": 145,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.isnull().sum()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "8ssJahi2ivjZ",
+ "outputId": "a319286e-c298-48f3-e6af-d663133e0aa2"
+ },
+ "execution_count": 146,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "id 0\n",
+ "name 0\n",
+ "asins 0\n",
+ "brand 0\n",
+ "categories 0\n",
+ "keys 0\n",
+ "manufacturer 0\n",
+ "reviews.date 0\n",
+ "reviews.dateAdded 0\n",
+ "reviews.dateSeen 0\n",
+ "reviews.didPurchase 2814\n",
+ "reviews.doRecommend 0\n",
+ "reviews.id 2814\n",
+ "reviews.numHelpful 0\n",
+ "reviews.rating 0\n",
+ "reviews.sourceURLs 0\n",
+ "reviews.text 0\n",
+ "reviews.title 0\n",
+ "reviews.userCity 2814\n",
+ "reviews.userProvince 2814\n",
+ "reviews.username 0\n",
+ "dtype: int64"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 146
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "sid = SentimentIntensityAnalyzer()"
+ ],
+ "metadata": {
+ "id": "3dLPk4DHXkZT"
+ },
+ "execution_count": 147,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def get_sentiment_label(score):\n",
+ " if score > 0.05:\n",
+ " return 'positive'\n",
+ " elif score < -0.05:\n",
+ " return 'negative'\n",
+ " else:\n",
+ " return 'neutral'"
+ ],
+ "metadata": {
+ "id": "BWV_g-qZTUMd"
+ },
+ "execution_count": 148,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def analyze_sentiment(text):\n",
+ " scores = sid.polarity_scores(text)\n",
+ " compound_score = scores['compound']\n",
+ " return get_sentiment_label(compound_score)"
+ ],
+ "metadata": {
+ "id": "JdY5eba8TZIy"
+ },
+ "execution_count": 149,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['sentiment'] = df['reviews.text'].apply(analyze_sentiment)"
+ ],
+ "metadata": {
+ "id": "MO7FazRMc4_-"
+ },
+ "execution_count": 150,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df['true_sentiment'] = pd.cut(df['reviews.rating'], bins=[0, 1, 3, 5], labels=['negative', 'neutral', 'positive'])"
+ ],
+ "metadata": {
+ "id": "tHyVtYk1jVGi"
+ },
+ "execution_count": 151,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "true_labels = df['true_sentiment']\n",
+ "predicted_labels = df['sentiment']"
+ ],
+ "metadata": {
+ "id": "PnGm5Z6cT1G3"
+ },
+ "execution_count": 152,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "cm = confusion_matrix(true_labels, predicted_labels)"
+ ],
+ "metadata": {
+ "id": "PZaVGKnchtVm"
+ },
+ "execution_count": 153,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "plt.figure(figsize=(8, 6))\n",
+ "sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Blues\")\n",
+ "plt.title(\"Confusion Matrix\")\n",
+ "plt.xlabel(\"Predicted Labels\")\n",
+ "plt.ylabel(\"True Labels\")\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "id": "cSgvucObUExk",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 564
+ },
+ "outputId": "7c4d554f-96af-4e1e-f958-1d5da67a1159"
+ },
+ "execution_count": 154,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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q8lX5eZm/+8lX758Sk83nFQRYC/pyhWdOnVKbdoz/QW5V7qRrtTUVGeXATiU02628ff3186dO++4f+fOnSpZsuRdz2O1WuXl5WX3YFj7nwlp0lSzP5qlzZs26syZ01r3/VotmD/Xbs00ICdNmvgv7d61U2fOnFb03h81eGCE8uVzU6vWbZ1dGlxE0pUr+uXQIf1y6JAk6czp0/rl0CHFnD2rpKQkTZvynvbvi9bZs2f088EbS6adi4vT46EtnVw5Miu33GwTFRWlRx55REWKFFGJEiXUsWNHHT582O6Yq1evKjw8XMWKFZOnp6c6d+6suLg4u2NOnjypNm3aqFChQipRooSGDRum69ev2x2zceNGPfTQQ7JarapUqZLmzZuX5c/NaYnk0KFD1bdvX+3Zs0fNmjWzNY1xcXFat26dZs+erXfffddZ5bm0V157XTOmTdX4cWN08eIF+ZUooSefekYv9g93dmlwUXFxsXplWKTi4+NV1NdXtR+qowWLvmB9PuSYgwd/Uu+e/1tH990JUZKk9h2e0Oujxuj48d/0zbIliv/zT/n4+OiBB6tr7qcLValSZWeVjHvUpk2bFB4erkceeUTXr1/Xq6++qhYtWujnn39W4cKFJUmDBw/WypUr9eWXX8rb21sRERHq1KmTfvjhB0k3vlikTZs28vf319atWxUTE6Pu3burQIECGj9+vCTp+PHjatOmjfr166eFCxdq3bp16t27t0qVKqXQ0NBM12sxDMNp45WLFy/W5MmTtWfPHqWlpUm6MYRap04dRUZG6umnnzZ13qvX734MAADIXTycuJZMsbDPHXbuC/O7mn7t+fPnVaJECW3atEmNGzdWQkKC/Pz8tGjRIj355JOSpF9++UVVq1bVtm3bVK9ePX333Xdq27atzp49awvqZs2apREjRuj8+fNyd3fXiBEjtHLlSv3000+29+rSpYvi4+O1alXmvzXMqetIPvPMM9q+fbuSkpJ05swZnTlzRklJSdq+fbvpJhIAACA3SUlJ0aVLl+wet644cycJCQmSZBuB2bNnj65du6bmzf833ez+++9X2bJlbTcob9u2TdWrV7ebIhgaGqpLly7p4MGDtmP+eo6bx9ztJudb5YoFyQsUKKBSpUqpVKlSKlCggLPLAQAALsaRcySjoqLk7e1t94iKirprTenp6Ro0aJAaNGigBx98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\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(classification_report(true_labels, predicted_labels))"
+ ],
+ "metadata": {
+ "id": "RMhWSLbgUI_z",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "0cf2e3ab-cf37-43a1-b52a-89125b854654"
+ },
+ "execution_count": 155,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " precision recall f1-score support\n",
+ "\n",
+ " negative 0.05 0.31 0.08 26\n",
+ " neutral 0.09 0.09 0.09 121\n",
+ " positive 0.97 0.91 0.94 2667\n",
+ "\n",
+ " accuracy 0.87 2814\n",
+ " macro avg 0.37 0.44 0.37 2814\n",
+ "weighted avg 0.92 0.87 0.90 2814\n",
+ "\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "df.to_csv('output.csv', index=False)"
+ ],
+ "metadata": {
+ "id": "r50k8evJULZ_"
+ },
+ "execution_count": 156,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')\n"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "VXKPWqgQr_nW",
+ "outputId": "fe82617c-716f-4ebf-c436-3aa4a789ce60"
+ },
+ "execution_count": 162,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git clone https://github.com/ZahraAlharz/Selection-Python.git"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "mBlZU3qMvuZG",
+ "outputId": "39d20b0b-54b1-435d-fef2-46a9afd6178d"
+ },
+ "execution_count": 169,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "fatal: destination path 'Selection-Python' already exists and is not an empty directory.\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git config --global user.name \"ZahraAlharz\"\n",
+ "!git config --global user.email \"zahra_alharz@icloud.com\""
+ ],
+ "metadata": {
+ "id": "-ytE8rdRsKh5"
+ },
+ "execution_count": 171,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "XwpZTMcQu9MH"
+ },
+ "execution_count": 171,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git add .\n",
+ "!git commit -m \"Updated the repository\""
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "B7Y2VGt_txTr",
+ "outputId": "bf35fc14-d623-4c58-caa5-d1a366a531f3"
+ },
+ "execution_count": 172,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "warning: adding embedded git repository: Selection-Python\n",
+ "\u001b[33mhint: You've added another git repository inside your current repository.\u001b[m\n",
+ "\u001b[33mhint: Clones of the outer repository will not contain the contents of\u001b[m\n",
+ "\u001b[33mhint: the embedded repository and will not know how to obtain it.\u001b[m\n",
+ "\u001b[33mhint: If you meant to add a submodule, use:\u001b[m\n",
+ "\u001b[33mhint: \u001b[m\n",
+ "\u001b[33mhint: \tgit submodule add Selection-Python\u001b[m\n",
+ "\u001b[33mhint: \u001b[m\n",
+ "\u001b[33mhint: If you added this path by mistake, you can remove it from the\u001b[m\n",
+ "\u001b[33mhint: index with:\u001b[m\n",
+ "\u001b[33mhint: \u001b[m\n",
+ "\u001b[33mhint: \tgit rm --cached Selection-Python\u001b[m\n",
+ "\u001b[33mhint: \u001b[m\n",
+ "\u001b[33mhint: See \"git help submodule\" for more information.\u001b[m\n",
+ "error: open(\"drive/MyDrive/6sigma/Six Sigma Yellow Belt Project Specialization.gdoc\"): Operation not supported\n",
+ "error: unable to index file 'drive/MyDrive/6sigma/Six Sigma Yellow Belt Project Specialization.gdoc'\n",
+ "fatal: adding files failed\n",
+ "On branch master\n",
+ "\n",
+ "Initial commit\n",
+ "\n",
+ "Untracked files:\n",
+ " (use \"git add ...\" to include in what will be committed)\n",
+ "\t\u001b[31m.config/\u001b[m\n",
+ "\t\u001b[31mSelection-Python/\u001b[m\n",
+ "\t\u001b[31mdrive/\u001b[m\n",
+ "\t\u001b[31moutput.csv\u001b[m\n",
+ "\t\u001b[31msample_data/\u001b[m\n",
+ "\n",
+ "nothing added to commit but untracked files present (use \"git add\" to track)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git remote add origin https://github.com/ZahraAlharz/Selection-Python.git\n",
+ "!git push -u origin master"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "v1KZ1_uUtyc-",
+ "outputId": "569af5bc-7a65-4c69-e2bb-6a08f1c9a11e"
+ },
+ "execution_count": 173,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "error: remote origin already exists.\n",
+ "error: src refspec master does not match any\n",
+ "\u001b[31merror: failed to push some refs to 'https://github.com/ZahraAlharz/Selection-Python.git'\n",
+ "\u001b[m"
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file