from autogluon.tabular import TabularDataset, TabularPredictor
import datetime
import pymysql
import pandas as pd
import autogluon as ag
predictorBS = TabularPredictor.load("bugStateModel")
predictor14 = TabularPredictor.load("day14_model")
predictor30 = TabularPredictor.load("day30_model")
上面三个是用autogluon已经训练好的模型。如何训练模型?->点击此处,查看博客
# 定义查询函数
def SQLQuery(strsql):
try:
db = pymysql.connect(host='......',
user='.......',
password='......',
database='.......',
charset='utf8', # mysql字符格式
cursorclass=pymysql.cursors.DictCursor)
cursor = db.cursor()
cursor.execute(strsql)
results = cursor.fetchall()
return results
except pymysql.Error as err:
print(err)
finally:
cursor.close()
db.close()
# 定义SQL命令函数(create、insert、delete、update)
def SQLCommand(sql):
try:
db = pymysql.connect(host='........',
user='........',
password='..........',
database='.........',
charset='utf8', # mysql字符格式
cursorclass=pymysql.cursors.DictCursor)
cursor = db.cursor()
cursor.execute(sql);
# 事务提交
db.commit()
return True;
except pymysql.Error as err:
print(err)
finally:
cursor.close()
db.close()
查询数据库中的数据,并转换成dataframe的形式:
strsql = """select ID,product,User
from info
where bugState = 'NEW'
"""
results = SQLQuery(strsql)
bug_yc = pd.DataFrame(results)
用训练好的模型进行预测:
test_data = TabularDataset(bug_yc)
D14_pred = predictor14.predict(test_data)
D30_pred = predictor30.predict(test_data)
BS_pred = predictorBS.predict(test_data)
# 进行预测
D30_pred_proba = predictor30.predict_proba(test_data)
D14_pred_proba = predictor14.predict_proba(test_data)
BS_pred_proba = predictorBS.predict_proba(test_data)
# 构建数据库连接,将merged_df写回数据库
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://user:password@host:端口号/database", encoding='utf-8', echo=True)
con = engine.connect() # 创建连接
merged_df.to_sql(name='info', con=con, if_exists='replace', index=False)
其中上面代码当中的user、password、host、端口号、database(数据库名称) 需要更改为HeidiSQL对应名称。
注意,这里如果直接使用if_exists='replace'
的话,会将修改后的python的数据直接替换sql当中的整张表,因此不能直接使用replace。而是先将修改的数据与原始数据进行合并,之后再写回数据库。