코딩기록

코딩기록 1 : L사 구매 고객 별 시각화

구경영 2023. 12. 2. 08:00
728x90
# 답안 작성을 위해 필요한 패키지
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
%matplotlib inline
# 한글 폰트 설정
import platform
your_os = platform.system()
if your_os == 'Linux':
    rc('font', family='NanumGothic')
elif your_os == 'Windows':
    ttf = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=ttf).get_name()
    rc('font', family=font_name)
elif your_os == 'Darwin':
    rc('font', family='AppleGothic')
rc('axes', unicode_minus=False)

# 답안 작성을 위해 필요한 데이터 준비
import pandas as pd
cs = pd.read_csv('Demo.csv', encoding='cp949')
tr = pd.read_csv('구매내역정보.csv', encoding='cp949')
df = pd.merge(tr, cs)
df.구매일자 = df.구매일자.astype(str)
df

 

### 전처리 ###

df.성별 = df.성별.map({1:'남자', 2:'여자'})
df['거주지역_광역'] = df.거주지역.str.split().str[0]
df['년월'] = df.구매일자.astype('str').str[0:6]



### 피벗테이블 생성 ###

pi = pd.pivot_table(df, index = '년월', columns = '성별', values = '구매금액', aggfunc = 'sum')



### 시각화 ###

pi.plot(kind = 'barh', subplots = True, layout = (1,2), sharey = True, legend = False, figsize = (8,6))

plt.ylabel('년월')
plt.xlabel('구매금액')
plt.show()


문제 2 : 구매수량과 구매금액 집계 후 시각화하시오.
### 구매수량과 구매금액 집계 ###

frequency = df.groupby('ID').구매수량.sum()
monetary = df.groupby('ID').구매금액.sum()



### 구매수량 합계와 구매금액 합계 시각화 ###

fig, ax = plt.subplots(1,2, figsize = (10,5))

sns.histplot(frequency, color = 'red', ax = ax[0])
sns.kdeplot(monetary, color = 'blue', ax = ax[1])

ax[0].set_xlabel('frequency')
ax[0].set_title('frequency distribution')

ax[1].set_xlabel('monetary')
ax[1].set_title('monetary distribution')
plt.show()


문제 3 : 60대 이상 여부에 따른 성별 구매시간 차이를 시각화하시오
### 60대 이상인 경우 분류 ###

df['60대 이상'] = df.연령.map(lambda x : 'yes' if x >= 60 else "no")



### 성별에 따른 구매시간 / 구매수량 피벗 테이블 생성 ###

pi = pd.pivot_table(df, index = '구매시간', columns = '성별', values = '구매수량', aggfunc = 'size')



### 60대 이상 여부에 따른 성별 구매시간 시각화 ###

figure = plt.subplots(figsize = (10,8))
sns.violinplot(data = df, x = '성별', y = '구매시간', hue = '60대 이상 ?')
plt.show()


문제 4 : 요일에 따른 상품중분류명 구매금액을 히트맵으로 시각화하시오.
### 요일 column 생성 ###

df['요일'] = df.구매일자.astype('str').astype('datetime64').dt.dayofweek



### 요일에 따른 상품중분류명의 구매금액 집계 ###

pi = pd.pivot_table(df, index = '상품중분류명', columns = '요일', values = '구매금액', aggfunc = 'sum')
pi.columns = ('월', "화", "수", "목", "금", "토", "일")



### 히트맵 시각화 ###

figure = plt.subplots(figsize = (8,8))
sns.heatmap(pi)
plt.xlabel('요일')
plt.show()

728x90