天天看点

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        前面几篇文章采用的案例的方法进行介绍的,这篇文章主要介绍python常用的扩展包,同时结合数据挖掘相关知识介绍该包具体的用法,主要介绍numpy、pandas和matplotlib三个包。目录:

        一.python常用扩展包

        二.numpy科学计算包

        三.pandas数据分析包

        四.matplotlib绘图包

        前文推荐:

        部分截图参考张良均的《python数据分析与挖掘实战》,推荐大家购买阅读。

        参考张良均的《python数据分析与挖掘实战》,下图展示了常见的python扩展包。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        常用的包主要包括:

        1.numpy

        python没有提供数组,列表(list)可以完成数组,但不是真正的数据,当数据量增大时,,它的速度很慢。所以numpy扩展包提供了数组支持,同时很多高级扩展包依赖它。例如:scipy、matplotlib、pandas。

        2.scipy

        该包提供矩阵支持,以及矩阵相关的数值计算模块。如果说numpy让python有了matlab的味道,那么scipy就让python真正地成为二半个matlib。因为涉及到矩阵内容,而课程中主要使用数组,所以不再介绍。

        3.pandas

        pandas是面板数据(panel data)的简写。它是python最强大的数据分析和探索工具,因金融数据分析工具而开发,支持类似sql的数据增删改查,支持时间序列分析,灵活处理缺失数据,后面详细介绍。

        4.scikit-learn

        scikit-learn是一个基于python的用于数据挖掘和数据分析的简单且有效的工具,它的基本功能主要被分为六个部分:分类(classification)、回归(regression)、聚类(clustering)、数据降维(dimensionality reduction)、模型选择(model selection)、数据预处理(preprocessing),前面写的很多文章算法都是出自该扩展包。

        5.matplotlib

        该包主要用于绘图和绘表,强大的数据可视化工具,做图库,语法类似matlab。同时,seaborn也是数据可视化的工具包。

        注意:这些包在anaconda集成环境中已经存在,可以直接使用,最早我是通过python2.7来编写代码的,安装过程通过pip install numpy,而且安装顺序非常讲究,容易出错,所以推荐大家使用该集成包。

        numpy(numeric python)系统是python的一种开源的数值计算扩展,一个用python实现的科学计算包。它提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

        下面通过这段代码详细讲解这个包在数据分析中的常见用法:

        1.一维数组处理

        输出结果如下所示:

        核心代码:

        代码通过np.array定义了一个数组[2, 0, 1, 5, 8, 3],其中min计算最小值,max计算最大值,shape表示数组的形状,因为是一维数组,故6l(6个数字)。

        最重要的一个知识点是数组的切片操作,因为在数据分析过程中,通常会对数据集进行"80%-20%"或"70%-30%"的训练集和测试集划分,通常采用的方法就是切片。

        a[:-2]表示从头开始获取,"-2"表示后面两个值不取,结果:[2 0 1 5]

        a[-2:]表示后往前数两个数字,获取数字至结尾,即获取最后两个值[8 3]

        a[:1]表示从头开始获取,获取1个数字,即[2]

        2.二维数组处理

        注意的是定义二维数组括号不要弄错,正确的应该是:[[1,2,3],[4,5,6]]

        同时计算机的存储下标都是从0开始计算的。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        代码如下:

        代码输出结果如下所示:

        需要注意:

       (1)获取二维数组中的某行,如第2行数据[4,5,6,7],采用方法是:c[1][:];

       (2)获取二维数组中的某列,如第2列数据[[3] [6] [9]],c[:,np.newaxis, 2]。因为通常在数据可视化中采用获取某列数据作为x或y坐标,同时多维数据也可以采用pca降低成两维数据,再进行显示。

        最后希望读者自己去阅读该段代码。

        pandas是面板数据(panel data)的简写。它是python最强大的数据分析和探索工具,因金融数据分析工具而开发,支持类似sql的数据增删改查,支持时间序列分析,灵活处理缺失数据。

        注意:首先声明改包功能非常强大,我只是学习了它的非常小的一部分,后面随着学习深入会写更多它的用法,同时建议读者自行学习,不喜勿喷。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        约定俗成的导入惯例:

        from pandas import series, dataframe

        import pandas as pd

        1.常见用法:读写文件

        这里读文件最常用的是两种方法:

        下面通过一个具体的案例来讲解该包,这里读取的数据是张良均的《python数据分析与挖掘实战》的第六章的电力用户数据集,missing_data.xls文件。内容如下,共3列数据,分别是用户a、用户b、用户c,共21行,对应21天的用电量,其中包含缺失值。

        部分excel文件数据截图如下所示:

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        具体代码如下所示:

        其中data.describe()输出数据的基本信息统计,其方法参考前面的图,包括count计数、std、max等函数。同时因为excel表格中存在空值,故python显示为nan(not a number)表示空。

        2.series

        series是一维标记数组,可以存储任意数据类型,如整型、字符串、浮点型和python对象等,轴标一般指索引。

        series、numpy中的一维array 、python基本数据结构list区别:list中的元素可以是不同的数据类型,而array和series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。

        输出如下所示:

        series的一个重要功能是在算术运算中它会自动对齐不同索引的数据。

        3.dataframe      

        dataframe是二维标记数据结构,列可以是不同的数据类型。它是最常用的pandas对象,像series一样可以接收多种输入:lists、dicts、series和dataframe等。初始化对象时,除了数据还可以传index和columns这两个参数。

        注意:

        (1) 在pandas中用函数 isnull 和 notnull 来检测数据丢失:pd.isnull(a)、pd.notnull(b)。

        series也提供了这些函数的实例方法:a.isnull()。

        (2) pandas提供了大量的方法能够轻松的对series,dataframe和panel对象进行各种符合各种逻辑关系的合并操作。如:concat、merge (类似于sql类型的合并)、append (将一行连接到一个dataframe上)。

        (3) dataframe中常常会出现重复行,dataframe的duplicated方法返回一个布尔型series,表示各行是否是重复行;还有一个drop_duplicated方法,它返回一个移除了重复行的dataframe。

        总之,pandas是非常强大的一个数据分析包,很多功能都需要我自己去慢慢摸索。

        matplotlib是一个python的图形框架,类似于matlab和r语言。它是python最著名的绘图库,它提供了一整套和matlab相似的命令api,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入gui应用程序中。

        补充两张图,原自《python数据分析与挖掘实战》,对大家绘图很有帮助。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

       最常用的画图函数是plot,同时常用的设置样式方法见下图。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        这里主要使用前面第三部分pandas读取的电力数据绘制图形,主要是柱状图和饼图。

        1.绘制柱状图

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        2.绘制饼图

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        3.柱状图及比例显示

        输出如下所示(ps:该部分参考百度知道,网址忘记了,望提醒)。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        当然该包可以绘制更多的图形,希望读者自己去学习。比如线性回归:

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        代码部分详解,引用前面自己写的第三篇文章:

        matplotlib.pyplot是用来画图的方法,matplotlib是可视化包。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.scatter(x, y, c=y_pred, marker='o')  

        绘制散点图(scatter),横轴为x,获取的第1列数据;纵轴为y,获取的第2列数据;c=y_pred对聚类的预测结果画出散点图,marker='o'说明用点表示图形。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.title("kmeans-basketball data")  

        表示图形的标题为kmeans-heightweight data。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.xlabel("assists_per_minute")  

        表示图形x轴的标题。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.ylabel("points_per_minute")  

        表示图形y轴的标题。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.legend(["rank"])  

        设置右上角图例。

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

plt.show()  

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

        表示显示图形。

        最后希望文章对你有所帮助,上课内容还需要继续探索,但enjoy myself~

        同时周末监考两天回来,确实挺累的,事情堆了很多,浪费15个小时,发现这份工作,赚点外块真不容易啊!甚至比程序猿累多了。

        当老师难,当好老师更难,当贵州的好老师难上难。希望还能坚持自己的梦想,做个财大信院的扫地僧吧,但每每和学生一起还是非常享受的。同时,这次熬夜写文到深夜4点半,旁边也坐着一个自己的学生,在调试struts、json代码,所以说,还真不是这边的学生差,你懂得,但也并不是没有好老师,只是相对较少。fighting~

        最后补充学生冯y的一首朋友圈感言:

        把握现在,活在当下。

        不以物喜,不以己悲。

        闲看花开花落,

        静观云卷云舒。

        顺其自然,随遇而安。

        我也希望自己有朝一日能达到这种心境~

        对这份工作、事业、校园、办公还是得看淡点。

        (by:eastmount 2016-11-14 中午4点半 )