关于解决使用numpy.ployfit进行多项式拟合的时候请注意数据类型,解决问题的思路就是统一把数据变成浮点型,就可以了。这是numpy里面的一个bug,非常low希望后面改善。

# coding:utf-8

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d data = pd.read_excel('指数.xlsx',header=None,index_col=None) # 数据信息
# print(data.info()) # 查看空值
isnull = data[1].isnull()
# print(isnull)
# print(data[1]) # 替换空值
data[1] = data[1].fillna('') # 找出索引
index_ = data[isnull].index.tolist()
# print(index_) # 去除空列所在行
data = data.drop(index_)
# print(data) x = data[1]
y = data[0] # 插值 f1=interp1d(x,y,kind='linear')#线性插值
#f2=interp1d(x,y,kind='cubic')#三次样条插值
x_pred=np.arange(1,170,1)
y1=f1(x_pred) # datas = pd.DataFrame([y1,x_pred])
# datas.to_excel('new指数.xlsx') #y2=f2(x_pred)
# plt.figure(figsize=[12,7])
# plt.scatter(x,y,s=30,c='red',label='原始指数')
# plt.plot(x_pred,y1,'b--',label='linear interpolation')
# # plt.plot(x_pred,y2,'b--',label='cubic')
# plt.legend(loc='upper left')
# font_size = {'size':13}
# plt.ylabel('淘宝指数',font_size)
# plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为SimHei显示中文
# plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
# plt.show()
# print(x_pred,y1.shape) # xx = np.hstack([x_pred.reshape(-1,1),np.ones([len(x_pred),1])]) # ****************************************************************************
# 在使用numpy的拟合函数polyfit进行进行拟合时,会出现数据类型的问题,吧他们数据类型统一转浮点型就解决
x_pred = np.array(x_pred,dtype='float')
y1 = np.array(y1,dtype='float') z1 = np.polyfit(x_pred, y1,3)#用3次多项式拟合
p1 = np.poly1d(z1)
print(p1) #在屏幕上打印拟合多项式
#yvals=p1(x)#也可以使用yvals=np.polyval(z1,x)
yvals=np.polyval(z1,x_pred) plt.figure(figsize=[12,7])
plt.scatter(x,y,s=30,c='red',label='原始指数')
plt.plot(x_pred,yvals,'b--',label='%s = y'%p1)
plt.legend(loc='upper left')
font_size = {'size':13}
plt.ylabel('淘宝指数:y',font_size)
plt.xlabel('x',font_size)
p_mean = (np.sum(np.abs(yvals-y1))/len(y1))
plt.title('平均误差:%s'%(p_mean)) plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
plt.show()

numpy多项式拟合的更多相关文章

  1. 数据拟合:多项式拟合polynomial curve fitting

    http://blog.csdn.net/pipisorry/article/details/49804441 常见的曲线拟合方法 1.使偏差绝对值之和最小 2.使偏差绝对值最大的最小       3 ...

  2. python多项式拟合:np.polyfit 和 np.polyld

    python数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等. 1. 原始数据:假如要拟合的数据yyy来自sin函数,np.sin import numpy as ...

  3. 利用Python进行多项式拟合

    多项式拟合的简单代码: import matplotlib.pyplot as plt import numpy as np x=[,,,,,,,] y=[,,,,,,,] a=np.polyfit( ...

  4. 最小二乘法多项式拟合的Java实现

    背景 由项目中需要根据一些已有数据学习出一个y=ax+b的一元二项式,给定了x,y的一些样本数据,通过梯度下降或最小二乘法做多项式拟合得到a.b,解决该问题时,首先想到的是通过spark mllib去 ...

  5. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  6. MATLAB多项式及多项式拟合

    多项式均表示为数组形式,数组元素为多项式降幂系数 1.      polyval函数 求多项式在某一点或某几个点的值. p = [1,1,1];%x^2+x+1 x = [-1,0,1];y = po ...

  7. Matlab多项式拟合測试

    x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度 ...

  8. 多项式拟合的cpp实现

    当我们拥有一组散点图数据时,通常更愿意看到其走势. 对现有数据进行拟合,并输出拟合优度是常用的方法之一. 拟合结果正确性的验证,可以使用excel自带的功能. 下面是c++代码的实现: #ifndef ...

  9. matlab多项式拟合以及指定函数拟合

    clc;clear all;close all;%% 多项式拟合指令:% X = [1 2 3 4 5 6 7 8 9 ];% Y = [9 7 6 3 -1 2 5 7 20]; % P= poly ...

随机推荐

  1. PHP 常用函数总结(一)

    重点: 看函数的 ‘参数’ 和 ‘返回值’ 文档:http://www.w3school.com.cn/php/php_ref_array.asp http://www.w3school.com.cn ...

  2. 【vue】import的使用

    以下是vue默认模板结构,自动加载HelloWorld (1)@ 等价于 /src 这个目录,避免写麻烦又易错的相对路径,是在webpack.base.config.js里面配置好别名 (2)impo ...

  3. APP接口

    <?phpClass Response{ /*** 返回json数据* @param $code 状态码* @param $message 描述信息* @param $data 数据* @par ...

  4. Java面试题大汇总

    前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...

  5. Linux下的bash对拍

    下面是Linux下的bash对拍程序: #!/bin/bash t=0 //数据组数 while true; do let "t=$t + 1" echox printf $t / ...

  6. BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 )

    BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 ) 题意分析 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 ...

  7. View 的setTag() 和 getTag()

    View 的setTag() 和 getTag()ImageView.setTag(""); 就是当多个ImageView用到一个监听器时,能触发不同的情况,是View的方法 Ad ...

  8. CentOS7防火墙firewalld使用

    1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...

  9. C++ 注册表编程

    原文 C++ 注册表编程 1.基础知识 注册表的组织方式跟文件目录比较相似,主要分为根键.子键和键值项三部分,与文件目录对应的话就是根目录.子目录和文件.分别介绍一下这三部分: (1)根键.分为5个, ...

  10. 在VC6/VC2005下使程序直接具有XP风格(XP Style):

    原文 首先将以下文本保存为XpStyle.mainfest(后经实践,文件名和后缀是什么都无所谓) <?xml version="1.0" encoding="UT ...