{
  "cells": [
    {
      "cell_type": "code",
      "source": [
        "!date\n",
        "!python --version"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "U9dNWJt9W1Be",
        "outputId": "ca3399c4-c821-45d2-953b-c721e1e855e4"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Thu Jun  6 02:27:27 AM UTC 2024\n",
            "Python 3.10.12\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hTZlSbLjW0Xg"
      },
      "source": [
        "# 極性推定（ネガポジ推定）の例\n",
        "テキストとして書かれている文章に対して良い印象(positive)を持つか悪い印象(negative)を持つかを判定したい場面がある。代表的な算出方法としては、単語ごとに印象値を設定し、その平均値として文章の良し悪しを判断することが多い。\n",
        "\n",
        "なお、分野により印象が変わることがあるため、一般的には手動チューニングしていくことが必要。例えば「音が小さい」という文は、洗濯機や冷蔵庫のような大型家電に対するレビュー文ならばポジティブな表現だろう。その一方でスピーカーやイヤホンに対するレビュー文ならば、（音が小さくて）聞き取りづらいというネガティブな表現と捉えることが妥当であるかもしれない。\n",
        "\n",
        "ここでは代表的な例として[単語感情極性対応表](http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html)を用いて、出現した極性単語についての評価の平均値により文の極性を推定してみる。\n",
        "\n",
        "- 極性辞書の例\n",
        "    - [単語感情極性対応表](http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html), 2005年公開, 52,671語。Shift-JISで書かれてます。\n",
        "    - [日本語評価極性辞書](https://www.cl.ecei.tohoku.ac.jp/Open_Resources-Japanese_Sentiment_Polarity_Dictionary.html), 2008年公開, 評価が客観的なものか主観的なものかに分けて評価. 評価値そのものはない。"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# spacy, ginzaインストール\n",
        "!pip install -U ginza ja_ginza"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ODLbKEPrW22w",
        "outputId": "1747bf9c-796c-4083-9874-2d416e04d0dc"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: ginza in /usr/local/lib/python3.10/dist-packages (5.2.0)\n",
            "Requirement already satisfied: ja_ginza in /usr/local/lib/python3.10/dist-packages (5.2.0)\n",
            "Requirement already satisfied: spacy<4.0.0,>=3.4.4 in /usr/local/lib/python3.10/dist-packages (from ginza) (3.7.4)\n",
            "Requirement already satisfied: plac>=1.3.3 in /usr/local/lib/python3.10/dist-packages (from ginza) (1.4.3)\n",
            "Requirement already satisfied: SudachiPy<0.7.0,>=0.6.2 in /usr/local/lib/python3.10/dist-packages (from ginza) (0.6.8)\n",
            "Requirement already satisfied: SudachiDict-core>=20210802 in /usr/local/lib/python3.10/dist-packages (from ginza) (20240409)\n",
            "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (3.0.12)\n",
            "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (1.0.5)\n",
            "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (1.0.10)\n",
            "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (2.0.8)\n",
            "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (3.0.9)\n",
            "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (8.2.3)\n",
            "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (1.1.3)\n",
            "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (2.4.8)\n",
            "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (2.0.10)\n",
            "Requirement already satisfied: weasel<0.4.0,>=0.1.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (0.3.4)\n",
            "Requirement already satisfied: typer<0.10.0,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (0.9.4)\n",
            "Requirement already satisfied: smart-open<7.0.0,>=5.2.1 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (6.4.0)\n",
            "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (4.66.4)\n",
            "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (2.31.0)\n",
            "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (2.7.3)\n",
            "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (3.1.4)\n",
            "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (67.7.2)\n",
            "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (24.0)\n",
            "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (3.4.0)\n",
            "Requirement already satisfied: numpy>=1.19.0 in /usr/local/lib/python3.10/dist-packages (from spacy<4.0.0,>=3.4.4->ginza) (1.25.2)\n",
            "Requirement already satisfied: language-data>=1.2 in /usr/local/lib/python3.10/dist-packages (from langcodes<4.0.0,>=3.2.0->spacy<4.0.0,>=3.4.4->ginza) (1.2.0)\n",
            "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<4.0.0,>=3.4.4->ginza) (0.7.0)\n",
            "Requirement already satisfied: pydantic-core==2.18.4 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<4.0.0,>=3.4.4->ginza) (2.18.4)\n",
            "Requirement already satisfied: typing-extensions>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<4.0.0,>=3.4.4->ginza) (4.12.1)\n",
            "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<4.0.0,>=3.4.4->ginza) (3.3.2)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<4.0.0,>=3.4.4->ginza) (3.7)\n",
            "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<4.0.0,>=3.4.4->ginza) (2.0.7)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<4.0.0,>=3.4.4->ginza) (2024.6.2)\n",
            "Requirement already satisfied: blis<0.8.0,>=0.7.8 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy<4.0.0,>=3.4.4->ginza) (0.7.11)\n",
            "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy<4.0.0,>=3.4.4->ginza) (0.1.5)\n",
            "Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer<0.10.0,>=0.3.0->spacy<4.0.0,>=3.4.4->ginza) (8.1.7)\n",
            "Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from weasel<0.4.0,>=0.1.0->spacy<4.0.0,>=3.4.4->ginza) (0.16.0)\n",
            "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->spacy<4.0.0,>=3.4.4->ginza) (2.1.5)\n",
            "Requirement already satisfied: marisa-trie>=0.7.7 in /usr/local/lib/python3.10/dist-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy<4.0.0,>=3.4.4->ginza) (1.1.1)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!curl -O https://ie.u-ryukyu.ac.jp/~tnal/2022/dm/static/r_assesment.pkl"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "h38DNr_4XznO",
        "outputId": "3c439a25-9d36-47ec-9501-07edf8f1819f"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n",
            "                                 Dload  Upload   Total   Spent    Left  Speed\n",
            "100 34834  100 34834    0     0  46268      0 --:--:-- --:--:-- --:--:-- 46321\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "id": "oQKLkeEbW0Xk",
        "outputId": "e2595236-593e-482a-e6b9-a6b85df870eb"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   title  grade  required     q_id                       comment\n",
              "0  工業数学Ⅰ      1      True  Q21 (1)                          特になし\n",
              "1  工業数学Ⅰ      1      True  Q21 (2)            正直わかりずらい。むだに間があるし。\n",
              "2  工業数学Ⅰ      1      True  Q21 (2)          例題を取り入れて理解しやすくしてほしい。\n",
              "3  工業数学Ⅰ      1      True  Q21 (2)                          特になし\n",
              "4  工業数学Ⅰ      1      True  Q21 (2)  スライドに書く文字をもう少しわかりやすくして欲しいです。"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-9dd367dc-65a2-417e-b635-bf44a7b08a0c\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>title</th>\n",
              "      <th>grade</th>\n",
              "      <th>required</th>\n",
              "      <th>q_id</th>\n",
              "      <th>comment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>工業数学Ⅰ</td>\n",
              "      <td>1</td>\n",
              "      <td>True</td>\n",
              "      <td>Q21 (1)</td>\n",
              "      <td>特になし</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>工業数学Ⅰ</td>\n",
              "      <td>1</td>\n",
              "      <td>True</td>\n",
              "      <td>Q21 (2)</td>\n",
              "      <td>正直わかりずらい。むだに間があるし。</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>工業数学Ⅰ</td>\n",
              "      <td>1</td>\n",
              "      <td>True</td>\n",
              "      <td>Q21 (2)</td>\n",
              "      <td>例題を取り入れて理解しやすくしてほしい。</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>工業数学Ⅰ</td>\n",
              "      <td>1</td>\n",
              "      <td>True</td>\n",
              "      <td>Q21 (2)</td>\n",
              "      <td>特になし</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>工業数学Ⅰ</td>\n",
              "      <td>1</td>\n",
              "      <td>True</td>\n",
              "      <td>Q21 (2)</td>\n",
              "      <td>スライドに書く文字をもう少しわかりやすくして欲しいです。</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9dd367dc-65a2-417e-b635-bf44a7b08a0c')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-9dd367dc-65a2-417e-b635-bf44a7b08a0c button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-9dd367dc-65a2-417e-b635-bf44a7b08a0c');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-8969d56d-c7ad-423e-a9d7-449e30b42875\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-8969d56d-c7ad-423e-a9d7-449e30b42875')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <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",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-8969d56d-c7ad-423e-a9d7-449e30b42875 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "assesment_df",
              "summary": "{\n  \"name\": \"assesment_df\",\n  \"rows\": 170,\n  \"fields\": [\n    {\n      \"column\": \"title\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 16,\n        \"samples\": [\n          \"\\u5de5\\u696d\\u6570\\u5b66\\u2160\",\n          \"\\u6280\\u8853\\u8005\\u306e\\u502b\\u7406\",\n          \"\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\\u3068\\u30c7\\u30fc\\u30bf\\u69cb\\u9020\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"grade\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 1,\n        \"max\": 3,\n        \"num_unique_values\": 3,\n        \"samples\": [\n          1,\n          2,\n          3\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"required\",\n      \"properties\": {\n        \"dtype\": \"boolean\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          false,\n          true\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"q_id\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"Q21 (2)\",\n          \"Q22\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"comment\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 153,\n        \"samples\": [\n          \"\\u30fb\\u6559\\u79d1\\u66f8\\u304c\\u5fc5\\u8981\\u306a\\u306e\\u304b\\u5fc5\\u8981\\u3067\\u306a\\u3044\\u306e\\u304b\\u304c\\u66d6\\u6627\\u306a\\u307e\\u307e\\u6388\\u696d\\u304c\\u59cb\\u307e\\u308a\\u3001\\u975e\\u5e38\\u306b\\u4e0d\\u5b89\\u3060\\u3063\\u305f\\u305f\\u3081\\u3001\\u6559\\u79d1\\u66f8\\u304c\\u5fc5\\u9808\\u304b\\u305d\\u3046\\u3067\\u306a\\u3044\\u306e\\u304b\\u306f\\u6700\\u521d\\u306b\\u306f\\u3063\\u304d\\u308a\\u3057\\u3066\\u6b32\\u3057\\u3044\\u3002\\r\\n\\u30fb\\u8ab2\\u984c\\u3092\\u51fa\\u3059\\u3060\\u3051\\u51fa\\u3055\\u305b\\u3066\\u304a\\u3044\\u3066\\u3001\\u63a1\\u70b9\\u3082\\u305b\\u305a\\u3001\\u3069\\u3046\\u3044\\u3063\\u305f\\u89e3\\u7b54\\u304c\\u6b63\\u3057\\u3044\\u306e\\u304b\\u3068\\u3044\\u3063\\u305f\\u6307\\u91dd\\u3082\\u51fa\\u3059\\u306e\\u304c\\u3068\\u3066\\u3082\\u9045\\u3044\\u3002\\u8ab2\\u984c\\u306f\\u89e3\\u304f\\u3060\\u3051\\u3067\\u306f\\u77e5\\u8b58\\u306e\\u5b9a\\u7740\\u306b\\u3064\\u306a\\u304c\\u3089\\u306a\\u3044\\u3068\\u601d\\u3044\\u307e\\u3059\\u304c\\u3001\\u305d\\u3053\\u3089\\u3078\\u3093\\u306f\\u3069\\u3046\\u306a\\u3093\\u3067\\u3057\\u3087\\u3046\\u304b\\u3002\\r\\n\\u30fb\\u914d\\u5e03\\u8cc7\\u6599\\u3068\\u3057\\u3066\\u3001\\u904e\\u53bb\\u554f\\u3082\\u914d\\u5e03\\u3057\\u3066\\u304f\\u308c\\u308b\\u3068\\u3068\\u3066\\u3082\\u52a9\\u304b\\u308b\\u306a\\u3001\\u3068\\u601d\\u3044\\u307e\\u3059\\u3002\\u3054\\u691c\\u8a0e\\u304a\\u9858\\u3044\\u3057\\u307e\\u3059\\u3002\",\n          \"\\u30fb\\u4e2d\\u9593\\u30c6\\u30b9\\u30c8\\u3092\\u5ef6\\u671f\\u3057\\u7d9a\\u3051\\u3001\\u6700\\u7d42\\u7684\\u306b\\u4e2d\\u9593\\u30fb\\u671f\\u672b\\u8a66\\u9a13\\u3092\\uff12\\u9031\\u7d9a\\u3051\\u3066\\u3084\\u308b\\u3053\\u3068\\u3068\\u306a\\u308a\\u3001\\u8a08\\u753b\\u6027\\u304c\\u6b20\\u3051\\u3066\\u3044\\u308b\\u3002\\r\\n\\u30fb\\u914d\\u5e03\\u8cc7\\u6599\\u306e\\u8aa4\\u5b57\\u8131\\u5b57\\u304c\\u591a\\u3059\\u304e\\u308b\\u3002\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 8
        }
      ],
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import spacy\n",
        "\n",
        "nlp = spacy.load(\"ja_ginza\")\n",
        "\n",
        "assesment_df = pd.read_pickle('r_assesment.pkl')\n",
        "assesment_df.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RDaUQ9zPW0Xm"
      },
      "source": [
        "## 極性辞書を扱いやすいように整形する\n",
        "本の辞書は「単語:読み:品詞:評価値」の形式で行単位に極性単語が列挙されている。これを ``{単語:[品詞, 極性値]}`` の形で読み込もう。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "F4-cDWPZW0Xm",
        "outputId": "5dd7770c-b96b-4f7c-a1f4-ffc57cd4a25d"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n",
            "                                 Dload  Upload   Total   Spent    Left  Speed\n",
            "100 1683k  100 1683k    0     0  1030k      0  0:00:01  0:00:01 --:--:-- 1029k\n"
          ]
        }
      ],
      "source": [
        "# 極性辞書のダウンロード\n",
        "!curl -O http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bbqT2TBRW0Xm",
        "outputId": "4a2afd5f-2711-4f79-e84e-089f010c579e"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "52671\n",
            "['動詞', 1.0]\n",
            "['動詞', -0.999999]\n"
          ]
        }
      ],
      "source": [
        "pn_ja = {}\n",
        "with open('pn_ja.dic', 'r', encoding='shift_jis') as f:\n",
        "    for line in f.readlines():\n",
        "        line = line.rstrip()\n",
        "        items = line.split(':')\n",
        "        word = items[0]\n",
        "        pos = items[2]\n",
        "        value = float(items[3])\n",
        "        pn_ja[word] = [pos, value]\n",
        "\n",
        "print(len(pn_ja))\n",
        "print(pn_ja['優れる'])\n",
        "print(pn_ja['死ぬ'])\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jLVDV-PPW0Xn"
      },
      "source": [
        "## コメント文の極性を推定してみる"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "FSmKO-_2W0Xn",
        "outputId": "72108d98-4cc8-464a-e38b-248d90d4e314"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "comment = 正直わかりずらい。むだに間があるし。\n",
            "  total_score = -0.23687, words = ['正直', '間']\n",
            "comment = 例題を取り入れて理解しやすくしてほしい。\n",
            "  total_score = -0.20361, words = ['例題', '理解']\n",
            "comment = スライドに書く文字をもう少しわかりやすくして欲しいです。\n",
            "  total_score = -0.78033, words = ['スライド', '文字', 'もう', '少し', '欲しい']\n",
            "comment = 話す際の間が多く聞き取りずらかった\n",
            "  total_score = -0.73225, words = ['話す', '際', '間']\n",
            "comment = 課題に関してですが、一度に3つの課題は大変なので１ずつでお願いします。\n",
            "  total_score = -0.39952, words = ['課題', '関する', '一度', '課題', '大変', '願う']\n",
            "comment = 高校の範囲では行列を扱わなかったので不安だったのですが、講義の中の説明で十分足りたことに安心しました。\n",
            "  total_score = -0.42417, words = ['高校', '範囲', '行列', '扱う', 'ない', '不安', '講義', '中', '説明', '十分', '足りる', '安心']\n",
            "comment = まだ１年次ということもあり、特に難しくなくてよかったです。\n",
            "  total_score = -0.59872, words = ['年次', 'と', '難しい', 'ない']\n",
            "comment = 機械トラブルの操作で授業が止まることがあった。\n",
            "新しいことが学べて大学って感じがした。\n",
            "  total_score = -0.47896, words = ['機械', 'トラブル', '操作', '授業', '新しい', '大学', '感じ']\n",
            "comment = 線形代数は初めてだったけど、割と分かりやすい説明である程度理解できた。授業中にもっと演習（問題を出して時間をおいて回答させるなど）をもっと増やすといいと思う。\n",
            "  total_score = -0.55665, words = ['線形', '代数', '初めて', '説明', '程度', '理解', '授業', '中', 'もっと', '演習', '問題', '時間', '回答', 'もっと', 'と', 'と', '思う']\n",
            "comment = 難しかったです\n",
            "  total_score = -0.99975, words = ['難しい']\n",
            "comment = 授業用スライドが丁寧に作られていてわかりやすかった。\n",
            "  total_score = -0.58932, words = ['授業', '用', 'スライド', '丁寧']\n",
            "comment = 新しく触れる分野だったので不安はあったのですが、自分なりに解釈して理解することができたと思います。線形代数は今後も必要だと思うので継続的に勉強していこうと思いました。第２Qと短い期間だったのですが、新しいことを学ぶのは楽しかったです。ありがとうございました。\n",
            "  total_score = -0.33071, words = ['新しい', '触れる', '分野', '不安', '解釈', '理解', 'と', '思う', '線形', '代数', '今後', '必要', 'と', '思う', '勉強', 'と', '思う', 'と', '期間', '新しい', '学ぶ', '楽しい', 'ござる']\n",
            "comment = 数学だけど数学っぽくなかったので新鮮だった\n",
            "  total_score = -0.35370, words = ['数学', '数学', 'っぽい', 'ない', '新鮮']\n",
            "comment = 今でも十分だと思います。\n",
            "  total_score = -0.57074, words = ['今', '十分', 'と', '思う']\n",
            "comment = 社会的なお話なので何を話したらいいかわからないので困ることは少しあった。\n",
            "  total_score = -0.94743, words = ['話', '話す', 'ない', '困る', '少し']\n",
            "comment = 今でも良い方法だと思います。\n",
            "  total_score = -0.38367, words = ['今', '良い', '方法', 'と', '思う']\n",
            "comment = コロナのせいで無くなったけど合宿授業したかった。でも、改めて授業として道徳を学ぶことができてためになったのでよかったです。\n",
            "  total_score = -0.27868, words = ['コロナ', '無くなる', '合宿', '授業', '改めて', '授業', 'と', '道徳', '学ぶ']\n",
            "comment = 教授の実体験が多く含まれており良かった。\n",
            "品性や正義、先人の想いを考えるきっかけになった授業だった。\n",
            "  total_score = -0.12563, words = ['教授', '含む', '良い', '品性', 'や', '正義', '先人', '考える', '授業']\n",
            "comment = 品性を伸ばすと良い事と会社などの実用的な社会的なことを学べてすごくためになったと思う。\n",
            "  total_score = -0.26440, words = ['品性', 'と', '良い', '事', 'と', '会社', 'と', '思う']\n",
            "comment = とてもいい講義でしたがCOVID１９によって予定通りできなかったことが少し残念です。\n",
            "  total_score = -0.68748, words = ['とても', '講義', '予定', '通り', 'ない', '少し', '残念']\n",
            "comment = 新しい知識が増えてよかった\n",
            "  total_score = 0.38350, words = ['新しい', '知識']\n",
            "comment = 自分が住んでいる沖縄のことを知れてよかった\n",
            "  total_score = -0.43296, words = ['住む', '知れる']\n",
            "comment = 気軽に受けれて楽しかったです。\n",
            "  total_score = 0.99584, words = ['楽しい']\n",
            "comment = とても興味深い内容が多く今までの自分にはなかった考え方を持てるようになりました。\n",
            "  total_score = -0.62121, words = ['とても', '興味', '内容', 'ない']\n",
            "comment = 良い技術者になるためには、道徳の分野が重要だということがわかりました。和田先生の講義内容は私の心に響くものがたくさんありました。今まで社会や歴史についてあまり関心がなかったのですが、和田先生の講義を通して、それらの分野に興味を持つようになりました。貴重なお話ありがとうございました。\n",
            "  total_score = -0.32257, words = ['良い', '技術者', '道徳', '分野', '重要', 'と', '先生', '講義', '内容', '響く', '社会', 'や', '歴史', '関心', 'ない', '先生', '講義', '通す', '分野', '興味', '貴重', '話', 'ござる']\n",
            "comment = 元気がある先生で、授業も楽しく聞けました。\n",
            "  total_score = 0.33579, words = ['元気', '先生', '授業', '楽しい']\n",
            "comment = 今後社会に出る上での考え方や持つべき心を学べた。また今までの学んだことの別側面を見れて面白かった。\n",
            "  total_score = -0.47345, words = ['今後', '社会', '上', 'や', '学ぶ', '別', '側面', '面白い']\n",
            "comment = 履修計画表の作成や企業インタビューの準備など大変でしたが、4年間の履修計画が立てられ、企業インタビューの経験ができ、友人ができたので思い出深い1Qでした。\n",
            "  total_score = -0.49195, words = ['履修', '表', '作成', 'や', '企業', 'インタビュー', '準備', '大変', '履修', '立てる', '企業', 'インタビュー', '経験', '友人', '思い出']\n",
            "comment = 社会人に向けてのこれからを考えるいい機会になったのでよかったです。\n",
            "  total_score = -0.22723, words = ['社会人', '向ける', '考える', '機会']\n",
            "comment = 履修計画を立てることでこれからの大学生活や将来を具体的に想像することができた。\n",
            "大学で初めてのレポートでアドバイスをもらえて良かった。\n",
            "企業の方にインタビューするにあたってマナーなどを学べたのでこれからも活用していきたい。\n",
            "  total_score = -0.40551, words = ['履修', '立てる', '大学', '生活', 'や', '将来', '想像', '大学', '初めて', 'レポート', 'アドバイス', '良い', '企業', '方', 'インタビュー', 'マナー', '活用']\n",
            "comment = 履修計画では、どのような授業があるかをある程度知ることが出来た、また、企業インタビューでは、社会のニーズ（人材）を聞けたりなど、とても有意義だった。\n",
            "  total_score = -0.38374, words = ['履修', '授業', '程度', '知る', '出来る', '企業', 'インタビュー', '社会', 'ニーズ', '人材', 'とても', '有意義']\n",
            "comment = 同級生と接する機会の多い授業だったので楽しかった。\n",
            "  total_score = 0.13257, words = ['と', '接する', '機会', '授業', '楽しい']\n",
            "comment = 企業人インタビューなど社会経験的なことができてためになったなぁと思いました。\n",
            "  total_score = -0.54329, words = ['企業', 'インタビュー', '社会', '経験', '的', 'と', '思う']\n",
            "comment = この講義のおかげで、周りの人と話すことができたのでとてもよかったです。この講義がなければ私は前期の間で友達を作ることは難しかったのではないかと思います。また、企業人インタビューや履修計画表作成を通して自分の将来を見通すことができたのはとても大きいです。このような機会を設けてくださりありがとうございました。\n",
            "  total_score = -0.42636, words = ['講義', 'と', '話す', 'とても', '講義', 'ない', '前期', '間', '友達', '難しい', 'ない', 'と', '思う', '企業', 'インタビュー', 'や', '履修', '表', '作成', '通す', '将来', '見通す', 'とても', '機会', '設ける', 'ござる']\n",
            "comment = 今後のグループ活動や講義選択に生かせるのでとてもためになった\n",
            "  total_score = -0.37656, words = ['今後', 'グループ', '活動', 'や', '講義', '選択', 'とても']\n",
            "comment = たまに説明がないコードがあったりしたので少し戸惑った。いずれはやっていくものではあるが、、、\n",
            "  total_score = -0.71374, words = ['たまに', '説明', 'ない', 'コード', '少し']\n",
            "comment = できれば、対面を増やして欲しい\n",
            "  total_score = -0.74977, words = ['対面', '欲しい']\n",
            "comment = 他人の課題を変更できてしまうのが怖い。\n",
            "  total_score = -0.64309, words = ['他人', '課題', '変更', '怖い']\n",
            "comment = 工学部の7つのコースの中でこのコースに決めた理由の一つがプログラミングを学べるからでした。故に、毎日が刺激的でした。また、私にとっては課題の難易度が高く、それを完成させるために予習と復習をこなせたことで、良い勉強の循環ができたと思います。\n",
            "  total_score = -0.39942, words = ['コース', '中', 'コース', '決める', '理由', 'プログラミング', '毎日', '課題', '完成', '予習', 'と', '復習', '良い', '勉強', '循環', 'と', '思う']\n",
            "comment = pythonの基礎の基礎を学ぶことができたのでよかったです。\n",
            "  total_score = -0.66063, words = ['基礎', '基礎', '学ぶ']\n",
            "comment = ネットやYouTubeで調べるよりもわかりやすい説明で理解しやすかった。\n",
            "他人の課題を見ることができるので自分のコードをより良くしやすいのが良いと思った。\n",
            "  total_score = -0.30185, words = ['ネット', 'や', '調べる', '説明', '理解', '他人', '課題', 'コード', '良い', '良い', 'と', '思う']\n",
            "comment = 課題は友人と強力して行うことが認められていてとても助かった。\n",
            "  total_score = 0.07159, words = ['課題', '友人', 'と', '強力', '認める', 'とても', '助かる']\n",
            "comment = プログラミングを全く触ったことがなかったのでとても難しかった。\n",
            "  total_score = -0.69199, words = ['プログラミング', '全く', '触る', 'ない', 'とても', '難しい']\n",
            "comment = プログラミングIIもよろしくお願いします。\n",
            "  total_score = -0.26779, words = ['プログラミング', '願う']\n",
            "comment = pythonの内容は予想を上回るほどの量だったので、まだ理解度が完璧とは言えない状況です。夏休みは復習をして、２学期からまた新しい言語を学んでいきたいと思います。\n",
            "  total_score = -0.39620, words = ['内容', '予想', '上回る', '量', '完璧', 'と', 'ない', '復習', '学期', '新しい', '言語', '学ぶ', 'と', '思う']\n",
            "comment = 課題は学びはじめにとっては難しかったけど達成感はGOOD\n",
            "  total_score = -0.64730, words = ['課題', '学ぶ', '難しい']\n",
            "comment = 課題を一人でやるのは序盤が結構きつかった\n",
            "  total_score = -0.39675, words = ['課題', '一人', '序盤', '結構', 'きつい']\n",
            "comment = 何も知らなかったプログラミングを楽しく学ぶことができました。\n",
            "  total_score = -0.24691, words = ['知る', 'ない', 'プログラミング', '楽しい', '学ぶ']\n",
            "comment = 比較的人気で修得が簡単なpythonですらこの難しさなら、先が思いやられます。\n",
            "  total_score = -0.53900, words = ['比較的', '人気', '簡単', '先']\n",
            "comment = 私は今までプログラミングに触れたことがなかったので新しいことを覚えるのに必死でした。ですが、できるようになった時は達成感がありましたし、この技術や知識をさらに生かしたいと思うようになりました。當間先生の講義は楽しかったです。ありがとうございました。後期の講義でもお世話になると思うので、よろしくお願いします。\n",
            "  total_score = -0.33581, words = ['プログラミング', '触れる', 'ない', '新しい', '覚える', '時', '技術', 'や', '知識', '生かす', 'と', '思う', '先生', '講義', '楽しい', 'ござる', '後期', '講義', 'お世話', 'と', '思う', '願う']\n",
            "comment = 課題についてですが、期限が１週間ではややきついので、２週間でお願いします。\n",
            "  total_score = -0.52213, words = ['課題', '期限', '週間', 'やや', 'きつい', '週間', '願う']\n",
            "comment = オプション課題の解答が欲しい\n",
            "  total_score = -0.46708, words = ['オプション', '課題', '欲しい']\n",
            "comment = 演習を通してpythonの基礎の基礎を定着させることができたのでよかったです。\n",
            "  total_score = -0.59628, words = ['演習', '通す', '基礎', '基礎', '定着']\n",
            "comment = ターミナルの使い方から教えてもらえて少しパソコンに詳しくなった気がする。\n",
            "デンチュウを動かす課題がゲーム感覚で楽しめた。\n",
            "  total_score = -0.31911, words = ['ターミナル', '教える', '少し', 'パソコン', '詳しい', '気', '動かす', '課題', 'ゲーム', '感覚', '楽しめる']\n",
            "comment = denchuを通してコードの組み立て方を知ることができた。実際にコードを書くのでどのように動くのか予想しながらで、思考力も鍛えられたと思う。\n",
            "  total_score = -0.49706, words = ['通す', 'コード', '方', '知る', '実際', 'コード', '動く', '予想', '鍛える', 'と', '思う']\n",
            "comment = プログラミング１で学んだことを実践的に学ぶことができたので楽しかった\n",
            "  total_score = -0.08985, words = ['プログラミング', '学ぶ', '学ぶ', '楽しい']\n",
            "comment = denchuを動かすのは面白かった。\n",
            "  total_score = 0.03511, words = ['動かす', '面白い']\n",
            "comment = 最初はターミナルの使い方すら分からなくてとても焦りました。ですが、コマンドやコードの意味、書き方がわかってくると楽しくなりました。今後もお世話になる知識や技術なので、これからも勉強していこうと思います。プログラミングを楽しく、わかりやすく教えてくださりありがとうございました。\n",
            "  total_score = -0.34167, words = ['最初', 'ターミナル', 'ない', 'とても', '焦る', 'コマンド', 'や', 'コード', '意味', '書き方', 'と', '楽しい', '今後', 'お世話', '知識', 'や', '技術', '勉強', 'と', '思う', 'プログラミング', '楽しい', '教える', 'ござる']\n",
            "comment = コロナの影響で仕方なかったが、正直この授業は最後まで対面でやりたかった。\n",
            "  total_score = -0.40349, words = ['コロナ', '影響', '正直', '授業', '最後', '対面']\n",
            "comment = 学んだことをすぐに実践できて学んだ事を落とし込みやすかった\n",
            "  total_score = -0.54820, words = ['学ぶ', '実践', '学ぶ', '事']\n",
            "comment = 配布資料が教科書の内容に沿っており、わかりやすかった。\n",
            "  total_score = -0.65203, words = ['教科書', '内容', '沿う']\n",
            "comment = 説明の時に使用されていたペンの色で、薄い黄色は少し見にくく感じました。\n",
            "  total_score = -0.84481, words = ['説明', '時', 'ペン', '色', '薄い', '黄色', '少し', '感ずる']\n",
            "comment = 授業資料にペンで書き込むとき、若干文字が潰れていて見辛かった。\n",
            "  total_score = -0.67972, words = ['授業', '資料', 'ペン', '文字', '潰れる', '辛い']\n",
            "comment = 説明はわかりやすかったのだが、先生のメモ書きの字が汚くて、そのメモ書きした内容はわからなかった。\n",
            "  total_score = -0.75192, words = ['説明', '先生', '字', '汚い', 'メモ', '内容', 'ない']\n",
            "comment = メモ書きをしっかり消してから，次の解説に移ってほしいです．\n",
            "資料はかなりわかりやすかったです．\n",
            "  total_score = -0.60823, words = ['消す', '次', '解説', '移る', '資料', 'かなり']\n",
            "comment = 試験前に演習問題が出されて助かった。\n",
            "試験では演習問題と似たような形式で問題が出されたため、解きやすかった。\n",
            "  total_score = -0.45851, words = ['試験', '演習', '問題', '助かる', '試験', '演習', '問題', 'と', '似る', '形式', '問題', '解く']\n",
            "comment = 試験対策方法が明確で勉強しやすかったです．\n",
            "  total_score = -0.52576, words = ['試験', '対策', '方法', '勉強']\n",
            "comment = 聞き取りやすく，見やすい授業形態でした．\n",
            "  total_score = -0.40581, words = ['授業']\n",
            "comment = 出席確認と同時に理解できなかったことを書くことができたのは非常によかったと思います。わからないことを聞くことができたのでスムーズに理解することができました。解説も非常に分かりやすかったと思います。\n",
            "  total_score = -0.50560, words = ['出席', '確認', 'と', '同時', '理解', 'ない', 'と', '思う', 'ない', '聞く', '理解', '解説', 'と', '思う']\n",
            "comment = 話がわかりやすく、一見わからなかった問題も説明で理解できたことが多々あった。\n",
            "  total_score = -0.77200, words = ['話', '一見', 'ない', '問題', '説明', '理解']\n",
            "comment = まだコードが書けるレベルには達していないが、考え方などは身に付いたと思う。\n",
            "  total_score = -0.50571, words = ['コード', 'レベル', '達する', 'ない', '身', '付く', 'と', '思う']\n",
            "comment = 生徒が自主学習できる環境を作ってくれていたため、とても勉強しやすかったです。\n",
            "  total_score = -0.39066, words = ['生徒', '自主', '学習', '環境', 'とても', '勉強']\n",
            "comment = ありがとうございました\n",
            "  total_score = -0.34577, words = ['ござる']\n",
            "comment = とても分かり易かったです\n",
            "  total_score = -0.16907, words = ['とても']\n",
            "comment = 講義やテストは遠隔であったが、講義資料はすぐにダウンロードできるよう工夫されていたり、アルゴリズムのスキルが身につくツールも紹介してくれたので非常に勉強しやすい環境でした。\n",
            "  total_score = -0.46240, words = ['講義', 'や', 'テスト', '遠隔', '講義', '資料', '工夫', '身', '紹介', '勉強', '環境']\n",
            "comment = 中間テストの点数を教えてもらえたらよかったかもしれません。\n",
            "  total_score = -0.59753, words = ['中間', 'テスト', '点数', '教える', 'ぬ']\n",
            "comment = 中間・期末のレポートなどの提出をメールで行うのは良いが、出来れば受理されたかどうかの確認ができる形にしていただきたい(成績評価において提出物の割合が大きいため、正しく受理されたかどうかが気になる)\n",
            "  total_score = -0.42464, words = ['中間', '期', '末', 'レポート', '提出', '良い', '受理', 'どう', '確認', '割合', '正しく', '受理', 'どう', '気']\n",
            "comment = テキストに図などが入れてあり、分かりやすかったです。実際にコマンドを打って確認する場面もあり、よかったと思います。\n",
            "  total_score = -0.60160, words = ['テキスト', '図', '実際', 'コマンド', '打つ', '確認', '場面', 'と', '思う']\n",
            "comment = 授業資料が見やすくまとめられていて、勉強する上でとても役立ちました。\n",
            "  total_score = -0.37871, words = ['授業', '資料', '勉強', '上', 'とても', '役立つ']\n",
            "comment = 企業の方を招待してお話を聞かせていただいてありがとうございました。とてもためになるお話が聞けて楽しかったです。\n",
            "ありがとうございました\n",
            "  total_score = -0.43715, words = ['企業', '方', '招待', '話', '聞く', 'ござる', 'とても', '話', '楽しい', 'ござる']\n",
            "comment = 外部の方からお話を聞く機会はあまりないのでとても良かったです．\n",
            "  total_score = -0.32163, words = ['外部', '方', '話', '聞く', '機会', 'ない', 'とても', '良い']\n",
            "comment = 途中にあった講話が非常にためになり、良かったと思っています。\n",
            "  total_score = -0.22410, words = ['途中', '講話', '良い', 'と', '思う']\n",
            "comment = 配布資料に間違いがあったように見えました。\n",
            "  total_score = -0.66280, words = ['間違い', '見える']\n",
            "comment = ・教科書が必要なのか必要でないのかが曖昧なまま授業が始まり、非常に不安だったため、教科書が必須かそうでないのかは最初にはっきりして欲しい。\n",
            "・課題を出すだけ出させておいて、採点もせず、どういった解答が正しいのかといった指針も出すのがとても遅い。課題は解くだけでは知識の定着につながらないと思いますが、そこらへんはどうなんでしょうか。\n",
            "・配布資料として、過去問も配布してくれるととても助かるな、と思います。ご検討お願いします。\n",
            "  total_score = -0.47364, words = ['教科書', '必要', '必要', 'ない', '授業', '始まる', '不安', '教科書', 'ない', '最初', 'はっきり', '欲しい', '課題', '採点', 'どう', '正しい', 'と', '指針', 'とても', '遅い', '課題', '解く', '知識', '定着', 'ない', 'と', '思う', 'どう', 'と', '配布', 'と', 'とても', '助かる', 'と', '思う', '検討', '願う']\n",
            "comment = 授業及び資料を完璧に理解しても絶対わからない問題があったので，流石に試験の内容は資料内容や授業を理解していれば解ける内容のみで構成して欲しかった．\n",
            "  total_score = -0.53950, words = ['授業', '資料', '完璧', '理解', '絶対', 'ない', '問題', '流石', '試験', '内容', '資料', '内容', 'や', '授業', '理解', '解ける', '内容', '構成', '欲しい']\n",
            "comment = ・中間テストを延期し続け、最終的に中間・期末試験を２週続けてやることとなり、計画性が欠けている。\n",
            "・配布資料の誤字脱字が多すぎる。\n",
            "  total_score = -0.52611, words = ['中間', 'テスト', '延期', '続ける', '中間', '期末', '試験', '週', '続ける', 'と', '欠ける', '誤字', '脱字']\n",
            "comment = 教科書がかなり簡潔なまとめ方をしているので、先生の解説は教科書の内容を補強する形で説明して欲しかった。\n",
            "  total_score = -0.34177, words = ['教科書', 'かなり', '簡潔', '先生', '解説', '教科書', '内容', '補強', '説明', '欲しい']\n",
            "comment = webclassの配布資料はダウンロードできるようにして欲しかったです。後、そのwebclassの配布資料では1ページに4枚のスライドという構造だったため、勉強するときに不便を感じました。できれば1ページに1枚のスライドという構造に改善してくれれば幸いです。\n",
            "  total_score = -0.31112, words = ['欲しい', '後', '枚', 'スライド', 'と', '構造', '勉強', '不便', '感ずる', '枚', 'スライド', 'と', '構造', '改善', '幸い']\n",
            "comment = 配布資料は1ページにつき4枚分のページが敷き詰められているためとても見辛かったです。\n",
            "また、先生がすぐにメールを読んでくれないことが多かったので、そこは困りました。mattermostにはチャンネルを開設していないのでメールしか連絡手段がないのですが、その唯一の連絡手段が確認されないというのは生徒にとっても辛いところがあると思います。先生も多忙ではあると思われますが、是非お願いします。\n",
            "  total_score = -0.60294, words = ['枚', '分', 'とても', '辛い', '先生', '読む', 'ない', '困る', 'チャンネル', '開設', 'ない', '連絡', '手段', 'ない', '唯一', '連絡', '手段', '確認', 'ない', 'と', '生徒', '辛い', 'と', '思う', '先生', '多忙', 'と', '思う', '是非', '願う']\n",
            "comment = 書かれていることや内容を先生が淡々とアウトプットしているだけで,\n",
            "生徒側が置いてけぼりだった。実際に講義の後や後日、生徒同士でどうだった？わかった？などと話すことがあった。\n",
            "  total_score = -0.51027, words = ['や', '内容', '先生', 'と', 'アウトプット', '生徒', '側', '実際', '講義', '後', 'や', '後日', '生徒', 'どう', 'と', '話す']\n",
            "comment = ・授業の方法自体は普通であったと思います(板書が若干見づらかったが、オンラインのために板書が汚かったりすることなどはしょうがないと思いました)。\n",
            "  total_score = -0.57888, words = ['授業', '方法', '自体', 'と', '思う', '板書', '板書', '汚い', 'ない', 'と', '思う']\n",
            "comment = スライドが1ページに4分割して入っているのは拡大しなければならないので見づらいです。\n",
            "  total_score = -0.72479, words = ['スライド', '分割', '入る', '拡大', 'ない', 'ない']\n",
            "comment = ・資料の説明で色ペンを使うとき、資料の上から書くのをやめてほしい。字が汚い上に、資料の文字と重なって読みづらい。\n",
            "・予習をして説明を聞いても、何を言っているかわからないから、頭に入ってこない。もう少しはっきりと話してほしい。\n",
            "  total_score = -0.72913, words = ['資料', '説明', '色', 'ペン', '資料', '上', '字', '汚い', '上', '資料', '文字', 'と', '重なる', '読む', '予習', '説明', '聞く', 'ない', '頭', '入る', 'ない', 'もう', '少し', 'はっきり', 'と', '話す']\n",
            "comment = マウスでのメモ書きは少し見づらかった。\n",
            "  total_score = -0.97139, words = ['少し']\n",
            "comment = 授業資料はわかりやすく、復習しやすかったです。ただ、口頭での説明がわかりにくかったです。特に、後半のアセンブラ言語のところは説明が少なく感じました。\n",
            "  total_score = -0.53209, words = ['授業', '資料', '復習', '口頭', '説明', '後半', '言語', '説明', '感ずる']\n",
            "comment = 課題の点数を早めに公開してもらえるとよかったと思います。\n",
            "また、試験に関して疑問点をメールに送っていたと思いますが、それに回答していただけるとよかったと思います。\n",
            "  total_score = -0.49304, words = ['課題', '点数', '公開', 'と', 'と', '思う', '試験', '関する', '点', '送る', 'と', '思う', '回答', 'と', 'と', '思う']\n",
            "comment = 早めの課題の採点をお願いしたいです\n",
            "  total_score = -0.36435, words = ['課題', '採点', '願う']\n",
            "comment = 課題については解答と解説がしばらく明示されず、解答自体は試験の1,2週間ほど前に公開されたものの解説がないため理解がしづらかったです。\n",
            "試験については、特に期末試験についてなのですが、大半の人が勉強できていないであろう分野の問題が出されたということと問題の量がそれなりに多かったために非常に難しく感じました。実際のクラス平均点も低かったです。\n",
            "また、中間試験と期末試験を2週連続で実施するのは来年以降の授業ではやめていただきたいです。どうしても対面で実施できないのならすぐにオンラインに切り替えて中間試験の期間内に実施するべきだと思います。大変でした。\n",
            "最後に課題と試験に評価方法なのですが、webclassでの完全解答型のため採点が少し厳しいと感じました。そこもできれば何らかの形で改善していただけるといいと思います。\n",
            "  total_score = -0.46870, words = ['課題', 'と', '解説', '明示', '自体', '試験', '週間', '公開', '解説', 'ない', '理解', '試験', '期末', '試験', '大半', '勉強', 'ない', '分野', '問題', 'と', 'と', '問題', '量', '難しい', '感ずる', '実際', 'クラス', '中間', '試験', 'と', '期末', '試験', '週', '連続', '実施', '来年', '以降', '授業', 'どう', '対面', '実施', 'ない', '中間', '試験', '実施', 'と', '思う', '大変', '最後', '課題', 'と', '試験', '完全', '型', '採点', '少し', '厳しい', 'と', '感ずる', '改善', 'と', 'と', '思う']\n",
            "comment = 課題の評価、どの点が間違っていつのかなどのフィードバックが遅かったり、なかったりした\n",
            "試験に関しては、最終週とその前の週と２週にかけて期末試験と中間試験を行なった。それにより準備がままならなかったり、少し授業よりも上のものが出たりしていた\n",
            "  total_score = -0.57162, words = ['課題', '評価', '点', '間違う', 'フィードバック', '遅い', 'ない', '試験', '関する', '最終', '週', 'と', '週', 'と', '週', '期末', '試験', 'と', '中間', '試験', '準備', 'ない', '少し', '授業', '上']\n",
            "comment = 試験の問題文が分かり難かった\n",
            "  total_score = -0.76708, words = ['試験', '問題', '文', '難い']\n",
            "comment = ・課題の点数が、この講義が全て終わったのに未だすべて採点されていない点が不服。受講者が多いだとか、採点する側も忙しいだとか色々あると思いますが、そもそも採点する側が捌ききれないほど課題を出しているという現状は適切でしょうか。\n",
            "・自身の努力不足かもしれませんが、率直に言って試験の難易度が難しい。課題で解いた問題と比べても難易度が数段違うと思います。この授業では「配布資料」「課題」「普段の講義」が主に提供されましたが、それらを用いて勉強をし、また足りないと思ったところを自分で調べて学習しても、試験で思うような点が取れませんでした。なので試験難易度の高さには不満が残ります。\n",
            "・評価方法の課題20%、テスト40+40=80%は他の授業でもよく見られる配分なので、それ自体には不満はありません。しかし、先ほど書いた通り、課題が採点されない点や、試験の難易度に不満があるため、結果的にこの配分も良くないのではないか、と思います。\n",
            "  total_score = -0.51988, words = ['課題', '点数', '講義', '未だ', '採点', 'ない', '点', '不服', 'と', '採点', '側', '忙しい', 'と', 'と', '思う', '採点', '側', '捌く', 'ない', '課題', 'と', '現状', '適切', '自身', '努力', '不足', 'ぬ', '試験', '難しい', '課題', '解く', '問題', 'と', '比べる', '数段', '違う', 'と', '思う', '授業', '課題', '講義', '主に', '提供', '用いる', '勉強', '足りる', 'ない', 'と', '思う', '調べる', '学習', '試験', '思う', '点', '取れる', 'ぬ', '試験', 'さ', '不満', '残る', '課題', 'テスト', '授業', 'よく', '配分', '自体', '不満', 'ぬ', '通り', '課題', '採点', 'ない', '点', 'や', '試験', '不満', '配分', '良い', 'ない', 'ない', 'と', '思う']\n",
            "comment = 試験で選択式でないのに自動採点を使うのはやめてほしいです。\n",
            "プログラムの効率など、問題に書かれていない条件があるのも良くないと思います。学生全員が技術者としてどんなプログラムを作るのが当然かなど徹底して頭に入っているわけではありません。\n",
            "書かれていないことまで汲み取らなければ0点とされたのでは理不尽です。\n",
            "  total_score = -0.53671, words = ['試験', 'ない', '自動', '採点', 'プログラム', '効率', '問題', 'ない', '条件', '良い', 'ない', 'と', '思う', '学生', '技術者', 'と', 'プログラム', '当然', '徹底', '頭', '入る', 'ぬ', 'ない', 'ない', '点', 'と', '理', '不尽']\n",
            "comment = 試験内容に初めて見る問題があった．さらにその後の解説もあまりなかったので難易度が他の授業に比べて高すぎると感じました．それは，内容が難しいというよりも授業で試験に出る内容を網羅し切れていないことによるものと思いました．遠隔の試験であったことが大きいということは重々承知の上で，問題内容が伝わり辛かったので他の授業のようにどうにか対応して欲しかったです．また，平均点が他の授業と比べて低すぎるので追加で課題などが欲しかったです．\n",
            "  total_score = -0.60904, words = ['試験', '内容', '初めて', '問題', '解説', 'ない', '授業', '比べる', 'と', '感ずる', '内容', '難しい', 'と', '授業', '試験', '内容', '網羅', '切れる', 'ない', 'と', '思う', '遠隔', '試験', 'と', '承知', '上', '問題', '内容', '伝わる', '辛い', '授業', 'どう', '対応', '欲しい', '授業', 'と', '比べる', '追加', '課題', '欲しい']\n",
            "comment = ・課題を出しても、解答や採点が出なくてとても困る。試験の一週間前に解答を出されても、完璧に復習できるわけがない。前持って復習したいから、課題の提出期間を過ぎたらすぐに解答を出してほしい。\n",
            "・webclassで試験をしたら、webclassが止まって解答できなくなった学生が多くいた。昨年もこのような事態が起こったと聞いて、解決策を考えなかったのかと疑問に思う。ちゃんとこの問題を解決してから、学生が安心して試験を受けられる環境を整えてほしい。\n",
            "  total_score = -0.47194, words = ['課題', 'や', '採点', 'ない', 'とても', '困る', '試験', '週間', '完璧', '復習', 'ない', '復習', '課題', '過ぎる', '試験', 'ない', '学生', '昨年', '事態', 'と', '聞く', '考える', 'ない', 'と', '思う', 'ちゃんと', '問題', '解決', '学生', '安心', '試験', '受ける', '環境', '整える']\n",
            "comment = 課題については、提出期限後に逐一回答を出して欲しかった。前回の授業内容が理解できたかを測る基準がなく、わからないことをそのままにして次の課題に取り組むことが続いてしまった。\n",
            "  total_score = -0.60037, words = ['課題', '後', '逐一', '回答', '欲しい', '前回', '授業', '内容', '理解', '基準', 'ない', 'ない', '次', '課題', '続く']\n",
            "comment = 試験の実施方法が悪かった。最後の２週に中間試験と期末試験をもってきたり、Webclassの採点ミスや問題設定の間違いを指摘する声が、テスト中の質問用Zoomでも多く挙がっていた。\n",
            "  total_score = -0.56829, words = ['試験', '悪い', '最後', '週', '中間', '試験', 'と', '期末', '試験', 'もつ', '採点', 'ミス', 'や', '問題', '設定', '間違い', '指摘', '声', 'テスト', '中', '質問', '用']\n",
            "comment = Zoomの音声、資料画像の画質など特に問題なく授業を受けられた。\n",
            "  total_score = -0.66755, words = ['音声', '資料', '画像', '問題', 'ない', '授業', '受ける']\n",
            "comment = 黒板などがないオンラインでの講義でしたが、スライド資料に直接説明を書いていたので分かりやすかったです。\n",
            "  total_score = -0.61116, words = ['黒板', 'ない', '講義', 'スライド', '資料', '直接', '説明']\n",
            "comment = 講義全体の感想としては、毎年単位を落とす人が多いというのも納得できる難しさだったと思います。生徒にとって不親切な点が多く、本当に前年度までの生徒からの要望はちゃんと取り入れられているのだろうかと疑問に思いました。\n",
            "講義の難易度を簡単にしてほしいというわけではなく、今後少しでも生徒に親切な授業にしてもらえれば単位も取りやすくなるのかなという風に感じました。\n",
            "講義で学んだ内容自体はとても良かったです。\n",
            "  total_score = -0.50594, words = ['講義', '全体', '感想', 'と', '毎年', '単位', 'と', '納得', 'と', '思う', '生徒', '不親切', '点', '本当', '生徒', '要望', 'ちゃんと', 'と', '思う', '講義', '簡単', 'と', 'ない', '今後', '少し', '生徒', '親切', '授業', '単位', 'と', '風', '感ずる', '講義', '学ぶ', '内容', '自体', 'とても', '良い']\n",
            "comment = 受講前から噂は聞いていたので心してかかったつもりですが、それでも思わずクソゲーと叫びたくなるような難易度でした。これの恐ろしいところは、課題や授業で出された問題は解けるのですが、中間・期末テストで急激に難易度が跳ね上がるところですね。\n",
            "\n",
            "せめて過去問を配布してくれたりすると、生徒側としてはテストに向けての勉強が捗るだけでなく、授業でも要点をしっかり押さえて勉強できたりすると思います。\n",
            "  total_score = -0.48626, words = ['受講', '噂', '聞く', '思う', 'と', '叫ぶ', '恐ろしい', '課題', 'や', '授業', '問題', '解ける', '中間', '期末', 'テスト', '跳ね上がる', 'せめて', '配布', 'と', '生徒', '側', 'と', 'テスト', '向ける', '勉強', '捗る', 'ない', '授業', '要点', '勉強', 'と', '思う']\n",
            "comment = 課題はすべて出しましたが，おそらく点数が後数点足りないと思い，全体的にとても後悔しています．上のように不満を書きましたが，実際はテストで理解すべき，出来るべき部分をミスせずに全て取れていればおそらく点が足りていただろうことも事実です．来年は対面でできることを望み，その際には高得点で単位が取れるように復習や自学をさらに増やして先生にも質問をするようにしたいと考えています．来年もよろしくお願いします．\n",
            "  total_score = -0.52917, words = ['課題', '点数', '後', '数', '点', '足りる', 'ない', 'と', '思う', 'とても', '後悔', '上', '不満', '実際', 'テスト', '理解', '出来る', 'ミス', '取れる', '点', '足りる', '事実', '来年', '対面', '望む', '際', '単位', '取れる', '復習', 'や', '先生', '質問', 'と', '考える', '来年', '願う']\n",
            "comment = ・この授業は単位を落とす学生が多いと聞いたが、その通りだと思う。先生の説明が、予習をしていてもわかりづらいし、課題・試験の内容も難しい。\n",
            "・課題の採点がまだされていない。忙しいのは学生皆承知しているが、5月出した課題ですら採点されていないのはいかがなものかと思う。\n",
            "  total_score = -0.59671, words = ['授業', '単位', '学生', 'と', '聞く', '通り', 'と', '思う', '先生', '説明', '予習', '課題', '試験', '内容', '難しい', '課題', '採点', 'ない', '忙しい', '学生', '承知', '月', '課題', '採点', 'ない', 'と', '思う']\n",
            "comment = まわりの受講している生徒間でも、わかりにくいと言われていた講義でした。次年度からはわかりやすい説明をしてあげて欲しいです。\n",
            "  total_score = -0.53950, words = ['受講', '生徒', '間', 'と', '講義', '説明', '欲しい']\n",
            "comment = ハードウェアに関してはある程度の知識はありましたが、ソフトウェアはこの講義でアセンブルに初めて触れてみてコンピュータの中身の動きを少しだけ理解できたと思います。\n",
            "  total_score = -0.58993, words = ['関する', '程度', '知識', '講義', '初めて', '触れる', 'コンピュータ', '中身', '動き', '少し', '理解', 'と', '思う']\n",
            "comment = 演習などで行った問題の解答があるとよかったと思います。\n",
            "  total_score = -0.47266, words = ['演習', '問題', 'と', 'と', '思う']\n",
            "comment = 演習問題、過去問が非常に役に立った。\n",
            "欲を言えば、解答もつけて欲しかった。\n",
            "  total_score = -0.75908, words = ['演習', '問題', '役', '立つ', '欲', '欲しい']\n",
            "comment = 最後３，４週間あたりのの週ごとに内容が変わるところは，結構早いスピードだったと思いました．\n",
            "  total_score = -0.26051, words = ['最後', '週間', '週', 'ごと', '内容', '結構', '早い', 'スピード', 'と', '思う']\n",
            "comment = いつ当てられるのか恐ろしかったですが、緊張感を持ててよかったと思います。30分前後で休憩もあるので、2時間連続でも長すぎるとは感じにくかったです。\n",
            "  total_score = -0.68207, words = ['当てる', '恐ろしい', 'と', '思う', '分', '前後', '休憩', '時間', '連続', 'と', '感ずる']\n",
            "comment = 試験について、もう少し解答用紙が大きいと良いかもしれません。\n",
            "  total_score = -0.51412, words = ['試験', 'もう', '少し', '用', '紙', 'と', '良い', 'ぬ']\n",
            "comment = 課題を再提出できるのは、とてもありがたかった。\n",
            "試験の内容も教科書に沿っており、解きやすかった。\n",
            "  total_score = -0.53374, words = ['課題', 'とても', '試験', '内容', '教科書', '沿う', '解く']\n",
            "comment = 課題の割合が高く，再提出が出来て，点数はリアルタイムで把握できて，試験も授業がわかっているのかについてであり全体的に良心的だったと思います\n",
            "  total_score = -0.51459, words = ['課題', '割合', '出来る', '点数', '把握', '試験', '授業', '良心', '的', 'と', '思う']\n",
            "comment = 授業の間の休み時間が間隔を空けてあるのがよかったと思います。集中力が続いた状態で講義を受けることできたように感じます。また、課題や試験の結果がすぐに帰ってきたので、結果について悩む時間を作らずにすんだのでよかったと思います。\n",
            "  total_score = -0.67410, words = ['授業', '間', '間隔', 'と', '思う', '続く', '講義', '受ける', '感ずる', '課題', 'や', '試験', '結果', '結果', '悩む', '時間', 'と', '思う']\n",
            "comment = 朝から２時間連続で非常に大変で、内容も難しかったが、先生の教え方も人柄も良かったおかげで、最後まで乗り越えられたと思う。\n",
            "  total_score = -0.45965, words = ['朝', '時間', '連続', '大変', '内容', '難しい', '先生', '教える', '方', '人柄', '良い', '最後', 'と', '思う']\n",
            "comment = 講義を通して、確率統計に関する知識を獲得することができたと思います。これらの知識を利用して個人的に実験してみたいことも出来たので、講義を受けて良かったなぁとしみじみ思います。\n",
            "自分は数学は普通〜やや得意な方ですが、難易度は「難しいが勉強すれば必要な知識を獲得できる」というちょうど良い難易度でした。先生の説明も分かりやすく、また、たびたび実際にこれらの知識をどう使うのか、という実践的な面でもお話が聞けてとても面白かったです。\n",
            "ありがとうございました\n",
            "  total_score = -0.41370, words = ['講義', '通す', '確率', '統計', '関する', '知識', '獲得', 'と', '思う', '知識', '利用', '実験', '出来る', '講義', '受ける', '良い', 'と', 'しみじみ', '思う', '数学', 'やや', '得意', '方', '難しい', '勉強', '必要', '知識', '獲得', 'と', '良い', '先生', '説明', '実際', '知識', 'どう', 'と', '面', '話', 'とても', '面白い', 'ござる']\n",
            "comment = 講義中は内容が難しく感じていたが、後日見返したりすると理解できたことがよくあった。\n",
            "今後の研究などを踏まえた講義をしてくれたので、ためになることが多かった。\n",
            "  total_score = -0.46714, words = ['講義', '中', '内容', '難しい', '感ずる', '後日', '見返す', 'と', '理解', 'よく', '今後', '研究', '踏まえる', '講義']\n",
            "comment = 教科書大事にします。\n",
            "  total_score = -0.16874, words = ['教科書', '大事']\n",
            "comment = 授業の説明もわかりやすく、授業録画を残してくれていたため、欠席してしまった際や復習でとても役立ちました。また、講義で学んだことの使い道なども教えてくれたため、この講義を受けて良かったと思います。\n",
            "  total_score = -0.36303, words = ['授業', '説明', '授業', '録画', '残す', '欠席', '際', 'や', '復習', 'とても', '役立つ', '講義', '学ぶ', '使い道', '教える', '講義', '受ける', '良い', 'と', '思う']\n",
            "comment = とても良かったです．ありがとうございました．\n",
            "  total_score = 0.16172, words = ['とても', '良い', 'ござる']\n",
            "comment = この講義では数学で仮説を立てる大切さを学びました。仮説をある程度立てれば数学的に推定、検定ができるという所が魅力的でした。\n",
            "  total_score = -0.54430, words = ['講義', '数学', '仮説', '立てる', 'さ', '学ぶ', '仮説', '程度', '立てる', '数学', '的', '推定', '検定', 'と', '所']\n",
            "comment = 教科書が必要ない講義ということで最初は不安でしたが、講義内の説明もわかりやすく、授業資料もとても丁寧に書かれていたため、しっかりと学習することができました。\n",
            "  total_score = -0.56096, words = ['教科書', '必要', 'ない', '講義', 'と', '最初', '不安', '講義', '内', '説明', '授業', '資料', 'とても', '丁寧', 'と', '学習']\n",
            "comment = シラバスにはレポート100%で成績を決定すると書いてあったのですが、実際はレポートではなく期末試験100%だったので、そこはシラバス通りにするか最初から期末試験100%で決定すると書いてほしかったなと思いました。\n",
            "  total_score = -0.45152, words = ['レポート', '成績', '決定', 'と', '実際', 'レポート', 'ない', '期末', '試験', '通り', '最初', '期末', '試験', '決定', 'と', 'と', '思う']\n",
            "comment = 出席の取り方が面倒\n",
            "  total_score = -0.64030, words = ['出席', '面倒']\n",
            "comment = シラバスにレポート100%とあったのに, 実際はテストで100%になったことで他の教科とかぶってしまい大変であった.\n",
            "  total_score = -0.41385, words = ['レポート', 'と', '実際', 'テスト', '教科', 'と', 'かぶる', '大変']\n",
            "comment = Zoomの方で、画面共有で資料を写しているときは先生の方のカメラは切っても良いと思います(通信量削減のため)\n",
            "  total_score = -0.49791, words = ['方', '画面', '共有', '資料', '先生', '方', 'カメラ', '切る', '良い', 'と', '思う', '通信', '量', '削減']\n",
            "comment = 実際にIT機器や技術がどのように使われているかを学ぶことができて良かったです。\n",
            "ありがとうございました。\n",
            "  total_score = -0.29211, words = ['実際', '機器', 'や', '技術', '学ぶ', '良い', 'ござる']\n",
            "comment = 授業資料がとても細かく書かれていて、興味のある分野や、深く調べたいところはしっかり説明が載っているところがよかった。\n",
            "  total_score = -0.51684, words = ['授業', '資料', 'とても', '細かい', '興味', '分野', 'や', '調べる', '説明']\n",
            "comment = 授業自体の難易度は高くはないのですが,期末テストの問題数が多く,時間配分を間違えてしまったのが悔やまれます。\n",
            "  total_score = -0.60036, words = ['授業', '自体', 'ない', '期末', 'テスト', '問題', '数', '時間', '配分', '間違える', '悔やむ']\n",
            "comment = 授業内容の連絡が遅い(前日~当日に、授業の連絡がくることが多かった)。グループワーク の活動スケジュールに影響が出てくる部分であるので、そういった連絡は1週間以上前にした方が良いと思う。\n",
            "  total_score = -0.50202, words = ['授業', '内容', '連絡', '遅い', '前日', '当日', '授業', '連絡', '活動', 'スケジュール', '影響', '連絡', '週間', '以上', '方', '良い', 'と', '思う']\n",
            "comment = 課題の採点結果を早めに出していただけるとよかったかもしれません。\n",
            "  total_score = -0.58780, words = ['課題', '採点', '結果', 'と', 'ぬ']\n",
            "comment = いろいろな考え方について学ぶことができたと思います。また、グループワークで今まで学んだことを使うことで、実際に確認できるいい機会になったと思います。グループワークの際はPMの方が相談に乗ってくれるなど、進めやすい環境になっていたと思います。\n",
            "  total_score = -0.51846, words = ['学ぶ', 'と', '思う', '学ぶ', '実際', '確認', '機会', 'と', '思う', '際', '方', '相談', '乗る', '進める', '環境', 'と', '思う']\n",
            "comment = CM作成では、グループメンバーと仲良くなることができた。コロナ禍で学校に行けない状況で、このような機会があるのは本当にありがたい。\n",
            "とてもいい授業でした。\n",
            "  total_score = -0.34397, words = ['作成', 'グループ', 'メンバー', 'と', '学校', 'ない', '機会', '本当', 'とても', '授業']\n",
            "comment = CM楽しかったです。実際に講義で学んだ手法を使うと、スムーズにグループワーク ができることを実感したので、今後も学んだ手法を使っていきたいと思います。\n",
            "ありがとうございました\n",
            "  total_score = -0.34552, words = ['楽しい', '実際', '講義', '学ぶ', '手法', 'と', '実感', '今後', '学ぶ', '手法', 'と', '思う', 'ござる']\n",
            "comment = 対面ができず、キャンパスにもいく機会がない中、グループワークはいい刺激になった。\n",
            "また、思考の方法やアイディアの出し方など、今後参考にできそうなことが多く学べた。\n",
            "  total_score = -0.45512, words = ['対面', 'キャンパス', '機会', 'ない', '中', '思考', '方法', 'や', '今後', '参考']\n",
            "comment = あまり同期の学生とも会う機会がないので、グループワークができてよかったです。\n",
            "  total_score = -0.22412, words = ['同期', '学生', 'と', '機会', 'ない']\n",
            "comment = アイディアを出す技術や、相手に物事を伝える技術など、学ぶ機会の少ないけど重要なことが学べる良い授業だったと思います。授業資料におすすめの書籍などが書かれているのも参考になって良かったです。\n",
            "  total_score = -0.22978, words = ['技術', 'や', '伝える', '技術', '学ぶ', '機会', '重要', '良い', '授業', 'と', '思う', '授業', '資料', '書籍', '参考', '良い']\n",
            "comment = 自分自身のスキルを向上させるためのトレーニングやビジネス書を紹介してくれた所がよかったです。また、グループワークでは工学基礎演習で培ったコミュニケーションスキルや皆んなでまとめる力を活かしてCM作成ができたので非常に面白かったです。\n",
            "  total_score = -0.24143, words = ['自分自身', '向上', 'トレーニング', 'や', 'ビジネス', '書', '紹介', '所', '工学', '基礎', '演習', '培う', 'コミュニケーション', 'や', '力', '作成', '面白い']\n",
            "comment = 先生が話している際にたまに聞き取れないところがあったのでそのあたりが唯一の不満点かなと思います。ほかでは知ることができないようないろいろな情報を得られたので満足しています。\n",
            "  total_score = -0.44887, words = ['先生', '話す', '際', 'たまに', 'ない', '唯一', '満点', 'と', '思う', '知る', 'ない', '情報', '得る', '満足']\n",
            "comment = 課題が難しいものが多く、時間を多くとってもらえたのは非常に良かったですがかなりきつかったです。ありがとうございました。\n",
            "  total_score = -0.42158, words = ['課題', '難しい', '時間', '良い', 'かなり', 'きつい', 'ござる']\n",
            "comment = オンラインなどで顔を合わせてやりたかったです。\n",
            "  total_score = -0.97497, words = ['顔']\n",
            "comment = unityの操作方法の説明などを最初に行ってもらえたらもう少しスムーズにできたのではないかと思う。\n",
            "  total_score = -0.78985, words = ['説明', '最初', '行く', 'もう', '少し', 'ない', 'と', '思う']\n",
            "comment = それぞれに任せるといった形で進められたものだったのでそれなりに進めやすかったですが、オンラインだからこそなのか、班員で指導しても全く何もしない人もいたのでそのあたりが手を焼きました。どちらかというとこの授業はオンラインで報告会を行うのではなく、対面で行ったほうがいいように感じました。\n",
            "  total_score = -0.59116, words = ['それぞれ', '任せる', 'と', '進める', '進める', '員', '指導', '全く', 'ない', '焼く', 'と', 'と', '授業', 'ない', '対面', '感ずる']\n",
            "comment = モバイルアプリ班\n",
            "HTML/CSS，JavaScriptなどを用いてアプリケーションをチームで開発したことはとてもいい経験になった。メンバーからGitHubの使い方やコーディングを教えてもらったり、いろんなフレームワークを試してみたりと開発力が身についた！\n",
            "  total_score = -0.43886, words = ['用いる', 'アプリケーション', 'チーム', '開発', 'とても', '経験', 'メンバー', 'や', '教える', '試す', 'と', '身']\n"
          ]
        }
      ],
      "source": [
        "for comment in assesment_df['comment']:\n",
        "    doc = nlp(comment)\n",
        "    target_words = []\n",
        "    target_evals = []\n",
        "    for token in doc:\n",
        "        if token.lemma_ in pn_ja.keys():\n",
        "            target_words.append(token.lemma_)\n",
        "            target_evals.append(pn_ja[token.lemma_][1])\n",
        "    if len(target_words) > 0:\n",
        "        score = np.mean(target_evals)\n",
        "        print(f'comment = {comment}\\n  total_score = {score:.5f}, words = {target_words}')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "pfokq-RiW0Xn",
        "outputId": "ec4ecc18-05ed-4d42-8608-b90e961bc314"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "用いる = -0.988007\n",
            "アプリケーション = -0.145644\n",
            "チーム = -0.492859\n",
            "開発 = -0.255673\n",
            "とても = -0.169067\n",
            "経験 = -0.463699\n",
            "メンバー = -0.337508\n",
            "や = -0.278384\n",
            "教える = -0.440103\n",
            "試す = -0.502165\n",
            "と = -0.215793\n",
            "身 = -0.977377\n"
          ]
        }
      ],
      "source": [
        "# ん？最後の例は妙だな...\n",
        "\n",
        "words = ['用いる', 'アプリケーション', 'チーム', '開発', 'とても', '経験', 'メンバー', 'や', '教える', '試す', 'と', '身']\n",
        "for word in words:\n",
        "    score = pn_ja[word][1]\n",
        "    print(f'{word} = {score}')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "LV-rjfZ2W0Xn"
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "interpreter": {
      "hash": "880b2a8c90f9e6beae80b56829e3f671fedd58b6d14887184ddce26124cedfbd"
    },
    "kernelspec": {
      "display_name": "Python 3.8.9 64-bit",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.9"
    },
    "orig_nbformat": 4,
    "colab": {
      "provenance": []
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}