19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-25

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について] (https://blog.ikedaosushi.com/entry/2018/12/01/195512)も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が楽しみになってきました。笑
  • それでは皆さん良いお年を!
19
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?