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进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
随机推荐
- BERT可视化工具bertviz体验
BERT可视化工具体验:bertviz是用于BERT模型注意力层的可视化页面. 1,bertviz的github地址:https://github.com/jessevig/bertviz 2,将be ...
- SCSS语法格式及编译调试
一.SASS编译 Sass 的编译有多种方法: 命令编译 GUI工具编译 自动化编译 1.1 命令编译 1)单文件编译 sass <要编译的Sass文件路径>/style.scss:< ...
- HDU1358 Period 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358 题目大意:给你一个长度为 \(n\) 的字符串 \(s\) ,那么它有 \(n\) 个前缀. 对 ...
- HTML--CSS样式表--基本概念(超链接的状态)
样式表的基本概念 一.样式表的分类 1.内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余较多. 例:<p style="font-size:14px;"> ...
- Native memory allocation (mmap) failed to map 142606336 bytes for committing reserved memory.
这里写链接内容 问题描述 Java程序运行过程中抛出java.lang.OutOfMemoryError: unable to create new native thread,如下所示: [java ...
- SpringSecurity认证流程详解
SpringSecurity基本原理 在之前的文章<SpringBoot + Spring Security 基本使用及个性化登录配置>中对SpringSecurity进行了简单的使用介绍 ...
- 用生活例子来形象了解TCP-IP协议
TCP/IP模型四层协议 与 邮件? 1.应用层——与用户直接打交道 类似 要寄的物件 2.传输层——处理和增加源数据并传输到IP层 类似 快递单信息 3.IP层——分配地址和传送数据 类似 分拣站分 ...
- P1005 等边字符三角形
题目描述 给定一个字符串,用它构造一个底边长5个字符,高3个字符的等腰字符三角形. 三角形的形状见样例输出. 输入格式 无. 输出格式 输出样例输出中所描述的等腰字符三角形. 样例输入 无. 样例输出 ...
- 天河2 程序 version GLIBCXX_3.4.21 not found 解决方法
本文告诉大家在 天河2 运行程序时发现 version GLIBCXX_3.4.21 not found 如何修复 我在天河2运行一个程序报错 version `GLIBCXX_3.4.21' not ...
- CodeForces - 721D Maxim and Array (贪心)
Recently Maxim has found an array of n integers, needed by no one. He immediately come up with idea ...