python数据探索与数据清洗

      数据探索的目的是及早发现数据的一些简单规律或特征,数据清洗的目的是留下可靠数据,避免脏数据的干扰。这两者没有严格的先后顺序,经常在一个阶段进行。
数据探索的核心是: 
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

 

离散化

  1. 等宽离散化
  2. 等频率离散化(相同数量的放在一个区间里面)
  3. 一维聚类离散化()

#连续型数据离散化

#等宽离散化

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)

猜你喜欢

转载自blog.csdn.net/xx20cw/article/details/84454356