Python数据可视化之Matplotlib与Pyecharts实战
上QQ阅读APP看书,第一时间看更新

2.1 Python数据类型

Python是一种动态类型的编程语言,因此它支持多种数据类型。Python中的基本数据类型包括数字、字符串、布尔、列表、元组、集合和字典等。本节开始介绍这些数据类型的特点与使用。

2.1.1 数字

Python中的数字(Number)类型用于存储数值,主要有整型(int)和浮点型(float)两种。

例1:我们知道客户是门店最重要的资产,为了更好地了解客户和为客户服务,门店经理让分析师小王统计汇总每日购买商品的客户数,其中今天的客户数为99人,输入代码如下:

     cust_num1 = 99

此时,cust_num1变量的值是99,此为整型数据。

例2:门店经理需要统计本月销售数据,经实际计算为2984.5万元,将此数值赋予一个变量,即给门店带来直接利润的客户。会有部分客户进行退货,根据营业流水数据统计,共计8人,因此需要剔除,输入有效客户数的代码如下:

     cust_num2 = 2984.5

此时,变量cust_num2的值即为浮点型。

2.1.2 字符串

字符串(String)是Python中常用的数据类型之一。我们可以使用英文输入法下的单引号(' ')或双引号(" ")来创建字符串,字符串可以是英文、中文或中文和英文的混合形式。例如,输入以下代码:

     str1 = "Now or never!"
     str2 = "学习Python!"

此时,创建了两个字符串str1和str2,执行上述代码后两个字符串如下:

     str1
     'Now or never!'
     str2
     '学习Python!'

在Python中,可以通过“+”实现字符串与其他字符串的拼接,例如输入以下代码:

     str3 = str1 + " Work hard to learn Python!"

此时str3字符串如下:

     'Now or never! Work hard to learn Python!'

在字符串中,我们可以通过索引获取字符串中的字符,遵循“左闭右开”的原则,注意索引是从0开始的。例如,截取str1的前3个字符,代码如下:

     str1[:3]
     #或者str1[0:3]

输出结果如下:

     'Now'

可以看出,程序输出str1中的前3个字符“Now”,索引分别对应0、1、2。原字符串中的每个字符对应的索引号如表2-1所示。

表2-1 字符串索引

此外,还可以使用反向索引实现上述需求,但是索引位置会发生变化,分别对应−13、−12、−11,代码如下:

     str1[-13:-11]

输出结果如下:

     'Now'

同理,我们也可以截取原字符串中的“never”子字符串,索引的位置是7~12,注意包含7,但不包含12,截取字符串的代码如下:

     str1[7:12]

输出结果如下:

     'never'

Python提供了方便灵活的字符串运算,表2-2列出了可以用于字符串运算的运算符。

表2-2 字符串运算符

下面以成员运算符in为例介绍字符串运算符,例如,我们需要判断“never”是否在字符串str1中,代码如下:

     'never' in str1

输出结果如下:

     True

这里显示的是True,如果不存在结果,就输出False。

2.1.3 列表

列表(List)是Python中常用的数据类型之一,使用方括号([])表示。列表中的元素用逗号分隔,并且不需要所有元素具有相同的类型。

例如,创建3个门店有效客户的列表,其中list1为客户张三的个人信息,list2为一周有效客户的数量,list3为客户信息表的主要字段,代码如下:

     list1 = ['张三', '男', 18966666666, '东方路666号']
     list2 = [91, 78, 83, 85, 82, 129, 116]
     list3 = ["客户姓名", "客户性别", "联系电话", "联系地址"]

运行上述代码,创建的列表输出如下:

     list1
     ['张三', '男', 18966666666, '东方路666号']
     list2
     [91, 78, 83, 85, 82, 129, 116]
     list3
     ['客户姓名', '客户性别', '联系电话', '联系地址']

列表的索引与字符串的索引一样,也是从0开始的,也可以进行截取、组合等操作。例如,我们截取list3中索引从1到3但不包含索引为3的字符串,代码如下:

     list3[1:3]

输出结果如下:

     ['客户性别', '联系电话']

可以对列表的数据项进行修改或更新,例如将列表list1中索引为1的元素“男”改为“女”。首先查看索引为1的元素,代码如下:

     list1[1]

输出结果如下:

再修改列表的元素,代码如下:

     list1[1] = '女'
     list1

输出结果如下:

     ['张三', '女', 18966666666, '东方路666号']

可以使用del语句来删除列表中的元素,代码如下:

     del list1[1]
     list1

输出结果如下:

     ['张三', 18966666666, '东方路666号']

也可以使用append()方法在列表尾部添加列表项,代码如下:

     list1.append(29)
     list1

输出结果如下:

     ['张三', 18966666666, '东方路666号', 29]

此外,还可以使用insert()方法在中间指定的位置之前添加列表项,代码如下:

     list1.insert(1,'男')
     list1

输出结果如下:

     ['张三', '男', 18966666666, '东方路666号', 29]

2.1.4 元组

Python的元组(Tuple)与列表类似,不同之处在于元组的元素不能被修改。注意元组使用小括号表示,而列表使用方括号表示。元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

例如,创建3个门店有效客户的元组,其中tup1为客户张三的个人信息,tup2为一周有效客户的数量,tup3为客户信息表的主要字段,代码如下:

     tup1 = ('张三', '男', 18966666666, '东方路666号')
     tup2 = (91, 78, 83, 85, 82, 129, 116)
     tup3 = ("客户姓名", "客户性别", "联系电话", "联系地址")

运行上述代码,创建的元组输出如下:

     tup1
     ('张三', '男', 18966666666, '东方路666号')
    
     tup2
     (91, 78, 83, 85, 82, 129, 116)
    
     tup3
     ("客户姓名", "客户性别", "联系电话", "联系地址")

如果元组中只包含一个元素,那么需要在元素后面添加逗号,否则括号会被当作运算符使用,示例如下:

     tup4 = (29,)
     tup4
     (29,)
    
     tup5 = (29)
     tup5
     29

元组的索引与字符串的索引一样,也是从0开始,也可以进行截取、组合等操作。例如,我们截取tup3中索引从1到3但不包含索引为3的元素,代码如下:

     tup3[1:3]

输出结果如下:

     ('客户性别', '联系电话')

在Python中,也可以通过“+”实现对元组的连接,运算后会生成一个新的元组,代码如下:

     tup6 = tup1 + tup4
     tup6

输出结果如下:

     ('张三', '男', 18966666666, '东方路666号', 29)

注意,元组中的元素是不允许修改和删除的,例如修改元组tup6中第3个元素的值,代码如下:

     tup6[2] = 18988888888

会输出如下错误信息:

     ---------------------------------------------------------------------------
     TypeError                   Traceback (most recent call last)
     Cell In[45], line 1
     ----> 1 tup6[2] = 18988888888
     TypeError: 'tuple' object does not support item assignment

2.1.5 集合

集合(Set)是一个无序的不重复元素序列,可以使用大括号或者set()函数创建,注意创建一个空集合必须使用set(),因为{}是用来创建一个空字典的。创建集合的格式如下:

     parame = {value01, value02, ...}

或者

     set(value)

下面以客户购买商品为例介绍集合的去重功能,假设某客户周一分早晚两次在门店购买了6件商品,分别是中性笔、荧光笔、订书机、中性笔、胶水、计算器,这里有重复的商品中性笔,我们可以借助集合删除该重复值,代码如下:

     order_mon = {'中性笔','荧光笔','订书机','中性笔','胶水','计算器'}
     order_mon

输出结果如下:

     {'中性笔', '胶水', '荧光笔', '计算器', '订书机'}

运行上述代码,可以看出已经删除了重复值,只保留了5种不同类型的商品名称。

集合的元素是无序的,因此打印输出的时候也是无序的。

例如,上述客户周三在门店购买了4件商品,分别是订书机、胶水、笔筒、会议牌,代码如下:

     order_wed = {'订书机','胶水','笔筒','会议牌'}
     order_wed

输出结果如下:

     {'会议牌','胶水',  '笔筒', '订书机'}

我们还可以快速判断某个元素是否在某集合中,例如,判断该客户周一是否购买了“计算器”,代码如下:

     '计算器' in order_mon

输出结果如下:

     True

此外,Python中的集合与数学中的集合概念基本类似,也有交集、并集、差集和补集。

1.集合的交集

例如,统计上述客户周一和周三都购买的商品,代码如下:

     order_mon & order_wed

输出结果如下:

     {'胶水', '订书机'}

图2-1 集合间的关系

2.集合的并集

例如,统计该客户周一和周三购买的商品,代码如下:

     order_mon | order_wed

输出结果如下:

     {'中性笔', '会议牌', '笔筒', '胶水', '荧光笔', '计算器', '订书机'}
3.集合的差集

例如,统计该客户在周一和周三不同时购买的商品,代码如下:

     order_mon ^ order_wed

输出结果如下:

     {'中性笔', '会议牌', '笔筒', '荧光笔', '计算器'}
4.集合的补集

例如,统计该客户周一购买,而周三没有购买的商品,代码如下:

     order_mon - order_wed

输出结果如下:

     {'中性笔', '荧光笔', '计算器'}

2.1.6 字典

与列表、元组、集合类似,字典(Dictionary)也是一种可变容器,且可存储任意类型的对象。字典的每个键−值对用冒号分隔,每个键−值对之间用逗号分隔,整个字典包括在花括号中,格式如下:

     dict = {key1:value1, key2:value2}

注意,键−值对中的键必须是唯一的,但是值可以不唯一,且数值可以取任意数据类型,但键必须是不可变的,例如创建3个字符串或数字字典,代码如下:

     dict1 = {'客户数量': 91}
     dict2 = {'客户数量': 91, 2023:6}
     dict3 = {'客户姓名':'张三','客户性别':'男','联系电话':18966666666,'联系地址':'东方路
666号'}

运行上述代码,创建的字典输出如下:

     dict1
     {'客户数量': 91}
    
     dict2
     {'客户数量': 91, 2023: 6}
    
     dict3
     {'客户姓名': '张三', '客户性别': '男', '联系电话': 18966666666, '联系地址': '东方路666号'}

在Python中,访问字典中的值需要把相应的键放入方括号中,例如获取客户的联系地址,代码如下:

     dict3['联系地址']

输出结果如下:

     '东方路666号'

在Python中,当访问字典中的值时,如果字典中没有该键,那么程序会报错,代码如下:

     dict3['客户年龄']

会输出如下的错误信息:

     --------------------------------------------------------------------------
     KeyError                   Traceback (most recent call last)
     Cell In[18], line 1
     ----> 1 dict3['客户年龄']
     KeyError: '客户年龄'

在Python中,还可以向已有字典中添加新内容,方法是增加新的键−值对,也可以修改字典已有键−值对中的值,例如,向字典dict2中添加键“客户年龄”,并修改键“2023”中的值为8,代码如下:

     dict2['客户年龄'] = 29
     dict2[2023] = 8
     dict2

输出结果如下:

     {'客户数量': 91, 2023: 8, '客户年龄': 29}

在Python中,能够删除字典中的单一元素,也能清空和删除字典,例如要删除字典dict2中的键“2023”,然后清空字典,最后删除字典。输入代码如下:

     del dict2[2023]
     dict2

输出结果如下:

     {'客户数量': 91, '客户年龄': 29}

可以使用clear()方法清空字典,代码如下:

     dict2.clear()
     dict2

输出结果如下:

     {}

使用del()方法删除字典后,再调用该字典,将会显示字典没有被定义的报错信息,代码如下:

     del dict2
     dict2

会输出如下错误信息:

     --------------------------------------------------------------------------
     NameError                     Traceback (most recent call last)
     Cell In[28], line 1
     ----> 1 dict2
     NameError: name 'dict2' is not defined