Blair  - Soul Eater [파이썬 예제] Pandas 10- DataFrame 나이별 인구통계제이터 분석

• programming language/python

[파이썬 예제] Pandas 10- DataFrame 나이별 인구통계제이터 분석

oujin 2022. 8. 1. 17:40
728x90

CSV예제 파일을 다운받아 주세요

**입력하는 코드 파일과 같은 폴더에 위치해 있어야 합니다**

 

population_age_2020.csv
0.00MB

 

 

 

▶ csv 파일을 읽고 리스트로 저장

 

import csv
f = open('population_age_2020.csv','r',encoding='utf-8')
lines = csv.reader(f)
header = next(lines)
data=[]
for line in lines:
    data.append(line)

#population_age_2020.csv 파일을 읽어들여 2차원 리스트에 저장


print(data)
f.close()

 

[['서울', '9736962', '658355', '813563', '1455903', '1505729', '1563968', '1539385', '1200518', '688818', '263939', '40404', '6380'], ['부산', '3410925', '241624', '281120', '434692', '431911', '518321', '580966', '511174', '285602', '109312', '14396', '1807'], ['대구', '2432883', '186623', '234528', '321487', '303397', '391997', '428622', '311274', '171217', '74227', '8817', '694'], ['인천', '2954955', '239941', '281097', '405835', '417708', '490716', '515758', '344843', '172269', '74306', '11574', '908'], ['광주', '1456121', '125396', '162728', '207554', '191432', '244903', '234048', '155056', '91020', '38050', '5529', '405'], ['대전', '1473125', '120476', '151861', '212143', '199106', '242381', '243526', '170291', '88289', '39190', '5523', '339'], ['울산', '1145710', '103399', '115623', '147745', '158271', '190698', '211255', '136520', '57438', '21610', '2991', '160'], ['세종', '343788', '47454', '40574', '36273', '61442', '65714', '42907', '27813', '13609', '6863', '1084', '55'], ['경기도', '13265377', '1178548', '1347854', '1769080', '1917785', '2299179', '2205106', '1422638', '742296', '330231', '48650', '4010'], ['강원도', '1539521', '108694', '141975', '179813', '169694', '227950', '269666', '226444', '135668', '68321', '10493', '803'], ['충청북도', '1598599', '128290', '153119', '198910', '198768', '243982', '273857', '209926', '119037', '63513', '8656', '541'], ['충청남도', '2120995', '179808', '206578', '243748', '276553', '329789', '340568', '264305', '167339', '97941', '13481', '885'], ['전라북도', '1815112', '135297', '180675', '212339', '195971', '274471', '303074', '244901', '165445', '89352', '12770', '817'], ['전라남도', '1861894', '137868', '172888', '202760', '193083', '265366', '317226', '259385', '191719', '105793', '14984', '822'], ['경상북도', '2658956', '198214', '233506', '291097', '303472', '390995', '464427', '389498', '238482', '130716', '17589', '960'], ['경상남도', '3358828', '282751', '331566', '384750', '418383', '543911', '585186', '435315', '240111', '119977', '16139', '739'], ['제주도', '670876', '62086', '71539', '81968', '84145', '113076', '111221', '75172', '44621', '22963', '3819', '266']]

 

 

 


▶ csv 파일을 읽고 리스트로 저장한뒤 열과 행을 바꾸기

import csv
f = open('population_age_2020.csv','r',encoding='utf-8')
lines = csv.reader(f)
header = next(lines)
data=[]
for line in lines:
    data.append(line)
new_list = list(map(list, zip(*data)))
print(new_list)
f.close()

 

[['서울', '부산', '대구', '인천', '광주', '대전', '울산', '세종', '경기도', '강원도', '충청북도', '충청남도', '전라북도', '전라남도', '경상북도', '경상남도', '제주도'], ['9736962', '3410925', '2432883', '2954955', '1456121', '1473125', '1145710', '343788', '13265377', '1539521', '1598599', '2120995', '1815112', '1861894', '2658956', '3358828', '670876'], ['658355', '241624', '186623', '239941', '125396', '120476', '103399', '47454', '1178548', '108694', '128290', '179808', '135297', '137868', '198214', '282751', '62086'], ['813563', '281120', '234528', '281097', '162728', '151861', '115623', '40574', '1347854', '141975', '153119', '206578', '180675', '172888', '233506', '331566', '71539'], ['1455903', '434692', '321487', '405835', '207554', '212143', '147745', '36273', '1769080', '179813', '198910', '243748', '212339', '202760', '291097', '384750', '81968'], ['1505729', '431911', '303397', '417708', '191432', '199106', '158271', '61442', '1917785', '169694', '198768', '276553', '195971', '193083', '303472', '418383', '84145'], ['1563968', '518321', '391997', '490716', '244903', '242381', '190698', '65714', '2299179', '227950', '243982', '329789', '274471', '265366', '390995', '543911', '113076'], ['1539385', '580966', '428622', '515758', '234048', '243526', '211255', '42907', '2205106', '269666', '273857', '340568', '303074', '317226', '464427', '585186', '111221'], ['1200518', '511174', '311274', '344843', '155056', '170291', '136520', '27813', '1422638', '226444', '209926', '264305', '244901', '259385', '389498', '435315', '75172'], ['688818', '285602', '171217', '172269', '91020', '88289', '57438', '13609', '742296', '135668', '119037', '167339', '165445', '191719', '238482', '240111', '44621'], ['263939', '109312', '74227', '74306', '38050', '39190', '21610', '6863', '330231', '68321', '63513', '97941', '89352', '105793', '130716', '119977', '22963'], ['40404', '14396', '8817', '11574', '5529', '5523', '2991', '1084', '48650', '10493', '8656', '13481', '12770', '14984', '17589', '16139', '3819'], ['6380', '1807', '694', '908', '405', '339', '160', '55', '4010', '803', '541', '885', '817', '822', '960', '739', '266']]

 

 

 


▶ csv 파일을 딕셔너리 데이터 형으로 변환 

import csv
f = open('population_age_2020.csv', 'r', encoding='utf-8')
lines = csv.reader(f)

header = next(lines)

list_tmp = []
for line in lines :                       

# CSV 버퍼의 내용을 리스트에 저장
    list_tmp.append(line[:])

list_data = []
for j in range(13) :                       

# 리스트의  행과 열을 변경
    tmp = []
    for i in range(len(list_tmp)) :
        if j==0 :
            tmp.append(list_tmp[i][j])
        else :
            tmp.append(int(list_tmp[i][j]))

    list_data.append(tmp)

dict_data = {}
dict_data.update({header[0]:list_data[0]})
for i in range(1, len(list_data)) :
    dict_data.update({header[i]:list_data[i]})

print(dict_data)

f.close()

{'지역': ['서울', '부산', '대구', '인천', '광주', '대전', '울산', '세종', '경기도', '강원도', '충청북도', '충청남도', '전라북도', '전라남도', '경상북도', '경상남도', '제주도'], '총인구수': [9736962, 3410925, 2432883, 2954955, 1456121, 1473125, 1145710, 343788, 13265377, 1539521, 1598599, 2120995, 1815112, 1861894, 2658956, 3358828, 670876], '0~9세': [658355, 241624, 186623, 239941, 125396, 120476, 103399, 47454, 1178548, 108694, 128290, 179808, 135297, 137868, 198214, 282751, 62086], '10~19세': [813563, 281120, 234528, 281097, 162728, 151861, 115623, 40574, 1347854, 141975, 153119, 206578, 180675, 172888, 233506, 331566, 71539], '20~29세': [1455903, 434692, 321487, 405835, 207554, 212143, 147745, 36273, 1769080, 179813, 198910, 243748, 212339, 202760, 291097, 384750, 81968], '30~39세': [1505729, 431911, 303397, 417708, 191432, 199106, 158271, 61442, 1917785, 169694, 198768, 276553, 195971, 193083, 303472, 418383, 84145], '40~49세': [1563968, 518321, 391997, 490716, 244903, 242381, 190698, 65714, 2299179, 227950, 243982, 329789, 274471, 265366, 390995, 543911, 113076], '50~59세': [1539385, 580966, 428622, 515758, 234048, 243526, 211255, 42907, 2205106, 269666, 273857, 340568, 303074, 317226, 464427, 585186, 111221], '60~69세': [1200518, 511174, 311274, 344843, 155056, 170291, 136520, 27813, 1422638, 226444, 209926, 264305, 244901, 259385, 389498, 435315, 75172], '70~79세': [688818, 285602, 171217, 172269, 91020, 88289, 57438, 13609, 742296, 135668, 119037, 167339, 165445, 191719, 238482, 240111, 44621], '80~89세': [263939, 109312, 74227, 74306, 38050, 39190, 21610, 6863, 330231, 68321, 63513, 97941, 89352, 105793, 130716, 119977, 22963], '90~99세': [40404, 14396, 8817, 11574, 5529, 5523, 2991, 1084, 48650, 10493, 8656, 13481, 12770, 14984, 17589, 16139, 3819], '100세 이상': [6380, 1807, 694, 908, 405, 339, 160, 55, 4010, 803, 541, 885, 817, 822, 960, 739, 266]}

 

 

 


▶ csv 파일을 DataFrame으로 저장

import csv
import pandas as pd

f = open('population_age_2020.csv', 'r', encoding='utf-8')
lines = csv.reader(f)

header = next(lines)

list_tmp = []
for line in lines :                       

# CSV 버퍼의 내용을 리스트에 저장
    list_tmp.append(line[:])

f.close()

list_data = []
for j in range(13) :                       

# 리스트의  행과 열을 변경
    tmp = []
    for i in range(len(list_tmp)) :
        if j==0 :
            tmp.append(list_tmp[i][j])
        else :
            tmp.append(int(list_tmp[i][j]))

    list_data.append(tmp)

dict_data = {}
for i in range(len(list_data)) :
    dict_data.update({header[i]:list_data[i]})

frame = pd.DataFrame(dict_data)

frame2 = frame.iloc[:, [0, 1, 8, 9, 10, 11, 12]]
print(frame2)

 

      지역      총인구수   60~69세  70~79세  80~89세  90~99세  100세 이상
0     서울   9736962  1200518  688818  263939   40404     6380
1     부산   3410925   511174  285602  109312   14396     1807
2     대구   2432883   311274  171217   74227    8817      694
3     인천   2954955   344843  172269   74306   11574      908
4     광주   1456121   155056   91020   38050    5529      405
5     대전   1473125   170291   88289   39190    5523      339
6     울산   1145710   136520   57438   21610    2991      160
7     세종    343788    27813   13609    6863    1084       55
8    경기도  13265377  1422638  742296  330231   48650     4010
9    강원도   1539521   226444  135668   68321   10493      803
10  충청북도   1598599   209926  119037   63513    8656      541
11  충청남도   2120995   264305  167339   97941   13481      885
12  전라북도   1815112   244901  165445   89352   12770      817
13  전라남도   1861894   259385  191719  105793   14984      822
14  경상북도   2658956   389498  238482  130716   17589      960
15  경상남도   3358828   435315  240111  119977   16139      739
16   제주도    670876    75172   44621   22963    3819      266

 

 

 


▶ csv 파일을 DataFrame으로 저장한뒤  특정열을 기준으로 내림차순 정렬하기

import csv
import pandas as pd

f = open('population_age_2020.csv', 'r', encoding='utf-8')
lines = csv.reader(f)

header = next(lines)

list_tmp = []
for line in lines :                       

# CSV 버퍼의 내용을 리스트에 저장
    list_tmp.append(line[:])

f.close()

list_data = []
for j in range(13) :                       

# 리스트의  행과 열을 변경
    tmp = []
    for i in range(len(list_tmp)) :
        if j==0 :
            tmp.append(list_tmp[i][j])
        else :
            tmp.append(int(list_tmp[i][j]))

    list_data.append(tmp)

dict_data = {}
for i in range(len(list_data)) :
    dict_data.update({header[i]:list_data[i]})

frame = pd.DataFrame(dict_data)

rank = frame.sort_values(by=['100세 이상'], ascending=False)
rank = rank.reset_index(drop=True)

rank_100 = rank.iloc[:,[0, 12, 1]]
print(rank_100)

 

      지역  100세 이상      총인구수
0     서울     6380   9736962
1    경기도     4010  13265377
2     부산     1807   3410925
3   경상북도      960   2658956
4     인천      908   2954955
5   충청남도      885   2120995
6   전라남도      822   1861894
7   전라북도      817   1815112
8    강원도      803   1539521
9   경상남도      739   3358828
10    대구      694   2432883
11  충청북도      541   1598599
12    광주      405   1456121
13    대전      339   1473125
14   제주도      266    670876
15    울산      160   1145710
16    세종       55    343788

 

 

 

 

 

 

 

 

출처: 예제 중심 파이썬 입문

궁금한 부분이 있으면 댓글 부탁드립니다^^

728x90