随着时间的推移,我在做什么呢?

2024-05-23 15:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的很喜欢统计学,但已经6年多没上过这门课了。我很难弄清楚我需要什么样的测试,以及解决这类问题的最佳numpy/scipy/R函数。在

我有一个访问者表及其相应的属性(例如“Browser=Mozilla,referer=Google”)以及每个访问者的可变值(例如$5),这些值随时间分组到数据点中。在

我的目标是:

A)找出最重要的财产家庭,并对家庭的“重要性”进行评分

我想得出一个结论的例子*:

Referrer has 10x larger effect size upon value-per-visitor than Browser
=> PropertyFamily('browser').significance = 1
=> PropertyFamily('referrer').significance = 10

以及

B)找出家庭中最显著的属性,并给出显著性得分。在

我想得出一个结论:

^{pr2}$

我的问题是:

1)是否有numpy/scipy/R函数使我的生活更轻松?在

2)对方差分析(ANOVA)和方差分析有更多了解的人能否提供反馈?我不确定我是否做对了,可能会遗漏一些简单的东西。请确认或更正。

请注意,这些数组是过去30天内的数组(命中、值、天数)。例如,如果周一Mozilla的价值出现了一个较大的峰值(相对于基线),而在周二Mozilla的价值下降了(低于基线),我希望Mozilla显示为一个“重要的”属性(而不是峰值/下降相互抵消)

映射/还原之前的输入数据示例:

data = {
'baseline': [(hits, value, day) for hits, value, day in last_thirty_days('baseline')],
'browser': {
  'mozilla': [(hits, value, day) for hits, value, day in last_thirty_days('browser', 'mozilla')],
  ... etc ...
  }
}
... etc ...

这是我当前的代码——它运行在Dumbo/Hadoop上,并提供了一个“重要性”的数字,我基本上是为这个数字发明了公式。虽然我的公式是有效的,并且给出了有意义的数据,但我的“显著性”值并没有很好地定义(一个“重要的”属性通常会有一个“>;=100,但是这会随着数据集的大小而变化),我知道这可能有一个“真正的公式”。在

# Runs after each (hits, value, date) tuple has been grouped
# into corresponding "plot points", as they would appear on a graph
pp = PlotPoint(property, date, hits, value)
pp.epc = float(pp.value/pp.hits) if pp.hits else 0

# Finds PlotPoint('baseline', date)
# if pp = PlotPoint('firefox', '1-1-10')
#  then pp.baseline == PlotPoint('baseline', '1-1-10')
baseline = pp.baseline()
if baseline.hits == 0:
    volume_ratio = 0 
else:
    volume_ratio = round(100*pp.hits/baseline.hits)
value_ratio = baseline.epc - pp.epc

# Make up a significance value --
# e.g. (10% of visitors * ($1 delta from baseline))^2
pp.significance = math.sqrt(volume_ratio * value_ratio **2)

# OK, we have values for each plotpoint, now sum them up
# to get values for the whole property (over a 30day period) 
pps = property.plotpoint_set.all()
property.hits = sum([p.hits for p in pps])
property.value = sum([p.value for p in pps])
property.epc = property.value/property.hits
value_delta = baseline.epc - property.epc

# Make up a significance for the Property, based on each point's significance
property.significance = math.log(sum(
                [sss.significance**2 for sss in pps]
                )*abs(value_delta)+1)

提前谢谢!在


Tags: 数据inmozillafor属性valuepropertypp
1条回答
网友
1楼 · 发布于 2024-05-23 15:32:00

AFAIK,numpy/scipy中提供的统计测试是相当基本的。您可能需要研究R,这是一种或多或少专用于统计的语言,并且有很多高级函数可用。在

另外,我不认为马诺瓦真的是你想做的。MANOVA是指当你有几个相互作用的因变量时。这只是一个方差分析。在

在R中可以做什么的示例:

bybrowser = lm(value ~ browser, data=visitors)
anova(bybrowser)
byreferrer = lm(value ~ referrer, data=visitors)
anova(byreferrer)
byreferrerandbrowser = lm(value ~ browser * referrer, data=visitors)
anova(byreferrerandbrowser)

请注意,这一切都假设您的值是正态分布的。您应该检查一下这个假设(hist(visitors$value)是个好的开始)。如果它们不是,要么找到一种方法使它们正常化(试着记录),要么使用适当的非参数测试。在

哦,最后,如果你想得到统计方面的建议,有一个姐妹网站专门为你服务:https://stats.stackexchange.com/

相关问题 更多 >