爬取及分析天貓商城岡本評論(二)數據處理
前言
根據之前我寫的 爬取及分析天貓商城岡本評論(一)數據獲取 方法,爬取了岡本旗艦店的所有避孕套產品的公開評論,共計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%。
但總體來說,數據處理的目的大致上還是達到了。下一步,我們就要對處理後的數據,進行分析,可視化,最後解讀生成數據分析報告。
爬取及分析天貓商城岡本評論(二)數據處理