写点什么

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:20547

评论

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

大作业2-知识总结

arcyao

话题讨论 |互联网软件技术培训,靠谱吗?

不脱发的程序猿

程序员 程序人生 话题讨论 互联网培训 技术培训

从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用

飞天小牛肉

Java 程序员 面试 计算机网络 2月春节不断更

反常识的学习思维

小匚

自我思考 成长笔记

程序员养家活口接私活必备网站(顺便用技术改变世界)

孙叫兽

程序员 网站 私活

使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。

孙叫兽

App 开发 APICloud 引航计划

简金秋:区块链技术构建服装行业全新商业模式

CECBC

区块链 服装行业

全球区块链与数字经济领军课程

CECBC

数字经济 科技

week12-作业一

未来已来

week12-根据当周学习情况,完成一篇学习总结

未来已来

产品 0 期 - 第四周作业

vipyinzhiwei

史上最全的技术手册整理总结,编程小白都从这篇文章迅速成为大牛

孙叫兽

Java 大前端 技术手册 开发文档

百度网盘限速解决方案

孙叫兽

解决方案 百度网盘 限速

让人“眼前一亮、不明觉厉”的互联网技术PPT

不脱发的程序猿

程序人生 PPT 2月春节不断更 互联网技术PPT 互联网工具

用python提前预测jvm cpu100%自动dump thread

程序员石磊

JVM Thread cpu 100%

使用 Tye 辅助开发 k8s 应用竟如此简单(二)

newbe36524

微服务 k8s dotnet 服务发现

“五年饮冰,难凉热血”,一名专科生的求学历程

不脱发的程序猿

程序人生 心路历程 2月春节不断更 大学总结 2020年度总结

大作业1-同城快递业务系统设计

arcyao

期末大作业二

心在那片海

话题讨论 | 云原生应用应该是什么样子?面临的技术挑战有哪些?

xcbeyond

微服务 云原生 Service Mesh 话题讨论

1. 这才是 Python 学习的正确起手姿势,滚雪球学 Python

梦想橡皮擦

Python python 爬虫 2月春节不断更 python入门 python学习

话题讨论:公司已经发不出工资了,你会选择坚持还是放弃?

石云升

话题讨论 2月春节不断更

期末大作业一

心在那片海

阿里架构师经验分享!写给互联网大厂员工的真心话,最全的BAT大厂面试题整理

欢喜学安卓

android 程序员 面试 移动开发

复盘银行的区块链实践:从分布式账本,到产业数字化

CECBC

大数据 银行

架构师训练营大作业

菜青虫

基于Docker的大数据开发环境 - HDP Sandbox

大数志

大数据 hadoop spark

2020年末总结,脚踏实地,一步一个脚印——致敬自己一年的心酸历程

孙叫兽

孙叫兽 年度报告 引航计划

从零开始学Android!15个经典面试问题及回答思路,这原因我服了

欢喜学安卓

android 程序员 面试 移动开发

如何制作和使用自签名证书

soulteary

Docker SSL证书

Springboot+Netty+Websocket实现消息推送实例

Java架构师迁哥

  • 扫码添加小助手
    领取最新资料包
Python数据挖掘与机器学习实战(二):Python语言简介_大数据_方巍_InfoQ精选文章