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) 楼主加油{:1_921:} 这些库分析数据好用 正好要用,学习了,谢谢。。。 楼主加油 学习了,谢谢。。。 加油~~最近也在尝试读一些程序的源码 帮助很大 Numpy的属性这里解析不太正常啊 学习了学习了 期待后续更新✌︎˶╹ꇴ╹˶✌︎
页:
[1]
2