데이터를 기반으로

고객 등록 시간대 상관 분석 본문

데이터 분석(Python)/탐색적 데이터 분석(EDA)

고객 등록 시간대 상관 분석

이노후 2020. 7. 26. 23:14
728x90
반응형

안녕하세요~


제가 앞서 글에서 이야기 드렸지만 ㅎㅎ 다시 말씀드리자면 저는 약국을 대상으로 사업을 진행하는 곳에서 일을 하고 있습니다.


모든 사업을 밝힐 순 없으니 단편적인 부분만 말씀드릴 수 없다는 점 양해 부탁드립니다 ㅎㅎ



그래도 글을 설명하기에는 어려움이 없을 것 같으니 이어나가겠습니다!! ㅎㅎ


이번에 진행할 것은 약국에서 고객을 등록하는 프로그램이 있습니다 저희에게 ㅎㅎ


어느 시간대가 약국에서 가장 고객 등록이 많은 지 한번 살펴보고자 하였습니다!!


나중에 진행할 현장 프로모션이나 현장에서 무언가를 진행할 때 쓰기 좋은 백 데이터가 될 것 같군요!!




자 먼저 데이터 세팅은 항상 DB Connection을 통해 파이썬에서 불러왔습니다!! ㅎㅎ


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#패키지 import
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
 
#######################################################################
# 고객 테이블 불러오기
 
import pymysql
 
conn = pymysql.connect(host = '123.4.5.6'
                       user = '아몰랑'
                       password = '아몰랑2' ,
                       db = '아몰랑3')
 
#SMS
curs = conn.cursor()
sql = "SELECT * FROM 고객테이블;" 
# 실행 할 쿼리문 입력
curs.execute(sql) # 쿼리문 실행
 
rows = curs.fetchall() # 데이터 패치
 
row=list(rows)
df=pd.DataFrame(row)
df=df.rename(columns={df.columns[0] : 'c_id',
                      df.columns[1] : 'c_age',
                      df.columns[2] : 'adrs_main',
                      df.columns[3] : 'regist_dt'})
df_cs=df
 
########################################################################
 
#고객 등록시간 datetime 타입 변수로 변경
from datetime import datetime as dt
df_cs['regist_dt'= df_cs['regist_dt'].apply(lambda x: pd.to_datetime(str(x), format='%Y-%m-%d %H:%M:%S'))
 
 
# 등록 시간에서 시간만 추출
df_cs["hour"= df_cs["regist_dt"].dt.hour
 
 
 
# 지역 및 시간별 등록 고객 수 추출
df_s=df.groupby(["hour","adrs_main"])['c_id'].nunique()
df_s=pd.DataFrame(df_s)
df_s=df_s.rename(columns={df_s.columns[0] : 'ct'})
df_s=df_s.reset_index()
cs


위와 같이 고객 정보를 불러오고 나서 고객 등록시간을 datetime 변수로 변환을 해줘야 시간을 추출할 수 있었습니다!!


dt.hour -> 이것으로 등록 시간을 따로 추출하였습니다!!




자 그렇게 groupby를 통해 지역 및 시간별 등록한 고객 수를 추출했습니다!!!


지역 변수를 같이 뽑은 이유는 이후에 제가 작업할 것이 따로 있어서 변수를 추가해서 groupby한 것이니


크게 신경쓰지 않으셔도 될 것 같아요~ ㅎㅎ



이후에는 df_s 처럼 이쁘게 나온 데이터 프레임으로 상관 계수를 추출해 볼 예정입니다!!!


바로!!! Heatmap 으로요!!!!


히트맵이 상관 계수 추출할 때 어마무시하게 이쁘게 나오더라구요 ㅎㅎㅎ


우선 저는 시간 변수를 더미 변수로 변경하고 시간앞에 공란을 추가할거에요!!


이유는 히트맵 나올 때 시간들 변수앞에 빈칸이 없으면 뭔가 짤려서 보이더라구요...ㅠㅠ


1
2
3
4
5
6
7
8
9
10
11
12
dummy_df = pd.get_dummies(df_s['hour'])
dummy_df = df_s.join(dummy_df .add_prefix(' '))
 
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()  
 
plt.figure(figsize=(40,40))
plt.rcParams['font.family'= 'Malgun Gothic'
sns.heatmap(data = dummy_df .corr(), annot=True, annot_kws={"size"20},
fmt = '.2f', linewidths=.5, cmap='Blues')
cs


위와 같은 코드를 돌리면!!!!!!!! 히트맵이 완성됩니다!!!!!!!! 밑에를 보십쇼!!!!!!!!!!!!!!!!!!



조금은 그림이 큽니다...핳하!!! 변수가 많아서 저렇게 나온 건데 우선 전체적으로 이런식으로 그려진다~ 라고 생각하시면 될 것 같아요 ㅎㅎ


아무튼!! 시각화로 굉장히 직관적으로 보여서 저는 상관계수 뽑을 때 항상 히트맵을 그려본답니다 ㅎㅎ



다시 본론으로가서 저희는 시간과 고객 등록에 대한 상관 계수를 보고자 했습니다!!


그림을 자세히 확인해보니 


10, 11, 12 시 그리고 17시에 고객 등록이 타 시간대에 비해 상관 계수가 높게 나타났습니다!!!



사실 상관 계수가 0.08~0.13 은 어떻게 보면 굉장히 낮은 수치입니다.


어떤 분야에서는 아예 상관이 없다고 볼 수 있을 정도로 낮은 수치라고 해석할 수 있는 것으로 보여집니다만!!


저희는 단순히 타 시간대 중 그나마~ 어떤 시간대에 좀 더 집중되어 있나를 확인해보고자 진행한 것이었습니다.


사실 단순히 빈도수로 확인해 보아도 됐지만, 시각화를 위해 그리고 퍼포먼스적인 측면을 이용하고자 상관 계수를 추출하였습니다.




이렇게 아주 아주 간단한 상관 계수를 추출해보았습니다!!!ㅎㅎㅎ


단순히 빈도만 높다고 추출할 수 있는 영역이 있고 상관 계수를 보고자하는 부분이 있는 것 같습니다.


저희가 문자로 마케팅을 진행한 적이 몇 번 있었는데 


여기서 파생되어 시간별 조회에 대한 상관 분석도 진행해보면 좋을 것 같다고 생각이 되었습니다 ㅎㅎ


역시 분석은 꼬리에 꼬리를 물며 진행되나 봅니다 ㅎㅎ




오늘은 간단한 주제였으니 여기까지 진행하도록 하겠습니다!!!



가장 최근 네이버 크롤링을 진행했었는데 다음은 그 게시글을 정리해서 올리도록 하겠습니다~



감사합니다~

728x90
반응형