CoolFace
Apppublic

Duc0104/toxic_comments_classification

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
compare_model.ipynb3406 linesDownload Raw Back to root
1{2  "nbformat": 4,3  "nbformat_minor": 0,4  "metadata": {5    "colab": {6      "provenance": []7    },8    "kernelspec": {9      "name": "python3",10      "display_name": "Python 3"11    },12    "language_info": {13      "name": "python"14    }15  },16  "cells": [17    {18      "cell_type": "code",19      "source": [20        "import pandas as pd\n",21        "import matplotlib.pyplot as plt\n",22        "import seaborn as sns"23      ],24      "metadata": {25        "id": "ubAufZKWrAPs"26      },27      "execution_count": 1,28      "outputs": []29    },30    {31      "cell_type": "code",32      "source": [33        "df = pd.read_csv('train.csv')\n",34        "df.head()"35      ],36      "metadata": {37        "colab": {38          "base_uri": "https://localhost:8080/",39          "height": 20640        },41        "id": "CuUhKNqlrR4d",42        "outputId": "8f11a4a9-461c-4ad6-dc84-e28ee20a57cb"43      },44      "execution_count": 2,45      "outputs": [46        {47          "output_type": "execute_result",48          "data": {49            "text/plain": [50              "                 id                                       comment_text  toxic  \\\n",51              "0  0000997932d777bf  Explanation\\nWhy the edits made under my usern...      0   \n",52              "1  000103f0d9cfb60f  D'aww! He matches this background colour I'm s...      0   \n",53              "2  000113f07ec002fd  Hey man, I'm really not trying to edit war. It...      0   \n",54              "3  0001b41b1c6bb37e  \"\\nMore\\nI can't make any real suggestions on ...      0   \n",55              "4  0001d958c54c6e35  You, sir, are my hero. Any chance you remember...      0   \n",56              "\n",57              "   severe_toxic  obscene  threat  insult  identity_hate  \n",58              "0             0        0       0       0              0  \n",59              "1             0        0       0       0              0  \n",60              "2             0        0       0       0              0  \n",61              "3             0        0       0       0              0  \n",62              "4             0        0       0       0              0  "63            ],64            "text/html": [65              "\n",66              "  <div id=\"df-df2ceea6-f5ae-46d5-a458-3f4523416299\" class=\"colab-df-container\">\n",67              "    <div>\n",68              "<style scoped>\n",69              "    .dataframe tbody tr th:only-of-type {\n",70              "        vertical-align: middle;\n",71              "    }\n",72              "\n",73              "    .dataframe tbody tr th {\n",74              "        vertical-align: top;\n",75              "    }\n",76              "\n",77              "    .dataframe thead th {\n",78              "        text-align: right;\n",79              "    }\n",80              "</style>\n",81              "<table border=\"1\" class=\"dataframe\">\n",82              "  <thead>\n",83              "    <tr style=\"text-align: right;\">\n",84              "      <th></th>\n",85              "      <th>id</th>\n",86              "      <th>comment_text</th>\n",87              "      <th>toxic</th>\n",88              "      <th>severe_toxic</th>\n",89              "      <th>obscene</th>\n",90              "      <th>threat</th>\n",91              "      <th>insult</th>\n",92              "      <th>identity_hate</th>\n",93              "    </tr>\n",94              "  </thead>\n",95              "  <tbody>\n",96              "    <tr>\n",97              "      <th>0</th>\n",98              "      <td>0000997932d777bf</td>\n",99              "      <td>Explanation\\nWhy the edits made under my usern...</td>\n",100              "      <td>0</td>\n",101              "      <td>0</td>\n",102              "      <td>0</td>\n",103              "      <td>0</td>\n",104              "      <td>0</td>\n",105              "      <td>0</td>\n",106              "    </tr>\n",107              "    <tr>\n",108              "      <th>1</th>\n",109              "      <td>000103f0d9cfb60f</td>\n",110              "      <td>D'aww! He matches this background colour I'm s...</td>\n",111              "      <td>0</td>\n",112              "      <td>0</td>\n",113              "      <td>0</td>\n",114              "      <td>0</td>\n",115              "      <td>0</td>\n",116              "      <td>0</td>\n",117              "    </tr>\n",118              "    <tr>\n",119              "      <th>2</th>\n",120              "      <td>000113f07ec002fd</td>\n",121              "      <td>Hey man, I'm really not trying to edit war. It...</td>\n",122              "      <td>0</td>\n",123              "      <td>0</td>\n",124              "      <td>0</td>\n",125              "      <td>0</td>\n",126              "      <td>0</td>\n",127              "      <td>0</td>\n",128              "    </tr>\n",129              "    <tr>\n",130              "      <th>3</th>\n",131              "      <td>0001b41b1c6bb37e</td>\n",132              "      <td>\"\\nMore\\nI can't make any real suggestions on ...</td>\n",133              "      <td>0</td>\n",134              "      <td>0</td>\n",135              "      <td>0</td>\n",136              "      <td>0</td>\n",137              "      <td>0</td>\n",138              "      <td>0</td>\n",139              "    </tr>\n",140              "    <tr>\n",141              "      <th>4</th>\n",142              "      <td>0001d958c54c6e35</td>\n",143              "      <td>You, sir, are my hero. Any chance you remember...</td>\n",144              "      <td>0</td>\n",145              "      <td>0</td>\n",146              "      <td>0</td>\n",147              "      <td>0</td>\n",148              "      <td>0</td>\n",149              "      <td>0</td>\n",150              "    </tr>\n",151              "  </tbody>\n",152              "</table>\n",153              "</div>\n",154              "    <div class=\"colab-df-buttons\">\n",155              "\n",156              "  <div class=\"colab-df-container\">\n",157              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-df2ceea6-f5ae-46d5-a458-3f4523416299')\"\n",158              "            title=\"Convert this dataframe to an interactive table.\"\n",159              "            style=\"display:none;\">\n",160              "\n",161              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",162              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",163              "  </svg>\n",164              "    </button>\n",165              "\n",166              "  <style>\n",167              "    .colab-df-container {\n",168              "      display:flex;\n",169              "      gap: 12px;\n",170              "    }\n",171              "\n",172              "    .colab-df-convert {\n",173              "      background-color: #E8F0FE;\n",174              "      border: none;\n",175              "      border-radius: 50%;\n",176              "      cursor: pointer;\n",177              "      display: none;\n",178              "      fill: #1967D2;\n",179              "      height: 32px;\n",180              "      padding: 0 0 0 0;\n",181              "      width: 32px;\n",182              "    }\n",183              "\n",184              "    .colab-df-convert:hover {\n",185              "      background-color: #E2EBFA;\n",186              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",187              "      fill: #174EA6;\n",188              "    }\n",189              "\n",190              "    .colab-df-buttons div {\n",191              "      margin-bottom: 4px;\n",192              "    }\n",193              "\n",194              "    [theme=dark] .colab-df-convert {\n",195              "      background-color: #3B4455;\n",196              "      fill: #D2E3FC;\n",197              "    }\n",198              "\n",199              "    [theme=dark] .colab-df-convert:hover {\n",200              "      background-color: #434B5C;\n",201              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",202              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",203              "      fill: #FFFFFF;\n",204              "    }\n",205              "  </style>\n",206              "\n",207              "    <script>\n",208              "      const buttonEl =\n",209              "        document.querySelector('#df-df2ceea6-f5ae-46d5-a458-3f4523416299 button.colab-df-convert');\n",210              "      buttonEl.style.display =\n",211              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",212              "\n",213              "      async function convertToInteractive(key) {\n",214              "        const element = document.querySelector('#df-df2ceea6-f5ae-46d5-a458-3f4523416299');\n",215              "        const dataTable =\n",216              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",217              "                                                    [key], {});\n",218              "        if (!dataTable) return;\n",219              "\n",220              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",221              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",222              "          + ' to learn more about interactive tables.';\n",223              "        element.innerHTML = '';\n",224              "        dataTable['output_type'] = 'display_data';\n",225              "        await google.colab.output.renderOutput(dataTable, element);\n",226              "        const docLink = document.createElement('div');\n",227              "        docLink.innerHTML = docLinkHtml;\n",228              "        element.appendChild(docLink);\n",229              "      }\n",230              "    </script>\n",231              "  </div>\n",232              "\n",233              "\n",234              "    <div id=\"df-e8da1efc-ebe7-4508-b3ca-4ddc49e572e9\">\n",235              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e8da1efc-ebe7-4508-b3ca-4ddc49e572e9')\"\n",236              "                title=\"Suggest charts\"\n",237              "                style=\"display:none;\">\n",238              "\n",239              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",240              "     width=\"24px\">\n",241              "    <g>\n",242              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",243              "    </g>\n",244              "</svg>\n",245              "      </button>\n",246              "\n",247              "<style>\n",248              "  .colab-df-quickchart {\n",249              "      --bg-color: #E8F0FE;\n",250              "      --fill-color: #1967D2;\n",251              "      --hover-bg-color: #E2EBFA;\n",252              "      --hover-fill-color: #174EA6;\n",253              "      --disabled-fill-color: #AAA;\n",254              "      --disabled-bg-color: #DDD;\n",255              "  }\n",256              "\n",257              "  [theme=dark] .colab-df-quickchart {\n",258              "      --bg-color: #3B4455;\n",259              "      --fill-color: #D2E3FC;\n",260              "      --hover-bg-color: #434B5C;\n",261              "      --hover-fill-color: #FFFFFF;\n",262              "      --disabled-bg-color: #3B4455;\n",263              "      --disabled-fill-color: #666;\n",264              "  }\n",265              "\n",266              "  .colab-df-quickchart {\n",267              "    background-color: var(--bg-color);\n",268              "    border: none;\n",269              "    border-radius: 50%;\n",270              "    cursor: pointer;\n",271              "    display: none;\n",272              "    fill: var(--fill-color);\n",273              "    height: 32px;\n",274              "    padding: 0;\n",275              "    width: 32px;\n",276              "  }\n",277              "\n",278              "  .colab-df-quickchart:hover {\n",279              "    background-color: var(--hover-bg-color);\n",280              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",281              "    fill: var(--button-hover-fill-color);\n",282              "  }\n",283              "\n",284              "  .colab-df-quickchart-complete:disabled,\n",285              "  .colab-df-quickchart-complete:disabled:hover {\n",286              "    background-color: var(--disabled-bg-color);\n",287              "    fill: var(--disabled-fill-color);\n",288              "    box-shadow: none;\n",289              "  }\n",290              "\n",291              "  .colab-df-spinner {\n",292              "    border: 2px solid var(--fill-color);\n",293              "    border-color: transparent;\n",294              "    border-bottom-color: var(--fill-color);\n",295              "    animation:\n",296              "      spin 1s steps(1) infinite;\n",297              "  }\n",298              "\n",299              "  @keyframes spin {\n",300              "    0% {\n",301              "      border-color: transparent;\n",302              "      border-bottom-color: var(--fill-color);\n",303              "      border-left-color: var(--fill-color);\n",304              "    }\n",305              "    20% {\n",306              "      border-color: transparent;\n",307              "      border-left-color: var(--fill-color);\n",308              "      border-top-color: var(--fill-color);\n",309              "    }\n",310              "    30% {\n",311              "      border-color: transparent;\n",312              "      border-left-color: var(--fill-color);\n",313              "      border-top-color: var(--fill-color);\n",314              "      border-right-color: var(--fill-color);\n",315              "    }\n",316              "    40% {\n",317              "      border-color: transparent;\n",318              "      border-right-color: var(--fill-color);\n",319              "      border-top-color: var(--fill-color);\n",320              "    }\n",321              "    60% {\n",322              "      border-color: transparent;\n",323              "      border-right-color: var(--fill-color);\n",324              "    }\n",325              "    80% {\n",326              "      border-color: transparent;\n",327              "      border-right-color: var(--fill-color);\n",328              "      border-bottom-color: var(--fill-color);\n",329              "    }\n",330              "    90% {\n",331              "      border-color: transparent;\n",332              "      border-bottom-color: var(--fill-color);\n",333              "    }\n",334              "  }\n",335              "</style>\n",336              "\n",337              "      <script>\n",338              "        async function quickchart(key) {\n",339              "          const quickchartButtonEl =\n",340              "            document.querySelector('#' + key + ' button');\n",341              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",342              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",343              "          try {\n",344              "            const charts = await google.colab.kernel.invokeFunction(\n",345              "                'suggestCharts', [key], {});\n",346              "          } catch (error) {\n",347              "            console.error('Error during call to suggestCharts:', error);\n",348              "          }\n",349              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",350              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",351              "        }\n",352              "        (() => {\n",353              "          let quickchartButtonEl =\n",354              "            document.querySelector('#df-e8da1efc-ebe7-4508-b3ca-4ddc49e572e9 button');\n",355              "          quickchartButtonEl.style.display =\n",356              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",357              "        })();\n",358              "      </script>\n",359              "    </div>\n",360              "\n",361              "    </div>\n",362              "  </div>\n"363            ],364            "application/vnd.google.colaboratory.intrinsic+json": {365              "type": "dataframe",366              "variable_name": "df"367            }368          },369          "metadata": {},370          "execution_count": 2371        }372      ]373    },374    {375      "cell_type": "code",376      "source": [377        "df.columns"378      ],379      "metadata": {380        "colab": {381          "base_uri": "https://localhost:8080/"382        },383        "id": "owicRsi5rm7e",384        "outputId": "fe9fa428-5793-481e-a103-fb72bfdd5cce"385      },386      "execution_count": 3,387      "outputs": [388        {389          "output_type": "execute_result",390          "data": {391            "text/plain": [392              "Index(['id', 'comment_text', 'toxic', 'severe_toxic', 'obscene', 'threat',\n",393              "       'insult', 'identity_hate'],\n",394              "      dtype='object')"395            ]396          },397          "metadata": {},398          "execution_count": 3399        }400      ]401    },402    {403      "cell_type": "code",404      "source": [405        "df.info()"406      ],407      "metadata": {408        "colab": {409          "base_uri": "https://localhost:8080/"410        },411        "id": "kJZn2lsqrpUQ",412        "outputId": "911ab3df-0a05-4b7c-9c2f-52506af79e24"413      },414      "execution_count": 4,415      "outputs": [416        {417          "output_type": "stream",418          "name": "stdout",419          "text": [420            "<class 'pandas.core.frame.DataFrame'>\n",421            "RangeIndex: 159571 entries, 0 to 159570\n",422            "Data columns (total 8 columns):\n",423            " #   Column         Non-Null Count   Dtype \n",424            "---  ------         --------------   ----- \n",425            " 0   id             159571 non-null  object\n",426            " 1   comment_text   159571 non-null  object\n",427            " 2   toxic          159571 non-null  int64 \n",428            " 3   severe_toxic   159571 non-null  int64 \n",429            " 4   obscene        159571 non-null  int64 \n",430            " 5   threat         159571 non-null  int64 \n",431            " 6   insult         159571 non-null  int64 \n",432            " 7   identity_hate  159571 non-null  int64 \n",433            "dtypes: int64(6), object(2)\n",434            "memory usage: 9.7+ MB\n"435          ]436        }437      ]438    },439    {440      "cell_type": "code",441      "source": [442        "df.describe()\n"443      ],444      "metadata": {445        "colab": {446          "base_uri": "https://localhost:8080/",447          "height": 300448        },449        "id": "K3L-a_pjrrRb",450        "outputId": "39c20a4b-60d5-4f54-b0cb-ea3b97c74cf3"451      },452      "execution_count": 5,453      "outputs": [454        {455          "output_type": "execute_result",456          "data": {457            "text/plain": [458              "               toxic   severe_toxic        obscene         threat  \\\n",459              "count  159571.000000  159571.000000  159571.000000  159571.000000   \n",460              "mean        0.095844       0.009996       0.052948       0.002996   \n",461              "std         0.294379       0.099477       0.223931       0.054650   \n",462              "min         0.000000       0.000000       0.000000       0.000000   \n",463              "25%         0.000000       0.000000       0.000000       0.000000   \n",464              "50%         0.000000       0.000000       0.000000       0.000000   \n",465              "75%         0.000000       0.000000       0.000000       0.000000   \n",466              "max         1.000000       1.000000       1.000000       1.000000   \n",467              "\n",468              "              insult  identity_hate  \n",469              "count  159571.000000  159571.000000  \n",470              "mean        0.049364       0.008805  \n",471              "std         0.216627       0.093420  \n",472              "min         0.000000       0.000000  \n",473              "25%         0.000000       0.000000  \n",474              "50%         0.000000       0.000000  \n",475              "75%         0.000000       0.000000  \n",476              "max         1.000000       1.000000  "477            ],478            "text/html": [479              "\n",480              "  <div id=\"df-22e35136-2ae8-4f81-8059-382d66131b69\" class=\"colab-df-container\">\n",481              "    <div>\n",482              "<style scoped>\n",483              "    .dataframe tbody tr th:only-of-type {\n",484              "        vertical-align: middle;\n",485              "    }\n",486              "\n",487              "    .dataframe tbody tr th {\n",488              "        vertical-align: top;\n",489              "    }\n",490              "\n",491              "    .dataframe thead th {\n",492              "        text-align: right;\n",493              "    }\n",494              "</style>\n",495              "<table border=\"1\" class=\"dataframe\">\n",496              "  <thead>\n",497              "    <tr style=\"text-align: right;\">\n",498              "      <th></th>\n",499              "      <th>toxic</th>\n",500              "      <th>severe_toxic</th>\n",501              "      <th>obscene</th>\n",502              "      <th>threat</th>\n",503              "      <th>insult</th>\n",504              "      <th>identity_hate</th>\n",505              "    </tr>\n",506              "  </thead>\n",507              "  <tbody>\n",508              "    <tr>\n",509              "      <th>count</th>\n",510              "      <td>159571.000000</td>\n",511              "      <td>159571.000000</td>\n",512              "      <td>159571.000000</td>\n",513              "      <td>159571.000000</td>\n",514              "      <td>159571.000000</td>\n",515              "      <td>159571.000000</td>\n",516              "    </tr>\n",517              "    <tr>\n",518              "      <th>mean</th>\n",519              "      <td>0.095844</td>\n",520              "      <td>0.009996</td>\n",521              "      <td>0.052948</td>\n",522              "      <td>0.002996</td>\n",523              "      <td>0.049364</td>\n",524              "      <td>0.008805</td>\n",525              "    </tr>\n",526              "    <tr>\n",527              "      <th>std</th>\n",528              "      <td>0.294379</td>\n",529              "      <td>0.099477</td>\n",530              "      <td>0.223931</td>\n",531              "      <td>0.054650</td>\n",532              "      <td>0.216627</td>\n",533              "      <td>0.093420</td>\n",534              "    </tr>\n",535              "    <tr>\n",536              "      <th>min</th>\n",537              "      <td>0.000000</td>\n",538              "      <td>0.000000</td>\n",539              "      <td>0.000000</td>\n",540              "      <td>0.000000</td>\n",541              "      <td>0.000000</td>\n",542              "      <td>0.000000</td>\n",543              "    </tr>\n",544              "    <tr>\n",545              "      <th>25%</th>\n",546              "      <td>0.000000</td>\n",547              "      <td>0.000000</td>\n",548              "      <td>0.000000</td>\n",549              "      <td>0.000000</td>\n",550              "      <td>0.000000</td>\n",551              "      <td>0.000000</td>\n",552              "    </tr>\n",553              "    <tr>\n",554              "      <th>50%</th>\n",555              "      <td>0.000000</td>\n",556              "      <td>0.000000</td>\n",557              "      <td>0.000000</td>\n",558              "      <td>0.000000</td>\n",559              "      <td>0.000000</td>\n",560              "      <td>0.000000</td>\n",561              "    </tr>\n",562              "    <tr>\n",563              "      <th>75%</th>\n",564              "      <td>0.000000</td>\n",565              "      <td>0.000000</td>\n",566              "      <td>0.000000</td>\n",567              "      <td>0.000000</td>\n",568              "      <td>0.000000</td>\n",569              "      <td>0.000000</td>\n",570              "    </tr>\n",571              "    <tr>\n",572              "      <th>max</th>\n",573              "      <td>1.000000</td>\n",574              "      <td>1.000000</td>\n",575              "      <td>1.000000</td>\n",576              "      <td>1.000000</td>\n",577              "      <td>1.000000</td>\n",578              "      <td>1.000000</td>\n",579              "    </tr>\n",580              "  </tbody>\n",581              "</table>\n",582              "</div>\n",583              "    <div class=\"colab-df-buttons\">\n",584              "\n",585              "  <div class=\"colab-df-container\">\n",586              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-22e35136-2ae8-4f81-8059-382d66131b69')\"\n",587              "            title=\"Convert this dataframe to an interactive table.\"\n",588              "            style=\"display:none;\">\n",589              "\n",590              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",591              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",592              "  </svg>\n",593              "    </button>\n",594              "\n",595              "  <style>\n",596              "    .colab-df-container {\n",597              "      display:flex;\n",598              "      gap: 12px;\n",599              "    }\n",600              "\n",601              "    .colab-df-convert {\n",602              "      background-color: #E8F0FE;\n",603              "      border: none;\n",604              "      border-radius: 50%;\n",605              "      cursor: pointer;\n",606              "      display: none;\n",607              "      fill: #1967D2;\n",608              "      height: 32px;\n",609              "      padding: 0 0 0 0;\n",610              "      width: 32px;\n",611              "    }\n",612              "\n",613              "    .colab-df-convert:hover {\n",614              "      background-color: #E2EBFA;\n",615              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",616              "      fill: #174EA6;\n",617              "    }\n",618              "\n",619              "    .colab-df-buttons div {\n",620              "      margin-bottom: 4px;\n",621              "    }\n",622              "\n",623              "    [theme=dark] .colab-df-convert {\n",624              "      background-color: #3B4455;\n",625              "      fill: #D2E3FC;\n",626              "    }\n",627              "\n",628              "    [theme=dark] .colab-df-convert:hover {\n",629              "      background-color: #434B5C;\n",630              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",631              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",632              "      fill: #FFFFFF;\n",633              "    }\n",634              "  </style>\n",635              "\n",636              "    <script>\n",637              "      const buttonEl =\n",638              "        document.querySelector('#df-22e35136-2ae8-4f81-8059-382d66131b69 button.colab-df-convert');\n",639              "      buttonEl.style.display =\n",640              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",641              "\n",642              "      async function convertToInteractive(key) {\n",643              "        const element = document.querySelector('#df-22e35136-2ae8-4f81-8059-382d66131b69');\n",644              "        const dataTable =\n",645              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",646              "                                                    [key], {});\n",647              "        if (!dataTable) return;\n",648              "\n",649              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",650              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",651              "          + ' to learn more about interactive tables.';\n",652              "        element.innerHTML = '';\n",653              "        dataTable['output_type'] = 'display_data';\n",654              "        await google.colab.output.renderOutput(dataTable, element);\n",655              "        const docLink = document.createElement('div');\n",656              "        docLink.innerHTML = docLinkHtml;\n",657              "        element.appendChild(docLink);\n",658              "      }\n",659              "    </script>\n",660              "  </div>\n",661              "\n",662              "\n",663              "    <div id=\"df-c23adf78-0b47-4c31-bd23-a58637855bf8\">\n",664              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-c23adf78-0b47-4c31-bd23-a58637855bf8')\"\n",665              "                title=\"Suggest charts\"\n",666              "                style=\"display:none;\">\n",667              "\n",668              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",669              "     width=\"24px\">\n",670              "    <g>\n",671              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",672              "    </g>\n",673              "</svg>\n",674              "      </button>\n",675              "\n",676              "<style>\n",677              "  .colab-df-quickchart {\n",678              "      --bg-color: #E8F0FE;\n",679              "      --fill-color: #1967D2;\n",680              "      --hover-bg-color: #E2EBFA;\n",681              "      --hover-fill-color: #174EA6;\n",682              "      --disabled-fill-color: #AAA;\n",683              "      --disabled-bg-color: #DDD;\n",684              "  }\n",685              "\n",686              "  [theme=dark] .colab-df-quickchart {\n",687              "      --bg-color: #3B4455;\n",688              "      --fill-color: #D2E3FC;\n",689              "      --hover-bg-color: #434B5C;\n",690              "      --hover-fill-color: #FFFFFF;\n",691              "      --disabled-bg-color: #3B4455;\n",692              "      --disabled-fill-color: #666;\n",693              "  }\n",694              "\n",695              "  .colab-df-quickchart {\n",696              "    background-color: var(--bg-color);\n",697              "    border: none;\n",698              "    border-radius: 50%;\n",699              "    cursor: pointer;\n",700              "    display: none;\n",701              "    fill: var(--fill-color);\n",702              "    height: 32px;\n",703              "    padding: 0;\n",704              "    width: 32px;\n",705              "  }\n",706              "\n",707              "  .colab-df-quickchart:hover {\n",708              "    background-color: var(--hover-bg-color);\n",709              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",710              "    fill: var(--button-hover-fill-color);\n",711              "  }\n",712              "\n",713              "  .colab-df-quickchart-complete:disabled,\n",714              "  .colab-df-quickchart-complete:disabled:hover {\n",715              "    background-color: var(--disabled-bg-color);\n",716              "    fill: var(--disabled-fill-color);\n",717              "    box-shadow: none;\n",718              "  }\n",719              "\n",720              "  .colab-df-spinner {\n",721              "    border: 2px solid var(--fill-color);\n",722              "    border-color: transparent;\n",723              "    border-bottom-color: var(--fill-color);\n",724              "    animation:\n",725              "      spin 1s steps(1) infinite;\n",726              "  }\n",727              "\n",728              "  @keyframes spin {\n",729              "    0% {\n",730              "      border-color: transparent;\n",731              "      border-bottom-color: var(--fill-color);\n",732              "      border-left-color: var(--fill-color);\n",733              "    }\n",734              "    20% {\n",735              "      border-color: transparent;\n",736              "      border-left-color: var(--fill-color);\n",737              "      border-top-color: var(--fill-color);\n",738              "    }\n",739              "    30% {\n",740              "      border-color: transparent;\n",741              "      border-left-color: var(--fill-color);\n",742              "      border-top-color: var(--fill-color);\n",743              "      border-right-color: var(--fill-color);\n",744              "    }\n",745              "    40% {\n",746              "      border-color: transparent;\n",747              "      border-right-color: var(--fill-color);\n",748              "      border-top-color: var(--fill-color);\n",749              "    }\n",750              "    60% {\n",751              "      border-color: transparent;\n",752              "      border-right-color: var(--fill-color);\n",753              "    }\n",754              "    80% {\n",755              "      border-color: transparent;\n",756              "      border-right-color: var(--fill-color);\n",757              "      border-bottom-color: var(--fill-color);\n",758              "    }\n",759              "    90% {\n",760              "      border-color: transparent;\n",761              "      border-bottom-color: var(--fill-color);\n",762              "    }\n",763              "  }\n",764              "</style>\n",765              "\n",766              "      <script>\n",767              "        async function quickchart(key) {\n",768              "          const quickchartButtonEl =\n",769              "            document.querySelector('#' + key + ' button');\n",770              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",771              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",772              "          try {\n",773              "            const charts = await google.colab.kernel.invokeFunction(\n",774              "                'suggestCharts', [key], {});\n",775              "          } catch (error) {\n",776              "            console.error('Error during call to suggestCharts:', error);\n",777              "          }\n",778              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",779              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",780              "        }\n",781              "        (() => {\n",782              "          let quickchartButtonEl =\n",783              "            document.querySelector('#df-c23adf78-0b47-4c31-bd23-a58637855bf8 button');\n",784              "          quickchartButtonEl.style.display =\n",785              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",786              "        })();\n",787              "      </script>\n",788              "    </div>\n",789              "\n",790              "    </div>\n",791              "  </div>\n"792            ],793            "application/vnd.google.colaboratory.intrinsic+json": {794              "type": "dataframe",795              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 8,\n  \"fields\": [\n    {\n      \"column\": \"toxic\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.79787451925,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.09584448302009764,\n          1.0,\n          0.29437877159980147\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"severe_toxic\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.81205458228,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.009995550569965721,\n          1.0,\n          0.09947714085736063\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"obscene\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.80359926643,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.052948217407925,\n          1.0,\n          0.22393083291522248\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"threat\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.814672281485,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.002995531769557125,\n          1.0,\n          0.05464958623143207\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"insult\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.804149230666,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.04936360616904074,\n          1.0,\n          0.21662671727713204\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"identity_hate\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 56416.81242063,\n        \"min\": 0.0,\n        \"max\": 159571.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.00880485802558109,\n          1.0,\n          0.09342048594140996\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"796            }797          },798          "metadata": {},799          "execution_count": 5800        }801      ]802    },803    {804      "cell_type": "code",805      "source": [806        "df.isnull().sum()"807      ],808      "metadata": {809        "colab": {810          "base_uri": "https://localhost:8080/",811          "height": 335812        },813        "id": "QgdZds-lruIS",814        "outputId": "6ae96071-1323-42b8-c93f-91d31feecf64"815      },816      "execution_count": 6,817      "outputs": [818        {819          "output_type": "execute_result",820          "data": {821            "text/plain": [822              "id               0\n",823              "comment_text     0\n",824              "toxic            0\n",825              "severe_toxic     0\n",826              "obscene          0\n",827              "threat           0\n",828              "insult           0\n",829              "identity_hate    0\n",830              "dtype: int64"831            ],832            "text/html": [833              "<div>\n",834              "<style scoped>\n",835              "    .dataframe tbody tr th:only-of-type {\n",836              "        vertical-align: middle;\n",837              "    }\n",838              "\n",839              "    .dataframe tbody tr th {\n",840              "        vertical-align: top;\n",841              "    }\n",842              "\n",843              "    .dataframe thead th {\n",844              "        text-align: right;\n",845              "    }\n",846              "</style>\n",847              "<table border=\"1\" class=\"dataframe\">\n",848              "  <thead>\n",849              "    <tr style=\"text-align: right;\">\n",850              "      <th></th>\n",851              "      <th>0</th>\n",852              "    </tr>\n",853              "  </thead>\n",854              "  <tbody>\n",855              "    <tr>\n",856              "      <th>id</th>\n",857              "      <td>0</td>\n",858              "    </tr>\n",859              "    <tr>\n",860              "      <th>comment_text</th>\n",861              "      <td>0</td>\n",862              "    </tr>\n",863              "    <tr>\n",864              "      <th>toxic</th>\n",865              "      <td>0</td>\n",866              "    </tr>\n",867              "    <tr>\n",868              "      <th>severe_toxic</th>\n",869              "      <td>0</td>\n",870              "    </tr>\n",871              "    <tr>\n",872              "      <th>obscene</th>\n",873              "      <td>0</td>\n",874              "    </tr>\n",875              "    <tr>\n",876              "      <th>threat</th>\n",877              "      <td>0</td>\n",878              "    </tr>\n",879              "    <tr>\n",880              "      <th>insult</th>\n",881              "      <td>0</td>\n",882              "    </tr>\n",883              "    <tr>\n",884              "      <th>identity_hate</th>\n",885              "      <td>0</td>\n",886              "    </tr>\n",887              "  </tbody>\n",888              "</table>\n",889              "</div><br><label><b>dtype:</b> int64</label>"890            ]891          },892          "metadata": {},893          "execution_count": 6894        }895      ]896    },897    {898      "cell_type": "code",899      "source": [900        "labels = ['toxic', 'severe_toxic', 'obscene', 'threat', 'insult', 'identity_hate']\n",901        "df[labels].sum().sort_values().plot(kind='barh', figsize=(10,6), color='salmon')\n",902        "plt.title(\"Number of Comments per Label\")\n",903        "plt.xlabel(\"Count\")\n",904        "plt.show()"905      ],906      "metadata": {907        "colab": {908          "base_uri": "https://localhost:8080/",909          "height": 564910        },911        "id": "GxOkdiharvtg",912        "outputId": "6db186a2-7012-4050-9727-b9c27e82cf70"913      },914      "execution_count": 7,915      "outputs": [916        {917          "output_type": "display_data",918          "data": {919            "text/plain": [920              "<Figure size 1000x600 with 1 Axes>"921            ],922            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5MAAAIjCAYAAACeUk9IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATUVJREFUeJzt3XmcT/X////7a/YZM68ZyzCWYca+DbKGUFGD3mgliRBSllSEZEsZKUXayOdtS0mSNpImS5bsY51smXgzmsTMWGqMmfP7w2/Ot5cZ8mRmXia36+Xyuly8znmecx7n+Zzt7nnOeTksy7IEAAAAAIABD3cXAAAAAAAoeAiTAAAAAABjhEkAAAAAgDHCJAAAAADAGGESAAAAAGCMMAkAAAAAMEaYBAAAAAAYI0wCAAAAAIwRJgEAAAAAxgiTAIBctXLlSjkcDi1cuNDdpVyV3377TQ8++KCKFi0qh8OhyZMnu7sk3ATGjBkjh8OhEydO5No+u3fvroiIiFzbHwD8E8IkABRAs2bNksPhkJ+fn44ePZpt/e23366aNWu6obKC55lnntGyZcs0fPhwzZ07V61bt75i+7/++ktvvvmmGjVqpODgYPn5+aly5crq37+/9u3bl09V39iOHTumMWPGKC4uzt2l5Cq+rwDAlZe7CwAAXLu0tDRNmDBBU6dOdXcpBdYPP/ygDh06aPDgwf/Y9sSJE2rdurW2bNmi//znP3rkkUcUGBiovXv3av78+Zo+fbrOnz+fD1Xf2I4dO6axY8cqIiJCderUcXc5AIA8QpgEgAKsTp06+uCDDzR8+HCVKlXK3eXkq7Nnz6pQoULXvZ+kpCSFhIRcVdvu3btr27ZtWrhwoR544AGXdePGjdOIESOuux64T2Zmps6fPy8/Pz93lwIABQKXuQJAAfbCCy8oIyNDEyZMuGK7hIQEORwOzZo1K9s6h8OhMWPG2O+z7uXat2+fHn30UQUHBys0NFQjR46UZVk6cuSIOnToIKfTqbCwME2aNCnHY2ZkZOiFF15QWFiYChUqpPbt2+vIkSPZ2m3YsEGtW7dWcHCwAgIC1KJFC61du9alTVZNe/bs0SOPPKLChQvrtttuu+I5//LLL3rooYdUpEgRBQQE6NZbb9U333xjr8+6VNiyLL3zzjtyOBxyOByX3d+GDRv0zTff6PHHH88WJCXJ19dXr7/+usuyH374Qc2aNVOhQoUUEhKiDh06KD4+Psdzu9b+zrpHdcGCBRo7dqxKly6toKAgPfjgg0pJSVFaWpoGDRqk4sWLKzAwUD169FBaWlq2+j/88EPVq1dP/v7+KlKkiB5++OFs45V1meeePXt0xx13KCAgQKVLl9bEiRNd6mnQoIEkqUePHna/Zn3t7d+/Xw888IDCwsLk5+enMmXK6OGHH1ZKSspl+/7vx96yZYuaNGkif39/RUZG6v3338/WNi0tTaNHj1bFihXl6+ur8PBwPf/889nO2+FwqH///po3b55q1KghX19fffvtt1es45/s2LFD3bt3V/ny5eXn56ewsDD17NlTf/zxR47tT5w4oY4dO8rpdKpo0aJ6+umn9ddff2VrdzXjAwD5jZlJACjAIiMj1a1bN33wwQcaNmxYrs5OdurUSdWqVdOECRP0zTff6OWXX1aRIkU0bdo03XnnnXr11Vc1b948DR48WA0aNFDz5s1dtn/llVfkcDg0dOhQJSUlafLkyWrVqpXi4uLk7+8v6WLYatOmjerVq6fRo0fLw8NDM2fO1J133qkff/xRDRs2dNnnQw89pEqVKmn8+PGyLOuytf/2229q0qSJzp07p4EDB6po0aKaPXu22rdvr4ULF+q+++5T8+bNNXfuXHXt2lV33XWXunXrdsX++PLLLyVJXbt2var++/7779WmTRuVL19eY8aM0Z9//qmpU6eqadOm2rp1a7YHpVxvf8fExMjf31/Dhg3TgQMHNHXqVHl7e8vDw0OnTp3SmDFj9NNPP2nWrFmKjIzUqFGj7G1feeUVjRw5Uh07dlSvXr30+++/a+rUqWrevLm2bdvmMnN76tQptW7dWvfff786duyohQsXaujQoYqKilKbNm1UrVo1vfTSSxo1apT69OmjZs2aSZKaNGmi8+fPKzo6WmlpaRowYIDCwsJ09OhRff3110pOTlZwcPAV+/TUqVNq27atOnbsqM6dO2vBggV68skn5ePjo549e0q6OLvYvn17rVmzRn369FG1atW0c+dOvfnmm9q3b58WL17sss8ffvhBCxYsUP/+/VWsWLHrfoDN8uXL9csvv6hHjx4KCwvT7t27NX36dO3evVs//fRTtv+w6NixoyIiIhQTE6OffvpJb731lk6dOqU5c+bYbUzGBwDylQUAKHBmzpxpSbI2bdpkHTx4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uKzr1auXJkyYoF69eql+/fpavXq1PauTF4oUKaLbbrtNPXr00G+//abJkyerYsWK6t27tyTJw8NDM2bMUJs2bVSjRg316NFDpUuX1tGjR7VixQo5nU599dVX13TsYcOG6eOPP1abNm00cOBAFSlSRLNnz9ahQ4f02WefycPj2v4vdc6cObr77rt1//33q127dmrZsqUKFSqk/fv3a/78+UpMTLQ/a/K1115TmzZt1LhxYz3++OP2R4MEBwe7fK6nu1WoUEEvv/yyhg8froSEBN17770KCgrSoUOH9Pnnn6tPnz52SDbZZ0hIiN5//30FBQWpUKFCatSokbZv367+/fvroYceUuXKlXXhwgXNnTtXnp6eOX5256VKlSqlV199VQkJCapcubI++eQTxcXFafr06fbDh7p27aoFCxaob9++WrFihZo2baqMjAz9/PPPWrBggZYtW6b69etfU19JF/+TI6cZ1MjISHXp0kXNmzfXxIkTlZ6ertKlS+u7777ToUOHLru/Q4cOqX379mrdurXWr1+vDz/8UI888ohq164tKW/GBwByC2ESAP5FKlasqEcffVSzZ8/Otm7UqFH6/ffftXDhQi1YsEBt2rTR0qVLVbx48Typ5YUXXtCOHTsUExOj06dPq2XLlnr33XcVEBBgt7n99tu1fv16jRs3Tm+//bbOnDmjsLAwNWrUyOWpnaZKlCihdevWaejQoZo6dar++usv1apVS1999ZXuueeea95vaGio1q1bp3fffVeffPKJRowYofPnz6tcuXJq3769nn76abttq1at9O2332r06NEaNWqUvL291aJFC7366qu5/tCX6zVs2DBVrlxZb775psaOHSvp4r2Fd999t9q3b2+8P29vb82ePVvDhw9X3759deHCBc2cOVMtWrRQdHS0vvrqKx09elQBAQGqXbu2li5daj/x9EoKFy6s2bNna8CAAfrggw9UokQJvf322/Z/UEgX/5Ni8eLFevPNNzVnzhx9/vnnCggIUPny5fX0009f96WiSUlJGjlyZLblLVu2VJcuXfTRRx9pwIABeuedd2RZlu6++24tXbr0sp8B+8knn2jUqFEaNmyYvLy81L9/f7322msubXJ7fAAgtzisa3lqAgAAQD66/fbbdeLECe3atcvdpQAA/n/cMwkAAAAAMEaYBAAAAAAYI0wCAAAAAIxx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/X3yyScqVaqUmjVrJknq37+/1q9fr/nz52vHjh166KGH1Lp1azvESdK5c+f06quvasaMGdq9e7eKFy9+VdvlpEmTJpo8ebKcTqcSExOVmJiowYMHS5K6d++uzZs368svv9T69etlWZbatm2r9PR0hYaG6r///a/GjBmjzZs36/Tp0+ratav69++vli1b5nis9957T/369VOfPn20c+dOffnll6pYseJla0tLS1NqaqrLCwAAAADcxWH9Pc0Z2rp1q+rVq6eEhASVK1fOZV3FihU1btw4de7c2V728ssva8mSJVq3bp1+//13lSpVSj/88IMdHps0aaLmzZtrwoQJOnz4sMqXL6/Dhw+rVKlS9j5atWqlhg0bavz48Zo1a5Z69OihuLg41a5dW5KuarsrmTVrlgYNGqTk5GR72f79+1W5cmWtXbtWTZo0kST98ccfCg8P1+zZs/XQQw9Jkvr166fvv/9e9evX186dO7Vp0yb5+vpKujgzuXjxYsXFxUmSSpcurR49eujll1++qr4eM2aMxo4dm235iWH95PTzvap9QPIePcndJQAAAAC5KjU1VcHBwUpJSZHT6cy3417XPZO1a9dWy5YtFRUVpejoaN1999168MEH5ePjo4MHD+rxxx9X79697fYXLlxQcHCwJCk0NFR333235s2bp2bNmunQoUNav369pk2bJknauXOnMjIyVLlyZZdjpqWlqWjRovZ7Hx8f1apVy35/tduZiI+Pl5eXlxo1amQvK1q0qKpUqaL4+Hh72euvv66aNWvq008/1ZYtW+wgeamkpCQdO3bssrOWORk+fLieffZZ+31qaqrCw8Ov4WwAAAAA4PpdV5j09PTU8uXLtW7dOn333XeaOnWqRowYoa+++kqS9MEHH7gEsKxtsnTp0kUDBw7U1KlT9dFHHykqKkpRUVGSpDNnzsjT01Nbtmxx2UaSy4Ns/P395XA47PdXu11eOHjwoI4dO6bMzEwlJCTY53Ipf39/4337+vpeNpwCAAAAQH677qe5OhwONW3aVE2bNtWoUaNUrlw5rV27VqVKldIvv/yiLl26XHbbDh06qE+fPvr222/10UcfqVu3bva6W265RRkZGUpKSrIvg70a17pdFh8fH2VkZLgsq1atmi5cuKANGza4XOa6d+9eVa9eXZJ0/vx5Pfroo+rUqZOqVKmiXr16aefO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0sRef+HCBatmzZpWq1atrG3btllLliyxihUrZg0fPtxu88svv1gBAQHWs88+a+3Zs8eaOnWq5enpaX377bf5er43so0bN1oRERFWrVq1rKefftpeTv/nrZMnT1rlypWzunfvbm3YsMH65ZdfrGXLllkHDhyw20yYMMEKDg62Fi9ebG3fvt1q3769FRkZaf355592m9atW1u1a9e2fvrpJ+vHH3+0KlasaHXu3Nlen5KSYpUoUcLq0qWLtWvXLuvjjz+2/P39rWnTpuXr+d6IXnnlFato0aLW119/bR06dMj69NNPrcDAQGvKlCl2G8Yg9yxZssQaMWKEtWjRIkuS9fnnn7usz6++Xrt2reXp6WlNnDjR2rNnj/Xiiy9a3t7e1s6dO/O8D9ztSmOQnJxstWrVyvrkk0+sn3/+2Vq/fr3VsGFDq169ei77YAyu3T99D2RZtGiRVbt2batUqVLWm2++6bKO/r8+/zQGBw4csIoUKWINGTLE2rp1q3XgwAHriy++cPk7/0b6+4gwWQA1bNjQ6tevn/0+IyPDKlWqlBUTE+PGqgq+pKQkS5K1atUqy7Iu/lLz9va2Pv30U7tNfHy8Jclav369ZVkXfyB4eHhYx48ft9u89957ltPptNLS0izLsqznn3/eqlGjhsuxOnXqZEVHR+f1KRUIp0+ftipVqmQtX77catGihR0m6f+8N3ToUOu222677PrMzEwrLCzMeu211+xlycnJlq+vr/Xxxx9blmVZe/bssSRZmzZtstssXbrUcjgc1tGjRy3Lsqx3333XKly4sD0mWceuUqVKbp9SgXPPPfdYPXv2dFl2//33W126dLEsizHIS5f+EZeffd2xY0frnnvucamnUaNG1hNPPJGr53iju1KYybJx40ZLkvXrr79alsUY5KbL9f///vc/q3Tp0tauXbuscuXKuYRJ+j935TQGnTp1sh599NHLbnOj/X3EZa4FzPnz57Vlyxa1atXKXubh4aFWrVpp/fr1bqys4EtJSZEkFSlSRJK0ZcsWpaenu/R11apVVbZsWbuv169fr6ioKJUoUcJuEx0drdTUVO3evdtu8/d9ZLVhvC7q16+f7rnnnmx9RP/nvS+//FL169fXQw89pOLFi+uWW27RBx98YK8/dOiQjh8/7tJ/wcHBatSokcsYhISEqH79+nabVq1aycPDQxs2bLDbNG/eXD4+Pnab6Oho7d27V6dOncrr07yhNWnSRLGxsdq3b58kafv27VqzZo3atGkjiTHIT/nZ1/xcunopKSlyOBwKCQmRxBjktczMTHXt2lVDhgxRjRo1sq2n//NWZmamvvnmG1WuXFnR0dEqXry4GjVq5HIp7I329xFhsoA5ceKEMjIyXL44JKlEiRI6fvy4m6oq+DIzMzVo0CA1bdpUNWvWlCQdP35cPj4+9i+wLH/v6+PHj+c4FlnrrtQmNTVVf/75Z16cToExf/58bd26VTExMdnW0f9575dfftF7772nSpUqadmyZXryySc1cOBAzZ49W9L/68Mr/bw5fvy4ihcv7rLey8tLRYoUMRqnm9WwYcP08MMPq2rVqvL29tYtt9yiQYMGqUuXLpIYg/yUn319uTaMhau//vpLQ4cOVefOneV0OiUxBnnt1VdflZeXlwYOHJjjevo/byUlJenMmTOaMGGCWrdure+++0733Xef7r//fq1atUrSjff3kZfRGQL/Uv369dOuXbu0Zs0ad5dy0zhy5IiefvppLV++XH5+fu4u56aUmZmp+vXra/z48ZKkW265Rbt27dL777+vxx57zM3V3RwWLFigefPm6aOPPlKNGjUUFxenQYMGqVSpUowBbmrp6enq2LGjLMvSe++95+5ybgpbtmzRlClTtHXrVjkcDneXc1PKzMyUJHXo0EHPPPOMJKlOnTpat26d3n//fbVo0cKd5eWImckCplixYvL09Mz2xKbffvtNYWFhbqqqYOvfv7++/vprrVixQmXKlLGXh4WF6fz580pOTnZp//e+DgsLy3EsstZdqY3T6ZS/v39un06BsWXLFiUlJalu3bry8vKSl5eXVq1apbfeekteXl4qUaIE/Z/HSpYsqerVq7ssq1atmv3EuKw+vNLPm7CwMCUlJbmsv3Dhgk6ePGk0TjerIUOG2LOTUVFR6tq1q5555hl7tp4xyD/52deXa8NYXJQVJH/99VctX77cnpWUGIO89OOPPyopKUlly5a1fy//+uuveu655xQRESGJ/s9rxYoVk5eX1z/+br6R/j4iTBYwPj4+qlevnmJjY+1lmZmZio2NVePGjd1YWcFjWZb69++vzz//XD/88IMiIyNd1terV0/e3t4ufb13714dPnzY7uvGjRtr586dLj9Ys37xZf0gaNy4scs+strc7OPVsmVL7dy5U3Fxcfarfv366tKli/1v+j9vNW3aNNvH4ezbt0/lypWTJEVGRiosLMyl/1JTU7VhwwaXMUhOTtaWLVvsNj/88IMyMzPVqFEju83q1auVnp5ut1m+fLmqVKmiwoUL59n5FQTnzp2Th4frr2JPT0/7f6cZg/yTn33Nz6XLywqS+/fv1/fff6+iRYu6rGcM8k7Xrl21Y8cOl9/LpUqV0pAhQ7Rs2TJJ9H9e8/HxUYMGDa74u/mG+/vU6HE9uCHMnz/f8vX1tWbNmmXt2bPH6tOnjxUSEuLyxCb8syeffNIKDg62Vq5caSUmJtqvc+fO2W369u1rlS1b1vrhhx+szZs3W40bN7YaN25sr8969PLdd99txcXFWd9++60VGhqa46OXhwwZYsXHx1vvvPMOH01xGX9/mqtl0f95bePGjZaXl5f1yiuvWPv377fmzZtnBQQEWB9++KHdZsKECVZISIj1xRdfWDt27LA6dOiQ40cl3HLLLdaGDRusNWvWWJUqVXJ5THxycrJVokQJq2vXrtauXbus+fPnWwEBATfdx1Lk5LHHHrNKly5tfzTIokWLrGLFilnPP/+83YYxyD2nT5+2tm3bZm3bts2SZL3xxhvWtm3b7CeF5ldfr1271vLy8rJef/11Kz4+3ho9evRN87EIVxqD8+fPW+3bt7fKlCljxcXFufxu/vuTQRmDa/dP3wOXuvRprpZF/1+vfxqDRYsWWd7e3tb06dOt/fv32x/Z8eOPP9r7uJH+PiJMFlBTp061ypYta/n4+FgNGza0fvrpJ3eXVOBIyvE1c+ZMu82ff/5pPfXUU1bhwoWtgIAA67777rMSExNd9pOQkGC1adPG8vf3t4oVK2Y999xzVnp6ukubFStWWHXq1LF8fHys8uXLuxwD/8+lYZL+z3tfffWVVbNmTcvX19eqWrWqNX36dJf1mZmZ1siRI60SJUpYvr6+VsuWLa29e/e6tPnjjz+szp07W4GBgZbT6bR69OhhnT592qXN9u3brdtuu83y9fW1SpcubU2YMCHPz60gSE1NtZ5++mmrbNmylp+fn1W+fHlrxIgRLn84Mwa5Z8WKFTn+3H/ssccsy8rfvl6wYIFVuXJly8fHx6pRo4b1zTff5Nl530iuNAaHDh267O/mFStW2PtgDK7dP30PXCqnMEn/X5+rGYP/+7//sypWrGj5+flZtWvXthYvXuyyjxvp7yOHZVmW2VwmAAAAAOBmxz2TAAAAAABjhEkAAAAAgDHCJAAAAADAGGESAAAAAGCMMAkAAAAAMEaYBAAAAAAYI0wCAAAAAIwRJgEAAAAAxgiTAAAAAABjhEkAANzk+PHjGjBggMqXLy9fX1+Fh4erXbt2io2Nzdc6HA6HFi9enK/HBAAUfF7uLgAAgJtRQkKCmjZtqpCQEL322muKiopSenq6li1bpn79+unnn392d4kAAFyRw7Isy91FAABws2nbtq127NihvXv3qlChQi7rkpOTFRISosOHD2vAgAGKjY2Vh4eHWrduralTp6pEiRKSpO7duys5OdllVnHQoEGKi4vTypUrJUm33367atWqJT8/P82YMUM+Pj7q27evxowZI0mKiIjQr7/+am9frlw5JSQk5OWpAwD+JbjMFQCAfHby5El9++236tevX7YgKUkhISHKzMxUhw4ddPLkSa1atUrLly/XL7/8ok6dOhkfb/bs2SpUqJA2bNigiRMn6qWXXtLy5cslSZs2bZIkzZw5U4mJifZ7AAD+CZe5AgCQzw4cOCDLslS1atXLtomNjdXOnTt16NAhhYeHS5LmzJmjGjVqaNOmTWrQoMFVH69WrVoaPXq0JKlSpUp6++23FRsbq7vuukuhoaGSLgbYsLCw6zgrAMDNhplJAADy2dXcYRIfH6/w8HA7SEpS9erVFRISovj4eKPj1apVy+V9yZIllZSUZLQPAAAuRZgEACCfVapUSQ6H47ofsuPh4ZEtmKanp2dr5+3t7fLe4XAoMzPzuo4NAABhEgCAfFakSBFFR0frnXfe0dmzZ7OtT05OVrVq1XTkyBEdOXLEXr5nzx4lJyerevXqkqTQ0FAlJia6bBsXF2dcj7e3tzIyMoy3AwDc3AiTAAC4wTvvvKOMjAw1bNhQn332mfbv36/4+Hi99dZbaty4sVq1aqWoqCh16dJFW7du1caNG9WtWze1aNFC9evXlyTdeeed2rx5s+bMmaP9+/dr9OjR2rVrl3EtERERio2N1fHjx3Xq1KncPlUAwL8UYRIAADcoX768tm7dqjvuuEPPPfecatasqbvuukuxsbF677335HA49MUXX6hw4cJq3ry5WrVqpfLly+uTTz6x9xEdHa2RI0fq+eefV4MGDXT69Gl169bNuJZJkyZp+fLlCg8P1y233JKbpwkA+BfjcyYBAAAAAMaYmQQAAAAAGCNMAgAAAACMESYBAAAAAMYIkwAAAAAAY4RJAAAAAIAxwiQAAAAAwBhhEgAAAABgjDAJAAAAADBGmAQAAAAAGCNMAgAAAACMESYBAAAAAMb+Pz+fU9uYHNm8AAAAAElFTkSuQmCC\n"923          },924          "metadata": {}925        }926      ]927    },928    {929      "cell_type": "code",930      "source": [931        "df['clean'] = (df[labels].sum(axis=1) == 0)\n",932        "df['clean'].value_counts().plot(kind='bar', color=['green','red'])\n",933        "plt.title(\"Clean vs Toxic Comments\")\n",934        "plt.xticks([0, 1], ['Toxic', 'Clean'], rotation=0)\n",935        "plt.show()"936      ],937      "metadata": {938        "colab": {939          "base_uri": "https://localhost:8080/",940          "height": 472941        },942        "id": "5SxT55zCry3m",943        "outputId": "e03ef068-198a-4074-fc0c-d2df63e419cd"944      },945      "execution_count": 8,946      "outputs": [947        {948          "output_type": "display_data",949          "data": {950            "text/plain": [951              "<Figure size 640x480 with 1 Axes>"952            ],953            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHHCAYAAABTMjf2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAP9lJREFUeJzt3XlclXX+///nQWQRPOAKnsQld5I0NRFNyyRxXCbKSs1RclCnCVxCTW1xmSwLs9LcxmrUz0xOaqWZC8YXM0sJFSOX1MzcGjtYg3CERkW5fn/047p5hFQMQrge99vtut087/frel/vN+fEeXadc13YDMMwBAAAYEEe5T0BAACA8kIQAgAAlkUQAgAAlkUQAgAAlkUQAgAAlkUQAgAAlkUQAgAAlkUQAgAAlkUQAgAAlkUQAm4SjRo10mOPPVbe07CEpUuXymaz6dixY+U9FQDljCAElLEjR47oL3/5i2699Vb5+PjIbrerS5cumjNnjv73v/+V9/RuCo0aNZLNZrvmtnTp0vKe6q/ieb62DRs2aNq0aeU9DcCNjb81BpSd9evX6+GHH5a3t7eGDh2q1q1b68KFC/r888/1/vvv67HHHtPixYsl/RIG7rnnnpv6zb6srFmzRrm5uebjDRs26N///rdee+011a5d22zv3Lmzbr311t98vEuXLik/P1/e3t6y2Wy/ebySPM9WFh8fr/nz54u3HdxMPMt7AkBldfToUQ0cOFANGzbU5s2bVa9ePbMvLi5O3377rdavX1+OM7x5REdHuz12Op3697//rejoaDVq1KjUj1elShVVqVKlVMbieQYqNj4aA8pIYmKicnNz9fbbb7u9ORZq2rSpxowZc9UxsrOzNXbsWIWEhMjb21tNmzbVyy+/rIKCAre6V155RZ07d1atWrXk6+ur9u3b67333isyns1mU3x8vNasWaPWrVvL29tbt912m5KSkq46j8zMTHl6emr69OlF+g4dOiSbzaZ58+ZJkvLz8zV9+nQ1a9ZMPj4+qlWrlu666y4lJydf9RjXcvHiRT3//PNq0qSJvL291ahRIz399NM6f/68JMkwDHXv3l116tTR6dOnzf0uXLigsLAwNWnSRHl5eZJ+/TtCGzdu1N13363q1avLbrfrzjvv1PLly686r5I+z9daR6FGjRqpb9++2rJlizp06CBfX1+FhYVpy5YtkqQPPvhAYWFh8vHxUfv27fXll1+67f/YY4/J399fJ06cUN++feXv769bbrlF8+fPlyTt3btX9957r/z8/NSwYcNi13k9r79jx47JZrPplVde0eLFi8113Xnnndq5c6fbfAqPffnHnYXeffddtW/f3vzZh4WFac6cOVf92QOlwgBQJm655Rbj1ltvve76hg0bGjExMebjvLw84/bbbzdq1aplPP3008aiRYuMoUOHGjabzRgzZozbvvXr1zeeeOIJY968ecarr75qdOzY0ZBkrFu3zq1OktGmTRujXr16xvPPP2+8/vrrxq233mpUq1bN+Omnn646v3vvvdcIDQ0t0j59+nSjSpUqhtPpNAzDMJ5++mnDZrMZI0aMMN58801j9uzZxqBBg4yXXnrpun8Ws2bNMiQZR48eNdtiYmIMScZDDz1kzJ8/3xg6dKghyYiOjjZrvvvuO8Pf39944IEHzLZJkyYZNpvN+PTTT822JUuWFBl/yZIlhs1mM1q3bm288MILxvz5843hw4cbQ4YMuepcS/o8X886DOOX10OLFi2MevXqGdOmTTNee+0145ZbbjH8/f2Nf/3rX0aDBg2Ml156yXjppZeMgIAAo2nTpsalS5fcjuPj42OEhoYajz/+uDF//nyjc+fOhiRjyZIlhsPhMCZMmGC88cYbxm233WZUqVLF+O6778z9r/f1d/ToUUOScccddxhNmzY1Xn75ZSMxMdGoXbu2Ub9+fePChQuGYRjG9u3bjfvuu8+QZPzzn/80N8MwjI8//tiQZPTo0cOYP3++MX/+fCM+Pt54+OGHr/vnCtwoghBQBnJycgxJxv3333/d+1wZhJ5//nnDz8/P+Oabb9zqJk2aZFSpUsU4ceKE2fbzzz+71Vy4cMFo3bq1ce+997q1SzK8vLyMb7/91mz76quvDEnGG2+8cdX5/f3vfzckGXv37nVrDw0NdTtOmzZtjD59+lx9sddwZRDKyMgwJBnDhw93qxs/frwhydi8eXORef7rX/8yvvjiC6NKlSrG2LFj3fa7MghlZ2cb1atXN8LDw43//e9/brUFBQW/Os+SPs8lWUfDhg0NScb27dvNtk2bNhmSDF9fX+P48eNF1vzJJ5+YbYWB68UXXzTbzpw5Y/j6+ho2m8149913zfaDBw8akoypU6eabdf7+isMQrVq1TKysrLMug8//NCQ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UUpNTZUkHT16VE6n060mICBA4eHhZs2Vzp8/L5fL5bYBAIDKq9SD0MsvvyxPT0+NHj262H6n06m6deu6tXl6eqpmzZpyOp1mTVBQkFtN4eNr1Vzef/l+xdVcaebMmQoICDC3kJCQa64XAABUXKUahNLT0zVnzhwtXbpUNlvF+2hl8uTJysnJMbeTJ0+W95QAAEAZKtUg9Nlnn+n06dNq0KCBPD095enpqePHj2vcuHFq1KiRJCk4OFinT5922+/ixYvKyspScHCwWZOZmelWU/j4WjWX91++X3E1V/L29pbdbnfbAABA5VWqQWjIkCHas2ePMjIyzM3hcGjChAnatGmTJCkiIkLZ2dlKT08399u8ebMKCgoUHh5u1mzdulX5+flmTXJyslq0aKEaNWqYNSkpKW7HT05OVkREhCSpcePGCg4OdqtxuVxKS0szawAAgLWV+G+N5ebm6ttvvzUfHz16VBkZGapZs6YaNGigWrVqudVXrVpVwcHBatGihSSpVatW6tWrl0aMGKFFixYpPz9f8fHxGjhwoHmp/aOPPqrp06crNjZWEydO1L59+zRnzhy99tpr5rhjxozR3XffrdmzZ6tPnz569913tWvXLvMSe5vNprFjx2rGjBlq1qyZGjdurOeee04Oh6PIVW4AAMCaShyEdu3ape7du5uPExISJEkxMTFaunTpdY3xzjvvKD4+Xj169JCHh4f69++vuXPnmv0BAQH6+OOPFRcXp/bt26t27dqaMmWK272GOnfurOXLl+vZZ5/V008/rWbNmmnNmjVq3bq1WfPUU08pLy9PI0eOVHZ2tu666y4lJSXJx8enpMsGAACV0G+6j1Blx32EYBXcRwhAZVKu9xECAACoKAhCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAskochLZu3ap+/frJ4XDIZrNpzZo1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8Dsypt7wrwEAuOmU5P27VL8jdPToUTmdTkVGRpptAQEBCg8PV2pqqiQpNTVVgYGBZgiSpMjISHl4eCgtLc2s6datmxmCJCkqKkqHDh3SmTNnzJrLj1NYU3ic65nLlc6fPy+Xy+W2AQCAyqtUg5DT6ZQkBQUFubUHBQWZfU6nU3Xr1nXr9/T0VM2aNd1qihvj8mP8Ws3l/deay5VmzpypgIAAcwsJCbmOVQMAgIqKq8YuM3nyZOXk5JjbyZMny3tKAACgDJVqEAoODpYkZWZmurVnZmaafcHBwTp9+rRb/8WLF5WVleVWU9wYlx/j12ou77/WXK7k7e0tu93utgEAgMqrVINQ48aNFRwcrJSUFLPN5XIpLS1NERERkqSIiAhlZ2crPT3drNm8ebMKCgoUHh5u1mzdulX5+flmTXJyslq0aKEaNWqYNZcfp7Cm8DjXMxcAAGBtJQ5Cubm5ysjIUEZGhqRfvpSckZGhEydOyGazaezYsZoxY4bWrl2rvXv3aujQoXI4HOaVZa1atVKvXr00YsQI7dixQ9u2bVN8fLwGDhwoh8MhSXr00Ufl5eWl2NhY7d+/XytWrNCcOXOUkJBgzmPMmDFKSkrS7NmzdfDgQU2bNk27du1SfHy8JF3XXAAAgLV5lnSHXbt2qXv37ubjwnASExOjpUuX6qmnnlJeXp5Gjhyp7Oxs3XXXXUpKSpKPj4+5zzvvvKP4+Hj16NFDHh4e6t+/v+bOnWv2BwQE6OOPP1ZcXJzat2+v2rVra8qUKW73GurcubOWL1+uZ599Vk8//bSaNWumNWvWqHXr1mbN9cwFAABY12+6j1Blx32EYBXcRwhAZVJu9xECAACoSAhCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsko9CF26dEnPPfecGjduLF9fXzVp0kTPP/+8DMMwawzD0JQpU1SvXj35+voqMjJShw8fdhsnKytLgwcPlt1uV2BgoGJjY5Wbm+tWs2fPHnXt2lU+Pj4KCQlRYmJikfmsWrVKLVu2lI+Pj8LCwrRhw4bSXjIAAKigSj0Ivfzyy1q4cKHmzZunAwcO6OWXX1ZiYqLeeOMNsyYxMVFz587VokWLlJaWJj8/P0VFRencuXNmzeDBg7V//34lJydr3bp12rp1q0aOHGn2u1wu9ezZUw0bNlR6erpmzZqladOmafHixWbN9u3bNWjQIMXGxurLL79UdHS0oqOjtW/fvtJeNgAAqIBsxuWnakpB3759FRQUpLffftts69+/v3x9ffWvf/1LhmHI4XBo3LhxGj9+vCQpJydHQUFBWrp0qQYOHKgDBw4oNDRUO3fuVIcOHSRJSUlJ6t27t77//ns5HA4tXLhQzzzzjJxOp7y8vCRJkyZN0po1a3Tw4EFJ0oABA5SXl6d169aZc+nUqZPatm2rRYsWXXMtLpdLAQEBysnJkd1uL7WfUUVgm24r7yngd2RMLdVfAwBQrkry/l3qZ4Q6d+6slJQUffPNN5Kkr776Sp9//rn+8Ic/SJKOHj0qp9OpyMhIc5+AgACFh4crNTVVkpSamqrAwEAzBElSZGSkPDw8lJaWZtZ069bNDEGSFBUVpUOHDunMmTNmzeXHKawpPM6Vzp8/L5fL5bYBAIDKy7O0B5w0aZJcLpdatmypKlWq6NKlS3rhhRc0ePBgSZLT6ZQkBQUFue0XFBRk9jmdTtWtW9d9op6eqlmzpltN48aNi4xR2FejRg05nc6rHudKM2fO1PTp029k2QAAoAIq9TNCK1eu1DvvvKPly5dr9+7dWrZsmV555RUtW7astA9V6iZPnqycnBxzO3nyZHlPCQAAlKFSPyM0YcIETZo0SQMHDpQkhYWF6fjx45o5c6ZiYmIUHBwsScrMzFS9evXM/TIzM9W2bVtJUnBwsE6fPu027sWLF5WVlWXuHxwcrMzMTLeawsfXqinsv5K3t7e8vb1vZNkAAKACKvUzQj///LM8PNyHrVKligoKCiRJjRs3VnBwsFJSUsx+l8ultLQ0RURESJIiIiKUnZ2t9PR0s2bz5s0qKChQeHi4WbN161bl5+ebNcnJyWrRooVq1Khh1lx+nMKawuMAAABrK/Ug1K9fP73wwgtav369jh07ptWrV+vVV1/VAw88IEmy2WwaO3asZsyYobVr12rv3r0aOnSoHA6HoqOjJUmtWrVSr169NGLECO3YsUPbtm1TfHy8Bg4cKIfDIUl69NFH5eXlpdjYWO3fv18rVqzQnDlzlJCQYM5lzJgxSkpK0uzZs3Xw4EFNmzZNu3btUnx8fGkvGwAAVEClfvn82bNn9dxzz2n16tU6ffq0HA6HBg0apClTpphXeBmGoalTp2rx4sXKzs7WXXfdpQULFqh58+bmOFlZWYqPj9dHH30kDw8P9e/fX3PnzpW/v79Zs2fPHsXFxWnnzp2qXbu2Ro0apYkTJ7rNZ9WqVXr22Wd17NgxNWvWTImJierdu/d1rYXL52EVXD4PoDIpyft3qQehyoQgBKsgCAGoTMr1PkIAAAAVBUEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYVpkEof/85z/605/+pFq1asnX11dhYWHatWuX2W8YhqZMmaJ69erJ19dXkZGROnz4sNsYWVlZGjx4sOx2uwIDAxUbG6vc3Fy3mj179qhr167y8fFRSEiIEhMTi8xl1apVatmypXx8fBQWFqYNGzaUxZIBAEAFVOpB6MyZM+rSpYuqVq2qjRs36uuvv9bs2bNVo0YNsyYxMVFz587VokWLlJaWJj8/P0VFRencuXNmzeDBg7V//34lJydr3bp12rp1q0aOHGn2u1wu9ezZUw0bNlR6erpmzZqladOmafHixWbN9u3bNWjQIMXGxurLL79UdHS0oqOjtW/fvtJeNgAAqIBshmEYpTngpEmTtG3bNn322WfF9huGIYfDoXHjxmn8+PGSpJycHAUFBWnp0qUaOHCgDhw4oNDQUO3cuVMdOnSQJCUlJal37976/vvv5XA4tHDhQj3zzDNyOp3y8vIyj71mzRodPHhQkjRgwADl5eVp3bp15vE7deqktm3batGiRddc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V3clJyfLbrcrNDTUrLl8jMKawjG8vLzUvn17t5qCggKlpKSYNQAAwNpK/TtC1atXV+vWrd3a/Pz8VKtWLbM9NjZWCQkJqlmzpux2u0aNGqWIiAh16tRJktSzZ0+FhoZqyJAhSkxMlNPp1LPPPqu4uDh5e3tLkh5//HHNmzdPTz31lP785z9r8+bNWrlypdavX28eNyEhQTExMerQoYM6duyo119/XXl5eRo2bFhpLxsAAFRAZfJl6Wt57bXX5OHhof79++v8+fOKiorSggULzP4qVapo3bp1+utf/6qIiAj5+fkpJiZGf/vb38yaxo0ba/369XryySc1Z84c1a9fX2+99ZaioqLMmgEDBujHH3/UlClT5HQ61bZtWyUlJRX5AjUAALCmMruPUGXAfYRgFdxHCEBlclPcRwgAAOBmRxACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWRRACAACWVepBaObMmbrzzjtVvXp11a1bV9HR0Tp06JBbzblz5xQXF6datWrJ399f/fv3V2ZmplvNiRMn1KdPH1WrVk1169bVhAkTdPHiRbeaLVu2qF27dvL29lbTpk21dOnSIvOZP3++GjVqJB8fH4WHh2vHjh2lvWQAAFBBlXoQ+vTTTxUXF6cvvvhCycnJys/PV8+ePZWXl2fWPPnkk/roo4+0atUqffrppzp16pQefPBBs//SpUvq06ePLly4oO3bt2vZsmVaunSppkyZYtYcPXpUffr0Uffu3ZWRkaGxY8dq+PDh2rRpk1mzYsUKJSQkaOrUqdq9e7fatGmjqKgonT59urSXDQAAKiCbYRhGWR7gxx9/VN26dfXpp5+qW7duysnJUZ06dbR8+XI99NBDkqSDBw+qVatWSk1NVadOnbRx40b17dtXp06dUlBQkCRp0aJFmjhxon788Ud5eXlp4sSJWr9+vfbt22ce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2aODBw9q4cKF/CIFysD8+fN16dIldezYUe+//74OHz6sAwcOaO7cuYqIiChSP3jwYNWuXVv333+/PvvsMx09elRbtmzR6NGj9f3330v65UzTP//5Tx04cEBpaWkaPHgwZ3otiiAESxg9erQSEhI0btw4hYWFKSkpSWvXrlWzZs30448/KjY2VtOmTVO7du0k/XKlSFBQkB5//PFix2vevLk+/vhjffXVV+rYsaMiIiL04YcfytOTT5uB0nbrrbdq9+7d6t69u8aNG6fWrVvrvvvuU0pKihYuXFikvlq1atq6dasaNGigBx98UK1atVJsbKzOnTsnu90uSXr77bd15swZtWvXTkOGDNHo0aNVt27d33tpuAnYjBv5JhoAAEAlwBkhAABgWQQhAABgWQQhAABgWQQhAABgWQQhAABgWQQhAABgWQQhAABgWQQhAJXKsWPHZLPZlJGRUd5TAVABEIQAAIBlEYQAAIBlEYQAVEgFBQVKTExU06ZN5e3trQYNGuiFF14otnbfvn36wx/+IH9/fwUFBWnIkCFufyA3KSlJd911lwIDA1WrVi317dtXR44cMfsLP2774IMP1L17d1WrVk1t2rRRampqma8TQNkiCAGokCZPnqyXXnpJzz33nL7++mstX75cQUFBReqys7N177336o477tCuXbuUlJSkzMxMPfLII2ZNXl6eEhIStGvXLqWkpMjDw0MPPPCACgoK3MZ65plnNH78eGVkZKh58+YaNGiQLl68WOZrBVB2+KOrACqcs2fPqk6dOpo3b56GDx/u1nfs2DE1btxYX375pdq2basZM2bos88+06ZNm8ya77//XiEhITp06JCaN29eZPyffvpJderU0d69e9W6dWtzzLfeekuxsbGSpK+//lq33XabDhw4oJYtW5btggGUGc4IAahwDhw4oPPnz6tHjx7XrP3qq6/0ySefyN/f39wKg0vhx1+HDx/WoEGDdOutt8put6tRo0aSpBMnTriNdfvtt5v/rlevniTp9OnTpbEkAOXEs7wnAAAl5evre921ubm56tevn15++eUifYVhpl+/fmrYsKHefPNNORwOFRQUqHXr1rpw4YJbfdWqVc1/22w2SSry8RmAioUgBKDCadasmXx9fZWSklLko7ErtWvXTu+//74aNWokT8+iv/L++9//6tChQ3rzzTfVtWtXSdLnn39eJvMGcPPhozEAFY6Pj48mTpyop556Sv/3f/+nI0eO6IsvvtDbb79dpDYuLk5ZWVkaNGiQdu7cqSNHjmjTpk0aNmyYLl26pBo1aqhWrVpavHixvv32W23evFkJCQnlsCoA5YEzQgAqpOeee06enp6aMmWKTp06pXr16unxxx8vUudwOLRt2zZNnDhRPXv21Pnz59WwYUP16tVLHh4estlsevfddzV69Gi1bt1aLVq00Ny5c3XPPff8/osC8LvjqjEAAGBZfDQGAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAsiyAEAAAs6/8DIYZNKn8qhU8AAAAASUVORK5CYII=\n"954          },955          "metadata": {}956        }957      ]958    },959    {960      "cell_type": "code",961      "source": [962        "import re\n",963        "import nltk\n",964        "from nltk.corpus import stopwords\n",965        "from nltk.stem import WordNetLemmatizer\n",966        "\n",967        "# Download necessary NLTK data if not already downloaded\n",968        "try:\n",969        "    nltk.data.find('corpora/stopwords')\n",970        "except LookupError:\n",971        "    nltk.download('stopwords')\n",972        "\n",973        "try:\n",974        "    nltk.data.find('corpora/wordnet')\n",975        "except LookupError:\n",976        "    nltk.download('wordnet')\n",977        "\n",978        "# Instantiate lemmatizer once for efficiency\n",979        "lemmatizer = WordNetLemmatizer()\n",980        "\n",981        "def clean_text(text):\n",982        "    # lowercase\n",983        "    text = text.lower()\n",984        "\n",985        "    # expand contractions\n",986        "    text = re.sub(r\"what's\", \"what is \", text)\n",987        "    text = re.sub(r\"\\'s\", \" \", text)\n",988        "    text = re.sub(r\"\\'ve\", \" have \", text)\n",989        "    text = re.sub(r\"can't\", \"can not \", text)\n",990        "    text = re.sub(r\"n't\", \" not \", text)\n",991        "    text = re.sub(r\"i'm\", \"i am \", text)\n",992        "    text = re.sub(r\"\\'re\", \" are \", text)\n",993        "    text = re.sub(r\"\\'d\", \" would \", text)\n",994        "    text = re.sub(r\"\\'ll\", \" will \", text)\n",995        "    text = re.sub(r\"\\'scuse\", \" excuse \", text)\n",996        "\n",997        "    # remove non-letters\n",998        "    text = re.sub('[^a-zA-Z]', ' ', text)\n",999        "\n",1000        "    # remove extra spaces (fixed SyntaxWarning with r'\\s+')\n",1001        "    text = re.sub(r'\\s+', ' ', text).strip()\n",1002        "\n",1003        "    # remove stopwords\n",1004        "    stoplist = set(stopwords.words('english'))\n",1005        "    words = [word for word in text.split() if word not in stoplist]\n",1006        "\n",1007        "    # lemmatization using the globally instantiated lemmatizer\n",1008        "    words = [lemmatizer.lemmatize(word) for word in words]\n",1009        "\n",1010        "    return \" \".join(words)\n",1011        "\n",1012        "df['comment_text'] = df['comment_text'].fillna('').apply(clean_text)"1013      ],1014      "metadata": {1015        "colab": {1016          "base_uri": "https://localhost:8080/"1017        },1018        "id": "kZbJd56Vr25o",1019        "outputId": "99f02b0b-7415-4e70-eca8-667db1d99ad6"1020      },1021      "execution_count": 9,1022      "outputs": [1023        {1024          "output_type": "stream",1025          "name": "stderr",1026          "text": [1027            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",1028            "[nltk_data]   Unzipping corpora/stopwords.zip.\n",1029            "[nltk_data] Downloading package wordnet to /root/nltk_data...\n"1030          ]1031        }1032      ]1033    },1034    {1035      "cell_type": "code",1036      "source": [1037        "from sklearn.model_selection import train_test_split\n",1038        "\n",1039        "X = df['comment_text']\n",1040        "y = df[labels]"1041      ],1042      "metadata": {1043        "id": "A73ykc_ssGdQ"1044      },1045      "execution_count": 10,1046      "outputs": []1047    },1048    {1049      "cell_type": "code",1050      "source": [1051        "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"1052      ],1053      "metadata": {1054        "id": "N6MSNfkzsj7L"1055      },1056      "execution_count": 11,1057      "outputs": []1058    },1059    {1060      "cell_type": "code",1061      "source": [1062        "from sklearn.feature_extraction.text import TfidfVectorizer\n",1063        "\n",1064        "vectorizer = TfidfVectorizer(max_features=10000)\n",1065        "X_train_vec = vectorizer.fit_transform(X_train)\n",1066        "X_test_vec = vectorizer.transform(X_test)"1067      ],1068      "metadata": {1069        "id": "LDLQyP6rsl2s"1070      },1071      "execution_count": 12,1072      "outputs": []1073    },1074    {1075      "cell_type": "code",1076      "source": [1077        "from sklearn.linear_model import LogisticRegression\n",1078        "from sklearn.multiclass import OneVsRestClassifier\n",1079        "\n",1080        "model = OneVsRestClassifier(LogisticRegression(max_iter=200))\n",1081        "model.fit(X_train_vec, y_train)"1082      ],1083      "metadata": {1084        "colab": {1085          "base_uri": "https://localhost:8080/",1086          "height": 1661087        },1088        "id": "C16Yl4mJsndD",1089        "outputId": "c9ec3070-359f-4ece-a359-18f518ef3284"1090      },1091      "execution_count": 13,1092      "outputs": [1093        {1094          "output_type": "execute_result",1095          "data": {1096            "text/plain": [1097              "OneVsRestClassifier(estimator=LogisticRegression(max_iter=200))"1098            ],1099            "text/html": [1100              "<style>#sk-container-id-1 {\n",1101              "  /* Definition of color scheme common for light and dark mode */\n",1102              "  --sklearn-color-text: #000;\n",1103              "  --sklearn-color-text-muted: #666;\n",1104              "  --sklearn-color-line: gray;\n",1105              "  /* Definition of color scheme for unfitted estimators */\n",1106              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",1107              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",1108              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",1109              "  --sklearn-color-unfitted-level-3: chocolate;\n",1110              "  /* Definition of color scheme for fitted estimators */\n",1111              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",1112              "  --sklearn-color-fitted-level-1: #d4ebff;\n",1113              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",1114              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",1115              "\n",1116              "  /* Specific color for light theme */\n",1117              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",1118              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",1119              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",1120              "  --sklearn-color-icon: #696969;\n",1121              "\n",1122              "  @media (prefers-color-scheme: dark) {\n",1123              "    /* Redefinition of color scheme for dark theme */\n",1124              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",1125              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",1126              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",1127              "    --sklearn-color-icon: #878787;\n",1128              "  }\n",1129              "}\n",1130              "\n",1131              "#sk-container-id-1 {\n",1132              "  color: var(--sklearn-color-text);\n",1133              "}\n",1134              "\n",1135              "#sk-container-id-1 pre {\n",1136              "  padding: 0;\n",1137              "}\n",1138              "\n",1139              "#sk-container-id-1 input.sk-hidden--visually {\n",1140              "  border: 0;\n",1141              "  clip: rect(1px 1px 1px 1px);\n",1142              "  clip: rect(1px, 1px, 1px, 1px);\n",1143              "  height: 1px;\n",1144              "  margin: -1px;\n",1145              "  overflow: hidden;\n",1146              "  padding: 0;\n",1147              "  position: absolute;\n",1148              "  width: 1px;\n",1149              "}\n",1150              "\n",1151              "#sk-container-id-1 div.sk-dashed-wrapped {\n",1152              "  border: 1px dashed var(--sklearn-color-line);\n",1153              "  margin: 0 0.4em 0.5em 0.4em;\n",1154              "  box-sizing: border-box;\n",1155              "  padding-bottom: 0.4em;\n",1156              "  background-color: var(--sklearn-color-background);\n",1157              "}\n",1158              "\n",1159              "#sk-container-id-1 div.sk-container {\n",1160              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",1161              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",1162              "     so we also need the `!important` here to be able to override the\n",1163              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",1164              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",1165              "  display: inline-block !important;\n",1166              "  position: relative;\n",1167              "}\n",1168              "\n",1169              "#sk-container-id-1 div.sk-text-repr-fallback {\n",1170              "  display: none;\n",1171              "}\n",1172              "\n",1173              "div.sk-parallel-item,\n",1174              "div.sk-serial,\n",1175              "div.sk-item {\n",1176              "  /* draw centered vertical line to link estimators */\n",1177              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",1178              "  background-size: 2px 100%;\n",1179              "  background-repeat: no-repeat;\n",1180              "  background-position: center center;\n",1181              "}\n",1182              "\n",1183              "/* Parallel-specific style estimator block */\n",1184              "\n",1185              "#sk-container-id-1 div.sk-parallel-item::after {\n",1186              "  content: \"\";\n",1187              "  width: 100%;\n",1188              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",1189              "  flex-grow: 1;\n",1190              "}\n",1191              "\n",1192              "#sk-container-id-1 div.sk-parallel {\n",1193              "  display: flex;\n",1194              "  align-items: stretch;\n",1195              "  justify-content: center;\n",1196              "  background-color: var(--sklearn-color-background);\n",1197              "  position: relative;\n",1198              "}\n",1199              "\n",1200              "#sk-container-id-1 div.sk-parallel-item {\n",

Showing the first 1,200 of 3406 lines. Download the file for the rest.