刺猬教你量化投资(一) :Python入门就这样

image.png

Python初探

近年来,量化投资日渐盛行,听上去是有些高大上的感觉,但入门后又会发现,其实量化投资并没有太多高深难懂的玄机,不过是为投资者提供了一套,将投资想法与实践相结合的便捷工具而已。

做量化投资,目前最流行的编程语言非Python莫属。相对于商用软件Matlab,Python不仅可免费使用,而且具有非常多的、功能强大的扩展库,对于非计算机专业的投资者来说,相对优势非常明显。

配置运行环境

要运行Python,首先要去https://www.python.org/download/ 下载安装。网站上有2.7.x和3.6.x两个系列的版本,做金融分析目前用2.7就好,对各种库的兼容会好些。

由于后面还需要安装Numpy、Pandas等库用于金融数据分析,有个简便的环境配置方法,就是安装Canopy或者Anaconda。这两个集成安装软件能方便我们对各种库进行管理。下面我们以Anoconda为例进行展开。

Anaconda是一个用于科学计算的Python发行版,支持Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的Python包。其安装包如果直接从官网上下载,速度会非常慢,幸好清华大学开源软件镜像站上可以下载到。跳转过去点这里

下载好后,点几次“下一步”就安装完成了。

Python基础知识

  1. 万物皆对象

对象与变量是编程活动最基本的处理单元,在Python中,可以说万物皆为对象。对象的类型有很多,比如整数、浮点数、字符串、列表、元组、字典、集合等,甚至连函数、模块等都可以作为对象,为其赋予变量的标签。

对于每个对象,可从三个纬度进行描述,分别是地址、类型和值。举个例子:

关于对象“8"

查看对象“8”的值
In [1]:8
Out[1]:8

查看对象“8”的内存地址
In [2]:id(8)
Out[2]:31684784L

查看对象“8”的类型
In [3]:type(8)
Out[3]:Int
  1. 变量贴标签

在Python中,等号“=”并不是数学意义上的等号,而是赋值的意思。比如说:

In [4]:a=8
print a
8

a=8意味着将对象“8”的值赋给变量a,然后“打印”a的结果就是整数8。对象属于常量,是不可变的,而变量则不然,可以在程序的运行过程中不断被赋予新的值。比如说:

In [5]:a=8
a=10
a
Out[5]:10
  1. 数字的类型

关于对象的类型,可用内置函数type()进行查看。仅对数字而言,其类型主要有5种,分别是整数型Int、长整型Long、浮点型Float、布尔型Bool(判断真假1为真0为假)以及复数型Complex。比如说:

整数型Int 长整型Long 浮点型Float 布尔型Bool 复数型Complex
1 888888888888L 1.02 True 4+3j
-1 323242343L 4.3 False -2+9j
  1. 三种引号

“”和‘’都可以括住字符串,但当一个句子中含有引号,则需要分别用“”和‘’来做区分,方便Python识别。例如先要输出this is an “apple”.,就需要输入print 'this is an “apple”.'

当需要输出多行字符串时,可用三引号进行头尾标注,例如:

In [6]:a='''you
are
beautiful'''
print a
​
you
are
beautiful
  1. 转义符

转义符用斜杠“\”表示,用于消除字符本身的含义。例如要输出It's an apple.,不能直接打print 'It's an apple.', 而是需要在句子中的’前加上一个\。

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

通过在字符串前面加上r或R,即可将字符串的内容原封不动地输出,即使内部含有命令语句,Python也不会执行。比如说可以用\n来进行换行,若输入print 'It's an apple. \n',程序输出的结果便是It's an apple. \n

  1. 字符串格式变换
  • 将字符串变成大写,用upper()函数。但是,由于字符串不可变,即使用了upper()函数,a也还是那个a,唯有将a.upper()赋予一个新的变量b,才能将其显示。
In [8]:a="Hello world"
b=a.upper()
print a
print b

Hello world
HELLO WORLD
  • 函数istitle()可判断字符串中所有首字母是否为大写,其他字母为小写,若是则返回True,否则为False。

  • 函数isupper() 可判断字符串中所有字母是否为大写,若是则返回True,否则为False。

  • 按字母将字符串分割为列表,用split("")函数。

  • 关于切片,若要选取字符串中某一个字母,可以用a[0]这种格式。0代表第一个字母,如此类推。跟Java的表示方式一样。倒选也可以,最后一个字母是a[-1],倒数第二个字母是a[-2]。

    值得注意的是,如果要抽取多个字母,如2个字母,则需写成a[0:2],到2结束,不包括2,Python列表、元组、字符串等都是包前不包后的!

    想偷懒的话,0可不写,默认是从0开始,或到最后结束。a[:2]相当于a[0:2],a[-2:]则表示最后两个字母。

    另外,还可以用循环结构跳着切,比如:

In [9]:a="beautiful"
[a[i] for i in (1,4,8)]
Out[9]:['e', 't', 'l']
  • 字符串可用运算符,比如“+”则表示两个字符串的连结,又比如要打印“Hello world”10遍,则可用“*”号:
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

但要注意,不同类型的字符串不能相加,会导致Python报错。如果需要将整数型数字和字符串连结起来,则可以用str()函数将数字变成字符串的类型,再进行连结。也可以在print的时候用反引号``将数字变量变为字符串变量。

  1. 关于列表

列表用[]来表示,里面可以有序地放一堆东西。每个单独项称作元素,元素加起来就是数组,存储一连串元素的容器就是列表。

  • 查看列表序列的长度可以用len()函数,比如:
In[11]:a=['apple', 'banana', 'orange']
len(a)
Out[11]:3
  • 列表的内容是可变的,也就是说列表中的元素可通过赋值来实现替换。一旦作出修改,原来的列表就不复存在,只剩下修改后的新列表了。
In [12]:a=['apple', 'banana', 'orange']
a[0]='boat'
print a
​
['boat', 'banana', 'orange']
  1. 列表的函数

作为最基本的数据结构,我们可以用函数对列表进行处理。当忘记函数具体名称的时候,可以输入list.+tab键进行查询。

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

['apple', 'banana', 'orange']
['apple', 'banana', 'orange', 'strawberry']
  • 若追加的不仅仅是一个元素,而是一个列表,则可以用list.append(x)或者list.extend(x)。两者的区别在于,append是整个x列表作为一个新元素追加进原列表中,而extend则是将x列表中的元素逐个加入到原列表中。

  • 若要计算元素出现的频率,则可用list.count(x)函数

  • 若要删除某个元素,则可用list.remove(x)函数。当使用此函数时,Python仅会删除第一x,后面的x则保留。

  • 若要对列表的元素进行排序,则用list.sort()函数,默认从小到大排列。若要从大到小排列,则用list.sort(reverse=true)函数。若列表的元素是字符串,也能用此函数进行排序,排序的规则是字符串的字母顺序。

  1. 关于元组

与列表的用途类似,列表用[]表示,而元组用()表示。两者的区别在于列表可修改,而元组一旦设立就只能读取。目的是防止用户乱改源代码的内容。

  1. 关于集合

集合可以用作运算,求交集,求并集,求差集等。我们可以用set()函数将列表变成集合,比如:

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

也可以用list()函数把集合变回列表,比如:

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

比如说求交集,可用“&”表示:

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

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

比如说求并集,可用“|”表示:

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

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

比如说求差集,可用“-”表示:

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

set(['orange'])
  1. 关于字典

想想新华字典,查找到某个字,然后后面就会有该字的内涵解释。Python的字典亦是如此,我们用大括号将字典的内容括起来,然后字典内部的每个元素都有两个部分组成,一个是字,一个是内涵解释。正式的叫法是一个key,一个value。

再打个比方,有本字典包含了身份证上的所有信息,包括姓名、性别、出生年月、地址。若我们想调取某一元素的信息,只需print key的值即可,表现形式如下:

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()函数。

  • 查看一下字典里有什么value,可用dict.values()函数。

  • 若要删除某个key,则可用dict.pop('key')函数,删除后该函数会返回已被删除的value值。

结语

以上便是Python的入门知识。虽然目前看来,上述内容与金融数据分析还没出现明显的关系,但掌握好这些基础知识,日后写代码或阅读代码时才能有效提高效率。

第一篇文章就写到这里,下一篇将会讲述Python的运算方式,敬请期待。



刺猬偷腥
2017年9月22日


to be continued.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容