目标:
- 熟悉Python基本语法
- 熟悉Numpy、Matplotlib、Pandas,能够阅读和编写基于python的机器学习脚本
- 为深入理解机器学习打下基础
Python速成
基本数据类型和赋值运算:字符串、数值、布尔类型、多变量赋值、空值。
在Python中,空格是有意义的,用来区分代码块。
每一种数据类型都是对象,空值是Python中的一个特殊值,用None表示,表示改值是一个空对象。可以将None赋值给任何对象,也可以将任何变量赋值给一个None值的对象。
控制语句:条件控制、循环语句、条件循环。
在Python中有三种数据类型非常有用,并且会被经常使用到。它们分别是元组、列表、字典。
元组:是一个只读的集合类型,初始化后,元组的元素不能重新赋值。
1 #元组 2 a=(1,2,3,4) 3 print(a) 4 print(a[1])
(1, 2, 3, 4) 2
列表:与元组类似,只是列表通过中括号定义,而且列表的元素可以重新赋值。对列表增加列表项使用列表的append()函数。、
1 #列表 2 a=[1,2,3] 3 print(a) 4 #增加列表项 5 a.append(4) 6 print(a) 7 print(a[3]) 8 #更新列表项 9 a[2]=5 10 print(a) 11 for i in a: 12 print(i)
[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 5, 4] 1 2 5 4
字典:是另一种可变容器模型,且可以存储任意类型的对象。字典的每个键值对(key,value)用冒号(:)分隔。每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中。
1 #字典 2 mydict={'a':6.16,'b':'str','c':True} 3 print('A vluae: %.2f' % mydict['a']) 4 #增加字典元素 5 mydict['a']=523 6 print('A value: %d' % mydict['a']) 7 print('keys: %s' % mydict.keys()) 8 print('values: %s' % mydict.values()) 9 for key in mydict: 10 print(mydict[key])
A vluae: 6.16 A value: 523 keys: dict_keys(['a', 'b', 'c']) values: dict_values([523, 'str', True]) 523 str True
此外,若删除字典中全部元素,使用字典自身的clear()方法;若删除字典特定key元素,用pop(key)方法。
1 mydict={'a':6.18,'b':'str','c':True} 2 #删除特定元素 3 mydict.pop('a') 4 print(mydict) 5 #删除字典中全部元素 6 mydict.clear() 7 print(mydict)
{'b': 'str', 'c': True} {}
with语句
下面是一组与上下文管理器和with语句有关的概念。
上下文管理协议(Context Management Protocol):包含方法__enter__(),__exit__(),支持该协议的对象要实现这两个方法。
上下文管理器(Context Manager):支持上下文管理协议的对象。定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。
运行时上下文(Runtime Context):由上下文管理器创建,通过上下文管理器的__enter__(),__exit__()方法实现。__enter__()方法在语句体执行之前进入上下文,__exit__()方法在语句体执行完毕后从运行的上下文中退出。
上下文表达式(Context Expression):with语句中跟在关键字with之后的表达式,该表达式要返回一个上下文管理器对象。
语句体(with-body):with语句包裹起来的代码块,在执行语句体之前会调用上下文管理器__enter__()方法,执行完语句体之后会执行__exit__()方法。
Python对一些内建的对象进行该进,加入了对上下文管理器的支持,可以用于with语句中,比如可以自动关闭文件、线程锁的自动获取、释放。假设要对一个文件进行操作,可以使用with语句,代码如下:
1 with open('somefileName') as somefile: 2 for line in somefile: 3 print(line) 4 #... more code
这里使用了with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭了打开的文件句柄。如果使用传统的try/finally范式,则要使用如下代码:
1 somefile=open('somefileName') 2 try: 3 for line in somefile: 4 print(line) 5 #...more code 6 finally: 7 somefile.close()
使用with语句,简化了对异常的处理。因此,当需要对异常进行处理时,如果对象遵循了上下文管理协议,建议使用with语句来实现。
Numpy速成
Numpy为Scipy提供了基本的数据结构和运算,其中最主要的是ndarrays多维数组,它提高了高效的矢量运算功能。
访问数据
算数运算
Matplotlib速成
Matplotlib是Python中著名的2D绘图库,使用方法比较简单,按照下面的三步进行操作就能很简单的完成绘图。
- 调用plot(),scatter()等方法,并为绘图填充数据。数据是Numpy的ndarray类型对象。
- 设定数据标签,使用xlabel(),ylabel()方法。
- 展示绘图结果,使用show()方法。
绘制线条图
下面是一个简单的绘制线条图的例子,代码如下:
1 import matplotlib.pyplot as plt 2 import numpy as np 3 #定义绘图的数据 4 myarray=np.array([[1,2,3],[2,3,4],[3,4,5]]) 5 #初始化绘图 6 plt.plot(myarray) 7 #设定x轴和y轴 8 plt.xlabel('x axis') 9 plt.ylabel('y axis') 10 #绘图 11 plt.show()
下面是一个简单的绘制散点图的例子,代码如下:
1 #定义绘图的数据 2 myarray1=np.array([1,2,3]) 3 myarray2=np.array([11,21,31]) 4 #初始化绘图 5 plt.scatter(myarray1,myarray2) 6 #设定x轴和y轴 7 plt.xlabel('x axis') 8 plt.ylabel('y axis') 9 #绘图 10 plt.show()
更多类型的图表绘制砬,请参考:http://matplotlib.org/gallery.html。
Pandas速成
Pandas提供了用于机器学习的复杂数据结构:矢量运算方法和数据分析方法。Pandas也提供了多种数据结构。
- Series:以为数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别:list中的元素可以使不同的数据类型,而array和series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
- Time-Series:以时间为索引的Series。
- DataFrame:二维表格型数据结构。很多功能与R语言中的data.frame类似。可以将DataFrame理解为Series的容器。
- Panel:三维数组,可以理解为DataFrame的容器。
Series使用:
1 import numpy as np 2 import pandas as pd 3 myarray=np.array([1,2,3]) 4 index=['a','b','c'] 5 myseries=pd.Series(myarray,index=index) 6 print(myseries) 7 print('first element : ') 8 print(myseries[0]) 9 print('c index value: ') 10 print(myseries['c'])
a 1 b 2 c 3 dtype: int64 first element : 1 c index value: 3
DataFrame是一个可以指定行和列标签的二维数组。数据可以通过指定列名来访问特定的数据。
1 myarray=np.array([[1,2,3],[2,3,4],[3,4,5]]) 2 rowindex=['row1','row2','row3'] 3 colname=['col1','col2','col3'] 4 mydataframe=pd.DataFrame(data=myarray,index=rowindex,columns=colname) 5 print(mydataframe) 6 print('get data of col3:') 7 print(mydataframe['col3'])
col1 col2 col3 row1 1 2 3 row2 2 3 4 row3 3 4 5 get data of col3: row1 3 row2 4 row3 5 Name: col3, dtype: int64
更多Pandas API函数请查阅:http://pandas.pydata.org/pandas-docs/stable。