物流行業(yè)數(shù)據(jù)分析(源碼自用)
"""
解決問(wèn)題:
1.配送服務(wù)是否存在問(wèn)題
2.是否存在尚有潛力的消費(fèi)區(qū)域
3.商品是否存在質(zhì)量問(wèn)題
分析過(guò)程
一.數(shù)據(jù)清洗
①重復(fù)值、缺失值、格式調(diào)整
②異常值處理(比如:銷(xiāo)售金額存在等于0的,屬于異常等)
二.數(shù)據(jù)規(guī)整
比如:增加一項(xiàng)輔助列:月份
三.數(shù)據(jù)分析并可視化
"""
import os
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ? # 設(shè)置中文
# 一.數(shù)據(jù)清洗
# ①重復(fù)值、缺失值、格式調(diào)整
data = pd.read_csv('data_wuliu.csv', encoding='gbk')
# 刪除重復(fù)記錄
data.drop_duplicates(keep='first', inplace=True)
# 刪除缺失值(na,刪除帶有na的整行數(shù)據(jù))
data.dropna(axis=0, how='any', inplace=True)
# 刪除訂單行(重復(fù)運(yùn)行會(huì)報(bào)錯(cuò),因?yàn)榈谝淮我呀?jīng)刪除了訂單行這一列)
data.drop(columns=['訂單行'], inplace=True, axis=1)
# 更新索引(drop=True:把原來(lái)的索引index列刪除,重置index)
data.reset_index(drop=True, inplace=True)
# 取出銷(xiāo)售金額列,對(duì)每一個(gè)數(shù)據(jù)進(jìn)行清洗
# 編寫(xiě)自定義過(guò)濾函數(shù):刪除逗號(hào),轉(zhuǎn)成float,如果是萬(wàn)元?jiǎng)t*10000,否則,刪除元
def data_deal(number):
? ?if number.find('萬(wàn)元') != -1: ? # 找到帶有萬(wàn)元的,取出數(shù)字,去掉逗號(hào),轉(zhuǎn)成float,*10000
? ? ? ?new_number = float(number[:number.find('萬(wàn)元')].replace(',', ''))*10000
? ? ? ?pass
? ?else: ? ?# 找到帶有元的,刪除元,刪除逗號(hào),轉(zhuǎn)成float
? ? ? ?new_number = float(number.replace('元', '').replace(',', ''))
? ? ? ?pass
? ?return new_number
data['銷(xiāo)售金額'] = data['銷(xiāo)售金額'].map(data_deal)
# ②異常值處理
# 1.銷(xiāo)售金額為0,采用刪除方法,因?yàn)閿?shù)據(jù)量很小
data = data[data['銷(xiāo)售金額'] != 0]
# 2.銷(xiāo)售金額和數(shù)量存在嚴(yán)重右偏現(xiàn)象,在電商領(lǐng)域2/8很正常,無(wú)需處理
# 二.數(shù)據(jù)規(guī)整
data['銷(xiāo)售時(shí)間'] = pd.to_datetime(data['銷(xiāo)售時(shí)間'])
data['月份'] = data['銷(xiāo)售時(shí)間'].apply(lambda x: x.month)
# 三.數(shù)據(jù)分析
# 1.配送服務(wù)是否存在問(wèn)題
# a.月份維度
data['貨品交貨狀況'] = data['貨品交貨狀況'].str.strip()
data1 = data.groupby(by=['月份', '貨品交貨狀況']).size().unstack() ? ?# unstack轉(zhuǎn)為多維行列索引的數(shù)組
data1['按時(shí)交貨率'] = data1['按時(shí)交貨']/(data1['按時(shí)交貨']+data1['晚交貨'])
# 從按時(shí)交貨率來(lái)看,第四季度低于第三季度,猜測(cè)可能是氣候原因造成
# b.銷(xiāo)售區(qū)域維度
data1 = data.groupby(by=['銷(xiāo)售區(qū)域', '貨品交貨狀況']).size().unstack()
data1['按時(shí)交貨率'] = data1['按時(shí)交貨']/(data1['按時(shí)交貨']+data1['晚交貨'])
data1 = data1.sort_values(by='按時(shí)交貨率', ascending=False)
# 西北地區(qū)存在突出的延時(shí)交貨問(wèn)題,急需解決
# c.貨品維度
data1 = data.groupby(by=['貨品', '貨品交貨狀況']).size().unstack()
data1['按時(shí)交貨率'] = data1['按時(shí)交貨']/(data1['按時(shí)交貨']+data1['晚交貨'])
data1 = data1.sort_values(by='按時(shí)交貨率', ascending=False)
# 貨品4晚交貨情況非常嚴(yán)重,其余貨品相對(duì)較好
# d.貨品和銷(xiāo)售區(qū)域結(jié)合
data1 = data.groupby(by=['貨品', '銷(xiāo)售區(qū)域', '貨品交貨狀況']).size().unstack()
data1['按時(shí)交貨率'] = data1['按時(shí)交貨']/(data1['按時(shí)交貨']+data1['晚交貨'])
data1 = data1.sort_values(by='按時(shí)交貨率', ascending=False)
# 銷(xiāo)售區(qū)域:最差在西北地區(qū),貨品有1和4,主要是貨品4送貨較晚導(dǎo)致
# 貨品:最差的貨品2,主要是送往華東和馬來(lái)西亞,主要是馬來(lái)西亞的送貨較晚導(dǎo)致
# 2.是否存在尚有潛力的銷(xiāo)售區(qū)域
# a.月份維度
data1 = data.groupby(['月份', '貨品'])['數(shù)量'].sum().unstack()
data1.plot(kind='line')
# plt.show()
# 貨品2在10月和12月份,銷(xiāo)量猛增,原因猜測(cè)有二:1.公司加大營(yíng)銷(xiāo)力度 ?2.開(kāi)發(fā)了新的市場(chǎng)(后續(xù)得出否定結(jié)論)
# b.不同區(qū)域
data1 = data.groupby(['銷(xiāo)售區(qū)域', '貨品'])['數(shù)量'].sum().unstack()
# 從銷(xiāo)售區(qū)域看,每種貨品的銷(xiāo)售區(qū)域?yàn)?~3個(gè),貨品1有三個(gè)銷(xiāo)售區(qū)域,貨品2有兩個(gè)銷(xiāo)售區(qū)域,其余貨品均有1個(gè)銷(xiāo)售區(qū)域
# c.月份和區(qū)域
data1 = data.groupby(['月份', '銷(xiāo)售區(qū)域', '貨品'])['數(shù)量'].sum().unstack()
# 貨品2在10,12月份銷(xiāo)量猛增,原因主要發(fā)生在原有的銷(xiāo)售區(qū)域(華東)
# 同樣,分析出在7,8,9,11,月份銷(xiāo)售數(shù)量還有很大的提升空間,可以適當(dāng)加大營(yíng)銷(xiāo)力度
# 3.商品是否存在質(zhì)量問(wèn)題
data['貨品用戶(hù)反饋'] = data['貨品用戶(hù)反饋'].str.strip() ? # 去除首尾空格
data1 = data.groupby(['貨品', '銷(xiāo)售區(qū)域'])['貨品用戶(hù)反饋'].value_counts().unstack()
data1['拒貨率'] = data1['拒貨']/data1.sum(axis=1)
data1['返修率'] = data1['返修']/data1.sum(axis=1)
data1['合格率'] = data1['質(zhì)量合格']/data1.sum(axis=1)
data1 = data1.sort_values(['合格率', '返修率', '拒貨率'], ascending=False)
# 貨品3,5,6合格率均較高,返修率比較低,說(shuō)明質(zhì)量可以
# 貨品1,2,4合格率較低,返修率較高,質(zhì)量存在一定的問(wèn)題,需要改善
# 貨品2在馬來(lái)西亞的拒貨率最高,同時(shí),在貨品2在馬來(lái)西亞的按時(shí)交貨率也非常低。猜測(cè):馬來(lái)西亞人對(duì)送貨的時(shí)效性要求較高,如果達(dá)不到,則往往考慮拒貨
# 考慮到貨品2主要在華東地區(qū)銷(xiāo)售,可以考慮增大在華東的投資,適當(dāng)減小馬來(lái)西亞的投入