- 生物信息学是一门以生物学、数学和信息科学为基础的交叉学科,它通过综合运用数学和信息科学等多领域的方法和工具对生物信息进行获取、加工、存储、分析和解释,来阐明大量生物数据所包含的生物学意义。
- 这里的Pandas只作最简单的介绍,详细使用见另一篇文章Pandas!
一、numpy
1、基本介绍
- NumPy是Python编程语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
- NumPy的主要对象是一个叫做ndarray的同质多维数组,即一个所有元素类型相同、且在内存中连续存储的表格,可以通过一组N个正整数来索引。
2、代码
①创建对象
Numpy数组是一个多维数组对象,称为ndarray,它由两部分组成:
- 实际的数据
- 描述这些数据的元数据
# 多维数组ndarray
import numpy as np
ar = np.array([1,2,3,4,5,6,7])
print(ar) # 输出数组,注意数组的格式:中括号,元素中间没有逗号(和列表区分)
print(ar.ndim) # 输出数组维度的个数(轴数),或者说“秩”,维度的数量也称 rank
print(ar.shape) # 数组的维度,对于n行m列的数组,shape为(n,m)
print(ar.size) # 数组的元素总数,对于n行m列的数组,元数总数为n*m
print(ar.dtype) # 数组中元素的类型,类似type()(注意:type()是函数,dtype是方法)
print(ar.itemsize) # 数组中每个元素的字节大小,int32类型字节为4,float64类型字节为8
print(ar.data) #包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
输出:
ar1 = np.linspace(2.0,3.0,num = 5)
ar2 = np.linspace(2.0,3.0,num = 5,endpoint = False)
ar3 = np.linspace(2.0,3.0,num = 5,retstep = True)
print(ar1,type(ar1))
print(ar2)
print(ar3,type(ar3))
输出:
②索引和切片
- 核心:基本索引及切片 / 布尔型索引及切片
import numpy as np
ar = np.arange(20)
print(ar)
print(ar[4])
print(ar[3:6])
print("----------------------------------")
# 一维数组索引及切片(类似list)
ar = np.arange(16).reshape(4,4)
print(ar, '数组的轴数为%d'% ar.ndim) # 4*4的数组
print(ar[2],'数组的轴数为%d'% ar[2].ndim) # 切片为下一维度的一个元素,所以是一维数组
print(ar[2][1]) # 二次索引,得到一维数组中的一个值
print(ar[1:3],'数组轴数为%d'% ar[1:3].ndim) # 切片为两个一维数组组成的二维数组
print(ar[2,2]) # 切片数组中的第3行第3列--->10
print(ar[:2,1:]) # 切片数组中的1,2行,2、3、4列--->二维数组
print("----------------------------------")
# 二维数组索引及切片
ar = np.arange(8).reshape(2,2,2)
print(ar, '数组的轴数为%d'% ar.ndim) # 2*2*2的数组
print(ar[0],'数组的轴数为%d'% ar[0].ndim) # 三维数组的下一个维度的第一个元素--->一个二维数组
print(ar[0][0],'数组的轴数为%d'% ar[0][0].ndim) # 三维数组的下一个维度的第一个元素下的第一个元素--->一个一维数组
print(ar[0][0][1],'数组的轴数为%d'% ar[0][0][1].ndim)
# 三维数组索引及切片
输出:
二、pandas
1、基本介绍
- Pandas 是一个强大的Python库,专门用于数据操作和分析。它提供了数据结构和数据分析工具,特别是为处理表格数据(类似于电子表格或SQL表)设计的数据结构DataFrame,以及用于处理一维标记数据的Series对象。
- Pandas在处理各种数据源时非常有用,支持从CSV、Excel文件、数据库等读取数据,并且可以方便地进行数据清洗、转换、合并和分析。
2、代码
①对象
- 核心:series相比于ndarray,是一个自带索引index的数组 → 一维数组 + 对应索引
- 所以当只看series的值的时候,就是一个ndarray
- series和ndarray较相似,索引切片功能差别不大
- series和dict相比,series更像一个有顺序的字典(dict本身不存在顺序),其索引原理与字典相似(一个用key,一个用index)
# Series数据结构
# Series是带有标签的一维数组,可以保存任何数据类型(整数、字符串、浮点数、Python对象等),轴标签统称为索引
import numpy as np
import pandas as pd
# 导入Numpy,Pandas模块
s = pd.Series(np.random.rand(5)) # Series的索引未必一定是数字,也可以是字母等等
print(s)
print(type(s))
# 查看数据,数据类型
print(s.index,type(s.index)) # index类似于一个生成器,要想输出可以用list()
print(s.values,type(s.values))
# .index查看series索引,类型为rangeindex
# .values查看series值,类型是ndarray
输出:
②索引
- 位置下标
# 位置下标,类似列表
s = pd.Series(np.random.rand(5))
print(s)
print(s[0], type(s[0]), s[0].dtype)
print(float(s[0]),type(float(s[0])))
位置下标从0开始
输出结果为numpy.float格式
可以通过float()函数转换为Python float 格式
numpy.float与float占用字节不同
输出:
- 标签索引
s = pd.Series(np.random.rand(5),index = list('abcde'))
print(s)
print(s['a'], '\t', type(s['a']), '\t', s['a'].dtype)
# 方法类似下标索引,用[]表示,里面协商相应的index,注意,index是字符串
sci = s[list('abe')]
print(sci, '\t', type(sci), '\t', sci.dtype)
如果需要选择多个标签的值,用[[]]来表示(相当于[]中包含一个列表)
多标签索引结果是新的数组 注意:标签的顺序可以改变!!!
输出:
- 切片索引
s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5), index = list('abcde'))
print(s1[1:4], '\t', s1[4]) # 下标
print(s2['a':'c'],'\t',s2['c']) # 标签
print(s2[0:3],'\t',s2[3])
print("-------------------------------------------------")
# 注意:用index做切片是末端包含
print(s2[:-1])
print(s2[::2])
下标索引做切片,和列表写法一样
输出:
- 布尔型索引
s = pd.Series(np.random.rand(3)*100)
s[4] = None # 添加一个空值,将空值写成np.NaN也是可以的
print(s)
bs1 = s > 50
bs2 = s.isnull()
bs3 = s.notnull()
print(bs1,type(bs1),bs1.dtype)
print(bs2,type(bs2),bs2.dtype)
print(bs3,type(bs3),bs3.dtype)
print("-----------------------------------------")
# 数组作出判断之后,返回的是有一个布尔值组成的新的数组
# .isnull() / .notnull() 方法判断是否为空值(None代表空值,NaN代表有问题的数值,两个都会识别为空值)
print(s[s > 50])
print(s[bs3])
布尔型索引方法:用[判断条件]来进行表示,其中判断条件可以是一条语句,或者也可以是一个布尔型数组!
输出: