1. 캐글
캐글(Kaggle)은 데이터 과학자와 머신러닝 엔지니어들이 학습, 협업, 경쟁할 수 있는 온라인 플랫폼입니다. 구글에 소속된 이 플랫폼은 다양한 데이터셋과 머신러닝 문제를 제공하며, 사용자들이 자신의 모델을 개발하고 성능을 경쟁적으로 평가받을 수 있는 경진대회도 열립니다. 초보자는 데이터를 다루는 실습을 하고, 경험 많은 전문가들은 포트폴리오를 확장하거나 상금을 받을 기회를 얻을 수 있습니다. 또한, 커뮤니티 포럼과 튜토리얼, 노트북 공유를 통해 지식을 공유하고 학습할 수 있는 환경을 제공합니다. 캐글은 데이터 분석과 머신러닝을 배우고 실제 문제에 적용해 보고 싶은 사람들에게 유용한 플랫폼입니다.
2. Online Retail
아래 사이트에 접속해 데이터를 다운로드합니다.
[공식 주소]
[사이트]
import pandas as pd
retail = pd.read_csv('/content/drive/MyDrive/KDT 시즌4/9. LLM 서비스 기초/10.데이터 분석/Data/online_retail_II.csv')
retail
retail.info()
'''
InvoiceNo: 주문 번호
StockCode: 상품 코드
Description: 상품 설명
Quantity: 주문 수량
InvoiceDate: 주문 날짜
Price: 상품 가격
Customer ID: 고객 아이디
Country: 고객 거주지역(국가)
'''
retail.columns
# Index(['Invoice', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',
# 'Price', 'Customer ID', 'Country'],
# dtype='object')
retail.describe()#통계확인
len(retail)#전체데이터의 크기 len으로 알기
# 1067371
# 각 컬럼당 null이 몇 개 있는지 확인
retail.isnull().sum()
# 각 컬럼당 null이 얼마나 있는지 비율 확인
retail.isnull().mean()
# 비회원/탈퇴/휴면회원 제거
retail = retail[pd.notnull(retail['Customer ID'])]
retail
len(retail)
# 824364
# 구입 수량이 0 이하인 데이터를 확인
retail[retail['Quantity'] <= 0]
# 구입 가격이 0보다 큰 데이터만 저장
retail = retail[retail['Price'] > 0]
len(retail)
# 805549
# 고객의 총 지출비용(CheckoutPrice) 파생변수 만들기
# 총 지출비용(CheckoutPrice) = 가격(Price) * 수량(Quantity)
# A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead 경고가 발생할 수 있음
# 행과 열이 다르게 계산 될수 있다는 경고임
retail.loc[:, 'CheckoutPrice'] = retail['Price'] * retail['Quantity']
retail
retail.info()
# to_datetime(): 다양한 형식의 데이터를 일관된 datetime 형식으로 변환
retail['InvoiceDate'] = pd.to_datetime(retail['InvoiceDate'])
retail.info()
# 전체 매출
total_revenue = retail['CheckoutPrice'].sum()
total_revenue
# 17743429.178000003
# 각 나라별 구매 횟수
retail['Country'].value_counts()
#pd.options.display.max_rows = 20
# ...으로 줄임 표시 되면 위에 주석으로 값을 늘려서 확인하기
# retail.groupby('Country')['Quantity'].count()
# 위 코드랑 같은 역할
# value_counts(): 객체의 각 고유값(유니크 값)의 개수를 계산하고, 이를 내림차순으로 정렬해 반환하는 함수
retail['Country'].value_counts()
# retail.groupby('Country')['Quantity'].count()
# 국가별 매출
rev_by_countries = retail.groupby('Country')['CheckoutPrice'].sum().sort_values()
rev_by_countries
import matplotlib.pyplot as plt
# matplotlib 객체 생성
# 그래프를 그릴 축(ax)과 그림(fig)을 생성
fig, ax = plt.subplots(figsize=(20, 10))
# 막대 그래프 그리기
ax.bar(rev_by_countries.index, rev_by_countries.values)
# 라벨 설정
ax.set_xlabel('Country', fontsize=12)
ax.set_ylabel('Revenue', fontsize=12)
ax.set_title('Revenue By Country', fontsize=15)
# x축 눈금 라벨 회전
ax.set_xticks(range(len(rev_by_countries.index)))
ax.set_xticklabels(rev_by_countries.index, rotation=45)
# 그래프 출력
# 래프와 텍스트가 잘리지 않고 보기 좋게 배치되도록 자동으로 여백을 조정하는 유용한 함수
plt.tight_layout()
plt.show()
rev_by_countries / total_revenue
# 월별 매출 구하기
retail['InvoiceDate'].sort_values(ascending=False)
#각 년도별의 월별 매출이 있어야함
def month_extractor(date):
month = str(date.month)
if date.month < 10:
month = '0' + month
return str(date.year) + '-' + month #201101 형식으로 그룹맺을수 있도록 함
rev_by_month = retail.set_index('InvoiceDate').groupby(month_extractor)['CheckoutPrice'].sum()
#retail.set_index 년월일을 인덱스로 만듦
#groupby(month_extractor) 날짜를 하나씩 뽑아서 위 함수에 넣음 콜백함
#['CheckoutPrice'].sum() CheckoutPrice의 합계를 보게 됨
rev_by_month
def plot_bar(df, xlabel, ylabel, title, figsize=(20, 10), fontsize=12, titlesize=15, rotation=45):
fig, ax = plt.subplots(figsize=figsize)
ax.bar(df.index, df.values)
ax.set_xlabel(xlabel, fontsize=fontsize)
ax.set_ylabel(ylabel, fontsize=fontsize)
ax.set_title(title, fontsize=titlesize)
ax.set_xticks(df.index)
ax.set_xticklabels(df.index, rotation=rotation, fontsize=fontsize)
plt.tight_layout()
plt.show()
plot_bar(rev_by_month, 'Month', 'Revenue', 'Revenue By Month')
insite
영국이 주된 고객
매출이 가을 겨울에 매출이 많이 증가하는 편인것 같다
# 요일별 매출 구하기
def extract_dow(date):
return date.dayofweek
rev_by_dow = retail.set_index('InvoiceDate').groupby(lambda date: date.dayofweek)['CheckoutPrice'].sum()
rev_by_dow
import numpy as np
DAY_OF_WEEK = np.array(['Mon', 'Tue', 'Web', 'Thur', 'Fri', 'Sat', 'Sun'])
rev_by_dow.index = DAY_OF_WEEK[rev_by_dow.index]
rev_by_dow.index
# Index(['Mon', 'Tue', 'Web', 'Thur', 'Fri', 'Sat', 'Sun'], dtype='object')
rev_by_dow
plot_bar(rev_by_dow, 'DOW', 'Revenue', 'Revenue By DOW')
# 시간대별 매출 구하기
rev_by_hour = retail.set_index('InvoiceDate').groupby(lambda date: date.hour)['CheckoutPrice'].sum()
rev_by_hour
plot_bar(rev_by_hour, 'Hour', 'Revenue', 'Revenu By Hour')
# 시간대별 매출 계산
rev_by_hour = retail.set_index('InvoiceDate').groupby(lambda date: date.hour)['CheckoutPrice'].sum()
# 정렬 (시간 순서대로)
rev_by_hour = rev_by_hour.sort_index()
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(rev_by_hour.index, rev_by_hour.values)
plt.title('Revenue By Hour')
plt.xlabel('Hour')
plt.ylabel('Revenue')
plt.xticks(range(0, 24)) # X축을 0~23까지 고정
plt.grid(axis='y')
plt.show()
'인공지능 > 데이터분석' 카테고리의 다른 글
서울시 공공자전거 실시간 대여정보 (0) | 2025.01.24 |
---|---|
소상공인시장진흥공단_상가정보 데이터셋 (4) | 2025.01.17 |
Matplotlib (2) | 2025.01.17 |
판다스-기초2(데이터프레임 합치기,원-핫 인코딩) (0) | 2025.01.17 |
판다스-기초1 (0) | 2025.01.16 |