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进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
随机推荐
- 写给初学前端工程师的一封信 - 转载 至https://www.w3ctech.com/topic/983
以下内容是转载https://www.w3ctech.com/topic/983 大家好: 应波波的邀请写一写我对这个话题的想法.从去年开始不少朋友让我帮忙介绍前端工程师,绝大部分忙都没帮上,原因是真 ...
- H3C IP 地址格式和表示方法
- 【codeforces 520C】DNA Alignment
[题目链接]:http://codeforces.com/contest/520/problem/C [题意] 给你一个函数; 它的作用是评估两个字符串的相似程度; 评估的时候: 保持一个字符串不动, ...
- PHP中 spl_autoload_register() 函数用法
这篇文章主要介绍了PHP中spl_autoload_register()函数用法,结合实例形式分析了__autoload函数及spl_autoload_register函数的相关使用技巧,需要的朋友可 ...
- js读取cookie 根据cookie名称获取值、赋值
借鉴:原作者https://blog.csdn.net/zouxuhang/article/details/80548417 //方法1 //存在问题:如果cookie中存在 aaaname= ...
- Python--day47--mysql执行计划
1,什么是mysql执行计划? 让mysql预估执行操作:在要执行的语句前面加explain,就不会真的执行sql语句,只是给出了要执行的数据的情况,如大约有多少条,查询类型.
- Koa2 遇到Method Not Allowed 获取不到返回值
https://q.cnblogs.com/q/114462/ 都来找我 Haisen‘s blogs 求求各位大神了,2点多了没解决睡不着啊,我按照网上用的koa2-cors,g ...
- Spring Security 学习笔记-securityContext过滤器
位于过滤器顶端,第一个起作用的过滤器.SecurityContextPersistenceFilter 在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContex ...
- vue中的时间修饰符stop,self
stop阻止自身以外的冒泡 self只会阻止自身冒泡
- 研发环境容器化实施过程(docker + docker-compose + jenkins)
目录 背景介绍 改造思路 容器构建 基础准备 中间件容器 外部依赖容器 业务应用容器 容器整合 自动构建容器 Maven相关 非Maven项目 总结 背景介绍 目前公司内部系统(代号GMS)研发团队, ...