数据分析速查表
数据分析碎片式笔记,记录一下代码
数据框架
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
的前n
行,默认返回所有
df.head() / df.tail(),查看df.info(),数据表的基本信息(维度,列名称,数据格式,所占空间等)
df.dtypes,获取数据类型
df.index,获取表格索引
df.columns,获取表格列名
array
形式返回指定数据的取值
df.values,以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()
参考
- 数据框架
- NumPy
- 创建一维数组
- 创建一个3x3的二维数组
- 创建一个3x3的随机二维数组
- 矩阵转为一维数组
- 数组访问
- 索引访问
- 条件访问
- 对数组进行数学运算
- 计算数组的统计量
- 平均值
- 加权平均值
- 最值
- 中位数
- 标准差
- 线性代数操作
- 求解线性方程组
- Pandas
- Pandas创建DataFrame
- DataFrame
- 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
- 绘制单折线
- 绘制双折线
- 显示图像
- 数据可视化
- TensorBoard
- 安装TensorBoard
- 启动Tensorboard
- TensorBoard使用逻辑
- add_scalar()添加数据,单曲线图
- add_graph()添加模型网络结构
- add_scalars()添加数据,多曲线图
- add_histogram()添加数据,直方图
- add_image()添加图片
- add_figure()记录matplotlib绘制的Figure对象
- seaborn
- seaborn一图多线
- 参考