티스토리 뷰

반응형

데이터 보기

df=pd.read_csv('서울시 지하철 호선별 역별 시간대별 승하차 인원 정보.csv',encoding='cp949')
df.head()

df.shape

(46552, 52)

 

#결측치확인
df.isnull().sum()

 

결측치가 없다.

df['사용월'].unique()

array([202108, 202107, 202106, 202105, 202104, 202103, 202102, 202101, 202012, 202011, 202010, 202009, 202008, 202007, 202006, 202005, 202004, 202003, 202002, 202001, 201912, 201911, 201910, 201909, 201908, 201907, 201906, 201905, 201904, 201903, 201902, 201901, 201812, 201811, 201810, 201809, 201808, 201807, 201806, 201805, 201804, 201803, 201802, 201801, 201712, 201711, 201710, 201709, 201708, 201707, 201706, 201705, 201704, 201703, 201702, 201701, 201612, 201611, 201610, 201609, 201608, 201607, 201606, 201605, 201604, 201603, 201602, 201601, 201512, 201511, 201510, 201509, 201508, 201507, 201506, 201505, 201504, 201503, 201502, 201501], dtype=int64)

 

연월일로 구분되어 있다.

 

인트형이니까 str로 바꾸면 메소드를 더 많이 쓸 수 있다.

 

df['사용월']=df['사용월'].astype('str')
#불필요한 컬럼 삭제
df.drop(columns=['작업일자'],inplace=True)

 

 

승차/하차를 나누고 이에 대해 시간대별로 분석해보자.

공통된 칼럼은 앞에 3개 날짜, 승선지하철, 역이름 등이다.

#승차/하차 테이블 분리
#공통 컬럼 가져오기
df1=df.iloc[:,:3]

#승차 칼럼 가져오기
df2=df.iloc[:,3::2]
df2.columns=df2.columns.str.split(' ').str[0]
df2
#공통칼럼과 승차칼럼 연결하기
df_in=pd.concat([df1,df2],axis=1)
df_in

 

하차도 똑같은 절차를 거친다.

df3=df.iloc[:,4::2]
df3.columns.str.split(' ')
df3.columns=df3.columns.str.split(' ').str[0]
df_out=pd.concat([df1,df3],axis=1)
df_out

 

 

특정 월을 분석해보자.

8월 분석

#8월만 뽑기
df_in_202108=df_in[df_in['사용월']=='202108']
df_out_202108=df_out[df_out['사용월']=='202108']
df_in_202108

 

 

출근시간에 가장 많이 승차하는 역 보기

#출근시간에 가장 많은 사람이 승차하는 역
df_in_202108.nlargest(10,'08시-09시')[['지하철역','08시-09시']]

신림, 구로디지털단지가 많다. 역시 공장이 많아서 그런가

 

#출근시간에 가장 많이 하차하는 역은?
df_out_202108.nlargest(10,'09시-10시')[['지하철역','09시-10시']]

퇴근시간도 똑같다.

df_out_202108.nlargest(10,'19시-20시')[['지하철역','19시-20시']]

 

 

df_gangnam_in=df_in_202108[df_in_202108['지하철역']=='강남'].iloc[:,3:]
df_gangnam_in
df_gangnam_in=df_gangnam_in.melt()
df_gangnam_in.columns=['시간대','승차건수']
df_gangnam_in.columns.sort_values('승차건수')
df_gangnam_in

 

시간대별로 확인해보자.

 

 

시각화

#시간대별 승차인원 시각화하기
df_gangnam_in
plt.barh(df_gangnam_in['시간대'],df_gangnam_in['승차건수'])
plt.show()

 

#시간대별 승차 현황
df_in_202108_agg=df_in_202108.copy()
#인덱스 변경
df_in_202108_agg.index=df_in_202108_agg['지하철역']
df_in_202108_agg
df_in_202108_agg.drop(columns=['사용월','호선명','지하철역'],inplace=True)
df_in_202108_agg.loc['sum']=df_in_202108_agg.apply('sum',axis=0)
df_in_202108_agg['sum']=df_in_202108_agg.apply('sum',axis=1)
df_in_202108_agg

각 행과 열의 합계를 구해보자.

s_in=df_in_202108_agg.loc['sum'][:-1].sort_values()
s_in=s_in.sort_index()
s_in
x=s_in.index
y=s_in.values
plt.bar(x,y)
plt.xticks(rotation=90)
plt.show()

 

퇴근시간과 출근시간에 가장 많다.

 

df_in_202108_agg['sum'][:-1].sort_values(ascending=False).to_frame()
df_out_202108_agg=df_out_202108.copy()
df_out_202108_agg.index=df_out_202108_agg['지하철역']
df_out_202108_agg.drop(columns=['사용월','호선명','지하철역'],inplace=True)
df_out_202108_agg.loc['sum']=df_out_202108_agg.apply('sum',axis=0)
df_out_202108_agg['sum']=df_out_202108_agg.apply('sum',axis=1)
df_out_202108_agg.loc['sum'].sort_values()

 

df_out_202108_agg['sum'][:-1].sort_values(ascending=False)[:10].to_frame()

 

강남이 가장 많다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/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
글 보관함
반응형