numpy数据分析知识总结

Numpy科学算法库

基于博客https://blog.csdn.net/m0_74344139/article/details/134842295笔记总结

NumPy,一言以蔽之,是Python中基于数组对象的科学计算库

特点

  • 多维数组对象:NumPy的核心数据结构是ndarray,它是一个多维数组,用于存储同质数据类型的元素。这些数组可以是一维、二维、三维等,非常适用于向量化操作和矩阵运算。

  • 广播功能:NumPy允许在不同形状的数组之间执行操作,通过广播功能,它可以自动调整数组的形状,以使操作变得有效。

  • 丰富的数学函数:NumPy提供了大量的数学、统计和线性代数函数,包括基本的加减乘除、三角函数、指数和对数函数、随机数生成、矩阵操作等。

  • 索引和切片:NumPy允许使用索引和切片操作来访问和修改数组中的元素,这使得数据的选择和处理非常灵活。

  • 高性能计算:NumPy的底层实现是用C语言编写的,因此它在处理大规模数据时非常高效。此外,NumPy还与其他高性能计算库(如BLAS和LAPACK)集成,提供了快速的线性代数运算。

  • 互操作性:NumPy可以与许多其他Python库和数据格式(例如Pandas、SciPy、Matplotlib)无缝集成,这使得数据科学工作流更加流畅。

安装anaconda环境

  1. 打开anaconda命令行

conda create -n ai python=3.7

默认安装路径 就是anaconda安装的目录下的envs中

系统 Conda 环境默认路径
Windows C:\Users\<你的用户名>\anaconda3\envs\ai~miniconda3\envs\ai
Linux / macOS /home/<你的用户名>/anaconda3/envs/ai~/miniconda3/envs/ai
  1. 切换虚拟镜像
cmd 复制代码
conda activate ai
  1. 下载numpy

    cmd 复制代码
    conda install numpy
  2. 在pycharm切换为anaconda虚拟环境即可。

注意

如果使用jupyter环境还需要下载一个

conda install jupyter

问题

  1. 镜像源无效
cmd 复制代码
(base) C:\Windows\System32>conda create -n ai python=3.7
Retrieving notices: done
Channels:
 - defaults
 - https://mirrors.aliyun.com/anaconda/pkgs/free
 - https://mirrors.aliyun.com/anaconda/pkgs/main
Platform: win-64
Collecting package metadata (repodata.json): failed

UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/free <https://mirrors.aliyun.com/anaconda/pkgs/free>
The channel is not accessible or is invalid.
You will need to adjust your conda configuration to proceed.
Use conda config --show channels to view your configuration's current state,
and use conda config --show-sources to view config file locations.

解决

  1. 删除旧的镜像源 依次执行命令,问题解决

    cmd 复制代码
    conda config --remove channels https://mirrors.aliyun.com/anaconda/pkgs/free
    conda config --remove-key channels
    conda config --add channels defaults
    conda config --add channels conda-forge
    conda config --set channel_priority strict

具体api

本机运行环境jupyter

导入numpy

import numpy as np

创建一维数组

python 复制代码
data = np.array([1,2,3])
data
array(1,2,3)

#%%

创建二维数组矩阵

python 复制代码
data = np.array([[1,2,3],[4,5,6]])
data
[[1 2 3]
 [4 5 6]]

创建全为0的数组

两行三列的数组

python 复制代码
data = np.zeros(shape=(2,3))
data
[[0. 0. 0.]
 [0. 0. 0.]]

创建全为1的数组

5行3列的数组

python 复制代码
data = np.ones(shape=(5,3))
data
[[1. 1. 1.]
 [1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]

创建全空数组

如果创建出来不是全部为空也不是这个方法的bug,而是empty的方法呢他的看是否有变量初始化过,如果被初始化了那么就会去垃圾回收机制里面去找一个值,如果没有就会是随机值

python 复制代码
data1 = np.empty(shape=(5,3))
data1
[[1. 1. 1.]
 [1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]

创建有连续序列的数组

arange 范围是1-20 步长是2 ---->1,3,...

python 复制代码
data = np.arange(1,20,2)
data
array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19])

#%%

创建有连续间隔的数组 linspace

开始为1 结束为2 需要有20个元素 按照从大到小 [1,2]

data = np.linspace(1,2,20)

data

array([1. , 1.11111111, 1.22222222, 1.33333333, 1.44444444,

1.55555556, 1.66666667, 1.77777778, 1.88888889, 2. ])

创建随机数组 创建3行4列的随机数

data = np.random.rand(3,4)

data

还可以创建整数的数组

---> 整数 1-10 , 矩阵为3行4列 包头不包尾 [1,10)

python 复制代码
data = np.random.randint(1,10,size=(3,4))
data

[[0.33873036 0.8257828  0.62382205 0.62767431]
 [0.65786235 0.66304333 0.99339641 0.18908504]
[0.59778931 0.66433449 0.00201582 0.01999364]]

改变数组形状

python 复制代码
data1=[1,2,3,4,5]
data2=[5,2,1,3,2]
data=np.array([data1,data2])
data
data.shape # 2行5列
(2,5)

修改对应的形状 (维度)

改成5行2列

python 复制代码
data = data.reshape(5,2) 
data.shape
(5,2)

数组转置

python 复制代码
data = np.array([[1,2,3,4],[4,5,6,7],[4,5,6,7]])
print(data)
data_arr = np.array(data)
data_arr
data_arr.T # 转置就是行变列,列变行

数组维度

python 复制代码
data = np.array([[1,2,3,4],[4,5,6,7],[4,5,6,7]])
print(data)
data.ndim # 打印数组结构 这是一个二维数组

data = np.zeros(shape=(3,4,2))
data

data.ndim

data.shape

数组中元素个数

python 复制代码
data.size 

数据类型

python 复制代码
data.dtype

数组运算

python 复制代码
data1 = np.array([1,2,3])
data2 = np.array([4,5,6])
data1+data2 # 直接相加
data1 * data2 # 直接乘

平均值

#numpy.mean(arr, axis=None, dtype=None, out=None): 计算数组的平均值。

参数axis表示沿着哪个轴进行计算,默认为None,表示计算整个数组的平均值;

dtype表示返回结果的数据类型,默认为float64;

out表示将结果存储在指定的数组中,一般情况下,传个数组进去就可以了,其他的用默认的就好了

python 复制代码
data = np.array([1,2,3,4,5])
mean  = np.mean(data)
mean

data=[1,0,6,9]
data1=np.median(data)
print(data1)

计算数组的标准差

标准差是什么

数据相对于其平均值的波动程度有多大,它主要用于衡量数据的波动程度、离散程度或稳定性

标准差是描述数据离散程度,数据离散程度越小,数据越集中,数据离散程度越大,数据越分散。

标准差的计算

样本标准差

例如用这样一组数据

x=[2,4,4,4,5,5,7,9]

  1. 求出平均值

mˉ=1n∑i=1n \bar{m} = \frac{1}{n} \sum_{i=1}^{n} mˉ=n1i=1∑n

meanˉ=2+4+4+4+5+5+7+98=5 \bar{mean} = \frac{2+4+4+4+5+5+7+9}{8} = 5 meanˉ=82+4+4+4+5+5+7+9=5

  1. 求平方差的平均值(方差)

拿里面的值减去 平均值 在进行一个开方 最后的和 乘一个 (n-1) 元素个数的长度-1

s2ˉ=1n−1∑i=1n(xi−mˉ)2 \bar{s^2} = \frac{1}{n-1} \sum_{i=1}^{n}(x_i - \bar{m})^2 s2ˉ=n−11i=1∑n(xi−mˉ)2

s2=(2−5)2+(4−5)2+1+1+0+0+4+167≈4.571 s^2 = \frac{(2-5)^2+(4-5)^2+1+1+0+0+4+16}{7} \approx 4.571 s2=7(2−5)2+(4−5)2+1+1+0+0+4+16≈4.571

  1. 求出标准差(开根号)

s=4.571≈2.14 s = \sqrt{4.571} \approx 2.14 s=4.571 ≈2.14

如何评判是否稳定
1. 变异系数(CV)

CV=标准差均值×100% CV = \frac{标准差}{均值} \times 100\% CV=均值标准差×100%

  • 如果 CV < 10%:说明波动很小,数据很稳定
  • 如果 CV ≈ 10%~30%:一般波动
  • 如果 CV > 30%:波动较大或不稳定

CV=2.145×100%≈42.8% CV = \frac{2.14}{5} \times 100\% \approx 42.8\% CV=52.14×100%≈42.8%

说明:这组数据波动还是挺大的(>30%),不稳定,比较分散。

2. 看标准差占数据范围的比例

极差
Range=max(x)−min(x)=9−2=7 Range = max(x) - min(x) = 9 - 2 = 7 Range=max(x)−min(x)=9−2=7

求值
σRange=2.147≈30.6% \frac{\sigma}{Range} = \frac{2.14}{7} \approx 30.6\% Rangeσ=72.14≈30.6%

这组数据波动还是挺大的(>30%),不稳定,比较分散

python 复制代码
x=[2,4,4,4,5,5,7,9]
std = np.std(x)
std
2.14

方差

场景

作用 说明
数据分散度衡量 判断数据波动大小
特征筛选 去除低方差无用特征
偏差-方差权衡 控制模型过拟合与欠拟合
模型稳定性评估 评估模型性能波动
生成模型参数 用于描述概率分布中的散布程度
python 复制代码
data = np.var(x,ddof=1)
data
4.51

计算数组的最小值

numpy.min(arr, axis=None, out=None): 计算数组的最小值。参数axis和out的含义与numpy.mean()相同。

计算数组的最大值

numpy.max(arr, axis=None, out=None): 计算数组的最大值。参数axis和out的含义与numpy.mean()相同

计算数组的元素之和

numpy.sum(arr, axis=None, dtype=None, out=None): 计算数组的元素之和。参数axis、dtype和out的含义与numpy.mean()相同。

计算数组的元素乘积

numpy.prod(arr, axis=None, dtype=None, out=None): 计算数组的元素乘积。参数axis、dtype和out的含义与numpy.mean()相同

计算数组的累积和

numpy.cumsum(arr, axis=None, dtype=None, out=None): 计算数组的累积和。参数axis、dtype和out的含义与numpy.mean()相同。

函数

  • np.append():在数组末尾添加值
  • np.insert():在给定索引值前一个值插入相应的值
  • np.del():从输入数组中删除指定的子数组
  • np.unique():删除数组中重复元素
  • np.sort():对输入数组排序,并返回一个数组副本

切片

一维切片

切片操作是左闭右开的,即包括起始位置,但不包括结束位置,很简单不在赘述

python 复制代码
# 一维数组切片
data = np.array([1,2,3,4,5,6,7,8,9])
data[0:3] # 从0开始到3结束
多维切片

二维的时候就是理解为行列

超过二维就理解为页,行,列

3维

python 复制代码
# 多维数组切片
data1=[1,2,3,4,5]
data2=[6,7,8,9,10]
data3=[11,12,13,14,15]
data4=[16,17,18,19,20]
data5=[21,22,23,24,25]
data6=[26,27,28,29,30]
data=np.array([[data1,data2,data3],[data4,data5,data6]])
data
  • data[0:1,2:3] 表示 0 到第1页的,2行到3行,所有列的数据, 其实是有三个后面省略的参数就是默认所有

比如说4维

维度编号 含义
第0维 有2个"块" 2个立方体
第1维 每块有3个"页/面" 3页矩阵
第2维 每页有4行 行数 = 4
第3维 每行有5个元素 列数 = 5

总结:不管是列取片,还是行取片,你都去一维一维的去进行拆分,一维一维的去切片就好了

数组堆叠

垂直堆叠
python 复制代码
# 数组堆叠
data1=[1,2,3,4,5]
data2=[6,7,8,9,10]
data4 = np.array([data1,data2]) # (用于构造矩阵)的时候用
data3 = np.vstack([data1,data2]) # (清洗好的数据)用垂直拼接
水平堆叠
python 复制代码
# 水平堆叠
data1 = [1, 2, 3]
data2 = [4, 5,6]
data3 = np.hstack([data1, data2])
print(data3) # 横着排
保存数组到文件
python 复制代码
# 保存数组到文件
np.save('my_array.npy', data)
AI生成项目python
运行
加载数组
python 复制代码
# 加载数组
loaded_data = np.load('my_array.npy')
相关推荐
weixin_4188138721 分钟前
Python-可视化学习笔记
笔记·python·学习
Danceful_YJ38 分钟前
4.权重衰减(weight decay)
python·深度学习·机器学习
Zonda要好好学习1 小时前
Python入门Day5
python
电商数据girl2 小时前
有哪些常用的自动化工具可以帮助处理电商API接口返回的异常数据?【知识分享】
大数据·分布式·爬虫·python·系统架构
超龄超能程序猿3 小时前
(六)PS识别:源数据分析- 挖掘图像的 “元语言”技术实现
python·组合模式
amazinging3 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十四天
python·学习·appium
UrbanJazzerati4 小时前
Xlwings安装报错:Connection timed out & WinError 32?一招解决你的安装难题!
python
Tipriest_4 小时前
Python异常类型介绍
开发语言·python·异常
前端付豪4 小时前
21、用 Python + Pillow 实现「朋友圈海报图生成器」📸(图文合成 + 多模板 + 自动换行)
后端·python