背景
冷凍マグロ系スクリプト言語として知られるPythonは、
美しい名前のパッケージが沢山あることでも有名です。
- PyPy(ぱいぱい)
- pypan(ぱいぱん)
- pypants(ぱいぱんつ)
参考: 声に出して読みたい7つのPython用語
http://doloopwhile.hatenablog.com/entry/20120120/1327062714
これらの美しい名前のパッケージに魅せられ、
どれくらい美しい名前のパッケージが存在するのか、
本気で調べてみることにしました。
参考先の情報は2012年と少し古いですし、
今再度探せば、さらに美しい名前が見つかるに違いありません!!
調査の方針と概要
Pythonのパッケージ管理システム = pip の対象パッケージは全て
**PyPI(ぱいぱい)**に登録されています。
https://pypi.org/
※ぱいぱい、と読むかどうかは流派があるようです。
総数実に「219,370」個!(※2020年2月現在)
とても人手で確認出来る量ではありません。
全く使われていない休眠パッケージは除外したいため、
直近1年間で一回以上のインストールがあるパッケージ
を対象にしたいと思います。
例えば、参考先サイトが掲げている、
Pychinko(ぱいちんこ)
は既にこの世に存在しないようで、除外されますし、
Pyzuri(ぱいずり)
も残念ながら全くダウンロードが無いようで、除外されます。
こういった全パッケージ名称と、そのダウンロード情報は、
pypinfoとBigQueryを使うことで取得可能です(詳細後述)。
パッケージ名称は英数字であるため、
無理やりカタカナ読みする日本語変換処理を行います。
(パッケージ名は単純な英単語ではないため、
これが結構難しい処理になります)
最後に、予め作っておいた**「美しい言葉リスト」**を用いて
日本語化したパッケージ名称に対して検索をかけます。
このような地道な努力によって、
オモシロイ美しい名前のパッケージを
大量に見つけることができました!
結果発表!!
コードの前に、さきに結果をご紹介します。
いろいろ見つかったのですが、18個に選定しました。
参考先の記事が平成版だとすると、
令和版18選、略して「R18」と呼ぶことにします。
ぱいそんの美しきネーミングセンスを、例文付きでご堪能ください。
※ふりがなは、正式な読み方ではなくあくまで、
今回作成したカタカナ読み変換ツールによる自動付与結果です。
sexmachine(せっくすましん)
直近1年間で、31,001 DL
名前が女性か男性かを判断するツールです。
4月になったら新人プログラマーに大声で教えてあげましょう。
例:分からない時は【sexmachine】に聞け!
methanal(めすあなる)
直近1年間で、163 DL
仮数フォームおよびユーティリティウィジェットライブラリです。
4月になったら職場で叫んでみましょう。
例:休日はずっと【methanal】をいじっていたよ
thefuck(ざふぁっく)
直近1年間で、64,492 DL
コンソールコマンドのエラーを修正するツールです。
https://github.com/nvbn/thefuck
エラー発生時に、とにかく「ファッ〇!!」と
驚きの声を上げてしまう方に、自動対応してくれて人気がある模様。
4月になったら兎に角、よんでみましょう。
例:【thefuck】【thefuck】【thefuck】!!
pyzure(ぱいずり)
直近1年間で、427 DL
Microsoft Azure SQL DBにデータを簡単に送信するPythonパッケージです。
https://github.com/dacker-team/pyzure
本家のpyzuriは消えたものの、新たな逸材を発見しました。
4月になったらみんなに話してあげましょう。
例:昨晩【pyzure】にトライして、良かったなあ
askocli(あすくおしり)
直近1年間で、78 DL
リモートのAskOmicsにデータを挿入するためのcliツール、とのこと。
4月になったら優しく諭してあげましょう。
例:挿入するときはまず【askocli】だよ
stockings(すとっきんぐす)
直近1年間で、71 DL
完全なメッセージの送受信を可能にするWindows / Linux、
Python 2および3互換のソケットラッパー。
4月になったらこっそり打ち明けましょう
例:実はいま【stockings】を使っているんだ
osex(おせっくす)
直近1年間で、34 DL
詳細不明です。ドキュメントが無いため扱いにくいかもしれません。
4月になったら相談してみましょう
例:【osex】にハマって、困ってるんです
pypi-cli(ぱいぱい-しり)mypypi(まいぱいぱい)
直近1年間で、488 DL、109 DL
ぱいぱい系は大量にあるため、全量は記載出来ません。
きっと使い勝手の良いパッケージも多いことでしょう。
4月になったら絶賛しましょう
例:【mypypi】は最高だ!
※pypi-rankings(パイパイ-ランキングス)とかもありました。
例:昨日はずっと【pypi-rankings】を見ていたんだ
pypants(ぱいぱんつ)pypandas(ぱいぱんだす)
直近1年間で、570 DL、1,114 DL
4月になったら大きな声で宣言しましょう
例:わたしはいつも【pypandas】
pants(ぱんつ)fancypants(ふぁんしーぱんつ)
直近1年間で、535 DL、40 DL
4月になったら同僚に紹介してあげましょう
例:ぼくの【fancypants】を見せてあげるよ!
doraemon-robotframework(どらえもん-ろぼっとふれーむわーく)
直近1年間で、512 DL
受け入れテストとロボットプロセス自動化(RPA)のための汎用自動化フレームワーク
=「robotframework」を青タヌキの形にしたもののようです?
4月になったら宿題を忘れても怖くありません
例:困ったときは【doraemon-robotframework】に頼むことにするね
baka(ばか)
直近1年間で、49 DL
Pyramidのコアを使用するWebアプリケーションフレームワーク?のようです。
4月になったら試してみましょう
例:パソコンに【baka】を入れてみたんだ
hncomments(えっちんこめんつ)
直近1年間で、52 DL
4月になったら何となくつぶやいてみましょう
例:【hncomments】。ふふふ
sexytime(せくしーたいむ)sexy-fun(せくしーふぁん)
直近1年間で、52 DL、25 DL
4月になったら今後の期待を語りましょう
例:これから【sexytime】をはじめようか!
感想(かんそう)
英語からカタカナにするところが一番大変だったのですが、
英語の時点で既にパワーワードが多かったです。
4月になったら、ぜひ実際に職場や学校などで
声を出して読み上げてみましょう。
周囲の方はきっと「春の訪れ」を感じると思います。
以下は技術的な詳細なので多くの人は見なくてよいと思います。
興味のあるかたはぜひご参照ください。
美しい名前のパッケージ群を、真面目に紹介しており、
かつ、その取得用コードを解説している本記事が
「検閲/削除」されることは全く心配していません。
しかし、心が汚れたオトナが見ると、
本来の意図とは別な意味に受け取ってしまうかもしれません。
諸般の事情につき本記事は
不意に消えてしまう可能性がある点、あしからずご了承ください。
消える前にぜひお手元でお試しくださいませ。
①パッケージ一覧&ダウンロード数情報取得(pypinfo)
pipのパッケージが登録されているPyPI(ぱいぱい)では、
その統計情報のデータセットを
Google/BigQueryで公開しています。
その情報を容易に取得出来るツールが
pypinfoです。
BigQueryを操作するために、
下記のサイトの手順に従って、
https://github.com/ofek/pypinfo
Google Cloud Platform(GCP)のアカウントと、
認証情報(JSONファイル)を作る必要があります。
JSONファイルまで作成したら、ブラウザで
Colaboratory(https://colab.research.google.com/?hl=ja)
を立ち上げて、以下のようにコマンドを実行していきましょう。
from google.colab import drive
drive.mount('/content/drive')
!mkdir "drive/My Drive/PYPI"
#さきほど作成した認証用のJSONファイルをここにアップロードしましょう。
pip install pypinfo
!pypinfo --auth "/content/drive/My Drive/PYPI/YourGCPProjectName-XXXXXXXXX.json"
!pypinfo requests
#Served from cache: False
#Data processed: 67.70 GiB
#Data billed: 67.70 GiB
#Estimated cost: $0.34
#
#| download_count |
#| -------------- |
#| 61,319,474 |
他にも、国ごと、バージョンごと、インストール先OSごとなど、
様々な情報を取得出来るので、公式サイトの例に従って試してみましょう。
上記の「Estimated cost: $0.34」にあるように、
BigQueryでは、クエリを投げるごとに、
読み取ったデータ量に応じて課金が生じることには注意が必要です。
が、1 TB/一か月のAlways Free枠と、
新規GCPユーザ用の300$/年の無料枠があるため、
通常の使い方では大丈夫でしょう。
全量取得系の重いクエリだけは、連射しないように注意してください。
では、ついに今回のデータ取得用のクエリを投げてみます。
!pypinfo --days 365 --limit 250000 "" project > "drive/My Drive/PYPI/PYPINFO_365_LIST.txt"
#Served from cache: False
#Data processed: 636.49 GiB
#Data billed: 636.49 GiB
#Estimated cost: $3.11
#| project | download_count |
#| --------------------------------------------------------------------------------- | -------------- |
#| urllib3 | 950,108,414 |
#| six | 788,263,157 |
#| botocore | 693,156,212 |
#| requests | 656,942,399 |
# ~~以下略~~
ご参考までに、
直近1年間の総ダウンロード数は、
約 37,498,000,000 回
パッケージの種類は、約 215,000種類 でした。
パッケージの総数が約22万種類なので、
直近1年間レベルで見ると、登録されているものは
ほとんどが「生きている」ことになります。
以前あったと言われているPychinko(ぱいちんこ)が無いことから、
定期的に棚卸しされているのかもしれません。
また、直近30日で見ると13万4千種類ほどでしたので、
多少まともに使われているものは10万種類以下くらいでしょうか?
②取得データの加工
先ほど取得したパッケージ名&ダウンロード数のファイルは、
手元で人が閲覧する分には見やすくて便利なのですが、
プログラミング的に扱うには、パースして加工する必要がありますね。
冒頭のクエリのコストの行や、表の見出し行/Total行などの除去に注意して、
下記のように加工してLIST形式にします。
f = open('/content/drive/My Drive/PYPI/PYPINFO_365_LIST.txt')
line = f.readline() # 1行ずつ読み込む(含:改行文字)
pypinfo_list = []
while line:
#敷居が三つの場合=見出しと枠とTotalがジャマだが、それ以外はこの条件で判別可能
if line.count('|') != 3:
line = f.readline()
continue
else:
#改行コード、カンマ、半角スペースは除去
parsed_line = line.replace('\n', '').replace(' ', '').replace(',', '')
one_data = parsed_line.split('|')
#['', 'urllib3', '950108414', '']の形の真ん中2個を使う
# 備考:数値もいまのところ文字列扱い
one_data = one_data[1:3]
pypinfo_list.append(one_data)
line = f.readline()
f.close
#最初の2行の見出し行と、最後の合計行は除去
pypinfo_list = pypinfo_list[2:-1]
pypinfoが提供していたりしないのかなーと思いながらも、
自作してしまいました。仮に有ったとしても、
一回約3$かかるクエリなので、テキスト版と別に投げるより、
クエリ投入回数の節約にもなるでしょう。
この①と②は、Python関連の「データ分析」を行う際にも有用だと思います。
③パッケージ名をカタカナにする技術(alkana.py&頑張る)
さて、パッケージ名の一覧化が出来ましたが、
例えば、urllib ⇒ユーアールエルリブ
python-dateutil ⇒ パイソン-デイトユティル
などのようにパッケージ名をカタカナ化するには
どうしたら良いのでしょうか?
方針は以下の4ステップです。
1.英単語として存在している言葉をカタカナにする
2.Pythonや、AWS、GITなどのIT特殊用語をカタカナにする
3.「ローマ字変換」を適用出来るだけ適用する
4.残った端数の文字は適当に変換しておく:f⇒フ、など。
最初の、「英単語をカタカナに」は、下記の
alkana.py の変換テーブルを使わせていただきました。
https://github.com/cod-sushi/alkana.py/blob/master/README_ja.md
2~4については、主にローマ字の規則表から、
330行ほどの変換テーブルを作成しました。
前述のalkana.pyからのデータと足し合わせて、
alkana_listとして変換テーブルを作っておきます。
ここでのポイントは、その英語の文字列の長さをキーとして、
alkana_listを降順にソートしておくことです。
alkana_list = sorted(alkana_list, key=lambda x: x[0], reverse=True)
# py ⇒ パイ、や、python ⇒ パイソン など優先度の高いものについては、
# [30, 'py', 'パイ'] などと長さが長いことにして登録すれば優先度が上がる。
これで、長い単語から順に変換が適用されることになります。
実際に変換している様子は以下です。
分量があるため、一回50分くらいかかります。
下記のようにtqdmで途中の進捗を表示したり、
処理終了後はpickleで保存しておくと使いやすいでしょう。
from tqdm import tqdm
pypinfo_jp_list = []
for pypinfo in tqdm(pypinfo_list):
#日本語モジュール名格納変数(この時点では英語を格納)
jp_module_name = pypinfo[0]
for data in alkana_list:
#変換テーブルを、順番通りに変換していく。
jp_module_name = jp_module_name.replace(data[1], data[2])
pypinfo_jp_list.append([pypinfo[0], jp_module_name, int(pypinfo[1])])
print(len(pypinfo_jp_list))
print(pypinfo_jp_list[0:10])
import pickle
with open('/content/drive/My Drive/PYPI/pypinfo_jp_list.pickle', 'wb') as f:
pickle.dump(pypinfo_jp_list, f)
特殊な自然言語処理ツールとして、
なにか用途もあるかもしれません。
④「美しい言葉」が使われているパッケージを探す
最後に、特定のキーワードが含まれているパッケージを探します。
予め「Beautiful_tango_list」にお好みの単語を登録しておき、
ひたすらループするだけです。
「ぱい」などの多数使われている用語を入れると、
結果が膨大になってしまう点は注意しましょう。
今回は、とある「お上品な単語をリストアップしているサイト」
の単語を拝借しました。
Colaboratoryではprint出力は5000行までだと思うので、
1万行くらいいくならば、下記のようにファイルへ出力する方が良いでしょう。
result_str = ""
for word in Beautiful_tango_list:
result_str += "■"+" "+ word + "\n"
for data in pypinfo_jp_list:
if word in data[1]:
result_str += str(data) + "\n"
result_str += "\n"
with open('/content/drive/My Drive/PYPI/Beautiful_Result.txt', 'w') as f:
print(result_str, file=f)
おつかれさまでした。
これらの技術&コードを駆使して、前述の結果のような、
美しい名前のパッケージを多数見つけることが出来たのです。
あとがき
Python(ぱいそん)のネーミングセンスは奥が深いですね。
辞書をひくときに隣の単語もみるように、
名前との偶然の巡りあわせだけからでも、
お気に入りのパッケージとの出会いが生じたら素晴らしいことです。
PyPI(ぱいぱい)が引き合わせた運命の出会い、
とも言えるでしょう。
技術への興味のきっかけが「名前が気になったので」
でも良いのではないでしょうか?
いたって真面目にパッケージを紹介している記事ですので、
本来の意図とは違った意味を連想してしまうような、
心が汚れたオトナのかたは、石を投げないでください。
どうぞよろしくお願い申し上げます。
さあみなさんも、もっと
ぱい○ん と ぱいぱ○ が
すきになりましたでしょうか?
ここまでお読みいただいた賢明な読者諸氏には、
○ に入る言葉は明らかですね。
誤解してしまう方や、本記事にあらぬ文句を言う方がいたとしたら、
普段からそのようなことばかり考えている方に違いありません。
現場からは以上です。