一,简介
1.1什么是数据分析
- 数据分析是指通过使用各种统计学、计算机科学和数学技术,对收集来的数据进行处理、整理、解释和呈现,从而提取出数据中有用的信息和洞察,并帮助做出更明智的决策。数据分析可以应用于各种不同的领域和行业,包括商业、科学、医疗保健、政府等。在数据分析中,人们可以利用不同的数据分析工具和技术,例如数据挖掘、机器学习、数据可视化等,以获得更深入的理解和知识。
1.2使用python做数据分析常用的库
- numpy:基础数值算法
- scipy:科学计算
- matplotlib:数据可视化
- pandas:序列高级函数
1.3什么是Numpy库:Numerical Python
- NumPy是一个Python库,用于科学计算和数值计算。它为Python提供了一个强大的多维数组对象和一系列的函数,用于处理这些数组。NumPy是科学计算领域中最为常用的Python库之一,因为它可以让开发者高效地处理数值数据,包括线性代数、傅里叶变换和随机数生成等操作
1.4为什么使用Numpy库
对于同样的数值计算任务,使用Numpy比直接编写python代码实现的优点:
- 代码简洁:Numpy直接以数组,矩阵作为粒度今次那个计算并支持大量的数字函数,而python需要for循环从底层实现。
- 性能更高效:Numpy的数组存储效率和输入输出计算性能,比Python使用List或者嵌套List好很多。因为Numpy的数据存储与Python原生List不同,Numpy的大部分代码都是C语言实现的,这也是Numpy比python代码高效的原因。
1.5Numpy安装
- 在pycharm中打开终端,由于我安装的python的3.X,使用命令安装numpy:
pip3 install numpy
- 检查是否安装好:`python -c “import numpy; print(numpy.version)”
二,Numpy数组
2.1ndarray数组
- ndarray 是一个用于多维数组对象的 NumPy 库的核心数据类型。它是一个具有相同数据类型元素的固定大小数组,而且所有元素都在连续的内存块中存储。
- ndarray 对象的重要属性包括:
(1)shape: 数组的维度,例如,一个 n 行 m 列的数组,它的 shape 属性将是 (n, m)。
(2)dtype: 数组中元素的数据类型,例如,int32, float64 等。
(3)ndim: 数组的维度数,例如,一个二维数组的 ndim 是 2。 - ndarray 对象可以通过很多方式创建,包括:
(1)从 Python 列表或元组转换。
(2)使用 NumPy 的函数,例如,numpy.zeros() 或 numpy.ones()。
(3)从文件中读取数据。 - 以下是一个使用 NumPy 创建 ndarray 的示例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.shape)
print(a.dtype)
print(a.ndim)
5. 简单数组计算实现:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a.shape=(2,3)#将一维数组改成二行三列
print(a*3)#数组运算,所有元素乘3
print(a)
print(a>3)#判断所有元素是否大于3
print(a+a)#两个数组对应位置元素相加,必须保证维度一样
# print(a.shape)
# print(a.dtype)
# print(a.ndim)
2.2ndnarray底层存储原理
(1)在 NumPy 中,ndarray 的底层存储是连续的一段内存空间。该内存空间中保存的是多维数组中的元素。对于一维数组,元素按照顺序存储在连续的内存空间中;对于二维数组,元素也是按照行优先顺序存储的,即第一行的元素存储在内存的前面,第二行的元素紧随其后,以此类推;对于高维数组,元素的存储方式也是按照行优先的方式进行的。
(2)NumPy 中的 ndarray 还包含了元素的数据类型以及数组的形状等信息。因此,在对 ndarray 进行切片、索引等操作时,NumPy 会通过计算偏移量和步长等信息,直接访问对应的内存位置,从而实现高效的数组操作。
(3)由于 ndarray 底层存储是连续的一段内存空间,因此在对数组进行大量计算时,可以利用现代处理器的缓存机制,提高计算效率。此外,ndarray 的内存管理也比较灵活,可以通过设置数组的 strides、dtype 等属性,实现对数组的内存分配和释放等操作。
2.2.1内存中的ndarray对象
- 元数据(metadata):存储对目标数组的描述信息:dim count,dtype,data等。
- 实际数据:完整的数组数据,将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,访问元数据,对元数据进行操作,提高性能。
- ndarray数组对象的特点:
(1)Numpy数组是同质数组:即所有元素的数据类型一致。
(2)Nump数组的下标从0开始,最后一个元素的下标为数组长度减一。
2.3ndarray数组对象的创建
(1)正常方式创建:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
(2)通过arang()方法:
array1=np.arange(1,9,2)
print(array1)
参数信息:
(3)创建全为零的数组
array2=np.zeros(10,dtype='int32')
print(array2)
(4)#创建全为一数组
array3=np.ones(shape=(3,2),dtype='float32')
print(array3)
2.4ndarray属性的基本操作
- NumPy中的ndarray是一个多维数组对象,具有许多有用的属性和方法,以下是一些常见的属性操作示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 输出 (2, 3)
arr.shape = (3, 2)
print(arr) # 输出 [[1 2]
# [3 4]
# [5 6]]
- 数据类型操作:
import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype) # 输出 int64
arr = np.array([1.0, 2.0, 3.0])
print(arr.dtype) # 输出 float64
arr = np.array(['a', 'b', 'c'])
print(arr.dtype) # 输出 <U1
注意:想要获得一个与arry数组数据一样但数据类型不一样的数组,不可以直接将arry的数据类型进行改变,容易出错,正确的做法是使用astype()方法,创建一个新数组。
import numpy as np
arr = np.array([1, 2, 3])
arry2=arry.astype('float32')
- 维度操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 输出 2
arr = np.array([1, 2, 3])
print(arr.ndim) # 输出 1
- 元素数量操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.size) # 输出 6
arr = np.array([1, 2, 3])
print(arr.size) # 输出 3
- 数据存储类型操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.itemsize) # 输出 8
arr = np.array([1, 2, 3])
print(arr.itemsize) # 输出 8
2.5对ndarray数组进行索引切片
2.5.1通过索引访问数组元素
(1)可以使用方括号[]和索引值来访问数组中的单个元素,例如:
import numpy as np
# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问第2行第3列的元素
print(a[1, 2]) # 输出:6
2.5.2通过切片访问数组子集
(1)使用冒号:分隔符可以创建切片对象,它可以用于访问数组的子集。切片对象包括start:stop:step,其中start是开始索引值,stop是结束索引值,step是步长。
# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问第2行的所有元素
print(a[1, :]) # 输出:[4 5 6]
# 访问第2列的所有元素
print(a[:, 1]) # 输出:[2 5 8]
# 访问第2行到第3行,第1列到第2列的所有元素
print(a[1:3, 0:2]) # 输出:[[4 5] [7 8]]
需要注意的是,使用切片返回的是一个新的ndarray数组,而不是原数组的视图。因此,对切片返回的数组进行修改不会影响原数组的值。