この記事はSafie Engineers' Blog! Advent Calendar 14日目の記事です
はじめに
はじめまして、サーバーサイドエンジニアの大町です。2024年も早くも年末になりました。年末ということで今年の技術トレンドを振り返りたくなってきたので、Qiitaのブログ記事1万本のデータを簡単に分析してみました。
この記事では、2024年はどのような技術が熱かったかを分析した結果とその分析方法について共有したいと思います。
Qiita APIを使ったデータ収集と分析
今回はQiitaの記事を分析したのですが、Qiitaというサービスを選んだ理由はその知名度とデータ収集の容易さです。
まず知名度ですが、Qiitaは技術に関する情報を共有するサービスとして有名な方だと思います。その会員は120万を超えるらしいです。日本のITエンジニアが144万人ということを考えると、多くのエンジニアがなんらかの形でQiitaというサービスを使っていることになります。
また、データ収集の容易さですが、Qiitaは外部の開発者向けにAPIを公開しています。それを使うことで整形された形でのデータを簡単に収集することができます。Qiitaは基本的に技術記事が投稿されますので、技術以外の記事のデータが混ざるということはなく、世の中のエンジニアがどういう技術を使っているのかを知るには適したサービスです。
データ収集の方法
Qiita APIは 記事の収集や投稿など多くのAPIが用意されています。今回データを収集するのに使ったAPIは記事の一覧を取得するAPI GET v2/api/items です。このAPI を用いると、最新の記事から順番に記事の内容を取得することができます。APIのレスポンスには、タイトル・内容・タグ・いいねの数などのデータが含まれます。
パラメータとしてpage(ページ番号)とper_page(ページあたりの記事数)を指定することが可能です。
例えば、以下のようなURLをブラウザに打ち込むと最新の記事のデータ20件を取得できます。(制限はありますが、特に認証しなくてもデータを得られます)
https://qiita.com/api/v2/items?page=1&per_page=20
ページあたりの記事数(per_page)を100にして、page=1 からpage=100 までのデータを取ることで1万本の記事を取得しました。2024/12/1に記事を取得したので最新のものは12/1です。最も古いものは2024/10/28でした。ということで、約1ヶ月分の記事1万本を収集することができました。
データ分析の方法
タグを使った分析
Qiitaは記事作成の際に、記事に対してタグを付与することができます。そのタグの使用頻度を求めることで今よく使われている技術がわかりそうです。 結果は以下のようになりました。
<タグの頻度TOP10>
順位 | タグ | 頻度 |
---|---|---|
1 | Python | 1033 |
2 | 初心者 | 826 |
3 | AWS | 652 |
4 | JavaScript | 423 |
5 | AI | 297 |
6 | React | 271 |
7 | Ruby | 264 |
8 | TypeScript | 256 |
9 | Docker | 226 |
10 | Rails | 206 |
1位はPythonということで、他を圧倒していますね。5位に「AI」がランクインしていることからAI系の文脈でよく書かれていそうですね。
2位が「初心者」でした。これは技術トレンドを調べるという意図からは外れたデータですが、Qiitaは初心者向けに書かれた記事が多いということがわかります。今回集めたデータはQiitaのみなので、初心者向けの記事が多いといったデータの偏りはありそうです。
1位のPythonが他を圧倒したというのも初心者向けの記事が多いからかもしれませんね。
記事のタイトルを使った分析
次に記事のタイトルを使った分析を行いました。分析方法はタグの場合とほとんど同じで、タイトルの中でよく使われる単語を求めました。ただ、タイトルはタグのように単語単位で分けられているわけではないので、まずタイトルを単語に分割する必要があります。
この処理は「単語の分かち書き」と呼ばれます。さらに「です」や「ます」など今回の分析には不要なワードも覗きたいですね。
このような処理には、形態素解析ツールが便利です。形態素解析は自然言語処理(NLP)の一つで、 文を最小の単位(形態素)に分解し、分解した形態素に対して品詞などの情報を付与する作業のことをいいます。形態素解析ツールには様々ありますが、今回は手軽に使えるJanomeというツールを使いました。
Janomeでは数行のコードで形態素解析ができます。
以下のコードで「私は東京で働くエンジニアです。」という文を形態素解析してみました。
from janome.tokenizer import Tokenizer # Janomeの形態素解析器を初期化 tokenizer = Tokenizer() title="私は東京で働くエンジニアです。" # 文をトークン(形態素)に分割してリストにする tokens = tokenizer.tokenize(title) for token in tokens: print(token)
コードを実行すると以下のような出力が得られます。
私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 東京 名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー で 助詞,格助詞,一般,*,*,*,で,デ,デ 働く 動詞,自立,*,*,五段・カ行イ音便,基本形,働く,ハタラク,ハタラク エンジニア 名詞,一般,*,*,*,*,エンジニア,エンジニア,エンジニア です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。
「私は東京で働くエンジニアです。」という文が小さな単位に分割されていますね。さらに品詞や読み方の情報なども付与されています。
今回は形態素解析を記事のタイトルに対して行い、その結果から単語の頻度を求めました。
まず、名詞のみを取り出して頻度を調べてみた結果が以下となります。
<名詞の頻度TOP10>
順位 | 単語 | 頻度 |
---|---|---|
1 | 方法 | 746 |
2 | AWS | 408 |
3 | AI | 401 |
4 | 作成 | 381 |
5 | Python | 378 |
6 | 環境 | 341 |
7 | 化 | 308 |
8 | 開発 | 307 |
9 | データ | 276 |
10 | ファイル | 264 |
タグとはちょっと違ったデータが出てきました。一番多いのが「方法」ですね。2位と倍くらい違います。
全体的にみて技術用語より一般的な用語が多く出てきてしまいました。そこで、取り出す用語を固有名詞に絞ってみました。
<固有名詞の頻度TOP10>
順位 | 単語 | 頻度 |
---|---|---|
1 | AWS | 336 |
2 | AI | 230 |
3 | Python | 205 |
4 | API | 136 |
5 | C | 124 |
6 | React | 108 |
7 | 103 | |
8 | Rails | 100 |
9 | GitHub | 99 |
10 | Cloud | 97 |
意図した感じのデータが取れました。AWSが一位です。
Cが5位にランクインしているのは少し驚きです。
7位がGoogleで10位がCloudなので、これはGoole Cloud ~ が多かったのかもしれません。
解析ツールの品詞情報の揺れ
ここでAWSの頻度を見ていて気づいたのですが、ちょっとおかしいですね。
上の「名詞」で取り出した時のAWSの頻度は408ですが、「固有名詞」で取り出した場合は336と頻度が小さくなってしまいました。どういうことでしょうか。
同じAWSという単語でも「固有名詞」に分類されることもあれば、別の品詞に分類されるなど解析結果に揺れがあるのかもしれません。
そこで品詞の解析結果の揺れについて調べるために、「AWSについて学んだこと」「AWSを使ったインフラ構築」という2つの文でAWSの品詞に差分があるかJanomeを使って検証してみました。
- 「AWSについて学んだこと」の場合
AWS 名詞,固有名詞,組織,*,*,*,AWS,*,* <- 固有名詞として分類 について 助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ 学ん 動詞,自立,*,*,五段・バ行,連用タ接続,学ぶ,マナン,マナン で 助詞,接続助詞,*,*,*,*,で,デ,デ こと 名詞,非自立,一般,*,*,*,こと,コト,コト
AWSが固有名詞で分類されています。
- 「AWSを使ったインフラ構築」
AWS 名詞,一般,*,*,*,*,AWS,*,* <- 一般名詞として分類されている を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 使っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,使う,ツカッ,ツカッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ インフラ 名詞,一般,*,*,*,*,インフラ,インフラ,インフラ 構築 名詞,サ変接続,*,*,*,*,構築,コウチク,コーチク
AWSが一般名詞で分類されていますね。
同じAWSでも異なる分類のされかたをしていました。
一般に形態素解析では辞書のデータをもとに品詞を特定するので、AWSという単語は辞書に載っていなかったのかもしれませんね。
辞書に載っていない単語は未知語と呼ばれ、解析ツールが周囲の単語などから予測して品詞を求めます。その結果は周囲の単語に依存するので結果に揺れが生じることがあります。
結果の揺れに対する解決策は形態素解析ツールに搭載されている辞書にAWSという単語を追加すれば揺れなく分類可能ですが、今回は大雑把に傾向がつかめれば良いのでそこまではしていません。
おまけ(バイグラム)
最後にバイグラムについても出してみました。*1
バイグラムとは2単語が連続した文字列です。一般にN単語またはN文字が連続した文字列をn-gramと言います。
なぜ出してみたかったかというと、先ほど出した名詞での頻度分析の結果を10位までしか表には出していなかったのですが、実は11位が「構築」という単語でした。
6位が「環境」なので、「環境構築」という言葉が分割されたのだろうと思い、それを確かめてみたくなりました。
<バイグラムの頻度TOP10>
順位 | バイグラム | 頻度 |
---|---|---|
1 | (環境, 構築) | 131 |
2 | (初心者, 向け) | 80 |
3 | (Next, js) | 79 |
4 | (生成, AI) | 72 |
5 | (対処, 法) | 58 |
6 | (文字, 列) | 48 |
7 | (Raspberry, Pi) | 39 |
8 | (ilasm, stack) | 39 |
9 | (stack, machine) | 39 |
10 | (解決, 方法) | 38 |
やっぱり、環境構築でした。環境構築、たしかに大変ですよね。
生成AIはトレンディですね。このブログで調査するためのコードの大部分を生成AIで作成しました。
Raspberry Pi はよく聞くのでハードウェアへの入門として触ってみたいと思っているのですが、まだ触れられてません。来年こそは触ってみたいです。
生成AIやRaspberry Pi などのように、1単語の頻度ではTOPに出てこなかった単語が出てきたのでバイグラムも有用な情報ですね。*2
さいごに
今回の記事では、Qiita1万本の記事を使って技術のトレンドを調査してみました。普段、仕事ではデータと向き合うことはないので新鮮な気持ちになりました。
結果としては、AWSやPythonといった技術が(Qiitaコミュニティでは)人気だということがわかりました。
分析方法はタグや単語の頻度を求めるという単純な方法でしたが、それでも大雑把な傾向は見られたと思います。もし大量のテキストデータに出会う機会があれば、
単語の出現頻度を眺めてみてはいかがでしょうか。