数据挖掘案例

利用Pycharm连接MySQL,利用Python代码通过提取数据库的内容,将其封装到本地,为训练模型提供了源数据支持,利用机器学习算法岭回归对数据进行线性回归,进而得到最终的预测结果。 

(1)创建预测表

CREATE TABLE `ads_cscd_predict_profit_i_y` (
  `fc_date` text COLLATE utf8mb4_unicode_ci,
  `fc_net_profit` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

建立连接如下,更换为自己的IP:

engine = create_engine('mysql+pymysql://root:[email protected]:3306/cscd')

查询数据并封装到本地等待使用

sql = "SELECT a_date, profit_ratio FROM ads_cscd_date_profit_total_asset_i_y"
df = pd.read_sql(sql, engine)

X = df['a_date'].astype('category').cat.codes.values.reshape(-1, 1)
y = df['profit_ratio']

使用岭回归预测模型选择和训练

model = LinearRegression()
model.fit(X, y)

设置预测的自变量操作数据集

data_to_insert = {
    'a_date': ['2023年', '2024年','2025年'],
    'profit_ratio': ['0', '0', '0']
}

读取新数据

df_to_insert = pd.DataFrame(data_to_insert)
df_to_insert.to_sql('ads_cscd_predict_profit_ratio_i_y', con=engine, if_exists='replace', index=False)

sql_new = "SELECT a_date FROM ads_cscd_predict_profit_ratio_i_y"
df_new = pd.read_sql(sql_new, engine)

特征选择

X_new = df_new['a_date'].astype('category').cat.codes.values.reshape(-1, 1)

模型预测

y_new = model.predict(X_new)

预测结果写入数据库

df_new['profit_ratio'] = y_new
df_new['a_date'] = data_to_insert['a_date']
df_new.to_sql('ads_cscd_predict_profit_ratio_i_y', con=engine, if_exists='replace', index=False)

打印输出

print(df_new)

(2)PredictProfit代码

这段代码的作用是使用历史净利润数据建立一个线性回归模型,然后利用该模型对未来某几个时间点的净利润进行预测,并将预测结果插入到数据库表 中。具体步骤如下:

从数据库表ads_cscd_profit_asset_rate_i_y中读取历史净利润数据;

对历史净利润数据进行特征工程处理,将日期转换为数字编码;

建立线性回归模型并训练;

构造需要预测的新数据,并插入到数据库表ads_cscd_predict_profit_i_y中;

从数据库表ads_cscd_predict_profit_i_y中读取待预测的新数据;

对新数据进行特征处理,将日期转换为数字编码;

利用已经训练好的线性回归模型对新数据进行预测;

将预测结果插入到数据库表ads_cscd_predict_profit_i_y中。

# 建立连接
engine = create_engine('mysql+pymysql://root:[email protected]:3306/cscd')
# 读取历史数据
sql = "SELECT fc_date, fc_net_profit FROM ads_cscd_profit_asset_rate_i_y"
df = pd.read_sql(sql, engine)
# 特征工程
X = df['fc_date'].astype('category').cat.codes.values.reshape(-1, 1)
y = df['fc_net_profit']
# 模型选择和训练
model = LinearRegression()
model.fit(X, y)
data_to_insert = {
    'fc_date': ['2023年下半年', '2024年上半年', '2024年下半年'],
    'fc_net_profit': ['0', '0', '0']
}
# 将数据转换为DataFrame
df_to_insert = pd.DataFrame(data_to_insert)
# 插入数据到数据库表中
df_to_insert.to_sql('ads_cscd_predict_profit_i_y', con=engine, if_exists='replace', index=False)
# 读取新数据
sql_new = "SELECT fc_date FROM ads_cscd_predict_profit_i_y"
df_new = pd.read_sql(sql_new, engine)
# 对新数据进行特征处理
X_new = df_new['fc_date'].astype('category').cat.codes.values.reshape(-1, 1)
# 预测新数据
y_new = model.predict(X_new)


# 将预测结果插入数据库表中
df_new['fc_net_profit'] = y_new
df_new['fc_date'] = data_to_insert['fc_date']  # 将日期恢复为原始字符串类型
df_new.to_sql('ads_cscd_predict_profit_i_y', con=engine, if_exists='replace', index=False)
print(df_new)

(3)PredictProfitRatio代码

这段代码的作用和上一段代码类似,也是使用历史数据建立一个线性回归模型,并利用该模型对未来某几个时间点的数据进行预测。具体步骤如下:

从数据库表ads_cscd_date_profit_total_asset_i_y中读取历史收益率数据;

对历史收益率数据进行特征工程处理,将日期转换为数字编码;

建立线性回归模型并训练;

构造需要预测的新数据,并插入到数据库表ads_cscd_predict_profit_ratio_i_y 中;

从数据库表ads_cscd_predict_profit_ratio_i_y中读取待预测的新数据;

对新数据进行特征处理,将日期转换为数字编码;

利用已经训练好的线性回归模型对新数据进行预测;

将预测结果插入到数据库表ads_cscd_predict_profit_ratio_i_y中。

# 建立连接
engine = create_engine('mysql+pymysql://root:[email protected]:3306/cscd')
sql = "SELECT a_date, profit_ratio FROM ads_cscd_date_profit_total_asset_i_y"
df = pd.read_sql(sql, engine)
X = df['a_date'].astype('category').cat.codes.values.reshape(-1, 1)
y = df['profit_ratio']
# 模型选择和训练
model = LinearRegression()
model.fit(X, y)
data_to_insert = {
    'a_date': ['2023年', '2024年','2025年'],
    'profit_ratio': ['0', '0', '0']
}
df_to_insert = pd.DataFrame(data_to_insert)
df_to_insert.to_sql('ads_cscd_predict_profit_ratio_i_y', con=engine, if_exists='replace', index=False)
# 读取新数据
sql_new = "SELECT a_date FROM ads_cscd_predict_profit_ratio_i_y"
df_new = pd.read_sql(sql_new, engine


# 对新数据进行特征处理
X_new = df_new['a_date'].astype('category').cat.codes.values.reshape(-1, 1)
y_new = model.predict(X_new)


# 将预测结果插入数据库表中
df_new['profit_ratio'] = y_new
df_new['a_date'] = data_to_insert['a_date']  # 将日期恢复为原始字符串类型
df_new.to_sql('ads_cscd_predict_profit_ratio_i_y', con=engine, if_exists='replace', index=False)
print(df_new)

数据挖掘案例_第1张图片

图1利润预测结果

数据挖掘案例_第2张图片

图2 利润变化率预测结果

你可能感兴趣的:(数据挖掘,人工智能,大数据,mysql,数据仓库,python,pycharm)