商业数据分析从入门到入职(5)Python基本语法和数据类型

2020-09-22 10:30:30 浏览数 (1)

文章目录

  • 一、从计算机到Python
    • 1.计算机与程序思维
    • 2.Python的特点和应用
    • 3.工具选择和安装
    • 4.Jupyter Notebook的基本使用
  • 二、Python的简单使用
    • 1.print函数的使用
    • 2.notebook中进行计算
    • 3.Python基本语法规范
  • 三、Python基本数值数据类型
    • 1.整型
    • 2.浮点型
    • 3.布尔型
    • 4.字符串
    • 5.类型转换
  • 四、字符串操作
    • 1.结合与重复
    • 2.提取与切片
    • 3.获取长度
    • 4.分割和合并
    • 5.替换
    • 6.布局
    • 7.其他操作

一、从计算机到Python

1.计算机与程序思维

计算机最核心的三个部分为CPU内存硬盘,都在主板上面,除此之外,还包括键盘、鼠标等输入设备和屏幕等输出设备,如下:

CPU用于进行计算,硬盘用于存储数据和文件,内存(包括缓存)用于连接CPU和硬盘,作为两者的缓冲,可以加快读取和处理速率。

冯·诺依曼架构如下:

计算机通过输入逐行读取命令并执行,有输出则输出结果,程序是指定如何执行计算的一系列指令,可以说,程序就是写给计算机的菜谱。

但是程序思维和普通思维不太一样,比如: 对于一个陈述性知识(Declarative Knowledge)y是x的平方根,当且仅当y*y=x,但是对于程序性知识(lmperative Knowledge)可能就不是这么表现的,可能如下:

很明显,思维是不完全一致的。 在人的语言中,很多语句存在歧义,计算机不一定能理解,因此需要专门的编程语言。

有一个典型的笑话:

老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门。。。老婆怒道:“你怎么就买了一个包子?!”老公答曰:“因为看到了卖西瓜的。”

这虽然是一个笑话,但是可以看出计算机语言需要精确的表达,如果存在歧义就可能会出现不一样的结果。

程序员在码代码时经常会思考两个问题: (1)It doesn’t work,…,why? (2)It works,…,why? 这也是程序员很正常的状态。

程序员发展道路可以如下:

  • 学习基本语法
  • 读别人的代码
  • 修改别人的代码
  • 开始写自己的小程序
  • 参与开源项目

写程序应该遵循以下步骤:

  • 问题表述 有什么,要实现什么。
  • 设计计划 如何实现,需要什么。
  • 编码与调试 编码与错误验证。
  • 评价 评价是否合理。
  • 改进(重构) 优化或重新编写。

编程语言的元素如下:

  • 词汇 变量Variables和保留词汇Reserved words。 Python中的保留词汇包括FALSE、class、is、finally、return、None、if、for、lambda、continue、True、def、from、while、nonlocal、and、del、global、with、not、elif、yield、try、as、or、else、assert、import、pass、break、in、raise、except等。
  • 句子结构
    • 语法Syntax
    • 语义Semantics
  • 程序结构 为某个目的构造程序。

程序中的基本指令包括:

  • input数据输入 从键盘、文件或其他设备获取数据。
  • output输出 在屏幕上显示数据或将数据发送到文件或其他设备。
  • math计算 执行基本的数学运算,如加法和乘法。
  • conditional execution条件执行 检查某些情况并执行适当的代码。
  • repetition重复 重复地做一些动作,通常有一些变化。

其中,后两者用于控制逻辑。

程序中常见的基本数据类型如下:

  • Integers整型 -3、100等整数。
  • Floats浮点型 lntegers 带小数点的数字,如3.14159,或某些指数,如1.0e8或10000.0。
  • Booleans布尔型 其值为True或False。
  • Strings字符串 文本字符序列。

2.Python的特点和应用

Python是一门计算机程序语言,可以理解为人对计算机的指令。

Python之所以这么火,与它的特点有关:

  • 简洁美观
  • 广泛的第三方库支持 很多人基于Python开发出现成的功能,别人可以直接使用,并且体系逐渐完善,使用起来越来越方便。
  • 支持大多数现代云平台
  • 最新机器学习框架

Python的典型应用包括数据分析软件开发两大领域: Python中有很多库支持数据分析,包括numpy、pandas、scipy、matplotlib、networkx等; 支持软件开发的库包括Django、Flask和Pyramid等,包括Dropbox、Youtube、Instagram、豆瓣、知乎、魔兽世界等网站和应用都是完全或部分使用Python实现的。

虽然对于视频流、3D游戏等应用,Python还是存在一定的局限,但是它的确有着广泛的应用,所以在IT领域的各个子领域可以使用Python这同一门语言。 Python比较年轻,但是发展迅速,并且从2010年以后由于数据分析等应用得到了快速发展。 同时由于其开源免费,相比于SAS等其他语言,能够更容易被使用者接受,进一步扩大了其应用。

为什么会选择Python作为入门和开发语言:

  • 易学
  • 简单性与可读性
  • 包支持
  • 更快
  • 处理大数据

3.工具选择和安装

Python存在Python2和Python3两个版本,现在Python2已经停止更新,Python3已逐渐成为主流。 Python最常用的IDE(集成开发环境,lntegrated Development Environment)是PyCharm,但是只有专业版(付费)才支持科学计算和数据分析,社区版(免费)不支持科学计算,因此进行数据分析和科学计算还有其他选择,这里选择专业的科学分析工具集Anaconda,并且选择Python3版本。

由于在官网中下载较慢,因此我已经将Anaconda安装包下载整理好了,可以直接加QQ群 963624318 在群文件夹Python相关安装包中下载即可。

安装和普通软件安装类似,直接点下一步即可,只是需要注意,在选择是否添加环境变量时需要勾选,这样就可以直接在命令行中执行相关命令,在Anaconda安装好之后,Python也自动安装,并且安装了科学计算一般所需要的库,不需要自己再专门安装。

安装好之后,按WIN键可以看到,应用列表中有Anaconda包含的工具集合,如下:

对于编写代码,有三个层次的工具:

  • Editor 代码编辑器,包括交互式的编程环境Text、Sublime Text、Notepad 、VSCode等。 编辑器可以编写代码,但是一般不能独立运行代码。
  • IDE 集成开发环境,即lntegrated Development Environment,如PyCharm。 IDE不仅可以编写代码,还可以运行代码,同时还提供代码高亮、调试、代码上传、版本控制等复杂功能,更适合开发大型工程。
  • REPL 全称Read-Evalulate-Print Loop,即读取-求值-输出循环,也就是交互式的编程环境,如Jupyter Notebook。 其特点如下: (1)优点
    • 笔记本形式
    • 良好的实验环境
    • 方便生成报告
    • 免费

    (2)缺点

    • 不便于版本控制
    • 文件组织形式凌乱

4.Jupyter Notebook的基本使用

点击WIN键并按下图操作:

会弹出一个窗口,接下来按下面示意操作即可打开jupyter notebook:

可以看到,打开后,所在的目录在系统家目录下,我们一般需要在自己的工作目录下读取和保存文件,因此可以通过输入cd XXX(XXX为自己所需要执行的目录,在资源管理器中复制即可)跳转到所需目录; 打开notebook是通过输入jupyter notebook命令实现的,执行完后,会使用电脑的默认浏览器打开一个网页界面,所有的操作都在这个网页中进行,会读取当前工作目录中的所有文件,资源管理器中对文件的操作都会同步到notebook中; 如果想要在其他浏览器打开,只需要复制URL到浏览器中访问即可。

基础操作如下:

也可以新建notebook文件,示意如下:

可以看到,可以对新建的文件进行命名,同时在文件夹中也可以看到新创建的文件First Python.ipynb; 一个Input或Output框称为一个Cell,Cell中可以执行代码,输入完毕之后按CTRL Enter即可执行代码,还可以按Shift ENter允许当前Cell并自动跳转到下一个Cell; Cell左边的[]中的数字表示运行的顺序,先运行的数字较小,后运行的数字较大,如果是*则表示仍在运行、还未结束,此时也不能继续执行其他cell中的代码。

还有进一步操作:

可以看到,Cell可以方便地添加、删除或者在指定位置插入; 同时Cell中也可以选择类型,除了代码还可以是Markdown标题等,也是按CTRL Enter即可显示有样式的文本,并且支持多种类型混合。

二、Python的简单使用

1.print函数的使用

学习一门新的语言就像打开一个新的世界,计算机输出hello world就是在向世界打招呼,输入:

代码语言:javascript复制
print("Hello World! 你好,世界! Hola mundo!")

输出:

代码语言:javascript复制
Hello World! 你好,世界! Hola mundo!

如需本节同步ipynb文件,可以直接点击加QQ群963624318在群文件夹商业数据分析从入门到入职中下载即可。

输入:

代码语言:javascript复制
print("Hello World!")
print("Hello Again")
print("This is the 3rd line, n","and this is also the 3rd line.")
print("This is the 3rd line, 
and this is also the 3rd line.")

输出:

代码语言:javascript复制
Hello World!
Hello Again
This is the 3rd line, 
 and this is also the 3rd line.
This is the 3rd line, and this is also the 3rd line.

可以看到: n表示换行,后面的内容会换行输出; 可以将一行字符串换行输入,但是实际上还是一行。

2.notebook中进行计算

notebook最主要的功能就是进行计算和数据分析。 输入:

代码语言:javascript复制
4 5

输出:

代码语言:javascript复制
9

再如:

代码语言:javascript复制
print(4-5)
print(4*5)

输出:

代码语言:javascript复制
-1
20

如果代码中存在错误会抛出异常,例如:

代码语言:javascript复制
print(8   )

输出:

代码语言:javascript复制
File "<ipython-input-6-74de9a467743>", line 1
    print(8   )
              ^
SyntaxError: invalid syntax

显然,没有输出结果,反而提示语法错误; 需要满足运算的条件。

但是下面就不会报错:

代码语言:javascript复制
print('8 ')

打印:

代码语言:javascript复制
8 

这是因为将其放入单引号''或双引号""中,使之成为字符串,字符串是可以打印的。

再如:

代码语言:javascript复制
110/12.97

输出:

代码语言:javascript复制
8.481110254433307

但是输出时,最后一次操作的结果将自动打印出来,前面的代码执行但是不输出。 如下:

代码语言:javascript复制
111*222
333*444

输出:

代码语言:javascript复制
147852

此时指输出了333*444的结果,并未输出111*222的结果,此时要输出该结果,只需要使用print()函数即可,如下:

代码语言:javascript复制
print(111*222)
print(333*444)

输出:

代码语言:javascript复制
24642
147852

此时可以全部输出。 除此之外,也可以使用display()函数,如下:

代码语言:javascript复制
display(111*222, 333*444)

输出:

代码语言:javascript复制
24642

147852

3.Python基本语法规范

编程都应该遵循一定的代码规范,这样既可以美化代码,也可以让别人更加直观地阅读代码、不至于不理解或产生误会。 Python也一样,有自己的规范,即为PEP8(Python Enhancement Proposal 8,Python8号增强方案),规定了优雅的Python代码应该具有的格式。

=是赋值运算符,如下:

代码语言:javascript复制
number_of_cars = 34

即是将34赋值给变量number_of_cars,以后number_of_cars即代表数值34。

Python中,有时候空格是有意义的,一般代码用4个空格或者制表符Tab进行缩进、控制代码结构。 如下:

代码语言:javascript复制
x = 8
if x < 7:
print(x)

会报错:

代码语言:javascript复制
File "<ipython-input-13-29d07b2c12b7>", line 4
    print(x)
    ^
IndentationError: expected an indented block

修改为如下就不会报错:

代码语言:javascript复制
x = 8
if x < 7:
    print(x)

同时需要注意语义上的问题,避免出现语意和逻辑上的错误。 如下:

代码语言:javascript复制
x=8
if x < 7: 
    print("x is smaller than 7")   
    print("x is bigger than 7")

显然,这虽然不会报错,但是在语义上是有问题的。

在Python中,一切都是作为对象实现的: 我们可以将一个对象看作一个包含一段数据的盒子; 对象的类型决定了可以对对象(数据)执行的操作,例如,数字可以进行四则运算。

在赋值运算符左侧的为变量,右侧的是值,右侧也可以是变量。 如下:

代码语言:javascript复制
speed_of_liuxiang=110/12.97
distance= 1000
time = distance/speed_of_liuxiang
print(time)
print(time/60)

输出:

代码语言:javascript复制
117.9090909090909
1.965151515151515

其中,110/12.97是值,speed_of_liuxiang是变量,通过赋值运算符= 实现将右侧的值赋值给左侧,这也是我们在Python中定义变量的方式; 但是,在Python中变量只是名称,赋值不复制值,它只是将一个名称附加到包含数据的对象上,可以把变量理解为贴到对象上的标签,如下:

对象在盒子中,盒子上的标签就是变量,可以引用到对象。

三、Python基本数值数据类型

Python中有4种内置数值数据类型:

  • 整型int
  • 浮点型float
  • 布尔型bool
  • 字符串str

1.整型

整型即整数。

输入:

代码语言:javascript复制
123

输出:

代码语言:javascript复制
123

但是输入05,会报错:

代码语言:javascript复制
File "<ipython-input-21-65e6e002a62d>", line 1
    05
     ^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers

所以整型不能以0开头。

输入:

代码语言:javascript复制
123,456,789

输出:

代码语言:javascript复制
(123, 456, 789)

此时数据类型已经改变,不再是整型,而是元组。

对于整型的运算如下:

代码语言:javascript复制
a = 5
a  = 2
display(1   2, a, a-3,9//5,9/5,9%5,2 3*4)

输出:

代码语言:javascript复制
3

7

4

1

1.8

4

14

其中,a = 2a = a 2的简写; //是地板除,即向下取整/的结果是浮点型; %表示求模,即求相除的余数。

在Python3中,int可以处理任何整数,无论它有多大,而不会导致溢出。 如下:

代码语言:javascript复制
a = 10**100
display(a, a*a)

输出:

代码语言:javascript复制
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

可以看到,数足够大,但是并没有溢出; **表示幂运算。

还可以转化为其他进制:

代码语言:javascript复制
display(10,0b10,0o10,0x10)

输出:

代码语言:javascript复制
10

2

8

16

其中,无修饰默认为10进制,0b修饰为二进制,0o修饰为八进制,0x为十六进制。

2.浮点型

浮点型即小数。

可以使用type(variable)来获取变量的类型。例如,type(1)返回int,type(1.2)返回float。

输入:

代码语言:javascript复制
a = 98.5
type(a)

输出:

代码语言:javascript复制
float

也可以使用科学计数法,如输入9.8125e2,输出981.25

Python提供了很多有用的数学函数,包括在math库中。 要使用它们,必须先通过命令import math导入。

使用示意如下:

代码语言:javascript复制
import math

display(math.pi, math.e, math.floor(98.6), math.ceil(98.6), math.pow(2, 3), 2**3, math.sqrt(25))

输出:

代码语言:javascript复制
3.141592653589793

2.718281828459045

98

99

8.0

8

5.0

可以看到,math.pow()方法得出的都是浮点型,而**的结果需要根据参与运算的数值的类型。

3.布尔型

布尔型只有两个值,即True和False,表示逻辑判断的真假。

运算如下:

代码语言:javascript复制
display(type(1 < 2), (2 < 1) or (1 < 2), not (2 < 1), (2 < 1) and (1 < 2), (2 == 1), (2 != 1))

输出:

代码语言:javascript复制
bool

True

True

False

False

True

其中,or表示或运算,not表示非运算,and表示且运算; ==用于判断两个变量值是否相等,是逻辑运算符,需要注意与=不同,它是赋值运算符。

4.字符串

字符串是Python中众多序列中的一个,它是一个字符序列。

输入:

代码语言:javascript复制
s = 'this is a string'
display(type(s), "this is also a string", "I'm a string")

输出:

代码语言:javascript复制
str

'this is also a string'

"I'm a string"

可以看到,字符串可以由单引号或者双引号包裹、并且需要成对出现,使用上两者没什么区别,但是两者可以实现嵌套,即双引号中可以用单引号,单引号中可以用双引号。

还可以在双引号中使用双引号,此时需要使用进行转义,如下:

代码语言:javascript复制
s = "He said: "I'm a string""
print(s)

输出:

代码语言:javascript复制
He said: "I'm a string"

可以看到,在双引号包含的字符串中也可以用双引号作为普通字符,这是通过转义实现的,转义即使需要转义的字符失去其特殊的意义、作为一个普通的字符。

转义字符还可以用于换行符等其他特殊字符,如下:

代码语言:javascript复制
long_s = "You can put a long string that ntakes up multiple lines here"
print(long_s)

输出:

代码语言:javascript复制
You can put a long string that 
takes up multiple lines here

用3层单引号或双引号即可实现字符串换行并保留原格式,如下;

代码语言:javascript复制
s = '''
This is the first line
    This is the second line
'''
print(s)

输出:

代码语言:javascript复制
This is the first line
    This is the second line

5.类型转换

不同的类型的数据之间可以进行类型转换。

浮点数转化为字符串如下:

代码语言:javascript复制
a = str(98.6)
display(a,type(a))

输出:

代码语言:javascript复制
'98.6'

str

再如:

代码语言:javascript复制
display(str(True), float('98.6'), int('-123'))

输出:

代码语言:javascript复制
'True'

98.6

-123

如果混合了不同的数值类型,Python将尝试进行转换再进行运算。 如下:

代码语言:javascript复制
display(1   2.0, True   3)

输出:

代码语言:javascript复制
3.0

4

但是,一般不能将字符串与数字进行混合运算,除非操作有意义(字符串组合和重复); 同时,转化后的类型一般不能再进行转换之前所属类型的操作,如浮点数转换为字符串后,不能再进行数值运算。

如下:

代码语言:javascript复制
3.88 "28"

输出:

代码语言:javascript复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-45-7c94633b599a> in <module>
----> 1 3.88 "28"

TypeError: unsupported operand type(s) for  : 'float' and 'str'

可以转化为相同的类型再进行计算:

代码语言:javascript复制
print(int(3.88)   int("28"))  
print(int(-2.95)   int("28"))
print(float(3)   float("28")) 
print(str(3.88)   str(28))

输出:

代码语言:javascript复制
31
26
31.0
3.8828

可以看到,字符串与字符串实际上是字符串的拼接。

四、字符串操作

1.结合与重复

字符串可以进行结合与重复操作。 结合即字符串的拼接,如下:

代码语言:javascript复制
template = "My name is"
name = "Corley"
greeting = template   " "   name   "."
print(greeting)

输出:

代码语言:javascript复制
My name is Corley.

重复是将一个字符串重复指定次数,如下:

代码语言:javascript复制
laugh = 5 * "Ha "
print(laugh)

输出:

代码语言:javascript复制
Ha Ha Ha Ha Ha 

2.提取与切片

字符串还可以进行提取和切片。 如下:

代码语言:javascript复制
letters = "abcdefghijklmnopqrstuvwxyz"
letters[0]

输出:

代码语言:javascript复制
'a'

其中0是下标,下标即各位字符位置的数字表示,范围是0到length-1(length是字符串的长度)。

如果下标超出范围会报错,如下:

代码语言:javascript复制
letters = "hello world"
letters[25]

报错:

代码语言:javascript复制
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-51-17d500830d0d> in <module>
      1 letters = "hello world"
----> 2 letters[25]

IndexError: string index out of range

还可以用负数下标,如下:

代码语言:javascript复制
letters[-2]

输出:

代码语言:javascript复制
'l'

负数表示从后往前计数,范围是从**-1到-length**。

使用slice从字符串中提取子字符串的方法是[start:end:step],有很多具体实现方式,以letters = "hello world"为例进行说明:

方式

含义

举例输入

输出

[:]

提取整个字符串

letters[:]

‘hello world’

[start:]

从start下标开始到结束

display(letters[2:],letters[-3:])

‘llo world’n’rld’

[:end]

从开始到end-1下标

display(letters[:5], letters[:100])

‘hello’n’hello world’

[start:end]

从start下标end-1下标

display(letters[2:5],letters[-6:-2],letters[-2:-6])

‘llo’n’ wor’n’’

[start: end:step]

从start下标end-1下标,以step为间隔跳过字符

display(letters[1:5:2],letters[7:1:-2],letters[::7],letters[::-1])

‘el’n’o l’n’ho’n’dlrow olleh’

可以看到,在切片时,如果end参数超出下表范围,不会报错,而是直接切片到字符串尾; 如果start大于end,并且不指定step或step为正时,会取不到字符,返回空字符串,此时要想取到字符,需要使step为负数; [::-1]用于将字符串倒序排列。

3.获取长度

获取字符串长度使用len()方法。

如下:

代码语言:javascript复制
len(letters)

输出:

代码语言:javascript复制
11

4.分割和合并

分割字符串使用split()方法,如下:

代码语言:javascript复制
lan = "python ruby c c   swift"
lan.split()

输出:

代码语言:javascript复制
['python', 'ruby', 'c', 'c  ', 'swift']

可以看到,分割得到的结果是列表; 在没有给split()传参数时,默认使用空格进行分割。 还可以指定分割字符(串),传入指定的字符(串)到split()方法中即可按照指定的字符(串)进行切割,如下:

代码语言:javascript复制
todos = "download python, install, download ide, learn"
todos.split(', ')

输出:

代码语言:javascript复制
['download python', 'install', 'download ide', 'learn']

可以使用join()方法拼接列表中的字符串成为一个新字符串。 如下:

代码语言:javascript复制
','.join(['download python', 'install', 'download ide', 'learn'])

输出:

代码语言:javascript复制
'download python,install,download ide,learn'

5.替换

调用replace()方法进行字符串替换。

如下:

代码语言:javascript复制
s = 'I like C. I like C  . She likes Python'
s.replace('like', 'hate')

输出:

代码语言:javascript复制
'I hate C. I hate C  . She hates Python'

可以看到,所有like都被替换成hate。

还可以指定替换个数如下:

代码语言:javascript复制
s.replace('like', 'hate', 2)

输出:

代码语言:javascript复制
'I hate C. I hate C  . She likes Python'

显然,此时只替换了2次。

6.布局

字符串可以设置长度和对齐方式,如果字符串长度不够则用空格将前后补全。 如下:

代码语言:javascript复制
align = 'Learn how to align'
display(align.center(30),align.ljust(30),align.rjust(30))

输出:

代码语言:javascript复制
'      Learn how to align      '

'Learn how to align            '

'            Learn how to align'

可以看到,有居中、向左和向右对齐。

strip()方法用于去掉字符串前后的空格,如下:

代码语言:javascript复制
ralign = align.rjust(30)
ralign.strip()

输出:

代码语言:javascript复制
'Learn how to align'

7.其他操作

对于字符串,还有很多其他使用的方法,以py_desc = "Python description: Python is a programming language that lets you work quickly and integrate systems more effectively."为例进行简单说明:

方法

含义

输入

输出

startswith()

字符串是否以某个子串开头

py_desc.startswith(‘Python’)

True

endswith()

字符串是否以某个子串结尾

py_desc.endswith(‘effectively’)

False

find()

字符串中某个子串第一次出现的位置

py_desc.find(‘language’)

44

isalnum()

字符串是否只包含字母和数字

py_desc.isalnum()

False

count()

字符串中某个子串出现的次数

py_desc.count(“Python”)

2

strip()

去掉字符串开头和结尾的某个字符

py_desc.strip(’.’)

‘Python description: Python is a programming language that lets you work quickly and integrate systems more effectively’

upper()

将一个字符串转化成大写形式

py_desc.upper()

‘PYTHON DESCRIPTION: PYTHON IS A PROGRAMMING LANGUAGE THAT LETS YOU WORK QUICKLY AND INTEGRATE SYSTEMS MORE EFFECTIVELY.’

title()

将一个字符串转化为标题的形式,即单词的首字母大写

py_desc.title()

‘Python Description: Python Is A Programming Language That Lets You Work Quickly And Integrate Systems More Effectively.’

0 人点赞