import pandas as pd
df = pd.read_csv('tmall_order_report.csv')
df.head(50)
df.columns
df.describe()
df.info()
df.isnull().sum()#缺失值的查看,订单付款时间为空说明没有付款
df.duplicated().sum()#重复值查看
df.columns
df.columns = df.columns.str.strip()#去列名的空值
df.columns
df.shape
df[df.duplicated()].count()#列重复值查看
#对收货地址做字符串处理
df.收货地址.unique()#返回列的唯一值
df.收货地址=df.收货地址.str.replace('自治区|省|壮族|维吾尔|回族','',regex=True)#regex表示用正则表达式
df.收货地址
data1 = df.总金额.sum()
data1
data2 = df.退款金额.sum()
data2
data3 = df.买家实际支付金额.sum()
data3
data4=data3-data2#总收入
data4
df[df.订单付款时间.isnull()]#未付款订单
df['订单编号'][df.订单付款时间.isnull()].count()
result = {}#创建空字典
result['未付款订单数'] = df['订单编号'][df.订单付款时间.isnull()].count()#存入数据
result['已完成订单数']= df['订单编号'][df.订单付款时间.notnull()].count()
result
result['总订单数'] = df['订单编号'].count()
result['退款订单数'] = df['订单编号'][df.退款金额>0].count()
result['总订单金额'] = df['总金额'].sum()
result['总退款金额'] = df['退款金额'].sum()
result['总实际收入金额'] = df['买家实际支付金额'].sum()
result
result1 = {}#创建空字典
result1['未付款订单数'] = df['订单编号'][df.订单付款时间.isnull()].count()#存入数据
result1['已完成订单数']= df['订单编号'][df.订单付款时间.notnull()].count()
result1['总订单数'] = df['订单编号'].count()
result1['退款订单数'] = df['订单编号'][df.退款金额>0].count()
result1['总订单金额'] = df['总金额'].sum()
result1['总退款金额'] = df['退款金额'].sum()
result1['总实际收入金额'] = df['买家实际支付金额'][df.订单付款时间.notnull()].sum()
result1
import numpy as np
table = pd.DataFrame(result1,index = np.arange(1))#把7个变量放入二维表中
table
#统计地区订单量,以柱状图显示
import matplotlib.pyplot as plt
result2 = df[df.订单付款时间.notnull()].groupby('收货地址')['订单编号'].size()
#to_dict()直接把Series和DataFrame转成字典,tolist()转换成列表
result21 = result2.to_dict()
#esult21.keys()
result22 = sorted(result21.items(),key = lambda item:item[1]) #排序之后是列表
result23 = {}
for i in range(len(result22)):
result23[result22[i][0]] = result22[i][1]
result23#排序之后字典
result24 = []
for j in result23.keys():
result24.append(j)
#result22 #把地址转换为列表形式
[list(x) for x in result22]
#plt.rcParams['font.family'] = ['SimHei']#设置中文正常显示
#plt.rcParams['axes.unicode_minus'] = False#设置符号正常显示
#fig = plt.figure(figsize=(12,10)) #设置画布大小
#plt.barh(range(1,len(result23)+1),result23.values(),tick_label = list)
#plt.show()
#分析订单走势
df.info()
df['订单创建时间'] = pd.to_datetime(df['订单创建时间'])
df['订单付款时间'] = pd.to_datetime(df['订单付款时间'])
result3 = df.groupby(df['订单创建时间'].apply(lambda x:x.strftime("%Y-%m-%d")))['订单编号'].size()
result31 = result3.to_dict()
fig = plt.figure(figsize=(30,10)) #设置画布大小
plt.plot(result31.keys(),result31.values())
plt.show
从图上来看,2月份上半月由于受新冠疫情影响,订单量较少,随着复工开展,下半月订单量增长明显。
from pyecharts import options as opts #配置
from pyecharts.charts import Map,Pie,Bar
#from pyecharts.globals import CurrentConfig, NotebookType
#CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
#Jupyter Notebook 直接调用render_notebook随时随地渲染图表,默认为Jupter-Notebook
#result12 列表包含元组
mapDD=(
Map()
.add("订单量",[list(x) for x in result22],"china")
.set_global_opts(title_opts=opts.TitleOpts(title="地区订单分布"),
visualmap_opts=opts.VisualMapOpts(max_=2000)) #最大值不用比数据中最大值大
)
#mapDD.render_notebook()
mapDD.render('html\\mapDD.html')
result4=df.groupby(df['订单创建时间'].apply(lambda x:x.strftime('%H')))['订单编号'].size().to_dict()
list(result4.keys()) #list() 方法
[*result4.keys()]# *解包
from pyecharts import options as opts
from pyecharts.charts import Map,Bar
barDD=(
Bar()
.add_xaxis(list(result4.keys()))
.add_yaxis("订单量",list(result4.values()))
.set_global_opts(title_opts=opts.TitleOpts(title="每小时订单走势"))
)
barDD.render_notebook()
从每小时订单量走势来看,一天中有三个高峰期(10点、15点、21点),其中21点-22点之间是一天中订单量最多的时候,这个结果和之前一亿条淘宝用户行为数据分析结果一致,对于卖家的指导意义是,为了提高订单量,高峰期时应该尽量保证客服的回复速度,尤其是晚上21点-22点之间,所以很多做电商的基本douy
天猫订单数据分析
最新推荐文章于 2023-12-09 16:26:03 发布