标签: weighted-average

如何计算分数?

这个问题与逻辑比任何编程语言更相关.如果问题不适合论坛,请告诉我,我会删除它.

我必须编写一个逻辑来计算博客奖励网站的博客分数.博客可能会被提名为多个奖项类别,并由评审团进行同行评审或评级为-1至5级(-1表示他们完全不喜欢的博客).现在,一个或多个陪审员可以对博客进行评级.计算博客最终得分时的一个标准是,如果博客被更多人评为肯定,那么它应该获得更多的权重(反之亦然).类似地,即使是一个陪审员,评分为-1的博客也应该影响其得分(-1在这里是一种否决权).最后,我还希望根据博客的Technorati等级获得额外的分数(以便最终得分基于陪审员评级+ Technorati排名的组合).

示例:博客在A类中被评为6位陪审员.2分为3分,3分为2分,1分为4分.(我曾将得分计算为(2*3 + 3*2 + 1*4)/ 6 = 16/6 = 2.67得到加权平均但我对此不满意,主要是因为当陪审员评级为-1时它不能很好地工作.此外,我还需要添加Technorati排名等级标准.

你能帮我决定计算最终得分的最佳方法(保持评级方法与上面相同,现在不能改变)?

logic blogs weighted-average

9
推荐指数
2
解决办法
2508
查看次数

如何在Python中聚合时间序列?

我有两个不同的时间序列,部分重叠的时间戳:

import scikits.timeseries as ts
from datetime import datetime 
a = ts.time_series([1,2,3], dates=[datetime(2010,10,20), datetime(2010,10,21), datetime(2010,10,23)], freq='D')
b = ts.time_series([4,5,6], dates=[datetime(2010,10,20), datetime(2010,10,22), datetime(2010,10,23)], freq='D')
Run Code Online (Sandbox Code Playgroud)

代表以下数据:

Day:   20. 21. 22. 23.
  a:    1   2   -   3
  b:    4   -   5   6
Run Code Online (Sandbox Code Playgroud)

我想用系数a(0.3)和b(0.7)计算每天的加权平均值,同时忽略缺失值:

Day 20.: (0.3 * 1 + 0.7 * 4) / (0.3 + 0.7) = 3.1 / 1.  = 3.1
Day 21.: (0.3 * 2          ) / (0.3      ) = 0.6 / 0.3 = 2
Day 22.: (          0.7 * 5) …
Run Code Online (Sandbox Code Playgroud)

python datetime time-series weighted-average scikits

9
推荐指数
1
解决办法
1465
查看次数

使用pandas数据帧计算加权平均值

我有以下pandas数据帧:

data_df = pd.DataFrame({'ind':['la','p','la','la','p','g','g','la'],
                        'dist':[10.,5.,7.,8.,7.,2.,5.,3.],
                        'diff':[0.54,3.2,8.6,7.2,2.1,1.,3.5,4.5],
                        'cas':[1.,2.,3.,4.,5.,6.,7.,8.]})  
Run Code Online (Sandbox Code Playgroud)

那是

    cas  diff  dist ind
0    1  0.54    10  la
1    2  3.20     5   p
2    3  8.60     7  la
3    4  7.20     8  la
4    5  2.10     7   p
5    6  1.00     2   g
6    7  3.50     5   g
7    8  4.50     3  la
Run Code Online (Sandbox Code Playgroud)

我需要计算权重在'dist'列中的所有列的加权平均值,并将值分组为'ind'.

例如'ind'='la'和'diff'列:

((10*0.54)+(8.60*7)+(7.20*8)+(4.50*3))/(10+7+8+3) = 4.882143
Run Code Online (Sandbox Code Playgroud)

我想要获得的结果如下

        cas      diff
ind                    
 g    6.714286  2.785714
 la   3.107143  4.882143
 p    3.750000  2.558333
Run Code Online (Sandbox Code Playgroud)

这是通过将每个列的每个值乘以'dist'列中的相应值得到的,将结果与相同的'ind'相加,然后将结果除以与相同ind相对应的所有'dist'值的总和.

我认为这可能是数据帧'groupby'方法完成的一项简单任务,但实际上它有点棘手.

有人可以帮帮我吗?

python weighted-average pandas

9
推荐指数
1
解决办法
5866
查看次数

类似的代码(对于指数加权偏差)在Haskell中比在Python中慢

我在python3和Haskell(编译)中实现了指数加权移动平均值(ewma).这需要大约相同的时间.但是当这个函数被应用两次时,haskell版本会无法预测地减慢速度(超过1000次,而python版本仅慢2倍).

Python3版本:

import numpy as np
def ewma_f(y, tau):
    a = 1/tau
    avg = np.zeros_like(y)
    for i in range(1, len(y)):
        avg[i] = a*y[i-1]+(1-a)*avg[i-1]
    return avg
Run Code Online (Sandbox Code Playgroud)

Haskell列表:

ewmaL :: [Double] -> Double -> [Double]
ewmaL ys tau = reverse $ e (reverse ys) (1.0/tau)
    where e [x] a    = [a*x]
          e (x:xs) a = (a*x + (1-a)*(head $ e xs a) : e xs a)
Run Code Online (Sandbox Code Playgroud)

Haskell与数组:

import qualified Data.Vector as V
ewmaV :: V.Vector Double -> Double -> V.Vector …
Run Code Online (Sandbox Code Playgroud)

python performance haskell weighted-average

9
推荐指数
1
解决办法
313
查看次数

PyTorch 张量的加权平均值

我有两个形式为 [y11, y12] 和 [y21, y22] 的 Pytorch 张量。如何获得两个张量的加权平均值?

python numpy weighted-average pytorch tensor

9
推荐指数
1
解决办法
1万
查看次数

如何计算加权测量之间的标准差?

我有几个加权值,我正在加权平均值.我想使用加权值和加权平均值来计算加权标准差.如何修改典型标准偏差以包括每次测量的权重?

这是我正在使用的标准差公式.

在此输入图像描述

当我只使用' x '的每个加权值和'\ bar { x }' 的加权平均值时,结果似乎小于它应该的值.

statistics weighted-average standard-deviation

7
推荐指数
1
解决办法
1万
查看次数

在忽略NaN的情况下采用np.average?

我有一个形状矩阵(64,17)对应时间和纬度.我想采用加权纬度平均值,我知道np.average可以做,因为,与我用来平均经度的np.nanmean不同,权重可以在参数中使用.但是,np.average不会像np.nanmean那样忽略NaN,所以我每行的前5个条目都包含在纬度平均值中,并使整个时间序列充满NaN.

有没有一种方法可以在没有将NaN包含在计算中的情况下采用加权平均值?

file = Dataset("sst_aso_1951-2014latlon_seasavgs.nc")
sst = file.variables['sst']
lat = file.variables['lat']

sst_filt = np.asarray(sst)
missing_values_indices = sst_filt < -8000000   #missing values have value -infinity
sst_filt[missing_values_indices] = np.nan      #all missing values set to NaN

weights = np.cos(np.deg2rad(lat))
sst_zonalavg = np.nanmean(sst_filt, axis=2)
print sst_zonalavg[0,:]
sst_ts = np.average(sst_zonalavg, axis=1, weights=weights)
print sst_ts[:]
Run Code Online (Sandbox Code Playgroud)

输出:

[ nan nan nan nan nan
 27.08499908 27.33333397 28.1457119 28.32899857 28.34454346
 28.27285767 28.18571472 28.10199928 28.10812378 28.03411865
 28.06411552 28.16529465]

[ nan nan nan nan nan nan nan nan nan nan nan …
Run Code Online (Sandbox Code Playgroud)

python numpy latitude-longitude weighted-average

7
推荐指数
3
解决办法
8687
查看次数

在data.frame中按组显示加权平均值

有关命令的问题byweighted.mean已经存在,但没有一个能够帮助解决我的问题。我是R语言的新手,比起编程,我更习惯于数据挖掘语言。

我有一个数据框,其中包含每个人(观察/行)的收入,教育水平和样本权重。我想按教育程度计算收入的加权平均值,并且希望将结果与原始数据框的新列中的每个人相关联,如下所示:

obs income education weight incomegroup
1.   1000      A       10    --> display weighted mean of income for education level A
2.   2000      B        1    --> display weighted mean of income for education level B
3.   1500      B        5    --> display weighted mean of income for education level B
4.   2000      A        2    --> display weighted mean of income for education level A
Run Code Online (Sandbox Code Playgroud)

我试过了:

data$incomegroup=by(data$education, function(x) weighted.mean(data$income, data$weight))    
Run Code Online (Sandbox Code Playgroud)

这是行不通的。加权均值是通过某种方式计算的,并显示在“收入组”列中,但是对于整个集合而不是按组或仅对于一个组,我不知道。我阅读了有关软件包的内容plyraggregate但似乎并没有做我感兴趣的事情。

ave{stats}命令给出的正是我要查找的内容,但仅出于简单的意思: …

r weighted-average

7
推荐指数
3
解决办法
7934
查看次数

熊猫滚动加权平均值

我想将加权滚动平均值应用于大型时间序列,设置为 pandas 数据框,其中每天的权重都不同。这是数据框的子集

DF:

Date        v_std  vertical                  
2010-10-01  1.909   545.231
2010-10-02  1.890   538.610
2010-10-03  1.887   542.759
2010-10-04  1.942   545.221
2010-10-05  1.847   536.832
2010-10-06  1.884   538.858
2010-10-07  1.864   538.017
2010-10-08  1.833   540.737
2010-10-09  1.847   537.906
2010-10-10  1.881   538.210
2010-10-11  1.868   544.238
2010-10-12  1.856   534.878
Run Code Online (Sandbox Code Playgroud)

我想使用 v_std 作为权重来获取垂直列的滚动平均值。我一直在使用加权平均函数:

def wavg(group, avg_name, weight_name):
    d = group[avg_name]
    w = group[weight_name]
    try:
        return (d * w).sum() / w.sum()
    except ZeroDivisionError:
        return d.mean()
Run Code Online (Sandbox Code Playgroud)

但我不知道如何实现滚动加权平均值。我认为它类似于

df.rolling(window = 7).apply(wavg, "vertical", "v_std")
Run Code Online (Sandbox Code Playgroud)

或利用rolling_apply?或者我必须一起编写一个新函数吗?谢谢你!

python weighted-average pandas

6
推荐指数
1
解决办法
2万
查看次数

熊猫加权统计数据

我有一个如下所示的数据框。

重列本质上代表每个项目的频率,因此对于每个位置,权重总和将等于 1

请记住,这是一个简化的数据集,实际上有超过 100 列,例如value

d = {'location': ['a', 'a', 'b', 'b'],'item': ['x', 'y', 's', 'v'], 'value': [1, 5, 3, 7], 'weight': [0.9, 0.1, 0.8, 0.2]}
df = pd.DataFrame(data=d)
df
  location item value weight
0     a     x     1     0.9
1     a     y     5     0.1
2     b     s     3     0.8
3     b     v     7     0.2
Run Code Online (Sandbox Code Playgroud)

我目前有代码可以计算未加权数据的分组中位数、标准差、偏斜和分位数,我使用以下代码:

df = df[['location','value']]

df1 = df.groupby('location').agg(['median','skew','std']).reset_index()

df2 = df.groupby('location').quantile([0.1, 0.9, 0.25, 0.75, 0.5]).unstack(level=1).reset_index()

dfs = df1.merge(df2, how …
Run Code Online (Sandbox Code Playgroud)

python mean weighted-average dataframe pandas

6
推荐指数
1
解决办法
2275
查看次数