# -*- coding: utf-8 -*-
"""
Created on Mon Dec 2 14:49:59 2018 @author: zhen
""" import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from datetime import datetime def normal(a): #最大值最小值归一化
return (a - np.min(a)) / (np.max(a) - np.min(a)+0.000001) def normalization(x): # np.std:计算矩阵的标准差(方差的算术平方根)
return (x - np.mean(x)) / np.std(x) def corrcoef(a,b):
corrc = np.corrcoef(a,b) # 计算皮尔逊相关系数,用于度量两个变量之间的相关性,其值介于-1到1之间
corrc = corrc[0,1]
return (16 * ((1 - corrc) / (1 + corrc)) ** 1) # ** 表示乘方 startTimeStamp = datetime.now() # 获取当前时间
# 加载数据
filename = 'C:/Users/zhen/.spyder-py3/sh000300_2017.csv'
# 获取第一,二列的数据
all_date = pd.read_csv(filename,usecols=[0, 1, 3], dtype = 'str')
all_date = np.array(all_date)
data = all_date[:, 0]
times = all_date[:, 1] data_points = pd.read_csv(filename,usecols=[3])
data_points = np.array(data_points)
data_points = data_points[:,0] #数据 topk = 10 #只显示top-10
baselen = 100
basebegin = 361
basedata = data[basebegin]+' '+times[basebegin]+'~'+data[basebegin+baselen-1]+' '+times[basebegin+baselen-1]
base = data_points[basebegin:basebegin+baselen]#一天的数据是240个点
length = len(data_points) #数据长度 # 分割片段
subseries = []
dateseries = []
for j in range(0,length):
if (j < (basebegin - baselen) or j > (basebegin + baselen - 1)) and j <length - baselen:
subseries.append(data_points[j:j+baselen])
dateseries.append(j) #开始位置 # 片段搜索
listdistance = []
for i in range(0, len(subseries)):
tt = np.array(subseries[i])
distance = corrcoef(base, tt)
listdistance.append(distance) # 排序
index = np.argsort(listdistance,kind='quicksort') #排序,返回排序后的索引序列 # 显示,要匹配的数据
plt.figure(0)
plt.plot((base),label = basedata, linewidth='')
plt.legend(loc='upper left')
plt.title('Base data') # 原始数据
plt.figure(1)
num = index[0]
length = len(subseries[num])
begin = data[dateseries[num]]+' '+times[dateseries[num]]
end = data[dateseries[num]+length-1]+' '+times[dateseries[num]+length-1]
label = begin+'~'+end
plt.plot((subseries[num]), label=label, linewidth='')
plt.legend(loc='upper left')
plt.title('Similarity data') # 结果集对比
plt.figure(2)
plt.plot(normalization(base),label= basedata,linewidth='')
length = len(subseries[num])
begin = data[dateseries[num]] + ' ' + times[dateseries[num]]
end = data[dateseries[num] + length - 1] + ' ' + times[dateseries[num] + length - 1]
label = begin + '~' + end
plt.plot(normalization(subseries[num]), label=label, linewidth='')
plt.legend(loc='lower right')
plt.title('normal similarity search')
plt.show() endTimeStamp=datetime.now()
print('run time', (endTimeStamp-startTimeStamp).seconds, "s")

结果:

Python基于皮尔逊系数实现股票预测的更多相关文章

  1. 从欧几里得距离、向量、皮尔逊系数到http://guessthecorrelation.com/

    一.欧几里得距离就是向量的距离公式 二.皮尔逊相关系数反应的就是线性相关 游戏http://guessthecorrelation.com/ 的秘诀也就是判断一组点的拟合线的斜率y/x ------- ...

  2. 皮尔逊相似度计算的例子(R语言)

    编译最近的协同过滤算法皮尔逊相似度计算.下顺便研究R简单使用的语言.概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 由于这里每一个数都是等概率的.所以就当做是数 ...

  3. Pearson(皮尔逊)相关系数及MATLAB实现

    转自:http://blog.csdn.net/wsywl/article/details/5727327 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察 ...

  4. pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性

    皮尔逊积矩线性相关系数(Pearson's r)用于计算两组数组之间是否有线性关联,举个例子: a = pd.Series([1,2,3,4,5,6,7,8,9,10]) b = pd.Series( ...

  5. Pearson(皮尔逊)相关系数

    Pearson(皮尔逊)相关系数:也叫pearson积差相关系数.衡量两个连续变量之间的线性相关程度. 当两个变量都是正态连续变量,而且两者之间呈线性关系时,表现这两个变量之间相关程度用积差相关系数, ...

  6. 皮尔逊(Pearson)系数矩阵——numpy

    一.原理 注意 专有名词.(例如:极高相关) 二.代码 import numpy as np f = open('../file/Pearson.csv', encoding='utf-8') dat ...

  7. np.corrcoef()方法计算数据皮尔逊积矩相关系数(Pearson's r)

    上一篇通过公式自己写了一个计算两组数据的皮尔逊积矩相关系数(Pearson's r)的方法,但np已经提供了一个用于计算皮尔逊积矩相关系数(Pearson's r)的方法 np.corrcoef()  ...

  8. 皮尔逊残差 | Pearson residual

    参考:Pearson Residuals 这些概念到底是写什么?怎么产生的? 统计学功力太弱了!

  9. Spark Mllib里的如何对两组数据用皮尔逊计算相关系数

    不多说,直接上干货! import org.apache.spark.mllib.stat.Statistics 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mlli ...

随机推荐

  1. Man方法

    Main方法相当一个主线程,JVM会自动寻找class文件中的main方法并执行(请思考tomcat加载java web项目启动的线程数和每次tomcat服务器接收到请求,是不是要发起一个线程去处理) ...

  2. iptables防火墙常用配置介绍

    参考地址 http://www.cnblogs.com/metoy/p/4320813.html http://netfilter.org/ iptables http://man.chinaunix ...

  3. Wireshark的基本使用——过滤器

    前言 网络上关于Wireshark的教程已有不少,博主就简单介绍一下Wireshark分析数据包时最重要的技巧之一的过滤器..一次性嗅探到的数据包有很多,想要高效地提取出你想要的数据包或者对某个数据包 ...

  4. #21 Python异常

    前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...

  5. Python异常处理详解

    在shell脚本中,常用if来判断程序的某个部分是否可能会出错,并在if的分支中做出对应的处理,从而让程序更具健壮性.if判断是异常处理的一种方式,所有语言都通用.对于特性完整的编程语言来说,都有专门 ...

  6. Jenkins凭证及任务演示-pipeline(二)--技术流ken

    Jenkins前言 在上一篇博客<Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken>中已经详细介绍了jenkins的插件安装以版本更新等,本篇博客将再深入探究jenk ...

  7. scala程序开发入门

    scala程序开发入门,快速步入scala的门槛: 1.Scala的特性: A.纯粹面向对象(没有基本类型,只有对象类型).Scala的安装与JDK相同,只需要解压之后配置环境变量即可:B.Scala ...

  8. 《C#并发编程经典实例》学习笔记—2.1 暂停一段时间

    问题: 需要让程序(以异步方式)等待一段时间. 解决方案:Task类的静态函数Delay,返回Task对象 在github开源项目dotnet/coreclr,找到Task.cs有关Delay方法的源 ...

  9. 第一册:lesson forty nine。

    原文: At the butcher's A:Do you want any meat today,Mrs.B? B:Yes,please. A:Do you want beef or lamb? B ...

  10. fiddle使用小结

    1:保存发出的请求:右键Save,找到selected Sessions 选择 in ArchiveZip 2:更改header 重新发送请求:右键 Unlock For Editing 然后修改He ...