大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)之Python金融應(yīng)用編程第十三講-金融中地大數(shù)據(jù)應(yīng)用與Python實(shí)現(xiàn)_第1頁
大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)之Python金融應(yīng)用編程第十三講-金融中地大數(shù)據(jù)應(yīng)用與Python實(shí)現(xiàn)_第2頁
大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)之Python金融應(yīng)用編程第十三講-金融中地大數(shù)據(jù)應(yīng)用與Python實(shí)現(xiàn)_第3頁
大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)之Python金融應(yīng)用編程第十三講-金融中地大數(shù)據(jù)應(yīng)用與Python實(shí)現(xiàn)_第4頁
大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)之Python金融應(yīng)用編程第十三講-金融中地大數(shù)據(jù)應(yīng)用與Python實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

北風(fēng)網(wǎng)項(xiàng)目實(shí)戰(zhàn)培訓(xùn)第十三講、金融中的大數(shù)據(jù)應(yīng)用及Python實(shí)現(xiàn)講師:朱彤(北風(fēng)網(wǎng)版權(quán)所有)Python金融應(yīng)用概述隨著云計(jì)算技術(shù)的出現(xiàn),大數(shù)據(jù)應(yīng)用開始逐步有所發(fā)展。那么什么是大數(shù)據(jù),你又應(yīng)當(dāng)如何通過大數(shù)據(jù)來獲得有用的信息?大數(shù)據(jù)與我們每天遇到的通常的數(shù)據(jù)形式有什么不同?本章將主要回答這些問題,并且向你介紹金融中大數(shù)據(jù)的使用。大數(shù)據(jù)工具提供了分析大量數(shù)據(jù)的可靠性工具,這些數(shù)據(jù)可能來自于多個(gè)來源。為了實(shí)現(xiàn)大數(shù)據(jù)需求,ApacheHadoop成為了金融機(jī)構(gòu)及公司的最主要選擇。這樣,對(duì)于金融工程師而言,了解Hadoop用于金融分析的方式是非常關(guān)鍵的。在我們開始處理大數(shù)據(jù)集的時(shí)候,我們還需要找到一種方式來存儲(chǔ)數(shù)據(jù)。最常規(guī)的存儲(chǔ)數(shù)據(jù)的方式是結(jié)構(gòu)化查詢語言(SQL)這樣的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。電子數(shù)據(jù)的本質(zhì)是總會(huì)發(fā)生變化的,而其他的一些存儲(chǔ)數(shù)據(jù)的方式就被引入,特別是關(guān)于非SQL的產(chǎn)品。非關(guān)系型數(shù)據(jù)庫機(jī)制的一種典型應(yīng)用是NoSQL,稱為NotOnlySQL。除了使用SQL類似的語言進(jìn)行數(shù)據(jù)管理意外,NoSQL允許存儲(chǔ)非結(jié)構(gòu)化的數(shù)據(jù),例如鍵值對(duì),圖形或者文件。因?yàn)閺脑O(shè)計(jì)角度的簡單,它也可以在某些環(huán)境下表現(xiàn)的更為有效。金融中NoSQL的一個(gè)應(yīng)用方式是存儲(chǔ)tick數(shù)據(jù)。本章將介紹使用NoSQL存儲(chǔ)tick數(shù)據(jù)的方式。概述本章我們將介紹如下話題:介紹大數(shù)據(jù),ApacheHadoop以及其組成成分獲得Hadoop并且運(yùn)行一個(gè)快速啟動(dòng)的虛擬機(jī)使用Hadoop的HDFS文件存儲(chǔ)使用Python和MapReduce結(jié)合實(shí)現(xiàn)一個(gè)對(duì)電子書的單詞計(jì)數(shù)的程序。在Hadoop運(yùn)行之前對(duì)MapReduce程序的檢驗(yàn)對(duì)于某只股票日度的價(jià)格變化進(jìn)行MapReduce操作使用Python分析MapReduce操作的結(jié)果介紹NoSQL獲取并運(yùn)行MongoDB獲取和安裝Python使用的PyMongo介紹PyMongo的數(shù)據(jù)庫和集合使用NoSQL集合進(jìn)行tick數(shù)據(jù)的插入,刪除,查找和存儲(chǔ)操作。了解大數(shù)據(jù)關(guān)于大數(shù)據(jù)有很多激動(dòng)人性的特性包含在其中。在開始本章的介紹之前,非常重要的一個(gè)工作室定義大數(shù)據(jù)以及了解你使用大數(shù)據(jù)來獲得有用信息的方式。大數(shù)據(jù)與我們?nèi)粘E龅降臄?shù)據(jù)有什么不同,例如新聞故事,報(bào)告,文獻(xiàn)以及聲音等相比有什么不同?大數(shù)據(jù)實(shí)際上用高速來刻畫的,它會(huì)累計(jì)到一個(gè)較大的數(shù)據(jù)量,通常是TB或PB級(jí)別。常規(guī)的軟件工具已經(jīng)無法在短時(shí)間內(nèi)獲取,處理,操作和管理這樣的數(shù)據(jù)。應(yīng)用于這些大規(guī)模的數(shù)據(jù)集的分析性的工具是用來揭示數(shù)據(jù)的信息及其之間的關(guān)系,以更好的用于預(yù)測和其他分析性的行為。隨著云計(jì)算的出現(xiàn),大數(shù)據(jù)變得越來越平常。大量的信息可以以較低的成本存儲(chǔ)在云端。這推動(dòng)了從關(guān)系型的存儲(chǔ)到非關(guān)系型的解決方案的過渡,例如NoSQL,允許非關(guān)系型的數(shù)據(jù)以較快的速率被獲取。通過在獲取的數(shù)據(jù)上進(jìn)行數(shù)據(jù)分析,公司可以改進(jìn)運(yùn)行的效率,分析的模式,運(yùn)行目標(biāo)的市場營銷計(jì)劃并改進(jìn)客戶的感知。金融行業(yè)的公司正在逐步將大數(shù)據(jù)整合到他們的運(yùn)行當(dāng)中,例如,實(shí)時(shí)分析客戶的交易來確定異常的行為和發(fā)現(xiàn)欺詐??蛻舻挠涗洠M(fèi)的習(xí)慣甚至是社交媒體的行為可以用來通過市場分割來改進(jìn)產(chǎn)品和服務(wù)。大數(shù)據(jù)同居提供了分析風(fēng)險(xiǎn)和信用方面大數(shù)據(jù)的可靠框架,而這樣的數(shù)據(jù)又是來源于很多渠道。Hadoop用于大數(shù)據(jù)分析ApacheHadoop是一個(gè)100%開源的框架,其主要功能有兩個(gè):存儲(chǔ)和處理大數(shù)據(jù)。它逐步成為對(duì)多個(gè)服務(wù)器中分布式并行處理數(shù)據(jù)的領(lǐng)先大數(shù)據(jù)工具,而且可以無限的擴(kuò)大規(guī)模。因?yàn)橐?guī)模擴(kuò)展性,靈活性,容錯(cuò)性以及低成本的特性,許多云計(jì)算解決方案提供商,金融機(jī)構(gòu)以及公司都使用Hadoop來滿足其大數(shù)據(jù)需求。Hadoop框架包含完成其功能的關(guān)鍵模塊:Hadoop分布式文件系統(tǒng)(HDFS),YetAnotherResourceNegotiator(YARN)以及MapReduce(MapR)。Hadoop用于大數(shù)據(jù)分析HDFS:HDFS是Hadoop特有的文件系統(tǒng),設(shè)計(jì)用來規(guī)模擴(kuò)展和可移植操作,允許大量的數(shù)據(jù)存儲(chǔ)在Hadoop集群的多個(gè)節(jié)點(diǎn)上,數(shù)據(jù)可以是GB規(guī)模甚至是TB規(guī)模。集群中的數(shù)據(jù)被劃分為小的128Mb的小的模塊,并分布在各個(gè)集群上。MapReduce數(shù)據(jù)處理函數(shù)用來對(duì)大數(shù)據(jù)集合的小的子集進(jìn)行操作,因此提供了大數(shù)據(jù)處理所需要的規(guī)模擴(kuò)展操作。HDFS文件系統(tǒng)使用TCP/IPsocket通信來作為一個(gè)大的文件系統(tǒng)在網(wǎng)絡(luò)中提供數(shù)據(jù)。YARN:YARN是一個(gè)資源管理和計(jì)劃平臺(tái)管理CPU,內(nèi)存以及在Hadoop集群中運(yùn)行的應(yīng)用的存儲(chǔ)。它包含負(fù)責(zé)如下功能的模塊:在相同集群運(yùn)行的應(yīng)用之間分配資源同時(shí)滿足一定約束,例如隊(duì)列功能和用戶限制等的功能;基于每個(gè)應(yīng)用的資源需求計(jì)劃任務(wù);協(xié)調(diào)計(jì)劃的合適資源;跟蹤和監(jiān)控應(yīng)用程序的運(yùn)行以及其資源使用。MapReduce:MapReduce是Hadoop用于處理和生成大數(shù)據(jù)集合的軟件程序框架。對(duì)于開發(fā)者來說,MapReduce可能是Hadoop中最重要的程序設(shè)計(jì)組成。它包含兩個(gè)功能,map和reduce。Map功能處理鍵值對(duì)來產(chǎn)生中間鍵值對(duì),reduce功能將所有的具有相同中間鍵的中間鍵值對(duì)合并起來來得到結(jié)果。MapReduce減輕了軟件需要處理的跨網(wǎng)絡(luò)移動(dòng)數(shù)據(jù)的需求,讓處理軟件直接面對(duì)數(shù)據(jù)。MapReduce主要是使用Java進(jìn)行處理,其他的語言,例如SQL和Python,也可以對(duì)MapReduce進(jìn)行實(shí)現(xiàn),使用Hadoop流工具。大數(shù)據(jù)適合我么?也許你正在運(yùn)行一個(gè)文件,大約幾百兆的規(guī)模,而你目前的數(shù)據(jù)分析工具運(yùn)行的過于緩慢。因?yàn)榇髷?shù)據(jù)通常包含TB或GB級(jí)別的存儲(chǔ),那么你可能會(huì)問,ApacheHadoop在這種情況下適合我么?注意Hadoop實(shí)現(xiàn)的常規(guī)計(jì)算時(shí)將每一個(gè)你數(shù)據(jù)中的輸入進(jìn)行映射,然后進(jìn)行某些簡化計(jì)算的操作來加總個(gè)體的部分。你事實(shí)上可以使用編程語言,例如SQL和Python來實(shí)現(xiàn)相同的分組和計(jì)數(shù)工作。另外,存儲(chǔ)節(jié)點(diǎn)允許你更為容易的表達(dá)計(jì)算流?;蛘吣阋苍S希望考慮移植數(shù)據(jù)分析工具到pandas或R,它們也是非常強(qiáng)大的,可以處理GB級(jí)別的數(shù)據(jù),編碼是有效的,且沒有內(nèi)存泄漏。許多商業(yè)的SQL服務(wù)器也可以完成這項(xiàng)任務(wù)。除此之外,內(nèi)存和存儲(chǔ)成本是可以接受的,這樣你可以在自己的工作站上運(yùn)行大規(guī)模的計(jì)算。如果你的數(shù)據(jù)是TB級(jí)別的,那么就沒有那么幸運(yùn),沒有其他的一些選擇,那么ApacheHadoop以及其他的大數(shù)據(jù)處理工具例如ApacheSpark看似就是最好的選擇,它們會(huì)提供規(guī)模可擴(kuò)展性,可支付以及容錯(cuò)性。獲取ApacheHadoopApacheHadoop的官方網(wǎng)頁是,這里,你可以找到深入的文檔,手冊(cè)以及ApacheHadoop的發(fā)布版本。Hadoop是用Java寫的,需要安裝JVM到你的單一節(jié)點(diǎn)運(yùn)行,它支持GNU/Linux以及Windows。因?yàn)楸菊碌闹饕康氖墙榻B與ApacheHadoop相關(guān)的Python編程,理想的是有一種快速的獲取完整的Hadoop生態(tài)系統(tǒng)的方式。云計(jì)算提供商Cloudera提供一組免費(fèi)的QuickStartVM,包含單一節(jié)點(diǎn)的ApacheHadoop集群,完整的樣本示例以及幫助我們直接管理集群的工具。因此,我們?cè)谶@里使用虛擬機(jī)的方式。下載地址/content/support/en/downloads/quickstart_vms.html因?yàn)閂M是64位的,因此需要64位的基礎(chǔ)操作系統(tǒng)以及支持64位的虛擬機(jī),需要4GB的內(nèi)存。運(yùn)行的虛擬機(jī)的用戶名和密碼都是cloudera,這個(gè)包含root權(quán)限,主目錄是/home/clouderaHadoop處理一個(gè)單詞計(jì)數(shù)程序最為簡單的一種了解Hadoop編程的方式是一個(gè)簡單的對(duì)相對(duì)比較大的電子書的單詞計(jì)數(shù)功能。Map程序會(huì)讀入文本中的每一行,以空格或制表符分割并返回一個(gè)鍵值對(duì),默認(rèn)的計(jì)數(shù)為1。而程序reduce會(huì)讀入來自于map程序的說有鍵值對(duì),并且對(duì)相似的單詞進(jìn)行加總。Hadoop的產(chǎn)出是一個(gè)輸出文件,包含整個(gè)電子書單詞的一個(gè)列表以及單詞出現(xiàn)的次數(shù)。下載樣本數(shù)據(jù):Gutenberg提供了超過100000本免費(fèi)的電子書,以HTML,EPUB,Kindle以及純文本UTF-8的格式存儲(chǔ)。我們?cè)谶@里使用電子書進(jìn)行測試,我們選用由JamesJoyce所編著的Ulysses一書。純文本UTF-8文件的路徑是http://www.G/ebooks/4300.txt.utf-8,使用Firefox或者其他的網(wǎng)絡(luò)瀏覽器,我們可以下載這個(gè)文件,并將其保存在Downloads文件夾中,文件名為pg4300.txt。在將文件下載到磁盤以后,我們將它復(fù)制到HadoopHDFS文件存儲(chǔ)中進(jìn)行處理。這樣的操作會(huì)將電子書保存到Hadoop的HDFS存儲(chǔ),名稱相同為pg4300.txt。為了保證拷貝操作的成功,我們使用Hadoopfs–ls命令來看一下文件。這樣可以看到Hadoop文件存儲(chǔ)成功的保存了我們的文件。Hadoop處理一個(gè)單詞計(jì)數(shù)程序我們下面要在Hadoop上運(yùn)行Python編寫的map程序,編寫一個(gè)名為mapper.py的文件,可以在后面使用。當(dāng)運(yùn)行mapper.py的時(shí)候,解釋器會(huì)讀入輸入緩沖區(qū)的來自于文本的數(shù)據(jù)。所有的文本都被使用空白字符進(jìn)行分隔,每個(gè)單詞被賦值為計(jì)數(shù)一次,使用制表符進(jìn)行分隔輸出。CentOS中的一個(gè)用戶友好的編輯器是gedit,創(chuàng)建一個(gè)名為word_count的目錄,保存文件為/home/cloudera/word_count/mapper.py。程序文件mapper.py需要被指定為Linux系統(tǒng)下可執(zhí)行的文件,從終端使用一個(gè)命令可以進(jìn)行此項(xiàng)操作。下面我們創(chuàng)建reduce.py程序,也存放在/home/cloudera/word_count/目錄下。這里,reduce程序從map程序讀入所有的鍵值對(duì)。當(dāng)前的單詞以及單詞的技術(shù)通過分隔符制表符來獲得,并且和之前出現(xiàn)的單詞對(duì)比。如果相同的單詞,則增加單詞的計(jì)數(shù)加1,然后返回結(jié)果,打印單詞本身以及計(jì)數(shù)的數(shù)量,用制表符分隔。再一次的,應(yīng)當(dāng)把reduce.py也指定為是Linux可運(yùn)行的程序。這樣可以保證我們的程序沒有限制的運(yùn)行。Hadoop處理一個(gè)單詞計(jì)數(shù)程序在Hadoop中運(yùn)行我們的map和reduce程序之前,我們可以在本機(jī)上首先運(yùn)行,保證程序正常的工作。我們可以使用圖形界面的方式看到我們剛剛建立的兩個(gè)python文件。在終端,我們首先運(yùn)行一下mapper.py這個(gè)Python文件。和預(yù)期的一樣,map程序給出了每個(gè)讀入的單詞,設(shè)定計(jì)數(shù)為1,并且打印了每一行的結(jié)果。在終端,運(yùn)行reduce.py程序。我們看到,reduce程序?qū)τ趍ap程序中出現(xiàn)的相似單詞的計(jì)數(shù)進(jìn)行了相加,并打印了每行的結(jié)果。Hadoop處理一個(gè)單詞計(jì)數(shù)程序在Hadoop中運(yùn)行MapReduce:我們現(xiàn)在可以在Hadoop上運(yùn)行我們的MapReduce操作,在終端使用命令運(yùn)行。這里,我們使用Hadoop的Streaming工具來應(yīng)用我們的Python代碼作map和reduce的操作,在這里進(jìn)行HadoopStreaming操作的JavaJAR文件為hadoop-streaming-2.6.0-mr1-cdh5.5.0.jar,存放在/usr/lib/hadoop-0.20-mapreduce/contrib/streaming/目錄下。其他的系統(tǒng)中,HadoopStreaming的JAR文件可能存放在其他目錄,或者使用不同的文件名。通過提供其他的參數(shù),指定了輸入文件,輸出的目錄,這些都是Hadoop操作所必須的。在運(yùn)行Hadoop時(shí),終端中的輸出告訴了我們一些有趣的事實(shí),包括MapReduce操作可以在http://quickstart.cloudera:8088/proxy/application_1417846146061_0002進(jìn)行跟蹤,也告訴我們操作的進(jìn)程,目前50%,因?yàn)檎麄€(gè)運(yùn)行需要一定的時(shí)間。在結(jié)束的時(shí)候,會(huì)出現(xiàn)文件的大小,這告訴我們成功的運(yùn)行了程序,而結(jié)果被寫入到輸出文件夾pg4300-output中,我們可以看一下HDFS文件系統(tǒng)來找到這個(gè)輸出。我們看到在文件存儲(chǔ)中加入了一個(gè)新的文件夾,這是我們的輸出文件夾,我們可以看一下這個(gè)文件夾的內(nèi)容。Hadoop處理一個(gè)單詞計(jì)數(shù)程序這里,我們可以看到目標(biāo)文件夾中Hadoop給出了兩個(gè)文件,_SUCCESS文件是空文件,告訴我們Hadoop所進(jìn)行的MapReduce操作成功的完成。第二個(gè)文件是part-00000,包含reduce操作的結(jié)果,我們可以使用fs–cat命令來查看。使用Hue來瀏覽Hadoop:除了使用終端瀏覽HDFS文件系統(tǒng)以外,另外一種方式使用GUI接口來查看HDFS文件系統(tǒng),這可以通過Hueweb接口管理器來進(jìn)行。Hue也是觀察大量輸出信息的最好方式,例如觀察所有的單詞計(jì)數(shù)操作的結(jié)果。地址是:http://quickstart.cloudera:8888/filebrowser/深入學(xué)習(xí)——金融中的Hadoop現(xiàn)在我們已經(jīng)知道了如何使用Hadoop進(jìn)行簡單的對(duì)一個(gè)較大的文件進(jìn)行單詞計(jì)數(shù)工作。接下來我們深入一步,使用Hadoop進(jìn)行量化金融分析。首先我們來計(jì)算某股票價(jià)格變化的日內(nèi)歷史百分比。從Yahoo財(cái)經(jīng)獲取IBM股票價(jià)格數(shù)據(jù):為了獲得數(shù)據(jù)集,我們可以使用Yahoo金融提供的歷史股票價(jià)格數(shù)據(jù)。使用Firefox或其他CentOS環(huán)境中的web瀏覽器,我們可以下載日度的價(jià)格數(shù)據(jù),存儲(chǔ)為CSV文件,地址是:/table.csv?a=IBM在這個(gè)例子中,我們使用IBM的股票數(shù)據(jù),將這個(gè)文件下載到用戶主目錄的Downloads文件夾下,并重命名為ibm.csv,如果我們看一下這個(gè)文件,會(huì)發(fā)現(xiàn)日度的價(jià)格是今天直到1962年。接下來將目標(biāo)CSV文件拷貝到Hadoop的HDFS文件系統(tǒng)。如果在HDFS文件列表中,有這個(gè)文件,則表明操作成功。深入學(xué)習(xí)——金融中的Hadoop接下來要做的事情是創(chuàng)建我們的map和reduce程序來研究股票價(jià)格。在我們的主目錄,創(chuàng)建一個(gè)新的目錄,稱為stock,我們可以將前一節(jié)所寫的mapper.py和reduce.py拷貝到文件夾/home/cloudera/stock/下。使用gedit或其他文本編輯器打開mapper.py來編輯我們的程序。修改程序告訴我們的map程序在讀取CSV文件的時(shí)候忽略第一行,因?yàn)榈谝恍邪哂嗟念^信息。下面的行包含日期,開盤價(jià),最高價(jià),最低價(jià),收盤價(jià),交易量和調(diào)整的收盤價(jià),使用逗號(hào)分隔。我們關(guān)心的是使用開盤價(jià)和收盤價(jià)計(jì)算的一日價(jià)格的變化。程序輸出一位小數(shù)表示的值,使用逗號(hào)隔開。我們將使用相同的reduce程序,不進(jìn)行任何改變。保證兩個(gè)文件都可以被執(zhí)行,這需要在終端中使用命令進(jìn)行權(quán)限改變。在進(jìn)行Hadoop處理之前,我們先在系統(tǒng)中對(duì)程序進(jìn)行運(yùn)行,我們檢驗(yàn)mapper.py程序。這會(huì)給我們一個(gè)很長的價(jià)格變化的列表。這樣我們看到map程序的結(jié)果非常類似于之前的單詞計(jì)數(shù)程序。深入學(xué)習(xí)——金融中的Hadoop現(xiàn)在我們就可以在Hadoop中運(yùn)行map和reduce程序了,這里使用的Unix命令類似于之前的單詞計(jì)數(shù)程序,只有很少的改變。這樣Hadoop的MapReduce操作就開始運(yùn)行。當(dāng)這個(gè)運(yùn)行結(jié)束以后,我們可以看到簡略的結(jié)果。和預(yù)期一樣,輸出結(jié)果會(huì)被存放到HDFS文件系統(tǒng)的stock-output目錄下。在進(jìn)行結(jié)果的研究分析之前,我們需要將這個(gè)HDFS文件系統(tǒng)中的文件拷貝到本地的工作目錄,在終端可以使用命令進(jìn)行。這樣我們可以使用這個(gè)文件。使用Hue,我們還是可以觀察輸出的結(jié)果。在使用Python對(duì)結(jié)果進(jìn)行繪圖之前,我們需要首先安裝matplotlib模塊,這很簡單,在終端使用安裝命令就可以。這需要一定的時(shí)間,結(jié)束以后,matplotlib模塊就安裝到了我們的系統(tǒng)中。我們編寫一個(gè)python文件,來繪制結(jié)果的柱狀圖。讀入輸出中的每一行,將這個(gè)結(jié)果分隔為x和y值的列表中,然后使用matplotlib的bar函數(shù)進(jìn)行繪圖。width參數(shù)給出了柱子的寬度,這里我們縮小到0.1,以實(shí)現(xiàn)完全的表示。我們還關(guān)心的是最大和最小的IBM股票的價(jià)格變化,這些數(shù)值我們進(jìn)行返回。將這個(gè)文件命名為analysis.py,并存儲(chǔ)在/home/cloudera/stock/目錄下。從終端中,我們可以運(yùn)行這個(gè)文件??傮w來看,日內(nèi)IBM的價(jià)格變化最大是23.5%,最小是-13%,日內(nèi)變化的分布以0.0為中心。NoSQL許多云計(jì)算提供商都提供類似于NoSQL的存儲(chǔ)工具,在模型的文檔類型中存儲(chǔ)非結(jié)構(gòu)化的數(shù)據(jù)。本節(jié),我們將探討NoSQL作為一種金融數(shù)據(jù)存儲(chǔ)方式的實(shí)現(xiàn)。有許多開源的數(shù)據(jù)庫免費(fèi)的支持NoSQL存儲(chǔ)。MongoDB是一個(gè)用C++編寫的開源的文檔數(shù)據(jù)庫。MongoDB的官方網(wǎng)站是。MongoDB有Linux,Windows,MacOSX以及Solaris的版本。我們需要到/downloads下載和安裝MongoDB到你的本地機(jī)器。MongoDB管理服務(wù)在安裝完成的時(shí)候是默認(rèn)的增加到你的操作系統(tǒng)的實(shí)時(shí)環(huán)境中,可以使用命令行來運(yùn)行。在官方文檔中還包括如何開啟mongodb服務(wù)以及在你的機(jī)器上運(yùn)行的指南。創(chuàng)建數(shù)據(jù)目錄和運(yùn)行MongoDB:在首次運(yùn)行MongoDB之前,我們需要?jiǎng)?chuàng)建一個(gè)目錄,其中mongod過程寫入數(shù)據(jù)。Mongod過程默認(rèn)使用/data/db作為默認(rèn)你目錄。我們?cè)谶x擇的目錄下創(chuàng)建一個(gè)data目錄,保證你的用戶賬戶對(duì)此目錄有讀和寫的權(quán)限。在Windows中,打開命令行模式,移動(dòng)到你的工作目錄,創(chuàng)建數(shù)據(jù)目錄,并啟動(dòng)mongod服務(wù)。在我們的例子中,安裝文件存儲(chǔ)在c:\mongos,工作目錄是c:\test。MongoDB獲得PyMongo:PyMongo模塊包含使用Python與MongoDB進(jìn)行交互的工具。PyMongo的官方主頁是/pypi/pymongo/。這里包含了安裝指南,我們會(huì)看到,安裝的過程非常類似于常規(guī)的在Windows,Linux,或MacOSX上安裝Python包的過程。最簡單的安裝PyMongo的方式是下載項(xiàng)目源文件,解壓到本地硬盤,然后使用終端跟蹤到這個(gè)目錄,運(yùn)行pythonsetup.pyinstall來進(jìn)行安裝。另外,如果你的系統(tǒng)中安裝有pip,也可以使用它來進(jìn)行安裝。運(yùn)行連接檢測:我們來進(jìn)行一個(gè)簡單的連接檢測,保證我們的MongoDB服務(wù)以及PyMongo模塊正確的安裝。獲取數(shù)據(jù)庫:使用單一的數(shù)據(jù)目錄data/db,我們可以創(chuàng)建過個(gè)獨(dú)立的數(shù)據(jù)庫。在PyMongo的幫助下,訪問數(shù)據(jù)庫可以通過一個(gè)簡單的MongoDB實(shí)例來實(shí)現(xiàn)。例如,如果你希望數(shù)據(jù)庫的名字叫ticks_db,來存儲(chǔ)某些tick數(shù)據(jù),那么可以很容易的創(chuàng)建。如果數(shù)據(jù)庫的命名方式不支持,那么也是可以訪問的。MongoDB獲取一個(gè)集合:集合是一組文件,存儲(chǔ)在數(shù)據(jù)庫中,類似于關(guān)系型數(shù)據(jù)庫的表格。一個(gè)文件可以接受不同的輸入類型,使用二元JSON(BSON)格式來設(shè)定,包括基本類型例如字符串和整數(shù),Python列表形式表示的數(shù)組,UTF-8編碼的Unicode的二元字符串,ObjectId,也就是唯一的標(biāo)識(shí)符以及Python字典對(duì)象。記住每個(gè)文檔可以包含最多16MB數(shù)據(jù)。在我們的李子中,我們感興趣的是存儲(chǔ)AAPL股票的tick數(shù)據(jù),我們?cè)谝粋€(gè)名為aapl的集合中存儲(chǔ)tick數(shù)據(jù)。類似于訪問數(shù)據(jù)庫,你對(duì)集合的命名如果不被支持,例如,命名為aapl-collection,那么也是可以被用特殊方式訪問的。注意如果對(duì)象插入到的數(shù)據(jù)庫或者集合是不存在的,那么會(huì)自動(dòng)創(chuàng)建。MongoDB插入一個(gè)文檔:假設(shè)我們現(xiàn)在針對(duì)的是AAPL的市場tick數(shù)據(jù)進(jìn)行操作,我們感興趣的是如何存儲(chǔ)這些數(shù)據(jù)。我們將tick數(shù)據(jù)結(jié)構(gòu)化為一個(gè)Python的字典,存儲(chǔ)tick的名稱,收到的時(shí)間,開盤,最高,最低和最后的價(jià)格,以及總交易量等交易信息。假設(shè)我們有一條10AM收到的數(shù)據(jù)。我們可以簡單的使用insert函數(shù)在集合中插入一個(gè)字典對(duì)象,這樣由insert函數(shù)會(huì)生成一個(gè)唯一的鍵,有一個(gè)特殊的域命名為_id。在插入了第一個(gè)文檔之后,aapl集合會(huì)在服務(wù)器上創(chuàng)建,我們可以列出數(shù)據(jù)庫中所有的集合來證明這一點(diǎn)。獲取單一的文檔:最基本的對(duì)集合中文檔的查詢是使用find_one函數(shù),使用這個(gè)方法,沒有任何參數(shù),可以給出我們第一個(gè)匹配的項(xiàng)目,如果沒有匹配,則是None。否則,參數(shù)可以接收一個(gè)字典作為過濾的條件。我們可以使用多種方法返回相同的結(jié)果,注意的是,ObjectId屬性需要被轉(zhuǎn)化為字符串來訪問服務(wù)器生成的_id字段。刪除文檔:remove函數(shù)可以刪除集合中匹配的文檔MongoDB批量插入文檔:我們可以使用insert函數(shù)接收一個(gè)逗號(hào)分隔的字典列表。我們現(xiàn)在加入兩個(gè)假想的后兩個(gè)時(shí)間點(diǎn)的tick價(jià)格數(shù)據(jù)到我們的集合中。集合中文檔的計(jì)數(shù):count函數(shù)可以用于任何查詢來計(jì)算符合條件的個(gè)數(shù),也可以與find函數(shù)共同使用。查找文檔:find函數(shù)類似于find_one函數(shù),除了它是返回一個(gè)文檔的列表,沒有其他的參數(shù),find函數(shù)簡單的返回所有集合中的項(xiàng)目。同樣,也可以對(duì)tick數(shù)據(jù)的集合進(jìn)行過濾搜索,例如,我們可以找到10:02之前的兩條數(shù)據(jù)。在find.sort的例子中,我們排序了搜索結(jié)果,按照時(shí)間升序的順序,我們也可以進(jìn)行降序排序。MongoDB總結(jié):使用PyM

溫馨提示

  • 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)論