Python学习日志(第3篇)——关联规则挖掘(2)

    在确保书中程序(《Python数据分析与挖掘实战》中Chapter8的apriori_rule.py)可以运行之后,下面就是逐句地研读、学习、弄清每一句存在的意义、及命令的表达方式。

1. #-*- coding: utf-8 -*-

    (1) 参考资料http://blog.csdn.net/arbel/article/details/7957782

    (2) 作用:要在Python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。

    (3) 要求:必须要讲编码注释放在第一行或第二行。

    (4) 本例分析:在我的日志(第2篇)中提到一个现象,首次程序运行时报错信息为UnicodeDecodeError,网上给出的很多解决方案,其中很多就提到了这个中文编码的问题的。我个人认为,如果这里已经声明了是utf-8的编码,当程序再次给出UnicodeDecodeError报错提示时,是否就需要开始查找其他编写语句的问题,而非从sitecustomer.py、minitypes.py等函数进行纠错??(未解问题,希望网友可以给一些提示)

2. from _future_ import print_function

    (1) 参考资料:

① https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820023084e5263fe54fde4e4e8616597058cc4ba1000

          ② http://blog.csdn.net/unknownli/article/details/9930729

    (2) 作用

    Python的每一个版本都会增加一些新的功能,或者对原来的动作有一些改动。有些改动是不兼容旧版本的,也就是在当前版本正常运行的代码,到下一个版本运行就不正常了。因此,Python提供了_future_模块,把每一个新版本的特性导入当前版本。

    (3) 示例:

    下图中的示例参考了链接②。可以看到,当输入__future__模块后,程序就不会报错了。

Python学习日志(第3篇)——关联规则挖掘(2)

    (4) 要求:

    该import需要放在其他import之前。另外,注意future前后的下划线,是各有两条下划线,不是一条。

    (5) 本例分析

    在本案例的程序中,我尝试将apriori_rules.py、和apriori.py文件中的这一句程序都删除掉,并没有发现程序运行报错(尚未弄清该句程序的含义)

3. import pandas as pd

    (1) 参考资料:《Python数据分析与挖掘实战》 第2章 2.3.4节

    (2) 作用:Pandas是Python下最强大的数据分析和探索工具。而import A as B这个函数,是给予A库一个B的别称,以帮助记忆。而在后面的程序中,如果需要用到A的话,则可以直接用B来替代。

    (3) 本例分析

    在本案例的程序中,前面将pandas简写为了pd;在后面用到pandas时,如data=pd.DataFrame(b).fillna(0)这个语句中,pd就代表的是pandas。

4. from apriori import *

    (1) 参考资料:《Python学习手册》第4版 第3章、第22章

    (2) 简介:

    ① 模块:简单来讲,每一个以扩展名py结尾的Python源代码文本都是一个模块。其他文件可以通过导入一个模块读取这个模块的内容。这种基于模块的方式使模块变成了Python的一个核心概念

    ② 顶层文件:更大的程序往往以多个模块文件的形式出现,并且导入了其他模块文件的工具,其中一个模块文件设计成主文件,或叫做顶层文件(就是启动后能够运行整个程序的文件)。在一个模块文件的顶层定义的所有的变量名都成了被导入的模块对象的属性。

    ③ import的工作过程:导入是运行时的运算,程序第一次导入指定文件时,会执行三个步骤:找到模块文件;编译成位码(需要时);执行模块的代码来创建其所定义的对象。下面通过一个例子详细介绍这几个过程:

    例:假设文件b.py中定义了一个名为spam的函数,供外部来使用。在b.py文件中,该函数定义如下:

def spam(text):

print(text,'spam')

    现在,假设a.py想要使用spam。为了实现这个目标,a.py中也许就要包含如下语句:

import b

b.spam('gumby')

    a. 搜索:Python必须查找到import语句所引用的模块文件。如例子中,a.py中的语句import b,只有一个简单的b,而不带任何路径。事实上,只能列出简单名称。路径和后缀是刻意省略掉的,因为Python使用了标准模块搜索路径来找出import语句所对应的模块文件。

    其中模块搜索路径是由程序的主目录、PYTHONPATH目录、标准链接库目录和任何.pth文件的内容组合而成的结果。在大多数情况下,可以依赖模块导入搜索路径的自动特性,完全不需要配置这些路径。不过,在一些特殊情况下,还可以对搜索路径进行配置和变动(这里暂时不做了解)。

    b. 编译(可选):遍历模块搜索路径,找到符合import语句的源代码文件后,如果必要的话,Python接下来会将其编译成字节码。

    c. 运行:Import操作的最后步骤是执行模块的字节码。

    ④ 基础语句:

    a. import语句:如上面的例子所示。注意,在想要调用b.py中的函数spam时,必须使用b.spam的形式,b不可以省略。即必须通过模块名称来得到该模块的属性。

    b. from语句:from会把变量名复制到另一个作用域,所以就可以在脚本中使用复制后的变量名,而不需要通过模块。可以将上面的例子改为:

from b import spam

spam('gumby')

    c. from *语句:当使用*时,会取得模块顶层所有赋了值的变量名的拷贝。即把模块中所有变量名复制到了进行导入的作用域之内。从根本上来说,这就是把一个模块的命名空间融入到另一个模块之中。

    (3) 本例分析

    ① 在本py文件中,会用到另一个apriori.py文件中定义的函数。因此考虑使用import导入模块的功能。根据前面所述,apriori.py本身就是一个模块,因此在导入时的名称直接为apriori(而不需要添加任何路径)。    

    ② 前面提到,import的搜索路径是由四部分组成,而Python首先会在主目录内搜索导入的文件。在当前交互式模式下工作时,这一入口就是你当前的工作目录。而apriori_rules.py与apriori.py已经在一个目录下了,所以不需要其他的配置路径的操作。

    ③ from apriori import *,也就是导入了apriori函数中定义的所有变量,方便下面的引用。

5. import time

    (1) 参考资料:

    《Python学习手册》第4版;

     https://docs.python.org/3.5/library/index.html

     http://blog.csdn.net/zzh1301051836/article/details/79013744

    (2) 简介:

    ① 标准库:Python自带了许多实用的模块,称为标准链接库。这个集合体大约有200个模块,包含与平台不相关的常见程序设计任务。这些工具不是Python语言的组成部分,但是,可以在任何安装了标准Python的情况下,导入适当的模块来使用。参考链接资料中的“The Python Standard Library”中列出了许多标准库。其中time就是一个时间标准库

    ② time标准库:提供与时间相关的函数。

    a.时间戳:从格林威治时间1970年01月01日00分00秒起,至现在的时间的总秒数。Python中获取时间的常用方法是:先得到时间戳,再将其转换成想要个时间格式。

    b. 常用函数:不一一介绍。在本程序中出现了time.clock(),该函数是以浮点数计算的秒数返回当前的CPU时间。

    (3) 本例分析:

    在本例中,有几次都调用了time.clock函数,可以从右侧的variable explorer窗口中观察到这几次调用的取值。可以看到其类型是float类型。

  Python学习日志(第3篇)——关联规则挖掘(2)