모두의 연구소의 교육과정에는 WRAP UP! 의 날이 있다.
SQL, 통계, 머신러닝 등 이렇게 커리큘럼의 한 모듈이 끝나고 나면 각자가 속한 스터디에서 개인&팀 스터디를 진행하는 날이다.
현재 나는 데이터 분석 기초 + 시각화 스터디에 참여해서 공부를 진행하고 있다.
초반에는 데이터 분석을 위한 통계 기초에 대한 개념을 간단히 다뤘고,
두 번째 시간에는 태블로 체험을 같이 진행해 보았다.
그리고 세번째 시간에 진행한 Kaggle의 Coffee Shop Sales 데이터를 활용해 자유롭게 진행한 시각화 실습 내용을 공유하고자 한다.
☕️ 오늘의 스터디
💡 Topic: 뉴욕에 위치한 세 곳의 커피숍 거래 내역
🤓 Goal: 지점의 위치별 시간대별 상품 판매율 등
📚 Data: Coffee Shop Sales
자유롭게 세부 목표와 계획을 가지고 데이터 분석과 시각화를 진행하고 과정과 결과를 공유해 보자!
나의 계획
늘 어떠한 결과를 봐야 한다는 목표에 붙잡혀 있던 것 같아,
오늘은 스터디인 만큼 자유롭게 데이터를 보고 시각화해 보자는 계획으로 시작하였다.
오늘의 개인 목표
✔ 어떤 데이터를 보고 싶은지 정의하기
✔ 그에 맞는 시각화 방법을 선택하여 표현하기
✔ 수업에서 다루지 않았던 시각화 도구도 자유롭게 실습해 보기
👩💻 실습 과정
Step 1. 데이터 & 라이브러리 불러오기
import kagglehub
import os
import pandas as pd
# Download latest version
path = kagglehub.dataset_download("ahmedabbas757/coffee-sales") # API로 데이터 가져오기
df = pd.read_excel(path + '/' + os.listdir(path)[0])
df.head()
✅ 데이터 개요
Maven Roasters는 뉴욕시 내 3개 지점을 운영하는 가상의 커피 전문점이다.
이 데이터셋은 매 거래별로 날짜, 시간, 매장 위치, 상품 정보 등을 포함하고 있어
매출 분석, 시간대별 트렌드 파악, 제품 선호도 분석 등 판매 트렌드를 파악하기에 적합하다.
변수명 | 설명 | 데이터 타입 | 예시 |
transaction_id | 거래 고유 ID (순차적) | 정수형 | 1, 2, 3 |
transaction_date | 거래 일자 (MM/DD/YY 형식) | 날짜형 | 2023-01-01 |
transaction_time | 거래 시간 (HH:MM:SS 형식) | 문자형 | 07:06:11 |
transaction_qty | 해당 거래의 상품 수량 | 정수형 | 1, 2, 3 |
store_id | 거래가 발생한 매장의 고유 ID | 정수형 | 5 |
store_location | 매장 위치 (뉴욕 내 지역명) | 문자형 | Lower Manhattan |
product_id | 판매된 상품의 고유 ID | 정수형 | 32, 57 |
unit_price | 개별 상품의 소매 가격 | 실수형 | 3.0, 3.1 |
product_category | 상품 대분류 (예: 음료, 베이커리 등) | 문자형 | Coffee, Tea |
product_type | 상품 중분류 (예: 커피, 티, 케이크 등) | 문자형 | Hot chocolate, Drip coffee |
product_detail | 상품 상세 이름 또는 설명 | 문자형 | Dark chocolate Lg |
✅ 라이브러리
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px # 인터랙티브(interactive) 그래프를 그릴 수 있게 해 주는 패키지. 고정된 이미지 형식 외에 인터랙티브 기능을 쓸 수 있는 html 파일로 저장도 가능
from plotly.offline import iplot
from plotly.subplots import make_subplots
머신러닝 전까지 수업 시간에 사용하고 지나갔던 matplotlib과 seaborn을 불러왔다.
그리고 추가로 캐글에 공유된 코드를 보다가 사용해 보고자 가져온 것은 plotly이다.
Plotly란?
: 인터랙티브(interactive) 그래프를 만들 수 있는 시각화 패키지이다.
마우스를 올리면 데이터가 강조되거나, 줌인/아웃 기능도 지원되어 직관적이고 시각적으로 뛰어난 결과물을 만들 수 있다.
Step 2. 데이터 확인
## 데이터 기초 정보와 범주 확인
df.info()
df['product_category'].unique()
df['product_type'].unique()
df['store_location'].unique()
df.describe()
df.describe(include = object) # 범주형 데이터도 요약
df.nunique()
## 중복 및 결측치 확인
df.duplicated().any() # 데이터 중복 체크 - 중복 없음
pd.DataFrame({ # 결측치 없음
'count': df.shape[0],
'nulls': df.isnull().sum(),
'nulls%': df.isnull().mean() * 100,
'cardinality': df.nunique()
})
우선 대략적인 데이터의 정보와 요약을 확인하였고, 각 컬럼의 값들에는 어떤 것들이 있는지 확인해 보았다.
그리고 중복 데이터와 결측치가 없는 깔끔한 데이터여서 초보자용으로 적합한 것 같다고 생각했다.
Step 3. 데이터 전처리
분석하고자 하는 데이터를 위하여 간단히 데이터를 전처리하였다.
- 분석에 필요하지 않은 컬럼 제거
- 연, 월, 요일별 분석을 위한 transaction_date 데이터 분리
- 총 주문금액 계산하여 컬럼 생성
## 필요없는 컬럼 제거
df.drop(['transaction_id', 'store_id', 'product_id'], axis=1, inplace=True)
## 연, 월, 요일별 분석을 위한 날짜 분리
df['year'] = df['transaction_date'].dt.year
df['month'] = df['transaction_date'].dt.month_name() # 월 이름을 추출
df['day'] = df['transaction_date'].dt.day_name() # 일자 정보를 가지고 요일 이름을 추출
df['year'].unique() # 연도는 2023년만 존재
## 총 주문금액 = 수량 * 가격 컬럼 생성
df['total_revenue'] = df['transaction_qty'] * df['unit_price']
다행히 원본 데이터 자체가 깔끔한 편이어서 분석 전에 크게 건드릴 요소가 많지 않아 편리하였다.
이어서 분석과 시각화도 함께 작성하기에는 코드와 그림으로 인하여 글이 너무 길어질 것 같아,
이 주제를 (1)과 (2)로 글을 나누고자 한다.
⏱️ 다음 글에서는?
- 월별 주문건수와 매출 분석
- 요일별 주문건수와 매출 분석
- 시간대별 주문 트렌드
- 지점별 분석
데이터와 시각화를 통해 커피숍의 판매 트렌드를 어떻게 보았는지 작성할 예정이다.
✎ 마무리
오늘은 데이터를 자유롭게 선택하며 '어떤 그래프를 써야 하지?'라는 고민을 해보는 시간이었다.
커리큘럼의 과정에서도 꼭 정해진 정답은 없지만, 그래도 더욱 자유롭게 탐색 중심의 접근을 해볼 수 있는 시간이다.
캐글에 공유된 코드를 둘러보다 새로운 시각화 도구도 알게 되어 유익했다.
그럼, 2편에서는 분석 결과와 시각화 그래프를 가지고 오겠습니다. : )
'데싸 이모저모 > 시각화 스터디' 카테고리의 다른 글
시각화 | Kaggle - Coffee Shop Sales (2) (3) | 2025.05.23 |
---|