Pythonで自分の日記を分析した話!

大学の講義で「実践データサイエンス」という講義がありまして、Pythonでのデータ解析を学びました。
その最終課題が「学習したことを用いて自由に行っていい」とのことだったので、自分の日記を分析することにしました。

べらぼうに長いので、詳しいことは良いから結果だけ見たい方は目次の「分析結果」まで飛ばしちゃってください!

背景と動機

実は高校1年の冬から毎日ではないのですが日記を書き続けてまして、そのデータを活かすことで独創性のあるレポートができるのではないかと考えて、日記の分析をすることに決めました!

実施方法

テキストデータ(日記)の下処理

正規表現を用いることにより、元となる日記のテキストデータから該当する箇所だけ取り出し、配列に代入する処理を書きました。
日記はスマホアプリで書いていた時期と、手書きの時期があり、後者の日記は授業の合間に頑張って文字入力しました。文字が汚すぎてOCRも歯が立ちません。人海戦術です。

文字数解析

Pythonに備わっているlen関数を用いて文字数を計測しました。
月ごとの文字数は辞書型配列を用意し、該当する月の要素に文字数を足していく形で実現しました。

テキストマイニング

形態素解析

形態素解析ライブラリJanomeで解析しました。

形態素解析エンジンMeCabが後ほど出てきますが、JanomeはMeCabを用いたライブラリであり、 Janomeの方が短いコードで実現可能であるため、形態素解析においてはJanomeを利用しました。
MeCab使ったり、Janome使ったりごっちゃになっているのは力不足によるものです……

Mecabは京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンである。

https://taku910.github.io/mecab/

Janomeの解析能力のイメージです↓↓

今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
の    助詞,連体化,*,*,*,*,の,ノ,ノ
昼    名詞,副詞可能,*,*,*,*,昼,ヒル,ヒル
ごはん    名詞,一般,*,*,*,*,ごはん,ゴハン,ゴハン
は    助詞,係助詞,*,*,*,*,は,ハ,ワ
奥州    名詞,固有名詞,地域,一般,*,*,奥州,オウシュウ,オーシュー
ハーブ    名詞,一般,*,*,*,*,ハーブ,ハーブ,ハーブ
の    助詞,連体化,*,*,*,*,の,ノ,ノ
鶏    名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ
ささ    動詞,接尾,*,*,五段・サ行,未然形,さす,ササ,ササ
み    動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
だっ    助動詞,*,*,*,特殊・ダ,連用タ接続,だ,ダッ,ダッ
た    助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
の    名詞,非自立,一般,*,*,*,の,ノ,ノ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
が    助詞,接続助詞,*,*,*,*,が,ガ,ガ
、    記号,読点,*,*,*,*,、,、,、
調理    名詞,サ変接続,*,*,*,*,調理,チョウリ,チョーリ
方法    名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー
が    助詞,格助詞,一般,*,*,*,が,ガ,ガ
いまいち    副詞,一般,*,*,*,*,いまいち,イマイチ,イマイチ
分から    動詞,自立,*,*,五段・ラ行,未然形,分かる,ワカラ,ワカラ
ず    助動詞,*,*,*,特殊・ヌ,連用ニ接続,ぬ,ズ,ズ
苦労    名詞,サ変接続,*,*,*,*,苦労,クロウ,クロー
し    動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
まし    助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た    助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。    記号,句点,*,*,*,*,。,。,。

こんな感じで日本語を品詞分解できます!

文章の自動生成

日記の全文字を、形態素解析エンジンMeCabを用いて分かち書きしました。

分かち書きとは語の区切りごとに空白をいれる処理で、例えば

ビーカーに淹れた珈琲は格別だ。

を分かち書きすると

ビーカー に 淹れ た 珈琲 は 格別 だ 。

となります。

分かち書きされたデータをマルコフ連鎖ライブラリ markovify に与えることで…

※上図はイメージ(実際のコードでは3単語ずつでまとめて生成されているため上図と異なる)

このような単語ごとの結びつきや傾向を解釈してくれます。

WordCloud

WordCloudという、文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示したものがあります。

MeCabで分かち書きしたものをWordCloudライブラリでWordCloudにし、日本語フォント及びMatplotlibを用いて描写することで、よく使われる単語が可視化できるんです。

とはいえ、実際の結果はゴリゴリの個人情報なので、同じコードを用いて太宰治の「女生徒」でwordCloudを作ってみました。こちらの作品は著作権消滅済みです。

こんな感じで視覚的に文章内でよく使われる単語を把握できちゃいます!

感情の変化と分析

後述の「感情データ」の箇所で提示した単語感情極性対応表を用い、各日記ごとの形態素解析した文字と対応表を照らし合わせ、日記を数値化しました!

データ

日記データ

月に書く日記というスマホアプリで日記データを作成しました。このアプリのtxt出力機能で出力されたデータを用います。

こんな形の構造になっています↓↓

2018.01.10 午後 11:10
タイトル(ある場合のみ)
 - 
日記本文
 
2018.01.11 午前 01:43
タイトル(ある場合のみ)
 - 
日記本文

気象データ

気象庁より、過去の降水量をCSVファイル形式で取得して、一部加工(引っ越しなどによる地域の変化対応)を施した後Googleドライブにアップロードし、それをpandasを用いて読み取り配列に保持しました。

気象庁 過去の気象データ・ダウンロード
https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

感情データ

日記ごとの感情を数値化するために東京工業大学奥村・高村・船越研究室作成の単語感情極性対応表を用いて日記の文章から感情を数値化しました。

使用したデータは岩波国語辞書をもとに作成されてて、

優れる:すぐれる:動詞:1
良い:よい:形容詞:0.999995
喜ぶ:よろこぶ:動詞:0.999979
褒める:ほめる:動詞:0.999979
めでたい:めでたい:形容詞:0.999645
賢い:かしこい:形容詞:0.999486
善い:いい:形容詞:0.999314
適す:てきす:動詞:0.999295
天晴:あっぱれ:名詞:0.999267
祝う:いわう:動詞:0.999122
功績:こうせき:名詞:0.999104
賞:しょう:名詞:0.998943
嬉しい:うれしい:形容詞:0.998871
喜び:よろこび:名詞:0.998861
才知:さいち:名詞:0.998771
徳:とく:名詞:0.998745

のように各単語に数値が与えられています。

+1~-1で存在し、+1が最もポジティブ、-1が最もネガティブといった形となっています。

単語感情極性対応表
http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html

日経平均株価データ

日経平均プロファイルのデータセンターよりCSVファイルを取得しました。
CSVファイルは以下のような形です。

データ日付終値始値高値安値
2018/1/423506.3323073.7323506.3323065.2

日経平均株価は休日などの数値が存在しません。しかしながらそれらの日の値を0にするとグラフが乱れて、かといって空白にすると描画が崩れるため、やむを得ず数値が存在しない日は前日の値を入れることでしのぎました。

本来であれば株価はローソク足チャートが最適ではありますが、時間的都合などによりグラフ描写では「終値」のみを取り入れました。

日経平均プロファイルダウンロードセンター
https://indexes.nikkei.co.jp/nkave/index?type=download

コード

こちらになります。

https://github.com/Usuyuki/practical_datescience_2020_final_report

えげつなく汚いコードです。ご了承ください。
開発環境がGoogle colaboratoryであった関係でそれ用のロジックも混じっています。

分析結果

文字数解析

基本的な情報

レポート作成時期が2月であったため、使用した日記データもそれ以前のものとなっています。

日記の抽出範囲: 2018.01.10(高校1年冬)~2021.01.31 (大学1年冬)
日記の日付数:656日(同日に複数の日記が存在する場合はまとめて1つとした)
日記の総文字数:280453字(改行コードなど除く)
→これは400字詰め原稿用紙702枚分にあたる
日記1つあたりの平均文字数:約427.5198170731707字
一文あたりの平均文字数:約37.523793509332435字

文字数推移

折れ線グラフのほうが適しているが、日記の量が膨大であり、折れ線グラフではたいへん見にくくなってしまったため、あえて棒グラフとしました。

株価のように上がり下がりを繰り返す文字数の推移となって、局所的に大幅に文字数が増えることがあり、どうやら私は長文日記を書く日が時より訪れる傾向にあると考えられますね笑

月ごとにすることで全体の推移よりも増加の傾向が見やすくなりました。文字数は増加傾向にあるといえますね。ただ、これは合計文字数なので日記を書いていない場合は必然的に少なくなります。
なので文字数を日記数で割ったグラフにすると…

200~500字で長らく推移したあと、2019年冬頃、2020年秋頃に増加しています。合計文字数と比べると穏やかな変化です。とはいえ、月によって平均文字数が200字~800字弱とかなりブレがありますね。
主観的な意味付けになっちゃいますが、高校3年の冬、大学1年全体など苦しい時期ほど日記の文字数が増える(長い日記になる)傾向にあることが考えられました。

月ごとの合計日記文字数の変化が増加傾向にあるのは1日記あたりの文字の増加に加えて、日記を書く頻度も増加していることに起因していると考えられます。
毎年秋に執筆率が下がるのも興味深いですね。

最後に、文字数の分布です。

日記1回あたりの平均文字数は404.5625 字です。

私自身は長文日記を大量に作ったと記憶していましたが、意外にも比較的少ない文字数の日記が多かったです。
記憶は当てにならないと気づかされました笑

降水量と文字数の関係

相関係数は-0.03829410227574895でした。

降水量と文字数に相関関係は見られませんでした。当たり前といえばそうかも知れませんが……

日経平均株価と文字数の関係

相関係数は0.2573995695031898でした。

文字数全体の推移のグラフを生成した際に、文字数の変化が激しかったので、「もしや日経平均株価と文字数の変化が連動しているかも?」と心の中で思ってましたが、そのような事実は見られませんでした。

コロナ禍による株価の変化に比べ、文字数の変化が小さかったことが要因かもしれません。2020年は例外すぎますね…

投資家の日記では文字数の推移と株価が連動しているかもしれませんが、一般的な生徒・学生と株価との関わりは薄いと考えられるので、この結果は妥当な気がします。

テキストマイニング

前処理として

  • 同義語の統一(コーヒーと珈琲をコーヒーに統一など)
  • Unicode正規化(カタカナは全角に統一、アルファベットは半角に統一など)

を行いました。

また単語のカウント時には

  • 代名詞、非自立の名詞、数字をカウントから除外
  • 名詞は複合名詞として区別

→例えば「墾田永年私財法」は「墾田」「永年」「私財」「法」と単体の名詞ごとにカウントするのではなく、まとめて「墾田永年私財法」という複合名詞としてカウント

  • 活用形は全て基本形にしてカウント

→例えば「楽しい」「楽しく」「楽しかっ」は全て「楽しい」の基本形扱いとしてカウントを行いました。

形態素解析(総合)

日記全体の文章から形容詞、助詞、動詞、名詞の出現順トップ50を以下に記します

形容詞 登場順

('単語',出現回数)となっている

1 : ('ない', 715)
2 : ('いい', 452)
3 : ('すごい', 244)
4 : ('悪い', 170)
5 : ('多い', 148)
6 : ('良い', 122)
7 : ('よい', 116)
8 : ('嬉しい', 110)
9 : ('辛い', 100)
10 : ('楽しい', 85)
11 : ('忙しい', 81)
12 : ('高い', 77)
13 : ('大きい', 77)
14 : ('怖い', 74)
15 : ('うまい', 66)
16 : ('強い', 66)
17 : ('難しい', 65)
18 : ('少ない', 61)
19 : ('弱い', 59)
20 : ('優しい', 58)
21 : ('つらい', 58)
22 : ('早い', 56)
23 : ('痛い', 53)
24 : ('遅い', 51)
25 : ('ほしい', 48)
26 : ('やばい', 43)
27 : ('ものすごい', 43)
28 : ('無い', 40)
29 : ('面白い', 37)
30 : ('低い', 37)
31 : ('凄い', 33)
32 : ('正しい', 32)
33 : ('長い', 27)
34 : ('まずい', 26)
35 : ('かわいい', 25)
36 : ('素晴らしい', 25)
37 : ('深い', 24)
38 : ('眠い', 22)
39 : ('悔しい', 22)
40 : ('厳しい', 21)
41 : ('羨ましい', 21)
42 : ('きつい', 19)
43 : ('新しい', 18)
44 : ('にくい', 18)
45 : ('遠い', 16)
46 : ('美味しい', 16)
47 : ('甘い', 15)
48 : ('可愛い', 14)
49 : ('おかしい', 14)
50 : ('欲しい', 14)

良い(いい)が悪いよりも超えており、比較的ポジティブな内容の日記が多いことが予想されますね。

また「やばい」「ものすごい」といった自分がよく使う形容詞も読み取れました。

「かわいい」「可愛い」などひらがなと漢字で別カウントとなってしまっているところが見られますが、ここについての処理は現状個別にreplace関数などで対応するしかなく、汎用性にかけてしまうのが難点です……

助詞 登場順

1 : ('て', 5027)
2 : ('の', 4981)
3 : ('は', 4507)
4 : ('が', 4491)
5 : ('に', 4360)
6 : ('と', 3546)
7 : ('を', 3127)
8 : ('も', 2403)
9 : ('で', 2055)
10 : ('から', 1141)
11 : ('か', 1089)
12 : ('や', 422)
13 : ('という', 397)
14 : ('たり', 390)
15 : ('けど', 388)
16 : ('って', 377)
17 : ('し', 368)
18 : ('のに', 311)
19 : ('じゃ', 305)
20 : ('だけ', 301)
21 : ('まで', 272)
22 : ('ば', 236)
23 : ('より', 214)
24 : ('かも', 198)
25 : ('でも', 185)
26 : ('など', 178)
27 : ('しか', 167)
28 : ('へ', 159)
29 : ('とか', 156)
30 : ('くらい', 150)
31 : ('なんて', 140)
32 : ('な', 127)
33 : ('ばかり', 115)
34 : ('として', 106)
35 : ('ので', 94)
36 : ('よ', 91)
37 : ('だって', 84)
38 : ('ほど', 75)
39 : ('ながら', 68)
40 : ('ね', 60)
41 : ('について', 57)
42 : ('なぁ', 52)
43 : ('すら', 52)
44 : ('に対して', 48)
45 : ('なんか', 43)
46 : ('ちゃ', 40)
47 : ('ばっかり', 33)
48 : ('けれど', 26)
49 : ('っていう', 24)
50 : ('によって', 24)

他と比べて助詞は登場回数が極めて多いことから、日本語はやはり「てにをは」が大事だということが考えられました。

動詞 登場順

1 : ('する', 3017)
2 : ('いる', 1997)
3 : ('なる', 845)
4 : ('てる', 816)
5 : ('ある', 783)
6 : ('思う', 678)
7 : ('れる', 659)
8 : ('見る', 507)
9 : ('できる', 502)
10 : ('言う', 470)
11 : ('やる', 435)
12 : ('しまう', 421)
13 : ('行く', 329)
14 : ('すぎる', 259)
15 : ('いう', 253)
16 : ('感じる', 239)
17 : ('終わる', 226)
18 : ('みる', 223)
19 : ('わかる', 217)
20 : ('頑張る', 210)
21 : ('られる', 207)
22 : ('くる', 196)
23 : ('くれる', 195)
24 : ('分かる', 179)
25 : ('考える', 177)
26 : ('知る', 166)
27 : ('来る', 162)
28 : ('聞く', 158)
29 : ('気づく', 156)
30 : ('しれる', 154)
31 : ('出る', 149)
32 : ('話す', 137)
33 : ('いける', 132)
34 : ('もらう', 125)
35 : ('変わる', 124)
36 : ('寝る', 120)
37 : ('違う', 116)
38 : ('いく', 112)
39 : ('作る', 108)
40 : ('入る', 101)
41 : ('つける', 95)
42 : ('せる', 88)
43 : ('忘れる', 87)
44 : ('読む', 86)
45 : ('帰る', 85)
46 : ('持つ', 80)
47 : ('褒める', 80)
48 : ('かける', 79)
49 : ('使う', 77)
50 : ('起きる', 72)

私自身は〇〇と感じるより、〇〇と思うをより使う傾向にあると読み取れました。
また、「忘れる」が87回も使われており、忘れっぽい人間である可能性も考えられます。

名詞 登場順

個人名についてはプライバシー保護の観点から伏せました。

1 : ('自分', 977)
2 : ('人', 632)
3 : ('勉強', 340)
4 : ('今日', 300)
5 : ('さ', 291)
6 : ('話', 262)
7 : ('今', 194)
8 : ('先生', 173)
9 : ('時間', 166)
10 : ('?', 158)
11 : ('周り', 157)
12 : ('...', 139)
13 : ('気持ち', 124)
14 : ('あと', 114)
15 : ('気', 112)
16 : ('最近', 112)
17 : ('部活', 111)
18 : ('そう', 100)
19 : ('他', 99)
20 : ('やる気', 99)
21 : ('授業', 95)
22 : ('問題', 93)
23 : ('動画', 89)
24 : ('大事', 87)
25 : ('夜', 85)
26 : ('(個人名のため除外)', 83)
27 : ('ダメ', 82)
28 : ('大学', 78)
29 : ('(個人名のため除外)', 78)
30 : ('嫌', 76)
31 : ('(個人名のため除外)', 76)
32 : ('明日', 75)
33 : ('LINE', 74)
34 : ('前', 72)
35 : ('好き', 72)
36 : ('人生', 69)
37 : ('言葉', 69)
38 : ('仕事', 68)
39 : ('最後', 65)
40 : ('世界', 65)
41 : ('感じ', 64)
42 : ('心', 63)
43 : ('受験', 63)
44 : ('昨日', 62)
45 : ('(個人名のため除外)', 62)
46 : ('アニメ', 61)
47 : ('最初', 60)
48 : ('夢', 60)
49 : ('不安', 59)
50 : ('先輩', 58)

一人称を「自分」としつつ文章内でもたまに「俺」がでてしまっていることが垣間見えてしまいました笑
「...」をよく使うことも読み取れました。

ここでの公表は控えますが、個人名から、関わりの深い人も読み取れました。
やはり高校・大学時代に書いた日記から抽出しているため、勉強、大学、先輩、授業、など学生生活に関係する言葉が多いですね。

形態素解析(月ごと)

月ごとの形容詞トップ10を以下に示します。

ただしあまりにも数が多すぎるため、変化が大きくかつ個人情報が含まれにくい形容詞に限定し、数もトップ10に絞りました。

2018.01 の 形容詞 トップ10は [('いい', 12), ('辛い', 8), ('ない', 7), ('悪い', 4), ('眠い', 3), ('やばい', 3), ('嬉しい', 2), ('かわいい', 2), ('まずい', 2), ('すごい', 2)]
2018.02 の 形容詞 トップ10は [('優しい', 3), ('ない', 3), ('辛い', 2), ('早い', 1), ('遅い', 1), ('弱い', 1), ('かわいい', 1)]
2018.03 の 形容詞 トップ10は [('ない', 10), ('いい', 4), ('よい', 2), ('忙しい', 2), ('楽しい', 2), ('痛い', 1), ('遅い', 1), ('軽い', 1), ('うまい', 1), ('つらい', 1)]
2018.04 の 形容詞 トップ10は [('っぽい', 2), ('いい', 2), ('よい', 2), ('悪い', 1), ('眠い', 1), ('きつい', 1), ('忙しい', 1)]
2018.05 の 形容詞 トップ10は [('ない', 14), ('すごい', 10), ('いい', 8), ('悪い', 8), ('うまい', 6), ('良い', 5), ('よい', 4), ('やばい', 3), ('きつい', 3), ('まずい', 3)]
2018.06 の 形容詞 トップ10は [('ない', 16), ('いい', 12), ('すごい', 9), ('悪い', 8), ('やばい', 7), ('よい', 6), ('っぽい', 5), ('多い', 5), ('忙しい', 4), ('だるい', 3)]
2018.07 の 形容詞 トップ10は [('ない', 6), ('いい', 6), ('悪い', 5), ('高い', 3), ('やばい', 2), ('多い', 2), ('痛い', 2), ('羨ましい', 2), ('うまい', 2), ('低い', 2)]
2018.08 の 形容詞 トップ10は [('ない', 4), ('多い', 3), ('弱い', 3), ('忙しい', 2), ('いい', 2), ('嬉しい', 2), ('楽しい', 2), ('よい', 1), ('早い', 1), ('つまらない', 1)]
2018.09 の 形容詞 トップ10は [('ない', 8), ('いい', 5), ('優しい', 4), ('気持ちよい', 2), ('多い', 2), ('すごい', 1), ('素晴らしい', 1), ('難しい', 1), ('怖い', 1), ('眠い', 1)]
2018.10 の 形容詞 トップ10は [('ない', 7), ('いい', 4), ('悪い', 4), ('忙しい', 3), ('素晴らしい', 3), ('辛い', 2), ('凄い', 2), ('嬉しい', 2), ('良い', 2), ('大きい', 2)]
2018.11 の 形容詞 トップ10は [('いい', 11), ('ない', 10), ('まずい', 5), ('忙しい', 4), ('悪い', 4), ('ほしい', 3), ('大きい', 2), ('辛い', 2), ('つらい', 2), ('難しい', 2)]
2018.12 の 形容詞 トップ10は [('ない', 18), ('いい', 7), ('忙しい', 6), ('楽しい', 6), ('めんどくさい', 4), ('悪い', 4), ('つらい', 3), ('羨ましい', 3), ('難しい', 3), ('すごい', 2)]
2019.01 の 形容詞 トップ10は [('いい', 21), ('ない', 17), ('悪い', 15), ('よい', 6), ('すごい', 6), ('うまい', 4), ('多い', 3), ('辛い', 3), ('遅い', 2), ('良い', 2)]
2019.02 の 形容詞 トップ10は [('ない', 19), ('よい', 13), ('いい', 11), ('悪い', 6), ('良い', 4), ('早い', 3), ('大きい', 3), ('怪しい', 3), ('多い', 3), ('寒い', 3)]
2019.03 の 形容詞 トップ10は [('ない', 17), ('いい', 16), ('すごい', 6), ('やばい', 5), ('高い', 5), ('悪い', 4), ('忙しい', 4), ('少ない', 4), ('弱い', 4), ('まずい', 3)]
2019.04 の 形容詞 トップ10は [('いい', 10), ('ない', 7), ('悪い', 5), ('正しい', 4), ('多い', 4), ('忙しい', 3), ('楽しい', 2), ('すごい', 2), ('甘い', 2), ('うまい', 2)]
2019.05 の 形容詞 トップ10は [('いい', 13), ('ない', 10), ('悪い', 8), ('よい', 5), ('すごい', 4), ('長い', 4), ('良い', 4), ('楽しい', 3), ('早い', 3), ('おかしい', 3)]
2019.06 の 形容詞 トップ10は [('ない', 6), ('楽しい', 2), ('いい', 2), ('少ない', 2), ('面白い', 1), ('低い', 1), ('しんどい', 1), ('妬ましい', 1), ('羨ましい', 1), ('良い', 1)]
2019.07 の 形容詞 トップ10は [('すごい', 7), ('ない', 6), ('いい', 3), ('良い', 3), ('無い', 2), ('悪い', 2), ('弱い', 2), ('悔しい', 2), ('よい', 2), ('多い', 2)]
2019.08 の 形容詞 トップ10は [('ない', 9), ('いい', 4), ('高い', 2), ('多い', 2), ('すごい', 1), ('低い', 1), ('怖い', 1), ('無い', 1), ('薄い', 1), ('遅い', 1)]
2019.09 の 形容詞 トップ10は [('ない', 11), ('いい', 10), ('遅い', 7), ('良い', 4), ('よい', 4), ('うまい', 3), ('羨ましい', 2), ('ほしい', 2), ('辛い', 2), ('弱い', 2)]
2019.10 の 形容詞 トップ10は [('ない', 12), ('いい', 8), ('ほしい', 4), ('嬉しい', 4), ('辛い', 4), ('少ない', 2), ('おかしい', 2), ('強い', 2), ('怖い', 2), ('苦しい', 1)]
2019.11 の 形容詞 トップ10は [('ない', 30), ('いい', 19), ('悪い', 8), ('多い', 7), ('すごい', 6), ('辛い', 6), ('眠い', 6), ('痛い', 6), ('良い', 6), ('少ない', 5)]
2019.12 の 形容詞 トップ10は [('ない', 38), ('いい', 17), ('強い', 13), ('悪い', 13), ('良い', 11), ('つらい', 10), ('高い', 10), ('楽しい', 9), ('すごい', 7), ('少ない', 7)]
2020.01 の 形容詞 トップ10は [('ない', 22), ('辛い', 14), ('いい', 13), ('すごい', 12), ('悪い', 11), ('嬉しい', 10), ('悔しい', 9), ('厳しい', 8), ('早い', 6), ('つらい', 5)]
2020.02 の 形容詞 トップ10は [('ない', 28), ('いい', 10), ('多い', 7), ('つらい', 6), ('弱い', 4), ('悪い', 4), ('嬉しい', 4), ('すごい', 4), ('痛い', 4), ('辛い', 3)]
2020.03 の 形容詞 トップ10は [('ない', 14), ('怖い', 8), ('痛い', 8), ('すごい', 4), ('多い', 4), ('いい', 2), ('弱い', 2), ('難しい', 2), ('よい', 2), ('長い', 2)]
2020.04 の 形容詞 トップ10は [('ない', 24), ('いい', 12), ('良い', 10), ('弱い', 9), ('すごい', 8), ('多い', 7), ('強い', 5), ('楽しい', 4), ('優しい', 4), ('ものすごい', 4)]
2020.05 の 形容詞 トップ10は [('ない', 26), ('いい', 12), ('すごい', 12), ('忙しい', 9), ('多い', 8), ('無い', 8), ('楽しい', 6), ('ものすごい', 6), ('高い', 6), ('嬉しい', 5)]
2020.06 の 形容詞 トップ10は [('ない', 26), ('いい', 9), ('痛い', 7), ('すごい', 6), ('多い', 6), ('忙しい', 5), ('ものすごい', 4), ('悪い', 4), ('うまい', 4), ('難しい', 4)]
2020.07 の 形容詞 トップ10は [('ない', 37), ('すごい', 23), ('いい', 19), ('多い', 8), ('嬉しい', 7), ('良い', 6), ('よい', 5), ('面白い', 5), ('楽しい', 5), ('優しい', 5)]
2020.08 の 形容詞 トップ10は [('ない', 44), ('いい', 15), ('良い', 8), ('大きい', 7), ('すごい', 7), ('怖い', 7), ('早い', 6), ('悪い', 6), ('多い', 6), ('辛い', 6)]
2020.09 の 形容詞 トップ10は [('ない', 56), ('いい', 34), ('すごい', 24), ('多い', 18), ('嬉しい', 16), ('難しい', 13), ('少ない', 11), ('よい', 8), ('良い', 7), ('高い', 7)]
2020.10 の 形容詞 トップ10は [('いい', 29), ('ない', 25), ('すごい', 20), ('嬉しい', 15), ('良い', 14), ('難しい', 12), ('多い', 9), ('よい', 9), ('高い', 8), ('大きい', 8)]
2020.11 の 形容詞 トップ10は [('ない', 36), ('いい', 36), ('すごい', 18), ('嬉しい', 16), ('強い', 9), ('ほしい', 7), ('辛い', 7), ('悪い', 7), ('優しい', 7), ('多い', 7)]
2020.12 の 形容詞 トップ10は [('ない', 48), ('いい', 19), ('すごい', 19), ('忙しい', 17), ('悪い', 9), ('甘い', 7), ('多い', 7), ('優しい', 6), ('辛い', 5), ('よい', 5)]
2021.01 の 形容詞 トップ10は [('ない', 50), ('いい', 34), ('すごい', 17), ('高い', 10), ('良い', 10), ('大きい', 9), ('悪い', 9), ('多い', 7), ('やばい', 6), ('凄い', 5)]

どの月でも第1位はあまり変動しないものの、後半は月により単語が変動していることが伺えます。

上記には示していない品詞については

  • 助詞:月ごとの変化がほとんど見られなかった。
  • 動詞:月ごとの変化がほとんど見られなかった。
  • 名詞:月ごとの変化が極めて大きく、その月で関わりの深かった人や出来事が読み取れた。

といった感じでした。

日記1つ1つを遡っていくのは大変な時間を要するのですが、月ごとの名詞を登場順で表示することで大まかな過去は読み取ることができました。

また名詞のみで抽出した場合は感情が出てこないため事象の振り返りに役立ち、また形容詞のみで抽出した場合は事実は読み取れないが感情については読み取とれるため心持ちの振り返りに役立ちました。振り返り方に合う品詞選びが重要だと考えられます。

WordCloudによる可視化

個人情報保護のため、公開は控えさせていただきます。

日記の作成時が高校・大学時代で占めていることから、勉強や先生、同級生や先輩の名前が目立ちました。

感情の分析と変化

単語感情極性対応表に基づき、各日記に含まれる単語から感情(気持ち)の推移をグラフ化しました。
+1が最もポジティブであり、-1が最もネガティブです。

正の値に一度も到達していない……
これは形態素解析(総合)での形容詞の登場順とは大きく矛盾する結果となりました。

その上、後半非常に安定しており、明らかに当時の感情とは異なるものとなってしまっています。
単語感情極性対応表には名詞49,002語、動詞4,254語、形容詞665語、副詞1,207語が収録されているとのことでしたが、

習慣:-0.665422

など文脈を見ずにはネガティブとは言えないものまで辞書上ではネガティブとなっており、これが原因の1つだと考えられます。

文脈ではなく、単語ごとの意味で数値化されるため、文脈により感情が異なる単語などもあることを踏まえると、事実とは乖離している可能性が大いにあると考えられます。

マルコフ連鎖による文字の自動生成

私の日記から日本語形態素解析エンジン MeCab とマルコフ連鎖ライブラリ markovify を用いて機械的に文字を生成しました。

この結果に関しても個人情報を大量に含んでいるため、公開は控えます。

データが足りないのか、モデルが悪いのか、文節の区切り方が悪いのか、下処理が不適切なのか、なんともいえない怪文が生成されました。

全体を通して

考察

全体的な傾向からは私自身の傾向、月ごとの傾向からは出来事による日記の傾向を読み取ることができました。しかしながらどれも主観的な評価にすぎない結果となってしまいました。

感情の数値化などを試みたが正確と言える結果にならず、文字の客観的な分析ができませんでした。

所感

僅かなパラメータの違いや前処理が大きな結果の違いを生み出すことを身を持って感じました。また前処理やデータの見せ方で印象操作が容易にできてしまうことも理解しました。

特に品詞登場順においては、基本形としてのカウントや非自立の名詞を除外するだけで大幅に順位が変わるなど、前処理の重要性を痛感しました。

降水量との関係、株価との関係及び同義語統合処理の箇所を除き、再現性のあるコードにできました。(他者の日記でも一応解析が可能であり、また4年に1度のうるう年がこない2100年の日付処理にも対応しているため、2100年をまたぐ日記でもエラーなく分析可能と思われます)

さらに、Python一つのみで文章解析からグラフの表示、機械的な文章生成までできるという汎用性を改めて知ることもできました。

品詞解析では個々の日記を見ることだけでは気づけない性格や癖的な面も発見できました。

しかしながら個人的な振り返りとしては、直接文字を見ることがやはり一番妥当だと感じました……笑

展望

1人の日記結果全体を見ることでその人の特性がいくらか読み取れましたが、複数人集まることでよりマクロな分析ができ、社会的、世代的な特性も出ることが予想できます。このことからプライバシーの観点を克服できれば複数人物の日記解析も有意義であると考えられます。

他にもミクロな視点では、月ごとなど範囲を絞ることで得られる情報が大きく異なることを踏まえると、曜日ごとや季節ごとなどで範囲を絞る試行についても有意義であると考えられます。

今回はテキストマイニングのほんの一部にしか触れておらず、係り受け解析や構文解析、より高精度な自然言語処理ロジックなどについても利用したいと考えました。

またコードが増えていくにつれ、変数名、関数名が混乱してくることも見受けられたため、今後はきちんと命名規則に基づく名前付けを行いたいと思います。

参考資料と使用データ

参考資料

janomeによる日本語解析

Pythonライブラリの使い方 [著者:松田 晃一,第7章自然言語処理(Janome),pp.169-189,発行年:2019]

正規表現

Pythonの正規表現モジュールreの使い方 [URL:https://note.nkmk.me/python-re-match-search-findall-etc/,note.nkmk.me,閲覧日時:2021年1月13日]
忘れっぽい人のための正規表現チートシート [URL:https://qiita.com/tossh/items/635aea9a529b9deb3038,tossh,閲覧日時:2021年1月13日]

マルコフ連鎖による文章生成

【自動生成】入賞作品から作文を生成したら素晴らしい文章ができる説 [URL:https://www.youtube.com/watch?v=1OfCyavg_ZE,閲覧日時:2021年1月19日]
2018/8/25【63日目】マルコフ連鎖で文章を作ってみる [URL:https://dailytextmining.hatenablog.com/entry/2018/08/28/213412,団体名:毎日テキストマイニング,閲覧日時:2021年1月18日]
エラー対策のための下処理:[Python3] janomeとmarkovifyを使った文章の自動生成 [URL:https://qiita.com/Cherno/items/ac9ab5a53baa2cacec31,団体名:Cherno,閲覧日時:2021年1月18日]

wordCloud生成

PythonでWord Cloudを作ってみた(和文編) [URL:https://water2litter.net/rum/post/python_wordcloud_jp/,某エンジニアのお仕事以外のメモ(分冊),閲覧日時:2021年1月28日]
Word Cloud を使ってテキストマイニングしてみる [URL:http://cedro3.com/ai/word-cloud/,cedro-blog,閲覧日時:2021年1月28日]

帯グラフの作成

matplotlibで帯グラフ [URL:https://qiita.com/yu4u/items/89bf0127ed340c026290,yu4u,閲覧日時:2021年2月1日]
Python (matplotlib/seaborn) を利用した棒グラフの作成方法 棒グラフ [URL:https://stats.biopapyrus.jp/python/barplot.html,biostatistics,閲覧日時:2021年2月1日]

CSVから配列への変換

pandas.DataFrame, SeriesとPython標準のリストを相互に変換 [URL:https://note.nkmk.me/python-pandas-list/,note.nkmk.me,閲覧日時:2021年2月1日]

感情数値化

Python 感情極性対応表とjanomeを使って日本語で良いニュースと悪いニュースの分類を試みる [URL:https://ohke.hateblo.jp/entry/2017/10/27/230000,団体名:け日記,閲覧日時:2021年2月5日]
Pythonで自然言語処理!janomeと 感情極性を使って日本語の感情分析をやってみた [URL:https://programming-info.dream-target.jp/python,転ばぬ先のプログラミングのノウハウ,閲覧日時:2021年2月7日]

実践データサイエンス授業と資料全般

使用データ

形態素解析エンジンMecab

MeCab: Yet Another Part-of-Speech and Morphological Analyzer [URL:https://taku910.github.io/mecab/]

形態素解析ライブラリJanome

Janome v0.4 documentation (ja) [URL:https://mocobeta.github.io/janome/]

過去の降水量データ

気象庁 過去の気象データ・ダウンロード [URL:https://www.data.jma.go.jp/gmd/risk/obsdl/index.php,気象庁,閲覧日時:2021年2月1日]

wordCloud参考画像作成に使用した文章のデータ

青空文庫 太宰治 女生徒 [URL:https://www.aozora.gr.jp/cards/000035/card275.html#download,青空文庫,閲覧日時:2021年2月5日]

感情判定に使用した単語感情極性対応表

単語感情極性対応表 [URL:http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html,東京工業大学 奥村・高村・船越研究室,閲覧日時:2021年2月5日]
高村大也, 乾孝司, 奥村学
"スピンモデルによる単語の感情極性抽出", 情報処理学会論文誌ジャーナル, Vol.47 No.02 pp. 627--637, 2006.

日経平均株価

日経平均プロファイル ダウンロードセンター [URL:https://indexes.nikkei.co.jp/nkave/index?type=download#download,日経平均プロファイル,閲覧日時:2021年2月5日]