【问题标题】:Wind DIrection Average in python. Not numericalpython中的风向平均值。不是数字
【发布时间】:2021-12-12 01:05:13
【问题描述】:

我有这样的数据:

2010-08-27 00:00:00 SW
2010-08-27 00:15:00 SSW
2010-08-27 00:30:00 SSW
2010-08-27 00:45:00 SSE
2010-08-27 01:00:00 NNE

等等。

所以这是我的问题,如何在 python 中创建一个函数来计算所有数据的平均值,pandas 中的正常含义不起作用,因为该列是一个字符串。也许 numpy 有一些向量选项来计算这个。 希望可以有人帮帮我。非常感谢!

【问题讨论】:

  • 您希望如何计算平均值?例如,“N”和“S”的含义是什么?您的样本数据的平均值是多少?
  • 您可能会将 SW/SSW/... 映射到度数,然后计算平均值,然后可以选择映射回一个方向。
  • 您可能还需要风速来计算平均值,不是吗?因为来自南方的风和来自北方的风并不总是以相同的速度发生,所以平均风向需要由速度加权。
  • @not_speshal 指出了一个好问题,我第一次脸红时甚至都没有想到。我认为“平均风向”没有任何意义。如果你有 N、S、E、W 四个读数,平均值是多少?也许模式会是一个更有用的衡量标准。计算条目并找到最常见的
  • 这个库将为您提供一种在姓名和学位之间切换的简单方法:pypi.org/project/compassheadinglib

标签: python database dataframe math


【解决方案1】:

这是一个重要的问题,因为您实际上是在尝试计算循环域上的均值,而不是区间。 Directional Statistics 的整个领域都致力于解决此类问题。

为了能够计算平均值,您需要为角度选择一个范围,例如 [0°,360°]。如果您的数据由 30° 和 330° 组成,并且您取这些数字的平均值,得到 (30°+330°)/2 = 180°,但直觉上这两个数字的平均值应该是 0°。你可以通过仔细选择你的范围来解决这个问题。假设在 [-180°, 180°] 范围内取角度,然后我们的两个数据点变为 30° 和 -30°,给出 0° 的合理平均值。

最简单的事情可能是计算数据的模式。哪个方向出现最多?这不取决于你采取的范围。实际上,您根本不需要计算角度。只需找出出现次数最多的字符串“NNE”、“SW”等即可。

如果你想要更复杂一点的东西,那么首先采取模式,给你一个开始的方向。假设“SSW”= 210° 是最常见的。然后选择您的范围为 [30°,390°] 任一侧的 180°。取这个范围内的所有角度并计算平均值。这仍然会留下您在完全相反的方向上进行测量的问题。我们将 NNE 归类为 30° 还是 390°?最简单的就是拒绝这个值。

如果您也有风速数据,则完全不同的方法。所以你的数据就像 SSW,3 mph。这变得更容易了。只需将每个读数映射到平面 x = 3 cos(210°)、y = 3 sin(210°) 上的一个点,然后取这些点的平均值。结果将是平面上的另一个点,您可以将其转换回速度和裸露。

关于该主题的先前 SO 问题: How do you calculate the average of a set of circular data?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2020-04-04
    • 2016-08-01
    • 2018-11-05
    • 2022-12-10
    • 2020-09-20
    相关资源
    最近更新 更多