刺猬教你量化投資(一) :Python入門(mén)就這樣

image.png

Python初探

近年來(lái)这揣,量化投資日漸盛行悬槽,聽(tīng)上去是有些高大上的感覺(jué)怀吻,但入門(mén)后又會(huì)發(fā)現(xiàn),其實(shí)量化投資并沒(méi)有太多高深難懂的玄機(jī)初婆,不過(guò)是為投資者提供了一套蓬坡,將投資想法與實(shí)踐相結(jié)合的便捷工具而已。

做量化投資磅叛,目前最流行的編程語(yǔ)言非Python莫屬渣窜。相對(duì)于商用軟件Matlab,Python不僅可免費(fèi)使用宪躯,而且具有非常多的乔宿、功能強(qiáng)大的擴(kuò)展庫(kù),對(duì)于非計(jì)算機(jī)專(zhuān)業(yè)的投資者來(lái)說(shuō)访雪,相對(duì)優(yōu)勢(shì)非常明顯详瑞。

配置運(yùn)行環(huán)境

要運(yùn)行Python,首先要去https://www.python.org/download/ 下載安裝臣缀。網(wǎng)站上有2.7.x和3.6.x兩個(gè)系列的版本坝橡,做金融分析目前用2.7就好,對(duì)各種庫(kù)的兼容會(huì)好些精置。

由于后面還需要安裝Numpy计寇、Pandas等庫(kù)用于金融數(shù)據(jù)分析,有個(gè)簡(jiǎn)便的環(huán)境配置方法脂倦,就是安裝Canopy或者Anaconda番宁。這兩個(gè)集成安裝軟件能方便我們對(duì)各種庫(kù)進(jìn)行管理。下面我們以Anoconda為例進(jìn)行展開(kāi)赖阻。

Anaconda是一個(gè)用于科學(xué)計(jì)算的Python發(fā)行版蝶押,支持Linux, Mac, Windows, 包含了眾多流行的科學(xué)計(jì)算、數(shù)據(jù)分析的Python包火欧。其安裝包如果直接從官網(wǎng)上下載棋电,速度會(huì)非常慢,幸好清華大學(xué)開(kāi)源軟件鏡像站上可以下載到苇侵。跳轉(zhuǎn)過(guò)去點(diǎn)這里

下載好后赶盔,點(diǎn)幾次“下一步”就安裝完成了。

Python基礎(chǔ)知識(shí)

  1. 萬(wàn)物皆對(duì)象

對(duì)象與變量是編程活動(dòng)最基本的處理單元榆浓,在Python中于未,可以說(shuō)萬(wàn)物皆為對(duì)象。對(duì)象的類(lèi)型有很多,比如整數(shù)沉眶、浮點(diǎn)數(shù)打却、字符串、列表谎倔、元組柳击、字典、集合等片习,甚至連函數(shù)捌肴、模塊等都可以作為對(duì)象,為其賦予變量的標(biāo)簽藕咏。

對(duì)于每個(gè)對(duì)象状知,可從三個(gè)緯度進(jìn)行描述,分別是地址孽查、類(lèi)型和值饥悴。舉個(gè)例子:

關(guān)于對(duì)象“8"

查看對(duì)象“8”的值
In [1]:8
Out[1]:8

查看對(duì)象“8”的內(nèi)存地址
In [2]:id(8)
Out[2]:31684784L

查看對(duì)象“8”的類(lèi)型
In [3]:type(8)
Out[3]:Int
  1. 變量貼標(biāo)簽

在Python中,等號(hào)“=”并不是數(shù)學(xué)意義上的等號(hào)盲再,而是賦值的意思西设。比如說(shuō):

In [4]:a=8
print a
8

a=8意味著將對(duì)象“8”的值賦給變量a,然后“打印”a的結(jié)果就是整數(shù)8答朋。對(duì)象屬于常量贷揽,是不可變的,而變量則不然梦碗,可以在程序的運(yùn)行過(guò)程中不斷被賦予新的值禽绪。比如說(shuō):

In [5]:a=8
a=10
a
Out[5]:10
  1. 數(shù)字的類(lèi)型

關(guān)于對(duì)象的類(lèi)型,可用內(nèi)置函數(shù)type()進(jìn)行查看洪规。僅對(duì)數(shù)字而言印屁,其類(lèi)型主要有5種,分別是整數(shù)型Int淹冰、長(zhǎng)整型Long库车、浮點(diǎn)型Float、布爾型Bool(判斷真假1為真0為假)以及復(fù)數(shù)型Complex樱拴。比如說(shuō):

整數(shù)型Int 長(zhǎng)整型Long 浮點(diǎn)型Float 布爾型Bool 復(fù)數(shù)型Complex
1 888888888888L 1.02 True 4+3j
-1 323242343L 4.3 False -2+9j
  1. 三種引號(hào)

“”和‘’都可以括住字符串,但當(dāng)一個(gè)句子中含有引號(hào)洋满,則需要分別用“”和‘’來(lái)做區(qū)分晶乔,方便Python識(shí)別。例如先要輸出this is an “apple”.牺勾,就需要輸入print 'this is an “apple”.'

當(dāng)需要輸出多行字符串時(shí)正罢,可用三引號(hào)進(jìn)行頭尾標(biāo)注,例如:

In [6]:a='''you
are
beautiful'''
print a
?
you
are
beautiful
  1. 轉(zhuǎn)義符

轉(zhuǎn)義符用斜杠“\”表示驻民,用于消除字符本身的含義翻具。例如要輸出It's an apple.履怯,不能直接打print 'It's an apple.', 而是需要在句子中的’前加上一個(gè)\。

In [7]:print 'It\'s an apple.'
It's an apple.
  1. 自然字符串

通過(guò)在字符串前面加上r或R裆泳,即可將字符串的內(nèi)容原封不動(dòng)地輸出叹洲,即使內(nèi)部含有命令語(yǔ)句,Python也不會(huì)執(zhí)行工禾。比如說(shuō)可以用\n來(lái)進(jìn)行換行运提,若輸入print 'It's an apple. \n',程序輸出的結(jié)果便是It's an apple. \n闻葵。

  1. 字符串格式變換
  • 將字符串變成大寫(xiě)民泵,用upper()函數(shù)。但是槽畔,由于字符串不可變栈妆,即使用了upper()函數(shù),a也還是那個(gè)a厢钧,唯有將a.upper()賦予一個(gè)新的變量b签钩,才能將其顯示。
In [8]:a="Hello world"
b=a.upper()
print a
print b

Hello world
HELLO WORLD
  • 函數(shù)istitle()可判斷字符串中所有首字母是否為大寫(xiě)坏快,其他字母為小寫(xiě)铅檩,若是則返回True,否則為False莽鸿。

  • 函數(shù)isupper() 可判斷字符串中所有字母是否為大寫(xiě)昧旨,若是則返回True,否則為False祥得。

  • 按字母將字符串分割為列表兔沃,用split("")函數(shù)。

  • 關(guān)于切片级及,若要選取字符串中某一個(gè)字母乒疏,可以用a[0]這種格式。0代表第一個(gè)字母饮焦,如此類(lèi)推怕吴。跟Java的表示方式一樣。倒選也可以县踢,最后一個(gè)字母是a[-1]转绷,倒數(shù)第二個(gè)字母是a[-2]。

    值得注意的是硼啤,如果要抽取多個(gè)字母议经,如2個(gè)字母,則需寫(xiě)成a[0:2],到2結(jié)束煞肾,不包括2咧织,Python列表、元組籍救、字符串等都是包前不包后的习绢!

    想偷懶的話,0可不寫(xiě)钧忽,默認(rèn)是從0開(kāi)始毯炮,或到最后結(jié)束。a[:2]相當(dāng)于a[0:2]耸黑,a[-2:]則表示最后兩個(gè)字母桃煎。

    另外,還可以用循環(huán)結(jié)構(gòu)跳著切大刊,比如:

In [9]:a="beautiful"
[a[i] for i in (1,4,8)]
Out[9]:['e', 't', 'l']
  • 字符串可用運(yùn)算符为迈,比如“+”則表示兩個(gè)字符串的連結(jié),又比如要打印“Hello world”10遍缺菌,則可用“*”號(hào):
In [10]: print "Hello world\n" *10
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world

但要注意葫辐,不同類(lèi)型的字符串不能相加,會(huì)導(dǎo)致Python報(bào)錯(cuò)伴郁。如果需要將整數(shù)型數(shù)字和字符串連結(jié)起來(lái)耿战,則可以用str()函數(shù)將數(shù)字變成字符串的類(lèi)型,再進(jìn)行連結(jié)焊傅。也可以在print的時(shí)候用反引號(hào)``將數(shù)字變量變?yōu)樽址兞俊?/p>

  1. 關(guān)于列表

列表用[]來(lái)表示剂陡,里面可以有序地放一堆東西。每個(gè)單獨(dú)項(xiàng)稱(chēng)作元素狐胎,元素加起來(lái)就是數(shù)組鸭栖,存儲(chǔ)一連串元素的容器就是列表。

  • 查看列表序列的長(zhǎng)度可以用len()函數(shù)握巢,比如:
In[11]:a=['apple', 'banana', 'orange']
len(a)
Out[11]:3
  • 列表的內(nèi)容是可變的晕鹊,也就是說(shuō)列表中的元素可通過(guò)賦值來(lái)實(shí)現(xiàn)替換。一旦作出修改暴浦,原來(lái)的列表就不復(fù)存在溅话,只剩下修改后的新列表了。
In [12]:a=['apple', 'banana', 'orange']
a[0]='boat'
print a
?
['boat', 'banana', 'orange']
  1. 列表的函數(shù)

作為最基本的數(shù)據(jù)結(jié)構(gòu)肉渴,我們可以用函數(shù)對(duì)列表進(jìn)行處理公荧。當(dāng)忘記函數(shù)具體名稱(chēng)的時(shí)候,可以輸入list.+tab鍵進(jìn)行查詢(xún)同规。

  • 若要追加元素進(jìn)列表,可使用list.append(x), 將x追加進(jìn)list中。比如:
In [13]:a=['apple', 'banana', 'orange']
print a
a.append('strawberry')
print a

['apple', 'banana', 'orange']
['apple', 'banana', 'orange', 'strawberry']
  • 若追加的不僅僅是一個(gè)元素券勺,而是一個(gè)列表绪钥,則可以用list.append(x)或者list.extend(x)。兩者的區(qū)別在于关炼,append是整個(gè)x列表作為一個(gè)新元素追加進(jìn)原列表中程腹,而extend則是將x列表中的元素逐個(gè)加入到原列表中。

  • 若要計(jì)算元素出現(xiàn)的頻率儒拂,則可用list.count(x)函數(shù)

  • 若要?jiǎng)h除某個(gè)元素寸潦,則可用list.remove(x)函數(shù)。當(dāng)使用此函數(shù)時(shí)社痛,Python僅會(huì)刪除第一x见转,后面的x則保留。

  • 若要對(duì)列表的元素進(jìn)行排序蒜哀,則用list.sort()函數(shù)斩箫,默認(rèn)從小到大排列。若要從大到小排列撵儿,則用list.sort(reverse=true)函數(shù)乘客。若列表的元素是字符串,也能用此函數(shù)進(jìn)行排序淀歇,排序的規(guī)則是字符串的字母順序易核。

  1. 關(guān)于元組

與列表的用途類(lèi)似,列表用[]表示浪默,而元組用()表示牡直。兩者的區(qū)別在于列表可修改,而元組一旦設(shè)立就只能讀取浴鸿。目的是防止用戶亂改源代碼的內(nèi)容井氢。

  1. 關(guān)于集合

集合可以用作運(yùn)算,求交集岳链,求并集花竞,求差集等。我們可以用set()函數(shù)將列表變成集合掸哑,比如:

In [14]:a=['apple', 'banana', 'orange']
set(a)
Out[14]:{'apple', 'banana', 'orange'}

也可以用list()函數(shù)把集合變回列表约急,比如:

In [15]:a={'apple', 'banana', 'orange'}
a=list(set(a))
a.sort()
a
Out[15]:['apple', 'banana', 'orange']
  • 集合的運(yùn)算非常便捷,比如說(shuō)去重:
In [16]:a={'apple', 'banana', 'orange','banana', 'orange','apple','banana'}
print a
set(['orange', 'banana', 'apple'])

比如說(shuō)求交集苗分,可用“&”表示:

In [17]:a={'apple', 'banana', 'orange','banana', 'orange','apple','banana'}
b={'apple', 'banana', 'watermalon'}
c=a&b
print c

set(['banana', 'apple'])

比如說(shuō)求并集厌蔽,可用“|”表示:

In [18]:a={'apple', 'banana', 'orange','banana', 'orange','apple','banana'}
b={'apple', 'banana', 'watermalon'}
c=a|b
print c

set(['watermalon', 'apple', 'orange', 'banana'])

比如說(shuō)求差集,可用“-”表示:

In [19]:a={'apple', 'banana', 'orange','banana', 'orange','apple','banana'}
b={'apple', 'banana', 'watermalon'}
c=a-b
print c

set(['orange'])
  1. 關(guān)于字典

想想新華字典摔癣,查找到某個(gè)字奴饮,然后后面就會(huì)有該字的內(nèi)涵解釋纬向。Python的字典亦是如此,我們用大括號(hào)將字典的內(nèi)容括起來(lái)戴卜,然后字典內(nèi)部的每個(gè)元素都有兩個(gè)部分組成逾条,一個(gè)是字,一個(gè)是內(nèi)涵解釋投剥。正式的叫法是一個(gè)key师脂,一個(gè)value。

再打個(gè)比方江锨,有本字典包含了身份證上的所有信息吃警,包括姓名、性別啄育、出生年月酌心、地址。若我們想調(diào)取某一元素的信息灸撰,只需print key的值即可谒府,表現(xiàn)形式如下:

In [20]:a={"姓名":"張三",'性別':'男','出身年月':'1999/01/01','地址':'火星'}
print a['姓名']

張三
  • 要往字典里添加信息也很方便,直接定義即可:
In [21]:a={"name":"Zhangsan",'gender':'male','DOB':'1999/01/01','address':'Mars'}
a['id number']=123456789
print a

{'DOB': '1999/01/01', 'gender': 'male', 'id number': 123456789, 'name': 'Zhangsan', 'address': 'Mars'}
  • 查看一下字典里有什么key浮毯,可用dict.keys()函數(shù)完疫。

  • 查看一下字典里有什么value,可用dict.values()函數(shù)债蓝。

  • 若要?jiǎng)h除某個(gè)key壳鹤,則可用dict.pop('key')函數(shù),刪除后該函數(shù)會(huì)返回已被刪除的value值饰迹。

結(jié)語(yǔ)

以上便是Python的入門(mén)知識(shí)芳誓。雖然目前看來(lái),上述內(nèi)容與金融數(shù)據(jù)分析還沒(méi)出現(xiàn)明顯的關(guān)系啊鸭,但掌握好這些基礎(chǔ)知識(shí)锹淌,日后寫(xiě)代碼或閱讀代碼時(shí)才能有效提高效率。

第一篇文章就寫(xiě)到這里赠制,下一篇將會(huì)講述Python的運(yùn)算方式赂摆,敬請(qǐng)期待。



刺猬偷腥
2017年9月22日


to be continued.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钟些,一起剝皮案震驚了整個(gè)濱河市烟号,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌政恍,老刑警劉巖汪拥,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異篙耗,居然都是意外死亡迫筑,警方通過(guò)查閱死者的電腦和手機(jī)宪赶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铣焊,“玉大人逊朽,你說(shuō)我怎么就攤上這事罕伯∏粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵追他,是天一觀的道長(zhǎng)坟募。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邑狸,這世上最難降的妖魔是什么懈糯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮单雾,結(jié)果婚禮上赚哗,老公的妹妹穿的比我還像新娘。我一直安慰自己硅堆,他們只是感情好屿储,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著渐逃,像睡著了一般够掠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茄菊,一...
    開(kāi)封第一講書(shū)人閱讀 49,874評(píng)論 1 290
  • 那天疯潭,我揣著相機(jī)與錄音,去河邊找鬼面殖。 笑死竖哩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脊僚。 我是一名探鬼主播相叁,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吃挑!你這毒婦竟也來(lái)了钝荡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舶衬,失蹤者是張志新(化名)和其女友劉穎埠通,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體逛犹,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡端辱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年梁剔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舞蔽。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荣病,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渗柿,到底是詐尸還是另有隱情个盆,我是刑警寧澤,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布朵栖,位于F島的核電站颊亮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陨溅。R本人自食惡果不足惜终惑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望门扇。 院中可真熱鬧雹有,春花似錦、人聲如沸臼寄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脯厨。三九已至铅祸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間合武,已是汗流浹背临梗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稼跳,地道東北人盟庞。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像汤善,于是被迫代替她去往敵國(guó)和親什猖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專(zhuān)業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,557評(píng)論 1 118
  • 一红淡、python 變量和數(shù)據(jù)類(lèi)型 1.整數(shù) Python可以處理任意大小的整數(shù)不狮,當(dāng)然包括負(fù)整數(shù),在Python程序...
    績(jī)重KF閱讀 1,662評(píng)論 0 1
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)。通常情況下噪服,聲明一個(gè)變量只保存一個(gè)值是遠(yuǎn)遠(yuǎn)不夠的毡泻,我們需要將一組...
    小黑y99閱讀 65,191評(píng)論 0 9
  • Python 簡(jiǎn)介Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性粘优、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言仇味。Python 的設(shè)...
    在暴風(fēng)雨中逆襲閱讀 1,718評(píng)論 0 12
  • 記得以前看過(guò)一本書(shū)邪铲,大致說(shuō):“那些喜歡鬧的人從某一方面來(lái)說(shuō)心里一般都很孤獨(dú),他們的面前總會(huì)有一個(gè)鏡子无拗,如果不做點(diǎn)兒...
    初久_ice閱讀 668評(píng)論 0 1