今早刚得到一份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,copy
os.chdir('E:\\PythonWorkSpace\\data\\data\\data')
path = 'E:\\PythonWorkSpace\\data\\data\\data'
for root,dirs,files in os.walk(path):
fileNames = files
fileNum = 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])