Python數據挖掘06--淘寶網數據處理

淘寶數據:第一列標題,第二列鏈接,第三列價格,第四列評論
淘寶數據


所用到數據sql文件點擊下載

一、數據預處理

  數據預處理指的是對數據進行初步處理,把髒數據處理掉,否則很容易影響最終結果。
常見的的預處理包括:
1、缺失值處理
2、異常值處理
3、數據集成

在數據量大的情況下采用刪除處理法,是比較優質的一種處理方法。

二、實戰分析

步驟:
1、爬取淘寶數據存入數據庫(再次不進行演示,後面會在爬蟲中更新淘寶商品的爬取)
2、讀取數據庫中的數據
3、補全缺失數據,例如NaN或者價格爲0的一些商品
4、對一些極大值進行異常處理
5、進行數據處理,直方圖進行展示
6、對直方圖進行分析,分析出較優的方案


下面爲源碼:

2、讀取數據庫中的數據
import pymysql
import numpy as npy
import matplotlib.pylab as pyl
import pandas as pda

pyl.rcParams['font.sans-serif'] = ['SimHei']

conn = pymysql.connect(host="localhost", user="root", passwd="123456", db="datatreat")  #數據庫連接
sql = "select * from taob"
data = pda.read_sql(sql, conn)  # 連接數據庫並獲取數據
print(data.describe())
# print(data.columns)  # 所有標題 Index(['title', 'link', 'price', 'comment'], dtype='object')
# print(len(data))  # 數據總長度 2356

data.describe()獲得的結果可獲得中間值,以及判斷價格最小值是否含0

描述 price comment
count 2356.000000 2356.000000
mean 66.876061 1647.473684
std 147.646617 12119.206828
min 0.000000 0.000000
25% 22.000000 23.000000
50% 40.000000 162.000000
75% 75.000000 757.500000
max 5990.000000 454037.000000
3、補全缺失數據,例如NaN或者價格爲0的一些商品
x = 0
data["price"][(data["price"] == 0)] = None  # 如果價格爲0,則設置價格爲None,後面可以更方便的對數據進行處理
for i in data.columns:  #  數據每一列的標題
    for j in range(len(data)):  # 數據每一行
        if data[i].isnull()[j]:  # 如果價格爲None,那麼設置價格爲66
            data[i][j] = 66
            x += 1
# print(x)  # 總共有多少個遺失的數據
這樣的警告無視即可
D:/PycharmProjects/datam/datatreating.py:17: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  data["price"][(data["price"] == 0)] = None
4、對一些極大值進行異常處理

首先需要找到異常值,那麼可以畫散點圖來尋找,然後再進行處理

data1 = data.T
price = data1.values[2]
comt = data1.values[3]
pyl.xlabel("價格")
pyl.ylabel("評論")
pyl.plot(price, comt, "o")
pyl.show()

這裏寫圖片描述
可以很明顯的看出,評論大於100000,價格大於1000可以都處理了

(1)改值處理法 兩種方法二選一

da = data.values
line = len(data.values)  # 行數
col = len(data.values[0])  # 列數
 for i in range(0, line):
     for j in range(0, col):
     # 注意這裏是已經進行了第二次數據處理,所以得出對價格大於210,評論大於5338的數據進行處理
         if(j == 2 and da[i][2]>210):  # 修改價格
             da[i][j] = 66
         elif(j == 3 and da[i][3]>5338):  # 修改評論
             da[i][j] = 1647

 data2 = da.T
 price = data2[2]
 comt = data2[3]
 pyl.xlabel("價格")
 pyl.ylabel("評論")
 pyl.plot(price, comt, "o")  # 繪製散點圖
 pyl.show()

(2) 刪除處理法

x = 0
for i in range(0, line):
    for j in range(0, col):
        if (da[i][2] > 210):  # 刪除價格
            continue
        elif (da[i][3] > 5338):  # 刪除評論
            continue
        else:
            if(x==0):  # 第一個數直接賦值到newda中,後續的通過row_stack插入
                newda = da[i]
            else:
                newda = npy.row_stack((newda, da[i]))  # numpy.row_stack(mat, a) a是要加入mat中的序列
            x += 1

data2 = newda.T
price = data2[2]
comt = data2[3]
pyl.xlabel("價格")
pyl.ylabel("評論")
pyl.plot(price, comt, "o")  # 繪製散點圖
pyl.show()

處理後數據散點圖分佈,可以很明顯看出點分佈均勻很多
這裏寫圖片描述

5、分佈分析
# 求最值
# 計算極差
# 組距:極差/組數
# 繪製直方圖

pricemax = data2[2].max()
pricemin = data2[2].min()
commentmax = data2[3].max()
commentmin = data2[3].min()
# 極差
pricerg = pricemax - pricemin
commentrg = commentmax - commentmin
# 組距
pricedst=pricerg/13 
commentdst=commentrg/13
# 繪製價格直方圖
# npy.arange(最大,最小,組距)
# 價格直方圖
peicesty = npy.arange(pricemin, pricemax, pricedst)
pyl.hist(data2[2], peicesty)
pyl.show()
# 評論直方圖
commentsty = npy.arange(commentmin, commentmax, commentdst)
pyl.hist(data2[3], commentsty)
pyl.show()

價格直方圖:
這裏寫圖片描述
評論直方圖:
這裏寫圖片描述

6、分析與結論:

  可以看出價格區間在18元到38元中零食定價最多
  可以看出評論在0到400個評論的比較多


如有問題可以在下留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章