SQLクエリでインポートを絞り込む

pandasで効率よくデータを取り込む

Amany Mahfouz

Instructor

列のSELECT

  • SELECT [column names] FROM [table name];
  • 例:
    SELECT date, tavg 
    FROM weather;
    
pandasで効率よくデータを取り込む

WHERE句

  • WHERE 句でレコードを絞り込む
    SELECT [column_names] 
      FROM [table_name] 
     WHERE [condition];
    
pandasで効率よくデータを取り込む

数値でフィルタ

  • 数値は比較演算子で比較
    • =
    • >>=
    • <<=
    • <>(不等号)
    • 例:
      SELECT * 
      FROM weather 
      WHERE tmax > 32;
      
pandasで効率よくデータを取り込む

テキストでフィルタ

  • 文字列は = と一致させる(完全一致)
  • 大文字小文字を区別
  • 例:
    /* ブルックリンの事案を取得 */
    SELECT * 
    FROM hpd311calls
    WHERE borough = 'BROOKLYN';
    
pandasで効率よくデータを取り込む

SQLとpandas

# ライブラリを読み込む
import pandas as pd
from sqlalchemy import create_engine

# データベースエンジンを作成 engine = create_engine("sqlite:///data.db")
# ブルックリンのレコードを取得するクエリ query = """SELECT * FROM hpd311calls WHERE borough = 'BROOKLYN';"""
# データベースをクエリ brooklyn_calls = pd.read_sql(query, engine)
print(brookyn_calls.borough.unique())
['BROOKLYN']
pandasで効率よくデータを取り込む

条件の組み合わせ: AND

  • AND を使った WHERE 句は、すべての条件を満たすレコードを返す
# ブロンクスの配管に関するレコードを取得するクエリ
and_query = """SELECT * 
                 FROM hpd311calls 
                WHERE borough = 'BRONX' 
                  AND complaint_type = 'PLUMBING';"""

# ブロンクスの配管に関する通報を取得 bx_plumbing_calls = pd.read_sql(and_query, engine) # レコード数を確認 print(bx_plumbing_calls.shape)
(2016, 8)
pandasで効率よくデータを取り込む

条件の組み合わせ: OR

  • OR を使った WHERE 句は、いずれかの条件を満たすレコードを返す
# 水漏れまたは配管に関するレコードを取得するクエリ
or_query = """SELECT * 
                FROM hpd311calls 
               WHERE complaint_type = 'WATER LEAK'
                  OR complaint_type = 'PLUMBING';"""

# 配管または水漏れに関する通報を取得 leaks_or_plumbing = pd.read_sql(or_query, engine) # レコード数を確認 print(leaks_or_plumbing.shape)
(10684, 8)
pandasで効率よくデータを取り込む

練習しましょう!

pandasで効率よくデータを取り込む

Preparing Video For Download...