使用pandas模块实现数据的标准化操作
作者:也许会_hui 发布时间:2023-04-12 06:30:03
如下所示:
3σ 原则 | (u-3*σ ,u+3*σ ) |
离差标准化 | (x-min)/(max-min) |
标准差标准化 | (x-u)/σ |
小数定标标准化 | x/10**k k=np.ceil(log10(max(|x|))) |
1.3σ原则
u 均值
σ 标准差
正太分布的数据基本都分布在(u-3σ,u+3σ)范围内
其他的数据
import pandas as pd
import numpy as np
def three_sigma(se):
"""
自实现3σ原则,进行数据过滤
:param se:传进来的series结构数据
:return:去除异常值之后的series数据
"""
bool_id=((se.mean()-3*se.std())<se) & (se<(se.mean()+3*se.std()))
print(bool_id)
return se[bool_id]
#加载数据
detail=pd.read_excel('./meal_order_detail.xlsx')
#进行异常值处理
res=three_sigma(detail['amounts'])
print(detail.shape)
print(res.shape)
2.离差标准化
(x-min)/(max-min)
import pandas as pd
import numpy as np
def minmax_sca(data):
"""
离差标准化
param data:传入的数据
return:标准化之后的数据
"""
new_data=(data-data.min())/(data.max()-data.min())
return new_data
#加载数据
detail=pd.read_excel('./meal_order_detail.xlsx')
res=minmax_sca(detail[['amounts','counts']])
print(res)
data=res
bool_id=data.loc[:,'count']==1
print(data.loc[bool_id],'counts')
3.标准差标准化
(x-u)/σ
异常值对标准差标准化的影响不大
转化之后的数据--->均值0 标准差1
import pandas as pd
import numpy as np
def stand_sca(data):
"""
标准差标准化
:param data:传入的数据
:return:标准化之后的数据
"""
new_data=(data-data.mean())/data.std()
return new_data
#加载数据
detail=pd.read_excel('./meal_order_detail.xlsx')
res=stand_sca(detail[['amounts','counts']])
print(res)
print('res的均值:',res.mean())
print('res的标准差:',res.std())
4.小数定标标准化
x/(10^k)
k=math.ceil(log10(max(|x|)))
以10为底,x的绝对值的最大值的对数 最后进行向上取整
import pandas as pd
import numpy as np
def deci_sca(data):
"""
自实现小数定标标准化
:param data: 传入的数据
:return: 标准化之后的数据
"""
new_data=data/(10**(np.ceil(np.log10(data.abs().max()))))
return new_data
#加载数据
detail = pd.read_excel('./meal_order_detail.xlsx')
res = deci_sca(detail[['amounts', 'counts']])
print(res)
补充:pandas数据处理基础之标准化与标签数值化
fit(): Method calculates the parameters μ and σ and saves them as internal objects.
解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
transform(): Method using these calculated parameters apply the transformation to a particular dataset.
解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。
fit_transform(): joins the fit() and transform() method for transformation of dataset.
解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。 transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)
fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
Note:
必须先用fit_transform(trainData),之后再transform(testData)
如果直接transform(testData),程序会报错
如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
注意:StandardScaler().fit_transform(x,fit_params),fit_params决定标准化的标签数据,就是每个标准化的标杆数据,此参数不同,则每次标准化的过程则不同。
from sklearn import preprocessing
# 获取数据
cols = ['OverallQual','GrLivArea', 'GarageCars','TotalBsmtSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt'] ##选取列
x = data_train[cols].values
y = data_train['SalePrice'].values
x_scaled = preprocessing.StandardScaler().fit_transform(x) ##进行归一化
y_scaled = preprocessing.StandardScaler().fit_transform(y.reshape(-1,1))##先将y转换成一列,再进行归一
还有以下形式,和上面的标准化原理一致,都是先fit,再transform。
由ss决定标准化进程的独特性
# 先将数据标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler() ##
#用测试集训练并标准化
ss.fit(missing_age_X_train)##首先fit
missing_age_X_train = ss.transform(missing_age_X_train) #进行transform
missing_age_X_test = ss.transform(missing_age_X_test)
标签数值化
1.当某列数据不是数值型数据时,将难以标准化,此时要将数据转化成数据型形式。
数据处理前数据显示:
经过标签化数据处理
from sklearn import preprocessing
f_names = ['CentralAir', 'Neighborhood'] ##需要处理的数据标签
for x in f_names:
label = preprocessing.LabelEncoder()
data_train[x] = label.fit_transform(data_train[x]) ##数据标准化
处理之后变成:
2.当某列有对应的标签值时,即某个量对应相应确定的标签时,例如oldtown就对应1,sawyer就对应2,分类的str转换为序列类这时使用如下:
数据处理之前
利用转换:
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}#将标签对应数值
train_df['Title'] = train_df['Title'].map(title_mapping)#处理数据
train_df['Title'] = train_df['Title'].fillna(0)##将其余标签填充为0值
处理过后:
3.多个数据标签需要分列采用one_hot形式时,处理之前
处理之后
train_test.loc[train_test["Age"].isnull() ,"age_nan"] = 1 ##将标签转换成1
train_test.loc[train_test["Age"].notnull() ,"age_nan"] = 0##将此标签成为0
train_test = pd.get_dummies(train_test,columns=['age_nan']) ##columns决定哪几行分列处理,prefix参数是每列前缀
one_hot 形式转变成功。
来源:https://blog.csdn.net/g_optimistic/article/details/93162100
猜你喜欢
- 目录1. 序列2. 列表2.1 列表的特性2.1.1 列表的连接操作符和重复操作符2.1.3 列表的索引2.1.4 列表的切片2.1.5 列
- bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据
- 按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 代码如下:creat
- 本文实例讲述了Python列表list操作符。分享给大家供大家参考,具体如下:#coding=utf8''''
- 一、手指触屏,利用touchstart和touchend计算前后滑动距离,判断是上拉还是下滑。二、js中距离:pageY、clientY、o
- 本文实例讲述了python实现获取序列中最小的几个元素。分享给大家供大家参考。具体方法如下:import heapq import rand
- seek()方法在偏移设定该文件的当前位置。参数是可选的,默认为0,这意味着绝对的文件定位,它的值如果是1,这意味着寻求相对于当
- 目录一、线程基础以及守护进程二、线程锁(互斥锁)三、线程锁(递归锁)四、死锁五、队列六、相关面试题七、判断数据是否安全八、进程池 &
- 前言本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
- 这篇文章主要介绍了Python3的socket使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 本文旨在分类讲述执行计划中每一种操作的相关信息。数据访问操作 首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行
- QMainWindowQMainWindow类中比较重要的方法方法描述addToolBar()添加工具栏centralWidge()返回窗口
- 下列语句部分是Mssql语句,不可以在access中使用。SQL语句分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECL
- 实例如下所示:import osos.chdir("G:\Python1\Lib\site-packages\pytesser&q
- 什么是F型浏览?2006年4月,美国长期研究网站可用性的著名网站设计师杰柯柏·尼尔森(Jakob Nielsen)发表了一项《眼球轨迹的研究
- “看图购”beta版今日起正式在淘宝网上线了,域名是:http://go.taobao.com。从此您也可以像翻看杂志一样翻看女装的图片了,
- 使用字符串建立查询能加快服务器的解析速度吗?我记的在那儿看过,好像是说使用字符串建立SQL查询是有它的道理的,像这样:<%mySQL=
- 用于制作自动化微信聊天图片,通过图片生成段子视频根据一个txt文档input.txtL 一路走过来好热啊
- 本文实例讲述了Python使用crontab模块设置和清除定时任务操作。分享给大家供大家参考,具体如下:centos7下安装Python的p
- 一个单步的动作,用了这个脚本,就可以重复执行100遍1000遍。上面就是一个路径描边100遍的效果,吼吼~ 不知道大家明白用处没有?(以前老