# 教程 | 如何用Python和机器学习炒股赚钱？

「星期天《纽约时报》上发表的一篇关于癌症治疗新药开发潜力的文章导致 EntreMed 的股价从周五收盘时的 12.063 飙升至 85，在周一收盘时接近 52。在接下来的三周，它的收盘价都在 30 以上。这股投资热情也让其它生物科技股得到了溢价。但是，这个癌症研究方面的可能突破在至少五个月前就已经被 Nature 期刊和各种流行的报纸报道过了，其中甚至包括《泰晤士报》！因此，仅仅是热情的公众关注就能引发股价的持续上涨，即便实际上并没有出现真正的新信息。」

「（股价）运动可能会集中于有一些共同之处的股票上，但这些共同之处不一定要是经济基础。」

```import numpy as np
import pandas as pd
from sklearn.decomposition
import PCA
from sklearn.cluster
import KMeans
import matplotlib.pyplot as plt
import seaborn as sb

np.seterr(divide='ignore', invalid='ignore')
# Quick way to test just a few column features

str_list = []
for colname, colvalue in stocks.iteritems():
if type(colvalue[1]) == str:
str_list.append(colname)
# Get to the numeric columns by inversion

num_list = stocks.columns.difference(str_list)

stocks_num = stocks[num_list]

```stocks_num = stocks_num.fillna(value=0, axis=1)

X = stocks_num.values
from sklearn.preprocessing import StandardScaler
X_std = StandardScaler().fit_transform(X)

f, ax = plt.subplots(figsize=(12, 10))
plt.title('Pearson Correlation of Concept Features (Elements & Minerals)')
# Draw the heatmap using seaborn

sb.heatmap(stocks_num.astype(float).corr(),linewidths=0.25,vmax=1.0, square=True, cmap="YlGnBu", linecolor='black', annot=True)
sb.plt.show()```

```# Calculating Eigenvectors and eigenvalues of Cov matirx

mean_vec = np.mean(X_std, axis=0)
cov_mat = np.cov(X_std.T)
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# Create a list of (eigenvalue, eigenvector) tuples

eig_pairs = [ (np.abs(eig_vals[i]),eig_vecs[:,i]) for i in range(len(eig_vals))]
# Sort from high to low

eig_pairs.sort(key = lambda x: x[0], reverse= True)
# Calculation of Explained Variance from the eigenvaluestot = sum(eig_vals)
var_exp = [(i/tot)*100 for i in sorted(eig_vals, reverse=True)]
cum_var_exp = np.cumsum(var_exp)
# Cumulative explained variance# Variances plot

max_cols = len(stocks.columns) - 1plt.figure(figsize=(10, 5))
plt.bar(range(max_cols), var_exp, alpha=0.3333, align='center', label='individual explained variance', color = 'g')
plt.step(range(max_cols), cum_var_exp, where='mid',label='cumulative explained variance')
plt.ylabel('Explained variance ratio')
plt.xlabel('Principal components')
plt.legend(loc='best')
plt.show()```

```pca = PCA(n_components=9)
x_9d = pca.fit_transform(X_std)

plt.figure(figsize = (9,7))
plt.scatter(x_9d[:,0],x_9d[:,1], c='goldenrod',alpha=0.5)
plt.ylim(-10,30)
plt.show()```

K-均值聚类（K-Means Clustering）

```# Set a 3 KMeans clustering

kmeans = KMeans(n_clusters=3)
# Compute cluster centers and predict cluster indices

X_clustered = kmeans.fit_predict(x_9d)# Define our own color map

LABEL_COLOR_MAP = {0 : 'r',1 : 'g',2 : 'b'}
label_color = [LABEL_COLOR_MAP[l] for l in X_clustered]
# Plot the scatter digram

plt.figure(figsize = (7,7))
plt.scatter(x_9d[:,0],x_9d[:,2], c= label_color, alpha=0.5)
plt.show()```

```# Create a temp dataframe from our PCA projection data "x_9d"

df = pd.DataFrame(x_9d)
df = df[[0,1,2]]
df['X_cluster'] = X_clustered
# Call Seaborn's pairplot to visualize our KMeans clustering on the PCA projected data

sb.pairplot(df, hue='X_cluster', palette='Dark2', diag_kind='kde', size=1.85)
sb.plt.show()```

0 条评论

• ### 人人都能读懂的无监督学习：什么是聚类和降维？

选自Medium 作者：Vishal Maini 机器之心编译 参与：Panda 机器学习已经成为了改变时代的大事，一时间似乎人人都应该懂一点机器学习。但机器学...

• ### 线性代数与张量？这本开放书籍帮你扫清通往ML的数学绊脚石

项目地址：https://web.stanford.edu/~boyd/vmls/

• ### 动态 | 邀请函or挑战书？OpenAI喊你来研究7个AI未解问题啦

AI 科技评论按：OpenAI 昨日发布一篇博客，介绍了 7 个自己近期在研究但尚未解决的问题，希望邀请到外部的研究者一同参与研究、做出进展。OpenAI 尤其...

• ### 缓存穿透了怎么办？

在现在互联网架构中，几乎每个互联网项目都会引入缓存系统，比如 Redis、Memcached。来保护下游数据库和提升系统并发量。不管使用哪种缓存系统都有可能遇到...

• ### 面向切面缓存设计

在互联网行业，缓存作为一种家喻户晓的技术，在各个系统中起着提效降压的作用。但是缓存的引入，也使得处理逻辑变得复杂，尤其在当下微服务大行其道，一个大型系统动辄十几...

• ### 学习链表

版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。 ...

• ### 学界 | 一览 CMU 的 33 篇 ICML 2019 论文

AI 科技评论按：机器学习顶会 ICML 2019 近期公布了接收论文清单，多家企业研究院也按惯例介绍了自己的录用论文。不过新鲜的是，今年卡耐基梅隆大学（CMU...

• ### 腾讯发布国货美妆报告：它们或成下一个世界级“大牌”

爱美之心，人皆有之。 随着时代和消费理念的变化，扮靓自己、追求颜值已成为当今各类人群的重要课题之一。 在这一趋势的推动之下，美妆行业也迎来了新变化。 不久前...