爬取及分析天猫商城冈本评论(二)数据处理

前言

根据以前我写的 爬取及分析天猫商城冈本评论(一)数据获取 方法,爬取了冈本旗舰店的全部避孕套产品的公开评论,共计30824条。html

此次对这3万多条评论去作数据分析前的预处理。python


 

数据值处理

 对于搜集到的评论数据,主要是针对三个字段去进行分析,就是“产品类型product_type”,“首次评论first_comment”,“评论日期comment_date”。因此数据的预处理主要针对这3个字段去进行。mysql

(1)product_type

产品类型主要有两个问题:一是文本过长,二是有缺失值。sql

一、缺失值处理:

这个字段的缺失值有2997条。数据库

产品类型这个字段很是关键,没办法采用替代等方式去处理这些缺失值。暂时将这些缺失值的sort字段更新为-1,并在产品类型里面填入“unknown”。post

UPDATE sp_okamoto_comment SET product_type='unknow',sort=-1 WHERE product_type='';

 效果:fetch

二、文本过长:

思路:分一个附表,用于记录具体的产品类型包含的产品。而后在主表中用附表的编码代替。编码

 建立一个产品类型表:spa

CREATE TABLE `okamoto_product_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID自增',
  `product_type` varchar(100) DEFAULT NULL COMMENT '产品类型',
  `sort` int(11) NOT NULL COMMENT '序号',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `ky_sp_okamoto_comment_sort` (`sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='冈本产品类型表';

将产品类型插入表中:3d

INSERT INTO `okamoto_product_type`(`product_type`,sort) SELECT DISTINCT(product_type),1 FROM sp_okamoto_comment;

文本处理:删去没用的产品信息

UPDATE `okamoto_product_type` SET `product_type` = REPLACE(`product_type`, '颜色分类:', '');
UPDATE `okamoto_product_type` SET `product_type` = REPLACE(`product_type`, ';避孕套规格:其它规格;颜色:其它颜色 ', '');

产品类别表的效果图:

将主表的product_type也修改一下,并将它改成product_id

UPDATE sp_okamoto_comment s INNER JOIN okamoto_product_type o ON o.product_type=s.product_id
SET s.product_id=o.id;

 通过处理之后,一共有606个产品类别。由于有不少类别的销量不多,评论的样品量太少,因此暂定用销量在300以上的数据做为统计。这个是后话了。

SELECT COUNT(product_id) amount, product_id FROM sp_okamoto_comment GROUP BY product_id  HAVING COUNT(product_id)>300 ORDER BY amount

 (2)first_comment

缺失值和无用评论

评论的内容主要是:1,没有评论的,系统显示为:此用户没有填写评论!;2,无用评论,纯粹是凑字数的。第一类能够经过判断,在情感分析时跳开无论。第二类比较难经过文本判断,目前先不处理。

UPDATE sp_okamoto_comment SET `status`=-2 WHERE first_comment="此用户没有填写评论!";

受影响的行: 1223
时间: 0.066s

情感分析

经过pymysql对数据库内的评论进行读取,而后利用snowNLP进行情感分析,最后将分析出的结果,写入sentiment_point字段。

 

import pymysql
from snownlp import SnowNLP

def sql_snownlp(count_num):
    db = pymysql.connect(host="localhost",user="root",password="",db="python_data_sql",charset='utf8')
    cursor = db.cursor()
    for id_num in range(1,count_num):
        try:
            sql_select = "SELECT first_comment FROM sp_okamoto_comment WHERE id={id_num};".format_map(vars())
            # 执行sql语句
            cursor.execute(sql_select)
            res = cursor.fetchone()
            res = str(res).replace('(\'','').replace('\',)','')#查询出来的结果是一个带逗号的元组,例如('一直在这买的',),因此文本处理一下
            s=SnowNLP(res)
            point=s.sentiments#情感分析,分数为0到1,1是最高分情感,0是最负面情感
            sql_update = "UPDATE sp_okamoto_comment SET sentiment_point={point} WHERE id={id_num};".format_map(vars())
            cursor.execute(sql_update)
            db.commit()
        except:
            print('第{id_num}条update失败'.format_map(vars()))
            # 发生错误时回滚
            db.rollback()
            # 关闭数据库链接
    db.close()

 效果图:

由于我在数据库里面设置了保留4位小数,因此会出现0的状况。再者就是snowNLP的准确率大概有8到9成,算是比较高的了,虽然有时候评分不许确。

(3)comment_date

 对于评论的日期,通常不须要进行什么处理,爬下来的数据已经比较标准化了。


 

总结

数据处理的目的主要是将数据进行清洗,而后作标准化。对于评论的清洗,仍是不太够。很对凑字数的评论暂时没有办法去处理它。再者就是snowNLP的情感分析,准确率没有办法达到100%。

但整体来讲,数据处理的目的大体上仍是达到了。下一步,咱们就要对处理后的数据,进行分析,可视化,最后解读生成数据分析报告。

相关文章
相关标签/搜索