python量化投资可行吗_刺猬教你量化投资(一) :Python入门就这样

本文介绍了Python在量化投资中的应用,强调Python作为首选编程语言的原因,并提供了配置Python环境、学习Python基础的指南,包括对象、变量、数字类型、字符串、列表、元组、字典和集合等基础知识,为后续的金融分析奠定基础。
摘要由CSDN通过智能技术生成

d0b641300a07?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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基础知识

万物皆对象

对象与变量是编程活动最基本的处理单元,在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

变量贴标签

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

In [4]:a=8

print a

8

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

In [5]:a=8

a=10

a

Out[5]:10

数字的类型

关于对象的类型,可用内置函数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

三种引号

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

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

In [6]:a='''you

are

beautiful'''

print a

you

are

beautiful

转义符

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

In [7]:print 'It\'s an apple.'

It's an apple.

自然字符串

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

字符串格式变换

将字符串变成大写,用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的时候用反引号``将数字变量变为字符串变量。

关于列表

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

查看列表序列的长度可以用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']

列表的函数

作为最基本的数据结构,我们可以用函数对列表进行处理。当忘记函数具体名称的时候,可以输入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)函数。若列表的元素是字符串,也能用此函数进行排序,排序的规则是字符串的字母顺序。

关于元组

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

关于集合

集合可以用作运算,求交集,求并集,求差集等。我们可以用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'])

关于字典

想想新华字典,查找到某个字,然后后面就会有该字的内涵解释。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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值