Python
求补集
a = [3, 4, 5, 6]
b = [1, 4, 6, 8]
#求b相对于a的补集,元素属于a但不属于b
results_1= [ i for i in a if i not in b ]
print('results_1:',results_1)
results_2= list(set(a).difference(set(b)))
print('results_2:',results_2)
results_3= set(a)-set(b)
print('results_3:',results_3)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDO6pkYl-1662912678806)(picture/20210113222212229.png)]
再例:print(set(train_df.columns)-set(test_df.columns))
类的继承
使用super().__init__()
:的原因是,一般情况下,子类继承负父类是不用初始化的,但是,如果子类也想初始化,这时如果子类还想继承父类的初始化的类属性,就必须使用这个代码
动态打印进度
for i in range(100):
# 计算下载百分比
per = (i + 1) * 100 / 100
# 打印进度条(\r是将光标移动到行的开始,会覆盖上一次打印的内容,形成动态打印)
print("\rdownload %s%.f%s" % ('#' * int(per), per, '%'), flush=True, end='')
训练模型中常用到的:
print("\rEPOCH%d:%s%.f%s"%(n,'#'*int(per),per,'%'),flush=True,end='')
长版print("\rEPOCH%d:|%s>|%.f%s"%(n,'='*int(per/2),per,'%'),flush=True,end='')
字符串格式化输出
a=10,b="aifj"
"%d是这样%s"%(a,b)
字典用法
- 获取字典值
ist1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
Author = dic1.get('Author')
#Author = Python当打之年
phone = dic1.get('phone')
#phone = None
phone = dic1.get('phone','12345678')
#phone = 12345678
调其他文件夹下的py文件
关于函数的参数****args和kwargs
copy.deepcopy()
生成一个新的地址来储存对象,以免造成干扰
计算运行时间
import time
time_start = time.time() # 记录开始时间
# function() 执行的程序
time_end = time.time() # 记录结束时间
time_sum = time_end - time_start # 计算的时间差为程序的执行时间,单位为秒/s
print(time_sum)
Excel
负数置零
ctrl+f,查找替换,查找内容’-*‘,替换为’0’
行列求和
或者直接用快速分析,行列求和即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eq6Hx1W6-1662912678807)(picture/image-20220823104655827.png)]
删除头字或单位
使用 =REPLACE(目标,起始位置,删除长度,“”)
""表示的是空格,替换成空格即为删除
删除数字前的0
=–单元格
画雷达图
适合多样本多指标的问题,不过好像一般样本为横轴,指标为纵轴
Github
『教程』一看就懂!Github基础教程_哔哩哔哩_bilibili
Matplotlib
导包
import matplotlib.pyplot as plt
查看数据分布
df.hist(figsize=(16,14))
plt.savefig("Plots.jpg",dpi=300, pad_inches = 0)
plt.show()
基本画图操作
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 显示负号
plt.plot(range(),m,label='',color='')
plt.xlabel("")
plt.ylabel("")
plt.title("")
plt.xticks(list1)#xticks设置 x 轴刻度的数目与取值
plt.yticks(list2)#yticks设置 y 轴刻度的数目与取值
plt.legend()
plt.savefig('.png',dpi=600)
plt.show()
Pandas
显示问题
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
#显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']#在图中显示中文
plt.rcParams['axes.unicode_minus']=False#在图中显示负号
读取指定列
pd.read_csv(r'./时间序列预测数据集合集/mtl_data_1.xlsx',usecols=[0,1,2],header=None)
这里注意:相对路径要加’.',而且是反斜杠
切片
df.iloc[1:2,:10]#直接切片
导入导出
pandas.read_excel()
DataFrame.to_excel()
excel内含多张表sheet
df = pd.read_excel(r'',sheet_name='')
补充指定表头
df = pd.read_csv('data.csv', sep='\t',header=None, names=['var_code','var_name','var_desc'])
查找缺失值位置
这个是获取列缺失值的索引列表,可以拿来做拉格朗日插值
na_indexlist = df['列名'][df['列名'].isnull().values==True].index.values.tolist()
填补缺失值
df.fillna(method='ffill')#前补
df.fillna(method='bfill')#后补
df.fillna(df.mean())#平均值填补各列
df.fillna(df.median())#中位数填补
df = df.interpolate()#插值法,默认为线性插值,填补缺失值前一个和后一个的平均值
#拉格朗日插值
#这方法好像不太行,放弃了
one-hot编码
data = pd.get_dummies(data)
指定某行某列
df.iloc[3,2]
粘连新的列
data_new = pd.concat([heart_new,cp_dummies],axis=1)
强制转换列数据类型
df['金额'].astype('数据类型')
注意:numpy那边的操作为
ndarray.astype(np.数据类型)
没有引号
删除指定列
df.drop('column_name',axis=1, inplace=True)
可一次删除多列
合并列
pd.concat([df,protocol_type_dummies,service_dummies,flag_dummies],axis=1)
透视表
Seaborn
热力图(稳定的)
plt.figure(figsize=(3,10)) ax= sns.heatmap(df.corr(),cmap=plt.cm.RdYlBu_r , vmax=1, vmin=-1,annot=True ,fmt='.2f')
这是矩阵形状的
如果想要查看单个特征与其他的关系,并且对相关系数进行排列,只需将data改为
df.corr()[['satisfaction']].sort_values('satisfaction',ascending=False)
热力图(还没学会的)
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annot_kws=None,linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto',mask=None, ax=None, **kwargs)
-
data:矩形数据集
可以强制转换为ndarray格式数据的2维数据集。如果提供了Pandas DataFrame数据,索引/列信息将用于标记列和行。那么如果提供了关系矩阵就可以显示变量之间的相关性。
-
vmin, vmax:浮点型数据,可选参数
用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的
-
cmap:matplotlib 颜色条名称或者对象,或者是颜色列表,可选参数
从数据值到颜色空间的映射。 如果没有提供,默认值将取决于是否设置了“center”
-
center:浮点数,可选参数
绘制有色数据时将色彩映射居中的值。 如果没有指定,则使用此参数将更改默认的cmap
-
annot:布尔值或者矩形数据,可选参数
如果为True,则在每个热力图单元格中写入数据值。 如果数组的形状与data相同,则使用它来代替原始数据注释热力图
-
mask:布尔数组或者DataFrame数据,可选参数
如果为空值,数据将不会显示在mask为True的单元格中。 具有缺失值的单元格将自动被屏蔽
-
cbar:布尔值,可选参数
描述是否绘制颜色条
-
square:布尔值,可选参数
如果为True,则将坐标轴方向设置为“equal”,以使每个单元格为方形
-
xticklabels, yticklabels:“auto”,布尔值,类列表值,或者整形数值,可选参数
如果为True,则绘制数据框的列名称。如果为False,则不绘制列名称。如果是列表,则将这些替代标签绘制为xticklabels。如果是整数,则使用列名称,但仅绘制每个n标签。如果是“auto”,将尝试密集绘制不重叠的标签。
-
fmt:字符串,可选参数
添加注释时要使用的字符串格式代码
-
annot_kws:字典或者键值对,可选参数
当annot为True时,ax.text的关键字参数
-
ax:matplotlib Axes,可选参数
绘制图的坐标轴,否则使用当前活动的坐标轴
画布大小
*plt.figure(figsize=(12, 6))*
字体大小
plt.title("Feature importances", fontsize=30)
plt.xticks(fontsize=30)
plt.yticks(fontsize=30)
#设置坐标标签字体大小
ax.set_xlabel(..., fontsize=30)
ax.set_ylabel(..., fontsize=30)
#设置图例字体大小
plt.show()
标题
plt.title()
-
fontsize设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
-
fontweight设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
-
fontstyle设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
-
verticalalignment设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ , ‘baseline’
-
horizontalalignment设置垂直对齐方式,可选参数:left,right,center
-
rotation(旋转角度)可选参数为:vertical,horizontal 也可以为数字
-
alpha透明度,参数值0至1之间
-
backgroundcolor标题背景颜色
保存图片
*plt.savefig('jg.png',dpi=600)*
annot_kws=None,linewidths=0, linecolor=‘white’, cbar=True, cbar_kws=None, cbar_ax=None, square=False,
xticklabels=‘auto’, yticklabels=‘auto’,mask=None, ax=None, **kwargs)`
- data:矩形数据集
- 可以强制转换为ndarray格式数据的2维数据集。如果提供了Pandas DataFrame数据,索引/列信息将用于标记列和行。那么如果提供了关系矩阵就可以显示变量之间的相关性。
- vmin, vmax:浮点型数据,可选参数
- 用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的
- cmap:matplotlib 颜色条名称或者对象,或者是颜色列表,可选参数
- 从数据值到颜色空间的映射。 如果没有提供,默认值将取决于是否设置了“center”
- center:浮点数,可选参数
- 绘制有色数据时将色彩映射居中的值。 如果没有指定,则使用此参数将更改默认的cmap
- annot:布尔值或者矩形数据,可选参数
- 如果为True,则在每个热力图单元格中写入数据值。 如果数组的形状与data相同,则使用它来代替原始数据注释热力图
- mask:布尔数组或者DataFrame数据,可选参数
- 如果为空值,数据将不会显示在mask为True的单元格中。 具有缺失值的单元格将自动被屏蔽
- cbar:布尔值,可选参数
- 描述是否绘制颜色条
- square:布尔值,可选参数
- 如果为True,则将坐标轴方向设置为“equal”,以使每个单元格为方形
- xticklabels, yticklabels:“auto”,布尔值,类列表值,或者整形数值,可选参数
- 如果为True,则绘制数据框的列名称。如果为False,则不绘制列名称。如果是列表,则将这些替代标签绘制为xticklabels。如果是整数,则使用列名称,但仅绘制每个n标签。如果是“auto”,将尝试密集绘制不重叠的标签。
- fmt:字符串,可选参数
- 添加注释时要使用的字符串格式代码
- annot_kws:字典或者键值对,可选参数
- 当annot为True时,ax.text的关键字参数
- ax:matplotlib Axes,可选参数
- 绘制图的坐标轴,否则使用当前活动的坐标轴
Numpy
计算特征值
eigenvalue, featurevector = np.linalg.eig(mat)
找最大值
import numpy as np
a = np.array([[1,2,3,3],[4,5,6,2],[0,8,4,9]])
print(a.max()) #获取整个矩阵的最大值 结果:9
print(a.min()) #获取整个矩阵的最小值 结果: 0
# 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
# 例如
print(a.max(axis=0)) #[4 8 6 9]
print(a.max(axis=1))#[3 6 9]
#返回的是位置(索引)
print(a.argmax(axis=0)) #[1 2 1 2]
创建空ndarray
x = np.array([[]]*3)
shape=(0,3)
替换值
import numpy as np arr = np.array([1,2,3,4,3,2,3,6,2,5]) num = 2 # 想要替换的数字 NUM = 10 # 替换后的数字 arr[(arr == num)] = NUM print(arr
求和
![image-20220723112838304](picture/image-20220723112838304.png)
记忆:axis=什么就是什么动
查看非零元素个数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOwQjhd6-1662912678808)(C:\Users\Rostone\AppData\Roaming\Typora\typora-user-images\image-20220723113415329.png)]
np.count_nonzero(c,axis=1)
取绝对值
np.maximum(a, -a)
stack(),hstack(),vstack()
Numpy中stack(),hstack(),vstack()函数详解_neu_张康的博客-CSDN博客_hstack
- h按行列方式堆叠,并转置
- v按列方式堆叠,并转置
ndarray转list
ndarray.tolist()
SKlearn
LabelEncoder
MinMaxscaler
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = MinMaxScaler()#实例化转换器
train_data = min_max_scaler.fit_transform(train_data)#转换器拟合数据并对数据进行转换
test_data = min_max_scaler.transform(test_data)#转换器对测试集进行转换
test_data = min_max_scaler.inverse_transform(test_data)#还原数据
如果只有.fit()就是只会训练转换器,不会返回结果
Pytorch
tensor和ndarray的相互转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tF0cGa2f-1662912678808)(C:\Users\Rostone\AppData\Roaming\Typora\typora-user-images\image-20220720110206868.png)]
构造符合要求的tensor输入
x = torch.from_numpy(x_np[np.newaxis, :, np.newaxis])
Dataset和Dataloader
PyTorch DataLoader工作原理可视化 - 知乎
from torch.utils.data import Dataset, DataLoader
class My_dataset(Dataset):
def __init__(self):
super.__init__()
#以下皆为tensor格式
self.x =
self.y =
def __getitem__(self,index):
return self.x[index],self.y[index]
def __len__(self):
return len(self.x)
mydataset = My_dataset(类需要的参数)
dataloader = DataLoader(mydataset,batch_size= , shuffle = False, num_workers=0)
for i_batch, (x,y) in enumerate(dataloader):
#这里是训练的过程
查看各层网络参数
net = Net()
print(net.fc1.weight)
print(net.fc1.bias)
print(net.fc2.weight)
print(net.fc2.bias)
print(net.fc3.weight)
print(net.fc3.bias
保存与加载模型
torch.save(net.state_dict(),r'./含初始化lstm.pkl')
#!!!如果模型没有完全训练好,需要把模型的优化器也一起保存
#torch.save(optimizer.state_dict(),r'./优化器.pkl')
net = Net(input_size,hidden_size,num_layers,batch_size)
net.load_state_dict(torch.load(r'./含初始化lstm.pkl'))
#optimizer = torch.optim.Adam(net.parameters(),lr)
#optimizer.load_state_dict(torch.load(r'./优化器.pkl'))
net.eval() #听说这个是为了防止出错
net.forward(test_x)
创建空白torch好像不太行
#创建一个维度为(6,3,0)的张量
a = torch.tensor([[[]]*3]*6)
torch拼接
import torch
A=torch.ones(2,3) #2x3的张量(矩阵)
B=2*torch.ones(4,3)#4x3的张量(矩阵)
C=torch.cat((A,B),0)#按维数0(行)拼接,要求两个矩阵另一个维度(列)相等
print(C)#
# tensor([[1., 1., 1.],
# [1., 1., 1.],
# [2., 2., 2.],
# [2., 2., 2.],
# [2., 2., 2.],
# [2., 2., 2.]])
print(C.size())#torch.Size([6, 3])
A=torch.ones(4,1) #2x3的张量(矩阵)
B=2*torch.ones(4,3)#4x3的张量(矩阵)
d=torch.cat((A,B),1)#按维数1(列)拼接,要求连个矩阵另一个维度相等,即这里要求两个矩阵行相等
print('d',d)
#tensor([[1., 2., 2., 2.],
# [1., 2., 2., 2.],
# [1., 2., 2., 2.],
# [1., 2., 2., 2.]])
print(d.size())#([4, 4])
.squeeze()和.unsqueeze()
参数可选1或0,就是使得某一种张量和一维平直张量转换,参考
register_buffer( )
使得某些不进行训练的成员参数也能被保存下来,同时使得该参数也能被复制到GPU上,参考
nn.Module
LSTM
代码
class Net(nn.Module):
def __init__(self,input_size,hidden_size,num_layers,batch_size):
super().__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.batch_size = batch_size
self.lstm = nn.LSTM(input_size,hidden_size,num_layers,batch_first=True)
self.linear = nn.Linear(hidden_size,1)
def forward(self,x):
# h_0 = torch.randn(self.num_layers, self.batch_size, self.hidden_size)
# c_0 = torch.randn(self.num_layers, self.batch_size, self.hidden_size)
x1, hidden_state= self.lstm(x,None)
y = self.linear(x1)
return x1,y
举例说明
-
batch_size=1, input_size=1, hidden_size=40, num_layers=1
-
参数net.state_dict()
-
‘lstm.weight_ih_l0’:(160,1),表示输入对应的四组参数(4*40,1)
-
‘lstm.weight_hh_l0’:(160,40),表示上一个hidden_state对应的四组参数(4*40,40)
-
‘lstm.bias_ih_l0’:(160),偏置
-
‘lstm.bias_hh_l0’:(160),偏置
-