2018年もAdvent Calendarお疲れ様でした
- 今日で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)
全記事数/いいね数/はてなブックマーク数
まず全体の傾向を見ていきましょう。
2015 | 2016 | 2017 | 2018 | |
---|---|---|---|---|
記事数 | 6687 | 9061 | 10866 | 11469 |
いいね数 | 172396 | 144690 | 150965 | 86743 |
はてブ数 | 79984 | 89651 | 88385 | 50440 |
総記事数は順調に増えていることがわかります。
2018年は2015年の2倍近くの記事が書かれていることに驚きました。
その一方で、いいね数/はてブ数は去年・一昨年に達していていないですね。
これは書かれてからジワジワ稼いでいくものだからかもしれません。
はてブ数のランキング
カレンダーごと
はてブ数
| | はてブ数 |
|:--|--:|:--|
| モチベーションクラウド | 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いいね数と比べると全然違って面白いです。
| 順位 | 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 |
あっ… 1つ存在を隠されているカレンダーがあったことを知ってしまいました。
記事ごと
順位 | 著者 | タイトル | はてブ数 | いいね数 |
---|---|---|---|---|
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について] (https://blog.ikedaosushi.com/entry/2018/12/01/195512)も10位にランクインしました!
ちなみに2015年〜2018年
順位 | 年 | 著者 | タイトル | はてブ数 | いいね数 |
---|---|---|---|---|---|
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 |
カテゴリーごと
### 分布
カテゴリーごとに分布を出してみます。
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を書いている量がすごい人がいるので著者ごとのランキングも見てみたいと思いました。
調子に乗ってアドベントカレンダーを申し込みすぎたので、泣きそうになりながら記事を大量生産している。とりあえず3日分は書き上げた。
— ゆずたそ (@yuzutas0) 2018年11月28日
はてブ数
いいね数
記事数
ちなみに記事数で見るとどうなのでしょうか。
なんと ohisama@githubさんが85記事書いていました。すごすぎる…。
ちなみに歴代だと
shinyorke | Twitterさんがトップでした!
いいね数/はてブ数の分布
次にいいね数/はてブ数の分布を見てみます。
相関
面白いことに、いいね数orはてブ数が少ないときは、いいね数の方が多くなる傾向があり、ある程度増えてくると線形の相関が見られるようです。はてブ数はホットエントリに入らないと全然増えないということかもしれません。
ヒストグラム
それぞれの分布をヒストグラムで可視化してみます。
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)
2/8の法則どころかはてブ数に関しては1/9の法則ですね。
何日が一番いいね!/はてブされやすいか
日付に傾向があるのかを見てみます。
いいね数の方は顕著な結果にはなりませんでしたが、はてブ数は非常に面白い結果になりました。
「後半になるに連れてブックマークされやすい」かつ「土日の記事はブックマークされやすい」傾向が見られます。
ワードクラウド
最後に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)
Pythonの人気は凄まじいですね。また2018年は設計の話題が多い年だったようです。
最後に
- 簡単ですが、Qiita Advent Calendar 2018の情報を可視化しました。
- Advent Calendarのお祭り感は楽しいですね。終わったばかりですが、来年のAdvent Calendarが楽しみになってきました。笑
- それでは皆さん良いお年を!