版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python数据分析基础与应用模块模块7数据分析可视化展示【应用与实战】【任务7-1】药品销量数据可视化展示与分析【任务描述】Excel文件“药品销售数据.xlsx”共有6578条药店的药品销售数据,该Excel文件共有7列有效数据,分别为:购买时间、社保卡号、商品编码、商品名称、销售数量、应收金额、实收金额,通过分析药品销售数据,看看医院那些药物购买者较多,那些天购药者较多等等。本任务主要实现以下的数据可视化展示与分析:(1)绘制折线图分析每天的消费金额。(2)绘制折线图分析每月的消费趋势。(3)分析销量排前十种药品的销售情况。(4)分析一周中每天的数量和金额。(5)使用pyecharts绘制一周内各天的销量柱形图和销量排前十位的柱形图。数据导入与数据审阅详见模块4的【任务4-1】,数据预处理详见模块5的【任务5-1】,数据的统计与分析详见模块6的【任务6-1】。【任务实现】在JupyterNotebook开发环境中创建t7-01.ipynb,然后在单元格中编写代码与输出对应的结果。1.绘制折线图分析每天的消费金额分析每天的消费金额,并用可视化的方式呈现分析结果。(1)使用Pyplot模块的plot()函数绘制折线图代码如下:plt.plot(salesDf1['销售时间'],salesDf1['实收金额'])plt.title("按天消费金额图")plt.xlabel("日期")plt.ylabel("实收金额")plt.xticks(rotation=30)plt.show()输出结果如图7-1-1所示。图7-1-1使用Pyplot模块的plot()函数绘制的折线图从图1W中可以看出,每天的实收金额差异较大,除了个别天出现比较大的实收金额,大部分天的实收金额维持在500元以内。(2)使用DataFrame的plot()方法绘制折线图先把部分数据复制到另一个数据集中,防止对原数据集造成影响。代码如下:groupDf1=salesDf1[['销售时间','实收金额']].copy()groupDf1=groupDf1.set_index('销售时间')groupDf1.head()输出结果:然后绘制每天的实收金额折线图。代码如下:ax=groupDf1.plot(grid=True,figsize=(10,4))ax.set_ylabel('实收金额')plt.xticks(rotation=30)plt.show()输出结果如图7-1-2所示。图7-1-2使用DataFrame的plot()方法绘制的折线图2.绘制折线图分析每月的消费趋势(1)剔除销售数据不完整的月份观察药品销售数据集可以看出,7月的销售数据不完整,所以要去掉7月的销售数据。代码如下:salesDf1['月份']=salesDf1['销售时间'].dt.monthmonthDf=salesDf1.groupby('月份').agg('sum')monthDf=monthDf.reset_index(drop=False)monthDf1=monthDf.drop(axis=1,index=6)data_mounth1输出结果:(2)使用DataFrame的plot()方法绘制1~6月销售数量、应收金额、实收金额折线图代码如下:ax1=monthDf1.plot(x='月份',secondary_y=['销售数量'],x_compat=True,grid=True,figsize=(10,4),marker='o',linewidth=2)plt.title('1~6月药品销售趋势')ax1.right_ax.set_ylabel('销售数量')ax1.set_ylabel(['应收金额','实收金额'])输出结果如图7-1-3所示。1~6月药品销售趋势1~6月药品销售趋势图7-1-3使用DataFrame的plot()方法绘制的1~6月销售数量、应收金额、实收金额折线图(3)使用Pyplot模块的plot()函数绘制每个月消费金额折线图代码如下:groupDf=salesDf1groupDf.index=groupDf['销售时间']monthDf2=groupDf.groupby(groupDf.index.month).sum()plt.plot(monthDf2['实收金额'])plt.title("按月消费金额图")plt.xlabel("月份")plt.ylabel("实收金额")plt.show()输出结果如图7-1-4所示。图7-1-4使用Pyplot模块的plot()函数绘制的每个月消费金额折线图从图4W中可以看出,7月消费金额最少,这是因为7月的数据不完整,所以不具有参考价值;1月、4月、5月和6月的消费金额差异不大;1~2月的消费金额迅速降低。3.分析销量排前十位的药品的销售情况(1)聚合统计各种药品的销量将“商品名称”和“销售数量”这两列数据聚合为Series形式,方便后面进行统计,并将其按降序排列。代码如下:medicine=groupDf[['商品名称','销售数量']]re_medicine=medicine.groupby('商品名称')[['销售数量']].sum()re_medicine=re_medicine.sort_values(by="销售数量",ascending=False)(2)截取销量最多的前十种药品截取销量排前十位的药品,并用条形图展示结果。代码如下:top_medicine=re_medicine.iloc[:10,:]top_medicine输出结果:(3)使用DataFrame的plot()方法绘制销售数量前十位药品柱形图代码如下:top_medicine.plot(kind='bar')plt.title("销售数量前十位的药品")plt.xlabel("药品名称")plt.ylabel("销售数量")plt.legend(loc=0)plt.show()输出结果如图7-1-5所示。图7-1-5使用DataFrame的plot()方法绘制的销售数量前十位药品柱形图(4)使用Pyplot模块的barh()方法绘制销售数量前十位药品条形图代码如下:plt.barh(top_medicine._stat_axis.values,top_medicine['销售数量'])plt.title("销售数量前十位的药品")plt.ylabel("药品名称")plt.xlabel("销售数量")plt.show()输出结果如图7-1-6所示。图7-1-6使用Pyplot模块的barh()方法绘制的销售数量前十位药品条形图4.分析一周中每天的销售数量和金额(1)提取星期数据代码如下:salesDf1['星期']=salesDf1['销售时间'].dt.dayofweek(2)对销售数量、应收金额、实收金额按一周中的7天分别求和data_week=salesDf1.groupby('星期').agg('sum')data_week.drop('月份',axis=1,inplace=True)data_week=data_week.reset_index(drop=False)data_week输出结果:(3)使用DataFrame的plot()方法绘制一周中7天的销售数量、应收金额、实收金额之和的折线图代码如下:ax1=data_week.plot('星期','实收金额',marker='o')data_week.plot('星期','应收金额',ax=ax1,marker='o')plt.grid(True)x=range(7)plt.xticks(x,['星期一','星期二','星期三','星期四','星期五','星期六','星期日'])plt.xlabel('')plt.ylabel(['应收金额','实收金额'])plt.show()输出结果如图7-1-7所示。图7-1-7一周中7天的销售数量、应收金额、实收金额之和的折线图5.使用pyecharts绘制一周内各天的药品销量柱形图和销量排前十位的药品柱形图(1)绘图数据预处理代码如下:df2=salesDf.copy()df2=df2.dropna(subset=['购药时间'])df2['社保卡号'].fillna('100000000',inplace=True)df2['销售数量']=df2['销售数量'].abs()df2['应收金额']=df2['应收金额'].abs()df2['实收金额']=df2['实收金额'].abs()df2['销售数量']=df2['销售数量'].astype(int)df2[['购药日期','星期']]=df2['购药时间'].str.split('',2,expand=True)df2.loc[:,'购药日期']=pd.to_datetime(df2.loc[:,'购药日期'],format='%Y-%m-%d',errors='coerce')df2=df2.dropna(subset=['购药日期'],how='any')df2=df2[['购药日期','星期','社保卡号','商品编码','商品名称','销售数量','应收金额','实收金额']]df2.head()输出结果:(2)绘制一周内各天的药品销量柱形图代码如下:color_js="""newecharts.graphic.LinearGradient(0,1,0,0,[{offset:0,color:'#FFFFFF'},{offset:1,color:'#ed1941'}],false)"""g1=df2.groupby('星期').sum()x_data=list(g1.index)y_data=g1['销售数量'].values.tolist()b1=(Bar().add_xaxis(x_data).add_yaxis('',y_data,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js))).set_global_opts(title_opts=opts.TitleOpts(title='一周内各天的药品销量情况',pos_top='2%',pos_left='center'),legend_opts=opts.LegendOpts(is_show=False),xaxis_opts=opts.AxisOpts(name="星期",axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="销售数量",name_location='middle',name_gap=50,name_textstyle_opts=opts.TextStyleOpts(font_size=16))))b1.render_notebook()输出结果如图7-1-8所示。图7-1-8一周内各天的药品销量柱形图(3)绘制销量排前十位的药品柱形图代码如下:color_js="""newecharts.graphic.LinearGradient(0,1,0,0,[{offset:0,color:'#FFFFFF'},{offset:1,color:'#08519c'}],false)"""g2=df2.groupby('商品名称').sum().sort_values(by='销售数量',ascending=False)x_data=list(g2.index)[:10]y_data=g2['销售数量'].values.tolist()[:10]b2=(Bar().add_xaxis(x_data).add_yaxis('',y_data,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js))).set_global_opts(title_opts=opts.TitleOpts(title='销量排前十位的药品',pos_top='2%',pos_left='center'),legend_opts=opts.LegendOpts(is_show=False),xaxis_opts=opts.AxisOpts(name="药品名称",axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="销售数量",name_location='middle',name_gap=50,name_textstyle_opts=opts.TextStyleOpts(font_size=16))))b2.render_notebook()输出结果如图7-1-9所示。图7-1-9销量排前十位的药品柱形图6.分析结论①6个月内总消费次数为5360,月均消费次数为893,平均每天消费次数为30。按10小时工作时间算,平均每小时消费次数为3,即平均每小时成交量仅为3,成交量少,可以考虑开展关联消费等促销活动,增加单位时间成交量。②6个月内月均消费金额为50771.71元,客单价为56.8元。③消费趋势为:2-4月销量上升,4月销量出现峰值,1~2月、4~5月销量下降。重点分析4月销量高的原因,以及4月后销量下降的影响因素,如季节性感冒、流感等。④6个月内共销售药品78种,其中销量超过100的药品(属于热销药品)有39种,正好达50%。【任务7-2】网上商城用户消费行为可视化展示与分析【任务描述】文件df_short.csv中共有55148行网上商城的用户消费数据,该文件中共有7个有效列,其含义说明详见模块4的【任务4-2】。本任务主要实现以下的数据可视化分析:(1)绘制图形统计分析用户的浏览与消费情况。(2)各类用户行为的相关分析。(3)消费商品类型分析。数据导入与数据审阅详见模块4的【任务4-2】,数据预处理详见模块5的【任务5-2】,数据的统计与分析详见模块6的【任务6-2】。【任务实现】在JupyterNotebook开发环境中创建t7-02.ipynb,然后在单元格中编写代码与输出对应的结果。1.绘制图形统计、分析用户的浏览与消费情况(1)计算消费占比与绘制柱形图代码如下:tbc_box=total_buy_count.reset_index()fig,ax=plt.subplots(figsize=[1.5,4])ax.set_yscale("log")sns.countplot(x=tbc_box['total'],data=tbc_box,palette='Set1')forpinax.patches:ax.annotate('{:.2f}%'.format(100*p.get_height()/len(tbc_box['total'])),(p.get_x(),p.get_height()))plt.title('用户消费占比')plt.show()输出结果如图7-2-1所示。用户消费占比用户消费占比图7-2-1用户消费占比柱形图(2)平台活跃状况分类分析与图形绘制代码如下:customer=data_short['customer_id'].value_counts()customer_1=customer[customer.values==1].count()customer_2=customer[customer.values==2].count()customer_3=customer[customer.values>=3].count()customer_count=[customer_1,customer_2,customer_3]frequent_labels=['1次','2次','3次及以上']plt.figure(figsize=(15,8),dpi=80)plt.subplot(1,2,1)plt.bar(frequent_labels,customer_count,width=0.5)forx,yinzip(frequent_labels,customer_count):plt.text(x,y,'{0}'.format(y),ha='center',va='bottom')plt.xlabel('频次')plt.ylabel('人数')plt.title('活跃频次分布')plt.subplot(1,2,2)plt.pie(customer_count,labels=frequent_labels,autopct='%.2f%%')plt.title('活跃频次分布')plt.show()输出结果如图7-2-2所示。图7-2-2反映平台活跃状况的柱形图与饼图(3)用户消费次数统计、分析①根据customer_id对用户的消费次数进行统计。代码如下:df=data_short[data_short['type']=='购买'].groupby(data_short['customer_id'])['customer_id'].count()finish=pd.DataFrame(df)finish.columns=['购买次数']frequency_content=['1次','2次','3次及以上']frequency_number=[0,0,0]foridinfinish.index:iffinish.loc[id,'购买次数']==1:frequency_number[0]=frequency_number[0]+1eliffinish.loc[id,'购买次数']==2:frequency_number[1]=frequency_number[1]+1else:frequency_number[2]=frequency_number[2]+1frequency_number输出结果:[921,5,0]②绘制用户购买次数的柱形图与饼图。代码如下:fig=plt.figure('用户购买次数分布图',dpi=120)ax=fig.add_subplot(121)ax.set_title('用户购买次数柱形图')plt.bar(frequency_content,frequency_number,width=0.4)plt.xlabel("购买次数")plt.ylabel("数量")forx,yinzip(frequency_content,frequency_number):plt.text(x,y,'{0}'.format(y),ha='center',va='bottom')ax=fig.add_subplot(122)ax.set_title('用户购买次数饼图')ax.axis('equal')ax.pie(frequency_number[0:2],labels=frequency_content[0:2],autopct='%1.2f%%')输出结果如图7-2-3所示。图7-2-3用户购买次数的柱形图与饼图(4)多次交易群体分析①筛选有多次购买行为的群体。代码如下:shopping_repeated=finish[finish['购买次数']>1]print(shopping_repeated)df=data_short[['customer_id','product_id','type','date']]shopping_info=pd.merge(shopping_repeated,df,left_on='customer_id',right_on='customer_id',how='left')shopping_info②多次交易群体同类型店铺交易分析。代码如下:df=shopping_info.groupby(['customer_id','shop_category'])['customer_id'].count()finish=pd.DataFrame(df)finish.columns=['同类型店铺交易次数']count_customer_norepeated=finish[finish['同类型店铺交易次数']==1]['同类型店铺交易次数'].count()count_sameshop=finish[finish['同类型店铺交易次数']>1]['同类型店铺交易次数'].count()sameshop_number=[]sameshop_number.append(count_customer_norepeated)sameshop_number.append(count_sameshop)print(sameshop_number)finish输出结果:[3,5]同类型店铺交易次数③绘制多次交易群体同类型店铺交易饼图。代码如下:list_sameshop=['1次','2次及以上']fig,ax=plt.subplots(1,1)ax.set_title('多次交易群体同类型店铺交易饼图')ax.pie(sameshop_number,labels=list_sameshop,autopct='%1.2f%%')输出结果如图7-2-4所示。图7-2-4多次交易群体同类型店铺交易饼图④多次交易群体同类型商品交易分析。代码如下:df=shopping_info.groupby(['customer_id','category'])['customer_id'].count()finish=pd.DataFrame(df)finish.columns=['同类型商品交易次数']count_customer_norepeated=finish[finish['同类型商品交易次数']==1]['同类型商品交易次数'].count()count_sameshop=finish[finish['同类型商品交易次数']>1]['同类型商品交易次数'].count()samecategory_number=[]samecategory_number.append(count_customer_norepeated)samecategory_number.append(count_sameshop)print(samecategory_number)finish输出结果:[6,4]同类型商品交易次数⑤绘制多次交易群体同类型商品交易饼图代码如下:list_samecategory=['1次','2次及以上']fig,ax=plt.subplots(1,1)ax.set_title('多次交易群体同类型商品交易饼图')ax.pie(samecategory_number,labels=list_samecategory,autopct='%1.2f%%')输出结果如图7-2-5所示。图7-2-5多次交易群体同类型商品交易饼图(5)用户消费时间分析①按照上、下半月将交易时间进行分区。代码如下:data_short=data1.copy()deftime_divide(time_buy):iftime_buy>=datetime(2022,2,1)andtime_buy<=datetime(2022,2,15):time_result='2月上半月'returntime_resulteliftime_buy>=datetime(2022,2,16)andtime_buy<=datetime(2022,2,28):time_result='2月下半月'returntime_resulteliftime_buy>=datetime(2022,3,1)andtime_buy<=datetime(2022,3,15):time_result='3月上半月'returntime_resulteliftime_buy>=datetime(2022,3,16)andtime_buy<=datetime(2022,3,31):time_result='3月下半月'returntime_resulteliftime_buy>=datetime(2022,4,1)andtime_buy<=datetime(2022,4,15):time_result='4月上半月'returntime_resultdata_short['时间区间']=data_short.apply(lambdax:time_divide(x.date),axis=1)data_short.head()输出结果:②分区段统计购买数量。代码如下:df=data_short.groupby(['时间区间'])['customer_id'].count()finish=pd.DataFrame(df)finish.columns=['分区段购买量']finish.head()输出结果:③绘制分区段购买量柱形图。代码如下:list_time=finish.indexlist_amount=finish['分区段购买量']fig,ax=plt.subplots(1,1)ax.bar(list_time,list_amount,width=0.4)ax.set_title('分区段购买量柱形图')ax.set_xlabel("购买时间段")ax.set_ylabel("购买数量")forx,yinzip(list_time,list_amount):plt.text(x,y,'{0}'.format(y),ha='center',va='bottom')输出结果如图7-2-6所示。图7-2-6分区段购买量柱形图根据图6W可以得出以下结论:2022年2月上半月交易量最大,这说明除夕前用户交易需求增加,春节期间交易量明显缩减,因此广告投放和资源投放更应该安排在除夕前;2月、3月上半月比下半月用户需求大,说明用户更愿意在上半月消费。(6)分析4月平台活跃情况与用户交易情况代码如下:df_short=data1.copy()action_map={1:'浏览',2:'评论',3:'购买',4:'收藏',5:'加入购物车'}df_short['type']=df_short['type'].map(action_map)data_short4=df_short[df_short['date'].dt.month.astype('int')==4]daily_active_user=data_short4.groupby('date')['customer_id'].nunique()daily_buy_user=data_short4[data_short4['type']=='购买'].groupby('date')['customer_id'].nunique()proportion_of_buyer=daily_buy_user/daily_active_userprint('4月日消费人数占比:',proportion_of_buyer)daily_buy_count=data_short4[data_short4['type']=='购买'].groupby('date')['type'].count()consumption_per_buyer=daily_buy_count/daily_buy_userprint('4月消费用户日人均消费次数:',consumption_per_buyer)(7)统计、分析4月的每日浏览量代码如下:pv_daily=data_short4[data_short4['type']=='浏览'].groupby('date')['customer_id'].count()fig,ax=plt.subplots(figsize=[10,6])sns.pointplot(x=pv_daily.index,y=pv_daily.values,markers='D',linestyles='--',color='dodgerblue')plt.title('4月每日浏览量')plt.xticks(rotation=45)plt.show()输出结果如图7-2-7所示。4月每日浏览量图7-2-74月每日浏览量折线图(8)统计、分析4月的每日访客数代码如下:uv_daily=data_short4.groupby('date')['customer_id'].nunique()fig,ax=plt.subplots(figsize=[10,6])sns.pointplot(x=uv_daily.index,y=uv_daily.values,markers='H',linestyles='--',color='m')plt.title('4月每日访客数')plt.xticks(rotation=45)plt.show()输出结果如图7-2-8所示。4月每日访客数图7-2-84月每日访客数折线图比较图7W与图8W可以看出:每日访客数和每日浏览量的波动趋势基本一致。(9)统计各月与一周内各天的交易行为发生次数与绘制饼图代码如下:df_short['month']=df_short['date'].dt.month.astype('int')df_short['weekday']=df_short['date'].dt.weekday.astype('int')+1plt.figure(figsize=(10,10))plt.subplot(1,2,1)data_short['month'].value_counts().plot(kind='pie',autopct='%.2f%%')plt.subplot(1,2,2)data_short['weekday'].value_counts().plot(kind='pie',autopct='%.2f%%')plt.show()输出结果如图7-2-9所示。(a)各月交易行为发生次数饼图(b)一周内各类交易行为发生次数饼图图7-2-9各月与一周内各天的交易行为发生次数饼图(10)分析一周内各天的订单量分布情况代码如下:week=df_short['weekday'].value_counts().sort_index()week.index=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']plt.figure(figsize=(12,8))sns.barplot(x=week.index,y=week.values).set(title='一周内各天的订单量分布')plt.show()输出结果如图7-2-10所示。图7-2-10一周内各天的订单量分布柱形图从图7-2-10W可以看出:星期一、星期六、星期日订单量较低,星期二至星期五订单量较高。(11)平台活跃度的时间趋势分析代码如下:day=df_short.date.value_counts().sort_index()day.columns=['date']plt.figure(figsize=(10,8))sns.lineplot(data=day)plt.xlabel('交易时间')plt.ylabel('活跃人数')plt.title('2022年平台活跃人数分布')plt.xticks(rotation=45)输出结果如图7-2-11所示。图7-2-112022年平台活跃人数分布折线图(12)第1季度平台活跃度的时间趋势分析代码如下:customer_day=df_short.date[df_short.date<'2022-04-01'].value_counts().sort_index()plt.figure(figsize=(8,6),dpi=80)plt.plot(customer_day.index,customer_day.values)plt.xlabel('交易时间')plt.ylabel('活跃人数')plt.title('2022年第1季度平台活跃人数分布')plt.xticks(rotation=45)plt.show()输出结果如图7-2-12所示。图7-2-122022年第1季度平台活跃人数分布折线图从图7-2-12W可以看出:2月的平台活跃人数下滑后回升,波动较大;在2月下旬之后,平台活跃人数较为稳定。2.用户各行为的相关分析电商平台的用户行为主要有5种:浏览商品、收藏商品、加入购物车、购买商品和评论。针对用户各行为进行分析,探究商品的浏览、收藏、加入购物车、购买和评论的变化趋势如何,为什么会有这种趋势?为什么有些类别的商品会被用户购买甚至复购?这些商品有何特征?用户浏览、收藏、购买商品以及加入购物车和评论主要发生在一天中的什么时候?为什么在这个时间段?(1)统计用户各行为数量与绘制柱形图①绘制用户各行为类型的数量柱形图。代码如下:df=df_short['type'].value_counts()plt.figure(figsize=(10,6))sns.barplot(x=df.index,y=df.values).set(title='用户各行为类型的数量')plt.show()输出结果如图7-2-13所示。用户各行为类型的数量图7-2-13用户各行为类型数量柱形图②将用户行为数字转换为字符串。代码如下:action_map={1:'浏览',2:'评论',3:'购买',4:'收藏',5:'加入购物车'}df_short['type']=df_short['type'].map(action_map)③统计用户各行为类型的数量。代码如下:df1=df_short.groupby('type')['customer_id'].count().reset_index()df1.columns=['type','num']df1=df1.sort_values(by='num',ascending=False)df1输出结果:④绘制用户各行为类型的数量降序排列后的柱形图。代码如下:sns.barplot(x=df1.type,y=df1.num).set(title='用户各行为类型的数量')plt.show()输出结果如图7-2-14所示。用户各行为类型的数量图7-2-14用户各行为类型的数量降序排列后的柱形图⑤绘制带数量标签的用户各行为统计数量柱形图。代码如下:list_type=df1.indexlist_type_amount=df1['数量']fig,ax=plt.subplots(1,1)ax.bar(list_type,list_type_amount,width=0.4)ax.set_title('用户各行为统计数量柱形图')ax.set_ylabel("数量")ax.set_xlabel("用户各行为类型")forx,yinzip(list_type,list_type_amount):plt.text(x,y,'{0}'.format(y),ha='center',va='bottom')输出结果如图7-2-15所示。用户各行为统计数量柱形图用户各行为类型图7-2-15带数量标签的用户各行为统计数量柱形图从图7-2-15W可以看出:从总体上看,用户的浏览行为的统计数量是最多的。(2)透视分析各类用户行为数据代码如下:df_short.sort_values(by='date',ascending=True,inplace=True)df_short.describe(datetime_is_numeric=True)short_detail=pd.pivot_table(columns='type',index='date',data=df_short,values='customer_id',aggfunc=np.size)输出结果:(3)分析用户各行为类型的变化趋势代码如下:plt.figure(figsize=(15,8))sns.lineplot(data=short_detail)plt.show()输出结果如图7-2-16所示。图7-2-16用户各行为类型的变化趋势折线图(4)按用户行为分类提取数据代码如下:type1=df_short[df_short['type']=='浏览']type2=df_short[df_short['type']=='评论']type3=df_short[df_short['type']=='购买']type4=df_short[df_short['type']=='收藏']type5=df_short[df_short['type']=='加入购物车'](5)统计、分析浏览数量、购买数量、收藏数量与加入购物数量排前几位的商品类型代码如下:G=gridspec.GridSpec(3,2)plt.subplot(G[0,0])type1['category'].value_counts().sort_values(ascending=False)[:5].plot(kind='barh',figsize=(15,10),color='b')plt.ylabel('类型',size=15)plt.xlabel('数量',size=15)plt.title('浏览数量排前5位的商品类型',size=18)plt.subplot(G[0,1])type3['category'].value_counts().sort_values(ascending=False)[:5].plot(kind='barh',figsize=(15,10),color=['b','g','r','m','y'])plt.ylabel('类型',size=15)plt.xlabel('数量',size=15)plt.title('购买数量排前5位的商品类型',size=18)plt.subplot(G[1,0])type4['category'].value_counts().sort_values(ascending=False)[:5].plot(kind='barh',figsize=(15,10),color=['g'])plt.ylabel('类型',size=15)plt.xlabel('数量',size=15)plt.title('收藏数量排前5位的商品类型',size=18)plt.subplot(G[1,1])type5['category'].value_counts().sort_values(ascending=False)[:3].plot(kind='barh',figsize=(15,10),color=['m'])plt.ylabel('类型',size=15)plt.xlabel('数量',size=15)plt.title('加入购物车数量排前3位的商品类型',size=18)plt.subplots_adjust(wspace=0.3,hspace=0.5)plt.show()输出结果如图7-2-17所示。图7-2-17用户各行为类型排前几位的商品类型条形图(6)汇聚每个商品类型的浏览数量、收藏数量、加入购物车数量与购买数量数据代码如下:browseData=pd.DataFrame(type1['category'].value_counts().sort_index())followData=pd.DataFrame(type4['category'].value_counts().sort_index())CartData=pd.DataFrame(type5['category'].value_counts().sort_index())buyData=pd.DataFrame(type3['category'].value_counts().sort_index())behaviorData=pd.merge(browseData,followData,left_index=True,right_index=True,how='outer')behaviorData.columns=['浏览数量','收藏数量']behaviorData=pd.merge(behaviorData,CartData,left_index=True,right_index=True,how='outer')behaviorData.columns=['浏览数量','收藏数量','加入购物车数量']behaviorData=pd.merge(behaviorData,buyData,left_index=True,right_index=True,how='outer')behaviorData.columns=['浏览数量','收藏数量','加入购物车数量','购买数量']behaviorData.fillna(0,inplace=True)behaviorData.head()输出结果:(7)浏览数量、加入购物车数量、收藏数量与购买数量之间的相关分析代码如下:behaviorData.corr()输出结果:从上述输出结果可以看出:加入购物车数量与购买数量的相关系数为0.956863,这表示它们高度相关;浏览数量与加入购物车数量的相关系数为0.948181、浏览数量与购买数量的相关系数为0.943392,这表示它们高度相关。(8)绘制浏览数量、加入购物车数量、收藏数量与购买数量相关关系的热力图代码如下:plt.figure(figsize=(5,5),dpi=100)sns.heatmap(behaviorData.corr(),cmap='coolwarm')plt.show()输出结果如图7-2-18所示。图7-2-18浏览数量、加入购物车数量、收藏数量与购买数量相关关系的热力图(9)分析用户行为的时间变化趋势代码如下:plt.subplot(3,2,1)type1.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='b')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('用户浏览数量趋势',size=12)plt.subplot(3,2,2)type4.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='g')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('用户收藏数量趋势',size=12)plt.subplot(3,2,3)type5.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='r')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('用户加入购物车数量趋势',size=12)plt.subplot(3,2,4)type3.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='y')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('用户购买数量趋势',size=12)plt.subplot(3,2,5)type2.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='g')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('用户评论数量趋势',size=12)plt.subplot(3,2,6)data1.groupby('date')['customer_id'].count().plot(kind='line',figsize=(15,10),c='m')plt.xlabel('日期',size=12)plt.ylabel('数量',size=12)plt.title('累计数量趋势',size=12)plt.subplots_adjust(hspace=0.8)plt.show()输出结果如图7-2-19所示。图7-2-19用户行为的时间变化趋势折线图(10)分析各类用户行为的占比代码如下:type_dis=df_short['type'].value_counts().reset_index()type_dis['rate']=round((type_dis['type']/type_dis['type'].sum()),3)type_dis=type_dis.rename(columns={'index':'用户行为类型','type':'累计数量','rate':'占比'})type_dis.style.bar(color='red',subset=['占比'])输出结果:3.消费商品类型分析(1)提取购买数量排前5位的商品类型代码如下:category5=data_short['category'].value_counts().head()category5输出结果:(2)绘制购买数量排前5位的商品类型饼图代码如下:plt.figure(figsize=(10,8))plt.pie(category5,labels=category5.index)plt.show()输出结果如图7-2-20所示。图7-2-20购买数量排前5位的商品类型饼图(3)绘制购买数量排前5位的商品类型条形图代码如下:category=data_short.category.value_counts().head(5)plt.figure(figsize=(10,6))sns.barplot(y=category.index,x=category.values).set(title='购买数量排前5位的商品类型')plt.show()输出结果如图7-2-21所示。图7-2-21购买数量排前5位的商品类型条形图从图21W可以看出:手机和外套的购买数量较多。(4)绘制购买数量排前5位的商品类型柱形图代码如下:plt.figure(figsize=(8,6),dpi=80)category=data_short['category'].value_counts().head()plt.bar(x=category.index,height=category.values,width=0.5)forx,yinzip(category.index,category.values):plt.text(x,y,'{0}'.format(y),ha='center',va='bottom')plt.xlabel('商品类型')plt.ylabel('购买数量')plt.title('购买数量排前5位的商品类型')plt.xticks(rotation=45)plt.show()输出结果如图7-2-22所示。图7-2-22购买数量排前5位的商品类型柱形图从图22W可以看出:购买数量排在前5位的商品类型分别是Phone(手机)、Coat(外套)、Tea(茶叶)、Notebook(笔记本电脑)、Tablet(平板电脑),其中手机的购买数量是第2名的将近2倍,说明手机是用户消费的主要产品。结合时间推测,可能冬季气温较低,这是购置外套的高峰时期;春节期间用户购置手机的消费欲望更强烈。(5)绘制购买数量排5位的商品类型的棒棒糖图代码如下:df=data_short['category'].value_counts().to_frame().head()x1=df.indexy1=df.categoryfig,ax=plt.subplots(figsize=(8,5),facecolor='white',dpi=80)ax.vlines(x=x1,ymin=0,ymax=y1,color='firebrick',alpha=0.7,linewidth=5)ax.scatter(x=x1,y=y1,s=75,color='firebrick',alpha=0.7)ax.set_title('最受欢迎的产品类型及销量',fontdict={'size':15})ax.set_ylabel('销量')ax.set_xticks(x1)ax.set_xticklabels(x1,rotation=60,fontdict={'horizontalalignment':'right','size':12})fora,binenumerate(y1):plt.text(a,b,'%.0f'%b,ha='center',va='bottom',fontsize=10)plt.show()输出结果如图7-2-23所示。图7-2-23购买数量排前5位的商品类型的棒棒糖图(6)分析购买数量排前5位的商品类型的受欢迎程度代码如下:pyplot=py.offline.iplottrace_basic=go.Bar(x=category5.index.tolist(),y=category5.values.tolist(),)layout=go.Layout(title='购买数量排前5位的商品类型的受欢迎程度')figure_basic=go.Figure(data=trace_basic,layout=layout)pyplot(figure_basic)输出结果如图7-2-24所示。购买数量排前5位的商品类型的受欢迎程度图7-2-24购买数量排前5位的商品类型的受欢迎程度柱形图从图7-2-24可以看出,用户购买数量较多的商品类型依次为:Phone(手机)、Coat(外套)、Tea(茶叶)、Notebook(笔记本电脑)、Tablet(平板电脑)。【任务7-6】使用pyecharts库分析订单数据与用户购物偏好【任务描述】(1)针对电商平台用户实际购买的订单数据(主要包含订单号、客户id、消费物品的类别、商品品牌、购物日期等)从时间维度分析订单数量及其变化。(2)针对用户偏好数据(主要包含用户id、用户偏好的细分类别、浏览购物平台时间,活跃度等)分析用户购物偏好,包括用户浏览最多、收藏最多的商品类型是什么?用户最喜欢在什么时间段浏览购物平台?【任务实现】在JupyterNotebook开发环境中创建t7-06.ipynb,然后在单元格中编写代码与输出对应的结果。扫描二维码,浏览使用pyecharts库分析订单数据与用户购物偏好的实现过程、示例代码及运行结果。在JupyterNotebook开发环境中创建t7-06.ipynb,然后在单元格中编写代码与输出对应的结果。1.导入模块代码如下:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfrompyecharts.chartsimportLinefrompyecharts.chartsimportPiefrompyecharts.chartsimportBarfrompyechartsimportoptionsasoptsplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False2.导入数据代码如下:data1=pd.read_excel(r'.\data\df_short.xlsx',parse_dates=['date'],dtype={'customer_id':str,'product_id':str})data2=pd.read_excel(r'.\data\JD_labels.xlsx',dtype={'customer_id':str})3.数据审阅(1)数据复制代码如下:df_short=data1.copy()JD_labels=data2.copy()(2)查看数据集的基本信息代码如下:df_()输出结果:代码如下:JD_()输出结果:(3)查看部分数据代码如下:df_short.head()输出结果:代码如下:JD_labels.head()4.数据预处理(1)删除未命名的列代码如下df_short=df_short.drop('Unnamed:0',axis=1)JD_labels=JD_labels.drop('Unnamed:0',axis=1)(2)查看数据有无缺失值原始数据大概率会有缺失值,需要进行一定的挑选、清洗,才能获取相对可用的数据。代码如下:df_short.isnull().sum()输出结果:df_short数据集没有缺失值,不需要进行数据清洗。代码如下:JD_labels.isnull().sum()输出结果:JD_labels数据集有缺失值,但是因为缺失值数量太多,且大部分列有关联性,所以暂不对其进行处理。经过清洗的相对可用数据并不一定能被直接运用于数据分析,需要将数据根据需求再整理一遍,这样才能获取实际可用的数据。5.从时间维度分析订单数量及其变化(1)分析每天总体订单数量的变化针对不同的日期,分析总体订单数量是怎样变化的。代码如下:date_order_nums=df_short.date.value_counts().sort_index()dates=np.array(date_order_nums.keys().astype(str))date_order_nums.head()date_order_numsLine=(Line().add_xaxis(dates).add_yaxis('订单数量',date_order_nums.values.tolist(),is_symbol_show=True,label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="每天的订单数量",subtitle='2022/02/01-2022/04/15'),tooltip_opts=opts.TooltipOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_="category",axislabel_opts=opts.LabelOpts(rotate=-15)),legend_opts=opts.LegendOpts(type_="plain",is_show=True,orient="vertical"),).render_notebook())date_order_numsLine输出结果如图7-6-1所示。图7-6-1每天订单数量变量的折线图(2)分析用户日访问量的变化绘制用户日访问量折线图的代码如下:line1_x=df_short['date'].sort_values().drop_duplicates()line1_x=line1_x.astype('str').tolist()line1_y=df_short.groupby(['date']).count()['type'].to_list()line1=Line()line_style={'normal':{'width':4,'shadowColor':'rgba(155,18,184,.3)','shadowBlur':5,'shadowOffsetY':10,'shadowOffsetX':10,'curve':0.5}}line1.add_xaxis(line1_x)line1.add_yaxis("",line1_y,is_smooth=True,linestyle_opts=line_style)line1.set_global_opts(datazoom_opts=opts.DataZoomOpts(range_start=17,range_end=57,orient='horizontal',type_='slider',is_zoom_lock=True,pos_bottom='2%'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),title_opts=opts.TitleOpts(title="用户日访问量变化趋势",pos_left='center',pos_top='1%'))line1.render_notebook()输出结果如图7-6-2所示。用户访问量变化趋势用户访问量变化趋势图7-6-2用户日访问量折线图(3)按月分析订单数的变化代码如下:df_short['datetime']=pd.to_datetime(df_short['date'])df_short['month']=df_short['datetime'].dt.monthdf_short['day']=df_short['datetime'].dt.dayby_month=data[['month','customer_id']].groupby(['month']).count().sort_values(by=['month'],ascending=True)by_month.reset_index(inplace=True)line=(Line().add_xaxis(['2月','3月','4月']).add_yaxis("订单数",by_month['customer_id']).set_global_opts(title_opts=opts.TitleOpts(title="每月订单数")).render_notebook())line输出结果如图7-6-3所示。每月订单数每月订单数图7-6-3每月订单数折线图(4)分析一周内每天订单数的变化代码如下:df_short['weekday']=df_short['datetime'].dt.weekday+1by_weekday=df_short[['weekday','customer_id']].groupby(['weekday']).count().sort_values(by=['weekday'],ascending=True)by_weekday.reset_index(inplace=True)by_weekday['weekday'].to_list()line=(Line().add_xaxis(['周一','周二','周三','周四','周五','周六','周日']).add_y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47381-2026飞机发动机短舱灭火器用开口和口盖
- 湖南省衡阳市常宁市第一中学2025-2026学年高一下学期5月期中考试历史试卷
- 广播电视播音员主持人资格考试(广播电视播音主持业务)试题及答案(定西2026年)
- 【安徽】2025年高考安徽卷物理高考真题文档版
- 2022年6月福建省地理高中学生学业基础会考(扫描版)参考答案
- 2025-2030年校园招聘大使行业跨境出海战略分析研究报告
- 2025-2030年时装衬布行业商业模式创新分析研究报告
- 自由场固定观测强震仪器企业数字化转型与智慧升级战略分析报告
- 塑解剂DBD行业商业模式创新分析报告
- 新形势下电子元器件及设备行业顺势崛起战略制定与实施分析报告
- 2026中国能源传媒集团有限公司社会招聘(6人)笔试备考试题及答案解析
- 2026年山东医学高等专科学校辅导员招聘笔试备考试题及答案解析
- 2026职业病防治法宣传周丨职业病防治知识培训
- 辽宁省县区事业单位转公务员考试真题
- 田地施肥施工方案(3篇)
- 法院执行程序培训课件
- 2025年铁路局旅游管理专业笔试及答案
- DB50∕T 1865-2025 自动驾驶接驳巴士运营技术规范
- 火龙罐疗法临床操作规范与应用指南
- 干熄焦安全事故案例
- 实验室电气安全培训课件
评论
0/150
提交评论