Pandas数据分析⑥——数据分析实例(货品送达率与合格率/返修率/拒收率)
Pandas系列目录如下:
Pandas数据分析①——数据读取(CSV/TXT/JSON)
Pandas数据分析②——数据清洗(重复值/缺失值/异常值)
Pandas数据分析③——数据规整1(索引和列名调整/数据内容调整/排序)
Pandas数据分析④——数据规整2(数据拼接/透视)
Pandas数据分析⑤——数据分组与函数使用(Groupby/Agg/Apply/mean/sum/count)
Pandas数据分析⑦——数据分析实例2(泰坦尼克号生存率分析)
本文通过一个实际案例,来看下Pandas进行数据分析的具体步骤
数据来源:
某企业销售的6种商品的送货及用户反馈数据
解决问题:
1、配送服务是否存在问题
2、是否存在尚有潜力的销售区域
3、商品是否存在质量问题
先放结论:
1、货品4→西北,货品2→马来西亚两条线路存在较大问题,急需提升时效
2、货品2在华东地区还有较大市场空间,适合加大投入,同时货品2在西北配送时效长,用户拒收率高,从成本角度考虑,应该减少投入
3、货品1、2、4质量存在问题,建议扩大抽检范围,增大质检力度
分析过程如下(文末有数据源获取方式
)
一、数据清洗
① 重复值、缺失值、格式调整
data = pd.read_csv('data.csv',encoding='gbk',header=0)
print(data.info())
通过info()可以查看数据的轮廓,包括有10列,每1列的名字,数据量,格式等,从中可以明显看出:
① 订单号,货品交货情况,数量这3列是有缺失值,但最多缺失4行,数据量较小,直接删除不会影响整体分析
② 订单行这1列对分析无关紧要,可以删除
③ 销售金额格式不对,要改成float
# 删除重复值,这个虽然没有看出来,但是必须要在其它处理前处理掉
print(data.duplicated().value_counts())
data.drop_duplicates(keep='first',inplace=True)
# 删除缺失值
data.dropna(how='any',inplace=True)
# 去掉“订单行”列
data.drop(columns=['订单行'],inplace=True,axis=1)
data = data.reset_index(drop=True)
print(data.head())
# 修改销售金额格式
print(data.销售金额.head()) # 数据单位不一致,且数据中有逗号隔开,不适合分析
def data_deal(number):if number.find('万元')!=-1:data = float(number[:number.find('万元')].replace(',',''))*10000else:data = number.replace('元','')data = float(data.replace(',',''))return datadata['销售金额'] = data['销售金额'].map(data_deal)
② 异常值处理
print(data.describe())
通过describe()可以对连续变量进行统计描述分析,从结果可以看出
① 销售金额存在等于0的,属于异常,要删除
② 数量和销售金额的标准差都在均值的8倍以上,结合最大值和75%分位数可知,存在部分较大的值导致数据左偏非常严重,可以通过describe(percentiles)参数再细致地看下较大值的分布情况
data = data[data['销售金额'] != 0 ]
print(data.describe(percentiles=np.linspace(0.98,0.9999,15)))
从98%以上分位数可看出,数量是不断增加,销售额也随数量不断增加,在电商行业,确实存在这样的帕累托效应,20%的大户可能会贡献80%的份额,因此这部分不算异常数据,在进行与数量和金额无关的分析时可以保留,有关时可以剔除掉不看,至此数据清洗完毕
二、数据规整
由于后续会有关于不同月份的分析,因此要增加一项辅助列:月份
data['月份'] = data['销售时间'].apply(lambda x: int(x[x.find('/',0)+1: x.find('/',5)]))
print(data.head())
三、数据分析
1、 配送服务是否存在问题
① 月份维度
data['货品交货状况'] = data['货品交货状况'].str.strip()
data1 = data.groupby(['月份','货品交货状况']).size().unstack()
print(data1)
data1['按时交货率'] = data1['按时交货']/data1.sum(axis=1)
print(data1.sort_index())
从按时交货率看,16年Q4普通要低于Q3,猜测可能是气候原因
② 销售区域
data1 = data.groupby(['销售区域','货品交货状况']).size().unstack()print(data1)data1['按时交货率'] = data1['按时交货']/data1.sum(axis=1)print(data1.sort_values('按时交货率',ascending=False))
西北存在最突出的送货延迟问题,急需解决
③ 货品维度
data1 = data.groupby(['货品','货品交货状况']).size().unstack()
print(data1)
data1['按时交货率'] = data1['按时交货']/data1.sum(axis=1)
print(data1.sort_values('按时交货率',ascending=False))
货品4晚交货的情况最为严重,其余还相对较好
④ 货品和销售区域结合
data1 = data.groupby(['货品','销售区域','货品交货状况']).size().unstack()
print(data1)
data1['按时交货率'] = data1['按时交货']/data1.sum(axis=1)
print(data1.sort_values('按时交货率',ascending=False))
结合销售区域和货品一起看,销售区域送货最差的为西北,主要送的货品有货品1和货品4,主要是货品4的送货较晚所致;货品送货最差的是货品2,主要送往华东和马来西亚,主要是马来西亚的送货较晚所致
因此,要重点解决货品4送往西北、货品2送往马来西亚的问题
2、 是否存在尚有潜力的销售区域
① 月份维度
data1 = data.groupby(['月份','货品'])['数量'].sum().unstack()
print(data1)
# 解决不能显示中文的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
data1.plot()
plt.show()
货品2在10月和12月销售量暴增,其余货品销售量都趋于稳定,后面会看下货品2是否开发了新市场
② 不同区域
data1 = data.groupby(['销售区域','货品'])['数量'].sum().unstack()
print(data1)
从销售区域看,每种货品都是集中在1到3个区域销售,货品1是销售区域最多的,达到3个,货品2次之,2个,其余货品都是1个区域;
③ 月份和区域
data1 = data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack()
print(data1['货品2'])
重点看了下销售数量有较大变动的货品2, 发现其在**10月和12月的销售增长并非是开拓了新市场,而是在原有的华东地区增加了销量,猜测可能是对货品2在华东地区加大了营销推广所致
货品2在华东地区还有较大的市场空间,适合加大投入
③ 商品是否存在质量问题
data['货品用户反馈'] = data['货品用户反馈'].str.strip()
data1 = data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()
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,5,6的合格率均较高,返修率也较低,说明质量还可以
货品1,2,4的合格率低,返修率高,说明质量存在一定问题
货品2在马来西亚拒收率是最高的,结合按时收货率看,货品2在马来西亚的延误也是比较严重的,说明马来西亚用户对送货的时效要求较高,如果达不到则会拒货;考虑到货品2主要的销售地区是华东且在10月和12月有较高的涨幅,可以考虑增大华东的投资,减少马来西亚的投入
本人互联网数据分析师,目前已出Excel,SQL,Pandas,Matplotlib,Seaborn,机器学习,统计学,个性推荐,关联算法,工作总结系列。
微信搜索并关注 " 数据小斑马
" 公众号
1、回复“data
”就可以领取文中数据集
2、回复“数据分析
”可以免费获取下方15本数据分析师必备学习书籍一套
Pandas数据分析⑥——数据分析实例(货品送达率与合格率/返修率/拒收率)相关推荐
- 开启机器学习的第一课:用Pandas进行数据分析
翻译 | AI科技大本营 参与 | 林椿眄 本课程的目的并不是要开发一门全新的机器学习或数据分析的综合入门课程,也不是想借此来取代基础教育.在线/离线课程或一些专业和书籍.我们推出本系列文章是为了让初 ...
- c++输出txt格式循环一组数据后换行再循环一次_numpy、pandas以及用pandas做数据分析的案例...
本文也是秦路老师python教程的学习笔记.这篇也是发给超哥看的:很多人说python很简单很好学,也有很多人说python没有java和c的功能强大.但是这都不重要,重要的是我们想学了,想画图也好做 ...
- [转载] 用pandas进行数据分析实战
参考链接: Python | 使用Pandas进行数据分析 转载自http://mp.weixin.qq.com/s?__biz=MjM5NjEyMDI2MQ==&mid=2455947430 ...
- 【Pandas】数据分析入门
文章目录 前言 一.Pandas简介 1.1 什么是Pandas 1.2 Pandas应用 二.Series结构 2.1 Series简介 2.2 基本使用 三.DataFrame结构 3.1 Dat ...
- Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇
Pandas高级数据分析快速入门之一--Python开发环境篇 Pandas高级数据分析快速入门之二--基础篇 Pandas高级数据分析快速入门之三--数据挖掘与统计分析篇 Pandas高级数据分析快 ...
- pythonmysql数据分析_Python操作Mysql数据库入门——数据导入pandas(数据分析准备)...
原标题:Python操作Mysql数据库入门--数据导入pandas(数据分析准备) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求 ...
- 数据分析pandas完成数据分析项目
[Python有趣打卡]数据分析pandas完成数据分析项目 ![](https://img-blog.csdnimg.cn/20190306201535208.png?x-oss- process= ...
- Python数据分析实战(2)使用Pandas进行数据分析
文章目录 一.Pandas的使用 1.Pandas介绍 2.Pandas基本操作 Series的操作 创建DataFrame 常见列操作 常见行操作 DateFrame的基本操作 时间操作 3.Pan ...
- 万字长文,Python数据分析实战,使用Pandas进行数据分析
文章目录 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我 ...
最新文章
- Jenkins邮件配置,实现邮件发送策略(可实现每个Job对应不同的发送邮箱)
- delphi valuelisteditor控件的使用
- ctags对部分目录生成tags
- AI理论知识基础(19)-线性变换(1)
- session.merge 缓存不更新_如何保证缓存与数据库双写时的数据一致性?
- java综合案例_综合实例 - Java House - BlogJava
- 使用流进行通讯的一种可能犯的错误 (InputStream + OutputStream)
- 调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?...
- Hart 常用命令 命令格式+命令含义 中文翻译
- 采样定理的证明与推导
- Flask开发 导入flask_uploads包时提示“IMPORTERROR: CANNOT IMPORT NAME ‘SECURE_FILENAME‘ FROM ‘WERKZEUG‘“
- noip 2013 积木游戏
- 圣剑传说 玛娜传奇(Legend of Mana)(LOM)全防具取得方法
- Lifeline功能介绍03——课堂信息的查询
- ivms虚拟服务器,ivms监控服务器地址
- 2022年1月份报告合集(共222份)
- 使用python3.7中的scrapy框架,爬取起点小说
- Fast R-CNN 论文详读
- Java猿社区—ShardingSphere之广播表与绑定表
- C/C++静态代码分析工具
热门文章
- 终于想起了Matrix的登录密码了
- closesocket函数和WSACleanup函数
- iis错误+HTTP错误 500.19-Internal Server Error 错误代码:0x8007000d
- matlab中的耿贝尔法,最大降水量多年一遇计算方法及Matlab实现
- LiveGBS国标GB/T28181流媒体平台支持实时录像相关接口及操作
- c# 清除IE Cookies + 缓存
- c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc
- 小赵、小钱、小孙一起打羽毛球,每局两人比赛,另一人休息。三人约定每一局的输方下一局休息。
- jdk环境配置没问题eclipse打不开出现Incompatible JVM错误
- 【零基础学Java】第九天 IDEA的免费使用和常用设置及快捷键