今早刚得到一份2890支股票2013年9月30日至今的交易数据,数据量还行,共有170m左右。趁着热乎劲,想做一些分析。

分析思路很简单,就是通过股票的涨跌情况,进行聚类分析。看看哪些股票种类是相似的,对于一些异常的股票,可以进一步挖掘分析。这里用到的算法是KMeans。

KMeans的原理很简单,这里就不详述了,不清楚的同学请使劲戳这里

KMeans主要的参数主要有这几个:k(中心点的个数),iter(迭代次数,也就是选择中心点的次数),thresh(算法在计算时变化的值域,如果小于或等于thresh,则停止迭代,这个可设可不设。)

在pyhon的scipy模块里面,KMeans方法返回的值是一些重心点,之后需要再用vq根据这些重心点来进行分类。
原文解释在这里,本人英语还在学习当中,就不在这里翻译出洋相了:

vq(obs, code_book[, check_finite])  Assign codes from a code book to observations.
kmeans(obs, k_or_guess[, iter, thresh, ...])    Performs k-means on a set of observation vectors forming k clusters.

原理清楚之后就可以直接上代码啦:

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 28 11:36:29 2016
@author: Sunnyin
"""import numpy as np
import pandas as pd
from scipy.cluster.vq import kmeans,vq
import os,copyos.chdir('E:\\PythonWorkSpace\\data\\data\\data')
path = 'E:\\PythonWorkSpace\\data\\data\\data'for root,dirs,files in os.walk(path):fileNames = filesfileNum = np.random.random_integers(2890,size = 100)
useFiles = []
for i in fileNum:useFiles.append(fileNames[i])stocks = []
change = []
useFileTrue = copy.deepcopy(useFiles)
stocksName = {}
for index in range(len(useFiles)):info = pd.read_csv(useFiles[index])if len(info) > 100:stocks.append(info.close.values[:100])else:useFileTrue.pop(index)print("Now,we will analysis the data of "+ str(len(stocks))+ " stocks...")
for _ in range(len(stocks)):change.append(np.sign(np.diff(stocks[_])))data = np.vstack(change)
centroids,_= kmeans(data,5)
result,_ = vq(data,centroids)for num in range(len(result)):stocksName[useFileTrue[num]] = result[num]
print(stocksName)

这里面有几个需要注意的地方:

  1. 我在2890支股票中只是随机选择了100支股票进行分析。并且由于有的股票并不是3年前就存在的。所以我在这100只股票中又过滤了一遍,选择了最近100次交易都有数据的股票。
  2. 由于在进行聚类分析时,分析字段的长度必须一致,所以我分析的股票规律也是根据最近100次交易的涨跌规律。当然,这个算法比较粗糙,因为有的股票中间也许会暂停交易几天,所以最好是根据时间来过滤,有兴趣的可以尝试一下。
  3. 从代码中可以看到用了好几个循环,当然处理这100支股票速度很快,但是数据量大了也许就会看到弊端,所以可以试着利用numpy来优化代码。这个需要不断尝试。

代码运行效果如下:

Now,we will analysis the data of 98 stocks...
{'000514.csv': 2, '600064.csv': 1, '000572.csv': 2, '002144.csv': 2, '600792.csv': 2, '002302.csv': 1, '600645.csv': 4, '600163.csv': 2, '603012.csv': 4, '002663.csv': 0, '600673.csv': 1, '300390.csv': 4, '600303.csv': 4, '600533.csv': 1, '002373.csv': 0, '300453.csv': 4, '600139.csv': 3, '600288.csv': 4, '000550.csv': 2, '600030.csv': 3, '300308.csv': 3, '002753.csv': 4, '600563.csv': 2, '002038.csv': 2, '603189.csv': 1, '601789.csv': 0, '600864.csv': 2, '002187.csv': 2, '000617.csv': 0, '600870.csv': 1, '300492.csv': 2, '002426.csv': 4, '600624.csv': 0, '600999.csv': 3, '601106.csv': 0, '002107.csv': 1, '002585.csv': 2, '002600.csv': 4, '603778.csv': 1, '000561.csv': 2, '600723.csv': 1, '002489.csv': 4, '300505.csv': 2, '002061.csv': 0, '002175.csv': 0, '000811.csv': 4, '002395.csv': 4, '603601.csv': 4, '300307.csv': 1, '600876.csv': 0, '000856.csv': 2, '300055.csv': 2, '000528.csv': 1, '300153.csv': 4, '300068.csv': 4, '600808.csv': 2, '600315.csv': 0, '600736.csv': 1, '600580.csv': 4, '600308.csv': 2, '600217.csv': 1, '002656.csv': 0, '603123.csv': 2, '002336.csv': 2, '600575.csv': 1, '600322.csv': 2, '300338.csv': 0, '002417.csv': 1, '000598.csv': 1, '002404.csv': 0, '601800.csv': 1, '000571.csv': 0, '601555.csv': 3, '002074.csv': 4, '603788.csv': 3, '000975.csv': 0, '000983.csv': 1, '600016.csv': 3, '600565.csv': 1, '002216.csv': 2, '600850.csv': 4, '002442.csv': 4, '000913.csv': 2, '300247.csv': 2, '300018.csv': 4, '600605.csv': 1, '600150.csv': 2, '600843.csv': 0, '600479.csv': 1, '300270.csv': 4, '600115.csv': 1, '000733.csv': 4, '600069.csv': 2, '002482.csv': 1, '603001.csv': 2, '000153.csv': 2}

可以看出,我一共将股票分了5个类别,并且每个类别所对应的股票代码都存在了字典里。
当然,虽说KMeans算法很高效,但是我这些结果我还没有验证,具体优化还需要继续研究。

这仅仅是一个简单的分类,剩下的神奇事情还有很多很多,在于你怎么挖掘咯。

根据股票涨跌用KMeans进行分类相关推荐

  1. 量化交易是不是用机器预测股票涨跌?这靠谱吗?

    量化交易是不是用机器预测股票涨跌?是又不全是,量化交易是策略制定的基础上进行自动化交易,也不能全说是机器预测涨跌的,而且机器学习预测股票涨跌也不太靠谱,结果和丢硬币差不了太多. 虽然用机器学习来预测涨 ...

  2. Java分析股票涨跌走势

    程序能不能像人脑一样,看一眼就知道,哪个时间段是涨哪个时间段股票在下跌? 我要达到这种效果: 网上找了很多资料,都是python的,而且也没有解决我的问题. 我需要实现的是,能智能地对数据分段,像局部 ...

  3. python支持向量机 股票_小蛇学python(4)利用SVM预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

  4. LightGBM模型简单预测股票涨跌情况

    最近入迷研究各种股票分析的指标,一想不如用熟悉的Python帮忙搞一搞,顺便做了一个二分类预测模型,供大家参考学习,也欢迎有量化分析兴趣的朋友沟通交流! Python中使用akshare这个第三方库来 ...

  5. python应用(3)svm模型预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

  6. 股票涨跌量化怎样进行策略分析?

    股票涨跌量化其实是通过Python调用Tushare库计算深证成指实时,对股票的成交量涨跌幅,主要是通过相关分析选择合适的成交量涨跌幅来计算的一种量化策略分析方法,也可以根据绘制股票的成交量涨跌幅度与 ...

  7. CNN模型预测股票涨跌的始末过程——(一)股票数据的获取

    CNN模型预测股票涨跌的始末过程--(一)股票数据的获取[附源码和数据] 股票数据的获取 Choice数据 - 东方财富 Tushare BigQuant 最后列一下我下载成功的数据 股票数据的获取 ...

  8. svm预测股价 python_小蛇学python(4)利用SVM预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

  9. 逻辑回归模型预测股票涨跌

    http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类 ...

最新文章

  1. 数组中只出现一次的数字
  2. 我对对象和引用的理解
  3. c语言派,C语言中 派/4=1-1/3+1/5-1/7....公式求派
  4. java taken_java-是否有正确的方法在slf4j中传递参数?
  5. axure命令行_Axure变量详解
  6. 跨域调用WebService
  7. 67页综述深度卷积神经网络架构:从基本组件到结构创新
  8. top 和cpu 负载不同_Linux: Top命令你了解多少?
  9. 激光雷达厂商速腾聚创获3亿元融资,阿里菜鸟、上汽,北汽入股
  10. 【原】公司P2P平台的功能拆分
  11. 道可道,非常道——详解promise
  12. 大屏数据展示,5.5寸大屏幕手机更受消费者喜爱
  13. springBoot引入mysql数据库连接:errorCode1045,state28000的解决办法
  14. 论坚持的力量-知耻后勇
  15. 计算机应用基础2020年最新档案,计算机应用基础 高职计算机大类专业 刁爱军项目三 人事档案管理.pptx...
  16. JVM 内存模型、垃圾回收
  17. java jlabel图片大小_java – 调整图片大小以适应JLabel
  18. matlab显示sig,Matlab中LSSVM参数gam和sig2寻优范围如何确定以及寻优具体程序如何实现的问题...
  19. 激活Windows 7旗舰版
  20. vue 中哪些操作自动触发更新视图

热门文章

  1. 多台路由器堆叠_双网多网叠加教程
  2. linux装pl2303驱动下载,Linux下安装USB转串口驱动(PL2303)
  3. java升序排列数组_java数组的升序降序排列
  4. 【翻译】BKZ 2.0: Better Lattice Security Estimates 论文翻译
  5. 用云开发搭建的微信答题小程序v1.0
  6. rem css calc,关于使用rem单位、css函数calc()进行自适应布局
  7. java读写word模板_Java操作Word模板插入列表
  8. c# 无法加载DLL“SQLite.Interop.dll”,: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
  9. 0.91寸 SSD1306 OLED介绍(四) --- 用上位机验证OLED显示屏
  10. 双硬盘笔记本电脑安装WIN10和Ubuntu双系统(二)