일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Data Analyst
- Binary Tree
- 데이터 분석가
- BST
- 빅데이터
- Heap
- 데이터 엔지니어
- 빅데이터 지식
- hash
- Restroom
- data
- data scientist
- binary search tree
- Algorithms
- priority queue
- Linked List
- exam
- dataStructure
- Computer Science
- 화장실 지도
- Data Engineer
- algorithm
- HEAPS
- 뉴욕 화장실
- Data Structure
- 빅데이터 커리어 가이드북
- Computer Organization
- Study
- Preparing for the Google Cloud Professional Data Engineer Exam
- Newyork
- Today
- Total
Jaegool_'s log
데이터분석 종합반 4주차[스파르타 코딩]<LinearRegression, 자전거 수요 예측 준비 단계> 본문
데이터분석 종합반 4주차[스파르타 코딩]<LinearRegression, 자전거 수요 예측 준비 단계>
Jaegool 2022. 6. 25. 22:07https://teamsparta.notion.site/4-5f6ed21d5ffd4388955a07b945b584bb
[스파르타코딩클럽] 데이터분석 종합반 - 4주차
매 주차 강의자료 시작에 PDF파일을 올려두었어요!
teamsparta.notion.site
<LInearRegression>
<자전거 수요 예측하기 - 데이터 준비, 시각화, 상관분석 & 정규화>
* datetime - 년도-월-일 시간:분:초
* season - 1 = 봄, 2 = 여름, 3 = 가을, 4 = 겨울
* holiday - 1 = 토, 일요일의 주말을 제외한 국경일 등의 휴일, 0 = 휴일이 아닌 날
* workingday - 1 = 토, 일요일의 주말 및 휴일이 아닌 주중, 0 = 주말 및 휴일
* weather
- 1: 맑음, 약간 구름 낀 흐림
- 2: 안개, 안개 + 흐림
- 3: 가벼운 눈, 가벼운 비 + 천둥
- 4: 심한 눈/비, 천둥/번개
* temp - 온도(섭씨)
* atemp - 체감온도(섭씨)
* humidity - 상대 습도
* windspeed - 풍속
* casual - 사전에 등록되지 않은 사용자가 대여한 횟수
* registered - 사전에 등록된 사용자가 대여한 횟수
* count - 대여 횟수
- [코드] 패키지 임포트
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
- [코드] 데이터 불러오기
bike_df = pd.read_csv('https://raw.githubusercontent.com/jesford/bike-sharing/master/train.csv')
print(bike_df.shape)
bike_df.head(3)
- 결측값 확인: bike_df.isnull().sum()
- 각 열의 타입 확인: bike_df.info()
- datetime(object -> float) type 변환
# 문자열을 datetime 타입으로 변경.
bike_df['datetime'] = bike_df.datetime.apply(pd.to_datetime)
bike_df['datetime']
- 좀 더 세분화 된 분석을 위해서 datetime 형태의 데이터로부터 연, 월, 일, 시간과 같은 정보를 전부 분리해서 다뤄봅시다. 이는 판다스의 시리즈에서 datetime 타입의 데이터를 위해 제공하는 함수인 dt.year(), dt.month, dt.day, dt.hour를 통해 바로 추출이 가능합니다.
bike_df["year"] = bike_df["datetime"].dt.year # 연만 추출
bike_df["month"] = bike_df["datetime"].dt.month # 월만 추출
bike_df["day"] = bike_df["datetime"].dt.day # 일만 추출
bike_df["hour"] = bike_df["datetime"].dt.hour # 시간만 추출
bike_df.shape
- subplot 생성
# ax1은 첫번째 위치에 배정
# ax2는 두번째 위치에 배정
# ax3는 세번째 위치에 배정
# ax4는 네번째 위치에 배정
figure, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=1, ncols=4)
# 차트의 크기를 조절
figure.set_size_inches(16,4)
# sns(seaborn)을 이용한 bar 차트를 4개 생성.
# 이때, ax에 각각 ax1, ax2, ax3, ax4를 배정하므로서 차트의 위치가 결정.
sns.barplot(data=bike_df, x="year", y="count", ax=ax1)
sns.barplot(data=bike_df, x="month", y="count", ax=ax2)
sns.barplot(data=bike_df, x="day", y="count", ax=ax3)
sns.barplot(data=bike_df, x="hour", y="count", ax=ax4)
# ax의 각 위치에 y축의 레이블과 차트의 제목을 정해줄 수 있다.
ax1.set(ylabel='Count',title="Year")
ax2.set(xlabel='month',title="Month")
ax3.set(xlabel='day', title="Day")
ax4.set(xlabel='hour', title="Hour")
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2,ncols=2)
fig.set_size_inches(12, 10)
sns.boxplot(data=bike_df, y="count",orient="v",ax=ax1)
sns.boxplot(data=bike_df, y="count",x="season",orient="v",ax=ax2)
sns.boxplot(data=bike_df, y="count",x="hour",orient="v",ax=ax3)
sns.boxplot(data=bike_df, y="count",x="workingday",orient="v",ax=ax4)
ax1.set(ylabel='Count',title="Count")
ax2.set(xlabel='Season', ylabel='Count',title="Season Count")
ax3.set(xlabel='Hour Of The Day', ylabel='Count',title="Hour Of The Day Count")
ax4.set(xlabel='Working Day', ylabel='Count',title="Working Day Count")
bike_df["dayofweek"] = bike_df["datetime"].dt.dayofweek
bike_df.shape
# 이번에는 행만 5개입니다.
fig, (ax1, ax2, ax3, ax4, ax5)= plt.subplots(nrows=5)
fig.set_size_inches(20,25)
sns.pointplot(data=bike_df, x="hour", y="count", ax=ax1)
sns.pointplot(data=bike_df, x="hour", y="count", hue="workingday", ax=ax2)
sns.pointplot(data=bike_df, x="hour", y="count", hue="dayofweek", ax=ax3)
sns.pointplot(data=bike_df, x="hour", y="count", hue="weather", ax=ax4)
sns.pointplot(data=bike_df, x="hour", y="count", hue="season", ax=ax5)
- [코드] 상관관계 분석
cols = ["temp", "atemp", "humidity", "windspeed", "count"]
corr = bike_df[cols].corr(method='pearson')
plt.figure(figsize=(8, 6))
sns.set(font_scale=1.5)
hm = sns.heatmap(corr.values,
cbar=True,
annot=True,
square=True,
fmt='.2f',
annot_kws={'size': 15},
yticklabels=cols,
xticklabels=cols)
plt.tight_layout()
plt.show()
- 정규화 (정규분포화)
bike_df['count'].plot(kind='hist', bins=50)
다음과 같이 분포가 0~200 사이의으로 몰려있는 것을 확인할 수 있습니다. 이렇게 데이터가 한 쪽으로 몰려있는 경우를 우리는 '데이터의 분포가 정규 분포가 아니다' 라고 말합니다.
정규 분포란, 평균에 가장 많은 값이 몰려있고, 평균값을 기준으로 데이터가 좌우 대칭의 종 모양의 분포를 가질 때를 말합니다. 정규 분포의 예시 그림은 다음과 같습니다.
y_log_transform = np.log1p(bike_df['count'])
y_log_transform.plot(kind='hist', bins=50)
'Development Log > Data Analytics' 카테고리의 다른 글
데이터분석 종합반 5주차[스파르타 코딩]<고객 행동 예측, 고객 행동 예측> (0) | 2022.06.28 |
---|---|
데이터분석 종합반 3주차[스파르타 코딩]<Data Visualization> (0) | 2022.06.18 |
데이터분석 종합반 2주차[스파르타 코딩]<데이터 시각화, 워드클라우드, 벡터화, 머신러닝> (0) | 2022.06.12 |
Data analysis 1st week [SpartaCoding] <Kaggle, Colab, BeautifulSoup4> (0) | 2022.06.01 |