도도부현별 인구동태를 가시화해 보았다 - Matplotlib에서 Bubble 플롯
10430 단어 파이썬matplotlib시각화통계
소개
matplotlib에서 bubble 플롯을하는 기사가 qiita에서 발견되지 않았기 때문에 시도했습니다.
샘플 데이터로 인구 조사 남녀별 인구-전국, 도도부현(다이쇼 9년~2015년)를 사용하고 있습니다.
버블 플롯
먼저 결과를 보여주면 버블 플롯은 이런 느낌의 플롯입니다. 1개 1개의 엔이 도도부현, 엔의 크기가 인구의 수를 나타내고 있습니다. 좌표의 위치는 무작위입니다.
데이터 정형
이번은 보통 pandas.read_csv로 읽어들여 조건으로 필터를 걸어 주면 됩니다. 주의해야 할 점으로서는 원 데이터의 인코딩이 Shift-JIS인 것과, Series에 대해서 있는 캐릭터 라인을 1개라도 포함하는 조건을 쓰고 있는 곳입니까. 덧붙여서 플롯하는 도도부현은, 이와테, 도쿄, 아이치, 고치, 후쿠오카, 가고시마를 선택했습니다. 전혀 의미가 없습니다.
data = pd.read_csv("./c01.csv", encoding="Shift-JIS", skipfooter=2)
target_pref = ["岩手県", "東京都", "愛知県", "高知県", "福岡県", "鹿児島県"]
data_target = data[data.都道府県名.str.contains("|".join(target_pref))]
d = data_target[data_target['西暦(年)'] == 1920]
도도부현 코드
도도부현명
원호
화력(년)
서기(년)
참고
인구(총수)
인구(남)
인구(여)
3
03
이와테현
다이쇼
9
1920년
NaN
845540
421069
424471
13
13
도쿄도
다이쇼
9
1920년
NaN
3699428
1952989
1746439
23
23
아이치현
다이쇼
9
1920년
NaN
2089762
1033860
1055902
39
39
고치현
다이쇼
9
1920년
NaN
670895
332087
338808
40
40
후쿠오카현
다이쇼
9
1920년
NaN
2188249
1116818
1071431
46
46
가고시마현
다이쇼
9
1920년
NaN
1415582
682243
733339
버블 플롯 그리기
matplotlib에서 버블 플롯을 그리는 경우 산점도를 그리는 함수 plt.scatter
에서 점의 크기를 개별적으로 변경하여 대응합니다. 이번 해석에서는 x, y를 랜덤하게 생성한 후, 원의 크기 z, 색 c를 개별적으로 지정하고 있습니다. 이제 시작 부분의 그래프를 만들 수 있습니다.
c = np.arange(0,12,2)
z = d['人口(総数)'].astype(int) / 1000
x = np.random.rand(6)
y = np.random.rand(6)
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
덤
모처럼이므로 연도마다 플롯하고 애니메이션도 붙여 보았습니다. 도쿄·아이치·후쿠오카는 인구가 늘어나고 있는 것에 대해, 이와테, 고치, 가고시마는 거의 변화하고 있지 않습니다. 1945년에 도쿄의 인구가 꽉 찢어지는 근처 등은, 제2차 세계 대전의 영향의 크기를 시사하고 있습니다.
아래에 코드를 올립니다. 애니메이션은 일단 모두 png로 출력한 후 convert
로 gif로 변환하여 생성하고 있습니다.
bubble_anim.giffor year in range(1920, 2016, 5):
z = data_target[data_target["西暦(年)"] == year]['人口(総数)'].astype(int) / 1000
plt.figure()
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
plt.xlim((-0.2,1.2))
plt.ylim((-0.2,1.2))
plt.title("{0}年".format(year))
plt.axis('off')
plt.savefig("./bubble/{0}.png".format(year))
Reference
이 문제에 관하여(도도부현별 인구동태를 가시화해 보았다 - Matplotlib에서 Bubble 플롯), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hiroyuki1993/items/42861ff8b04c96005bc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 결과를 보여주면 버블 플롯은 이런 느낌의 플롯입니다. 1개 1개의 엔이 도도부현, 엔의 크기가 인구의 수를 나타내고 있습니다. 좌표의 위치는 무작위입니다.
데이터 정형
이번은 보통 pandas.read_csv로 읽어들여 조건으로 필터를 걸어 주면 됩니다. 주의해야 할 점으로서는 원 데이터의 인코딩이 Shift-JIS인 것과, Series에 대해서 있는 캐릭터 라인을 1개라도 포함하는 조건을 쓰고 있는 곳입니까. 덧붙여서 플롯하는 도도부현은, 이와테, 도쿄, 아이치, 고치, 후쿠오카, 가고시마를 선택했습니다. 전혀 의미가 없습니다.
data = pd.read_csv("./c01.csv", encoding="Shift-JIS", skipfooter=2)
target_pref = ["岩手県", "東京都", "愛知県", "高知県", "福岡県", "鹿児島県"]
data_target = data[data.都道府県名.str.contains("|".join(target_pref))]
d = data_target[data_target['西暦(年)'] == 1920]
도도부현 코드
도도부현명
원호
화력(년)
서기(년)
참고
인구(총수)
인구(남)
인구(여)
3
03
이와테현
다이쇼
9
1920년
NaN
845540
421069
424471
13
13
도쿄도
다이쇼
9
1920년
NaN
3699428
1952989
1746439
23
23
아이치현
다이쇼
9
1920년
NaN
2089762
1033860
1055902
39
39
고치현
다이쇼
9
1920년
NaN
670895
332087
338808
40
40
후쿠오카현
다이쇼
9
1920년
NaN
2188249
1116818
1071431
46
46
가고시마현
다이쇼
9
1920년
NaN
1415582
682243
733339
버블 플롯 그리기
matplotlib에서 버블 플롯을 그리는 경우 산점도를 그리는 함수 plt.scatter
에서 점의 크기를 개별적으로 변경하여 대응합니다. 이번 해석에서는 x, y를 랜덤하게 생성한 후, 원의 크기 z, 색 c를 개별적으로 지정하고 있습니다. 이제 시작 부분의 그래프를 만들 수 있습니다.
c = np.arange(0,12,2)
z = d['人口(総数)'].astype(int) / 1000
x = np.random.rand(6)
y = np.random.rand(6)
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
덤
모처럼이므로 연도마다 플롯하고 애니메이션도 붙여 보았습니다. 도쿄·아이치·후쿠오카는 인구가 늘어나고 있는 것에 대해, 이와테, 고치, 가고시마는 거의 변화하고 있지 않습니다. 1945년에 도쿄의 인구가 꽉 찢어지는 근처 등은, 제2차 세계 대전의 영향의 크기를 시사하고 있습니다.
아래에 코드를 올립니다. 애니메이션은 일단 모두 png로 출력한 후 convert
로 gif로 변환하여 생성하고 있습니다.
bubble_anim.giffor year in range(1920, 2016, 5):
z = data_target[data_target["西暦(年)"] == year]['人口(総数)'].astype(int) / 1000
plt.figure()
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
plt.xlim((-0.2,1.2))
plt.ylim((-0.2,1.2))
plt.title("{0}年".format(year))
plt.axis('off')
plt.savefig("./bubble/{0}.png".format(year))
Reference
이 문제에 관하여(도도부현별 인구동태를 가시화해 보았다 - Matplotlib에서 Bubble 플롯), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hiroyuki1993/items/42861ff8b04c96005bc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
data = pd.read_csv("./c01.csv", encoding="Shift-JIS", skipfooter=2)
target_pref = ["岩手県", "東京都", "愛知県", "高知県", "福岡県", "鹿児島県"]
data_target = data[data.都道府県名.str.contains("|".join(target_pref))]
d = data_target[data_target['西暦(年)'] == 1920]
matplotlib에서 버블 플롯을 그리는 경우 산점도를 그리는 함수
plt.scatter
에서 점의 크기를 개별적으로 변경하여 대응합니다. 이번 해석에서는 x, y를 랜덤하게 생성한 후, 원의 크기 z, 색 c를 개별적으로 지정하고 있습니다. 이제 시작 부분의 그래프를 만들 수 있습니다.c = np.arange(0,12,2)
z = d['人口(総数)'].astype(int) / 1000
x = np.random.rand(6)
y = np.random.rand(6)
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
덤
모처럼이므로 연도마다 플롯하고 애니메이션도 붙여 보았습니다. 도쿄·아이치·후쿠오카는 인구가 늘어나고 있는 것에 대해, 이와테, 고치, 가고시마는 거의 변화하고 있지 않습니다. 1945년에 도쿄의 인구가 꽉 찢어지는 근처 등은, 제2차 세계 대전의 영향의 크기를 시사하고 있습니다.
아래에 코드를 올립니다. 애니메이션은 일단 모두 png로 출력한 후 convert
로 gif로 변환하여 생성하고 있습니다.
bubble_anim.giffor year in range(1920, 2016, 5):
z = data_target[data_target["西暦(年)"] == year]['人口(総数)'].astype(int) / 1000
plt.figure()
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
plt.xlim((-0.2,1.2))
plt.ylim((-0.2,1.2))
plt.title("{0}年".format(year))
plt.axis('off')
plt.savefig("./bubble/{0}.png".format(year))
Reference
이 문제에 관하여(도도부현별 인구동태를 가시화해 보았다 - Matplotlib에서 Bubble 플롯), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hiroyuki1993/items/42861ff8b04c96005bc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for year in range(1920, 2016, 5):
z = data_target[data_target["西暦(年)"] == year]['人口(総数)'].astype(int) / 1000
plt.figure()
plt.scatter(x, y, s = z, alpha=0.5, c=c)
for i, t in enumerate(target_pref):
plt.text(x[i]-0.025,y[i], t, fontsize=15)
plt.xlim((-0.2,1.2))
plt.ylim((-0.2,1.2))
plt.title("{0}年".format(year))
plt.axis('off')
plt.savefig("./bubble/{0}.png".format(year))
Reference
이 문제에 관하여(도도부현별 인구동태를 가시화해 보았다 - Matplotlib에서 Bubble 플롯), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hiroyuki1993/items/42861ff8b04c96005bc8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)