Python 数据挖掘与机器学习实战(二):Python 语言简介

阅读数:1 2020 年 2 月 1 日 16:15

Python数据挖掘与机器学习实战(二):Python语言简介

编者按:本文节选自方巍著《Python 数据挖掘与机器学习实战》一书中的部分章节。

2.1 搭建 Python 开发环境

Python 可应用于多平台,包括 Linux 和 Mac OSX。本节主要介绍如何在 Windows 平台搭建 Python 开发环境,以及运行和保存相应的 Python 程序。

2.1.1 安装 Anaconda

Anaconda 是 Python 的一个开源发行版本,主要面向科学计算,内含有诸多机器学习算法框架、图像处理模块及经典算法集成模块。Anaconda 的主要优点是预装了很多第三方库,而且增加了 conda install 命令,除了使得安装新的 package 非常方便外,还自带了 Spyder IDE 和 Jupyter Notebook 等编译环境。

单击下载链接 https://www.anaconda.com/download/ ,选择 Windows Python 3.6 版本进行下载并安装,如图 2-1 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-1 安装 Anaconda

安装时,需要选择安装类型。这里选择管理员权限,并且将路径自动加入到环境变量中,如图 2-2 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-2 添加环境变量

单击 Install 按钮即可安装。安装完成后,在 Windows 搜索栏中输入 cmd 进入命令行模式,输入 python,检验环境是否创建成功,如图 2-3 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-3 检查环境是否创建成功

2.1.2 安装 Spyder

Spyder 是 Python 的作者为 Python 开发的一个简单的集成开发环境。和其他的 Python 开发环境相比,Spyder 的最大优点就是模仿 MATLAB 的“工作空间”的功能,可以很方便地观察和修改数组的值。

在“开始”菜单中打开 Anaconda3(64-bit),单击 Anaconda Navigator,进入集成环境。首先选择 Environments,然后选择 All,最后输入 spyder,勾选 spyder 复选框进行安装即可,如图 2-4 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-4 安装 Spyder

此时在“开始”菜单中打开 Anaconda3(64-bit),单击 Spyder,即可进入编辑环境。Spyder 界面如图 2-5 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-5 Spyder 界面

2.1.3 运行和保存 Python 程序

如果程序员每次想用 Python 程序时都需要重新输入则费时费力,非常影响效率。当然,如果只是几十行的小程序,重写也是可行的,但对于一些大型的程序,其中可能包含有数十万行甚至更多的代码,想象一下,要把这么多的代码进行重写是多么的困难。幸运地是,程序员可以把程序保存起来,随时随地就可以使用。要保存一个新程序,选择 File→New file 命令,然后会出现一个空白窗口,在菜单条上会有“Untitled0.py”字样。在新窗口中输入下面的代码:

复制代码
print("Hello World")

然后选择 file→save as 命令。当提示输入文件名时,输入 hello.py,并把文件保存到桌面即可。不出问题的话,在键盘上按 F5 键,保存的程序就可以运行了,如图 2-6 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-6 运行和保存程序

2.2 Python 计算与变量

Python 开发环境已经搭建完成,也知道如何运行和保存程序了,现在就可以使用它来编写自己的程序了。本节首先从一些基本的数学运算开始讲解,然后再使用变量进行稍复杂一些的计算。变量是程序中用来保存东西(如数值和矩阵等内容)的一种方式,它们能使程序更加简单明了。

2.2.1 用 Python 做简单的计算

首先,使用 Python 做数值计算。例如,想要得到两个数字乘积的结果,一般可能会用计算器来得到答案,比如计算 9×8.46。那么如何用 Python 程序来运行这个计算呢?

为了清晰地显示代码,在这里暂时不使用 Spyder 作为编译环境,直接使用命令行窗口。步骤如下:

(1)单击“开始”按钮,输入 cmd,进入命令行窗口。

(2)再输入 python,然后按 Enter 键,即进入 Python 编辑环境。

(3)显示当前的 Python 版本。

命令行窗口如图 2-7 所示。

Python数据挖掘与机器学习实战(二):Python语言简介

图 2-7 Python 的命令行窗口

命令行中显示了 3 个大于号“>>>”,这 3 个大于号叫做“提示符”。

在提示符后面输入算式:

复制代码
>>> 9*8.46
76.14

注意:在 Python 里输入乘法运算时要使用星号“*”而不是乘号“×”。

这是一个非常简单的程序。在本书中,读者将会学到如何扩展这些想法,写出更有用的程序来。

2.2.2 Python 的运算符

在 Python 中,可以做加、减、乘、除运算,以及其他的一些数学运算。Python 中用来做数学运算的基本符号叫做“运算符”,这里罗列了几种最常见的运算符,如表 2-1 所示。

Python 中用斜杠“/”来表示除法,因为这与写分数的方式相似。例如,a=20,b=10,在 Python 程序中计算 a 除以 b,只要输入 20/10,输出结果为 2。要记住“斜杠”是顶部靠右的那个(顶部靠左的是反斜杠“\”)。“%”表示取模,即返回除法的余数,如 a%b 的输出结果是 0。“”表示幂,即返回 x 的 y 次幂,ab 是 10 的 20 次方,输出是 100000000000000000000。

表 2-1 Python 的基本运算符
符号 运算
+
-
*
/
% 取模
// 向下取整
**

在 Python 编程语言中,使用括号来控制运算的先后顺序。任何用到运算符的都是一个“运算”。乘法和除法运算比加法和减法优先,也就是说它们先运算。换句话讲,如果在 Python 中输入一个算式,乘法或者除法的运算会在加法或减法之前运算。

提示:请记住乘法和除法总是在加法和减法之前运算,除非用括号来控制运算的顺序。

2.2.3 Python 的变量

变量存储的是在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定的内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,可以存储整数、小数或字符。

Python 中的变量赋值不需要类型声明。在内存中创建每个变量时包括了变量的标识、名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。等号“=”用来给变量赋值,其运算符左边是一个变量名,右边是存储在变量中的值。例如:

复制代码
counter = 1000 #赋值整型变量
miles = 1000.0 #浮点型
str = "Python" #字符串
print (counter)
print (miles)
print (str)

上例中,1000、1000.0 和 Python 分别赋值给了 counter、miles 和 str 变量。

执行以上程序会输出如下结果:

复制代码
1000
1000.0
Python

Python 允许同时为多个变量赋值。例如:

复制代码
a = b = c = 1000

上例中创建了一个整型对象,值为 1000,a、b、c 这 3 个变量被分配到相同的内存空间上。

也可以为多个对象指定多个变量,例如:

复制代码
a, b, c = 1, 2, "abc"

上例中,将两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 abc 分配给变量 c。

在内存中存储的数据可以有多种类型。Python 有 5 个标准的数据类型,分别是 Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)和 Dictionary(字典)。下面将重点介绍后 4 种数据类型。

2.3 Python 的字符串

字符串是 Python 中最常用的数据类型。可以使用引号(单引号或双引号)来创建字符串。创建字符串很简单,只要为变量分配一个值即可。例如:

复制代码
str1 = 'Hello World!'
str2 = "Python"
print(str1)
print(str2)

输出结果为:

复制代码
Hello World!
Python

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用的。在 Python 中访问子字符串时,可以使用方括号“[]”来截取字符串,例如:

复制代码
str1 = 'Hello World!'
str2 = "Python"
print ("str1[0]: ", str1[0])
print ("str2[1:5]: ", str2[1:5])

输出结果为:

复制代码
str1[0]: H
str2[1:5]: ytho

也可以对已存在的字符串进行修改,并赋值给另一个变量,例如:

复制代码
str1 = 'Hello '
str2 = 'world!'
str1 = str1+str2
print(str1)

输出结果为:

复制代码
Hello world!

上面例子中“+”是字符串运算符。还有很多字符串运算符,如表 2-2 所示。

表 2-2 字符串运算符
运算符 说明
+ 字符串连接
* 重复输出字符串
[] 通过索引获取字符串中的字符
[ : ] 截取字符串中的一部分
in 如果字符串中包含给定的字符则返回 True
not in 如果字符串中不包含给定的字符则返回 True
% 格式字符串

这里给出一个简单的例子来实现这些字符串运算符。

复制代码
a = "Hello"
b = "Python"
print ("a + b 输出结果:", a + b)
print ("a * 2 输出结果:", a * 2)
print ("a[1] 输出结果:", a[1])
print ("a[1:4] 输出结果:", a[1:4])
if( "H" in a) :
print ("H 在变量 a 中 ")
else :
print ("H 不在变量 a 中 ")
if( "N" not in a) :
print ("N 不在变量 a 中 ")
else :
print ("N 在变量 a 中 ")

输出结果为:

复制代码
a + b 输出结果: HelloPython
a * 2 输出结果: HelloHello
a[1] 输出结果: e
a[1:4] 输出结果: ell
H 在变量 a
N 不在变量 a

Python 支持格式化字符串的输出。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符“%s”的字符串中。在 Python 中,字符串格式化使用与 C 语言中 printf,函数的语法一样。例如:

复制代码
print ("My name is %s and age is %d!" % ('xiaoming', 20))

输出结果为:

复制代码
My name is xiaoming and age is 20!

2.4 Python 的列表

序列是 Python 中最基本的数据结构。序列中的每个元素都分配一个数字来表示它的位置(或叫做索引),第一个索引是 0,第二个索引是 1,依此类推。Python 有 6 个序列的内置类型,但最常见的是列表和元组。

序列可以进行的操作包括索引、切片、加、乘和检查成员等。此外,Python 已经内置了确定序列的长度及确定最大和最小的元素的方法。列表是最常用的 Python 数据类型,表现形式为一个方括号内包含若干数据项,各数据项之间以逗号分隔。

创建一个列表,列表的各数据项不需要具有相同的类型,只要把用逗号分隔的不同数据项使用方括号括起来即可。例如:

复制代码
list1 = ['a', 'b', 10, 20]
list2 = [1, 2, 3, 4]
list3 = ["a", "b", "c"]

与字符串的索引一样,列表索引从 0 开始。列表可以进行截取、组合等。可以使用下标索引来访问列表中的值,同样也可以使用方括号的形式截取字符,示例如下:

复制代码
list1 = ['a', 'b', 10, 20]
list2 = [1, 2, 3, 4]
print ("list1[0]: ", list1[0])
print ("list2[1:4]: ", list2[1:4])

输出结果为:

复制代码
list1[0]: a
list2[1:4]: [2, 3, 4]

可以对列表的数据项进行修改或更新,也可以使用 append() 方法添加列表项,示例如下:

复制代码
list = [] #空列表
list.append('Hello') #使用 append() 添加元素
list.append('World!')
print (list)

输出结果为:

复制代码
['Hello', 'World!']

可以使用 del 语句删除列表的元素,例如:

复制代码
list1 = ['a', 'b', 10, 20]
print (list1)
del list1[2]
print (" 删除后的输出为 : ")
print (list1)

输出结果为:

复制代码
['a', 'b', 10, 20]
删除后的输出为 :
['a', 'b', 20]

Python 列表操作符和字符串操作符有些是相似的,如“+”号用于组合列表,“*”号用于重复列表。如表 2-3 所示为常见的列表操作符。

表 2-3 常见的列表操作符
操作符 说明
len 列表长度
+ 组合
* 重复
in 元素是否存在于列表中
for 迭代

下面给出一个简单的例子来实现这些列表运算符。

复制代码
list1 = [1,2,3]
list2 = [4,5,6]
print(len(list1))
print(list1+list2)
print(list1*3)
print(3 in list1)
for x in list1:
print (x)

输出结果为:

复制代码
3
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
True
1
2
3

2.5 Python 的元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号,列表使用方括号。元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。例如:

复制代码
tup1 = ('a', 'b', 10, 20)
tup2 = (1, 2, 3, 4, 5 )
tup3 =("a", "b", "c", "d")
tup1 = () #创建空元组

元组中只包含一个元素时,需要在元素后面添加逗号,例如:

复制代码
tup1 = (50,)

元组与字符串类似,下标索引从 0 开始,可以进行截取、组合等。元组可以使用下标索引来访问元组中的值,例如:

复制代码
tup1 = ('a', 'b', 10, 20)
tup2 = (1, 2, 3, 4, 5 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:4]: ", tup2[1:4])

输出结果为:

复制代码
tup1[0]: a
tup2[1:4]: (2, 3, 4)

元组中的元素值是不允许修改的,但可以对元组进行连接组合,例如:

复制代码
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

输出结果为:

复制代码
(12, 34.56, 'abc', 'xyz')

元组中的元素值是不允许删除的,但可以使用 del 语句来删除整个元组,例如:

复制代码
tup1 = ('a', 'b', 10, 20)
print (tup)
del tup
print (" 删除后的结果: ")
print (tup)

以上实例中,元组被删除后,输出变量会有异常信息,输出如下:

复制代码
('a', 'b', 10, 20)
删除后的结果:
Traceback (most recent call last):
File "F:/program/2.5.py", line 26, in <module>
print (tup)
NameError: name 'tup' is not defined

与字符串一样,元组之间可以使用“+”号和“*”号进行运算。这就意味着它们可以组合和复制,运算后会生成一个新的元组。常见的元组运算符如表 2-4 所示。

表 2-4 常见的元组运算符
运算符 说明
len 计算元素个数
+ 连接
* 复制
in 元素是否存在
for 迭代

下面给出一个简单的例子来实现这些元组运算符。

复制代码
tup1 = (1,2,3)
tup2 = (4,5,6)
print(len(tup1))
print(tup1+tup2)
print(tup1*3)
print(3 in tup1) 
for x in tup1:
print (x)

输出结果为:

复制代码
3
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 1, 2, 3, 1, 2, 3)
True
1
2
3

2.6 Python 的字典

字典是另一种可变容器模型,并且可存储任意类型的对象。

字典的每个键值对(key-value)用冒号分隔,每个键值对之间用逗号分隔,整个字典包括在花括号中,格式如下:

复制代码
dict = {key1 : value1, key2 : value2 }

键一般是唯一的,如果重复,最后一个键值对就会替换前面的,值不需要唯一。例如:

复制代码
dict = {'a': 1, 'b': 2, 'b': '3'}
print(dict['b'])
print(dict)

输出结果为:

复制代码
3
{'a': 1, 'b': '3'}

值可以取任何数据类型,但键必须是不可变的,如字符串、数字或元组。这里给出一个简单的字典实例:

复制代码
dict = {'Alice': '20', 'Beth': '21', 'Cecil': '22'}

也可如此创建字典:

复制代码
dict1 = { 'abc':123}
dict2 = { 'abc': 123, 98: 37 }

如果要访问字典里的值,只要把相应的键放入熟悉的方括号中即可,例如:

复制代码
dict = {'Name': 'xioaming', 'Age': 20, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

输出结果为:

复制代码
dict['Name']: xioaming
dict['Age']: 20

如果用字典里没有的键访问数据,则会输出错误,例如:

复制代码
dict = {'Name': 'xioaming', 'Age': 20, 'Class': 'First'}
print ("dict[xiaowang']: ", dict['xiaowang'])

输出结果为:

复制代码
Traceback (most recent call last):
File "F:/program/2.6.py", line 19, in <module>
print ("dict[xiaowang']: ", dict['xiaowang'])
KeyError: 'xiaowang'

向字典添加新内容的方法是增加新的键 / 值对,示例如下:

复制代码
dict = {'Name': 'xioaming', 'Age': 20, 'Class': 'First'}
dict['Age'] = 22 #修改年龄
dict['School'] = "NUIST" #添加新的键 / 值对
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

输出结果为:

复制代码
dict['Age']: 22
dict['School']: NUIST

在字典操作中,能删除单一的元素也能清空字典,删除一项只需要删除其键的内容。删除一个字典用 del 命令,示例如下:

复制代码
dict = {'Name': 'xioaming', 'Age': 20, 'Class': 'First'}
del dict['Name'] #删除键是'Name'的条目
dict.clear() #清空词典所有条目
del dict #删除词典
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

但这会引发一个异常,因为用 del 后字典不再存在:

复制代码
Traceback (most recent call last):
File "F:/program/DCGAN-tensorflow-master/2.6.py", line 34, in <module>
print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable

图书简介

Python数据挖掘与机器学习实战(二):Python语言简介

购书地址 https://item.jd.com/12623592.html?dist=jd

相关阅读

Python 数据挖掘与机器学习实战(一):Python 语言优势及开发工具

Python 数据挖掘与机器学习实战(二):Python 语言简介

Python 数据挖掘与机器学习实战(三):网络爬虫原理与设计实现

Python 数据挖掘与机器学习实战(四):用 Python 实现多元线性回归

Python 数据挖掘与机器学习实战(五):基于线性回归的股票预测

其他

评论

发布