- 收藏
- 加入书签
数据挖掘中案例编程思维探析研究
[基金项目:安徽高校自然科学研究项目,编号:KJ2020A0055;安徽省质量工程教学研究项目:编号:2020jyxm0649.
作者简介:周湘辉(1978-),博士,副教授,主要从事数据分析、随机控制、神经网络研究. 许凯(1988-),博士,副教授,主要从事统计推断及课程教学方面的研究。]
摘要:本文通过案例的方式,运用多思维、多角度、多广度、多路径的方式呈现解决问题的编程方法。基于同一个问题的五个案例,应用matlab编程代码寻找最大值方法,以及运用python语言对三个案例编程实现搜索最大值的思维方法。根据这些示范案例程序,引导学生掌握多维度方式下的逻辑与广度编程思维,进而提高学生解决问题的思维能力和创新能力。
关键字:思维探索;编程技术;代码;全排列;最大值函数
1 引言
数据挖掘是知识发掘或者发现的一个过程,也是从海量数据中通过一定的算法和程序设计实现搜索隐藏于大量数据中的可用信息[1]。数据挖掘技术涉及到机器学习、数据库、统计学等的交叉应用,是计算机科学和统计学的一个跨学科子领域 [2]。数据挖掘技术在分析大量数据中具有明显优势,在金融业、服务业和通信业等具有大量数据的行业有着广泛的应用,如专家系统、信息检索、在线统计与分析等。数据问题的分析需要对数据和目标有一定的深入理解和多方面考虑。特别地,数据挖掘中常常伴随着数据清洗,这需要设计数据清洗的一个规则,它离不开设计者底层的一段代码;数据选择与变换,这离不开提取与选择的程序设计;将数据进行汇总或聚集操作也离不开把数据变换和统一成适合挖掘形式的代码设计。又如,应用网络爬虫完成一项任务,这种重复性、智能性的任务离不开一段程序代码[3]。
编程是二十一世纪的技能,没有哪一个阶段比现在更需要编程技能了,当前越来越多的职业把编程技术当成不可缺的一部分[4]。例如,我们生活的方方面面都离不开程序,全智能洗衣机、全智能电饭煲、全智能扫地机器人、自动驾驶汽车、无人机等,更不提编程应用在工业领域中的大显身手了。微信与支付宝的出现使得人们的交流和支付变得非常方便和高效,其应用离不开程序的设计。“编程等于解决问题”这句话的确说的没错。编程是21世纪的一项关键技术[5]。它能帮助人们执行重复性的任务和更有效的工作。工业机器人的复杂动作的执行都离不开代码编程的实现,一切高效的工作都离不开程序员的代码设计。
其实,我们在解决一个问题时,实现的路径一般有多种方式。这种多思维方式离不开思维的深度、广度与发散的探析[6]。数据挖掘是一种基于数据或数据库,应用编程技术和统计知识挖掘潜在或隐含于数据中有价值的信息过程[7]。本文的主要目的在于探索数据挖掘编程教学过程中解决问题的多种思维方式和广度,以期激发学生解决问题的多路径、重思索、勤动手的学习习惯,培养学生的编程能力和创新思维。
2 编程思维探析
在数据挖掘的程序流程控制的一个实训案例如下:从1、3、4、5、7五个数字中遍历所有数字,使得到一个两位数乘三位数(这五个数字不重复使用)的积,运用编程的方法找出积中最大的那个数。在本节中,将用八种不同编程思维解决这个问题,以此探索思维奥妙。
2.1 案例编程思维探析一
编程思想:将五个数字1、3、4、5、7组成一个数组。用全排列函数perms()将该数组进行全排列,得到一个120行5列的数组。对每一种排列,选取前两个数组成一个两位数,选取排列数组的后三个数,组成一个三位数,然后得到两位数乘三位数的积的集合。用比较大小法找出集合结果中最大的那个数为39493,其matlab编程代码如下:
x=[1,3,4,5,7];
data=perms(x);
max=0;
for i=1: length(data)
num=(data(i,1)*10+data(i,2)) *(data(i,3)*100 +data(i,4)*10+data(i,5));
if num>=max
max=num;
else
max=max;
end
end
disp(max)
2.2 案例编程思维探析二
编程思想:将五个数字1、3、4、5、7组成一个数组。用全排列函数perms()将该数组进行全排列,得到一个120行5列的数组。对每一种排列,选取前两个数组成一个两位数,选取排列数组的后三个数,组成一个三位数,计算得到两位数乘三位数的积的数组。在for循环中将每一个积的结果添加到设定的数组中,所有积的结果如表1所示。运用最大值函数max()找出120个结果中最大的那个数,其matlab编程代码如下:
x=[1,3,4,5,7];
data=perms(x);
list=[];
for i=1: length(data)
num=(data(i,1)*10+data(i,2)) *(data(i,3)*100 +data(i,4)*10+data(i,5));
list=[list, num];
end
disp(max(list))
2.3 案例编程思维探析三
编程思想:将五个数字1、3、4、5、7组成一个数组。用全排列函数perms()将该数组进行全排列,得到一个120行5列的数组。因为要找的积中最大的那个数一定是在这120种排列里的某个排列中两位数乘三位数的结果,基于点乘的方法,应用最大值函数max()找出这个最大数,其matlab编程代码如下:
x=[1 3 4 5 7];
data=perms(x);
num=(data(:,1).*100+data(:,2).*10
+data(:,3)).*(data(:,4).*10+data(:,5));
disp(max(num))
上述三个案例中均是基于全排列函数perms( )而进行编程实现找到最大值的方法。下面两个案例不运用全排列函数,而是只运用循环与条件控制来寻找最大值的编程方法。
2.4 案例编程思维探析四
编程思想:将五个数字1、3、4、5、7组成一个数组x。用两个for循环遍历x, 选择数组x中两个不相同的两个数组成一个两位数,然后选择剩下的三个数,按照从大到小的顺序组成一个三位数,从而得到此时的两位数乘三位数的积,并将此数存到相应位置上的一个矩阵中,更新数组x,以此循环遍历所有情形,最后运用max()函数得到结果矩阵中列中最大的数组,再用max()函数得到该数组中最大的数,其matlab程序代码下:
x=[1 3 4 5 7];
for i=1:5
for j=1:5
if i~=j
num1=x(i)*10+x(j);
x([i j])=[];
r=sort(x);
num2=r(3)*100+r(2)*10+r(1);
result(i,j)=num1*num2;
x=[1 3 4 5 7];
else
result(i,j)=0;
end
end
end
max(max(result))
当程序运行完后,矩阵result的最后结果如下:
2.5 案例编程思维探析五
编程思想:使用剪枝的方法,从五个数字1、3、4、5、7选出两个数字,按降序组成一个数组得到一个两位数,剩下三个数字按降序组成一个数组得到一个三位数,然后将这个两位数乘三位数,得到它们的积,遍历全部可能,最后得到积的最大数39493。其matlab程序代码如下:
x=[1,3,4,5,7];
max=0;
for p=1:5
for q=p+1:5
y=x;
v=0;
u=0;
v=y(p)*1+y(q)*10+v;
y(p)=0;
y(q)=0;
j=1;
for n=1:5
if y(n)~=0
u=u+y(n)*j;
j=j*10;
end
end
if v*u>max
max=u*v;
end
end
end
disp(max)
2.6 案例编程思维探析六
上述五个案例均是基于matlab的程序设计解决寻找最大值问题。下面三个案例,作者基于python语言编程思想寻找积的最大值方法。
编程思想:将五个数字1、3、4、5、7组成一个列表。用五个for循环,每一个循环取一个数,这样将得到的五个数组成一个列表,用集合的方法(集合具有元素唯一性)得到新的列表,然后用一个条件选择来得到这个两位数乘三位数的积,再将其积的结果添加到空列表中,用最大值函数找出这个最大数39493。具体Python编程代码如下:
x=[1,3,4,5,7]
data=[]
for a in x:
for b in x:
for c in x:
for d in x:
for e in x:
list=[a,b,c,d,e]
set_list=set(list)
if len(set_list)==len(list):
num=(a*10+b)*(c*100+d*10+e)
data.append(num)
print(max(data))
2.7 案例编程思维探析七
编程思想:基于遍历方法,逐个比较判断确定两位数乘三位数的数字,将积的结果添加到空列表中,应用最大值函数max( )找出这个最大数。具体Python编程代码如下:
x=[1,3,4,5,7];
data=[];
for a in x:
for b in x:
if b==a:
continue
for c in x:
if c==a or c==b:
continue;
for d in x:
if d==a or d==b or d==c:
continue
for e in x:
if e==a or e==b or e==c or e==d:
continue
else:
num=(a*10+b)*(c*100+d*10+e)
data.append(num)
print(max(data))
2.8 案例编程思维探析八
编程思想:将五个数字1、3、4、5、7组成一个列表。导入迭代库itertools。定义一个空列表,用于存储结果。应用全排列函数permutations()将列表x进行全排列。用for循环遍历这个全排列,对每一个排列进行两位数乘三位数的积运算,将结果存到空列表中,最后用最大值函数 max()找出这个最大数39493,其Python编程代码如下:
x=[1,3,4,5,7]
import itertools as it
data=[]
d=list(it.permutations(x))
for i in range(len(d)):
num=(d[i][0]*10+d[i][1])*(d[i][2]*100
+d[i][3]*10+d[i][4])
data.append(num)
print(max(data))
3 结语
本文通过八个案例,围绕同一个目标从不同思维角度和路径设计程序解决问题。数据挖掘是对数据的深入理解和对问题的熟虑后作出正确的逻辑分析、运算与判断,其教学目的是培养学生的知识性和训练学生的算法思维、编程技术以及提高解决问题的能力。
参考文献
[1]Farid A., Marat A., Joshua Z., Kamil K., Nailya S., Wu D. On quantum methods for machine learning problems part I: quantum tools [J]. Big Data Mining and Analytics, 2020, 3: 41-45.
[2]刘 班. 数据挖掘及其Python 实现技术研究[J]. 信息通信, 2020, 9(213): 63-65.
[3]杨秀璋, 武帅, 夏换, 周既松, 于小民, 范郁锋. 大数据时代数据挖掘与分析课程教学改革探究[J]. 计算机时代, 2021, 9: 107-111.
[4]陈兴荣,姚宁宁. 基于能量距离推广的Ward聚类算法研究[J]. 统计与决策2017, 22: 21-25.
[5]王润芳, 丁晓敏. 基于关联规则的网络信息数据挖掘方法[J]. 科学技术创新, 2021, 11: 80-81.
[6]谭静雯.思维导图在计算机编程思维教学中的应用研究[J].信息与电脑, 2021, 4: 217-220.
[7]沈森.人工智能时代编程思维的重要性[J].电脑编程技巧与维护, 2020, 5: 131-133.

京公网安备 11011302003690号