一、相关理论:
数据变换主要包括:(1)简单函数变换。(2)数据规范化。(3)数据离散化。(4)属性构造。 等多种方式
1、简单函数变换的常见方法:平方、开方、对数、差分运算等。
2、数据规范化的常见方法:
(1)离差标准化(最小-最大标准化)--消除量纲(单位)影响以及变异大小因素的影响。(最小-最大标准化)
x1=(x-min)/(max-min)
(2)标准差标准化--消除单位影响以及变量自身变异影响。(零-均值标准化)
x1=(x-平均数)/标准差
(3)小数定标规范化--消除单位影响。
x1= x/10**(k)、k=log10(x的绝对值的最大值)
3、数据离散化的常见方法:
(1)等宽离散化。
(2)等频率离散化。
(3)一维聚类离散化。
4、属性构造即通过现有的一个或多个属性数据经过处理变成新的属性数据。
二、代码示例:
1、准备阶段:
(1)示例数据:本例使用的是某时间的淘宝商品数据,存储在MySQL数据库中(数据分享链接:https://pan.baidu.com/s/1SsSy-mxvCStxk4e2PYxB3A 提取码:tquy,将该文件从MySQL打开执行即可)。
(2)导入相关模块并读取数据库数据:
import pymysql
import pandas as pda
import numpy as npy
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="*****",db="sys")
sql="select price,comment from taob"
data=pda.read_sql(sql,conn)
2、数据标准化:
(1)离差标准化:
#离差标准化(最小-最大标准化 ) data.max()/min每一列的最大最小值
data2=(data-data.min())/(data.max()-data.min())
(2)标准差标准化:
#标准差标准化(零-均值标准化)
data3=(data-data.mean())/data.std()
(3)小数定标标准化:
#小数定标规范化
#npy.ceil()方法:进一取整,如3.1取整为4,3.0取整为3,3.6取整为4
k=npy.ceil(npy.log10(data.abs().max()))
data4=data/10**k
3、数据离散化:
主要使用pandas.cut方法,参数为:数据、区间信息(可以是个数也可以是具体的区间数组)、区间标签(注意数量与前对应)。
(1)等宽离散化:
#等宽离散化
data5=data[u"price"].copy()
data6=data5.T
data7=data6.values
k=3 #区间个数
c1=pda.cut(data7,k,labels=["便宜","适中","贵"]) #labels:标签
结果c1:可以注意到数据以标签来表示
(2)非等宽离散化:
k=[0,50,100,300,500,2000,data7.max()] #数组中的数组成了区间,0到50、50到100.....2000到最大值。
c2=pda.cut(data7,k,labels=["非常便宜","便宜","适中","有点贵","很贵","非常贵"])
结果c2:
4、属性构造:重新建立一个python文件,需要的数据分享:链接:https://pan.baidu.com/s/1cOVg4Wjv2YEy6JhRZvCBpw
提取码:vsz6 将其导入至mysql数据库中即可,程序代码如下:
import pymysql
import pandas as pda
import numpy as npy
import xlwt
#连接数据库并获取数据
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="1996haha",db="sys")
sql="select * from myhexun"
data=pda.read_sql(sql,conn)
#构造为一个新的属性:评点比
ch=data[u"comment"]/data["hits"]
#将新属性写入数据框变量中
data[u"评点比"]=ch
#讲新的数据写入规定路径的excel表中
file="F:/hexun.xls"
data.to_excel(file,index=False)
即可看到在相应目录出现了生成的excel表:
可以通过查看评点比判断该片文章是否有刷评论现象。