在之前的生信分析方向如何系统入门python3推文最后,我们提到了python有很多好用的模块和加载包,也正因为这些,所以才使得python能够灵活多场景处理分析。
整合最近学习的一些内容,借以 Jay Alammar的博客,就来介绍一下其中一个基础数据处理包 NumPy吧。
今天的推送大纲如下:
不难发现,Numpy主要用于数据分析,整体的模式有点类似于小型的R,在读取和处理数据上略占优势,但是R的强大在于其统计分析和可视化。融会贯通,哪哪都好。
一开始使用 Numpy只是想简单使用它的内置函数,比如判断一下序列长度最大值呀,或者计算一下样本数据的均值等。收集资料发现其中还有不少有意思的东西。
基本用法
既然是一个包那就要载入:
import numpy as np
构建基本数据结构:
数组
# 构建数组
np.array([1,2,3])
np.ones(3)
np.random.random(3)矩阵
与数组的构建写法相同,但是不同的是矩阵可以包含二维关系,同样包含ones()、zeros() 和 random.random() 快速方法,即# 构建矩阵
np.array([[1,2],[3,4]])np.zeros((3,2))
更多维度
矩阵和向量的任意维度结构ndarraynp.array([[1,2],[3,4]],[[5,6],[7,8]])
运算
基本运算
数组运算的规则是一一对应进行计算,例如加减乘除。我们在之前函数中介绍过一种函数,可以快速对列表中的每一个元素进行计算,而在 Numpy中只需对 data * 1.6即可。
矩阵的运算有点类似上面的方式,称为 broadcasting,若不满足相同的维度,则会自动补齐进行计算。
点乘
除了上述的广播式计算方法外,NumPy为每个矩阵提供一个dot()方法,即分别进行计算,示例如下:具体的计算方法如下:
索引
类似于列表的切片,对于Numpy数组的任意位置进行索引:矩阵的索引使用二维的方式展示,以 ,分割对应横纵轴:
数据聚合
在这一部分,数组和矩阵便可以快速计算其最大值data.max()、最小值data.max()、均值data.min()、标准差data.std()、求和data.sum()等。值得一提的是,在矩阵聚合中,有一个参数 axis支持跨行或者跨列聚合:在图中可以形象的理解为
axis=0
为竖向计算,axis=1
为横向计算,即最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加 1。转置
有时候为了可视化的需求,我们会在excel或者R语言中使用转置的功能。当然python不能落下,使用也相当简单data.T而在更高级的场景下,你可能需要对矩阵转变为特定的维度,这样你就需要使用 data.reshape()来实现了。
是不是越来越像excel了,关于二维矩阵的介绍,还有一个更有用的包 pandas 值得学习。
高阶用法
除了向量和举证支持运算外,公式的使用也是 NumPy 成为宠儿的原因之一。例如在解决回归问题中监督式机器学习的核心公式:均方差公式
在 Nmupy中体现为,值得注意的是对于 predictions 和 labels可以任意多个值,我们可以根据图形依次追踪计算:
1
2
3
4
最终可以获得的预测的误差值和模型评分。
更多应用
时间序列和音乐
例如以下的一段音频文件(一维数组),存入Numpy,那么就可以通过切片进行音频分割和定位。
CD 质量的音频每秒包含 44,100 个样本,每个样本是-65535 到 65536 之间的整数。这意味着如果你有一个 10 秒的 CD 质量 WAVE 文件,你可以将它加载到长度为 10 * 44,100 = 441,000 的 NumPy 数组中。
图像
图像是尺寸(高度 x 宽度)的像素矩阵。
举个例子:
如果是黑白(即灰度),那么就可以以上图的形式展示,如果是彩色(RGB)三个数字代表红绿蓝,因此需要我们在之前提到的ndarray
语言
语言的处理就相对于复杂,这里就简单地过一下的大概的原理,首先需要构建一个数据集:
然后根据词云(单词或单词的一部分)划分获得token数组:
然后我们替换其中的每一个词,使用我们自己构建的数据集:
但是这些ID并未对模型提供太多信息,需要使用50维word2vec进行替换(So before feeding a sequence of words to a model, the tokens/words need to be replaced with their embeddings (50 dimension word2vec embedding in this case):)
然后你就得到了一个维度为 [embedding_dimension x sequence_length]的数组。
出于性能原因,深度学习模型倾向于保留批大小的第一维(因为如果并行训练多个示例,模型训练速度会加快)。在这种情况下,reshape() 变得非常有用。如像 BERT 这样的模型期望的输入形式是:[batch_size,sequence_length,embedding_size]。
一点注意
Numpy库都要准备放弃支持python2(最后一个版本LTS 版支持到2019年12月31日),快来一起加入python3的学习吧~
猜你喜欢
三剑客 PyCharm使用 | 编程基础与规范代码 | 列表使用
元组拆包是个啥?| 字典与FASTA文件序列抽提
如何判断序列是否跨过剪切位点 | python3 脚本小实战
爬虫小测试 | 函数入门
如何优雅的数月饼 |为什么要使用函数
NCBI的文献搜索与影响因子和分区
类与对象
号外:生信技能树全国巡讲11月在福州和上海,点击了解报名哈:(福州、上海见!)全国巡讲第19-20站(生信入门课加量不加价)