728x90
반응형
df = pd.read_excel('./시도별 전출입 인구수.xlsx', engine='openpyxl')
print(df.head())
전출지별 전입지별 1970 1971 1972 1973 1974 1975 \
0 전출지별 전입지별 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 전국 전국 4046536 4210164 3687938 4860418 5297969 9011440
2 NaN 서울특별시 1742813 1671705 1349333 1831858 2050392 3396662
3 NaN 부산광역시 448577 389797 362202 482061 680984 805979
4 NaN 대구광역시 - - - - - -
1976 1977 ... 2008 2009 2010 2011 2012 \
0 이동자수 (명) 이동자수 (명) ... 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 6773250 7397623 ... 8808256 8487275 8226594 8127195 7506691
2 2756510 2893403 ... 2025358 1873188 1733015 1721748 1555281
3 724664 785117 ... 514502 519310 519334 508043 461042
4 - - ... 409938 398626 370817 370563 348642
2013 2014 2015 2016 2017
0 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 7411784 7629098 7755286 7378430 7154226
2 1520090 1573594 1589431 1515602 1472937
3 478451 485710 507031 459015 439073
4 351873 350213 351424 328228 321182
[5 rows x 50 columns]
#누락값
df =df.fillna(method = 'ffill')
print(df.head())
전출지별 전입지별 1970 1971 1972 1973 1974 1975 \
0 전출지별 전입지별 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 전국 전국 4046536 4210164 3687938 4860418 5297969 9011440
2 전국 서울특별시 1742813 1671705 1349333 1831858 2050392 3396662
3 전국 부산광역시 448577 389797 362202 482061 680984 805979
4 전국 대구광역시 - - - - - -
1976 1977 ... 2008 2009 2010 2011 2012 \
0 이동자수 (명) 이동자수 (명) ... 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 6773250 7397623 ... 8808256 8487275 8226594 8127195 7506691
2 2756510 2893403 ... 2025358 1873188 1733015 1721748 1555281
3 724664 785117 ... 514502 519310 519334 508043 461042
4 - - ... 409938 398626 370817 370563 348642
2013 2014 2015 2016 2017
0 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명) 이동자수 (명)
1 7411784 7629098 7755286 7378430 7154226
2 1520090 1573594 1589431 1515602 1472937
3 478451 485710 507031 459015 439073
4 351873 350213 351424 328228 321182
[5 rows x 50 columns]
# 전출지가 서울에서 다른 지역으로 이동한 데이터만 추출하기
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')
print(mask)
0 False
1 False
2 False
3 False
4 False
...
320 False
321 False
322 False
323 False
324 False
Length: 325, dtype: bool
print(mask.value_counts())
False 308
True 17
dtype: int64
# mask 값이 true 인 레코드만 선택해서 df_seoul에 저장
df_seoul = df[mask]
print(df_seoul)
전출지별 전입지별 1970 1971 1972 1973 1974 1975 \
19 서울특별시 전국 1448985 1419016 1210559 1647268 1819660 2937093
21 서울특별시 부산광역시 11568 11130 11768 16307 22220 27515
22 서울특별시 대구광역시 - - - - - -
23 서울특별시 인천광역시 - - - - - -
24 서울특별시 광주광역시 - - - - - -
25 서울특별시 대전광역시 - - - - - -
26 서울특별시 울산광역시 - - - - - -
27 서울특별시 세종특별자치시 - - - - - -
28 서울특별시 경기도 130149 150313 93333 143234 149045 253705
29 서울특별시 강원도 9352 12885 13561 16481 15479 27837
30 서울특별시 충청북도 6700 9457 10853 12617 11786 21073
31 서울특별시 충청남도 15954 18943 23406 27139 25509 51205
32 서울특별시 전라북도 10814 13192 16583 18642 16647 34411
33 서울특별시 전라남도 10513 16755 20157 22160 21314 46610
34 서울특별시 경상북도 11868 16459 22073 27531 26902 46177
35 서울특별시 경상남도 8409 10001 11263 15193 16771 23150
36 서울특별시 제주특별자치도 1039 1325 1617 2456 2261 3440
1976 1977 ... 2008 2009 2010 2011 2012 \
19 2495620 2678007 ... 2083352 1925452 1848038 1834806 1658928
21 23732 27213 ... 17353 17738 17418 18816 16135
22 - - ... 9720 10464 10277 10397 10135
23 - - ... 50493 45392 46082 51641 49640
24 - - ... 10846 11725 11095 10587 10154
25 - - ... 13515 13632 13819 13900 14080
26 - - ... 5057 4845 4742 5188 5691
27 - - ... - - - - 2998
28 202276 207722 ... 412408 398282 410735 373771 354135
29 25927 25415 ... 23668 23331 22736 23624 22332
30 18029 17478 ... 15294 15295 15461 15318 14555
31 41447 43993 ... 27458 24889 24522 24723 22269
32 29835 28444 ... 18390 18332 17569 17755 16120
33 46251 43430 ... 16601 17468 16429 15974 14765
34 40376 41155 ... 15425 16569 16042 15818 15191
35 22400 27393 ... 15438 15303 15689 16039 14474
36 3623 3551 ... 5473 5332 5714 6133 6954
2013 2014 2015 2016 2017
19 1620640 1661425 1726687 1655859 1571423
21 16153 17320 17009 15062 14484
22 10631 10062 10191 9623 8891
23 47424 43212 44915 43745 40485
24 9129 9759 9216 8354 7932
25 13440 13403 13453 12619 11815
26 5542 6047 5950 5102 4260
27 2851 6481 7550 5943 5813
28 340801 332785 359337 370760 342433
29 20601 21173 22659 21590 21016
30 13783 14244 14379 14087 13302
31 21486 21473 22299 21741 21020
32 14909 14566 14835 13835 13179
33 14187 14591 14598 13065 12426
34 14420 14456 15113 14236 12464
35 14447 14799 15220 13717 12692
36 7828 9031 10434 10465 10404
[17 rows x 50 columns]
#df seoul 데이터에서 전출지별 컬럼 갑은 모두 서울 특별시임
# 전출지별 컬럼 제거
df_seoul = df_seoul.drop('전출지별',axis=1)
print(df_seoul)
전입지별 1970 1971 1972 1973 1974 1975 1976 \
19 전국 1448985 1419016 1210559 1647268 1819660 2937093 2495620
21 부산광역시 11568 11130 11768 16307 22220 27515 23732
22 대구광역시 - - - - - - -
23 인천광역시 - - - - - - -
24 광주광역시 - - - - - - -
25 대전광역시 - - - - - - -
26 울산광역시 - - - - - - -
27 세종특별자치시 - - - - - - -
28 경기도 130149 150313 93333 143234 149045 253705 202276
29 강원도 9352 12885 13561 16481 15479 27837 25927
30 충청북도 6700 9457 10853 12617 11786 21073 18029
31 충청남도 15954 18943 23406 27139 25509 51205 41447
32 전라북도 10814 13192 16583 18642 16647 34411 29835
33 전라남도 10513 16755 20157 22160 21314 46610 46251
34 경상북도 11868 16459 22073 27531 26902 46177 40376
35 경상남도 8409 10001 11263 15193 16771 23150 22400
36 제주특별자치도 1039 1325 1617 2456 2261 3440 3623
1977 1978 ... 2008 2009 2010 2011 2012 \
19 2678007 3028911 ... 2083352 1925452 1848038 1834806 1658928
21 27213 29856 ... 17353 17738 17418 18816 16135
22 - - ... 9720 10464 10277 10397 10135
23 - - ... 50493 45392 46082 51641 49640
24 - - ... 10846 11725 11095 10587 10154
25 - - ... 13515 13632 13819 13900 14080
26 - - ... 5057 4845 4742 5188 5691
27 - - ... - - - - 2998
28 207722 237684 ... 412408 398282 410735 373771 354135
29 25415 26700 ... 23668 23331 22736 23624 22332
30 17478 18420 ... 15294 15295 15461 15318 14555
31 43993 48091 ... 27458 24889 24522 24723 22269
32 28444 29676 ... 18390 18332 17569 17755 16120
33 43430 44624 ... 16601 17468 16429 15974 14765
34 41155 42940 ... 15425 16569 16042 15818 15191
35 27393 28697 ... 15438 15303 15689 16039 14474
36 3551 3937 ... 5473 5332 5714 6133 6954
2013 2014 2015 2016 2017
19 1620640 1661425 1726687 1655859 1571423
21 16153 17320 17009 15062 14484
22 10631 10062 10191 9623 8891
23 47424 43212 44915 43745 40485
24 9129 9759 9216 8354 7932
25 13440 13403 13453 12619 11815
26 5542 6047 5950 5102 4260
27 2851 6481 7550 5943 5813
28 340801 332785 359337 370760 342433
29 20601 21173 22659 21590 21016
30 13783 14244 14379 14087 13302
31 21486 21473 22299 21741 21020
32 14909 14566 14835 13835 13179
33 14187 14591 14598 13065 12426
34 14420 14456 15113 14236 12464
35 14447 14799 15220 13717 12692
36 7828 9031 10434 10465 10404
[17 rows x 49 columns]
df_seoul.rename(columns={'전입지별':'전입지'}, inplace = True)
print(df_seoul)
전입지 1970 1971 1972 1973 1974 1975 1976 \
19 전국 1448985 1419016 1210559 1647268 1819660 2937093 2495620
21 부산광역시 11568 11130 11768 16307 22220 27515 23732
22 대구광역시 - - - - - - -
23 인천광역시 - - - - - - -
24 광주광역시 - - - - - - -
25 대전광역시 - - - - - - -
26 울산광역시 - - - - - - -
27 세종특별자치시 - - - - - - -
28 경기도 130149 150313 93333 143234 149045 253705 202276
29 강원도 9352 12885 13561 16481 15479 27837 25927
30 충청북도 6700 9457 10853 12617 11786 21073 18029
31 충청남도 15954 18943 23406 27139 25509 51205 41447
32 전라북도 10814 13192 16583 18642 16647 34411 29835
33 전라남도 10513 16755 20157 22160 21314 46610 46251
34 경상북도 11868 16459 22073 27531 26902 46177 40376
35 경상남도 8409 10001 11263 15193 16771 23150 22400
36 제주특별자치도 1039 1325 1617 2456 2261 3440 3623
1977 1978 ... 2008 2009 2010 2011 2012 \
19 2678007 3028911 ... 2083352 1925452 1848038 1834806 1658928
21 27213 29856 ... 17353 17738 17418 18816 16135
22 - - ... 9720 10464 10277 10397 10135
23 - - ... 50493 45392 46082 51641 49640
24 - - ... 10846 11725 11095 10587 10154
25 - - ... 13515 13632 13819 13900 14080
26 - - ... 5057 4845 4742 5188 5691
27 - - ... - - - - 2998
28 207722 237684 ... 412408 398282 410735 373771 354135
29 25415 26700 ... 23668 23331 22736 23624 22332
30 17478 18420 ... 15294 15295 15461 15318 14555
31 43993 48091 ... 27458 24889 24522 24723 22269
32 28444 29676 ... 18390 18332 17569 17755 16120
33 43430 44624 ... 16601 17468 16429 15974 14765
34 41155 42940 ... 15425 16569 16042 15818 15191
35 27393 28697 ... 15438 15303 15689 16039 14474
36 3551 3937 ... 5473 5332 5714 6133 6954
2013 2014 2015 2016 2017
19 1620640 1661425 1726687 1655859 1571423
21 16153 17320 17009 15062 14484
22 10631 10062 10191 9623 8891
23 47424 43212 44915 43745 40485
24 9129 9759 9216 8354 7932
25 13440 13403 13453 12619 11815
26 5542 6047 5950 5102 4260
27 2851 6481 7550 5943 5813
28 340801 332785 359337 370760 342433
29 20601 21173 22659 21590 21016
30 13783 14244 14379 14087 13302
31 21486 21473 22299 21741 21020
32 14909 14566 14835 13835 13179
33 14187 14591 14598 13065 12426
34 14420 14456 15113 14236 12464
35 14447 14799 15220 13717 12692
36 7828 9031 10434 10465 10404
[17 rows x 49 columns]
# 전입지 컬럼을 index로
df_seoul.set_index('전입지', inplace = True)
print(df_seoul.head())
전입지 1970 1971 1972 1973 1974 1975 1976 \
전입지
전국 전국 1448985 1419016 1210559 1647268 1819660 2937093 2495620
부산광역시 부산광역시 11568 11130 11768 16307 22220 27515 23732
대구광역시 대구광역시 - - - - - - -
인천광역시 인천광역시 - - - - - - -
광주광역시 광주광역시 - - - - - - -
1977 1978 ... 2008 2009 2010 2011 2012 \
전입지 ...
전국 2678007 3028911 ... 2083352 1925452 1848038 1834806 1658928
부산광역시 27213 29856 ... 17353 17738 17418 18816 16135
대구광역시 - - ... 9720 10464 10277 10397 10135
인천광역시 - - ... 50493 45392 46082 51641 49640
광주광역시 - - ... 10846 11725 11095 10587 10154
2013 2014 2015 2016 2017
전입지
전국 1620640 1661425 1726687 1655859 1571423
부산광역시 16153 17320 17009 15062 14484
대구광역시 10631 10062 10191 9623 8891
인천광역시 47424 43212 44915 43745 40485
광주광역시 9129 9759 9216 8354 7932
[5 rows x 49 columns]
sr1 = pd.Series(df_seoul.loc['경기도'])
sr1
전입지 경기도
1970 130149
1971 150313
1972 93333
1973 143234
1974 149045
1975 253705
1976 202276
1977 207722
1978 237684
1979 278411
1980 297539
1981 252073
1982 320174
1983 400875
1984 352238
1985 390265
1986 412535
1987 405220
1988 415174
1989 412933
1990 473889
1991 384714
1992 428344
1993 502584
1994 542204
1995 599411
1996 520566
1997 495454
1998 407050
1999 471841
2000 435573
2001 499575
2002 516765
2003 457656
2004 400206
2005 414621
2006 449632
2007 431637
2008 412408
2009 398282
2010 410735
2011 373771
2012 354135
2013 340801
2014 332785
2015 359337
2016 370760
2017 342433
Name: 경기도, dtype: object
sr1.plot()
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/Malgun.ttf").get_name()
print(font_name)
print(sr1.values)
sr1 = sr1.astype(int)
# Malgun Gothic
# [130149 150313 93333 143234 149045 253705 202276 207722 237684 278411
# 297539 252073 320174 400875 352238 390265 412535 405220 415174 412933
# 473889 384714 428344 502584 542204 599411 520566 495454 407050 471841
# 435573 499575 516765 457656 400206 414621 449632 431637 412408 398282
# 410735 373771 354135 340801 332785 359337 370760 342433]
# 한글깨지면
font_name = font_manager.FontProperties(fname="c:/Windows\Fonts\Malgun.ttf").get_name()
print(font_name)
rc('font', family=font_name) # 폰트지정
plt.plot(sr1.index, sr1.values, marker = 'o', markersize = 10) # 선그래프
plt.title('서울->경기인구이동') # 차트 제목
plt.ylabel('이동 인구수') # x축 이름
plt.xlabel('기간') # y축 이름
plt.style.use('ggplot') #print(plt.style.available)로 스타일 설정 가능
plt.legend(labels=['서울 -> 경기'], loc='best', fontsize = 15) # 범례 표시
plt.figure(figsize=(14,5)) # 크기 지정
plt.xticks(rotation='vertical', size = 10) #size x축 라벨 글자 크기
plt.ylim(50000, 800000) # y축 범위 지정(최소 최대)
plt.annotate('', # 그래프 하나 그리기
xy = (20,620000), # 화살표 머리, 끝점
xytext = (2, 290000), # 화살표 꼬리 , 시작점
xycoords = 'data', # 좌표 체계
arrowprops = dict(arrowstyle = '->', color = 'skyblue', lw = 5), # 화살표 서식, lw 굵기
)
# 주석표시 글자 설정
plt.annotate('인구이동증가(1970-1995)', # 이름
xy = (10,550000), # 범위
rotation = 25, # 회전각도
va = 'baseline', # 상하정렬
ha = 'center', # 좌우정렬
fontsize = '15', # 텍스트 사이즈
)
plt.annotate('인구이동증가(1995-2017)', # 이름
xy = (40,560000), # 화살표 머리, 끝점
rotation = -11, # 화살표 꼬리 , 시작점
va = 'baseline',
ha = 'center',
fontsize = '15',
)
# Malgun Gothic
# Text(40, 560000, '인구이동증가(1995-2017)')
# matplotlib에 등록된 스타일 리스트 조회
print(plt.style.available)
# ['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(2,1,1) # 2행1열 1번째
ax2 = fig.add_subplot(2,1,2) # 2행1열 2번째
ax1.plot(sr1, 'o', markersize =10)
# markerfacecolor 마커색상설정, # color 선 색상 # linewidth 선의 두께
ax2.plot(sr1, marker = 'o', markersize = 10, markerfacecolor = 'green', color = 'olive', linewidth=2, label = '서울 -> 경기')
ax2.legend(loc = 'best')
ax1.set_ylim(50000, 800000)
ax2.set_ylim(50000, 800000)
ax1.set_xticklabels(sr1.index, rotation=75) # rotation 75도
ax2.set_xticklabels(sr1.index, rotation=75)
[Text(0, 0, '1970'),
Text(1, 0, '1971'),
Text(2, 0, '1972'),
Text(3, 0, '1973'),
Text(4, 0, '1974'),
Text(5, 0, '1975'),
Text(6, 0, '1976'),
Text(7, 0, '1977'),
Text(8, 0, '1978'),
Text(9, 0, '1979'),
Text(10, 0, '1980'),
Text(11, 0, '1981'),
Text(12, 0, '1982'),
Text(13, 0, '1983'),
Text(14, 0, '1984'),
Text(15, 0, '1985'),
Text(16, 0, '1986'),
Text(17, 0, '1987'),
Text(18, 0, '1988'),
Text(19, 0, '1989'),
Text(20, 0, '1990'),
Text(21, 0, '1991'),
Text(22, 0, '1992'),
Text(23, 0, '1993'),
Text(24, 0, '1994'),
Text(25, 0, '1995'),
Text(26, 0, '1996'),
Text(27, 0, '1997'),
Text(28, 0, '1998'),
Text(29, 0, '1999'),
Text(30, 0, '2000'),
Text(31, 0, '2001'),
Text(32, 0, '2002'),
Text(33, 0, '2003'),
Text(34, 0, '2004'),
Text(35, 0, '2005'),
Text(36, 0, '2006'),
Text(37, 0, '2007'),
Text(38, 0, '2008'),
Text(39, 0, '2009'),
Text(40, 0, '2010'),
Text(41, 0, '2011'),
Text(42, 0, '2012'),
Text(43, 0, '2013'),
Text(44, 0, '2014'),
Text(45, 0, '2015'),
Text(46, 0, '2016'),
Text(47, 0, '2017')]
반응형
'Data_Science > Data_Analysis_Py' 카테고리의 다른 글
6. Titanic || '21.06.24. (0) | 2021.10.26 |
---|---|
5. auto-mpg 분석 || '21.06.24. (0) | 2021.10.26 |
4. 시도별 전출입 인구수 분석 ( 2 || '21.06.24. (0) | 2021.10.26 |
2. auto-mpg 데이터 분석 || 2021.06.24 (0) | 2021.10.19 |
1. 남북한발전전력량 분석 || 2021.06.24 (0) | 2021.10.19 |