推广 热搜: 行业  机械  设备    教师  经纪  系统  参数    蒸汽 

淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为(python版)

   日期:2024-11-10     移动:http://zleialh.xhstdz.com/mobile/quote/62676.html

《淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为(python版)》

淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为(python版)

开发团队:厦门大学数据库实验室 联系人:林子雨老师ziyulin@xmu.edu.cn

版权声明:版权归厦门大学数据库实验室所有,请勿用于商业用途;未经授权,其他网站请勿转载

本教程介绍大数据课程实验案例“淘宝双11数据分析与预测”的第五个步骤,利用Spark预测回头客。在实践本步骤之前,请先完成该实验案例的第一个步骤——本地数据集上传到数据仓库Hive,第二个步骤——Hive数据分析,和第三个步骤——将数据从Hive导入到MySQL,这里假设你已经完成了前面的这四个步骤。

这里列出test.csv和train.csv中字段的描述,字段定义如下:

  1. user_id | 买家id
  2. age_range | 买家年龄分段:1表示年龄小于18,2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄大于等于50,0和NULL则表示未知
  3. gender | 性别:0表示女性,1表示男性,2和NULL表示未知
  4. merchant_id | 商家id
  5. label | 是否是回头客,0值表示不是回头客,1值表示回头客,-1值表示该用户已经超出我们所需要考虑的预测范围。NULL值只存在测试集,在测试集中表示需要预测的值。

这里需要预先处理test.csv数据集,把这test.csv数据集里label字段表示-1值剔除掉,保留需要预测的数据.并假设需要预测的数据中label字段均为1.


上面使用vim编辑器新建了一个predeal_test.sh脚本文件,请在这个脚本文件中加入下面代码:

#!/bin/bash #下面设置输入文件,把用户执行predeal_test.sh命令时提供的第一个参数作为输入文件名称 infile=$1 #下面设置输出文件,把用户执行predeal_test.sh命令时提供的第二个参数作为输出文件名称 outfile=$2 #注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面 awk -F "," 'BEGIN{ id=0; } { if($1 && $2 && $3 && $4 && !$5){ id=id+1; print $1","$2","$3","$4","1 if(id==10000){ exit } } }' $infile > $outfile

下面就可以执行predeal_test.sh脚本文件,截取测试数据集需要预测的数据到test_after.csv,命令如下:


train.csv的第一行都是字段名称,不需要第一行字段名称,这里在对train.csv做数据预处理时,删除第一行


然后剔除掉train.csv中字段值部分字段值为空的数据。


上面使用vim编辑器#新建了一个predeal_train.sh脚本文件,请在这个脚本文件中加入下面代码:

#!/bin/bash #下面设置输入文件,把用户执行predeal_train.sh命令时提供的第一个参数作为输入文件名称 infile=$1 #下面设置输出文件,把用户执行predeal_train.sh命令时提供的第二个参数作为输出文件名称 outfile=$2 #注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面 awk -F "," 'BEGIN{ id=0; } { if($1 && $2 && $3 && $4 && ($5!=-1)){ id=id+1; print $1","$2","$3","$4","$5 if(id==10000){ exit } } }' $infile > $outfile

下面就可以执行predeal_train.sh脚本文件,截取测试数据集需要预测的数据到train_after.csv,命令如下:


请先确定Spark的运行方式,如果Spark是基于Hadoop伪分布式运行,那么请先运行Hadoop。 如果Hadoop没有运行,请执行如下命令:


将两个数据集分别存取到HDFS中



输入密码后,你就可以进入“mysql>”命令提示符状态,然后就可以输入下面的SQL语句完成表的创建:


Spark支持通过JDBC方式连接到其他数据库获取数据生成Dataframe。 下载MySQL的JDBC驱动(mysql-connector-java-5.1.40.zip) mysql-connector-java-*.zip是Java连接MySQL的驱动包,默认会下载到”~/下载/”目录 执行如下命令:


接下来正式启动pyspark


这里使用Spark MLlib自带的支持向量机SVM分类器进行预测回头客,有关更多Spark MLlib中SVM分类器的学习知识,请点击Spark入门:支持向量机SVM分类器进行学习。 在pyspark中执行如下操作: 1.导入需要的包 首先,我们导入需要的包:


2.读取训练数据 首先,读取训练文本文件;然后,通过map将每行的数据用“,”隔开,在数据集中,每行被分成了5部分,前4部分是用户交易的3个特征(age_range,gender,merchant_id),最后一部分是用户交易的分类(label)。把这里我们用LabeledPoint来存储标签列和特征列。LabeledPoint在监督学习中常用来存储标签和特征,其中要求标签的类型是double,特征的类型是Vector。


3.构建模型


接下来,通过训练集构建模型SVMWithSGD。这里的SGD即著名的随机梯度下降算法(Stochastic Gradient Descent)。设置迭代次数为1000,除此之外还有stepSize(迭代步伐大小),regParam(regularization正则化控制参数),miniBatchFraction(每次迭代参与计算的样本比例),initialWeights(weight向量初始值)等参数可以进行设置。


4.评估模型 接下来,我们清除默认阈值,这样会输出原始的预测评分,即带有确信度的结果。


spark-shell会打印出如下结果

...... -59045.132228013084 1.0 -81550.17634254562 1.0 -87393.69932070676 1.0 -34743.183626268634 1.0 -42541.544145105494 1.0 -75530.22669142077 1.0 -84157.31973688163 1.0 -18673.911440386535 1.0 -43765.52530945006 1.0 -80524.44350315288 1.0 -61709.836501153935 1.0 -37486.854426141384 1.0 -79793.17112276069 1.0 -21754.021986991942 1.0 -50378.971923247285 1.0 -11646.722569368836 1.0 ......

如果我们设定了阀值,则会把大于阈值的结果当成正预测,小于阈值的结果当成负预测。


5.把结果添加到mysql数据库中 现在我们将上面没有设定阀值的测试集结果存入到MySQL数据中。

本文地址:http://zleialh.xhstdz.com/quote/62676.html    物流园资讯网 http://zleialh.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号