一、前言

1、环境

dbConfig.json:数据库配置文件

test.xlsx:传感器数据

2、主要修改

随机一下波峰,波峰之间的距离等

3、 大致逻辑

读取excel

查询应变传感器

根据应变传感器记录的数据 生成 相应的修正后的数据

根据索引一个一个的update

生成update sql语句

每次达到6000的时候,写入到数据库,清空sql语句

一个传感器遍历完后,如果sql语句不为空,就写入到数据库

二、代码

import numpy as np

import math

import matplotlib.pyplot as plt

import pandas as pd

import pymssql

from random import choice

import json

import time

import os

class MSSQL:

# 类的构造函数,初始化数据库连接ip或者域名,以及用户名,密码,要连接的数据库名称

def __init__(self,host,user,pwd,db):

self.host=host

self.user=user

self.pwd=pwd

self.db=db

# 得到数据库连接信息函数,返回: conn.cursor()

def __GetConnect(self):

self.conn=pymssql.connect(host=self.host,

user=self.user,

password=self.pwd,

database=self.db,

charset='utf8')

cur=self.conn.cursor() #将数据库连接信息,赋值给cur。

if not cur:

raise(NameError,"连接数据库失败")

else:

return cur

#执行查询语句,返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段

def ExecQuery(self,sql):

cur = self.__GetConnect() #获得数据库连接信息

cur.execute(sql) #执行Sql语句

resList = cur.fetchall() #获得所有的查询结果

self.conn.close() #查询完毕后必须关闭连接

return resList #返回查询结果

#执行Sql语句函数,无返回结果的,方向修改的

def ExecNonQuery(self,sql):

cur = self.__GetConnect()

cur.execute(sql)

self.conn.commit()

self.conn.close()

# new一个对象

# mssql = MSSQL('192.168.2.51', 'sa', 'Sql123456', 'AEHMS20201216')

# mssql = MSSQL('.', 'sa', 'sa', 'AEHMS20201216')

mssql = None

def randomSplit(total):# 随机分组数据

foo = [60,80,150,200,300,600]

count = 0

arr= []

bl = True

while (bl):

num = choice(foo)# 随机取值

if count + num >= total:# 最后随机取的那个数 超出当前范围 break

break

arr.append(num)

count+=num

if total != count:# 追加最后一个元素

arr.append(total-count)

print(count)

print(arr)

seg = []# 值如:[(0,50),(50,200)]

print('--------------')

curCount=0

for num in arr:

start = curCount

end = curCount + num

seg.append((start, end))

print(start, end)

curCount=end

print(seg)

return seg

def createData(pointNum, avgValue): # 生成周期性数据

long=pointNum # 400个步长,x轴的总长度

base=avgValue # 均值

ybase = np.zeros((1,long))[0] + base # 所有数据

period_multiply = 0.1 # 越大,幅值越大,调整波峰

period_frequency = 500 # 越大,周期越大

all_period_multiply = [0.1, 0,2, 0.3, 0.4, 0.5]# 预设多个幅值

all_period_frequency = [50, 150, 200, 300, 400, 600]# 预设多个周期值

seg = randomSplit(pointNum)# 原始: seg = [(0, pointNum)]

for (i,j) in seg: # 一组一组数据的遍历

print(i, j)

period_multiply = choice(all_period_multiply)# 随机取值

period_frequency = choice(all_period_frequency)# 随机取值

n = j-i # n=40,40 50

x = np.arange(n)

season1 = 1 * np.array([math.sin(i/period_frequency*math.pi) for i in x])

season2 = 0.5 * np.array([math.sin(i*0.5/period_frequency*math.pi) for i in x])

noise = np.random.normal(0, 0.2, len(x))

y = season1 + season2 + noise # 可以叠加多尺度周期和噪声

# y = season1+season2

for idx in range(i, j): # 遍历具体的点

# print(idx, period_multiply)

value1 = ybase[idx] + y[idx-i] * period_multiply

value2 = round(value1, 3) # 保留三位小数

ybase[idx] = value2

# plt.figure(figsize=(15, 3.5))

# plt.plot(ybase)

# plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=2.0)

# plt.show()

return ybase

# # 测试

# points = createData(200, 1.2)

# print(points)

def getIdsByCode(code): # 获取 ids by code

sql = "SELECT ID FROM tb_SensorRecord WHERE Code='{}' AND GetTime>='2020-08-01' AND GetTime<='2020-12-30' ORDER BY ID ASC".format(code)

results = mssql.ExecQuery(sql)

arr_ids = []

for row in results:

arr_ids.append(row[0])

return arr_ids

# # 测试

# ids = getIdsByCode('080906')

# print(len(ids))

# # 测试 执行sql语句

# mssql.ExecNonQuery("UPDATE tb_SensorRecord SET NewValue1='1' WHERE ID='4178839'")

# print('ok')

def getSensor(): # 获取所有的传感器

arr_sensors = []

df = pd.read_excel('test.xlsx', dtype={'编码': np.str_}) # dtype指定列的数据类型

for index, row in df.iterrows():

arr_sensors.append({"code":row["编码"], "avgValue":row["均值"]})

return arr_sensors

# # 测试

# sensors = getSensor()

# print(sensors)

# 主逻辑

startTime = time.perf_counter()

curCode = ''

try:

dbConfig = {

'host' : '',

'user' : '',

'pwd' : '',

'db' : ''

}

with open('dbConfig.json', 'r') as f:

dbConfig = eval(json.load(f))

print(dbConfig)

mssql = MSSQL(dbConfig["host"], dbConfig["user"], dbConfig["pwd"], dbConfig["db"])

sensors = getSensor()

for item in sensors: # 遍历传感器

print(item)

code = item["code"]

avgValue = item["avgValue"]

curCode = code

ids = getIdsByCode(code)

points = createData(len(ids), avgValue)

sql = ""

for index, value in enumerate(ids):

print(index, value, points[index])

sql += "UPDATE tb_SensorRecord SET NewValue1='{0}' WHERE ID='{1}'".format(points[index], value)

mssql.ExecNonQuery(sql)

print('处理完成')

except Exception as e:

print('Error:', e)

with open('err.txt', 'w') as f:

json.dump(str(e)+",当前传感器:"+curCode, f)

finally:

endTime = time.perf_counter()

print("The function run time is : %.03f seconds" %(endTime-startTime))

os.system('pause')# 避免执行完后自动关闭控制台

三、效果

总结

随机是随机了,但是波动的范围还是要再优化一下,万一超过了阈值也哦豁了

python 限定数据范围_Python 生成周期性波动的数据 可指定数值范围2相关推荐

  1. python设定数值范围_Python 生成周期性波动的数据 可指定数值范围

    代码 import numpy as np import math import matplotlib.pyplot as plt #python在指定的时间段生成周期性波动的数据: #周期性 lon ...

  2. Python的DataFrame中筛选满足某列的值在指定数值内的行

    Python的DataFrame中筛选满足某列的值在指定数值内的行 以dataframe对象df1为例,选取所有满足A列的值在[1,2,3,4]的行. 语法为df1[ df1['A'].isin([1 ...

  3. python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结

    Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...

  4. python pandas excel数据处理_Python利用pandas处理Excel数据的应用

    python如何将列表导出为csv文件 import pandas as pd list=[[1,2,3],[4,5,6],[7,8,9]] column=['column1','column2',' ...

  5. python动态交互图表_Python 调用 matplotlib 实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

  6. python狗狗年龄换算_Python之美——一只数据狗的笔记[长期更新]

    两年前咬咬牙跳了Matlab的坑,入手了Python,从此一发不可收的成了PY的重度依赖者.本人研究工作皆涉及大量的数据处理工作,PY和R作为数据分析的两驾马车,得其一者得天下.另外,我接触的许多软件 ...

  7. python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  8. python爬虫导入数据库_python爬虫爬下来的数据怎么导入到MySQL

    展开全部 下载mysql.connector库 然后把爬虫2113爬到的数据5261通过mysql里面的insert语句查到数4102据库,当然也可以建表1653,一般我没用python建表 是先建好 ...

  9. python处理mysql数据结构_python环境下使用mysql数据及数据结构和二叉树算法(图)...

    python环境下使用mysql数据及数据结构和二叉树算法(图): 1 python环境下使用mysql 2使用的是 pymysql库 3 开始-->创建connection-->获取cu ...

最新文章

  1. 加速产业生态算力升级,华为鲲鹏展翅福州
  2. 【两行命令】R语言读取excel数据
  3. 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
  4. 先序abdfcegh 中序bfdagehc 后序线索二叉树_二叉树的遍历(先序、中序、后序、层序)...
  5. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径
  6. REHL5 mail不能自动外发邮件
  7. C++ Lib的生成与调用 生成dll,lib快速的寻找方法
  8. 四、瞰景Smart3D创建工程
  9. ubuntu下安装MP4Box
  10. Frasterrcnn-tensorflow-python3.5-master生成预测坐标位置并存储到xlsl表格中,并生成pr曲线
  11. 中国大学生计算机设计大赛英语,中国大学生计算机设计大赛2018.pdf
  12. Unity粒子系统基本
  13. 甘特图(Gantt chart)
  14. 【NoteBook】刘润:新零售:低价高效的数据赋能之路
  15. JavaScript-高级进阶
  16. dodo:人脸识别方法个人见解zz
  17. 手把手教你 centos7 安装 OpenLDAP 2.4.44 实战
  18. state和status的区别
  19. 采集淘宝或天猫商品的店铺名称/商家旺旺/商品首图/商品标题
  20. 11.5 Daily Scrum

热门文章

  1. “打怪升级”,电竞浪潮中一家非典型公司的生存之道
  2. 一年前寫的:計算所得稅以及計算24點遊戲
  3. 如何秒下单?python的淘宝秒杀抢购下单源码参考
  4. netterm linux,NetTerm终端仿真软件下载
  5. 宝藏网站!机器学习概念可视化;LeetCode面试必看清单;104个Python数据科学实战项目;必应超清壁纸;前沿论文 | ShowMeAI资讯日报
  6. 【蓝桥杯】每日一题冲刺国赛
  7. Python控制语句/循环语句
  8. 中国土地市场网爬虫案例
  9. 线性表的顺寻存储结构
  10. js网页动画,如何做一款高逼格不失真的动画