一、什么是 csv 文件,作用是什么,为什么要使用这种格式的文件
CSV 文件
CSV(Comma‑Separated Values):逗号分隔值文件,是一种纯文本格式,用逗号把一条条数据隔开,后缀是.csv。
本质就是文本文件,用记事本、Excel、WPS 都能打开。
简单例子
姓名,年龄,城市 张三,22,北京 李四,25,上海第一行一般是表头,每一列用逗号隔开,每一行代表一条记录。
CSV 的作用
- 存储表格类结构化数据:人员名单、学生成绩、订单、爬虫数据、传感器采集数据等。
- 数据交换:在不同软件之间导数据。
- Python、Java、数据库、Excel、WPS、各种数据分析工具互相导入导出。
- 数据备份、导出报表:程序直接输出 csv,不用复杂格式。
为什么要用 CSV,优点
- 简单轻量:纯文本,没有复杂格式,占用空间小。
- 通用性极强:几乎所有编程语言、数据库、办公软件都支持读写。Excel 可以另存为 csv,Python pandas 直接读取 csv。
- 易于程序处理:代码只需要按逗号、换行分割,就能解析出表格,不需要解析复杂 Excel 二进制格式。
- 跨软件兼容:A 软件导出 csv,B 软件直接导入,解决不同系统格式不兼容的问题。
缺点
- 不能存图片、公式、颜色样式,只存原始文本数字。
- 逗号、换行出现在数据内容里时,需要加双引号转义,处理不好会乱列。
- 没有内置格式,不适合做美化报表,适合原始数据。
和 Excel (.xlsx) 对比
表格
| CSV | XLSX(Excel) | |
|---|---|---|
| 文件类型 | 纯文本 | 二进制压缩文件 |
| 样式 | 无颜色、公式、图表 | 支持样式、公式、图表 |
| 体积 | 小 | 更大 |
| 程序读取 | 简单 | 需要专门库解析 |
| 用途 | 数据交换、批量处理 | 办公展示、复杂表格 |
实际开发场景
爬虫爬完数据存 csv;数据库导出数据 csv;机器学习导入数据集;大数据批量导出,都会优先用 csv。
二、Matplotlib的作用
matplotlib是 Python 最主流的数据可视化绘图库,专门把数字、表格数据画成各种图表。
核心作用
- 把抽象数据变成可视化图表把列表、numpy 数组、csv 表格、pandas 数据,画出折线图、柱状图、散点图、饼图、直方图、子图、热力图等。
- 数据分析结果展示做完数据计算、统计分析,直观看到趋势、对比、分布。
- 生成图片文件可以直接把图表保存为
png/jpg/pdf/svg图片,放到报告、论文、PPT 里。 - 高度自定义修改坐标轴、标题、图例、颜色、字体、网格、子图布局,几乎图表每一处都能调。
常见搭配
- 和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 就是用来弥补这个短板。
核心作用
- 高效存储大批量数字数据提供
ndarray数组,可以是一维、二维、多维,比普通 Python 列表省内存。
比如 csv 读取出来的表格数据、图像像素、传感器数据,都可以转成 numpy 数组。
- 高性能数值运算底层是 C 语言实现,运算速度远快于 for 循环遍历 Python 列表,适合大数据、矩阵运算。 支持:加减乘除、平方、开方、求和、均值、方差、最大值最小值、矩阵乘法等。
- 生成各类数据生成等差数列、随机数、全 0 数组、全 1 数组,模拟实验数据。
- 为其他库打基础(底层依赖)很多库底层依赖 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 数组 ndarray | python list 列表 | |
|---|---|---|
| 存储内容 | 一般同种数据类型(全数字) | 可以存放不同类型数据 |
| 运算速度 | 快,C 底层 | 慢,循环开销大 |
| 内存占用 | 占用小 | 占用大 |
| 适合场景 | 大规模数值计算、矩阵 | 杂项各种对象 |
和前面知识串联(csv + numpy + matplotlib)
csv文件(文本表格) ↓pandas/numpy读取 numpy数组(数字矩阵) ↓数值计算处理 matplotlib绘图展示图表完整数据流:读取 csv → numpy 做数值运算 → matplotlib 画图
常用场景
- 数据分析,批量处理表格数字
- 科学计算、矩阵运算
- 机器学习数据集处理
- 图像处理(图片就是数字矩阵)
- 生成模拟测试数据
缺点:主要处理数字,字符串处理能力弱,字符串表格交给 pandas
四、numpy.arange()函数作用
np.arange()是 NumPy 用来生成一维数字序列数组的函数,类似 Python 内置range(),但返回的是 numpy 数组,不是 range 对象。
语法
np.arange(start, stop, step, dtype=None)start:起始值,默认 0(包含)stop:结束值,不包含这个数(必须传)step:步长,每次增加多少,默认1dtype:指定数据类型
⚠️注意:取不到 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 数组 ndarray | range 迭代对象 |
| 支持小数 | ✅可以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
✅适合场景:
- 数据带有时间 / 先后顺序,观察数据随时间的变化、涨跌趋势
- 看波动、上升下降、周期变化
例子:每月销售额、每日股价、温度变化、学生成绩随时间变化、机器损失函数变化
❌不适合: 分类之间没有先后顺序,单纯比大小,不要用折线。
示例:一年 12 个月的销量,画折线,看哪个月走高、走低。
2️⃣ 柱状图 bar
✅适合场景:
- 不同类别之间做数值大小对比,类别之间没有连续先后关系
- 看谁大谁小,数值差距
例子:各个班级平均分、不同产品销量、各个城市 GDP、不同科目分数
分组柱状图还可以做多组对比。
❌不适合: 表达占比(不要拿柱状图当饼图);大量时间点(优先折线)。
小提示:类别文字很长可以用横向柱状图 barh。
3️⃣ 饼图 pie
✅适合场景:
- 展示整体内部各部分占总体的百分比,总和接近 100%
- 看结构、份额构成
例子:收入来源占比、各部门人数占总人数比例、产品市场份额
❌不适合:
- 分类太多(>5‑6 类,会密密麻麻看不清)
- 对比绝对值大小(饼图很难肉眼分辨微小百分比差异)
- 数据不是一个完整整体,不能求和到 100%
建议:占比很小的多个类别,合并为 “其他”。
快速对照表
表格
| 图表 | 核心目的 | 典型例子 | 避坑 |
|---|---|---|---|
| 折线图 | 趋势、变化、时序 | 月度营收、温度走势 | 不要用于无序分类对比 |
| 柱状图 | 类别间数值对比 | 各科成绩、各产品销量 | 不适合单纯表达占比 |
| 饼图 | 部分占整体的比例 | 开销构成、市场份额 | 类别不要太多,不适合比大小 |
做题 / 实验简单记忆口诀
- 看趋势、随时间变 → 折线图
- 比大小,各个类别 PK → 柱状图
- 看占比,一共 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]每个元素全部乘23. 运行速度
- 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
作用
- 将 Python 列表 (list) → numpy 数组 (ndarray),获得数组的批量运算能力
- 创建一维、二维、多维数组
- 统一数组内部元素的数据类型
示例
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,适合大数据。
不转换会怎么样?
- 做批量计算要写大量 for 循环,代码繁琐
- 数据量大运行很慢
- 不方便做矩阵、切片操作
什么时候不需要转换?
- 数据量很小,只是存一些杂七杂八不同类型数据,就用 list。
总结记忆
list:存数据; 转 array:为了批量数值运算、提速、适配绘图 / 数据分析库。
完整数据流回顾
csv 读取数据 → 普通列表 →np.array()转为数组 → 批量计算 → matplotlib 绘图。
考试简答题版本: 将列表转换为 numpy 数组,目的是获得数组批量运算能力,避免编写循环,提升运算速度,节省内存,同时方便多维矩阵处理,适配 matplotlib 等数据分析库。1