商务数据分析技术 课件 项目五 Python数据分析_第1页
商务数据分析技术 课件 项目五 Python数据分析_第2页
商务数据分析技术 课件 项目五 Python数据分析_第3页
商务数据分析技术 课件 项目五 Python数据分析_第4页
商务数据分析技术 课件 项目五 Python数据分析_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python数据分析无锡商业职业技术学院李富随着电商行业的激烈竞争,电商对数据分析的运用仅靠EXCEL等软件已出现掣肘。Python语言运用于数据分析应运而生。本篇将运用python编程,对电商运行数据进行数据清洗和处理。运用python数据分析方法,对电商运行数据进行分析;基于价格、支付日期等字段数据分析支付金额等整体销售业绩指标,探索支付金额变动的情况,并根据浏览量、直通车费用、淘宝客费用等分析其变动原因。基于支付金额、买家所在地区等字段,进行买家地区分布分析。基于消费次数和买家实际支付金额,分析买家消费频率和消费区间分布,分析人群贡献度。基于RFM模型分析,探索店铺销售的主要买家,并甄别各类买家,以便采取相应措施,进行客户价值升级和客户留存。学习目标知识目标01技能目标02素质目标03学习python进行数据分析的思路,熟悉数据处理常用库的使用。掌握库的使用场景,会对电子商务常用场景进行数据分析,进行建模。素质目标:具有数据分析思维,具有较好计算机素养,具有较高知识综合运用能力。学习导图任务一python数据分析库介绍01任务描述

电商最重要的工作之一是引流。而要引流必须对自己店铺的定位比较清晰,必须对购买自己商品的买家进行客户数据分析。pandas、numpy和matliob是数据分析业务离不开的python库。本节通过对店铺销售信息等进行数据分析,让同学们熟悉数据分析常用库pandas、numpy和matliob的使用功能和应用场景。任务目标1.熟练数据分析常用库的功能。2.熟悉数据分析常用库的使用场景。一Pandas数据分析库Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas已经成为Python数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。pandas为时间序列分析提供了很好的支持,最初被作为金融数据分析工具而开发出来,被应用于金融量化交易领域,现在它的应用领域更加广泛,涵盖了农业、工业、交通等许多行业。1.1创建数据并保存

1.1.1创建二维数组数据

1.1.2以xlsx和.csv保存数据

1.2

读取数据并查看指定几行1.3数据格式查看1.4

查看数字型数据整体信息1.5行列数据增加或删减处理1.5.1

对原有数据增加1列1.5.2

对原有数据中的一列或几列进行删除1.5.3

根据需要,提取原有数据一列或几列进行指定操作1.6

重复数据判断及去重1.6.1判断数据中的某列或某列数据是否存在重复二

Numpy科学计算库Numpy是一个开源的Python科学计算库,是Python中诸多数据科学库的重要基础,例如,pandas,OpenCV,TensorFlow等。熟悉和精通NumPy科学计算库,对于理解和应用其它基于NumPy而衍生的库非常重要,许多其他应用较多的库如Pandas、Scikit-learn等都要用到Numpy库的一些功能。这里主要介绍Numpy数组对象概念、如何创建数组、Numpy数值类型转换、数组的转置、数组的切片和索引、数组的堆叠、numpy常用统计函数等。2.1

Numpy数组对象介绍Numpy中的多维数组称为ndarray,这是Numpy中最常见的数组对象。ndarray对象通常包含两个部分:ndarray数据本身、描述数据的元数据。Numpy数组的优势:Numpy数组通常是由相同种类的元素组成的,即数组中的数据项的类型一致。这样有一个好处,由于知道数组元素的类型相同,所以在计算是能快速确定存储数据所需空间的大小。Numpy数组和python列表处理相比,Numpy使用了优化过的算法,它的优势在于能够运用向量化运算来处理整个数组,速度较快;而Python的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。2.2创建ndarray数组首先需要导入numpy库,在导入numpy库时通常使用“np”作为简写,这也是数据分析行业通用的写法。这样写法的好处在于,由于业内公认,便于和其他程序嫁接,和其他程序保持一致,便于修改、完善和协调。importnumpyasnp创建ndarray数组的方式有很多种,这里介绍使用的较多的几种:任务二Python数据分析02任务描述店铺运行后我们需要时刻知道店铺的运营情况,这就需要经常采集店铺和行业数据并进行分析。但采集的数据往往存在缺失、重复、异常和格式不对等情况,需要进行清洗和处理,以便后续进行数据分析。本节将对店铺运行数据进行处理,了解数据情况,并从缺失、重复、异常和格式角度进行适当处理。任务目标1.熟悉数据清洗的处理步骤。2.熟悉数据清洗的合适处理方式。知识准备1.熟悉数据清洗的概念和内涵。2.熟悉数据清洗的常用方法和函数。一数据清洗的内涵和类型所谓数据清洗,实际上就是对缺失值、异常值的删除处理或填充处理,以及为了方便数据的获取和分析,对列名的重命名、列数据的类型转换或者是排序等操作。二数据清洗的常用方法2.1

缺失值处理2.1.1

判断数据表是否有缺失值分析判断数据表是否有缺失值的常见函数有info()和isna()。(1)info()函数判断数据表是否有缺失值使用方法:DataF()结果是返回数据的相关信息,包括:行数、列数、列索引、列非空值个数、列类型、内存占用等。对其中的2023版数据分析技术表1.csv文件,用info()进行缺失值分析。方法如下:importpandasaspddf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")()

#ColumnNon-NullCountDtype----------------------------0统计日期183non-nullobject1访客数183non-nullint642商品浏览量183non-nullint643支付金额183non-nullfloat644直通车消耗183non-nullfloat645淘客佣金183non-nullfloat64dtypes:float64(3),int64(2),object(1)memoryusage:8.7+KB<class'pandas.core.frame.DataFrame'>RangeIndex:183entries,0to182Datacolumns(total6columns):(2)isna()函数判断数据表是否有缺失值以下找到:路径f:\数据分析技术教材\数据集\,对其中的2023版数据分析技术表1.csv文件,用isna()函数进行缺失值分析。方法如下:使用方法:DataFrame.isna().any()这种方法会返回一个仅含True和False这两种值的系列(Series)。df1.isna().any()打印并输出结果为:统计日期False访客数False商品浏览量False支付金额False直通车消耗False淘客佣金Falsedtype:bool2.1.2数据表的缺失值处理(1)补充数据表的缺失值

假如某一字段含有缺失值,可以采用DataFrame.fillna()补充。有以下方法:1)可以使用字符串,如‘缺失’、“/“等来填充字段的空值。2)如果是数值缺失,可以采用该字段平均值或中位数或众数去填充,以确保填充后数据的总体趋向不变。importpandasaspddf2=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表2.csv',encoding="ANSI")()Datacolumns(total8columns):#ColumnNon-NullCountDtype----------------------------0子订单编号6419non-nullfloat641购买数量6419non-nullint642买家实际支付金额6419non-nullfloat643订单创建时间6419non-nullobject4订单付款时间6410non-nullobject5物流公司6379non-nullobject6网名6419non-nullobject7地区6419non-nullobjectdtypes:float64(2),int64(1),object(5)memoryusage:401.3+KB

可以看出订单付款时间和物流公司两列数据存在数据缺失。全部数据为6419,而这两项数据分别6410和6379个。我们用print(df2.isna().any())命令,输出结果如下:子订单编号False购买数量False买家实际支付金额False订单创建时间False订单付款时间True物流公司True网名False地址Falsedtype:bool由于买家实际支付金额数据不缺,对于订单付款时间,我们可以用订单创建时间来提替代,由于涉及较少数据,而且支付金额不大,不影响分析的趋向。如:df2.订单付款时间=df2.订单付款时间.fillna(df2['订单创建时间'])对于物流公司名称数据缺失,由于不影响分析,我们用缺失两字替代。采用如下命令:df2.物流公司=df2.物流公司.fillna('缺失')print(df2.isna().any())输出结果:子订单编号False购买数量False买家实际支付金额False订单创建时间False订单付款时间False物流公司False网名False地址Falsedtype:booldf2.isna().any()的值都为false,说明缺失值已经补充完整。需要对数据用平均值或中位数或众数处理,譬如对买家实际支付金额的处理,如果存在缺失,就可以采用均值、中数和众数方法处理:df2.买家实际支付金额=df2.买家实际支付金额.fillna(df2['买家实际支付金额'].mean())df2.买家实际支付金额=df2.买家实际支付金额.fillna(df2['买家实际支付金额'].median())df2.买家实际支付金额=df2.买家实际支付金额.fillna(df2['买家实际支付金额'].mode())(2)删除缺失值如果缺失的数据对整体指标的变化影响不大,对分析结果的影响不大,可以进行简单处理,即对无效的数据进行删除。2.2重复值处理判断2023版数据分析技术表1的数据是否整行重复,可以采用如下方法:importpandasaspddf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")flag=df1.duplicated()df1['is_repeat']=flagprint(df1)

输出结果为:统计日期访客数商品浏览量支付金额直通车消耗淘客佣金is_repeat02023/6/11995531314873.490983.5910.24False12023/6/2131636755598.040291.9510.99False22023/6/3193950895944.890809.1111.34False32023/6/41911699310794.231736.610.00False42023/6/51862513810701.789698.9250.13False.......................1782023/11/263682875717349.3002151.3842.00False1792023/11/274081933134120.2902623.8731.26False1802023/11/283752845623620.8002142.5344.64False2.3格式转化数据在处理中一些时间维度数据或量化数据是字符串型的,需要转换成它原有的类型。如2023版数据分析技术表1的订单日期这个时间维度数据是字符串型的,需要修改成时间类型(datetime类型)。下面采用to_datetime方法,进行处理。同时采用dtypes显示处理后的数据类型情况。importpandasaspddf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1['统计日期']=pd.to_datetime(df1['统计日期'])print(df1.dtypes)输出结果如下:统计日期datetime64[ns]访客数int64商品浏览量int64支付金额float64直通车消耗float64淘客佣金float64dtype:object可以看出统计日期变成datetime64[ns]时间格式了2.4异常值处理数据缺失值明确、补充和调整完整后,接下来需要进一步检查数据中是否含有异常值,这里采用Pandas的describe()方法,通过描述电子商务数据集的数据趋势情况,可以粗略看出电子商务数据集数据的整体表现,从而从价值或经验角度,判断数据是否存在异常。describe()函数里涉及的常用指标包括count、mean、std、min、max、下四分位数,中位数和上四分位数等指标。对2023版数据分析技术表1.csv的数据集进行异常值分析,方法如下:df1.describe()

统计日期访客数...直通车消耗淘客佣金count183183.000000...183.000000183.000000mean2023-08-3100:00:003400.448087...2148.28737726.671257min2023-06-0100:00:001113.000000...0.0000000.00000025%2023-07-1612:00:001988.000000...983.5050009.95500050%2023-08-3100:00:003024.000000...1850.31000023.36000075%2023-10-1512:00:004431.000000...2912.95000037.425000max2023-11-3000:00:008775.000000...31773.390000119.640000stdNaN1680.661168...2547.89161222.485986[8rowsx6columns]

通过分析describe()结果,发现采用的数据集并无异常值存在。三数据处理常用函数类型总结3.1数据表数据类型、格式及特征检查数据清洗前,要对数据表进行检查,可以采用以下方法:Values()、unique()、Isnull()、dtypes()、info()、shape()等,利用Values()可以查看数据集中的数值,利用unique()查看name列中的唯一值,也就是可以查看数据集是否有重复值;利用isnull()可以检查数据是否有空值,整体数据集和单列数据都可以检查;进一步利用isnull().value_counts()可获得空值数据量;利用dtypes()可以一次性查看数据表中所有数据的格式,也可以指定一列来单独查看;利用info()可以检查数据表的整体信息;利用shape()函数返回一个反应数组维度的元组。3.2数据表清洗清洗数据表,需要对空值进行处理,可以采用删除、填充、数据格式更改、删除函数重复值、替代数据等,利用Dropna()对空值行进行删除,如dropna(how=‘any')就可以删除数据表中含有空值的行;利用fillna()对空值进行填充;利用asstype()进行数据格式更改;利用drop_duplicate()删除数据集重复值,如drop_duplicates(keep=‘last')保留最后一个重复值;利用replace()对原有数据进行替代,常用于替换异常数据;利用map()清楚空格,如map(str.strip)。3.3数据表预处理数据预处理是对清洗后的数据表进行进一步处理,以便后续能依据数据进行深入的分析。如利用Sort_values()对数据集进行排序;利用merge()对数据集进行合并;利用split()对数据集进行分裂;利用where()和groupy()对数据集进行分组;利用reshape()调整数组维度;利用astype()强制转换numpy数据类型转换,调用astype返回数据类型修改后的数据,但是源数据的类型不会变,如astype('int');rename()常用于更改列名,如rename(columns={‘name':‘LFName'});append数据表追加,如df1.append(df2)。3.4数据表数据提取在处理中经常需要对数据集中的相关数据进行提取,以便方便分析。如loc利用切片原理,使用loc函数进行切片操作时只能使用行名或者列名,也就是索引(行名)和字符串(列名),如df_inner.1oc[:4],这里是取0到4的所有列;iloc函数则和loc函数相反,只能使用默认的数字索引,不能使用自定义的行列名字索引。如使用iloc按位置区域提取数据,如df_inner.iloc[:4,:5],表示从0开始,提取前四行、前五列。ix把iloc和loc语法综合了,如可以利用ix按标签和位置同时进行数据提取,如df.ix[1]可以像iloc通过行号选取,df1.ix[‘a']可以像loc通过标签选取;df1.ix[3,3]通过行号选取指定位置的数据;df1.ix[‘a',‘a']通过标签选取指定位置的数据。任务三销售数据变动分析及可视化03任务描述店铺运行后我们需要采集数据对店铺的运转情况进行分析,以便采取有利的行动。譬如店铺业绩波动的情况、相关指标的关联性、销售如何提升等。本节将运用python数据分析方法,对电商运营数据进行分析,基于价格、支付日期等字段数据分析支付金额等整体销售业绩指标,探索支付金额变动的情况。根据浏览量、直通车费用、淘宝客费用等分析销售业绩(下单金额)变动的原因。进而建立广告投入和买家下单金额之间的模型关系,并用之进行预测买家支付金额的变动情况等。任务目标1.熟悉销售业绩指标波动的处理和分析。2.熟悉销售业绩变化的模型构建和预测。一销售业绩指标波动情况1.1

销售收入(支付金额)和月份关系为了便于分析每月销售收入数据,需要按月统计电子商务数据集——2023版数据分析技术表1中的支付金额数据,这里主要使用Pandas中的DataFrame对象的resample()方法和to_period()方法实现日期数据的统计并显示:#支付金额和统计月份关系importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','支付金额']]df1['统计日期']=pd.to_datetime(df1['统计日期'])#将日期转换为日期格式df1=df1.set_index('统计日期',drop=True)#设置日期为索引,并删除原来的日期列df_m=df1.resample('M').sum().to_period('M')ax.set_title('按月分析销售收入')df_m.plot(kind='bar',ax=ax,color='g')#柱形图#调整图表距上部和底部的空白plt.subplots_adjust(top=0.95,bottom=0.15)plt.show()如图,可以看出2023年6月至2023年8月,店铺的销售收入(支付金额)稳中有略微的上升。2023年9月店铺的销售收入(支付金额)明显上升。2023年9月至2023年10月,店铺的销售收入(支付金额)稳中有略微的下降。而在2023年11月份店铺的销售收入(支付金额)明显又有一个提升,达到一个高峰期。1.2销售收入(支付金额)与具体日期关系importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','支付金额']]df1['统计日期']=pd.to_datetime(df1['统计日期'])#将日期转换为日期格式df1=df1.set_index('统计日期',drop=True)#设置日期为索引,并删除原来的日期列df_d=df1.resample('D').sum().to_period('D')#图表字体为黑体,字号为10#图表字体为黑体,字号为10plt.rc('font',family='SimHei',size=10)#绘制子图fig=plt.figure(figsize=(9,5))ax=fig.subplots(1,1)#创建Axes对象#分别设置图表标题ax.set_title('按天分析支付金额')df_d.plot(ax=ax,color='r')#折线图#调整图表距上部和底部的空白plt.subplots_adjust(top=0.95,bottom=0.15)plt.show()如图,6月到9月按天支付金额整体呈现上升。9月13日左右为一个销售高峰期,10月12日左右为一个销售高峰期,10月15日以后的销售明显呈现下降;11月1-11日销售收入明显上涨,11月11以后又开始下降,原因同销售收入(支付金额)和月份关系。其余时间支付金额呈现回归趋势。二销售收入波动原因2.1

基于浏览量分析使用PV(页面访问量)和UV(独立访客数)指标,分析访问量和访问用户的趋势和规律。用可视化工具绘制相应的图表更好地展示数据,进而找出高峰和低估,及分析用户访问偏好。同时,由于我们的数据涉及9月、10月及11月数据,拥有“双十一”这一特殊日期,因此可针对11月11日这一天的前后段时间进行具体分析,以便更好地发现活动对店铺经营业绩的影响,更好的策划并利用好平台活动。2.1.1访客数UV与统计日期关系importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','访客数']]df1['统计日期']=pd.to_datetime(df1['统计日期'])df1=df1.set_index('统计日期',drop=True)df_f=df1.resample('D').sum().to_period('D')#图表字体为黑体,字号为10plt.rc('font',family='SimHei',size=10)#绘制子图fig=plt.figure(figsize=(9,5))ax=fig.subplots(1,1)#创建Axes对象ax.set_title('按天统计访客数')df_f.plot(ax=ax,color='b')plt.subplots_adjust(top=0.95,bottom=0.15)plt.show()如图,6月到9月按天支付金额整体呈现上升。如图9月13-15日左右为一个访客高峰期,10月13日左右访客数急剧增加,15日左右访客数达到顶峰,11月4日前后、11月14-20日期间分别有一个高峰期。2.1.2

商品浏览量PV与统计日期关系importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','商品浏览量']]df1['统计日期']=pd.to_datetime(df1['统计日期'])df1=df1.set_index('统计日期',drop=True)df_f=df1.resample('D').sum().to_period('D')#图表字体为黑体,字号为10plt.rc('font',family='SimHei',size=10)#绘制子图fig=plt.figure(figsize=(9,5))ax=fig.subplots(1,1)#创建Axes对象ax.set_title('按天统计商品浏览量')df_f.plot(ax=ax,color='b')plt.subplots_adjust(top=0.95,bottom=0.15)plt.show()如图,6月到9月按天统计商品浏览量整体呈现上升。如图9月14日至9月23日是一个商品浏览量小高峰,10月15日到10月23日商品浏览量达到一个峰值,11月4日前后、11月14-21日期间分别有一个高峰期,其余时间支付金额呈现回归趋势。2.2

基于广告费分析(直通车消耗+淘客佣金)下面通过折线图来看一下直通车消耗与下单金额之间的相关性,用散点图看下淘客佣金与下单金额之间的相关性。2.2.1直通车消耗与支付金额关系为了更清晰地对比直通车消耗与支付金额这两组数据的变化和趋势,我们使用双y轴折线图,其中主y轴用来绘制直通车消耗数据,次y轴用来绘制支付金额数据。importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','支付金额','直通车消耗']]df1['统计日期']=pd.to_datetime(df1['统计日期'])df1=df1.set_index('统计日期',drop=True)#按月统计金额df_y=df1.resample('M').sum().to_period('M')y1=pd.DataFrame(df_y['直通车消耗'])y2=pd.DataFrame(df_y['支付金额'])#图表字体为黑体,字号为11plt.rc('font',family='SimHei',size=10)#绘制子图fig=plt.figure(figsize=(9,5))ax1=fig.add_subplot(111)#创建Axes对象plt.title('直通车消耗与支付金额关系折线图')#分别设置图表标题#图表x轴标题x=[9,10,11]#plt.xticks,把坐标轴变成想要的样子plt.xticks(x,['9月','10月','11月'])ax1.plot(x,y1,color='orangered',linewidth=2,linestyle='-',marker='o',mfc='w',label='直通车消耗')plt.legend(loc='upperleft')ax2=ax1.twinx()#添加一条y轴坐标轴ax2.plot(x,y2,color='b',linewidth=2,linestyle='-',marker='o',mfc='w',label='支付金额')#调整图表距上部和底部的空白plt.subplots_adjust(right=0.85)plt.legend(loc='uppercenter')plt.show()通过折线图可以发现,6月至9月之间,直通车消耗和支付金额两组数据的变化和趋势大致呈现相同,直通车消耗呈现增加趋势,就是直通车花费的费用越来越多,销售收入(支付金额)也呈现上涨趋势。9月至11月之间,从整体的趋势来看,直通车消耗呈现下降趋势,就是直通车花费的费用越来越少,并且从10越开始下降的更快。支付金额从9月到10月呈现下降,10月到11月呈现快速增加。从规律性来看从9月到10月直通车消耗和支付金额变化趋势呈现一致,10月以后店铺的支付金额呈现一段快速上升的趋势。

对比折线图,散点图更加直观,因为散点图去除了时间维度的影响,只关注淘客佣金和支付金额两组数据间的关系。在绘制散点图之前,我们将淘客佣金设置为x,也就是自变量,将支付金额设置为y,也就是因变量。下面根据每个月淘客佣金和支付金额数据绘制散点图,x轴是自变量淘客佣金数据,y轴是因变量支付金额数据。importpandasaspdimportmatplotlib.pyplotaspltdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1=df1[['统计日期','淘客佣金','支付金额']]df1['统计日期']=pd.to_datetime(df1['统计日期'])df1=df1.set_index('统计日期',drop=True)#按月统计金额df_s=df1.resample('M').sum().to_period('M')#x为广告费,y为销售收入x=pd.DataFrame(df_s['淘客佣金'])y=pd.DataFrame(df_s['支付金额'])#图表字体为黑体,字号为11plt.rc('font',family='SimHei',size=11)plt.figure("淘客佣金与支付金额散点图")plt.scatter(x,y,color='r')#真实值散点图plt.xlabel('淘客佣金(元)')plt.ylabel('支付金额(元)')plt.subplots_adjust(left=0.15)#图表距画布右侧之间的空白plt.show()从数据点的分布情况可以发现,自变量x和因变量y基本有着相同的变化趋势,当淘客佣金增加后,支付金额总体呈现上升趋势。但当淘客佣金上升到1100元后,支付金额呈现略微下降趋势。三根据广告费预测销售业绩变动从前面可以看出广告费投入(直通车耗费和淘客佣金之和)和支付金额变化并不完全同步,但总体趋向基本呈现同向变动,这里主要考虑有时间滞后和市场反应较慢的原因。现在我们可以进一步建立他们之间的模型关系,明确他们之间的互动,并用之于预测。此次准备使用线性回归方法进行预测,并将预测结果绘制成图表,趋势变化和现实的关系也会变得更加清晰起来3.1建立广告费和支付资金之间的线性模型#根据广告费进行预测——建立线性模型importpandasaspdfromsklearnimportlinear_modelimportmatplotlib.pyplotaspltimportnumpyasnpdf1=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表1.csv',encoding="ANSI")df1['广告费']=df1['直通车消耗']+df1['淘客佣金']print(df1['广告费'])df1=df1[['统计日期','广告费','支付金额']]#数据处理df1['统计日期']=pd.to_datetime(df1['统计日期'])df1=df1.set_index('统计日期',drop=True)#按月统计金额df_g=df1.resample('M').sum().to_period('M')clf=linear_model.LinearRegression()#创建线性模型#x为广告费,y为销售收入x=pd.DataFrame(df_g['广告费'])y=pd.DataFrame(df_g['支付金额'])clf.fit(x,y)#拟合线性模型k=clf.coef_#获取回归系数b=ercept_#获取截距Print(k,b),输出结果为:[[5.69969594]][224062.7511935]3.2

评估模型的精准度通过计算预测值和真实值偏差,来估算模型的精准度。这里通过可视化表示:plt.rcParams['font.sans-serif']=['SimHei']#设置中文plt.title("广告效果")#设置标题plt.xlabel('广告费-元')plt.ylabel('支付金额-元')y1=k*x+bplt.scatter(x,y,color='r',marker="o")plt.plot(x,y1,linestyle='-',color='g',marker="*")plt.show()#展现可以看出这里的线性模型实际值均匀并集中分布在线的两侧,说明模型拟合度较好。3.3

利用模型进行预测如根据未来3个月计划投入的广告费,预测未来3个月的下单金额:x=np.array([1200,130000,1600])x=x.reshape(3,1)#数组重塑y_pred=clf.predict(x)print(y_pred)预测输出结果为:[[230902.38631854]

[965023.22307301]

[233182.26469356]]

当然,以上仅是简单的预测,让同学们掌握这种方法。实际上,纺织品类大部分受季节性影响的行业,建议用新一个周期一般3-4个月左右,比如春款的推广是从1月启动3-4月结束;夏款则是从4月启动6-7月结束;秋冬款是全年的重点一般从8月启动,11月达到峰值12月结束;所以建议预测结合行业启动周期来,不根据纯粹的时间来。任务四用户消费特征分析04任务描述买家是店铺运行重点关注的对象,如何提高买家的满意是店铺经营的追求。因此需要关注买家的行为,对买家的消费特征进行分析。本节将基于支付金额、买家所在地区等字段,进行买家地区分布分析。基于消费次数和买家实际支付金额,分析买家消费频率和消费区间分布,并分析店铺销售的主要贡献主力人群。基于RFM模型分析,探索店铺销售的主要支付买家,并分析出各类别买家数量,以便采取相应措施,进行客户价值升级和客户留存。任务目标1.熟悉支付金额与区域、买家消费频次的关系处理。2.熟悉RFM客户价值分析模型的构建和使用。一用户整体消费趋势分析1.1支付金额与省份之间的关系使用Pandas库中的read_csv()函数读取CSV文件,并将数据存储在DataFrame对象中。然后,我们提取地区和买家实际支付金额列,并将它们存储在列表中。接下来,我们使用Matplotlib库中的bar()函数绘制地区分布图,其中地区作为类别标签,买家实际支付金额作为每个类别的计数。最后,我们添加标题、x轴标签和y轴标签,并显示图形。importpandasaspdimportmatplotlib.pyplotasplt#读取CSV文件df=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表2.csv',encoding="ANSI")#提取地区列regions=df['地区'].tolist()#提取销售额列,并按销售额降序排序sales=df['买家实际支付金额'].tolist()sales.sort(reverse=True)#绘制地区分布图,使用地区作为类别标签,销售额作为每个类别的计数plt.plot(regions,sales)plt.xticks(rotation=90)plt.title('支付金额地区分布')plt.xlabel('地区')plt.ylabel('买家实际支付金额')plt.show()可以看出广东省、贵州省、陕西省、安徽省和湖南省是店铺商品主要买家所在地,特别是广东省是店铺客户的主要来源。因此在广告投放角度考虑,可以根据店铺客户的来源合理分配广告投入资金,客户多的地方广告投入多些;客源少的地方,广告投入可以相对较少。1.2

客户消费频次与消费金额分析运用groupby进行汇总计算,采用describe进行描述性统计分析。查看用户消费的频率和消费金额分布。df2=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表2.csv',encoding="ANSI")con_grouper=df2.groupby(by='网名').agg({'子订单编号':'count','购买数量':'sum','买家实际支付金额':'sum'})dstistics=con_grouper.describe().round(2)print(dstistics)输出结果为:

子订单编号

购买数量

买家实际支付金额count

4101.004101.004101.00mean

1.572.34375.64std

8.6719.652061.92min1.001.000.0025%

1.001.00259.0050%1.001.00280.0075%1.001.00309.00max466.001062.00110891.94买家平均购买数量为1.57,中位数是1,最大值是466,说明小部分用户消费频次略高。买家实际支付金额中位值只有280元,平均实际支付金额为375.64元,最大值为110891.94元,说明小部分用户消费金额较高,图像呈右偏分布。接下来,我们用散点图表示买方消费次数与买家实际支付金额的关系。plt.rcParams['font.sans-serif']=['KaiTi']plt.scatter(con_grouper['买家实际支付金额'],con_grouper['购买数量'],label='订单')plt.title('购买次数与买家实际支付金额的散点图')plt.xlabel('买家实际支付金额')plt.ylabel('购买次数')plt.legend()plt.show()由图可知,消费金额和消费次数并不呈线性关系。绝大多数买家在低价商品上购买比较多(包括薅羊毛用户),高价商品的购买次数可能只有一两三次。表明大多数用户在小金额范围进行多次小额付款。1.3买家消费贡献率分析绘制直方图,通过直方图的分布密度看付款金额的数据分布。plt.rcParams['font.sans-serif']=['KaiTi']plt.hist(con_grouper['买家实际支付金额'],bins=60,label='付款金额')plt.title('付款金额分布')plt.xlabel('付款金额')plt.ylabel('密度')plt.legend()plt.show()分析:付款金额分布图呈左偏分布,有极大值。实际表明大多数用户在小金额范围进行多次小额付款,前面的均值分布只有375.64元。

为了能更说明问题,我们特意计算用户累计消费金额占比分布。在计算累计消费金额前时,一定要按金额升序排序,因此要加上sort_values()升序排序,呈现出来的是曲线形态,便于观察。#新增一列累计金额,计算付款金额累加的df2=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表2.csv',encoding="ANSI")plt.rcParams['font.sans-serif']=['KaiTi']user_ts=df2.groupby(by='网名')['买家实际支付金额'].sum().sort_values().reset_index()user_ts['累计金额']=user_ts['买家实际支付金额'].cumsum()user_ts.round(2)#新增一列prop,计算贡献率amount_total=user_ts['累计金额'].max()#相当于user_ts['累计贡献率']=user_ts.apply(lambdax:x['累计金额']/amount_total,axis=1)user_ts['累计贡献率'].plot()plt.show()分析:可以看出前面65%左右的贡献率是约由3600名买家创造。后35%的贡献率完全由400名左右买家创造。虽然与二八定律并不完全相符,但也表明一小部分买家对店铺销售业绩做出了比较大的贡献网名买家实际支付金额累计金额累计贡献率0冷*珍0.000.000.0000001周小敏0.000.000.0000002周*美0.000.000.0000003wdvbqwajxfhhkr0.000.000.0000004珊**0.000.000.000000...............4096w**12289.421340356.440.8700814097c**12663.961353020.400.8783024098l**20385.661373406.060.8915354099慧妈妈56197.601429603.660.9280154100t**110891.941540495.601.000000二

用户价值度RFM模型内涵解析2.1

RFM模型内涵解析RFM模型是客户价值领域的经典模型,是衡量客户价值和客户创造利益能力的重要工具和手段。其中RFM的含义如下。1)R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。2)F(Frequency):值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。3)M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。

2.2

RFM模型客户价值分类

表1RFM客户分类价值表R F M 客户类型 运营策略高 高 高 高价值客户 优质服务,重点保持高 低 高 重点发展客户 着重提升消费频次。争取发展成为重要价值客户低 高 高 重点保持客户 加强客户联系,提醒客户消费低 低 高 重点挽留客户 加大促销力度高 高 低 通常价值客户 提升客单价高 低 低 通常发展客户 提升新用户消费频次低 高 低 通常保持客户 提醒消费低 低 低 潜在客户 流夫风险大,使用促销、优惠方式召回三用户价值度RFM模型构建及评析3.1用户价值度RFM模型构建RFM某型构建后,后续就能够对不一样的客户群体,有针对性地采起相应运营策略进行推广、管理,进而提高客户价值和销售业绩。importpandasaspdimportnumpyasnpfromdatetimeimportdateimportdatetimefromtimeimportgmtime,strftimefromdateutilimportparser#假设我们有一个名为'customer_data.csv'的数据文件,其中包含以下列:'customer_id','purchase_date','amount'df2=pd.read_csv(r'f:\数据分析技术教材\数据集\2023版数据分析技术表2.csv',encoding="ANSI")df2['订单创建时间']=pd.to_datetime(df2.订单创建时间)df2['订单创建日期']=df2['订单创建时间'].dt.date#从日期距离中获取天数df2['Jdate']=pd.to_datetime(datetime.datetime.now().date())-df2['订单创建时间']df2['JDay']=df2['Jdate'].dt.daysprint(df2['JDay'])#统计每一个客户距离指定日期有多久没有消费了,即找出最小的最近消费距离grouped_df_d=df2.groupby(by=['网名'],as_index=False)['JDay'].agg('min')ram_data1=grouped_df_d.reset_index().rename(columns={'value1':'R'})print(ram_data1)#计算消费频率grouped_df_f=df2.groupby('网名',as_index=False)['子订单编号'].agg('count')ram_data2=grouped_df_f.reset_index().rename(columns={'value2':'F'})print(ram_data2)#计算消费金额grouped_df_M=df2.groupby('网名')['买家实际支付金额'].agg('sum')ram_data3=grouped_df_M.reset_index().rename(columns={'value3':'M'})print(ram_data3)ram_data=ram_data1.merge(ram_data2).merge(ram_data3)print(ram_data)#构建新Dateframe,并更改列名#rfm_data.columns=['网名','R','F','M']#L表示忠诚度#R、F、M值构造ram_data['JDay']=ram_data['JDay']-ram_data['JDay'].mean

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论