1.大数据工具简单分析天猫年底月销量

1.引言

在线上交易早已成熟的今天,电商交易量究竟有多少?为了清晰地比较天猫月销量,本文爬取了天猫2017年底、2018年初主流分类商品大量数据,并做了简单的数据统计。整体流程如下:

1.大数据工具简单分析天猫年底月销量_第1张图片

说明:利用scrapy爬取天猫店铺数据约50万条,导入HDFS分布式存储,利用大数据组件spark操作算子分析及sparkSQL查询分析得出处理结果,最后,EChart前端组件将结果以图表形式展现出来。

2.分析过程

2.1 scrapy爬取天猫数据

  • ScrapyPython开发的一个快速、高层次的爬虫框架,用于抓取web站点并从页面中提取结构化的数据。

首先爬取天猫首页分类数据,如一级分类:女装、男装二级分类:羽绒服女、针织衫女等。结果保存为class.json,部分数据如下:

{"class2": ["羽绒服女", "毛呢外套女", "毛衣女", "针织衫女", "棉服女", "连衣裙",  "风衣女装", "裤子女装", "卫衣女装", "T恤女装", "衬衫女装", "半身裙", "西装女", "打底衫女", "夹克女", "皮衣女", "妈妈装","婚纱礼服"], "class1": "女装"}
{"class2": ["外套男装", "夹克男装", "衬衫男装", "T恤男装", "棒球服男装", "牛仔外套男装", "卫衣男装", "西装男", "风衣男装", "皮衣男装", "针织衫男装", "呢大衣男装", "休闲裤男装", "牛仔裤男装", "运动裤男装", "九分裤男装", "马甲男装", "羽绒服男装", "棉衣男", "中老年男装"], "class1": "男装"}
...
{"class2": ["沙发", "床", "餐桌", "床垫", "茶几", "电视柜", "衣柜", "鞋柜", "椅凳", "书桌", "电脑桌", "现代简约家具", "美式家具", "北欧家具", "中式家具", "儿童家具", "真皮沙发", "布艺沙发", "皮床", "实木床", "儿童床", "乳胶床垫", "儿童学习桌", "书架", "椅子", "电脑椅"], "class1": "家具"}
{"class2": ["iphone", "荣耀", "三星", "小米", "华为", "魅族", "oppo", "vivo"], "class1": "手机"}
...

获取上述{key:value}后,我们以search=value的方式(等同于在页面搜索框输入关键字)进一步爬取店铺数据,对于每一个店铺我们获取到一级分类、二级分类、商品名称、价格、月销售量、店铺名称{class1, class2, title, sales, price, store},对于每一个搜索的商品,我们按销量获取约前1000个店铺(最多1020个店铺)。数据形式如下:

{"title": "清仓薄款连帽韩版羽绒服", "price": "189.90", "sales": 44000.0, "class2": "羽绒服女", "store": "翼素", "class1": "女装"}
{"title": "可自提", "price": "499.00", "sales": 37000.0, "class2": "羽绒服女", "store": "优衣库官方旗舰店", "class1": "女装"}
...
{"title": "Apple/苹果", "price": "8168.00", "sales": 67000.0, "class2": "iphone", "store": "卓辰数码旗舰店", "class1": "手机"}
{"title": "Apple/苹果", "price": "9688.00", "sales": 67000.0, "class2": "iphone", "store": "苏宁易购官方旗舰店", "class1": "手机"}
...

本部分详细过程及代码见 https://github.com/whbing/taobaospider

2.2 spark数据分析

  • HDFS,即Hadoop分布式文件系统(HDFS),能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
  • Spark 是一种与 Hadoop 相似的开源集群计算环境,是专为大规模数据处理而设计的快速通用的计算引擎,其中间输出结果可以保存在内存中,从而不再需要每次读写HDFS。

首先,将结果文件传输至HDFS:

hadoop fs -put /folder/origin/... /folder/...

为了描述商品结构,我们创建javabean:

public class Product{
    private String class1;
    private String class2;
    private int price;
    private int  sales;
    private String store;
    private String title;
    ...
}

通过创建SparkSession对象获得RDDDataSets进行后续分析操作。
对整个结果数据,我们以二级分类为分组,对每个商品的月销量进行reduce操作或sql分组求和,以总销量降序排序:

String sqlText = "SELECT class2 ,class1,sum(CAST(sales AS DOUBLE)) as sum_sales,count(class2) AS class2_num 
                FROM tmalldata GROUP BY class2,class1 ORDER BY sum_sales DESC";

我们先选取部分分析结果,并做数据修正,原结果数据如下:

+------+------+-----------+----------+
|class2|class1|  sum_sales|class2_num|
+------+------+-----------+----------+
|  裤子女|    女装|1.7876922E7|      1020|
|    苹果|    生鲜|1.4588863E7|      1020|
|    坚果|    零食|1.3379527E7|      1020|
|    秋裤|    内衣|1.2177041E7|      1020|
|  保暖内衣|    内衣|1.1318308E7|      1020|

我们发现苹果坚果销量过大,查看原店铺数据,发现有分类交叉干扰:

{"title": "Apple/", "price": "6688.00", "sales": 58000.0, "class2": "苹果", "store": "苏宁易购官方旗舰店", "class1": "生鲜"}
...
{"title": "Aosailo iPhone6电池", "price": "58.00", "sales": 97000.0, "class2": "苹果", "store": "aosailo旗舰店", "class1": "生鲜"}
...
{"title": "平安夜/", "price": "45.90", "sales": 34000.0, "class2": "苹果", "store": "禧爱壹家旗舰店", "class1": "生鲜"}
...

修正数据,取部分排名靠前数据如下:

+------+------+-----------+----------+
|class2|class1|  sum_sales|class2_num|
+------+------+-----------+----------+
|  裤子女|    女装|1787.69万|      1020|
|    秋裤|    内衣|1217.70万|      1020|
|  保暖内衣|    内衣|1131.83万|      1020|
|    棉袜|    内衣|  9809210.0|      1020|
|  打底衫女|    女装|  8715402.0|      1020|
|  外套男装|    男装|  8641977.0|      1020|
| 休闲裤男|    男装|  8609225.0|      1020|
|    男鞋|    鞋靴|  8176627.0|      1020|
|    饼干|    零食|  7864698.0|      1020|
|iphone|    手机|  7321395.0|       331|
|  男士袜子|    内衣|  6933028.0|      1020|
|   毛衣女|    女装|  6290753.0|      1020|
|    抽纸|  个人护理|  6096333.0|      1020|
|  针织衫女|    女装|  5841158.0|      1020|
| 牛仔裤男|    男装|  5824355.0|      1020|
|   棉衣男|    男装|  5569577.0|      1020|
| 针织衫男|    男装|  5441920.0|      1020|
|    手套|  配件配饰|  5284268.0|      1020|
| 珊瑚绒睡衣|    内衣|  5129904.0|      1020|
|   清洁剂|  个人护理|  4862618.0|      1020|
|    板鞋|    鞋靴|  4853351.0|      1020|
|    靴子|    鞋靴|  4763410.0|      1020|
|    小米|    手机|  4746490.0|      1020|
|    洁面|    美妆|  4727331.0|       960|
|  儿童裤子|  童装玩具|  4694670.0|      1020|
|   棉袜女|    内衣|  4651058.0|      1020|
|    牛肉|    生鲜|  4630011.0|      1020|
|   内裤女|    内衣|  4612125.0|      1020|
|  长袖睡衣|    内衣|  4508023.0|      1020|
|    围巾|  配件配饰|  4426260.0|      1020|
|   内裤男|    内衣|  4417667.0|      1020|
|   巧克力|    零食|  4368916.0|      1020|
| 运动裤男装|    男装|  4332190.0|      1020|
|    面膜|    美妆|  4282905.0|       900|
|    乳液|    美妆|  4207855.0|       900|
|    柠檬|    生鲜|  4167727.0|      1020|
|    帽子|  配件配饰|  4166215.0|      1020|
|    童鞋|  童装玩具|  3931569.0|      1020|
|  卫衣男装|    男装|  3862480.0|      1020|
|   雪地靴|    鞋靴|  3851849.0|      1020|
|   洗发水|  个人护理|  3812539.0|      1020|
|  oppo|    手机|  3725865.0|       361|
|  T恤男装|    男装|  3696852.0|      1020|
|   卫生巾|  个人护理|  3568475.0|      1020|
|    牛奶|    美食|  3537466.0|      1020|
|  男士睡衣|    内衣|  3532434.0|      1020|
|    绘本|  儿童读物|  3492248.0|       636|
...

2.3 图表展示

  • ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,可高度个性化定制的数据可视化图表。

(1) 对全部数据按销量排序,结果如下:

原文请参见 http://www.whbing.cn

你可能感兴趣的:(spark)