- 更新日: 2018年10月23日
 - 公開日: 2018年09月07日
 
【Python入門】ダウンロード数トップ10のライブラリを解説

Pythonとライブラリ、これは切ってもキれない関係。
こちらではダウンロード数トップのメジャーなPythonライブラリをご紹介。
どんなものがあるか目を通しておくと参考になると思いますよ。
【Python入門】ダウンロード数トップ10のライブラリを解説
Pythonとライブラリ

Pythonは、学習初期でも先人の作ったライブラリを利用することで、身の丈以上の機能を実装することが可能。 Pythonライブラリを管理する PyPi.org では、現在 100万以上のライブラリが公開され、現在も増加中です。 またそんなライブラリ、自分でも簡単に作れちゃいます。
そしていくつかの学習環境があるPythonにおいては、Jupyter Notebook をインストールすると 180以上のライブラリが一緒にインストール。 もはや「ライブラリ」ありきでプログラムするのではなく、「ソリューション」ありきでライブラリを用意し、開発する流れ。 そんなチョット特異なPythonのライブラリは、とにかくコードを書いて実際に使ってみることが理解の近道です。
ちなみに既にPython環境を構築されている方は、
pip freeze
とコマンド入力して、ライブラリの状況を確認してみましょう。 Python学習が約半年過ぎた私の場合、 250 ぐらいライブラリがインストールされていました。ちょっと知らないライブラリも多くて驚きです。
【pip freeze の実行結果】

Pythonライブラリのダウンロードランキング
今回ご紹介するライブラリは、ライブラリ管理サイトの PyPi.org の過去1年間ダウンロード数トップ10 をご紹介します。 すでに使っているライブラリもあると思いますが、改めて意味と用途を確認してみると使う幅も広がると思いますよ。 尚、PyPi.org のダウンロード数は、 「pypinfo」というライブラリを使用しました。

1. pip

画像引用:pip
Anacondaをインストールされている方は pip 、既にインストールされていますね。
こちらは「パッケージマネージャー」のライブラリで、新規ライブラリをインストールしたり削除したりする時に使用。
つまりPythonライブラリを使う上では欠かせないライブラリなんですね。
pip とコマンド入力すれば機能一覧を確認できますが、中でもよく使うのは以下の3つでしょう。
- pip install ●● /●●をインストール
 - pip show ●● /ライブラリ●●の情報表示
 - pip freeze /pip管理のライブラリ一覧を表示
 
【上記コードの実行結果】

- pip公式ページ https://pip.pypa.io/en/stable/
 
2. six

画像引用:six
six、これはPythonのバージョン 2 と 3 の互換性をサポートするためのライブラリ。 Pyhon2 と Python3 ではいくつかの処理システムが変更されていて、Python2 でできていたことが Python3 でできないなどあります。 そんな機能変更を six が補完してくれんですね。 six を使うと Python2 のコードを Python3 で動かせる、というものではないので予めご注意下さい。
six は、Anaconda内に含まれていて、やや上級者向けのライブラリです。
例を上げるとイメージしやすいと思いますので、今回はPython3で廃止された iteritems() を例にご紹介。
iteritems() (イテレータ)は、リストや辞書型などのデータ型の一つで「順番に並んだデータ」としての扱い。
Python3 では iteritems() 使用できませんが、 ライブラリ six を使うことで iteritems() が使えるようになりますね。
| 【Python3の場合】 | 【Python2の場合】 | 
|---|---|
| 
color= {'1':'go','2':'back'}
 color.items() type(color.items()) color.iteritems() import six six.iteritems(color)  | 
color= {'1':'go','2':'back'}
 color.items() type(color.items()) color.iteritems()  | 
【実行結果】

上記サンプルの通り本来Python3では扱えない iteritems() が、 six を利用することで実行できています。
iteritems() 以外の six の機能は、ドキュメントを参考にすると分かりやすいと思いますよ。
- six 公式ドキュメント http://six.readthedocs.io/
 - six公式ページ https://pypi.org/project/six/
 
3. botocore

画像引用:botocore
botocoreは、ライブラリというよりはパッケージに属しますが、PyPi上で3番目に多いダウンロードのためご紹介。 botocoreは、WebサービスやIoTサービスなどのクラウド・プラットフォームを手掛ける AWS(Amazon Web Services) 上でPythonを利用する時に必要となるパッケージです。 botocoreを利用すると AWS に「Low-Level Client」で 接続でき、boto3を使うと「Low & Higher-Level Client」で接続可能に。 つまりAWSベースの開発で便利な boto3 には botocore が含まれているんですね。
サンプルのご紹介には、AWSの基礎知識なども必要となってくるため控えさせて頂きます。
- botocore公式ページ https://github.com/boto/botocore
 - boto3公式ページ https://github.com/boto/boto3
 
4. python-dateutil

画像引用:dateutil
dateutilは、日付や時間などの日時を取得したい時や日時を使って誕生日や有効日数など日付計算したい時に使うライブラリの一つです。 例えば、誕生日から年齢を自動計算するプログラムを検討。
from dateutil.relativedelta import *
today = datetime.date.today()
year = int(input('西暦何年に生まれた?'))
month = int(input('何月生まれ?'))
day = int(input('何日?'))
born = datetime.date(year, month, day)
age = relativedelta(today, born)
print(age)
【実行結果】

入力する自分の誕生日を 変数 born に格納し、本日の日付 変数 today と比較。 比較は、 relativedelta() 関数で処理。 これによって生後何日もしくは何秒経過しているなどの時刻データを取得することが可能。
誕生日に限らず、前回のログインからどれぐらい経過しているか、ポイント失効までどれぐらいあるか、など時刻データを使って制御システムを構築することができますね。 django などのフレームワークでも dateutile は使われていますね。
- dateutil 公式ページ https://dateutil.readthedocs.io/en/stable/
 
5. s3transfer

画像引用:s3transfer
s3trasferは、Pythonパッケージの boto3 に含まれているライブラリです。 AWSの s3transfer機能をPythonで利用する時に必要で、やや上級者向け、実務的なライブラリといえるでしょう。 しかし、Pythonライブラリのダウンロードランキング5位にこうした専門的なライブラリが入ってるということは、「AWS」無視できないサービスかもしれないですね。
s3transfer公式ページ https://github.com/boto/s3transfer
6. simplejson

画像引用:simplejson
simplejsonは、Pythonに標準搭載されている jsonライブラリより高速でシンプルなライブラリになります。 プログラミング初心者にとってjsonファイルは取っつきにくいですが、近年政府取り扱いデータもjson形式で公開されたりしていますので、「json」少しぐらい知っておきたいですね。
まず最初に simplejson と json の機能面の違いについてご紹介します。
両方のライブラリにデータ構造をJSON文字列にエンコードする dumps() がありますが、この関数に付属する引数に違いがあります。
| 【simplejsonの場合】 | 【jsonの場合】 | 
|---|---|
| 
simplejson.dumps( obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, sort_keys=False, item_sort_key=None, for_json=None, ignore_nan=False, int_as_string_bitcount=None, iterable_as_array=False, **kw)  | 
json.dumps( obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)  | 
simplejsonの方が機能豊富ですね。尚、この機能面の違いは dumps() に限らず、 load() にも違いがあります。
次に処理スピードについて試してみました。すべての処理に本結果が当てはまるわけではないと思いますので、一例としてご参考下さい。 今回は、Web上のJSONファイルをインポートして処理するまでにかかる時間で比較。
【今回使用したJSONファイル:アメリカの郵便番号毎の人口統計】
https://catalog.data.gov/dataset/demographic-statistics-by-zip-code-acfc9
【simplejson】
import simplejson
import urllib.request
import time
t1 = time.time() 
hres = urllib.request.urlopen('https://data.cityofnewyork.us/api/views/kku6-nxdu/rows.json?accessType=DOWNLOAD')
data = simplejson.loads(hres.read())
data
t2 = time.time()
done_speed = t2-t1
print("処理時間:", done_speed)
【json】
import json
import urllib.request
import time
t1 = time.time() 
hres = urllib.request.urlopen('https://data.cityofnewyork.us/api/views/kku6-nxdu/rows.json?accessType=DOWNLOAD')
data = json.loads(hres.read())
data
t2 = time.time()
done_speed = t2-t1
print("処理時間:", done_speed)
【実行結果】

simplejson.loads() の方が json.loads() より 0.8秒ほど早いことが確認できますね。
今回は loads() で簡単なJSONデータですが、dumps() などの処理方法、Twitter API などのデータによって違いは出るようです。処理スピードについて気になる方は、こちら をご参考ください。
- simplejson公式ページ https://github.com/simplejson/simplejson
 
7. setuptools

画像引用:setuptools
setuptoolsは、本稿最初でご紹介させて頂いた pip と同じパッケージマネジャになります。
Anacondaをインストールすると setuptools も一緒にインストールされて、 easy_install というコマンドでライブラリをインストール可能。
ただ pip と setuptools、実は違いが結構ありますので以下にご紹介。
今までなんとなく easy_install を使っていた方、実は思っていたことと違うことがプログラム処理されていたかもしれませんよ。(私がそうです。。。)最初の内は、pip install をオススメします。
| pip | easy_install | |
| 開始時期 | 2008年 | 2004年 | 
| Wheelsからのインストール | Yes | No | 
| パッケージのアンインストール | Yes (pip uninstall) | No | 
| 依存関係のサポート | Yes (Requirements Files) | No | 
| インストール済みパッケージの表示 | Yes (pip list and pip freeze | No | 
| PEP 438 のサポート | Yes | No | 
| インストール・フォーマット | ‘Flat’ packages with egg-info metadata. | Encapsulated Egg format | 
| パスの変更(sys.path) | No | Yes | 
| Eggsからのインストール | No | Yes | 
| pylauncher のサポート | No | Yes | 
| マルチバージョン・インストール | No | Yes | 
| インストール時のスクリプト停止 | No | Yes | 
| プロジェクト・インデックス | virtualenv のみ | setup.cfg | 
- setuptools公式ページ https://github.com/pypa/setuptools
 
8. pyasn1

画像引用:pyasn1
pyasn1は、pythonで ASN1 を使用する時に使うライブラリ。 ASN1は、Abstract Syntax Notation One の略で「抽象構文表記法1」と訳せます。 抽象構文表記法1、まったくイメージが湧かないと思いますが、ムリもありません。 これは私達の知らない、見えない領域の処理で使われる記法の一つで、 https の通信処理やデータの16進数化などチョット上級者レベルの領域で使用中。
pyasn1は、Anacondaに含まれていませんので自分でインストールする必要があります。
pip install pyasn1
- pyasn1 公式ページ https://github.com/etingof/pyasn1
 
9. pyyaml

画像引用:PyYAML
pyyaml は、YAMLというデータ型をPython上で扱う時に使用するライブラリ。 YAML自体 JSON や XML に比べるとややマイナーですが、可読性に優れ、シンプルな構造には定評がありますね。
サンプルの YAML ファイルを用意して、 pyyaml 使ってみたいと思います。
test.yaml
items:
  sword: 100
  axe: 80
  needle: 10
【Pythonコード】
import yaml
file = "test.yaml"
r = open(file, "r")
data = yaml.safe_load(r)
data
【実行結果】

- pyyaml 公式ページ http://pyyaml.org/wiki/PyYAML
 
10. futures

画像引用:futures
こちらのライブラリは、Linuxディストリビューションで有名なUbuntuに搭載されているため、PyPiで上位にランキング。
機能としては、Python3で標準搭載されている並列処理の concurrent.futures が Python2 で使えるように。
並列処理、そしてPython2という環境、Python初学者にとってこちらのライブラリは無視しても問題はなさそうです。
- futures 公式ページ https://github.com/agronholm/pythonfutures
 
\AIエンジニアに必要なスキルが身に付く/
まとめ
今回ダウンロード数トップのPythonライブラリをご紹介させていただきましたが、どのライブラリもこちらでは紹介しきれない量の「機能」を持っていますね。コピペ・プログラマからワンランク上のプログラマになるためには、こうしたライブラリの機能を紹介している公式ドキュメントの読解が不可欠でしょう。そしてその時必ず基本文法の知識が必要となってきます。
「Python本、買ったものの全然理解できない」「Pythonコードってどうやって実行するんだ?」というPython初学者の方、プログラミングスクールを頼ってみてはいかがでしょうか?特に忙しい社会人、大学生の方には オンライン × マンツーマン で有名な CodeCamp が役立ってくれると思いますよ。今日でも無料体験レッスンできるかもしれませんので、よかったら一度覗いてみて下さい。
- この記事を書いた人
 - オシママサラ
 














