images/avatar.jpg
To be a doctor!|

Pandas常见代码

pandas是一个基于Python的开源数据分析库,本文介绍其常用的代码。

import pandas as pd
# 初始化
df = pd.DataFrame() # 空dataframe
# 最基础
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
}
df = pd.DataFrame(data)
# 只指定列名
df = pd.DataFrame(columns=['A', 'B'])

# 加载/保存数据
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx') # 可加参数指定列类型 dtype={'col1': str}
df.to_csv('data.csv', index = False) # index 是否保存行名,默认为True
df.to_excel('data.xlsx', index = False)
df.head(8) 	       # 查看前10行
df.tail()          # 查看后5行
df.sample(5)       # 随机抽样5行
df.shape           # 查看数据形状 (行数, 列数)
df.columns         # 查看所有列名
df.info()          # 查看数据类型、缺失值等信息
df.describe()      # 快速统计汇总
df['col']                  # 选择某一列
df[['col1', 'col2']]       # 选择多列

# iloc表示index选择,loc表示标签名称选择 
df.loc[0]                  # 按名称选取第0行
df.iloc[0]                 # 按index选取第0行
df.loc[0, 'col']           # 指定行列选择
df.iloc[0:5, 1:3]          # 选择第0到4行、第1到2列
df.iloc[1, 2]			  # 指定数据点
df.iloc[[0, 2], [1, 2]]    # 指定多个数据点
df[df['col'] > 10]                      # 条件筛选
df[(df['a'] > 5) & (df['b'] < 3)]       # 多条件筛选
df[df['col'].isin([1, 2, 3])]           # 筛选多个值
df[df['col'].str.contains('abc')]       # 字符串匹配
# 给行末尾添加一行数据
df = pd.DataFrame(columns=['name', 'age'])
df.iloc[len(df)] = ['Alice', 25]

# 列操作,复杂可使用apply函数
df['new_col'] = df['a'] + df['b']     # 新增列
df.drop('col', axis=1, inplace=True)  # 删除列

# 重命名行列 inplace=True 表示在本dataframe中操作
df.rename(columns={'old': 'new'}, inplace=True)  # 重命名列
df.reset_index(drop=True, inplace=True)          # 重置索引

# 处理缺失值
df.isnull().sum()             # 查看缺失值数量
df.dropna()                   # 删除含缺失值的行
df.fillna(0)                  # 用0填充缺失值
df['col'].fillna(df['col'].mean())  # 用均值填充

# 分组与聚合
df.groupby('col').mean().reset_index()                           # 按列分组求均值
# 多列分组多指标聚合
df.groupby(['col1', 'col2']).agg(
    new_col1 = ('col3', 'size'), 
    new_col2 = ('col3', 'nunique')).reset_index()

# 排序, 参数可以为list分别指定,默认升序
df.sort_values('col')               # 按某列升序排序
df.sort_values('col', ascending=False)  # 降序
# 拼接,可多个共同合并
pd.concat([df1, df2], axis=0)         # 纵向行拼接
pd.concat([df1, df2], axis=1)         # 横向列拼接

# 合并 left_on, right_on 表示匹配key名称,多个可以都是list how表示匹配方式 有inner,outer,left,right
pd.merge(df1, df2, left_on='col1', right_on = 'col2', how = 'left')
# df 转 np
arr1 = df.values
arr1 = df.to_numpy() # 推荐使用,更安全
# np 转 df
df = pd.DataFrame(arr, columns=['X', 'Y'])

# 一维 list
df = pd.DataFrame(data, columns=['col1'])
# 二维 list 每个元素代表一行
data = [[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']]
df = pd.DataFrame(data, columns=['id', 'name'])

# 列表字典, 每个元素是个字典
data = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
    {'id': 3, 'name': 'Charlie'}
]
df = pd.DataFrame(data)

# 字典key和value作为两列
df = pd.DataFrame(list(d.items()), columns=['key', 'value'])
d = dict(zip(df['key'], df['value']))

NumPy常见代码

numpy是Python中常用的科学计算和数据处理的最常用的库之一,本文梳理了常用的代码。

# 包引入
import numpy as np
# 设置随机种子
np.random.seed(42)
# 直接创建
ar = np.array([1, 2, 3])
ar = np.array([[1, 2, 3], [4, 5, 6]])

# 随机创建数组指定大小
ar = np.random.random(10) # 范围0-1, 指定大小:将10替换为(w,h)
ar = np.random.uniform(low, high, (2,3))  # 均匀分布
ar = np.random.randn((2, 3)) # 生成标准正态分布随机数
ar = np.random.randint(low, high, (2, 3))  # 整数,范围区间为[low,high)

# 创建全为0的数组
ar = np.zeros((2, 5))
# 创建全为1的数组
ar = np.ones((2, 5))
# 创建单位矩阵
ar = np.eye(10)

# 指定数组元素类型
ar = np.array(np.random.rand(224,224,3)*255, dtype=np.uint8)
# 数组维度
ar.ndim
# 数组维度形状
ar.shape
# 数组元素个数
ar.size
# 数据元素类型
ar.dtype
# 数组转置
ar2 = ar1.T
# 改变数组形状 ar1 = np.ones(10)
ar2 = ar1.reshape(5, 2)
# 数组拉平成1维
ar2 = ar1.flatten()
# 合并数组
ar3 = np.append(ar1, ar2, axis=0) # axis = 0 按行合并 axis = 1 按列合并
# 交换维度 将维度从[w,h,c] 换为 [c,w,h] 数字为维度重新排列
img_np = np.transpose(img_np, (2, 0, 1)) 
# 转变数据类型
ar2 = ar1.astype(np.float32)
# 对应元素相乘
ar3 = np.multiply(ar1, ar2)
# 点积运算
ar3 = np.dot(ar1,ar2)
ar3 = ar1 @ ar2\
# 其他数学运算
ar2 = exp(ar1)
ar2 = sqrt(ar1)
ar2 = log(ar1)
# 常见统计 ,可接axis参数,axis = 0 每一列 axis = 1 每一行
np.mean(ar1)
np.var(ar1)
np.std(ar1)
np.sum(ar1)
np.max(ar1)
# 数组展平(一维)后,最大值的索引位置,想得到具体位置 np.unravel_index(np.argmax(ar1), ar1.shape)
np.argmin(ar1)
# 每列最大值的索引
np.argmax(ar1, axis=0)
# 每行最大值的索引
np.argmax(ar1, axis=1) 

# 排序
# 每一行排序
np.sort(ar1, axis=1)
# 返回排序后索引
np.argsort(ar1)
# 去重, 返回1维数组
np.unique(ar1)
# 统计每个唯一值出现次数, 两个数组,第一个是元素,第二个是个数
np.unique(ar1, return_counts=True)
# 筛选元素大于x的元素, 变成1维数组
ar1[ar1 > x]
# 是否存在大于x的元素
np.any(ar1 > x)
# 是否全部大于0
np.all(ar1 > x)
# 偶数变1,奇数变0
np.where(a % 2 == 0, 1, 0)  
# dataframe 互相转换
df = pd.DataFrame(arr, columns=['A', 'B', 'C'])
arr = df.to_numpy()
# tensor 互相转换, 转换后 tensor 与 NumPy 共享内存,更改其中一个会影响另一个!
tensor = torch.from_numpy(arr)
# cpu中的tensor
arr = tensor.numpy()
# gpu中的tensor
arr = tensor.cpu().numpy()

Huggingface

Hugging Face 是一个旨在推动自然语言处理(NLP)技术和工具发展的开源社区和公司,提供了一系列优秀的预训练NLP模型,本文介绍如何从Hugging Face的镜像网站下载模型。

Batch Normalization 与 Layer Normalization

Normalization公式如下 y=xE[x]Var[x]+ϵγ+β y=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon}} \star \gamma + \beta

../images/Normalization-1.jpg

主要区别:

Normalization方向不同,BN是一种“列缩放”,LN是一种“行缩放”

Conda指令

从清华镜像站下载安装anaconda,地址为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

Tmux

Tmux是会话与端口解绑工具,可以关闭窗口后不中止会话,继续运行。

sudo apt-get install tmux

主要包括新建、查看、分离、关闭等常见操作。