perf(code): 添加算法运行时间计时并更换数据集

- 在 Apriori 和 FP-Growth算法运行前后添加时间计时代码
- 将输入数据集从 menu_orders.xls 更改为 iris.csv
- 更新数据读取方式以适应 CSV 文件格式
-保留算法结果并输出运行时间
This commit is contained in:
fly6516 2025-03-14 11:40:29 +08:00
parent 99acd6447f
commit 6298c14f78
5 changed files with 167 additions and 6 deletions

View File

@ -3,10 +3,11 @@
from __future__ import print_function from __future__ import print_function
import pandas as pd import pandas as pd
from apriori import * #导入自行编写的apriori函数 from apriori import * #导入自行编写的apriori函数
import time # 导入time模块用于计时
inputfile = '../data/menu_orders.xls' inputfile = '../data/iris.csv'
outputfile = '../tmp/apriori_rules.xlsx' #结果文件,保留 .xlsx 格式 outputfile = '../tmp/apriori_rules.xlsx' #结果文件,保留 .xlsx 格式
data = pd.read_excel(inputfile, header = None) data = pd.read_csv(inputfile, header = None)
print(u'\n转换原始数据至0-1矩阵...') print(u'\n转换原始数据至0-1矩阵...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数 ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
@ -21,4 +22,9 @@ ms = '---' #连接符,默认'--'用来区分不同元素如A--B。需要
# 提醒用户需要安装 openpyxl 库以支持 .xlsx 格式 # 提醒用户需要安装 openpyxl 库以支持 .xlsx 格式
# 如果未安装可以通过以下命令安装pip install openpyxl # 如果未安装可以通过以下命令安装pip install openpyxl
find_rule(data, support, confidence, ms).to_excel(outputfile, engine='openpyxl') #保存结果,指定 engine='openpyxl' start_time = time.time() # 记录开始时间
result = find_rule(data, support, confidence, ms)
end_time = time.time() # 记录结束时间
print(f'\nApriori算法运行时间: {end_time - start_time}')
result.to_excel(outputfile, engine='openpyxl') #保存结果,指定 engine='openpyxl'

View File

@ -3,10 +3,11 @@
from __future__ import print_function from __future__ import print_function
import pandas as pd import pandas as pd
from fpgrowth import find_frequent_itemsets # 导入FP-Growth函数 from fpgrowth import find_frequent_itemsets # 导入FP-Growth函数
import time # 导入time模块用于计时
inputfile = '../data/menu_orders.xls' inputfile = '../data/iris.csv'
outputfile = '../tmp/fpgrowth_rules.xlsx' # 结果文件,保留 .xlsx 格式 outputfile = '../tmp/fpgrowth_rules.xlsx' # 结果文件,保留 .xlsx 格式
data = pd.read_excel(inputfile, header=None) data = pd.read_csv(inputfile, header=None)
print(u'\n转换原始数据至0-1矩阵...') print(u'\n转换原始数据至0-1矩阵...')
ct = lambda x: pd.Series(1, index=x[pd.notnull(x)]) # 转换0-1矩阵的过渡函数 ct = lambda x: pd.Series(1, index=x[pd.notnull(x)]) # 转换0-1矩阵的过渡函数
@ -24,7 +25,10 @@ min_support = 0.2 # 最小支持度
min_support_count = int(min_support * len(transactions)) # 转换为绝对支持度 min_support_count = int(min_support * len(transactions)) # 转换为绝对支持度
# 使用FP-Growth算法挖掘频繁项集 # 使用FP-Growth算法挖掘频繁项集
start_time = time.time() # 记录开始时间
frequent_itemsets = find_frequent_itemsets(transactions, min_support_count) frequent_itemsets = find_frequent_itemsets(transactions, min_support_count)
end_time = time.time() # 记录结束时间
print(f'\nFP-Growth算法运行时间: {end_time - start_time}')
# 确保 frequent_itemsets 是一个列表,其中每个元素是一个列表 # 确保 frequent_itemsets 是一个列表,其中每个元素是一个列表
frequent_itemsets = [list(itemset) for itemset in frequent_itemsets] frequent_itemsets = [list(itemset) for itemset in frequent_itemsets]

151
data/iris.csv Normal file
View File

@ -0,0 +1,151 @@
"","Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species"
"1",5.1,3.5,1.4,0.2,"setosa"
"2",4.9,3,1.4,0.2,"setosa"
"3",4.7,3.2,1.3,0.2,"setosa"
"4",4.6,3.1,1.5,0.2,"setosa"
"5",5,3.6,1.4,0.2,"setosa"
"6",5.4,3.9,1.7,0.4,"setosa"
"7",4.6,3.4,1.4,0.3,"setosa"
"8",5,3.4,1.5,0.2,"setosa"
"9",4.4,2.9,1.4,0.2,"setosa"
"10",4.9,3.1,1.5,0.1,"setosa"
"11",5.4,3.7,1.5,0.2,"setosa"
"12",4.8,3.4,1.6,0.2,"setosa"
"13",4.8,3,1.4,0.1,"setosa"
"14",4.3,3,1.1,0.1,"setosa"
"15",5.8,4,1.2,0.2,"setosa"
"16",5.7,4.4,1.5,0.4,"setosa"
"17",5.4,3.9,1.3,0.4,"setosa"
"18",5.1,3.5,1.4,0.3,"setosa"
"19",5.7,3.8,1.7,0.3,"setosa"
"20",5.1,3.8,1.5,0.3,"setosa"
"21",5.4,3.4,1.7,0.2,"setosa"
"22",5.1,3.7,1.5,0.4,"setosa"
"23",4.6,3.6,1,0.2,"setosa"
"24",5.1,3.3,1.7,0.5,"setosa"
"25",4.8,3.4,1.9,0.2,"setosa"
"26",5,3,1.6,0.2,"setosa"
"27",5,3.4,1.6,0.4,"setosa"
"28",5.2,3.5,1.5,0.2,"setosa"
"29",5.2,3.4,1.4,0.2,"setosa"
"30",4.7,3.2,1.6,0.2,"setosa"
"31",4.8,3.1,1.6,0.2,"setosa"
"32",5.4,3.4,1.5,0.4,"setosa"
"33",5.2,4.1,1.5,0.1,"setosa"
"34",5.5,4.2,1.4,0.2,"setosa"
"35",4.9,3.1,1.5,0.2,"setosa"
"36",5,3.2,1.2,0.2,"setosa"
"37",5.5,3.5,1.3,0.2,"setosa"
"38",4.9,3.6,1.4,0.1,"setosa"
"39",4.4,3,1.3,0.2,"setosa"
"40",5.1,3.4,1.5,0.2,"setosa"
"41",5,3.5,1.3,0.3,"setosa"
"42",4.5,2.3,1.3,0.3,"setosa"
"43",4.4,3.2,1.3,0.2,"setosa"
"44",5,3.5,1.6,0.6,"setosa"
"45",5.1,3.8,1.9,0.4,"setosa"
"46",4.8,3,1.4,0.3,"setosa"
"47",5.1,3.8,1.6,0.2,"setosa"
"48",4.6,3.2,1.4,0.2,"setosa"
"49",5.3,3.7,1.5,0.2,"setosa"
"50",5,3.3,1.4,0.2,"setosa"
"51",7,3.2,4.7,1.4,"versicolor"
"52",6.4,3.2,4.5,1.5,"versicolor"
"53",6.9,3.1,4.9,1.5,"versicolor"
"54",5.5,2.3,4,1.3,"versicolor"
"55",6.5,2.8,4.6,1.5,"versicolor"
"56",5.7,2.8,4.5,1.3,"versicolor"
"57",6.3,3.3,4.7,1.6,"versicolor"
"58",4.9,2.4,3.3,1,"versicolor"
"59",6.6,2.9,4.6,1.3,"versicolor"
"60",5.2,2.7,3.9,1.4,"versicolor"
"61",5,2,3.5,1,"versicolor"
"62",5.9,3,4.2,1.5,"versicolor"
"63",6,2.2,4,1,"versicolor"
"64",6.1,2.9,4.7,1.4,"versicolor"
"65",5.6,2.9,3.6,1.3,"versicolor"
"66",6.7,3.1,4.4,1.4,"versicolor"
"67",5.6,3,4.5,1.5,"versicolor"
"68",5.8,2.7,4.1,1,"versicolor"
"69",6.2,2.2,4.5,1.5,"versicolor"
"70",5.6,2.5,3.9,1.1,"versicolor"
"71",5.9,3.2,4.8,1.8,"versicolor"
"72",6.1,2.8,4,1.3,"versicolor"
"73",6.3,2.5,4.9,1.5,"versicolor"
"74",6.1,2.8,4.7,1.2,"versicolor"
"75",6.4,2.9,4.3,1.3,"versicolor"
"76",6.6,3,4.4,1.4,"versicolor"
"77",6.8,2.8,4.8,1.4,"versicolor"
"78",6.7,3,5,1.7,"versicolor"
"79",6,2.9,4.5,1.5,"versicolor"
"80",5.7,2.6,3.5,1,"versicolor"
"81",5.5,2.4,3.8,1.1,"versicolor"
"82",5.5,2.4,3.7,1,"versicolor"
"83",5.8,2.7,3.9,1.2,"versicolor"
"84",6,2.7,5.1,1.6,"versicolor"
"85",5.4,3,4.5,1.5,"versicolor"
"86",6,3.4,4.5,1.6,"versicolor"
"87",6.7,3.1,4.7,1.5,"versicolor"
"88",6.3,2.3,4.4,1.3,"versicolor"
"89",5.6,3,4.1,1.3,"versicolor"
"90",5.5,2.5,4,1.3,"versicolor"
"91",5.5,2.6,4.4,1.2,"versicolor"
"92",6.1,3,4.6,1.4,"versicolor"
"93",5.8,2.6,4,1.2,"versicolor"
"94",5,2.3,3.3,1,"versicolor"
"95",5.6,2.7,4.2,1.3,"versicolor"
"96",5.7,3,4.2,1.2,"versicolor"
"97",5.7,2.9,4.2,1.3,"versicolor"
"98",6.2,2.9,4.3,1.3,"versicolor"
"99",5.1,2.5,3,1.1,"versicolor"
"100",5.7,2.8,4.1,1.3,"versicolor"
"101",6.3,3.3,6,2.5,"virginica"
"102",5.8,2.7,5.1,1.9,"virginica"
"103",7.1,3,5.9,2.1,"virginica"
"104",6.3,2.9,5.6,1.8,"virginica"
"105",6.5,3,5.8,2.2,"virginica"
"106",7.6,3,6.6,2.1,"virginica"
"107",4.9,2.5,4.5,1.7,"virginica"
"108",7.3,2.9,6.3,1.8,"virginica"
"109",6.7,2.5,5.8,1.8,"virginica"
"110",7.2,3.6,6.1,2.5,"virginica"
"111",6.5,3.2,5.1,2,"virginica"
"112",6.4,2.7,5.3,1.9,"virginica"
"113",6.8,3,5.5,2.1,"virginica"
"114",5.7,2.5,5,2,"virginica"
"115",5.8,2.8,5.1,2.4,"virginica"
"116",6.4,3.2,5.3,2.3,"virginica"
"117",6.5,3,5.5,1.8,"virginica"
"118",7.7,3.8,6.7,2.2,"virginica"
"119",7.7,2.6,6.9,2.3,"virginica"
"120",6,2.2,5,1.5,"virginica"
"121",6.9,3.2,5.7,2.3,"virginica"
"122",5.6,2.8,4.9,2,"virginica"
"123",7.7,2.8,6.7,2,"virginica"
"124",6.3,2.7,4.9,1.8,"virginica"
"125",6.7,3.3,5.7,2.1,"virginica"
"126",7.2,3.2,6,1.8,"virginica"
"127",6.2,2.8,4.8,1.8,"virginica"
"128",6.1,3,4.9,1.8,"virginica"
"129",6.4,2.8,5.6,2.1,"virginica"
"130",7.2,3,5.8,1.6,"virginica"
"131",7.4,2.8,6.1,1.9,"virginica"
"132",7.9,3.8,6.4,2,"virginica"
"133",6.4,2.8,5.6,2.2,"virginica"
"134",6.3,2.8,5.1,1.5,"virginica"
"135",6.1,2.6,5.6,1.4,"virginica"
"136",7.7,3,6.1,2.3,"virginica"
"137",6.3,3.4,5.6,2.4,"virginica"
"138",6.4,3.1,5.5,1.8,"virginica"
"139",6,3,4.8,1.8,"virginica"
"140",6.9,3.1,5.4,2.1,"virginica"
"141",6.7,3.1,5.6,2.4,"virginica"
"142",6.9,3.1,5.1,2.3,"virginica"
"143",5.8,2.7,5.1,1.9,"virginica"
"144",6.8,3.2,5.9,2.3,"virginica"
"145",6.7,3.3,5.7,2.5,"virginica"
"146",6.7,3,5.2,2.3,"virginica"
"147",6.3,2.5,5,1.9,"virginica"
"148",6.5,3,5.2,2,"virginica"
"149",6.2,3.4,5.4,2.3,"virginica"
"150",5.9,3,5.1,1.8,"virginica"
1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2 1 5.1 3.5 1.4 0.2 setosa
3 2 4.9 3 1.4 0.2 setosa
4 3 4.7 3.2 1.3 0.2 setosa
5 4 4.6 3.1 1.5 0.2 setosa
6 5 5 3.6 1.4 0.2 setosa
7 6 5.4 3.9 1.7 0.4 setosa
8 7 4.6 3.4 1.4 0.3 setosa
9 8 5 3.4 1.5 0.2 setosa
10 9 4.4 2.9 1.4 0.2 setosa
11 10 4.9 3.1 1.5 0.1 setosa
12 11 5.4 3.7 1.5 0.2 setosa
13 12 4.8 3.4 1.6 0.2 setosa
14 13 4.8 3 1.4 0.1 setosa
15 14 4.3 3 1.1 0.1 setosa
16 15 5.8 4 1.2 0.2 setosa
17 16 5.7 4.4 1.5 0.4 setosa
18 17 5.4 3.9 1.3 0.4 setosa
19 18 5.1 3.5 1.4 0.3 setosa
20 19 5.7 3.8 1.7 0.3 setosa
21 20 5.1 3.8 1.5 0.3 setosa
22 21 5.4 3.4 1.7 0.2 setosa
23 22 5.1 3.7 1.5 0.4 setosa
24 23 4.6 3.6 1 0.2 setosa
25 24 5.1 3.3 1.7 0.5 setosa
26 25 4.8 3.4 1.9 0.2 setosa
27 26 5 3 1.6 0.2 setosa
28 27 5 3.4 1.6 0.4 setosa
29 28 5.2 3.5 1.5 0.2 setosa
30 29 5.2 3.4 1.4 0.2 setosa
31 30 4.7 3.2 1.6 0.2 setosa
32 31 4.8 3.1 1.6 0.2 setosa
33 32 5.4 3.4 1.5 0.4 setosa
34 33 5.2 4.1 1.5 0.1 setosa
35 34 5.5 4.2 1.4 0.2 setosa
36 35 4.9 3.1 1.5 0.2 setosa
37 36 5 3.2 1.2 0.2 setosa
38 37 5.5 3.5 1.3 0.2 setosa
39 38 4.9 3.6 1.4 0.1 setosa
40 39 4.4 3 1.3 0.2 setosa
41 40 5.1 3.4 1.5 0.2 setosa
42 41 5 3.5 1.3 0.3 setosa
43 42 4.5 2.3 1.3 0.3 setosa
44 43 4.4 3.2 1.3 0.2 setosa
45 44 5 3.5 1.6 0.6 setosa
46 45 5.1 3.8 1.9 0.4 setosa
47 46 4.8 3 1.4 0.3 setosa
48 47 5.1 3.8 1.6 0.2 setosa
49 48 4.6 3.2 1.4 0.2 setosa
50 49 5.3 3.7 1.5 0.2 setosa
51 50 5 3.3 1.4 0.2 setosa
52 51 7 3.2 4.7 1.4 versicolor
53 52 6.4 3.2 4.5 1.5 versicolor
54 53 6.9 3.1 4.9 1.5 versicolor
55 54 5.5 2.3 4 1.3 versicolor
56 55 6.5 2.8 4.6 1.5 versicolor
57 56 5.7 2.8 4.5 1.3 versicolor
58 57 6.3 3.3 4.7 1.6 versicolor
59 58 4.9 2.4 3.3 1 versicolor
60 59 6.6 2.9 4.6 1.3 versicolor
61 60 5.2 2.7 3.9 1.4 versicolor
62 61 5 2 3.5 1 versicolor
63 62 5.9 3 4.2 1.5 versicolor
64 63 6 2.2 4 1 versicolor
65 64 6.1 2.9 4.7 1.4 versicolor
66 65 5.6 2.9 3.6 1.3 versicolor
67 66 6.7 3.1 4.4 1.4 versicolor
68 67 5.6 3 4.5 1.5 versicolor
69 68 5.8 2.7 4.1 1 versicolor
70 69 6.2 2.2 4.5 1.5 versicolor
71 70 5.6 2.5 3.9 1.1 versicolor
72 71 5.9 3.2 4.8 1.8 versicolor
73 72 6.1 2.8 4 1.3 versicolor
74 73 6.3 2.5 4.9 1.5 versicolor
75 74 6.1 2.8 4.7 1.2 versicolor
76 75 6.4 2.9 4.3 1.3 versicolor
77 76 6.6 3 4.4 1.4 versicolor
78 77 6.8 2.8 4.8 1.4 versicolor
79 78 6.7 3 5 1.7 versicolor
80 79 6 2.9 4.5 1.5 versicolor
81 80 5.7 2.6 3.5 1 versicolor
82 81 5.5 2.4 3.8 1.1 versicolor
83 82 5.5 2.4 3.7 1 versicolor
84 83 5.8 2.7 3.9 1.2 versicolor
85 84 6 2.7 5.1 1.6 versicolor
86 85 5.4 3 4.5 1.5 versicolor
87 86 6 3.4 4.5 1.6 versicolor
88 87 6.7 3.1 4.7 1.5 versicolor
89 88 6.3 2.3 4.4 1.3 versicolor
90 89 5.6 3 4.1 1.3 versicolor
91 90 5.5 2.5 4 1.3 versicolor
92 91 5.5 2.6 4.4 1.2 versicolor
93 92 6.1 3 4.6 1.4 versicolor
94 93 5.8 2.6 4 1.2 versicolor
95 94 5 2.3 3.3 1 versicolor
96 95 5.6 2.7 4.2 1.3 versicolor
97 96 5.7 3 4.2 1.2 versicolor
98 97 5.7 2.9 4.2 1.3 versicolor
99 98 6.2 2.9 4.3 1.3 versicolor
100 99 5.1 2.5 3 1.1 versicolor
101 100 5.7 2.8 4.1 1.3 versicolor
102 101 6.3 3.3 6 2.5 virginica
103 102 5.8 2.7 5.1 1.9 virginica
104 103 7.1 3 5.9 2.1 virginica
105 104 6.3 2.9 5.6 1.8 virginica
106 105 6.5 3 5.8 2.2 virginica
107 106 7.6 3 6.6 2.1 virginica
108 107 4.9 2.5 4.5 1.7 virginica
109 108 7.3 2.9 6.3 1.8 virginica
110 109 6.7 2.5 5.8 1.8 virginica
111 110 7.2 3.6 6.1 2.5 virginica
112 111 6.5 3.2 5.1 2 virginica
113 112 6.4 2.7 5.3 1.9 virginica
114 113 6.8 3 5.5 2.1 virginica
115 114 5.7 2.5 5 2 virginica
116 115 5.8 2.8 5.1 2.4 virginica
117 116 6.4 3.2 5.3 2.3 virginica
118 117 6.5 3 5.5 1.8 virginica
119 118 7.7 3.8 6.7 2.2 virginica
120 119 7.7 2.6 6.9 2.3 virginica
121 120 6 2.2 5 1.5 virginica
122 121 6.9 3.2 5.7 2.3 virginica
123 122 5.6 2.8 4.9 2 virginica
124 123 7.7 2.8 6.7 2 virginica
125 124 6.3 2.7 4.9 1.8 virginica
126 125 6.7 3.3 5.7 2.1 virginica
127 126 7.2 3.2 6 1.8 virginica
128 127 6.2 2.8 4.8 1.8 virginica
129 128 6.1 3 4.9 1.8 virginica
130 129 6.4 2.8 5.6 2.1 virginica
131 130 7.2 3 5.8 1.6 virginica
132 131 7.4 2.8 6.1 1.9 virginica
133 132 7.9 3.8 6.4 2 virginica
134 133 6.4 2.8 5.6 2.2 virginica
135 134 6.3 2.8 5.1 1.5 virginica
136 135 6.1 2.6 5.6 1.4 virginica
137 136 7.7 3 6.1 2.3 virginica
138 137 6.3 3.4 5.6 2.4 virginica
139 138 6.4 3.1 5.5 1.8 virginica
140 139 6 3 4.8 1.8 virginica
141 140 6.9 3.1 5.4 2.1 virginica
142 141 6.7 3.1 5.6 2.4 virginica
143 142 6.9 3.1 5.1 2.3 virginica
144 143 5.8 2.7 5.1 1.9 virginica
145 144 6.8 3.2 5.9 2.3 virginica
146 145 6.7 3.3 5.7 2.5 virginica
147 146 6.7 3 5.2 2.3 virginica
148 147 6.3 2.5 5 1.9 virginica
149 148 6.5 3 5.2 2 virginica
150 149 6.2 3.4 5.4 2.3 virginica
151 150 5.9 3 5.1 1.8 virginica

Binary file not shown.

Binary file not shown.