Python for Data Analysis 学习心得(一) - numpy介绍
一、简介
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。
Python for Data Analysis 学习心得(一) - numpy介绍的更多相关文章
- Python for Data Analysis 学习心得(四) - 数据清洗、接合
一.文字处理 之前在练习爬虫时,常常爬了一堆乱七八糟的字符下来,当时就有找网络上一些清洗数据的方式,这边pandas也有提供一些,可以参考使用看看.下面为两个比较常见的指令,往往会搭配使用. spli ...
- Python for Data Analysis 学习心得(二) - pandas介绍
一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...
- Python for Data Analysis 学习心得(三) - 文件读写和数据预处理
一.Pandas文件读写 pandas很核心的一个功能就是数据读取.导入,pandas支援大部分主流的数据储存格式,并在导入的时候可以做筛选.预处理.在读取数据时的选项有超过50个参数,可见panda ...
- 数据分析---《Python for Data Analysis》学习笔记【03】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 数据分析---《Python for Data Analysis》学习笔记【02】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 数据分析---《Python for Data Analysis》学习笔记【01】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 《python for data analysis》第四章,numpy的基本使用
<利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...
- 学习笔记之Python for Data Analysis
Python for Data Analysis, 2nd Edition https://www.safaribooksonline.com/library/view/python-for-data ...
- 数据分析---《Python for Data Analysis》学习笔记【04】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
随机推荐
- 分布式TensorFlow集群local server使用详解
通过local server理解分布式TensorFlow集群的应用与实现. 简介 TensorFlow从0.8版本开始,支持分布式集群,并且自带了local server方便测试. Local ...
- "?:"在正则表达式中什么意思
“?:”非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用. 单独的“?”:匹配前面的子表达式零次或一次. 当“?”紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m}) ...
- 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用
题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...
- Array.from()类数组转化为数组的用法
类数组对象转化为数组 let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; let arr = Array.from(arrayLi ...
- H3C 以跳数评估的路由并非最优路径
- 【codeforces 761D】Dasha and Very Difficult Problem
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- SVN:符号
问号:未纳入SVN控制之下的新文件感叹号:已经修改过还没上传的文件红叉:准备删除尚未提交绿勾:从服务器上取下来没修改过的文件黄色感叹号:发生冲突蓝色加号:准备加到服务器上还没提交
- tf.train.string_input_producer()
处理从文件中读数据 官方说明 简单使用 示例中读取的是csv文件,如果要读tfrecord的文件,需要换成 tf.TFRecordReader import tensorflow as tf file ...
- JavaScript DOM查询,原生js实现元素子节点的获取
在网页网页开发中,经常会需要获取某个网页元素的子元素,然后对其进行事件绑定.或样式修改等行为.这些操作对于jquery来说很容易,但是对于原生js会稍微麻烦一些,这里将介绍四种方法获取元素的子元素(本 ...
- css元素居中的几种方式
1.水平居中 <div style="width:200px;margin:0 auto;background-color: yellow;">水平居中</div ...