배달요청 픽업 데이터
배달 요청된 가게의 주소지 (라이더 픽업 주소) = 출발지주소
# 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
pick_dong_lst = pick_dong[pick_dong['콜 번호'] > p25].행정동.tolist()
pick_dong_lst
# output
['신림동','개봉동','오류동','봉천동','고척동',
'신대방동','궁동','천왕동','상도동','광명동',
'신정동','철산동','온수동','대방동','구로동',
'서림동','사당동','노량진동','방배동','상도1동',
'신월동','독산동','옥길동','가리봉동','흑석동',
'목동','광명7동']
# 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')