#目次
1.はじめに
2.やったこと
3.開発環境
4.使った技術
5.手順
6.使用データ
7.コード
8.結果と考察
9.今回やったみたかったが、できなかったこと
10.おわりに
#1-はじめに
このブログはAidemy Premiumのカリキュラムの一環で、受講修了条件を満たすために公開しています。Aidemyの自然言語処理講座を6ヶ月で学んでいた@dean3203です(データ分析講座なども学習していましたが、時間の関係で最後まで到達できませんでした)。
自分はプログラミングは未経験で、仕事や他に学んでいることの兼ね合いで、なかなか計画的に受講ができない状態で、かつ夜が忙しいということもあり、チューターへの相談もほぼせずに、独学で学習していました。
今思えば、もっと計画的に相談しつつやるべきでしたが、一応なんとかこの記事を書けるところまで到達できてよかったと思っています。
今回作った成果物はまったくたいしたことないですが、時間があればもっと色々やりたかったというのが正直な感想であり、データ分析や機械学習という分野に大きな興味を持つことができました。
また、プログラミング未経験だったので、コンピューターの言語でこうやってコンピューターを動かすことができるのか、という実感を得ることもできました。
#2-やったこと
岸田総理と菅総理の国会での演説の言葉をワードクラウドで可視化して、それぞれの関心を分析してみました。テーマ設定の理由
総理の演説を取り上げた理由としては、仕事の関係で国の政策を調べる機会があり、総理大臣が変わることで政策が変わることは、経験的には理解しているものの、それを何らのデータなどで分析することができないかと思ったからです。
このような背景から、直近2人の総理大臣の演説のテキストを材料に分析を行うことにしました。
予想される期待
経験に基づく、予想される期待としては、以下のとおりになります。これがある程度分析からも言えるのかどうかがポイントです。
- 菅総理はデジタル庁を作った当事者であり、デジタル化に関連したワードを演説中に多く使っているのではないか。また菅総理の時代はコロナ禍であり、コロナ関連のワードが多く出てくるのではないか。
- 岸田総理は、新しい資本主義、新NISA、賃上げなどの政策を進めており、これらに関連するワードが演説中に使われているのではないか。
#3-開発環境
Google Colaboratory#4-使った技術
自然言語処理 (janome)今回は、演説のテキストを分析するので、Pythonで利用できる日本語の形態素解析エンジン(文章中の単語を分割して解析できる)である、Janomeを使うことにしました。
(他にも、Mecabなどの形態素解析できるライブラリがありますが、初心者であるので、Pythonパッケージとしてインストールするだけで使用できるJacomeを使うことにしました。)
#5-手順
- 首相官邸のHPから、岸田総理と菅総理の演説のテキストを取得します。今回は国会演説だけに限っています。
- この段階で、本当はスクレイピングで自動取得したかったのですが、HPのHTMLの解析がうまくできず、時間的に対応が難しくなってしまったので、手作業の力技でコピペでファイルを作成しました。
- "kishidastatement.txt","sugastatement.txt"というテキストファイルを作成し、Google Driveに保存。以下の使用データのベタ張りです。
- 岸田総理と菅総理の演説テキストファイルをjacomeで形態素解析しました。
- 名詞、動詞、形容詞を抽出し、そのままだと意味がない言葉がWordCloudにたくさん出てきてしまうので、デフォルトのSTOPWORDSに、追加で不要と判断した日本語ストップワードを加えます。
- 以上を経て、最終的に、岸田総理と菅総理の演説のWordCloudを生成しました。
#6-使用データ
岸田総理分米国連邦議会上下両院合同会議における岸田内閣総理大臣演説
https://www.kantei.go.jp/jp/101_kishida/statement/2024/0411enzetsu.html
第二百十三回国会における岸田内閣総理大臣施政方針演説
https://www.kantei.go.jp/jp/101_kishida/statement/2024/0130shiseihoshin.html
第二百十二回国会における岸田内閣総理大臣所信表明演説
https://www.kantei.go.jp/jp/101_kishida/statement/2023/1023shoshinhyomei.html
第二百十一回国会における岸田内閣総理大臣施政方針演説
https://www.kantei.go.jp/jp/101_kishida/statement/2023/0123shiseihoshin.html
第二百十回国会における岸田内閣総理大臣所信表明演説
https://www.kantei.go.jp/jp/101_kishida/statement/2022/1003shoshinhyomei.html
第二百八回国会における岸田内閣総理大臣施政方針演説
https://www.kantei.go.jp/jp/101_kishida/statement/2022/0117shiseihoshin.html
第二百七回国会における岸田内閣総理大臣所信表明演説
https://www.kantei.go.jp/jp/101_kishida/statement/2021/1206shoshinhyomei.html
第二百五回国会における岸田内閣総理大臣所信表明演説
https://www.kantei.go.jp/jp/100_kishida/statement/2021/1008shoshinhyomei.html
菅総理分
第二百四回国会における菅内閣総理大臣施政方針演説
https://www.kantei.go.jp/jp/99_suga/statement/2021/0118shoshinhyomei.html
#7-コード
岸田総理と菅総理の演説テキストファイルを読み込み、形態素解析を行って単語を抽出し、WordCloudを生成します。
(1)jacomeをインストール
!pip install janome
- Pythonのパッケージ管理ツールである pip を使用して janome ライブラリをインストール。
(2) モジュールのインポート
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
from janome.tokenizer import Tokenizer
from google.colab import drive
- WordCloudとSTOPWORDS: ワードクラウドの生成に使用(STOPWORDSはワードクラウドで無視する一般的な単語のセット)。
- matplotlib.pyplot: グラフやワードクラウドの描画に使用。
- Tokenizer: 日本語テキストの形態素解析を行うためのクラス。
- google.colab.drive: Google Colab で Google Drive をマウントし、ファイルにアクセスするために使用。
(3) 日本語フォントのインストールとGoogle Driveのマウント
!apt-get install fonts-ipafont-gothic
drive.mount('/content/drive')
- 日本語フォント(IPAフォント)をインストール(ワードクラウドで日本語を正しく表示するために必要)。
- Google Colabの環境でGoogle Driveをマウントし、ファイルシステムとしてDrive内のファイルにアクセス可能にする。
(4) ストップワードの設定
stopwords = set(STOPWORDS)
additional_stopwords = {
'これ', 'それ', ... '実現'
}
stopwords.update(additional_stopwords)
- ワードクラウド生成時に無視する単語のセットを定義。デフォルトの英語ストップワードに追加で日本語のストップワードを設定。
(5) 形態素解析を行う関数
def analyze_text(file_path):
t = Tokenizer()
words = []
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
tokens = t.tokenize(text)
for token in tokens:
part_of_speech = token.part_of_speech.split(',')[0]
if part_of_speech in ['名詞', '動詞', '形容詞']:
words.append(token.base_form)
return ' '.join(words)
- 指定したファイルパスからテキストを読み込み、形態素解析を行う。
- 解析結果から名詞、動詞、形容詞の基本形を抽出し、空白で連結して返す。
(6) ワードクラウドを生成する関数
def create_wordcloud(text, title):
wordcloud = WordCloud(
font_path='/usr/share/fonts/truetype/fonts-japanese-gothic.ttf',
background_color='white',
width=800,
height=400,
stopwords=stopwords
).generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.title(title)
plt.axis('off')
plt.show()
- 形態素解析の結果を受け取り、ワードクラウドを生成。
- 日本語フォントのパスを指定し、背景色やサイズ、ストップワードを設定。
- 生成したワードクラウドを表示。
(7) 実行部分
kishida_words = analyze_text('/content/drive/MyDrive/kishidastatement.txt')
suga_words = analyze_text('/content/drive/MyDrive/sugastatement.txt')
create_wordcloud(kishida_words, '岸田総理の演説')
create_wordcloud
#8-結果
考察
- 岸田総理「賃上げ」「投資」「資本主義」、菅総理「デジタル」など、それぞれが注力している分野の発言が強く出ている。
- 菅総理の時代はコロナ禍だったので「感染」「新型」「コロナ」「助成」などコロナ関連の言葉も多い。
- 以上を見ると、元々把握していたような各総理大臣が重視している政策やコロナ禍との関係について、期待値とのギャップは小さかった。
- 一方で、例えば、岸田総理に「安全保障」というワードが強く出ていたり、菅総理は具体的なお金の数値(十、兆、円)が多いことはあまり予測していなった結果であり、今回自然言語処理で分析したことで新しく得られた結果でもある。
#9-今回やったみたかったが、できなかったこと
-
スクレイピングによるデータの自動取得
途中まで、官邸HPからスクレイピングで演説データを自動取得する方向で進めていたが、WebサイトのHTMLの構造の分析がうまくできず、結局できなかったので、今後は挑戦したい。HTMLの分析などは別途勉強しないといけないかもしれない。 -
ネガポジ分析、感情分析など
今回は2人の人物の限られた演説データのみを使ったので、ネガポジ分析などは行わなったが、大量のテキストデータの活用としては、SNSやカスタマーサポートなどのデータを機械学習させ、ネガポジ分析などを行ってみると実際にビジネスに役立てそうである。 -
データ分析
自然言語処理以外では、株価や不動産価格などの金融関連のデータ分析が面白そう。日銀が金融政策を見直したが、今後の不動産価格がどうなるかは気になるところであり、金利と不動産価格のヒストリカルデータを機械学習させ回帰分析での予測モデルが作れれば、将来の不動産価格も予測できるのではないか(プロがやっていると思うが、素人が自分が住んでいる地域に絞って趣味でやってみるのも面白いかもしれない)。
#10-おわりに
今回のAidemyの講座では、プログラミングやデータの取り扱いは未経験の状態で始めましたが、結果的にやってよかったと思っています。
個人的には、細かいコーディングの手法というよりは、データをどのように現実世界で活用できるのか(データの活用可能性)について、視野が大きく広がったのが一番の収穫だと思っています。
レベル的に実際に実装できる範囲は限られるにしても、日常や仕事でも、データを使うことで思いついたアイデアが実現できるかもという発想ができるようになったことは大きいなと思います。
個人的には、生成AIがこれだけ進歩している時代において、これまでのような数値的なデータだけでなく、自然言語のような非構造的なデータをうまく構造化して扱うことができれば、現実世界におけるデータ分析の活用範囲はどんどん大きくなるのではと思いました。
今後は、講座で学習した内容を学び直しつつ、実際に興味をもったことを手を動かしてやってみたいと思いました。