数据框架

NumPy

NumPy 主要用于解决数值计算问题,特别是涉及到大量数值数据的计算和操作。NumPy 提供了高性能的多维数组对象,以及用于处理这些数组的函数和方法。NumPy 适用于执行线性代数、统计学、傅里叶分析等计算任务,以及支持广播功能和向量化操作,可提高代码的执行效率。

import numpy as np

创建一维数组

x = np.arange(0, 6, 0.1) # 以 0.1 为单位,生成 0 到 6 的数据

创建一个3x3的二维数组

array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

创建一个3x3的随机二维数组

array2 = np.random.randint(1, 10, size=(3, 3))

矩阵转为一维数组

X = np.array([[51, 55], [14, 19], [0, 4]])
x = X.flatten() #将 X 转为一维数组

数组访问

索引访问
X = np.array([[51 55 14 19 0 4]])
X[np.array([0, 2, 4])] # 获取索引为 0、2、4 的元素
条件访问
X = np.array([[51 55 14 19 0 4]])
X[X>15]

对数组进行数学运算

array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = np.random.randint(1, 10, size=(3, 3))
sum_array = array1 + array2 # 对应位置相加
product_array = array1 * array2 # 对应位置相乘

计算数组的统计量

平均值
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mean = np.mean(array1) # 平均值
array.mean() # 平均值
np.mean(array,axis = 0) # axis = 0表示垂直求均值
np.mean(array,axis = 1) # axis = 1表示水平求均值
加权平均值
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.average(array, weights = w_array)
最值
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = np.random.randint(1, 10, size=(3, 3))
#最大值
np.max()
#最小值 
np.min()
#极值 
np.ptp()

#数组中最大值下标
np.argmax() 
#数组中最小值下标
np.argmin()

#两个同维数组中对应元素中最大/最小元素构成一个新的数组
np.maximun(array1,array2) 
np.minimun(array1,array2)
中位数
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.median(array)
标准差
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.std(array)           # 总体标准差
np.std(array, ddof=1)   # 样本标准差

线性代数操作

array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = np.random.randint(1, 10, size=(3, 3))

transpose_array = np.transpose(array1)
print("Transpose of array 1:\n", transpose_array)

dot_product = np.dot(array1, array2)
print("Dot product of array 1 and array 2:\n", dot_product)

求解线性方程组

coefficients = np.array([[1, 2], [3, 4]])
constants = np.array([5, 6])
solution = np.linalg.solve(coefficients, constants)
print("Solution of the linear system:\n", solution)

Pandas

Pandas 用于数据处理和分析,特别是对结构化数据(如表格数据)进行操作。Pandas 提供了两个主要的数据结构:Series(一维数据)和 DataFrame(二维数据)。这些数据结构使得数据清洗、转换、聚合、合并等操作变得更加简单。Pandas 还支持对时间序列数据的处理,以及读取和写入多种文件格式(如 CSV、Excel、SQL 等)。

Pandas创建DataFrame

data_preproc = pd.DataFrame({"loss":loss_axix,"acc":acc_axix})

DataFrame

df = pd.read_csv('train.csv',encoding='utf-8')

df.head() / df.tail(),查看df的前n行,默认返回所有

df.info(),数据表的基本信息(维度,列名称,数据格式,所占空间等)

df.dtypes,获取数据类型

df.index,获取表格索引

df.columns,获取表格列名

df.values,以array形式返回指定数据的取值

df.loc[1],返回第1行数据,Series数据类型

df1.loc[[1]],返回第1行数据,DataFrame数据类型

df[['測項','时间']],返回指定列

df.loc[0,'測項'],返回‘测项’列,index为0的值

df[df['測項']=='PM2.5'],筛选‘测项’为‘PM2.5’的行元素

train.drop(['日期','測項'],axis=1),删除‘日期’,‘测项’

train.astype('int64'),将全部数据类型转换

df['21'] = pd.to_numeric(df['21'],errors='coerce',downcast='float'),将指定列数据类型转换

df.sum(axis=1),行求和

df.sum(),列求和

Matplotlib

Matplotlib 主要用于数据可视化。它提供了绘制图表的功能,如折线图、散点图、柱状图、直方图、饼图等。Matplotlib 支持多种图表自定义选项,包括颜色、线型、标记等,使得图表更具表现力。通过可视化,用户可以更直观地理解数据及其内在关系。

import matplotlib.pyplot as plt

绘制单折线

import numpy as np 
import matplotlib.pyplot as plt

# 生成数据
x = np.arange(0, 6, 0.1) # 以 0.1 为单位,生成 0 到 6 的数据 
y = np.sin(x)

# 绘制图像
plt.plot(x, y)
plt.show()

绘制双折线

import numpy as np
import matplotlib.pyplot as plt 
# 生成数据
x = np.arange(0, 6, 0.1) # 以 0.1 为单位,生成 0 到 6 的数据 
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1,label="sinx")
plt.plot(x,y2,linestyle="--",label="cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend() # 显示图例
plt.show()

显示图像

import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread('test.png') # 读入图像 
plt.imshow(img)
plt.show()

数据可视化

TensorBoard

  • Scalars: 展示训练过程中的准确率、损失值、权重/偏置的变化情况

  • Images: 展示训练过程中记录的图像

  • Audio: 展示训练过程中记录的音频

  • Graphs: 展示模型的数据流图,以及训练在各个设备上消耗的内存和时间

  • Distributions: 展示训练过程中记录的数据的分部图

  • Histograms: 展示训练过程中记录的数据的柱状图

  • Embeddings: 展示词向量后的投影分部

安装TensorBoard

pip install tensorboard

启动Tensorboard

tensorboard --logdir=./log --host=localhost --port=6006

TensorBoard使用逻辑

from torch.utils.tensorboard import SummaryWriter
# SummaryWriter将特定的数据存储在文件夹中
add_scalar()添加数据,单曲线图
import numpy as np
# 实例化writer
writer = SummaryWriter("./log/demo")

# 数值型
for n_iter in range(100):
  writer.add_scalar(tag="Loss/train",scalar_value=np.random.random(),global_step=n_iter)
  writer.add_scalar("Loss/test",np.random.random(),n_iter)

writer.close()

add_graph()添加模型网络结构
import torchvision
import torch

writer = SummaryWriter("./log/graph")

img = torch.rand([1,3,64,64],dtype=torch.float32)
model = torchvision.models.AlexNet(num_classes=10)

writer.add_graph(model=model,input_to_model=img)

writer.close()
add_scalars()添加数据,多曲线图
import numpy as np
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter("./log/scalars")
r = 5
for x in range(1, 101) :
    writer.add_scalars('run_14h', {'xsinx' : x * np.sin(x / r),
                                  'xcosx' : x * np.cos(x / r),
                                  'xtanx' : x * np.tan(x / r)}, x)
writer.close()
add_histogram()添加数据,直方图
import numpy as np
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("./log/historgram")
for step in range(10) :
    x = np.random.randn(1000)
    writer.add_histogram('distribution of gaussion', x, step)
writer.close()
add_image()添加图片
import torch
from torch.utils.tensorboard import SummaryWriter
import cv2 as cv

writer = SummaryWriter("./log/image")

img = cv.imread('./data/img/watch.jpg', cv.IMREAD_COLOR)#输入图像要是3通道的,所以读取彩色图像
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img = torch.tensor(img.transpose(2, 0, 1))#cv读取为numpy图像为(H * W * C),所以要进行轴转换
writer.add_image('watch', img, 0)

writer.close()
add_figure()记录matplotlib绘制的Figure对象
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import matplotlib.pyplot as plt

writer = SummaryWriter("./log/figure")

x = np.linspace(0, 10, 1000)
y = np.sin(x)

figure = plt.figure()
plt.plot(x, y, 'r-')
writer.add_figure('my_figure', figure, 0)
writer.close()

seaborn

import seaborn as sns
import matplotlib.pyplot as plt
# 线型图
sns.lineplot(x=x_axios, y=y_axios)
plt.show()

seaborn一图多线

使用DataFrame数据类型

data_preproc = pd.DataFrame({"loss":loss_axis,"acc":acc_axis})
sns.lineplot(data = data_preproc)
plt.show()

参考

  1. pytorch tensorboard使用教程