“AI Blue”的版本间的差异
(→2.4.4时间序列) |
(→2.4.6文件读写) |
||
第234行: | 第234行: | ||
print(df.shape) | print(df.shape) | ||
df.head(5) | df.head(5) | ||
− | + | </nowiki> | |
− | |||
− | |||
==2.5 Matplotlib简介== | ==2.5 Matplotlib简介== |
2018年5月23日 (三) 13:30的版本
目录
第一章 什么是机械学习
第二章 python机械学习
2.1 开发环境搭建
安装开发环境Anaconda下载地址: [1]
2.2 IPython简介
IPython是公认的现代科学计算中最重要的Python 工具之一。它是一个加强版的Python交互式命令行工具,与系统自带的Python交互环境相比,IPython 具有以下明显的几个特点:
1、与Shell紧密关联,可以在 IPython 环境下直接执行Shell指令;
2、可以直接绘图操作的 Web GUI环境,在机器学习领域、探索数据模式、可视化数据、绘制学习曲线时,这一功能特别有用;
3、更强大的交互功能,包括内省、Tab键自动完成、魔术命令等。
2.2.1 IPython 基础
与Python相比,IPython的输出排版更加简介。
可以试着一下代码:
In[1]: a=5 In[2]:a+3 In[3]:import numpy as np In[4]:data ={i: np.random.randn() for i in range(8)} In[5]:data
Tab键是IPython提高效率的秘籍,如下:
np.random./按下Tab
- 快捷键:
Ctrl+A: 移动光标到本行的开头; Ctrl+E: 移动光标到本行的结尾; 的代不Ctrl+U:删除光标所在位置之前的所有字符; Ctrl+K: 删除光标所在位置之后的所有字符,包含当前光标所在的字符; Ctrl+L: 清除当前屏幕上显示的内容; Ctrl+P:以当前输入的字符作为命令的起始字符,在历史记录里向后搜索匹配的命令;.Ctrl+N:以当前输入的字符作为命令的起始字符,在历史记录里向前搜索匹配的命令; Ctrl+C:中断当前脚本的执行。
在IPython中可以直接在类或变量后加上一个问号“?”来查阅文档。
In[6]:np.random.randn?
在类或变量或函数后面加两个问号“??”还可以直接查看源代码。结合星号“*”和问号“?”,还可以查询命名空间里的所有函数和对象。
- 建立一个文件:hello.py
In[7]:msg='hello ipython' In[8]:print(msg)
- 访问这个文件:
In[9]:% run hello.py
- 快速评估代码的执行效率用%timeit,例;
In[10]:a np.random.randn(100,100) In[11]:%timeit np.dot(a,a)
- 常用的魔术命令:
%who或%whos:命令来查看当前环境下的变量列表; %quickref: 显示IPython的快速参考文档; %magic: 显示所有的魔术命令及其详细文档; %reset: 删除当前环境下的所有变量和导入的模块; %logstart: 开始记录IPython 里的所有输入的命令,默认保存在当前工作目录ipython_log.py中; %logstop: 停止记录,并关闭log文件。 *在魔术命令后面加上问号“?”可以直接显示魔术命令的文档。
2.2.1 IPython 图形界面
特点
- 方便编写多行代码
- 可以直接把数据可视化
(看不懂)
2.3 Numpy简介
Numpy是Python科学计算的基础库,主要提供了高性能的N维数组实现以及计算能力,还提供了和其他语言如 C/C++ 集成的能力,此外还实现了一些基础的数学算法, 如约性代数相关、傅里叶变换及随机数生成等。
2.3.1 Numpy数组
- 创建数组
In [1]:import numpy as np In [2]:a= np.array([1,2,3,4]) In [3]:a In [4]:b=np.array([1,2],[3,4],[5,6]) In [5]:b
- 查看array属性、数据的维度和类型。
In [6]:b.ndim In (7]:b.shape In [8]:b.dtype #查看数组里元素的数据类型
- 用Numpy函数来创建数组。
In [9]:c=np.arange(10) #创建连续数组 In [9]:c In [10]:d= np.linspace(0,2,11) #[O,2]分成11等分后的数组 In [11]:d In [12]:np.ones((3, 3)) #注意参数两边的括号,参数是个元组 In [13]:np.zeros((3, 6)) In [14]:np.eye(4) In [15]:np.random.randn(6,4) #创建6X 4的随机数组
- 索引访问数组(与python类似)
In [16]: a =np.arange(lO In [17]: a Out[17]: array([0,l,2,3 4, 5, 6, 7, 8, 9]) In [18]:a[0], a[3], a[-l] Out[18]:(O,3,9) In [19]:a[:4] Out[19]: array[0,1, 2,3]) In [20]:a[3:7] Out[20]:array([3, 4,5, 6]) In [21]:a[6:] Out[21]: array([6, 7, 8, 9]) In [22]: a[2:8:2] Out[22]: array([2, 4, 6]) In [23]: a[2::2] Out[23]: array([2, 4, 6, 8]) In [24]: a[::3] Out[24]: array([O, 3, 6, 9])
- 也可以用布尔数组实现索引
- Numpy数组是共享内存,可以使用 np.may_share_memory()函数判断两个数组是否共享内存。
2.3.2 Numpy运算
- 数组和标量计算
In [2]:aenp.arange(6) In [3]:a Out[3]:array([O,1,2,3,4,5]) In [4]:a + 5 Out[4]:array([5,6,7,8,9,10])
2.4 Pandas简介
2.4.1基本数据结构
Pandas最基本的数据结构是Series,用它来表示一行数据,可以理解为一维的数组。 比如:
s= pd.Series([4,2,5,0,6,3]) s
另外一个关键的数据结构为DateFrame。它表示的是二维数组.
比如: df = pd.DateFrame(np.random.randn(6,4), columns=list(‘’ABCD’))
Pandas提供了简洁的数据访问功能。DataFrame. shape可以查看数据的维度信息:
通过DataFrame.head()和DataFrame.tail(_方法可以访问前n行和后n行的数据:
通过DataFrame.index和DataFrame.columns属性,可以访问数据的行索引和列索引信息。
通过DataFrame describe()方法,可以算出简单的数据统计信息。
2.4.2数据排序
通过DataFrame.sort_index函数可以方便地对索引进行排序。比如,我们根据列名张 进行逆序排列:
[IN]: df.sot index(axis=1, ascending=False) [OUT]: D C B A 0 -0.456468 -0.284952 1.501239 0.968762 1 1.536548 0.407559 -0.309746 1.413471 2 -0. 318217 1.339359 -0.040439 -0.399065 3 -1.493958 0.841658 -0.121888 -0.152205 4 -0.455541 1.326487 -0.676985 0.248414 5 -0.024769 -0.201354 -2.158694 0.906221
也可以通过DataFrame. sort values()对数值进行排序。比如,我们根据B这一列的数 据从小到大进行排序:
[IN]: df.sort values (by='B') [OUT]: A B C D 5 0.906221 -2.158694 -0.201354 -0.024769 4 0.248414 -0.676985 1.326487 -0.455541 1 1.413471 -0.3097460.407559 1.536548 3 -0.152205 -0.121888 0.841658 -1.493958 2 -0.399065 -0.040439 1.339359 -0.318217 0 0.968762 1.501239 -0.284952 -0.456468
2.4.3:数据访问
Pandas可以方便地对数据进行选择和访问。我们可以通过行索引范围来访问特定几行的数据,这个和Numpy类似。
[IN]: df[(3:5] [OUT]: 3 -0.152205 -0.121888 0.841658 -1.493958 4 0.248414 -0.676985 1.326487 -0.455541
使用DataFrame.loc ()函数通过标签来选择某个元素,或使用DataFrame.iloc()函数通过数组索引来访问某个无素.
[IN]: df.iloc[2:5, 0:2] [OUT]: A B 2-0.399065 -0.040439 3 -0.152205 -0.121888 4 0.248414 -0. 676985
2.4.4时间序列
Pandas提供了强大的时间序列处理功能,我们可以创建以以时间序列为索引的数据集, 比如:以2000年1月1日作为起始日期,创建366条记录数据:
[IN]: n_items=366 ts=pd.Series(np.random.randn(n_items), index=pd.date_range( ‘20000101’,periods=n_items)) print(ts.shape) ts.head(5)
2.4.5数据可视化
我们还可以对数据进行可视化。
Plt.figure(figsize=(10,6),dpi=144) Cs=ts.cumsum() Cs.plot()
2.4.6文件读写
我们还可以使用DataFrame.to_csv()函数把数据保存到文件中。
[IN]: df=pd.read_csv(‘data.csv’,index_col=0) print(df.shape) df.head(5)
2.5 Matplotlib简介
Matplotlib是python数据可视化工具包。如果要在ipython控制台使用Matplotlib。可以使用ipython--matplotlib命令来启动ipython控制程序; 如果要在ipython notebook里使用Matplotlib,则在notebook的开始位置插入%matplotlib inline魔术命令即可。 ipython的Matplotlib模式又两个优点:
- 一是提供的非阻塞的画图操作
- 二是不需要显示调用show()方法来显示画出来的图片。
2.5.1 图形样式
通常使用ipython notebook 的 Matplotlib模式来画图,这样画出来的图片会直接显示在网页上。要记得在notebook的最上面写上魔术命令%matplotlib inline。
- 使用Matplotlib的默认样式在一个坐标轴上画出正弦和余弦曲线:
matplotlib inline from matplotlib import pyplot as plt import numpy as np x = np.linspace (-np.pi,np.pi,200) C,S = np.cos(x), np.sin(x) plt.plot (x,C) plt.plot(x,S) plt.show()
2.5.2 图形对象
在Matplotlib里,一个图形(figure)是指图片的全是不可是区域,可以使用plt.figure()来创建。在一个图形里,可以包含多个子图,可以使用plt.subplot()来创建子图。子图按照网格形状排列显示在图形里,可以在每个子图上单独作画。坐标轴和子图类似,唯一不同的是,坐标轴可以在图形上任意拜访,而不需要按照网格排列,这样显示起来更灵活,可以使用plt.axes()来创建坐标轴。
- plt.figure()函数有以下几个常用的参数。
- num:图形对象的标识符,可以是数字或字符串当num所指定的图形存在时,直接返回这个图形的引用,如果不存在,则创建个以这 个oum为标识符的新图形。最后把当前作画的图形切换到这个图形上。
- figsize: 以英寸为单位的图形大小(width,heigh),是一个元组。
- dpi:指定图形的质量, 每英小多少个点。
下面的代码创建了两个图形,一个是“sin”,并且把正弦曲线画在这个图形上。然后创 建了另外一个名称是“cos”的图形。并把余弦曲线面在这个图形上。接有切换到之前创建的“Sin”图形上,把余弦图片也画在这个图形上。
%matplotlib inline from matplotlib import pyplot as plt import numpy as np x = np.linspace(-np.pi, np.pi,200,endpoint=True) C,S = np.cos(X),np.sin(X) plt.figure (num=“sin”, figsize=(16, 4)) plt.plot(X, S) pit.figure num='cos', figsize=(16, 4)) plt.plot(x,C) plt.figure (num=“sin”) plt.plot(x, C) print plt.figure(num=“sin”).number print pit.figure(nun=“cos”).mumber