背景
在中医药学中,物品与功效之间的关联关系研究是一个非常重要的课题。传统中医药学中,很多药物都具有多种功效,而且不同药物对同一种疾病可能具有不同的疗效。因此,挖掘物品与功效之间的关联关系,可以帮助我们更加准确地认识和应用中医药宝库中的药物,从而提高中医药学的治疗效果和水平。
随着信息技术的快速发展,Python作为一种流行的编程语言,已经被广泛应用于中医药学领域。Python具有丰富的第三方库和工具,例如NumPy、Pandas、Matplotlib等,这些库和工具为中医药学数据挖掘提供了丰富的工具和支持。同时,Python Flask + Pyecharts实现了中药数据可视化大屏,为物品与功效之间的关联关系研究提供了有效的可视化工具。
基于物品的关联规则算法在中医药学中的应用研究具有重要的研究背景和意义。通过构建物品-功效对应关系表,并利用Python Flask + Pyecharts实现中药数据可视化大屏,可以实现对物品与功效之间关联关系的定量分析,为中医药学的研究提供有力的数据支持。同时,基于物品的关联规则算法还可以为中医药学挖掘关联规则提供新的思路和方法,有助于发掘中医药宝库中的更多创新和发展机会。
技术栈:
flask框架
pandas
selenium爬虫
pyecharts可视化
关联规则算法(纯算法,没有库)
前端html+js+css
前端页面设计
前端设计的关键步骤:
页面布局设计:
使用Flex布局将页面分为左侧、中间和右侧三个主要部分,每个部分包含多个子元素。
左侧和右侧各包含三个垂直排列的子元素,用于展示不同类型的数据。
中间部分用于显示地图数据,并包含一个计时器显示当前时间。
样式设计:
设置全局样式,包括页面背景色、字体颜色、间距等,确保页面整体风格统一。
设计每个数据展示框的样式,包括边框样式、高度、宽度等,使其具有辨识度。
为表格容器添加滚动条样式,确保表格数据超出容器高度时可以滚动查看。
数据填充与更新:
使用JavaScript和jQuery库实现数据的动态填充和更新,通过Ajax请求从后端获取最新数据并更新图表。
在表格部分,根据后端返回的数据动态生成表格行,并实现表格的滚动效果。
图表展示:
使用ECharts库初始化各个图表实例,并根据后端返回的数据更新图表内容。
不仅展示静态图表,还可以通过定时器定时刷新数据,实现实时数据展示。
通过以上设计,可以实现一个交互性强、信息展示清晰的气象数据可视化大屏,为用户提供直观、动态的数据分析和监控功能。
flask框架代码
@app.route("/")
def index():
return render_template("main.html")
@app.route("/style.css")
def get_scss():
return render_template("style.css")
@app.route("/css/<cssname>")
def get_fcss(cssname):
return render_template("css/"+cssname)
@app.route("/js/<jsname>")
def get_JS(jsname):
return render_template("js/"+jsname)
@app.route("/barChart")
def get_bar_chart():
c = bar_base()
return c.dump_options_with_quotes()
@app.route("/mapChart")
def get_map_chart():
c = map_base()
return c.dump_options_with_quotes()
@app.route("/blm")
def get_bar2_chart():
c = get_HY_BAR()
return c.dump_options_with_quotes()
关联规则算法
from __future__ import print_function
import pandas as pd
import numpy as np
from apriori import find_rule # 导入自行编写的apriori函数
df = pd.read_csv('medicine_data.csv')
df=df[df['中药材类别(按功效划分)'].str.contains('活血', na=False)]
df['功效']=df['功效'].str.replace('。','')
data=df['功效'].str.split('、',expand=True)
print(df.info())
print('data: \n', data)
print(u'\n转换原始数据至0-1矩阵...')
# 确认数据转换为 NumPy 数组
data_array = data.values
print('data_array: \n', data_array)
print('data_array shape: ', data_array.shape)
print('data_array type: ', type(data_array))
# print('data_as_matrix: \n', data.as_matrix())
# array = np.array(data)
# a1 = array[0, :]
# print('a1: \n', a1)
# print(pd.Series(1, index=a1[pd.notna(a1)]))
# 匿名函数ct的作用是取出x中不是NAN的元素作为索引列,然后对应的值都为1。
# pd.Series()要求值的个数要么和索引的个数相等,要么只给定一个值然后按照索引的个数复制
# 转换成0-1矩阵
ct = lambda x: pd.Series(1, index=x[pd.notna(x)])
data_01matrix = data.apply(ct, axis=1).fillna(0)
print('data_01matrix: \n', data_01matrix)
print(u'\n转换完毕。')
#
support = 0.05 # 最小支持度
confidence = 0.5 # 最小置信度
ms = '---' # 连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符
# find_rule(data, support, confidence, ms).to_excel(output_path)
result = find_rule(data_01matrix, support, confidence, ms) # 输出结果
result.reset_index(inplace=True)
print('result: \n', result)
print(result.info())
print(result.values.tolist())
运行结果: