2017-12-13 11:10:48 weixin_37450657 阅读数 3547
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93894 人正在学习 去看看 唐宇迪

pip install tushare,爬取银行股票数据

对数据进行初步进行整理,用今日的收盘减去昨天的收盘值定义value表示涨跌,并绘图直观表示最近的股票走势图。其实也可以直接根据pchange>0来标签分类的 -_-

import tushare as ts
import pandas as pd 
import pandas as pd
#获取中国银行历史数据
df_CB=ts.get_hist_data('601988', start='2015-01-01', end='2017-11-01')
#保存到本地
df_CB.to_csv('G:\\Project\\data\\CB.csv', sep=',' ,index=True)
#读取数据
df_CB=pd.read_csv(r'G:\\Project\\data\\CB.csv',encoding='gbk')

#将日期作为index,顺序排列
df_CB = df_CB.set_index('date')
df_CB = df_CB.sort_index()
#每天的开盘价,收盘价,交易量,价格变化,10天、20天的均价
print df_CB.head()
        open  high  close   low      volume  price_change  p_change  \

date
2015-01-05 4.18 4.50 4.42 4.18 23084548.0 0.27 6.51
2015-01-06 4.38 4.74 4.56 4.28 23127260.0 0.14 3.17
2015-01-07 4.46 4.64 4.54 4.44 15485755.0 -0.02 -0.44
2015-01-08 4.55 4.57 4.33 4.31 14892726.0 -0.21 -4.63
2015-01-09 4.28 4.76 4.47 4.23 22776194.0 0.14 3.23

          ma5   ma10   ma20       v_ma5      v_ma10       v_ma20  turnover  

date
2015-01-05 4.036 3.862 3.736 20236083.4 20700121.8 18068874.18 1.13
2015-01-06 4.184 3.964 3.791 21016213.4 21901637.0 18406099.90 1.13
2015-01-07 4.322 4.029 3.838 20103937.2 19875380.1 18223578.34 0.76
2015-01-08 4.400 4.090 3.867 19874622.2 18551524.5 18027645.85 0.73
2015-01-09 4.464 4.180 3.901 19873296.6 19332925.8 18291454.08 1.11

#value表示涨跌,表示今日的收盘减去昨天的收盘
value = pd.Series(df_CB['close']-df_CB['close'].shift(1),\
                  index=df_CB.index)
#第一个值为NaN,将其后向填充
value = value.bfill()
#差值大于0表示涨,置位1
value[value>=0]=1 
value[value<0]=0 
df_CB['Value']=value
#后向填充空缺值
df_CB=df_CB.fillna(method='bfill')
df_CB=df_CB.astype('float64')
print df_CB.head()
        open  high  close   low      volume  price_change  p_change  \

date
2015-01-05 4.18 4.50 4.42 4.18 23084548.0 0.27 6.51
2015-01-06 4.38 4.74 4.56 4.28 23127260.0 0.14 3.17
2015-01-07 4.46 4.64 4.54 4.44 15485755.0 -0.02 -0.44
2015-01-08 4.55 4.57 4.33 4.31 14892726.0 -0.21 -4.63
2015-01-09 4.28 4.76 4.47 4.23 22776194.0 0.14 3.23

          ma5   ma10   ma20       v_ma5      v_ma10       v_ma20  \

date
2015-01-05 4.036 3.862 3.736 20236083.4 20700121.8 18068874.18
2015-01-06 4.184 3.964 3.791 21016213.4 21901637.0 18406099.90
2015-01-07 4.322 4.029 3.838 20103937.2 19875380.1 18223578.34
2015-01-08 4.400 4.090 3.867 19874622.2 18551524.5 18027645.85
2015-01-09 4.464 4.180 3.901 19873296.6 19332925.8 18291454.08

        turnover  Value  

date
2015-01-05 1.13 1.0
2015-01-06 1.13 1.0
2015-01-07 0.76 0.0
2015-01-08 0.73 0.0
2015-01-09 1.11 1.0

#绘图
%matplotlib inline
Data = df_CB[['open','close','ma5','ma10','ma20']]
Data=Data.astype(float)
Data.plot()
Data.ix['2016-01-01':'2017-01-01'].plot()


2016一年的

#同理获取中国工商银行等其他银行历史数据
df_gongshang=ts.get_hist_data('601398', start='2015-01-01', end='2017-11-01')

df_gongshang.to_csv('G:\\Project\\data\\gongshang.csv', sep=',' ,index=True)
df_gongshang=pd.read_csv(r'G:\\Project\\data\\gongshang.csv',encoding='gbk')
print df_gongshang.tail()
       date  open  high  close   low      volume  price_change  p_change  \

685 2015-01-09 4.82 5.15 4.88 4.74 9915904.0 0.05 1.03
686 2015-01-08 5.05 5.07 4.83 4.80 6920490.5 -0.21 -4.17
687 2015-01-07 5.00 5.10 5.04 4.95 8105967.5 -0.06 -1.18
688 2015-01-06 5.00 5.36 5.10 4.95 14975615.0 0.04 0.79
689 2015-01-05 4.93 5.15 5.06 4.90 13658517.0 0.19 3.90

   ma5   ma10   ma20       v_ma5      v_ma10      v_ma20  turnover  

685 4.982 4.818 4.628 10715298.8 9210890.05 8513672.29 0.37
686 4.980 4.763 4.614 10832707.4 8843879.40 8431188.07 0.26
687 4.956 4.728 4.600 10841814.8 8930133.55 8525606.67 0.30
688 4.870 4.695 4.571 10993154.7 9866091.80 8553582.62 0.56
689 4.774 4.626 4.533 9339578.6 8973967.90 8094866.02 0.51

#将日期作为index,顺序排列
df_gongshang = df_gongshang.set_index('date')
df_gongshang = df_gongshang.sort_index()
#print df_gongshang.tail()
#绘图
Data_gs = df_gongshang[['close','ma10','ma20']]
Data_gs=Data_gs.astype(float)
Data_gs.plot()
Data_gs.ix['2016-01-01':'2017-01-01'].plot()

工商银行
这里写图片描述

2018-07-31 23:40:27 CSDN_fzs 阅读数 1212
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93894 人正在学习 去看看 唐宇迪

首先我们打开数据之后先了解一下数据有哪些元素。在这个表中,可以看到,第一列是公司名称,第二列是交易日期,第四列是开盘价,之后分别是是最高价,最低价,收盘价,成交量。(数据获取方式看文章末尾)

在这个例子中,将会利用python和numpy库进行苹果公司的股票交易数据的分析。

先读入数据文件:

import sys
import numpy as np
#读入文件
c,v = np.loadtxt(R'F:\data.csv',delimiter=',',usecols=(6,7),unpack=True)   #利用delimiter=','分割,读取第7(收盘价)、8(成交量)列数据,将收盘价和成交量分别赋值给c和v两个数组

然后求一些简单的均价:

#计算成交量加权平均价
vwap = np.average(c,weights=v)
print("成交量加权平均价 = ",vwap)
#成交量加权平均价 =  350.589549353

#算术平均价函数
print("算术平均价 = ",np.mean(c))
#算术平均价 =  351.037666667

#时间加权平均价
t = np.arange(len(c))
print("时间加权平均价 = ",np.average(c,weights=t))
#时间加权平均价 =  352.428321839

接着可以求数据的最大最小值和它们的中位数和方差:

#寻找最大值和最小值
h,l = np.loadtxt(R'F:\data.csv',delimiter=',',usecols=(4,5),unpack=True)   #第5列数据为最高价,第6列为最低价
print("最高价 = ",np.max(h))
#最高价 =  364.9

print("最低价 = ",np.min(l))
#最低价 =  333.53

print("最高价和最低价的平均值 = ",np.max(h)/2 + np.min(l)/2)
#最高价和最低价的平均值 =  349.215

print("最高价之间的极差",np.ptp(h))           #最高价当中最高值-最低值
#最高价之间的极差 24.86

print("最低价之间的极差",np.ptp(l))           #最低价当中最高值-最低值
#最低价之间的极差 26.97


#统计分析
c = np.loadtxt(R'F:\data.csv',delimiter=',',usecols=(6),unpack=True)   #这次读入了收盘价
print("收盘价中位数 = ",np.median(c))     #计算中位数
#收盘价中位数 =  352.055

print("方差 = ",np.var(c))             #计算方差
#方差 =  50.1265178889

然后我们可以分析股票的收益率:

#股票收益率
#普通收益率
returns = np.diff(c)/c[:-1]     #(整体的数据)/(这些数据减去最后一个值)
print("收益率 = ",np.std(returns))
#收益率 =  0.0129221344368

#对数收益率
#当天收盘价的对数前前一天收盘价的对数
logreturns = np.diff(np.log(c))
posretindices = np.where(returns>0)       #0和负数没有对数,要去除
print("Indices with positive returns = ",posretindices)
#Indices with positive returns =  (array([ 0,  1,  4,  5,  6,  7,  9, 10, 11, 12, 16, 17,18, 19, 21, 22, 23,25, 28], dtype=int64),)

再来求波动率,看看波动的情况怎么样:

# 年化波动
annual_volatility = np.std(logreturns)/np.mean(logreturns)
annual_volatility = annual_volatility / np.sqrt(1./252.)     #一年的交易日为252天(用浮点数运算)
print("年化波动 = ",annual_volatility)
#年化波动 =  129.274789911

# 月化波动
print("月化波动", annual_volatility * np.sqrt(1./12.))
#月化波动 37.3184173773

也可以根据日期来分析:
 

#日期分析
from datetime import datetime
# 将日期映射为星期
# Monday 0
# Tuesday 1
# Wednesday 2
# Thursday 3
# Friday 4
# Saturday 5
# Sunday 6
#计算日期转为星期的函数
def datestr2num(s):
    return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday()  #返回的值字节字符串bytes,所以需要把它变回string,则对字符串解码用函数decode('asii'),变成string格式。

# 读取星期和收盘价,converters 将日期映射成星期
dates, close = np.loadtxt(R'F:\data.csv', delimiter=',', usecols=(1,6), converters={1: datestr2num}, unpack=True)
print("Dates =", dates)
#Dates = [ 4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.  1.  2. 3.  4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.]


#创建一个包含5个元素的数组,用于保存周一到周五的股票数据
averages = np.zeros(5)

for i in range(5):
    indices = np.where(dates == i)
    prices = np.take(close,indices)     #利用take取出相应的元素
    avg = np.mean(prices)                  #日期内的平均价格
    print("日期:",i,"价格",prices,"平均价格",avg)
    averages[i] = avg
#日期: 0 价格 [[ 339.32  351.88  359.18  353.21  355.36]] 平均价格 351.79
#日期: 1 价格 [[ 345.03  355.2   359.9   338.61  349.31  355.76]] 平均价格 350.635
#日期: 2 价格 [[ 344.32  358.16  363.13  342.62  352.12  352.47]] 平均价格 352.136666667
#日期: 3 价格 [[ 343.44  354.54  358.3   342.88  359.56  346.67]] 平均价格 350.898333333
#日期: 4 价格 [[ 336.1   346.5   356.85  350.56  348.16  360.    351.99]] 平均价格 350.022857143

    
print("最高价",np.max(averages))
print("最高价的星期:",np.argmax(averages))
#最高价 352.136666667
#最高价的星期: 2

print("最低价",np.min(averages))
print("最低价的星期:",np.argmin(averages))
#最低价 350.022857143
#最低价的星期: 4

还可以根据一个周的数据,求出一周的开盘价、最高值、最低值和收盘价

#周汇总
def datestr2num(s):
    return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday()  #返回的值字节字符串bytes,所以需要把它变回string,则对字符串解码用函数decode('asii'),变成string格式。

dates,open,high,low,close = np.loadtxt(R'F:\data.csv', delimiter=',', usecols=(1,3,4,5,6), converters={1: datestr2num}, unpack=True)
close = close[:16]    #为了方便计算,仅取前三周数据
dates = dates[:16]

#寻找第一个星期一
first_day = np.ravel(np.where(dates == 0))[0]               #dates == 0时表示周一    where返回的是个多维数组,需要用ravel展平
print("第一个周一的数据所在的位置是",first_day)       #输出的结果表示第5个数字表示周一(去除第一个不是周一开始的数字)
#第一个周一的数据所在的位置是 1

#寻找最后一个星期五
last_day = np.ravel(np.where(dates == 4))[-1]               #dates == 4时表示周五
print("第一个周一的数据所在的位置是",last_day)       #输出的结果表示第16个数字表示周五(去除第一个不是周一开始的数字)
#第一个周一的数据所在的位置是 15

#创建一个数组,存储3个周一到周五的索引值
week_indices = np.arange(first_day,last_day + 1)
print("这个索引值是",week_indices)
#这个索引值是 [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15][array([1, 2, 3, 4, 5], dtype=int64), array([ 6,  7,  8,  9, 10], dtype=int64), array([11, 12, 13, 14, 15], dtype=int64)]

week_indices = np.split(week_indices,3)             #将这个索引数组切分成3个数组
print(week_indices)

def summarize(a, o, h, l, c):
    monday_open = o[a[0]]
    week_high = np.max(np.take(h, a))
    week_low = np.min(np.take(l, a))
    friday_close = c[a[-1]]

    return ("APPL", monday_open, week_high, week_low, friday_close)

# apply_along_axis内涵很丰富
weeksummary = np.apply_along_axis(summarize, 1, week_indices, open, high, low, close)    #输出3个周的开盘价、最高价、最低价、收盘价
print("weeksummary:",weeksummary)
#weeksummary: [['APPL' '335.8' '346.7' '334.3' '346.5']
# ['APPL' '347.8' '360.0' '347.6' '356.8']
# ['APPL' '356.7' '364.9' '349.5' '350.5']]

再来看看每天滑动均值:

# 每一天的简单滑动均值
# 就是当天与前 (N - 1) 天的均值
# 其中 N 是窗口大小
import numpy as np
import sys
from matplotlib.pyplot import plot
from matplotlib.pyplot import show

N = 20

# 使用 ones 函数创建大小为 N 的数组
# 并除以 N 来创建权重
weights = np.ones(N) / N
print("Weights", weights)
#Weights [ 0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05  0.05]

# 假设 N 为 5:
# Weights [ 0.2  0.2  0.2  0.2  0.2]

# 读入收盘价
c = np.loadtxt(R'F:\data.csv', delimiter=',', usecols=(6,), unpack=True)

# 调用 convolve 函数来计算滑动平均
sma = np.convolve(weights, c)[N-1:-N+1]

# 绘制函数图像
# 要注意横轴从 (N - 1) 开始
t = np.arange(N - 1, len(c))
plot(t, c[N-1:], lw=1.0)
plot(t, sma, lw=2.0)
show()

最后得到股票波动图

数据获取方式:关注微信公众号 大鱼Tech,回复“苹果股票数据”即可获取。

2019-05-01 15:54:26 weixin_41792682 阅读数 1869
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93894 人正在学习 去看看 唐宇迪

Python数据分析:股票数据分析案例

步骤:
  1. 准备数据
  2. 可视化数据、审查数据
  3. 处理数据
  4. 根据ACF、PACF定阶
  5. 拟合ARIMA模型
  6. 预测
import pandas as pd
import pandas_datareader
import datetime
import matplotlib.pylab as plt
from matplotlib.pylab import style
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

style.use('ggplot')     # 设置图片显示的主题样式

# 解决matplotlib显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题


def run_main():
    """
        主函数
    """
    # 1. 准备数据
    # 指定股票分析开始日期
    start_date = datetime.datetime(2009, 1, 1)
    # 指定股票分析截止日期
    end_date = datetime.datetime(2019, 4, 1)
    # 股票代码
    stock_code = '600519.SS'    # 沪市贵州茅台

    stock_df = pandas_datareader.data.DataReader(
                        stock_code, 'yahoo', start_date, end_date
                )
    # 预览数据
    print(stock_df.head())

    # 2. 可视化数据
    plt.plot(stock_df['Close'])
    plt.title('股票每日收盘价')
    plt.show()

    # 按周重采样
    stock_s = stock_df['Close'].resample('W-MON').mean()
    stock_train = stock_s['2014':'2018']
    plt.plot(stock_train)
    plt.title('股票周收盘价均值')
    plt.show()

    # 分析 ACF
    acf = plot_acf(stock_train, lags=20)
    plt.title("股票指数的 ACF")
    acf.show()

    # 分析 PACF
    pacf = plot_pacf(stock_train, lags=20)
    plt.title("股票指数的 PACF")
    pacf.show()

    # 3. 处理数据,平稳化数据
    # 这里只是简单第做了一节差分,还有其他平稳化时间序列的方法
    stock_diff = stock_train.diff()
    diff = stock_diff.dropna()
    print(diff.head())
    print(diff.dtypes)

    plt.figure()
    plt.plot(diff)
    plt.title('一阶差分')
    plt.show()

    acf_diff = plot_acf(diff, lags=20)
    plt.title("一阶差分的 ACF")
    acf_diff.show()

    pacf_diff = plot_pacf(diff, lags=20)
    plt.title("一阶差分的 PACF")
    pacf_diff.show()

    # 4. 根据ACF和PACF定阶并建立模型
    model = ARIMA(stock_train, order=(1, 1, 1), freq='W-MON')
    # 拟合模型
    arima_result = model.fit()
    print(arima_result.summary())

    # 5. 预测

    pred_vals = arima_result.predict(start=str('2019-01'),end=str('2019-03'),
                                     dynamic=False, typ='levels')
    print(pred_vals)

    # 6. 可视化预测结果
    stock_forcast = pd.concat([stock_s, pred_vals], axis=1, keys=['original', 'predicted'])

    plt.figure()
    plt.plot(stock_forcast)
    plt.title('真实值vs预测值')
    plt.savefig('./stock_pred.png', format='png')
    plt.show()


if __name__ == '__main__':
    run_main()

运行:
在这里插入图片描述

2017-11-22 18:55:56 wolf1132 阅读数 28078
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93894 人正在学习 去看看 唐宇迪

财经数据接口包tushare的使用(一)

Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据、年度季度报表数据、实时分笔数据、历史分笔数据,本文对tushare的用法,已经存在的一些问题做一些介绍。
一:安装tushare

为避免由于依赖包缺失导致安装失败,请先安装anaconda,百度网盘地址:
链接:http://pan.baidu.com/s/1qYDQUGs 密码:6wq8
安装直接一直下一步即可
安装完成之后,anaconda会自动配置环境变量,直接就可以用了,cmd打开命令行窗口,使用命令
pip install tushare
即可安装tushare
二:tushare的使用

1、获取历史数据之get_hist_data
参数说明:
• code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
• start:开始日期,格式YYYY-MM-DD
• end:结束日期,格式YYYY-MM-DD
• ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
• retry_count:当网络异常后重试次数,默认为3
• pause:重试时停顿秒数,默认为0
返回值说明:
• date:日期
• open:开盘价
• high:最高价
• close:收盘价
• low:最低价
• volume:成交量
• price_change:价格变动
• p_change:涨跌幅
• ma5:5日均价
• ma10:10日均价
• ma20:20日均价
• v_ma5:5日均量
• v_ma10:10日均量
• v_ma20:20日均量
• turnover:换手率[注:指数无此项]
调用方法:
例一:
import tushare as ts
data=ts.get_hist_data(‘300032’)
print(data)

结果展示:
open high close low volume price_change p_change \
date
2017-11-22 13.89 13.96 13.95 13.77 19670.56 -0.02 -0.14
2017-11-21 13.97 13.98 13.97 13.77 23196.87 -0.01 -0.07
2017-11-20 13.90 14.02 13.98 13.68 23114.10 0.01 0.07
2017-11-17 13.87 13.97 13.97 13.67 39828.91 0.00 0.00
2017-11-16 13.98 14.09 13.97 13.86 18029.02 -0.04 -0.29
2017-11-15 14.37 14.37 14.01 13.88 31731.32 -0.37 -2.57
2017-11-14 14.00 14.43 14.38 14.00 49168.37 0.32 2.28

           ma5    ma10    ma20     v_ma5    v_ma10    v_ma20  turnover  

date
2017-11-22 13.968 14.046 14.044 24767.89 26789.33 28602.29 0.26
2017-11-21 13.980 14.048 14.054 27180.04 27617.60 28540.55 0.31
2017-11-20 14.062 14.043 14.064 32374.34 28650.48 28455.20 0.31
2017-11-17 14.078 14.038 14.083 31644.05 29352.32 28141.07 0.53
2017-11-16 14.114 14.039 14.099 28582.57 29823.22 27169.73 0.24
2017-11-15 14.124 14.042 14.118 28810.76 30467.91 27007.47 0.42
2017-11-14 14.116 14.046 14.132 28055.16 30117.38 26536.15 0.66

请读者注意,文档中的注释并不准确,使用该接口并不能获取股票自上市以来的所有日线数据,例如这里举的例子,金龙机电这只股票(2009年12月25日上市)。
请再看例子:
例二:
import tushare as ts
data=ts.get_hist_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’)
print(data)

返回结果是:
Empty DataFrame
Columns: [open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover]
Index: []
可以看到,这几行代码返回的数据为一个空的dataframe,这是网页文章中没有详细说明的问题在这里指出。如何解决这个问题,请关注微信公众号【数据之佳】,注意是才子佳人的佳,该公众号分享量化分析模型,讲解一些比较好的模型,工具等等,tushare的使用公众号中有更详细的介绍。公众号也会讲解如何用其他方式获取更稳定可靠的数据

2、获取历史数据之get_h_data
作者提供另外一个函数get_h_data用于获取股票历史数据,该函数的调用网页文档没有给出例子,在这里依然用上面的例子来作测试:
例三:
import tushare as ts
data=ts.get_h_data(‘300032’)
print(data)

返回结果:
open high close low volume amount
date
2017-11-22 13.89 13.96 13.95 13.77 1967056.0 27282987.0
2017-11-21 13.97 13.98 13.97 13.77 2319687.0 32194061.0
2017-11-20 13.90 14.02 13.98 13.68 2311410.0 32033838.0
2017-11-17 13.87 13.97 13.97 13.67 3982891.0 54911258.0
……
2016-11-24 17.31 17.42 17.17 17.15 3799600.0 66045345.0
2016-11-23 17.37 17.51 17.27 17.24 5008208.0 87687070.0
2016-11-22 17.37 17.41 17.40 17.20 4536796.0 79050365.0
[246 rows x 6 columns]

在不指定开始时间和结束时间时,该函数默认返回最近一年的日线数据,返回的数据与get_hist_data不同的是,该函数只返回开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、成交金额(amount)六列
同样的,测试一下该接口能不能获取更早一些的数据:

import tushare as ts
data=ts.get_h_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’)
print(data)

返回结果:
[Getting data:]# open high close low volume amount
date
2011-04-29 14.18 14.41 14.41 13.96 444287.0 10930304.0
2011-04-28 14.60 14.66 14.10 13.86 2550197.0 63069508.0
2011-04-27 14.50 14.67 14.44 14.26 457503.0 11427143.0
2011-04-26 14.82 14.82 14.41 14.31 628685.0 15732398. ……
2011-01-04 13.14 13.23 13.21 12.84 1099825.0 24814884.0
[77 rows x 6 columns]

可以看到,相比于get_hist_data,该函数能够返回较早一些的数据,但没有换手率,均线数据这些指标,当然,我们可以获取到数据之后,自己写个脚本计算均线这些信息,但是如果要自己计算换手率,就必须知道股票的市值是多少,这两个函数都没有返回关于股票市值的信息,因此如果要自己计算换手率,就得从其他地方获取股票每个交易日的市值信息。

3、获取历史数据之:get_k_data
作者提供了第三个获取K线数据的函数,get_k_data,参数与get_hist_data相同。

例四:
import tushare as ts
data=ts.get_k_data(‘300032’)
print(data)
返回结果:
date open close high low volume code
0 2015-02-02 12.914 13.742 14.086 12.914 56295.0 300032
1 2015-02-03 13.742 14.377 14.500 13.742 63588.0 300032
2 2015-02-04 14.412 14.510 14.761 13.791 35558.0 300032
3 2015-02-05 14.520 14.471 14.751 14.224 34088.0 300032
4 2015-02-06 14.648 14.343 14.648 13.845 35039.0 300032
5 2015-02-09 14.372 14.062 14.549 13.904 24195.0 300032

与前两个函数相比,这个函数获取数据的速度很明显要快很多,而且可以返回每一只股票从上市开始到当前交易日的所有日线数据,这个有点是前两个函数都不具备的,读者可以自己验证一下,get_h_data可以返回比get_hist_data更早一些的数据,但是对于有些股票依然不能获取很早的数据,更重要的是,如果批量3000多只股票的数据,前两个都不如get_k_data稳定,我一开始搜集数据的时候,为了获取更全面的数据,用的是get_hist_data,但是批量获取,反反复复跑脚本,没有一次是能够将数据完整获取完的,每一次都是中途就挂了,读者可以自己测试一下,间隔时间长一些应该没问题,不过我后来已经知道其他的解决办法,既能够获取全面的数据,同时也不必担心速度的问题,怎么获取一样会在微信公众号【数据之佳】介绍,这里先介绍tushare

4、获取实时行情数据get_today_all()
返回值说明:
• code:代码
• name:名称
• changepercent:涨跌幅
• trade:现价
• open:开盘价
• high:最高价
• low:最低价
• settlement:昨日收盘价
• volume:成交量
• turnoverratio:换手率
• amount:成交量
• per:市盈率
• pb:市净率
• mktcap:总市值
• nmc:流通市值
该函数没有参数,直接调用即可
测试:
例五:
import tushare as ts
data=ts.get_today_all()
print(data)
返回值:
[Getting data:]############################################################ code name changepercent trade open high low settlement \
0 603999 读者传媒 -0.622 7.99 8.03 8.11 7.92 8.04
1 603998 方盛制药 -2.535 12.69 13.00 13.13 12.58 13.02
2 603997 继峰股份 -1.529 11.59 11.77 11.86 11.50 11.77
……
volume turnoverratio amount per pb mktcap \
0 2208414.0 0.95851 17697355.0 27.552 2.759 4.602240e+05
1 2733900.0 1.01565 34976989.0 79.313 5.471 5.468584e+05
2 1848500.0 1.08099 21572699.0 19.644 4.428 7.301700e+05
nmc
0 1.840896e+05
1 3.415859e+05
2 1.981890e+05
…….
[3446 rows x 15 columns]

限于篇幅,这里只贴出前三行数据,get_today_all()获取了所有股票的当前行情数据,但是获取一次数据的耗时比较长,读者可以自己在实时行情和盘后自己测试一下,看看会不会挂,整体延时有多久等等

5、历史分笔数据之:get_tick_data
参数说明:
code:股票代码,即6位数字代码
date:日期,格式YYYY-MM-DD
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

该函数返回指定日期的历史分笔数据,但由于历史分笔数据很耗空间,所以一般服务器都不会存储很长时间的历史分笔数据,该接口也一样,并不能获取从上市以来的所有日期的分笔数据。
例六:
import tushare as ts
data=ts.get_tick_data(‘300032’,’2017-11-01’)
print(data)

返回结果:
time price change volume amount type
0 15:00:03 14.05 -0.01 371 521255 卖盘
1 14:57:03 14.06 0.01 1 1406 买盘
2 14:56:57 14.05 – 92 129260 卖盘
3 14:56:54 14.05 – 20 28100 卖盘
……
1526 09:30:36 14.10 -0.02 159 224190 中性盘
1527 09:30:06 14.12 14.12 7 9884 买盘
[1528 rows x 6 columns]

6、实时分笔数据之get_realtime_quotes
参数说明:
• symbols:6位数字股票代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板) 可输入的类型:str、list、set或者pandas的Series对象
例八:
import tushare as ts
data=ts.get_realtime_quotes(‘300032’)
print(data)
name open pre_close price high low bid ask volume \
0 金龙机电 13.890 13.970 13.950 13.960 13.770 13.940 13.950 1967056
amount … a2_p a3_v a3_p a4_v a4_p a5_v a5_p \
0 27282987.240 … 13.960 741 13.970 547 13.980 332 13.990
date time code
0 2017-11-22 16:28:03 300032
[1 rows x 33 columns]

该接口返回的数据量较小,还是比较快的,读者可以自己在实时行情中和盘后自己测试一下

6、当日历史分笔之get_today_ticks
参数说明:
code:股票代码,即6位数字代码
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

例九
import tushare as ts
data=ts.get_today_ticks(‘300032’)
print(data)

返回值
[Getting data:]################# time price pchange change volume amount type
0 15:00:03 14.36 +2.79 0.00 938 1346968 卖盘
1 14:57:00 14.36 +2.79 0.01 2 2872 卖盘
2 14:56:57 14.35 +2.72 -0.01 27 39463 卖盘
……
984 09:25:03 13.89 -0.57 0.00 27 37503 0
[985 rows x 7 columns]

该接口返回当前日期,当前时刻的所有粉笔成交数据,相比于上一个接口,速度慢很多,也请读者自己测试

7、大单交易数据之get_sina_dd
获取大单交易数据,默认为大于等于400手,数据来源于新浪财经。
参数说明:
• code:股票代码,即6位数字代码
• date:日期,格式YYYY-MM-DD
• vol:手数,默认为400手,输入数值型参数
• retry_count : int, 默认3,如遇网络等问题重复执行的次数
• pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
返回值说明:
• code:代码
• name:名称
• time:时间
• price:当前价格
• volume:成交手
• preprice :上一笔价格
• type:买卖类型【买盘、卖盘、中性盘】
例10:
import tushare as ts
data=ts.get_sina_dd(‘300032’,’2017-11-1’)
print(data)

返回值
code name time price volume preprice type
0 300032 金龙机电 14:45:54 13.97 91900 14.00 卖盘
1 300032 金龙机电 10:51:36 14.10 57488 14.11 卖盘
2 300032 金龙机电 10:19:42 14.05 50000 14.06 卖盘
3 300032 金龙机电 09:38:36 14.03 42800 14.02 买盘

借助于tushare,其实我们已经可以做一些量化分析和策略了,但是tushare在实际使用中,有一些不经如人意的地方,我在使用中遇到的问题,同时也自己优化了一一些地方,实在不满意的数据,从其他地方用自己想办法获取,对于tushare已经可以做得很好的就不洗自己再去做了,想要了解怎样获取更全面的数据,学习如何将机器学习算法和数据分析方法运用到自己的量化模型当中,请关注微信公众号【数据之佳】,我们将不定期更新文章
这里写图片描述

2018-07-22 19:43:44 weixin_39778570 阅读数 16462
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93894 人正在学习 去看看 唐宇迪

所有资料汇总学习:点这里

利用python进行数据分析

Numpy

Numpy简单使用(入门)

Pandas入门

Pandas入门系列(一)-- Series
Pandas入门系列(二)-- DataFrame
Pandas入门系列(三)-- 深入理解Series和DataFrame
Pandas入门系列(四) – Pandas io操作
Pandas入门系列(五) – Indexing和Selecting
Pandas入门系列(六) – reindex
Pandas入门系列(七) – NaN
Pandas入门系列(八) – 多级index
Pandas入门系列(九) – Map和replace

pandas进阶

Pandas玩转数据(一) – 简单计算
Pandas玩转数据(二) – Series和DataFrame排序
Pandas玩转数据(三) – DataFrame重命名
Pandas玩转数据(四) – DataFrame的merge
Pandas玩转数据(五) – Concatenate和Combine
Pandas玩转数据(六) – 通过apply对数据进行处理
Pandas玩转数据(七) – Series和DataFrame去重
Pandas玩转数据(八) – 时间序列简单操作
Pandas玩转数据(九) – 时间序列的采样和画图
Pandas玩转数据(十) – 数据分箱技术Binning
Pandas玩转数据(十一) – 数据分组技术Groupby
Pandas玩转数据(十二) – 数据聚合技术Aggregation
Pandas玩转数据(十三) – 透视表
Pandas玩转数据(十四) – 分组和透视功能实战

Matplotlib入门

Matplotlib简单画图(一) – plot
Matplotlib简单画图(二) – subplot
Matplotlib简单画图(三) – pandas绘图之Series
Matplotlib简单画图(四) – pandas绘图之DataFrame
Matplotlib简单画图(五) – 直方图和密度图

Matplotlib扩展之Seaborn

Seaborn简单画图(一) – 散点图
Seaborn简单画图(二) – 直方图和密度图
Seaborn简单画图(三) – 柱状图和热力图
Seaborn简单画图(四) – 设置图形显示效果
Seaborn简单画图(五) – Seaborn调色功能

获取数据的一个库Tushare

Tushare获取数据

简单实战

股票市场分析实战

没有更多推荐了,返回首页