티스토리 뷰

pandas_subway

Pandas

지하철 데이터

In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [2]:
data = pd.read_csv('CARD_SUBWAY_MONTH_201901.csv')
In [4]:
data.head()
#data.tail()
Out[4]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
18329 20190131 1호선 155 동대문 14563 15139 20190203
18330 20190131 1호선 154 종로5가 30249 29703 20190203
18331 20190131 1호선 153 종로3가 36804 35050 20190203
18332 20190131 1호선 152 종각 51970 50080 20190203
18333 20190131 1호선 151 시청 29059 29169 20190203
In [4]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 18334 entries, 0 to 18333
Data columns (total 7 columns):
사용일자      18334 non-null int64
노선명       18334 non-null object
역ID       18334 non-null int64
역명        18334 non-null object
승차총승객수    18334 non-null int64
하차총승객수    18334 non-null int64
등록일자      18334 non-null int64
dtypes: int64(5), object(2)
memory usage: 1002.7+ KB
In [5]:
data.describe()
Out[5]:
사용일자 역ID 승차총승객수 하차총승객수 등록일자
count 1.833400e+04 18334.000000 18334.000000 18334.000000 1.833400e+04
mean 2.019012e+07 1882.867296 12100.360751 12048.564143 2.019013e+07
std 8.945375e+00 1178.994356 12968.981816 13155.849968 2.615326e+01
min 2.019010e+07 150.000000 1.000000 0.000000 2.019010e+07
25% 2.019011e+07 1030.000000 3848.250000 3661.250000 2.019011e+07
50% 2.019012e+07 1812.000000 8364.000000 8177.000000 2.019012e+07
75% 2.019012e+07 2634.000000 15865.000000 15733.750000 2.019013e+07
max 2.019013e+07 4713.000000 132727.000000 137826.000000 2.019020e+07
In [6]:
data.index
Out[6]:
RangeIndex(start=0, stop=18334, step=1)
In [8]:
data.columns
Out[8]:
Index(['사용일자', '노선명', '역ID', '역명', '승차총승객수', '하차총승객수', '등록일자'], dtype='object')
In [12]:
data['사용일자'] # [''] 한 컬럼에 대해서 data값을 구하면 시리즈 형식으로 나온다.
data.사용일자
Out[12]:
0        20190101
1        20190101
2        20190101
3        20190101
4        20190101
5        20190101
6        20190101
7        20190101
8        20190101
9        20190101
10       20190101
11       20190101
12       20190101
13       20190101
14       20190101
15       20190101
16       20190101
17       20190101
18       20190101
19       20190101
20       20190101
21       20190101
22       20190101
23       20190101
24       20190101
25       20190101
26       20190101
27       20190101
28       20190101
29       20190101
           ...   
18304    20190131
18305    20190131
18306    20190131
18307    20190131
18308    20190131
18309    20190131
18310    20190131
18311    20190131
18312    20190131
18313    20190131
18314    20190131
18315    20190131
18316    20190131
18317    20190131
18318    20190131
18319    20190131
18320    20190131
18321    20190131
18322    20190131
18323    20190131
18324    20190131
18325    20190131
18326    20190131
18327    20190131
18328    20190131
18329    20190131
18330    20190131
18331    20190131
18332    20190131
18333    20190131
Name: 사용일자, Length: 18334, dtype: int64
In [61]:
data.head()
Out[61]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
In [13]:
data2 = data[ ['승차총승객수','하차총승객수'] ]
data2.head()
Out[13]:
승차총승객수 하차총승객수
0 1520 1436
1 275 114
2 1509 1083
3 357 271
4 1772 1963
In [14]:
data2.values  # 데이터 프레임이 넘파이 어레이로 바뀐다.
Out[14]:
array([[ 1520,  1436],
       [  275,   114],
       [ 1509,  1083],
       ...,
       [36804, 35050],
       [51970, 50080],
       [29059, 29169]], dtype=int64)
In [16]:
data[data.승차총승객수<10]
Out[16]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
16 20190101 경의선 1296 계양 1 0 20190104
266 20190101 6호선 2615 연신내 1 0 20190104
370 20190101 3호선 321 충무로 2 0 20190104
439 20190101 경원선 1022 창동 1 0 20190104
662 20190102 3호선 321 충무로 2 0 20190105
765 20190102 6호선 2615 연신내 1 0 20190105
1009 20190102 경의선 1295 김포공항 1 0 20190105
1077 20190102 분당선 1031 복정 1 0 20190105
1285 20190103 분당선 1031 복정 3 0 20190106
1354 20190103 경의선 1296 계양 1 0 20190106
1355 20190103 경의선 1295 김포공항 1 0 20190106
1397 20190103 경원선 1022 창동 1 0 20190106
1699 20190103 3호선 321 충무로 2 0 20190106
2255 20190104 분당선 1031 복정 1 0 20190107
2358 20190104 경원선 1022 창동 3 0 20190107
2457 20190105 3호선 321 충무로 1 0 20190108
3138 20190106 경의선 1295 김포공항 1 0 20190109
3380 20190106 6호선 2615 연신내 4 0 20190109
3685 20190107 분당선 1031 복정 1 0 20190110
3765 20190107 3호선 321 충무로 2 0 20190110
3842 20190107 6호선 2615 연신내 1 0 20190110
4039 20190107 경의선 1291 서울역 2 0 20190110
4245 20190108 경의선 1293 홍대입구 1 0 20190111
4349 20190108 분당선 1031 복정 3 0 20190111
4672 20190108 3호선 321 충무로 2 0 20190111
4837 20190109 경의선 1291 서울역 1 0 20190112
5081 20190109 6호선 2615 연신내 1 0 20190112
5276 20190109 일산선 1949 지축 1 0 20190112
5702 20190110 경원선 1022 창동 1 0 20190113
5744 20190110 경의선 1295 김포공항 2 0 20190113
... ... ... ... ... ... ... ...
13481 20190123 경의선 1295 김포공항 1 0 20190126
13746 20190124 경의선 1291 서울역 1 0 20190127
13788 20190124 경원선 1022 창동 4 0 20190127
14018 20190124 6호선 2615 연신내 3 0 20190127
14192 20190124 분당선 1031 복정 2 0 20190127
14351 20190125 3호선 321 충무로 4 0 20190128
14993 20190126 경원선 1022 창동 1 0 20190129
15195 20190126 6호선 2615 연신내 2 0 20190129
15298 20190126 3호선 321 충무로 3 0 20190129
15394 20190127 3호선 321 충무로 1 0 20190130
15483 20190127 분당선 1031 복정 1 0 20190130
15640 20190127 경의선 1296 계양 1 0 20190130
15641 20190127 경의선 1291 서울역 1 0 20190130
16073 20190128 3호선 321 충무로 3 0 20190131
16193 20190128 경의선 1296 계양 1 0 20190131
16194 20190128 경의선 1291 서울역 2 0 20190131
16435 20190128 6호선 2615 연신내 3 0 20190131
16564 20190129 6호선 2615 연신내 2 0 20190201
16750 20190129 분당선 1031 복정 1 0 20190201
16851 20190129 경의선 1297 검암 2 0 20190201
16852 20190129 경의선 1295 김포공항 1 0 20190201
17053 20190129 3호선 321 충무로 2 0 20190201
17163 20190130 경원선 1022 창동 1 0 20190202
17204 20190130 경의선 1291 서울역 1 0 20190202
17273 20190130 분당선 1031 복정 2 0 20190202
17569 20190130 6호선 2615 연신내 1 0 20190202
17672 20190130 3호선 321 충무로 2 0 20190202
17856 20190131 분당선 1031 복정 2 0 20190203
17945 20190131 경원선 1022 창동 2 0 20190203
18242 20190131 3호선 321 충무로 4 0 20190203

106 rows × 7 columns

In [21]:
pd.DataFrame([[1,2],[3,None]])
Out[21]:
0 1
0 1 2.0
1 3 NaN
In [23]:
data.isnull()
Out[23]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 False False False False False False False
1 False False False False False False False
2 False False False False False False False
3 False False False False False False False
4 False False False False False False False
5 False False False False False False False
6 False False False False False False False
7 False False False False False False False
8 False False False False False False False
9 False False False False False False False
10 False False False False False False False
11 False False False False False False False
12 False False False False False False False
13 False False False False False False False
14 False False False False False False False
15 False False False False False False False
16 False False False False False False False
17 False False False False False False False
18 False False False False False False False
19 False False False False False False False
20 False False False False False False False
21 False False False False False False False
22 False False False False False False False
23 False False False False False False False
24 False False False False False False False
25 False False False False False False False
26 False False False False False False False
27 False False False False False False False
28 False False False False False False False
29 False False False False False False False
... ... ... ... ... ... ... ...
18304 False False False False False False False
18305 False False False False False False False
18306 False False False False False False False
18307 False False False False False False False
18308 False False False False False False False
18309 False False False False False False False
18310 False False False False False False False
18311 False False False False False False False
18312 False False False False False False False
18313 False False False False False False False
18314 False False False False False False False
18315 False False False False False False False
18316 False False False False False False False
18317 False False False False False False False
18318 False False False False False False False
18319 False False False False False False False
18320 False False False False False False False
18321 False False False False False False False
18322 False False False False False False False
18323 False False False False False False False
18324 False False False False False False False
18325 False False False False False False False
18326 False False False False False False False
18327 False False False False False False False
18328 False False False False False False False
18329 False False False False False False False
18330 False False False False False False False
18331 False False False False False False False
18332 False False False False False False False
18333 False False False False False False False

18334 rows × 7 columns

In [27]:
data[['승차총승객수','하차총승객수']].mean()
Out[27]:
승차총승객수    12100.360751
하차총승객수    12048.564143
dtype: float64
In [16]:
data.notnull().sum()  #판다스의 sum은 칼럼단위이다.
Out[16]:
사용일자      18334
노선명       18334
역ID       18334
역명        18334
승차총승객수    18334
하차총승객수    18334
등록일자      18334
dtype: int64
In [21]:
# ser.name, df.index.name, df.columns.name
In [35]:
pd.to_datetime(['20190308']) # 대부분의 날짜형식은 datetime을 이용해 바꿔줄수 있다.
pd.to_datetime([20190308])
Out[35]:
DatetimeIndex(['1970-01-01 00:00:00.020190308'], dtype='datetime64[ns]', freq=None)
In [36]:
data2 = data.copy()

# data2['year'] = data2.사용일자//10000
# data2['month'] = (data2.사용일자%10000)//100
# data2['day'] = data2.사용일자%100
# import calendar
#data2['wday'] = data2.apply(lambda ser: calendar.weekday(ser.year, ser.month, ser.day),axis=1)
# ser은 행 중에서 찾는다는 것을 의미한다.
#apply는 열 단위로 읽는다. applymap은 항목을 하나하나 처리한다.

theday = pd.to_datetime(data2.사용일자, format='%Y%m%d')
theday
Out[36]:
0       2019-01-01
1       2019-01-01
2       2019-01-01
3       2019-01-01
4       2019-01-01
5       2019-01-01
6       2019-01-01
7       2019-01-01
8       2019-01-01
9       2019-01-01
10      2019-01-01
11      2019-01-01
12      2019-01-01
13      2019-01-01
14      2019-01-01
15      2019-01-01
16      2019-01-01
17      2019-01-01
18      2019-01-01
19      2019-01-01
20      2019-01-01
21      2019-01-01
22      2019-01-01
23      2019-01-01
24      2019-01-01
25      2019-01-01
26      2019-01-01
27      2019-01-01
28      2019-01-01
29      2019-01-01
           ...    
18304   2019-01-31
18305   2019-01-31
18306   2019-01-31
18307   2019-01-31
18308   2019-01-31
18309   2019-01-31
18310   2019-01-31
18311   2019-01-31
18312   2019-01-31
18313   2019-01-31
18314   2019-01-31
18315   2019-01-31
18316   2019-01-31
18317   2019-01-31
18318   2019-01-31
18319   2019-01-31
18320   2019-01-31
18321   2019-01-31
18322   2019-01-31
18323   2019-01-31
18324   2019-01-31
18325   2019-01-31
18326   2019-01-31
18327   2019-01-31
18328   2019-01-31
18329   2019-01-31
18330   2019-01-31
18331   2019-01-31
18332   2019-01-31
18333   2019-01-31
Name: 사용일자, Length: 18334, dtype: datetime64[ns]
In [38]:
data2['year'] = theday.dt.year
data2['month'] = theday.dt.month
data2['day'] = theday.dt.day
wday={0:'월', 1:'화', 2:'수', 3:'목', 4:'금', 5:'토', 6:'일'}
data2['wday'] = theday.dt.dayofweek.map(wday)  # map함수는 값을 하나하나 바꿔준다.

data2.tail()
Out[38]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 year month day wday
18329 20190131 1호선 155 동대문 14563 15139 20190203 2019 1 31
18330 20190131 1호선 154 종로5가 30249 29703 20190203 2019 1 31
18331 20190131 1호선 153 종로3가 36804 35050 20190203 2019 1 31
18332 20190131 1호선 152 종각 51970 50080 20190203 2019 1 31
18333 20190131 1호선 151 시청 29059 29169 20190203 2019 1 31
In [39]:
data3 = data2.drop('year', axis=1)[:3] # return new DataFrame
data3
Out[39]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 month day wday
0 20190101 경춘선 1323 가평 1520 1436 20190104 1 1
1 20190101 경춘선 1322 상천 275 114 20190104 1 1
2 20190101 경춘선 1321 청평 1509 1083 20190104 1 1
In [45]:
data2[data2.day==31].head()
Out[45]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 year month day wday
17743 20190131 과천선 1450 선바위 10584 8356 20190203 2019 1 31
17744 20190131 8호선 2821 복정 12066 9845 20190203 2019 1 31
17745 20190131 8호선 2822 산성 5864 5624 20190203 2019 1 31
17746 20190131 8호선 2823 남한산성입구(성남법원.검찰청) 14838 13285 20190203 2019 1 31
17747 20190131 8호선 2824 단대오거리 11850 11518 20190203 2019 1 31
In [46]:
data2[data2.day==31][2:3]
Out[46]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 year month day wday
17745 20190131 8호선 2822 산성 5864 5624 20190203 2019 1 31
In [38]:
(data2 > 10000)[:5]
Out[38]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 year month day
0 True True False True False False True False False False
1 True True False True False False True False False False
2 True True False True False False True False False False
3 True True False True False False True False False False
4 True True False True False False True False False False
In [47]:
data2[['승차총승객수','하차총승객수']] # DataFrame - Series
Out[47]:
승차총승객수 하차총승객수
0 1520 1436
1 275 114
2 1509 1083
3 357 271
4 1772 1963
5 787 765
6 2649 2661
7 734 726
8 1347 1534
9 1542 1516
10 1321 1232
11 1068 954
12 24321 24169
13 13653 14049
14 7126 6603
15 11366 11785
16 1 0
17 3860 4170
18 729 659
19 719 1761
20 4346 5071
21 2311 2469
22 2572 2670
23 2377 2265
24 3252 3199
25 3725 3768
26 2476 2508
27 2606 2497
28 215 209
29 1748 1700
... ... ...
18304 63414 69744
18305 69459 61644
18306 65186 67747
18307 10254 10959
18308 27967 27937
18309 89355 85642
18310 20006 19265
18311 44302 44291
18312 28067 26975
18313 44899 49051
18314 34567 37720
18315 21130 22598
18316 8791 9700
18317 20764 17129
18318 16668 15952
18319 16242 16890
18320 17863 20145
18321 13946 13843
18322 26344 26216
18323 55692 56015
18324 29981 29575
18325 9483 9727
18326 29384 30328
18327 25142 26221
18328 18001 17784
18329 14563 15139
18330 30249 29703
18331 36804 35050
18332 51970 50080
18333 29059 29169

18334 rows × 2 columns

In [48]:
data2[['승차총승객수','하차총승객수']] - [10000,10000] # DataFrame - Series
Out[48]:
승차총승객수 하차총승객수
0 -8480 -8564
1 -9725 -9886
2 -8491 -8917
3 -9643 -9729
4 -8228 -8037
5 -9213 -9235
6 -7351 -7339
7 -9266 -9274
8 -8653 -8466
9 -8458 -8484
10 -8679 -8768
11 -8932 -9046
12 14321 14169
13 3653 4049
14 -2874 -3397
15 1366 1785
16 -9999 -10000
17 -6140 -5830
18 -9271 -9341
19 -9281 -8239
20 -5654 -4929
21 -7689 -7531
22 -7428 -7330
23 -7623 -7735
24 -6748 -6801
25 -6275 -6232
26 -7524 -7492
27 -7394 -7503
28 -9785 -9791
29 -8252 -8300
... ... ...
18304 53414 59744
18305 59459 51644
18306 55186 57747
18307 254 959
18308 17967 17937
18309 79355 75642
18310 10006 9265
18311 34302 34291
18312 18067 16975
18313 34899 39051
18314 24567 27720
18315 11130 12598
18316 -1209 -300
18317 10764 7129
18318 6668 5952
18319 6242 6890
18320 7863 10145
18321 3946 3843
18322 16344 16216
18323 45692 46015
18324 19981 19575
18325 -517 -273
18326 19384 20328
18327 15142 16221
18328 8001 7784
18329 4563 5139
18330 20249 19703
18331 26804 25050
18332 41970 40080
18333 19059 19169

18334 rows × 2 columns

In [49]:
data3 = data2[['승차총승객수','하차총승객수']]
data3[:3]
Out[49]:
승차총승객수 하차총승객수
0 1520 1436
1 275 114
2 1509 1083
In [50]:
np.maximum(data3,10000)
Out[50]:
승차총승객수 하차총승객수
0 10000 10000
1 10000 10000
2 10000 10000
3 10000 10000
4 10000 10000
5 10000 10000
6 10000 10000
7 10000 10000
8 10000 10000
9 10000 10000
10 10000 10000
11 10000 10000
12 24321 24169
13 13653 14049
14 10000 10000
15 11366 11785
16 10000 10000
17 10000 10000
18 10000 10000
19 10000 10000
20 10000 10000
21 10000 10000
22 10000 10000
23 10000 10000
24 10000 10000
25 10000 10000
26 10000 10000
27 10000 10000
28 10000 10000
29 10000 10000
... ... ...
18304 63414 69744
18305 69459 61644
18306 65186 67747
18307 10254 10959
18308 27967 27937
18309 89355 85642
18310 20006 19265
18311 44302 44291
18312 28067 26975
18313 44899 49051
18314 34567 37720
18315 21130 22598
18316 10000 10000
18317 20764 17129
18318 16668 15952
18319 16242 16890
18320 17863 20145
18321 13946 13843
18322 26344 26216
18323 55692 56015
18324 29981 29575
18325 10000 10000
18326 29384 30328
18327 25142 26221
18328 18001 17784
18329 14563 15139
18330 30249 29703
18331 36804 35050
18332 51970 50080
18333 29059 29169

18334 rows × 2 columns

In [51]:
data3.apply(np.sin)
Out[51]:
승차총승객수 하차총승객수
0 -0.506262 -0.288019
1 -0.993885 0.784980
2 0.860131 0.750928
3 -0.909285 0.733211
4 0.141269 0.475391
5 0.999518 -0.999754
6 -0.595102 -0.070963
7 -0.905553 -0.287961
8 0.676683 0.785055
9 0.498609 0.983566
10 0.999212 0.475630
11 -0.141030 -0.864506
12 -0.935730 -0.665166
13 -0.353839 -0.200969
14 0.762948 -0.587332
15 -0.278489 -0.774520
16 0.841471 0.000000
17 0.850729 -0.894159
18 0.149937 -0.670184
19 0.412064 0.990587
20 -0.923597 0.452402
21 -0.936388 -0.287701
22 0.821698 -0.346423
23 0.926739 0.088189
24 -0.436409 0.756980
25 -0.800954 -0.942625
26 0.412311 0.846333
27 -0.998805 0.536395
28 0.980246 0.996467
29 0.956420 -0.387921
... ... ...
18304 -0.814744 0.599671
18305 -0.999085 -0.325035
18306 -0.888484 0.992170
18307 -0.157759 0.902192
18308 0.516020 0.925922
18309 0.968677 0.817657
18310 0.331584 0.684449
18311 -0.673993 0.735747
18312 0.011233 0.959572
18313 -0.598963 -0.967183
18314 -0.056003 0.892560
18315 -0.344952 -0.500384
18316 0.733703 -0.945170
18317 -0.937074 0.860807
18318 -0.961007 -0.845497
18319 -0.034012 0.715887
18320 -0.095682 0.894765
18321 -0.453074 0.909786
18322 -0.984761 0.556938
18323 -0.834393 0.392167
18324 -0.704208 0.046742
18325 0.994744 0.588453
18326 -0.631829 -0.804883
18327 0.165245 0.954421
18328 -0.320166 0.527803
18329 -0.989178 0.328767
18330 0.984703 0.687862
18331 -0.239706 0.681080
18332 0.979360 0.128138
18333 -0.668393 0.634830

18334 rows × 2 columns

In [56]:
data3.apply(lambda ser: ser.max() - ser.min())
Out[56]:
승차총승객수    132726
하차총승객수    137826
dtype: int64
In [57]:
data3.apply(lambda ser: pd.Series([ser.max(), ser.min(), ser.mean(), ser.std()]))
Out[57]:
승차총승객수 하차총승객수
0 132727.000000 137826.000000
1 1.000000 0.000000
2 12100.360751 12048.564143
3 12968.981816 13155.849968
In [51]:
data3 - data3.min()
Out[51]:
승차총승객수 하차총승객수
0 1519 1436
1 274 114
2 1508 1083
3 356 271
4 1771 1963
5 786 765
6 2648 2661
7 733 726
8 1346 1534
9 1541 1516
10 1320 1232
11 1067 954
12 24320 24169
13 13652 14049
14 7125 6603
15 11365 11785
16 0 0
17 3859 4170
18 728 659
19 718 1761
20 4345 5071
21 2310 2469
22 2571 2670
23 2376 2265
24 3251 3199
25 3724 3768
26 2475 2508
27 2605 2497
28 214 209
29 1747 1700
... ... ...
18304 63413 69744
18305 69458 61644
18306 65185 67747
18307 10253 10959
18308 27966 27937
18309 89354 85642
18310 20005 19265
18311 44301 44291
18312 28066 26975
18313 44898 49051
18314 34566 37720
18315 21129 22598
18316 8790 9700
18317 20763 17129
18318 16667 15952
18319 16241 16890
18320 17862 20145
18321 13945 13843
18322 26343 26216
18323 55691 56015
18324 29980 29575
18325 9482 9727
18326 29383 30328
18327 25141 26221
18328 18000 17784
18329 14562 15139
18330 30248 29703
18331 36803 35050
18332 51969 50080
18333 29058 29169

18334 rows × 2 columns

In [71]:
data3.apply(lambda col: col - col.min(), axis=1)
Out[71]:
승차총승객수 하차총승객수
0 84 0
1 161 0
2 426 0
3 86 0
4 0 191
5 22 0
6 0 12
7 8 0
8 0 187
9 26 0
10 89 0
11 114 0
12 152 0
13 0 396
14 523 0
15 0 419
16 1 0
17 0 310
18 70 0
19 0 1042
20 0 725
21 0 158
22 0 98
23 112 0
24 53 0
25 0 43
26 0 32
27 109 0
28 6 0
29 48 0
... ... ...
18304 0 6330
18305 7815 0
18306 0 2561
18307 0 705
18308 30 0
18309 3713 0
18310 741 0
18311 11 0
18312 1092 0
18313 0 4152
18314 0 3153
18315 0 1468
18316 0 909
18317 3635 0
18318 716 0
18319 0 648
18320 0 2282
18321 103 0
18322 128 0
18323 0 323
18324 406 0
18325 0 244
18326 0 944
18327 0 1079
18328 217 0
18329 0 576
18330 546 0
18331 1754 0
18332 1890 0
18333 0 110

18334 rows × 2 columns

In [72]:
data3.applymap(lambda x: x//10000)
Out[72]:
승차총승객수 하차총승객수
0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0
10 0 0
11 0 0
12 2 2
13 1 1
14 0 0
15 1 1
16 0 0
17 0 0
18 0 0
19 0 0
20 0 0
21 0 0
22 0 0
23 0 0
24 0 0
25 0 0
26 0 0
27 0 0
28 0 0
29 0 0
... ... ...
18304 6 6
18305 6 6
18306 6 6
18307 1 1
18308 2 2
18309 8 8
18310 2 1
18311 4 4
18312 2 2
18313 4 4
18314 3 3
18315 2 2
18316 0 0
18317 2 1
18318 1 1
18319 1 1
18320 1 2
18321 1 1
18322 2 2
18323 5 5
18324 2 2
18325 0 0
18326 2 3
18327 2 2
18328 1 1
18329 1 1
18330 3 2
18331 3 3
18332 5 5
18333 2 2

18334 rows × 2 columns

  • Series.apply()
  • Series.map()
  • DataFrame.apply() # for each column
  • DataFrame.applymap() # for each value
In [52]:
data.sort_values('승차총승객수', ascending=False)
Out[52]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
5960 20190111 2호선 222 강남 132727 137826 20190114
14310 20190125 2호선 222 강남 131976 136614 20190128
10306 20190118 2호선 222 강남 130864 136701 20190121
1844 20190104 2호선 222 강남 129878 134948 20190107
5591 20190110 2호선 222 강남 124860 124336 20190113
9379 20190116 2호선 222 강남 124782 124193 20190119
13377 20190123 2호선 222 강남 124516 125097 20190126
14160 20190124 2호선 222 강남 124412 125178 20190127
10020 20190117 2호선 222 강남 124182 125391 20190120
5223 20190109 2호선 222 강남 123657 122365 20190112
4291 20190108 2호선 222 강남 123559 123099 20190111
8761 20190115 2호선 222 강남 122593 121979 20190118
1740 20190103 2호선 222 강남 122254 122889 20190106
12762 20190122 2호선 222 강남 122092 121935 20190125
3730 20190107 2호선 222 강남 121527 121092 20190110
17012 20190129 2호선 222 강남 120636 120632 20190201
8263 20190114 2호선 222 강남 118984 119047 20190117
12384 20190121 2호선 222 강남 118767 119423 20190124
16015 20190128 2호선 222 강남 118690 118726 20190131
17713 20190130 2호선 222 강남 118278 118613 20190202
18303 20190131 2호선 222 강남 116722 117092 20190203
612 20190102 2호선 222 강남 116550 116482 20190105
15322 20190126 2호선 239 홍대입구 101250 114445 20190129
10300 20190118 2호선 216 잠실(송파구청) 97378 92987 20190121
14304 20190125 2호선 216 잠실(송파구청) 97301 92983 20190128
1799 20190104 2호선 216 잠실(송파구청) 95791 92454 20190107
5954 20190111 2호선 216 잠실(송파구청) 95124 91752 20190114
6632 20190112 2호선 239 홍대입구 94280 107908 20190115
15339 20190126 2호선 222 강남 94215 100006 20190129
6649 20190112 2호선 222 강남 94172 100223 20190115
... ... ... ... ... ... ... ...
7323 20190113 경의선 1291 서울역 1 0 20190116
17204 20190130 경의선 1291 서울역 1 0 20190202
12287 20190121 경의선 1297 검암 1 0 20190124
12009 20190121 일산선 1949 지축 1 0 20190124
13336 20190123 3호선 321 충무로 1 0 20190126
9564 20190117 6호선 2615 연신내 1 0 20190120
13481 20190123 경의선 1295 김포공항 1 0 20190126
13746 20190124 경의선 1291 서울역 1 0 20190127
10061 20190118 경원선 1022 창동 1 0 20190121
16193 20190128 경의선 1296 계양 1 0 20190131
3842 20190107 6호선 2615 연신내 1 0 20190110
3685 20190107 분당선 1031 복정 1 0 20190110
15641 20190127 경의선 1291 서울역 1 0 20190130
4245 20190108 경의선 1293 홍대입구 1 0 20190111
3138 20190106 경의선 1295 김포공항 1 0 20190109
16852 20190129 경의선 1295 김포공항 1 0 20190201
15640 20190127 경의선 1296 계양 1 0 20190130
8134 20190114 6호선 2615 연신내 1 0 20190117
12329 20190121 경원선 1022 창동 1 0 20190124
15483 20190127 분당선 1031 복정 1 0 20190130
9875 20190117 분당선 1031 복정 1 0 20190120
7411 20190113 3호선 321 충무로 1 0 20190116
6608 20190112 3호선 321 충무로 1 0 20190115
7083 20190112 6호선 2615 연신내 1 0 20190115
10258 20190118 경의선 1295 김포공항 1 0 20190121
10956 20190119 6호선 2615 연신내 1 0 20190122
2255 20190104 분당선 1031 복정 1 0 20190107
7540 20190113 6호선 2615 연신내 1 0 20190116
7032 20190112 경의선 1295 김포공항 1 0 20190115
8146 20190114 3호선 321 충무로 1 0 20190117

18334 rows × 7 columns

In [86]:
data3.sort_values('승차총승객수', ascending=False)
Out[86]:
승차총승객수 하차총승객수
5960 132727 137826
14310 131976 136614
10306 130864 136701
1844 129878 134948
5591 124860 124336
9379 124782 124193
13377 124516 125097
14160 124412 125178
10020 124182 125391
5223 123657 122365
4291 123559 123099
8761 122593 121979
1740 122254 122889
12762 122092 121935
3730 121527 121092
17012 120636 120632
8263 118984 119047
12384 118767 119423
16015 118690 118726
17713 118278 118613
18303 116722 117092
612 116550 116482
15322 101250 114445
10300 97378 92987
14304 97301 92983
1799 95791 92454
5954 95124 91752
6632 94280 107908
15339 94215 100006
6649 94172 100223
... ... ...
7323 1 0
17204 1 0
12287 1 0
12009 1 0
13336 1 0
9564 1 0
13481 1 0
13746 1 0
10061 1 0
16193 1 0
3842 1 0
3685 1 0
15641 1 0
4245 1 0
3138 1 0
16852 1 0
15640 1 0
8134 1 0
12329 1 0
15483 1 0
9875 1 0
7411 1 0
6608 1 0
7083 1 0
10258 1 0
10956 1 0
2255 1 0
7540 1 0
7032 1 0
8146 1 0

18334 rows × 2 columns

In [91]:
data3.idxmax()
Out[91]:
승차총승객수    5960
하차총승객수    5960
dtype: int64
In [89]:
data3.iloc[5960] # iloc 특정행의 정보를 가져오겠다.
Out[89]:
승차총승객수    132727
하차총승객수    137826
Name: 5960, dtype: int64
In [53]:
data.iloc[:10, [0,3]]
Out[53]:
사용일자 역명
0 20190101 가평
1 20190101 상천
2 20190101 청평
3 20190101 대성리
4 20190101 마석
5 20190101 천마산
6 20190101 평내호평
7 20190101 금곡
8 20190101 사릉
9 20190101 퇴계원
In [ ]:
1 - (2 - 3)
In [67]:
help(data.count)
Help on method count in module pandas.core.frame:

count(axis=0, level=None, numeric_only=False) method of pandas.core.frame.DataFrame instance
    Count non-NA cells for each column or row.
    
    The values `None`, `NaN`, `NaT`, and optionally `numpy.inf` (depending
    on `pandas.options.mode.use_inf_as_na`) are considered NA.
    
    Parameters
    ----------
    axis : {0 or 'index', 1 or 'columns'}, default 0
        If 0 or 'index' counts are generated for each column.
        If 1 or 'columns' counts are generated for each **row**.
    level : int or str, optional
        If the axis is a `MultiIndex` (hierarchical), count along a
        particular `level`, collapsing into a `DataFrame`.
        A `str` specifies the level name.
    numeric_only : boolean, default False
        Include only `float`, `int` or `boolean` data.
    
    Returns
    -------
    Series or DataFrame
        For each column/row the number of non-NA/null entries.
        If `level` is specified returns a `DataFrame`.
    
    See Also
    --------
    Series.count: number of non-NA elements in a Series
    DataFrame.shape: number of DataFrame rows and columns (including NA
        elements)
    DataFrame.isna: boolean same-sized DataFrame showing places of NA
        elements
    
    Examples
    --------
    Constructing DataFrame from a dictionary:
    
    >>> df = pd.DataFrame({"Person":
    ...                    ["John", "Myla", None, "John", "Myla"],
    ...                    "Age": [24., np.nan, 21., 33, 26],
    ...                    "Single": [False, True, True, True, False]})
    >>> df
       Person   Age  Single
    0    John  24.0   False
    1    Myla   NaN    True
    2    None  21.0    True
    3    John  33.0    True
    4    Myla  26.0   False
    
    Notice the uncounted NA values:
    
    >>> df.count()
    Person    4
    Age       4
    Single    5
    dtype: int64
    
    Counts for each **row**:
    
    >>> df.count(axis='columns')
    0    3
    1    2
    2    2
    3    3
    4    3
    dtype: int64
    
    Counts for one level of a `MultiIndex`:
    
    >>> df.set_index(["Person", "Single"]).count(level="Person")
            Age
    Person
    John      2
    Myla      1

In [66]:
#data[data.isnull()] = 0
data.count()
Out[66]:
사용일자      18334
노선명       18334
역ID       18334
역명        18334
승차총승객수    18334
하차총승객수    18334
등록일자      18334
dtype: int64

Datetime 으로 변환

In [102]:
pd.to_datetime(data.사용일자,format='%Y%m%d') # data.사용일자.astype(str) 으로 변환하지 않아도 됨
Out[102]:
0       2019-01-01
1       2019-01-01
2       2019-01-01
3       2019-01-01
4       2019-01-01
5       2019-01-01
6       2019-01-01
7       2019-01-01
8       2019-01-01
9       2019-01-01
10      2019-01-01
11      2019-01-01
12      2019-01-01
13      2019-01-01
14      2019-01-01
15      2019-01-01
16      2019-01-01
17      2019-01-01
18      2019-01-01
19      2019-01-01
20      2019-01-01
21      2019-01-01
22      2019-01-01
23      2019-01-01
24      2019-01-01
25      2019-01-01
26      2019-01-01
27      2019-01-01
28      2019-01-01
29      2019-01-01
           ...    
18304   2019-01-31
18305   2019-01-31
18306   2019-01-31
18307   2019-01-31
18308   2019-01-31
18309   2019-01-31
18310   2019-01-31
18311   2019-01-31
18312   2019-01-31
18313   2019-01-31
18314   2019-01-31
18315   2019-01-31
18316   2019-01-31
18317   2019-01-31
18318   2019-01-31
18319   2019-01-31
18320   2019-01-31
18321   2019-01-31
18322   2019-01-31
18323   2019-01-31
18324   2019-01-31
18325   2019-01-31
18326   2019-01-31
18327   2019-01-31
18328   2019-01-31
18329   2019-01-31
18330   2019-01-31
18331   2019-01-31
18332   2019-01-31
18333   2019-01-31
Name: 사용일자, Length: 18334, dtype: datetime64[ns]
In [106]:
data.역명.str.len()
Out[106]:
0         2
1         2
2         2
3         3
4         2
5         3
6         4
7         2
8         2
9         3
10        2
11        2
12        2
13        2
14        3
15        2
16        2
17        2
18        2
19        2
20        2
21        2
22        2
23        2
24        2
25        2
26        2
27        2
28        2
29        2
         ..
18304     2
18305     2
18306     8
18307     5
18308     4
18309     8
18310     4
18311    10
18312     8
18313     4
18314     2
18315     2
18316     3
18317     9
18318     4
18319     2
18320     9
18321     5
18322     5
18323     5
18324     2
18325     3
18326    12
18327     3
18328     3
18329     3
18330     4
18331     4
18332     2
18333     2
Name: 역명, Length: 18334, dtype: int64

상관관계

In [107]:
data3.corr()
Out[107]:
승차총승객수 하차총승객수
승차총승객수 1.000000 0.994333
하차총승객수 0.994333 1.000000
In [108]:
data3.cov()
Out[108]:
승차총승객수 하차총승객수
승차총승객수 1.681945e+08 1.696511e+08
하차총승객수 1.696511e+08 1.730764e+08
In [109]:
data.head() # data.tail()
Out[109]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
In [116]:
data.노선명.unique() # numpy array 출력
Out[116]:
array(['경춘선', '경인선', '경의선', '경원선', '경부선', '2호선', '경강선', '수인선', '분당선',
       '9호선2~3단계', '9호선', '8호선', '7호선', '6호선', '공항철도 1호선', '5호선', '4호선',
       '3호선', '1호선', '중앙선', '안산선', '우이신설선', '일산선', '장항선', '과천선'],
      dtype=object)
In [114]:
np.sort(data.역명.unique())
Out[114]:
array(['4.19민주묘지', '가능', '가락시장', '가산디지털단지', '가양', '가오리', '가좌', '가천대',
       '가평', '간석', '갈매', '강남', '강남구청', '강동', '강동구청', '강매', '강변(동서울터미널)',
       '강촌', '개롱', '개봉', '개포동', '개화', '개화산', '거여', '건대입구', '검암', '경기광주',
       '경마공원', '경복궁(정부서울청사)', '경찰병원', '계양', '고덕', '고려대(종암)', '고속터미널',
       '고잔', '곡산', '곤지암', '공덕', '공릉(서울과학기술대)', '공항시장', '공항화물청사', '과천',
       '관악', '광나루(장신대)', '광명', '광명사거리', '광운대', '광화문(세종문화회관)', '광흥창(서강)',
       '교대(법원.검찰청)', '구로', '구로디지털단지', '구룡', '구리', '구반포', '구산', '구성',
       '구의(광진구청)', '구일', '구파발', '국수', '국회의사당', '군자(능동)', '군포', '굴봉산',
       '굴포천', '굽은다리(강동구민회관앞)', '금곡', '금릉', '금정', '금천구청', '금촌', '금호', '기흥',
       '길동', '길음', '김유정', '김포공항', '까치산', '까치울', '낙성대', '남구로', '남동인더스파크',
       '남부터미널(예술의전당)', '남성', '남영', '남춘천', '남태령', '남한산성입구(성남법원.검찰청)', '내방',
       '노들', '노량진', '노원', '녹번', '녹사평(용산구청)', '녹양', '녹천', '논현', '능곡',
       '단대오거리', '달월', '답십리', '당고개', '당산', '당정', '대곡', '대공원', '대림(구로구청)',
       '대모산입구', '대방', '대성리', '대야미', '대청', '대치', '대화', '대흥(서강대앞)', '덕계',
       '덕소', '덕정', '도곡', '도농', '도림천', '도봉', '도봉산', '도심', '도원', '도화',
       '독립문', '독바위', '독산', '돌곶이', '동대문', '동대문역사문화공원', '동대입구', '동두천',
       '동두천중앙', '동묘앞', '동암', '동인천', '동작(현충원)', '두정', '둔촌동', '둔촌오륜', '등촌',
       '디지털미디어시티', '뚝섬', '뚝섬유원지', '마곡', '마곡나루', '마두', '마들', '마석', '마장',
       '마천', '마포', '마포구청', '망우', '망원', '망월사', '망포', '매교', '매봉', '매탄권선',
       '먹골', '면목', '명동', '명일', '명학', '모란', '목동', '몽촌토성(평화의문)', '무악재',
       '문래', '문산', '문정', '미금', '미아(서울사이버대학)', '미아사거리', '반월', '반포', '발산',
       '방배', '방이', '방학', '방화', '배방', '백마', '백석', '백양리', '백운', '버티고개',
       '범계', '별내', '병점', '보라매', '보문', '보산', '보정', '복정', '봉명', '봉은사', '봉천',
       '봉화산(서울의료원)', '부개', '부발', '부천', '부천시청', '부천종합운동장', '부평', '부평구청',
       '북한산보국문', '북한산우이', '불광', '사가정', '사당', '사릉', '사평', '산본', '산성',
       '삼각지', '삼동', '삼산체육관', '삼성(무역센터)', '삼성중앙', '삼송', '삼양', '삼양사거리',
       '삼전', '상갈', '상계', '상도', '상동', '상록수', '상봉(시외버스터미널)', '상수', '상왕십리',
       '상월곡(한국과학기술연구원)', '상일동', '상천', '새절(신사)', '샛강', '서강대', '서대문', '서동탄',
       '서빙고', '서울대입구(관악구청)', '서울숲', '서울역', '서정리', '서초', '서현', '석계', '석수',
       '석촌', '석촌고분', '선릉', '선바위', '선유도', '선정릉', '성균관대', '성수',
       '성신여대입구(돈암)', '성환', '세류', '세마', '세종대왕릉', '소래포구', '소사', '소요산',
       '솔밭공원', '솔샘', '송내', '송도', '송정', '송탄', '송파', '송파나루', '수내', '수락산',
       '수리산', '수색', '수서', '수원', '수원시청', '수유(강북구청)', '수진', '숙대입구(갈월)',
       '숭실대입구(살피재)', '숭의', '시청', '신갈', '신금호', '신길', '신길온천', '신내', '신논현',
       '신답', '신당', '신대방', '신대방삼거리', '신도림', '신둔도예촌', '신림', '신목동', '신반포',
       '신방화', '신사', '신설동', '신용산', '신원', '신이문', '신정(은행정)', '신정네거리', '신중동',
       '신창(순천향대)', '신촌', '신포', '신풍', '신흥', '쌍문', '쌍용(나사렛대)', '아산', '아신',
       '아차산(어린이대공원후문)', '아현', '안국', '안산', '안암(고대병원앞)', '안양', '암사', '압구정',
       '압구정로데오', '애오개', '야당', '야탑', '약수', '양수', '양원', '양재(서초구청)', '양정',
       '양주', '양천구청', '양천향교', '양평', '어린이대공원(세종대)', '언주', '여의나루', '여의도',
       '여주', '역곡', '역삼', '역촌', '연수', '연신내', '염창', '영등포', '영등포구청', '영등포시장',
       '영종', '영통', '오금', '오류동', '오리', '오목교(목동운동장앞)', '오빈', '오산', '오산대',
       '오이도', '옥수', '온수(성공회대입구)', '온양온천', '올림픽공원(한국체대)', '왕십리(성동구청)',
       '외대앞', '용답', '용두(동대문구청)', '용마산', '용문', '용산', '우장산', '운길산', '운서',
       '운정', '원당', '원덕', '원인재', '원흥', '월계', '월곡(동덕여대)', '월곶',
       '월드컵경기장(성산)', '월롱', '을지로3가', '을지로4가', '을지로입구', '응봉', '응암', '의왕',
       '의정부', '이대', '이매', '이수', '이천', '이촌(국립중앙박물관)', '이태원', '인덕원', '인천',
       '인천공항1터미널', '인천공항2터미널', '인천논현', '인하대', '일산', '일원', '잠실(송파구청)',
       '잠실나루', '잠실새내', '잠원', '장승배기', '장암', '장지', '장한평', '정릉', '정발산',
       '정부과천청사', '정왕', '정자', '제기동', '제물포', '종각', '종로3가', '종로5가', '종합운동장',
       '주안', '주엽', '죽전', '중계', '중곡', '중동', '중랑', '중앙', '중앙보훈병원', '중화',
       '증미', '증산(명지대앞)', '지제', '지축', '지평', '지행', '직산', '진위', '창동', '창신',
       '천마산', '천안', '천왕', '천호(풍납토성)', '철산', '청구', '청담', '청라국제도시',
       '청량리(서울시립대입구)', '청명', '청평', '초월', '초지', '총신대입구(이수)', '춘의', '춘천',
       '충무로', '충정로(경기대입구)', '탄현', '태릉입구', '태평', '퇴계원', '파주', '판교', '팔당',
       '평내호평', '평촌', '평택', '풍산', '하계', '학동', '학여울', '한강진', '한남', '한대앞',
       '한성대입구(삼선교)', '한성백제', '한양대', '한티', '합정', '행당', '행신', '혜화', '호구포',
       '홍대입구', '홍제', '화계', '화곡', '화랑대(서울여대입구)', '화서', '화전', '화정', '회기',
       '회룡', '회현(남대문시장)', '효창공원앞', '흑석(중앙대입구)'], dtype=object)
In [119]:
data.노선명.value_counts()
Out[119]:
5호선         1581
7호선         1581
2호선         1550
경부선         1209
6호선         1164
분당선         1071
3호선         1049
경원선          912
경의선          806
4호선          806
9호선          775
중앙선          651
경인선          620
경춘선          589
8호선          527
공항철도 1호선     434
수인선          403
9호선2~3단계     403
안산선          403
우이신설선        403
경강선          341
일산선          312
1호선          310
과천선          248
장항선          186
Name: 노선명, dtype: int64
In [121]:
s = data.역명.value_counts()
s[s%31 !=0]
Out[121]:
서울역     164
김포공항    102
홍대입구     95
충무로      57
복정       48
연신내      48
창동       44
계양       38
검암       35
지축       33
Name: 역명, dtype: int64
In [124]:
data[data.역명=='서울역']
Out[124]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
41 20190101 경의선 1251 서울역 1278 919 20190104
110 20190101 경부선 1001 서울역 5983 731 20190104
330 20190101 4호선 426 서울역 5689 13266 20190104
442 20190101 1호선 150 서울역 39420 31121 20190104
568 20190101 공항철도 1호선 4201 서울역 14043 9955 20190104
701 20190102 4호선 426 서울역 15111 22659 20190105
916 20190102 경부선 1001 서울역 6091 1049 20190105
984 20190102 경의선 1251 서울역 4232 5345 20190105
1049 20190102 공항철도 1호선 4201 서울역 14103 10718 20190105
1172 20190102 1호선 150 서울역 58404 52696 20190105
1314 20190103 공항철도 1호선 4201 서울역 12693 10044 20190106
1380 20190103 경의선 1251 서울역 4086 5327 20190106
1449 20190103 경부선 1001 서울역 4997 905 20190106
1660 20190103 4호선 426 서울역 14920 22519 20190106
1770 20190103 1호선 150 서울역 57623 53216 20190106
1920 20190104 4호선 426 서울역 15603 25794 20190107
2120 20190104 경부선 1001 서울역 7021 1192 20190107
2177 20190104 경의선 1251 서울역 4599 5743 20190107
2226 20190104 공항철도 1호선 4201 서울역 14869 11591 20190107
2359 20190104 1호선 150 서울역 67010 60532 20190107
2386 20190105 1호선 150 서울역 51353 48561 20190108
2498 20190105 4호선 426 서울역 9182 19741 20190108
2715 20190105 경부선 1001 서울역 6491 969 20190108
2783 20190105 경의선 1251 서울역 1571 1734 20190108
2859 20190105 공항철도 1호선 4201 서울역 13714 11375 20190108
2963 20190106 1호선 150 서울역 37856 33307 20190109
3098 20190106 공항철도 1호선 4201 서울역 12848 9630 20190109
3163 20190106 경의선 1251 서울역 1271 1083 20190109
3231 20190106 경부선 1001 서울역 5672 812 20190109
3443 20190106 4호선 426 서울역 6401 14527 20190109
... ... ... ... ... ... ... ...
15259 20190126 4호선 426 서울역 9456 22511 20190129
15370 20190126 1호선 150 서울역 54199 52733 20190129
15484 20190127 1호선 150 서울역 38998 36633 20190130
15600 20190127 공항철도 1호선 4201 서울역 12919 10596 20190130
15641 20190127 경의선 1291 서울역 1 0 20190130
15666 20190127 경의선 1251 서울역 1467 1233 20190130
15734 20190127 경부선 1001 서울역 6279 987 20190130
15947 20190127 4호선 426 서울역 6900 15941 20190130
15984 20190128 1호선 150 서울역 58650 56060 20190131
16153 20190128 공항철도 1호선 4201 서울역 12789 10854 20190131
16194 20190128 경의선 1291 서울역 2 0 20190131
16219 20190128 경의선 1251 서울역 4220 5639 20190131
16287 20190128 경부선 1001 서울역 5588 1071 20190131
16498 20190128 4호선 426 서울역 15628 23702 20190131
16640 20190129 경부선 1001 서울역 5494 1071 20190201
16791 20190129 경의선 1251 서울역 4275 5369 20190201
16810 20190129 공항철도 1호선 4201 서울역 11860 10242 20190201
16980 20190129 1호선 150 서울역 58360 55520 20190201
17093 20190129 4호선 426 서울역 15588 23755 20190201
17151 20190130 1호선 150 서울역 58931 55571 20190202
17179 20190130 경의선 1251 서울역 4220 5535 20190202
17204 20190130 경의선 1291 서울역 1 0 20190202
17244 20190130 공항철도 1호선 4201 서울역 12023 10027 20190202
17418 20190130 경부선 1001 서울역 5595 1070 20190202
17633 20190130 4호선 426 서울역 15580 23871 20190202
17748 20190131 1호선 150 서울역 57771 57117 20190203
17884 20190131 공항철도 1호선 4201 서울역 12105 10810 20190203
17928 20190131 경의선 1251 서울역 3972 5453 20190203
17988 20190131 경부선 1001 서울역 5104 1193 20190203
18203 20190131 4호선 426 서울역 15283 24285 20190203

164 rows × 7 columns

In [129]:
data.isin(['대성리']).head()
Out[129]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 False False False False False False False
1 False False False False False False False
2 False False False False False False False
3 False False False True False False False
4 False False False False False False False

NaN

  • dropna()
  • fillna()
  • isnull()
  • notnull()

==isnull, ==notnull을 이용하여 널값을 찾을수 있다.

인덱스 설정

  • set_index()
  • reset_index()
  • reindex()
  • rename() # 인덱스와 칼럼의 명칭 바꾸기
In [137]:
d = pd.DataFrame(np.arange(12).reshape(4,3))
d
Out[137]:
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
In [148]:
d.drop([1,2]).reset_index(drop=True)
Out[148]:
0 1 2
0 0 1 2
1 9 10 11
In [151]:
data.head()
Out[151]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
In [178]:
p = pd.pivot_table(data, values='승차총승객수', index='사용일자', columns='노선명', aggfunc=np.mean).reset_index()
wday={0:'월', 1:'화', 2:'수', 3:'목', 4:'금', 5:'토', 6:'일'}
p.insert(1, '요일', pd.to_datetime(p.사용일자, format='%Y%m%d').dt.dayofweek.map(wday))
p
Out[178]:
노선명 사용일자 요일 1호선 2호선 3호선 4호선 5호선 6호선 7호선 8호선 ... 경춘선 공항철도 1호선 과천선 분당선 수인선 안산선 우이신설선 일산선 장항선 중앙선
0 20190101 15295.5 13624.08 7108.411765 10613.538462 4885.941176 4410.684211 5844.882353 5008.235294 ... 1068.368421 5552.500000 4899.875 4401.411765 1785.076923 5196.538462 1726.000000 5170.400000 1729.666667 2197.190476
1 20190102 28386.1 32342.00 17164.264706 22394.730769 12758.666667 9424.236842 14909.098039 11785.882353 ... 1874.631579 8469.214286 14023.625 11034.285714 3427.384615 9720.461538 3271.153846 11702.200000 2089.666667 4435.523810
2 20190103 29592.5 33702.84 17881.382353 23318.000000 13137.647059 10095.918919 15274.019608 12094.882353 ... 1916.000000 8479.285714 14200.000 11437.800000 3548.846154 9898.692308 3386.000000 12048.900000 2138.500000 4643.571429
3 20190104 31664.8 35276.84 19443.151515 24231.153846 13534.058824 10527.513514 15751.156863 12827.000000 ... 2013.105263 8948.142857 15780.625 12376.285714 3721.538462 10452.307692 3493.153846 12459.000000 2648.833333 4794.619048
4 20190105 25247.3 25251.02 13766.147059 18629.576923 8932.529412 7642.648649 10723.843137 8723.294118 ... 1594.421053 6928.214286 12030.250 8690.882353 2774.307692 8354.230769 2727.692308 9272.900000 2255.666667 4053.476190
5 20190106 17574.4 17694.24 9817.727273 13388.692308 6294.450980 5461.552632 7644.509804 6364.588235 ... 1305.947368 5683.285714 9755.000 6162.735294 2249.692308 6424.538462 2292.461538 6958.900000 1844.333333 2895.571429
6 20190107 29460.1 33224.28 17652.705882 22749.500000 13041.627451 9655.315789 15350.176471 12094.764706 ... 1968.631579 8117.500000 13849.375 11368.571429 3566.230769 9997.076923 3373.461538 12072.900000 2166.833333 4629.238095
7 20190108 29955.2 33742.72 17991.588235 23310.307692 13252.882353 10106.756757 15371.843137 12274.882353 ... 1971.631579 8095.928571 14154.875 11506.885714 3530.923077 9925.076923 3449.461538 12056.200000 2129.000000 4692.238095
8 20190109 28726.1 33413.94 18313.939394 22785.269231 13081.156863 9701.710526 15279.411765 12249.000000 ... 1824.526316 7999.214286 14554.750 12021.735294 3490.538462 9820.384615 3312.076923 10809.636364 2274.000000 4514.047619
9 20190110 30103.2 34152.46 18661.393939 23337.115385 13292.039216 10153.648649 15451.725490 12301.882353 ... 1943.894737 8263.071429 14575.375 11966.676471 3558.230769 10124.000000 3408.384615 12091.800000 2161.000000 4753.523810
10 20190111 32108.4 35644.20 19143.088235 24303.730769 13584.215686 10570.783784 15870.549020 12731.411765 ... 2033.736842 8952.857143 15957.125 12624.617647 3793.076923 10702.076923 3527.923077 12612.000000 2520.833333 4861.476190
11 20190112 26814.4 26124.62 14537.470588 19352.884615 9114.764706 7729.815789 11068.254902 8818.882353 ... 1784.263158 7281.285714 12204.000 8921.882353 2963.076923 8751.923077 2851.153846 9645.900000 2418.666667 3985.142857
12 20190113 17741.0 18251.76 9758.941176 13693.846154 6256.019608 5505.631579 7859.431373 6386.176471 ... 1423.210526 5767.071429 9842.875 6061.314286 2293.615385 6830.076923 2160.384615 7002.600000 1993.833333 3045.714286
13 20190114 28666.5 32552.70 17408.911765 22222.769231 12824.117647 9455.421053 15112.313725 12082.352941 ... 1905.894737 8261.357143 13691.000 11300.971429 3376.615385 9787.615385 3269.384615 11718.800000 2340.833333 4469.761905
14 20190115 29400.6 33491.86 17749.470588 22892.115385 13116.607843 9998.216216 15267.803922 12101.705882 ... 1882.631579 8243.142857 13913.000 11287.114286 3393.000000 9800.615385 3332.846154 11859.200000 2068.000000 4598.238095
15 20190116 29605.6 33897.38 17923.411765 23047.461538 13198.431373 10118.000000 15289.607843 12198.294118 ... 1858.368421 8285.857143 14684.500 11538.628571 3472.076923 9828.153846 3374.384615 12161.400000 2078.500000 4605.809524
16 20190117 30716.8 34320.44 18512.323529 23484.269231 13392.078431 10021.552632 15477.058824 12339.352941 ... 1992.473684 8562.071429 14594.125 11669.228571 3582.076923 10094.538462 3460.769231 12255.700000 2160.166667 4662.285714
17 20190118 32380.4 35586.86 19395.941176 24344.269231 13609.235294 10662.459459 15855.921569 12686.411765 ... 2096.526316 9093.642857 15962.625 12579.911765 3686.461538 10720.384615 3522.076923 12505.800000 2451.500000 4876.476190
18 20190119 26445.3 25834.22 14579.382353 18944.307692 9155.882353 7646.894737 10985.784314 9124.823529 ... 1680.210526 7206.000000 12078.875 8980.257143 2952.076923 8851.692308 2724.153846 9517.500000 2736.833333 4002.952381
19 20190120 18177.7 18204.88 10024.588235 13815.115385 6369.862745 5679.105263 7980.666667 6499.882353 ... 1398.052632 5823.000000 10103.500 6321.235294 2217.076923 6883.923077 2221.923077 6991.800000 1917.666667 3129.285714
20 20190121 29176.8 32911.78 17544.529412 22469.769231 12898.549020 9456.947368 15122.705882 11942.882353 ... 1936.157895 8325.500000 13652.500 11563.823529 3436.846154 9934.076923 3380.230769 10803.454545 2161.833333 4518.809524
21 20190122 30385.1 33846.56 17992.058824 23197.115385 13262.921569 10083.351351 15413.686275 12179.058824 ... 2002.947368 8520.142857 14211.000 11482.314286 3565.692308 10010.846154 3460.769231 12098.100000 2089.166667 4624.619048
22 20190123 30479.8 34518.60 18108.676471 23512.730769 13388.117647 10191.567568 15538.431373 12337.235294 ... 1934.210526 8633.285714 15047.125 11996.970588 3619.384615 10161.153846 3470.230769 12227.900000 2115.666667 4767.666667
23 20190124 30946.7 34648.28 18948.727273 23583.461538 13410.764706 9925.052632 15492.117647 12598.176471 ... 1957.157895 8805.214286 14498.875 12038.685714 3548.769231 9983.000000 3474.615385 12130.600000 2467.000000 4708.428571
24 20190125 32804.4 36225.90 19456.088235 24601.961538 13724.921569 10660.756757 15974.882353 12842.058824 ... 2015.578947 9260.428571 15936.750 12719.617647 3643.538462 10483.461538 3586.307692 12535.600000 2335.166667 4938.095238
25 20190126 26851.7 26342.38 14711.441176 19448.000000 9294.705882 7963.447368 11107.058824 9019.941176 ... 1686.947368 7406.214286 12389.375 9052.911765 2881.769231 8514.769231 2781.153846 9966.900000 2301.166667 4048.952381
26 20190127 19390.4 18731.14 9972.705882 14107.576923 6706.196078 5811.027027 7918.215686 6544.823529 ... 1431.789474 5980.357143 10286.000 6180.085714 2286.769231 6753.846154 2189.153846 7299.300000 1892.166667 3033.476190
27 20190128 29776.7 33275.40 17783.794118 22917.730769 13090.568627 9629.657895 15320.588235 12150.705882 ... 1998.789474 8550.285714 13794.375 11711.058824 3412.076923 9842.307692 3450.153846 12039.900000 2130.666667 4715.095238
28 20190129 30298.7 33719.62 18035.676471 23317.230769 13236.196078 9839.657895 15432.588235 12560.000000 ... 1951.947368 8459.428571 14238.750 11861.171429 3517.230769 9880.307692 3494.923077 12036.700000 2457.666667 4660.285714
29 20190130 30727.1 33922.58 18246.264706 23645.807692 13465.254902 10041.131579 15561.529412 12385.705882 ... 1979.000000 8541.285714 15091.500 11685.514286 3574.769231 10075.384615 3533.153846 12358.600000 2171.666667 4835.666667
30 20190131 30242.6 33520.92 17966.588235 23120.192308 13240.607843 10148.162162 15374.941176 12296.588235 ... 1889.421053 8493.500000 14339.625 11456.714286 3381.461538 9796.153846 3497.769231 11909.300000 2073.833333 4612.714286

31 rows × 27 columns

In [175]:
dt = pd.to_datetime(data.사용일자, format='%Y%m%d')
dt.head()
Out[175]:
0   2019-01-01
1   2019-01-01
2   2019-01-01
3   2019-01-01
4   2019-01-01
Name: 사용일자, dtype: datetime64[ns]
In [157]:
dt.dt.dayofweek # 0 이 월요일
Out[157]:
0        1
1        1
2        1
3        1
4        1
5        1
6        1
7        1
8        1
9        1
10       1
11       1
12       1
13       1
14       1
15       1
16       1
17       1
18       1
19       1
20       1
21       1
22       1
23       1
24       1
25       1
26       1
27       1
28       1
29       1
        ..
18304    3
18305    3
18306    3
18307    3
18308    3
18309    3
18310    3
18311    3
18312    3
18313    3
18314    3
18315    3
18316    3
18317    3
18318    3
18319    3
18320    3
18321    3
18322    3
18323    3
18324    3
18325    3
18326    3
18327    3
18328    3
18329    3
18330    3
18331    3
18332    3
18333    3
Name: 사용일자, Length: 18334, dtype: int64

노선명 코드화

In [231]:
line_name = np.sort(data.노선명.unique())
line_code = pd.DataFrame(list(enumerate(line_name)), columns=['노선코드','노선명'])
line_code
Out[231]:
노선코드 노선명
0 0 1호선
1 1 2호선
2 2 3호선
3 3 4호선
4 4 5호선
5 5 6호선
6 6 7호선
7 7 8호선
8 8 9호선
9 9 9호선2~3단계
10 10 경강선
11 11 경부선
12 12 경원선
13 13 경의선
14 14 경인선
15 15 경춘선
16 16 공항철도 1호선
17 17 과천선
18 18 분당선
19 19 수인선
20 20 안산선
21 21 우이신설선
22 22 일산선
23 23 장항선
24 24 중앙선
In [260]:
s = data[['노선명','역ID']].drop_duplicates().노선명.value_counts()
line_code['역수'] = line_code.노선명.map(s)
line_code
Out[260]:
노선코드 노선명 역수
0 0 1호선 10
1 1 2호선 50
2 2 3호선 34
3 3 4호선 26
4 4 5호선 51
5 5 6호선 38
6 6 7호선 51
7 7 8호선 17
8 8 9호선 25
9 9 9호선2~3단계 13
10 10 경강선 11
11 11 경부선 39
12 12 경원선 30
13 13 경의선 30
14 14 경인선 20
15 15 경춘선 19
16 16 공항철도 1호선 14
17 17 과천선 8
18 18 분당선 35
19 19 수인선 13
20 20 안산선 13
21 21 우이신설선 13
22 22 일산선 11
23 23 장항선 6
24 24 중앙선 21
In [235]:
pd.merge(data.노선명.to_frame(),line_code)
Out[235]:
노선명 노선코드
0 경춘선 15
1 경춘선 15
2 경춘선 15
3 경춘선 15
4 경춘선 15
5 경춘선 15
6 경춘선 15
7 경춘선 15
8 경춘선 15
9 경춘선 15
10 경춘선 15
11 경춘선 15
12 경춘선 15
13 경춘선 15
14 경춘선 15
15 경춘선 15
16 경춘선 15
17 경춘선 15
18 경춘선 15
19 경춘선 15
20 경춘선 15
21 경춘선 15
22 경춘선 15
23 경춘선 15
24 경춘선 15
25 경춘선 15
26 경춘선 15
27 경춘선 15
28 경춘선 15
29 경춘선 15
... ... ...
18304 과천선 17
18305 과천선 17
18306 과천선 17
18307 과천선 17
18308 과천선 17
18309 과천선 17
18310 과천선 17
18311 과천선 17
18312 과천선 17
18313 과천선 17
18314 과천선 17
18315 과천선 17
18316 과천선 17
18317 과천선 17
18318 과천선 17
18319 과천선 17
18320 과천선 17
18321 과천선 17
18322 과천선 17
18323 과천선 17
18324 과천선 17
18325 과천선 17
18326 과천선 17
18327 과천선 17
18328 과천선 17
18329 과천선 17
18330 과천선 17
18331 과천선 17
18332 과천선 17
18333 과천선 17

18334 rows × 2 columns

In [237]:
line_code2 = pd.Series({s:i for i,s in enumerate(data.노선명.unique())})
line_code2
Out[237]:
경춘선          0
경인선          1
경의선          2
경원선          3
경부선          4
2호선          5
경강선          6
수인선          7
분당선          8
9호선2~3단계     9
9호선         10
8호선         11
7호선         12
6호선         13
공항철도 1호선    14
5호선         15
4호선         16
3호선         17
1호선         18
중앙선         19
안산선         20
우이신설선       21
일산선         22
장항선         23
과천선         24
dtype: int64
In [238]:
data.노선명.map(line_code2)
Out[238]:
0         0
1         0
2         0
3         0
4         0
5         0
6         0
7         0
8         0
9         0
10        0
11        0
12        1
13        1
14        1
15        1
16        2
17        2
18        2
19        2
20        2
21        2
22        2
23        2
24        2
25        2
26        2
27        2
28        2
29        2
         ..
18304     5
18305     5
18306     5
18307     5
18308     5
18309     5
18310     5
18311     5
18312     5
18313     5
18314     5
18315     5
18316     5
18317     5
18318     5
18319     5
18320     5
18321     5
18322     5
18323     5
18324     5
18325    18
18326    18
18327    18
18328    18
18329    18
18330    18
18331    18
18332    18
18333    18
Name: 노선명, Length: 18334, dtype: int64

역ID 코드 테이블

In [246]:
data[['역ID','역명','노선명']].values.tolist()
Out[246]:
[[1323, '가평', '경춘선'],
 [1322, '상천', '경춘선'],
 [1321, '청평', '경춘선'],
 [1320, '대성리', '경춘선'],
 [1319, '마석', '경춘선'],
 [1318, '천마산', '경춘선'],
 [1317, '평내호평', '경춘선'],
 [1316, '금곡', '경춘선'],
 [1315, '사릉', '경춘선'],
 [1314, '퇴계원', '경춘선'],
 [1313, '별내', '경춘선'],
 [1312, '갈매', '경춘선'],
 [1804, '부천', '경인선'],
 [1803, '역곡', '경인선'],
 [1802, '오류동', '경인선'],
 [1801, '개봉', '경인선'],
 [1296, '계양', '경의선'],
 [1284, '문산', '경의선'],
 [1283, '파주', '경의선'],
 [1282, '월롱', '경의선'],
 [1280, '금촌', '경의선'],
 [1279, '금릉', '경의선'],
 [1278, '운정', '경의선'],
 [1277, '야당', '경의선'],
 [1276, '탄현', '경의선'],
 [1275, '일산', '경의선'],
 [1274, '풍산', '경의선'],
 [1273, '백마', '경의선'],
 [1272, '곡산', '경의선'],
 [1271, '능곡', '경의선'],
 [1270, '행신', '경의선'],
 [1269, '강매', '경의선'],
 [1268, '화전', '경의선'],
 [1267, '수색', '경의선'],
 [1266, '디지털미디어시티', '경의선'],
 [1265, '가좌', '경의선'],
 [1264, '홍대입구', '경의선'],
 [1263, '서강대', '경의선'],
 [1262, '공덕', '경의선'],
 [1261, '효창공원앞', '경의선'],
 [1252, '신촌', '경의선'],
 [1251, '서울역', '경의선'],
 [1916, '소요산', '경원선'],
 [1915, '동두천', '경원선'],
 [1914, '보산', '경원선'],
 [1913, '동두천중앙', '경원선'],
 [1912, '지행', '경원선'],
 [1911, '덕정', '경원선'],
 [1910, '덕계', '경원선'],
 [1909, '양주', '경원선'],
 [1908, '녹양', '경원선'],
 [1907, '가능', '경원선'],
 [1906, '의정부', '경원선'],
 [1905, '회룡', '경원선'],
 [1904, '망월사', '경원선'],
 [1903, '도봉산', '경원선'],
 [1902, '도봉', '경원선'],
 [1901, '방학', '경원선'],
 [1021, '녹천', '경원선'],
 [1020, '월계', '경원선'],
 [1019, '광운대', '경원선'],
 [1018, '석계', '경원선'],
 [1017, '신이문', '경원선'],
 [1016, '외대앞', '경원선'],
 [1014, '청량리(서울시립대입구)', '경원선'],
 [1013, '왕십리(성동구청)', '경원선'],
 [1012, '응봉', '경원선'],
 [1011, '옥수', '경원선'],
 [1010, '한남', '경원선'],
 [1009, '서빙고', '경원선'],
 [1008, '이촌(국립중앙박물관)', '경원선'],
 [1750, '광명', '경부선'],
 [1749, '서동탄', '경부선'],
 [1729, '당정', '경부선'],
 [1728, '천안', '경부선'],
 [1727, '두정', '경부선'],
 [1726, '직산', '경부선'],
 [1725, '성환', '경부선'],
 [1724, '평택', '경부선'],
 [1723, '지제', '경부선'],
 [1722, '서정리', '경부선'],
 [1721, '송탄', '경부선'],
 [1720, '진위', '경부선'],
 [1719, '오산', '경부선'],
 [1718, '오산대', '경부선'],
 [1717, '세마', '경부선'],
 [1716, '병점', '경부선'],
 [1715, '세류', '경부선'],
 [1714, '독산', '경부선'],
 [1713, '수원', '경부선'],
 [1712, '화서', '경부선'],
 [1711, '성균관대', '경부선'],
 [1710, '의왕', '경부선'],
 [1709, '군포', '경부선'],
 [1708, '금정', '경부선'],
 [1707, '명학', '경부선'],
 [1706, '안양', '경부선'],
 [1705, '관악', '경부선'],
 [1704, '석수', '경부선'],
 [1703, '금천구청', '경부선'],
 [1702, '가산디지털단지', '경부선'],
 [224, '서초', '2호선'],
 [1701, '구로', '경부선'],
 [1032, '신길', '경부선'],
 [1007, '신도림', '경부선'],
 [1006, '영등포', '경부선'],
 [1005, '대방', '경부선'],
 [1004, '노량진', '경부선'],
 [1003, '용산', '경부선'],
 [1002, '남영', '경부선'],
 [1001, '서울역', '경부선'],
 [1511, '여주', '경강선'],
 [1510, '세종대왕릉', '경강선'],
 [1509, '부발', '경강선'],
 [1508, '이천', '경강선'],
 [1507, '신둔도예촌', '경강선'],
 [1879, '월곶', '수인선'],
 [1878, '달월', '수인선'],
 [1872, '매교', '분당선'],
 [1871, '수원시청', '분당선'],
 [1870, '매탄권선', '분당선'],
 [1869, '망포', '분당선'],
 [1506, '곤지암', '경강선'],
 [1505, '초월', '경강선'],
 [1504, '경기광주', '경강선'],
 [1503, '삼동', '경강선'],
 [1502, '이매', '경강선'],
 [1501, '판교', '경강선'],
 [4138, '중앙보훈병원', '9호선2~3단계'],
 [4137, '둔촌오륜', '9호선2~3단계'],
 [4136, '올림픽공원(한국체대)', '9호선2~3단계'],
 [4135, '한성백제', '9호선2~3단계'],
 [4134, '송파나루', '9호선2~3단계'],
 [4133, '석촌', '9호선2~3단계'],
 [4132, '석촌고분', '9호선2~3단계'],
 [4131, '삼전', '9호선2~3단계'],
 [4130, '종합운동장', '9호선2~3단계'],
 [4129, '봉은사', '9호선2~3단계'],
 [4128, '삼성중앙', '9호선2~3단계'],
 [4127, '선정릉', '9호선2~3단계'],
 [4126, '언주', '9호선2~3단계'],
 [4125, '신논현', '9호선'],
 [4124, '사평', '9호선'],
 [4123, '고속터미널', '9호선'],
 [4122, '신반포', '9호선'],
 [4121, '구반포', '9호선'],
 [4120, '동작(현충원)', '9호선'],
 [4119, '흑석(중앙대입구)', '9호선'],
 [4118, '노들', '9호선'],
 [4117, '노량진', '9호선'],
 [4116, '샛강', '9호선'],
 [4115, '여의도', '9호선'],
 [4114, '국회의사당', '9호선'],
 [4113, '당산', '9호선'],
 [4112, '선유도', '9호선'],
 [4111, '신목동', '9호선'],
 [4110, '염창', '9호선'],
 [4109, '등촌', '9호선'],
 [4108, '증미', '9호선'],
 [4106, '양천향교', '9호선'],
 [4105, '마곡나루', '9호선'],
 [4104, '신방화', '9호선'],
 [4103, '공항시장', '9호선'],
 [4102, '김포공항', '9호선'],
 [4101, '개화', '9호선'],
 [2827, '모란', '8호선'],
 [2826, '수진', '8호선'],
 [2825, '신흥', '8호선'],
 [2824, '단대오거리', '8호선'],
 [2823, '남한산성입구(성남법원.검찰청)', '8호선'],
 [2822, '산성', '8호선'],
 [2821, '복정', '8호선'],
 [2820, '장지', '8호선'],
 [2819, '문정', '8호선'],
 [2818, '가락시장', '8호선'],
 [2817, '송파', '8호선'],
 [2816, '석촌', '8호선'],
 [2815, '잠실(송파구청)', '8호선'],
 [2814, '몽촌토성(평화의문)', '8호선'],
 [2813, '강동구청', '8호선'],
 [2812, '천호(풍납토성)', '8호선'],
 [2811, '암사', '8호선'],
 [2761, '부평구청', '7호선'],
 [2760, '굴포천', '7호선'],
 [2759, '삼산체육관', '7호선'],
 [2758, '상동', '7호선'],
 [2757, '부천시청', '7호선'],
 [2756, '신중동', '7호선'],
 [2755, '춘의', '7호선'],
 [2754, '부천종합운동장', '7호선'],
 [2753, '까치울', '7호선'],
 [2752, '온수(성공회대입구)', '7호선'],
 [2750, '광명사거리', '7호선'],
 [2749, '철산', '7호선'],
 [2748, '가산디지털단지', '7호선'],
 [2747, '남구로', '7호선'],
 [2746, '대림(구로구청)', '7호선'],
 [2745, '신풍', '7호선'],
 [2744, '보라매', '7호선'],
 [2743, '신대방삼거리', '7호선'],
 [2742, '장승배기', '7호선'],
 [2741, '상도', '7호선'],
 [2740, '숭실대입구(살피재)', '7호선'],
 [2739, '남성', '7호선'],
 [2738, '이수', '7호선'],
 [2737, '내방', '7호선'],
 [2736, '고속터미널', '7호선'],
 [2735, '반포', '7호선'],
 [2734, '논현', '7호선'],
 [2733, '학동', '7호선'],
 [2732, '강남구청', '7호선'],
 [2731, '청담', '7호선'],
 [2730, '뚝섬유원지', '7호선'],
 [2729, '건대입구', '7호선'],
 [2728, '어린이대공원(세종대)', '7호선'],
 [2727, '군자(능동)', '7호선'],
 [2726, '중곡', '7호선'],
 [2725, '용마산', '7호선'],
 [2724, '사가정', '7호선'],
 [2723, '면목', '7호선'],
 [2722, '상봉(시외버스터미널)', '7호선'],
 [2721, '중화', '7호선'],
 [2720, '먹골', '7호선'],
 [2719, '태릉입구', '7호선'],
 [2718, '공릉(서울과학기술대)', '7호선'],
 [2717, '하계', '7호선'],
 [2716, '중계', '7호선'],
 [2715, '노원', '7호선'],
 [2714, '마들', '7호선'],
 [2713, '수락산', '7호선'],
 [2712, '도봉산', '7호선'],
 [2711, '장암', '7호선'],
 [2648, '봉화산(서울의료원)', '6호선'],
 [2647, '화랑대(서울여대입구)', '6호선'],
 [2646, '태릉입구', '6호선'],
 [2645, '석계', '6호선'],
 [2644, '돌곶이', '6호선'],
 [2643, '상월곡(한국과학기술연구원)', '6호선'],
 [2642, '월곡(동덕여대)', '6호선'],
 [2641, '고려대(종암)', '6호선'],
 [2640, '안암(고대병원앞)', '6호선'],
 [2639, '보문', '6호선'],
 [2638, '창신', '6호선'],
 [2637, '동묘앞', '6호선'],
 [2636, '신당', '6호선'],
 [2635, '청구', '6호선'],
 [2634, '약수', '6호선'],
 [2633, '버티고개', '6호선'],
 [2632, '한강진', '6호선'],
 [2631, '이태원', '6호선'],
 [2630, '녹사평(용산구청)', '6호선'],
 [2629, '삼각지', '6호선'],
 [2628, '효창공원앞', '6호선'],
 [2627, '공덕', '6호선'],
 [2626, '대흥(서강대앞)', '6호선'],
 [4209, '검암', '공항철도 1호선'],
 [2625, '광흥창(서강)', '6호선'],
 [2624, '상수', '6호선'],
 [2623, '합정', '6호선'],
 [2622, '망원', '6호선'],
 [2621, '마포구청', '6호선'],
 [2620, '월드컵경기장(성산)', '6호선'],
 [2619, '디지털미디어시티', '6호선'],
 [2618, '증산(명지대앞)', '6호선'],
 [2617, '새절(신사)', '6호선'],
 [2616, '구산', '6호선'],
 [2615, '연신내', '6호선'],
 [2614, '독바위', '6호선'],
 [2613, '불광', '6호선'],
 [2612, '역촌', '6호선'],
 [2611, '응암', '6호선'],
 [2561, '마천', '5호선'],
 [2560, '거여', '5호선'],
 [2559, '개롱', '5호선'],
 [2558, '오금', '5호선'],
 [2557, '방이', '5호선'],
 [2556, '올림픽공원(한국체대)', '5호선'],
 [2555, '둔촌동', '5호선'],
 [2554, '상일동', '5호선'],
 [2553, '고덕', '5호선'],
 [2552, '명일', '5호선'],
 [2551, '굽은다리(강동구민회관앞)', '5호선'],
 [2550, '길동', '5호선'],
 [2549, '강동', '5호선'],
 [2548, '천호(풍납토성)', '5호선'],
 [2547, '광나루(장신대)', '5호선'],
 [2546, '아차산(어린이대공원후문)', '5호선'],
 [2545, '군자(능동)', '5호선'],
 [2544, '장한평', '5호선'],
 [2543, '답십리', '5호선'],
 [2542, '마장', '5호선'],
 [2541, '왕십리(성동구청)', '5호선'],
 [2540, '행당', '5호선'],
 [2539, '신금호', '5호선'],
 [2538, '청구', '5호선'],
 [2537, '동대문역사문화공원', '5호선'],
 [2536, '을지로4가', '5호선'],
 [2535, '종로3가', '5호선'],
 [2534, '광화문(세종문화회관)', '5호선'],
 [2533, '서대문', '5호선'],
 [2532, '충정로(경기대입구)', '5호선'],
 [2531, '애오개', '5호선'],
 [2530, '공덕', '5호선'],
 [2529, '마포', '5호선'],
 [2528, '여의나루', '5호선'],
 [2527, '여의도', '5호선'],
 [2526, '신길', '5호선'],
 [2525, '영등포시장', '5호선'],
 [2524, '영등포구청', '5호선'],
 [2523, '양평', '5호선'],
 [2522, '오목교(목동운동장앞)', '5호선'],
 [2521, '목동', '5호선'],
 [2520, '신정(은행정)', '5호선'],
 [2519, '까치산', '5호선'],
 [2518, '화곡', '5호선'],
 [2517, '우장산', '5호선'],
 [2516, '발산', '5호선'],
 [2515, '마곡', '5호선'],
 [2514, '송정', '5호선'],
 [2513, '김포공항', '5호선'],
 [2512, '개화산', '5호선'],
 [2511, '방화', '5호선'],
 [434, '남태령', '4호선'],
 [433, '사당', '4호선'],
 [432, '총신대입구(이수)', '4호선'],
 [431, '동작(현충원)', '4호선'],
 [430, '이촌(국립중앙박물관)', '4호선'],
 [429, '신용산', '4호선'],
 [428, '삼각지', '4호선'],
 [427, '숙대입구(갈월)', '4호선'],
 [426, '서울역', '4호선'],
 [425, '회현(남대문시장)', '4호선'],
 [424, '명동', '4호선'],
 [423, '충무로', '4호선'],
 [422, '동대문역사문화공원', '4호선'],
 [421, '동대문', '4호선'],
 [420, '혜화', '4호선'],
 [419, '한성대입구(삼선교)', '4호선'],
 [418, '성신여대입구(돈암)', '4호선'],
 [417, '길음', '4호선'],
 [416, '미아사거리', '4호선'],
 [415, '미아(서울사이버대학)', '4호선'],
 [414, '수유(강북구청)', '4호선'],
 [413, '쌍문', '4호선'],
 [412, '창동', '4호선'],
 [411, '노원', '4호선'],
 [410, '상계', '4호선'],
 [409, '당고개', '4호선'],
 [342, '오금', '3호선'],
 [341, '경찰병원', '3호선'],
 [340, '가락시장', '3호선'],
 [339, '수서', '3호선'],
 [4107, '가양', '9호선'],
 [338, '일원', '3호선'],
 [337, '대청', '3호선'],
 [336, '학여울', '3호선'],
 [335, '대치', '3호선'],
 [334, '도곡', '3호선'],
 [333, '매봉', '3호선'],
 [332, '양재(서초구청)', '3호선'],
 [331, '남부터미널(예술의전당)', '3호선'],
 [330, '교대(법원.검찰청)', '3호선'],
 [329, '고속터미널', '3호선'],
 [328, '잠원', '3호선'],
 [327, '신사', '3호선'],
 [326, '압구정', '3호선'],
 [325, '옥수', '3호선'],
 [324, '금호', '3호선'],
 [323, '약수', '3호선'],
 [322, '동대입구', '3호선'],
 [321, '충무로', '3호선'],
 [320, '을지로3가', '3호선'],
 [319, '종로3가', '3호선'],
 [318, '안국', '3호선'],
 [317, '경복궁(정부서울청사)', '3호선'],
 [316, '독립문', '3호선'],
 [315, '무악재', '3호선'],
 [314, '홍제', '3호선'],
 [313, '녹번', '3호선'],
 [312, '불광', '3호선'],
 [311, '연신내', '3호선'],
 [310, '구파발', '3호선'],
 [309, '지축', '3호선'],
 [250, '용두(동대문구청)', '2호선'],
 [249, '신정네거리', '2호선'],
 [248, '양천구청', '2호선'],
 [247, '도림천', '2호선'],
 [246, '신설동', '2호선'],
 [245, '신답', '2호선'],
 [244, '용답', '2호선'],
 [243, '충정로(경기대입구)', '2호선'],
 [242, '아현', '2호선'],
 [241, '이대', '2호선'],
 [240, '신촌', '2호선'],
 [239, '홍대입구', '2호선'],
 [238, '합정', '2호선'],
 [237, '당산', '2호선'],
 [236, '영등포구청', '2호선'],
 [235, '문래', '2호선'],
 [234, '신도림', '2호선'],
 [233, '대림(구로구청)', '2호선'],
 [232, '구로디지털단지', '2호선'],
 [231, '신대방', '2호선'],
 [230, '신림', '2호선'],
 [229, '봉천', '2호선'],
 [228, '서울대입구(관악구청)', '2호선'],
 [227, '낙성대', '2호선'],
 [226, '사당', '2호선'],
 [225, '방배', '2호선'],
 [223, '교대(법원.검찰청)', '2호선'],
 [222, '강남', '2호선'],
 [221, '역삼', '2호선'],
 [220, '선릉', '2호선'],
 [219, '삼성(무역센터)', '2호선'],
 [218, '종합운동장', '2호선'],
 [217, '잠실새내', '2호선'],
 [216, '잠실(송파구청)', '2호선'],
 [215, '잠실나루', '2호선'],
 [214, '강변(동서울터미널)', '2호선'],
 [213, '구의(광진구청)', '2호선'],
 [212, '건대입구', '2호선'],
 [211, '성수', '2호선'],
 [210, '뚝섬', '2호선'],
 [209, '한양대', '2호선'],
 [208, '왕십리(성동구청)', '2호선'],
 [207, '상왕십리', '2호선'],
 [206, '신당', '2호선'],
 [205, '동대문역사문화공원', '2호선'],
 [204, '을지로4가', '2호선'],
 [203, '을지로3가', '2호선'],
 [202, '을지로입구', '2호선'],
 [201, '시청', '2호선'],
 [159, '동묘앞', '1호선'],
 [158, '청량리(서울시립대입구)', '1호선'],
 [157, '제기동', '1호선'],
 [156, '신설동', '1호선'],
 [155, '동대문', '1호선'],
 [154, '종로5가', '1호선'],
 [153, '종로3가', '1호선'],
 [1022, '창동', '경원선'],
 [152, '종각', '1호선'],
 [151, '시청', '1호선'],
 [150, '서울역', '1호선'],
 [1220, '지평', '중앙선'],
 [1861, '보정', '분당선'],
 [1862, '죽전', '분당선'],
 [1863, '구성', '분당선'],
 [1864, '신갈', '분당선'],
 [1865, '기흥', '분당선'],
 [1866, '상갈', '분당선'],
 [1867, '청명', '분당선'],
 [1868, '영통', '분당선'],
 [1880, '소래포구', '수인선'],
 [1881, '인천논현', '수인선'],
 [1882, '호구포', '수인선'],
 [1883, '남동인더스파크', '수인선'],
 [1884, '원인재', '수인선'],
 [1885, '연수', '수인선'],
 [1886, '송도', '수인선'],
 [1888, '인하대', '수인선'],
 [1889, '숭의', '수인선'],
 [1890, '신포', '수인선'],
 [1891, '인천', '수인선'],
 [1751, '산본', '안산선'],
 [1752, '대야미', '안산선'],
 [1753, '반월', '안산선'],
 [1754, '상록수', '안산선'],
 [1755, '한대앞', '안산선'],
 [1756, '중앙', '안산선'],
 [1757, '고잔', '안산선'],
 [1758, '초지', '안산선'],
 [1759, '안산', '안산선'],
 [1760, '신길온천', '안산선'],
 [1761, '정왕', '안산선'],
 [1762, '오이도', '안산선'],
 [1763, '수리산', '안산선'],
 [4701, '북한산우이', '우이신설선'],
 [4702, '솔밭공원', '우이신설선'],
 [4703, '4.19민주묘지', '우이신설선'],
 [4704, '가오리', '우이신설선'],
 [4705, '화계', '우이신설선'],
 [4706, '삼양', '우이신설선'],
 [4707, '삼양사거리', '우이신설선'],
 [4708, '솔샘', '우이신설선'],
 [4709, '북한산보국문', '우이신설선'],
 [4710, '정릉', '우이신설선'],
 [4711, '성신여대입구(돈암)', '우이신설선'],
 [4712, '보문', '우이신설선'],
 [4713, '신설동', '우이신설선'],
 [1948, '원흥', '일산선'],
 [1950, '삼송', '일산선'],
 [1951, '원당', '일산선'],
 [1952, '화정', '일산선'],
 [1953, '대곡', '일산선'],
 [1954, '백석', '일산선'],
 [1955, '마두', '일산선'],
 [1956, '정발산', '일산선'],
 [1957, '주엽', '일산선'],
 [1958, '대화', '일산선'],
 [1401, '봉명', '장항선'],
 [1402, '쌍용(나사렛대)', '장항선'],
 [1403, '아산', '장항선'],
 [1405, '배방', '장항선'],
 [1407, '온양온천', '장항선'],
 [1408, '신창(순천향대)', '장항선'],
 [1015, '회기', '중앙선'],
 [1201, '중랑', '중앙선'],
 [1202, '상봉(시외버스터미널)', '중앙선'],
 [1203, '망우', '중앙선'],
 [1204, '양원', '중앙선'],
 [1205, '구리', '중앙선'],
 [1206, '도농', '중앙선'],
 [1207, '양정', '중앙선'],
 [1208, '덕소', '중앙선'],
 [1209, '도심', '중앙선'],
 [1210, '팔당', '중앙선'],
 [1211, '운길산', '중앙선'],
 [1454, '정부과천청사', '과천선'],
 [1455, '인덕원', '과천선'],
 [1456, '평촌', '과천선'],
 [1457, '범계', '과천선'],
 [1023, '선릉', '분당선'],
 [1024, '한티', '분당선'],
 [1025, '도곡', '분당선'],
 [1026, '구룡', '분당선'],
 [1027, '개포동', '분당선'],
 [1028, '대모산입구', '분당선'],
 [1311, '신내', '경춘선'],
 [1823, '도화', '경인선'],
 [1822, '중동', '경인선'],
 [1821, '온수(성공회대입구)', '경인선'],
 [1817, '도원', '경인선'],
 [1816, '간석', '경인선'],
 [1815, '부개', '경인선'],
 [1814, '소사', '경인선'],
 [1813, '구일', '경인선'],
 [1812, '인천', '경인선'],
 [1811, '동인천', '경인선'],
 [1810, '제물포', '경인선'],
 [1809, '주안', '경인선'],
 [1808, '동암', '경인선'],
 [1807, '백운', '경인선'],
 [1806, '부평', '경인선'],
 [1805, '송내', '경인선'],
 [1030, '수서', '분당선'],
 [2751, '천왕', '7호선'],
 [1846, '수원', '분당선'],
 [1847, '서울숲', '분당선'],
 [1848, '압구정로데오', '분당선'],
 [1849, '강남구청', '분당선'],
 [1850, '선정릉', '분당선'],
 [1851, '가천대', '분당선'],
 [1852, '태평', '분당선'],
 [1853, '모란', '분당선'],
 [1854, '야탑', '분당선'],
 [1855, '서현', '분당선'],
 [1856, '수내', '분당선'],
 [1857, '정자', '분당선'],
 [1858, '미금', '분당선'],
 [1859, '오리', '분당선'],
 [1860, '이매', '분당선'],
 [4208, '계양', '공항철도 1호선'],
 [4210, '청라국제도시', '공항철도 1호선'],
 [4207, '김포공항', '공항철도 1호선'],
 [4206, '마곡나루', '공항철도 1호선'],
 [4204, '디지털미디어시티', '공항철도 1호선'],
 [4203, '홍대입구', '공항철도 1호선'],
 [4202, '공덕', '공항철도 1호선'],
 [4201, '서울역', '공항철도 1호선'],
 [1329, '춘천', '경춘선'],
 [1328, '남춘천', '경춘선'],
 [1327, '김유정', '경춘선'],
 [1326, '강촌', '경춘선'],
 [1325, '백양리', '경춘선'],
 [1324, '굴봉산', '경춘선'],
 [4211, '운서', '공항철도 1호선'],
 [4212, '공항화물청사', '공항철도 1호선'],
 [4213, '인천공항1터미널', '공항철도 1호선'],
 [4215, '인천공항2터미널', '공항철도 1호선'],
 [4217, '영종', '공항철도 1호선'],
 [1450, '선바위', '과천선'],
 [1451, '경마공원', '과천선'],
 [1452, '대공원', '과천선'],
 [1453, '과천', '과천선'],
 [1212, '양수', '중앙선'],
 [1213, '신원', '중앙선'],
 [1214, '국수', '중앙선'],
 [1215, '아신', '중앙선'],
 [1216, '오빈', '중앙선'],
 [1217, '양평', '중앙선'],
 [1218, '원덕', '중앙선'],
 [1219, '용문', '중앙선'],
 [1024, '한티', '분당선'],
 [203, '을지로3가', '2호선'],
 [204, '을지로4가', '2호선'],
 [205, '동대문역사문화공원', '2호선'],
 [206, '신당', '2호선'],
 [207, '상왕십리', '2호선'],
 [208, '왕십리(성동구청)', '2호선'],
 [209, '한양대', '2호선'],
 [210, '뚝섬', '2호선'],
 [211, '성수', '2호선'],
 [212, '건대입구', '2호선'],
 [213, '구의(광진구청)', '2호선'],
 [214, '강변(동서울터미널)', '2호선'],
 [215, '잠실나루', '2호선'],
 [216, '잠실(송파구청)', '2호선'],
 [217, '잠실새내', '2호선'],
 [218, '종합운동장', '2호선'],
 [219, '삼성(무역센터)', '2호선'],
 [220, '선릉', '2호선'],
 [221, '역삼', '2호선'],
 [222, '강남', '2호선'],
 [223, '교대(법원.검찰청)', '2호선'],
 [224, '서초', '2호선'],
 [225, '방배', '2호선'],
 [226, '사당', '2호선'],
 [227, '낙성대', '2호선'],
 [1212, '양수', '중앙선'],
 [1213, '신원', '중앙선'],
 [1214, '국수', '중앙선'],
 [1220, '지평', '중앙선'],
 [1219, '용문', '중앙선'],
 [1218, '원덕', '중앙선'],
 [1217, '양평', '중앙선'],
 [1216, '오빈', '중앙선'],
 [1215, '아신', '중앙선'],
 [228, '서울대입구(관악구청)', '2호선'],
 [229, '봉천', '2호선'],
 [230, '신림', '2호선'],
 [231, '신대방', '2호선'],
 [232, '구로디지털단지', '2호선'],
 [233, '대림(구로구청)', '2호선'],
 [234, '신도림', '2호선'],
 [235, '문래', '2호선'],
 [236, '영등포구청', '2호선'],
 [237, '당산', '2호선'],
 [238, '합정', '2호선'],
 [239, '홍대입구', '2호선'],
 [240, '신촌', '2호선'],
 [241, '이대', '2호선'],
 [242, '아현', '2호선'],
 [243, '충정로(경기대입구)', '2호선'],
 [244, '용답', '2호선'],
 [245, '신답', '2호선'],
 [246, '신설동', '2호선'],
 [247, '도림천', '2호선'],
 [248, '양천구청', '2호선'],
 [249, '신정네거리', '2호선'],
 [250, '용두(동대문구청)', '2호선'],
 [309, '지축', '3호선'],
 [310, '구파발', '3호선'],
 [311, '연신내', '3호선'],
 [312, '불광', '3호선'],
 [313, '녹번', '3호선'],
 [314, '홍제', '3호선'],
 [315, '무악재', '3호선'],
 [316, '독립문', '3호선'],
 [317, '경복궁(정부서울청사)', '3호선'],
 [318, '안국', '3호선'],
 [319, '종로3가', '3호선'],
 [320, '을지로3가', '3호선'],
 [321, '충무로', '3호선'],
 [322, '동대입구', '3호선'],
 [323, '약수', '3호선'],
 [324, '금호', '3호선'],
 [325, '옥수', '3호선'],
 [326, '압구정', '3호선'],
 [327, '신사', '3호선'],
 [328, '잠원', '3호선'],
 [329, '고속터미널', '3호선'],
 [330, '교대(법원.검찰청)', '3호선'],
 [331, '남부터미널(예술의전당)', '3호선'],
 [332, '양재(서초구청)', '3호선'],
 [333, '매봉', '3호선'],
 [334, '도곡', '3호선'],
 [335, '대치', '3호선'],
 [336, '학여울', '3호선'],
 [337, '대청', '3호선'],
 [338, '일원', '3호선'],
 [339, '수서', '3호선'],
 [340, '가락시장', '3호선'],
 [341, '경찰병원', '3호선'],
 [342, '오금', '3호선'],
 [409, '당고개', '4호선'],
 [410, '상계', '4호선'],
 [411, '노원', '4호선'],
 [412, '창동', '4호선'],
 [413, '쌍문', '4호선'],
 [414, '수유(강북구청)', '4호선'],
 [415, '미아(서울사이버대학)', '4호선'],
 [416, '미아사거리', '4호선'],
 [417, '길음', '4호선'],
 [418, '성신여대입구(돈암)', '4호선'],
 [419, '한성대입구(삼선교)', '4호선'],
 [420, '혜화', '4호선'],
 [421, '동대문', '4호선'],
 [422, '동대문역사문화공원', '4호선'],
 [423, '충무로', '4호선'],
 [424, '명동', '4호선'],
 [425, '회현(남대문시장)', '4호선'],
 [426, '서울역', '4호선'],
 [427, '숙대입구(갈월)', '4호선'],
 [428, '삼각지', '4호선'],
 [429, '신용산', '4호선'],
 [430, '이촌(국립중앙박물관)', '4호선'],
 [431, '동작(현충원)', '4호선'],
 [432, '총신대입구(이수)', '4호선'],
 [433, '사당', '4호선'],
 [434, '남태령', '4호선'],
 [2511, '방화', '5호선'],
 [2512, '개화산', '5호선'],
 [2513, '김포공항', '5호선'],
 [2514, '송정', '5호선'],
 [2515, '마곡', '5호선'],
 [2516, '발산', '5호선'],
 [2517, '우장산', '5호선'],
 [2518, '화곡', '5호선'],
 [2519, '까치산', '5호선'],
 [2520, '신정(은행정)', '5호선'],
 [2521, '목동', '5호선'],
 [2522, '오목교(목동운동장앞)', '5호선'],
 [2523, '양평', '5호선'],
 [2524, '영등포구청', '5호선'],
 [2525, '영등포시장', '5호선'],
 [2526, '신길', '5호선'],
 [2527, '여의도', '5호선'],
 [2528, '여의나루', '5호선'],
 [2529, '마포', '5호선'],
 [2530, '공덕', '5호선'],
 [2531, '애오개', '5호선'],
 [2532, '충정로(경기대입구)', '5호선'],
 [2533, '서대문', '5호선'],
 [2534, '광화문(세종문화회관)', '5호선'],
 [2535, '종로3가', '5호선'],
 [2536, '을지로4가', '5호선'],
 [2537, '동대문역사문화공원', '5호선'],
 [2538, '청구', '5호선'],
 [2539, '신금호', '5호선'],
 [2540, '행당', '5호선'],
 [2541, '왕십리(성동구청)', '5호선'],
 [2542, '마장', '5호선'],
 [2543, '답십리', '5호선'],
 [2544, '장한평', '5호선'],
 [2545, '군자(능동)', '5호선'],
 [2546, '아차산(어린이대공원후문)', '5호선'],
 [2547, '광나루(장신대)', '5호선'],
 [2548, '천호(풍납토성)', '5호선'],
 [2549, '강동', '5호선'],
 [2550, '길동', '5호선'],
 [2551, '굽은다리(강동구민회관앞)', '5호선'],
 [2552, '명일', '5호선'],
 [2553, '고덕', '5호선'],
 [2554, '상일동', '5호선'],
 [2555, '둔촌동', '5호선'],
 [2556, '올림픽공원(한국체대)', '5호선'],
 [2557, '방이', '5호선'],
 [2558, '오금', '5호선'],
 [2559, '개롱', '5호선'],
 [2560, '거여', '5호선'],
 [2561, '마천', '5호선'],
 [2611, '응암', '6호선'],
 [2612, '역촌', '6호선'],
 [2613, '불광', '6호선'],
 [2614, '독바위', '6호선'],
 [2615, '연신내', '6호선'],
 [2616, '구산', '6호선'],
 [2617, '새절(신사)', '6호선'],
 [2618, '증산(명지대앞)', '6호선'],
 [2619, '디지털미디어시티', '6호선'],
 [2620, '월드컵경기장(성산)', '6호선'],
 [2621, '마포구청', '6호선'],
 [2622, '망원', '6호선'],
 [2623, '합정', '6호선'],
 [2624, '상수', '6호선'],
 [2625, '광흥창(서강)', '6호선'],
 [2626, '대흥(서강대앞)', '6호선'],
 [2627, '공덕', '6호선'],
 [2628, '효창공원앞', '6호선'],
 [2629, '삼각지', '6호선'],
 [2630, '녹사평(용산구청)', '6호선'],
 [2631, '이태원', '6호선'],
 [2632, '한강진', '6호선'],
 [2633, '버티고개', '6호선'],
 [2634, '약수', '6호선'],
 [2635, '청구', '6호선'],
 [2636, '신당', '6호선'],
 [2637, '동묘앞', '6호선'],
 [2638, '창신', '6호선'],
 [2639, '보문', '6호선'],
 [2640, '안암(고대병원앞)', '6호선'],
 [2641, '고려대(종암)', '6호선'],
 [2642, '월곡(동덕여대)', '6호선'],
 [2643, '상월곡(한국과학기술연구원)', '6호선'],
 [2644, '돌곶이', '6호선'],
 [2645, '석계', '6호선'],
 [2646, '태릉입구', '6호선'],
 [2647, '화랑대(서울여대입구)', '6호선'],
 [2648, '봉화산(서울의료원)', '6호선'],
 [2711, '장암', '7호선'],
 [2712, '도봉산', '7호선'],
 [2713, '수락산', '7호선'],
 [2714, '마들', '7호선'],
 [2715, '노원', '7호선'],
 [2716, '중계', '7호선'],
 [2717, '하계', '7호선'],
 [2718, '공릉(서울과학기술대)', '7호선'],
 [2719, '태릉입구', '7호선'],
 [2720, '먹골', '7호선'],
 [2721, '중화', '7호선'],
 [2722, '상봉(시외버스터미널)', '7호선'],
 [2723, '면목', '7호선'],
 [2724, '사가정', '7호선'],
 [2725, '용마산', '7호선'],
 [2726, '중곡', '7호선'],
 [2727, '군자(능동)', '7호선'],
 [2728, '어린이대공원(세종대)', '7호선'],
 [2729, '건대입구', '7호선'],
 [2730, '뚝섬유원지', '7호선'],
 [2731, '청담', '7호선'],
 [2732, '강남구청', '7호선'],
 [2733, '학동', '7호선'],
 [2734, '논현', '7호선'],
 [2735, '반포', '7호선'],
 [2736, '고속터미널', '7호선'],
 [2737, '내방', '7호선'],
 [2738, '이수', '7호선'],
 [2739, '남성', '7호선'],
 [2740, '숭실대입구(살피재)', '7호선'],
 [2741, '상도', '7호선'],
 [2742, '장승배기', '7호선'],
 [2743, '신대방삼거리', '7호선'],
 [2744, '보라매', '7호선'],
 [2745, '신풍', '7호선'],
 [2746, '대림(구로구청)', '7호선'],
 [2747, '남구로', '7호선'],
 [2748, '가산디지털단지', '7호선'],
 [2749, '철산', '7호선'],
 [2750, '광명사거리', '7호선'],
 [2751, '천왕', '7호선'],
 [2752, '온수(성공회대입구)', '7호선'],
 [2753, '까치울', '7호선'],
 [2754, '부천종합운동장', '7호선'],
 [2755, '춘의', '7호선'],
 [2756, '신중동', '7호선'],
 [2757, '부천시청', '7호선'],
 [2758, '상동', '7호선'],
 [2759, '삼산체육관', '7호선'],
 [2760, '굴포천', '7호선'],
 [2761, '부평구청', '7호선'],
 [2811, '암사', '8호선'],
 [2812, '천호(풍납토성)', '8호선'],
 [2813, '강동구청', '8호선'],
 [2814, '몽촌토성(평화의문)', '8호선'],
 [2815, '잠실(송파구청)', '8호선'],
 [2816, '석촌', '8호선'],
 [2817, '송파', '8호선'],
 [2818, '가락시장', '8호선'],
 [2819, '문정', '8호선'],
 [2820, '장지', '8호선'],
 [2821, '복정', '8호선'],
 [2822, '산성', '8호선'],
 [2823, '남한산성입구(성남법원.검찰청)', '8호선'],
 [2824, '단대오거리', '8호선'],
 [2825, '신흥', '8호선'],
 [2826, '수진', '8호선'],
 [2827, '모란', '8호선'],
 [4101, '개화', '9호선'],
 [4102, '김포공항', '9호선'],
 [4103, '공항시장', '9호선'],
 [4104, '신방화', '9호선'],
 [4105, '마곡나루', '9호선'],
 [4106, '양천향교', '9호선'],
 [4107, '가양', '9호선'],
 [4108, '증미', '9호선'],
 [4109, '등촌', '9호선'],
 [4110, '염창', '9호선'],
 [4111, '신목동', '9호선'],
 [4112, '선유도', '9호선'],
 [4113, '당산', '9호선'],
 [4114, '국회의사당', '9호선'],
 [4115, '여의도', '9호선'],
 [4116, '샛강', '9호선'],
 [4117, '노량진', '9호선'],
 [4118, '노들', '9호선'],
 [4119, '흑석(중앙대입구)', '9호선'],
 [4120, '동작(현충원)', '9호선'],
 [4121, '구반포', '9호선'],
 [4122, '신반포', '9호선'],
 [4123, '고속터미널', '9호선'],
 [4124, '사평', '9호선'],
 [4125, '신논현', '9호선'],
 [4126, '언주', '9호선2~3단계'],
 [4127, '선정릉', '9호선2~3단계'],
 [4128, '삼성중앙', '9호선2~3단계'],
 [4129, '봉은사', '9호선2~3단계'],
 [4130, '종합운동장', '9호선2~3단계'],
 [4131, '삼전', '9호선2~3단계'],
 [4132, '석촌고분', '9호선2~3단계'],
 [4133, '석촌', '9호선2~3단계'],
 [4134, '송파나루', '9호선2~3단계'],
 [4135, '한성백제', '9호선2~3단계'],
 [4136, '올림픽공원(한국체대)', '9호선2~3단계'],
 [4137, '둔촌오륜', '9호선2~3단계'],
 [4138, '중앙보훈병원', '9호선2~3단계'],
 [1501, '판교', '경강선'],
 [1502, '이매', '경강선'],
 [1503, '삼동', '경강선'],
 [1504, '경기광주', '경강선'],
 [1505, '초월', '경강선'],
 [1506, '곤지암', '경강선'],
 [1507, '신둔도예촌', '경강선'],
 [1508, '이천', '경강선'],
 [1509, '부발', '경강선'],
 [1510, '세종대왕릉', '경강선'],
 [1511, '여주', '경강선'],
 [1001, '서울역', '경부선'],
 [1002, '남영', '경부선'],
 [1003, '용산', '경부선'],
 [1004, '노량진', '경부선'],
 [1005, '대방', '경부선'],
 [1006, '영등포', '경부선'],
 [1007, '신도림', '경부선'],
 [1032, '신길', '경부선'],
 [1701, '구로', '경부선'],
 [1702, '가산디지털단지', '경부선'],
 [1703, '금천구청', '경부선'],
 [1704, '석수', '경부선'],
 [1705, '관악', '경부선'],
 [1706, '안양', '경부선'],
 [1707, '명학', '경부선'],
 [1708, '금정', '경부선'],
 [1709, '군포', '경부선'],
 [1710, '의왕', '경부선'],
 [1711, '성균관대', '경부선'],
 [1712, '화서', '경부선'],
 [1713, '수원', '경부선'],
 [1714, '독산', '경부선'],
 [1715, '세류', '경부선'],
 [1716, '병점', '경부선'],
 [1717, '세마', '경부선'],
 [1718, '오산대', '경부선'],
 [1719, '오산', '경부선'],
 [1720, '진위', '경부선'],
 [1721, '송탄', '경부선'],
 [1722, '서정리', '경부선'],
 [1723, '지제', '경부선'],
 [1724, '평택', '경부선'],
 [1725, '성환', '경부선'],
 [1726, '직산', '경부선'],
 [1727, '두정', '경부선'],
 [1728, '천안', '경부선'],
 [1729, '당정', '경부선'],
 [1749, '서동탄', '경부선'],
 [1750, '광명', '경부선'],
 [1008, '이촌(국립중앙박물관)', '경원선'],
 [1009, '서빙고', '경원선'],
 [1010, '한남', '경원선'],
 [1011, '옥수', '경원선'],
 [1012, '응봉', '경원선'],
 [1013, '왕십리(성동구청)', '경원선'],
 [1014, '청량리(서울시립대입구)', '경원선'],
 [1016, '외대앞', '경원선'],
 [1017, '신이문', '경원선'],
 [1018, '석계', '경원선'],
 [1019, '광운대', '경원선'],
 [1020, '월계', '경원선'],
 [1021, '녹천', '경원선'],
 [1901, '방학', '경원선'],
 [1902, '도봉', '경원선'],
 [1903, '도봉산', '경원선'],
 [1904, '망월사', '경원선'],
 [1905, '회룡', '경원선'],
 [1906, '의정부', '경원선'],
 [1907, '가능', '경원선'],
 [1908, '녹양', '경원선'],
 [1909, '양주', '경원선'],
 [1910, '덕계', '경원선'],
 [1911, '덕정', '경원선'],
 [1912, '지행', '경원선'],
 [1913, '동두천중앙', '경원선'],
 [1914, '보산', '경원선'],
 [1915, '동두천', '경원선'],
 [1916, '소요산', '경원선'],
 [1251, '서울역', '경의선'],
 [1252, '신촌', '경의선'],
 [1261, '효창공원앞', '경의선'],
 [1262, '공덕', '경의선'],
 [1263, '서강대', '경의선'],
 [1264, '홍대입구', '경의선'],
 [1265, '가좌', '경의선'],
 [1266, '디지털미디어시티', '경의선'],
 [1267, '수색', '경의선'],
 [1268, '화전', '경의선'],
 [1269, '강매', '경의선'],
 [1270, '행신', '경의선'],
 [1271, '능곡', '경의선'],
 [1272, '곡산', '경의선'],
 [1273, '백마', '경의선'],
 [1274, '풍산', '경의선'],
 ...]
In [247]:
station_code = data[['역ID','역명','노선명']].drop_duplicates().sort_values('역ID').reset_index(drop=True)
station_code
Out[247]:
역ID 역명 노선명
0 150 서울역 1호선
1 151 시청 1호선
2 152 종각 1호선
3 153 종로3가 1호선
4 154 종로5가 1호선
5 155 동대문 1호선
6 156 신설동 1호선
7 157 제기동 1호선
8 158 청량리(서울시립대입구) 1호선
9 159 동묘앞 1호선
10 201 시청 2호선
11 202 을지로입구 2호선
12 203 을지로3가 2호선
13 204 을지로4가 2호선
14 205 동대문역사문화공원 2호선
15 206 신당 2호선
16 207 상왕십리 2호선
17 208 왕십리(성동구청) 2호선
18 209 한양대 2호선
19 210 뚝섬 2호선
20 211 성수 2호선
21 212 건대입구 2호선
22 213 구의(광진구청) 2호선
23 214 강변(동서울터미널) 2호선
24 215 잠실나루 2호선
25 216 잠실(송파구청) 2호선
26 217 잠실새내 2호선
27 218 종합운동장 2호선
28 219 삼성(무역센터) 2호선
29 220 선릉 2호선
... ... ... ...
568 4136 올림픽공원(한국체대) 9호선2~3단계
569 4137 둔촌오륜 9호선2~3단계
570 4138 중앙보훈병원 9호선2~3단계
571 4201 서울역 공항철도 1호선
572 4202 공덕 공항철도 1호선
573 4203 홍대입구 공항철도 1호선
574 4204 디지털미디어시티 공항철도 1호선
575 4206 마곡나루 공항철도 1호선
576 4207 김포공항 공항철도 1호선
577 4208 계양 공항철도 1호선
578 4209 검암 공항철도 1호선
579 4210 청라국제도시 공항철도 1호선
580 4211 운서 공항철도 1호선
581 4212 공항화물청사 공항철도 1호선
582 4213 인천공항1터미널 공항철도 1호선
583 4215 인천공항2터미널 공항철도 1호선
584 4217 영종 공항철도 1호선
585 4701 북한산우이 우이신설선
586 4702 솔밭공원 우이신설선
587 4703 4.19민주묘지 우이신설선
588 4704 가오리 우이신설선
589 4705 화계 우이신설선
590 4706 삼양 우이신설선
591 4707 삼양사거리 우이신설선
592 4708 솔샘 우이신설선
593 4709 북한산보국문 우이신설선
594 4710 정릉 우이신설선
595 4711 성신여대입구(돈암) 우이신설선
596 4712 보문 우이신설선
597 4713 신설동 우이신설선

598 rows × 3 columns

In [221]:
data.역ID.unique().shape
Out[221]:
(598,)
In [242]:
s = station_code.역명.value_counts()
s[s>2]
Out[242]:
서울역          6
공덕           4
김포공항         4
홍대입구         4
왕십리(성동구청)    3
디지털미디어시티     3
종로3가         3
고속터미널        3
신설동          3
동대문역사문화공원    3
Name: 역명, dtype: int64
In [254]:
station_code['노선수'] = station_code.역명.map(s)
station_code
Out[254]:
역ID 역명 노선명 노선수
0 150 서울역 1호선 6
1 151 시청 1호선 2
2 152 종각 1호선 1
3 153 종로3가 1호선 3
4 154 종로5가 1호선 1
5 155 동대문 1호선 2
6 156 신설동 1호선 3
7 157 제기동 1호선 1
8 158 청량리(서울시립대입구) 1호선 2
9 159 동묘앞 1호선 2
10 201 시청 2호선 2
11 202 을지로입구 2호선 1
12 203 을지로3가 2호선 2
13 204 을지로4가 2호선 2
14 205 동대문역사문화공원 2호선 3
15 206 신당 2호선 2
16 207 상왕십리 2호선 1
17 208 왕십리(성동구청) 2호선 3
18 209 한양대 2호선 1
19 210 뚝섬 2호선 1
20 211 성수 2호선 1
21 212 건대입구 2호선 2
22 213 구의(광진구청) 2호선 1
23 214 강변(동서울터미널) 2호선 1
24 215 잠실나루 2호선 1
25 216 잠실(송파구청) 2호선 2
26 217 잠실새내 2호선 1
27 218 종합운동장 2호선 2
28 219 삼성(무역센터) 2호선 1
29 220 선릉 2호선 2
... ... ... ... ...
568 4136 올림픽공원(한국체대) 9호선2~3단계 2
569 4137 둔촌오륜 9호선2~3단계 1
570 4138 중앙보훈병원 9호선2~3단계 1
571 4201 서울역 공항철도 1호선 6
572 4202 공덕 공항철도 1호선 4
573 4203 홍대입구 공항철도 1호선 4
574 4204 디지털미디어시티 공항철도 1호선 3
575 4206 마곡나루 공항철도 1호선 2
576 4207 김포공항 공항철도 1호선 4
577 4208 계양 공항철도 1호선 2
578 4209 검암 공항철도 1호선 2
579 4210 청라국제도시 공항철도 1호선 1
580 4211 운서 공항철도 1호선 1
581 4212 공항화물청사 공항철도 1호선 1
582 4213 인천공항1터미널 공항철도 1호선 1
583 4215 인천공항2터미널 공항철도 1호선 1
584 4217 영종 공항철도 1호선 1
585 4701 북한산우이 우이신설선 1
586 4702 솔밭공원 우이신설선 1
587 4703 4.19민주묘지 우이신설선 1
588 4704 가오리 우이신설선 1
589 4705 화계 우이신설선 1
590 4706 삼양 우이신설선 1
591 4707 삼양사거리 우이신설선 1
592 4708 솔샘 우이신설선 1
593 4709 북한산보국문 우이신설선 1
594 4710 정릉 우이신설선 1
595 4711 성신여대입구(돈암) 우이신설선 2
596 4712 보문 우이신설선 2
597 4713 신설동 우이신설선 3

598 rows × 4 columns

In [253]:
station_code.sort_values(['노선수','역명'],ascending=False)
Out[253]:
역ID 역명 노선명 노선수
0 150 서울역 1호선 6
111 426 서울역 4호선 6
120 1001 서울역 경부선 6
171 1251 서울역 경의선 6
196 1291 서울역 경의선 6
571 4201 서울역 공항철도 1호선 6
48 239 홍대입구 2호선 4
176 1264 홍대입구 경의선 4
197 1293 홍대입구 경의선 4
573 4203 홍대입구 공항철도 1호선 4
198 1295 김포공항 경의선 4
378 2513 김포공항 5호선 4
534 4102 김포공항 9호선 4
576 4207 김포공항 공항철도 1호선 4
174 1262 공덕 경의선 4
395 2530 공덕 5호선 4
443 2627 공덕 6호선 4
572 4202 공덕 공항철도 1호선 4
3 153 종로3가 1호선 3
70 319 종로3가 3호선 3
400 2535 종로3가 5호선 3
17 208 왕십리(성동구청) 2호선 3
132 1013 왕십리(성동구청) 경원선 3
406 2541 왕십리(성동구청) 5호선 3
6 156 신설동 1호선 3
55 246 신설동 2호선 3
597 4713 신설동 우이신설선 3
178 1266 디지털미디어시티 경의선 3
435 2619 디지털미디어시티 6호선 3
574 4204 디지털미디어시티 공항철도 1호선 3
... ... ... ... ...
239 1506 곤지암 경강선 1
184 1272 곡산 경의선 1
282 1757 고잔 안산선 1
457 2641 고려대(종암) 6호선 1
418 2553 고덕 5호선 1
92 341 경찰병원 3호선 1
68 317 경복궁(정부서울청사) 3호선 1
227 1451 경마공원 과천선 1
237 1504 경기광주 경강선 1
425 2560 거여 5호선 1
377 2512 개화산 5호선 1
533 4101 개화 9호선 1
146 1027 개포동 분당선 1
289 1801 개봉 경인선 1
424 2559 개롱 5호선 1
216 1326 강촌 경춘선 1
23 214 강변(동서울터미널) 2호선 1
181 1269 강매 경의선 1
518 2813 강동구청 8호선 1
414 2549 강동 5호선 1
31 222 강남 2호선 1
202 1312 갈매 경춘선 1
304 1816 간석 경인선 1
213 1323 가평 경춘선 1
314 1851 가천대 분당선 1
177 1265 가좌 경의선 1
588 4704 가오리 우이신설선 1
539 4107 가양 9호선 1
355 1907 가능 경원선 1
587 4703 4.19민주묘지 우이신설선 1

598 rows × 4 columns

Merge

In [272]:
s = data.groupby('역ID')['승차총승객수'].mean(); s.name='승차평균'
data2 = pd.merge(data, s.to_frame(), left_on='역ID', right_index=True).sort_index()
data2

# data2 = data.copy()
# data2['승차평균'] = data2.역ID.map(s)
# data2
Out[272]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 승차평균
0 20190101 경춘선 1323 가평 1520 1436 20190104 1792.548387
1 20190101 경춘선 1322 상천 275 114 20190104 290.870968
2 20190101 경춘선 1321 청평 1509 1083 20190104 1948.516129
3 20190101 경춘선 1320 대성리 357 271 20190104 575.806452
4 20190101 경춘선 1319 마석 1772 1963 20190104 3518.064516
5 20190101 경춘선 1318 천마산 787 765 20190104 1469.903226
6 20190101 경춘선 1317 평내호평 2649 2661 20190104 5584.741935
7 20190101 경춘선 1316 금곡 734 726 20190104 1456.129032
8 20190101 경춘선 1315 사릉 1347 1534 20190104 3257.161290
9 20190101 경춘선 1314 퇴계원 1542 1516 20190104 3450.967742
10 20190101 경춘선 1313 별내 1321 1232 20190104 2392.516129
11 20190101 경춘선 1312 갈매 1068 954 20190104 2569.064516
12 20190101 경인선 1804 부천 24321 24169 20190104 38778.774194
13 20190101 경인선 1803 역곡 13653 14049 20190104 29148.354839
14 20190101 경인선 1802 오류동 7126 6603 20190104 12159.903226
15 20190101 경인선 1801 개봉 11366 11785 20190104 23460.870968
16 20190101 경의선 1296 계양 1 0 20190104 1.000000
17 20190101 경의선 1284 문산 3860 4170 20190104 5849.193548
18 20190101 경의선 1283 파주 729 659 20190104 1189.290323
19 20190101 경의선 1282 월롱 719 1761 20190104 2223.870968
20 20190101 경의선 1280 금촌 4346 5071 20190104 6907.677419
21 20190101 경의선 1279 금릉 2311 2469 20190104 4455.935484
22 20190101 경의선 1278 운정 2572 2670 20190104 5617.903226
23 20190101 경의선 1277 야당 2377 2265 20190104 4832.967742
24 20190101 경의선 1276 탄현 3252 3199 20190104 7454.612903
25 20190101 경의선 1275 일산 3725 3768 20190104 8871.064516
26 20190101 경의선 1274 풍산 2476 2508 20190104 5227.903226
27 20190101 경의선 1273 백마 2606 2497 20190104 6554.225806
28 20190101 경의선 1272 곡산 215 209 20190104 515.064516
29 20190101 경의선 1271 능곡 1748 1700 20190104 3580.193548
... ... ... ... ... ... ... ... ...
18304 20190131 2호선 221 역삼 63414 69744 20190203 50060.032258
18305 20190131 2호선 220 선릉 69459 61644 20190203 56247.870968
18306 20190131 2호선 219 삼성(무역센터) 65186 67747 20190203 59327.322581
18307 20190131 2호선 218 종합운동장 10254 10959 20190203 9544.741935
18308 20190131 2호선 217 잠실새내 27967 27937 20190203 24775.741935
18309 20190131 2호선 216 잠실(송파구청) 89355 85642 20190203 84706.096774
18310 20190131 2호선 215 잠실나루 20006 19265 20190203 16557.064516
18311 20190131 2호선 214 강변(동서울터미널) 44302 44291 20190203 44428.096774
18312 20190131 2호선 213 구의(광진구청) 28067 26975 20190203 24216.548387
18313 20190131 2호선 212 건대입구 44899 49051 20190203 43045.354839
18314 20190131 2호선 211 성수 34567 37720 20190203 28306.000000
18315 20190131 2호선 210 뚝섬 21130 22598 20190203 17314.580645
18316 20190131 2호선 209 한양대 8791 9700 20190203 8037.580645
18317 20190131 2호선 208 왕십리(성동구청) 20764 17129 20190203 18930.774194
18318 20190131 2호선 207 상왕십리 16668 15952 20190203 14224.806452
18319 20190131 2호선 206 신당 16242 16890 20190203 14704.548387
18320 20190131 2호선 205 동대문역사문화공원 17863 20145 20190203 17079.548387
18321 20190131 2호선 204 을지로4가 13946 13843 20190203 12172.645161
18322 20190131 2호선 203 을지로3가 26344 26216 20190203 22601.516129
18323 20190131 2호선 202 을지로입구 55692 56015 20190203 49543.193548
18324 20190131 2호선 201 시청 29981 29575 20190203 24746.935484
18325 20190131 1호선 159 동묘앞 9483 9727 20190203 10345.709677
18326 20190131 1호선 158 청량리(서울시립대입구) 29384 30328 20190203 26308.935484
18327 20190131 1호선 157 제기동 25142 26221 20190203 21551.967742
18328 20190131 1호선 156 신설동 18001 17784 20190203 15710.548387
18329 20190131 1호선 155 동대문 14563 15139 20190203 14270.064516
18330 20190131 1호선 154 종로5가 30249 29703 20190203 27331.322581
18331 20190131 1호선 153 종로3가 36804 35050 20190203 35166.838710
18332 20190131 1호선 152 종각 51970 50080 20190203 45265.161290
18333 20190131 1호선 151 시청 29059 29169 20190203 25139.354839

18334 rows × 8 columns

concat()

In [287]:
df = pd.concat([data,data[['승차총승객수','하차총승객수']].mean(axis=1)], axis=1)
df.columns = df.columns[:-1].tolist()+['평균']
df
Out[287]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 평균
0 20190101 경춘선 1323 가평 1520 1436 20190104 1478.0
1 20190101 경춘선 1322 상천 275 114 20190104 194.5
2 20190101 경춘선 1321 청평 1509 1083 20190104 1296.0
3 20190101 경춘선 1320 대성리 357 271 20190104 314.0
4 20190101 경춘선 1319 마석 1772 1963 20190104 1867.5
5 20190101 경춘선 1318 천마산 787 765 20190104 776.0
6 20190101 경춘선 1317 평내호평 2649 2661 20190104 2655.0
7 20190101 경춘선 1316 금곡 734 726 20190104 730.0
8 20190101 경춘선 1315 사릉 1347 1534 20190104 1440.5
9 20190101 경춘선 1314 퇴계원 1542 1516 20190104 1529.0
10 20190101 경춘선 1313 별내 1321 1232 20190104 1276.5
11 20190101 경춘선 1312 갈매 1068 954 20190104 1011.0
12 20190101 경인선 1804 부천 24321 24169 20190104 24245.0
13 20190101 경인선 1803 역곡 13653 14049 20190104 13851.0
14 20190101 경인선 1802 오류동 7126 6603 20190104 6864.5
15 20190101 경인선 1801 개봉 11366 11785 20190104 11575.5
16 20190101 경의선 1296 계양 1 0 20190104 0.5
17 20190101 경의선 1284 문산 3860 4170 20190104 4015.0
18 20190101 경의선 1283 파주 729 659 20190104 694.0
19 20190101 경의선 1282 월롱 719 1761 20190104 1240.0
20 20190101 경의선 1280 금촌 4346 5071 20190104 4708.5
21 20190101 경의선 1279 금릉 2311 2469 20190104 2390.0
22 20190101 경의선 1278 운정 2572 2670 20190104 2621.0
23 20190101 경의선 1277 야당 2377 2265 20190104 2321.0
24 20190101 경의선 1276 탄현 3252 3199 20190104 3225.5
25 20190101 경의선 1275 일산 3725 3768 20190104 3746.5
26 20190101 경의선 1274 풍산 2476 2508 20190104 2492.0
27 20190101 경의선 1273 백마 2606 2497 20190104 2551.5
28 20190101 경의선 1272 곡산 215 209 20190104 212.0
29 20190101 경의선 1271 능곡 1748 1700 20190104 1724.0
... ... ... ... ... ... ... ... ...
18304 20190131 2호선 221 역삼 63414 69744 20190203 66579.0
18305 20190131 2호선 220 선릉 69459 61644 20190203 65551.5
18306 20190131 2호선 219 삼성(무역센터) 65186 67747 20190203 66466.5
18307 20190131 2호선 218 종합운동장 10254 10959 20190203 10606.5
18308 20190131 2호선 217 잠실새내 27967 27937 20190203 27952.0
18309 20190131 2호선 216 잠실(송파구청) 89355 85642 20190203 87498.5
18310 20190131 2호선 215 잠실나루 20006 19265 20190203 19635.5
18311 20190131 2호선 214 강변(동서울터미널) 44302 44291 20190203 44296.5
18312 20190131 2호선 213 구의(광진구청) 28067 26975 20190203 27521.0
18313 20190131 2호선 212 건대입구 44899 49051 20190203 46975.0
18314 20190131 2호선 211 성수 34567 37720 20190203 36143.5
18315 20190131 2호선 210 뚝섬 21130 22598 20190203 21864.0
18316 20190131 2호선 209 한양대 8791 9700 20190203 9245.5
18317 20190131 2호선 208 왕십리(성동구청) 20764 17129 20190203 18946.5
18318 20190131 2호선 207 상왕십리 16668 15952 20190203 16310.0
18319 20190131 2호선 206 신당 16242 16890 20190203 16566.0
18320 20190131 2호선 205 동대문역사문화공원 17863 20145 20190203 19004.0
18321 20190131 2호선 204 을지로4가 13946 13843 20190203 13894.5
18322 20190131 2호선 203 을지로3가 26344 26216 20190203 26280.0
18323 20190131 2호선 202 을지로입구 55692 56015 20190203 55853.5
18324 20190131 2호선 201 시청 29981 29575 20190203 29778.0
18325 20190131 1호선 159 동묘앞 9483 9727 20190203 9605.0
18326 20190131 1호선 158 청량리(서울시립대입구) 29384 30328 20190203 29856.0
18327 20190131 1호선 157 제기동 25142 26221 20190203 25681.5
18328 20190131 1호선 156 신설동 18001 17784 20190203 17892.5
18329 20190131 1호선 155 동대문 14563 15139 20190203 14851.0
18330 20190131 1호선 154 종로5가 30249 29703 20190203 29976.0
18331 20190131 1호선 153 종로3가 36804 35050 20190203 35927.0
18332 20190131 1호선 152 종각 51970 50080 20190203 51025.0
18333 20190131 1호선 151 시청 29059 29169 20190203 29114.0

18334 rows × 8 columns

In [294]:
df2 = pd.concat([df, df], axis=1)
df2.shape, df.shape
Out[294]:
((18334, 16), (18334, 8))
In [319]:
data.take([1,3,5])
Out[319]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
1 20190101 경춘선 1322 상천 275 114 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
5 20190101 경춘선 1318 천마산 787 765 20190104

get_dummies()

In [321]:
data.join(pd.get_dummies(data.노선명))
Out[321]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 1호선 2호선 3호선 ... 경춘선 공항철도 1호선 과천선 분당선 수인선 안산선 우이신설선 일산선 장항선 중앙선
0 20190101 경춘선 1323 가평 1520 1436 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
1 20190101 경춘선 1322 상천 275 114 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
2 20190101 경춘선 1321 청평 1509 1083 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
3 20190101 경춘선 1320 대성리 357 271 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
4 20190101 경춘선 1319 마석 1772 1963 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
5 20190101 경춘선 1318 천마산 787 765 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
6 20190101 경춘선 1317 평내호평 2649 2661 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
7 20190101 경춘선 1316 금곡 734 726 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
8 20190101 경춘선 1315 사릉 1347 1534 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
9 20190101 경춘선 1314 퇴계원 1542 1516 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
10 20190101 경춘선 1313 별내 1321 1232 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
11 20190101 경춘선 1312 갈매 1068 954 20190104 0 0 0 ... 1 0 0 0 0 0 0 0 0 0
12 20190101 경인선 1804 부천 24321 24169 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
13 20190101 경인선 1803 역곡 13653 14049 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
14 20190101 경인선 1802 오류동 7126 6603 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
15 20190101 경인선 1801 개봉 11366 11785 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
16 20190101 경의선 1296 계양 1 0 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
17 20190101 경의선 1284 문산 3860 4170 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
18 20190101 경의선 1283 파주 729 659 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
19 20190101 경의선 1282 월롱 719 1761 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
20 20190101 경의선 1280 금촌 4346 5071 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
21 20190101 경의선 1279 금릉 2311 2469 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
22 20190101 경의선 1278 운정 2572 2670 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
23 20190101 경의선 1277 야당 2377 2265 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
24 20190101 경의선 1276 탄현 3252 3199 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
25 20190101 경의선 1275 일산 3725 3768 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
26 20190101 경의선 1274 풍산 2476 2508 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
27 20190101 경의선 1273 백마 2606 2497 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
28 20190101 경의선 1272 곡산 215 209 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
29 20190101 경의선 1271 능곡 1748 1700 20190104 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
18304 20190131 2호선 221 역삼 63414 69744 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18305 20190131 2호선 220 선릉 69459 61644 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18306 20190131 2호선 219 삼성(무역센터) 65186 67747 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18307 20190131 2호선 218 종합운동장 10254 10959 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18308 20190131 2호선 217 잠실새내 27967 27937 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18309 20190131 2호선 216 잠실(송파구청) 89355 85642 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18310 20190131 2호선 215 잠실나루 20006 19265 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18311 20190131 2호선 214 강변(동서울터미널) 44302 44291 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18312 20190131 2호선 213 구의(광진구청) 28067 26975 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18313 20190131 2호선 212 건대입구 44899 49051 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18314 20190131 2호선 211 성수 34567 37720 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18315 20190131 2호선 210 뚝섬 21130 22598 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18316 20190131 2호선 209 한양대 8791 9700 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18317 20190131 2호선 208 왕십리(성동구청) 20764 17129 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18318 20190131 2호선 207 상왕십리 16668 15952 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18319 20190131 2호선 206 신당 16242 16890 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18320 20190131 2호선 205 동대문역사문화공원 17863 20145 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18321 20190131 2호선 204 을지로4가 13946 13843 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18322 20190131 2호선 203 을지로3가 26344 26216 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18323 20190131 2호선 202 을지로입구 55692 56015 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18324 20190131 2호선 201 시청 29981 29575 20190203 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
18325 20190131 1호선 159 동묘앞 9483 9727 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18326 20190131 1호선 158 청량리(서울시립대입구) 29384 30328 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18327 20190131 1호선 157 제기동 25142 26221 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18328 20190131 1호선 156 신설동 18001 17784 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18329 20190131 1호선 155 동대문 14563 15139 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18330 20190131 1호선 154 종로5가 30249 29703 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18331 20190131 1호선 153 종로3가 36804 35050 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18332 20190131 1호선 152 종각 51970 50080 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
18333 20190131 1호선 151 시청 29059 29169 20190203 1 0 0 ... 0 0 0 0 0 0 0 0 0 0

18334 rows × 32 columns

String

In [335]:
station_code[station_code.역명.str.contains('\(')]
Out[335]:
역ID 역명 노선명 노선수
8 158 청량리(서울시립대입구) 1호선 2
17 208 왕십리(성동구청) 2호선 3
22 213 구의(광진구청) 2호선 1
23 214 강변(동서울터미널) 2호선 1
25 216 잠실(송파구청) 2호선 2
28 219 삼성(무역센터) 2호선 1
32 223 교대(법원.검찰청) 2호선 2
37 228 서울대입구(관악구청) 2호선 1
42 233 대림(구로구청) 2호선 2
52 243 충정로(경기대입구) 2호선 2
59 250 용두(동대문구청) 2호선 1
68 317 경복궁(정부서울청사) 3호선 1
81 330 교대(법원.검찰청) 3호선 2
82 331 남부터미널(예술의전당) 3호선 1
83 332 양재(서초구청) 3호선 1
99 414 수유(강북구청) 4호선 1
100 415 미아(서울사이버대학) 4호선 1
103 418 성신여대입구(돈암) 4호선 2
104 419 한성대입구(삼선교) 4호선 1
110 425 회현(남대문시장) 4호선 1
112 427 숙대입구(갈월) 4호선 1
115 430 이촌(국립중앙박물관) 4호선 2
116 431 동작(현충원) 4호선 2
117 432 총신대입구(이수) 4호선 1
127 1008 이촌(국립중앙박물관) 경원선 2
132 1013 왕십리(성동구청) 경원선 3
133 1014 청량리(서울시립대입구) 경원선 2
152 1202 상봉(시외버스터미널) 중앙선 2
221 1402 쌍용(나사렛대) 장항선 1
225 1408 신창(순천향대) 장항선 1
... ... ... ... ...
413 2548 천호(풍납토성) 5호선 2
416 2551 굽은다리(강동구민회관앞) 5호선 1
421 2556 올림픽공원(한국체대) 5호선 2
433 2617 새절(신사) 6호선 1
434 2618 증산(명지대앞) 6호선 1
436 2620 월드컵경기장(성산) 6호선 1
441 2625 광흥창(서강) 6호선 1
442 2626 대흥(서강대앞) 6호선 1
446 2630 녹사평(용산구청) 6호선 1
456 2640 안암(고대병원앞) 6호선 1
457 2641 고려대(종암) 6호선 1
458 2642 월곡(동덕여대) 6호선 1
459 2643 상월곡(한국과학기술연구원) 6호선 1
463 2647 화랑대(서울여대입구) 6호선 1
464 2648 봉화산(서울의료원) 6호선 1
472 2718 공릉(서울과학기술대) 7호선 1
476 2722 상봉(시외버스터미널) 7호선 2
481 2727 군자(능동) 7호선 2
482 2728 어린이대공원(세종대) 7호선 1
494 2740 숭실대입구(살피재) 7호선 1
500 2746 대림(구로구청) 7호선 2
506 2752 온수(성공회대입구) 7호선 2
517 2812 천호(풍납토성) 8호선 2
519 2814 몽촌토성(평화의문) 8호선 1
520 2815 잠실(송파구청) 8호선 2
528 2823 남한산성입구(성남법원.검찰청) 8호선 1
551 4119 흑석(중앙대입구) 9호선 1
552 4120 동작(현충원) 9호선 2
568 4136 올림픽공원(한국체대) 9호선2~3단계 2
595 4711 성신여대입구(돈암) 우이신설선 2

69 rows × 4 columns

그룹

In [8]:
data.head()
Out[8]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
In [9]:
for key, df in data.groupby('사용일자'):
    display(key, df)
    break
20190101
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
5 20190101 경춘선 1318 천마산 787 765 20190104
6 20190101 경춘선 1317 평내호평 2649 2661 20190104
7 20190101 경춘선 1316 금곡 734 726 20190104
8 20190101 경춘선 1315 사릉 1347 1534 20190104
9 20190101 경춘선 1314 퇴계원 1542 1516 20190104
10 20190101 경춘선 1313 별내 1321 1232 20190104
11 20190101 경춘선 1312 갈매 1068 954 20190104
12 20190101 경인선 1804 부천 24321 24169 20190104
13 20190101 경인선 1803 역곡 13653 14049 20190104
14 20190101 경인선 1802 오류동 7126 6603 20190104
15 20190101 경인선 1801 개봉 11366 11785 20190104
16 20190101 경의선 1296 계양 1 0 20190104
17 20190101 경의선 1284 문산 3860 4170 20190104
18 20190101 경의선 1283 파주 729 659 20190104
19 20190101 경의선 1282 월롱 719 1761 20190104
20 20190101 경의선 1280 금촌 4346 5071 20190104
21 20190101 경의선 1279 금릉 2311 2469 20190104
22 20190101 경의선 1278 운정 2572 2670 20190104
23 20190101 경의선 1277 야당 2377 2265 20190104
24 20190101 경의선 1276 탄현 3252 3199 20190104
25 20190101 경의선 1275 일산 3725 3768 20190104
26 20190101 경의선 1274 풍산 2476 2508 20190104
27 20190101 경의선 1273 백마 2606 2497 20190104
28 20190101 경의선 1272 곡산 215 209 20190104
29 20190101 경의선 1271 능곡 1748 1700 20190104
... ... ... ... ... ... ... ...
562 20190101 공항철도 1호선 4210 청라국제도시 2641 2733 20190104
563 20190101 공항철도 1호선 4207 김포공항 7738 4672 20190104
564 20190101 공항철도 1호선 4206 마곡나루 1172 1464 20190104
565 20190101 공항철도 1호선 4204 디지털미디어시티 3366 3350 20190104
566 20190101 공항철도 1호선 4203 홍대입구 9151 8059 20190104
567 20190101 공항철도 1호선 4202 공덕 1363 1761 20190104
568 20190101 공항철도 1호선 4201 서울역 14043 9955 20190104
569 20190101 경춘선 1329 춘천 1782 1395 20190104
570 20190101 경춘선 1328 남춘천 2149 2309 20190104
571 20190101 경춘선 1327 김유정 298 290 20190104
572 20190101 경춘선 1326 강촌 409 356 20190104
573 20190101 경춘선 1325 백양리 332 282 20190104
574 20190101 경춘선 1324 굴봉산 143 109 20190104
575 20190101 공항철도 1호선 4211 운서 4681 5259 20190104
576 20190101 공항철도 1호선 4212 공항화물청사 1256 2205 20190104
577 20190101 공항철도 1호선 4213 인천공항1터미널 16138 17020 20190104
578 20190101 공항철도 1호선 4215 인천공항2터미널 5591 5550 20190104
579 20190101 공항철도 1호선 4217 영종 1456 1516 20190104
580 20190101 과천선 1450 선바위 2761 2700 20190104
581 20190101 과천선 1451 경마공원 403 385 20190104
582 20190101 과천선 1452 대공원 1965 2052 20190104
583 20190101 과천선 1453 과천 2297 1961 20190104
584 20190101 중앙선 1212 양수 1359 1314 20190104
585 20190101 중앙선 1213 신원 191 102 20190104
586 20190101 중앙선 1214 국수 399 385 20190104
587 20190101 중앙선 1215 아신 390 357 20190104
588 20190101 중앙선 1216 오빈 178 156 20190104
589 20190101 중앙선 1217 양평 2030 1898 20190104
590 20190101 중앙선 1218 원덕 290 227 20190104
591 20190101 중앙선 1219 용문 1857 1643 20190104

592 rows × 7 columns

In [10]:
data.groupby('노선명').size()
Out[10]:
노선명
1호선          310
2호선         1550
3호선         1049
4호선          806
5호선         1581
6호선         1164
7호선         1581
8호선          527
9호선          775
9호선2~3단계     403
경강선          341
경부선         1209
경원선          912
경의선          806
경인선          620
경춘선          589
공항철도 1호선     434
과천선          248
분당선         1071
수인선          403
안산선          403
우이신설선        403
일산선          312
장항선          186
중앙선          651
dtype: int64
In [11]:
data.dtypes
Out[11]:
사용일자       int64
노선명       object
역ID        int64
역명        object
승차총승객수     int64
하차총승객수     int64
등록일자       int64
dtype: object
In [12]:
data[['노선명']]
Out[12]:
노선명
0 경춘선
1 경춘선
2 경춘선
3 경춘선
4 경춘선
5 경춘선
6 경춘선
7 경춘선
8 경춘선
9 경춘선
10 경춘선
11 경춘선
12 경인선
13 경인선
14 경인선
15 경인선
16 경의선
17 경의선
18 경의선
19 경의선
20 경의선
21 경의선
22 경의선
23 경의선
24 경의선
25 경의선
26 경의선
27 경의선
28 경의선
29 경의선
... ...
18304 2호선
18305 2호선
18306 2호선
18307 2호선
18308 2호선
18309 2호선
18310 2호선
18311 2호선
18312 2호선
18313 2호선
18314 2호선
18315 2호선
18316 2호선
18317 2호선
18318 2호선
18319 2호선
18320 2호선
18321 2호선
18322 2호선
18323 2호선
18324 2호선
18325 1호선
18326 1호선
18327 1호선
18328 1호선
18329 1호선
18330 1호선
18331 1호선
18332 1호선
18333 1호선

18334 rows × 1 columns

In [14]:
data.groupby('사용일자').agg(len) # size()
Out[14]:
사용일자
20190101    592
20190102    592
20190103    593
20190104    590
20190105    589
20190106    590
20190107    592
20190108    591
20190109    591
20190110    591
20190111    592
20190112    592
20190113    592
20190114    592
20190115    591
20190116    592
20190117    591
20190118    591
20190119    591
20190120    592
20190121    593
20190122    591
20190123    590
20190124    592
20190125    589
20190126    591
20190127    592
20190128    592
20190129    593
20190130    593
20190131    591
dtype: int64
In [23]:
data.groupby('사용일자').agg(lambda df: df.max() - df.min())
Out[23]:
역ID 승차총승객수 하차총승객수 등록일자
사용일자
20190101 4563 70288 61834 0
20190102 4563 116549 116482 0
20190103 4563 122253 122889 0
20190104 4563 129877 134948 0
20190105 4563 93499 105472 0
20190106 4563 71524 69540 0
20190107 4563 121526 121092 0
20190108 4563 123558 123099 0
20190109 4563 123656 122365 0
20190110 4563 124859 124336 0
20190111 4563 132726 137826 0
20190112 4563 94279 107908 0
20190113 4563 74000 71712 0
20190114 4563 118983 119047 0
20190115 4563 122592 121979 0
20190116 4563 124781 124193 0
20190117 4563 124181 125391 0
20190118 4563 130863 136701 0
20190119 4563 93220 106853 0
20190120 4563 75103 72175 0
20190121 4563 118766 119423 0
20190122 4563 122091 121935 0
20190123 4563 124515 125097 0
20190124 4563 124411 125178 0
20190125 4563 131972 136614 0
20190126 4563 101249 114445 0
20190127 4563 79506 78674 0
20190128 4563 118689 118726 0
20190129 4563 120635 120632 0
20190130 4563 118277 118613 0
20190131 4563 116720 117092 0
In [27]:
data.groupby('노선명').agg(['mean', 'std']).승차총승객수
Out[27]:
mean std
노선명
1호선 27714.254839 14872.985189
2호선 30257.951613 25011.375844
3호선 16306.236416 13897.214190
4호선 21121.942928 11142.280935
5호선 11566.161923 8244.471969
6호선 8968.502577 4824.543259
7호선 13568.542062 7473.634137
8호선 10888.738140 6002.298732
9호선 10686.589677 8853.881716
9호선2~3단계 5722.858561 4171.910992
경강선 2302.199413 1703.859833
경부선 11644.869313 11348.782076
경원선 6889.365132 4951.897655
경의선 3793.387097 2568.209279
경인선 15491.914516 11394.502010
경춘선 1816.789474 1486.308924
공항철도 1호선 7902.847926 4492.030156
과천선 13365.846774 10016.050405
분당선 10456.872082 7520.537228
수인선 3233.878412 1798.083037
안산선 9277.406948 6038.748526
우이신설선 3135.590571 1403.149495
일산선 10848.756410 5188.597498
장항선 2203.881720 1475.389912
중앙선 4300.321045 6195.087971
In [34]:
data.groupby('사용일자').apply(lambda df: df.sort_values('승차총승객수', ascending=False).head())
Out[34]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
사용일자
20190101 394 20190101 2호선 239 홍대입구 70289 61834 20190104
416 20190101 2호선 216 잠실(송파구청) 48502 42899 20190104
362 20190101 3호선 329 고속터미널 44564 36579 20190104
442 20190101 1호선 150 서울역 39420 31121 20190104
410 20190101 2호선 222 강남 38729 36544 20190104
20190102 612 20190102 2호선 222 강남 116550 116482 20190105
606 20190102 2호선 216 잠실(송파구청) 85771 82923 20190105
638 20190102 2호선 239 홍대입구 77440 81728 20190105
629 20190102 2호선 230 신림 73692 73265 20190105
631 20190102 2호선 232 구로디지털단지 71046 70876 20190105
20190103 1740 20190103 2호선 222 강남 122254 122889 20190106
1746 20190103 2호선 216 잠실(송파구청) 90798 87512 20190106
1723 20190103 2호선 239 홍대입구 78897 83287 20190106
1732 20190103 2호선 230 신림 75650 74677 20190106
1730 20190103 2호선 232 구로디지털단지 72793 73191 20190106
20190104 1844 20190104 2호선 222 강남 129878 134948 20190107
1799 20190104 2호선 216 잠실(송파구청) 95791 92454 20190107
1861 20190104 2호선 239 홍대입구 87359 99468 20190107
1852 20190104 2호선 230 신림 78947 77948 20190107
1854 20190104 2호선 232 구로디지털단지 75632 75535 20190107
20190105 2434 20190105 2호선 239 홍대입구 93500 105472 20190108
2417 20190105 2호선 222 강남 90030 95814 20190108
2411 20190105 2호선 216 잠실(송파구청) 82719 77581 20190108
2465 20190105 3호선 329 고속터미널 73516 69224 20190108
2425 20190105 2호선 230 신림 62877 61460 20190108
20190106 3505 20190106 2호선 239 홍대입구 71525 69540 20190109
3528 20190106 2호선 216 잠실(송파구청) 58948 54615 20190109
3474 20190106 3호선 329 고속터미널 56373 53505 20190109
3522 20190106 2호선 222 강남 52313 51169 20190109
3514 20190106 2호선 230 신림 46899 46368 20190109
... ... ... ... ... ... ... ... ...
20190126 15322 20190126 2호선 239 홍대입구 101250 114445 20190129
15339 20190126 2호선 222 강남 94215 100006 20190129
15345 20190126 2호선 216 잠실(송파구청) 85821 80606 20190129
15290 20190126 3호선 329 고속터미널 76622 72338 20190129
15331 20190126 2호선 230 신림 65542 63867 20190129
20190127 15418 20190127 2호선 239 홍대입구 79507 78674 20190130
15440 20190127 2호선 216 잠실(송파구청) 62329 57153 20190130
15386 20190127 3호선 329 고속터미널 56866 55929 20190130
15434 20190127 2호선 222 강남 55479 54361 20190130
15426 20190127 2호선 230 신림 48952 47418 20190130
20190128 16015 20190128 2호선 222 강남 118690 118726 20190131
16009 20190128 2호선 216 잠실(송파구청) 86842 84401 20190131
16032 20190128 2호선 239 홍대입구 77425 79828 20190131
16023 20190128 2호선 230 신림 75753 73885 20190131
16025 20190128 2호선 232 구로디지털단지 73175 73065 20190131
20190129 17012 20190129 2호선 222 강남 120636 120632 20190201
17006 20190129 2호선 216 잠실(송파구청) 90942 87560 20190201
17020 20190129 2호선 230 신림 76392 74743 20190201
17029 20190129 2호선 239 홍대입구 76168 79589 20190201
17022 20190129 2호선 232 구로디지털단지 73940 74328 20190201
20190130 17713 20190130 2호선 222 강남 118278 118613 20190202
17719 20190130 2호선 216 잠실(송파구청) 90059 87495 20190202
17705 20190130 2호선 230 신림 76938 75507 20190202
17696 20190130 2호선 239 홍대입구 76176 79779 20190202
17703 20190130 2호선 232 구로디지털단지 74136 74276 20190202
20190131 18303 20190131 2호선 222 강남 116722 117092 20190203
18309 20190131 2호선 216 잠실(송파구청) 89355 85642 20190203
18295 20190131 2호선 230 신림 76306 74115 20190203
18265 20190131 2호선 239 홍대입구 75355 78617 20190203
18272 20190131 2호선 232 구로디지털단지 73933 73734 20190203

155 rows × 7 columns

In [36]:
data.groupby('사용일자', group_keys=False).apply(lambda df: df.sort_values('승차총승객수', ascending=False).head())
Out[36]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
394 20190101 2호선 239 홍대입구 70289 61834 20190104
416 20190101 2호선 216 잠실(송파구청) 48502 42899 20190104
362 20190101 3호선 329 고속터미널 44564 36579 20190104
442 20190101 1호선 150 서울역 39420 31121 20190104
410 20190101 2호선 222 강남 38729 36544 20190104
612 20190102 2호선 222 강남 116550 116482 20190105
606 20190102 2호선 216 잠실(송파구청) 85771 82923 20190105
638 20190102 2호선 239 홍대입구 77440 81728 20190105
629 20190102 2호선 230 신림 73692 73265 20190105
631 20190102 2호선 232 구로디지털단지 71046 70876 20190105
1740 20190103 2호선 222 강남 122254 122889 20190106
1746 20190103 2호선 216 잠실(송파구청) 90798 87512 20190106
1723 20190103 2호선 239 홍대입구 78897 83287 20190106
1732 20190103 2호선 230 신림 75650 74677 20190106
1730 20190103 2호선 232 구로디지털단지 72793 73191 20190106
1844 20190104 2호선 222 강남 129878 134948 20190107
1799 20190104 2호선 216 잠실(송파구청) 95791 92454 20190107
1861 20190104 2호선 239 홍대입구 87359 99468 20190107
1852 20190104 2호선 230 신림 78947 77948 20190107
1854 20190104 2호선 232 구로디지털단지 75632 75535 20190107
2434 20190105 2호선 239 홍대입구 93500 105472 20190108
2417 20190105 2호선 222 강남 90030 95814 20190108
2411 20190105 2호선 216 잠실(송파구청) 82719 77581 20190108
2465 20190105 3호선 329 고속터미널 73516 69224 20190108
2425 20190105 2호선 230 신림 62877 61460 20190108
3505 20190106 2호선 239 홍대입구 71525 69540 20190109
3528 20190106 2호선 216 잠실(송파구청) 58948 54615 20190109
3474 20190106 3호선 329 고속터미널 56373 53505 20190109
3522 20190106 2호선 222 강남 52313 51169 20190109
3514 20190106 2호선 230 신림 46899 46368 20190109
... ... ... ... ... ... ... ...
15322 20190126 2호선 239 홍대입구 101250 114445 20190129
15339 20190126 2호선 222 강남 94215 100006 20190129
15345 20190126 2호선 216 잠실(송파구청) 85821 80606 20190129
15290 20190126 3호선 329 고속터미널 76622 72338 20190129
15331 20190126 2호선 230 신림 65542 63867 20190129
15418 20190127 2호선 239 홍대입구 79507 78674 20190130
15440 20190127 2호선 216 잠실(송파구청) 62329 57153 20190130
15386 20190127 3호선 329 고속터미널 56866 55929 20190130
15434 20190127 2호선 222 강남 55479 54361 20190130
15426 20190127 2호선 230 신림 48952 47418 20190130
16015 20190128 2호선 222 강남 118690 118726 20190131
16009 20190128 2호선 216 잠실(송파구청) 86842 84401 20190131
16032 20190128 2호선 239 홍대입구 77425 79828 20190131
16023 20190128 2호선 230 신림 75753 73885 20190131
16025 20190128 2호선 232 구로디지털단지 73175 73065 20190131
17012 20190129 2호선 222 강남 120636 120632 20190201
17006 20190129 2호선 216 잠실(송파구청) 90942 87560 20190201
17020 20190129 2호선 230 신림 76392 74743 20190201
17029 20190129 2호선 239 홍대입구 76168 79589 20190201
17022 20190129 2호선 232 구로디지털단지 73940 74328 20190201
17713 20190130 2호선 222 강남 118278 118613 20190202
17719 20190130 2호선 216 잠실(송파구청) 90059 87495 20190202
17705 20190130 2호선 230 신림 76938 75507 20190202
17696 20190130 2호선 239 홍대입구 76176 79779 20190202
17703 20190130 2호선 232 구로디지털단지 74136 74276 20190202
18303 20190131 2호선 222 강남 116722 117092 20190203
18309 20190131 2호선 216 잠실(송파구청) 89355 85642 20190203
18295 20190131 2호선 230 신림 76306 74115 20190203
18265 20190131 2호선 239 홍대입구 75355 78617 20190203
18272 20190131 2호선 232 구로디지털단지 73933 73734 20190203

155 rows × 7 columns

In [ ]:
# dt = pd.to_datetime(data2.사용일자, format='%Y%m%d')
# data2['year'] = dt.dt.year
# data2['month'] = dt.dt.month
# data2['day'] = dt.dt.day
# wday={0:'월', 1:'화', 2:'수', 3:'목', 4:'금', 5:'토', 6:'일'}
# data2['wday'] = dt.dt.dayofweek.map(wday)
In [45]:
dt = pd.to_datetime(data.사용일자, format='%Y%m%d')
wday={0:'월', 1:'화', 2:'수', 3:'목', 4:'금', 5:'토', 6:'일'}
data.groupby(['노선명',dt.dt.dayofweek]).mean()[['승차총승객수']]
Out[45]:
승차총승객수
노선명 사용일자
1호선 0 29270.025000
1 27067.020000
2 29584.940000
3 30320.360000
4 32239.500000
5 26339.675000
6 18220.875000
2호선 0 32991.040000
1 29684.968000
2 33618.900000
3 34068.988000
4 35683.450000
5 25888.060000
6 18220.505000
3호선 0 17597.485294
1 15775.441176
2 17949.165680
3 18389.190476
4 19358.948148
5 14398.610294
6 9894.051852
4호선 0 22589.942308
1 20666.061538
2 23077.200000
3 23368.607692
4 24370.278846
5 19093.692308
6 13751.307692
5호선 0 12963.715686
1 11550.909804
... ... ...
안산선 5 8618.153846
6 6723.096154
우이신설선 0 3368.307692
1 3092.800000
2 3392.200000
3 3445.507692
4 3532.365385
5 2771.038462
6 2215.980769
일산선 0 11637.902439
1 10644.120000
2 11831.509804
3 12087.260000
4 12528.100000
5 9600.800000
6 7063.150000
장항선 0 2200.041667
1 2094.700000
2 2145.900000
3 2200.100000
4 2489.083333
5 2428.083333
6 1912.000000
중앙선 0 4583.226190
1 4154.514286
2 4631.742857
3 4676.104762
4 4867.666667
5 4022.630952
6 3026.011905

175 rows × 1 columns

In [48]:
dt = pd.to_datetime(data.사용일자, format='%Y%m%d')
wday={0:'월', 1:'화', 2:'수', 3:'목', 4:'금', 5:'토', 6:'일'}
data2 = data.groupby(['노선명',dt.dt.dayofweek]).mean().승차총승객수.unstack()
In [53]:
import matplotlib.font_manager as fm
prop=fm.FontProperties(fname='C:/Windows/Fonts/gulim.ttc')

plt.figure(figsize=[12,10])
plt.plot(data2.T)
plt.legend(data2.index.tolist(), prop=prop)
Out[53]:
<matplotlib.legend.Legend at 0x2367bf78860>
In [6]:
data.head()
Out[6]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자
0 20190101 경춘선 1323 가평 1520 1436 20190104
1 20190101 경춘선 1322 상천 275 114 20190104
2 20190101 경춘선 1321 청평 1509 1083 20190104
3 20190101 경춘선 1320 대성리 357 271 20190104
4 20190101 경춘선 1319 마석 1772 1963 20190104
In [9]:
data.pivot_table(values=['승차총승객수','하차총승객수'], index='사용일자', columns='노선명',
                aggfunc='mean', margins=True)
Out[9]:
승차총승객수 ... 하차총승객수
노선명 1호선 2호선 3호선 4호선 5호선 6호선 7호선 8호선 9호선 9호선2~3단계 ... 공항철도 1호선 과천선 분당선 수인선 안산선 우이신설선 일산선 장항선 중앙선 All
사용일자
20190101 15295.500000 13624.080000 7108.411765 10613.538462 4885.941176 4410.684211 5844.882353 5008.235294 4495.320000 2410.000000 ... 5254.785714 4758.750000 4493.647059 1829.461538 5205.769231 1689.923077 5067.300000 1621.833333 2241.952381 5732.271959
20190102 28386.100000 32342.000000 17164.264706 22394.730769 12758.666667 9424.236842 14909.098039 11785.882353 11519.440000 5919.692308 ... 7843.428571 13594.500000 11468.685714 3426.846154 9527.230769 3219.923077 11073.700000 2057.166667 4315.428571 12824.888514
20190103 29592.500000 33702.840000 17881.382353 23318.000000 13137.647059 10095.918919 15274.019608 12094.882353 11912.560000 6211.769231 ... 7727.714286 13702.125000 11887.857143 3530.846154 9752.307692 3308.769231 11571.300000 2076.166667 4507.952381 13225.161889
20190104 31664.800000 35276.840000 19443.151515 24231.153846 13534.058824 10527.513514 15751.156863 12827.000000 12538.680000 6425.769231 ... 8073.142857 15190.750000 12819.657143 3685.615385 10197.692308 3343.000000 12000.000000 2493.833333 4649.904762 13964.298305
20190105 25247.300000 25251.020000 13766.147059 18629.576923 8932.529412 7642.648649 10723.843137 8723.294118 8180.320000 5057.384615 ... 6494.500000 11572.375000 8824.176471 2803.153846 8250.384615 2543.000000 9001.400000 2177.333333 3957.714286 10237.760611
20190106 17574.400000 17694.240000 9817.727273 13388.692308 6294.450980 5461.552632 7644.509804 6364.588235 5867.960000 3542.384615 ... 5437.071429 9585.375000 6283.000000 2240.769231 6396.230769 2160.615385 6804.500000 1768.833333 2860.142857 7424.657627
20190107 29460.100000 33224.280000 17652.705882 22749.500000 13041.627451 9655.315789 15350.176471 12094.764706 11979.000000 6192.307692 ... 7670.857143 13419.125000 11801.685714 3559.076923 9803.538462 3315.461538 11576.600000 2132.166667 4451.047619 13166.797297
20190108 29955.200000 33742.720000 17991.588235 23310.307692 13252.882353 10106.756757 15371.843137 12274.882353 12181.400000 6367.538462 ... 7665.785714 13794.875000 11945.685714 3536.153846 9816.769231 3404.615385 11474.000000 2053.833333 4550.380952 13333.705584
20190109 28726.100000 33413.940000 18313.939394 22785.269231 13081.156863 9701.710526 15279.411765 12249.000000 12007.240000 6268.692308 ... 7422.500000 14071.625000 12505.147059 3492.692308 9698.615385 3262.692308 10241.272727 2182.166667 4368.142857 13169.321489
20190110 30103.200000 34152.460000 18661.393939 23337.115385 13292.039216 10153.648649 15451.725490 12301.882353 12195.640000 6355.307692 ... 7581.642857 14060.625000 12443.794118 3539.538462 9963.076923 3316.769231 11448.500000 2065.666667 4599.619048 13441.384095
20190111 32108.400000 35644.200000 19143.088235 24303.730769 13584.215686 10570.783784 15870.549020 12731.411765 12789.440000 6677.000000 ... 8074.000000 15313.000000 13071.352941 3771.461538 10507.307692 3382.615385 12031.600000 2399.333333 4672.190476 14057.800676
20190112 26814.400000 26124.620000 14537.470588 19352.884615 9114.764706 7729.815789 11068.254902 8818.882353 8434.600000 4586.846154 ... 6684.857143 11726.625000 9075.529412 2974.538462 8636.000000 2645.538462 9331.800000 2325.166667 3847.047619 10557.322635
20190113 17741.000000 18251.760000 9758.941176 13693.846154 6256.019608 5505.631579 7859.431373 6386.176471 6032.160000 3694.000000 ... 5491.928571 9617.250000 6153.085714 2322.846154 6737.230769 2033.692308 6841.800000 1896.500000 3001.571429 7553.091216
20190114 28666.500000 32552.700000 17408.911765 22222.769231 12824.117647 9455.421053 15112.313725 12082.352941 11763.320000 6131.615385 ... 7737.500000 13228.375000 11741.428571 3370.076923 9634.769231 3213.000000 11070.700000 2313.000000 4319.571429 12922.288851
20190115 29400.600000 33491.860000 17749.470588 22892.115385 13116.607843 9998.216216 15267.803922 12101.705882 12055.680000 6331.769231 ... 7629.714286 13511.875000 11733.228571 3401.076923 9665.307692 3286.923077 11504.800000 1992.166667 4458.047619 13192.695431
20190116 29605.600000 33897.380000 17923.411765 23047.461538 13198.431373 10118.000000 15289.607843 12198.294118 12139.200000 6331.769231 ... 7620.571429 14287.750000 12000.514286 3458.000000 9710.384615 3286.846154 11722.800000 1993.666667 4471.857143 13278.153716
20190117 30716.800000 34320.440000 18512.323529 23484.269231 13392.078431 10021.552632 15477.058824 12339.352941 12256.520000 6527.769231 ... 7842.642857 14140.125000 12097.057143 3584.384615 9906.615385 3363.769231 11782.400000 2101.000000 4522.238095 13542.375635
20190118 32380.400000 35586.860000 19395.941176 24344.269231 13609.235294 10662.459459 15855.921569 12686.411765 12829.920000 6644.076923 ... 8253.000000 15386.750000 13012.411765 3681.461538 10482.230769 3366.307692 12019.400000 2336.500000 4713.142857 14096.795262
20190119 26445.300000 25834.220000 14579.382353 18944.307692 9155.882353 7646.894737 10985.784314 9124.823529 8533.360000 4743.615385 ... 6707.928571 11581.500000 9154.257143 3005.615385 8693.923077 2533.923077 9146.300000 2645.166667 3877.619048 10532.864636
20190120 18177.700000 18204.880000 10024.588235 13815.115385 6369.862745 5679.105263 7980.666667 6499.882353 6037.920000 2968.384615 ... 5557.500000 9882.875000 6438.794118 2254.615385 6815.692308 2095.230769 6812.100000 1818.333333 3111.047619 7599.599662
20190121 29176.800000 32911.780000 17544.529412 22469.769231 12898.549020 9456.947368 15122.705882 11942.882353 11870.080000 6415.846154 ... 7733.571429 13210.625000 12008.176471 3434.615385 9734.000000 3305.230769 10385.818182 2112.833333 4351.904762 12998.018550
20190122 30385.100000 33846.560000 17992.058824 23197.115385 13262.921569 10083.351351 15413.686275 12179.058824 12173.040000 6391.076923 ... 7797.071429 13821.250000 11930.571429 3560.692308 9865.615385 3391.153846 11531.200000 2002.833333 4466.523810 13362.830795
20190123 30479.800000 34518.600000 18108.676471 23512.730769 13388.117647 10191.567568 15538.431373 12337.235294 12350.240000 6672.615385 ... 7906.000000 14535.125000 12466.617647 3616.846154 9990.076923 3387.538462 11770.400000 2043.166667 4641.619048 13565.737288
20190124 30946.700000 34648.280000 18948.727273 23583.461538 13410.764706 9925.052632 15492.117647 12598.176471 12280.800000 6620.615385 ... 7908.642857 14047.375000 12502.142857 3540.923077 9794.000000 3369.769231 11654.600000 2354.500000 4554.476190 13600.606419
20190125 32804.400000 36225.900000 19456.088235 24601.961538 13724.921569 10660.756757 15974.882353 12842.058824 12986.080000 6937.615385 ... 8310.285714 15365.500000 13150.941176 3657.923077 10265.615385 3431.307692 12112.400000 2199.166667 4789.714286 14274.300509
20190126 26851.700000 26342.380000 14711.441176 19448.000000 9294.705882 7963.447368 11107.058824 9019.941176 8676.720000 5219.846154 ... 6878.928571 11856.750000 9211.529412 2900.769231 8399.076923 2597.000000 9650.500000 2168.166667 3954.904762 10689.658206
20190127 19390.400000 18731.140000 9972.705882 14107.576923 6706.196078 5811.027027 7918.215686 6544.823529 6089.440000 3911.923077 ... 5774.142857 10048.250000 6278.485714 2318.000000 6691.461538 2067.692308 7139.200000 1848.833333 2986.761905 7781.349662
20190128 29776.700000 33275.400000 17783.794118 22917.730769 13090.568627 9629.657895 15320.588235 12150.705882 12113.040000 6298.230769 ... 8131.714286 13402.750000 12168.852941 3410.461538 9693.153846 3376.692308 11570.900000 2120.000000 4561.238095 13203.326014
20190129 30298.700000 33719.620000 18035.676471 23317.230769 13236.196078 9839.657895 15432.588235 12560.000000 12302.200000 6501.000000 ... 7892.857143 13809.875000 12331.885714 3518.461538 9709.000000 3403.230769 11559.300000 2363.333333 4487.761905 13355.789207
20190130 30727.100000 33922.580000 18246.264706 23645.807692 13465.254902 10041.131579 15561.529412 12385.705882 12393.680000 6511.846154 ... 7820.714286 14624.250000 12146.400000 3577.615385 9898.307692 3423.153846 11940.900000 2080.500000 4657.476190 13506.682968
20190131 30242.600000 33520.920000 17966.588235 23120.192308 13240.607843 10148.162162 15374.941176 12296.588235 12299.280000 6540.307692 ... 7964.357143 13890.500000 11941.828571 3373.923077 9619.769231 3392.538462 11456.300000 2009.833333 4435.619048 13317.610829
All 27714.254839 30257.951613 16306.236416 21121.942928 11566.161923 8968.502577 13568.542062 10888.738140 10686.589677 5722.858561 ... 7319.011521 12936.725806 10815.070962 3238.014888 9131.004963 3029.610422 10428.092949 2121.064516 4173.697389 12048.564143

32 rows × 52 columns

타임시리즈

In [11]:
from datetime import datetime
In [19]:
t = datetime.strptime('20190301','%Y%m%d')
t
Out[19]:
datetime.datetime(2019, 3, 1, 0, 0)
In [25]:
t.strftime('%Y-%m(%b, %B)-%d %w(%a, %A) %p, %x')
Out[25]:
'2019-03(Mar, March)-01 5(Fri, Friday) AM, 03/01/19'
In [27]:
di = pd.to_datetime(['2019/3/1', '2019/3/2', '2019/3/3'])
type(di)
Out[27]:
pandas.core.indexes.datetimes.DatetimeIndex
In [30]:
t = pd.Series(di)
t
Out[30]:
0   2019-03-01
1   2019-03-02
2   2019-03-03
dtype: datetime64[ns]
In [33]:
t[0]
Out[33]:
Timestamp('2019-03-01 00:00:00')
In [35]:
pd.date_range('2019/1/1','2019/1/31')
Out[35]:
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
               '2019-01-09', '2019-01-10', '2019-01-11', '2019-01-12',
               '2019-01-13', '2019-01-14', '2019-01-15', '2019-01-16',
               '2019-01-17', '2019-01-18', '2019-01-19', '2019-01-20',
               '2019-01-21', '2019-01-22', '2019-01-23', '2019-01-24',
               '2019-01-25', '2019-01-26', '2019-01-27', '2019-01-28',
               '2019-01-29', '2019-01-30', '2019-01-31'],
              dtype='datetime64[ns]', freq='D')
In [36]:
help(pd.to_datetime)
Help on function to_datetime in module pandas.core.tools.datetimes:

to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=False)
    Convert argument to datetime.
    
    Parameters
    ----------
    arg : integer, float, string, datetime, list, tuple, 1-d array, Series
    
        .. versionadded:: 0.18.1
    
           or DataFrame/dict-like
    
    errors : {'ignore', 'raise', 'coerce'}, default 'raise'
    
        - If 'raise', then invalid parsing will raise an exception
        - If 'coerce', then invalid parsing will be set as NaT
        - If 'ignore', then invalid parsing will return the input
    dayfirst : boolean, default False
        Specify a date parse order if `arg` is str or its list-likes.
        If True, parses dates with the day first, eg 10/11/12 is parsed as
        2012-11-10.
        Warning: dayfirst=True is not strict, but will prefer to parse
        with day first (this is a known bug, based on dateutil behavior).
    yearfirst : boolean, default False
        Specify a date parse order if `arg` is str or its list-likes.
    
        - If True parses dates with the year first, eg 10/11/12 is parsed as
          2010-11-12.
        - If both dayfirst and yearfirst are True, yearfirst is preceded (same
          as dateutil).
    
        Warning: yearfirst=True is not strict, but will prefer to parse
        with year first (this is a known bug, based on dateutil beahavior).
    
        .. versionadded:: 0.16.1
    
    utc : boolean, default None
        Return UTC DatetimeIndex if True (converting any tz-aware
        datetime.datetime objects as well).
    box : boolean, default True
    
        - If True returns a DatetimeIndex
        - If False returns ndarray of values.
    format : string, default None
        strftime to parse time, eg "%d/%m/%Y", note that "%f" will parse
        all the way up to nanoseconds.
    exact : boolean, True by default
    
        - If True, require an exact format match.
        - If False, allow the format to match anywhere in the target string.
    
    unit : string, default 'ns'
        unit of the arg (D,s,ms,us,ns) denote the unit, which is an
        integer or float number. This will be based off the origin.
        Example, with unit='ms' and origin='unix' (the default), this
        would calculate the number of milliseconds to the unix epoch start.
    infer_datetime_format : boolean, default False
        If True and no `format` is given, attempt to infer the format of the
        datetime strings, and if it can be inferred, switch to a faster
        method of parsing them. In some cases this can increase the parsing
        speed by ~5-10x.
    origin : scalar, default is 'unix'
        Define the reference date. The numeric values would be parsed as number
        of units (defined by `unit`) since this reference date.
    
        - If 'unix' (or POSIX) time; origin is set to 1970-01-01.
        - If 'julian', unit must be 'D', and origin is set to beginning of
          Julian Calendar. Julian day number 0 is assigned to the day starting
          at noon on January 1, 4713 BC.
        - If Timestamp convertible, origin is set to Timestamp identified by
          origin.
    
        .. versionadded:: 0.20.0
    cache : boolean, default False
        If True, use a cache of unique, converted dates to apply the datetime
        conversion. May produce sigificant speed-up when parsing duplicate date
        strings, especially ones with timezone offsets.
    
        .. versionadded:: 0.23.0
    
    Returns
    -------
    ret : datetime if parsing succeeded.
        Return type depends on input:
    
        - list-like: DatetimeIndex
        - Series: Series of datetime64 dtype
        - scalar: Timestamp
    
        In case when it is not possible to return designated types (e.g. when
        any element of input is before Timestamp.min or after Timestamp.max)
        return will have datetime.datetime type (or corresponding
        array/Series).
    
    Examples
    --------
    Assembling a datetime from multiple columns of a DataFrame. The keys can be
    common abbreviations like ['year', 'month', 'day', 'minute', 'second',
    'ms', 'us', 'ns']) or plurals of the same
    
    >>> df = pd.DataFrame({'year': [2015, 2016],
                           'month': [2, 3],
                           'day': [4, 5]})
    >>> pd.to_datetime(df)
    0   2015-02-04
    1   2016-03-05
    dtype: datetime64[ns]
    
    If a date does not meet the `timestamp limitations
    <http://pandas.pydata.org/pandas-docs/stable/timeseries.html
    #timeseries-timestamp-limits>`_, passing errors='ignore'
    will return the original input instead of raising any exception.
    
    Passing errors='coerce' will force an out-of-bounds date to NaT,
    in addition to forcing non-dates (or non-parseable dates) to NaT.
    
    >>> pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')
    datetime.datetime(1300, 1, 1, 0, 0)
    >>> pd.to_datetime('13000101', format='%Y%m%d', errors='coerce')
    NaT
    
    Passing infer_datetime_format=True can often-times speedup a parsing
    if its not an ISO8601 format exactly, but in a regular format.
    
    >>> s = pd.Series(['3/11/2000', '3/12/2000', '3/13/2000']*1000)
    
    >>> s.head()
    0    3/11/2000
    1    3/12/2000
    2    3/13/2000
    3    3/11/2000
    4    3/12/2000
    dtype: object
    
    >>> %timeit pd.to_datetime(s,infer_datetime_format=True)
    100 loops, best of 3: 10.4 ms per loop
    
    >>> %timeit pd.to_datetime(s,infer_datetime_format=False)
    1 loop, best of 3: 471 ms per loop
    
    Using a unix epoch time
    
    >>> pd.to_datetime(1490195805, unit='s')
    Timestamp('2017-03-22 15:16:45')
    >>> pd.to_datetime(1490195805433502912, unit='ns')
    Timestamp('2017-03-22 15:16:45.433502912')
    
    .. warning:: For float arg, precision rounding might happen. To prevent
        unexpected behavior use a fixed-width exact type.
    
    Using a non-unix epoch origin
    
    >>> pd.to_datetime([1, 2, 3], unit='D',
                       origin=pd.Timestamp('1960-01-01'))
    0    1960-01-02
    1    1960-01-03
    2    1960-01-04
    
    See also
    --------
    pandas.DataFrame.astype : Cast argument to a specified dtype.
    pandas.to_timedelta : Convert argument to timedelta.

In [38]:
t = pd.to_datetime([20190101, 20190102], format='%Y%m%d')
t.resample('D')
----------------------------------------------------------------------
AttributeError                       Traceback (most recent call last)
<ipython-input-38-750675c5f7bb> in <module>()
      1 t = pd.to_datetime([20190101, 20190102], format='%Y%m%d')
----> 2 t.resample('D')

AttributeError: 'DatetimeIndex' object has no attribute 'resample'
In [39]:
help(pd.Series.resample)

Help on function resample in module pandas.core.generic: resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None) Convenience method for frequency conversion and resampling of time series. Object must have a datetime-like index (DatetimeIndex, PeriodIndex, or TimedeltaIndex), or pass datetime-like values to the on or level keyword. Parameters ---------- rule : string the offset string or object representing target conversion axis : int, optional, default 0 closed : {'right', 'left'} Which side of bin interval is closed. The default is 'left' for all frequency offsets except for 'M', 'A', 'Q', 'BM', 'BA', 'BQ', and 'W' which all have a default of 'right'. label : {'right', 'left'} Which bin edge label to label bucket with. The default is 'left' for all frequency offsets except for 'M', 'A', 'Q', 'BM', 'BA', 'BQ', and 'W' which all have a default of 'right'. convention : {'start', 'end', 's', 'e'} For PeriodIndex only, controls whether to use the start or end of `rule` kind: {'timestamp', 'period'}, optional Pass 'timestamp' to convert the resulting index to a ``DateTimeIndex`` or 'period' to convert it to a ``PeriodIndex``. By default the input representation is retained. loffset : timedelta Adjust the resampled time labels base : int, default 0 For frequencies that evenly subdivide 1 day, the "origin" of the aggregated intervals. For example, for '5min' frequency, base could range from 0 through 4. Defaults to 0 on : string, optional For a DataFrame, column to use instead of index for resampling. Column must be datetime-like. .. versionadded:: 0.19.0 level : string or int, optional For a MultiIndex, level (name or number) to use for resampling. Level must be datetime-like. .. versionadded:: 0.19.0

In [42]:
data2 = data.copy()
data2['day'] = pd.to_datetime(data2.사용일자, format='%Y%m%d')
data2.head()
Out[42]:
사용일자 노선명 역ID 역명 승차총승객수 하차총승객수 등록일자 day
0 20190101 경춘선 1323 가평 1520 1436 20190104 2019-01-01
1 20190101 경춘선 1322 상천 275 114 20190104 2019-01-01
2 20190101 경춘선 1321 청평 1509 1083 20190104 2019-01-01
3 20190101 경춘선 1320 대성리 357 271 20190104 2019-01-01
4 20190101 경춘선 1319 마석 1772 1963 20190104 2019-01-01
In [48]:
data2.resample('D', on='day').mean()
Out[48]:
사용일자 역ID 승차총승객수 하차총승객수 등록일자
day
2019-01-01 20190101.0 1882.940878 5776.939189 5732.271959 20190104.0
2019-01-02 20190102.0 1882.954392 12874.439189 12824.888514 20190105.0
2019-01-03 20190103.0 1879.278246 13277.726813 13225.161889 20190106.0
2019-01-04 20190104.0 1883.898305 14017.533898 13964.298305 20190107.0
2019-01-05 20190105.0 1884.156197 10292.519525 10237.760611 20190108.0
2019-01-06 20190106.0 1887.045763 7472.403390 7424.657627 20190109.0
2019-01-07 20190107.0 1882.947635 13216.939189 13166.797297 20190110.0
2019-01-08 20190108.0 1881.712352 13389.445008 13333.705584 20190111.0
2019-01-09 20190109.0 1887.143824 13224.035533 13169.321489 20190112.0
2019-01-10 20190110.0 1883.350254 13497.969543 13441.384095 20190113.0
2019-01-11 20190111.0 1880.714527 14106.962838 14057.800676 20190114.0
2019-01-12 20190112.0 1882.939189 10611.805743 10557.322635 20190115.0
2019-01-13 20190113.0 1882.947635 7603.130068 7553.091216 20190116.0
2019-01-14 20190114.0 1882.957770 12973.709459 12922.288851 20190117.0
2019-01-15 20190115.0 1881.253807 13243.169205 13192.695431 20190118.0
2019-01-16 20190116.0 1880.719595 13329.574324 13278.153716 20190119.0
2019-01-17 20190117.0 1883.949239 13595.201354 13542.375635 20190120.0
2019-01-18 20190118.0 1881.700508 14148.287648 14096.795262 20190121.0
2019-01-19 20190119.0 1883.949239 10591.871404 10532.864636 20190122.0
2019-01-20 20190120.0 1883.390203 7653.648649 7599.599662 20190123.0
2019-01-21 20190121.0 1883.053963 13045.849916 12998.018550 20190124.0
2019-01-22 20190122.0 1881.715736 13417.159052 13362.830795 20190125.0
2019-01-23 20190123.0 1883.157627 13618.425424 13565.737288 20190126.0
2019-01-24 20190124.0 1884.131757 13653.226351 13600.606419 20190127.0
2019-01-25 20190125.0 1884.156197 14327.000000 14274.300509 20190128.0
2019-01-26 20190126.0 1883.934010 10745.443316 10689.658206 20190129.0
2019-01-27 20190127.0 1880.719595 7830.212838 7781.349662 20190130.0
2019-01-28 20190128.0 1883.395270 13251.771959 13203.326014 20190131.0
2019-01-29 20190129.0 1881.966273 13404.536256 13355.789207 20190201.0
2019-01-30 20190130.0 1881.495784 13557.890388 13506.682968 20190202.0
2019-01-31 20190131.0 1881.253807 13366.074450 13317.610829 20190203.0
In [47]:
data2.groupby('day').mean()
Out[47]:
사용일자 역ID 승차총승객수 하차총승객수 등록일자
day
2019-01-01 20190101.0 1882.940878 5776.939189 5732.271959 20190104.0
2019-01-02 20190102.0 1882.954392 12874.439189 12824.888514 20190105.0
2019-01-03 20190103.0 1879.278246 13277.726813 13225.161889 20190106.0
2019-01-04 20190104.0 1883.898305 14017.533898 13964.298305 20190107.0
2019-01-05 20190105.0 1884.156197 10292.519525 10237.760611 20190108.0
2019-01-06 20190106.0 1887.045763 7472.403390 7424.657627 20190109.0
2019-01-07 20190107.0 1882.947635 13216.939189 13166.797297 20190110.0
2019-01-08 20190108.0 1881.712352 13389.445008 13333.705584 20190111.0
2019-01-09 20190109.0 1887.143824 13224.035533 13169.321489 20190112.0
2019-01-10 20190110.0 1883.350254 13497.969543 13441.384095 20190113.0
2019-01-11 20190111.0 1880.714527 14106.962838 14057.800676 20190114.0
2019-01-12 20190112.0 1882.939189 10611.805743 10557.322635 20190115.0
2019-01-13 20190113.0 1882.947635 7603.130068 7553.091216 20190116.0
2019-01-14 20190114.0 1882.957770 12973.709459 12922.288851 20190117.0
2019-01-15 20190115.0 1881.253807 13243.169205 13192.695431 20190118.0
2019-01-16 20190116.0 1880.719595 13329.574324 13278.153716 20190119.0
2019-01-17 20190117.0 1883.949239 13595.201354 13542.375635 20190120.0
2019-01-18 20190118.0 1881.700508 14148.287648 14096.795262 20190121.0
2019-01-19 20190119.0 1883.949239 10591.871404 10532.864636 20190122.0
2019-01-20 20190120.0 1883.390203 7653.648649 7599.599662 20190123.0
2019-01-21 20190121.0 1883.053963 13045.849916 12998.018550 20190124.0
2019-01-22 20190122.0 1881.715736 13417.159052 13362.830795 20190125.0
2019-01-23 20190123.0 1883.157627 13618.425424 13565.737288 20190126.0
2019-01-24 20190124.0 1884.131757 13653.226351 13600.606419 20190127.0
2019-01-25 20190125.0 1884.156197 14327.000000 14274.300509 20190128.0
2019-01-26 20190126.0 1883.934010 10745.443316 10689.658206 20190129.0
2019-01-27 20190127.0 1880.719595 7830.212838 7781.349662 20190130.0
2019-01-28 20190128.0 1883.395270 13251.771959 13203.326014 20190131.0
2019-01-29 20190129.0 1881.966273 13404.536256 13355.789207 20190201.0
2019-01-30 20190130.0 1881.495784 13557.890388 13506.682968 20190202.0
2019-01-31 20190131.0 1881.253807 13366.074450 13317.610829 20190203.0
In [67]:
pd.to_datetime('2019/3/3') + pd.tseries.offsets.MonthEnd(0)
Out[67]:
Timestamp('2019-03-31 00:00:00')
In [69]:
pd.to_datetime('2019/3/2') + pd.tseries.offsets.MonthBegin(0)
Out[69]:
Timestamp('2019-04-01 00:00:00')
In [65]:
pd.tseries.offsets.MonthEnd(datetime.now())
----------------------------------------------------------------------
TypeError                            Traceback (most recent call last)
pandas\_libs\tslibs\offsets.pyx in pandas._libs.tslibs.offsets._BaseOffset._validate_n()

TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.datetime'

During handling of the above exception, another exception occurred:

TypeError                            Traceback (most recent call last)
<ipython-input-65-97634b37577e> in <module>()
----> 1 pd.tseries.offsets.MonthEnd(datetime.now())

C:\Anaconda3\lib\site-packages\pandas\tseries\offsets.py in __init__(self, n, normalize)
    956 
    957     def __init__(self, n=1, normalize=False):
--> 958         self.n = self._validate_n(n)
    959         self.normalize = normalize
    960 

pandas\_libs\tslibs\offsets.pyx in pandas._libs.tslibs.offsets._BaseOffset._validate_n()

TypeError: `n` argument must be an integer, got <class 'datetime.datetime'>


'beginner > 파이썬 분석' 카테고리의 다른 글

캐글 타이타닉 데이터 분석 - 2  (1) 2019.04.12
캐글 타이타닉 데이터 분석 - 1  (0) 2019.04.11
분석 -1  (0) 2019.03.06
로지스틱 회귀분석 실습  (0) 2019.02.11
인공신경망 실습  (2) 2019.02.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함