全自动化处理每月缺卡数据,输出缺卡人员信息
不管是上学还是上班都会统计考勤,有些学校或公司会对每月缺卡次数过多(比如三次以上)的人员进行处罚。有些公司还规定对于基层员工要在工作日提交日志、管理人员要提交周报或月报,对于少提交的人员要进行处罚。如果公司HR逐个对人员的日志或缺卡数据进行处理,将是一项耗时且无聊的工作。
本文提供了自动处理考勤和日志缺失的方法。不用安装Python,不用学Python语法,只要你会在电脑上新建文件夹,点击文件就可以实现考勤和日志缺失名单的统计输出。接下来一起来看下实现步骤吧。
一、效果展示
1 实现效果
首先来看下实现效果。
大体实现步骤如下:
步骤1:在D盘中新建“每月缺卡数据处理“文件夹(已在代码中固定死了,必须建该文件夹)。
步骤2:把处理考勤缺失的exe文件和原始数据文件放到step1新建的文件夹中。
步骤3:点击exe文件,会自动出来csv结果文件,具体格式如下:
2 原始数据模板
原始数据文件需为”判断是否提交日志2.xlsx“,本文使用的原始数据如下(表头需按如下命名):
注:如需本文原始数据、和直接运行得到结果的exe文件,可到本公众号中回复“缺卡”,即可免费获取。
其中填报人指学生或员工姓名,部门若为学生可以填某某班。填报时间指日志填报时间,日期指日志实际日期。若为考勤打卡,两个日期都填实际打卡的日期即可。若为考勤打卡,今日完成工作列可置为空。
如果原始文件中想存放员工打卡的全年数据,但想统计其中某个月的缺卡数据。只需把想统计的月份放在日期的第一行即可,代码中已按日期第一行进行了同年月数据子框的筛选。如需设置定时任务,把运行结果定时邮件发送给相关人员,可以到公众号中私信我。
二、代码详解
对于部分了解Python的朋友来说,如果有个性化的需求,可以自己微调代码实现需求。接下来详细阐述实现上述功能的代码。
1 导入库
首先导入本文需要加载的库,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。
# -*- coding: UTF-8 -*-
'''
代码用途 :处理缺卡数据
作者 :阿黎逸阳
公众号 : 阿黎逸阳的代码
'''
import os
import calendar
import numpy as np
import pandas as pd
from datetime import datetime
from xlrd import xldate_as_tuple
from chinese_calendar import is_workday
from chinese_calendar import is_holiday
from chinese_calendar import get_holiday_detail
本文应用到了os、calendar、numpy、pandas、datetime、xlrd、chinese_calendar库。
os库可以设置文件读取的位置。
calendar和chinese_calendar库是日期处理库。
numpy和pandas库处理数据框。
xlrd和datetime库处理时间。
2 定义时间处理函数
接着应用xlrd和datetime库中的函数定义时间处理函数,把时间戳或带时分秒的时间转换成只含年月日的时间。
def num_to_date(x): '''日期处理函数把时间戳或带时分秒的时间转换成只含年月日的时间'''try:x1 = datetime(*xldate_as_tuple(x, 0)).strftime('%Y-%m-%d')except:x1 = datetime.date(x).strftime('%Y-%m-%d')return x1
定义成年月日统一时间的目的是为了方便后续代码的运行。
3 读取数据调整日期格式
接着读取数据,应用第二小节定义的时间处理函数把填报时间和日期进行处理。
#读取数据
os.chdir(r'D:\每月缺卡数据处理')
date = pd.read_excel('判断是否提交日志2.xlsx', sheet_name='Sheet1')#调整日期格式
date['填报时间'] = date['填报时间'].apply(num_to_date)
date['日期'] = date['日期'].apply(num_to_date)
原始部分数据如下:
调用时间处理函数得到的部分数据如下:
4 计算工作日天数
接着取出数据框日期列的第一个值,获取要统计的年月信息。根据年月信息获取该月工作日的天数。
#取出想看缺卡信息的年月
y_m1 = date['日期'][0][0:7] def sele_ym(x, y_m=y_m1):'''判断数据框中的日期是否为某月'''if x.find(y_m)>=0:return True#找出这一个月中的工作日,求出工作日的天数
days = calendar.Calendar().itermonthdates(int(y_m1.split('-')[0]), int(y_m1.split('-')[1]))
mth_nwkdays = [] #非工作日
mth_wkdays = [] #工作日
mth_days = [] #全部日期
for day in days: if str(day).find(y_m1)>=0:#print(str(day))mth_days.append(str(day))if is_workday(day)>0:mth_wkdays.append(str(day))else:mth_nwkdays.append(str(day))
work_days = len(mth_wkdays) #工作日天数
把工作天数和员工本月的实际打卡或写日志的天数进行对比,如果实际值小于理论值,说明员工缺卡或请假了。由于大部分的员工都是正常打卡或写日志的,这时人工再对缺卡员工进行排查已经极大地缩小了排查面。如有特殊代码需求,需要求助的,可以到公众号中私信我。
5 获取缺卡名单
最后调用函数获取缺卡名单,主要是对每个填报日期和实际工作日期进行比对。
#定义获取缺卡信息的函数
def stat_dail_short(date, y_m1, work_days):'''date:存储日志的数据大表y_m1:月份work_days:该月的工作天数'''qk_file = []date_m = date[date['日期'].apply(sele_ym)==True]for i in set(date_m['填报人']):sub_date = date_m[date_m['填报人'] == i]if len(sub_date['日期'])<work_days:qk = str(set(sub_date['填报人'])) + str(set(sub_date['部门'])) + '缺了'+ str((work_days-len(sub_date['日期']))) + '次卡' + ';缺卡日期为:'+ str(set(mth_wkdays)^set(sub_date['日期']))qk_file.append(qk)print(set(sub_date['填报人']), set(sub_date['部门']), '缺了%d次卡'%(work_days-len(sub_date['日期'])), ';缺卡日期为:', set(mth_wkdays)^set(sub_date['日期']),sep='')qk_file_1 = pd.DataFrame(qk_file)qk_file_1.columns = ['缺卡信息']qk_file_1.to_csv(y_m1+' 缺卡名单'+'.csv', encoding='gbk') #调用函数获取缺卡名单
stat_dail_short(date, y_m1, work_days)
得到结果:
{'张继科'}{'体育部'}缺了5次卡;缺卡日期为:{'2022-04-11', '2022-04-29', '2022-04-22', '2022-04-18', '2022-04-21'}
{'杨紫'}{'历劫部'}缺了1次卡;缺卡日期为:{'2022-04-20'}
{'刘诗雯'}{'体育部'}缺了2次卡;缺卡日期为:{'2022-04-18', '2022-04-28'}
结果中的数据是用填报人、填报部门、缺卡次数、具体的缺卡日期进行拼接展示的。会以csv的形式存放到指定文件夹中。如果需要把姓名、部门、缺卡次数等信息分开,可以在excel中按特定条件分列,或调整一下代码进行实现。
本文开头的exe文件生成方法,可以参考Pinstaller(Python打包为exe文件)一文。我在生成exe的过程中一直有报错,后面在网上看到方法说先在cmd中运行pip uninstall matplotlib,再运行生成exe的语句就不会报错。按网上方法真成功了,虽然没有明白原理,但还是非常感谢!如果你在打包的时候没有报错,还是不建议删除matplotlib库。
至此,全自动化处理每月缺卡数据,输出缺卡人员信息已讲解完毕,动动手分享给你身边有需要的ta吧。
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
用Python绘制520永恒心动
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
【Python】情人节表白烟花(带声音和文字)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)
全自动化处理每月缺卡数据,输出缺卡人员信息相关推荐
- sd卡数据恢复,怎么恢复sd卡数据?
sd卡数据恢复一直是大家关注的问题,sd卡可以满足用户扩展内存,存储数据的需求,但是很多人在使用SD卡数据的时候,出现误删或者格式化等操作,就很麻烦,将会导致sd卡上的数据丢失.那么要怎么样恢复sd卡 ...
- 大数据专栏一-全自动化在线式当当销售情况分析预测系统
(ps:临时想起来补一句,,本项目仅用于学习交流,不用于任何商业用途.还有如果有大数据班的学弟学妹看到这一定记得作业得按时交作业延期交了成绩会和下一个档次的作业一个分数)项目报告和代码以及录屏都保存在 ...
- 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
原文链接:三分钟走进袋鼠云一站式全自动化全生命周期运维管家ChengYing(承影) 课件获取:关注公众号 ** "数栈研习社",后台私信 "ChengYing" ...
- 大数据平台常用组件_这款大数据智能服务平台火了!全自动化配置30+款开源大数据组件...
在互联网市场的头部效应下,企业所面临的竞争压力越来越大,如何有效解决获客成本高.用户黏性低.变现能力弱等问题,正是越来越多的企业开始构建大数据平台的初衷.但由于大数据解决方案所涉及的组件错综复杂.技术 ...
- A股全自动化交易——从零到实盘20(完结)
本文是"从零到实盘"系列的最后一篇文章,将介绍实现全自动实盘交易的最后一个步骤,即实现定时更新股票数据任务. schedule模块安装 我们使用schedule来实现定时任务,首先 ...
- 全自动化虽然还早,但机器人劳力确实越来越便宜了
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 编者按:本文来自爱范儿,作者 吴羚,36氪经授权发布. 电影<终结者:黑暗命运>开头有 ...
- 达观数据超自动化机器人实践分享 | 达观数据产品总监邵万骏
8月13日,由苏州市金融科技协会指导,RPA中国主办,达观数据作为顶级联合主办的「第二届中国RPA+AI开发者大赛」在苏州观园流苏酒店圆满落幕.达观数据产品总监邵万骏作为特邀嘉宾,在会上做主题演讲&l ...
- 移动网流量用户身份识别系统的源代码_智能车牌识别系统全自动化的功能
智能车牌识别系统的出现不仅解决了传统停车系统解决不了的问题,还增加了传统停车系统没有的功能,做到了传统停车系统无法做到的.智能车牌识别系统一般是由云停车出入摄像机.智能道闸.智慧网关.停车管理服务器. ...
- CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制
近期,CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制. 无人机行业在过去几年里取得了迅猛发展,大疆是全球领先的无人飞行器控制系统及无 ...
最新文章
- Flask-RESTful之视图
- 2022 美国国家工程院院士公布:张宏江等入选海外院士,马斯克及微软CEO在列...
- 区块链学习(6)区块链
- Python串行运算、并行运算、多线程、多进程对比实验
- 使用SpringTask定时获取传感器设备信息并缓存到Redis
- Collection集合常用功能
- HDU 5608 function (杜教筛)
- 第二节 DOM-Document对象
- iOS 在视图中调整按钮距离边框的位置
- android是j2me的一个实现吗,j2me与android的区别
- 【标准正态分布查询表】
- 湖中剑 GitHub周刊 #10 | 开源监控uptime-kuma、LVGL嵌入式UI、node版本管理nvm
- ps安装了可以打开但开始里面找不到_黑苹果安装入门(hackintosh install)
- 【英语四六级-必背单词】高中英语单词(C - 2)MP3试听与下载
- 【LeetCode第59题】长舒一口气,终于学会了这苦涩难懂的 螺旋矩阵II
- CLOUD云计算进阶(三)-云平台部署与管理
- gmap 支持python吗_基于GMap.Net的地图解决方案
- 论ACM与泡妞【转】
- web前端期末大作业 ——电影主题介绍 你好,李焕英 ——html+css+javascript网页设计实例
- ESP32 AT指令连接AWS亚马逊云