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

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

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

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

Python中有一些公历与农历相转换的工具,如zhdate,sxtwl。但我是用百度查表查出来的,以如下格式存储成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()

获得输出结果

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年之后的节气间隔是推测出的,由于农历本身需要天文台挂测,所以只是做个参考;

立春与雨水的间隔变化很规律,但具体什么规律就没有深究,有学历法的同学可以私信一下;

红色与蓝色三角形代表重合的年份,然而并没有几次。

最后转载请注明出处!!!

生日python十种日期格式_Python可视化-二十四节气与生日间隔天数统计相关推荐

  1. 生日python十种日期格式_python显示生日是星期几的方法

    python显示生日是星期几的方法 本文实例讲述了python显示生日是星期几的方法.分享给大家供大家参考.具体实现方法如下: # find the day of the week of a give ...

  2. 生日python十种日期格式_生日,日期,天数,时间戳

    今天有朋友问了我几个小问题.今天就分享给大家.代码没有优化,也就是朋友间互相娱乐一下.有雷同或者代码不严谨的地方,就当一乐就行. 1>>给出一个人的生日,计算这个人活了多少天. (1) i ...

  3. python十种日期格式_Python 日期格式相关

    今天看网上一个说中文日期的问题. 自己试了下.#-*- coding: gb2312 -*- import datetime, time #now = time.strftime('%Y年%m月%d日 ...

  4. python 节气计算_Python可视化-二十四节气与生日间隔天数统计

    作为日常可视化作品之一,今天分析一下自97年开始,60年内每次生日与春分.雨水两个节气的相隔天数,看看哪一年会有重合的运气. 立春,十二节令之首,旧称正月节:雨水,十二中气立始.立春后,继之雨水,东风 ...

  5. python pandas 日期格式_python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫 ...

  6. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式

    最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下. 1.什么是时间戳? 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01 ...

  7. python to_excel 时间格式_分别用Excel和python进行日期格式转换成时间戳格式

    最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下. 1.什么是时间戳? 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01 ...

  8. python输出时间格式_python中日期和时间格式化输出的方法小结_python

    这篇文章主要介绍了python中日期和时间格式化输出的方法,实例总结了Python常见的日期与事件操作技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了python中日期和时间格式化输出的方 ...

  9. python的日期格式化_Python日期格式化-阿里云开发者社区

    Python日期格式化常用的一些格式化占位符 %a Abbreviated weekday name %A Full weekday name %b Abbreviated month name %B ...

  10. python时间日期格式,python日期时间格式化

    1.将字符串的时间转换为时间戳 方法: a = "2018-07-05 23:40:00" #将其转换为时间数组 import time timeArray = time.strp ...

最新文章

  1. 2018年,这些信息通信技术将大红大紫
  2. 分针网——Javascript不同浏览器差异及兼容方法
  3. Go 语言编程 — 函数
  4. mysql不同count的性能分析
  5. 好程序员Web前端分享无法忽视的JavaScript技巧
  6. Jquery的Split二次分割
  7. Sqlserver常用函数例子说明
  8. Vue如何mock数据模拟Ajax请求
  9. js计算两个时间相差月份
  10. git学习 远程仓库02
  11. 2月第4周网络安全报告:境内69.1万主机感染病毒
  12. AutoIt教程资源及autoit学习方法
  13. 基于arx模型的MPC预测控制器simulink建模与仿真实现
  14. linux为什么不需要磁盘碎片整理,Linux不用磁盘碎片整理原因分析.doc
  15. Linux运维常见面试题之精华收录
  16. Usage of Pseudocode
  17. 操作系统---存储管理
  18. bartender 不打印文本内容的解决方法
  19. 无锡设计培训——室内设计风格有哪些?
  20. BLDC无刷直流电机之结构与优势

热门文章

  1. VBA学习笔记(6)--抽取第一列中叫“虹虹”的个人信息
  2. 【代码笔记】iOS-使用MD5加密
  3. 对 Lotus Notes 邮件模版进行二次开发的最佳实践
  4. 网奇iwms插件之“我浏览过的文章”
  5. IIS的URL重写(url地址映射)
  6. 二叉树中和为某一值的路径(三)(C++)
  7. Xshell7连接VMware15虚拟机上的Ubuntu详细步骤
  8. SNMP原理及常用配置命令
  9. leetcode 13 13. 罗马数字转整数 (python)
  10. springboot2.0入门(helloworld)