FoxThinking #13: 节气差异

by SouthFox

2026-01-11

我一直有一本小台历,每天出门都会把当天的那一页扯下来放到包里,所以对于节气这事我还是一直有留意到的。 最近在想起源于黄河流域的二十四节气是不是一个带有定域性质(或者说中心主义)的发明呢?所以这周点了一 点点数据科学的技能点用以分析其他区域和黄河流域节气的相关性。

节气 diff

首先是要获取到数据,找寻了一番发现这家 Free Open-Source Weather API | Open-Meteo.com 服务挺不 错的不需要 apikey 就能直接使用。没看到捐款通道,似乎是通过商业使用收费来维持运营。

使用时感叹这真是羡煞古人了,这种天文数据以前可是被精英权贵老登死守的,但在现在,一般路过爱好 者就能得到。

得到数据后就要开始数据分析了,网上搜了搜看看两组数据的相关性怎么计算,看着蹦出来的皮尔逊相关系数、斯皮尔曼 相关系数、切比雪夫距离相关概念让脑子都有点懵了。之后还是贯彻一下惰性求值学习法,先直接用上,背后的相关概念 等之后有时间在琢磨吧。

实际执行上就直接选择用 python 这边的生态了,就算我这个数据科学门外汉也听说过 pandasscipy 这两个 包。不过对于语言我就选择使用 hylang 了,因为我已经离不开 -> 了,现在分析功能代码是这样子 1

(defn analyze [df-a df-b lag]
  (let [combined (pd.concat [(.rename df-a :columns {"temperature_2m_mean" "dengfeng"})
                             (.rename df-b :columns {"temperature_2m_mean" "local"})]
                            :axis 1)]
    (for [day (range (- lag) (+ lag 1))]
      (let [shifted (.shift (get combined "dengfeng") day)
            correlation (.corr shifted (get combined "local") :method "spearman")]
        (print f"登封 {day} 天对比 local: {(.round correlation 6)}")))))

节气的基准位置根据周礼选择了登封观星台(经纬度 113.15 34.41),其它地方的经纬度可以通过 百度地图-坐标拾取器 网页 应用选择。

然后是小小地分析一下数据:

# 呼和浩特
└> hy main.hy 111.76 40.85
登封 -5 天对比 local: 0.91145
登封 -4 天对比 local: 0.916761
登封 -3 天对比 local: 0.925061
登封 -2 天对比 local: 0.938778
登封 -1 天对比 local: 0.953031
登封 0 天对比 local: 0.953127
登封 1 天对比 local: 0.942574
登封 2 天对比 local: 0.932105
登封 3 天对比 local: 0.922881
登封 4 天对比 local: 0.916365
登封 5 天对比 local: 0.912312
# 广州
└> hy main.hy 113.27 23.14
登封 -5 天对比 local: 0.811673
登封 -4 天对比 local: 0.813528
登封 -3 天对比 local: 0.81591
登封 -2 天对比 local: 0.821631
登封 -1 天对比 local: 0.834465
登封 0 天对比 local: 0.854958
登封 1 天对比 local: 0.87554
登封 2 天对比 local: 0.885265
登封 3 天对比 local: 0.884418
登封 4 天对比 local: 0.878219
登封 5 天对比 local: 0.870845
# 墨尔本
└> hy main.hy 144.96 -37.81
登封 -5 天对比 local: -0.766436
登封 -4 天对比 local: -0.769177
登封 -3 天对比 local: -0.773481
登封 -2 天对比 local: -0.776808
登封 -1 天对比 local: -0.776486
登封 0 天对比 local: -0.77903
登封 1 天对比 local: -0.782412
登封 2 天对比 local: -0.782192
登封 3 天对比 local: -0.778759
登封 4 天对比 local: -0.77587
登封 5 天对比 local: -0.775106

可以看到虽然只是用了简单的 corr 函数粗暴分析两组数据,但也是说得通的。呼和浩特在 -1 天的时候和登封气温相关度 最高;广州在 +2 天的时候和登封的气温相关度最高;墨尔本总体和登封呈现负相关。这意味着冷空气确实是以呼和浩特(-1)->登 封->广州(+2)的顺序推行的,墨尔本因为处在南半球确实体现出了夏冬季节翻转的状况。

这个分析虽然较小又简单,不过确实揭露出了一些东西,之后能完善的话或许我可以加上光照降雨的数据或者加上一个指定节气天数附近 更精确的对比,不过这个就要求我砸更多技能点到数据科学上了……

阅读

看 Hacker News 发现的两个地图应用,一个是轮船货运地图和基础设施地图,感觉数据科学技能点后对这些就更感兴趣了,这里面肯定有什么 东西藏着,只待我日后发现……

Present day, Present time

这周做的都是一些修修补补的工作,将去年写得一些项目翻出来更下依赖或者修几个 BUG 。周二突发奇想买了台磁带播放机(型号: 索尼 walkman GX677),周末到手后也是「美美把玩」了下,应该可以为折腾磁带的事写篇博文,写完博文我就去写年终总结 了,真的!

脚注

1 完整代码:southfox/solar-term-diff - Gitea: Git with a cup of tea

如不想授权 Giscus 应用,也可以点击下方左上角数字直接跳转到 Github Discussions 进行评论。