개인적으로 데이터 분석 프로젝트를 해보고 싶어 찾아보던 중에 데이콘이라는 사이트를 알게 되었다.
언젠가 캐글에서 직접 프로젝트를 해보리라 생각했었는데 한국 플랫폼이 있어 쉽게 접근할 수 있을 것 같다.
대회 뿐만 아니라 기초부터 연습할 수 있는 코너도 마련되어 있어서 친숙해보이는 따릉이 관련 주제를 골랐다.
회원가입 후 연습 프로젝트에 참여했고 데이터셋을 다운받았다.
주제는 특정 기간동안의 따릉이 대여 데이터와 기상 데이터를 가지고 1시간 후의 따릉이 대여 수를 예측하는 모델을
개발하는 것이다.
다행히도 입문자들을 위한 교육용 유튜브 강의가 제공된다.
1. EDA
2. 전처리
3. 모델링
이상의 3가지 강의 (총 1시간 정도의 분량) 를 들으며 실습을 진행해보면 될 것 같다.
데이터 분석은 파이썬을 사용하는데, 구글 코랩을 이용하기 때문에 파이썬을 PC에 직접 설치할 필요가 없다.
https://colab.research.google.com/
코랩은 기본적으로 무료이며 사용을 위해서 구글 계정이 필요하다.
구글 드라이브와 연동하여 사용하기 때문에 기본 용량에는 제한이 있다. (추가 요금 지불시 용량업그레이드 가능)
구글드라이브 마운트를 비롯한 기본적인 코랩 셋업 과정은 다행스럽게도 데이콘 유튜브에서 확인할 수 있다.
코랩에서 새 노트를 생성하고 구글 드라이브를 마운트했다.
그리고 drive 파일이 있는 경로를 지정해 준다.
from google.colab import drive
drive.mount('/content/drive')
구글 드라이브의 기본 폴더인 drive 폴더 - MyDrive 폴더에 새로운 폴더를 만들고 실습 데이터셋을 업로드 해놓았다.
이제 데이터를 불러오는 pandas 패키지를 임포트해준다.
import pandas as pd
그리고 train 데이터를 읽어온다. (나는 MyDrive폴더 아래에 dacon 폴더를 만들고 데이터셋을 저장했다)
파일 경로에 이상이 없는지 잘 확인해야 한다.
train = pd.read_csv('/content/drive/MyDrive/dacon/train.csv')
본 프로젝트에서 사용할 패키지인 의사결정나무, 랜덤포레스트를 임포트해준다.
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
모델을 테스트할 테스트 데이터와 제출용 답안 파일(submission)도 읽어와준다.
test = pd.read_csv('/content/drive/MyDrive/dacon/test.csv')
submission = pd.read_csv('/content/drive/MyDrive/dacon/submission.csv')
train 데이터를 대충 파악해보기 위해 상위 5행만 읽어본다.
train.head()
각 데이터셋의 컬럼과 로우 수를 확인해 본다.
print(train.shape)
print(test.shape)
print(submission.shape)
테스트 데이터는 훈련용 데이터보다 전체적으로 볼륨이 적은 것을 알 수 있다.
테스트 데이터에 없는 1개의 컬럼은 count 컬럼이다.
count를 예측해야 하기 때문에 직접 값을 구하는 것이 이번 프로젝트의 목표이다.
훈련용 데이터의 메타데이터를 살펴본다.
train.info()
전체 로우 수는 id값인 1459행인데, 온도 등을 비롯한 대부분의 컬럼이 이보다 적은 것을 보면
결측치가 있는 것으로 보인다.
이번에는 데이터의 기술통계를 확인해 본다.
train.describe()
시간당 대여량인 count값의 평균이 약 108건 정도 되는 것을 확인할 수 있다.
구하려는 count값도 비슷하게 나올지를 따져보게 된다.
이제 모든 시간대 (hour) 기준으로 평균 대여량을 구해 선 그래프를 그려본다.
train.groupby('hour').mean()['count'].plot()
그래프를 꾸며보았다.
plt.plot(train.groupby('hour').mean()['count'], 'go-') #시간별 마커 추가
plt.grid() #격자선 추가
plt.title('count by hours', fontsize = 15) #그래프 제목 추가하고 사이즈 지정
plt.xlabel('hour', fontsize = 15) #x축 라벨 추가
plt.ylabel('count', fontsize = 15) #y축 라벨 추가
plt.axvline(8, color = 'r') #8시 위치에 강조선 추가
plt.axvline(18, color = 'r') #18시 위치에 강조선 추가
plt.text(8, 120, 'go work', fontsize = 10) #특정 좌표에 메모 추가
plt.text(18, 260, 'leave work', fontsize = 10) #특정 좌표에 메모 추가
그래프는 png 파일로 저장도 가능하다.
plt.savefig('picture.png')
이번에는 변수별 상관계수를 구해본다.
train.corr()
가독성있게 시각화하기 위해 seaborn 패키지를 임포트한다.
import seaborn as sns
히트맵을 그리고 색깔 위에 수치도 표시해준다.
plt.figure(figsize=(10,10))
sns.heatmap(train.corr(), annot=True)
시간 다음으로
1시간 전 온도 : 0.62
1시간 전 풍속 : 0.48
2가지의 변수가 상관성이 높아 보인다.
다음편에서 이 2가지 변수를 집중적으로 파헤쳐본다.