node.js—如何转换一个值数组,使每个值更接近平均值,但在pyspark中具有类似形状的分布(即减少stdev)

svgewumm  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(382)

我希望我已经用正确的措辞描述了我需要做的工作。基本上,我需要“压缩”一系列的值,这样所有的值都更接近平均值,但是它们的值应该相对于它们与平均值的距离减小(或增大)。。。
Dataframe如下所示:

>>> df[['population', 'postalCode']].show(10)
+----------+----------+
|population|postalCode|
+----------+----------+
|      1464|     96028|
|       465|     96015|
|       366|     96016|
|      5490|     96101|
|       183|     96068|
|       569|     96009|
|       366|     96054|
|        90|     96119|
|       557|     96006|
|       233|     96116|
+----------+----------+
only showing top 10 rows

>>> df.describe().show()
+-------+------------------+------------------+
|summary|        population|        postalCode|
+-------+------------------+------------------+
|  count|              1082|              1082|
|   mean|23348.511090573014| 93458.60813308688|
| stddev|21825.045923603615|1883.6307236060127|
+-------+------------------+------------------+

总体平均数对我来说是正确的,但我需要它周围的方差更小。。。
希望这是有意义的,任何帮助执行这项工作,无论是在pyspark或node.js非常感谢。

omqzjyyz

omqzjyyz1#

总体思路是:
将平均值转换为零。
重新缩放到新的标准偏差
转化为期望的平均值(在本例中,为原始平均值)
在伪代码中,如果值存储在变量中 x :

x.scaled = new.mean + (x - mean(x)) * new.SD/sd(x)

或者,对于sd=1000且平均值不变的具体情况:

x.scaled = mean(x) + (x - mean(x)) * 1000/sd(x)

相关问题