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个评论的比较多


如有问题可以在下留言

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