我希望我已经正确地描述了我需要完成的工作。本质上,我需要“压缩”一系列数值,使所有数值更接近均值,但这些数值应根据它们与均值的距离进行相应的减少(或增加)…
数据框看起来像这样:
>>> 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中执行此任务的帮助将不胜感激。
回答:
总体思路是:
- 将均值平移到零。
- 重新缩放到新的标准差
- 平移到所需的均值(在这种情况下,是原始均值)
用伪代码来说,如果你的数值存储在变量x
中:
x.scaled = new.mean + (x - mean(x)) * new.SD/sd(x)
或者,对于特定情况,例如SD=1000且均值不变的情况:
x.scaled = mean(x) + (x - mean(x)) * 1000/sd(x)