● 행정안전부에서 제공하는 국 내 주민등록 인구 통계 데이터(2020년 2월 기준)를 분석하기
●CSV예제 파일을 다운받아 주세요
**입력하는 코드가 있는 파일과 같은 폴더에 위치해 있어야 합니다**
▶ csv파일을 리스트로 저장하기
import population as pop
#population.py는 csv파일을 읽어들여 리스트에 저장하는 모듈입니다
list_data = []
pop.get_list(list_data)
# pop모듈의 get_list()함수의 매개변수에 list_data를 전달하여 CSV 파일을 읽어 들여 리스트 list_data에 저장
print(list_data)
[['서울특별시 (1100000000)', '부산광역시 (2600000000)', '대구광역시 (2700000000)', '인천광역시 (2800000000)', '광주광역시 (2900000000)', '대전광역시 (3000000000)', '울산광역시 (3100000000)', '세종특별자치시 (3600000000)', '경기도 (4100000000)', '강원도 (4200000000)', '충청북도 (4300000000)', '충청남도 (4400000000)', '전라북도 (4500000000)', '전라남도 (4600000000)', '경상북도 (4700000000)', '경상남도 (4800000000)', '제주특별자치도 (5000000000)'], ['9,736,962', '3,410,925', '2,432,883', '2,954,955', '1,456,121', '1,473,125', '1,145,710', '343,788', '13,265,377', '1,539,521', '1,598,599', '2,120,995', '1,815,112', '1,861,894', '2,658,956', '3,358,828', '670,876'], ['4,345,877', '1,502,333', '1,033,349', '1,242,107', '618,503', '637,726', '469,551', '136,629', '5,497,087', '721,003', '723,931', '961,890', '818,452', '873,871', '1,229,265', '1,455,655', '293,932'], [' 2.24', ' 2.27', ' 2.35', ' 2.38', ' 2.35', ' 2.31', ' 2.44', ' 2.52', ' 2.41', ' 2.14', ' 2.21', ' 2.21', ' 2.22', ' 2.13', ' 2.16', ' 2.31', ' 2.28'], ['4,745,133', '1,673,266', '1,202,364', '1,481,133', '720,686', '735,791', '588,626', '171,403', '6,672,706', '774,358', '809,805', '1,081,153', '902,365', '934,900', '1,338,907', '1,690,600', '337,295'], ['4,991,829', '1,737,659', '1,230,519', '1,473,822', '735,435', '737,334', '557,084', '172,385', '6,592,671', '765,163', '788,794', '1,039,842', '912,747', '926,994', '1,320,049', '1,668,228', '333,581'], [' 0.95', ' 0.96', ' 0.98', ' 1.00', ' 0.98', ' 1.00', ' 1.06', ' 0.99', ' 1.01', ' 1.01', ' 1.03', ' 1.04', ' 0.99', ' 1.01', ' 1.01', ' 1.01', ' 1.01']]
▶ csv 파일을 딕셔너리로 저장하기
import population as pop
list_data = []
# CSV 파일을 읽어 들여 리스트 list_data에 저장
pop.get_list(list_data)
dict_data = {}
keys = ['지역', '총인구수', '세대수', '세대당_인구', '남자_인구수', '여자_인구수', '남여_비율']
# 딕셔너리 dict_data를 위한 키 설정
pop.get_dict(list_data,keys,dict_data)
# pop모듈의 get_dict()함수를 이용해 리스트 list_data와 딕셔너리의 키 keys를 딕셔너리 dict_data에 저장
print(dict_data)
{'지역': ['서울특별시', '부산광역시', '대구광역시', '인천광역시', '광주광역시', '대전광역시', '울산광역시', '세종특별자치시', '경기도', '강원도', '충청북도', '충청남도', '전라북도', '전라남도', '경상북도', '경상남도', '제주특별자치도'], '총인구수': [9736962, 3410925, 2432883, 2954955, 1456121, 1473125, 1145710, 343788, 13265377, 1539521, 1598599, 2120995, 1815112, 1861894, 2658956, 3358828, 670876], '세대수': [4345877, 1502333, 1033349, 1242107, 618503, 637726, 469551, 136629, 5497087, 721003, 723931, 961890, 818452, 873871, 1229265, 1455655, 293932], '세대당_인구': [2.24, 2.27, 2.35, 2.38, 2.35, 2.31, 2.44, 2.52, 2.41, 2.14, 2.21, 2.21, 2.22, 2.13, 2.16, 2.31, 2.28], '남자_인구수': [4745133, 1673266, 1202364, 1481133, 720686, 735791, 588626, 171403, 6672706, 774358, 809805, 1081153, 902365, 934900, 1338907, 1690600, 337295], '여자_인구수': [4991829, 1737659, 1230519, 1473822, 735435, 737334, 557084, 172385, 6592671, 765163, 788794, 1039842, 912747, 926994, 1320049, 1668228, 333581], '남여_비율': [0.95, 0.96, 0.98, 1.0, 0.98, 1.0, 1.06, 0.99, 1.01, 1.01, 1.03, 1.04, 0.99, 1.01, 1.01, 1.01, 1.01]}
▶ csv파일의 데이터를 리스트와 딕셔너리로 데이터프레임 만들기
import population as pop
import pandas as pd
list_data = []
pop.get_list(list_data)
# CSV 파일을 읽어 들여 리스트 list_data에 저장
dict_data = {}
keys = ['지역', '총인구수', '세대수', '세대당_인구', '남자_인구수', '여자_인구수', '남여_비율']
# 딕셔너리 dict_data를 위한 키 설정
pop.get_dict(list_data, keys, dict_data)
# 리스트 list_data와 딕셔너리의 키 keys를 딕셔너리 dict_data에 저장
frame = pd.DataFrame(dict_data)
# 딕셔너리 dict_data를 이용하여 데이터프레임 객체 frame 생성
print(frame)
지역 총인구수 세대수 세대당_인구 남자_인구수 여자_인구수 남여_비율
0 서울특별시 9736962 4345877 2.24 4745133 4991829 0.95
1 부산광역시 3410925 1502333 2.27 1673266 1737659 0.96
2 대구광역시 2432883 1033349 2.35 1202364 1230519 0.98
3 인천광역시 2954955 1242107 2.38 1481133 1473822 1.00
4 광주광역시 1456121 618503 2.35 720686 735435 0.98
5 대전광역시 1473125 637726 2.31 735791 737334 1.00
6 울산광역시 1145710 469551 2.44 588626 557084 1.06
7 세종특별자치시 343788 136629 2.52 171403 172385 0.99
8 경기도 13265377 5497087 2.41 6672706 6592671 1.01
9 강원도 1539521 721003 2.14 774358 765163 1.01
10 충청북도 1598599 723931 2.21 809805 788794 1.03
11 충청남도 2120995 961890 2.21 1081153 1039842 1.04
12 전라북도 1815112 818452 2.22 902365 912747 0.99
13 전라남도 1861894 873871 2.13 934900 926994 1.01
14 경상북도 2658956 1229265 2.16 1338907 1320049 1.01
15 경상남도 3358828 1455655 2.31 1690600 1668228 1.01
16 제주특별자치도 670876 293932 2.28 337295 333581 1.01
▶ 총 인구 순으로 정렬하기
●DataFrame 객체의 sort_values() 메소드의 사용 형식 :
데이터프레임명.sort_values(by=[열_이름1, 열_이름2, ...], decending = False)
#DataFrame의 sort_values() 메소드는 열_이름1, 열 이름2, ... 열을 기준으로 내림차순으로 행 데이터를 정렬
#decending=True 로 설정하면 오름차순으로 데이터가 정 렬
●DataFrame 객체의 reset_index() 메소드의 사용 형식 :
데이터프레임명.reset_index(drop=True)
#DataFrame의 reset_index(drop=True) 메소드는 해당 객체의 행 인덱스 번호를 0부터 시작하는 일련번호로 재정렬
import population as pop
import pandas as pd
list_data = []
pop.get_list(list_data)
# CSV 파일을 읽어 들여 리스트 list_data에 저장
dict_data = {}
keys = ['지역', '총인구수', '세대수', '세대당_인구', '남자_인구수', '여자_인구수', '남여_비율']
# 딕셔너리 dict_data를 위한 키 설정
pop.get_dict(list_data, keys, dict_data)
# 리스트 list_data와 딕셔너리의 키 keys를 딕셔너리 dict_data에 저장
frame = pd.DataFrame(dict_data)
# 딕셔너리 dict_data를 이용하여 데이터프레임 객체 frame 생성
rank = frame.sort_values(by=['총인구수'],ascending=False)
#열의 인덱스 '총인구수'를 기준으로 내림차순 정렬
print(rank)
rank = rank.reset_index(drop=True)
#rank 객체의 인덱스를 0으로 시작하는 일련번호로 재정렬
print(rank)
지역 총인구수 세대수 세대당_인구 남자_인구수 여자_인구수 남여_비율
8 경기도 13265377 5497087 2.41 6672706 6592671 1.01
0 서울특별시 9736962 4345877 2.24 4745133 4991829 0.95
1 부산광역시 3410925 1502333 2.27 1673266 1737659 0.96
15 경상남도 3358828 1455655 2.31 1690600 1668228 1.01
3 인천광역시 2954955 1242107 2.38 1481133 1473822 1.00
14 경상북도 2658956 1229265 2.16 1338907 1320049 1.01
2 대구광역시 2432883 1033349 2.35 1202364 1230519 0.98
11 충청남도 2120995 961890 2.21 1081153 1039842 1.04
13 전라남도 1861894 873871 2.13 934900 926994 1.01
12 전라북도 1815112 818452 2.22 902365 912747 0.99
10 충청북도 1598599 723931 2.21 809805 788794 1.03
9 강원도 1539521 721003 2.14 774358 765163 1.01
5 대전광역시 1473125 637726 2.31 735791 737334 1.00
4 광주광역시 1456121 618503 2.35 720686 735435 0.98
6 울산광역시 1145710 469551 2.44 588626 557084 1.06
16 제주특별자치도 670876 293932 2.28 337295 333581 1.01
7 세종특별자치시 343788 136629 2.52 171403 172385 0.99
지역 총인구수 세대수 세대당_인구 남자_인구수 여자_인구수 남여_비율
0 경기도 13265377 5497087 2.41 6672706 6592671 1.01
1 서울특별시 9736962 4345877 2.24 4745133 4991829 0.95
2 부산광역시 3410925 1502333 2.27 1673266 1737659 0.96
3 경상남도 3358828 1455655 2.31 1690600 1668228 1.01
4 인천광역시 2954955 1242107 2.38 1481133 1473822 1.00
5 경상북도 2658956 1229265 2.16 1338907 1320049 1.01
6 대구광역시 2432883 1033349 2.35 1202364 1230519 0.98
7 충청남도 2120995 961890 2.21 1081153 1039842 1.04
8 전라남도 1861894 873871 2.13 934900 926994 1.01
9 전라북도 1815112 818452 2.22 902365 912747 0.99
10 충청북도 1598599 723931 2.21 809805 788794 1.03
11 강원도 1539521 721003 2.14 774358 765163 1.01
12 대전광역시 1473125 637726 2.31 735791 737334 1.00
13 광주광역시 1456121 618503 2.35 720686 735435 0.98
14 울산광역시 1145710 469551 2.44 588626 557084 1.06
15 제주특별자치도 670876 293932 2.28 337295 333581 1.01
16 세종특별자치시 343788 136629 2.52 171403 172385 0.99
▶국내 전체 인구수, 세대수, 남여 인구수 구하기
import population as pop
import pandas as pd
list_data = []
pop.get_list(list_data)
# CSV 파일을 읽어 들여 리스트 list_data에 저장
dict_data = {}
keys = ['지역', '총인구수', '세대수', '세대당_인구', '남자_인구수', '여자_인구수', '남여_비율']
# 딕셔너리 dict_data를 위한 키 설정
pop.get_dict(list_data, keys, dict_data)
# 리스트 list_data와 딕셔너리의 키 keys를 딕셔너리 dict_data에 저장
frame = pd.DataFrame(dict_data)
frame2 = frame.iloc[:,[1,2,4,5]]
#Dataframe의 iloc()메소드를 이용하여, frame의 모든 행 인덱스에 대해 열 인덱스 1, 2, 4, 5, 즉 '총 인구수', '세대수', '남자_인구수', '여자_인구수'에 해당되는 열의 데이터를 추출하여 frame2에 저장
print(frame2)
sum = frame2.sum(axis=0)
# sum() 메소드로 열 방향으로 합계를 구함
print(sum)
print('-' * 50)
print('국내 전체 인구 통계')
print('-' * 50)
print('- 총 인구수 : %d명' % sum.iloc[0])
print('- 총 세대수 : %d명' % sum.iloc[1])
print('- 총 남자 인구수 : %d명' % sum.iloc[2])
print('- 총 여자 인구수 : %d명' % sum.iloc[3])
print('-' * 50)
▶인구 통계 데이터 시각화 하기
import population as pop
import pandas as pd
from matplotlib import rc
rc('font', family='Malgun Gothic')
list_data = []
pop.get_list(list_data)
# CSV 파일을 읽어 들여 리스트 list_data에 저장
keys = ['지역', '총인구수', '세대수', '세대당_인구', '남자_인구수', '여자_인구수', '남여_비율']
# 딕셔너리 dict_data를 위한 키 설정
dict_data = {}
pop.get_dict(list_data, keys, dict_data)
# 리스트 list_data와 딕셔너리의 키 keys를 딕셔너리 dict_data에 저장
frame = pd.DataFrame(dict_data)
index = ['서울', '부산', '대구', '인천', '광주', '대전']
#축의 레이블로 사용될 리스트 ['서울', '부산', '대구', '인천', ' 광주', '대전']을 index에 저장
x1 = frame.iloc[:6, 1]
#frame 객체에서 행 인덱스가 0~5인 서울, 부산, 대구, 인천, 광주, 대전에 대해 열 인덱스1, 즉 ‘총인구수’열 데이터를 x1 에 저장
x1 = x1.values.tolist()
#x1 객체의 요소들을 리스트로 변환하여 다시 x1에 저장
#x1 객체는 서울, 부산, 대구, …. 대전에 대응되는 총인구수의 리스트 데이터를 의미
x2 = frame.iloc[:6, 2]
#frame 객체에서 행 인덱스가 0~5인 서울, 부산, 대구, 인천, 광주, 대전에 대해 열 인덱스1, 즉 ‘총세대수’열 데이터를 x1 에 저장
x2 = x2.values.tolist()
#x2 객체의 요소들을 리스트로 변환하여 다시 x2에 저장
#x2 객체는 서울, 부산, 대구, …. 대전에 대응되는 총세대수의 리스트 데이터를 의미
df = pd.DataFrame({'총인구수':x1, '총세대수':x2}, index=index)
print(df)
ax = df.plot.bar(rot=0)
총인구수 총세대수
서울 9736962 4345877
부산 3410925 1502333
대구 2432883 1033349
인천 2954955 1242107
광주 1456121 618503
대전 1473125 637726
출처: 예제 중심 파이썬 입문
궁금한 부분이 있으면 댓글 부탁드립니다^^
'• programming language > python' 카테고리의 다른 글
[파이썬 실력 테스트] 1. print() (0) | 2022.08.16 |
---|---|
[파이썬 예제] Pandas 10- DataFrame 나이별 인구통계제이터 분석 (0) | 2022.08.01 |
[파이썬 개념] Pandas 8- DataFrame으로 합계와 평균 구하기 (0) | 2022.08.01 |
[파이썬 개념] Pandas 7- DataFrame 요소 추출( loc, iloc) (0) | 2022.08.01 |
[파이썬 개념] Pandas 6- DataFrame 객체 생성, 인덱스 설정 (0) | 2022.08.01 |