【夜曲编程Python数据分析】百题斩最后一题!!

快速浏览

  • 链接
  • 问题描述
  • 本人代码
  • 运行效果

链接

题目链接

问题描述

 请保持与课程内容一致,前面步骤不变,从可视化部分开始,使用for循环 将课程中的6个商品进行批量处理,画出折线图展示每个商品的转化率变化情况。

分析步骤:

  1. 读取文件"/Users/Lily/2019年下半年订单表.csv"、“/Users/Lily/2020年上半年订单表.csv”
  2. 将2张订单表纵向合并成一张「订单数据表」
  3. 将"下单时间"这列转化成时间类型的数据并设置成新的索引
  4. 将「订单数据表」按「商品ID」进行分组,「按月采样」计算出订单「数量」的和,同时还原索引index并将"下单时间"这列设置成“年-月”的字符串类型
  5. 读取「浏览数据表」“/Users/Lily/Exposure.csv”
  6. 横向关联「浏览数据表」和「订单数据表」并指定左边DataFrame的关联列为[“ID”,“Month”],右边DataFrame的关联列为[“商品ID”,“下单时间”]
  7. 计算出“购买转化率”,添加在合并数据的最后一列
  8. 将合并数据按照商品"ID"进行分类并计数
  9. 获取第8步得到数据的index
  10. 使用for循环依次遍历商品ID,设置变量取值范围:0-len(ID)
  11. 用折线图展示转化率变化情况

折线图要求:
(1)将字体设置为 Arial Unicode MS
(2)分割画布,布尔索引出商品的数据
(3)以"Month"为横坐标、“购买转化率”(保留2位小数)为纵坐标,画出折线图,并设置标记样式为"o",图例为"转化率"
(4)将x轴刻度设置为90度
(5)设置折线图纵坐标范围为0-0.3
(6)设置折线图的图例显示位置为默认的右上角
(7)将图表标题设置为商品ID
(8)可视化展示,调整子图布局,显示图像
效果图如图所示:
【夜曲编程Python数据分析】百题斩最后一题!!_第1张图片

本人代码

#相信自己试试吧~
import pandas as pd
import matplotlib.pyplot as plt
#读取文件转换为DataFrame数据对象
dataA = pd.read_csv("/Users/Lily/2020年上半年订单表.csv")
dataB = pd.read_csv("/Users/Lily/2019年下半年订单表.csv")
#设置字体
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"
#纵向合并为订单数据表,赋值给concatAB
concatAB = pd.concat([dataA, dataB], join="outer")
#转换为datetime数据对象并设置为新的索引
concatAB["下单时间"] = pd.to_datetime(concatAB["下单时间"])
concatAB = concatAB.set_index("下单时间")
#将订单数据表按照"商品ID"分组,按月采样计算出"数量"的和,还原索引index并将"下单时间"这一列设置为"年-月"的str类型
#分组聚合
concatAB = concatAB["数量"].groupby(concatAB["商品ID"]).resample("M").sum()
#还原index
concatAB = concatAB.reset_index()
#将"下单时间"设置为要求的str对象
concatAB["下单时间"] = concatAB["下单时间"].dt.strftime("%Y-%m")
#读取Exposure文件,作为【浏览数据表】
Exposure = pd.read_csv("/Users/Lily/Exposure.csv")
#横向关联合并pd.marge()
dataMerge = pd.merge(Exposure, concatAB, left_on=["ID", "Month"], right_on=["商品ID", "下单时间"])
#计算购买转化率,并添加在合并数据的最后一列
dataMerge["购买转化率"] = dataMerge["数量"]/dataMerge["Exposure"]
#将合并数据按照"商品ID"进行分组并计数
dataMergeCounts = dataMerge.groupby("商品ID").count()
#获取上一步得到的index
indexes = dataMergeCounts.index
#使用for循环依次遍历商品ID,并设置变量取值范围在0-len(ID)
ID = indexes
for i in range(len(ID)):
    # 定义字体
    plt.rcParams["font.sans-serif"] = "Arial Unicode MS"
    # 画出第i+1个商品
    # 使用plt.subplot()函数分割出画布的第i+1部分  
    plt.subplot(2,3,i+1)
    # 使用布尔索引取出第i+1个商品的数据并赋值给df1
    df1=dataMerge[dataMerge["ID"] == ID[i]]
    # 以df1["Month"]为横坐标、df1["购买转化率"].round(2)保留2位小数为纵坐标
    # 使用plt.plot()函数画出折线图,并设置标记样式为"o",图例为"转化率"
    plt.plot(df1["Month"],df1["购买转化率"].round(2),marker="o",label ="转化率")
    # 使用plt.xticks()函数将x轴刻度设置为90度
    plt.xticks(rotation = 90)
    # 使用plt.ylim()函数统一设置折线图纵坐标范围为0-0.3
    plt.ylim(0,0.3)
    # 使用plt.legend()函数设置折线图的图例显示位置为默认的右上角
    plt.legend()
    # 使用plt.title()函数,将图表标题设置为"ID[i]"
    plt.title(ID[i])
    plt.tight_layout()
#显示图像
plt.show()

运行效果

【夜曲编程Python数据分析】百题斩最后一题!!_第2张图片
 总结将在后期发布,针对Python数据分析的各种函数及方法展开介绍!

你可能感兴趣的:(夜曲编程,Python进阶,pandas,python,数据分析)