前言
今天参加了第一次的组会,和好好的导师沟通后,为了不浪费暑假的这段时间,所以以后每天都会把自己学习的情况,用文字和代码的方式给记录下来,写出来,画画图,也是对这些内容加深印象,同时算是对自己的一种监督吧。然后因为以前的都是碎片化的学习,没有做好记录,所以现在开始好好加油吧!最后代码会在我的GitHub仓库,可以通过博客发表日期找到对应的文件,地址是:我的github地址:https://github.com/noDreamNoLife/hugay
ok,然后就开始吧:
1. numpy
numpy和pandas是数据处理中的两个常用的库,下图是总结这两个库的一些关系:
他们之间是一种包含的关系,pandas是基于numpy来构建的,然后pandas有两种数据类型,一种是series,另一种就是DataFrame,后者相当于由serise组成的一个字典,然后我们就从numpy开始介绍。
numpy其实就是一个多维的数组对象。具体的操作代码可以查看我的git仓库
注意的是每一个numpy的数组都有两个比较常用的属性,分别是shape和dtype,前者表示获取numpy数组的的维度,后者表示获取到数组的类型。
1.1 嵌套序列 这是由一组等长的列表组成的列表
# 嵌套序列 这是由一组等长的列表组成的列表
arr = [[1,2,3,4],[1,2,3,4]]
arr2 = np.array(arr)
print(arr2)
print(arr2.ndim) # 打印出当前数组的维度
print(arr2.shape)
1.2 numpy对数据类型的判断
# numpy对数据类型的判断
arr = [['1','2',3,4],[5,6,7,8]]
arr2 = np.array(arr)
print(arr2)
print(arr2.dtype) # unicode类型
arr = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(arr)
print(arr2)
print(arr2.dtype) # int类型
arr = [[1.1,2,3,4],[5,6,7,8]]
arr2 = np.array(arr)
print(arr2)
print(arr2.dtype) # 当成员中有一个类型为float类型时,numpy对数据类型的判断会推断成float类型
1.3 numpy中常见的几种创建的数组的方式与数据类型的转换
# numpy对指定长度的数组进行创建
arr = np.zeros(10) # 创建长度为10的全为0的一个数组
print(arr)
arr = np.ones((2, 3)) # 创建一个全为1的一个数组
print(arr)
arr = np.arange(10) # arrange相当于range的数组版本
print(arr)
# 进行数据类型的转换
arr = np.array([1.1,1.5,1.8,-2.5,-2.8])
print(arr)
print(arr.dtype)
arr2 = arr.astype(np.int32) # astype会将其转换为指定要转换的数据类型
print(arr2)
print(arr2.dtype)
1.4 numpy中的矢量化运算
当数组不用在循环的条件下一个个的计算,就可以通过矢量化的运算进行批量的计算
arr1 = np.array([1, 2, 3, 4, ], [5, 6, 7, 8])
arr2 = np.array([5, 6, 7, 8, ], [9, 6, 7, 8])
print(arr1 + arr2) # 加减乘除都可以进行类似的计算
1.5 numpy中的索引和切片与比较
# numpy中的索引和切片与比较操作
arr = np.arange(10)
print(arr[1])
print(arr[4:])
arr[0:4] = 11
print(arr)
# 二维的索引
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr[0, 1])
names = np.array(['xiaoming', 'xiaohong', 'xiaohu'])
print(names == 'xiaoming')
print((names == 'xiaoming') & (names == 'xiaohu')) # 进行比较操作,与操作
print((names == 'xiaoming') | (names == 'xiaohu')) # 进行比较操作,或操作
1.6 numpy中的花式索引(fancy indexing)
这是numpy中的一个术语,指的是利用整数数组进行索引
# 花式索引
arr = np.arange(32).reshape((8, 4))
print(arr)
print(arr[[1, 3, 5, 7]])
print(arr[[1, 3, 5, 7], [0, 3, 2, 1]])
1.7 数组的转置与轴对换
转置其实就是对数组的重塑的一种形式,其常用的方法就是T和transpose
# 数组的转置和轴对换
arr = np.arange(15).reshape((3,5))
print(arr)
print(arr.transpose())
print(arr.T)
1.8 条件逻辑转数组
np.where 这个一般用于根据一个数组来产生另一个数组
# 条件逻辑转数组,np.where 的使用
x_arr = np.array([1.1,1.2,1.3])
y_arr = np.array([2.1,2.2,2.3])
condition = np.array([True,False,True])
print(np.where(condition,x_arr,y_arr))
arr = np.random.randn(4,4)
print(arr)
arr_1 = np.where(arr>0,2,-2)
print(arr_1)
arr_2 = np.where(arr>0,2,arr)
print(arr_2)
1.9 numpy中的数学运算与排序
arr = np.random.randn(4)
print(arr)
arr.sort()
print(arr)
1.10 numpy的文件操作
numpy可以读取磁盘上的文本数据与二进制数据
其主要操作的函数时np.save和np.load方法,其数据默认是未压缩的二进制数据保存在以,npy后缀的文件中
# numpy的文件操作
arr = np.arange(10)
np.save('save_file_name', arr)
print(np.load('save_file_name.npy'))
# 保存为压缩格式文件
arr = np.arange(10)
np.savez('save_file_name_zip', a=arr)
print(np.load('save_file_name_zip.npz')['a'])
arr = np.arange(10)
np.savetxt('save_file_name_txt', arr, delimiter=',') # 保存成文本文件,以逗号为分隔符保存
print(np.loadtxt('save_file_name_txt.txt'),delimiter=',')
1.11 线性代数
使用dot函数,进行矩阵的乘法运算
# 线性代数
x= np.array([[1,2,3],[4,5,6]])
y = np.array([[1,2],[3,4],[5,6]])
print(x.dot(y))