Edited at

Qiita Advent Calendar 2018をデータで振り返る(はてブ数ランキングなど)


2018年もAdvent Calendarお疲れ様でした

2018-12-25-mecab.png


  • 今日でAdvent Calendar最終日ということで、Pythonでデータを可視化してみました。


    • 上の図は2018年の全てのQiita投稿記事の本文で作ったWordCloudです。



  • また2015年〜2018年のAdvent Calendarで最もはてブ数がついた記事などもまとめています。

  • Advent Calendar TOP: https://qiita.com/advent-calendar/2018

  • 公式のいいね数ランキング: https://qiita.com/advent-calendar/2018/ranking/feedbacks

  • 「カレンダーごとのいいね数のランキング」は公式が出しているのでそれ以外の情報を出してみたいと思います。


データ


  • 2015年-2017年: 2018/12/23に取得

  • 2018年: 本日(2018/12/25 15時~18時頃取得)


    • ということでそれ以降に投稿/紐付けされた記事に関してはカウントできていませんのであしからず




データの取得

データの取得は requests-html を用いて行いました。

コードの1部をこちらに貼ります。

ls_article = []

for i, row in tqdm(df_calendar.iterrows(), 'calendar'):
url = row['url']
category_name = row['category']
year = row['year']
calendar_name = row['name']

resp = session.get(url, headers=headers)
time.sleep(1)

articles = resp.html.find('.adventCalendarCalendar_comment')
for article in articles:
url = article.find('a', first=True).attrs.get('href')
resp = session.get(url, headers=headers)
time.sleep(1)

title = resp.html.find('.it-Header_title', first=True).text
author = resp.html.find('.it-Header_authorName', first=True).text
n_like = resp.html.find('.it-Actions_likeCount', first=True).text
n_comment = resp.html.find('.it-Actions_commentCount', first=True).text
content = resp.html.find('.it-MdContent', first=True).text

dic_article = {
'url': url, 'title': title, 'author': author, 'n_like': n_like, 'n_comment': n_comment, 'content': content,
'year': year, 'category': category_name, 'calendar': calendar_name
}
ls_article.append(dic_article)

df_article = pd.DataFrame(ls_article)


全記事数/いいね数/はてなブックマーク数

まず全体の傾向を見ていきましょう。

image.png

2015
2016
2017
2018

記事数
6687
9061
10866
11469

いいね数
172396
144690
150965
86743

はてブ数
79984
89651
88385
50440

総記事数は順調に増えていることがわかります。

2018年は2015年の2倍近くの記事が書かれていることに驚きました。

その一方で、いいね数/はてブ数は去年・一昨年に達していていないですね。

これは書かれてからジワジワ稼いでいくものだからかもしれません。


はてブ数のランキング


カレンダーごと


はてブ数

image.png

はてブ数

モチベーションクラウド
2379

Python その2
1852

はてなエンジニア
1799

Yahoo! JAPAN Tech
1797

Mercari
1704

NewsPicks
1579

エムスリー
1356

Engineering Manager
1156

dely
1144

Gunosy
1017

モチベーションクラウドさんがトップでした。全体的に企業のAdvent Calendarですね。

数少ない企業でないAdvent Calendarは「Python その2」は自分が作ったカレンダーなので嬉しいです💪


いいね数

ちなみにQiitaいいね数と比べると全然違って面白いです。

image.png

順位
calendar
いいね数

1
闇の魔術に対する防衛術
2969

2
クソアプリ2
2480

3
クソアプリ
2384

4
ディップ
2224

5
モチベーションクラウド
2034

6
NewsPicks
1864

7
グロービス
1407

8
JavaScript
1330

9
TIS
1165

10
BrainPad
1144

Advent_Calendar_2018ランキング_-_Qiita.png

あっ… 1つ存在を隠されているカレンダーがあったことを知ってしまいました。


記事ごと

image.png

順位
著者
タイトル
はてブ数
いいね数

1
hirokidaichi
心理的安全性ガイドライン(あるいは権威勾配に関する一考察)
2102
1187

2
shinyorke
Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで
1247
0

3
sakito
ヤフー株式会社におけるWebフロントエンドの技術選定
758
0

4
yumetodo
C++標準化委員会、ついに文字とは何かを理解する: char8_t
729
635

5
papix
「手順書」のススメ
712
0

6
junichiro
2018年版もっとも参考になった機械学習系記事ベスト10
639
571

7
gonshi_com
今年、JavaScriptでの仕事の幅を広げた技術6選
609
343

8
akaneyoshikawa
非美大卒でも1年半でNewsPicksのデザイナーになれる本16冊
602
0

9
mugi_uno
マルチカーソルを使わないVSCodeはただのVSCodeだ!
561
0

10
ikedaosushi
人間のためのWeb Framework「responder」、そして作者のKenneth Reitzについて
526
0

11
saboyutaka
未経験からRuby on Railsを学んで仕事につなげるまでの1000時間メニュー
516
465

12
papanda
コミュニティは2回集まると死ぬ。
471
0

13
tattn
個人アプリ開発を支える技術と開発フロー
468
500

14
watson1978
バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話
423
0

15
ajido@github
ありがとう、MYM 安らかに眠れ
415
0

16
kotarot
量子アニーリングがチョットワカルようになる記事
381
0

17
rotomx
一休における「情シス」の取り組み
368
0

18
kishiyama
pandasで1000万件のデータの前処理を高速にするTips集
365
220

19
takapy0210
機械学習初心者が約10ヶ月でメダルより大切なものを獲得できた話
342
0

20
nus_miz
「小説家になろう」の小説を自動生成するマンになろう
327
0

モチベーションクラウドカレンダーを1位にしたhirokidaichiさんの記事が1位でした。

その他の記事も毎日タイムラインで見た記事ばかりで総決算感がありました。

ちなみに自分の書いた人間のためのWeb Framework「responder」、そして作者のKenneth Reitzについても10位にランクインしました!


ちなみに2015年〜2018年

image.png

順位

著者
タイトル
はてブ数
いいね数

1
2016
seki_uk
質問は恥ではないし役に立つ
2389
2960

2
2018
hirokidaichi
心理的安全性ガイドライン(あるいは権威勾配に関する一考察)
2102
1187

3
2017
shinyorke
Pythonの学び方と,読むべき本を体系化しました2018〜初心者から上級者まで
1927
0

4
2016
aerith7
宇宙電気電子な話をしたいです。GPSとか人工衛星とか。
1718
0

5
2016
sifue
高校生にWeb上でプログラミングを教え始めたエンジニアがこの8ヶ月間で得た気づき
1590
1555

6
2017
sheepland
11ヶ月間でTOEICスコアを300点から835点に上げた英語学習法
1557
1176

7
2017
tmknom
Webアプリケーションフレームワーク導入時に考慮すべき22の観点
1334
1673

8
2016
piroor
プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話
1334
1969

9
2018
shinyorke
Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで
1247
0

10
2016
YudaiTsukamoto
プログラミング勉強を加速させる7つの習慣
1242
2352


カテゴリーごと


 分布

カテゴリーごとに分布を出してみます。

image.png

image.png


TOP3まとめ

ジャンルごとのはてブ数TOP3の記事をまとめました。

未設定
著者
タイトル
はてブ数
いいね数

1
Ghana
高専生が24時間で「格闘技の動画を格闘ゲーム風に自動編集するシステム」を作った話
35
31

2
ikedaosushi
rebuild.fmの統計学
2
0

プログラミング言語
著者
タイトル
はてブ数
いいね数

1
shinyorke
Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで
1247
0

2
yumetodo
C++標準化委員会、ついに文字とは何かを理解する: char8_t
729
635

3
ikedaosushi
人間のためのWeb Framework「responder」、そして作者のKenneth Reitzについて
526
0

ライブラリ・フレームワーク
著者
タイトル
はてブ数
いいね数

1
po3rin
「Vue.js + Go言語 + Docker」で作る!画像アップロード機能実装ハンズオン
273
303

2
potato4d
Vuexによる状態管理を含む最高に快適な Vue.js + TypeScript の開発環境を目指す話
260
444

3
howdy39
Nuxt, netlify, Firebase を使ったWebサービス開発と個人開発における技術選定のポイント
242
270

Webテクノロジー
著者
タイトル
はてブ数
いいね数

1
piacere_ex
BASIC以来、35年間プログラミングしてないIT企業社長が、ElixirでWebアプリを作った
73
256

2
yamamanx
AWS LambdaでChrome HeadlessドライバをAWS Lambda Layersから使う
38
0

3
DesignChips
フロントエンドに明るくない人のためのPWAざっくり解説
26
0

モバイル
著者
タイトル
はてブ数
いいね数

1
tattn
個人アプリ開発を支える技術と開発フロー
468
500

2
superman9387
Flutter 1.0がリリースされたので概要から、環境構築、実装方法、アーキテクチャ、情報収集方法まで全部書く
17
202

3
yyokii
FolioのイケてるWalkthrough画面のソースを読み解く
9
24

DevOps・インフラ
著者
タイトル
はてブ数
いいね数

1
kenjiszk
SRE風のインフラエンジニアにならないために
292
0

2
jin_yokoyama
Elastic Stackで簡単!Dockerコンテナ監視ダッシュボード作成
86
0

3
sugitk
Ansibleをとりまくさまざまな技術について
71
0

IoT・ハードウェア
著者
タイトル
はてブ数
いいね数

1
ikwzm
一体いつから FPGA はハードウェアだと錯覚していた?
46
72

2
kazuph
大きくなってきたIoTプロダクトのログ活用について 〜Elasticsearch篇〜
36
0

3
bohemian916
SSIDで隣人とコミュニケーションする
33
0

OS
著者
タイトル
はてブ数
いいね数

1
micchie
あなたのネットワークスタック正しく設定されていますか?
140
82

2
masami256
Linuxカーネルをgdbでデバッグ(またはディストリビューションのカーネルを使うときは当たってるパッチにも注意しよう)
65
0

3
xoxyuxu
linux systemにおけるinitの最期
54
0

エディタ
著者
タイトル
はてブ数
いいね数

1
swfz
VSCodeでなるべくマウスを触らない設定
304
0

2
ujihisa
vimconfのujihisaさんの発表を解説します
254
0

3
blux2
vimが苦手でもOnivimカッコいいのでおすすめしたい
178
140

学術
著者
タイトル
はてブ数
いいね数

1
kishiyama
pandasで1000万件のデータの前処理を高速にするTips集
365
220

2
blackenedgold
JITあれこれ
201
0

3
animegazer
制御理論としての動的計画法
137
122

サービス・アプリケーション
著者
タイトル
はてブ数
いいね数

1
takapy0210
機械学習初心者が約10ヶ月でメダルより大切なものを獲得できた話
342
0

2
lain21
GCPとDockerでKaggle用計算環境構築
168
108

3
1amageek
Cloud Firestoreを実践投入するにあたって考えたこと
52
241

企業・学校・団体
著者
タイトル
はてブ数
いいね数

1
hirokidaichi
心理的安全性ガイドライン(あるいは権威勾配に関する一考察)
2102
1187

2
sakito
ヤフー株式会社におけるWebフロントエンドの技術選定
758
0

3
papix
「手順書」のススメ
712
0

その他
著者
タイトル
はてブ数
いいね数

1
ngsw
エンジニアリングマネージャを退いた話
289
131

2
dskst
エンジニアリング組織の文化ができるまでの3年間の軌跡
289
0

3
masartz
研修中に爆睡して学んだ 1on1 で「待つ」ことの大事さ(How I learned the importance of patience in one-on-one MTGs from sleeping)
281
0

スポンサー
著者
タイトル
はてブ数
いいね数

1
xkumiyu
Gitブランチをきれいにするワンライナー
45
0

2
unotovive
研究室にUX最高な無人販売機を設置する話
3
0

3
Cj-bc
個人的によく使う(ベタな)bash alias
2
4


著者ごと

yuzutas0さんのようにAdvent Calendarを書いている量がすごい人がいるので著者ごとのランキングも見てみたいと思いました。


はてブ数

image.png


いいね数

image.png


記事数

ちなみに記事数で見るとどうなのでしょうか。

image.png

なんと ohisama@githubさんが85記事書いていました。すごすぎる…。


ちなみに歴代だと

image.png

shinyorke | Twitterさんがトップでした!


いいね数/はてブ数の分布

次にいいね数/はてブ数の分布を見てみます。


相関

image.png

面白いことに、いいね数orはてブ数が少ないときは、いいね数の方が多くなる傾向があり、ある程度増えてくると線形の相関が見られるようです。はてブ数はホットエントリに入らないと全然増えないということかもしれません。


ヒストグラム

それぞれの分布をヒストグラムで可視化してみます。

image.png

image.png

0付近の値が多すぎて全然わからないですね…。どちらかというといいね数の方が多くなる傾向があるようです。


パレート図

一部の記事がどのくらいの割合を占めているのかパレート図を書いて確かめてみます。

s = df.groupby('いいね数').size().sort_values(ascending=False)

sum_ = s.sum()
tmp_df = pd.concat([s, s.cumsum(), 100*s.cumsum()/sum_], axis=1)
tmp_df.columns = ['number', 'cumsum', 'cumsum_percent']

fig = plt.figure(figsize=(16, 4))
ax = fig.add_subplot(1, 1, 1)

n = tmp_df.shape[0]
x = np.arange(0, n)
ax.plot(x, tmp_df['cumsum_percent'], linewidth=5)
ax.tick_params(axis='both', labelsize=20)
ax.set_xlabel('いいね数', fontsize=20)
ax.set_ylabel('いいね数の累積%', fontsize=20)
ax.set_title('いいね数のパレート図', fontsize=30)

image.png

image.png

2/8の法則どころかはてブ数に関しては1/9の法則ですね。


何日が一番いいね!/はてブされやすいか

日付に傾向があるのかを見てみます。

image.png

image.png

いいね数の方は顕著な結果にはなりませんでしたが、はてブ数は非常に面白い結果になりました。

「後半になるに連れてブックマークされやすい」かつ「土日の記事はブックマークされやすい」傾向が見られます。


ワードクラウド

最後に2015年〜2018年のワードクラウドをそれぞれ見てみましょう。

単語の分割はMecabを使い、stopワードとして一般的な言葉は手動で取り除いています。

mecab = MeCab.Tagger("-Ochasen -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")

lines = mecab.parse(doc).splitlines()
words = []
for line in lines:
chunks = line.split('\t')
if len(chunks) > 3 and (chunks[3].startswith('名詞') and not chunks[3].startswith('名詞-数')):
words.append(chunks[0])

years = [2015, 2016, 2017, 2018]

n = len(years)
fig = plt.figure(figsize=(16, 10*n))
fpath = "/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc"

for i, year in enumerate(years):
wordcloud = WordCloud(
background_color="white", width=900*10, height=500*10, font_path=fpath, stopwords=stop_words
).generate(" ".join(dic_words[year]))
ax = fig.add_subplot(n, 1, i+1)
ax.imshow(wordcloud)
[spine.set_visible(False) for spine in ax.spines.values()]

ax.set_yticklabels([])
ax.set_xticklabels([])
ax.grid(False)
ax.set_title(f'{year}', fontsize=20)

image.png

Pythonの人気は凄まじいですね。また2018年は設計の話題が多い年だったようです。


最後に


  • 簡単ですが、Qiita Advent Calendar 2018の情報を可視化しました。

  • Advent Calendarのお祭り感は楽しいですね。終わったばかりですが、来年のAdvent Calendarが楽しみになってきました。笑

  • それでは皆さん良いお年を!