# -*- coding: utf-8 -*-import pymysql
import numpy as npy
import pandas as pda
import matplotlib.pylab as pyl
import matplotlib.pyplot as plt#导入数据
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="123456",db="爬虫111")
sql="select * from taob"
data=pda.read_sql(sql,conn)
# print(type(data))
# print(data)
# print(data._values)
# print(data.axes)
# print(data.columns)
# print(data.index)
# print(data['price'].head(4))
# print(type(data['price'].isnull()))
# print(data['price'].isnull().head(4))
for i in range(len(data)):# print(data['price'].isnull()[i])if i==5:break#数据清洗,发现和处理缺失值
x = 0
# print(data.columns)
# print(len(data))
data["price"][(data["price"]==0)]=None
for i in data.columns: # data.columns:['title', 'link', 'price', 'comment']for j in range(len(data)): # len(data) 行数9616if(data[i].isnull())[j]: # 如果为False即插值data[i][j] = "64" # 空值插入64x += 1
# print(x)#异常值处理、找到异常值、画散点图(横轴:价格,纵轴:评论数)
data2=data.T
price=data2.values[2]
comt=data2.values[3]
plt.xlabel('price') #显示X坐标标签
plt.ylabel('comt') #显示Y坐标标签
pyl.plot(price,comt,"o")
pyl.show()
#可以看到有部分数据评论数过高,或许为热销商品或者存在刷评论,
# 还有一部分数据价格过高,甚至高达700,而一般书籍价格不会高过¥150。
# 对于这些异常值我们在作数据分析时一般不会考虑,删除或者改动这些异常值即可。
#处理异常数据,评论大于65,价格大于100都处理掉
line=len(data.values)
col=len(data.values[0])
da=data.values
# print(da[26])
newda=da[26]
newda=npy.row_stack((newda,da[26]))
# print("newda:", newda)
#删除处理法
x=0
for i in range(0,line):for j in range(0, col):if(da[i][3]>65):#评论数大于65continueelif(da[i][2]>100):#价格大于100continueelse:if(x==0):newda=da[i]else:newda=npy.row_stack((newda,da[i]))x+=1da2=newda.T
price=da2[2]
comt=da2[3]
plt.xlabel('price') #显示X坐标标签
plt.ylabel('comt') #显示Y坐标标签
pyl.plot(price,comt,"o")
pyl.show()#分布分析
#求最值
#计算极差
#组距:极差/组数
#绘制直方图#求最值
pricemax=da2[2].max()
pricemin=da2[2].min()
commentmax=da2[3].max()
commentmin=da2[3].min()
#极差
pricerg=pricemax-pricemin
commentrg=commentmax-commentmin
#组距
pricedst=pricerg/13 # 13个数据显示一个price
commentdst=commentrg/13# 绘制价格直方图:为了表明数据分布情况。通俗地说就是哪一块数据所占比例或者出现次数较高,哪一块出现概率低
# npy.arrange(最小, 最大, 组距)
pricesty = npy.arange(pricemin,pricemax,pricedst)
# print('pricesty',pricesty)
# print(type(pricesty))
# print(pricesty[1])
plt.xlabel('price') #显示X坐标标签
plt.ylabel('number') #显示Y坐标标签
pyl.hist(da2[2], pricesty)
pyl.show()#绘制评论数直方图
commentsty=npy.arange(commentmin, commentmax, commentdst) # arange(start,stop,step)
plt.xlabel('histcomt') #显示X坐标标签
plt.ylabel('histnumber') #显示Y坐标标签
pyl.title("histImage")
pyl.hist(da2[3],commentsty)
pyl.show()