아이티윌_데이터 분석 55기/문제풀이_Python

# 13-2 13일차 퀴즈에 대한 문제풀이

ecosso 2026. 5. 29. 10:03

subway.csv 파일을 읽고 시간대별 승차수의 변화를 각 노선별로 서로 다른 선 그래프로 출력

(단, x축 눈금은 5,6,7,8,...,24로 출력)

import pandas as pd

sub = pd.read_csv('subway.csv', encoding = 'cp949')

sub
Out[7]: 
       노선번호  시간      승차       하차
0    line_1   5   88136    35394
1    line_1   6  114628   195028
2    line_1   7  259282   483162
3    line_1   8  384892  1165703
4    line_1   9  315797   791704
..      ...  ..     ...      ...
155  line_8  20  994385  1004555
156  line_8  21  992340   945111
157  line_8  22  903243   913484
158  line_8  23   54356   453525
159  line_8  24   12494    22345

[160 rows x 4 columns]

 

[ 문제풀이 ] 

# 기초 데이터 생성 (wide data로 변환)

sub['시간'] = sub['시간'].astype('str').str.zfill(4).str[:2].astype('int')

sub.pivot_table('승차','시간','노선번호',aggfunc='sum')

sub.pivot_table('승차','시간','노선번호',aggfunc='sum')
Out[6]: 
노선번호   line_1   line_2   line_3   line_4   line_5   line_6   line_7   line_8
시간                                                                          
5       88136   608841   149909   244178    76867   244178   239566   244178
6      114628  1079186   344768   555232   243242   555232   234900   555232
7      259282  2960789  1008133  1478641   343245  1478641  1230585  1478641
8      384892  3914929  1301035  1666148   632422  1666148  1549555  1666148
9      315797  2419350   843939  1080607   259342  1080607  1103944  1080607
10     340972  1810982   688982   845377   756756   845377   983724   845377
11     411897  1847789   719544   853473   456456   853473   823479   853473
12     471989  1990964   788290   921995   246547   921995   994384   921995
13     558377  2256231   870152  1010356   234566  1010356  1099837  1010356
14     589343  2263081   874658  1021972   345677  1021972  1123884  1021972
15     648960  2445765   952321  1099173   378521  1099173   999348  1099173
16     721442  2694321  1050130  1208057   434244  1208057  1208057  1108057
17     791417  3306132  1212098  1405470  3221111  1405470  1405470  1399470
18    1044776  4810661  1656305  1705617   526335  1705617  1705617  1400317
19     810482  3565184  1227847  1282398   790482  1282398  1282398  1282398
20     608066  2732977   913682  1034818   348066  1034818  1143244   994385
21     647624  2716860   842636  1001286   460624  1001286  1444442   992340
22     576958  2584664   717158   925633   512958   925633   932454   903243
23     260729  1212806   288744   452658   240789   452658    45466    54356
24      21167   172373    33938    17687    21347    17687    22345    12494

 

# 시각화
# 1) 환경설정
plt.rc('font', family='Malgun Gothic', size=18)
plt.rc('axes', facecolor='#E4E4E4')

# 2) 시각화
total.plot()
plt.legend(title = '노선번호', ncol=2, fontsize = 12)
plt.xticks(total.index)

axis(1, at = 눈금, label = ...)
# 눈금과 라벨의 개수가 일치해야 한다.


plt.ylabel('승차수(천)', loc = 'top', rotation = 0)
plt.title('역별 승차 현황 비교', pad = 20)
plt.tight_layout()