はじめに
ストックといいねが分かれてある程度の期間が過ぎ,ここで平均いいね数を知りたいと思ったのですが,特にまとめている記事がなかったので下の記事を参考にまとめてみました.
参考:「平均被ストック数は9」「被ストック数100以上の記事は1%」…QiitaAPIv2で1万件の投稿を分析して分かったこと
データの取得方法
ストック数を調べるのとは違い,投稿された記事の取得API(GET /api/v2/items
)で返って来るJSON内に「記事につけられたいいねの数」(likes_count
)が含まれています.
最新1万件の投稿を取得して,その中に含まれているいいね数を集計すれば平均を割り出せます.
(1万件以上の投稿を取得する方法がわからないので,最新1万件としています)
注意点
1万件取得といっても一括取得ではなく,100件取得を100回繰り返すことになるので,API使用回数は100回になります.
アクセスキーを発行していれば1時間で1000回まで利用できますが,認証していない状態では1時間に60回までという制限があるので,おそらく途中で引っかかります.
コード
Googleスプレッドシート上で集計する予定だったので,GASで組みました.
やってることは単純です.
- スプレッドシートを開く
- Qiita API を利用し,1万件を取得(実際は100件を100回取得している)
- 返って来たJSON内のいいね数をスプレッドシートに記入していく
- (手動)スプレッドシート上で関数やグラフを使って集計
function myFunction() {
const ss_id = <スプレッドシートID>;
const QiitaAuth = <Qiita API アクセスキー>;
// スプレッドシートを開く
var ss = SpreadsheetApp.openById(ss_id);
var sheet = ss.getSheets()[0];
// Qiita API アクセスキー設定
const headers = {'Authorization' : 'Bearer ' + QiitaAuth};
const params = {'headers' : headers};
// 1万件の取得
for(var i=1; i<=100; i++){
var queue = [];
var url = 'https://qiita.com/api/v2/items?page='+i+'&per_page=100';
var response = UrlFetchApp.fetch(url, params);
var content = response.getContentText('UTF-8');
var items = JSON.parse(content);
items.forEach(function(item){
queue.push([item.likes_count]);
});
// スプレッドシートへ記入
sheet.getRange((i-1)*100+1, 1, 100).setValues(queue);
}
return 0;
}
ちなみにこのコードの実行時間は281秒でした.
GASで動かすときは,1回の実行が5分以内という制限があるので結構ギリギリでした.
ヒストグラム
参考にした記事に倣ってヒストグラムにしてみました.
2桁以上のいいねがつく記事が少ないことがわかります.
詳しい結果
今回のコードの実行日時は2017/09/04 18:23です.
詳しい数値は下の表のようになりました.
いいね数 | 記事数(%) |
---|---|
0 | 43.56 |
1-9 | 49.27 |
10-19 | 4.00 |
20-39 | 1.88 |
40-59 | 0.47 |
60-79 | 0.17 |
80-99 | 0.13 |
100-299 | 0.3 |
300- | 0.22 |
また,いいね数の 平均値は「4.66」 , 中央値は「1」 でした.
雑記
実は初投稿だったりします.
元々はQiitaの記事をSlackに流すための基準をいいね数に変更しようと思って,そのベースラインはいくつがいいのかなと思ったのが始まりでした.
ストック数の平均も出したかったのですが,思ったより実行に時間がかかっていたので,実行時間制限を考える必要が出て来てとりあえず諦めました.
(そのうち頑張るかもしれません)