前言
回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,后续讲到了数据库编程篇MySQL,Redis,MongoDB篇,和机器学习,全栈开发前面没看的也不用往前翻,系列文已经整理好了:
1.跟我一起从零开始学python(一)编程语法必修
2.跟我一起从零开始学python(二)网络编程
3.跟我一起从零开始学python(三)多线程/多进程/协程
4.跟我一起从零开始学python(四)数据库编程:MySQL数据库
5.跟我一起从零开始学python(五)数据库编程:Redis数据库
6.跟我一起从零开始学python(六)数据库编程:MongoDB
7.跟我一起从零开始学python(七)机器学习
8.跟我一起从零开始学python(八)全栈开发
本系列文根据以下学习路线展开讲述,由于内容较多,:
从零开始学python到高级进阶路线图
关注公众号:python技术训练营,学习进阶一步到位
适用于零基础学习和进阶人群的python资源:
① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
如何系统的学习python中的numpy,pandas,matplotlib?太好用了!!!
前言
随着大数据、云计算和人工智能的发展,越来越多的企业需要以数据为基础做出决策。数据分析是处理大量数据的过程,分析数据以识别趋势和模式,并从数据中提取有用的信息来支持业务决策。数据分析可以应用于各种不同的领域,如营销、金融、医疗保健、教育等,可以帮助企业更好地了解市场和客户需求,提高效率和生产力,从而增加收益和利润。
Python是一种通用编程语言,具有简洁、易读、易学、可扩展和丰富的生态系统等优点,因此越来越多的数据分析师和科学家选择使用Python作为其主要工具。Python有许多开源库和工具,如Numpy、Pandas、Matplotlib和Scikit-Learn,可以用于数据处理、可视化、建模和机器学习等任务。此外,Python具有良好的社区支持和优秀的文档,使得Python对新手用户更加友好,使其更容易上手并开始使用数据。
问题很多的小明就问了:那怎么系统的学好python中的numpy,pandas,matplotlib
第一章:numpy
一丶numpy基本类型
NumPy是Python中用于数值计算和科学计算的重要库之一,提供了高效的多维数组(ndarray)对象和各种用于数组计算的函数和工具。在NumPy中,数组的数据类型(dtype)是决定其内存占用和数组内容的格式的关键因素。下面是NumPy中常用的数据类型:
1.整数类型:bool、int8、uint8、int16、uint16、int32、uint32、int64、uint64
- Bool类型:存储True或False的布尔变量
import numpy as np
arr_bool = np.array([True, False, False, True], dtype=bool)
print(arr_bool.dtype) # bool
- Int类型:用于存储有符号或无符号整数,数字越大占用的内存越大,类型名中的数字表示占用的位数。
import numpy as np
arr_int8 = np.array([1, 2, 3, 4], dtype=np.int8)
arr_uint16 = np.array([10, 100, 1000], dtype=np.uint16)
2.浮点类型:float16、float32、float64、float128
- Float类型:用于存储带有小数点的数字,数字占用的空间越大,数据精度更高。
import numpy as np
arr_float32 = np.array([0.0, 1.0, -1.5, 2.8], dtype=np.float32)
arr_float64 = np.array([0.0, 1.0, -1.5, 2.8], dtype=np.float64)
3.复数类型:complex64、complex128、complex256
- Complex类型:用于存储复数,complex64表示由两个32位的浮点数组成,一个表示实数部分,一个表示虚数部分。
import numpy as np
arr_complex = np.array([1+2j, 2+3j, 3+4j], dtype=np.complex128)
4.字符串类型:string
- String类型:用于存储字符串,最长的字符串长度为指定长度。
import numpy as np
arr_str = np.array(['a', 'b', 'c'], dtype=np.string_) #或者 dtype='S1'
5.日期类型:datetime64、timedelta64
- Datetime类型:用于表示日期和时间,datetime64是用于日期的类型,timedelta64是用于时间差的类型。
import numpy as np
arr_date = np.array(['2022-05-01 12:00:00', '2022-05-02 13:23:35'], dtype='datetime64')
在使用numpy进行数值计算时,正确选择合适的数组类型能够减少内存占用和操作时间,提高代码的效率。因此,了解和理解NumPy数组类型是非常重要的。
二丶numpy基础数据结构
NumPy是Python中用于数值计算和科学计算的重要库之一,提供了高效的多维数组(ndarray)对象和各种用于数组计算的函数和工具。在NumPy中,数组是基本的数据结构,可以用于存储和处理任何数值类型的数据。
1.一维数组:
一维数组也称为一阶数组,是最基本的数组。它包含一系列相同数据类型的元素,并按线性方式排列。可以通过索引访问数组中的元素。
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
2.二维数组:
二维数组也称为二阶数组,可以理解为包含多个一维数组的数组,称为行和列。二维数组中每个元素由两个坐标索引指定,一个表示行号,一个表示列号。
import numpy as np
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
3.三维数组:
三维数组也称为三阶数组,由多个二维数组组成,称为深度。每个元素由三个坐标索引指定,分别表示行,列和深度。
import numpy as np
arr3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr3)
4.多维数组:
多维数组可以理解为包含多个n-1维数组的数组,可以是任意维数。在NumPy中,可以用ndim属性来获取数组的维数。
import numpy as np
arr4 = np.array([1, 2, 3], ndmin=5)
print(arr4)
print('数组的维度:', arr4.ndim)
NumPy中的数组数据结构比Python中的list更加灵活和高效,因为NumPy中的数组是按照连续的块存储在内存中的,并且提供了各种数组操作函数和算法,可以满足大量数值计算和科学计算的需求。
三丶numpy通用函数
NumPy(Numerical Python)是用于科学计算和数据分析的Python库之一,在其子模块中包含了许多用于处理多维数组的通用函数(ufuncs)。这些通用函数可以对数组中的元素进行逐个操作,产生一个或多个输出,通常不改变输入数据的形状大小。以下是NumPy中一些常用的通用函数:
1.算术运算:add、subtract、multiply、divide、power、mod、remainder、abs
import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
print(np.add(x, y)) # [5 7 9]
print(np.subtract(x, y)) # [-3 -3 -3]
print(np.multiply(x, y)) # [4 10 18]
print(np.divide(x, y)) # [0.25 0.4 0.5 ]
print(np.power(x, 2)) # [1 4 9]
print(np.mod(y, 2)) # [0 1 0]
print(np.remainder(y, 2)) # [0 1 0]
print(np.abs([-1,-2,3])) # [1 2 3]
2.统计函数:mean、std、var、sum、prod、min、max
import numpy as np
arr = np.array([1, 2, 3, 4])
print(np.mean(arr)) # 2.5
print(np.std(arr)) # 1.118033988749895
print(np.var(arr)) # 1.25
print(np.sum(arr)) # 10
print(np.prod(arr)) # 24
print(np.min(arr)) # 1
print(np.max(arr)) # 4
3.三角函数:sin、cos、tan、arcsin、arccos、arctan
import numpy as np
x = np.array([0, 30, 45, 60, 90])
print(np.sin(np.deg2rad(x))) # [0. 0.5 0.70710678 0.8660254 1. ]
print(np.cos(np.deg2rad(x))) # [1. 0.8660254 0.70710678 0.5 0. ]
print(np.tan(np.deg2rad(x))) # [0. 0.57735027 1. 1.73205081 inf]
print(np.arcsin(0.5)) # 0.5235987755982989
print(np.arccos(0.5)) # 1.0471975511965979
print(np.arctan(1)) # 0.7853981633974483
4.逻辑运算:greater、less、equal、logical_and、logical_or
import numpy as np
x = np.array([1, 2, 3])
y = np.array([2, 2, 2])
print(np.greater(x, y)) # [False False True]
print(np.less(x, y)) # [ True False False]
print(np.equal(x, y)) # [False True False]
print(np.logical_and(x > 1, y < 3)) # [ True True False]
print(np.logical_or(x 2)) # [ True False True]
这些通用函数是使用NumPy进行科学计算和数据分析的基础,掌握它们是非常重要的。需要注意的是,在处理大量数据时,使用通用函数可以显著提高程序的执行速度。
四丶numpy索引及切片
NumPy是Python中用于数值计算和科学计算的重要库之一,提供了高效的多维数组(ndarray)对象和各种用于数组计算的函数和工具。在NumPy中,可以使用索引和切片来访问数组元素和子数组。
1.索引:
在NumPy中,可以使用方括号[]访问数组中的元素,索引从0开始。可以使用整数或整数序列来指定索引,多个索引可以使用逗号分隔。
import numpy as np
arr = np.array([[1,2,3], [4,5,6]])
print(arr[0, 1]) # 2
print(arr[1]) # [4 5 6]
print(arr[1][2]) # 6
print(arr[1, -2:]) # [5 6]
2.切片:
在NumPy中,可以使用切片来访问数组中的子数组,切片用冒号分隔开始和结束索引,返回的是原始数组的子数组,没有进行数据拷贝。可以使用[start:end:step]来定制切片。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5]) # [2 3 4 5]
print(arr[:4]) # [1 2 3 4]
print(arr[4:]) # [5 6 7]
print(arr[::2]) # [1 3 5 7]
对于多维数组,可以对不同维度的切片使用不同的语法:
import numpy as np
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(arr[:2, 1:]) # [[2 3]
# [5 6]]
print(arr[1, :2]) # [4 5]
print(arr[2, ::-1]) # [9 8 7]
需要注意的是,NumPy中的切片与Python中的切片略有不同,主要体现在切片结束点是开区间,不包含结束索引对应的元素,而Python中是闭区间,包含结束索引对应的元素。
五丶numpy随机数
NumPy提供了生成各种分布随机数的函数和工具,这些随机数生成器是伪随机数,基于确定性算法产生的序列,但是看起来像是随机的。
下面是一些常用的随机数函数:
1.np.random.random(size=None)
该函数返回一个[0, 1)之间的随机浮点数,可以使用size参数来指定要生成的随机数数组的形状。
import numpy as np
print(np.random.random()) # 生成一个[0, 1)之间的随机浮点数
print(np.random.random(size=5)) # 生成一个包含5个[0, 1)之间的随机浮点数的一维数组
print(np.random.random(size=(2, 3)))# 生成一个2 x 3的二维数组,其中包含[0, 1)之间的随机浮点数
2.np.random.randint(low, high=None, size=None, dtype=‘l’)
该函数返回一个位于闭区间 [low, high) 之间的随机整数(不包括 high),可以使用 size 参数来指定所需随机数数组的形状,使用 dtype 参数来指定数据类型。
import numpy as np
print(np.random.randint(0, 5)) # 生成一个[0, 5)之间的随机整数
print(np.random.randint(1, size=5)) # 生成一个[0, 1)之间的随机整数数组
print(np.random.randint(1, 5, size=(2,3)))# 生成一个2 x 3的随机整数数组,其中元素位于闭区间[1, 5)
print(np.random.randint(1, 5, size=(2,3), dtype=np.int16)) # 指定数组数据类型为int16
3.np.random.normal(loc=0.0, scale=1.0, size=None)
该函数返回一个满足指定均值和标准差的高斯分布样本,可以使用loc指定均值,使用scale指定标准差。
import numpy as np
print(np.random.normal()) # 生成一个均值为0,标准差为1的高斯分布样本
print(np.random.normal(size=5)) # 生成包含5个高斯分布样本的一维数组
print(np.random.normal(loc=2.0, scale=0.5, size=(2,3))) # 生成2 x 3的数组,均值为2.0,标准差为0.5
4.np.random.random_sample(size=None)
该函数返回一个[0, 1)之间的随机浮点数,可以使用size参数来指定要生成的随机数数组的形状。
import numpy as np
print(np.random.random_sample()) # 生成一个[0, 1)之间的随机浮点数
print(np.random.random_sample(size=5))# 生成包含5个[0, 1)之间的随机浮点数的一维数组
print(np.random.random_sample(size=(2, 3))) # 生成2 x 3的随机浮点数数组,元素位于[0, 1)
5.np.random.seed(seed=None)
该函数用于生成随机数生成器的种子,可以使用整数指定特定的种子,这样每次生成的随机序列都将相同。如果不指定种子,则使用系统时间作为种子。
import numpy as np
np.random.seed(10) # 指定随机种子为10
print(np.random.random()) # 生成0.77132064
np.random.seed(10)
print(np.random.random()) # 生成0.77132064,与上面的一样
第二章:pandas
一丶pandas核心概念
Pandas是Python编程语言的一个开放源代码软件库,用于数据处理和数据分析。它提供了一些数据结构和函数,使数据操作更简单、更快速。下面是Pandas的一些核心概念。
1.Series
Series是Pandas中最基础的数据结构,类似于numpy中的一维数组。它由两个数组构成,一个数组是数据部分,另一个数组是索引部分,索引部分可以自定义。
import pandas as pd
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
输出结果:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
2.DataFrame
DataFrame是Pandas中最重要的数据结构,它是由多个Series按照一定的规则排列构成的二维表格,每个Series对应表格中的一列。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
print(df)
输出结果:
name age gender
0 Alice 22 F
1 Bob 25 M
2 Charlie 20 M
3.Index
Index是Pandas中非常重要的数据结构,它是一种类似于元组的不可变序列。Index主要用于对DataFrame和Series中的行和列进行标记和索引,使用索引可以方便地对数据进行筛选、切片等操作。
import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f']) # 自定义索引
print(s)
输出结果:
a 1.0
b 3.0
c 5.0
d NaN
e 6.0
f 8.0
dtype: float64
4.Selection、slicing、indexing
Pandas提供了丰富的数据选择、切片、索引功能。使用这些功能可以方便地对DataFrame和Series进行筛选、切片、索引等操作。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 选择name列
print(df['name'])
# 选择前两行
print(df[:2])
# 选择年龄大于20的行
print(df[df['age'] > 20])
# 选择name列和age列
print(df.loc[:, ['name', 'age']])
5.Operations
Pandas提供了很多数据处理和操作功能,包括数据聚合、分组、重塑、过滤等。这些功能可以方便地对数据进行处理和分析。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 计算年龄的平均值
print(df['age'].mean())
# 按性别分组计算平均年龄
print(df.groupby('gender')['age'].mean())
# 对数据进行重塑
print(df.pivot(index='name', columns='gender', values='age'))
二丶数据结构series索引
Pandas中的Series是一种带标签的一维数组结构,可以看作是一个单列的DataFrame。
Series的索引提供了一种访问数据的方法。在Pandas中,Series的索引有两种类型:隐式索引(整数索引)和显式索引(自定义索引)。下面将深入介绍这两种索引的用法。
1.隐式索引(整数索引)
Series对象的隐式索引是从0开始的连续整数值。通过位置访问一个Series中的值需要用到隐式索引。具体用法如下:
import pandas as pd
# 定义一个Series对象
s = pd.Series([1, 3, 5, 7, 9])
# 访问元素
s[0] # 输出:1
# 切片
s[1:4] # 输出:3 5 7
# 过滤
s[s > 5] # 输出:7 9
2.显式索引(自定义索引)
显式索引是由用户定义的索引值,可以是任何标签或值,如下面给出的字符串序列、日期或者任何对象等。定义显式索引需要在Series对象初始化时通过index参数指定。具体用法如下:
import pandas as pd
# 定义一个Series对象,指定显式索引
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "b", "c", "d", "e"])
# 按照标签访问元素
s["a"] # 输出:1
# 切片
s["b":"d"] # 输出:3 5 7
# 过滤
s[s > 5] # 输出:7 9
需要注意的是,由于Series对象的显式索引是用户定义的,因此不能通过位置访问,即不能用整数索引来访问元素。
除了以上基本用法,Series的索引还支持许多其他特性。例如,可以为Series对象设置名称,及使用重复索引,其具体用法如下:
为Series设置名称
import pandas as pd
# 定义一个Series对象
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "b", "c", "d", "e"])
s.name = "SeriesName" # 设置Series的名称
重复索引
import pandas as pd
# 定义一个Series对象,使用重复索引
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "a", "b", "c", "d"])
# 按照标签访问元素
s["a"] # 输出:a 1 a 3
# 访问重复索引的所有值
s.loc["a"] # 输出:a 1 a 3
总的来说,Pandas的Series提供了丰富的索引功能,可以通过隐式和显式索引来访问和操作数据,便于处理和分析各种类型的数据。
三丶数据结构Dataframe基本概念及创建
Pandas中最常用的数据结构是DataFrame,它是一个由行和列构成的二维表格。与Excel中的工作表类似,DataFrame允许我们将数据按照行和列组织起来,并且提供了一系列强大的数据处理和分析工具。
1.创建DataFrame
创建Pandas中的DataFrame主要有以下几种方法:
- 从CSV或文本文件读取数据
import pandas as pd
df = pd.read_csv('data.csv', header=0, sep=',')
其中,header=0表示将第一行作为表头,sep=',‘表示用’,'作为分隔符。
- 从字典创建DataFrame
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
- 从numpy数组创建DataFrame
import pandas as pd
import numpy as np
data = np.array([[1,2,3],[4,5,6],[7,8,9]])
df = pd.DataFrame(data, columns=['a', 'b', 'c'])
2.DataFrame的索引与切片
DataFrame的索引和切片与Series类似,也有隐式索引和显式索引。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用loc访问具有显式索引的行和列
df.loc[0] # 获取第一行
df.loc[:, 'name'] # 获取所有行中的'name'列数据
df.loc[0, 'age'] # 获取第一行age列中的数据
# 使用iloc访问具有隐式索引的行和列
df.iloc[0] # 获取第一行
df.iloc[:, 0] # 获取第一列
df.iloc[0, 1] # 获取第一行第二列的值
3.数据的增、删、改、查
DataFrame可以通过增、删、改、查操作来对数据进行处理。
import pandas as pd
# 新增一列
df['score'] = [89, 93, 87]
# 删除一列
df.drop('sex', axis=1, inplace=True)
# 修改一列
df.loc[0, 'name'] = 'Lucy'
# 查询符合条件的行
df[df.age > 30]
4.DataFrame数据的基本统计信息
Pandas中的DataFrame还提供了数据处理和数据分析所需的各种统计函数,比如describe()
函数可以为DataFrame提供一些基本的统计信息。
import pandas as pd
df = pd.read_csv('data.csv', header=0, sep=',')
df.describe()
这将返回DataFrame的基本统计信息,如总数、均值、标准差、最小值、最大值等。
以上就是Pandas中DataFrame的基本概念,包括DataFrame数据结构的创建、索引与切片、数据的增、删、改、查以及基本统计信息的计算。Pandas强大的数据处理和分析能力,使得我们在处理数据时更加的便利和高效。
四丶Dataframe索引
在 Pandas 中,可以通过 loc、iloc、at 和 iat 等方式来访问 DataFrame 中的元素,实现对 DataFrame 的索引。其中,loc 和 at 主要用于基于索引标签访问,而 iloc 和 iat 则主要用于基于整数下标访问。
1.使用 loc 和 at 进行基于标签的索引
在 Pandas 中,使用 loc 就可以基于标签索引 DataFrame 中的元素,其基本语法类似于 Python 中的索引方式,只需要指定需要访问的行和列名即可。
import pandas as pd
# 创建 DataFrame
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用 loc 访问 DataFrame 中的元素
print(df.loc[0, 'name']) # Alice
print(df.loc[0:1, ['name', 'age']]) # 通过标签名选取第 0 至 2 行,name 和 age 两列的数据
# 使用 at 访问单个元素
print(df.at[0, 'name']) # Alice
2.使用 iloc 和 iat 进行基于整数下标的索引
类似于 loc 和 at,可以使用 iloc 和 iat 进行基于整数下标的索引。iloc 和 iat 的区别在于 iat 是一个标量,而 iloc 则返回多行多列的 DataFrame。
import pandas as pd
# 创建 DataFrame
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用 iloc 访问 DataFrame 中的元素
print(df.iloc[0, 0]) # Alice
print(df.iloc[0:2, 0:2]) # 通过整数下标选取第 0 至 1 行,第 0 至 1 列的数据
# 使用 iat 访问单个元素
print(df.iat[0, 0]) # Alice
综上所述,通过 loc、iloc、at 和 iat 等索引方式,可以轻松实现对 DataFrame 中元素的访问,帮助我们更加高效地进行数据处理和分析。
第三章:Matplotlib
1.Matplotlib简介及图表窗口
Matplotlib 是 Python 中最经典的数据可视化库之一,为广大数据分析者和科学家们提供了强大且易用的绘图工具。
Matplotlib 主要包含两个基础模块:pyplot 和 pylab。其中,pyplot 是 Matplotlib 的关键模块,提供了 plt 对象,方便我们进行绘图操作。而 pylab 则是 Matplotlib 至关重要的一个子模块,提供了 matplotlib 命名空间,并且将 NumPy 和 Matplotlib 导入到命名空间中,避免了频繁的命名空间重复操作。
下面我们来了解一下 Matplotlib 中常用的图表窗口:
1.Figure 图表窗口
在 Matplotlib 中,一个 Figure 对象代表着一个图表窗口,可以通过指定图表窗口的大小和分辨率等参数,来创建自己所需的图表窗口。我们可以通过以下代码创建一个图表窗口:
import matplotlib.pyplot as plt
# 创建一个 8 寸高、6 寸宽的图表窗口
fig = plt.figure(figsize=(8, 6))
2.Subplot 子图窗口
在 Matplotlib 中,Subplot 是 Figure 中的一部分,我们可以在一个 Figure 对象中创建多个 Subplot。通过 Subplot,我们可以将同一 Figure 中的多幅图表绘制在不同的子图窗口里。我们可以通过以下代码在一个 Figure 对象中创建两个子图窗口:
import matplotlib.pyplot as plt
# 创建一个 8 寸高、6 寸宽的图表窗口
fig = plt.figure(figsize=(8, 6))
# 在图表窗口中创建 2 个子图窗口,排列格式是 2 行 1 列
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
# 在第一个子图中绘制折线图
ax1.plot([1, 2, 3, 4], [2, 4, 3, 5])
# 在第二个子图中绘制散点图
ax2.scatter([1, 2, 3, 4], [1, 3, 2, 4])
通过 add_subplot 可以实现在一个 Figure 对象中创建多份绘图。
除了 Figure 和 Subplot 窗口之外,Matplotlib 还提供了其他窗口元素,如 Axes,Legend 等,方便我们更加高效地进行数据可视化。
综上所述,Matplotlib 是 Python 数据分析中不可或缺的一部分,提供了众多强大的图表绘制工具,使得数据可视化变得更加轻松和高效。不同的图表窗口提供不同的展现方式,可以根据需求来实现自己想要的图表效果。
二丶图表的基本元素
Matplotlib 是 Python 中最经典的数据可视化库之一,提供了多种数据可视化的图表类型,包括折线图、散点图、柱状图、饼图等等。在 Matplotlib 中,每个图表都是由多个元素组成的,下面我们来了解一下 Matplotlib 图表的基本元素。
1.Figure(图表)
Figure 表示整张画布,它是所有可绘制元素的容器。在 Matplotlib 中,通常情况下,我们在开始绘图前会创建一个 Figure 对象。
2.Axes(坐标轴)
Axes(轴)代表数学坐标轴,是我们绘制图表的基本元素。在二维图表中,通常由两条轴组成:x 轴和 y 轴。我们可以在轴上绘制数学函数、散点图、柱状图等图表类型。
3.Axis(坐标轴刻度)
Axis(刻度)表示坐标轴上的刻度标记和标签。在 Matplotlib 中,刻度标记通常由刻度线和刻度标签组成。
4.Title(标题)
Title(标题)是图表的核心部分之一,用于说明图表的主题或主要内容。在 Matplotlib 中,我们可以通过 add_title()
方法来添加标题。
5.Legend(图例)
Legend(图例)是说明图表中不同元素含义的辅助工具,通常用于标注每个数据系列对应的标签。在 Matplotlib 中,我们可以通过 add_legend()
方法来添加图例。
6.Label(标签)
Label(标签)是针对不同元素的说明文本,包括轴标签、刻度标签、图例标签等。在 Matplotlib 中,我们可以通过 xlabel()
、ylabel()
等方法来添加轴标签,也可以使用 set_text()
方法来修改其他标签的文本。
以上就是 Matplotlib 中常见的图表元素,了解它们的意义和作用,可以更好地理解 Matplotlib 图表的结构和绘制方式,并且可以引导我们正确地选择和调整图表元素以获得更好的数据可视化效果。
三丶Matplotlib图表的样式参数
在 Matplotlib 中,绘制图表的样式可以使用多个样式参数来控制。下面是一些常用的样式参数:
1.颜色参数:使用颜色来区分不同的数据系列。可以使用常规颜色名(如 ‘red’、‘blue’ 等),RGB 数值(如 (0.1, 0.2, 0.3))和十六进制颜色代码(如 ‘#FF0000’)。
2.线宽参数:控制绘制线条的宽度,通常使用整数或浮点数表示。
3.线型参数:控制绘制线条的样式,包括实线(‘-’)、虚线(‘–’)、点线(‘:’)等。
4.标记参数:标记是指在绘制散点图等类型图表时用来表示每个数据点的符号,可以使用不同的标记来区分不同的数据系列。
5.字体参数:控制文字的大小、粗细、颜色等属性,包括字体大小(‘fontsize’)、字体颜色(‘color’)等。
6.图表尺寸参数:控制图表的大小,包括图表宽度(‘figwidth’)、图表高度(‘figheight’)等。
7.边框参数:控制图表边框的样式和颜色,包括线条样式(‘linestyle’)、线条宽度(‘linewidth’)和颜色(‘edgecolor’)等。
以上是 Matplotlib 中常见的样式参数。要使用这些样式参数,我们可以在绘制图表时添加相应的参数,并根据需要进行调整和修改,以获得满意的可视化效果。
四丶Matplotlib刻度、图表输出丶注解
在 Matplotlib 中,有许多刻度、图表输出和注解相关的功能,可以帮助我们更好地掌握数据可视化。下面介绍一些有用的可视化技巧。
1.刻度标签格式化
在 Matplotlib 中,我们可以使用 matplotlib.ticker 模块中的 Formatter 类来格式化轴上的刻度标签。其中,常见的格式类型包括字符串格式(如 “%d”、“%f” 等)、百分数格式(如 “%0.1f%%” 等)和科学计数法格式(如 “%0.1e”、“%0.1E” 等)等。
例如,以下代码使用科学计数法格式来格式化 y 轴上的刻度标签:
from matplotlib import pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import numpy as np
# 生成测试数据
x = np.linspace(0, 100, 101)
y = np.power(10, x)
# 绘制图表
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_ylabel("Y Axis")
# 设置 y 轴刻度标签的格式为科学计数法
formatter = FormatStrFormatter('%0.1e')
ax.yaxis.set_major_formatter(formatter)
plt.show()
2.图表输出格式
在 Matplotlib 中,我们可以使用 savefig() 方法来将图表保存为文件,保存格式包括 PNG、PDF、SVG、PS 等多种格式。我们可以通过指定文件名和文件格式来完成图表的保存。
例如,以下代码将图表保存为 PDF 格式的文件:
from matplotlib import pyplot as plt
# 在 Matplotlib 中绘制图表
# 将图表保存为 PDF 文件
plt.savefig("output.pdf")
3.注解添加
在 Matplotlib 中,我们可以使用 text() 方法和 annotate() 方法来添加文本注解或箭头注解。其中,text() 方法添加的注解为纯文本注解,而 annotate() 方法可以添加带箭头的注解。
例如,以下代码在图表中添加了一个文本注解和一个箭头注解:
from matplotlib import pyplot as plt
# 在 Matplotlib 中绘制图表
# 添加文本注解
plt.text(0.5, 0.5, "Text Annotation", ha="center", va="center")
# 添加箭头注解
plt.annotate("Arrow Annotation", xy=(0.5, 0.7), xytext=(0.7, 0.8),
arrowprops=dict(facecolor='black', shrink=0.05))
在图表的注解中,我们可以修改注解的文本、字体、颜色、大小、箭头样式等属性,以达到更好的可视化效果。
综上所述,刻度、图表输出和注解是 Matplotlib 中常用的几个可视化技巧。掌握这些技巧,可以帮助我们更好地处理和展示数据,让数据可视化更加生动有趣。
总结
学习 Python 中的 NumPy、Pandas 和 Matplotlib 等数据科学库可以带来许多好处,如下所述:
-
带来更高效、更便捷的数据科学编程体验:NumPy、Pandas 和 Matplotlib 等数据科学库提供了许多高效的函数和方法,可以方便地进行数据操作和可视化,从而减少了冗长的代码编写和调试时间。
-
拓展 Python 数据科学相关的功能和应用:Python 原生的数据处理、数据分析和数据可视化功能相对较弱,学习使用 NumPy、Pandas 和 Matplotlib 等数据科学库可以拓展这些功能,从而进行更深入的数据科学应用探索。
-
提升数据分析和数据可视化能力:学习使用 NumPy、Pandas 和 Matplotlib 等数据科学库可以提高数据科学从业者的数据分析和数据可视化能力,可以更好地理解和应用各种分析技术和可视化方法,从而更好地进行数据科学工作。
-
丰富数据科学简历及职业发展:在数据科学领域中,掌握并能够应用多种数据科学库的相关知识将会成为一个优势,通过使用这些库来实现各种数据操作、分析和可视化的项目和经验,将会对个人职业发展和简历上升产生积极影响。
综上所述,学习 Python 中的数据科学库可以帮助我们更高效、便捷地实现数据分析、数据处理和数据可视化等任务,同时提高我们在数据科学领域的能力和竞争力,是在数据科学领域中的必要技能之一。
本系列文根据以下学习路线展开讲述,由于内容较多,:
从零开始学python到高级进阶路线图
关注公众号:python技术训练营,学习进阶一步到位
适用于零基础学习和进阶人群的python资源:
① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档