【通過Python語言的Scrapy框架股票投資規(guī)劃的探析系統(tǒng)9000字(論文)】_第1頁
【通過Python語言的Scrapy框架股票投資規(guī)劃的探析系統(tǒng)9000字(論文)】_第2頁
【通過Python語言的Scrapy框架股票投資規(guī)劃的探析系統(tǒng)9000字(論文)】_第3頁
【通過Python語言的Scrapy框架股票投資規(guī)劃的探析系統(tǒng)9000字(論文)】_第4頁
【通過Python語言的Scrapy框架股票投資規(guī)劃的探析系統(tǒng)9000字(論文)】_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1頁共19頁第4頁,共19頁通過Python語言的Scrapy框架股票投資規(guī)劃的分析系統(tǒng)第一章引言 11.1研究背景 11.2研究意義 11.3系統(tǒng)概述 11.4論文的主要內(nèi)容及章節(jié)安排 2第二章計(jì)算機(jī)技術(shù)與金融知識(shí) 22.1計(jì)算機(jī)相關(guān)技術(shù) 22.1.1Python語言 22.1.2Scrapy框架 32.2金融知識(shí) 52.2.1投資流派的介紹 52.2.2入場時(shí)機(jī)的判斷 52.2.3白馬股的特征和篩選過程 6第三章系統(tǒng)需求與設(shè)計(jì) 83.1系統(tǒng)的需求 83.2系統(tǒng)的設(shè)計(jì) 83.2.1數(shù)據(jù)收集模塊的設(shè)計(jì) 93.2.2數(shù)據(jù)處理模塊的設(shè)計(jì) 9第四章系統(tǒng)的實(shí)現(xiàn) 94.1數(shù)據(jù)收集模塊的實(shí)現(xiàn) 94.2數(shù)據(jù)處理模塊的實(shí)現(xiàn) 11第五章系統(tǒng)測試 125.1測試思路 125.2測試過程 125.3本章總結(jié) 15第六章結(jié)論 156.1論文總結(jié) 156.2改進(jìn)方向 16摘要:本畢設(shè)是一個(gè)通過Python語言的Scrapy框架收集數(shù)據(jù),并依據(jù)一定的金融知識(shí)對(duì)數(shù)據(jù)進(jìn)行篩選,最終給出股票投資規(guī)劃的分析系統(tǒng)。通過在股票行情網(wǎng)站的數(shù)據(jù)的收集和分析,本系統(tǒng)最終可以幫助人在投資股票時(shí)做出合理的規(guī)劃。本畢設(shè)基本完成了預(yù)定的計(jì)劃,能夠從股票網(wǎng)站中合理的搜集數(shù)據(jù),并依照所學(xué)金融知識(shí)做出分析,逐步篩選數(shù)據(jù),基本能夠給出一份依照金融學(xué)知識(shí)的投資名單。關(guān)鍵詞:股票,Python,Scrapy框架第一章引言1.1研究背景二十一世紀(jì)以來,我們的生活隨著計(jì)算機(jī)技術(shù)的發(fā)展開始了日新月異的變化,計(jì)算機(jī)技術(shù)的應(yīng)用逐步的改變我們?cè)镜纳睿酥劣诔蔀榱瞬豢商娲囊徊糠?。隨著“互聯(lián)網(wǎng)+”戰(zhàn)略的提出[1],傳統(tǒng)行業(yè)與計(jì)算機(jī)技術(shù)的結(jié)合已經(jīng)成為一種必然的趨勢,尤其是與金融產(chǎn)業(yè)的結(jié)合已經(jīng)被廣泛的認(rèn)可和執(zhí)行。金融產(chǎn)業(yè)需要及時(shí)的信息交流以及大量的數(shù)據(jù)處理,而不管是大量數(shù)據(jù)的搜集,還是對(duì)大量的數(shù)據(jù)進(jìn)行比較篩選,這些都離不開計(jì)算機(jī)技術(shù)的幫助。同樣的,作為個(gè)人,也可應(yīng)通過應(yīng)用計(jì)算機(jī)技術(shù),初步的參與金融行業(yè),其中最常見的行為就是投資股票。一方面,投資股票市場有利于國家經(jīng)濟(jì)的發(fā)展,第一,股市是國家經(jīng)濟(jì)支撐的重要部分;第二,股市是融資市場,也是投資市場;第三,炒股是需要交手續(xù)費(fèi)的,每交易一次都會(huì)交相對(duì)應(yīng)的手續(xù)費(fèi)[2]。另一方面,投資股票市場可以幫助自己抵御風(fēng)險(xiǎn)。比如2020年突發(fā)的新冠疫情導(dǎo)致經(jīng)濟(jì)下行,如果有相應(yīng)的副業(yè)以作支撐就可以比較成功的抵御風(fēng)險(xiǎn),其中投資股市由于分散精力少是很適合成為副業(yè)的。 綜上,投資股票市場既有利于國家經(jīng)濟(jì)發(fā)展,又有能幫助個(gè)人進(jìn)行風(fēng)險(xiǎn)規(guī)避,最重要的是在計(jì)算機(jī)技術(shù)的發(fā)展和支持下,個(gè)人有能力對(duì)自己的投資做出合理規(guī)劃,所以可以預(yù)計(jì),未來會(huì)有越來越多的人投身股市。1.2研究意義根據(jù)Mob研究院的數(shù)據(jù),2020年股民規(guī)模已經(jīng)破億,95后的股民已經(jīng)進(jìn)入股市,其中約有一半人的月收入在5000元以下,一半人的學(xué)歷不足本科[3]。有相當(dāng)多的人不能輕松承擔(dān)炒股可能的風(fēng)險(xiǎn),或是缺乏一定的金融知識(shí)難以對(duì)自己的投資做出合理規(guī)劃。所以如果能依據(jù)一定的金融學(xué)知識(shí),幫助他們做出合理的股票投資規(guī)劃或是給出一些參考意見,不僅有利于他們自身的經(jīng)濟(jì)狀況的改善,更進(jìn)一步說,能夠更好的幫助整體金融產(chǎn)業(yè)的發(fā)展,使得投資更加集中于優(yōu)質(zhì)的公司,對(duì)整體經(jīng)濟(jì)起到促進(jìn)作用。1.3系統(tǒng)概述 本系統(tǒng)主要是基于Python的Scrapy框架進(jìn)行開發(fā)和設(shè)計(jì)的。本系統(tǒng)基本步驟為從雪球網(wǎng)[5]合理的獲取足夠的股票信息,然后對(duì)這些數(shù)據(jù)逐步的篩選,最后得出可供選擇的投資名單。其中,收集信息步驟分為用Scrapy框架構(gòu)建爬蟲,調(diào)整爬蟲參數(shù)以獲取數(shù)據(jù),然后對(duì)數(shù)據(jù)做初步處理以方便后續(xù)篩選。在具體的數(shù)據(jù)處理階段,主要分為四個(gè)步驟:根于ROE(凈資產(chǎn)收益率)篩選,剔除周期股票,剔除業(yè)績下滑的股票,最后檢驗(yàn)數(shù)據(jù)的真?zhèn)危蕹龜?shù)據(jù)造假的股票。最終的結(jié)果是得出一個(gè)股票的建議投資名單。以上步驟的依照原理和具體操作,會(huì)在后續(xù)論文中詳細(xì)寫明。1.4論文的主要內(nèi)容及章節(jié)安排論文章節(jié)安排如下:第1章:介紹我國金融展業(yè)與計(jì)算機(jī)技術(shù)緊密結(jié)合的時(shí)代背景,以及畢設(shè)意義所在,并介紹本論文的章節(jié)安排。第2章:介紹系統(tǒng)開發(fā)過程中用到的計(jì)算機(jī)技術(shù)和金融知識(shí)。第3章:介紹了系統(tǒng)的需求和基本設(shè)計(jì)。第4章:詳細(xì)介紹了系統(tǒng)的實(shí)現(xiàn)過程。第5章:對(duì)系統(tǒng)的數(shù)據(jù)收集功能和數(shù)據(jù)分析功能進(jìn)行測試。第6章:對(duì)于研究過程做出總結(jié),分析本系統(tǒng)進(jìn)一步發(fā)展的可能和方向。第二章計(jì)算機(jī)技術(shù)與金融知識(shí)2.1計(jì)算機(jī)相關(guān)技術(shù)2.1.1Python語言Python是由GuidovanRossum從八十年代末開始,最終在荷蘭國家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所設(shè)計(jì)出來。它是一種面向編程邏輯,并使用第三方庫來完成程序運(yùn)行的語言,尤其善于解決各種問題的計(jì)算部分的實(shí)現(xiàn),適用面十分廣泛[6]。Python語言特點(diǎn):(1)通用性:可以用于普世的計(jì)算問的求解,不局限于某一特定領(lǐng)域的應(yīng)用,故此python語言的通用性是它最顯著的特點(diǎn)。(2)可讀性:通過縮進(jìn)實(shí)現(xiàn)的強(qiáng)制可讀性,使得編寫的代碼干凈整潔,邏輯清晰。由于編程思維幾乎與人類日常生活中的思維習(xí)慣一致,所以非常適合人類閱讀。(3)易于編寫:Python語言有較少的底層語法元素,并且不去操作內(nèi)容,所以非常易于編寫。(4)面對(duì)對(duì)象:Python既支持面向過程的函數(shù)編程也支持面向?qū)ο蟮某橄缶幊?。?)跨平臺(tái)性:大多數(shù)的Python程序即使不做任何改變,也可以可在主流計(jì)算機(jī)平臺(tái)上運(yùn)行。這無疑簡化了我們的開發(fā)流程。(6)第三方庫:Python擁有大量的第三方庫,這些庫是由全世界的Python使用者在自己的工作中逐漸形成的,并且第三方庫的數(shù)量依然在逐年快速的增長。這些庫開源開放,任何人只需要很簡單的操作,就可以安裝并使用這些庫。使用第三方庫可以減免很多重復(fù)的操作,提高工作效率,有利于整個(gè)python生態(tài)長期向好[6]。2.1.2Scrapy框架Scrapy框架是一個(gè)功能強(qiáng)大并且運(yùn)行快速的網(wǎng)絡(luò)爬蟲框架,是基于Python實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲的重要技術(shù)路線[7]。Scrapy框架一共包含7個(gè)部分,其中5個(gè)部分為框架的主體部分,另外兩個(gè)為中間件。5個(gè)主體部分為Engine模塊,Scheduler模塊,Downloader模塊,Spider模塊和ItemPipeline模塊。在Engine模塊和Spider模塊之間,以及Engine模塊和Downloader模塊之間,有兩個(gè)中間件模塊,分別是DownloaderMiddlewares和SpiderMiddlewares。這些模塊行程的結(jié)構(gòu)一般稱為“5+2”結(jié)構(gòu),他們共同構(gòu)成了Scrapy框架[7]。其中Engine模塊,Scheduler模塊,Downloader模塊在建立框架是就已經(jīng)實(shí)現(xiàn),他們分別實(shí)現(xiàn)以下功能:Engine模塊:負(fù)責(zé)Spider模塊、ItemPipeline模塊、DownLoader模塊、Scheduler模塊中間的數(shù)據(jù)傳遞。Scheduler模塊:負(fù)責(zé)接受Engine模塊發(fā)送過來的Request請(qǐng)求,并按照既定的方式對(duì)Request請(qǐng)求進(jìn)行調(diào)度,然后交還給Engine模塊。Downloader模塊:負(fù)責(zé)處理Engine模塊發(fā)送過來的Request,真實(shí)地連接互聯(lián)網(wǎng)并爬取數(shù)據(jù),將獲取的數(shù)據(jù)封裝為Response返還給Engine模塊。而Spider模塊和ItemPipeline模塊則需要用戶進(jìn)行配置。他們分別實(shí)現(xiàn)以下功能:Spider模塊:負(fù)責(zé)解析Downloader模塊返回的Response,產(chǎn)生Item(爬取項(xiàng))和新的Request(爬取請(qǐng)求)。(2)ItemPipeline模塊:負(fù)責(zé)以流水線方式處理Spider模塊產(chǎn)生的Item。用戶提交的網(wǎng)絡(luò)爬蟲請(qǐng)求以及從網(wǎng)絡(luò)上獲取的相關(guān)信息等一系列數(shù)據(jù),在這些模塊之間流動(dòng),形成數(shù)據(jù)流,其中有三條數(shù)據(jù)流為主要的數(shù)據(jù)流路徑。從Spider模塊開始,經(jīng)過Engine模塊到達(dá)Scheduler模塊。在這條路徑中,Engine模塊從Spider模塊中獲得用戶的請(qǐng)求,然后轉(zhuǎn)發(fā)給Scheduler模塊。Scheduler模塊對(duì)爬取請(qǐng)求進(jìn)行調(diào)度。從Scheduler模塊開始,經(jīng)過Engine模塊到達(dá)Downloader模塊。然后再從Downloader模塊傳回Engine模塊,最終到達(dá)Spider模塊。在這條路徑中,Engine模塊從Scheduler模塊獲得即將要爬取的網(wǎng)絡(luò)請(qǐng)求,通過DownloaderMiddlewares中間件發(fā)動(dòng)給Downloader模塊。Downloader模塊真實(shí)的鏈接互聯(lián)網(wǎng),并爬取相關(guān)的網(wǎng)頁。爬取結(jié)束后,Downloader模塊將所爬取的內(nèi)容封裝為Response 傳給Engine模塊,最后再通過SpiderMiddlewares中間件發(fā)送給Spider模塊。從Spider模塊開始,經(jīng)過Engine模塊到達(dá)ItemPipeline模塊以及Scheduler模塊。Spider模塊首先處理從Downloader模塊獲得的Response ,產(chǎn)生兩個(gè)數(shù)據(jù)類型,分別為爬取項(xiàng)Item和新的爬取請(qǐng)求Request。Engine模塊收到從Spider模塊發(fā)送的爬取項(xiàng)Item和新的爬取請(qǐng)求Request之后,將Item發(fā)送給ItemPipeline模塊,將Request發(fā)送給Scheduler模塊,從而為后續(xù)的數(shù)據(jù)處理,以及新的網(wǎng)絡(luò)爬蟲請(qǐng)求做好準(zhǔn)備[7]。由以上三條主要路徑可以得出,Engine模塊中樞控制各個(gè)模塊的數(shù)據(jù)流,整個(gè)框架的執(zhí)行是從向Engine模塊發(fā)送請(qǐng)求開始,到ItemPipeline模塊獲得數(shù)據(jù)為止[7]。所以在正式使用Scrapy框架時(shí),只需先編寫Spider模塊和ItemPipeline模塊,就可以順利進(jìn)行工作。2.2金融知識(shí)2.2.1投資流派的介紹股票投資有很多不同的流派,其中自主要的有五個(gè),分別是技術(shù)投資派,宏觀投資派,有效市場派,成長投資派和價(jià)值投資派。他們的基本介紹如下:技術(shù)投資派:以某只股票的價(jià)格當(dāng)前走勢為依據(jù),預(yù)測此股票未來的漲跌。宏觀投資派:認(rèn)為市場向好,則股市向好,故研究經(jīng)濟(jì)就可以指導(dǎo)投資規(guī)劃。有效市場派:認(rèn)為市場絕大多數(shù)情況下對(duì)股票的定價(jià)是正確的。成長投資派:關(guān)注公司的未來是否會(huì)有足夠高的增長。價(jià)值投資派:關(guān)注公司的現(xiàn)在是否有足夠低的價(jià)格[8]。其中技術(shù)投資派需要猜測市場情緒,宏觀投資派需要研究國家經(jīng)濟(jì),有效市場派則需要從各種渠道獲得消息,這三種投資流派對(duì)于普通個(gè)體來說很難進(jìn)行實(shí)際操作。而另外兩種流派都是關(guān)注與公司本身的,一個(gè)側(cè)重于公司未來的發(fā)展,尋找資質(zhì)優(yōu)秀的公司與他共同成長;另一個(gè)側(cè)重于尋找當(dāng)前價(jià)格被低估的公司,低價(jià)買入,等市場發(fā)現(xiàn)他們的價(jià)格是再以高價(jià)賣出。由于數(shù)據(jù)需求量小,具體數(shù)據(jù)內(nèi)容基本公開,所以這兩種方法都適合一般個(gè)體進(jìn)行實(shí)際操作,在有足有的數(shù)據(jù)支撐的前提下,成長投資派的收益一般會(huì)高于價(jià)值投資派,而且操作過程更為簡便。所以,系統(tǒng)依照成長投資派的操作原理和處理方式進(jìn)行開發(fā)。2.2.2入場時(shí)機(jī)的判斷我們投資股票的獲益機(jī)制為在于在股票便宜時(shí)買入,在價(jià)格升高后視情況賣出,所以判斷一個(gè)只股票當(dāng)前的價(jià)格高低是投資的基礎(chǔ)。判斷的主要依據(jù)是市盈率PE和市凈率PB。其中:市盈率PE=市值凈利潤 市凈率PB=市值凈資產(chǎn)市值為購買本公司所需財(cái)產(chǎn),凈利潤為公司一年的盈利,凈資產(chǎn)為公司當(dāng)前財(cái)產(chǎn)。[8]所以從公式可以的得出,市盈率是回本的時(shí)間,市盈率越低,則越能快速的賺回本金并開始盈利;市凈率相當(dāng)于購買本公司的價(jià)格與公司當(dāng)前資產(chǎn)的比值,數(shù)值越低,說前公司當(dāng)前市場價(jià)格越低,越有投資價(jià)值。綜上,當(dāng)PB或者PE處于較低的價(jià)格時(shí),則這只股票有投資價(jià)值。既然單個(gè)股票可以通過的PE和PB來判斷,那么把股市看做一個(gè)整體,計(jì)算整體的PB和PE,有:市盈率(全體)=市值總和凈利潤總和 市凈率(全體)=就可以對(duì)當(dāng)前的股市的大環(huán)境有一個(gè)初步的判斷。 由于股市的中重要的主體為滬深300和中證500,這800只股票基本決定了當(dāng)前的大環(huán)境,隨意只需要判斷這800只股票的總市盈率和市凈率,就可以進(jìn)而判斷整個(gè)股市是否應(yīng)該入場。最后,由于PB和PE是反映某個(gè)股票當(dāng)前的狀態(tài),所以不同股票互相之間比較沒有意義,應(yīng)該把一只股票的不同時(shí)期的PB的PE進(jìn)行對(duì)比,將最高點(diǎn)和最低點(diǎn)作為基準(zhǔn),判斷當(dāng)前的數(shù)值在一段時(shí)間以來所處的位置,用百分比來表示。同樣的,這個(gè)思路一樣可以拓廣到整體股市以及決定性的800只股票。最終就得到了我們判斷當(dāng)前是否應(yīng)該進(jìn)行投資的依據(jù)。即滬深300和中證500這兩個(gè)整體的任意一個(gè)整體滿足PE處于近十年數(shù)值的0-50%區(qū)間內(nèi)并且PB處于近十年數(shù)值的0-20%區(qū)間內(nèi),當(dāng)前市場適合投資。2.2.3白馬股的特征和篩選過程我們選取的投資流派是成長投資流派,這種流派的核心是找“白馬股”并對(duì)白馬股進(jìn)行長期跟蹤和投資。所以我們需要先明確什么才是“白馬股”?!鞍遵R股”的特點(diǎn)有以下三個(gè):投資回報(bào)率高長期業(yè)績優(yōu)秀信息相對(duì)可靠[9]以上三點(diǎn)必須同時(shí)滿足才可以認(rèn)定為“白馬股”,一旦不再同時(shí)滿足上述三個(gè)特點(diǎn),則不再是“白馬股”,需要果斷出手。依照這些特點(diǎn),我們就可以從眾多股票中篩選出“白馬股”,并對(duì)他們進(jìn)行長期投資了,下面介紹詳細(xì)的篩選步驟。首先,白馬的第一個(gè)特點(diǎn)為投資回報(bào)率高,回報(bào)率的公式如下:投資回報(bào)率=賣入價(jià)格賣出價(jià)格而如果是長期投資,則年化復(fù)合收益率如下:年化復(fù)合收益率=賣入價(jià)格賣出價(jià)格^以長期投資為前提,一只股票的回報(bào)率與凈資產(chǎn)收益率密切相關(guān)凈資產(chǎn)收益率(ROE)=凈利潤凈資產(chǎn)(2.5由于成長投資流派是長期投資,而在長期投資時(shí),ROE近似等于年化符合收益率,是故選擇ROE長期高的股票,就能夠?qū)崿F(xiàn)長期的獲益。所以篩選“白馬股”的第一個(gè)步驟為篩選ROE連續(xù)7年≥15%的股票。其次,“白馬股”第二個(gè)特點(diǎn)為長期業(yè)績優(yōu)秀,所以我們之后的步驟為剔除周期股和業(yè)績下滑的公司。首先是剔除周期股。周期股是指業(yè)績緊隨著經(jīng)濟(jì)周期而起伏的公司的股票。這種公司目前來看,甚至一段時(shí)間來看業(yè)績優(yōu)秀,單會(huì)隨著經(jīng)濟(jì)周期不可逆轉(zhuǎn)的下滑,而判斷經(jīng)濟(jì)周期是何時(shí)上升何時(shí)下降極為困難,而且需要時(shí)時(shí)密切關(guān)注,在判斷出周期性下行到來時(shí)及時(shí)拋售。這種做法不符合我們成長投資流派的操作理念,所以刪除全部的周期股票。由于一只股票是否是周期股基本由公司本身所處行業(yè)決定,所以只需要判斷公司行業(yè)就可以快速高效的刪除周期股。一般認(rèn)為,以下四類行業(yè)的股票為周期股:(1)作為工業(yè)基礎(chǔ)原材料的大宗商品相關(guān)行業(yè),比如采掘服務(wù)、鋼鐵、化工合成材料、化工新材料、石油礦業(yè)開采、有色冶煉加工和化學(xué)制品等。(2)航運(yùn)業(yè),比如遠(yuǎn)洋運(yùn)輸、港口航運(yùn)、機(jī)場航運(yùn)、交運(yùn)設(shè)備服務(wù)等。(3)非生活必需品行業(yè)及與之相關(guān)的行業(yè),比如國防軍工、汽車整車、汽車零部件、建筑材料、建筑裝飾、房地產(chǎn)等。(4)非銀行的金融行,比如證券,保險(xiǎn)等。[8]依據(jù)股票所屬行業(yè),直接刪除屬于上述四類的股票即可。然后是剔除業(yè)績下滑的公司,這些公司雖然不是周期股票,凈資產(chǎn)收益率也常年大于15%,但是目前已經(jīng)有了業(yè)績下滑的現(xiàn)狀,需要盡早剔除。判斷公司業(yè)績下滑的依據(jù)有以下方面:年度營收增長率=本年的營業(yè)收入?去年的營業(yè)收入去年的營業(yè)收入(2.6年度凈利潤增長率=本年的凈利潤?去年的凈利潤去年的凈利潤(2.7季度營收增長率=本季度的營業(yè)收入?去年同季度的營業(yè)收入去年同季度的營業(yè)收入(2.8季度凈利潤增長率=本季度的凈利潤?去年同季度的凈利潤去年同季度的凈利潤(2.9以上四個(gè)指標(biāo),只要有一個(gè)為負(fù)數(shù),明該公司業(yè)績已經(jīng)下滑,應(yīng)該及時(shí)剔除。最后,由于“白馬股”的第三個(gè)特點(diǎn)為信息相對(duì)可靠,我們需要檢驗(yàn)當(dāng)前股票列表中股票的數(shù)據(jù)真實(shí)性,最后一個(gè)步驟即為用小熊定理檢驗(yàn)。一般來說,股票的數(shù)據(jù)造假有一下幾種可能:公司真貨假賣,雖然營業(yè)收入很高,但實(shí)際貨物并沒有賣出。公司存貨造假。公司有破產(chǎn)可能。對(duì)于以上三種造假方式,我們可以用以下三條定理來一一檢驗(yàn)。小熊定理一:連續(xù)兩年應(yīng)收賬款上升幅度大于營業(yè)收入上升幅度,則有真貨假賣風(fēng)險(xiǎn)。其中應(yīng)收賬款為企業(yè)賣產(chǎn)品給客戶,但還未收的錢,也就是客戶簽的白條。營業(yè)收入為企業(yè)賣產(chǎn)品獲得的收入。小熊定理二:連續(xù)2年存貨增長大于營業(yè)收入增長有可能存貨造假。小熊定理三:流動(dòng)負(fù)債大于流動(dòng)資產(chǎn),則有可能破產(chǎn)。其中流動(dòng)負(fù)債為一年內(nèi)必須要還的錢,如應(yīng)付賬款、短期借款等。流動(dòng)資產(chǎn)為一年內(nèi)可變現(xiàn)的資產(chǎn),如貨幣資金、存貨、預(yù)付款項(xiàng)[8]。第三章系統(tǒng)需求與設(shè)計(jì)3.1系統(tǒng)的需求由于最后的輸出結(jié)果為一份可供參考的股票投資名單,所以從結(jié)果倒退需求,我們的系統(tǒng)首先需要大量的股票數(shù)據(jù)以從中選取“白馬股”,然后需要能對(duì)于大量股票的數(shù)據(jù)進(jìn)行分析以得出列表。所以系統(tǒng)主要由兩個(gè)模塊,分別為數(shù)據(jù)收集模塊和數(shù)據(jù)分析模塊。數(shù)據(jù)收集模塊方面,我們要有能力對(duì)于網(wǎng)上公開的數(shù)據(jù)進(jìn)行收集和整理,所以需要一個(gè)Scrapy爬蟲來爬取數(shù)據(jù),并對(duì)數(shù)據(jù)做初步整理。至于數(shù)據(jù)的分析方面,由于我們的操作過程其實(shí)是根據(jù)股票的數(shù)據(jù),決定是否從股票的列表中將其剔除,所以事實(shí)上我們需要編寫一個(gè)程序以遍歷一個(gè)二維數(shù)據(jù)并對(duì)每一行做操作,這個(gè)需求可以用Python語言調(diào)用csv庫來實(shí)現(xiàn)。3.2系統(tǒng)的設(shè)計(jì)3.2.1數(shù)據(jù)收集模塊的設(shè)計(jì)本模塊需要構(gòu)建Scrapy爬蟲以爬取股票相關(guān)網(wǎng)站,并最終輸出csv文件以便于后續(xù)數(shù)據(jù)處理。基本過程為安裝Python環(huán)境并下載和安裝Scrapy框架相關(guān)第三方庫。然后建議一個(gè)Scrapy爬蟲框架,配置Spider模塊和ItemPipeline模塊,使其可以對(duì)相應(yīng)網(wǎng)站進(jìn)行數(shù)據(jù)的爬取和輸出爬取項(xiàng)目,最終輸出csv文件。3.2.2數(shù)據(jù)處理模塊的設(shè)計(jì)首先是對(duì)于上述得出的csv文件進(jìn)行補(bǔ)充,由于本人能力代碼有限,加之股票網(wǎng)站以當(dāng)前數(shù)據(jù)為主,而很少顯示往年數(shù)據(jù),所以需要通過愛問財(cái)網(wǎng)站[4]進(jìn)行數(shù)據(jù)的填補(bǔ)。由于數(shù)據(jù)處理的過程依照篩選白馬股的四個(gè)步驟,所以通過Python語言調(diào)用csv庫實(shí)現(xiàn)處理二維數(shù)組即可實(shí)現(xiàn),編寫工具為Pycharm。為了保證最后得出數(shù)據(jù)的可信度,每次做數(shù)據(jù)篩選時(shí),都需要生成并保留當(dāng)前篩選文件,以便后續(xù)查閱。第四章系統(tǒng)的實(shí)現(xiàn)4.1數(shù)據(jù)收集模塊的實(shí)現(xiàn)首先從Python官網(wǎng)下載安裝包并安裝,本次開發(fā)使用的是Python3.7版本。然后安裝Scrapy框架,直接通過pip命令操作,輸入pipinstallscrapy,安裝結(jié)束后然輸入scrapy-h,對(duì)Scrapy框架的安裝進(jìn)行測試,正常輸出操作說明則安裝成功,前期準(zhǔn)備工作完成。之后,則是新建Scrapy工程文件,首先用cd命令進(jìn)入選定地址開始創(chuàng)建,輸入scrapystartprojectwork,work為工程名。之后在工程文件下創(chuàng)建爬蟲,輸入scrapygenspiderstockquote,Stock為爬蟲名稱。進(jìn)入先前選定文件夾,發(fā)現(xiàn)基本的框架已經(jīng)生成,接下來只需要配置stock.py,piplines.py,settings.py這三個(gè)文件,確保可以正確的從網(wǎng)站爬取數(shù)據(jù)即可,對(duì)這三個(gè)文件的配置是本模塊設(shè)計(jì)的關(guān)鍵,下面對(duì)三個(gè)文件的配置思路和細(xì)節(jié)進(jìn)行詳細(xì)解釋:(1)stock.py文件:stock文件關(guān)聯(lián)Spider模塊,我們需要讓他可以正確的向Engine模塊發(fā)送Request,由于個(gè)人代碼能力有限以及部分股票網(wǎng)站的存在反爬設(shè)計(jì),所以最后選擇雪球網(wǎng)進(jìn)行爬取,雪球網(wǎng)額的網(wǎng)址基本格式為股票代碼(例如SZ300783),所以我們將股票代碼依次輸入到S/之后,即可訪問雪球網(wǎng)全部股票的具體數(shù)據(jù)。股票的具體代碼可以通過愛問財(cái)網(wǎng)站[4]直接搜索并下載。然后查看網(wǎng)頁源代碼,發(fā)現(xiàn)我們所需要的具體信息在源代碼之中,如圖。3.1網(wǎng)頁源代碼中的具體信息首先用response函數(shù)獲取網(wǎng)頁代碼,然后新建字典變量以存儲(chǔ)關(guān)鍵信息。已知網(wǎng)頁中的具體信息是以表格形式存儲(chǔ)的,所以為從圖中代碼獲取關(guān)鍵信息,我們可以用BeautifulSoup庫對(duì)這段代碼進(jìn)行解析并提取數(shù)據(jù)。然后利用循環(huán)遍歷表格,并將關(guān)鍵數(shù)據(jù)寫入字典保存,關(guān)鍵代碼如下:獲取網(wǎng)頁代碼:name=re.search(r'<divclass="stock-name">(.*?)</div>',response.text).group(1)獲取表格信息:tableHtml=re.search(r'"tableHtml":"(.*?)",',response.text).group(1)用BeautifulSoup庫對(duì)表格解析:soup=BeautifulSoup(tableHtml,"html.parser")table=soup.table最后循環(huán)遍歷表格,寫入字典:infoDict.update({l[0].__str__():l[1].__str__()})至此,stock文件配置完畢。(2)piplines.py文件:此文件關(guān)聯(lián)ItemPipeline模塊,配置的重點(diǎn)在于正確處理接受的數(shù)據(jù)。主要操作有在使用爬蟲時(shí),打開文件;關(guān)閉爬蟲時(shí),關(guān)閉文件;使用爬蟲時(shí),處理文件。第三點(diǎn)為編寫重點(diǎn),并且為后續(xù)數(shù)據(jù)處理方便,同時(shí)輸出csv文件:3.2在打開文件時(shí)的具體操作,輸出csv文件(3)最后對(duì)setting.py文件做處理,使得能夠正常訪問網(wǎng)站并爬取數(shù)據(jù),文件中已經(jīng)寫好大量的配置方案,對(duì)其修改即可,修改內(nèi)容如下:ITEM_PIPELINES={'work.pipelines.stockPipeline':300,}至此,Scrapy的配置結(jié)束,可以進(jìn)行網(wǎng)頁的訪問與內(nèi)容的獲取。數(shù)據(jù)搜集模塊的功能實(shí)現(xiàn)。4.2數(shù)據(jù)處理模塊的實(shí)現(xiàn)首先安裝Pycharm,然后建立select.py文件對(duì)數(shù)據(jù)進(jìn)行處理。調(diào)用csv庫,方便后續(xù)對(duì)csv文件進(jìn)行操作:importcsv然后我們每次的操作均為根據(jù)特定數(shù)據(jù)符合情況與否,判斷整個(gè)一行數(shù)據(jù)的去去留,所以每次操作的代碼基本按照下方模式編寫:(1)明確兩個(gè)文件,a為進(jìn)行數(shù)據(jù)篩選的文件,b為將相應(yīng)數(shù)據(jù)寫入的文件old_path='./a.csv'new_path='./b.csv'(2)打開兩個(gè)文件進(jìn)行操作:withopen(old_path,'r',encoding='utf-8')asold_f,\open(new_path,'w',encoding='utf-8')asnew_f:f_csv_old=csv.reader(old_f)f_csv_new=csv.writer(new_f,lineterminator='\n')(3)進(jìn)入循環(huán),對(duì)二維函數(shù)的每一行進(jìn)行遍歷:fori,old_rowinenumerate(f_csv_old):判斷條件是否符合:(a)如果是對(duì)數(shù)據(jù)判斷:iffloat(old_row[a])>=x特定數(shù)據(jù)是否滿足條件,注意使用float函數(shù)使得表格中的數(shù)據(jù)可以進(jìn)行操作。(b)如果是對(duì)文字判斷,如剔除周期股:周期股相關(guān)參數(shù)有三個(gè)詞語,使用“-”相連接,定義flag=1。提取參數(shù)list=old_row[2]剔除間隔符號(hào)content_list=list.split("-")然后用循環(huán)判定是否存在帶有周期股特征的詞語,如果不存在,則flag+1。最后當(dāng)且僅當(dāng)flag=4,即3個(gè)詞語均與周期股無關(guān)時(shí),寫入新文件。將符合條件的數(shù)據(jù)寫入新文件:f_csv_new.writerow(old_row)按照上述格式,依次完成篩選ROE大于等于15%,剔除白馬股,剔除業(yè)績下滑股票,檢驗(yàn)數(shù)據(jù)安全四步操作,則數(shù)據(jù)分析系統(tǒng)實(shí)現(xiàn)完畢。第五章系統(tǒng)測試5.1測試思路 運(yùn)行Scrapy爬蟲框架,從雪球網(wǎng)(/S/)獲取數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行初步處理,輸出csv文件。 運(yùn)行sclect.py,對(duì)數(shù)據(jù)進(jìn)行篩選,逐步剔除ROE不足15%,周期股,業(yè)績下滑的股票,以及最終用小熊三定理檢測出數(shù)據(jù)不真實(shí)的股票。最終獲得一份值得投資的股票列表。5.2測試過程運(yùn)行爬蟲,輸入scrapycrawlstock圖4.1爬蟲部分運(yùn)行過程得出數(shù)據(jù),以待進(jìn)一步處理。圖4.2stock爬蟲得到的txt文件和csv文件由于后續(xù)分析需要很多往年數(shù)據(jù),而爬取往年數(shù)據(jù)難度過大,所以手動(dòng)搜索對(duì)數(shù)據(jù)進(jìn)行填充,可以直接在愛問財(cái)網(wǎng)站輸入需要的數(shù)據(jù)進(jìn)行下載。圖4.3通過愛問財(cái)網(wǎng)站進(jìn)行數(shù)據(jù)補(bǔ)充圖4.4處理后的數(shù)據(jù)在整合數(shù)據(jù)之后,運(yùn)行select.py,對(duì)數(shù)據(jù)進(jìn)行處理,結(jié)果如下圖4.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論