Python数据分析简介

核心工具库

NumPy(Numerical Python)

Python中专注于快速数组运算的高性能科学计算库。

核心特性:

  • 强大的N维数组对象ndarray
  • 高效的广播功能
  • 支持与C/C++/Fortran代码的无缝集成
  • 提供线性代数、傅里叶变换、随机数生成等数学功能

Pandas

基于NumPy构建的结构化数据分析工具。

主要优势:

  • 高性能数据处理(依赖NumPy的矩阵运算)
  • 完善的数据清洗和分析功能
  • 两大核心数据结构:
    • Series:一维标签化数组
    • DataFrame:二维表格型数据结构

数据可视化工具

Matplotlib

Python生态系统中最常用的开源数据可视化库,支持创建:

  • 静态图表
  • 动态可视化
  • 交互式图形展示

Seaborn

基于Matplotlib构建的数据可视化库,特点:

  • 集成pandas数据结构
  • 提供更简洁的API
  • 绘制信息更丰富、更具吸引力的图像
  • 与Pandas配合使用比直接使用Matplotlib更方便

机器学习工具

Scikit-learn

基于Python的机器学习工具:

  • 简单高效的数据挖掘和数据分析工具
  • 可重复用于各种环境
  • 建立在NumPy、SciPy和Matplotlib之上

开发环境

Jupyter Notebook/Lab

数据分析的首选开发环境,可以:

  • 创建和共享代码、公式、可视化图表、笔记文档

主要用途

  • 数据清理和转换
  • 数值模拟
  • 统计分析
  • 数据可视化
  • 机器学习

Python数据分析环境搭建

Anaconda简介

最流行的数据分析平台,特点:

  • 附带大量常用数据科学包
  • 基于conda(包管理器和环境管理器)
  • 提供虚拟环境管理工具

包管理功能

安装包命令:

conda install 包名
pip install 包名
pip install 包名 -i https://mirrors.aliyun.com/pypi/simple/  # 通过阿里云镜像安装

虚拟环境作用

  • 解决开源库版本升级导致的API兼容性问题
  • 隔离不同Python版本和库版本
  • 支持不同版本代码在不同环境中运行

Jupyter Notebook使用指南

启动方式

conda activate 虚拟环境名
jupyter notebook

基本概念

  • Cell:代码输入框和输出显示区域
  • 命令模式(按ESC进入):
    • Y:切换到Code模式
    • M:切换到Markdown模式
    • A:上方添加cell
    • B:下方添加cell
    • 双击D:删除当前cell
    • Shift+Enter:执行并跳转下一单元
    • Ctrl+Enter:执行并停留当前单元
  • 标记说明
    • *:表示代码正在运行

Markdown编辑

在命令模式中按M进入Markdown编辑模式,可使用Markdown语法添加格式化的说明文字。

NumPy

NumPy是Python数据分析中不可或缺的核心库

作为Python科学计算的基础包,NumPy有效提升了Python的运算性能,并提供了精确的数据类型系统,使其能够构建复杂的数据结构。该库由C语言开发,被众多科学计算工具作为底层依赖,因此掌握NumPy数据类型对Python数据分析至关重要。

NumPy专注于数值计算,主要提供高效的多维数组(矩阵)处理功能。相比Python原生列表结构,NumPy数组在存储和处理大型矩阵时具有显著性能优势。

核心功能包括:

  1. 为高性能科学计算和数据分析提供基础支持
  2. ndarray多维数组支持矢量化运算,兼具高效性和内存优化
  3. 提供矩阵运算能力,无需循环即可实现类似Matlab的矢量操作
  4. 包含磁盘数据读写和内存映射文件操作工具

NumPy的核心数据结构是ndarray(通常简称为数组),具有以下关键属性:

  • ndarray.ndim:数组维度数
  • ndarray.shape:各维度大小的元组(如2×3矩阵的shape为(2,3))
  • ndarray.size:数组元素总数
  • ndarray.dtype:元素数据类型
  • ndarray.itemsize:单个元素占用的字节数

ndarray

NumPy 提供了 ndarray 这一 N 维数组类型,用于存储相同类型的数据集合。相比 Python 的嵌套列表,ndarray 在存储效率和 I/O 性能上具有显著优势,且数据规模越大优势越明显。

ndarray 的主要特点:

  • 内置并行计算功能,能自动利用多核处理器
  • 底层采用 C 语言实现,不受 Python GIL 限制
  • 操作效率远高于纯 Python 代码

ndarray 属性

属性名称 说明
ndarray.shape 数组维度的元组
ndarray.ndim 数组维度数
ndarray.size 数组元素总数
ndarray.itemsize 单个元素占用的字节数
ndarray.dtype 数组元素类型

数组形状示例

>>> a = np.array([[1,2,3],[4,5,6]])  # 二维数组 (2, 3)
>>> b = np.array([1,2,3,4])          # 一维数组 (4,)
>>> c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])  # 三维数组 (2, 2, 3)

二维数组

三维数组

数据类型

ndarray 支持多种数据类型,通过 dtype 指定:

类型名称 描述 简写
np.bool 布尔类型 (True/False) 'b'
np.int8 8位整数 (-128~127) 'i'
np.int16 16位整数 (-32768~32767) 'i2'
np.int32 32位整数 'i4'
np.int64 64位整数 'i8'
np.uint8 无符号8位整数 (0~255) 'u'
np.uint16 无符号16位整数 (0~65535) 'u2'
np.uint32 无符号32位整数 'u4'
np.uint64 无符号64位整数 'u8'
np.float16 半精度浮点数 (16位) 'f2'
np.float32 单精度浮点数 (32位) 'f4'
np.float64 双精度浮点数 (64位) 'f8'
np.complex64 64位复数 'c8'
np.complex128 128位复数 'c16'
np.object_ Python对象 'O'
np.string_ 字符串 'S'
np.unicode_ Unicode字符串 'U'

np.int32:32位整数,是最常用的整数类型,适用于大多数整数运算。

np.float64:64位浮点数,是默认的浮点数类型,广泛用于科学计算。

np.bool_:布尔类型,用于表示True或False,常用于条件判断和逻辑操作。

np.string_/np.unicode_:定长字符串类型,常用于二进制数据 或 多语言文本数据

np.object_:用于存储任意Python对象,特别是在处理混合类型数据或需要灵活性的时候。

np.string_只支持ASCII编码,不支持Unicode,而np.unicode_支持Unicode字符。

np.string_更适合处理旧有的二进制数据,而np.unicode_更适合处理现代文本数据。

数组的基本属性

属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型

基本操作

1 生成数组的方法

1.1 生成0和1的数组

  • np.ones(shape, dtype)
  • np.ones_like(a, dtype):创建与数组a形状相同且元素全为1的数组
  • np.zeros(shape, dtype)
  • np.zeros_like(a, dtype):创建与数组a形状相同且元素全为0的数组

示例:

ones = np.ones([4,8])
print(ones)
# [[1. 1. 1. 1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1. 1. 1. 1.]]

print(np.zeros_like(ones))
# [[0. 0. 0. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 0. 0.]]

1.2 从现有数组生成

1.2.1 生成方式
  • np.array(object, dtype)
  • np.asarray(a, dtype)

示例:

a = np.array([[1,2,3],[4,5,6]])
a1 = np.array(a)  # 创建新数组
a2 = np.asarray(a)  # 类似索引,不创建新数组

1.3 生成随机数组

使用np.random模块:

# 生成[0.0,1.0)的随机浮点数
rand_num = np.random.rand()
print("随机浮点数:", rand_num)

# 生成3x2的随机数组
rand_array = np.random.rand(3, 2)
print("随机数组:\n", rand_array)

2 数组的索引和切片

索引规则:

  • 一维数组:直接索引
  • 二维数组:[行,列]
  • 三维数组:[深度,行,列]

示例:

# 二维数组示例
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("第1行第2列:", arr[0, 1])  # 2
print("第2行第3列:", arr[1, 2])  # 6

# 切片操作
arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8],
                [9, 10, 11, 12]])

print("第1-2行:\n", arr[0:2, :])
print("第2-3列:\n", arr[:, 1:3])
print("第1行第2-3列:", arr[0, 1:3])

# 三维数组示例
a1 = np.array([[[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])
print(a1[0, 0, 1])  # 2

3 形状修改

3.1 ndarray.reshape(shape, order)

返回新形状的视图,不改变行列顺序:

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
reshaped = arr.reshape(3, 3)
print("reshape后:\n", reshaped)

3.2 ndarray.resize(new_shape)

修改数组本身形状(元素数量需相同):

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
resized = np.resize(arr, (2, 5))
print("resize后:\n", resized)

3.3 ndarray.T

数组转置(行列互换):

arr = np.array([[1, 2, 3], [4, 5, 6]])
print("转置后:\n", arr.T)

4 类型修改

4.1 ndarray.astype(type)

返回类型修改后的数组:

arr = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
arr_int = arr.astype(np.int32)
print("转换后:", arr_int)

4.2 ndarray.tobytes([order])

生成包含原始数据字节的Python字节:

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
print(arr.tobytes())

5 数组去重

5.1 np.unique()

temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
print(np.unique(temp))  # [1 2 3 4 5 6]

6 ndarray运算

# 生成10名同学5门课成绩
scores = np.random.randint(0, 101, size=(10, 5))

# 取最后4名同学成绩
scores_last4 = scores[-4:, :]
print("最后4名成绩:\n", scores_last4)

# 判断是否大于60
print("是否大于60:\n", scores_last4 > 60)

# 判断前两名是否全及格
print("前两名是否全及格:", np.all(scores[0:2, :] > 60))

# 判断前两名是否有大于90
print("前两名是否有大于90:", np.any(scores[0:2, :] > 80))

# 三元运算
temp = scores[:4, :4]
print("大于60置1否则0:\n", np.where(temp > 60, 1, 0))

7统计运算

  • 在数据挖掘和机器学习中,统计指标是数据分析的重要工具。以下是常用的统计运算方法:
  • min(a, axis) 计算数组的最小值或沿指定轴的最小值
  • max(a, axis) 计算数组的最大值或沿指定轴的最大值
  • median(a, axis) 计算沿指定轴的中位数
  • mean(a, axis, dtype) 计算沿指定轴的算术平均值
  • std(a, axis, dtype) 计算沿指定轴的标准差
  • var(a, axis, dtype) 计算沿指定轴的方差

pandas

Pandas框架概述

  • Pandas是Python的一个第三方包,也是商业和工程领域最流行的结构化数据工具集,用于数据清洗、处理以及分析
  • Pandas在数据处理上具有独特的优势:
    • 底层是基于Numpy构建的,所以运行速度特别的快
    • 有专门的处理缺失数据的API
    • 强大而灵活的分组、聚合、转换功能

适用场景:

  • 数据量大到Excel严重卡顿,且又都是单机数据的时候,我们使用Pandas
    • Pandas用于处理单机数据(小数据集(相对于大数据来说))
    • 在大数据ETL数据仓库中,对数据进行清洗及处理的环节使用Pandas

安装Pandas

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pandas

2- 创建python脚本, 导入pandas库
import pandas as pd
3df = pd.read_csv('./1960-2019全球GDP数据.csv', encoding='gbk')  
# 设置显示的最大行数和列数为None

pd.set_option('display.max_rows', None) pd.set_option('display.max_columns', None)

Python Pandas的作用:(清洗、处理、分析数据)

二、Pandas数据结构与数据类型

  • DataFrame
    • Series
      • 索引列
        • 索引名、索引值
        • 索引下标、行号
      • 数据列
        • 列名
        • 列值,具体的数据

其中最核心的就是Pandas中的两个数据结构:DataFrame和Series

Series对象

Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象,series本身也具有索引。

  • values:一组数据(numpy.ndarray类型)
  • index:相关的数据索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

创建Series对象

  • 1- 导入pandas
  • 2- 通过list列表来创建
  • import pandas as pd
    s2 = pd.Series([1, 2, 3])
    print(s2)
    # 自定义索引
    s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
    print(s3)
    
    0    1
    1    2
    2    3
    dtype: int64
    A    1
    B    2
    C    3
    dtype: int64

DataFrame

创建DataFrame对象

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

  • 行索引,表明不同行,横向索引,叫index,0轴,axis=0
  • 列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
  • df1_data = {
        '日期': ['2021-08-21', '2021-08-22', '2021-08-23'],
        '温度': [25, 26, 50],
        '湿度': [81, 50, 56] 
    }
    df1 = pd.DataFrame(data=df1_data)
    df1
    
    # 返回结果如下
            日期    温度    湿度
    0    2021-08-21    25    81
    1    2021-08-22    26    50
    2    2021-08-23    50    56

DataFrame对象属性

  •  1- shape属性
  • data.shape
    
    # 结果
    (10, 5)
  • 2- index属性
  • data.index
    
    # 结果
    Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object')
  • 3- columns
  • data.columns
    
    # 结果
    Index(['语文', '数学', '英语', '政治', '体育'], dtype='object')

  • 4- values
  • data.values
    
    array([[92, 55, 78, 50, 50],
           [71, 76, 50, 48, 96],
           [45, 84, 78, 51, 68],
           [81, 91, 56, 54, 76],
           [86, 66, 77, 67, 95],
           [46, 86, 56, 61, 99],
           [46, 95, 44, 46, 56],
           [80, 50, 45, 65, 57],
           [41, 93, 90, 41, 97],
           [65, 83, 57, 57, 40]])
  • 5- T

DataFrame对象方法

1- head(n)

显示前n行内容

data.head(5)

tail(n)如果不补充参数,默认5行。填入参数n则显示后n行

Pandas的数据类型

df或s对象中具体每一个值的数据类型有很多,如下表所示

Pandas数据类型 说明 对应的Python类型
Object 字符串类型 string
int 整数类型 int
float 浮点数类型 float
datetime 日期时间类型 datetime包中的datetime类型
timedelta 时间差类型 datetime包中的timedelta类型
category 分类类型 无原生类型,可以自定义
bool 布尔类型 bool(True,False)
nan 空值类型 None

总结

  • series【知道】
    • 创建
      • pd.Series([], index=[])
      • pd.Series({})
    • 属性
      • 对象.index
      • 对象.values
  • DataFrame【掌握】
  • 创建
    • pd.DataFrame(data=None, index=None, columns=None)
  • 属性
    • shape -- 形状
    • index -- 行索引
    • columns -- 列索引
    • values -- 查看值
    • T -- 转置
    • head() -- 查看头部内容
    • tail() -- 查看尾部内容
  • DataFrame索引
    • 修改的时候,需要进行全局修改
    • 对象.reset_index()
    • 对象.set_index(keys)

Pandas基本数据操作

数据集

为了更好的理解这些基本操作,我们将读取一个真实的股票数据。关于文件操作,后面在介绍,这里只先用一下API

# 读取文件
data = pd.read_csv("./data/stock_day.csv")

# 删除一些列,让数据更简单些,再去做后面的操作
data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)

索引操作

# 直接使用行列索引名字的方式(先列后行)
data['open']['2018-02-27']
23.53

赋值操作

# 直接修改原来的值
data['close'] = 1
# 或者
data.close = 1

排序操作

排序有两种形式,一种对于索引进行排序,一种对于内容进行排序

DataFrame排序

  • 使用df.sort_values(by=, ascending=)
    • 单个键或者多个键进行排序,
    • 参数:
      • by:指定排序参考的键
      • ascending:默认升序
        • ascending=False:降序
        • ascending=True:升序

# 按照开盘价大小进行排序 , 使用ascending指定按照大小排序
data.sort_values(by="open", ascending=True).head()

# 按照多个键进行排序
data.sort_values(by=['open', 'high'])

  • 使用df.sort_index给索引进行排序
  • # 对索引进行排序
    data.sort_index()

Series排序

data['p_change'].sort_values(ascending=True).head()

2015-09-01   -10.03
2015-09-14   -10.02
2016-01-11   -10.02
2015-07-15   -10.02
2015-08-26   -10.01
Name: p_change, dtype: float64
    • 1.索引【掌握】
      • 直接索引 -- 先列后行,是需要通过索引的字符串进行获取
      • loc -- 先行后列,是需要通过索引的字符串进行获取
      • iloc -- 先行后列,是通过下标进行索引
    • 2.赋值【知道】
      • data[""] = **
      • data. =
    • 3.排序【知道】
      • dataframe
        • 对象.sort_values()
        • 对象.sort_index()
      • series
        • 对象.sort_values()
        • 对象.sort_index()

    四、DataFrame运算

    • 应用add等实现数据间的加、减法运算
    • 应用逻辑运算符号实现数据的逻辑筛选
    • 应用isin, query实现数据的筛选
    • 使用describe完成综合统计
    • 使用max, min, mean, std完成统计计算
    • 使用idxmin、idxmax完成最大值最小值的索引
    • 使用cumsum等实现累计分析
    • 应用apply函数实现数据的自定义处理

    算法运算

    • add(other)

    比如进行数学运算加上具体的一个数字

    data['open'].add(1)
    
    2018-02-27    24.53
    2018-02-26    23.80
    2018-02-23    23.88
    2018-02-22    23.25
    2018-02-14    22.49
    • sub(other)

    比如进行数学运算减去具体的一个数字

    data['open'].sub(1)

    逻辑运算符

    逻辑运算符号

    • 例如筛选data["open"] > 23的日期数据
      • data["open"] > 23返回逻辑结果
      • data["open"] > 23
        
        2018-02-27     True
        2018-02-26    False
        2018-02-23    False
        2018-02-22    False
        2018-02-14    False
    • 完成多个逻辑判断,
    • data[(data["open"] > 23) & (data["open"] < 24)].head()
      

    逻辑运算函数

    • query(expr)
      • expr:查询字符串

    通过query使得刚才的过程更加方便简单

    data.query("open<24 & open>23").head()

    • isin(values)
    • # 可以指定值进行一个判断,从而进行筛选操作
      data[data["open"].isin([23.53, 23.85])]

    统计运算

    describe

    综合分析: 能够直接得出很多统计结果,countmeanstdminmax 等

    # 计算平均值、标准差、最大值、最小值
    data.describe()

    Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)结果:

    count Number of non-NA observations
    sum Sum of values
    mean Mean of values
    median Arithmetic median of values
    min Minimum
    max Maximum
    mode Mode(众数)
    abs Absolute Value
    prod Product of values(乘积)
    std Bessel-corrected sample standard deviation
    var Unbiased variance
    idxmax compute the index labels with the maximum
    idxmin compute the index labels with the minimum

    如果要使用plot函数,需要导入matplotlib.

    import matplotlib.pyplot as plt
    # plot显示图形
    stock_rise.cumsum().plot()
    # 需要调用show,才能显示出结果
    plt.show()

    CSV

    read_csv

    • pandas.read_csv(filepath_or_buffer, sep =',', usecols )
      • filepath_or_buffer:文件路径
      • sep :分隔符,默认用","隔开
      • usecols:指定读取的列名,列表形式
    • 举例:读取之前的股票的数据
    • # 读取文件,并且指定只获取'open', 'close'指标
      data = pd.read_csv("./data/stock_day.csv", usecols=['open', 'close'])
      
                  open    close
      2018-02-27    23.53    24.16
      2018-02-26    22.80    23.53
      2018-02-23    22.88    22.82
      2018-02-22    22.25    22.28
      2018-02-14    21.49    21.92

    to_csv

    • DataFrame.to_csv(path_or_buf=None, sep=', ’, columns=None, header=True, index=True, mode='w', encoding=None)
      • path_or_buf :文件路径
      • sep :分隔符,默认用","隔开
      • columns :选择需要的列索引
      • header :boolean or list of string, default True
      • index:是否写进行索引,是否写进列索引值
      • mode:'w':重写, 'a' 追加
    • 举例:保存读取出来的股票数据会生成新的test文件数据
      • 保存'open'列的数据,然后读取查看结果
      • # 选取10行数据保存,便于观察数据
        data[:10].to_csv("./data/test.csv", columns=['open'])
        
        # 读取,查看结果
        pd.read_csv("./data/test.csv")
        

    Matplotlib(了解)

    • 是专门用于开发2D图表(包括3D图表)

    • 以渐进、交互式方式实现数据可视化

    • 能将数据进行可视化,更直观的呈现
    • 使数据更加客观、更具说服力

    matplotlib.pyplot模块

    折线图绘制与显示

    举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下

    import matplotlib.pyplot as plt
    
    # 1.创建画布
    plt.figure(figsize=(10, 10), dpi=100)
    
    # 2.绘制折线图
    plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
    
    # 3.显示图像
    plt.show()

    小结

    • 什么是matplotlib【了解】
      • 是专门用于开发2D(3D)图表的包
    • 绘制图像流程【掌握】
      • 1.创建画布 -- plt.figure(figsize=(20,8), dpi=100)
      • 2.绘制图像 -- plt.plot(x, y)
      • 3.显示图像 -- plt.show()

    二、Matplotlib基础绘图功能

    准备数据并画出初始折线图

    import matplotlib.pyplot as plt
    import random
    
    # 画出温度变化图
    
    # 0.准备x, y坐标的数据
    x = range(60)
    y_shanghai = [random.uniform(15, 18) for i in x]
    
    # 1.创建画布 dpi是分辨率 一般80
    plt.figure(figsize=(20, 8), dpi=80)
    
    # 2.绘制折线图
    plt.plot(x, y_shanghai)
    
    # 3.显示图像
    plt.show()

    添加自定义x,y刻度

    • plt.xticks(x, **kwargs)

      x:要显示的刻度值

    • plt.yticks(y, **kwargs)

      y:要显示的刻度值

    • # 增加以下两行代码
      
      # 构造x轴刻度标签
      x_ticks_label = ["11点{}分".format(i) for i in x]
      # 构造y轴刻度
      y_ticks = range(40)
      
      # 修改x,y轴坐标的刻度显示
      plt.xticks(x[::5], x_ticks_label[::5])
      plt.yticks(y_ticks[::5])

    from pylab import mpl
    # 设置显示中文字体
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    # 设置正常显示符号
    mpl.rcParams["axes.unicode_minus"] = False
    plt.grid(True, linestyle='--', alpha=0.5)
    plt.xlabel("时间")
    plt.ylabel("温度")
    plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
    plt.show()

    图片保存

    # 保存图片到指定路径
    plt.savefig("test.png")
    • 注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

    在一个坐标系中绘制多个图像

    需求:再添加一个城市的温度变化

    收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示

    # 增加北京的温度数据
    y_beijing = [random.uniform(1, 3) for i in x]
    
    # 绘制折线图
    plt.plot(x, y_shanghai)
    # 使用多次plot可以画多个折线
    plt.plot(x, y_beijing, color='r', linestyle='--')

    显示图例

    • 注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。
    • # 绘制折线图
      plt.plot(x, y_shanghai, label="上海")
      # 使用多次plot可以画多个折线
      plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
      
      # 显示图例
      plt.legend(loc="best")

    常见图形种类及意义

    柱形图

    **柱状图:**排列在工作表的列或行中的数据可以绘制到柱状图中。

    特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

    api:plt.bar(x, width, align='center', **kwargs)

    饼图

    • **饼图:**用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

      特点:分类数据的占比情况(占比)

      api:plt.pie(x, labels=,autopct=,colors)

    散点图

    **散点图:**用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

    api:plt.scatter(x, y)

    柱形图绘制

    categories = ['A', 'B', 'C', 'D']
    values = [3, 7, 5, 4]
    
    plt.bar(categories, values, color='blue')  # 绘制蓝色柱状图
    plt.title("Simple Bar Chart")  # 设置图表标题
    plt.xlabel("Categories")  # 设置X轴标签
    plt.ylabel("Values")  # 设置Y轴标签
    plt.show()  # 显示图表

    饼图

    sizes = [25, 35, 25, 15]
    labels = ['Category A', 'Category B', 'Category C', 'Category D']
    
    plt.pie(sizes, labels=labels, autopct='%1.1f%%')  # 绘制饼图,显示百分比
    plt.title("Simple Pie Chart")  # 设置图表标题
    plt.show()  # 显示图表

    散点图绘制

    x = [1, 2, 3, 4, 5]
    y = [2, 3, 5, 7, 11]
    
    plt.scatter(x, y, color='red')  # 绘制红色散点图
    plt.title("Simple Scatter Plot")  # 设置图表标题
    plt.xlabel("X-axis")  # 设置X轴标签
    plt.ylabel("Y-axis")  # 设

    Logo

    展示您要展示的活动信息

    更多推荐