系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、python工具
示例:是基于一种工具,该工具是为了解决数据分析任务而创建的。
1时间操作
# -*- coding:utf-8 -*-
# author: cai bao jun
# datetime: 2022/12/5 9:51
import datetime
# 获取当前时间
now1 = datetime.datetime.now()
# now2 = datetime.datetime(now1.year, now1.month, now1.day, now1.hour, now1.minute, now1.second)
# now3 = datetime.datetime.strftime(now2, "%Y-%m-%d %H:%M:%S") # datetime===>str ## "%Y-%m-%d %H:%M:%S.%f"
# now4 = datetime.datetime.strptime(now3, "%Y-%m-%d %H:%M:%S") # str ===> datetime
## datetime 属性
from datetime import datetime
t = datetime.now()
print(t)
print(t.year)
print(t.month)
print(t.day)
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
# 创建datetime
# 省略的参数默认为0
t = datetime(2021, 1, 1, 14, 30, 59, 200)
print(t)
print(type(t))
print('======')
# string转为datetime
s = "2021-1-1 12:30:59.200"
t = datetime.strptime(s, "%Y-%m-%d %H:%M:%S.%f")
print(t)
print(type(t))
# datetime转为string
from datetime import datetime
t = datetime(2021, 1, 1, 12, 30, 59, 200)
print(t)
print(t.strftime("%Y/%m/%d %Hh%Mm%S.%fs"))
print(type(t.strftime("%Y/%m/%d %Hh%Mm%S.%fs")))
# datetime转为时间戳
from datetime import datetime
t = datetime(2021, 1, 1, 12, 30, 59, 200)
print(t)
print(t.timestamp())
print(type(t.timestamp()))
# 注意:datetime - datetime得到timedelta,timedelta没有时间戳
from datetime import datetime
t1 = datetime(2021, 1, 1)
t2 = datetime(2021, 1, 2)
dt = t2 - t1
print(dt)
print(type(dt))
# 时间戳转为datetime
from datetime import datetime
stamp = 1609475459.0002
t = datetime.fromtimestamp(stamp)
print(t)
print(type(t))
2 入参修改进入程序
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='张',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()
#打印姓名
total = args.family + args.name
print(total)
print('=====2======')
# print(args.family+args.name)
if __name__ == '__main__':
print(args.name)
print(type(args.name))
print(args.family)
print(type(args.family))
print("=====end=====")
pass
3数据库操作
# -*- coding:utf-8 -*-
# author: cai bao jun
# datetime: 2022/12/2 17:02
from logger import logger
import pymysql
import datetime
import json
class MysqlConfig(object):
database = "testcc" # 测试 trainerN
# database = "trainerN" # zhegnshi
host = "192.168.1.21"
user = "khanx"
port = 3306
password = "Ylyx@2020"
# class MysqlConfig(object):
# database = "test2023" # 测试 trainerN
# host = "127.0.0.1"
# user = "root"
# port = 3306
# password = "root"
# Mysql数据库相关操作
class DMLMysql(object):
def __init__(self, host, database, user, password, port):
try:
self.database = database
print(f"database==={database}")
self.conn = pymysql.connect(host=host, user=user, password=password, database=database, port=port)
self.cursor = self.conn.cursor()
except Exception as e:
logger.error(f"database connect error message is {str(e)}")
pass
pass
def sql(self):
pass
def execute_sql(self, sqlQuery, value):
"""
:param sqlQuery: 拼接好的sql语句
:param value: 需要拼接的值
:return:
"""
try:
self.conn.ping(reconnect=True) # 超时断开重连
self.cursor.execute(sqlQuery, value)
self.conn.commit()
logger.info('数据执行成功!')
except Exception as e:
logger.error(f"insert database name is {self.database} error info is:{str(e)},sql is : {sqlQuery}")
self.conn.rollback()
def select_sql(self,sqlQuery, value):
try:
self.conn.ping(reconnect=True) # 超时断开重连
self.cursor.execute(sqlQuery, value)
ret = self.cursor.fetchall()
logger.info('查询数据执行成功!')
return ret
except Exception as e:
logger.error(f"insert database name is {self.database} error info is:{str(e)},sql is : {sqlQuery}")
self.conn.rollback()
def update_train_v_datagroup_batch(self,userid,vision,primarykeys):
update_sql = f"update dataset_datagroupingdata set is_train=1 where loginuser={userid} and vision='{vision}' and primarykey in ('{primarykeys}')"
# update_sql = """update dataset_datagroupingdata set is_train=1 where loginuser=%s and vision=%s and primarykey in %s"""
try:
self.conn.ping(reconnect=True) # 超时断开重连
self.cursor.execute(update_sql)
self.conn.commit()
return True
except Exception as e:
print(f"error====>> update database name is {self.database} error info is:{str(e)},sql is : {update_sql}")
self.conn.rollback()
return False
def __del__(self):
self.conn.close()
# 运用 批量设置一个字段;
def func3():
li = ["1.2.840.40823.1.1.1.2.1635121048.554.885.330",
"1.2.840.40823.1.1.1.2.1635121157.835.166.611",
"1.2.840.40823.1.1.1.2.1635121221.437.767.212",
"1.2.840.40823.1.1.1.2.1635121389.277.608.53",
"1.2.840.40823.1.1.1.2.1635121422.858.189.634"]
tmp_tup_str = "','".join(li)
db.update_train_v_datagroup_batch(userid=1,vision='2023-03-14',primarykeys=tmp_tup_str)
pass
# 处理表中插入多张图片的路径
def func1():
# 处理多张图片路径保存问题
import json
# 插入
# path = ['/home/ylnet/data/cbj/train-data/1/2023-03-20/1.2.840.40823.1.1.1.2.1635121048.554.885.330/b8b176cb866411ec9f922cea7fb33939.jpg', '/home/ylnet/data/cbj/train-data/1/2023-03-20/1.2.840.40823.1.1.1.2.1635121157.835.166.611/4c51b200874b11ec9f922cea7fb33939.jpg']
# path = json.dumps(path)
# insertsql = f"INSERT INTO `test2023`.`dataset_datagroupingdata`(`finding`, `empression`, `is_train`, `is_test`, `is_validation`, `primarykey`, `filePath`, `is_list`, `is_delete`, `type`, `creattime`, `updatetime`, `sex`, `age`, `loginuser`, `primarylabel`, `primaryfinding`, `vision`, `examination`) VALUES ('', '两肺可疑点状影,请随访复查及必要时行CT检查。', 1, 0, 0, '1.2.840.999.999.999.999.999', '{path}', 0, 0, 1, '2023-03-21 16:17:55.000000', '2023-03-21 16:17:55.000000', '男', 50, 1, '[肺实质-结节状影-位置-肺野-右肺,肺纹理-增多-位置-肺野-右肺,肺纹理-紊乱-位置-肺野-左肺,肺实质-结节状影-位置-肺野-左肺,肺纹理-紊乱-位置-肺野-右肺,肺纹理-增多-位置-肺野-左肺]', '两肺纹理明显增多、紊乱,隐约可见点状影存在,心影大小正常范围,纵隔影无明显增宽,两膈面光滑,两肋膈角锐利。', '2023-03-14', '胸部后前位片');"
# db.execute_sql(insertsql,value=None)
# # 更新
# table = "`test2023`.`dataset_datagroupingdata`"
# path = ['/home/b.jpg', '/home/4c51.jpg']
# path2 = json.dumps(path)
# primarykey = "1.2.840.999.999.999.999.999"
# updatesql = f'''UPDATE {table} SET `filePath` = '{path2}' WHERE `primarykey` = '{primarykey}';'''
# db.execute_sql(updatesql, value=None)
# 取路径
table = "`test2023`.`dataset_datagroupingdata`"
primarykey = "1.2.840.999.999.999.999.999"
sele_sql = f"select filePath from {table} where primarykey='{primarykey}'"
ret = db.select_sql(sqlQuery=sele_sql, value=None)
for r1 in ret:
r1 = json.loads(r1[0])
print(r1)
# print(r1[1])
pass
# 获取某位老师的算法标签
def func2():
pass
### 获取 某位老师的算法标签
li = []
sql = "select labelname from dataset_datasetstate where loginuser=1 and vision='2023-04-04';"
res = db.select_sql(sqlQuery=sql, value=None)
for i in res:
li.append(i[0])
print(li)
print(len(li))
# 获取某位老师的标签阈值
def func5():
pass
### 获取 某位老师的算法标签
li = []
data = {}
# sql = "select labelname from dataset_datasetstate where loginuser=2 and vision='2023-04-04';"
sql = "select labelname,threshold from dataset_labelthreshold where loginuser=2;"
res = db.select_sql(sqlQuery=sql, value=None)
for i in res:
data[i[0]] = i[1]
# li.append(i[0])
# print(li)
print(len(li))
print(data)
# 将算法同学训练数据imagedata 表里的数据拷贝到数据分组功能表里dataset_datagroupingdata用于数据分组回传
def func4():
sql = "insert into dataset_datagroupingdata(finding, empression, is_train, is_test, is_validation, " \
"primarykey, filePath, is_list, is_delete, type, " \
"creattime, updatetime, sex, age, loginuser, " \
"primarylabel,primaryfinding,vision,examination) " \
"select finding, empression, is_train, is_test, is_validation, " \
"primarykey, filePath, is_list, is_delete, type, " \
"creattime, updatetime, sex, age, loginuser, " \
"primarylabel,primaryfinding,vision,'腹部前后位片' from dataset_cleardata where loginuser=1 and vision='2023-04-07';"
db.execute_sql(sqlQuery=sql, value=None)
pass
if __name__ == '__main__':
now1 = datetime.datetime.now()
now2 = datetime.datetime(now1.year, now1.month, now1.day, now1.hour, now1.minute, now1.second)
now3 = datetime.datetime.strftime(now2, "%Y-%m-%d %H:%M:%S") # datetime===>str ## "%Y-%m-%d %H:%M:%S.%f"
now4 = datetime.datetime.strptime(now3,"%Y-%m-%d %H:%M:%S") # str ===> datetime
print(now4, type(now4))
db = DMLMysql(host=MysqlConfig.host, database=MysqlConfig.database, user=MysqlConfig.user,
password=MysqlConfig.password, port=MysqlConfig.port)
# # sql = "select count(0) from dataset_snrdata where vision='2022-12-01'"
# # sql = "select updatetime from dataset_snrdata where primarykey='1.2.840.86.755.8.10146.1.14984.1'"
# sql = "update dataset_snrdata set updatetime=%s where primarykey='1.2.840.86.755.8.10146.1.14984.1'"
# db.execute_sql(sqlQuery=sql,value=(now3))
#
#
# # db.select_sql(sqlQuery=sql,value=None)
# # res = db.cursor.fetchall()[0][0]
# # print(res)
# # print(type(res))
# func1()
# func4()
func5()
4 redis操作
# -*- coding:utf-8 -*-
# author: cai bao jun
# datetime: 2022/12/5 10:48
# Redis 相关操作
import redis
from logger import logger
class DMLRedis(object):
def __init__(self, host, port, password, db_name):
# self.redis_conn = redis.Redis(host=host, port=port, password=password, db=db_name,decode_responses=True)
self.pool = redis.ConnectionPool(host='192.168.10.232', port=6379,max_connections=3)
self.redis_conn = redis.Redis(connection_pool=self.pool,db=db_name, decode_responses=True)
try:
self.redis_conn.ping() # 判断redis是否链接成功
except Exception as e:
logger.error(f"redis connect error info is: {str(e)}")
pass
def set_string(self, key, value):
self.redis_conn.set(key, value)
if __name__ == '__main__':
host = "192.168.10.232"
port = 6379
password = None
db_name = 0
rdb = DMLRedis(host, port, password, db_name)
# rdb.set_string('k5',66)
mset_da = {"k1": 1,"k2": 2,"k3": 3}
rdb.redis_conn.mset(mset_da)
pass
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容