Qiitaの全記事分析｜バズる投稿を考察する


# TL;DR
- Qiitaの過去記事を分析して、バズった（いいねが多くついた）記事の傾向を見た
- 結果、月曜朝7~8時に初心者向けの機械学習系の内容で、タイトル20~36文字で本文ができれば1万文字程度の記事を書くと良いと出た
- Tableau（BIツール）が高機能な割に使いやすすぎて半端ない。プログラム一切書かなかった。感動

# 前置き
- [技術書ランキングと読書メーター｜Book Hack](https://bookhack.org/) というサービスを作るにあたり、QiitaのAPIから過去記事を取得した
- 業務でTableauを使う機会があり、慣れるために題材が欲しかった
- 元ネタ：[直近１年のQiita記事分析で分かった７つの「驚愕」](https://qiita.com/youwht/items/f3fa7e6cc2687509c06e) 
- 当方統計は学んだことが無いので、考察に誤りがあったら優しく教えてください

# Qiitaのいいねを俯瞰する

## いいね数の分布

いいね数が100までの記事で、いいね数の分布をヒストグラムにしてみます。

- 緑：全体におけるパーセント
- 紫：記事の累計数

![1_qiita_analytics_likes-count_histogram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/6cb7a59e-08d2-78d2-984a-ec016234c675.png)

- いいね数0で全体の21%、1で15%...という分布
- いいね数10くらいまでで全体の8割程を占める
    - いいね数10を超えてくると上位20%の記事

## 記事数といいね数の推移

- 青：週毎の記事の合計
- 緑：いいね数の平均
- 紫：いいね数の中央値

![2_qiita_analytics_likes-count_article-count2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/d36ef9bb-5c2e-87d7-15e8-6e244ec166ca.png)

- Qiitaの記事数は毎年うなぎで伸びている
    - 確かに昔と比べると、検索してQiitaの記事がヒットすることが格段に増えた
- Qiitaの記事は年末にぐっと投稿される
    - Advent Calendarの時期なのと、年末の休みで時間がある
- このグラフを元に2014年頃をピークにいいね数が減っているという考察があるが、古い記事のほうが累計いいね数がついているので当たり前でしょうという意見もあり。[【新発見】「最近はいいねの獲得が難しくなっている」は本当か？ 〜 Qiitaのいいねを可視化して分かった7つの驚愕 〜](https://qiita.com/tag1216/items/f1dd895fe38b7a4a4e46)で詳しく述べられている

# バズった（いいねが多くついた）記事の傾向を見る

ここから、これまでいいねが沢山ついた=バズった記事の傾向を分析していきます。

## 最適な本文の長さ

### 本文の長さによる分布

まず記事の本文の長さです。前提として記事全体の中で本文の長さによるヒストグラムを見てみます。

- 記事の長さは1000文字単位でグルーピング（横軸）
- 緑：全体におけるパーセント
- 紫：記事の累計数

![3_1_qiita_analytics_bodylen_histogram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/c560cf83-5149-7300-a3d0-30914fe1e5cc.png)

- 1000文字までで29%、1000~2000文字が22%、2000~3000文字が14%...という分布
- 1万文字までの記事で全体の95%を占める

### 本文の長さといいねの平均値・中央値の関係性

では、本文の長さといいねの平均値・中央値の関係性を見てみます。

- 記事の長さは1000文字単位でグルーピング（横軸）
- 緑：いいね数の平均
- 紫：いいね数の中央値

![3_qiita_analytics_likes-count_bodylen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/1b2668e6-9c3d-8a3a-20f9-7ebc33107a0a.png)

- 1万文字くらいまでは相関がある
- 1万文字以上は、ならすと横ばい・乱高下していく
    - 1万文字を超えるような記事はサンプルが少なく、そもそも分析対象としてあまり信用性が無いです

### 本文の長さといいねの平均値・中央値の関係性｜散布図

データの見方に自信が無いので、[元ネタ](https://qiita.com/youwht/items/f3fa7e6cc2687509c06e)に立ち返ってみます。
するとこういった分布が拡散しているような場合、対数を取ると可視化しやすくなるとのこと。全く同じですが、2を底とした対数を取って散布図を作ってみました。

- 2を底としているので、メモリ上の実際の数は
    - 1：2
    - 2：4
    - 3：8
    - ...
    - 10：1024
    - 11：2048
    - 12：4096
    - ...  
  を表しています

![4_qiita_analytics_likes-count_bodylen_log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/7607c19d-cead-6530-18a1-396783edcc9d.png)


- 横軸は対数が13、つまり8192文字くらいまでは文字数を増やすといいねの数も増える

どう結論付けるかちょっと迷うところですが、1万文字を目安として頑張って本文を充実させるべき、という考察とします。

しかし対数っていうのはこうやって使えるものなんですね。「桁の大きい数の対数をとることによって桁の大きい数のスケールを小さく，桁の小さい数の対数をとることによって桁の小さい数のスケールを大きくと，感覚的に数を扱いやすくなる。」みたいなことを知ってはいたんですが、いざ可視化してうまく活用できると直感的な理解が進みます。感動。

## 最適なタイトルの長さ

### タイトルの長さといいねの平均値・中央値の関係性

続いて、本文の長さ同様にタイトルの長さといいねの平均値・中央値の関係性を見てみます。

- 緑：いいね数の平均
- 紫：いいね数の中央値

![5_qiita_analytics_likes-count_titlelen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/da382fa7-980e-af0b-dab4-23fe409de9e7.png)

- タイトル20~36文字くらいがいいねの平均値中央値ともに高くなる
- 一般的にブログ記事などのTitleタグが32文字までを推奨とされていることからも、まあ妥当な数値

### タイトルの長さといいねの平均値・中央値の関係性｜散布図

こちらも試しに対数を取った散布図を作ってみました。縦軸のいいねの数は対数を取っていますが、先程と違い横軸のタイトルの長さはそのままの実数です。

![6_qiita_analytics_likes-count_titlelen_log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/8b723831-82f3-b715-3fbf-32edc8f4312f.png)

- 特別すばらしい洞察は得られない
- というかTableauすごい。こんな図もすぐに作れる

## 最適な投稿時間

続いて、何曜日の何時に投稿するといいねがつきやすいのかをみていきます。

### 曜日と時間ごとの投稿数の分布

曜日と時間ごとの投稿数の分布を見てみます。

![7_1_qiita_analytics_article-count_day-hour.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/a8c83781-01f2-5adb-9f7d-bf59a6ea8d24.png)

- 23~24時頃、17時頃が多い
    - 17時頃に多いのは意外。会社員だとその時間帯に自由に投稿できるイメージがないですが、フリーランスとかリモート勤務などをしている方の投稿が多いのでしょうか
    - もしくは業務中にその日学んだことをアウトプットしておく、みたいな会社員の方もいらっしゃるかもしれません
    - 今回全体的にユーザー情報を用いた分析ができていない。そもそもQiitaAPI上は記事の取得とユーザー情報の取得はエンドポイントが違うのでそこからだが、どっかでユーザーの分析もしてみたい
- 金曜日の夜の投稿が少ない
    - 華金

### 曜日と時間ごとのいいね数の平均値

いつ投稿するといいねが付きやすいのか可視化してみます。

- 各曜日時間の横軸：いいね数の平均
- これまでの全データを対象

![7_2_qiita_analytics_likes-count_day-hour.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/47b792f1-79e5-7a15-616a-041d216e27fc.png)

- 月曜7~8時に投稿された記事の平均いいね数が多い
    - 月曜朝投稿され、午前中を中心にいいねがついたと考えられる
    - 月曜日の午前中はなかなかエンジンがかからず、Qiitaを読んでいることが多いということ?
        - と思ったら参考になる記事が：[月曜日のワイ](https://qiita.com/Yametaro/items/46f134f0ac31b751ee6a#%E6%9C%88%E6%9B%9C%E6%97%A5%E3%81%AE%E3%83%AF%E3%82%A4)
    - （アクセス情報があるとこの仮説検証ができるがさすがにそこまでの情報がない）
- 全体的に朝投稿された記事はいいねがつきやすい
    - Qiitaのタグフィードは新しい投稿順に表示される  
      そのため、以降記事が投稿されにくい朝の時間帯に投稿されると、長い時間タグフィード上に表示され続け、閲覧数が伸びていいねが増えるということが考えられる

しかしもちろんいいねの数は記事の内容にもよってきます。良い記事が特に月曜朝に集中して投稿されているという可能性もあるので、その検証をしてみます。

### 曜日と時間ごとの本文の文字数の平均値

良い記事かどうかを直接的に取る指標はないので、文字数が多い＝力を入れている と考えてみます

- 各曜日時間の横軸：本文の文字数の平均
- これまでの全データが対象

![7_4_qiita_analytics_body-len_day-hour.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/b817ad72-bf76-bb29-4ea3-f10cee156a67.png)

- 月曜5~8時に投稿された記事は本文の文字数が多い

月曜朝は文字数が多い＝力を入れている記事が投稿されている、つまり狙って月曜朝に投稿している人が多いという仮説が成り立ちます。
そうなってくると、狙って投稿しているからその分いいねも多くなるねという結論になります。しかしそれだとおそまつなのでもう少し考えてみます。

### 曜日と時間ごとの文字数といいね数の平均を比較する

- 緑：記事の本文の長さの平均
- 青：いいね数の平均

![7_5_qiita_analytics_body-len_likes-count_day-hour.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/e2b56a19-8fd5-fba4-1e8c-df7826054efc.png)

ちょっと見にくいですが、

- 緑（記事の本文の長さ）が伸びる、つまり力をいれている記事が増えると、青（いいね数）が伸びるのは当たり前  
  なので緑（記事の本文の長さ）の伸びに大して青（いいね数）の伸びが強いものは、狙っていなくてもいいねが付きやすいと考えられる
- 土日は緑が伸びているが青が伸びていない
    - 時間のある週末のほうが長い文章の記事が投稿さやすい
    - しかし、だからといっていいねがつきやすいわけではない  
      土日は供給が多いが需要が少ないと考えられる
- 月曜の朝はやはり緑も青も伸びているが、7~8時は特に青の伸びが顕著
    - 狙って投稿する人も多いが、月曜午前中の特性上記事を読む人も多いと考えられる

このタイミングで投稿すると穴場だ、みたいなものは見つかりませんでしたが、月曜7~8時に投稿するのが良いとします。

## 最適なトピック

最後に、どんなトピックに関して記事を書くといいねがつきやすいのか見てみます。

### よく使われているタグ

単純によく使われているタグを見てみます。

- 直近1年間
- 上位50件

![8_2_qiita_analytics_frequent-tag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/4fd5a34a-b66d-9e9c-6d48-fe8acfb48019.png)

- Python、JavaScript、Railsなど、感覚的にもよく見かけるトピックが並んだ

### いいね数が多いタグ

いいね数の平均値でタグをソートしてみます。

- 緑：いいね数の平均値
- 紫：いいね数の中央値
- 全期間で500回以上使われたタグでフィルタ
- 上位50件

![8_1_qiita_analytics_likes-tag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/9f57daf9-3f11-98db-7d65-2f855f3b8484.png)

なんとなくグルーピングしてみます。

- 機械学習・分析系のタグ
    - 自然言語処理
    - ディープラーニング
    - データ分析
    - 機械学習
    - アルゴリズム
    - DeepLearning
    - 数学
    - 画像処理
    - 深層学習
- 新人系のタグ
    - 新人プログラマ応援
    - 入門
    - 初心者向け
    - 初心者

新人・初心者向けの機械学習・分析系の内容の記事を書くと、いいねがつきやすいと考えられます。

# 結論
**月曜朝7~8時に初心者向けの機械学習系の内容で、タイトル20~36文字で本文ができれば1万文字程度の記事を書くと良い**