数据转换

这篇博客主要介绍了数据转换的几个关键步骤:从简单的数值变换,如开方和平方,到数据规范化处理,再到数据的离散化操作,以及如何构造新的属性来增强数据的分析能力。这些方法对于数据分析工作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


上一篇: 数据探索与数据清洗

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)

下一篇:数据规约

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值