专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

完整数据分析流程Python中的Pandas如何解决业务问题

  开篇
  作为万金油式的胶水语言,Python几乎无所不能,在数据科学领域的作用更是不可取代。数据分析硬实力中,Python是一个非常值得投入学习的工具。
  这其中,数据分析师用得最多的模块非Pandas莫属,如果你已经在接触它了,不妨一起来通过完整的数据分析流程,探索Pandas是如何解决业务问题的。数据背景
  为了能尽量多地使用不同的Pandas函数,我设计了一个古古怪怪但是实际中又很真实的数据,说白了就是比较多不规范的地方,等着我们去清洗。
  数据源是改编自一家超市的订单,文末附文件路径。导入所需模块
  importpandasaspd数据导入
  Pandas提供了丰富的数据IO接口,其中最常用的是pd。readexcel及pd。readcsv函数。
  datapd。readexcel(文件路径。xlsx,
  sheetname分页名称)
  datapd。readcsv(文件路径。csv)
  从超市数据集中把多页数据分别导入:
  orderspd。readexcel(超市数据集。xlsx,
  sheetname订单表)
  customerspd。readexcel(超市数据集。xlsx,
  sheetname客户表)
  productspd。readexcel(超市数据集。xlsx,
  sheetname产品表)
  该环节除了导入数据外,还需要对数据有初步的认识,明确有哪些字段,及其定义
  这里我们通过pd。Series。head()来查看每个数据表格的字段及示例数据
  明确业务问题及分析思路
  在业务分析实战中,在开始分析之前,需要先明确分析目标,倒推分析方法、分析指标,再倒推出所需数据。
  这就是以终为始的落地思维。
  假设业务需求是通过用户分层运营、形成差异化用户运营策略。数据分析师评估后认为可基于RFM用户价值模型对顾客进行分群,并通过不同族群画像特征制定运营策略,比如重要价值用户属于金字塔顶端人群,需要提供高成本、价值感的会员服务;而一般价值用户属于价格敏感型的忠诚顾客,需要通过折扣刺激消费等。
  因此,这里的分析方法则是对存量用户进行RFM模型分群,并通过统计各族群数据特征,为业务提供策略建议。
  明确业务需求及分析方法后,我们才能确定去统计顾客的R、F、M、以及用于画像分析的客单价等指标,此时才能进入下一步。特征工程与数据清洗
  数据科学中有句话叫GarbageIn,GarbageOut,意思是说如果用于分析的数据质量差、存在许多错误,那么即使分析的模型方法再缜密复杂,都不能变出花来,结果仍是不可用的。
  所以也就有了数据科家中80的工作都是在做数据预处理工作的说法。
  特征工程主要应用在机器学习算法模型过程,是为使模型效果最佳而进行的系统工程,包括数据预处理(DataPrePorcessing)、特征提取(FeatureExtraction)、特征选择(FeatureSelection)以及特征构造(FeatureConstruction)等问题。
  直白地说,可以分成两部分:数据预处理,可以理解成我们常说的数据清洗;特征构造,比如此次构建RFM模型及分组用户画像中,R、F、M、客单价等标签就是其对应的特征。
  (当然,RFM非机器学习模型,这里是为了便于理解进行的解释。)数据清洗
  什么是数据清洗?数据清洗是指找出数据中的异常值并处理它们,使数据应用层面的结论更贴近真实业务。
  异常值:不规范的数据,如空值、重复数据、无用字段等,需要注意是否存在不合理的值,比如订单数据中存在内部测试订单、有超过200岁年龄的顾客等特别注意数据格式是否合理,否则会影响表格合并报错、聚合统计报错等问题不符合业务分析场景的数据,比如要分析20192021年的用户行为,则在此时间段之外的行为都不应该被纳入分析
  如何处理:一般情况下,对于异常值,直接剔除即可但对于数据相对不多,或该特征比较重要的情况下,异常值可以通过用平均值替代等更丰富的方式处理
  在了解数据清洗的含义后,我们便可以开始用Pandas来实操该部分内容。数据类型
  先用pd。dtypes来检查数据字段是否合理
  发现订单日期、数量是Object(一般即是字符)类型,后面无法用它们进行运算,需要通过pd。Series。astype()或pd。Series。apply()方法来修改字符类型
  orders〔订单日期〕orders〔订单日期〕。astype(datetime64)
  orders〔数量〕orders〔数量〕。apply(int)
  另外,对时间类型的处理也可以通过pd。todatetime进行:
  orders〔订单日期〕pd。todatetime(orders〔订单日期〕)修改字段名
  经验丰富的数据分析师发现字段名字也有问题,订单Id存在空格不便于后面的引用,需要通过pd。rename()来修改字段名
  ordersorders。rename(columns{订单Id:订单ID,
  客户Id:客户ID,
  产品Id:产品ID})
  customerscustomers。rename(columns{客户Id:客户ID})多表连接
  把字段名以及数据类型处理好后,就可以用pd。merge将多个表格进行连接。
  表连接中的on有两种方式,一种是两个表用于连接的字段名是相同的,直接用on即可,如果是不相同,则要用lefton,righton进行。
  dataorders。merge(customers,on客户ID,howleft)
  datadata。merge(products,howleft,
  lefton产品ID,righton物料号)剔除多余字段
  对于第二种情况,得到的表就会存在两列相同含义但名字不同的字段,需要用pd。drop剔除多余字段。此外,行Id在这里属于无用字段,一并剔除掉。
  data。drop(〔物料号,行Id〕,axis1,
  inplaceTrue)
  调整后得到的表结构:
  文本处理剔除不符合业务场景数据根据业务经验,订单表中可能会存在一些内部测试用的数据,它们会对分析结论产生影响,需要把它们找出来剔除。与业务或运维沟通后,明确测试订单的标识是在产品名称列中带测试的字样。
  因为是文本内容,需要通过pd。Series。str。contains把它们找到并剔除
  datadata〔data〔产品名称〕。str。contains(测试)〕时间处理剔除非分析范围数据
  影响消费者的因素具有时间窗口递减的特性,例如你10年前买了顶可可爱爱的帽子,不代表你今天还需要可可爱爱风格的产品,因为10年时间足以让你发生许多改变;但是如果你10天以前才买了田园风的裙子,那么就可以相信你现在还会喜欢田园风产品,因为你偏好的风格在短期内不会有太大改变。
  也就是说,在用户行为分析中,行为数据具有一定时效,因此需要结合业务场景明确时间范围后,再用pd。Series。between()来筛选近符合时间范围的订单数据进行RFM建模分析。
  datadata〔data〔订单日期〕。between(20190101,20210813)〕特征构造
  此环节目的在于构造分析模型,也就是RFM模型及分群画像分析所需的特征字段。数据聚合顾客消费特征
  首先,是RFM模型中顾客的消费特征:R:客户最近一次购买离分析日期(设为20210814)的距离,用以判断购买用户活跃状态F:客户消费频次M:客户消费金额
  这些都是一段时间内消费数据的聚合,所以可以用pd。groupby()。agg()实现
  consumedfdata。groupby(客户ID)。agg(累计消费金额(销售额,sum),
  累计消费件数(数量,sum),
  累计消费次数(订单日期,pd。Series。nunique),
  最近消费日期(订单日期,max)
  )
  其中,R值比较特殊,需要借用datetime模块,计算日期之间的距离
  fromdatetimeimportdatetime
  consumedf〔休眠天数〕datetime(2021,8,14)consumedf〔最近消费日期〕
  consumedf〔休眠天数〕consumedf〔休眠天数〕。map(lambdax:x。days)
  计算所得顾客累计消费数据统计表:
  分箱处理客单价区间划分
  根据前面分析思路所述,完成RFM模型用户分群后,还要统计各族群用户消费画像,这里因篇幅限制仅统计各族群客单价分布特征。
  此时,计算完客单价数据后,需要用pd。cut对客单价进行分箱操作,形成价格区间。
  consumedf〔客单价〕consumedf〔累计消费金额〕consumedf〔累计消费次数〕
  consumedf〔客单价区间〕pd。cut(consumedf〔客单价〕,bins5)
  通过pd。Series。valuecounts方法统计客单价区间分布情况:
  pd。cut中的bins参数为将客单价划分的区间数,填入5,则平均分为5档。当然,还是那句话,这个在实操中需要与业务明确,或结合业务场景确定。RFM建模
  完成数据清洗及特征构造后,就进入到建模分析环节。Tukey’sTest离群值检测
  根据分析经验,离群值会极大地对统计指标造成影响,产生较大误差,例如把马云放到你们班里,计算得出班级平均资产上百亿。在这里,马云就是离群值,要把它剔除出去。
  所以,在开始对RFM阈值进行计算之前,有必要先对R、F、M的值进行离群值检测。
  这里我们用Turkey’sTest方法,简单来说就是通过分位数之间的运算形成数值区间,将在此区间之外的数据标记为离群值。不清楚的同学可以知乎搜一下,这里不展开讲。
  Turkey’sTest示意
  Turkey’sTest方法依赖分位数的计算,在Pandas,通过pd。Series。quantile计算分位数
  defturkeystest(fea):
  Q3consumedf〔fea〕。quantile(0。75)
  Q1consumedf〔fea〕。quantile(0。25)
  maxQ31。5(Q3Q1)
  minQ11。5(Q3Q1)
  ifmin0:
  min0
  returnmax,min
  以上代码实现了Tukey’sTest函数,其中Q3就是75分位、Q1就是25分位。而min和max则形成合理值区间,在此区间之外的数据,不论太高还是太低还是离群值。
  注意,在这里因为存在min是负数的情况,而消费数据不可能是负数,所以补充了一个把转为0的操作。
  接下来,给RFM特征数据表新增字段是否异常,默认值为0,然后再用Tukey’sTest函数把异常数据标记为1,最后只需保留值为0的数据即可。
  consumedf〔是否异常〕0
  forfeainrfmfeatures:
  max,minturkeystest(fea)
  outletconsumedf〔fea〕。between(min,max)bool
  consumedf。loc〔outlet,是否异常〕1
  consumedfconsumedf〔consumedf〔是否异常〕0〕聚类与二八原则RFM阈值计算
  现在已经可以确保建模所用的特征是有效的,此时就需要计算各指标阈值,用于RFM建模。阈值的计算一般通过聚类算法进行,但这里不涉及机器学习算法。从本质上讲,聚类结果通常是符合二八原则的,也就是说重要客群应该只占20,所以我们可以计算80分位数来近似作为RFM模型阈值。
  Mthresholdconsumedf〔累计消费金额〕。quantile(0。8)
  Fthresholdconsumedf〔累计消费次数〕。quantile(0。8)
  Rthresholdconsumedf〔休眠天数〕。quantile(0。2)RFM模型计算
  得到RFM阈值后,即可将顾客的RFM特征进行计算,超过阈值的则为1,低于阈值的则为0,其中R值计算逻辑相反,因为R值是休眠天数,数值越大反而代表越不活跃。
  consumedf〔R〕consumedf〔休眠天数〕。map(lambdax:1ifxconsumedf〔F〕consumedf〔累计消费次数〕。map(lambdax:1ifxFthresholdelse0)
  consumedf〔M〕consumedf〔累计消费金额〕。map(lambdax:1ifxMthresholdelse0)
  对顾客RFM特征划分1和0,即高与低后,即可进行分群计算:
  consumedf〔RFM〕consumedf〔R〕。apply(str)consumedf〔F〕。apply(str)consumedf〔M〕。apply(str)
  rfmdict{
  111:重要价值用户,
  101:重要发展用户,
  011:重要保持用户,
  001:重要挽留用户,
  110:一般价值用户,
  100:一般发展用户,
  010:一般保持用户,
  000:一般挽留用户
  }
  consumedf〔RFM人群〕consumedf〔RFM〕。map(lambdax:rfmdict〔x〕)
  至此,已完成RFM建模及用户分群计算。分群画像
  完成模型分群后,就要对各族群分别统计人数及客单价分布。人数占比
  最简单的一个画像分析,则是用pd。Series。valuecounts对各族群进行人数统计,分析相对占比大小。
  rfmanalysispd。DataFrame(consumedf〔RFM人群〕。valuecounts())。rename(columns{RFM人群:人数})
  rfmanalysis〔人群占比〕(rfmanalysis〔人数〕rfmanalysis〔人数〕。sum())。map(lambdax:。2f(x100))
  透视表
  各族群客单价分布涉及多维度分析,可以通过Pandas透视功能pd。pivottable实现
  代码中,聚合函数aggfunc我用了pd。Series。nunique方法,是对值进行去重计数的意思,在这里就是对客户ID进行去重计数,统计各价位段的顾客数。
  pd。pivottable(consumedf。resetindex(),DataFrame
  values客户ID,值
  indexRFM人群,分类汇总依据
  columns客单价区间,列
  aggfuncpd。Series。nunique,聚合函数
  fillvalue0,对缺失值的填充
  marginsTrue,是否启用总计行列
  dropnaFalse,删除缺失
  marginsnameAll总计行列的名称
  )。sortvalues(byAll,ascendingFalse)
  这样就得到了每个族群在不同价位段上的分布,配合其他维度的画像分析可以进一步形成营销策略。逆透视表
  最后,做个骚操作,就是透视后的表属于多维度表格,但我们要导入到PowerBI等工具进行可视化分析时,需要用pd。melt将它们逆透视成一维表。
  pivottable。melt(idvarsRFM人群,
  valuevars〔(124。359,3871。2〕,(3871。2,7599。4〕,
  (7599。4,11327。6〕,(11327。6,15055。8〕,
  (15055。8,18784。0〕〕)。sortvalues(by〔RFM人群,variable〕,ascendingFalse)
  这样字段名为人群、指标、值的表格,可以一行就把信息呈现的表格就是一维表。而前面各族群人数统计中,需要一行一列来定位信息的就是二维表。结尾
  至此,我们已经通过Pandas建立了RFM模型及分组人群画像分析,完成了业务分析需求。
  受限于篇幅,本文仅对数据分析过程中Pandas高频使用的函数方法进行了演示,同样重要的还有整个分析过程。如果其中对某些函数不熟悉,鼓励同学多利用知乎或搜索引擎补充学习。同时也欢迎加饼干哥哥微信讨论。
  更多Pandas函数使用说明,可查询中文文档
  本文算是数据分析流程的基础篇,计划会再整理一份进阶篇,涉及机器学习流程、以及更多特征工程内容,同样会以业务落地实战的方式进行介绍。

老人旅游,是夫妻两人好还是一群志同道合的朋友一起旅行好?这个问题,要看老人喜欢和谁一起游来定,通常来说,夫妻两人游比较好,因为一起去旅游能体现相互照顾,给对方带来一些平时没有得到的温情。老人旅游,也需要强壮的身体,在我旅游途中,也遇见两四川宜宾有哪些旅游攻略呢?这个问题提的很简单,但包含的信息量很大,我也不知道你两日游或者是三日游,因此这里我把我去宜宾蜀南竹海的玩的感受分享给你,你自己去做选择!蜀南竹海位于宜宾长宁县,县与市之间的距离还是送孩子上放学被邻居蹭车一年多,该怎么办?最好的办法是两家一人负责一周,互搭着接送。对方蹭车送孩子一年多,他不提,只能你提,因为你已经心理有负担,何必这么小的事情,不经意的一句话,一个脸色,让过去的交情都没有了。有顺路车去为什么现在的孩子动不动就跳楼自杀,要不就是患抑郁症?前段时间看新闻,一个孩子因为不交作文,老师用课本敲了一下他的头,说他是二傻子,后来这个孩子患了抑郁症,家长把老师告上了法庭。最近又出来一个孩子因为经常不交作业,经常撒谎,老师一个星孩子上书法班一年却没有进步,该怎么办?写字除了锻炼笔法外,还可以锻炼孩子的耐性。孩子书写不好,究其原因主要有以下三点一写字初始,父母没有陪伴,没有严要求!刚学写字,有些家长可能觉得孩子还小,不必要求严格。一年半载后,您我儿子考上石家庄铁道大学土木系不想去怎么办?我就是铁道大学土木学院毕业的。从整体实力来说,铁大的土木绝对是全国一流的,土木整体排名全国第15名,比好多985,211的都好。这个学校的这个专业优点是毕业如果不考研,工作特别好找大学辛苦四年,工资4000,培训三个月计算机,工资15000,你如何选择?大学毕业后因为专业原因工资4000,相反计算机却能15000。我的看法是每一个行业都有每一个行业的工资标准,和考核制度,跨行业对工资进行比对你必须考虑到不同行业间的差别,当初你大学中考成绩在重点高中趴底,在普通高中属上游,有人说宁做鸡头不做凤尾,我该怎么选?我是赢在高三,多年担任重点高中的班主任,根据我的观察,在重点高中掉队的,不一定是成绩差的,而是心态差的不是学习差的,而是不想学习和不会学习的。如果你不属于后面这几种类型,我建议你去为什么现在身边的孩子身高都好高?山东东部沿海这里因为海鲜多,普通孩子一般比山东内路孩子高十厘米左右,如果父母亲,有一方高,比如,男的一米七五左右,女的一米七左右,随男女一方都是高个子,我一个同学一米七不到,找了个抗战剧中有哪些常见的历史错误?我是萨沙,我来回答。最常见的历史错误,就是认为鬼子很容易打。实际上,恰恰相反。日军是非常难对付的部队。就抗战期间来说,日军的装备比国军优秀十倍甚至百倍,训练也更为严格和科学,后勤补广东潮汕和福建闽南在历史上有什么渊源?去过潮汕和闽南地区的人会觉得很奇怪,这两个地区风俗方言几乎一样。两个地区的经商氛围也特别浓厚,走出很多著名商业大佬。然而,却一个是广东省,一个是福建省。这两者到底是啥关系呢?其实一
全国5个不设县区的地级市广东和海南各2个,甘肃1个01认识地级市地级市是我国第二级行政区划,目前全国有293个地级市。地级市可分为3种情况一是既设市辖区,又管辖县自治县旗自治旗,亦代管县级市等县级行政区此类地级市占绝大多数。二是只记者节特刊丨抚时代脉搏扬藏蓝强音记甘肃省公安厅政治部宣传处四级主任科员刘东帅本网记者程健警察,在更多人心中是心系群众安危,手握钢枪,惩恶扬善的正义天使。然而,还有一种警察,他们肩抗相机,心系藏蓝,记录着护航人民群众生命财产安全的点点滴滴。有人用铁肩担道义,把二十大精神带到基层一线学习贯彻党的二十大精神山西省委宣讲团走进新经济组织11月9日,省委宣讲团成员,省市场监管局党组书记局长张九萍为省市场监管系统工作人员以及企业代表宣讲党的二十大精神。我省各地非公企业代表通过新媒体平台同步直播收听收看。本报记者阮洋摄细化抓手做实过渡期监督甘肃深入整治群众身边腐败和作风问题中央纪委国家监委网站王彬通讯员马颖地处河西走廊东端乌鞘岭北麓的古浪县,在甘肃省纪委监委等单位帮扶下脱贫摘帽后,走上了乡村振兴产业发展的富民之路。11月2日,党的二十大代表,甘肃省委甘肃路桥发挥旗帜引领作用推进党建与生产经营相融互促党的十八大以来,甘肃路桥建设集团党委认真落实新时代党的建设总目标总体布局和重点任务,把坚持党的领导加强党的建设作为国有企业的根与魂,创新实施固本领航夯基聚智融合廉洁六大党建工程,充新时代治国理政科学思维的生动展现编者按为迎接党的二十大胜利召开,中宣部联合中央党史和文献研究院国家发展改革委国家广播电视总局中央广播电视总台中央军委政治工作部共同摄制了16集大型电视专题片领航。该片全景式描绘了以HorizonWorlds月活不及预期,Meta元宇宙乐园留客难21世纪经济报道记者蔡姝越上海报道被Meta寄予厚望的元宇宙社交产品HorizonWorlds,交出了一份不太令人满意的成绩单。近日,一份Meta公司的内部文件显示,目前Horiz有时候真的应该考虑关闭朋友圈五月,北京,疫情时。除了家之外,能散步的地方就是小区的一亩三分地。说是人间小牢笼也不算过分。可社交媒体太发达了,让北京以外的风景以照片的形式,一张张出现在我的朋友圈里。这真的很难受姑娘,以后自拍别让男朋友戴墨镜!秘密都被曝光了哈哈哈说好不要你们陪着我,你们非要来,这下好了吧打游戏的时候,一定不要嘲笑你的队友自己亲生的,洗袜子放了六袋子洗衣液简简单单的吃一顿,犒劳一下我自己新娘以后这样的事情都可以交给我要不是准说实在的,学会尊重别人,那是一件很难做的事情啊在写这一小段文字的之前,我说两件两小事一件是关于信佛的,前两天看了一个乞食的佛教徒的事,我发表了让这些人自谋其力的建议,不要再从事乞食了。另一件小事是有关宠物的事,主张一刀切,不能担心的事情发生了永康一停车场内,一辆新能源汽车充电起火钱江晚报小时新闻通讯员应华玲王雨婷记者朱丽珍着火了10月9日21时50分,永康市方岩镇一停车场内,正在充电的一辆新能源汽车突然冒起浓烟,同时车辆底盘冒出火光,一旁路人见状赶紧拨打了
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网