우리 지역 버스는 얼마나 많이 탈까? - 버스 데이터 시각화
실습데이터 설명
실습 데이터의 경우 경기도 교통 정보센터에서 얻을 수 있었다.
# 모듈 로드
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# 6개월간의 버스(수원) 데이터를 한꺼번에 로드한다. 편의상 data[0]에는 0을 추가한다.
data = []
data.append(0)
for i in range(1,7):
try:
data.append(pd.read_csv('./data/TransitBusLinePass '+str(i)+'월.csv', encoding = 'cp949'))
except UnicodeDecodeError:
data.append(pd.read_csv('./data/TransitBusLinePass '+str(i)+'월.csv', encoding = 'utf-8'))
# 데이터를 하나로 합친다.
final_data_1 = pd.merge(data[1],data[2],how = 'outer')
final_data_2 = pd.merge(data[3],data[4],how = 'outer')
final_data_3 = pd.merge(data[5],data[6],how = 'outer')
final_data_4 = pd.merge(final_data_1,final_data_2,how = 'outer')
final_data = pd.merge(final_data_3,final_data_4,how = 'outer')
change_col = ['승차','하차','전체','승차.1','하차.1','전체.1','승차.2','하차.2','전체.2']
# for i in change_col:
# for i in change_col:
for i in change_col:
final_data[i] = final_data[i].str.replace(',', '').astype(float)
print(final_data.dtypes)
지역 object
노선 object
시·종점 object
월 int64
일시 object
시간 object
승차 float64
하차 float64
전체 float64
승차.1 float64
하차.1 float64
전체.1 float64
승차.2 float64
하차.2 float64
전체.2 float64
dtype: object
여기서 시각화 과정에서 문제가 생겨 데이터 타입을 뜯어보니, 승하차 데이터가 str 데이터로 되어 있었다. int로 되어야 시각화 가능하다.
final_data = final_data[final_data['지역'] == '수원시']
final_data
#편의상 전처리 완료 데이터를 bus라고 하자
bus = final_data
# 34번의 버스 시각화
bus34 = bus[(bus['노선'] == '34') & (bus['시간'] != '주간')& (bus['시간'] != '전일')]
bus34
type(bus34['승차.2'].iloc[3])
numpy.float64
# 안깨지도록 애플고딕을 쓴다
plt.style.use(['seaborn'])
plt.rcParams['font.family'] = 'AppleGothic'
plt.rcParams['figure.figsize'] = [20, 5]
plt.xticks(rotation=45)
(array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]),
[Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, '')])
g = sns.catplot(x="시간", y="승차.2", hue="일시",
col="월", aspect=.6,
kind="swarm", data=bus34)
g.set_xticklabels( rotation=45)
<seaborn.axisgrid.FacetGrid at 0x7fdf82f2d250>
코로나와 관련이 있을까? 3월 4월에는 화실히 이용객이 많이 줄어든 모습을 보여주었다
(array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]),
[Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, ''),
Text(0, 0, '')])
g2 = sns.lineplot(data=bus34, x="시간", y="승차.2", hue = "일시")
확실히 평일에는 출퇴근 시간에 이용객이 많음을 알 수 있다.
720-1번 버스도 살펴보자
bus5100 = bus[(bus['노선'] == '5100') & (bus['시간'] != '주간')& (bus['시간'] != '전일')]
bus5100
지역 object
노선 object
시·종점 object
월 int64
일시 object
시간 object
승차 int64
하차 int64
전체 int64
승차.1 int64
하차.1 int64
전체.1 int64
승차.2 int64
하차.2 int64
전체.2 int64
dtype: object
/Users/junhyeoungson/opt/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py:3065: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
self[k1] = value[k2]
g = sns.catplot(x="시간", y="승차.2", hue="일시",
col="월", aspect=.6,
kind="swarm", data=bus5100)
g.set_xticklabels( rotation=45)
<seaborn.axisgrid.FacetGrid at 0x7fdf87a3d690>
g2 = sns.lineplot(data=bus5100, x="시간", y="승차.2", hue = "일시")
g2 = sns.lineplot(data=bus5100, x="시간", y="하차.2", hue = "일시")
5100번 버스는 수원과 강남을 오가는 대표적인 출퇴근 버스다. 특이한 점은 주말에 낮에 이 버스를 이용하는 사람이 많은 것을 보아, 주말 오후에는 놀러가려고 이 버스를 타는 사람들이 많을 것으로 생각한다.
확실히 모든 버스 탑승이 06-07시부터 급격히 증가하여 09-10시 이후에는 크게 떨어지는 모습을 보인다.
이후에 17-18시에 버스 탑승자가 급상승하지만, 출근 시간대보다는 완만하게 승객이 이용하는 모습을 알 수 있었다.
IDEA 코로나 셧다운제 이후 - 이게 사실 언제 시작 됐는지 모르겠다. - 버스 이용객의 추이, 출퇴근(재택)의 변화로 인한 버스 이용객 추이까지 나타내 본다면 재밌을 것 같다.
#마지막은 버스를 간단하게 골라서 위 두 그래프를 시각화하는 함수이다.
def bus_how_many(bus_num , df):
# 중간누계를 제외한 버스 이용객의 수를 불러온다.
df = df[(df['노선'] == str(bus_num)) & (df['시간'] != '주간')& (df['시간'] != '전일')]
# 그래프를 그린다.
g = sns.catplot(x="시간", y="승차.2", hue="일시",
col="월", aspect=.6,
kind="swarm", data=df)
g.set_xticklabels( rotation=45)
plt.show(g)
g2 = sns.lineplot(data=df, x="시간", y="하차.2", hue = "일시")
plt.show(g2)
# 버스함수(버스번호, data)
bus_how_many(3,bus)
Author And Source
이 문제에 관하여(우리 지역 버스는 얼마나 많이 탈까? - 버스 데이터 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juncode/우리-지역-버스는-얼마나-많이-탈까-버스-데이터-시각화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)