zoukankan      html  css  js  c++  java
  • 练习:万达院线股价分析

    万达院线股价分析

    数据来源:新浪财经、腾讯财经、上交所和深交所

    分析时间:2017/9/11

    分析目的:分析维度练习

    数据采集

    1.基本面数据

    #coding=utf-8
    import pandas as pd
    import tushare as ts
    
    #获取万达院线(股票代码002739)第2季度的基本面数据,可能未更新没有输出
    b1 = ts.get_report_data(2017,2)  #业绩报告
    b2 = ts.get_profit_data(2017,2)  #盈利能力
    b3 = ts.get_operation_data(2017,2)  #营运能力
    b4 = ts.get_growth_data(2017,2)  #成长能力
    b5 = ts.get_debtpaying_data(2017,2)  #偿债能力
    b6 = ts.get_cashflow_data(2017,2)  #现金流量
    basic = pd.concat([b1,b2,b3,b4,b5,b6])
    bData = basic.ix[{'code':'002739'}]
    #print bData
    #basic.to_csv('C:/Users/HP/Desktop/601988basic.csv',encoding = 'utf-8')

    2.历史行情

    #coding=utf-8
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from pandas import Series,DataFrame
    from matplotlib.pylab import datestr2num
    import matplotlib.finance as mpf
    
    data = ts.get_hist_data('002739',start='2017-01-01')
    data.describe()

    数据分析

    频率分析

    1.可视化维度信息

    import scipy.stats as st
    
    openY = st.norm.fit(data['open'])
    print '拟合函数',openY
    
    mu, sigma = 55.37, 2.17
    xs = data['open']
    F = st.norm.pdf(xs, loc=mu, scale=sigma)
    
    plt.plot(xs, F,label='Norm Distribution')
    plt.legend(loc = 'best')
    plt.show()
    
    print 'mean of data is: ' + str(np.mean(F))
    print 'standard deviation of data is: ' + str(np.std(F))

    2.计算收益分布

    import tushare as ts
    %matplotlib inline
    
    data = ts.get_hist_data('002739',start='2017-01-01')['p_change']  #p_change涨跌幅
    print data
    data[-1] = 1
    returns = (1 + data).cumprod()-1
    #print returns
    
    #累计收益
    returns.plot(legend = True,figsize = (15,10))

     注:收益分布图两段趋平,暂时还没搞清楚是什么原因

     探索性分析

    1.分析均价、收盘价、均量、成交量、换手率等指标相关性

    #散点图分析各指标的相关性
    data = ts.get_hist_data('002739',start='2017-01-01')
    pieces = data[['close', 'price_change', 'ma20','volume', 'v_ma20', 'turnover']]
    pd.scatter_matrix(pieces)
    
    cov = np.corrcoef(pieces.T)
    img = plt.matshow(cov,cmap=plt.cm.winter)
    plt.colorbar(img, ticks=[-1,0,1])
    plt.show()

    2.移动窗口和指数加权

    data = ts.get_hist_data('002739',start='2017-01-01')['close']
    fig,ax = plt.subplots(figsize=(20,10))
    #移动窗口中位数
    ma100 = pd.rolling_mean(data,10,min_periods = 10)
    plt.subplot(211)
    data.plot(style = 'k-',label = 'nomal')
    ma100.plot(style = 'k--',label = 'Simple MA')
    plt.legend(loc = 'best')
    plt.grid(True)
    
    plt.subplot(212)
    ewma100 = pd.ewma(data,span = 10)
    data.plot(style = 'k-',label = 'nomal')
    ewma100.plot(style = 'k--',label = 'Exponetially-weighted MA')
    plt.legend(loc = 'best')
    plt.grid(True)

     关系分析

    from pyecharts import Kline
    
    data = ts.get_hist_data('002739',start='2017-01-01')
    new_data = data.ix[:,['open','close','high','low']]
    train_data = np.array(new_data)
    train_index = np.array(data.index)
    
    kline = Kline("2017年万达院线K线图")
    kline.add("每日K线",train_index.tolist() ,train_data.tolist())
    kline

    注:matplotlib画K线图可能出现断裂,使用pyechart画K线图比matplotlib简便,pyechart需要的数据类型为列表

    plt.rc('font', family='SimHei', size=13)  #解决图例中文乱码
    """
    画图的三种写法:
    fig,axes = plt.subplots(1,1,figsize=(22,10))
    1.plt.plot(data):最直接的写法
    2.plt.plot_date(x_date,data['high']):用于多个趋势图
    3.data[['close','volume']].plot(ax =axes): 数据类型直接绘图
    """
    
    #最高价、开盘价与收盘价
    data = ts.get_hist_data('002739',start='2017-01-01')
    x = range(len(data))
    x_date = [datestr2num(i) for i in data.index]
    
    plt.figure(figsize=(22,10))
    plt.title(u"2017年万达院线历史最高价、开盘价与收盘价走势折线图")
    plt.xlabel(u"时间")
    plt.ylabel(u"指数")
    plt.plot_date(x_date,data['high'],'-',color='r',label=u"最高价")
    plt.plot_date(x_date,data['open'],'-',color='g',label=u"开盘价")
    plt.plot_date(x_date,data['close'],'-',color='b',label=u"收盘价")
    plt.legend()
    plt.grid(True)
    
    #收盘价与成交量
    fig,axes = plt.subplots(1,1,figsize=(22,10))
    plt.title(u"2017年万达院线收盘价和成交量趋势折线图")
    data[['close','volume']].plot(ax =axes,secondary_y='volume', grid=True)
    
    
    #日均线与换手率
    fig = plt.figure(figsize=(22,15))
    ax1 = plt.subplot2grid((4,4),(0,0),rowspan = 3,colspan = 4)
    #plt.subplot(211)  这样两子图的大小相同,展示不好看
    Ma5 = data['ma5']
    Ma5.plot(kind = 'line',ax = ax1,color = 'r',label=u"5日均价")
    Ma10 = data['ma10']
    Ma10.plot(kind = 'line',ax = ax1,color = 'g',label=u"10日均价")
    Ma20 = data['ma20']
    Ma20.plot(kind = 'line',ax = ax1,color = 'b',label=u"20日均价")
    plt.legend(loc = 'best')
    plt.grid(True)
    
    #plt.subplot(212)
    ax2 = plt.subplot2grid((4,4),(3,0),rowspan = 1,colspan = 4)
    TurnOver = data['turnover']
    TurnOver.plot(kind='bar',ax = ax2,color = 'black')
    
    ax1.set_title(u"2017年万达院线日均价折线图")
    ax1.set_ylabel(u"股价(元)")
    ax2.set_ylabel(u"换手率")
    ax2.set_xlabel(u"日期")
    plt.grid(True)
    
    plt.setp(ax1.get_xticklabels(),visible = False)
    plt.setp(ax1.yaxis.get_ticklabels()[0],visible = False)  #隐藏y轴的第一个标签
    plt.subplots_adjust(bottom = 0.2,top = 0.9,hspace = 0)  #调整子图间距
    plt.show()

     其它

    tushare提供获取全国影院单日票房排行数据的接口,可以通过特定日期(比如股价涨停日等)观察万达影院票房信息

    df = ts.day_cinema('2017-06-07') #取指定日期的数据
    df.head(10)

    注:tushare数据只更新到2017/07/03

  • 相关阅读:
    Delphi程序结构
    SQL存储过程解密 Encrypted object is not transferable, and script can not be generated

    在河南呢
    还在河南,写随笔吧
    HAVING
    mIRC
    关于CAP理论
    开篇
    移动信息系统
  • 原文地址:https://www.cnblogs.com/Ryana/p/7490838.html
Copyright © 2011-2022 走看看