KHコーダで 「#大学生の日常も大事だ 」を分析してみた(ちょっと追記)

#大学生の日常も大事だ というハッシュタグがツィッターを席巻したことがありました。そこで、しばらくこのハッシュタグのついたツィートや、そのツィートをしたアカウントのツィートをツィッタAPIで収集しておりました。 7/10から7/29までに取得した173GBのツィートのデータから、当該ハッシュタグのついた88,082件ツィートを、Pythonであれこれ整形して、さらにKHコーダを使ってちょこちょこいじってみて、なるほど、こういう感じかな、と思ったのが以下の図です。

f:id:digitalnagasaki:20200801014548j:plain
コーディング:MDS

「今後」と「辛さ」、「施設」と「費用」がそれぞれ近いということ、それから、「横の人間関係」が「勉強・研究」と比較的近いことが興味深いところです。

なお、今回の分析の仕方だと、否定表現も肯定表現も区別できていません。「辛くない」というツィートがあったとしたら「辛い」として カウントされてますので、上の図はそういうものだと思って見てください。

ただ、そうだとしても、やはり、今後のことを心配しているであろう人が多そうであること、施設が十分に使えないのに費用がかかることについて色々な意見が出ているで あろうこと、友人やサークル、人との出会いなどが大学生のなかでは勉強・研究とならんで重要であること、など、ツィートをじっと読めばわかることではありますが、このようにして 見やすい形で確認することができました。

感情表現もとってみたいと思ってAmazonのそういうAPIなども試してみたのですが、あまりよい結果にならなかったので今回はここまでとしておきました。

なお、今回使ったデータの頻出語リストは以下のような感じでした。

f:id:digitalnagasaki:20200801235448p:plain
頻出語リスト

HSH_1 というのはハッシュタグの置き換え、RT_PATI1 というのは、「大学生は、いつまで我慢をすればいいのでしょうか。」というリツィートを置き換えたものです。なぜこのような 置き換えをしているのか、というのは下の方で説明します。これが次のURLとほぼ同数なのは、 このURLが示す画像(マンガ的なもの)と一緒にリツィートされたものが多かった、ということです。このツィートのツィッタ画面上でのリツィート数はもっと多いのですが(11万くらい?)、APIでツィート収集をすると アクセス制限をかけているツィートを取得できないため、このような数字になっています。ということは、この件に関心を持っているユーザのうちアクセス制限をしている割合が相当数に なる、ということでもあります。アクセス制限下で、表に出せない本音を共有している人達がかなりの数いるかもしれないと思うと、この点もちょっと気になるところです。

ここまでのやり方

以下、どんな風にしてここまでたどり着いたか、逆にたどっていってみますので、同じようなことをしてみたい人のご参考になればと思います。

KHコーダをある程度使ったことがある人ならご存じかと思いますが、「コーディング」機能を使って人力クラスタリングを行なった上で、さらに多次元尺度法のデフォルト設定であるKruskal/Jaccardを使って みました。他の方法も一通り試してみましたが、これが一番しっくりくるような感じでした。

コーディング

「コーディング」は以下のようにしてみました。KHコーダでは、このようにして、自分で 出現単語を分類して、分類単位での分析を行なうことができます。

*大学生
大学生 or 若者 or 学生 or 新入生

*大学・教員
大人 or 先生 or 教授 or 教員 or 大学

*横の人間関係
友達 or サークル or 会える or 先輩 or 交流 or 出会い or 部活

*辛さ
辛い or 限界 or 我慢 or 孤独 or 不満 or リスク or 不安 or 鬱 or 嫌

*勉強・研究
レポート or 課題 or 勉強 or 研究

*施設
図書館 or 施設 or キャンパス or 学校

*今後
後期 or 今年 or 秋 or 来年

*コロナ感染症
コロナ or 感染 or 対策

*授業形態
オンライン or パソコン or 対面 or 授業 or 単位 or 実習 or ゼミ or 実験 or 講義

*費用
学費 or お金 or 支援

*日常生活
日常 or バイト

大量のリツィートの扱い

普通にツィートを集めると、大量のリツィートが入ってきてしまいます。これを丸ごとKHコーダにかけると、大量にリツィートされた文章に含まれる単語に分析結果が大きく引きずられてしまいます。それはそれで良いということもあるかもしれませんが、今回の場合、単なるリツィートだと、書いた人の事情を表しているというよりは単に賛同しているに過ぎない場合が多いかもしれないということで、リツィートはなるべく外して、自ら書いたものを分析対象とすることにしました。

APIで取得したツィッターの構造化データにはリツィートであるという情報も含まれているのですが、どういう構造になっているのかをきちんと検討する時間が惜しかったので、Pythonで「同じテキストが5つ以上あったらリツィートとみなす」という風に処理するプログラムを書いて処理しました。ただし、リツィートしつつ何か自分で付け足している場合も考えられるため、リツィートの文は記号+連番に置き換え、未知語としてKHコーダの分析対象にできるようにしました。

データの整形

KHコーダに読み込ませるデータはCSV形式である必要があります。そこで、Pythonのプログラムをちょろっと書いて、集めたツィートを「日付, ID, ScreenName, TweetText」というCSV形式に変換しました。最初は、全データをCSVにしてみたり、「当該ハッシュタグのついたタグ+その後5件まで」というようなことをやってみたのですが、KHコーダに読み込ませたら2日経っても読み込みが終わらない、という状況になってしまったので、それは諦めて当該ハッシュタグ付きのみとしました。

ツィッタの収集

ツィッタの収集は、ツィッタAPIの利用申込をすると、無償で225回/15分のツィート検索&取得ができます。利用制限回数はこちらにまとめられています。前述のようにJSON形式の非常に詳細な構造化データが落ちてきます。どれくらい詳細かというと、試しに一つ数えてみたら7322文字ありました。140字ツィートするだけでこれだけのデータが保存され、やりとりされるのだと思うとなかなか圧倒されますね。

取得用プログラムは、API認証を行なわなければならないのですが、Python3では oauth2 というライブラリがあって、それを使ったら割と簡単に書けました。

さらに、「ツィートした人のその後のツィート」も収集したかったのですが、これは900回/15分取得できますので、大量取得となってもこの規模だとまあなんとかなりました。取得したタグ付きツィートからuser IDを取り出してリストしておいて、そのリストを読み込んで定期的に収集…という形になりました。15分…ぴったりだとちょっと短いかもしれないので、time.sleep(1000) という風にして、一定時間ごとに勝手に取りに行くようにしました。

おわりに

ツィッタの文章は短い割にコントロールされていないので分析に使うには良し悪しがあると思いますが、テキスト分析やWebでのデータ取得の練習をするには良い教材になると思います。大学生の皆さんは、誰でも基本的な技能として身につけておいて損はないと思います。オンライン・オンデマンドの授業に参加できるようなパソコンと通信回線があれば、あとは無料でいくらでも勉強できます。ツィッタに限らず、電子テキストはあちこちに大量にありますので、うまく一定の基準で取得してそれを分析してみるようなことができれば、将来的にも色々役立つことがあると思います。興味がわいたら、KHコーダを作っておられる樋口耕一先生に感謝しつつ、今からでもぜひお試しください。

なお、KHコーダを本格的に使おうと思ったら、樋口先生の御著書を一度読まれることを強くおすすめします。チュートリアルの題材は漱石の『こころ』で、それ以外にも新聞記事を分析する事例など、色々興味深い内容です。コンピュータを使って日本語の文章をどういう風に処理し、理解の助けとするか、という実例として読んでみても、とても面白いです。

また、プログラミングも、今の大学生のみなさんはぜひ習得しておくとよいと思います。私は、インド哲学を勉強していたド文系の学生でしたが、大学4年生で卒論のためにパソコンを買って、その後大学院にあがってから、23歳くらいで初めてプログラミングを始めましたが、それでもそこそこできるようになりました。当時はWeb検索システムとかWeb掲示板を作ったりといったことが主でしたが、今の皆さんは、人工知能技術を簡単に使えるようになるプログラミング言語を無償で習得することもできます。正直、とてもうらやましいです。「Python 入門」で検索すれば色々な入門サイトがヒットします。ある程度Pythonを使いこなせるようになったら、最終的にはDeep Learningというキーワードで勉強すべきことを学んでいただくとよいと思います。

ツィートを分析しながら生のツィートをたくさん読ませていただいて、これもみなさんの多くの嘆きのうちのほんの一部に過ぎないと思いつつ、その大変さを改めて痛感しました。なかでも、人に会えないし新しい出会いもなかなか作れないというのは、特に新入生のみなさんには本当にきついことだと思います。課題が多過ぎる等の具体的な問題はある程度解決される部分があると思いますが、大学という場で人に会うことがもたらしてくれるかもしれないセレンディピティへの期待を代替するのはなかなか難しいことだと思います。私自身は大学では非常勤講師に過ぎないので何の権限もないのですが、そのための対応も、組織としての大学や個々の教員が、それぞれに真剣に考えてくれていると期待しています。

一方で、この状況だからこそできることもあるかもしれません。たとえば、ここでみなさんがテキスト分析やプログラミングを勉強してくだされば、社会に出てから割と直接的に役立つことも多いですし、そういう人がこの時期から劇的に増えたとしたら、IT後進国日本も、ようやく遅れを挽回できる時がくるかもしれません。もちろん、そこまで肩肘張らずとも、他にも色々なことができると思いますし、その中には、やってみたら実は面白かった、ということもあるかもしれません。この希有な体験を少しでもプラスに持っていくにはどうしたらいいか、夏休みの間に色々考えてみていただくとよいかもしれません。