数据建模记事本(持续更新中。。。)

1、挑选数值型变量与类别型变量

numeric_features = [c for c in features_data if features_data[c].dtype.kind in ('i', 'f')] # 提取数值类型为整数或浮点数的变量

2、通常在模型fit时x和y都用array形式

X = features.values.astype(np.float32) # 转换数据类型
y = target.values.astype(np.int32)

3、unix时间戳

data test;
format bj_time datetime20.;
unix_time=1553511291;
bj_time =dhms('01jan1970'd,8,0, unix_time);
run;

第2个参数8表示北京时间东八区,秒为单位取前10,毫秒取前13。

4、首先查看数据的列是否有缺失值用data.isna().any(axis=0),列缺失率df.isna().mean(axis=0);行是否有缺失值用data.isna().any(axis=1),行缺失率df.isna().mean(axis=1)

5、reset_index()将索引重置为列, set_index(‘col1’)将列置为索引,导出数据的时候常用

6、train = A.merge(B, how=‘inner’, left_index=True, right_on=‘user_sid’)
train.set_index(‘user_sid’, inplace=True)
test = A.drop(index = train.index, axis=0)

以上是按照B中id作为训练数据,不在B中的作为测试数据
7、data[‘col1’].plot(kind=‘box’) 查看箱线图
8、统计np.bincount(data[‘col1’]) 或者 data1[‘col1’].value_counts()
9、计算相关系数 np.corrcoef(X.values, rowvar = 0) 要比 X.corr()速度快很多,
直接数据框df.corr()可以对含缺失值的数据计算相关性

10、DataFrame.apply的用法
当给两列‘var1’、‘var2’运用函数apply时: df.apply(lambda x: func(x[‘var1’], x[‘var2’]), axis=1)
当apply时需要带一个超参数时: kwds = {“sp_list”:sp_list} ; tab1[‘var1’].apply(func, **kwds)

11、当字符串形式的时间不规范时,通常采用下面先转时间,再转字符串的操作

data1['create_time1'] = pd.to_datetime(data1['create_time'])
data1['create_time2'] = data1['create_time1'].apply(lambda x:x.strftime('%y-%m-%d'))
data2 = data1[(data1['create_time2']<'19-10-01') & (data1['create_time2']>='19-07-01')]

其他方式:data1[‘create_time1’].dt.date,.dt是Series上类似.str的重要方法,后面可以接很多函数

12、
as_indexbool, default True
For aggregated output, return object with group labels as the index. Only relevant for DataFrame input. as_index=False is effectively “SQL-style” grouped output.

""" agg数据聚合 """
key1 = df.groupby(["month"], as_index=False)["target"].agg({"cnt" : "count","sum":"sum","badrate":"mean"})

13、
数值型转为字符型

df['数量'] = df_data['数量'].apply(str)

14、
将字符型强制转换为数字类型,不成功的转换为NAN
pandas.to_numeric(arg, errors=‘coerce’, downcast=None)

多列转换
data[col] = data[col].apply(pd.to_numeric, errors=‘coerce’)

15、.difference
data_train[data_train.columns.difference([‘target’])剔除掉target列,等同于drop

16、anaconda新建环境

conda create -n pytest python=3.6 anaconda

即新建了名为pytest的环境

17、jupyter notebook 不显示刚刚新建的虚拟环境

conda activate my-conda-env    # this is the environment for your project and code
conda install ipykernel
conda deactivate

conda activate base      # could be also some other environment
conda install nb_conda_kernels
jupyter notebook

18、jupyter notebook 的主题
https://zhuanlan.zhihu.com/p/46242116
https://github.com/dunovank/jupyter-themes

jt -t grade3 -f roboto -fs 12 -nfs 12 -tfs 12 -dfs 11 -ofs 11 -T -N -kl -cellw 95%

19、jupyter notebook 进阶
https://www.zybuluo.com/hanxiaoyang/note/534296
https://blog.csdn.net/llrraa2010/article/details/79366586

20、numba加速python

# 用numba加速的求和函数
@nb.jit()
def nb_sum(a):
    Sum = 0
    for i in range(len(a)):
        Sum += a[i]
    return Sum

# 没用numba加速的求和函数
def py_sum(a):
    Sum = 0
    for i in range(len(a)):
        Sum += a[i]
    return Sum    

使用%timeit(计时方法还有这些)验证如下:
在这里插入图片描述
21、reduce函数

from functools import reduce
sum1 = reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数

mdata_psi_df = reduce(lambda x,y : pd.merge(x,y,on = 'var_name', how = 'inner'), mdata_psi_list).reset_index(drop=True)

22、multiprocessing多进程
apply、map、starmap区别

results = [pool.apply(howmany_within_range, args=(row, 4, 8)) for row in data]
results = pool.map(howmany_within_range_rowonly,[row for row in data])
results = pool.starmap(howmany_within_range, [(row, 4, 8) for row in data])

23、多进程中出现阻塞等问题
在这里插入图片描述
24、模型训练设置随机数,用于初始化权重,便于模型复现

import random
import numpy as np
import tensorflow as tf
import torch

seed = 100
random.seed(seed)  # random
np.random.seed(seed)  # numpy
tf.random.set_seed(seed)  # tensorflow
torch.manual_seed(seed)  # torch+CPU
torch.cuda.manual_seed(seed)  # torch+GPU

25、LSTM权重介绍,参考官方文档
在这里插入图片描述
在这里插入图片描述

26、pytorch自定义dataset,dataloader

import torch
import torchtext
from torch.utils.data.dataset import random_split
from torch.utils.data import Dataset, DataLoader

class Dataset_own(Dataset):
    def __init__(self, df):
        self.len = len(df)
        self.x_train = torch.tensor(df['feature'].tolist(), dtype=torch.long)
        self.y_train = torch.tensor(df['target'].tolist(), dtype=torch.long)
        
        
    def __getitem__(self, index):
        return self.x_train[index], self.y_train[index]
    def __len__(self):
        return self.len   
        
dataset_all = Dataset_own(d2)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")


dataset_all = Dataset_own(d2)
num_train = int(len(dataset_all) * 0.8)
split_train_, split_valid_ = random_split(dataset_all, 
                                         [num_train, len(dataset_all) - num_train])
train_dataloader = DataLoader(split_train_, batch_size=512, shuffle=True)
valid_dataloader = DataLoader(split_valid_, batch_size=512, shuffle=False)

27、batch_size的选择
batchsize越小,一个batch中的随机性越大,越不易收敛。然而batchsize越小,速度越快,权值更新越频繁;且具有随机性,对于非凸损失函数来讲,更便于寻找全局最优。从这个角度看,收敛更快,更容易达到全局最优。(underfitting)

batchsize越大,越能够表征全体数据的特征,其确定的梯度下降方向越准确,(因此收敛越快),且迭代次数少,总体速度更快。然而大的batchsize相对来讲缺乏随机性,容易使梯度始终向单一方向下降,陷入局部最优;(overfitting)而且当batchsize增大到一定程度,再增大batchsize,一次batch产生的权值更新(即梯度下降方向)基本不变。因此理论上存在一个最合适的batchsize值,使得训练能够收敛最快或者收敛效果最好(全局最优点)。

28、validation的loss总是比train的小

  1. training的loss带有正则化项,validation没有这一项
  2. training的loss是在训练epoch期间计算的,而validation的loss在一个epoch之后
  3. 验证集数据更简单
  4. 过度正则化

29、torch可视化

tensorboard --logdir=r'E:\deep-torch\torch_factory\logs' --port 6006

需先安装pip install tensorboard,并将tensorboard.exe加入环境变量

from tensorboardX import SummaryWriter

writer =SummaryWriter(logdir=r'E:\deep-torch\torch_factory\logs', comment='Net')
writer.add_graph(model, (input, ))

30、
python禁用科学计数法

np.set_printoptions(suppress=True, threshold=np.nan)
pd.set_option('display.float_format',lambda x : '%.6f' % x)

31、将number_1中的空值用number_2中的非空值进行填充
df[“number_1”].fillna(df[“number_2”], inplace=True)

32、joblib和pickle加载模型区别:pickle会更稳定,joblib在用python3.7训练模型,python3.6加载时会出错

# method 1
joblib.dump(model, "save_model/ml_lr.pkl")

# method 2
pickle.dump(model, open("save_model/ml_lr.dat", "wb"))   # 

33、在python脚本test.py中第一行加入
#!/usr/bin/env python3 或者 #!/usr/bin/python3
指定python解释器,然后chmod 777 test.py设置文件可执行权限,然后就可以
用./test.py运行脚本文件

34、linux用于当前用户修改环境变量方法
在.bashrc

export JAVA_HOME=/usr/java/jdk1.8.0_181
export PYTHON_HOME=/usr/local/anaconda3
export PATH=$PYTHON_HOME/bin:$JAVA_HOME/bin:$PATH

然后source .bashrc

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值