QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2020-02-01
  • 本文字数:6477 字

    阅读完需:约 21 分钟

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 所示。



图 2-1 安装 Anaconda


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



图 2-2 添加环境变量


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



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

2.1.2 安装 Spyder

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


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



图 2-4 安装 Spyder


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



图 2-5 Spyder 界面

2.1.3 运行和保存 Python 程序

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


print("Hello World")
复制代码


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



图 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 所示。



图 2-7 Python 的命令行窗口


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


在提示符后面输入算式:


>>> 9*8.4676.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 变量。


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


10001000.0Python
复制代码


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]: Hstr2[1:5]: ytho
复制代码


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


str1 = 'Hello 'str2 = 'world!'str1 = str1+str2print(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 输出结果: HelloPythona * 2 输出结果: HelloHelloa[1] 输出结果: ea[1:4] 输出结果: ellH 在变量 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]:  alist2[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]True123
复制代码

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]:  atup2[1:4]:  (2, 3, 4)
复制代码


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


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


输出结果为:


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


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


tup1 = ('a', 'b', 10, 20)print (tup)del tupprint ("删除后的结果: ")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)True123
复制代码

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']:  xioamingdict['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']:  22dict['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
复制代码


图书简介:https://item.jd.com/12623592.html?dist=jd



相关阅读


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


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


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


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


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


2020-02-01 16:20763

评论

发布
暂无评论
发现更多内容

SQL 生成斐波那契数列

zero

sql 斐波那契 MySQ

程序员的晚餐 | 5 月 19 日 蒜香鸡腿,味道令人惊讶

清远

美食

奇怪知识点系列:Office 365 CDN 揭秘

手艺人杨柳

Office 365 Microsoft 365 SharePoint Online

看完这篇 HTTPS,和面试官扯皮就没问题了

苹果看辽宁体育

https

Oracle 数据恢复一例

wong

oracle windows dbf

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

部门最漂亮的妹子离职了

Geek_6rptuk

团队管理 生涯规划 企业文化 职场

如何设计一款“高可用高性能”的发号器?

捉虫大师

Java 高可用 发号器 高性能 raft

2020年5月19日 Java并发编程专题

瑞克与莫迪

Java

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

看得懂的区块链及智能合约概念

石君

区块链 智能合约

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

比特币是新生事物吗?

Haiyung

比特币

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

linux文件系统-inode学习整理

戈坞昂

Linux inode

Android | Tangram动态页面之路(四)vlayout原理

哈利迪

android

「Postman教程 」功能介绍-1

Megatron7

测试 Postman

Kubernetes时代的云容器平台:各家云产品模式逐渐丰富

韩超

腾讯云 阿里云 Kubernetes IaaS PaaS

「Postman教程 」接口测试-2

Megatron7

测试 Postman

回“疫”录(21):你这样做的样子真丑

小天同学

疫情 心理 回忆录 现实纪录 纪实

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

谁能让你安稳

Neco.W

工作 稳定性 努力工作

《零基础学 Java》 FAQ 之 9-Java里的各种数据类型占用多少内存空间

臧萌

Java

你的c++团队还在禁用异常处理吗?

泰伦卢

c c++ C#

MyBatis支持的jdbcType 枚举类型

Kevin Liao

生活就是这么讽刺,有时候你嘲笑他,有时候你想成为他......

代码诗人

中年危机 文艺 短片小说

实现一个比LongAdder更高性能的计数器有多难?

捉虫大师

Java jdk LongAdder

关于键盘的一些事

BabyKing

vim 缓存 键盘 快捷键 karabiner

从Deepl说起,聊一聊未来的“安全职业”

孤岛旭日

程序员 AI 职业

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

520 我用算法帮女朋友的闺蜜选男友

cherubines

Python 算法 数据分析 蒙特卡洛 最优解

Python数据挖掘与机器学习实战(二):Python语言简介_大数据_方巍_InfoQ精选文章