)
十七、数据科学导论——数据预处理进阶第1关数据归约任务描述本关任务使用直方图展示不同年龄的发病次数。相关知识数据仓库中往往存有海量数据在其上进行复杂的数据分析与挖掘需要很长的时间数据归约可以用来得到数据集的归约表示它小得多但可以产生相同的或几乎相同的分析结果。数据归约策略数据归约策略数据立方体聚集维归约数据压缩数值归约离散化和概念分层产生。用于数据归约的时间不应当超过或“抵消”在归约后的数据上挖掘节省的时间。数据立方体聚集与维归约数据立方体聚集最底层的方体对应于基本方体基本方体对应于感兴趣的实体。在数据立方体中存在着不同级别的汇总数据立方体可以看成方体的格每个较高层次的抽象将进一步减少结果数据。数据立方体提供了对预计算汇总数据的快速访问使用与给定任务相关的最小方体在可能的情况下对于汇总数据的查询应当使用数据立方体。维归约通过删除不相干的属性或减少数据量。属性子集选择找出最小属性集使得数据类的概率分布尽可能的接近使用所有属性的原分布减少出现在发现模式上的属性的数目使得模式更易于理解。启发式的探索性的方法逐步向前选择逐步向后删除向前选择和向后删除相结合判定归纳树。数据压缩与数值归约数据压缩数据压缩可分为有损压缩和无损压缩。字符串压缩有广泛的理论基础和精妙的算法通常是无损压缩在解压缩前对字符串的操作非常有限。音频/视频压缩通常是有损压缩压缩精度可以递进选择有时可以在不解压整体数据的情况下重构某个片断。两种有损数据压缩的方法小波变换和主要成分分析。数值归约通过选择替代的、较小的数据表示形式来减少数据量。① 有参方法使用一个参数模型估计数据最后只要存储参数即可。② 线性回归方法YαβX多元回归线性回归的扩充对数线性模型近似离散的多维数据概率分布。③ 无参方法直方图聚类选样。编程要求请仔细阅读右侧代码结合相关知识在 Begin-End 区域内进行代码补充使用数值规约的无参方法中的直方图展示不同年龄的发病次数。图片生产要求如下设置图片大小 figsize(10,10)图形保存到 Task1/img/T1.png。测试说明平台会对你编写的代码进行测试图片预期输出如下开始你的任务吧祝你成功import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdef student():train pd.read_csv(Task1/diabetes_null.csv, na_values[#NAME?])train[Insulin] train[Insulin].fillna(100)train[SkinThickness] train[SkinThickness].fillna(train[SkinThickness].median())train[BloodPressure] train[BloodPressure].fillna(train[BloodPressure].median())train[BMI] train[BMI].fillna(train[BMI].mean())train[Glucose] train[Glucose].fillna(train[Glucose].mean())#********* Begin *********#x pd.Series(train[Age])count x.value_counts()# figsize写在plot()里面外面不要写plt.figurecount.plot(kindbar, figsize(10,10))plt.savefig(Task1/img/T1.png)#********* End *********#第2关数据离散化任务描述本关任务对 Age 进行分区。相关知识数据挖掘的实践中使用离散化进行数据规约主要是适用于以下三类属性值名称型 — e.g . 无序集合中的值(如颜色, 民族..)序数 — e.g . 有序集合中的值 (如职称)连续值 — e.g . 实数。离散化离散化是指通过将属性域划分为区间减少给定连续属性值的个数。区间的标号可以代替实际的数据值有效的规约数据。基于判定树的分类挖掘离散化的数值用于进一步分析。一个离散化示例如下基于判定树的分类挖掘的大部分时间花在数据的分类和比较上比如一个判定条件为 400 01000 的整数将在比较 1000 次后得出结果但是如果先将这 1000 个值划分为 10 个区间 0-100 , 100-200 … 900-1000 则只要比较 10 次就可以得出结果现在来看看离散化的定义以及一种我们在前面已经提到过的离散化技术—— 概念分层。概念分层后数据的细节丢失了但是概化后的数据更有意义更容易解释而且所需的存储空间更少有效的减少 I/O 支出。通过使用高层的概念比如青年、中年、老年来替代底层的属性值比如实际的年龄数据值从而进行规约数据。数据离散化常见的数据离散化方法分箱 binning 分箱技术递归的用于结果划分可以产生概念分层直方图分析 histogram 直方图分析方法递归的应用于每一部分可以自动产生多级概念分层聚类分析将数据划分成簇每个簇形成同一个概念层上的一个节点每个簇可再分成多个子簇形成子节点基于熵的离散化通过自然划分分段。人工进行概念分层是一项乏味耗时的工作。实际数据挖掘操作中我们发现很多分层蕴涵在数据库的模式中因而可以自动的产生概念分层或者可以对数据的统计分析动态的加以提炼产生概念分层。数值属性的概念分层可以根据数值分布分析自动的构造我们主要考察以上 5 种方法。比如分箱、递归的将 10,000 个值每个箱子中放 10 个则可以将其规约为 1000 个值如果要求将这 10,000 个值规约为 10 个概念则只要将上述分箱方法递归的使用 3 次就可以了。通过自然划分分段将数值区域划分为相对一致的、易于阅读的、看上去更直观或自然的区间。聚类分析产生概念分层可能会将一个工资区间划分为[ 51263.98 , 60872.34 ]通常数据分析人员希望看到划分的形式为[ 50000 60000 ]。自然划分的 3 - 4 - 5 规则常被用来将数值数据划分为相对一致“更自然”的区间。编程要求请仔细阅读右侧代码结合相关知识在 Begin-End 区域内进行代码补充将 Age 字段分 3 个区间 [0,30,50,90] 并对各区间计数。测试说明平台会对你编写的代码进行测试预期输出(0, 30] 258(30, 50] 108(50, 90] 26Name: Age, dtype: int64开始你的任务吧祝你成功import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdef student():train pd.read_csv(Task1/diabetes_null.csv, na_values[#NAME?]).dropna()#********* Begin *********#bins [0, 30, 50, 90]# 直接对Age做cut不新增DataFrame列age_cut pd.cut(train[Age], binsbins)res age_cut.value_counts().sort_index()# 修改series的name为Age匹配输出res.name Ageprint(res)#********* End *********#有任何问题都可以随时关注私信