[Python实践] 利用python实现的日期映射礼拜X的简单实现

2018年12月19日

最近在处理分析数据的时候,突发奇想试着从用户离职的日期上判断是主动辞职还是被动解雇?数据的背景是美国某企业员工离职日期数据,根据美国常见的周薪/半月薪发放方式,初步假定主动辞职的人一般会选择拿到该周工资后离职,因此更倾向于后半周;而解雇则随时可以发生,然而发生在前半周的离职行为很大程度上推测是被动解雇。

日期转换程序思想

言归正传。

网上打开现成的日历程序可以方便地手动查找任意日期对应的信息,如礼拜几/阴历/风水信息/节日等;然而如果你有一个几千样本的用户离职日期,上述方法就不现实了,作为一个Python Coder,想到即是做到,决定顺手写个映射日期到礼拜几的小模块。

主要思想

将日期转换成礼拜几有很多方法,但是核心都离不开下述几点知识:

总体思想是找到一个起始日期Start_Date,然后计算查询日期Map_Date距离起始日期的偏移天数,然后mod 7即可;

计算需要知晓每年各个月份的天数,一三五七八十腊有31天是你应该基本知晓的常识,其余月份除了2月份外,都是30天;

2月份的天数与闰年平年有关,凡是能够被4整除却不能被100整除的即为闰年,否则为平年

需要特别注意的是,计算日期偏移的时候是通过mod 7将所有的天数映射到了0~6之间(运算等同与除以7得到的余数集合),可以得到公式:

$$

Weekday_-index = [Weekday_-index(Start_-Date) + Count_-Deviation_-Days] mod 7

$$

大家可以想象一个宽度只有7的矩阵,Start_Date作为起点累加偏移天数后,效果类似于按照宽度7进行一行行输入叠加,最终停止的位置即为Map_Date的礼拜时间索引。

下述代码以2010年与2011年为例,给出了两年每个月份的天数以及每年1月1日的礼拜日期,以此作为起点计算该年中任意一个日期的礼拜时间。

def Transfor_Date_2_Weekdays(date):

# date: 2010-01-02

# 静态数据

# 一年有 12个月,其中:

#

# 一月,三月,五月,七月,八月,十月,十二月都有31天。

#

# 四月,六月,九月,十一月都是30天。

cnt_10year_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

cnt_11year_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

start_weekday_10 = 4 # 2010-01-01是礼拜五

start_year_10 = 2010

start_month_10 = 1

start_day_10 = 1

start_weekday_11 = 5 # 2011-01-01是礼拜六

start_year_11 = 2011

start_month_11 = 1

start_day_11 = 1

# 分析输入的日期对应的礼拜几

year = float(date[:4])

month = float(date[5:7])

day = float(date[8:])

cnt_days = 0 #相对于对应年的1月1日的偏移

if year == 2010:

print cnt_10year_days, '\n'

j = 0

while j < month - 1:

cnt_days += cnt_10year_days[j]

j += 1

continue

cnt_days += day

cnt_days -= 1 # 减去1月1日自身一天

#print date, 'is from 2010-01-01', cnt_days, '天\n'

#print cnt_days % 7, '\n'

#print start_weekday_10, '\n'

weekday = (start_weekday_10 + cnt_days) % 7 + 1

print date, 'response to weekday is ', weekday, '\n'

return weekday

if year == 2011:

# 需要以2011-01-01为起点

j = 0

while j < month - 1:

cnt_days += cnt_11year_days[j]

j += 1

continue

cnt_days += day

cnt_days -= 1 # 减去自身一天

print date, 'is from 2011-01-01', cnt_days, '天\n'

print cnt_days % 7, '\n'

print start_weekday_11, '\n'

weekday = (start_weekday_11 + cnt_days) % 7 + 1

print date, 'response to weekday is ', weekday, '\n'

return weekday

具体运行只需要一句代码:

weekday = Transfor_Date_2_Weekdays(Map_Date)

然后输入日期测试:

2010-02-28 response to weekday is 7.0 # 礼拜天

2010-05-19 response to weekday is 3.0 # 礼拜三

2011-09-12 response to weekday is 1.0 # 礼拜一

通过日历验证全部通过!

用python实现星期的转换_[Python实践] 利用python实现的日期映射礼拜X的简单实现...相关推荐

  1. python批量读取图片并复制入word_提取word文档中的图片并使用Python进行批量格式转换,出,Word,里,利用,python...

    日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...

  2. python提取pdf的数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  3. python 算法教程 pdf 英文_上手实践《Python机器学习第2版》PDF中文+PDF英文+代码+Sebastian...

    学习机器学习,推荐学习<Python机器学习(第二版)>. <Python机器学习(第2版)>,图文并茂,代码详实,原理清晰,覆盖面适度,侧重算法实现和应用,作为入门级学习还是 ...

  4. 用python实现星期的转换_在Python中将秒转换为周-天-小时-分钟-秒

    从基本的转换原则来看:weeks = seconds / (7*24*60*60) days = seconds / (24*60*60) - 7*weeks hours = seconds / (6 ...

  5. python实现图片格式转换_干货必看 | Python实现图片格式转化

    今天教大家一个实用的小技巧,用Python实现图片格式转化,即将PDF格式转化成PNG格式. 整体代码: import fitz ''' #将PDF转化为图片 pdfPath pdf文件的路径 img ...

  6. python批处理栅格转点_三种利用Python批量处理地理数据的方法——以栅格数据投影转换为例...

    时至今日,笔者已经总结了三种用Python语言结合ArcGIS10.2提供的接口去批量处理地理数据的方法.即: 1. 用IDLE.Python Tools for Visual Studio等去编写独 ...

  7. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  8. python 文件格式转换_数据分析:基于Python的自定义文件格式转换系统

    ( 白宁超 2018年7月16日14:47:41 ) 导读:随着大数据的快速发展,自然语言处理.数据挖掘.机器学习技术应用愈加广泛.针对大数据的预处理工作是一项庞杂.棘手的工作.首先数据采集和存储,尤 ...

  9. python变量类型之间转换_【Python】Python 变量类型(变量赋值,数据类型,数据转换)...

    目录 Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.因此,变量可以指定不同的数 ...

最新文章

  1. 用VS Code打造最佳Markdown编辑器
  2. Android—Bitmap图片大小计算、压缩与三级缓存
  3. 从您的计算机移除此产品,解决office提示“此操作只对目前安装的产品有效”的方法...
  4. MVC3学习第十三章 佟掌柜第二弹——MVC3下利用陕北吴旗娃的分页控件实现数据分页...
  5. pgpool-II3.1 的内存泄漏(五)
  6. 【电力电子】功率因素\无功功率
  7. 基于sklearn框架实现线性回归,多项式回归和支持向量机的项目实战
  8. python 返回列表长度_Python通过len函数返回对象长度
  9. 4月计算机领域的国际会议,计算机领域国际会议分区表
  10. 3款超好用的音频剪辑软件,功能全面,操作简单!
  11. 面试技巧(2) 个人面试注意事项
  12. 1109 Group Photo (25分)/1055 集体照 (25分)后三个测试点
  13. 8K视频处理和工作原理,8K视频处理分析
  14. 成功鲜有偶然:一览IT名人的教育成长经历
  15. 【MDS多维尺度分析】
  16. 对话中国人寿:DevOps实践经验分享
  17. C#中TreeView树配图片
  18. STM32F4xx时钟配置的三种方法
  19. YOLO-V5 算法和代码解析系列 —— 学习路线规划综述
  20. Qt+VLC播放多个视频的Demo

热门文章

  1. Mc1.16forge官混教程/教补-#5 官混方块写法差异与为方块赋予常见属性
  2. .net中创建简单反射实例
  3. 标准型和科学型计算机,科学计算器软件
  4. nginx: [warn] conflicting server name “localhost“ on 0.0.0.0:80, ignored
  5. 个人微信引流管理系统
  6. DAY1-T382LCP 15-2022-01-16-非自己作答
  7. 英方联合XSKY星辰天合推出基于对象存储的备份解决方案
  8. 使用Docker部署服务
  9. 5,1长假学几句英语
  10. 2M误码仪 TFN T1000M E1/数据传输分析仪