# 데이터 프레임 형태로 불러오기
import pandas as pd
retail = pd.read_csv('/content/drive/MyDrive/데이터 분석/데이터/OnlineRetail.csv')
# 출력 row 갯수 설정
pd.options.display.max_rows = 6
retail
- 먼저 데이터 프레임 형태로 데이터를 불러옵니다
- 이때 출력되는 row 갯수를 6개로 설정해서 첫 3개, 마지막 3개가 출력될 수 있도록 해줍니다
- 데이터의 형태를 보면 541909개의 데이터와 8개의 컬럼으로 구성되어 있는걸 볼 수 있습니다
retail.info()
- 컬럼의 정보를 확인해 보면 데이터의 type과 컬럼명을 확인할 수 있습니다
- 주문 번호와 국가, 아이디가 나오는걸로 보아 사이트를 통해 상품을 구매한 내역과 구매자의 기본정보가 포함되어 있다는것을 알수 있습니다
# 각 컬럼당 null이 몇 개 있는지 확인
retail.isnull().sum()
- 이번에는 각 컬럼에 null이 몇 개 있는지 확인해 보았습니다
- Description(상품 설명), Customer ID(고객 아이디)에서 null이 있는걸 확인해 볼 수 있습니다
# 비회원을 제거
retail = retail[pd.notnull(retail['CustomerID'])]
# 구입 수량이 1 이상인 데이터만 저장
retail = retail[retail['Quantity']>=1]
# 구입 가격이 1 이상인 데이터만 저장
retail = retail[retail['UnitPrice']>0]
# 고객의 총 지출비용(CheckoutPrice) 파생변수 구하기
# 가격 * 수량
retail['CheckoutPrice'] = retail['UnitPrice'] * retail['Quantity']
retail
- 이번에는 다양한 과정을 통해 데이터를 정리해 보겠습니다
- 먼저 고객 아이디에 있던 null 값(비회원)을 제거합니다
- 그리고 Quantity(주문 수량)와 UnitPrice(상품 가격)이 1이상인 데이터만 저장합니다
- 마지막으로 새로운 컬럼인 CheckoutPrice를 생성해서 추가해줍니다
retail['InvoiceDate'] = pd.to_datetime(retail['InvoiceDate'])
retail.info()
- 이제 불필요한 데이터는 다 정리해 주었고 데이터들의 타입을 정리해 줍니다
- 이때 InvoiceDate(구매 날짜)가 object 형태로 되어 있기 때문에 datetime 형태로 바꾸어 줍니다
# 국가별 매출
rev_by_countries = retail.groupby('Country')['CheckoutPrice'].sum().sort_values()
rev_by_countries
plot = rev_by_countries.plot(kind='bar',figsize=(20,10))
plot.set_xlabel('Country',fontsize=12)
plot.set_ylabel('Revenue',fontsize=12)
plot.set_title('Revenue by Country',fontsize=15)
plot.set_xticklabels(labels=rev_by_countries.index,rotation=45)
- 이제 정리된 데이터를 바탕으로 분석을 진행해보겠습니다
- 가장 먼저 국가별 매출을 확인해보면 Country 컬럼으로 그룹을 묶고 새로 생성했던 컬럼인 CheckoutPrice의 총합을 sum 함수를 활용해 확인합니다
- 수치상으로도 영국이 가장 많은 매출을 올렸으며 이를 plot을 이용한 그래프를 확인해보면 쉽게 확인할 수 있습니다
def extract_month(date):
month = str(date.month)
if date.month < 10:
month = '0' + month
return str(date.year) + month
rev_by_month = retail.set_index('InvoiceDate').groupby(extract_month)['CheckoutPrice'].sum()
rev_by_month
- 이번에는 각 연도에 따른 월별 매출을 확인해보겠습니다
- 먼저 2010년과 2011년 두 해에 걸쳐 취합된 데이터이기 때문에 월을 나누는 함수를 만들어 준뒤 그룹으로 묶어 국가별 매출을 출력한 과정과 동일하게 출력합니다
- 수치상으로 확인했을 때는 2011년 09월 부터 매출이 증가하는 모습을 보이다가 12월 급격하게 하락하는걸 볼 수 있습니다
def plot_bar(df, xlabel, ylabel, title, rotation=45, titlesize=15, fontsize=12, figsize=(20, 10)):
plot = df.plot(kind='bar', figsize=figsize)
plot.set_xlabel(xlabel, fontsize=fontsize)
plot.set_ylabel(ylabel, fontsize=fontsize)
plot.set_title(title, fontsize=titlesize)
plot.set_xticklabels(labels=df.index, rotation=rotation)
plot_bar(rev_by_month,'Month','Revenue','Revenue By Month')
# 요일별 매출 구하기
def extract_dow(date):
return date.dayofweek
rev_by_dow = retail.set_index('InvoiceDate').groupby(extract_dow)['CheckoutPrice'].sum()
DAY_OF_WEEK = np.array(['Mon',"Tue",'Wen',"Thur","Fri",'Sat','Sun'])
rev_by_dow.index = DAY_OF_WEEK[rev_by_dow.index]
rev_by_dow
- 요일별 매출을 확인해본 결과 토요일에 따른 매출이 없는걸로 보아 토요일은 휴무일이었다는걸 알수 있습니다
plot_bar(rev_by_dow, 'Dow','Revenue','Revenue By Dow')
'수업 복습 > 크롤링과 데이터분석' 카테고리의 다른 글
Matplotlib (0) | 2024.04.15 |
---|---|
판다스 (0) | 2024.04.01 |
넘파이 (0) | 2024.04.01 |
크롤링(Crawling) (0) | 2023.12.27 |