爬取及分析天貓商城岡本評論(二)數據處理

前言

根據以前我寫的 爬取及分析天貓商城岡本評論(一)數據獲取 方法,爬取了岡本旗艦店的全部避孕套產品的公開評論,共計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%。

但整體來講,數據處理的目的大體上仍是達到了。下一步,咱們就要對處理後的數據,進行分析,可視化,最後解讀生成數據分析報告。

相關文章
相關標籤/搜索