Python のパッケージインデックス PyPI における,パッケージのダウンロード数等のデータは BigQuery で公開されています.このデータを利用するとパッケージのダウンロード数を集計したり,よく使われている処理系のバージョンなどを簡単に知ることが出来ます.
データセット
PyPI の統計情報のデータセットは the-psd:pypi で公開されています.日ごとにテーブルが作成されており,downloadsYYYYMMDD のようなテーブル名になっています.1ダウンロードごとに1行のデータになっており,以下のような様々な情報が記録されています.
- タイムスタンプ
- 国コード
- プロジェクト名 (パッケージ名)
- バージョン
- 形式 (sdist・bdist_wheel など)
- OS の情報
- 処理系の情報
- TLS 関係の情報
データを集計する
例えばある日のすべてのパッケージのダウンロード数の合計は次のようにして集計できます.
SELECT
COUNT(*) AS download_count,
FROM
[the-psf:pypi.downloads20170529]
ORDER BY
download_count DESC
結果は以下のようになります.約2,257万回もパッケージがダウンロードされているようです.
[
{
"download_count": "22573815"
}
]
有名なパッケージである requests のダウンロード数を集計すると,以下のようになります.
SELECT
COUNT(*) AS download_count,
FROM
[the-psf:pypi.downloads20170529]
WHERE
file.project = "requests"
ORDER BY
download_count DESC
約44万回ダウンロードされているようです.
[
{
"download_count": "445065"
}
]
(ダウンロードに使用された) Python のバージョン毎の,パッケージのダウンロード数も集計できます.
SELECT
REGEXP_EXTRACT(details.python, r"^([^\.]+\.[^\.]+)") as python_version,
COUNT(*) as download_count,
FROM
[the-psf:pypi.downloads20170529]
GROUP BY
python_version,
ORDER BY
download_count DESC
結果は以下のようになります.
[
{
"python_version": "2.7",
"download_count": "16162589"
},
{
"python_version": "3.5",
"download_count": "2249664"
},
{
"python_version": null,
"download_count": "1770785"
},
{
"python_version": "3.4",
"download_count": "897013"
},
{
"python_version": "3.6",
"download_count": "888574"
},
{
"python_version": "2.6",
"download_count": "527765"
},
{
"python_version": "3.3",
"download_count": "58497"
},
{
"python_version": "3.7",
"download_count": "11959"
},
{
"python_version": "3.2",
"download_count": "5401"
},
{
"python_version": "1.17",
"download_count": "1369"
},
{
"python_version": "2.4",
"download_count": "121"
},
{
"python_version": "2.5",
"download_count": "76"
}
]
約1600万で,Python 2.7 が圧倒的な優勝です😭😭😭.Python 3.5 は 約224万で2位になっています.
Python 3.x 系はマイナーバージョンで票が割れているのであまりフェアな比較ではないかもしれません.ちなみに,Python 3.x の結果を足しあわすと約410万になるので,Python 2 と 3 の比率は 4:1 くらいになります.
pypinfo でより簡単に集計する
実は上に挙げたクエリは,pypinfo というツールを使って作ったものを修正したものです.pypinfo を使うと CLI から簡単に集計を行ったり,クエリを生成したりすることが出来ます.詳細は pypinfo の README を参照して下さい.例:
$ pypinfo requests
download_count
--------------
11033343
まとめ
BigQuery を使うと,PyPI の統計情報を簡単に集計することが出来,自分の作ったパッケージのダウンロード数なども簡単に調べることが出来ます.また,pypinfo を使うとより簡単に集計を行うことが可能です.
テーブルのサイズが非常に大きいので,課金に注意しましょう.(毎月1TBまでのデータのクエリは無料です.) 例えば 2017/5/28 のテーブルのサイズは約5GBあります.必要なカラムのデータのみを取得するようにすれば1回のクエリ実行で読み込むデータは数百MB程度になるはずです.