week1-可视化
2026/8/31 6:30:06 网站建设 项目流程

一、什么是 csv 文件,作用是什么,为什么要使用这种格式的文件

CSV 文件

CSV(Comma‑Separated Values):逗号分隔值文件,是一种纯文本格式,用逗号把一条条数据隔开,后缀是.csv

本质就是文本文件,用记事本、Excel、WPS 都能打开。

简单例子

姓名,年龄,城市 张三,22,北京 李四,25,上海

第一行一般是表头,每一列用逗号隔开,每一行代表一条记录。

CSV 的作用

  1. 存储表格类结构化数据:人员名单、学生成绩、订单、爬虫数据、传感器采集数据等。
  2. 数据交换:在不同软件之间导数据。
    • Python、Java、数据库、Excel、WPS、各种数据分析工具互相导入导出。
  3. 数据备份、导出报表:程序直接输出 csv,不用复杂格式。

为什么要用 CSV,优点

  1. 简单轻量:纯文本,没有复杂格式,占用空间小。
  2. 通用性极强:几乎所有编程语言、数据库、办公软件都支持读写。Excel 可以另存为 csv,Python pandas 直接读取 csv。
  3. 易于程序处理:代码只需要按逗号、换行分割,就能解析出表格,不需要解析复杂 Excel 二进制格式。
  4. 跨软件兼容:A 软件导出 csv,B 软件直接导入,解决不同系统格式不兼容的问题。

缺点

  1. 不能存图片、公式、颜色样式,只存原始文本数字
  2. 逗号、换行出现在数据内容里时,需要加双引号转义,处理不好会乱列。
  3. 没有内置格式,不适合做美化报表,适合原始数据。

和 Excel (.xlsx) 对比

表格

CSVXLSX(Excel)
文件类型纯文本二进制压缩文件
样式无颜色、公式、图表支持样式、公式、图表
体积更大
程序读取简单需要专门库解析
用途数据交换、批量处理办公展示、复杂表格

实际开发场景

爬虫爬完数据存 csv;数据库导出数据 csv;机器学习导入数据集;大数据批量导出,都会优先用 csv。


二、Matplotlib的作用

matplotlib是 Python 最主流的数据可视化绘图库,专门把数字、表格数据画成各种图表。

核心作用

  1. 把抽象数据变成可视化图表把列表、numpy 数组、csv 表格、pandas 数据,画出折线图、柱状图、散点图、饼图、直方图、子图、热力图等。
  2. 数据分析结果展示做完数据计算、统计分析,直观看到趋势、对比、分布。
  3. 生成图片文件可以直接把图表保存为png/jpg/pdf/svg图片,放到报告、论文、PPT 里。
  4. 高度自定义修改坐标轴、标题、图例、颜色、字体、网格、子图布局,几乎图表每一处都能调。

常见搭配

  • pandas + csv一起:读取 csv 表格数据,用 matplotlib 画图
  • 和 numpy:处理数组数据绘图
  • 机器学习:画损失曲线、样本分布

简单示例

import matplotlib.pyplot as plt x = [1,2,3,4] y = [10,20,15,25] plt.plot(x,y) #画折线图 plt.title("示例图表") plt.show() #弹出窗口显示图表 # plt.savefig("test.png") #保存成图片

优缺点

✅优点:

  • 功能强大,图表自由度极高
  • Python 生态标配,教程多,兼容性好
  • 可以输出图片文件,适合做实验报告

❌缺点:

  • 代码偏繁琐,很多细节要手动写代码调
  • 做交互式图表不方便(交互式用 plotly)

和 csv 的关系(承接上一问)

流程:读取 csv 表格数据 → 数据清洗处理 → matplotlib 绘图展示数据。

csv原始数据文件 → pandas读取 → matplotlib画图表

常用图表场景

  • 折线图:看变化趋势(时间序列、股价)
  • 柱状图:做数据大小对比
  • 散点图:看两组数据相关性
  • 直方图:看数据分布

三、NumPy作用

NumPy(Numerical Python),Python 数值计算库,核心是ndarray 多维数组,专门用来做大规模数字运算。

Python 原生列表不适合大量数值计算,NumPy 就是用来弥补这个短板。

核心作用

  1. 高效存储大批量数字数据提供ndarray数组,可以是一维、二维、多维,比普通 Python 列表省内存。

比如 csv 读取出来的表格数据、图像像素、传感器数据,都可以转成 numpy 数组。

  1. 高性能数值运算底层是 C 语言实现,运算速度远快于 for 循环遍历 Python 列表,适合大数据、矩阵运算。 支持:加减乘除、平方、开方、求和、均值、方差、最大值最小值、矩阵乘法等。
  2. 生成各类数据生成等差数列、随机数、全 0 数组、全 1 数组,模拟实验数据。
  3. 为其他库打基础(底层依赖)很多库底层依赖 numpy:
  • pandas:表格处理,底层大量使用 numpy
  • matplotlib:绘图接收 numpy 数组作为输入
  • scikit‑learn 机器学习、PyTorch、TensorFlow 都依赖 numpy

简单示例

import numpy as np # 创建一维数组 arr = np.array([1,2,3,4]) print(arr) # 数组整体运算,不需要写循环 print(arr * 2) # 每个元素全部乘2 # 常用统计 print(arr.mean()) #平均值 print(arr.sum()) #求和 #生成0‑9的序列 a = np.arange(10) print(a)

NumPy 数组 vs Python 列表

表格

numpy 数组 ndarraypython list 列表
存储内容一般同种数据类型(全数字)可以存放不同类型数据
运算速度快,C 底层慢,循环开销大
内存占用占用小占用大
适合场景大规模数值计算、矩阵杂项各种对象

和前面知识串联(csv + numpy + matplotlib)

csv文件(文本表格) ↓pandas/numpy读取 numpy数组(数字矩阵) ↓数值计算处理 matplotlib绘图展示图表

完整数据流:读取 csv → numpy 做数值运算 → matplotlib 画图

常用场景

  1. 数据分析,批量处理表格数字
  2. 科学计算、矩阵运算
  3. 机器学习数据集处理
  4. 图像处理(图片就是数字矩阵)
  5. 生成模拟测试数据

缺点:主要处理数字,字符串处理能力弱,字符串表格交给 pandas


四、numpy.arange()函数作用

np.arange()是 NumPy 用来生成一维数字序列数组的函数,类似 Python 内置range(),但返回的是 numpy 数组,不是 range 对象。

语法

np.arange(start, stop, step, dtype=None)
  • start:起始值,默认 0(包含)
  • stop:结束值,不包含这个数(必须传)
  • step:步长,每次增加多少,默认1
  • dtype:指定数据类型

⚠️注意:取不到 stop 这个数字,左闭右开[start , stop)

示例

import numpy as np # 1.只给stop,从0开始 a = np.arange(5) print(a) # [0 1 2 3 4] # 2. start, stop b = np.arange(2,7) print(b) # [2 3 4 5 6] #3. start,stop,step 步长2 c = np.arange(1,10,2) print(c) # [1 3 5 7 9] #4.支持小数步长 d = np.arange(0, 2, 0.3) print(d) # [0. 0.3 0.6 0.9 1.2 1.5 1.8]

和 Python range () 对比

表格

np.arange()range()
返回值numpy 数组 ndarrayrange 迭代对象
支持小数✅可以0.1步长❌只能整数步长
用途科学计算、绘图 x 轴数据普通 for 循环

实际搭配 matplotlib 场景

经常用来生成 x 轴坐标:

import numpy as np import matplotlib.pyplot as plt x = np.arange(0,10,0.5) #生成0~9.5,间隔0.5的x坐标 y = x**2 plt.plot(x,y) plt.show()

小坑提醒

用浮点数步长时,会有浮点精度误差,不适合精准等分;需要均匀等分优先用np.linspace()

一句话总结

np.arange(起点,终点,步长),生成连续数字的 numpy 一维数组,取不到终点数字,常用来生成绘图的 x 轴数据


五、可视化分析中什么情况下使用折线图、柱状图、饼图

核心原则:

  • 折线图:看【变化趋势】(时间 / 顺序)
  • 柱状图:看【数值大小对比】(分类比较)
  • 饼图:看【占比、份额】,整体 100% 的构成

1️⃣ 折线图 plot

✅适合场景:

  1. 数据带有时间 / 先后顺序,观察数据随时间的变化、涨跌趋势
  2. 看波动、上升下降、周期变化

例子:每月销售额、每日股价、温度变化、学生成绩随时间变化、机器损失函数变化

❌不适合: 分类之间没有先后顺序,单纯比大小,不要用折线。

示例:一年 12 个月的销量,画折线,看哪个月走高、走低。

2️⃣ 柱状图 bar

✅适合场景:

  1. 不同类别之间做数值大小对比,类别之间没有连续先后关系
  2. 看谁大谁小,数值差距

例子:各个班级平均分、不同产品销量、各个城市 GDP、不同科目分数

分组柱状图还可以做多组对比。

❌不适合: 表达占比(不要拿柱状图当饼图);大量时间点(优先折线)。

小提示:类别文字很长可以用横向柱状图 barh

3️⃣ 饼图 pie

✅适合场景:

  1. 展示整体内部各部分占总体的百分比,总和接近 100%
  2. 看结构、份额构成

例子:收入来源占比、各部门人数占总人数比例、产品市场份额

❌不适合:

  1. 分类太多(>5‑6 类,会密密麻麻看不清)
  2. 对比绝对值大小(饼图很难肉眼分辨微小百分比差异)
  3. 数据不是一个完整整体,不能求和到 100%

建议:占比很小的多个类别,合并为 “其他”。


快速对照表

表格

图表核心目的典型例子避坑
折线图趋势、变化、时序月度营收、温度走势不要用于无序分类对比
柱状图类别间数值对比各科成绩、各产品销量不适合单纯表达占比
饼图部分占整体的比例开销构成、市场份额类别不要太多,不适合比大小

做题 / 实验简单记忆口诀

  1. 看趋势、随时间变 → 折线图
  2. 比大小,各个类别 PK → 柱状图
  3. 看占比,一共 100% → 饼图

实战小例子(结合前面 csv/numpy/matplotlib)

  • 统计 2020‑2025 每年的销售额(时间趋势)→折线图
  • 统计 A/B/C 三个门店的销售额(分类对比)→柱状图
  • 统计 A 门店内部各个商品的销售占比 →饼图

补充:如果要同时看对比 + 趋势,可用柱状 + 折线组合图。


六、Python 列表 (list) 和 NumPy 数组 (ndarray) 区别

list:Python 原生列表;ndarray:numpy 库提供的数组

1. 数据类型

  • list:可以存放任意不同类型元素
lst = [10, "abc", 3.14, True] #数字、字符串、布尔可以混放
  • ndarray同一数组内所有元素必须是同一种数据类型,全部 int / 全部 float。如果放入不同类型,会强制转换。
import numpy as np arr = np.array([1,2,3.5]) #全部变成浮点数

2. 运算方式(最大区别)

  • list+代表拼接,不是数学相加;不能直接整体做数学运算,需要循环
a = [1,2] b = [3,4] print(a + b) # [1,2,3,4] 拼接,不是 [4,6] # a*2 是复制列表 [1,2,1,2],不是每个元素乘2
  • ndarray按元素数学运算,整个数组批量计算,不需要 for 循环
import numpy as np a = np.array([1,2]) b = np.array([3,4]) print(a + b) # [4 6] 对应位置数字相加 print(a * 2) # [2 4]每个元素全部乘2

3. 运行速度

  • list:循环遍历速度,大量数据效率低
  • ndarray:底层 C 语言实现,运算速度快很多,适合大批量数值计算

4. 内存占用

  • list:每个元素是对象,内存开销大
  • ndarray:连续内存存储,占用内存更小

5. 维度

  • list:可以嵌套实现多维,但没有真正 “维度” 概念,只是套列表
lst = [[1,2],[3,4]]
  • ndarray:原生支持一维、二维、多维,有.shape属性查看行列形状
arr = np.array([[1,2],[3,4]]) print(arr.shape) #(2,2) 2行2列

6. 适用场景

list

  • 存储不同类型数据
  • 少量数据,普通业务逻辑
  • 爬虫存杂项数据

numpy ndarray

  • 大量数字计算、矩阵运算
  • 数据分析、matplotlib 绘图数据源
  • 机器学习、科学计算

简单对比表格

表格

对比项list 列表numpy ndarray 数组
元素类型可以混合多种类型全部元素同一类型
+运算列表拼接对应元素数学相加
批量运算需要 for 循环直接数组运算,不用循环
速度
多维表达嵌套列表原生多维,shape 属性
内存占用大占用小

一句话记忆

列表用来存各种各样的数据;numpy 数组专门用来大批量做数字计算。

转换

import numpy as np lst = [1,2,3] arr = np.array(lst) #list → ndarray new_list = arr.tolist() #ndarray → list

七、numpy.array()函数作用

np.array()是 NumPy 最核心函数,把普通数据(列表、元组)转换成 NumPy 的 ndarray 数组对象

语法

np.array(object, dtype=None)
  • object:要转换的数据,一般传Python 列表 / 元组
  • dtype:可选,指定数组的数据类型int/float

作用

  1. 将 Python 列表 (list) → numpy 数组 (ndarray),获得数组的批量运算能力
  2. 创建一维、二维、多维数组
  3. 统一数组内部元素的数据类型

示例

import numpy as np # 1.一维:列表转数组 lst1 = [1,2,3,4] arr1 = np.array(lst1) print(arr1) #输出:[1 2 3 4] # 2.二维数组(嵌套列表转二维数组) lst2 = [[1,2],[3,4]] arr2 = np.array(lst2) print(arr2) ''' [[1 2] [3 4]] ''' #3.指定数据类型 arr3 = np.array([1,2,3], dtype=float) print(arr3) # [1. 2. 3.]

关键特性:自动统一类型

传入列表里如果整数 + 浮点数混合,会全部转为浮点数:

arr = np.array([1, 2.5, 3]) print(arr) # [1. 2.5 3. ]

和 np.arange () 的区别(考试常考)

  • np.array(列表)基于已有列表创建数组,数据源是你写好的数据
  • np.arange(start,stop,step)自动生成连续数字序列,不需要提前写列表
# array:手动写数据 arr1 = np.array([0,1,2,3,4]) # arange:自动生成序列 arr2 = np.arange(5)

常用转换

# list → ndarray arr = np.array([1,2,3]) # ndarray → list my_list = arr.tolist()

一句话总结

np.array():接收列表,生成 ndarray 数组,就可以做批量数学运算,不再需要 for 循环。

串联整套流程

普通 Python 列表 →np.array()→numpy 数组 →numpy 运算 →传给 matplotlib 绘图。


八、为什么要把 Python list 转成 numpy array

简单说:普通列表能干的事有限,转成数组,才能用上 numpy 的高性能能力

1. 列表不能直接批量数学运算

列表做加减乘,是拼接、复制,不是每个元素计算。

lst = [1,2,3] print(lst * 2) # [1,2,3,1,2,3] 复制列表,不是 [2,4,6]

想要每个数 ×2,列表必须写 for 循环遍历。

转成 array 之后:

arr = np.array([1,2,3]) print(arr * 2) # [2 4 6],全部元素直接乘2,不用写循环

大量数据时,不用写循环,代码简洁。

2. 运行速度差距巨大

列表循环是 Python 层执行; numpy 数组底层是 C 语言实现,处理成千上万条数字速度快几十~上百倍

如果 csv 读取几千几万条数据,用列表循环会很慢,数组效率高。

3. 原生支持多维矩阵,有 shape 等属性

嵌套列表[[1,2],[3,4]]只是套列表,没有行列概念。 array 转换后变成真正二维数组,可以:

  • .shape获取行列
  • 切片按行列取数据
  • 矩阵运算

4. 适配第三方库(非常重要)

matplotlib、pandas、机器学习库,很多接口优先接收 numpy 数组。 你把列表传进去内部也会自动帮你转 array。

5. 内存更小

同样一堆数字,ndarray 占用内存远小于 list,适合大数据。

不转换会怎么样?

  1. 做批量计算要写大量 for 循环,代码繁琐
  2. 数据量大运行很慢
  3. 不方便做矩阵、切片操作

什么时候不需要转换?

  • 数据量很小,只是存一些杂七杂八不同类型数据,就用 list。

总结记忆

list:存数据; 转 array:为了批量数值运算、提速、适配绘图 / 数据分析库

完整数据流回顾

csv 读取数据 → 普通列表 →np.array()转为数组 → 批量计算 → matplotlib 绘图。

考试简答题版本: 将列表转换为 numpy 数组,目的是获得数组批量运算能力,避免编写循环,提升运算速度,节省内存,同时方便多维矩阵处理,适配 matplotlib 等数据分析库。1

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询