Python快速处理旋转圆盘电极LSV数据进行拟合-判断数据是否线性

会有学化学的看到吗?

旋转圆盘电极常用于计算扩散系数以及反应动力学常数,通常得到结果后需要筛选数据,然后进行求倒数,log等一系列操作,这些计算虽然能够通过Origin作图软件得到,但是有的时候测出来的数据并不一定很好,导致做了半天发现数据不行,因此这个程序能够帮助快速处理得到的LSV数据,判断是否线性,针对求反应速率常数。

基于上四个方程,我们需要得到在不同过电位下对应的电流的负一次方转速rad/s的-0.5次方的线性关系,从而得到截距ik,而后根据方程三画图线性拟合即可得到i0,便可算的k0,本程序主要用于判断实验测得的数据中电流的-1次方和转速的-0.5次方是否成线性关系,如果成立,即可输出转换后的数据,用于Origin进一步作图,如果线性不好,那就再测,能够节省繁杂的处理重复数据的时间

程序组成

1、根据输入平衡电位,寻找不同过电位对应的电流

2、对得到的数据进行数学运算,得到需要值,并进行存储

3、对数据进行拟合出图,认为线性较好,即可输出对应数据

Step1:导入数据库,并建立所需存储数据列表

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


# 列表
rotating_speed_rpm=[]
rotating_speed_rad=[]
current_list=[]#电流列表
current_list_T=[]#置换后列表
all_current_list=[]#所有列表
rotating_speed_rad_half=[]#转速的-0.5次方

Step2: 输入参数

#输入
n= int(input("转速个数:"))
m= int(input("取点数:"))
overpotential = input("过电位间隔(V):")# 输入过电位间隔
op= float(overpotential)

df = pd.read_excel(input("输入表格名称"))
b = float(input("输入平衡电压(V):")) + op  # 输入平衡电压

例: 

 

Step3:输入转速,并对转速进行数学计算和存储

# PART2:输入转速rpm,输出为rad/s
r=1#循环
while r<=n:
    r=r+1
    rpm=int(input("输入转速rpm:"))
    rad = rpm*0.10472
    rad_half=rad**-0.5
    rotating_speed_rpm.append(rpm)
    rotating_speed_rad.append(rad)
    rotating_speed_rad_half.append(rad_half)
print("转速",rotating_speed_rpm,"rpm")
print("转速",rotating_speed_rad,"rad/s")
all_current_list.append(rotating_speed_rad_half)
print("转速的-0.5次方”)

例:

 

Step4:寻找对应电流数据进行计算保存,保存的个数为输入取点数

#PART3:循环检索表格中最接近的电压,并且输出所在行的数据,并对其进行数据处理
a=1#循环计次用
while a <= m:
# 要搜索的数值
    b=b+op
    search_column = 'Voltage'#确定检索的列
    search_value = b#检索的数字
# 计算距离每个数值的差值,然后使用argmin找到最接近的索引
    closest_index = np.argmin(np.abs(df[search_column] - search_value))
# 获取最接近的数据
    closest_value = df.loc[closest_index, search_column]#最接近的数据[
    df7 = df[df['Voltage']==closest_value]  # 最接近数据
    df8=1/df7
    arr = df8.iloc[:,1:n+1]#除去第一个数据
    arr_list1=arr.values.tolist()
    arr_list1=arr_list1[0]
    all_current_list.append(arr_list1)
    a=a+1

Step5:将列表数据转换为dataframe格式,便于输出

df = pd.DataFrame(all_current_list,columns=None)
df_melt = df.transpose()#x和y置换,便于Origin作图

Step6:numpy函数线性拟合,matplotlib函数出图

o=1
while o<=m:
     x= df_melt.iloc[:, 0]
     print(x)

     y= df_melt.iloc[:,o]
     o = o + 1
     coefficent=np.polyfit(x,y,1)
     fixed_y=np.poly1d(coefficent)#线性拟合的一次函数
     plt.rcParams['font.sans-serif'] = [u'simHei']  # 显示中文
     plt.rcParams['axes.unicode_minus'] = False  # 解决负号问题
     plt.rcParams['font.size'] = 20  # 字体大小,调节坐标轴字体
     plt.rcParams['font.family'] = 'Times New Roman'  # 字体

     plt.rcParams['font.weight'] = 'bold'  # 字体加粗:normal,bold,bolder
     plt.xlabel(u"ω^-0.5(rad/s)^-0.5",fontsize=20,fontweight='bold')
     plt.ylabel(u"Current^-1(A)^-1", fontsize=20, fontweight='bold')
     plt.scatter(x, y, marker="*",color="b", s=30)#做点图
     plt.plot(x, fixed_y(x), linewidth=1, color="r")#做线图,fixed_y(x)表示将x轴的数据代入线性方程计算得到理论结果

plt.show()

 

 Step7:是否输出数据

output=int(input("结果是否有效,有效输入1,导出数据:"))

if output==1:

    df_melt.to_excel(input("输入文件名保存(需要加.xlsx后缀):"), index=False)
else:
    print("结果无效")

得到数据:可复制进入Origin作图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值