인구 조사 2020의 응답 상황을 시각화
소개
인구조사 2020 의 도도부현별 회답 상황의 Excel을 스크래핑하여 인터넷 회답률·우송 회답율을 가시화
스크래핑
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urljoin
url = "https://www.kokusei2020.go.jp/internet/"
r = requests.get(url)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
links = {}
for i in soup.find_all("span", text="Excel"):
link = urljoin(url, i.find_parent("a").get("href"))
m = re.search("census_answers_(pref|city)_\d{6}.xlsx", link)
if m:
links[m.group(1)] = link
links
도도부현별
import pandas as pd
df_pref = pd.read_excel(
links["pref"],
index_col=[0, 1],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7],
names=["コード", "都道府県", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_pref["回答数"] = df_pref["ネット"] + df_pref["郵送"]
df_pref["ネット率"] *= 100
df_pref["郵送率"] *= 100
df_pref["回答率"] = df_pref["ネット率"] + df_pref["郵送率"]
df_pref.to_csv("pref.csv", encoding="utf_8_sig")
시정촌별
df_city = pd.read_excel(
links["city"],
index_col=[0, 1, 2],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7, 8],
names=["コード", "都道府県", "市区町村", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_city["回答数"] = df_city["ネット"] + df_city["郵送"]
df_city["ネット率"] *= 100
df_city["郵送率"] *= 100
df_city["回答率"] = df_city["ネット率"] + df_city["郵送率"]
df_city.to_csv("city.csv", encoding="utf_8_sig")
df_city
시각화
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import japanize_matplotlib
# 解像度
import matplotlib as mpl
mpl.rcParams["figure.dpi"] = 200
df1 = df_pref.sort_index(ascending=False).reset_index(level="コード", drop=True)
df1.loc[:, ["ネット率", "郵送率"]].plot.barh(stacked=True, figsize=(5, 10))
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=8)
plt.savefig("01.png", dpi=200, bbox_inches="tight")
plt.show()
Reference
이 문제에 관하여(인구 조사 2020의 응답 상황을 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/e655cd7cb1577812a9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urljoin
url = "https://www.kokusei2020.go.jp/internet/"
r = requests.get(url)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
links = {}
for i in soup.find_all("span", text="Excel"):
link = urljoin(url, i.find_parent("a").get("href"))
m = re.search("census_answers_(pref|city)_\d{6}.xlsx", link)
if m:
links[m.group(1)] = link
links
도도부현별
import pandas as pd
df_pref = pd.read_excel(
links["pref"],
index_col=[0, 1],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7],
names=["コード", "都道府県", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_pref["回答数"] = df_pref["ネット"] + df_pref["郵送"]
df_pref["ネット率"] *= 100
df_pref["郵送率"] *= 100
df_pref["回答率"] = df_pref["ネット率"] + df_pref["郵送率"]
df_pref.to_csv("pref.csv", encoding="utf_8_sig")
시정촌별
df_city = pd.read_excel(
links["city"],
index_col=[0, 1, 2],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7, 8],
names=["コード", "都道府県", "市区町村", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_city["回答数"] = df_city["ネット"] + df_city["郵送"]
df_city["ネット率"] *= 100
df_city["郵送率"] *= 100
df_city["回答率"] = df_city["ネット率"] + df_city["郵送率"]
df_city.to_csv("city.csv", encoding="utf_8_sig")
df_city
시각화
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import japanize_matplotlib
# 解像度
import matplotlib as mpl
mpl.rcParams["figure.dpi"] = 200
df1 = df_pref.sort_index(ascending=False).reset_index(level="コード", drop=True)
df1.loc[:, ["ネット率", "郵送率"]].plot.barh(stacked=True, figsize=(5, 10))
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=8)
plt.savefig("01.png", dpi=200, bbox_inches="tight")
plt.show()
Reference
이 문제에 관하여(인구 조사 2020의 응답 상황을 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/e655cd7cb1577812a9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
df_pref = pd.read_excel(
links["pref"],
index_col=[0, 1],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7],
names=["コード", "都道府県", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_pref["回答数"] = df_pref["ネット"] + df_pref["郵送"]
df_pref["ネット率"] *= 100
df_pref["郵送率"] *= 100
df_pref["回答率"] = df_pref["ネット率"] + df_pref["郵送率"]
df_pref.to_csv("pref.csv", encoding="utf_8_sig")
df_city = pd.read_excel(
links["city"],
index_col=[0, 1, 2],
header=None,
skiprows=9,
usecols=[1, 2, 3, 4, 5, 6, 7, 8],
names=["コード", "都道府県", "市区町村", "H27世帯数", "ネット", "郵送", "ネット率", "郵送率"],
)
df_city["回答数"] = df_city["ネット"] + df_city["郵送"]
df_city["ネット率"] *= 100
df_city["郵送率"] *= 100
df_city["回答率"] = df_city["ネット率"] + df_city["郵送率"]
df_city.to_csv("city.csv", encoding="utf_8_sig")
df_city
시각화
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import japanize_matplotlib
# 解像度
import matplotlib as mpl
mpl.rcParams["figure.dpi"] = 200
df1 = df_pref.sort_index(ascending=False).reset_index(level="コード", drop=True)
df1.loc[:, ["ネット率", "郵送率"]].plot.barh(stacked=True, figsize=(5, 10))
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=8)
plt.savefig("01.png", dpi=200, bbox_inches="tight")
plt.show()
Reference
이 문제에 관하여(인구 조사 2020의 응답 상황을 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/e655cd7cb1577812a9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import japanize_matplotlib
# 解像度
import matplotlib as mpl
mpl.rcParams["figure.dpi"] = 200
df1 = df_pref.sort_index(ascending=False).reset_index(level="コード", drop=True)
df1.loc[:, ["ネット率", "郵送率"]].plot.barh(stacked=True, figsize=(5, 10))
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=8)
plt.savefig("01.png", dpi=200, bbox_inches="tight")
plt.show()
Reference
이 문제에 관하여(인구 조사 2020의 응답 상황을 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/barobaro/items/e655cd7cb1577812a9f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)