heatmap 시각화 정리

SOOYEON·2022년 9월 6일
0

pandas

목록 보기
21/37

배달요청 픽업 데이터

배달 요청된 가게의 주소지 (라이더 픽업 주소) = 출발지주소

출발지주소 컬럼 전처리

# null 값 제외
pick_ad = df[df['출발지주소'].notnull()]

# 시군구 행정동으로 분리
pick_ad['시군구'] = pick_ad['출발지주소'].str.split(' ', expand=True)[1]
pick_ad['행정동'] = pick_ad['출발지주소'].str.split(' ', expand=True)[2]
# +) str[0] 시도 정보

시군구 분포 확인

plt.figure(figsize=(10,5))
t = sns.countplot(pick_ad['시군구'], order=pick_ad.value_counts('시군구',ascending=False).index,palette='husl')
# log scale
t.set(yscale="log") ## log
for p in t.patches:
    t.annotate(str(round((p.get_height()))) + '건', (p.get_x()+0.02, p.get_height()+1))

행정동 분포 확인

plt.figure(figsize=(20,10))
t = sns.barplot(x='콜 번호', y='행정동',data = pick_dong, palette = 'RdPu_r', orient='h',)
# t.set(xscale="log") ## log
for p in t.patches:
    x, y, width, height = p.get_bbox().bounds
    t.text(width*1.01, y+height/2, "%1.f"%(width), va='center')

log scale

plt.figure(figsize=(20,10))
t = sns.barplot(x='콜 번호', y='행정동',data = pick_dong, palette = 'RdPu_r', orient='h',)
t.set(xscale="log") ## log
for p in t.patches:
    x, y, width, height = p.get_bbox().bounds
    t.text(width*1.01, y+height/2, "%1.f"%(width), va='center')

주문 요청이 많이 들어오는 행정동 내림차순 정렬

pick_dong = pick_ad.groupby('행정동')[['콜 번호']].count().reset_index().sort_values('콜 번호',ascending=False)
pick_dong
# output
    행정동	콜 번호
25	신림동	181844
1	개봉동	143436
29	오류동	101225
18	봉천동	95855
2	고척동	85072
24	신대방동	17411
# describe
pick_dong['콜 번호'].describe()


# output 
count        37.000000
mean      17401.027027
std       43937.316657
min           1.000000
25%           9.000000
50%          91.000000
75%        1474.000000
max      181844.000000
Name: 콜 번호, dtype: float64

25% - 9건 확인

# 하위 25% 값 제외하기 위해 변수 설정
p25 = pick_ad.groupby('행정동')[['콜 번호']].count().reset_index().describe().loc['25%'][0]
p25

# output 
9.0

하위 25% 값 이상인 행정동만 리스트 생성


pick_dong_lst = pick_dong[pick_dong['콜 번호'] > p25].행정동.tolist()
pick_dong_lst


# output 
['신림동','개봉동','오류동','봉천동','고척동',
'신대방동','궁동','천왕동','상도동','광명동',
'신정동','철산동','온수동','대방동','구로동',
'서림동','사당동','노량진동','방배동','상도1동',
'신월동','독산동','옥길동','가리봉동','흑석동',
'목동','광명7동']

9건보다 많은 주문 건수를 가진 행정동 리스트에 속하는 데이터만 추출

# query
pick_del_top = pick_del_cnt.query(f"행정동 in {pick_dong_lst}")
pick_del_top

pivot_table

pdf2 = pd.pivot_table(pick_del_top,                
                     index = '행정동',    
                     columns = '접수회사',    
                     values = '콜 번호') 


# null값 채우기                     
pdf2_f = pdf2.fillna(0)

MinMaxScaler

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

pdf2_f_scaled = pdf2_f.copy()
pdf2_f_scaled.iloc[:,:] = scaler.fit_transform(pdf2_f_scaled.iloc[:,:])  

heatmap 생성

plt.figure(figsize=(17,6))
sns.heatmap(pdf2_f_scaled.T,annot=True,fmt='.2f', cmap='cividis') 

각 지사별 주요 주문요청 행정동

  • TNB 슈퍼히어로 - 철산동, 광명동
  • TNB구로B지사 - 구로동
  • 관악지사 - 신림동
  • 구디지사 - 구로동
  • 구로A(TNB) - 개봉동, 오류동
  • 구로A(빵빵) - 개봉동
  • 금천TNB - 신림동
  • 던킨도너츠 - 봉천동
  • 동작지사 - 상도동, 신대방동
  • 배스킨라빈스 - 봉천동
  • 빵빵광명 - 광명동
  • 슈퍼히어로구로 - 구로동
  • 슈퍼히어로양천 - 신정동
  • 슈퍼히어로양천A - 신정동
  • 슈퍼히어로옥길범박 - 옥길동
  • 초록마을 - 봉천동
  • 최강방배사당 - 사당동
  • 최강방배사당지점 - 사당동, 방배동
  • 파리바게뜨 - 고척동, 신림동

0개의 댓글