《机器学习Python实践》第四章——Python和SciPy速成

1. Python速成

1)复杂数据类型

三种常用的数据类型:元组、列表、字典。 其中,列表字典更是经常被使用。

(1)元组:只读集合类型,用小括号定义,初始化后,元组的元素不能重新赋值。

a=(1,2,3)
print(a)
print(a[1])

执行结果如下:
这里写图片描述

(2)列表 : 列表只能通过中括号定义,列表的元素可以重新赋值

对列表增加列表项用列表的append()函数。

b=[4,5,6]
print(b)
b.append(7)
print(b)
print(b[3])

运行结果如下:
这里写图片描述

(3)字典:可变容器模型,可存储任意类型的对象。字典的每个键值对(key,value)用冒号(:)分隔,每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中。

mydic={'a':12.15, 'name':True, 'age':'18'}
print('a vales is :%d' %mydic['a'])
print('Keys: %s' %mydic.keys())
print("values :%s" %mydic.values())
for key in mydic:
    print(mydic[key])

这里写图片描述

删除字典中的全部元素,可以用字典自身的clear()方法
若删除字典特定的key元素,用pop(key)方法

mydic={'a':12.15, 'name':True, 'age':'18'}
print(mydic)


#增加字典元素
mydic['e']=1236
print('e vales is :%d' %mydic['e'])
print(mydic)

#删除字典特定的key元素
mydic={'a':12.15, 'name':True, 'age':'18'}
mydic.pop('a')
print(mydic)

#删除字典中的全部元素
mydic.clear()
print(mydic)

这里写图片描述

2)with语句

语句体(with-body): with 语句包裹起来的代码块,在执行语句体之前会调用上下文管理器的__enter()__方法,执行完语句体之后会执行__exit()__ 方法。
例如对文件进行操作,可使用with语句。

with open('somefileName') as somefile:
    for line in somefile:
        print(line)

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

扫描二维码关注公众号,回复: 1464368 查看本文章
somefile=open('somefileName')
try:
    for line in somefile:
        print(line)
finally:
    somefile.close()

2.NumPy速成

1)创建数组

利用NumPy创建多为数组非常简单,通过给array函数传递Python的序列对象创建数组。如果传递的是多层嵌套的序列,将创建多维数组。

#创建一维数组
import numpy as np
myarray=np.array([1,2,3])
print(myarray)
print(myarray.shape)

这里写图片描述
创建多维数组

import numpy as np
# 创建多维数组
myarray=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(myarray)
print(myarray.shape)

这里写图片描述

2)访问数组

对于ndarray数组的访问,可以通过数组下表访问某一行、某一列:

import numpy as np
#创建多维数组
myarray=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(myarray)
print(myarray.shape)

#访问某一行
print('这是第一行:%s' %myarray[0])
print('这是最后一行:%s' %myarray[-1])
print('访问整列(3列)数据:%s'%myarray[:,2])
print('访问指定行(2行)和列(3列)的数据:%s'%myarray[1,2])

这里写图片描述

3)算数运算

使用NumPy的ndarray可以直接进行算数运算,或者说向量运算。

import numpy as np
#创建多维数组
myarray1=np.array([[1,2,3],[4,5,6],[7,8,9]])
myarray2=np.array([[11,22,32],[42,52,62],[72,82,92]])
print('向量加法运算:')
print(myarray1+myarray2)
print('向量乘法运算:')
print(myarray1*myarray2)

这里写图片描述

3 matplotlib速成

matplotlib是Python中著名的2D绘图库。

  • 调用plot()、scatter() 等方法, 并为绘图填充数据。数据是NumPy的ndarray类型的对象。
  • 设定数据标签,使用xlabel()、ylabel()方法;
  • 展示绘图结果,使用show()方法。

(1)绘制线条图

import matplotlib.pyplot as plt
import numpy as np
#创建多维数组
myarray=np.array([[1,2,3],[4,5,6],[7,8,9]])

#初始化绘图
plt.plot(myarray)

#设定x轴和y轴
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.show()

这里写图片描述

(2)绘制散点图

import matplotlib.pyplot as plt
import numpy as np
#创建多维数组
myarray1=np.array([1,2,3])
myarray2=np.array([11,21,31])

#初始化绘图
plt.scatter(myarray1,myarray2)

#设定x轴和y轴
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.show()

这里写图片描述

4 Pandas速成

Pandas提供了用于机器学习的复杂数据类型:矢量运算方法和数据分析方法。Pandas也提供可多种数据结构。
Pandas是一个强大的对数据进行切片的工具。

  • Series:一位数组,与NumPy中的一维array类似。二者与Python中的基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而array和Series中只允许存储相同的数据类型——更有效地使用内存、提高运算效率。
  • Time-Series: 以时间为索引的Series;
  • DataFrame: 二维的表格型数据结构;可以理解为Series的容器。
  • Panel: 三维数组,可以理解为DataFrame的容器。

(1)Series

在建立Series时可以设定index, 也可以像访问NumPy数组或字典一样来访问Series元素。

import numpy as np
import pandas as pd
myarray=np.array([1,2,3])
myindex=['a','b','c']
myseries=pd.Series(myarray,index=myindex)
print(myseries)
print("Series中的第一个元素:")
print(myseries[0])
print("Series中的c index 元素:")
print(myseries['c'])

这里写图片描述

(2)DataFrame

DataFrame是一个可以指定行和列标签的二维数组。数据可以通过指定列名来访问特定列的数据

import numpy as np
import pandas as pd
myarray=np.array([[1,2,3],[4,5,6],[7,8,9]])
rowindex=['row1','row2','row3']
colname=['col1','col2','col3']
MyDataframe=pd.DataFrame(data=myarray,index=rowindex, columns=colname)
print(MyDataframe)
print('访问col3的数据:')
print(MyDataframe['col3'])

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80565532