数据挖掘导论实验报告01

题目1

要求

有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并 (按字母顺序排列), 输出到一个新文件C中。
(注:运行以上程序前,你需要在脚本执行的目录下创建 test1.txt、test2.txt 文件)

实现步骤:

  1. 在执行目录下创建test1.txt和test2.txt两个文件,放入一行打乱顺序的字母。
# 读取test1.txt的内容
test1 = open("test1.txt", "r")
str1 = test1.read()
print(str1)
# 读取test2.txt的内容
test2 = open("test2.txt", "r")
str2 = test2.read()
print(str2)
  1. 读取两个目录中文件的内容,并将得到了两个字符串拼接在一起。再将字符串中的每个字母对应于字母表中位置,构造一个位置数组存储这些字母的位置信息。
#构建字母表序列
English = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Str = str1 + str2
  1. 将位置数组进行sort排序,即可得到一个新的数组,根据新数组可以直接从字母序列中取出对应字母,组成一个排序后的字符串。
# 按字母顺序排列
Number=[]
for i in range(len(Str)):
    idx = English.index(Str[i])
    Num = Number.append(idx)
Number.sort()
# print("Number:",Number)

string = ""
for i in range(len(Number)):
    string = string + English[Number[i]]
    # print("string=",string)
  1. 将这个字符串写入到一个myfile.txt文件中(若目录下没有,则自动创建)。
f = open("myfile.txt", "w")
f.write(string)
f = open("myfile.txt", "r")
print(f.read())
f.close()

测试结果:

在这里插入图片描述

题目2

要求

创建一个名为names的空列表,往里面按顺序添加 Lihua、Rain、Jack、Xiuxiu、Peiqi和Black共6个元素。再分别按照如下3个要求对names进行操作(每个操作不相关):

  1. 往names列表里Black前面插入一个Blue,后面插入White,输出names列表;
  2. 把names列表中Xiuxiu的名字替换成“秀秀”,并输出names列表;
  3. 创建新列表[1,2,3,4,2,5,6,2],将新列表元素追加到names列表末尾,并输出names列表;取出names列表中索引2-10的元素,步长为2,打印所取出的元素。

实现步骤:

  1. 创建一个名为names的空列表,往里面按顺序添加 Lihua、Rain、Jack、Xiuxiu、Peiqi和Black共6个元素(可以用到列表方法中的append函数)。
    在这里插入图片描述
  2. 往names列表里Black前面插入一个Blue,后面插入White,输出names列表。首先需要确定“Black”在列表中位置(可以采用列表方法中的index函数),然后根据其位置,将指定内容进行插入(可以采用列表方法中的insert函数)。
    在这里插入图片描述
  3. 把names列表中Xiuxiu的名字替换成“秀秀”,并输出names列表。可以考虑先确定“Xiuxiu”在列表中的位置,在其后面添加“秀秀”元素,再删去“Xiuxiu”即可。
    在这里插入图片描述
  4. 创建新列表[1,2,3,4,2,5,6,2],将新列表元素追加到names列表末尾,并输出names列表;取出names列表中索引2-10的元素,步长为2,打印所取出的元素。
    在这里插入图片描述

题目3

要求

定义一个字典。其中键是字符串,描述清单中的物品,值是一个整型值,说明玩家有多少该物品。例如,字典值{ ‘arrow’: 12, ‘gold coin’: 42,‘rope’: 1, ‘torch’: 6, ‘dagger’: 1}。写一个名为 displayInventory()的函数,参数是字典,打印输出物品个数和物品名称,并统计物品总数量。(输出格式参考下图)
在这里插入图片描述

实现步骤:

  1. 按照题目要求,定义一个字典如下。
    在这里插入图片描述

  2. 写一个displayInventory()的函数,参数是字典,打印输出物品个数和物品名称,并统计物品总数量。
    在这里插入图片描述

题目4

要求

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以 0开头。
在这里插入图片描述
存储结构:

class ListNode(object):
    def __init__(self, val=0, next=None):
         self.val = val
         self.next = next

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

实现步骤:

链表做法:

  1. 实现类的实现,构造类内的函数如下:
class ListNode(object):
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

    # 将类的内容按照数组的方式输出
    def Display(self):
        list = []
        p = self.next
        while (p):
            list.append(int(p.val))
            p = p.next
        print(list)

    # 获取该列表对应的数
    def GetNumber(self):
        number = 0
        p = self.next
        q = 1
        while (p):
            number = number + p.val * q
            p = p.next
            q = q * 10
        return number
  1. 根据输入创造出两个链表,然后利用GetNumber函数将链表转化为具体的数,将这两个链表转换成的数相加起来,得到一个新数。
head1 = ListNode(0, None)
p = head1
for i in range(len(l1)):
    if l1[i] in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
        newnode = ListNode(int(l1[i]), None)
        p.next = newnode
        p = p.next


head2 = ListNode(0, None)
q = head2
for i in range(len(l2)):
	if l2[i] in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
        newnode = ListNode(int(l2[i]), None)
        q.next = newnode
        q = q.next

num1 = head1.GetNumber()
num2 = head2.GetNumber()
num = num1 + num2
  1. 将这个新数重新生成链表,适用链表中的Display函数将其按照数组的方式进行输出。
string = str(num)
head = ListNode(0, None)
h = head
for i in range(len(string)):
    newnode = ListNode(num % 10, None)
    h.next = newnode
    h = h.next
    num = (num - num % 10) / 10

head.Display()

非链表做法:

  1. 首先输入两个数组l1和l2。
  2. 判断输入的内容中那些字符是数字字符,然后转换成int类型,形成两个int类型的数组。
  3. 将两个数组按照“个”、“十”、“百”、“千”的顺序计算出一个数,将这两个数加起来,得到一个新数。
  4. 将这个数再按照“个”、“十”、“百”、“千”的顺序构成一个int类型的数组,并输出结果即可。

在这里插入图片描述

题目5

要求

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

实现步骤:

采用KMP算法实现即可。
测试代码如下:
在这里插入图片描述
在这里插入图片描述

实验收获:

因为之前自学过一些Python的知识,所以这次实验对以前的知识点巩固加强了一下,也让我对语法的掌握更加熟悉,丰富并完善了Python基础编程的代码库,巩固了Python的数据结构,熟悉了对Python数组、链表、类、字符串、数据的读取和写入等操作。实验收获颇深。
同时,也熟悉了Kaggle、天池等数据挖掘网站的适用方式,能够适用线上编译器来进行代码的实验,创建云数据库和调用公开数据集参加线上赛事与活动等。后期会通过这些平台来提高自己的编程能力和算法能力。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据挖掘》 Weka实验报告 姓名 _ 学号_ 指导教师 开课学期 2015 至 2016 学年 2 学期 完成日期 2015年6月12日 1.实验目的 基于http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori - ginal%29的数据,使用数据挖掘中的分类算法,运用Weka平台的基本功能对数据集进 行分类,对算法结果进行性能比较,画出性能比较图,另外针对不同数量的训练集进行 对比实验,并画出性能比较图训练并测试。 2.实验环境 实验采用Weka平台,数据使用来自http://archive.ics.uci.edu/ml/Datasets/Br- east+Cancer+WiscOnsin+%28Original%29,主要使用其中的Breast Cancer Wisc- onsin (Original) Data Set数据。Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使 用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作 平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界 面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集, 并评估由不同的学习方案所得出的结果。 3.实验步骤 3.1数据预处理 本实验是针对威斯康辛州(原始)的乳腺癌数据集进行分类,该表含有Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size(均匀的细胞大小), Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁), Mitoses(有丝分裂),Class(分类),其中第二项到第十项取值均为1- 10,分类中2代表良性,4代表恶性。 通过实验,希望能找出患乳腺癌客户各指标的分布情况。 该数据的数据属性如下: 1. Sample code number(numeric),样本代码; 2. Clump Thickness(numeric),丛厚度; 3.Uniformity of Cell Size(numeric)均匀的细胞大小; 4. Uniformity of Cell Shape(numeric),均匀的细胞形状; 5.Marginal Adhesion(numeric),边际粘连; 6.Single Epithelial Cell Size(numeric),单一的上皮细胞大小; 7.Bare Nuclei(numeric),裸核; 8.Bland Chromatin(numeric),平淡的染色质; 9. Normal Nucleoli(numeric),正常的核仁; 10.Mitoses(numeric),有丝分裂; 11.Class(enum),分类。 3.2数据分析 由http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori- ginal%29得到一组由逗号隔开的数据,复制粘贴至excel表中,选择数据——分列——下 一步——逗号——完成,该数据是有关乳腺癌数据集,有11个属性,分别为Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size(均匀的细胞大小),Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁), Mitoses(有丝分裂),Class(分类),因为复制粘贴过来的数据没有属性,所以手工 添加一行属性名。Weka分类数据需把excel保存为一个csv文件。 3.2.1 .csv -> .arff 将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。 打开weka,之后出现GUI界面,如图1所示: (图1) 点击进入"Exploer"模块,要将.csv 格式转换为 .arff格式,点击open file...,打开刚保存的"乳腺癌数据集.csv

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值