對于炒股的同學(xué)來說,必須會(huì)看懂?dāng)?shù)據(jù)才能避免入坑,今天小千就來教大家如何去使用Python分析股票數(shù)據(jù),學(xué)到就是賺到。(小千提醒,股市有風(fēng)險(xiǎn),請謹(jǐn)慎投資)
這次的美股例子就選擇了美國顯卡制造商英偉達(dá),其股票代碼是NVDA,熟悉英偉達(dá)的人都知道他們的CEO老黃(Jensen Huang),老黃有兩樣?xùn)|西很出名,一是那件能穿4個(gè)季度的皮衣,二是精湛的顯卡刀法。英偉達(dá)在老黃帶領(lǐng)下飛速發(fā)展,其股價(jià)也是一直飆升,所以選擇這個(gè)股票也是在近幾年美股中具有代表性的。
首先還是導(dǎo)入各種庫。
這里有一個(gè)不太常見的庫是yfinance,這是從Yahoo網(wǎng)站獲取數(shù)據(jù)的一個(gè)庫,其使用非常簡單,不需要相關(guān)api,同時(shí)也是免費(fèi)的,而市場上其他不少庫都要api,很多還是收費(fèi)的,同時(shí)還有很多限制,所以我們選用了yfinance作為數(shù)據(jù)來源。yfinance直接用pip安裝即可,筆者用的是anaconda,但用了conda安裝會(huì)失敗,最好還是用pip安裝。接下來是獲取數(shù)據(jù)。
yfinance下載的數(shù)據(jù)直接是pandas的dataframe格式,這里我們只要輸入股票代碼以及起止時(shí)間就可以了,后面的progress是進(jìn)度條選項(xiàng),最好關(guān)閉,否則下載好之后結(jié)果中會(huì)有一個(gè)進(jìn)度條(影響也不大)。這里我們下載英偉達(dá)過去5年的股票數(shù)據(jù),從2015年1月1日到2019年12月31日。這里有一個(gè)問題要注意,就是yfinance的數(shù)據(jù)獲取時(shí)間是提前1天的,比如設(shè)置起始時(shí)間start='2015-01-02',但最終得到的股票數(shù)據(jù)時(shí)間是從2015年1月1日開始的, 同樣截止時(shí)間end='2020-01-01'也就意味著數(shù)據(jù)的截止時(shí)間是2019年12月31日。下載之后的數(shù)據(jù)如下圖所示。
然后是數(shù)據(jù)處理。
上面這些步驟內(nèi)容較多,在這里詳細(xì)說明一下。從下載得到的數(shù)據(jù)中,我們選取Adj Close這一列,其全稱是adjusted close,意思是調(diào)整收盤價(jià),這就是我們要用到的數(shù)據(jù),將其改名為adj_close,然后用adj_close計(jì)算會(huì)計(jì)收益率(也稱簡單收益率),即simple returns,將其命名為s_r,方法是用后一天數(shù)據(jù)除以前一天數(shù)據(jù),再減一,當(dāng)然這里用dataframe的pct_change方法也可以,得到的結(jié)果是一樣的。從前面圖2中我們可以看到得到的數(shù)據(jù)的時(shí)間是以天為單位的,但這些日期并不連續(xù),中間有部分間斷,這是因?yàn)楣善笔袌鲈谥苣┑裙?jié)假日不開盤,而這里我們?yōu)榱死胏pi來計(jì)算會(huì)計(jì)收益率,要設(shè)計(jì)一個(gè)連續(xù)時(shí)間范圍,所以這里生成了一個(gè)名為df_dates的變量,其時(shí)間范圍是連續(xù)的,從2015年1月1日到2019年12月31日,讓其和df合并,得到的數(shù)據(jù)如下圖所示。這里面NaN(not a number)都是節(jié)假日不開盤的日期。
因?yàn)橐?jì)算實(shí)際收益率,其中使用的cpi(onsumer price index,消費(fèi)者物價(jià)指數(shù))是以月為單位的,所以我們也要把df轉(zhuǎn)換成以月為單位,為了避免在每月最后一天是非開盤日,所以首先用了fillna方法,方式是'ffill',即按照前一日數(shù)據(jù)來填充,然后用asfreq('M')方法來得出每月最后一日的數(shù)據(jù)。很多人會(huì)問,這個(gè)每月最后一日的數(shù)據(jù)有什么用,因?yàn)槲覀冇玫降腸pi數(shù)據(jù)都是按月份來公布的,每月只有一個(gè)cpi數(shù)據(jù),所以我們計(jì)算會(huì)計(jì)收益率時(shí)也要按照月份來算,而每月會(huì)計(jì)收益率就是用這個(gè)月的最后一個(gè)交易日的調(diào)整收盤價(jià)除以上個(gè)月的最后一個(gè)交易日的調(diào)整收盤價(jià),然后再減一,和前面每日會(huì)計(jì)收益率的計(jì)算方法一樣。然后用月份會(huì)計(jì)收益率和cpi來計(jì)算實(shí)際收益率。而我們這次所用到的cpi數(shù)據(jù),其時(shí)間范圍從2015年1月至2019年12月,總共5年,這個(gè)數(shù)據(jù)可以從很多網(wǎng)站下載,直接到網(wǎng)上搜索就行了。
讀取cpi數(shù)據(jù)之后通過cpi數(shù)據(jù)計(jì)算通貨膨脹率,即inflation rate,我們把這一列命名為inf_rate,方法和會(huì)計(jì)收益率一樣,接著再用通貨膨脹率計(jì)算實(shí)際收益率(Real Rate of Return),方法是(1+會(huì)計(jì)收益率)/(1+通貨膨脹率)-1,我們將其命名為r_r。最后得到的df數(shù)據(jù)如下圖所示。
最后就是數(shù)據(jù)可視化。
這里我們只要4列數(shù)據(jù),即除了cpi之外的其他4列數(shù)據(jù)。將其置于4個(gè)子圖中,繪圖直接用dataframe的plot方法即可,在這里我們選用了ggplot的繪圖主題。得到的結(jié)果如下圖所示。
從這里我們也可以看到用pandas分析美股數(shù)據(jù)非常方便,但是只掌握pandas的使用方法還是不夠的,我們還要具備相關(guān)的金融基礎(chǔ)知識(shí),尤其是計(jì)量經(jīng)濟(jì)學(xué)的相關(guān)基礎(chǔ),因此在分析股票數(shù)據(jù)時(shí)最好還要有一定的經(jīng)濟(jì)學(xué)基礎(chǔ)。所以在我們平時(shí)的業(yè)務(wù)工作當(dāng)中,除了必要的編程技能以外,掌握相關(guān)的理論知識(shí)也是很重要的。
學(xué)習(xí)Python,可以參考千鋒Python培訓(xùn)班推出的Python開發(fā)學(xué)習(xí)路線,結(jié)合千鋒Python培訓(xùn)機(jī)構(gòu)名師精心錄制的全套Python視頻教程,可以讓你對學(xué)習(xí)Python需要掌握的知識(shí)有個(gè)清晰的了解,并快速入門Python開發(fā)。千鋒Python培訓(xùn)機(jī)構(gòu)視頻教程分為三個(gè)大塊:Python基礎(chǔ)視頻教程、Python高級(jí)視頻教程、Python高手晉級(jí)視頻教程。視頻講解通俗易懂,入門Python開發(fā)僅用此套視頻足矣。想要獲取免費(fèi)Python學(xué)習(xí)路線和學(xué)習(xí)資料可以添加我們的Python技術(shù)交流qq群:790693323 加群找群管理領(lǐng)取即可,Python相關(guān)技術(shù)問題也可以加群解決,等你來哦~~~~