SQL 問い合わせ(Python, pandas, pandasql を使用)
前準備
Python の準備(Windows,Ubuntu 上)
- Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール(winget を使用しないインストール): 別ページ »で説明
- Ubuntu では,システム Pythonを使うことができる.Python3 開発用ファイル,pip, setuptools のインストール: 別ページ »で説明
【サイト内の関連ページ】
- Python のまとめ: 別ページ »にまとめ
- Google Colaboratory の使い方など: 別ページ »で説明
【関連する外部ページ】 Python の公式ページ: https://www.python.org/
Python の numpy,pandas,seaborn,matplotlib,pandasql のインストール
- Windows の場合
Windows では,コマンドプロンプトを管理者として実行し, 次のコマンドを実行する.
python -m pip install -U numpy pandas seaborn matplotlib pandasql
- Ubuntu の場合
端末で,次のコマンドを実行
sudo apt -y update sudo apt -y install python3-numpy python3-pandas python3-seaborn python3-matplotlib sudo pip3 install -U pandasql
Iris データセット, titanic データセットの準備
- iris, titanic データセットの読み込み
import pandas as pd import seaborn as sns sns.set() iris = sns.load_dataset('iris') titanic = sns.load_dataset('titanic')
- データの確認
print(iris.head()) print(titanic.head())
SQL 問い合わせの例(Python, pandasql を使用)
- 選択 (selection)
import pandas as pd from pandasql import sqldf import seaborn as sns sns.set() iris = sns.load_dataset('iris') pysqldf = lambda q: sqldf(q, globals()) print(pysqldf("SELECT * FROM iris WHERE sepal_length > 5;"))
- 射影 (projection)
import pandas as pd from pandasql import sqldf import seaborn as sns sns.set() iris = sns.load_dataset('iris') pysqldf = lambda q: sqldf(q, globals()) print(pysqldf("SELECT sepal_length, sepal_width FROM iris WHERE sepal_length > 5;"))
- グループごとの数え上げ
列を1つ選ぶことで、グループを作り、各グループの要素数を求める
pandasql と SQL を使う場合
import pandas as pd from pandasql import sqldf import seaborn as sns sns.set() iris = sns.load_dataset('iris') titanic = sns.load_dataset('titanic') pysqldf = lambda q: sqldf(q, globals()) print( pysqldf("SELECT species, count(*) FROM iris group by species;") ); print( pysqldf("SELECT embark_town, count(*) FROM titanic group by embark_town;") );
- グループごとの最大、最小、平均、中央値、和
Iris データセットで,各グループの最大値を求める場合のみを載せる.
pandasql と SQL を使う場合
import pandas as pd from pandasql import sqldf import seaborn as sns sns.set() iris = sns.load_dataset('iris') titanic = sns.load_dataset('titanic') pysqldf = lambda q: sqldf(q, globals()) print( pysqldf("SELECT species, max(sepal_length), max(sepal_width), max(petal_length), max(petal_width) FROM iris group by species;") );