淘宝商品数据清洗及预处理
這一節(jié)開始就正式開始啦~~
這一部分主要是針對淘寶的部分商品數(shù)據(jù)(小零食)進(jìn)行預(yù)處理。
這里拿到的數(shù)據(jù)是sql數(shù)據(jù),因此需要使用mysql。首先我們安裝好mysql,可以直接通過指令安裝:
sudo apt-get install mysql-server
apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
安裝過程中別忘記自己設(shè)置的密碼,最后連接數(shù)據(jù)庫需要該密碼。 安裝完成后可以通過下面的指令檢查是否安裝成功:
sudo netstat -tap | grep mysql
安裝好之后,我們現(xiàn)在就需要建立數(shù)據(jù)庫將我們的數(shù)據(jù)文件導(dǎo)入。
mysql -u root -p
登錄自己的root賬戶,-p表示需要輸入用戶密碼,按照提示輸入密碼,登錄到mysql。
登錄好之后,
mysql> show databases;
創(chuàng)建自己的數(shù)據(jù)庫:
mysql> create database XX;
這里的XX代表你的數(shù)據(jù)庫名,我這里使用的是創(chuàng)建的數(shù)據(jù)庫叫CSDN。
mysql> use CSDN;
這里的use表示切換數(shù)據(jù)庫;現(xiàn)在切換到CSDN數(shù)據(jù)庫上來。
mysql> show tables;
顯示所有的表;
這里未創(chuàng)建之前應(yīng)該是為空,這里我們將taobao.sql文件導(dǎo)入該數(shù)據(jù)庫中,
mysql> source /home/hadoop/taobao.sql
使用source+path的指令將本地的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,這時(shí)再使用show tables應(yīng)該就可以看到數(shù)據(jù)表了。
好,數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫之后,現(xiàn)在我們需要用python來處理該數(shù)據(jù),就需要用到python與mysql之間的交互。由于Mysqldb模塊還不支持python3,因此使用python3想要連接mysql,需要安裝pymysql模塊。上一節(jié)提到過,可以直接使用pip安裝,也可以直接在pycharm中安裝第三方模塊。
File ] >> [ settings ] >> [ Project: python ] >> [ Project Interpreter
] >> [ Install按鈕 ]
安裝好之后,我們可以使用來讀取數(shù)據(jù):
# coding:utf-8import numpy as npimport pymysqlimport pandas as pdaimport matplotlib.pylab as pylconn = pymysql.connect(host="127.0.0.1", user="root", passwd="xxxxxx", db="csdn", charset='utf8')sql = "select * from taobao"data = pda.read_sql(sql, conn) [/code][/code][/code]```code這樣就可以得到我們的原始數(shù)據(jù)了。 [/code]2. 數(shù)據(jù)清洗之發(fā)現(xiàn)缺失值并對缺失值進(jìn)行處理 取到數(shù)據(jù)之后就開始準(zhǔn)備處理數(shù)據(jù)。第一步,是先觀察數(shù)據(jù),或者是了解數(shù)據(jù)的屬性等特征。比如我們可以看到數(shù)據(jù)中含有下面的屬性值:![]()  一共有9616條數(shù)據(jù),一共有四列數(shù)據(jù),也就是四個(gè)屬性值,分別為:title,link,price, comment。對應(yīng)于該商品的名稱,鏈接,價(jià)格和評論數(shù)。下面對這些數(shù)據(jù)中的NA值進(jìn)行清洗:```codex = 0data["price"][(data["price"]==0)] = Nonefor i in data.columns:for j in range(len(data)):if(data[i].isnull())[j]:data[i][j] = 64x += 1print(x) [/code]將價(jià)格為空的數(shù)據(jù)的價(jià)格標(biāo)為64.3. 發(fā)現(xiàn)大量數(shù)據(jù)中的異常值并清洗 首先,為了更加直觀地觀察到異常值,我們可以通過作圖來發(fā)現(xiàn)。```codedata2 = data.Tprice = data2.values[2]comment = data2.values[3]pyl.plot(price, comment, "o")pyl.show() [/code]![]()  由于范圍比較大,我們作出的價(jià)格與評論數(shù)的散點(diǎn)圖分布并不很直觀。因此,我們考慮縮小范圍,將評論數(shù)大于5000的和價(jià)格大于400的都視為異常值,那我們就假設(shè)這樣處理好了,異常數(shù)據(jù)的選取都是可以自己調(diào)整范圍,逐步根據(jù)自己做出來的圖形進(jìn)行判斷:```codeline = len(data.values)col = len(data.values[0])dt = data.valuesfor i in range(0, line):for j in range(0, col):if dt[i][3] > 5000: # commentdt[i][3] = 562 [/code]```codeif dt[i][2] > 400: # pricedt[i][2] = 64dt2 = dt.Tprice = dt2[2]comment = dt2[3]pyl.plot(price, comment, "o")pyl.show() [/code]然后再次作圖,得到如下效果:![]() 得到這樣的圖看起來數(shù)據(jù)就集中多了。賣家可以通過自己的賣的平時(shí)的價(jià)格區(qū)間截取更加細(xì)致的區(qū)間,評論數(shù)可以一定程度上代表銷量,可以從中分析出最好的價(jià)格制定點(diǎn),可以幫助賣家制定合理的價(jià)格,獲得盡可能大的收益。4. 數(shù)據(jù)的離散化處理及分布的分析 要觀察數(shù)據(jù)的分布,我們最好是通過作出數(shù)據(jù)的直方圖來觀察。因此我們計(jì)算數(shù)據(jù)的最大值和最小值,計(jì)算組距(極差/組數(shù)),繪制直方圖。計(jì)算最值:```codeprice_max = dt2[2].max()price_min = dt2[2].min()comment_max = dt2[3].max()comment_min = dt2[3].min() [/code]計(jì)算極差:```codeprice_rg = price_max - price_mincomment_rg = comment_max - comment_min [/code]計(jì)算組距:```codeprice_dist = price_rg/13comment_dist = comment_rg/13 [/code]繪制直方圖:```codeprice_sty = np.arange(price_min, price_max, price_dist)pyl.hist(dt2[2], price_sty)pyl.show()comment_sty = np.arange(comment_min, comment_max, comment_dist)pyl.hist(dt2[3], comment_sty)pyl.show() [/code]繪制出來的效果為:![]()  價(jià)格的直方圖![]()  評論直方圖這里是將數(shù)據(jù)范圍縮減到更小之后求得的數(shù)據(jù)。評論數(shù)是大于65設(shè)置為35,價(jià)格大于100的設(shè)置為64。然后進(jìn)一步分析數(shù)據(jù)的分布規(guī)律。兩個(gè)直方圖中的峰值柱與我們處理數(shù)據(jù)時(shí)的設(shè)置值有非常大的關(guān)系,因此我們可以弱化這一列的特征,對整個(gè)數(shù)據(jù)進(jìn)行分析。總結(jié)
以上是生活随笔為你收集整理的淘宝商品数据清洗及预处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用深度学习Web项目的手写Marath
- 下一篇: 【Machine Learning, C