Python基本知识¶在工作和学习中,我们常常需要一种量化分析或者数据处理的工具。而Python无疑是一个好的选择。 为什么Python这么受欢迎?¶简单的来说,有下面三点原因:
Python与其他数据分析语言对比¶
一、Python基础语法¶初次使用Python,首先要明确三点:
x ''' 1 2 3 4 5 1 ''' 15 1 ''' 二、Python基础数据类型¶Python中基础的数据类型只有两类:字符串string和数字。在数字类型下,可细分为4个类型整型int、长整型long、浮点数float和复数complex。常用的数字类型为整型int和浮点数float。 2.1 字符串string¶关于字符串,有下面三点需要注意。其中第三点尤为关键,且不光是针对字符串,对于python中所有的索引都是适用的。
1 string = 'I love Wind!' I love Wind!I love Windand Wind welcomes everyoneWe are a family 1 print('字符串的第一个元素(注意索引为0): ',string[0]) 字符串的第一个元素(注意索引为0): I字符串的倒数第一个元素(支持负索引): !原字符串(注意空格也占据一个字符): I love Wind!字符串索引2至5(注意索引的话左包含右不包含): love字符串索引2至最后: love Wind!字符串索引-2至最后: d! 1 ''' 字符串重复2遍: I love Wind!I love Wind!字符串的拼接: I love Wind! and Wind welcomes everyone! 1 ''' 我想换行换行成功 1 ''' 我想插入一个制表符 插入成功 2.2 数字number¶数字可以细分为四个类型,一般常用的是整形int和浮点数float。 1 x1 = 10 ; x2 = 2.23 #用分号;隔开 可以在一行中写多个语句 三、Python数据集合类型¶在基础数据类型的基础上,Python有6中数据集合的类型:
3.1 列表list¶1 print('这里定义了一个列表list——x1,注意到列表x1中的元素是可以不同的,这里由两个数字1和2,一个字符串James,一个列表[1,2,3]这四个元素构成了x1这个列表list。') 这里定义了一个列表list——x1,注意到列表x1中的元素是可以不同的,这里由两个数字1和2,一个字符串James,一个列表[1,2,3]这四个元素构成了x1这个列表list。[1, 2, 'James', [1, 2, 3]] 1 print('如何来调用列表x1中的某个或者某几个元素呢??\n') #这里的\n的含义是空一行 如何来调用列表x1中的某个或者某几个元素呢??调用列表x1的第一个元素(注意第一个元素的索引为0): 1调用列表x1的最后一个元素(注意最后一个元素的索引为-1): [1, 2, 3]调用列表x1的前2个元素(注意索引的时候右不包含): [1, 2] 这里要说明的是,python下序列(例如数组,列表,元组等)的索引,是从0开始而非从1开始。从左到右索引默认从0开始,从右到左索引默认从-1开始。 1 print('关于列表的运算\n') 关于列表的运算将两个列表x1和x2拼接起来 [1, 2, 'James', [1, 2, 3], 'a', 'b', 'c']在列表x1中添加一个元素 [1, 2, 'James', [1, 2, 3], '新增元素']将列表x2重复两遍 ['a', 'b', 'c', 'a', 'b', 'c'] 1 ''' 原列表: [1, 2, 'James', [1, 2, 3], '新增元素']在索引2位置添加了新的元素: [1, 2, 1000, 'James', [1, 2, 3], '新增元素'] 1 ''' 原列表: [1, 2, 1000, 'James', [1, 2, 3], '新增元素']删除索引3上的元素后: [1, 2, 1000, [1, 2, 3], '新增元素'] 1 ''' 原列表: [1, 2, 1000, [1, 2, 3], '新增元素']添加多个元素后: [1, 2, 1000, [1, 2, 3], '新增元素', 0, 1, 2, 3, 4, 5, 6] 1 ''' 原列表: [1, 2, 1000, [1, 2, 3], '新增元素', 0, 1, 2, 3, 4, 5, 6]删除'新增元素'元素后: [1, 2, 1000, [1, 2, 3], 0, 1, 2, 3, 4, 5, 6] 1 x2 = [1,1,1,1,2,2,2,3,43,4,5,6,4] 查看元素1在列表中出现的次数: 4 1 print('关于列表的排序\n') 关于列表的排序原列表: [-10, -2, 1, -100, 333, 1000]按从小到大排序: [-100, -10, -2, 1, 333, 1000]按从大到小排序: [1000, 333, 1, -2, -10, -100] 3.2 元组tuple¶1 x3 = (66.6,'万得资讯',1.0000) 这是一个元组tuple: (66.6, '万得资讯', 1.0) 1 print('关于元组tuple的相关计算:') 关于元组tuple的相关计算:(66.6, '万得资讯', 1.0, 'a', 'b')(66.6, '万得资讯', 1.0, 66.6, '万得资讯', 1.0) 可以发现,当想对一个元组tuple的第一个元素(索引0)重新赋值时,则会报错。说明元组一旦定义好了就不能二次赋值了。但是要注意如下这种情况 1 x4 = ('jack',1000,[1,2,3]) 在x4这个元组中,索引2对应的元素是一个列表[1,2,3],那么这个列表中的元素做一个更改的话是可以的 3.3 集合set¶1 x0 = [1,1,2,2,3,3,4,4,5,5] 含有重复元素的一个列表x0: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]将列表x0转化一个集合: {1, 2, 3, 4, 5}可以发现集合x0_set中没有重复的元素 1 print('关于集合set的计算') 关于集合set的计算集合set1: {1, 2, 3, 4, 5} 集合set2: {2, 3, 4}集合set1和集合set2的差集: {1, 5}集合set1和集合set2的交集: {2, 3, 4} 1 print('集合set1:',set1,'\n','集合set2:',set2) 集合set1: {1, 2, 3, 4, 5} 集合set2: {2, 3, 4}集合set1和集合set2的交集: {2, 3, 4}集合set1和集合set2的并集: {1, 2, 3, 4, 5} 3.4 字典dict¶1 # 字典定义方式一 {'能力值': 1000, '年龄': 0.5, '姓名': '万矿'}{'身高': 198, '冠军数': 5, '姓名': 'Kobe Bryant'} 1 # 字典定义方式三 {'B': 1000, 'A': 1000, 'C': 1000}{'B': 10, 'A': 1, 'C': 100} 1 print('字典由关键词key和值value两个部分构成') 字典由关键词key和值value两个部分构成查看字典dict2的关键词: dict_keys(['身高', '冠军数', '姓名'])查看字典dict2的值: dict_values([198, 5, 'Kobe Bryant']) 1 ''' 删除关键词“姓名”: {'能力值': 1000, '年龄': 0.5} 1 dict1.clear() 清除字典中的所有元素: {} 四、Python基本运算符¶
|
运算符 | 描述 | 示例 |
---|---|---|
+ | 相加 | 1+1→2 |
- | 相减 | 1-1→0 |
* | 相乘 | 1*2→2 |
/ | 相除 | 1/2→0.5 |
% | 取余数 | 3%2→1 |
** | 幂运算 | 2**2→4 |
运算符 | 描述 | 示例 |
---|---|---|
== | 相等 | 1 == 1→True |
!= | 不等于 | 1 != 1→False |
> | 大于 | 1 > 2→False |
小于 | 1 <> | |
>= | 大于等于 | 1 >= 1→True |
<> | 小于等于 | 1 <=>=> |
运算符 | 示例 | 描述 |
---|---|---|
= | a = 1 | 将1的值赋给a |
+= | b += a | b = b + a |
-= | b -= a | b = b - a |
*= | b *= a | b = b * a |
/= | b /= a | b = b / a |
%= | b %= a | b = b % a |
**= | b **= a | b = b ** a |
运算符 | 描述 | 示例 |
---|---|---|
and | 且 | True and False → False |
or | 或者 | True or False → True |
not | 非 | not True → False |
in | 包含 | 1 in [1,2,3] → True |
not in | 不包含 | 1 not in [1,2,3] → False |
条件语句基本框架如下:
if 判断语句1:
执行语句块1
elif 判断语句2:
执行语句块2
else:
执行语句块3
break语句的含义是终止当前循环,且跳出整个循环
continue语句的含义是终止当次循环,跳出该次循环,直接执行下一次循环
当执行到pass语句时,其含义就是不执行任何操作
例如我们要寻找2-100中的所有素数,本身需要一个循环。而判断某一个数是否为素数也需要一个循环,所以这里嵌套了两个循环。循环中还有一些条件语句。
函数基本框架如下(【】中的内容表示是或选的,可以不写):
def 函数名(参数):
【'''函数说明文档'''】
函数主体
【return 返回对象】
事实上,在调用很多python函数时,我们都使用了默认的参数设置
如果不设置为可变参数的话,需要传入一个序列形式的参数
注意参数**other,这个参数允许我们传入任意个含参数名的参数,这些关键词参数在函数调用时会自动组装为一个dict
例如我们在做信息录入时,姓名,年龄,学校是必填信息,而其他信息是选填的,这时候就可以使用关键词参数
在python函数定义中,可以用必选参数,默认参数,可变参数,关键词参数。注意这些参数的定义顺序为:必选参数,默认参数,可变参数和关键词参数
递归函数的含义是在函数定义过程中,会调用函数本身
lambda函数的基本格式为: lambda 参数: 表达式
匿名函数定义更为简便(控制在一行),有些简单的函数可以用它来写,或者作为复杂函数的组成部分
模块简单来说是一个保存了python代码的文件
很多python开源库就是模块
在程序编写过程中,难免会有一些错误。python中有一些语句可以处理这些异常或者错误,使得程序能够运行,且识别到错误的位置
在下面的例子中,当j=0,10/0是会报错的,利用try..except语句之后还是可以将其他部分正常运行出来
面向对象是Python的特点。面向对象主要通过类class的定义来实现。类class是用来描述具有相同属性和方法的对象的集合。类定义了该集合中的每个对象的共有属性和方法
可以将类理解为一个模块,模块中包含很多个函数,每个函数用来实现某一个功能
对象是根据类创建的实例,通过实例化对象就可以执行类中的各个函数
面向对象不好理解。这里用一个小例子来说明面向对象的基本用法,关于面向对象在后面的系列中还会详述其更高层次的用法
例如,我们想创建一个简单的游戏程序,涉及到游戏人物的创建,几个游戏环节的设计等等
在进行数据分析之前,可能需要读写自己的数据文件。或者在完成数据分析之后,想把结果输出到外部的文件
在Python中,利用pandas模块中的几个函数,可以轻松实现这些功能,利用pandas读取文件之后数据的格式为数据框,且如果想用pandas将数据输出为外部文件,也要先确保要输出的文件的格式为数据框
注意因为这里演示了文件的操作,需要将文件上传到网站的数据文件目录下才可以成功运行程序
x1 | x2 | x3 | y | |
---|---|---|---|---|
day | ||||
0 | 1 | 2 | 3 | 0 |
1 | 2 | 2 | 2 | 1 |
2 | 3 | 1 | 1 | 1 |
3 | 2 | 1 | 1 | 0 |
代码 | 名称 | 证券简称 | 上市日期 | 所属申万行业 | 近10日涨跌幅 | 近1月涨跌幅 | 近3月涨跌幅 | |
---|---|---|---|---|---|---|---|---|
0 | 002161.SZ | 远望谷 | 远望谷 | 2007-08-21 | 其他电子Ⅲ | -1.411290 | -13.143872 | -20.681265 |
1 | 002162.SZ | 悦心健康 | 悦心健康 | 2007-08-23 | 其他建材Ⅲ | -2.460457 | -7.035176 | -7.960199 |
2 | 002699.SZ | 美盛文化 | 美盛文化 | 2012-09-11 | 其他服装 | -1.148796 | -3.317282 | 33.357934 |
3 | 600009.SH | 上海机场 | 上海机场 | 1998-02-18 | 机场Ⅲ | -1.872321 | 8.641359 | 17.823843 |
4 | 600115.SH | 东方航空 | 东方航空 | 1997-11-05 | 航空运输Ⅲ | 1.183432 | 3.012048 | 1.333333 |
代码 | 名称 | 证券简称 | 上市日期 | 所属申万行业 | 近10日涨跌幅 | 近1月涨跌幅 | 近3月涨跌幅 | |
---|---|---|---|---|---|---|---|---|
0 | 002161.SZ | 远望谷 | 远望谷 | 2007-08-21 | 其他电子Ⅲ | -1.4113 | -13.1439 | -20.6813 |
1 | 002162.SZ | 悦心健康 | 悦心健康 | 2007-08-23 | 其他建材Ⅲ | -2.4605 | -7.0352 | -7.9602 |
2 | 002699.SZ | 美盛文化 | 美盛文化 | 2012-09-11 | 其他服装 | -1.1488 | -3.3173 | 33.3579 |
3 | 600009.SH | 上海机场 | 上海机场 | 1998-02-18 | 机场Ⅲ | -1.8723 | 8.6414 | 17.8238 |
4 | 600115.SH | 东方航空 | 东方航空 | 1997-11-05 | 航空运输Ⅲ | 1.1834 | 3.0120 | 1.3333 |
由于使用了pandas库,我们在将想要的数据集输出为外部的excel/csv文件时,首先要确保文件的格式为数据框
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
|