|
23鱼币
左边的数据是时间,右边的数据是信号强度。作图出来是这样的情况:
我需要截取时间大于0,并且回升幅度在20到80%的信号(例如信号如果在16到18,那么我需要的信号就是(16+(18-16)*0.2,16+(18-16)*0.8)也就是(16.4,17.6)这段区间。截取完数据之后对选出来的原始数据按照公式=LN(LOG10((前两百次信号平均-自己设定的一个常数a)/(某次信号-常数a)))对信号进行下一步处理得到我需要的数据A,最后用数据A对时间作图,线性拟合然后得出曲线的斜率和相关系数。
本来我可以用EXCEL解决的,但是无奈数据太多了(要对10000个左右的EXCEL做这样的机械操作,吃不消),求大神指点一下。最近为了这个问题到处找,也是为了这个才开始学PYTHON,充值成为VIP的,我把自己全部的鱼币都拿出来了,希望能得到解答。
刚才在论坛里面找到了一个“python读取txt数据文件并作图”的帖子,代码如下:
import numpy as np
import matplotlib.pyplot as plt
path = "E:\\data.txt" # 文件路径
f = open(path) #打开文件
content = f.read().splitlines() # 读取并分割行,splitlines()默认按照'\n'分割
head = content[0] # 每列的head,如果没有head,此行可忽略
data_str = content[1:] # 此时数据以字符串的形式存入一个列表
data_num = [[]]*len(data_str) # 创建一个空列表,用以装入转后后的数据
# for循环用以将字符串形式的数据转换成数字,这一步结束就已经完成了转换了
# 转换后的数据存储在data_num中
for i in range(len(data_str)):
data_num[i] = [float(x) for x in data_str[i].split(',')]
# 下面是利用numpy和matplotlib.pyplot进行数组转换和画图
data_array = np.array(data_num) # 将数据转换成二维数组
# 下面将二维数组中的每一列存储到一个列向量中,以备画图
lamda = data_array[:, 0]
s_lamda = data_array[:, 1]
n_bulk = data_array[:, 2]
k_bulk = data_array[:, 3]
n_1L = data_array[:, 4]
k_1L = data_array[:, 5]
n_si = data_array[:, 6]
k_si = data_array[:, 7]
# 下面是创建图形,并作图;利用上面的lamda作为x坐标轴,其余数据作为y,进行画图。
plt.figure()
plt.plot(lamda, s_lamda)
plt.figure()
plt.plot(lamda, n_bulk, lamda, k_bulk, lamda, n_1L, lamda, k_1L)
plt.figure()
plt.plot(lamda, n_si, lamda, k_si)
plt.show()
不过我把代码用来尝试的时候却出现了问题(红字处)无法转换成浮点数。 |
-
-
最佳答案
查看完整内容
你的问题主要出在split('\t')和文件内容不一致的地方
因为你是截图,我不知道你这个txt的编码方式还有每行的换行符是什么
我给你个例子参考一下
比如我有这么个test.txt文件
我在输入时采用了tab间隔,但是每个间隔因为数据位数不一致导致长短不一,你单纯用split('\t')不能很好的分割出来
我可以这么做:
split()缺省参数时会将所有连续的white space视为分隔符,这样转换float就不会出错了
还可以看一下这几个变 ...
|