金子邦彦研究室プログラミングPythonSQL 問い合わせ(Python, pandas, pandasql を使用)

SQL 問い合わせ(Python, pandas, pandasql を使用)

前準備

Python の準備(Windows,Ubuntu 上)

サイト内の関連ページ

関連する外部ページ

Python の公式ページ: https://www.python.org/

Python の numpy,pandas,seaborn,matplotlib,pandasql のインストール

Iris データセット, titanic データセットの準備

  1. iris, titanic データセットの読み込み
    import pandas as pd
    import seaborn as sns
    sns.set()
    iris = sns.load_dataset('iris')
    titanic = sns.load_dataset('titanic')
    

    [image]
  2. データの確認
    print(iris.head())
    print(titanic.head())
    

    [image]

SQL 問い合わせの例(Python, pandasql を使用)

  1. 選択 (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;"))
    

    [image]
  2. 射影 (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;"))
    

    [image]
  3. グループごとの数え上げ

    列を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;") );
    

    [image]
  4. グループごとの最大、最小、平均、中央値、和

    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;") );
    

    [image]