Code Monkey home page Code Monkey logo

datamining's Introduction

项目名称:数据挖掘课作业

项目组成

1. exp1

实验一 《多源数据集成、清洗和统计》

题目 广州大学某班有同学100人,现要从两个数据源汇总学生数据。第一个数据源在数据库中,第二个数据源在txt文件中,两个数据源课程存在缺失、冗余和不一致性,请用C/C++/Java程序实现对两个数据源的一致性合并以及每个学生样本的数值量化。

两个数据源合并后读入内存,并统计:

  1. 学生中家乡在Beijing的所有课程的平均成绩。
  2. 学生中家乡在广州,课程1在80分以上,且课程9在9分以上的男同学的数量。(备注:该处做了修正,课程10数据为空,更改为课程9)
  3. 比较广州和上海两地女生的平均体能测试成绩,哪个地区的更强些?
  4. 学习成绩和体能测试成绩,两者的相关性是多少?(九门课的成绩分别与体能成绩计算相关性)

实验一__目录结构

--data1.xlsx 插入数据库的原始数据

--data2.txt 从文件读入的原始数据

--data3.csv 清洗完毕的数据

--data4.csv 清洗完毕的经过特意处理数据

--insertData.py 插入数据库的完整代码

--process.py 处理和计算的完整代码

--实验结果.png 实验打印的结果

实验一__结果

-- 详见实验结果.png

实验一__难题与解决

-- 一开始对于python操作数据库不是很熟悉,后来经过网上搜索解决了该问题。

实验一__总结

-- 经过本次实验,学会了数据的插入以及读取,清洗,计算等操作。

2. exp2

题目 基于实验一中清洗后的数据练习统计和视化操作,100个同学(样本),每个同学有11门课程的成绩(11维的向量);那么构成了一个100x11的数据矩阵。以你擅长的语言C/C++/Java/Python/Matlab,编程计算:

  1. 请以课程1成绩为x轴,体能成绩为y轴,画出散点图。
  2. 以5分为间隔,画出课程1的成绩直方图。
  3. 对每门成绩进行z-score归一化,得到归一化的数据矩阵。
  4. 计算出100x100的相关矩阵,并可视化出混淆矩阵。(为避免歧义,这里“协相关矩阵”进一步细化更正为100x100的相关矩阵,100为学生样本数目,视实际情况而定)
  5. 根据相关矩阵,找到距离每个样本最近的三个样本,得到100x3的矩阵(每一行为对应三个样本的ID)输出到txt文件中,以\t,\n间隔。

实验二__目录结构

--data3.csv 实验一预处理后的代码,供实验二使用

--exp2.py 实验二的完整代码

--C1成绩和体能成绩散点图.png 实验二_第一题

--C1成绩直方图.png 实验二_第二题

--归一化矩阵.csv 实验二_第三题

--correlation_matrix.csv 实验二_第四题_相关矩阵

--confusion_matrix.png 实验二_第四题_混淆矩阵

--每个点距离从近到远的ID.csv 对每位同学的相关度由近到远的一个排序

--每个点距离最近3个点的ID.csv 实验二_第五题_对每位同学和他\她自身相关度最高的三个同学的ID

实验二__结果

-- 详见exp2文件夹

实验二__难题与解决

-- 实验二的难题是对协方差矩阵的不理解,一开始老是算不对结果,后面了解原理之后就知道如何操作了。还有就是画图的问题,在百度上多了解plt画图的方法,可以解决。还有对于显示每个点最近三个点的Id的问题,一开始因为只是在单纯的协相关矩阵计算相关度,一直不能输出Id,因为没有绑定到一起。所以最后的解决方法就是再创建一个id矩阵,目的是和协相关矩阵的对应。协相关的分布就是横排是所有学生,竖排也是所以学生,只是存储的是学生和学生之间的相关度。id矩阵也是这个分布情况,只是存的是每个被比较的学生的id。因此在对协相关矩阵进行排序的时候,Id矩阵一起排序,最后得到的结果输出到txt的文件中,便可以解决显示每个点最近三个点的Id

实验二__总结

-- 总结:通过实验二让我更加懂得了使用python语言,对矩阵的操作和对数组的操作有很多种可能性,这也为我实验带了困扰和方便,在认真地完成试验之后我觉得自己收获到了很多python的语法知识和一些矩阵运算的数学知识,这让我收获很多

3. exp3

题目 用pyhon实现k-means聚类算法,

  1. 对实验二中的z-score归一化的成绩数据进行测试,观察聚类为2类,3类,4类,5类的结果,观察得出什么结论?
  2. 由老师给出测试数据,进行测试,并画出可视化出散点图,类中心,类半径,并分析聚为几类合适。

实验三__目录结构

--exp3.py 实验三的k-means的完整代码

--pca.py 对归一化矩阵的降维代码

--归一化二维矩阵.csv 降维后保存的归一化二维矩阵

--归一化矩阵.csv 实验二的归一化矩阵

--测试数据.csv 老师给的二维实验数据

--测试数据:k等于2的聚类.png 老师给的数据的K等于2的聚类结果

--测试数据:k等于3的聚类.png 老师给的数据的K等于3的聚类结果

--测试数据:k等于4的聚类.png 老师给的数据的K等于4的聚类结果

--测试数据:k等于5的聚类.png 老师给的数据的K等于5的聚类结果

--归一化数据:k等于2的聚类.png 归一化数据的K等于2的聚类结果

--归一化数据:k等于3的聚类.png 归一化数据的K等于3的聚类结果

--归一化数据:k等于4的聚类.png 归一化数据的K等于4的聚类结果

--归一化数据:k等于5的聚类.png 归一化数据的K等于5的聚类结果

--[2,6]的所属簇:k=2.png 判断点[2,6]属于哪一个簇

--[2,6]的所属簇:k=3.png 判断点[2,6]属于哪一个簇

--[2,6]的所属簇:k=4.png 判断点[2,6]属于哪一个簇

--[2,6]的所属簇:k=5.png 判断点[2,6]属于哪一个簇

实验三__结果

-- 详见exp3文件夹

实验三__难题与解决

-- 实验三的第一个难题就是如何对10维数据进行降维的操作,这里面由于对这方面操作不熟悉,于是运用了pca降维的方法,整个方法调用了pca的库。降维之后就可以送到K-means算法进行运算。k-means算法只能计算二维的数据,因归一化数据的二维矩阵和老师给的测试数据都可以运算。在实现算法的过程中遇到的难题就是每个点属于哪个簇和他到属于他的簇的距离该如何保存。这里创了一个和数据同维度同大小的数据结构,用来保存每个点的所属簇和到该簇的距离运用此数据结构就可以解决该问题。最后就是如何将聚类的循环停止,停止的条件就是:当每个簇的点都没有更新的时候,说明聚类完成。因此在循环中设置一个判断条件就可以将该问题解决。还有就是画图问题,画图问题一开始是颜色的问题,可以利用一个数组for循环来区分每个簇不同的颜色展示,还有画圆的问题。由于实验没有直接画圆的函数,最后要用圆的方程得到解决。

实验三__总结

-- 经过本次实验,让我对plt的画图有了更加深刻的掌握。还有就是使用python实现K-means算法的过程中保存每个点的情况很重要。通过此次实验后对聚类算法的理解更加深刻,这让我收获很多

实验三__问题

  1. 对实验二中的z-score归一化的成绩数据进行测试,观察聚类为2类,3类,4类,5类的结果,观察得出什么结论?

    -- 聚类数目越多,聚类之间差别越小,他们的聚类中心也越接近

  2. 由老师给出测试数据,进行测试,并画出可视化出散点图,类中心,类半径,并分析聚为几类合适。

    -- 分成两类比较合适,因为在这组数据中,分为两类差异比较明显。

datamining's People

Contributors

52hertzlyl avatar huangsihao7 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.