Python for Data Analysis 学习心得(一)

一、简介

Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的运算,pandas主要是做数据的预处理,另外本书还教了其他数据分析相关的工具,比如matplotlib用来作图,iPython用来测试、调试代码。本书着重在工具介绍,所以在阅读前最好要对数据分析的理论有一定的了解。

二、Jupyter和Python的介绍

Jupyter是结合代码输入、运行到结果显示为一体的工具,安装后可以直接在浏览器上面使用,非常方便,这边先略过介绍。如果对Python熟悉的话也可以先跳过前面的基础介绍,Python在数据分析方面要对列表(list)和字典(dict)这两个元素的操作非常熟悉,如果还不太熟悉的本书有非常完整的介绍。下面就挑几个重点指令来介绍吧。

1、decode

以前在做NLP爬虫、NLP项目上面在Unicode上面搞了很久,一般网页都会使用unicode来编码,所以用requests抓取下来的通常是编码后的字符,这个时候必须要先去查看网页的编码方式(看是用GBK还是utf-8),再使用decode+编码方式进行解码。

2、range

自动生成一个数列,range(开始值,结束值,间距)若是只输入一个默认开始值为0,间距为1。range在测试练习的时候很好用,也可以限制循环次数,避免一次跑过多的循环,或是拉数据的时候可以限制显示的数量,挺常用的一个指令。

3、sort、sorted

排序指令,可以将序列由小到大排好,也可以指定排列方式。排序我之前比较常用的是在推荐系统,可以将相似度比较高的前几名展示出来。reversed也是排序指令,只是他是顺序颠倒的(大的在前面)

4、lambda(匿名函数)

 之前看过,当时不太了解用法,学完后觉得很简单,就是将函数匿名化并且写在同一行,例如lambda x : x+2,就是将这个函数定为传进来的数加2。

5、生成器

也是我之前比较不了解的东西,简单来说就是我编了一个数据生成规则,生成器会按照要求依次产生数据,比如gen = (x*2 for x in range(1000)), 每次调用gen他就会依次给我0,2,4,6...

三、Numpy的介绍

本书的精华之一,就是将numpy讲的很仔细,熟练numpy就可以更好的操控矩阵,利用矩阵代替for循环来做遍历检查可以节省大量的计算时间,是numpy最大的功效,之前看吴恩达的机器学习时也是花了很多时间才理解矩阵要怎么去使用。下面就是一些numpy的主要操作。

1、矩阵生成

要使用numpy需要先将numpy导入,代码为import numpy as np,接着就可以用np来进行操作了。data = np.random.randn(2,3)就可以生成一个2x3的随机数字矩阵。如果要生成矩阵就用data2 = np.array([1,2,3], [4,5,6])。使用data.shap来查看矩阵的行列数,data.dtype来查看矩阵里面的数据类型。

2、矩阵切片

矩阵切片可以将矩阵做切割,方式和序列的切片有点类似,首先要先了解numpy矩阵的选取方式,以上面的data2举例

data2 = [1, 2, 3],

             [4, 5, 6]

data2[0]就是指[1, 2, 3],而data2[0][1]或是data2[0, 1]就是在指‘2’这个数。了解了numpy矩阵的定位方式,就要说明切片了,在python切片使用冒号(:),在numpy也是,比如data2[:1] = [1, 2, 3],而data2[:1, :2] = [1, 2],活用切片可以更好的从矩阵里选取要分析的数据。

3、轴对换、相乘

轴对换在矩阵计算中是一个很重要的概念,由于矩阵相乘的条件是前面的列需要=后面的行, 假如两个data2要相乘,需要把后面的先做行列转换,也就是轴对换,使用方式就是data2.T,变换后会变成

data2.T = [1, 4],

                 [2, 5],

                 [3, 6]

再使用np.dot做矩阵相乘的计算,代码为np.dot(data2, data2.T)或是data2.dot(data2.T),就可得到( [1*1 + 2*2 + 3*3, 1*4 + 2*5 + 3*6], [4*1 + 5*2 + 6*3, 4*4 + 5*5 + 6*6] )这个新的矩阵。

3、条件填入(where)

假如我们希望可以将矩阵里面的数据进行条件式的替换,例如将矩阵里面小于0的数字用0代替,就可以用where这个函数,where(条件,填入,否则),第一格输入填入条件,在这个案例就是arr<0,第二个是填入0,第三个就是所有arr>=0的都不变,就是arr。

4、通用函数

numpy提供了许多的通用函数,提供了快速计算的功能,就不逐个介绍,可以直接看下面的列表,或是需要的时候再去查询。

一元通用函数表

二元通用函数表

5、数据处理

前面提到,numpy在数据分析里面有个重要的任务,就是利用“矩阵”取代“for循环”,下面就来介绍如何取代和取代的成效。

假定我要对序列X = np.range(10000)做平方,下面为用for循环写和numpy运算的结果

可以发现用for循环要处理226秒的程序,numpy只用了1.84秒,可以见用numpy来替代for循环可以节省多少时间,另外numpy是将矩阵储存在连续的内存里做运算,所以内存占用也会减少,在处理TB级以上的数据运算可以大幅的提升效率。

这边先介绍numpy,接下来的文章将继续介绍pandas。

 

原文地址:https://www.cnblogs.com/yenpaul/p/10117714.html