Kaggle을 활용한 데이터 분석: 자전거 대여 패턴 분석
오늘은 Kaggle의 London Bike Sharing 데이터셋을 활용한 분석 내용을 공유하려 합니다.
분석 환경 설정
기본적인 데이터 분석을 위해 pandas, numpy, seaborn, matplotlib 라이브러리를 사용했습니다.
진행과정
이번 포스팅에서는 Kaggle의 London Bike Sharing Dataset을 활용하여 자전거 대여 패턴을 분석하고, 이를 기반으로 비즈니스적인 통찰력을 도출한 내용을 공유한다. 자전거 대여 데이터는 다양한 변수들, 예를 들어 날씨, 시간대, 온도 등과 밀접하게 연관이 있어, 이를 분석하면 자전거 대여 서비스를 최적화하는 데 도움이 된다. 본 분석에서는 시각화와 코드 예시를 통해 데이터를 탐색하고, 의미 있는 패턴을 찾아냈다.
사용 데이터
분석에 사용된 데이터는 London Bike Sharing Dataset으로, 이는 런던의 자전거 대여 서비스에 관한 데이터를 포함하고 있다. 이 데이터셋에는 날씨 정보, 자전거 대여 수, 시간대, 온도 등 다양한 특성들이 포함되어 있다.
데이터 분석 및 시각화
1. 날씨 상태에 따른 자전거 대여 수
먼저, 날씨 상태(weather_code)에 따른 평균 자전거 대여 수를 분석했다. 날씨가 맑을 때(Weather Code: 1) 자전거 대여 수가 가장 많고, 비가 오거나 폭풍우가 있을 때 대여 수가 급격히 감소하는 패턴이 관찰되었다.
코드
# 날씨 상태별 평균 자전거 대여 수
weather_cnt = data.groupby('weather_code')['cnt'].mean().reset_index()
# 시각화
plt.figure(figsize=(10, 6))
sns.barplot(x='weather_code', y='cnt', data=weather_cnt, palette='viridis')
plt.xlabel('Weather Code')
plt.ylabel('Average Bike Rentals')
plt.title('Average Bike Rentals by Weather Code')
plt.show()
2. 시간대(hour)별 자전거 대여 수의 변화
다음으로, 자전거 대여 수의 시간대별 변화를 분석했다. 아침 출근 시간대(7시-9시)와 저녁 퇴근 시간대(17시-19시)에 자전거 대여가 집중되는 패턴을 확인할 수 있었다.
코드
# 시간대를 데이터로 추가 (datetime 파싱)
data['timestamp'] = pd.to_datetime(data['timestamp'])
data['hour'] = data['timestamp'].dt.hour
# 시간대별 평균 자전거 대여 수
hourly_cnt = data.groupby('hour')['cnt'].mean().reset_index()
# 시각화
plt.figure(figsize=(10, 6))
sns.lineplot(x='hour', y='cnt', data=hourly_cnt, marker='o', color='skyblue')
plt.xlabel('Hour of the Day')
plt.ylabel('Average Bike Rentals')
plt.title('Average Bike Rentals by Hour of Day')
plt.xticks(range(0, 24))
plt.grid()
plt.show()
3. 온도(t1)와 자전거 대여 수의 관계
온도가 자전거 대여에 미치는 영향을 분석했다. 온도가 낮을수록 대여 수가 적고, 온도가 15°C에서 25°C 사이일 때 대여 수가 가장 많다는 결과를 얻었다.
코드
# 온도별 자전거 대여 수 산점도
plt.figure(figsize=(10, 6))
sns.scatterplot(x='t1', y='cnt', data=data, alpha=0.5, color='darkorange')
plt.xlabel('Temperature (°C)')
plt.ylabel('Bike Rentals')
plt.title('Bike Rentals vs Temperature')
plt.grid()
plt.show()
데이터 분석을 통한 아이디어 도출
데이터 분석을 통해 자전거 대여 서비스 운영 효율성을 높일 수 있는 여러 아이디어를 도출했다.
- 날씨 기반 대여 패턴 활용
- 비나 눈과 같은 날씨가 나쁠 때 대여 수가 감소하므로, 이러한 날씨에는 자전거를 운행하기 적합한 지역으로 대여소를 이동시키거나, 우비 대여와 같은 프로모션을 진행하여 이용률을 높일 수 있다.
- 출퇴근 시간대 서비스 강화
- 아침과 저녁의 출퇴근 시간대에 자전거 대여가 집중되므로, 이 시간대에 더 많은 자전거를 배치하거나, 특정 대여소의 재고를 미리 조정하여 수요를 충족시킬 수 있다.
- 온도별 프로모션 아이디어
- 온도가 쾌적한 범위인 15°C에서 25°C 사이일 때 자전거 대여 수가 증가하므로, 이 시기에 맞춰 자전거 대여 캠페인이나 할인 이벤트를 진행하면 수익을 극대화할 수 있다.
- 반대로 추운 날씨나 매우 더운 날씨에는 특수 장비(핸들 방한 커버, 물통 제공 등)를 제공하여 이용률을 높일 수 있다.
학습 목표 설정
- Kaggle을 활용한 데이터 분석과 시각화 경험
- 다양한 데이터를 이해하고, 분석 및 시각화 기법을 활용해 인사이트를 도출하는 경험을 쌓을 수 있었다.
- 객관적 통찰력과 비즈니스 가치를 제공하는 역량 쌓기
- 데이터를 분석하여 얻은 인사이트를 실제 비즈니스 상황에 적용하는 방법을 학습했다.
실습을 통해 얻은점:
1. 이번 Kaggle 데이터 분석을 통해 자전거 대여 서비스의 패턴을 파악하고, 비즈니스적 아이디어를 도출할 수 있었다.
2. 날씨, 시간대, 온도와 같은 변수들이 자전거 대여 수에 큰 영향을 미친다는 사실을 확인했으며, 이를 바탕으로 더 효율적인 서비스를 제공하기 위한 방법을 모색할 수 있었다.
추가학습
Kaggle 데이터 분석 고급 기법: 결측치 처리 및 IQR을 활용한 이상치 처리
Kaggle에서 제공하는 다양한 데이터셋을 분석하면서 결측치 처리와 이상치 처리의 중요성을 다시 한 번 실감했다.
데이터 전처리 과정에서 결측치와 이상치는 모델 성능에 큰 영향을 미칠 수 있기 때문에 이를 정확히 처리하는 방법을 배우는 것은 매우 중요하다.
추가학습은 결측치 처리 방법과 IQR(Interquartile Range) 방식으로 이상치를 처리하는 기법에 대해 자세히 다뤄본다.
결측치(Missing Value) 처리 방법
결측치란?
결측치는 데이터셋에서 값이 비어 있는 부분을 의미한다. 데이터 분석을 진행할 때 결측치를 처리하지 않으면 분석의 정확성이 떨어지거나 모델 학습에서 문제가 발생할 수 있다. 결측치 처리 방법에는 여러 가지가 있으며, 상황에 맞게 적절한 방법을 선택하는 것이 중요하다.
결측치 처리 방법
- 삭제법(Deletion Method)
- 행 삭제(Row Deletion): 결측값이 포함된 행을 삭제하는 방법이다. 데이터 손실이 크지 않으면 사용할 수 있다.
- 열 삭제(Column Deletion): 결측값이 많이 포함된 열을 삭제한다. 특정 열이 분석에 큰 영향을 미치지 않거나 정보가 부족할 때 유용하다.
- 대체법(Imputation Method)
- 평균값, 중앙값, 최빈값 대체: 결측값을 해당 열의 평균값, 중앙값, 최빈값으로 대체한다. 수치형 데이터에는 평균값을, 범주형 데이터에는 최빈값을 대체하는 방식이 일반적이다.
- 예측 모델을 이용한 대체: 결측값을 예측하는 모델을 학습시켜 결측값을 채운다. 예를 들어, 회귀 모델을 사용하여 수치형 데이터를 예측하거나 분류 모델을 사용하여 범주형 데이터를 예측할 수 있다.
코드 예시
# 결측값 확인
data.isnull().sum()
# 평균값으로 결측치 대체
data['column_name'] = data['column_name'].fillna(data['column_name'].mean())
# 중앙값으로 결측치 대체
data['column_name'] = data['column_name'].fillna(data['column_name'].median())
# 최빈값으로 결측치 대체
data['column_name'] = data['column_name'].fillna(data['column_name'].mode()[0])
결측치를 처리하는 방법은 데이터의 특성에 따라 달라질 수 있으므로, 상황에 맞게 적절한 방법을 선택하는 것이 중요하다.
IQR 방식으로 이상치 처리 방법
IQR(Interquartile Range)란?
IQR은 데이터의 중간 50%를 포함하는 범위로, 상위 25%와 하위 25%를 제외한 데이터 범위를 나타낸다. 이를 통해 이상치(outlier)를 식별할 수 있으며, IQR 방식은 이상치 처리에서 가장 많이 사용되는 기법 중 하나이다.
IQR 방식으로 이상치 처리
IQR 방식을 사용하여 이상치를 처리하는 과정은 다음과 같다.
- Q1(1사분위수)과 Q3(3사분위수) 계산: 데이터에서 1사분위수와 3사분위수를 계산한다.
- IQR 계산: IQR은 Q3에서 Q1을 뺀 값이다.
- 이상치 경계 설정: 이상치의 경계는 Q1 - 1.5 * IQR과 Q3 + 1.5 * IQR로 설정한다.
- 이상치 제거: 이상치 경계를 벗어나는 값들을 이상치로 간주하고 제거한다.
코드 예시
def remove_outliers_iqr(data, column, factor=1.5):
"""
IQR 방법을 사용하여 주어진 데이터프레임의 특정 컬럼에서 이상치를 제거하는 함수
"""
df = data.copy()
# 1사분위수(Q1)과 3사분위수(Q3) 계산
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
# IQR 계산
IQR = Q3 - Q1
# 이상치 경계 설정
lower_bound = Q1 - (factor * IQR)
upper_bound = Q3 + (factor * IQR)
# 이상치 제거
df = df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]
return df
# 이상치 제거
cleaned_data = remove_outliers_iqr(data, 'column_name')
IQR 방식은 이상치를 쉽게 식별하고 제거할 수 있는 간단하고 효과적인 방법이다. 그러나 데이터셋에 따라 다른 이상치 처리 방법을 고려할 수도 있다. 예를 들어, Z-Score 방법도 자주 사용된다.
Z-Score 방식
Z-Score는 각 데이터가 평균에서 얼마나 떨어져 있는지를 표준편차로 나눈 값이다. Z-Score가 3을 초과하는 값은 이상치로 간주된다. 이를 통해 이상치를 제거할 수도 있다.
코드 예시
from scipy import stats
# Z-Score 계산
z_scores = stats.zscore(data['column_name'])
# Z-Score가 3을 초과하는 값을 이상치로 처리
data_cleaned = data[(z_scores < 3) & (z_scores > -3)]
이상치는 반드시 제거해야 하는 것이 아니라, 분석 목표에 따라 적절히 처리해야 한다. 때로는 이상치를 제거하지 않고, 다른 방식으로 데이터를 변형하여 분석에 활용할 수도 있다.
총 정리
Kaggle을 활용한 데이터 분석에서 결측치 처리와 이상치 처리의 중요성을 배웠다.
1. 결측치와 이상치는 데이터의 품질을 높이고 모델 학습의 성능을 개선하는 데 중요한 역할을 한다.
2. 결측치는 적절한 대체법을 통해, 이상치는 IQR 방식이나 Z-Score 방식 등을 사용하여 처리할 수 있다.
3. 이러한 데이터 전처리 기법을 잘 활용하면, 분석의 정확성을 높일 수 있다.
'DATA' 카테고리의 다른 글
판다스를 활용한 데이터 전처리 및 MySQL Workbench 데이터 가공 (1) | 2024.12.24 |
---|
댓글