데이터 분석
🔨 절차형
💡
학습 전략: 연습 (Practice)
즉시 실전에 적용해 보는 것이 핵심
개요
커피 관련 데이터를 분석하기 위한 프로젝트입니다. 각 컬럼의 의미와 활용 방법을 정리합니다.
데이터 컬럼 설명
기본 정보
ColumnsSlug
- 리뷰 소스 웹사이트 주소
- 데이터 출처 추적
All_text
- 스크래핑된 모든 텍스트
- 원본 데이터 보존
평가 정보
Rating
- 커피 점수
- 전체적인 품질 평가
Review_date
- 리뷰 날짜
- 시계열 분석에 활용
커피 상세 정보
Name
- 커피 이름
- 제품 식별자
Roaster
- 로스팅 장소
- 생산자 정보
Location
- 로스터의 위치
- 지역별 분석 가능
Origin
- 커피 원산지
- 생두 생산 국가/지역
로스팅 정보
Roast
- 로스팅 레벨
- 예: Light, Medium, Dark
Agtron
- 로스팅 레벨 (분쇄 전/후)
- 수치적 로스팅 정도 측정
가격 정보
Est_price
- 가격/수량
- 비용 분석
향미 평가 (10점 만점)
Aroma
- 커피 향
- 후각적 특성 평가
Acid
- 산미
- 신맛의 정도와 특성
Body
- 바디감
- 텍스처, 무게감, 농도
Flavor
- 플레이버
- 종합적인 맛과 향
After_taste
- 여운
- 뒷맛, 향의 지속 시간
상세 평가
desc_1
- 상세 맛 평가 단어들
- 구체적인 향미 노트
desc_2
- 맛 평가 및 로스터 정보
- 추가 설명
데이터 분석 예제
1. 기본 통계
1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
# 데이터 로드
df = pd.read_csv('coffee_data.csv')
# 기본 정보 확인
print(df.info())
print(df.describe())
# 평가 점수 분석
print("\n평가 점수 통계:")
print(df[['Aroma', 'Acid', 'Body', 'Flavor', 'After_taste']].describe())
2. 원산지별 평균 평점
1
2
3
4
# 원산지별 평균 Rating
origin_ratings = df.groupby('Origin')['Rating'].mean().sort_values(ascending=False)
print("\n원산지별 평균 평점:")
print(origin_ratings.head(10))
3. 로스팅 레벨별 분석
1
2
3
4
# 로스팅 레벨별 평균 점수
roast_analysis = df.groupby('Roast')[['Aroma', 'Acid', 'Body', 'Flavor']].mean()
print("\n로스팅 레벨별 향미 특성:")
print(roast_analysis)
4. 가격대별 품질 분석
1
2
3
4
5
6
7
# 가격 구간 생성
df['price_range'] = pd.cut(df['Est_price'], bins=5, labels=['매우 저가', '저가', '중가', '고가', '매우 고가'])
# 가격대별 평균 Rating
price_quality = df.groupby('price_range')['Rating'].mean()
print("\n가격대별 평균 품질:")
print(price_quality)
5. 시계열 분석
1
2
3
4
5
6
7
# 날짜 형식 변환
df['Review_date'] = pd.to_datetime(df['Review_date'])
# 연도별 평균 Rating
yearly_ratings = df.groupby(df['Review_date'].dt.year)['Rating'].mean()
print("\n연도별 평균 평점:")
print(yearly_ratings)
시각화 예제
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
import matplotlib.pyplot as plt
import seaborn as sns
# 스타일 설정
sns.set_style("whitegrid")
plt.rcParams['font.family'] = 'Malgun Gothic' # 한글 폰트
# 1. 향미 특성 분포
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
flavors = ['Aroma', 'Acid', 'Body', 'Flavor', 'After_taste', 'Rating']
for idx, flavor in enumerate(flavors):
ax = axes[idx // 3, idx % 3]
df[flavor].hist(bins=20, ax=ax)
ax.set_title(f'{flavor} 분포')
ax.set_xlabel('점수')
ax.set_ylabel('빈도')
plt.tight_layout()
plt.show()
# 2. 원산지별 상위 10개 평균 평점
top_origins = df.groupby('Origin')['Rating'].mean().sort_values(ascending=False).head(10)
plt.figure(figsize=(12, 6))
top_origins.plot(kind='bar')
plt.title('원산지별 평균 평점 (상위 10개)')
plt.xlabel('원산지')
plt.ylabel('평균 평점')
plt.xticks(rotation=45)
plt.show()
고급 분석
상관관계 분석
1
2
3
4
5
6
7
# 향미 특성 간 상관관계
correlation = df[['Aroma', 'Acid', 'Body', 'Flavor', 'After_taste', 'Rating']].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm', center=0)
plt.title('향미 특성 상관관계')
plt.show()