筱团Blog筱团のBlog

Python 数据分析

筱团·2023-02-21 06:44·314 次阅读

Python 数据分析

Prerequisite#

PS:只是做部分记录,具体的内容全记载在语雀,但不方便放出来

  • NumPy 是一个用于数值运算的 Python 库,专门对数值运算进行优化,最大的优势是运行高效。
  • Matplotlib 是常用的数据可视化的工具包,用来绘制各种图表,更好地展示数据。
  • Pandas 是 Python 重要的数据分析工具包,也是目前非常流行的 Python 数据分析工具。最初它被作为金融数据分析工具由全球资产管理公司 AQR 在 2008 年 4 月开发,最终在 2009 年底开源出来。

PS:Pandas 的底层数据结构采用 NumPy 来实现,我们也可以把 pandas 理解成是对 NumPy 的封装,从而让数据分析的一些功能的实现变得更轻松方便。

Numpy#

对列表分片后的数据进行更改不会影响原数据,但对多维数组分片后的数据进行更改会影响到原数据

Copy
# 列表 lst_data = [1, 2, 3] lst_data2 = lst_data[:] lst_data2[0] = 6 print(lst_data) # 输出:[1, 2, 3] # 多维数组 arr_data = np.array([1, 2, 3]) arr_data2 = arr_data[:] arr_data2[0] = 6 print(arr_data) # 输出:[6 2 3]

可以进行广播 和 无法进行广播

Copy
# 可以进行广播 # 示例一 data = np.array([[1, 2], [3, 4], [5, 6]]) ones = np.ones(2) print(data.shape) print(ones.shape) # 输出: # (3, 2) # (2,) # 实例二 ones = np.ones((2, 3)) data = np.array([1, 2, 1]) print(ones + data) # [[2. 3. 2.] [2. 3. 2.]]

data 的形状是 (3, 2),ones 的形状是 (2,)。根据规则在较小维度的 shape 元组前补 1,直到和较大维度的 shape 元组长度相同,补 1 后 ones 的形状是 (1, 2)。

接着将元素在值为 1 的维度上进行复制,最后 ones 的形状变成了 (3, 2),和 data 的形状相同,因此可以进行计算。

Copy
# 无法进行广播 data = np.array([[1, 2], [3, 4], [5, 6]]) ones = np.ones(3) print(data.shape) print(ones.shape) # 输出: # (3, 2) # (3,)

当 ones 的形状是 (3,) 时,补 1 后变成 (1, 3),最后变成 (3, 3)。形状与 data 不相同,无法进行计算。如果尝试执行 data + ones,会报错
布尔索引,顾名思义就是用布尔值作为索引去获取需要的元素

Copy
import numpy as np data = np.array([[1, 2], [3, 4], [5, 6]]) print(data > 3) """ [[False False] [False True] [ True True]] """ data = np.array([[1, 2], [3, 4], [5, 6]]) print(data[data > 3]) # 输出:[4 5 6] data = np.array([[1, 2], [3, 4], [5, 6]]) print(data[(data > 3) & (data < 5)]) # 输出:[4] data = np.array([[1, 2], [3, 4], [5, 6]]) # 大于 3 或者小于 2 print(data[(data > 3) | (data < 2)]) # 输出:[1 4 5 6] # 大于 3 或者不小于 2(即大于等于 2) print(data[(data > 3) | ~(data < 2)]) # 输出:[2 3 4 5 6]

在 numpy 中多个条件的布尔索引正确写法是:and 改用 &,or 改用 |,not 改用 ~,并且每个条件要用括号括起来
np.random.randint() 和 random.randint()

Copy
import numpy as np # 不传入形状时 print(np.random.randint(0, 5)) # 输出:3 # 形状为一维数组时 print(np.random.randint(0, 5, 3)) # 输出:[4 0 1] # 形状为二维数组时 print(np.random.randint(0, 5, (2, 3))) # 输出: # [[0 2 1] # [4 2 0]]

np.random.randint() 和 np.random.rand() 传入的参数不一样;
numpy 中的 np.random.randint() 方法和 Python 中的 random.randint() 类似,不同之处在于,random.randint(m, n) 生成的是 [m, n] 之间的整数,而 np.random.randint(m, n) 生成的是 [m, n) 之间的整数,这点一定注意要区分。
genfromtxt() 方法用于文件的读取

Copy
import numpy as np data = np.genfromtxt('a.csv', delimiter=',', encoding='utf-8') print(data) ''' 1,2,3 4,5,6 ''' """ [[1. 2. 3.] [ 4. 5. 6.]] """

Matplotlib#

使用 Matplotlib 的前置是学完了 Numpy

posted @   筱团  阅读(314)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示
目录