728x90
반응형

시도별 전출입 인구수.xlsx
0.10MB

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')]

 

 

반응형

+ Recent posts