Python办公之一:获取多组数据的每日平均值的近似值所对应的日期

一、需求

1、数据描述:1000个通道,每个通道每日不定时采集数据n份。

2、结果描述:每个通道每日取一组数据(日期,壁厚),要求壁厚是每日数据与平均值最接近的一个数。

3、原始数据图:

二、设计

1、读取原始数据

一共需要提取1000组、365天的数据,观察数据在excel表中的形式,结合后期处理方式,确定以字典包含列表的形式提取数据,方便后面对数据的操作

#获取excel需要操作的工作页
#参数:route:路径;sheet_name:工作页
def tab(route, sheet_name):data = xlrd.open_workbook(route)data.sheet_names()table = data.sheet_by_name(sheet_name)return table
#导入井口摄像头数据(数据形式以两列,同间隔格式)
'''
route:路径
sheet_name:工作页
number_lie:第几列开始取值
numbel_hang:第几行开始取值
n:探头个数
interval:相同数据的间隔(不同探头数据的日期行间隔)
返回值:返回一个列表,形式:list = [{'lie_1':['44078.7','44079.64', ...]},{'dlie_1':['21.17', '21.18', ...]}]
'''
def imp(route, sheet_name, number_lie, numbel_hang, interval, n):table = tools.MyLibrary.tab(route, sheet_name)lis = []dic01 = {}dic02 = {}num = 0for j in range(1, n+1):#1,2,3,4...12dic01['lie_' + str(j)] = [str(table.cell_value(i, numbel_hang-1+interval*num)) for i in range(number_lie-1, table.nrows)]dic02['dlie_' + str(j)] = [str(table.cell_value(i, numbel_hang+interval*num)) for i in range(number_lie-1, table.nrows)]num += 1lis.append(dic01)lis.append(dic02)return lis
2、筛选数据需要的工具

1、需要筛选数据,首先需要把数据卡在每天内,然后取每天对应壁厚值的平均值,读取的数据与指定日期对比,先生成一个指定日期列表来作为对比列表使用

#创建日期列表,参数date:最小日期;参数n:日期总数
'''
date:最小日期
n:需要计算的日期个数
'''
def riqi(date, n):li = []for i in range(n):li.append(date+i)return li

2、从excel中提取的数据是字符串形式,如果需要进行数学运算必须要转换数据类型,所以,还需要一个转换数据类型的函数

#转换提取数据类型
'''
li:接收一个需要转换成float类型的列表
'''
def zhuanhuan(li):l1 = []for i in li:l1.append(float(i))return l1

3、现在前期工作基本准备完毕了,我们需要开始对导入数据的字典进行处理,一次处理1000组数据显然很复杂,所以为了化繁为简,我们就处理一组数据,使每天所测量的日期和壁厚存在一个字典里,形成对应关系

#获取每组数据字的典形式
'''
date_li:日期列表
lis:需要处理的一套数据列表,[['44078.7','44079.64', ...],['21.17', '21.18', ...]]
n:第n套数据
返回值:[{1.2: 1, 1.1: 2, 1.8: 2.2}, {2.5: 2, 2.6: 3, 2.8: 4}, {3.1: 3, 3.4: 4}, {7.7: 1}, {8.3: 5}]
'''
def lie_dic(date_li, lis, n):li = []lie01 = lis[0]['lie_' + str(n)]#获取日期列表lie02 = lis[1]['dlie_' + str(n)]#获取壁厚列表lie01 = [i for i in lie01 if i != '']#去除列表中的空值,不去除无法进行比较运算lie02 = [i for i in lie02 if i != '']lie01 = zhuanhuan(lie01)#字符串类型转换为浮点类型lie02 = zhuanhuan(lie02)for i in date_li:dic = {}for j in range(len(lie01)):if lie01[j] > i and lie01[j] < (i+1):dic[lie01[j]] = lie02[j]li.append(dic)li1 = []for i in range(len(li)):#去除空的列表if bool(li[i]):li1.append(li[i])li = li1return li

4、现在我们已经将每日数据分开了,接下来就是计算出每日壁厚的平均值,与原平局值做差对比,选择一个最接近的值,利用角标关系对应出选出壁厚对应的日期,最后把它存在一个嵌套列表里面,方便后面的输出

#数据分组整理:
'''
m:每组数据字典形式,[{1.2: 1, 1.1: 2, 1.8: 2.2}, {2.5: 2, 2.6: 3, 2.8: 4}, {3.1: 3, 3.4: 4}, {7.7: 1}, {8.3: 5}]
re_list:每组数据列表形式,[[1.1, 2.6, 3.1, 7.7, 8.3], [2, 3, 3, 1, 5]]
'''
def group(m):res = []re_lie01 = []re_lie02 = []for i in range(len(m)):#循环大列表,得出每个字典c = []a = list(m[i].keys())b = list(m[i].values())c.append(a)c.append(b)res.append(c)for i in range(len(res)):avg = sum(res[i][1]) / len(res[i][1])chaji = []for j in res[i][1]:x = abs(avg - j)chaji.append(x)min_index = chaji.index(min(chaji))re_lie01.append(res[i][0][min_index])re_lie02.append(res[i][1][min_index])re_list = []re_list.append(re_lie01)re_list.append(re_lie02)return re_list

5、现在待输出的数据已经获得,接下来就需要输出到新的excel中了,在此之前,我们需要对输出到excel的格式进行设置:

#设置输出单元格格式
'''
name:字体样式名称
height:字体高度
bold:字体是否加粗
'''
def set_style(name, height, bold=False):style = xlwt.XFStyle()#初始化样式font = xlwt.Font()#创建字体样式font.name = namefont.bold = boldfont.color_index = 4font.height = heightstyle.font = fontreturn style
#写入excel
'''
re_list:每组数据列表形式,[[1.1, 2.6, 3.1, 7.7, 8.3], [2, 3, 3, 1, 5]]
n:写入excel的列号
path:写入路径
'''
def write_excel(re_list, n, path):r_xls = xlrd.open_workbook(path)  # 读取excel文件  r'H:\目标文件\最终数据.xls'# row = r_xls.sheets()[0].nrows  # 获取已有的行数excel = copy(r_xls)  # 将xlrd的对象转化为xlwt的对象table = excel.get_sheet(0)  # 获取要操作的sheetstyle = tools.MyLibrary.set_style('Times New Roman', 20 * 11)for i in range(len(re_list[0])):table.write(i, n, re_list[0][i], style)table.write(i, n+1, re_list[1][i], style)excel.save(path)

6、最后就是将数据逻辑输出:

#main,逻辑输出
#读取需要操作的数据
daoRuList = imp(r'H:\目标文件\02 BZ3-1X壁厚数据更新至2020.11.12.xls', '左侧101-112', 5, 3, 4, 12)
#生产日期范围列表
dateList = riqi(44078, 69)x = 0
for i in range(1000):#获取每天所测量的日期和壁厚对应的字典meiZuDic = lie_dic(dateList, daoRuList, i+1)#获取最终得出数据的列表meiZuList = group(meiZuDic)#循环1000组数据,并输出write_excel(meiZuList, x, r'H:\目标文件\最终数据.xls')x = x + 3

此方法来自一个正在学习python3全栈的小白~

欢迎大家评论、指正!

Python办公之一:获取多组数据的每日平均值的近似值所对应的日期相关推荐

  1. python中计算如何实现_基于python如何实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  2. 【逗老师带你学IT】PRTG监控通过Python+Modbus RTU获取温湿度传感器数据

    前文[逗老师带你学IT]PRTG监控通过Python+TCP Modbus获取温湿度传感器数据中我们讲了如何通过Python读取支持TCP Modbus的传感器数据.本章我们讲解下如何读取Modbus ...

  3. 【逗老师带你学IT】PRTG监控通过Python+TCP Modbus获取温湿度传感器数据

    本文介绍,Python如何通过TCP Modbus协议获取温湿度传感器数据.并在PRTG监控系统中呈现. 本文主要涉及知识点: 1.Python的ModbusTCP客户端实现 2.常见温湿度传感器中, ...

  4. python使用bs4获取网页排行榜数据(基础版)

    1.首先来到B站排行榜页面,按F12分析结构 2.鼠标放在代码上,一行一行往下移动,不要急,给浏览器一点反应时间. 3.当你发现排行榜所在位置被覆盖了,如下图,证明排行榜的代码就在这里 4.接下来,打 ...

  5. C语言 知道两组数据分别的平均值和标准差,如何计算其相关系数

    两组数据的样本量必然是一样的,所以只需要输入一次样本量: #include <stdio.h> #include <math.h>double compute_d(double ...

  6. 【Python】pandas获取全省人口数据并作可视化分析

    前言 目录 前言 代码实现 可视化分析 今天我们看看自己所在的省份的人口人数,使用pandas并作可视化分析. 环境使用 python 3.9 pycharm 模块使用 pandas Pandas 是 ...

  7. python处理行情数据_利用Python脚本来获取期货行情数据

    因为自己最近在学习做期货交易,想要下载期货的行情数据来做分析.有一些交易软件是可以导出数据的,但是导出的过程还是需要很多的手工操作,自己在想能不能通过Python程序来实现呢. 新浪期货数据接口介绍 ...

  8. Python量化:获取历史行情数据并计算KDJ指标

    KDJ指标又叫随机指标,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具. 随机指标KDJ一般是用于股票分析的统计 ...

  9. 自动驾驶模拟器Carla之python编程-(3)获取汽车摄像头数据

    在上节我们已经创建了一个可以形式的特斯拉model3,在本节,我们将给汽车上添加摄像头. 了解更多有关各种传感器以及如何使用它们的信息:Carla Sensors.现在,我将仅展示如何使用RGB相机. ...

最新文章

  1. ListView加checkBox可以实现全选等功能
  2. css实现图片动画效果
  3. 文件创建和删除命令:touch、rm
  4. java获取eureka_Spring Cloud服务发现:Eureka客户端
  5. Persistent Memory编程简介
  6. Java的各种打包方式
  7. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
  8. Fast Matrix Operations
  9. 【渝粤题库】国家开放大学2021春2038财务管理题目
  10. canvas学习之柱状图
  11. 将WebAPI发布到本地服务器与远程服务器
  12. 如何判断电脑是否中毒(转)
  13. 用英语推销计算机设备,销售电脑的英语对话
  14. sp 导出unity哪个_SP与Unity的效果差异分析
  15. 怎么设置微信公众号自动回复蓝色字体小程序链接
  16. ctfshow web入门 SSTI
  17. 【LeetCode】1160. 拼写单词(C++)
  18. 2021届硕士生年初java春招实习面试和正式校招面试经验汇总(收割腾讯,百度,美团,网易等offer)
  19. SQL之ignore关键字
  20. Vue-router 使用编程式导航多次执行会报错NavigationDuplicated的解决方法

热门文章

  1. 中国互联网最大的骗局!
  2. 学习.NET MAUI Blazor(四)、路由
  3. kingroot pc版 v3.2.0.1129官方电脑版
  4. 创业者要突破的女性用户痛点在哪儿?
  5. 【✨十五天搞定电工基础】基本放大电路
  6. Redis示例配置文件
  7. 简单分账系统的分账能力有多强?
  8. 今天打开个税APP,我直接人麻了!
  9. C4D R23/S24 组建Deadline集群时CommandLine错误的问题
  10. 河南省经济管理学校计算机系,河南经济管理学校