通过tushare获取贵州茅台和中国平安历史交易数据并使用plotly进行可视化分析
贵州茅台:赤水河永流淌
贵州茅台酒股份有限公司总部位于中国贵州省遵义市茅台镇,其主导产品贵州茅台酒历史悠久、源远流长,具有深厚的文化内涵,是我国大曲酱香型白酒的鼻祖和典范代表,也是具有特色的绿色食品、有机食品和地理标志性产品。
中国平安:有后盾才会有安全感
中国平安是国内金融牌照最齐全的金融服务集团,业务有车险、意外保险、重疾险、小额贷款、信用贷款、投资理财产品、平安普惠、平安信用卡、平安保险、平安银行等
Plotly
Plotly 是一款用来做数据分析和可视化的在线平台,功能非常强大,可以在线绘制很多图形比如条形图、散点图、饼图、直方图等等。
而且还是支持在线编辑,以及多种语言python、javascript、matlab、R等许多API。
它在python中使用也很简单,直接用pip install plotly就可以了。推荐最好在jupyter notebook中使用,pycharm操作不是很方便。使用Plotly可以画出很多媲美Tableau的高质量图。
Plotly也对对应的免费的offline模式
Plotly生成的图像是动态的(底层是javascript)支持许多的自定义的后处理功能;

Tushare
Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。
 #需要安装的python包
# pip install tushare
#pip install plotly
#加载需要的画图包plotly
  
   - 
    
     
    
    
     
      from plotly.offline 
      import download_plotlyjs,init_notebook_mode,plot
     
    
- 
    
     
    
    
     
      import plotly.graph_objs 
      as go
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      from plotly.offline 
      import init_notebook_mode
     
    
- 
    
     
    
    
     
      init_notebook_mode(connected = 
      True)
     
    
# 600519 是贵州茅台
  
   - 
    
     
    
    
     
      import tushare as ts
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #
     
    
- 
    
     
    
    
     
      # https://tushare.pro/document/2
     
    
- 
    
     
    
    
     
      # , start_date='20140601', end_date='20210511'
     
    
- 
    
     
    
    
     
      stock = ts.get_hist_data('
      600519',start = '
      2014-
      06-
      10',end ='
      2021-
      05-
      11',ktype = 'W')
     
    
  
   - 
    
     
    
    
     
      stock
      .shape
     
    
- 
    
     
    
    
     
      stock
      .tail()
     
    
stock.columns 
 Index(['open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change',
       'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover'],
      dtype='object')
 
 

#旧API说明:
# code:string
# 股票代码 e.g. 600848
# start:string
# 开始日期 format:YYYY-MM-DD 为空时取到API所提供的最早日期数据
# end:string
# 结束日期 format:YYYY-MM-DD 为空时取到最近一个交易日数据
# ktype:string
# 数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
# retry_count : int, 默认 3
# 如遇网络等问题重复执行的次数
# pause : int, 默认 0
# 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
# 做贵州茅台的K线图:
  
   - 
    
     
    
    
     
      import 
      plotly as py
     
    
- 
    
     
    
    
     
      import 
      plotly.graph_objs as go
     
    
- 
    
     
    
    
     
      import 
      pandas as pd
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      fig = 
      go.Figure()
     
    
- 
    
     
    
    
     
      
     
    
- 
    
     
    
    
     
      # -------------pre def
     
    
- 
    
     
    
    
     
      pyplt = 
      py.offline.plot
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      trace = 
      go.Candlestick(x=stock.index,
     
    
- 
    
     
    
    
                     
      open=
      stock.open,
     
    
- 
    
     
    
    
                     
      high=
      stock.high,
     
    
- 
    
     
    
    
                     
      low=
      stock.low,
     
    
- 
    
     
    
    
                     
      close=
      stock.close,
     
    
- 
    
     
    
    
                     
      increasing=
      dict(line=dict(color='red')),
     
    
- 
    
     
    
    
                     
      decreasing=
      dict(line=dict(color='green'))
     
    
- 
    
     
    
    
                     
      )
     
    
- 
    
     
    
    
     
      data = 
      [trace]
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      fig = 
      go.Figure(data=data, layout=layout)
     
    
- 
    
     
    
    
     
      # fig = go.Figure(data=data, layout=layout)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      plot_url = 
      pyplt(fig)
     
    
- 
    
     
    
    
     
      iplot(fig)
     
    

# 绘制贵州茅台的均线图:
  
   - 
    
     
    
    
     
      import 
      plotly as py
     
    
- 
    
     
    
    
     
      import 
      plotly.graph_objs as go
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      pyplt = 
      py.offline.plot
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      trace1 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.ma5,
     
    
- 
    
     
    
    
         
      name=
      'ma5'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace2 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.ma10,
     
    
- 
    
     
    
    
         
      name=
      'ma10'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace3 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.ma20,
     
    
- 
    
     
    
    
         
      name=
      'ma20'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace4 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.v_ma5,
     
    
- 
    
     
    
    
         
      name=
      'v_ma5',
     
    
- 
    
     
    
    
         
      yaxis=
      'y2'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace5 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.v_ma10,
     
    
- 
    
     
    
    
         
      name=
      'v_ma10',
     
    
- 
    
     
    
    
         
      yaxis=
      'y2'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace6 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock.index,
     
    
- 
    
     
    
    
         
      y=
      stock.v_ma20,
     
    
- 
    
     
    
    
         
      name=
      'v_ma20',
     
    
- 
    
     
    
    
         
      yaxis=
      'y2'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      data = 
      [trace1, trace2, trace3, trace4, trace5, trace6]
     
    
- 
    
     
    
    
     
      layout = 
      go.Layout(
     
    
- 
    
     
    
    
         
      title=
      'multi_y_aixs',
     
    
- 
    
     
    
    
     
      # width=800,
     
    
- 
    
     
    
    
     
      # xaxis=dict(
     
    
- 
    
     
    
    
     
      # domain=[0.3, 0.7]
     
    
- 
    
     
    
    
     
      # ),
     
    
- 
    
     
    
    
         
      yaxis=
      dict(
     
    
- 
    
     
    
    
             
      title=
      'movingaverage',
     
    
- 
    
     
    
    
             
      titlefont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#1f77b4'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      tickfont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#1f77b4'
     
    
- 
    
     
    
    
             
      )
     
    
- 
    
     
    
    
         
      ),
     
    
- 
    
     
    
    
         
      yaxis2=
      dict(
     
    
- 
    
     
    
    
             
      title=
      'movingvolume',
     
    
- 
    
     
    
    
             
      titlefont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#ff7f0e'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      tickfont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#ff7f0e'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      anchor=
      'free',
     
    
- 
    
     
    
    
             
      overlaying=
      'y',
     
    
- 
    
     
    
    
             
      side=
      'left',
     
    
- 
    
     
    
    
             
      position=
      1
     
    
- 
    
     
    
    
         
      )
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      fig = 
      go.Figure(data=data, layout=layout)
     
    
- 
    
     
    
    
     
      plot_url = 
      pyplt(fig)
     
    
- 
    
     
    
    
     
      iplot(fig)
     
    

# 通过新接口获取中国平安的交易数据:
  
   - 
    
     
    
    
     
      # mail:liguangdi1987@126.com
     
    
- 
    
     
    
    
     
      # cipher:pro.share
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      ts.set_token('
      13d
      52c
      9503d
      019cf
      69eea
      2f
      1ec
      185b
      7f
      52cee
      6b
      68a
      93825972de
      83aa')
     
    
- 
    
     
    
    
     
      pro = ts.pro_api()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      stock_new = pro.daily(ts_code='
      601318.SH', start_date='
      20140601', end_date='
      20210511',ktype = 'W')
     
    
- 
    
     
    
    
     
      # weekly,monthly,moneyflow,pledge_stat
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      stock_new.shape
     
    

# 进行日期格式处理
stock_new['trade_date'] = pd.to_datetime(stock_new['trade_date'])# 画图获取中国平安的收盘价和成交量:
  
   - 
    
     
    
    
     
      import 
      plotly as py
     
    
- 
    
     
    
    
     
      import 
      plotly.graph_objs as go
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      pyplt = 
      py.offline.plot
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      trace1 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock_new.trade_date,
     
    
- 
    
     
    
    
         
      y=
      stock_new.close,
     
    
- 
    
     
    
    
         
      name=
      'shoupanjia'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      trace2 = 
      go.Scatter(
     
    
- 
    
     
    
    
         
      x=
      stock_new.trade_date,
     
    
- 
    
     
    
    
         
      y=
      stock_new.vol,
     
    
- 
    
     
    
    
         
      name=
      'duoshaoshou',
     
    
- 
    
     
    
    
         
      yaxis=
      'y2'
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      data = 
      [trace1, trace2]
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      layout = 
      go.Layout(
     
    
- 
    
     
    
    
         
      title=
      'liangjiqqifei',
     
    
- 
    
     
    
    
     
      # width=800,
     
    
- 
    
     
    
    
     
      # xaxis=dict(
     
    
- 
    
     
    
    
     
      # domain=[0.3, 0.7]
     
    
- 
    
     
    
    
     
      # ),
     
    
- 
    
     
    
    
         
      yaxis=
      dict(
     
    
- 
    
     
    
    
             
      title=
      'shoupan',
     
    
- 
    
     
    
    
             
      titlefont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#1f77b4'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      tickfont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#1f77b4'
     
    
- 
    
     
    
    
             
      )
     
    
- 
    
     
    
    
         
      ),
     
    
- 
    
     
    
    
         
      yaxis2=
      dict(
     
    
- 
    
     
    
    
             
      title=
      'shoushu',
     
    
- 
    
     
    
    
             
      titlefont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#ff7f0e'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      tickfont=
      dict(
     
    
- 
    
     
    
    
                 
      color=
      '#ff7f0e'
     
    
- 
    
     
    
    
             
      ),
     
    
- 
    
     
    
    
             
      anchor=
      'free',
     
    
- 
    
     
    
    
             
      overlaying=
      'y',
     
    
- 
    
     
    
    
             
      side=
      'left',
     
    
- 
    
     
    
    
             
      position=
      1
     
    
- 
    
     
    
    
         
      )
     
    
- 
    
     
    
    
     
      )
     
    
- 
    
     
    
    
     
      fig = 
      go.Figure(data=data, layout=layout)
     
    
- 
    
     
    
    
     
      plot_url = 
      pyplt(fig)
     
    
- 
    
     
    
    
     
      iplot(fig)
     
    

由此可以对比贵州茅台和中国平安的走势并进行自定义的可视化和分析;
参考:tushare
参考:plotly
参考:Plotly之高级使用说明
转载:https://blog.csdn.net/zhongkeyuanchongqing/article/details/116802185
