目录

  • 1 课程简介
    • 1.1 教学大纲
    • 1.2 授课计划
    • 1.3 课内实训指导书
  • 2 绪论
    • 2.1 数据挖掘的概念和任务
    • 2.2 十大经典数据挖掘算法
    • 2.3 开放数据获取来源-数据挖掘常见误区
    • 2.4 数据挖掘中的隐私保护
  • 3 认识数据
    • 3.1 数据对象和数据属性
    • 3.2 数据的统计描述
    • 3.3 数据可视化
    • 3.4 数据相似性度量
    • 3.5 数据可视化案例综合应用
  • 4 数据预处理
    • 4.1 数据清洗
    • 4.2 数据集成与数据规约
    • 4.3 数据离散化与概念分层
  • 5 分类与预测
    • 5.1 分类与预测:基本概念
    • 5.2 决策树分类
    • 5.3 朴素贝叶斯分类
    • 5.4 决策树方法的分析比较
    • 5.5 KNN分类算法
    • 5.6 分类与预测算法的性能评价方法
    • 5.7 高级分类算法
  • 6 回归分析
    • 6.1 基本概念
    • 6.2 线性回归编程案例
    • 6.3 逻辑回归
    • 6.4 岭回归
    • 6.5 CART分类回归树
    • 6.6 从线性回归到神经网络
    • 6.7 神经网络训练&神经网络设计原则
    • 6.8 过拟合与正则化
  • 7 关联规则挖掘
    • 7.1 基本概念
    • 7.2 闭项集和极大频繁项
    • 7.3 Apriori算法及其应用
    • 7.4 关联挖掘的常见误区
    • 7.5 FP树及软件实践
    • 7.6 课堂实录 Apriori基础与算法
    • 7.7 课堂实录 Apriori算法分析与案例应用
  • 8 聚类分析
    • 8.1 聚类概述
    • 8.2 聚类的划分方法
    • 8.3 聚类的层次方法
    • 8.4 聚类的密度方法
    • 8.5 孤立点分析
    • 8.6 Kmeans简单实战
    • 8.7 Kmeans常见错误解析
    • 8.8 Kmeans实现数据无监督分类
  • 9 案例开发与综合应用
    • 9.1 scikitlearn安装与配置
    • 9.2 KNN预测男女
    • 9.3 KNN测试自带数据评分对比以及绘图
    • 9.4 KNN用于分类
    • 9.5 KNN用于数据回归预测
    • 9.6 KNN基于历史数据预测未来
  • 10 课程实验
    • 10.1 实验一:数据可视化实践
    • 10.2 实验二:数据规范化实践
    • 10.3 实验三:朴素贝叶斯分类与预测
    • 10.4 实验四:决策树分类及可视化
    • 10.5 实验五:关联规则挖掘
    • 10.6 实验六:Kmeans聚类
    • 10.7 实验七:密度聚类
    • 10.8 实验八:案例综合应用
  • 11 python数据挖掘编程讲解
    • 11.1 函数练习
    • 11.2 函数编程
    • 11.3 可视化编程
    • 11.4 机器学习库的基本编程
实验五:关联规则挖掘

1、学习关联规则挖掘的可视化设计

https://www.cnblogs.com/kori/p/12457472.html

2、用python3编写并运行关联规则的apriori算法。

算法主要代码已经完成,请进行调试,并对给出的菜品数据进行关联规则挖掘。

# -*- coding:utf-8 -*-

import pandas as pd

#from __future__ import print_function


# 导入 apriori 函数

#from apriori import *


# 自定义连接函数,用于实现L_{k-1}到C_k的连接

def connect_string(x, ms):

    x = list(map(lambda i: sorted(i.split(ms)), x))

    l = len(x[0])

    r = []

    for i in range(len(x)):

        for j in range(i, len(x)):

            if x[i][:l - 1] == x[j][:l - 1] and x[i][l - 1] != x[j][l - 1]:

                r.append(x[i][:l - 1] + sorted([x[j][l - 1], x[i][l - 1]]))

    return r



# 寻找关联规则的函数

def find_rule(d, support, confidence, ms=u'--'):

    result = pd.DataFrame(index=['support', 'confidence'])  # 定义输出结果


    support_series = 1.0 * d.sum() / len(d)  # 支持度序列

    column = list(support_series[support_series > support].index)  # 初步根据支持度筛选

    k = 0


    while len(column) > 1:

        k = k + 1

        print(u'\n正在进行#第%d次搜索...' % k)

        column = connect_string(column, ms)

        print(u'数目:%s...' % len(column))

        sf = lambda i: d[i].prod(axis=1, numeric_only=True)  # 新一批支持度的计算函数


        # 创建连接数据,这一步耗时、耗内存最严重。当数据集较大时,可以考虑并行运算优化。

        d_2 = pd.DataFrame(list(map(sf, column)), index=[ms.join(i) for i in column]).T


        support_series_2 = 1.0 * d_2[[ms.join(i) for i in column]].sum() / len(d)  # 计算连接后的支持度

        column = list(support_series_2[support_series_2 > support].index)  # 新一轮支持度筛选

        support_series = support_series.append(support_series_2)

        column2 = []


        for i in column:  # 遍历可能的推理,如{A,B,C}究竟是A+B-->C还是B+C-->A还是C+A-->B?

            i = i.split(ms)

            for j in range(len(i)):

                column2.append(i[:j] + i[j + 1:] + i[j:j + 1])


        cofidence_series = pd.Series(index=[ms.join(i) for i in column2])  # 定义置信度序列


        for i in column2:  # 计算置信度序列

            cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))] / support_series[ms.join(i[:len(i) - 1])]


        for i in cofidence_series[cofidence_series > confidence].index:  # 置信度筛选

            result[i] = 0.0

            result[i]['confidence'] = cofidence_series[i]

            result[i]['support'] = support_series[ms.join(sorted(i.split(ms)))]


    # result = result.T.sort(['confidence','support'], ascending = False) #结果整理,输出

    print(u'\n结果为:')

    print(result)


    return result



inputfile = 'D:/menu_orders.xls'

outputfile = 'D:/apriori_rules.xls'

data = pd.read_excel(inputfile, header=None)


print

u"转换原始数据至 0-1 矩阵"

ct = lambda x: pd.Series(1, index=x[pd.notnull(x)])  # 转换成 0-1 矩阵的过渡函数

b = map(ct, data.as_matrix())

data = pd.DataFrame(list(b)).fillna(0)  # 实现转换矩阵,空值用 0 填充

print

data

print

u"转换完毕"


del b


# 设定最小支持度

support = 0.2

# 设定最小置信度

confidence = 0.5

# 连接符,默认 -- ,需要保证原始表格中不含有该字符

ms = '->'


find_rule(data, support, confidence, ms).to_excel(outputfile)