首页 > 其他分享 >京东华为荣耀80手机评论数据处理

京东华为荣耀80手机评论数据处理

时间:2023-02-16 21:45:15浏览次数:44  
标签:rs res ArrayList 华为 评论 statement 80 京东 out

石家庄铁道大学2023年春季

  2020 级课前测试试卷-电子商务大数据分析

课程名称:大型数据库应用技术  任课教师:王建民     测试时间:实现为止

 

测试要求:

一、测试要求:

1、 数据采集(要求至少爬取三千条记录,时间跨度超过一星期):(10分)

要求Python 编写程序爬取京东手机的评论数据,生成Json形式的数据文件。

京东商城部分数据格式如下图所示:

  1. "productCommentSummary": {  
  2. "goodRateShow": 95, //好评率  
  3. "poorRateShow": 3, //差评率  
  4. "poorCountStr": "1900+",  
  5. "averageScore": 5, //平均分  
  6. "generalCountStr": "1600+",  
  7. "oneYear": 0,  
  8. "showCount": 21000,  
  9. "showCountStr": "2.1万+",  
  10. "goodCount": 64000, //好评数  
  11. "generalRate": 0.024,  
  12. "generalCount": 1600, //中评数  
  13. "skuId": 4432058,  
  14. "goodCountStr": "6.4万+",  
  15. "poorRate": 0.028,  
  16. "afterCount": 2400,  
  17. "goodRateStyle": 142,  
  18. "poorCount": 1900, //差评数  
  19. "skuIds": null,  
  20. "poorRateStyle": 4,  
  21. "generalRateStyle": 4,  
  22. "commentCountStr": "6.8万+",  
  23. "commentCount": 68000,  
  24. "productId": 4432058, //商品id  
  25. "afterCountStr": "2400+",  
  26. "goodRate": 0.948,  
  27. "generalRateShow": 2 //中评率  
  28. },  

comments中一条评论的结构:

 

  1. “id": 10432588299,  
  2. “guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",  
  3. “content": "割手,相当的割手,无语了", //评论内容 √  
  4. “creationTime": "2017-05-22 23:37:24", //写评论的时间 √  
  5. “isTop": false,                        //是否置顶  
  6. “referenceTime": "2017-05-20 18:35:11", //收货时间 √  
  7. “firstCategory": 9987,                 //第一分类 √  
  8. “secondCategory": 653,                 //第二分类 √  
  9. “thirdCategory": 655,                  //第三分类 √  
  10. “replyCount": 0,  
  11. “score": 3,                            //打分 √  
  12. “nickname": "j***柜",                  //昵称  √  
  13. “userClient": 2,  
  14. “productColor": "碳黑色",  
  15. “productSize": "32GB",  
  16. “userLevelName": "金牌会员",           //会员级别 √  
  17. “plusAvailable": 0,  
  18. “productSales": [  
  19.    {  
  20.        "dim": 3,  
  21.        "saleName": "选择套装",  
  22.        "saleValue": "官方标配"  
  23.    }  
  24. ,  
  25. “userClientShow": "来自京东iPhone客户端",//评论设备  
  26. “isMobile": true,                       //是否移动端  
  27. “days": 2,                              //评论时间距【收货/下单】时间多长时间  
  28. “afterDays": 0  

 

2、数据预处理:要求使用MapReduce或者kettle实现源数据的预处理,对大量的Json文件,进行清洗,以得到结构化的文本文件。(10分)

(1)去除用户评论表的重复记录;

(2)按照清洗后的数据格式要求提取相应的数据字段。

 

清洗后的标准文本格式:

  1. "id": 10432588299,  
  2. "guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",  
  3. "content": "割手,相当的割手,无语了",   //评论内容 √  
  4. "creationTime": "2017-05-22 23:37:24",  //写评论的时间 √  
  5. "isTop": false,                         //是否置顶  
  6. "referenceTime": "2017-05-20 18:35:11", //收货时间 √  
  7. "score": 3,                             //打分 √  
  8. "nickname": "j***柜",                   //昵称  √  
  9. "userLevelName": "金牌会员",            //会员级别 √  
  10. "userClientShow": "来自京东iPhone客户端",//评论设备  
  11. "isMobile": true,                       //是否移动端  
  12. "days": 2,                              //评论时间距【收货/下单】时间多长时间  

 

 

 

3、 数据统计:生成Hive用户评论数据:(15分)

(1)在Hive创建一张表,用于存放清洗后的数据,表名为pinglun,字段名、字符类型、字段解释如下:

  1. productid        string  产品ID  
  2. commentcount     int     评论数  
  3. goodcount        int     好评数  
  4. generalcount     int     中评数  
  5. poorcount        int     差评数  
  6. goodrateshow     float   好评率  
  7. generalrateshow  float   中评率  
  8. poorrateshow     float   差评率  
  9. guid             string  随机生成ID  
  10. content          string  评论内容  
  11. creationtime     string  写评论的时间  
  12. score            int     打分  
  13. nickname         string  昵称  
  14. userlevelname    string  会员级别  
  15. userclientshow   string  评论设备  
  16. ismobile         string  是否移动端  
  17. days             int     评论时间距【收货/下单】时间多长时间  

 

 

 

 

需求1:分析用户使用移动端购买还是PC端购买,及移动端和PC端的用户比例,生成ismobilehive表,存储统计结果;

 

 

 

安卓791,IOS193,PC7

需求2:分析用户评论周期(收到货后,一般多久进行评论),生成dayssql表,存储统计结果;

 

需求3:分析会员级别(判断购买此商品的用户级别),生成userlevelname_out表,存储统计结果;

 

需求4:分析每天评论量,生成creationtime_out表,存储统计结果;

 

需求5:日期格式标准化

功能为:去掉评论时间的时分秒,只保留年月日

 

 

4、 利用Sqoop进行数据迁移至Mysql数据库:(5分)

将上述五个表倒入到相对应的mysql数据表中。

 

 

5、 数据可视化:利用JavaWeb+Echarts完成数据图表展示过程(20分)

(实现前五步,获得60分)

需求1把用户对京东进行评论时使用的是客户端还是移动端的统计数据,用饼图进行数据展示,从而达到让观者能从中熟悉某个项目与整个数据组间所存在的比例关系的目的。

var option = {
    series : [
        {
            name: '访问来源',
            type: 'pie',    // 设置图表类型为饼图
            radius: '55%',  // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。
            data:xx
        }
    ]
};

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Connection con = conn.getConnection();      //连接类
// 你要执行的Sql语句
System.out.println("ok");
String sql = "select is_mobile,count from ismobilehive";
ArrayList<Map> res = new ArrayList<>();


//然后创建statement类对象,用来执行SQL语句
Statement statement = null;          //Statement实现增删改查
try {
    statement = con.prepareStatement(sql);
    //最后设置Resultset类,用来存放获取的 结果集
    ResultSet rs = statement.executeQuery(sql);
    while(rs.next()){
        Map<String,String> one = new HashMap<>();
        one.put("name",rs.getString("is_mobile"));
        one.put("value",rs.getString("count"));
        res.add(one);
    }
} catch (SQLException e) {
    e.printStackTrace();
}
System.out.println(res);
String  out= JSON.toJSONString(res);
response.getWriter().print(out);

 

需求2把用户在收到货后,一般多久进行评论,即用户评论周期用柱状图展示,可以达到展现数据并将数据进行比较的目的。

var option = {
    title: {
        text: '时间间隔'
    },
    tooltip: {},
    legend: {
        data:['天']
    },
    xAxis: {
        data: xx['x']
    },
    yAxis: {},
    series: [{
        name: '天',
        type: 'bar',
        data: xx['y']
    }]
};
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Connection con = conn.getConnection();      //连接类
// 你要执行的Sql语句
System.out.println("ok");
String sql = "SELECT DAY,num,IF(LENGTH(0+DAY)=LENGTH(DAY),DAY,3650) X FROM dayssql ORDER BY X+1";
Map res = new HashMap<String, Map>();
ArrayList<String> name = new ArrayList<>();
ArrayList<Integer> count = new ArrayList<>();

//然后创建statement类对象,用来执行SQL语句
Statement statement = null;          //Statement实现增删改查
try {
    statement = con.prepareStatement(sql);
    //最后设置Resultset类,用来存放获取的 结果集
    ResultSet rs = statement.executeQuery(sql);
    while(rs.next()){
        name.add(rs.getString("day"));
        count.add(rs.getInt("num"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}
res.put("x",name);
res.put("y",count);
System.out.println(res);
String  out= JSON.toJSONString(res);
response.getWriter().print(out);

 

需求3将购买某商品的用户级别进行统计的结果数据用饼状图展示,从而可以展现用户级别的比例构成关系,让观者能从中熟悉某个级别的用户数量与所有购买用户所存在的比例关系。

var option = {
    series : [
        {
            name: '访问来源',
            type: 'pie',    // 设置图表类型为饼图
            radius: '55%',  // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。
            label: {
                normal: {
                    show: true,
                    formatter: '{b}: {c}({d}%)' //自定义显示格式(b:name, c:value, d:百分比)
                }
            },
            data:xx
        }
    ]
};
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Connection con = conn.getConnection();      //连接类
// 你要执行的Sql语句
System.out.println("ok");
String sql = "select level,num from userlevelname_out";
ArrayList<Map> res = new ArrayList<>();


//然后创建statement类对象,用来执行SQL语句
Statement statement = null;          //Statement实现增删改查
try {
    statement = con.prepareStatement(sql);
    //最后设置Resultset类,用来存放获取的 结果集
    ResultSet rs = statement.executeQuery(sql);
    while(rs.next()){
        Map<String,String> one = new HashMap<>();
        one.put("name",rs.getString("level"));
        one.put("value",rs.getString("num"));
        res.add(one);
    }
} catch (SQLException e) {
    e.printStackTrace();
}
System.out.println(res);
String  out= JSON.toJSONString(res);
response.getWriter().print(out);

 

需求4将某件商品的每天的评论量的统计数据用折线图进行展现,可以展现出这个商品每天的评论量的变化趋势。

var option =
    option = {
        xAxis: {
            type: 'category',
            data: xx['x']
        },
        yAxis: {
            type: 'value'
        },
        series: [{
            data: xx['y'],
            type: 'line',
        }],
        tooltip : {
            trigger: 'axis',
            axisPointer: {
                type: 'cross',
                label: {
                    backgroundColor: '#6a7985'
                }
            }
        },
};
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Connection con = conn.getConnection();      //连接类
// 你要执行的Sql语句
System.out.println("ok");
String sql = "SELECT creationTime,COUNT(creationTime) FROM COMMENT GROUP BY creationTime ORDER BY creationTime";
Map res = new HashMap<String, Map>();
ArrayList<String> name = new ArrayList<>();
ArrayList<Integer> count = new ArrayList<>();

//然后创建statement类对象,用来执行SQL语句
Statement statement = null;          //Statement实现增删改查
try {
    statement = con.prepareStatement(sql);
    //最后设置Resultset类,用来存放获取的 结果集
    ResultSet rs = statement.executeQuery(sql);
    while(rs.next()){
        name.add(rs.getString("creationTime"));
        count.add(rs.getInt("COUNT(creationTime)"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}
res.put("x",name);
res.put("y",count);
System.out.println(res);
String  out= JSON.toJSONString(res);
response.getWriter().print(out);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:rs,res,ArrayList,华为,评论,statement,80,京东,out
From: https://www.cnblogs.com/duanzheng/p/17128427.html

相关文章

  • 题解 CF980B
    前言:关于原题目中的“旅馆”这一用词,个人感觉用起来十分不畅,于是下文中将会用“障碍物”一词来代指旅馆。题目大意:有一座\(4\timesn\)的矩阵,然后让你放置障碍物......
  • 华为欧拉openEuler22.03安装mysql时遇到的坑
    mysql:errorwhileloadingsharedlibraries:libncurses.so.5:cannotopensharedobjectfile:Nosuchfileordirectory这里是说在系统的/usr/lib64 这个目录......
  • 华为IPD集成产品开发流程
    IPD,即集成产品开发,来源于美国PRTM公司的PACE理论,如今已经成为一套包含企业产品开发的思想、模式、工具的系统工程。本文作者以华为为例,对IPD集成产品开发体系进行了分析,......
  • 【题解】CF280D k-Maximum Subsequence Sum
    题目分析:(可能是刚做完毒瘤Ynoi的原因,看这个4k的线段树感觉好简单)可以看一下这个查询的操作,最多\(k\)个不重线段的和的最大值,这个东西大概是网络流的经典题吧。具......
  • 华为云发布分布式编译构建系统CodeArts Build
    摘要:2月14日,华为云发布分布式编译构建系统CodeArtsBuild,旨在支撑企业实现高效的软件开发,缩短产品上市周期,帮助企业的软件产品快速形成关键竞争力。本文分享自华为云社区......
  • 860~808 复杂条件查询分析,代码实现
    复杂条件查询分析:  代码实现packagecom.example.web.servlet;importcom.example.domain.PageBean;importcom.example.domain.User;importcom.example.servi......
  • 华为交换机策略路由配置
    -----------------------------------aclnumber3002rule5permitipsource172.16.4.00.0.0.255rule10permitipsource172.16.1.2000.0.0.0----------------......
  • 798~801 删除选中功能,分析,选取选中条目id,删除选中服务器,细节处理
    删除选中功能分析 voiddelSelectedUser(String[]ids);//删除选中==========@OverridepublicvoiddelSelectedUser(String[]ids){if(ids!=nu......
  • STA8089FGBTR单芯片独立定位接收器LT1962EMS8-3.3稳压器电路图
    1、STA8089FG是一款高度集成的单片独立GNSS接收机,专为定位系统应用而设计。STA8089FG单芯片独立定位接收器IC,它工作在多个星座(GPS/Galileo/Glonass/北斗/QZSS)上。该设备向......
  • 仿移动端京东商城
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>shop</title><linkrel="stylesheet"href="../css/小商城.css"><scriptsrc="../jq......