NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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数据挖掘与机器学习实战(五):基于线性回归的股票预测


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-02-01 16:20598

评论

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

龙蜥开发者说:从入坑到入门 | 第 2 期

OpenAnolis小助手

开源 龙蜥社区 开发者说 技术的力量

阿里巴巴副总裁陈丽娟:我对阿里云产品生态的思考 | 云原生加速器观点

阿里巴巴云原生

python 同时迭代多个序列,还没吃透内存缓存LruCache实现原理的看这篇文章

程序媛可鸥

Python 程序员 面试

python中把列表中的字符串转成整型的3种方法,收割快手,字节,百度,美团的Offer之旅

程序媛可鸥

Python 程序员 面试

2022年中小企业数据安全如何保障?对比华为云与其他云计算大厂,15分钟的字节跳动视频面试

程序媛可鸥

Python 程序员 面试

Python代码报错看不懂?记住这些报错提示单词轻松解决bug,2021年Python开发陷入饱和,

程序媛可鸥

Python 程序员 面试

jQuery入门到精通学习教程,收藏我这篇就够了,Alibaba高并发业务实战文档

程序媛可鸥

Python 程序员 面试

Python 实现二叉树前序,中序,后序,零基础也能看得懂

程序媛可鸥

Python 程序员 面试

python3的变量作用域规则和nonlocal关键字,Python面试及答案

程序媛可鸥

Python 程序员 面试

Python“鉴黄”小程序,我离职后面试收割小米等大厂offer

程序媛可鸥

Python 程序员 面试

python回调函数之获取jenkins构建结果,Python编程零基础

程序媛可鸥

Python 程序员 面试

Python基础教程:print输出带颜色的方法详解,Python开发基础面试题

程序媛可鸥

Python 程序员 面试

Kafka 常用命令总结,高级Python面试题

程序媛可鸥

Python 程序员 面试

大疆被制裁,请马上卸载postman!

Liam

程序员 Postman 开发工具 API swagger

从硬件到软件,教你从零搭建智慧农业大脑

华为云开发者联盟

物联网 智慧农业 华为云IoT 小熊开发板 STM32L431芯片

浅谈NIO和Epoll实现原理

Linux服务器开发

网络编程 epoll Linux服务器开发 Linux后台开发 网络io

WorkPlus移动平台 | 如何建设“智慧校园”新样态?

WorkPlus

Python中用tuple作为key,写的太详细了

程序媛可鸥

Python 程序员 面试

向工程腐化开炮|动态链接库so治理

阿里巴巴终端技术

android 动态链接库

Python 开发编码规范,阿里面试100%会问到的JVM

程序媛可鸥

Python 程序员 面试

Python中return和yield的区别,2021年Python笔试题总结

程序媛可鸥

Python 程序员 面试

python基础教程:元组和集合,踩坑了

程序媛可鸥

Flutter 图片库高燃新登场

阿里巴巴终端技术

flutter

Python GUI编程:关于 tkinter 怎么才能写出更好看的界面,华为架构师深入讲解Python开发

程序媛可鸥

程序员

python3 基础小练习: 判断闰年,2021最新Python算法相关面试大

程序媛可鸥

Python 程序员 面试

python函数练习题,万字长文

程序媛可鸥

Python 程序员 面试

Tapdata 在“疫”线:携手张家港市卫健委争分夺秒实时抗疫

tapdata

数据库 实时数据

python DataFrame数据合并 merge()、concat()方法,拿下我人生中第7个Offer

程序媛可鸥

Python 程序员 面试

nginx5种负载策略的设置方法,看完直接怼产品经理

程序媛可鸥

Python 程序员 面试

fastposter v2.6.1 发布 程序员专属海报生成器

物有本末

海报 fastposter 海报生成器 电商海报

2021年【大学生Python学习】社区&&小博主,2021最新大厂高频微服务面试总结

程序媛可鸥

Python 程序员 面试

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