gbk
,若用utf-8
会报错。然后查看数据的整体信息,观察以下结果import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
data = pd.read_csv('E:\下载\数据分析实战项目资料\物流\资料\data_wuliu.csv', encoding='gbk')
print(data.info())
万元|元,逗号问题
),数据类型需要转换成int|float
data.drop_duplicates(keep='first', inplace=True)
data.dropna(axis=0, how='any', inplace=True)
data.drop(columns=['订单行'], inplace=True, axis=1)
print(data.head())
# 更新索引(drop=True:把原来的索引index列删除,重置index)
data.reset_index(drop=True, inplace=True)
print(data.head())
float
*10000
,否则删除元def data_deal(number):
if number.find('万元') != -1:
new_number = float(number[:number.find('万元')].replace(',', '')) * 10000
pass
else:
new_number = float(number.replace('元', '').replace(',', ''))
pass
return new_number
data['销售金额'] = data['销售金额'].map(data_deal)
右偏2/8
很正常,无需处理;销售金额还有0的值,因为数据量很小,所以删除这个值没有影响。print(data.describe())
data = data[data['销售金额'] != 0]
print(data.describe())
data['销售时间'] = pd.to_datetime(data['销售时间'])
print(data.info())
data['月份'] = data['销售时间'].apply(lambda x: x.month)
print(data)
data['货品交货状况'] = data['货品交货状况'].str.strip()
data1 = data.groupby(['月份', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货'] / (data1['按时交货'] + data1['晚交货'])
print(data1)
结果:
分析:从按时交货率来看,第四季度低于第三季度,猜测可能是气候原因造成
data1 = data.groupby(['销售区域', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率', ascending=False))
data1 = data.groupby(['货品', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率', ascending=False))
data1 = data.groupby(['货品', '销售区域', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率', ascending=False))
结果:
分析:销售区域:最差在西北递去,货品有1
和4
,主要是货品4
送货较晚导致;货品:最差的是货品2
,主要送往华东和马来西亚,主要是马来西亚的送货较晚导致
data1 = data.groupby(['月份', '货品'])['数量'].sum().unstack()
data1.plot(kind='line')
plt.show()
分析:货品2
在10月
和12月份
,销量猛增。原因猜测有:1.公司加大营销力度,2.开发了新的市场(后续有结论)
data1 = data.groupby(['销售区域', '货品'])['数量'].sum().unstack()
print(data1)
结果:
分析:从销售区域看,每种货品销售区域为1-3
个,货品1
有三个销售区域,货品2
有两个销售区域,其余货品均有1
个销售区域
data1 = data.groupby(['月份', '销售区域', '货品'])['数量'].sum().unstack()
print(data1['货品2'].unstack())
分析:货品2
在10月
和12月
份销量猛增,原因主要发生在原有销售区(华东);同样,分析出7
,8
,9
,11
月份销售数量还有很大提升空间,可以适当加大营销力度
data['货品用户反馈'] = data['货品用户反馈'].str.strip()
data1 = data.groupby(['货品', '销售区域'])['货品用户反馈'].value_counts().unstack()
print(data1)
data1['拒货率'] = data1['拒货'] / data1.sum(axis=1)
data1['返修率'] = data1['返修'] / data1.sum(axis=1)
data1['合格率'] = data1['质量合格'] / data1.sum(axis=1)
print(data1.sort_values(['合格率', '返修率', '拒货率'], ascending=False))
结果:
分析:货品3
,6
,5
,合格率均较高,返修率比较低,说明质量还可以;货品1
,2
,4
,合格率较低,返修量较高,质量存在一定的问题,需要改善;货品2
在马来西亚的拒货率最高,同时,货品2
在马来西亚的按时交货率也非常低,猜测:马来西亚人对送货的时效性要求较高;如果达不到,则往往考虑拒收;考虑到货品2
主要在华东地区销售量大,可以考虑增大在华中的投入,适当减小马来西亚的投入
4
-西北
,货品2
-马来西亚
两条线路存在较大问题,急需提升时效2
在华东地区
还有较大市场空间,适合加大投入,同时货品2在西北配送失效长,用户拒收率高,从成本角度考虑,应该减少投入1
,2
,4
,存在质量问题,简易扩大抽检范围,加大之间力度unstack
列转行展示;stack
行转列展示;data1.sum(axis=1)
:按行进行汇总求和;data.dropna(axis=0, how='any', inplace=True)
:有一个为空则删除;how='all'
:该行全为空则删除