C13-1 python對(duì)股票(科大訊飛)數(shù)據(jù)可視化

在大數(shù)據(jù)時(shí)代對(duì)數(shù)據(jù)按自己理解的進(jìn)行可視化是非常關(guān)鍵的一部脐嫂。我們以科大訊飛這一股票從14-11至17-11的數(shù)據(jù)進(jìn)行可視化。我們還是以最簡(jiǎn)單的均線系統(tǒng)規(guī)律來(lái)確立簡(jiǎn)單的買賣點(diǎn)紊遵。版本python3账千。經(jīng)歷的步驟有:

1、提取數(shù)據(jù)暗膜;
2匀奏、解析數(shù)據(jù),得到我們想要的數(shù)據(jù)学搜;
3娃善、對(duì)數(shù)據(jù)進(jìn)行一定處理,便于可視化瑞佩;
4聚磺、可視化;以下是代碼:

  # !/usr/bin/env python
  # -*- encoding: utf-8 -*-

  import sys
  import importlib

  importlib.reload(sys)

  import pandas as pd
  import matplotlib as mpl
  import matplotlib.pyplot as plt
  import numpy as np


  def rowIndex(row):
      """添加需要的標(biāo)記和標(biāo)記位置"""
      global plt

      if row.signal > 0:
          #標(biāo)圖示annotate
          plt.annotate(u'b', xy=(row.date_o, row.signal),     #xy表示被標(biāo)注的位置
                       arrowprops=dict(facecolor='red', shrink=0.05))

      if row.signal < 0:
          plt.annotate(u's', xy=(row.date_o, row.signal))


  if __name__ == '__main__':

      #用lambda表達(dá)式將日期轉(zhuǎn)換為字符格式
      daterparse1 = lambda dates: pd.datetime.strptime(dates, "%Y-%m-%d")

      #以特定格式和方式讀取csv文件,pandas讀取文件成為DataFrame對(duì)象或者Series對(duì)象
      s_list = pd.read_csv('kd.csv', skiprows=0, encoding='utf-8',
                           index_col='date', parse_dates=True,
                           date_parser=daterparse1)

      s_list['date_o'] = s_list.index   #將DataFrame對(duì)象(本身就是字典)的索引存為            原日期的字典
      s_list['ma_sub'] = s_list['ma5'] - s_list['ma20']
      s_list['diff'] = np.sign(s_list['ma_sub'])     #返回?cái)?shù)組中的正負(fù)號(hào)炬丸,分別用1和-1表示
      #shift為對(duì)齊操作
      s_list['signal'] = np.sign(s_list['diff'] - s_list['diff'].shift(1))

      s_list['signal'].plot(ylim=(-2, 2))
      (s_list['close']/40).plot(ylim=(-2, 2))

      s_list.apply(rowIndex, axis=1)      #對(duì)DataFrame對(duì)象的行(axis=1)使用apply方法#返回行索引對(duì)應(yīng)的Series對(duì)象

      plt.legend(loc='upper right')       #設(shè)置圖例顯示的位置
      # plt.legend(loc=4)       #upper right/left=1/2;lower left/right=3/4
      plt.grid(b=True)
      plt.title(u'Ma5--Ma20 to When Buy Or Sell', fontsize=18)

      plt.show()
      # plt.savefig('002230_mod.png', bbox_inches='tight')      

代碼解析:
1瘫寝、需要用到的包,sys稠炬,matplotlib焕阿,pandas,numpy酸纲;

2捣鲸、提取數(shù)據(jù),我們用到的是csv格式數(shù)據(jù)闽坡,相應(yīng)代碼的功能在代碼中已注釋栽惶,首先以自定義方式讀取數(shù)據(jù),我們需要用到日期疾嗅,收盤價(jià)外厂,5日平均及20日平均價(jià)格;其中index_col關(guān)鍵字為指定以哪列數(shù)據(jù)為索引構(gòu)建DataFrame數(shù)據(jù)代承;我們首先看看數(shù)據(jù)是什么樣的:


數(shù)據(jù)示例.png

對(duì)其提取之前先要對(duì)日期格式做一個(gè)調(diào)整汁蝶;lambda可實(shí)現(xiàn)這一功能。parse_dates是對(duì)時(shí)間序列進(jìn)行解析(為真);data_parser為解析日期的函數(shù)——有一個(gè)默認(rèn)函數(shù)掖棉,但使用我們自己定義的函數(shù)墓律;

3、對(duì)數(shù)據(jù)進(jìn)行一系列處理幔亥,提取日期數(shù)據(jù)耻讽;求出均線差值:得出變化范圍的標(biāo)志;得出標(biāo)記信號(hào)帕棉;限制繪圖數(shù)據(jù)范圍针肥,避免溢出看不出趨勢(shì)。

4香伴、定義標(biāo)記函數(shù):用annotate函數(shù)實(shí)現(xiàn)按預(yù)期指定標(biāo)記——標(biāo)記符號(hào)慰枕,位置,箭頭顏色和大屑锤佟具帮;按照行的信號(hào)大小來(lái)標(biāo)記;大于0崇裁,標(biāo)為買匕坯,小余0,標(biāo)為賣拔稳;

5葛峻、可視化,利用定義的信號(hào)及收盤價(jià)巴比、日期來(lái)繪制圖表术奖。以下是輸出結(jié)果:

002230_mod.png

投資時(shí)點(diǎn)是一個(gè)極其重要的參考指標(biāo),為使買賣信號(hào)更清晰轻绞,便于提示我們什么時(shí)候進(jìn)行買賣采记,我們可以把出現(xiàn)轉(zhuǎn)機(jī)的時(shí)點(diǎn)作為文本,標(biāo)在圖上政勃。

  # !/usr/bin/env python
  # -*- encoding:utf-8 -*-

  import sys
  import importlib

  #importlib.reload(sys)
  #Python3不同唧龄,使用上述語(yǔ)句替代,但不建議使用
  #sys.setdefaultencoding('utf-8')    

  import matplotlib as mpl
  import pandas as pd
  import matplotlib.pyplot as plt
  import numpy as np

  #交錯(cuò)標(biāo)注日期的轉(zhuǎn)換標(biāo)志
  cn = 1
  cnb = 1

  def rowIndex(row):
      """根據(jù)指示繪制買賣信號(hào)的標(biāo)志"""
      global plt, cn, cnb

      #交錯(cuò)標(biāo)注日期的位置常數(shù)
      buyt = 0.5
      buyb = 0.5

      if row.signal > 0:
          #xy表示被注釋的位置坐標(biāo)
          plt.annotate(u'B', xy=(row.date_o, row.signal),    
                       arrowprops=dict(facecolor='red', shrink=0.05))
          if cn == 1:
              buyt = 1
              cn = -1
          else:
              buyt = 0.5
              cn = 1
          plt.annotate(str(row.date_o).replace("-", "")[2:8], #日期字符化奸远、替代既棺、切片
                       xytext=(row.date_o, row.signal + buyt),      #文本標(biāo)注的位置
                       xy = (row.date_o, row.signal + 0.5),             #指示標(biāo)志的位置
                       arrowprops=dict(facecolor='red', shrink=0.5))

      if row.signal < 0:
          plt.annotate(u'S', xy=(row.date_o, row.signal))
          if cnb == 1:
              buyb = 1
              cnb = -1
          else:
              buyb = 0.5
              cnb = 1
          plt.annotate(str(row.date_o).replace("-", "")[2:8],
                       xytext = (row.date_o, row.signal - buyb),
                       xy = (row.date_o, row.signal + 0.5),
                       arrowprops=dict(facecolor='red', shrink=0.5))


  if __name__ =="__main__":
 
      mpl.rcParams['font.sans-serif'] = ['Arial Unicode MS']    #正常顯示中文標(biāo)簽
      mpl.rcParams['axes.unicode_minus'] = False                    #正常顯示負(fù)號(hào)         

      dateparse1 = lambda dates: pd.datetime.strptime(dates, '%Y-%m-%d')

      s_list = pd.read_csv("kd.csv", skiprows=0, encoding='utf-8',
                           index_col='date', parse_dates=True,
                           date_parser=dateparse1)

      s_list['date_o'] = s_list.index
      s_list['ma_sub'] = s_list['ma5'] - s_list['ma20']
      s_list['diff'] = np.sign(s_list['ma_sub'])
      s_list['signal'] =  np.sign(s_list['diff'] - s_list['diff'].shift(1))

      s_list['signal'].plot(ylim=(-2, 2))
      (s_list['close']/40).plot(ylim=(-2, 2))
      s_list.apply(rowIndex, axis=1)
      plt.legend(loc='upper right')
      plt.grid(b=True)

      #打開(kāi)matplotlib查看器查看圖形
      plt.show()      

    其中精妙之處在于,使用一個(gè)轉(zhuǎn)換標(biāo)志來(lái)交錯(cuò)的在圖上標(biāo)示提示信息懒叛,避免重疊丸冕,包括距離轉(zhuǎn)換。以下是結(jié)果:
結(jié)果.png

注意的是:
1薛窥、提示標(biāo)志和提示信息是兩塊圖層內(nèi)容胖烛,需要分別繪制眼姐;
2、繪制提示信息時(shí)佩番,需要用到條件語(yǔ)句進(jìn)行限制丽焊,并隨之變更轉(zhuǎn)換標(biāo)志剪菱,將提示信息交錯(cuò)繪制蕴侣;
3产捞、row在python中是一關(guān)鍵字覆致,可以直接應(yīng)用于對(duì)數(shù)據(jù)的相關(guān)處理(定義函數(shù))路捧,調(diào)用函數(shù)時(shí)荒适,程序自動(dòng)按行查找玉转,不需要傳遞實(shí)參持际。
要顯示漢字沃琅,請(qǐng)參考!c12-4.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜘欲,一起剝皮案震驚了整個(gè)濱河市益眉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姥份,老刑警劉巖郭脂,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異澈歉,居然都是意外死亡展鸡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門埃难,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)莹弊,“玉大人,你說(shuō)我怎么就攤上這事涡尘∪坛冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵考抄,是天一觀的道長(zhǎng)细疚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)川梅,這世上最難降的妖魔是什么疯兼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮挑势,結(jié)果婚禮上镇防,老公的妹妹穿的比我還像新娘。我一直安慰自己潮饱,他們只是感情好来氧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般啦扬。 火紅的嫁衣襯著肌膚如雪中狂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天扑毡,我揣著相機(jī)與錄音胃榕,去河邊找鬼。 笑死瞄摊,一個(gè)胖子當(dāng)著我的面吹牛勋又,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播换帜,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼楔壤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惯驼?” 一聲冷哼從身側(cè)響起蹲嚣,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祟牲,沒(méi)想到半個(gè)月后隙畜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡说贝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年议惰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乡恕。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换淆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出几颜,到底是詐尸還是另有隱情倍试,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布蛋哭,位于F島的核電站县习,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谆趾。R本人自食惡果不足惜躁愿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沪蓬。 院中可真熱鬧彤钟,春花似錦、人聲如沸跷叉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梆砸,卻和暖如春转质,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帖世。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工休蟹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人日矫。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓赂弓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哪轿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拣展,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353