概述
目录
- 背景
- 1. 读取csv文件
- 2.判断文件是否存在
- 3.打印当前时间
- 4. 生成随机指定维度指定范围的tensor
- 5. pytorch计算欧氏距离,曼哈顿距离
- 6. pytorch 18种损失函数
- 7. 对一个tensor 做行标准化
- 8. 随机数据集分隔,可复现
- 9. 更新optuna产生的study
- 9. 使用正则表达式re替换字符串
背景
总结经常用到的python函数
1. 读取csv文件
data = pd.read_csv(fname, encoding="gbk",keep_default_na=False)# 读取空字符串而不是nan了
# data.iloc[1]
得第2行的数据
# data.iloc[1][1]
第2行第2个数据
# data.iloc[:, 1]
# 第2列,即列名称为'B'的列,1 4 9 13
# data.iloc[:, 0:3]
# 前3列
# data.iloc[:, [0, 3]]
# 第1第4列
# data.to_excel('test.xlsx')
slice_data = data.iloc[:,[0,16,9,10,14,15]]
# slice_data = data.iloc[:,[0,16]]
for i in range(len(slice_data)):
segment_id = slice_data.iloc[i][0]
# 读取xlsx文件
data = pd.read_excel(fname)
# 取出第一行第二个元素eg: '我要办理给家人的流量共享'
data.iloc[0][1]
# 以array形式返回第一行的数据eg: array([0, '我要办理给家人的流量共享'], dtype=object)
data.iloc[0].values
读取其他格式文件参考
2.判断文件是否存在
判断进入python环境的当前目录,或者ide打开的文件目录下是否存在test.txt
文件。
在程序循环的过程中,适用于文件存在则省去生成过程,反之则生成文件。
import os
os.path.isfile('test.txt') #如果不存在就返回False
3.打印当前时间
在输出log文件的时候可用作拼接字符串操作,形成文件名
import time
time.strftime('%Y_%m_%d_%H_%M_%S',time.localtime(time.time()))
output
'2021_05_07_20_00_28'
4. 生成随机指定维度指定范围的tensor
import torch
a = torch.normal(mean = 1,std = torch.arange(1.0,6.0).float())
print(a)
std = torch.arange(1,6)
print(std)
#输出
tensor([1.0243, 2.7108, 4.2406, 0.8341, 4.0412])
tensor([1, 2, 3, 4, 5])
5. pytorch计算欧氏距离,曼哈顿距离
import torch.nn.functional as F
distance = F.pairwise_distance(rep_a, rep_b, p=2) # p=1 曼哈顿距离
torch.cosine_similarity( positive_embedding, cur_embedding, dim=-1) # 计算余弦相似度
其中rep_a和rep_b为[batch_size,hidden_dim]
>>> import torch
>>> import torch.nn.functional as F
>>> import numpy as np
>>> t1=torch.ones(2,3)
>>> t1
tensor([[1., 1., 1.],
[1., 1., 1.]])
>>> t2=torch.tensor(np.arange(6).reshape(2,3)+0.0)
>>> t2
tensor([[0., 1., 2.],
[3., 4., 5.]], dtype=torch.float64)
>>> F.pairwise_distance(t1,t2)
tensor([1.4142, 5.3852], dtype=torch.float64)
>>> F.pairwise_distance(t1,t2,p=1)
tensor([2.0000, 9.0000], dtype=torch.float64)
各种距离和相似度计算方式
6. pytorch 18种损失函数
参考和应用
7. 对一个tensor 做行标准化
>>> import torch
>>> import numpy as np
>>> t1=torch.tensor(np.arange(6).reshape(2,3))+0.
>>> t1
tensor([[0., 1., 2.],
[3., 4., 5.]])
>>> row_sum = torch.sum(t1,dim=1)
tensor([ 3., 12.])
>>> r_inv = np.power(row_sum, -1).flatten()
>>> r_inv
tensor([0.3333, 0.0833])
>>> r_inv[torch.isinf(r_inv)] = 0.
>>> r_inv
tensor([0.3333, 0.0833])
>>>r_mat_inv = torch.diag(r_inv) # 区别于np.diags(r_inv)
>>> r_mat_inv
tensor([[0.3333, 0.0000],
[0.0000, 0.0833]])
# r_mat_inv.mul(t1) 是点乘,matmul是矩阵相乘
>>> r_mat_inv.matmul(t1)
tensor([[0.0000, 0.3333, 0.6667],
[0.2500, 0.3333, 0.4167]])
8. 随机数据集分隔,可复现
为了分隔数据集为训练集测试集,且保证可复现通过随机数种子设置,
# 要分割的数据集以dict方式存储
def preprocess_split_data(normed_ways_segment_volume_dict):
'''
normed_ways_segment_volume_dict=dict
k=int v=[1,2,3...]
return ways_segment_list = 单层 list
ways_slice_volume_list
= 双层的list
'''
ways_segment_list = []
ways_slice_volume_list
= []
# 如果不做排序的话,可能导致返回的list 每次次序不不一样
# 即使设置了seed,导致实验结果也不可复线
normed_ways_segment_volume_dict = sorted(normed_ways_segment_volume_dict.items(), key=lambda item:item[0], reverse = False)
for ways_volume_truple in normed_ways_segment_volume_dict:
ways_segment_list.append(ways_volume_truple[0])
ways_slice_volume_list.append(ways_volume_truple[1])
return ways_slice_volume_list
, ways_segment_list
if __name__ == '__main_':
from sklearn.model_selection import train_test_split
data_feature, data_target = preprocess_split_data(unnormed_ways_segment_volume_dict) # TODO: 划分数据集总是随机,不可复现,normed_ways_segment_volume_dict->unnormed_ways_segment_volume_dict
train_volume_arr, test_volume_arr, train_leida_id_arr, test_leida_id_arr =
train_test_split(data_feature, data_target, test_size=args.percent, random_state=args.seed)
9. 更新optuna产生的study
产时间不运行的话,如果使用好久之前的.db
文件会报如下错误:
Exception has occurred: RuntimeError
The runtime optuna version 2.7.0 is no longer compatible with the table schema (set up by optuna 2.0.0). Please execute `$ optuna storage upgrade --storage $STORAGE_URL` for upgrading the storage.
File "G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhougcn_hangzhou_optuna.py", line 395, in <module>
study = optuna.create_study(study_name='hangzhou_study', storage='sqlite:///hangzhou/log/hangzhou_study.db', load_if_exists=True)
解决方案,首先在命令行进入存放.db
文件的指定路径,按照提示再次编译.db
文件,即可解决
(py3.6) G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhouhangzhoulog>optuna storage upgrade --storage sqlite:///hangzhou_study.db
[I 2021-05-27 23:12:54,272] Upgrading the storage schema to the latest version.
[I 2021-05-27 23:12:54,819] Completed to upgrade the storage.
(py3.6) G:我的坚果云paperhangzhou_traffic_flow_forcastGCN_hangzhouhangzhoulog>
9. 使用正则表达式re替换字符串
re函数的使用
t=('adksaljdlk' '123453')
>>> re.sub("123+", '*', t.lower()) # re+ 表示一个或多个表达式
'adksaljdlk*453'
最后
以上就是优美枫叶为你收集整理的python读取csv数据背景的全部内容,希望文章能够帮你解决python读取csv数据背景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复