PythonのPandas
Pandasは、データフレームと呼ばれる2次元配列に対して、Excelでおこなうようなデータ解析が簡単にできるライブラリ。
データベースからSQLで引っ張ってきたデータをPandasのデータフレームに打ち込んで、データ解析した結果をグラフなどに出力し、日替わりでウェブから見られるようにする…なんてことができるんですね。
PythonのPandasにSQLでデータを読み書きする
Pythonとデータベースを接続するためのライブラリは、DBによって変わります(DB-API 2.0インタフェース)
しかし、接続したあとは、pandasの関数を使ってどのデータベースでも同じように扱えるんですね。
DB-API2.0対応のライブラリを使っていれば、pandasでの処理は共通にできます。
参考 PEP 249 – Python Database API Specification v2.0 | peps.python.org
SQLiteのテーブルにSQLを発行し、pandasのデータフレームにデータを取り込んでみましょう。
データベースは、SQLiteのサンプルデータベースを使います。
関連 SQLite Sample Database And Its Diagram (in PDF form
SQLiteはファイルベースのデータベースなので、ファイルをカレントディレクトリにwgetすれば、すぐに使えるようになります。
ファイルの場所は、https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip
$ cat sqlite_sample2.py #!/usr/bin/python3 import sqlite3 import pandas as pd con = sqlite3.connect("chinook.db") df=pd.read_sql( 'select * from customers limit 10', con ) print( df )
実行するとこうなります。pandasのデータフレームにSQLの実行結果が読み込まれています。データフレームは、データベースのテーブルというか、Excelの表そのものの形をしているので、データベースやcsv形式のデータと親和性が高いんですね。
$ ./sqlite_sample2.py CustomerId FirstName ... Email SupportRepId 0 1 Luis ... luisg@embraer.com.br 3 1 2 Leonie ... leonekohler@surfeu.de 5 2 3 Francois ... ftremblay@gmail.com 3 3 4 Bjorn ... bjorn.hansen@yahoo.no 4 4 5 Franti?ek ... frantisekw@jetbrains.com 4 5 6 Helena ... hholy@gmail.com 5 6 7 Astrid ... astrid.gruber@apple.at 5 7 8 Daan ... daan_peeters@apple.be 4 8 9 Kara ... kara.nielsen@jubii.dk 4 9 10 Eduardo ... eduardo@woodstock.com.br 4 [10 rows x 13 columns]
データフレームの内容をデータベースに書き込むことも可能です。
関連 pandas.read_sql — pandas 1.4.3 ドキュメント
関連 pandas.DataFrame.to_sql — pandas 1.4.3 ドキュメント
to_sqlでpandasのデータフレームをデータベースに書き込み、read_sqlでSQLの実行結果をpandasのデータフレームに読み出します。
PythonのPandasのインストール
Pandasのインストールはpipコマンドで実行可能。pipコマンドは、Python3.4以降がインストールされていると自動で入っていると思います。
pip install pandas
インストール後、pythonにてimport pandasでエラーが出なければ、インストール成功。
$ pip install pandas Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (0.25.3) Requirement already satisfied: pytz>=2017.2 in /usr/lib/python3/dist-packages (from pandas) (2018.3) Requirement already satisfied: numpy>=1.13.3 in /usr/lib/python3/dist-packages (from pandas) (1.13.3) Requirement already satisfied: python-dateutil>=2.6.1 in /usr/lib/python3/dist-packages (from pandas) (2.6.1) $ python3 Python 3.6.9 (default, Jan 26 2021, 15:33:00) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pandas >>>1
※環境により、pipをpip3(python3用のpip)にして実行しないといけない場合があるようです。