より複雑なSQLクエリ

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

Amany Mahfouz

Instructor

DISTINCT値の取得

  • SELECT DISTINCT で1つ以上の列の一意な値を取得
  • 構文:
    SELECT DISTINCT [column names] FROM [table];
    
  • 重複レコードを除去:
    SELECT DISTINCT * FROM [table];
    
/* Get unique street addresses and boroughs */
SELECT DISTINCT incident_address, 
       borough
  FROM hpd311calls;
pandasで効率よくデータを取り込む

集計関数

  • 記述統計をデータベースに直接クエリ
  • 集計関数
    • SUM
    • AVG
    • MAX
    • MIN
    • COUNT
pandasで効率よくデータを取り込む

集計関数

  • SUMAVGMAXMIN
    • それぞれ列名を1つ指定
      SELECT AVG(tmax) FROM weather;
      
  • COUNT
    • クエリ条件を満たす行数を取得
      SELECT COUNT(*) FROM [table_name];
      
    • 列内の一意な値の数を取得
      SELECT COUNT(DISTINCT [column_names]) FROM [table_name];
      
pandasで効率よくデータを取り込む

GROUP BY

  • 集計関数はデフォルトで1つの要約統計量を計算
  • GROUP BY でカテゴリ別にデータを集計
  • グループ化する列も必ず選択すること
/* Get counts of plumbing calls by borough */
SELECT borough, 
       COUNT(*) 
  FROM hpd311calls
 WHERE complaint_type = 'PLUMBING'
 GROUP BY borough;
pandasで効率よくデータを取り込む

グループ別カウント

# Create database engine
engine = create_engine("sqlite:///data.db")

# Write query to get plumbing call counts by borough query = """SELECT borough, COUNT(*) FROM hpd311calls WHERE complaint_type = 'PLUMBING' GROUP BY borough;"""
# Query databse and create dataframe plumbing_call_counts = pd.read_sql(query, engine)
pandasで効率よくデータを取り込む

グループ別カウント

print(plumbing_call_counts)
         borough  COUNT(*)
0          BRONX      2016
1       BROOKLYN      2702
2      MANHATTAN      1413
3         QUEENS       808
4  STATEN ISLAND       178
pandasで効率よくデータを取り込む

練習しましょう!

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

Preparing Video For Download...