Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫系列:日志规范化_Python_Pandas_Normalization - Fatal编程技术网

Python 熊猫系列:日志规范化

Python 熊猫系列:日志规范化,python,pandas,normalization,Python,Pandas,Normalization,我有一个熊猫系列,需要进行对数转换,使其成为正态分布。但是我还不能进行日志转换,因为有=0的值和低于1(0-4000)的值。因此,我想先对序列进行规范化。我听说过StandardScaler(scikit学习)、Z分数标准化和最小-最大标度(标准化)。 我想稍后对数据进行集群,哪种方法最好? StandardScaler和Z-score标准化使用均值、方差等。我可以在“尚未正常分布”的数据上使用它们吗?要转换为对数,您需要正值,因此将值的范围(-1,1]转换为标准化(0,1),如下所示 impo

我有一个熊猫系列,需要进行对数转换,使其成为正态分布。但是我还不能进行日志转换,因为有=0的值和低于1(0-4000)的值。因此,我想先对序列进行规范化。我听说过StandardScaler(scikit学习)、Z分数标准化和最小-最大标度(标准化)。 我想稍后对数据进行集群,哪种方法最好?
StandardScaler和Z-score标准化使用均值、方差等。我可以在“尚未正常分布”的数据上使用它们吗?

要转换为对数,您需要正值,因此将值的范围(-1,1]转换为标准化(0,1),如下所示

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.uniform(-1,1,(10,1)))
df['norm'] = (1+df[0])/2 # (-1,1] -> (0,1]
df['lognorm'] = np.log(df['norm'])
结果会产生类似于

          0      norm   lognorm
0  0.360660  0.680330 -0.385177
1  0.973724  0.986862 -0.013225
2  0.329130  0.664565 -0.408622
3  0.604727  0.802364 -0.220193
4  0.416732  0.708366 -0.344795
5  0.085439  0.542719 -0.611163
6 -0.964246  0.017877 -4.024232
7  0.738281  0.869141 -0.140250
8  0.558220  0.779110 -0.249603
9  0.485144  0.742572 -0.297636

如果您的数据在(-1;+1)范围内(假设您在问题中丢失了负数),那么日志转换可能不是您需要的。至少从理论角度来看,这显然是错误的

可能您的数据已经过预处理(处理不充分)?您能得到原始数据吗?为什么您认为日志转换会有帮助?


如果您不关心要做的有意义的事情是什么,您可以调用
log1p
,它与
log(1+x)
相同,因此将在(-1;∞).

1<值<1-即您的数据集为空?:-pMy数据从0到4000,低于1的值将通过日志转换变为负值。零也是一个问题,因为我将获得-inf,这将导致直方图出现问题