Python可视化-二十四节气与生日间隔天数统计

作为日常可视化作品之一,今天分析一下自97年开始,60年内每次生日与立春(the Beginning of Spring)和雨水(the Rains)两个节气的相隔天数,看看哪一年会有重合的运气。

立春,十二节令之首,旧称正月节;雨水,十二中气立始。立春后,继之雨水,东风解冻、散而为雨,后鸿雁来,草木萌动。而正月初十这天,常是在立春与雨水之间不定。

这与农历历法相关,农历纪年取月相朔望变化,参考太阳回归年长度,设置闰月调整,使之相适应。因此农历和公历不同,需要天文台进行校准。立春常对应公历2月3、4日,雨水常对应公历2与18、19日,但正月初十与公历时间对应就比较混乱了。

1、统计立春、雨水与正月初十对应的公历日期

Python中有一些公历与农历相转换的工具,如zhdatesxtwl。但我是用百度查表查出来的,以如下格式存储成BirthdayRecord.csv。对于日期间隔的计算,采用EXCEL计算,使用Python中的Pandas计算也可以。

年份 历年生日 历年立春 历年雨水 立春间隔 雨水间隔 节气间隔
1997 1997/2/16 1997/2/4 1997/2/18 -12 2 14
1998 1998/2/6 1998/2/4 1998/2/19 -2 13 15

2、Python绘图展示

a、导入需要的包

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
# 一些matplotlib画图的设置
large = 16; med = 12; small = 10
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (10, 6),
          'axes.labelsize': large,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
plt.rcParams.update(params)
# 设置使用漫画绘图模式,禁用可以返回普通模式
plt.xkcd()

b、处理数据

data = pd.read_csv("BirthdayRecord.csv", encoding="gb2312")
# 查看data的统计信息
data.info()

获得输出结果

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 60 entries, 0 to 59
Data columns (total 7 columns):
年份      60 non-null int64
历年生日    60 non-null object
历年立春    60 non-null object
历年雨水    60 non-null object
立春间隔    60 non-null int64
雨水间隔    60 non-null int64
节气间隔    60 non-null int64
dtypes: int64(4), object(3)
memory usage: 3.4+ KB

c、成图

fig, ax = plt.subplots(figsize=(12,6), dpi=100)

# 画出间隔
for i in range(len(data)):
    # 设置颜色
    color1 =  plt.cm.rainbow(np.abs(data.loc[i, "立春间隔"])/60 +0.7)
    color2 =  plt.cm.rainbow(np.abs(data.loc[i, "雨水间隔"])/30-0.5)
    # 画点
    ax.scatter(data.loc[i, "年份"], data.loc[i, "立春间隔"], color=color1, marker="o", s=np.abs(data.loc[i, "立春间隔"])+15, zorder=5, label="the Beginning of Spring" if i==2 else None)
    ax.scatter(data.loc[i, "年份"], data.loc[i, "雨水间隔"], color=color2, marker="p", s=np.abs(data.loc[i, "雨水间隔"])+15, zorder=5, label="the Rains" if i==4 else None)
    # 画图例

# 画直线
ax.plot(data["年份"], data["立春间隔"], color="red", linestyle="-", linewidth=0.5, alpha=0.3, zorder=0)
ax.plot(data["年份"], data["雨水间隔"], color="blue", linestyle="-", linewidth=0.4, alpha=0.3, zorder=0)

# 画直线
ax.hlines(0, 1996, 2056, color="gray", linestyle="--", linewidth=1, alpha=1, zorder=20)
ax.vlines(2020, -24, 23, color="gray", linestyle="--", linewidth=1, alpha=1, zorder=20)

# 画星星
zeroData = data[data["立春间隔"]==0]
ax.scatter(zeroData["年份"], zeroData["立春间隔"], marker="v", color="red", alpha=0.5, zorder=40)
# 画星星
zeroData = data[data["雨水间隔"]==0]
ax.scatter(zeroData["年份"], zeroData["雨水间隔"], marker="^", color="blue", alpha=0.6, zorder=40)

# 设置坐标轴范围
ax.set_xlim(1996, 2057)
ax.set_ylim(-31, 26)

# 设置x轴间隔
plt.xticks([data.loc[x, "年份"] for x in range(0, len(data), 6)])

# 设置文字
ax.set_xlabel("Year")
ax.set_ylabel("Interval /d")
ax.set_title("the Interval Between Birthday and the Two Solar Terms Each Year", size=large)

# 设置坐表轴隐藏
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 设置图例
ax.legend(loc="lower center", ncol=2)
# ax.grid(alpha=0.3, color="gray", zorder=10)

# 保存图片
plt.savefig("生日间隔统计.jpg", dpi=300)

成品图


生日间隔统计.jpg

3、讨论

  • 由于UbuntuServer没有部分中文字体的版权,所以用英语标注了一下;
  • 2020年之后的节气间隔是推测出的,由于农历本身需要天文台挂测,所以只是做个参考;
  • 立春与雨水的间隔变化很规律,但具体什么规律就没有深究,有学历法的同学可以私信一下;
  • 红色与蓝色三角形代表重合的年份,然而并没有几次。
  • 最后转载请注明出处!!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容

  • 二十四节气是指二十四时节和气候。二十四节气是中国古代订立的一种用来指导农事的补充历法,是中国古代汉族劳动人民长期经...
    天马酒仙阅读 3,916评论 0 11
  • 前不久,豌豆的舅舅问了我这样的问题:有的专家反对取消农历,提出的的理由是取消了农历,也就没有二十四节气了,没有了节...
    豌豆花下猫阅读 2,342评论 1 6
  • 火炮火燎的周一早上,从周末的慵懒中秒速回归,迷迷瞪瞪中根据惯性洗脸擦脸,拍拍打打搞定,再一把拉起同样迷迷瞪瞪的丫头...
    茶醉小妖阅读 249评论 0 1
  • 努力的你呀,轻松一点吧。具体情况明天知晓,求人不如求己,只有好好学习,才可以镇定自若,没什么了不起,没什么担心。调...
    欣欣向荣吉吉阅读 163评论 0 5
  • 我们总是在寻找某样东西,一刻也未曾停下脚步。————题记 在这个愈来愈繁华的国度中生活着的人,随着...
    2020级1班阅读 165评论 0 1