이번에는 공공데이터를 활용하여 파이썬의 pandas를 다뤄보도록 하겠습니다.
pandas 등 데이터를 다룰 때, 심심하게 해보기 좋은 데이터들은 공공데이터 같은데서 구할 수 있습니다. 이번에는 대전지하철의 공공데이터를 활용해 데이터 분석을 해봅시다.
자 먼저 공공데이터 포털이나 대전교통공사 데이터포털에서 데이터를 구합시다.
https://www.djtc.kr/kor/page.do?menuIdx=281
위의 둘 사이트에서 공공데이터를 구해볼 수 있습니다. 저는 대전교통공사 시간대별 승하차 인원 데이터를 이용해보았습니다.
데이터 용량이 그렇게 부담되는 편은 아닙니다.
import pandas as pd
import matplotlib.pyplot as plt
import math
import matplotlib.font_manager as fm
fm.fontManager.ttflist
[f.name for f in fm.fontManager.ttflist]
이번에 사용할 라이브러리 들입니다. matplotlib까지 해서 시각화도 해보겠습니다.
마지막 fontManager는 후에 설명합니다.
plt.rcParams['font.family'] = 'AppleSDGothicNeoUL00'
matplotlib에서 시각화를 하는데 있어서 글꼴을 설정했습니다. 보기 좋은 글꼴을 설정해볼 수 있습니다.
일단 데이터 확인부터 해봅시다. 데이터프레임에 한글이 있어서 실행이 안될텐데 encoding란에 cp949 넣어주시면 해결됩니다.
4월 한달간의 대전지하철 전역 승하차량을 표시하고 있습니다. 저는 여기서 대동역의 승차량만 뽑아서 쓰겠습니다.
응용이 된다면 다른 역으로 해볼 수 있습니다.
loc
- loc를 통해 특정 행열값을 가져올 수 있습니다.
- loc["index"]는 데이터프레임없이 특정 행열값 그대로만을 추출합니다
- loc[["index"]]는 데이터프레임으로 특정 행열값을 추출합니다
필요한 데이터만 추출했습니다. 하지만 역코드가 남아있는데 우리는 필요없기에 날려보겠습니다.
Drop
- drop을 통해 특정 행열을 날릴 수 있습니다.
- drop.(["row"], axis = 1)와 같이 세로의 열값을 날릴땐 axis = 1을 넣어야 합니다.
- drop.(["column"], axis = 0)과 같이 가로의 행값을 날릴땐 axis = 0 을 넣어도 되고 행의 경우에는 안넣어도 됩니다.
깔끔하게 역 코드만 날라갔습니다.
일단 데이터가 4월의 전체날짜가 있습니다. 이걸 바로 시각화하기에는 보는데도 무리가 있을 것이기 때문에 4월날짜 전체를 평균으로 하여 데이터를 시각화 해보겠습니다.
mean
- mean을 이용해 평균을 구할 수 있습니다.
- 평균은 (1열의 데이터의 총 덧셈 / 1열의 데이터의 갯수) 입니다.
round
- 결과가 소숫점으로 나오는데 반올림 해줍니다.
- data.round(n)에서 n은 나타낼 소숫점의 갯수입니다. 0이면 소숫점 첫번째 자리가 무조건 0으로 표기됩니다. 1이면 소숫점 한자리 수 까지 표현합니다.
결과가 나왔죠, 이 것도 데이터프레임을 만들어줍시다.
DataFrame을 만들면서 인덱스는 시간대로하여금, 값은 수송량으로 해서 만들면 시각화가 잘될 것 같습니다.
그리고 set_index 없이 만들게 되면 인덱스가 시간대가 아닌 0 1 2 로 출력될 거기 때문에 시간대를 인덱스로 설정합시다.
이정도면 시각화했을 때 보기좋은 데이터가 된 것 같습니다.
시각화를 해봅시다.
대충 사이즈는 30에서 6으로 보기 편하게 수정하면 됩니다.
subplot(1, 1, 1)이 있는데 쉽게 풀면 1행 1열 짜리 그래프에 1번째 데이터를 넣겠다는 건데 짜피 시각화할 데이터는 1개라서 (1, 1, 1)로 해도 되는 겁니다.
그뒤로는 대충 해석될 겁니다.
아무튼 출력하면 이렇게 그래프가 나오죠, 확실히 출퇴근 시간인 08-09시가 가장 우뚝 솟은 것을 볼 수 있구요, 그 뒤로 퇴근시간인 16~19시가 살짝 솟은 것도 확인할 수 있습니다. 시각화 한번으로 동향을 확인할 수 있구요.
이렇게 pandas랑 matplotlib로 데이터를 다룰 수 있습니다.
할거없으면 공공데이터로 이렇게 가지고 놀면서 공부해볼 수 있구요.