将CSV中的数据导入,并且指定自己想要的数据

import pandas as pddf = pd.read_csv('E:\I-V数据\RRAM_forming.csv')
data = df.iloc[222:, 1:3]

直接将csv里的数据读入,得到的是str字符串类型,所以要将字符串转化为float

print(type(a[0]))#打印列表第一个元素的类型
print(a[0])
a=list(map(float,a))#把list内的元素变成float型
print(type(a[0]))#显示改变后元素的类型
print(a)

因为想要做拟合,所以要分别得到已知的x和y:对x和y的数据类型做处理

这里申明一下,因为我的数据是捏滞回线,所以就相当于一个x,在图形上看起来会对应两个y,所以就要把我的数据分段处理。(其实有一个想法,就是当x单调递增的时候,一个函数拟合,递减的时候一个函数。)先把当x大于0的数据,分为了0-最大值,另一半数据从下一个到最后。两组数据分别得到它的预测数据,然后将x,y,y预测值一起画图。

    x = np.array(df.iloc[222:, 1])    #指定从222行开始的位置到最后一行,第二列的这一列数据为xx = list(map(float, x))           #x是元素为字符串的list,将其转化成float类型a = x.index(max(x))               #最大值的位置x1 = (x[0:a+1])                   #选择从0到最大值的数据x1 = np.array(x1)                 #转为数组类型x1 = x1.reshape(len(x1), 1)       #将x拉成一列x2 = (x[a+1:])                    #从最大的一个值下一个值到数据结束x2 = np.array(x2)                 x2 = x2.reshape(len(x2), 1)y = np.array(df.iloc[222:, 2])y = list(map(float, y))b = y.index(max(y))y1 = (y[0:b+1])y1 = np.array(y1)y1 = y1.reshape(len(y1), 1)y2 = (y[b+1:])y2 = np.array(y2)y2 = y2.reshape(len(y2), 1)

接下来就是做多项式拟合拟合

    def n_ploy_fit_formula(self):_x = self.x.reshape(self.m, 1)_y = self.y.reshape(self.m, 1)X = _x ** self.nfor i in range(self.n - 1):X = np.hstack((X, _x ** (self.n - i - 1)))         #构建多项式的方程X = np.hstack((X, np.ones((self.m, 1))))               #加一个常数#通过线性代数已知x和y来求解各个系数self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(_y)   #用求解出来的方程和已知的x求解y的预测值self.y_hat = X.dot(self.w)                            return self.y_hat             #返回的是求得的预测值,因为要分别调用两次函数,所以要将预测值值拼接起来,最后将所有的值画图                        

判断拟合的结果如何(套用固定公式)

    def stats_cal(self):self.sst = ((self.y - self.y.mean()) ** 2).sum()self.sse = ((self.y - self.y_hat) ** 2).sum()self.ssr = ((self.y_hat - self.y.mean()) ** 2).sum()self.r2 = self.ssr / self.sst

画图

    def plot_PF(self, x, y, y_hat):x = np.array(x)x = x.reshape(len(x), 1)y = np.array(y)y = y.reshape(len(y), 1)plt.figure(figsize=(8, 6))plt.plot(x, y, '+', label='original data')plt.plot(x, y_hat, 'r-', lw=2, label='Polynomial Curve Fitting')plt.legend(fontsize=12)plt.grid(alpha=0.5)plt.show()

整个过程全部代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseclass Ployfit:def __init__(self, x_data, y_data, n, label_list=None):if label_list is None:label_list = ['x', 'y']self.x = x_dataself.y = y_dataself.n = n  # 多项式阶数self.x_label = label_list[0]  # 自变量名称self.y_label = label_list[1]  # 因变量名称self.m = len(self.x)  # 样本量self.w = np.zeros((self.n, 1))self.y_hat = np.zeros((self.m, 1))self.sst = 0.0self.sse = 0.0self.ssr = 0.0self.r2 = 0.0def n_ploy_fit_formula(self):_x = self.x.reshape(self.m, 1)_y = self.y.reshape(self.m, 1)X = _x ** self.nfor i in range(self.n - 1):X = np.hstack((X, _x ** (self.n - i - 1)))         #构建多项式的方程X = np.hstack((X, np.ones((self.m, 1))))               #加一个常数self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(_y)    #通过线性代数已知x和y来求解各个系数self.y_hat = X.dot(self.w)                             #用求解出来的方程和已知的x求解y的预测值return self.y_hatdef stats_cal(self):self.sst = ((self.y - self.y.mean()) ** 2).sum()self.sse = ((self.y - self.y_hat) ** 2).sum()self.ssr = ((self.y_hat - self.y.mean()) ** 2).sum()self.r2 = self.ssr / self.sstdef plot_PF(self, x, y, y_hat):x = np.array(x)x = x.reshape(len(x), 1)y = np.array(y)y = y.reshape(len(y), 1)plt.figure(figsize=(8, 6))plt.plot(x, y, '+', label='original data')plt.plot(x, y_hat, 'r-', lw=2, label='Polynomial Curve Fitting')plt.legend(fontsize=12)plt.grid(alpha=0.5)plt.show()if __name__ == '__main__':df = pd.read_csv('E:\I-V数据\RRAM_forming.csv')data = df.iloc[222:, 1:3]x = np.array(df.iloc[222:, 1])    #指定从222行开始的位置到最后一行,第二列的这一列数据为x = list(map(float, x))           #x是内部为字符串的列表,将其转化成float类型a = x.index(max(x))               # 最大值的位置x1 = (x[0:a+1])x1 = np.array(x1)                 #转为数组类型x1 = x1.reshape(len(x1), 1)       #将x拉成一列x2 = (x[a+1:])x2 = np.array(x2)                 # 转为数组类型x2 = x2.reshape(len(x2), 1)y = np.array(df.iloc[222:, 2])y = list(map(float, y))b = y.index(max(y))y1 = (y[0:b+1])y1 = np.array(y1)y1 = y1.reshape(len(y1), 1)y2 = (y[b+1:])y2 = np.array(y2)y2 = y2.reshape(len(y2), 1)PF1 = Ployfit(x1, y1, 10)y1_hat = PF1.n_ploy_fit_formula()PF1.stats_cal()PF2 = Ployfit(x2, y2, 10)PF2.n_ploy_fit_formula()PF2.stats_cal()y2_hat = PF2.n_ploy_fit_formula()y_hat = np.append(y1_hat, y2_hat)PF2.plot_PF(x, y, y_hat)

多项式拟合忆阻器的相关数据,超详细解决忆阻器数据的拟合问题(还有很大改进空间)相关推荐

  1. 爬取医药卫生知识服务系统的药品数据——超详细流程

    爬取医药卫生知识服务系统的药品数据--超详细流程 文章目录 爬取医药卫生知识服务系统的药品数据--超详细流程 前言 一.寻找药品数据 二.爬取药品ID 1.资源获取 2.数据提取 3.资源保存 4.主 ...

  2. 魔兽世界怀旧服服务器最新阵营比例,魔兽世界怀旧服9月下旬人口普查数据 超详细服务器阵营比例一览...

    魔兽世界怀旧服马上9月份就要结束了,目前国服已经运营了一个月,在这期间开了很多服务器,一些玩家还不清楚到现在所有服务器的人口普查数据是多少,下面就来为大家分享一下. 魔兽世界怀旧服人口普查插件已经被修 ...

  3. 超详细解决office2016和visio2016同时安装出错问题

    超详细解决office2016和visio2016同时安装出错问题 长时间使用了office2016之后,目前需要用到Visio2016版本,但是装Visio2016时却提示您的电脑已经装了即点即用的 ...

  4. Tensorflow下利用Deeplabv3+训练自己的数据(超详细完整版)

    使用deeplabv3+进行语义分割 环境要求:python3.tensorflow-gpu 1.11.0或者以上,ubuntu/win都可以 0.DeepLabv3+代码下载 0.1 将tensor ...

  5. 超详细的APP数据指标体系分析

    在移动互联网公司,任何一个APP都应该事先规划好数据体系,才允许上线运营,有了数据才可以更科学.更省力地运营.今天我们来说说如何做APP的数据分析. 一.为什么要做APP数据分析 1.搭建数据运营分析 ...

  6. chmod命令用法_关于chmod(变更用户对此文件的相关权限)超详细说明,小白秒懂

    Linux下一切都是文件,通过ls -l或者别名ll可以查看文件的详细信息: drwxr-xr-x 第一个字符d指的是目录文件; 第2-4个字符rwx: 指的是u(user,owner)对这个文件具有 ...

  7. 所属的用户_关于chmod(变更用户对此文件的相关权限)超详细说明,小白秒懂

    Linux下一切都是文件,通过ls -l或者别名ll可以查看文件的详细信息: drwxr-xr-x 第一个字符d指的是目录文件; 第2-4个字符rwx: 指的是u(user,owner)对这个文件具有 ...

  8. pg数据库表存放在哪里_超详细的PG数据存储结构--逻辑结构和物理存储总结,值得收藏...

    概述 今天主要讲讲PG的数据结构,PG数据存储结构分为:逻辑结构和物理存储. 其中逻辑存储结构是内部的组织和管理数据的方式.物理存储结构是操作系统中组织和管理数据的方式.逻辑存储结构适用于不同的操作系 ...

  9. MySQL生成百万条数据超详细步骤

    本篇文章是关于MySQL生成百万条数据的全部过程,每一步都有具体的sql,并且每一步都有具体的注释,详细步骤如下: 1.创建数据库 CREATE DATABASE `test_bai` -- 创建数据 ...

最新文章

  1. D3DXCOLOR 和 D3DCOLOR 和 D3DCOLORVALUE
  2. Keras学习代码—github官网examples
  3. [原创]Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)
  4. 操作系统 —— 磁盘
  5. 创建型、结构型、行为型模式(2)
  6. CSS3概述、选择器、兼容性、样式
  7. java 反射调用set方法_java反射调用set方法时如果让参数做自动类型转换
  8. java当月最后一天_Java日期循环,Java获取当月的第一天和最后一天 | 学步园
  9. vagrant开启Xshell使用密码登录方式
  10. java 过滤器filter使用案例
  11. 利用SqlConnection获得SqlServer的统计信息
  12. 自动驾驶——多传感器融合的学习笔记
  13. CUDA里面GRID, BLOCK 边界检测
  14. eureka多了一个莫名其妙的服务_这些手游服务器全部飘红,每一个服务器都人多到爆满...
  15. 管理新语:主管要辅导员工转正
  16. PHP求100-1000之间的水仙花数
  17. Matlab快速傅里叶变换
  18. B1299 [LLH邀请赛]巧克力棒 博弈论
  19. 魔板游戏java_Java魔板游戏完整代码及注释
  20. python 正则表达式 ,看这篇就够了

热门文章

  1. 牛客训练赛10 B栈和排序(栈)
  2. 【新书推荐】经典畅销官场小说合集(陈玉福等)
  3. 卫星过顶计算matlab,太阳同步侦察卫星轨道预报算法实现与仿真_问答库
  4. 几分钟上线一个项目文档网站,这款开源神器实在太香了~
  5. ViSP学习笔记(十四):连通区域跟踪
  6. 福禄开放平台nodejs版本SDK
  7. 使用Python编写网页时,我们经常需要操纵HTML标签和属性。Python的Dominate库可以帮助我们以Python对象的形式生成HTML,有效简化了代码...
  8. acwing:最高的牛
  9. js移除某个样式_js怎么移除css样式?
  10. 通过阿里云镜像服务来拉取国外镜像