数据探索的目的是及早发现数据的一些简单规律或特征,数据清洗的目的是留下可靠数据,避免脏数据的干扰。这两者没有严格的先后顺序,经常在一个阶段进行。
数据探索的核心是:
1、数据质量分析(跟数据清洗密切联系)
2、数据特征分析(分布、对比、周期性、相关性、常见统计量等)
数据清洗可以按如下步骤进行:
1、缺失值处理(通过describe与len直接发现、通过0数据发现)
2、异常值处理(通过散点图发现)
一般遇到缺失值 ,处理方式为(删除、插补、不处理) ;
插补的方式主要有:均值插补、中位数插补、众数插补、固定值插补、最近数据插补、回归插补、拉格朗日插值、牛顿插值法、分段插值等等。
遇到异常值,一般处理方式为视为缺失值、删除、修补(平均数、中位数等等)、不处理。
#导入数据
import pymysql
import numpy as npy
import pandas as pda
import matplotlib.pylab as pyl
conn=pymysql.connect(host='localhost',user='root',passwd='123456',db='dd')
sql='select * from jd'
data=pda.read_sql(sql,conn)
#print(data.describe())
#数据清洗
#发现缺失值
x=0
data['price'][(data['price']<=0)]=None
for i in data.columns:
for j in range(len(data)):
if(data[i].isnull())[j]:
data[i][j]='179'
x+=1
print(x)
#异常值处理
#画散点图()
#得到价格
data2=data.T
price=data2.values[3]
#得到评论数据
comment=data2.values[4]
pyl.plot(price,comment,'o')
pyl.show()
#评论异常<60,价格异常>100000
line=len(data.values)#行数
col=len(data.values[0])#列数
da=data.values
for i in range(0,line):
for j in range(0,col):
if(da[i][3]>100000):
print(da[i])
da[i][3]=179
if(da[i][4]<60):
print(da[i])
da[i][4]=100
da1=da.T
price=da1[3]
comment=da1[4]
pyl.plot(price,comment,'o')
pyl.show()
#分布分析
pricemax=da1[3].max()
print('最大值:'+str(pricemax))
pricemin=da1[3].min()
print('最小值:'+str(pricemin))
commentmax=da1[4].max()
commentmin=da1[4].min()
#极差:最大值-最小值
pricerg=pricemax-0
commentrg=commentmax-commentmin
#组距:极差/组数
pricedst=pricerg//12
commentdst=commentrg/12
#话价格的直方图
pricesty=npy.arange(pricemin,pricemax,pricedst)
pyl.hist(da1[4],pricesty)
pyl.show()
#画评论直方图
commentsty=npy.arange(commentmin,commentmax,commentdst)
pyl.hist(da1[4],commentsty)
pyl.show()
数据集成:
数据集成一般是把不同开源的数据放到一起。但是来自多个地方的数据一定要做好实体识别与冗余属性识别,避免数据整合错误及数据重复。
>>> a=numpy.array([[1,5,6],[5,6,3]])
>>> b=numpy.array([[56,6,3],[65,4,5]])
>>> c=numpy.concatenate((a,b))
>>> c
array([[ 1, 5, 6],
[ 5, 6, 3],
[56, 6, 3],
[65, 4, 5]])
数据变换
数据规范化
import pymysql
import pandas as pda
import numpy as npy
conn=pymysql.connect(host='localhost',user='root',passwd='123456',db='dd')
sql='select price from jd'
data=pda.read_sql(sql,conn)
#离差标准化
data2=(data-data.min())/(data.max()-data.min())
#print(data2)
#标准差标准化
data3=(data-data.mean())/data.std()
print(data3)
#小数定标规范化
k=npy.ceil(npy.log10(data.abs().max()))#ceil()进一取整
data4=data/10**k
离散化
#连续型数据离散化
#等宽离散化
data5=data['price'].copy()
data6=data5.T
data7=data6.values
#k=3#份数
#c1=pda.cut(data7,k,labels=['便宜','始终','贵'])#参数(数据,划分的区间k,标签labels=['','',.....])
#print(c1)
#非等宽离散化
#pda.cut(数据,[数字1,数字2,数字3。。])范围为[数字1,数字2】等
c2=pda.cut(data7,[0,50,100,300,500,2000,data7.max()],labels=['非常便宜','便宜','始终','有点贵','很贵','非常贵'])
print(c2)
属性构造
#属性构造
import pymysql
import pandas as pda
import numpy as npy
#import openpyxl
conn=pymysql.connect(host='localhost',user='root',passwd='123456',db='dd')
sql='select * from jd'
data8=pda.read_sql(sql,conn)
#print(data8)
ch=data8[u'comment']/data8['price']#价评比
data8['价评比']=ch
file='E:/programCode/jd.xlsx'
data8.to_excel(file,index=False)
数据规约
1、属性规约 2、数值规约
#主成分分析
from sklearn.decomposition import PCA
import pymysql
import pandas as pda
import numpy as npy
conn=pymysql.connect(host='localhost',user='root',passwd='123456',db='dd')
sql='select price,comment from jd'
data9=pda.read_sql(sql,conn)
ch=data9[u'comment']/data9['price']#价评比
data9['价评比']=ch
#--主成份分析进行中--
pcal=PCA()
pcal.fit(data9)
#返回模型中的各个特征量
tzl=pcal.components_#特征量
#各个成分中各自方差百分比,贡献率
rate=pcal.explained_variance_ratio_#百分比
pca2=PCA(2)#参数为希望得到的维数
pca2.fit(data9)#加载数据
reduction=pca2.transform(data9)#降维
tzl=pca2.components_
print(reduction)
recovery=pca2.inverse_transform(reduction)#恢复
print(recovery)