写点什么

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

评论

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

如何用DataTester设计并创建可视化实验

字节跳动数据平台

AB testing实战 A/B测试 企业号 4 月 PK 榜

ARB链质押挖矿代币空投游戏dapp系统开发合约定制

开发微hkkf5566

我认真总结并分析了Spring事务失效的十种常见场景

Java spring Spring事务

超级详细|Linux系统下从0到1的玩法大全

浅羽技术

Linux unix 操作系统 命令 三周年连更

基于STM32设计的音乐播放器

DS小龙哥

三周年连更

华为云开源项目OpenTiny中TinyVue有什么优势?

英勇无比的消炎药

开源 Vue 组件库

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

Java你猿哥

redis 面试题 缓存穿透 缓存击穿 缓存雪崩

超简单!Java 项目自动生成接口文档教程

Apifox

Java 接口文档 API 文档生成 自动生成

GitHub爆款!Java性能优化:轻松道破软件性能调优,不止搞定JVM

Java你猿哥

Java JVM Java性能优化

品牌活动|行云创新出席“新工业·智物联”全国巡回 CEO 峰会

行云创新

行云创新 新工业 智物联 全国巡回CEO峰会珠海站

【Linux】firewall-cmd之防火墙简介及命令详解【附加实战⭐建议收藏!!⭐】

A-刘晨阳

Linux 防火墙 Firewalld防火墙 三周年连更

阿里p8强烈推荐这部《从零开始学架构》堪称GitHub最强!

Java你猿哥

Java 架构 ssm 架构设计

Mybatis返回集合类型到底是空集合还是null?源码解读

Java 源码 mybatis

已献出膝盖!GitHub上的宝藏级SpringBoot核心宝典,讲得太清晰了

Java 架构 微服务 Spring Boot 框架

ThreadLocal源码分析

Java 源码 多线程 ThreadLocal

Android C++系列:C++11函数特殊特性

轻口味

c++ 三周年连更

Typescript- 数据类型

格斗家不爱在外太空沉思

typescript 三周年连更

python中对象引用 | python小知识

AIWeker

Python python小知识 三周年连更

共享电单车生产厂家如何选择

共享电单车厂家

共享电动车厂家 共享电单车生产 共享电动车厂商 本铯智能共享电动车商家

掌握动态规划,从“什么问题适合用”及“解题思路”入手

华为云开发者联盟

人工智能 AI 华为云 华为云开发者联盟 企业号 4 月 PK 榜

JSF源码分析(一)

京东科技开发者

spring jsf 企业号 4 月 PK 榜

java 开发 SSM 框架整合之 MyBatis 动态 SQL

Java你猿哥

Java sql mybatis SSM框架 if

The Beacon链游NFT系统开发技术

薇電13242772558

NFT

阿里“妈宝级”之作,Kubernetes原理剖析与实战应用手册,太全了

Java Kubernetes k8s

Java中的「接口」到底是什么?

海拥(haiyong.site)

三周年连更

拿来吧你!保姆级Docker底层原理及源码实战手册,上线点赞破10W

Java Docker 容器

终于有人把动态规划、冒泡排序、二叉树、链表、栈全部讲清楚了

Java你猿哥

数据结构 算法 二叉树 排序 LeetCode算法

全栈开发实战|Vue进阶——使用静态模块打包工具webpack

TiAmo

Vue webpack 三周年连更 静态模块打包

《人间失格》

后台技术汇

三周年连更 人间失格

每个Java程序员都必须知道的四种负载均衡算法

Java 负载均衡 负载均衡算法

一文详解RocketMQ-Spring的源码解析与实战

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

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