414
187

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 3 years have passed since last update.

声に出して読みたい美しいPython用語18選。R18例文付き

Posted at

背景

冷凍マグロ系スクリプト言語として知られる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(ぱいずり)
も残念ながら全くダウンロードが無いようで、除外されます。

こういった全パッケージ名称と、そのダウンロード情報は、
pypinfoBigQueryを使うことで取得可能です(詳細後述)。

パッケージ名称は英数字であるため、
無理やりカタカナ読みする日本語変換処理を行います。
(パッケージ名は単純な英単語ではないため、
 これが結構難しい処理になります)

最後に、予め作っておいた**「美しい言葉リスト」**を用いて
日本語化したパッケージ名称に対して検索をかけます。

このような地道な努力によって、
オモシロイ美しい名前のパッケージを
大量に見つけることができました!

結果発表!!

コードの前に、さきに結果をご紹介します。
いろいろ見つかったのですが、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)
を立ち上げて、以下のようにコマンドを実行していきましょう。

GoogleDriveをマウントします。
from google.colab import drive
drive.mount('/content/drive')
今回の作業フォルダを作ります。
!mkdir "drive/My Drive/PYPI"
#さきほど作成した認証用のJSONファイルをここにアップロードしましょう。
pypinfoをインストールします。
pip install pypinfo
認証用のJSONファイルのパスを指定して、認証情報を取得します。
!pypinfo --auth "/content/drive/My Drive/PYPI/YourGCPProjectName-XXXXXXXXX.json"
pypinfoの疎通確認(こんな感じに「request」のダウンロード数が取得出来ます)
!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$/年の無料枠があるため、
通常の使い方では大丈夫でしょう。
全量取得系の重いクエリだけは、連射しないように注意してください。

では、ついに今回のデータ取得用のクエリを投げてみます。

直近1年間を指定してクエリを投げ、結果をファイルに保存。
!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形式にします。

結果ファイルを加工しながら読み込んで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を降順にソートしておくことです。

x[0]の項目にはあらかじめ文字列の長さを入れておく
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万行くらいいくならば、下記のようにファイルへ出力する方が良いでしょう。

Beautiful_tango_listの内容を検索してテキストに書く
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(ぱいぱい)が引き合わせた運命の出会い
とも言えるでしょう。
技術への興味のきっかけが「名前が気になったので」
でも良いのではないでしょうか?

いたって真面目にパッケージを紹介している記事ですので、
本来の意図とは違った意味を連想してしまうような、
心が汚れたオトナのかたは、石を投げないでください。
どうぞよろしくお願い申し上げます。

さあみなさんも、もっと
ぱい○ん と ぱいぱ○ が
すきになりましたでしょうか?

ここまでお読みいただいた賢明な読者諸氏には、
○ に入る言葉は明らかですね。

誤解してしまう方や、本記事にあらぬ文句を言う方がいたとしたら、
普段からそのようなことばかり考えている方に違いありません。

現場からは以上です。

414
187
5

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
414
187

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?