1. 程式人生 > >爬取及分析天貓商城岡本評論(二)數據處理

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

總結 ron hone inno 小數 nbsp weight com creat

前言

根據之前我寫的 爬取及分析天貓商城岡本評論(一)數據獲取 方法,爬取了岡本旗艦店的所有避孕套產品的公開評論,共計30824條。

技術分享圖片

這次對這3萬多條評論去做數據分析前的預處理。


數據值處理

對於搜集到的評論數據,主要是針對三個字段去進行分析,就是“產品類型product_type”,“首次評論first_comment”,“評論日期comment_date”。所以數據的預處理主要針對這3個字段去進行。

(1)product_type

產品類型主要有兩個問題:一是文本過長,二是有缺失值。

1、缺失值處理:

技術分享圖片

這個字段的缺失值有2997條。

產品類型這個字段非常關鍵,沒辦法采用替代等方式去處理這些缺失值。暫時將這些缺失值的sort字段更新為-1,並在產品類型裏面填入“unknown”。

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

效果:

技術分享圖片

2、文本過長:

技術分享圖片

思路:分一個附表,用於記錄具體的產品類型包含的產品。然後在主表中用附表的編碼代替。

創建一個產品類型表:

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=岡本產品類型表;

將產品類型插入表中:

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%。

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

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