上一篇: 数据探索与数据清洗
1、 简单变换
简单变换
- 1.数据变换的目的是将数据转化为更方便分析的数据。
- 2.简单变换常使用函数变换的方式进行,常见的函数变换包括:开方、平方、对数等
2、数据规范化
# -*- coding: utf-8 -*-
# --------------------------------------
# @Time : 2019/10/16 14:26
# @Author : hxf
# @Email : 1870212598@qq.com
# @File : shuju4.py
# Description :数据转换
# ----------------------------------
'''
数据转换
1、简单变换
1.数据变换的目的是将数据转化为更方便分析的数据。
2.简单变换常使用函数变换的方式进行,常见的函数变换包括:开方、平方、对数等
2、数据规范化
标准化
1.离差标准化--消除量纲(单位)影响以及变异大小因素的影响。(最小-最大标准化)
x1=(x-min)/(max-min)
2.标准差标准化--消除单位影响以及自身变异影响。(零-均值标准化)
x1=(x-平均数)/标准差
3.小数定标规范化--消除单位影响
x1=x/10**(k) k=log10(x的绝对值的最大值)
3、离散化
1.等宽离散化
2.等频率离散化
3.一维聚类离散化
4、属性构造
'''
import pymysql
import pandas as pd
import numpy as np
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='csdn') # 连接数据库
sql = 'select price,comment from taob' # sql语句
data = pd.read_sql(sql, conn) # 读入sql数据
# print(data.describe())
'''
数据描述的结果:
price comment
count 9616.00000 9616.000000
mean 64.49324 562.239601
std 176.10901 6078.909643
min 0.00000 0.000000
25% 20.00000 16.000000
50% 36.00000 58.000000
75% 66.00000 205.000000
max 7940.00000 454037.000000
'''
# 1、离差标准化
data2=(data-data.min())/(data.max()-data.min())
# print(data2)
'''
离差标准化的结果:
price comment
0 0.006297 0.005676
1 0.014610 0.631429
2 0.011083 0.001249
3 0.014861 0.067536
... ... ...
9613 0.000630 0.002724
9614 0.000126 0.016078
9615 0.011335 0.016626
'''
# 2、标准差标准化,最终得到一组平均数为0、标准差为1的数据
data3=(data-data.mean())/data.std()
# print(data3)
'''
标准差标准化的输出结果:
price comment
0 -0.082297 0.331435
1 0.292471 47.069257
2 0.133478 0.000783
3 0.303827 4.951835
... ... ...
9613 -0.337821 0.111000
9614 -0.360534 1.108383
9615 0.144835 1.149344
'''
# 3、小数定标规范化,其实就是移位操作
data4=data/10**(np.ceil(np.log10(data.abs().max())))
# print(data4)
'''
小数定标规范化的结果:
price comment
0 0.0050 0.002577
1 0.0116 0.286692
2 0.0088 0.000567
3 0.0118 0.030664
... ... ...
9613 0.0005 0.001237
9614 0.0001 0.007300
9615 0.0090 0.007549
'''
3、离散化
# 连续型数据离散化
# 等宽离散化
data5=data[u"price"].copy()
# print(data5)
data6=data5.T
data7=data6.values
# print(data7)
'''
data7:[ 50 116 88 ... 5 1 90]
'''
k=3 # 分成3份
c1=pd.cut(data7,k,labels=["便宜","适中","贵"]) # cut(data,k,labels)函数的用法:等分数据,参数为数据、份数、标签
# print(c1)
'''
结果:
[便宜, 便宜, 便宜, 便宜, 便宜, ..., 便宜, 便宜, 便宜, 便宜, 便宜]
Length: 9616
Categories (3, object): [便宜 < 适中 < 贵]
'''
# 非等宽离散化
k=[0,50,100,300,500,2000,data7.max()]
c2=pd.cut(data7,k,labels=["非常便宜","便宜","适中","有点贵","很贵","非常贵"])
print(c2)
'''
结果:
[非常便宜, 适中, 便宜, 适中, 非常便宜, ..., 非常便宜, 非常便宜, 非常便宜, 非常便宜, 便宜]
Length: 9616
Categories (6, object): [非常便宜 < 便宜 < 适中 < 有点贵 < 很贵 < 非常贵]
'''
4、属性构造
# 4、属性构造
import pymysql
import pandas as pd
import numpy as np
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='csdn') # 连接数据库
sql = 'select * from myhexun' # sql语句
data8 = pd.read_sql(sql, conn) # 读入sql数据
# print(data8)
ch=data8[u'comment']/data8['hits'] # 评点比
# print(ch)
'''
评点比结果:
0 0.000000
1 0.003165
2 0.000000
...
5694 0.000000
5695 0.000000
5696 1.111111
Length: 5697, dtype: float64
'''
data8[u"评点比"]=ch
print(data8)
'''
属性构造结果:
id name ... comment 评点比
0 1 时寒冰:想念鲁比(随笔) ... 0 0.000000
1 2 老时与书 ... 1 0.003165
2 3 私密写真集,看后请删除(仅限量发售铁杆订户) ... 0 0.000000
3 4 时寒冰:私密写真集,看后请删除(仅限量发售铁杆订户) ... 1 0.001339
4 5 特朗普一蠢全球股市就大涨 ... 16 0.003433
5 6 时寒冰:为何特朗普一蠢全球股市就大涨 ... 0 0.000000
...
'''
file="data/hexun.xls"
data8.to_excel(file,index=False)
下一篇:数据规约