python数据分析

作业目的
  1. 了解 K-Menas 聚类算法在客户价值分析实践中的应用。
  2. 利用 Pandas 快速实现数据 z-score(标准差)标准化以及用 Scikit-Learn 的聚类库实现 K-Means 聚类分析。
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np

'''
High:最高价
Low:最低价
Open:开盘价
Close:收盘价
Volume:股票总手数(成交量)
Adj Close:调整后的收盘价
'''


# 开始日期
start = datetime.datetime(2006, 1, 1)
# 今天日期
end = datetime.date.today()
# 获取数据
stock = web.DataReader('600797.SS','yahoo',start ,end)
# 去除掉未开盘的数据
stock = stock[stock['Volume'] != 0]
print(stock)
# stock.to_excel('alldata.xls')
# 横坐标代表日期  纵坐标代表收盘价
# stock['Adj Close'].plot(legend=True, figsize=(10,4))
# stock['Close'].plot(legend=True, figsize=(10,4))

# 标准化数据
df = pd.read_excel('alldata.xls')
print(df.values)
dd = (df[['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close']] - np.mean(df[['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close']],axis=0))/np.std(df[['High', 'Low', 'Open', 'Close','Volume', 'Adj Close']],axis=0)
dd['Date'] = df['Date']
dd.to_excel('stdcoredata.xls')


stock = pd.read_excel('stdcoredata.xls')
kmeans = KMeans(5)
kmeans.fit(stock[['High', 'Low', 'Open', 'Close', 'Adj Close']])
stock['label'] = kmeans.labels_
# stock.to_excel('air_result.xls')
coreData = np.array(kmeans.cluster_centers_)
# coreData.to_excel('air_core.xls')


# 绘制雷达图
# 组织数据
# 构造x轴值
# coreData = pd.DataFrame(kmeans.cluster_centers_)
print(coreData)
# 设置5个维度数据的显示位置
xdata = np.linspace(0,2*np.pi,5,endpoint=False)
xdata = np.concatenate((xdata,[xdata[0]]))
# 设置每个聚类维度数据的划线闭合显示
ydata1 = np.concatenate((coreData[0], [coreData[0][0]]))
ydata2 = np.concatenate((coreData[1], [coreData[1][0]]))
ydata3 = np.concatenate((coreData[2], [coreData[2][0]]))
ydata4 = np.concatenate((coreData[3], [coreData[3][0]]))
ydata5 = np.concatenate((coreData[4], [coreData[4][0]]))

fig = plt.figure()
ax = fig.add_subplot(121,polar = True)

ax.plot(xdata, ydata1, 'b--', linewidth=1, label='1')
ax.plot(xdata, ydata2, 'r--', linewidth=1, label='2')
ax.plot(xdata, ydata3, 'g--', linewidth=1, label='3')
ax.plot(xdata, ydata4, 'o--', linewidth=1, label='4')
ax.plot(xdata, ydata5, 'y--', linewidth=1, label='5')
# 设置标签角度
ax.set_thetagrids(xdata*180/np.pi,['High', 'Low', 'Open', 'Close', 'Adj Close'])
# 设置取值范围
ax.set_rlim(-3,3)
# 设置图例标签位置
plt.legend(loc='best')

ax1 = fig.add_subplot(122)
ax1.plot(stock['Date'].values,stock['Adj Close'].values,label='Close')
plt.legend(loc='best')
plt.show()



数据类型
       High   Low  Open  Close      Volume  Adj Close

Date
2006-01-04 2.55 2.48 2.50 2.55 11477353.0 2.484148
2006-01-05 2.61 2.52 2.54 2.60 16754655.0 2.532857
2006-01-06 2.78 2.63 2.63 2.69 38151718.0 2.620533
2006-01-09 2.77 2.68 2.73 2.74 20166315.0 2.669241
2006-01-10 2.75 2.67 2.75 2.72 10798613.0 2.649758
… … … … … … …
2019-09-06 9.15 8.90 9.06 9.08 29808163.0 9.080000
2019-09-09 9.44 9.05 9.15 9.42 45255854.0 9.420000
2019-09-10 9.42 9.13 9.42 9.21 35634561.0 9.210000
2019-09-11 9.32 9.08 9.23 9.11 23588315.0 9.110000
2019-09-12 9.23 9.09 9.12 9.16 18119305.0 9.160000

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值