sha1zhi1yu3 发表于 2024-11-20 16:58

python从入门到刚入门-pandas

# 2.常用Python数据分析开源库介绍

- **NumPy(Numerical Python)**

- 它是 Python 语言的一个扩展程序库。是一个运行速度非常快的数学库.
- 主要用于数组计算
- 包含:
    - 一个强大的N维数组对象 ndarray
    - 广播功能函数
    - 整合 C/C++/Fortran 代码的工具
    - 线性代数、傅里叶变换、随机数生成等功能

- **Pandas**

- Pandas是一个强大的分析结构化数据的工具集
- 它的使用基础是Numpy(提供高性能的矩阵运算)
- 用于数据挖掘和数据分析,同时也提供数据清洗功能
- **Pandas利器之 Series**,是一种类似于一维数组的对象
- **Pandas利器之 DataFrame**,是Pandas中的一个表格型的数据结构

- **Matplotlib**

- 它是一个功能强大的数据可视化开源Python库
- Python中使用最多的图形绘图库
- 可以创建静态, 动态和交互式的图表

- **Seaborn**

- 它是一个Python数据可视化开源库, 建立在matplotlib之上,并集成了pandas的数据结构
- Seaborn通过更简洁的API来绘制信息更丰富,更具吸引力的图像
- 面向数据集的API,与Pandas配合使用起来比直接使用Matplotlib更方便

- **Sklearn**

- scikit-learn 是基于 Python 语言的机器学习工具
- 简单高效的数据挖掘和数据分析工具
- 可供大家在各种环境中重复使用
- 建立在 NumPy ,SciPy 和 matplotlib 上

- **jupyter notebook**

- **它不是开源库,** 它是一个开源Web应用程序, 可以创建和共享代码、公式、可视化图表、笔记文档

- 是数据分析学习和开发的首选开发环境, 作用如下:

    - 数据清理和转换

    - 数值模拟

    - 统计分析

    - 数据可视化

    - 机器学习等
# 1.Numpy

## 1.1属性

- Numpy简介

- NumPy(Numerical Python)是Python数据分析必不可少的第三方库
- NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身要高效
- 本身是由C语言开发,NumPy被Python其它科学计算包作为基础包

- 重要功能如下

1. 高性能科学计算和数据分析的基础包
2. ndarray,多维数组,具有矢量运算能力,快速、节省空间
3. 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
4. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具

- Numpy的属性

> NumPy的数组类被称作ndarray,通常被称作数组。

<table>
      <tr>
          <td>.ndim</td><td>数组轴的个数</td>
      </tr>
      <tr>
          <td>.shape</td> <td>数组的维度</td>
      </tr>
          <td>.size</td><td>数组元素个数</td>
      <tr>
          <td>.dtype</td><td>数组元素类型</td>
      </tr>
      <tr>
          <td>.itemsize</td><td>数组每个元素的占用字节数</td>
      </tr>
</table>
> 数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排 m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性。

- 函数写法

```python
#shape, ndim, size属性 可以 函数写法 实现.
# 格式: np.函数名(数组)
print(f'数组的维度: {np.shape(arr)}')         # (3, 5)   3个元素(一维数组), 每个元素(一维数组)又有5个元素(值)
print(f'数组轴的个数: {np.ndim(arr)}')      # 几维数组, 轴就是几,2
print(f'数组元素个数: {np.size(arr)}')      # 15
print(f'数组类型: {type(arr)}')            # <class 'numpy.ndarray'>
```


## 1.2 创建Numpy对象-ndarry

- ndarray介绍

- NumPy数组是一个多维的数组对象(矩阵),称为**ndarray(N-Dimensional Array)**
- 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点
- 注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型。

- 数组形式

```python
import numpy as np
arr1 = np.array()
arr2 = np.array()
```

- **zeros() /ones()/empty()**

> 函数zeros创建一个全是0的数组,
>
> 函数ones创建一个全1的数组,
>
> 函数empty创建一个内容随机并且依赖于内存状态的数组。默认创建的数组类型(dtype)都是float64

```python
zero1 = np.zeros((3, 4))    # 3个一维数组, 每个长度为: 4
print('数组zero1: ', zero1)

ones1 = np.ones((2, 3, 4))# 2个二维数组, 每个二维数组有3个一维数组, 每个一维数组有4个元素1, 整体放入1个数组中
print('数组one1: ', ones1)

empty1 = np.empty((2, 3))
print('数组empty1: ', empty1)

print(zero1.dtype, ones1.dtype, empty1.dtype)
```

- **arange(),** 类似 python 的 range() ,创建一个一维 ndarray 数组。

```python
np_arange = np.arange(10, 20, 5,dtype=int)   # 起始, 结束, 步长, 类型
print("arange创建np_arange:", np_arange)
print("arange创建np_arange的元素类型:", np_arange.dtype)
print("arange创建np_arange的类型:", type(np_arange))
```

- **matrix()**   or   **mat()**,是 ndarray 的子类,只能生成 2 维的矩阵

matrix类型是 ndarray类型的 子类型.

```python
x1 = np.mat("1 2;3 4")
print(x1)
x2 = np.matrix("1,2;3,4")
print(x2)
x3 = np.matrix([, ])
print(x3)
```

- **创建随机数矩阵**

* random.rand()    生成指定维度大小 的随机多维浮点型数据(二维), rand固定区间0.0 ~ 1.0
* random.randn() 生成正态分布
* random.randint(size=(数据区间))生成指定维度大小 的随机多维**整型**数据(二维), 可指定区间
* random.uniform(size=(数据区间)) 生成指定维度大小 的随机多维**浮点型**数据(二维), 可以指定区间(1, 5)产生1到5之间均匀分布的样本值

```python
import numpy as np

# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维), rand固定区间0.0 ~ 1.0
arr = np.random.rand(3, 4)
print(arr)
print(type(arr))

# 生成指定维度大小(3行4列)的随机多维整型数据(二维), randint()可指定区间(-1, 5)
arr = np.random.randint(-1, 5, size=(3, 4))
print(arr)
print(type(arr))

#生成指定维度大小(3行4列)的随机多维浮点型数据(二维), uniform()可以指定区间(-1, 5)产生-1到5之间均匀分布的样本值
arr = np.random.uniform(-1, 5, size=(3, 4))
print(arr)
print(type(arr))
```

- **ndarray的数据类型转换** astype() dtype属性

np.zeros((3,4),dtype=np.float64)

数组对象.astype(数据类型)

### 1.2.1 数列

与数学中的数列不一样两个函数不能指定 公差和公比 输入 起始值和结束值 并指定数列中的数值个数

公共参数

​        endpoint=True 默认是True(即: 包括结束值)

​        (起始点,结束点,等比数列个数) [起始点,结束点]

- **等比数列 **logspace()

logspace(起始点,结束点,等比数列个数,base=底数) 开始点和结束点是10的幂[起始点,结束点]

```python
# np.logspace 等比数列, logspace中,开始点和结束点是10的幂
# 我们让开始点为0,结束点为0,元素个数为10,看看输出结果。

print(np.logspace(1,4,4)) # [   10.   100.1000. 10000.]

# 假如,我们想要改变基数,不让它以10为底数,我们可以改变base参数,将其设置为2
print(np.logspace(1,4,4,base=2)) #[ 2.4.8. 16.
```

- **等差数列**

np.linspace(起始点,结束点,数列个数)[起始点,结束点]

```python
# np.linspace等差数列
# np.linspace是用于创建一个一维数组,并且是等差数列构成的一维数组,它最常用的有三个参数。
# 第一个例子,用到三个参数,第一个参数表示起始点,第二个参数表示终止点,第三个参数表示数列的个数。
print(numpy.linspace(1,4,4)) #
```

## 1.3 Numpy的内置函数



- 基本函数

```python
# 基本函数如下
np.ceil(): 向上最接近的整数,参数是 number 或 array
np.floor(): 向下最接近的整数,参数是 number 或 array
np.rint(): 四舍五入,参数是 number 或 array
np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
np.multiply(): 元素相乘,参数是 number 或 array
np.divide(): 元素相除,参数是 number 或 array
np.abs():元素的绝对值,参数是 number 或 array
np.where(condition, x, y): 三元运算符,x if condition else y
# 注意: 需要注意multiply/divide 如果是两个ndarray进行运算 shape必须一致

      
# 示例代码
arr = np.random.randn(2, 3)
print(arr)
print(np.ceil(arr))
print(np.floor(arr))
print(np.rint(arr))
print(np.isnan(arr))
print(np.multiply(arr, arr))
print(np.divide(arr, arr))
print(np.where(arr > 0, 1, -1))
```

- 统计函数

np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array

- 比较函数

np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True

```python
# 实例代码
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0))# True
print(np.all(arr > 0))# False
```

- 去重函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合

```python
# np.unique():找到唯一值并返回排序结果,类似于Python的set集合

# 实例代码
arr = np.array([, ])
print(arr)
print(np.unique(arr)) #
```

- 排序函数

np.sort()函数排序, 返回排序后的副本

ndarray.sort(), 在原数据上进行修改

```python
arr = np.array()
print("原数组arr:", arr)

# np.sort()函数排序, 返回排序后的副本
sortarr1 = np.sort(arr)
print("numpy.sort()函数排序后的数组:", sortarr1)

# ndarray直接调用sort, 在原数据上进行修改
arr.sort()
print("数组.sort()方法排序:", arr)
```


#### 1.3Numpy运算

- 基本运算

两个ndarray, 一个是arr_a另一个是arr_b

两个对象的 shape 必须完全一样 才能 + - * /

计算方式是 对应位置进行 + - * /

结果 的shape 不变

- 矩阵运算

必须完全满足下列条件 才可以使用对应寒素

- 场景1 arr_a 行列数 = arr_b行列数 对应位置相乘

    np.multiply(a, b)

- 场景2A的列数 = B的行数且 A的列数 != B的列数

    dot(arr_a,arr_b)

IDdongdong 发表于 2024-11-20 17:11

楼主加油{:1_921:}

laotzudao0 发表于 2024-11-20 17:34

这些库分析数据好用

hntjb 发表于 2024-11-20 17:39

正好要用,学习了,谢谢。。。

ziyezy 发表于 2024-11-20 17:40

楼主加油

wwzzs 发表于 2024-11-20 18:46

学习了,谢谢。。。

咸鱼土豆 发表于 2024-11-20 18:52

加油~~最近也在尝试读一些程序的源码 帮助很大

lxkroom 发表于 2024-11-20 19:01

Numpy的属性这里解析不太正常啊

D22832 发表于 2024-11-20 19:40

学习了学习了

zyt8023 发表于 2024-11-20 19:45

期待后续更新✌︎˶╹ꇴ╹˶✌︎
页: [1] 2
查看完整版本: python从入门到刚入门-pandas