版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wnma3mz/article/details/79428377
Day Six——使用pandas寻找关联规则
第一部分数据data.xls
第二部分数据apriori.txt
第一部分——使用Kmean聚类数据
对应函数programmer_1
步骤:
- 读取数据,对类别进行字符化,转换为’A’,’B’,’C’……
- 使用
Kmeans
进行离散化,这里聚类前要将数据离散化as_matrix()
- 得到聚类中心、进行分类统计,最后合并为新的
DataFrame
- 计算边界点(相邻两列的均值),转换
NaN
为0.0
输出如下:
1 2 3 4
A 0.0 0.178855 0.258081 0.352043
An 240.0 359.000000 278.000000 53.000000
B 0.0 0.154031 0.306200 0.564697
Bn 342.0 384.000000 194.000000 10.000000
C 0.0 0.202038 0.288739 0.423325
Cn 297.0 392.000000 206.000000 35.000000
D 0.0 0.173544 0.252731 0.359726
Dn 292.0 370.000000 224.000000 44.000000
E 0.0 0.152698 0.257873 0.376062
En 273.0 319.000000 245.000000 93.000000
F 0.0 0.179143 0.261386 0.354643
Fn 200.0 237.000000 265.000000 228.000000
关联规则学习
假设有下面几行数据,每行数据代表一次消费记录,每个字母代表一个物品。
{A, B}
{B, C, D, E}
{A, C, D, F}
{B, A, C, D}
{B, A, C, F}
他们相互之间是存在一定的关系的。一些定义如下:
- 数据记录所有项的集合称为总项集。{A, B, C, D, E, F}。
- 支持度: 。即X与Y同时出现在一个记录的次数除以数据记录总数(这里的总数为5)
- 置信度: 。即X与Y同时出现在一个记录的次数除以X出现的次数。
上面的支持度和置信度都是指相对的支持度和置信度。支持度和置信度越高,则关联性越强。
具体算法(Apriori)过程如下:
- 找出满足最小支持度的项集(生成频繁项集)。即去除那些不满足最小支持度的项集
- 根据上面筛选出来的项集,继续生成满足最小置信度的规则(生成强规则)
- 不断重复,直到最后项集只剩下一个为止。
第二部分——使用pandas计算关联规则
对应函数programmer_2
步骤:
- 读取数据,转换
0-1
矩阵,缺失值替换为0 - 定义支持度、置信度、连接符号
- 搜索关联规则
部分代码的说明
connect_string(x, ms)
list(map(lambda i: sorted(i.split(ms)), x))
x是一个list,里面包含列与列之间的连接关系。比如`['A1', 'A2', 'A3']`、`['A2---B2---C2', 'A2---B2---D2', 'A2---B2---E3', 'A2---B2---F3']`。
提取分割每个元素里面的列名,将其组成一个list。最后x变成一个二维list。`[['A1', 'A2', 'A3']]`、`[['A2', 'B2', 'C2'], ['A2', 'B2', 'D2'], ['A2', 'B2', 'E3'], ['A2', 'B2', 'F3']]`
下面的循环是进行计算排列组合,构成新的集合x。
find_rule(d, support, confidence, ms=u"--")
sf = lambda i: d[i].prod(axis=1, numeric_only=True)
计算每行的乘积,返回一个dataframe。
d_2 = pd.DataFrame( list(map(sf, column)), index=[ms.join(i) for i in column]).T
计算新的支持度。index=[ms.join(i) for i in column]重新连接column中的元素,最后返回转置后的dataframe
计算支持度
support_series_2 = 1.0 * d_2[[ms.join(i) for i in column]].sum() / len(d)
输出如下
result:
support confidence
A3---F4---H4 0.078495 0.879518
C3---F4---H4 0.075269 0.875000
B2---F4---H4 0.062366 0.794521
C2---E3---D2 0.092473 0.754386
D2---F3---H4---A2 0.062366 0.753247