微服务架构深度解析 原理 实践与进阶python盘点订单_Python数据分析难?⼿把⼿教你处理上万条
京东订单数据(附源码)...
数据集简介
本数据集共收集了发⽣在⼀个⽉内的28010条数据,包含以下字段:
['订单编号', '总⾦额', '买家实际⽀付⾦额', '收货地址', '订单创建时间', '订单付款时间 ', '退款⾦额']
7个字段说明:
订单编号:订单编号;
总⾦额:订单总⾦额;
买家实际⽀付⾦额:总⾦额 - 退款⾦额(在已付款的情况下)。⾦额为0(在未付款的情况下);
收货地址:各个省份;
订单创建时间:下单时间;
订单付款时间:付款时间;
web登录界面代码大全退款⾦额:付款后申请退款的⾦额。如⽆付过款,退款⾦额为0。
数据概览:
相关库、函数和数据的导⼊
# 相关库和函数的导⼊
import numpy asnp
fromsklearn import metrics
import math
import copy
import pandas aspd
import scipy assp导⼊常⽤的基本库
import datetime asdate# 导⼊datetime库
import seaborn assns # 导⼊seaborn库,⽤于数据可视化
fromIPython.display import display # 载⼊数据查看时需要使⽤的函数
fromsklearn.preprocessing import LabelEncoder # 导⼊分类变量编码时需要使⽤的函数
fromsklearn.discriminant_analysis import LinearDiscriminantAnalysis # 导⼊LDA判别时需要使⽤的函数
fromsklearn.naive_bayes import MultinomialNB # 导⼊朴素贝叶斯时需要使⽤的额函数
< import DecisionTreeClassifier # 导⼊决策树函数
fromsklearn import svm # 导⼊⽀持向量机函数
# 数据导⼊
dt = pd.read_csv('D:资料/数据分析/数据分析与数据挖掘/实战演
练/5(tmall_order_report)/tmall_order_report.csv',encoding='gbk',engine='python')
数据检查与清洗
⾸先,查看⼀下数据集的变量类型:
dt.dtypes # 查看数据集有哪些变量
然后,将变量中右侧的空格去除(以免影响后续调⽤变量),并进⾏重复值和缺失值检查:
dt.duplicated().sum() # 检查数据是否有重复值,发现并没有重复值
display(sum(dt.isnull().sum())) # 检查数据集是否有缺失值
检查出来有缺失值(约占数据总量的12-15%),考虑原数据中是否是因为“订单付款时间”这⼀列存在缺失值⽽导致产⽣这样的检查结果:col = dt.list() # 提取数据集中的所有列变量的名称
display(sum(dt[col].isnull().sum())) # 再次检查是否有缺失值,发现并没有缺失值,也就是缺失值均来⾃“订单付款时间”这⼀列
结果表明,缺失值仅来⾃“订单付款时间”这⼀列。接下来就是处理缺失值,处理的思路可以是先计算出各订单付款时间和下单时间的平均值,然后⽤下单时间 + 平均值,作为缺失值的填补对象:
c = np.array(['订单创建时间','订单付款时间']) # 提取订单创建时间、付款时间这两列的列名
foriinc:
dt[i] = pd.to_datetime(dt[i]) # 将订单创建时间、付款时间由object类型转为datetime类型,⽅便运算
foriinrange(0,dt.shape[0]):
ascii码转16进制公式if (dt['订单付款时间'].iloc[i] < dt['订单创建时间'].iloc[i]) ==True:
dt['订单付款时间'].iloc[i] = dt['订单付款时间'].iloc[i] +date.timedelta(days=1) # 将订单付款时间 < 订单创建时间的时间数据往后加1天(因为原数据中没有考虑⽇期差异情况)
mu = np.mean(dt['订单付款时间']-dt['订单创建时间']) # 计算时间差的均值,⽤于之后进⾏缺失值替换
foriinrange(0,dt.shape[0]):
if pd.isnull(dt['订单付款时间'].iloc[i]) ==True: # 进⾏缺失值填补
dt['订单付款时间'].iloc[i] = dt['订单创建时间'].iloc[i] + mu
在填补完成之后,再次检查缺失值和重复值的情况:
display(sum(dt.isnull().sum())) # 再次检查数据集是否有缺失值,发现已经处理完了,但是还要检查是否增加正确
display(dt.duplicated().sum()) # 再次检查数据是否有重复值,发现并没有重复值,发现也没有重复值
结果显⽰已经没有缺失值和重复值了。
描述性分析京东python入门教程
⾸先,对订单总⾦额进⾏描述性分析:
display(dt['总⾦额'].describe()) # 查看订单总⾦额的情况,发现最⼤的订单价格达到了188320元,最⼩的则只有1元,平均订单价为107元左右
从描述统计的结果中可以看到,最⼤的订单价格达到了188320元,最⼩的只有1元,平均订单价在107元左右,中位数为1元,说明应该是⼀个左偏分布,即⼤部分订单的价格应该都不⾼。然后查看买家实际⽀付⾦额为0(⽀付未完成)的订单⽐例:
sum(dt['买家实际⽀付⾦额']==0) / dt.shape[0] # 查看买家实际⽀付⾦额为0(也就是⽀付未完成)的订单⽐例,占⽐约为32.3%
从结果中可以看到,⼤概有32.3%的买家未完成⽀付,这⼀⽐例还是⽐较⾼的。再看看订单付款时间相⽐于订单创建时间的延迟情况:
display((dt['订单付款时间']-dt['订单创建时间']).describe()) # 查看订单付款时间相⽐于订单创建时间的延迟情况,发现最慢的⽀付延迟了接近1天,⽽⼤部分订单在10分钟内就完成了⽀付
从中可以看到,最慢的⽀付延迟了接近1天,⽽⼤部分订单在10分钟内就完成了⽀付。最后,来对收货地址情况进⾏描述性分析:
siz = dt.groupby(dt['收货地址']).size() # 对收货地址进⾏分组统计
idx_sort = np.argsort(-siz) # 对分组统计的结果进⾏降序排序
display(siz[idx_sort].head()) # 查看降序排序的结果的前5名,发现收货地址选择上海、⼴东、江苏、浙江、北京的最多
siz[idx_sort].tail() # 查看降序排序的结果的最后5名,发现收货地址选择湖北、新疆、宁夏、青海和西藏的最少,其中湖北可能受疫情影响所致
从结果中可以看到,收货地址选择上海、⼴东、江苏、浙江、北京的最多,⽽选湖北、新疆、宁夏、青海和西藏的最少,其中湖北可能受疫情影响所致。
建模预处理
⾸先,进⾏特征构建,并⽣成⽤于建模的数据集,处理过程如下:
d1 = (dt['订单付款时间']-dt['订单创建时间']) # 输出订单付款和创建之间的时间差,作为⼀个新变量
数据结构c语言代码d1 = (d1 / np.timedelta64(1, 's')).astype(int) # 将时间差的格式进⾏转换,转换为按秒计数,并把格式变为int类型
le_train = LabelEncoder() # 使⽤从sklearn.preprocessing中import的LabelEncoder对分类数据进⾏编码,以便于后续使⽤交叉验证建模
le_train.fit(dt['收货地址'].tolist()) # 对模型进⾏训练
d2 = ansform(dt['收货地址'].tolist()) # 转化数据,作为第2个变量
d3 = np.zeros(dt.shape[0]) # 构建⼀个全为0的数组
foriinrange(0,dt.shape[0]):
if (dt['总⾦额'].iloc[i]-dt['买家实际⽀付⾦额'].iloc[i]) == dt['退款⾦额'].iloc[i]:
d3[i] = 1 # ⽣成⼀个新变量(类别变量),当买家有⽀付(⽆论退不退款)时为1,没有⽀付时为0(⽆⽀
付时上述等式不成⽴,实际⽀付⾦额和退款⾦额均为0),表明⽀付的情况
dt_use = np.vstack((d1,d2,d3)).T # ⽣成⽤于建模分析的数据集,np.vstack⽤于数组的垂直连接
然后是对数据集进⾏划分,形成训练集和测试集,为之后的建模做准备:
x_train,x_test, y_train, y_test = train_test_split(dt_use[:,0:2],dt_use[:,2:3],test_size=0.25, random_state=0) # 使⽤从
rectangle怎么念print('训练集的⾃变量数据的维度',x_train.shape)
print('训练集的因变量量数据的维度',x_test.shape)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论