LoginSignup
3
5

More than 3 years have passed since last update.

Aidemy 2020/10/30

はじめに

 こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
 今回は、株価予測1のメモの投稿になります。どうぞよろしくお願いします。

*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・株価予測の流れ確認
・①ツイートの取得
・②感情分析(ネガポジ分析)

株価予測の流れ

テクニカル分析ファンダメンタルズ分析というものがあり、今回はテクニカル分析を行う。流れは以下の通りである。(このChapterでは①と②を行う)
 ①TwitterAPIで、あるアカウントの過去のツイートを取得する。
 ②極性辞書で日毎のツイートの感情分析(ネガポジ分析)を行う。
 ③日経平均株価の時系列データを取得する。
 ④日毎のsentimentから、次の日の株価の上下を予測するモデルを作成する。

①ツイートの取得

・まずはTwitterAPIに登録する。
・登録の仕方は省略。
・登録し、「Consumer Key」,「Consumer Secret」,「Access Token Secret」,「Access Token」を入手したら、それを使ってツイートを取得する。

キーワードでツイートを取得

・コードスクリーンショット 2020-10-17 17.17.36.png

・上記コード「res」'python'の部分が、取得するキーワードになる。

アカウント単位でツイートを取得

・コードスクリーンショット 2020-10-17 17.24.56.png

・上記コード「tweets」の'@nikkei_bizdaily'の部分が、取得するアカウントになる。
@nikkei_bizdailyは「日経産業新聞」のアカウント)

②ツイートの感情分析(ネガポジ分析)

・感情分析(ネガポジ分析)とは、自然言語処理によって、テキストがポジティブな意味合いなのか、ネガティブな意味合いなのかを判断することである。
・判断基準になるものが「極性辞書」というものに入っている。テキストの各単語を辞書を参照することで感情分析を行う。
・今回は極性辞書として、「単語感情極性対応表」を使う。これは「岩波国語辞書(岩波書店)」を参考に、単語を-1~1までの値に当てはめたもの(PN値)である。値が大きいほどポジティブ、小さいほどネガティブな意味合いを示す。

ツイートの感情分析の流れ

ⅰ.ツイートを取得し、DataFrameに変換。(株価予測の手順①参照)
ⅱ.極性辞書のインポート/DataFrame化。
ⅲ.MeCabで形態素解析
ⅳ.形態素解析した単語ごとにPN値を極性辞書から取得し、辞書に追加。
Ⅴ.各ツイートごとにPN値の平均を算出する。
ⅵ.標準化を行い、PN値の値の変化をグラフに表示する。

ⅱ.極性辞書のインポート/DataFrame化

・極性辞書のインポートはpd.read_csv()で行う。「単語感情極性対応表」の中でも、「names=('Word','Reading','POS', 'PN')」と指定して、単語やPN値を読み込む。
・極性辞書の単語の部分をword_listに、PN値の部分pn_listにリスト化して格納し、合わせて辞書化する(pn_dict)。

・コード
スクリーンショット 2020-10-19 21.13.28.png

ⅲ.MeCabで形態素解析

・ツイートそのままでは極性辞書に渡すことができないので、形態素解析で単語ごとに分割する。ここでは「get_diclist」という関数を自分で定義して使用する。
・形態素解析はMeCabで行う。また、解析したものは一語ごとに改行されているので、一行ごとに分けてリスト化する。
・また、最後の二行は不要なので削除する。
・分割した各行はタブと間まで区切られているので、re.split()で完全に分割し、単語ごとにリストに追加する。(dic_list)

・コード
スクリーンショット 2020-10-19 22.27.42.png

ⅳ.形態素解析した単語ごとにPN値を極性辞書から取得し、辞書に追加

・形態素解析により、極性辞書を参照できるようになったら、単語ごとのdictデータに極性辞書のPN値を追加する。これは関数「add_pnvalue」を定義して使用する。
・前項で作成した「get_diclist」で取得できる、単語の基本形「'BaseForm'」を辞書で探し、その後が辞書にあればその形で取得し、辞書になければ'notfound'として、それぞれdiclist_newという空のリストに追加する。

・コードスクリーンショット 2020-10-20 12.16.09.png

Ⅴ.各ツイートごとにPN値の平均を算出する

・上記のdiclist_newで返されたリストから、PN値の平均を求める
・平均算出にあたって、前項で'notfound'だった箇所はPN値の算出から除外する。また、算出時にpn_listに何も入っていなかったら平均0で算出する(値が入っていないとエラーになるため)。

・コードスクリーンショット 2020-10-20 11.13.32.png

標準化を行い、PN値の値の変化をグラフに表示する

・最後に、PN値をグラフにして可視化する。ただし、そのままだと極性辞書全体でポジティブな意味合いが多いかネガティブな意味合いが多いかでグラフの結果も変わってしまうので、標準化を行うことで結果を調整する。
・またグラフについてはplt.plot()で作成する。縦軸は「pn値の平均」、横軸は「日付」である。この時、PN値以外の情報である'text'の部分はグラフに必要ない情報なので削除する。

・(復習)標準化の方法(教師なし学習3) : (データと平均の差)÷標準偏差
X = (X - X.mean(axis=0))/X.std(axis=0)

・コード(あるツイートdf_tweetsのpn値の平均「means_list」について標準化を行った場合)
スクリーンショット 2020-10-20 12.32.24.png

・グラフスクリーンショット 2020-10-20 11.57.53.png

まとめ

・株価予測には、「ツイートの取得」「感情分析(ネガポジ分析)」「株価の時系列データ取得」「株価予測モデルの作成」という流れで行われる。
・Twitter APIに登録することで、ツイートを取得できる。
・感情分析のやり方は「ネガポジ分析」を参照。

今回は以上です。最後まで読んでいただき、ありがとうございました。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5