大都市圏の分離

Pythonで学ぶ米国センサスデータ分析

Lee Hachadoorian

Asst. Professor of Instruction, Temple University

米国の大都市圏・小都市圏の境界を示す地図。

出典: United States Census Bureau

Pythonで学ぶ米国センサスデータ分析

国勢調査APIリクエスト: 大・小都市圏データ

import requests

# ベースURLの作成
HOST = "https://api.census.gov/data"
year = "2012"
dataset = "acs/acs5"
base_url = "/".join([HOST, year, dataset])

# 取得する変数を指定
# B01001_001E = 総人口(推計)
# B03002_003E = 非ヒスパニック系白人人口(推計)
# B03002_004E = 非ヒスパニック系黒人人口(推計)
get_vars = ["NAME", "B01001_001E", "B03002_003E", "B03002_004E"]
Pythonで学ぶ米国センサスデータ分析

国勢調査APIリクエスト: 大・小都市圏データ

# 取得する変数を指定
get_vars = ["NAME", "B01001_001E", "B03002_003E", "B03002_004E"]

# プレディケートの辞書を作成
predicates = {}
predicates["get"] = ",".join(get_vars)

# 取得する地理単位 predicates["for"] = \ "metropolitan statistical area/micropolitan statistical area:*"
Pythonで学ぶ米国センサスデータ分析

国勢調査APIリクエスト: 大・小都市圏データ

r = requests.get(base_url, params=predicates)

print(r.json()[:5])
[['NAME', 'B01001_001E', 'B03002_003E', 'B03002_004E', 'metropolitan statistical area/micropolitan statistical area'],
 ['Adjuntas, PR Micro Area', '19458', '140', '0', '10260'],
 ['Aguadilla-Isabela-San Sebastián, PR Metro Area', '305538', '5602', '231', '10380'],
 ['Coamo, PR Micro Area', '71596', '228', '53', '17620'],
 ['Fajardo, PR Metro Area', '70633', '543', '195', '21940']]
Pythonで学ぶ米国センサスデータ分析

国勢調査APIリクエスト: 大・小都市圏データ

# 読みやすい列名を作成
col_names = ["name", "pop", "white", "black", "msa"]

# JSON応答をDataFrameに読み込む
msa = pd.DataFrame(columns=col_names, data=r.json()[1:])

# 計数列をint型に変換
msa[["pop", "white", "black"]] = msa["pop", "white", "black"]].astype(int)
Pythonで学ぶ米国センサスデータ分析

大都市圏の定義

  state county   tract  white  black
0    01    001  020100   1601    217
1    01    001  020200    844   1214
2    01    001  020300   2538    647
3    01    001  020400   4030    191
4    01    001  020500   8438   1418
     msa      msa_name          county_name    state_name state county
0  10100  Aberdeen, SD         Brown County  South Dakota    46    013
1  10100  Aberdeen, SD       Edmunds County  South Dakota    46    045
2  10140  Aberdeen, WA  Grays Harbor County    Washington    53    027
3  10180   Abilene, TX      Callahan County         Texas    48    059
4  10180   Abilene, TX         Jones County         Texas    48    253
Pythonで学ぶ米国センサスデータ分析

Pandasのmergeメソッド

import pandas as pd
# 一致する列でDataFrameを結合
tracts_with_msa_id = pd.merge(...)
Pythonで学ぶ米国センサスデータ分析

Pandasのmergeメソッド

import pandas as pd
# 一致する列でDataFrameを結合
tracts_with_msa_id = pd.merge(tracts, msa_def, ...)
Pythonで学ぶ米国センサスデータ分析

Pandasのmergeメソッド

import pandas as pd
# 一致する列でDataFrameを結合
tracts_with_msa_id = pd.merge(tracts, msa_def, 
    left_on = ["state", "county"], right_on = ["state", "county"])
# 列名が同じ場合の省略形
tracts_with_msa_id = pd.merge(tracts, msa_def, on = ["state", "county"])
Pythonで学ぶ米国センサスデータ分析

Pandasのmergeメソッド

# 州名のDataFrame
st.head()
       state_name
state            
01        Alabama
02         Alaska
04        Arizona
05       Arkansas
06     California
Pythonで学ぶ米国センサスデータ分析

Pandasのmergeメソッド

# tracts と st を結合
tracts_st = pd.merge(tracts, st, left_on = "state", right_index = True)

tracts_st.head()
  state county   tract  white  black state_name
0    01    001  020100   1601    217    Alabama
1    01    001  020200    844   1214    Alabama
2    01    001  020300   2538    647    Alabama
3    01    001  020400   4030    191    Alabama
Pythonで学ぶ米国センサスデータ分析

Vamos praticar!

Pythonで学ぶ米国センサスデータ分析

Preparing Video For Download...