python中的scipy基础知识_MachineLearning入门-5(Python和Scipy简介)

目标:

熟悉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 ina: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 inmydict: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 insomefile:3 print(line)4 #... more code

这里使用了with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭了打开的文件句柄。如果使用传统的try/finally范式,则要使用如下代码:

1 somefile=open('somefileName')2 try:3 for line insomefile: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 importmatplotlib.pyplot as plt2 importnumpy as np3 #定义绘图的数据

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()

python中的scipy基础知识_MachineLearning入门-5(Python和Scipy简介)_第1张图片

下面是一个简单的绘制散点图的例子,代码如下:

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()

python中的scipy基础知识_MachineLearning入门-5(Python和Scipy简介)_第2张图片

更多类型的图表绘制砬,请参考: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 importnumpy as np2 importpandas as pd3 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。

你可能感兴趣的:(python中的scipy基础知识_MachineLearning入门-5(Python和Scipy简介))