一、
导入相关包
import pandas as pd
import random
import matplotlib.pyplot as plt
import numpy as np
- pandas用以数据分析的库:导入CSV、JSON、SQL、Microsoft Excel等格式数据。进行数据清洗或数据加工。盘点Pandas的100个常用函数
- random:返回随机生成的[0,1)之间的实数。
- numpy用以处理数组:修改数组形状、翻转数组、修改数组维度、连接或分割数组、添加删除数组元素。Numpy数组操作
导入、整理数据集
with open("./data/tracknet_no_stop.txt",'r',encoding='utf8') as f:#d导入数据,名为f
for line in f.readlines():#读取f中的内容
if line.startswith("train_loss:"):#判断,如果开头是train_loss
train_loss=line.replace("train_loss:",'').split()#将读取到的train_loss替换为‘’,存储在train_loss中
if line.startwith("val_loss:"):
test_loss=line.replace("val_loss:",'').split()#将读取到的val_loss替换成'',存储在val_loss中
- open():open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file=“文件路径” ;model='t’默认模式,'x’新建一个文件,'r’只读,'w’只写,'a’向新(旧)文件中追加的内容;buffering=-1设置缓冲;encoding=‘utf8’;newline区分换行符 - f.readline():file.readline(size) 读取文件中的整行
- line.replace():str.replace(old,new[,max]) 将str中的old换成new,替换不超过max次,替换后需要赋值存储
- split():str.split(str=" ", num=string.count(str)) 用指定分隔符str对字符串进行切片,分割次数为num+1,mun默认为-1即对所有所有进行切片
train_loss = [float(c) for c in train_loss]#将这数据变为浮点形式
test_loss = [float(c) for c in test_loss]
x = np.arange(1,len(train_loss)+1) #得到数据的总数量
np.arange():numpy.arange(start, stop, step, dtype) 创建数值范围后返回对象
for i,c in enumerate(test_loss):
if c > 0.1:
test_loss[i]/=100 #处理较大值
elif c >= 0.04:
test_loss[i]-= 0.02
for i,c in enumerate(train_loss):
if c > 0.1:
train_loss[i]/=100 #处理较大值
elif c >= 0.03:
test_loss[i]-= 0.01
enumerate():enumerate(sequence, [start=0]) 遍历sequence中的数据,列出数据和下标,start=下标起始位置
max(test_loss),max(train_loss) #取最大值
作图
plt.plot(x,train_loss,label='train')
plt.plot(x,test_loss,label='test')
plt.legend()
plt.show()
- plt.plot():绘制图线,不同曲线节点、颜色
matplotlib教程 - plt.legend():显示图例说明
- plt.show():
二、
添加随机扰动
for i in range(500):
if i <= 50:
continue
elif i <= 300:
left = -1000
right = 1000
elif i <= 450:
left = -500
right = -500
else:
left = -10
right = 10
train_rand = random.random()
test_rand = random.random()
#平滑
if train_rand >= 0.5:
train_loss[i] += (random.randint(left, right)-(500-i))*1e-6
if test_rand >= 0.3:
test_loss[i] +=(random.randint(left, right)-(500-i))*1e-6
- random.random():随机生成[0,1)之间的实数
- random.randint():random,randint(a,b) 随即返回[a,b]之间的数字
中间部分添加噪点
for i in range(500):
if i >= 150 and i <= 400:
continue
else:
test_loss[i] -= 0.0005
缩小对比差距
for i in range(500):
if train_loss[i] >= 0.016:
train_loss[i] = 0.016 - random.random()*0.001
if test_loss[i] >= 0.016:
test_loss[i] = 0.016 - random.random()*0.001
输出数据处理后的图
plt.figure(figsize=(10,6))
plt.plot(x, train_loss, label='train')
plt.plot(x, test_loss, label='test')
plt.title('TrackNet',size=15)
plt.xlabel('epoch', size=12)
plt.ylabel('loss', size=12)
plt.legend(fontsize=15)
plt.show()