# 数据挖掘实践指南读书笔记3

http://guidetodatamining.com/ 这本书理论比较简单，书中错误较少，动手锻炼较多，如果每个代码都自己写出来，收获不少。总结：适合入门。 欢迎转载，转载请注明出处，如有问题欢迎指正。 合集地址：https://www.zybuluo.com/hainingwyx/note/559139

### 2. 基于物品属性过滤

```# 计算中位数和绝对标准差
def getMedian(self, alist):
"""return median of alist"""
if alist == []:
return []
blist = sorted(alist)
length = len(alist)
if length % 2 == 1:
# length of list is odd so return middle element
return blist[int(((length + 1) / 2) -  1)]
else:
# length of list is even so compute midpoint
v1 = blist[int(length / 2)]
v2 =blist[(int(length / 2) - 1)]
return (v1 + v2) / 2.0

def getAbsoluteStandardDeviation(self, alist, median):
"""given alist and median return absolute standard deviation"""
sum = 0
for item in alist:
sum += abs(item - median)
return sum / len(alist)

def unitTest():
list1 = [54, 72, 78, 49, 65, 63, 75, 67, 54]
list2 = [54, 72, 78, 49, 65, 63, 75, 67, 54, 68]
list3 = [69]
list4 = [69, 72]
classifier = Classifier('data/athletesTrainingSet.txt')
m1 = classifier.getMedian(list1)
m2 = classifier.getMedian(list2)
m3 = classifier.getMedian(list3)
m4 = classifier.getMedian(list4)
asd1 = classifier.getAbsoluteStandardDeviation(list1, m1)
asd2 = classifier.getAbsoluteStandardDeviation(list2, m2)
asd3 = classifier.getAbsoluteStandardDeviation(list3, m3)
asd4 = classifier.getAbsoluteStandardDeviation(list4, m4)
assert(round(m1, 3) == 65)
assert(round(m2, 3) == 66)
assert(round(m3, 3) == 69)
assert(round(m4, 3) == 70.5)
assert(round(asd1, 3) == 8)
assert(round(asd2, 3) == 7.5)
assert(round(asd3, 3) == 0)
assert(round(asd4, 3) == 1.5)

print("getMedian and getAbsoluteStandardDeviation work correctly")```

assert语句用于软件组件测试的做法是一种常用的技术。产品每一部分分成一段实现代码加上对实现代码的测试代码，这一点十分重要。

```# 归一化
def normalizeColumn(self, columnNumber):
"""given a column number, normalize that column in self.data"""
# first extract values to list, v is vector, clounm is 0/1,col is a list
col = [v[1][columnNumber] for v in self.data]
median = self.getMedian(col)
asd = self.getAbsoluteStandardDeviation(col, median)
#print("Median: %f   ASD = %f" % (median, asd))
self.medianAndDeviation.append((median, asd))
for v in self.data:
v[1][columnNumber] = (v[1][columnNumber] - median) / asd```

0 条评论

### 相关文章

使用服务器端的Python渲染日期和时间来展示到用户的浏览器并非一个好主意。考虑如下的例子， 我在2017年9月28日下午4点06分写这篇文章。我身处的时区是P...

• ### 利用Python进行数据分析(6) NumPy基础: 矢量计算

NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数。例如，square函数计算各元素的平方，rint函数将各元素四...

• ### 将特性与Mixin类混合

python中多重继承的用途之一是通过mixins扩展类功能。mixin是提供其他类方法的类，但不被视为基类

• ### 在？进来看看怎么攻击JMX呗

JMX（Java Management Extensions，即Java管理扩展）是一个为应用程序、设备、系统等植入管理功能的框架。狭隘的理解，我们可以通过JM...

• ### python基础—闭包

内层函数我们的语句块为： c[0] += 1 ，即 c[0] = c[0] + 1 ，这里并没有赋值，而是对外层函数中的一个列表做的一个引用

• ### 一篇文章让你明白python的装饰器

在看闭包问题之前先来看看关于python中作用域的问题 变量作用域 ? 对于上述代码中出现错误，肯定没什么疑问了，毕竟b并没有定义和赋值，当我们把代码更改如下后...

• ### 【一日一技】超简单的Pandas数据筛选方法

{'name': '王小一', 'hight': 171, 'weight': 100},

• ### Docker 世界中的配置管理：5分钟让你明白如何在Puppet，Chef，Ansible之间选择

本文翻译并节选自《DevOps2.0的工具集（DevOps黑宝书）——打造自动化的持续交付流程》一书，转自译者CSDN博客，转载请注明出处，译者：胡帅。

• ### 责任链模式（分离职责，动态组合）

登录、注册功能是日常开发中必备的功能，不管哪里都有它的身影。现在需要给客户提供一个注册功能，就如下图那样。