爬取及分析天猫商城冈本评论(二)数据处理
前言
根據之前我寫的?爬取及分析天貓商城岡本評論(一)數據獲取?方法,爬取了岡本旗艦店的所有避孕套產品的公開評論,共計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 SnowNLPdef 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%。
但總體來說,數據處理的目的大致上還是達到了。下一步,我們就要對處理后的數據,進行分析,可視化,最后解讀生成數據分析報告。
?
轉載于:https://www.cnblogs.com/10sxluo/p/10428246.html
總結
以上是生活随笔為你收集整理的爬取及分析天猫商城冈本评论(二)数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu常见问题解决方法
- 下一篇: 洛谷P1006 传纸条(多维DP)