week1-可视化

发布时间:2026/8/31 6:30:28
week1-可视化 一、什么是 csv 文件作用是什么为什么要使用这种格式的文件CSV 文件CSVComma‑Separated Values逗号分隔值文件是一种纯文本格式用逗号把一条条数据隔开后缀是.csv。本质就是文本文件用记事本、Excel、WPS 都能打开。简单例子姓名,年龄,城市 张三,22,北京 李四,25,上海第一行一般是表头每一列用逗号隔开每一行代表一条记录。CSV 的作用存储表格类结构化数据人员名单、学生成绩、订单、爬虫数据、传感器采集数据等。数据交换在不同软件之间导数据。Python、Java、数据库、Excel、WPS、各种数据分析工具互相导入导出。数据备份、导出报表程序直接输出 csv不用复杂格式。为什么要用 CSV优点简单轻量纯文本没有复杂格式占用空间小。通用性极强几乎所有编程语言、数据库、办公软件都支持读写。Excel 可以另存为 csvPython pandas 直接读取 csv。易于程序处理代码只需要按逗号、换行分割就能解析出表格不需要解析复杂 Excel 二进制格式。跨软件兼容A 软件导出 csvB 软件直接导入解决不同系统格式不兼容的问题。缺点不能存图片、公式、颜色样式只存原始文本数字。逗号、换行出现在数据内容里时需要加双引号转义处理不好会乱列。没有内置格式不适合做美化报表适合原始数据。和 Excel (.xlsx) 对比表格CSVXLSX(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 数组模拟实验数据。为其他库打基础底层依赖很多库底层依赖 numpypandas表格处理底层大量使用 numpymatplotlib绘图接收 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 matplotlibcsv文件(文本表格) ↓pandas/numpy读取 numpy数组数字矩阵 ↓数值计算处理 matplotlib绘图展示图表完整数据流读取 csv → numpy 做数值运算 → matplotlib 画图常用场景数据分析批量处理表格数字科学计算、矩阵运算机器学习数据集处理图像处理图片就是数字矩阵生成模拟测试数据缺点主要处理数字字符串处理能力弱字符串表格交给 pandas四、numpy.arange()函数作用np.arange()是 NumPy 用来生成一维数字序列数组的函数类似 Python 内置range()但返回的是 numpy 数组不是 range 对象。语法np.arange(start, stop, step, dtypeNone)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 数组 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✅适合场景数据带有时间 / 先后顺序观察数据随时间的变化、涨跌趋势看波动、上升下降、周期变化例子每月销售额、每日股价、温度变化、学生成绩随时间变化、机器损失函数变化❌不适合 分类之间没有先后顺序单纯比大小不要用折线。示例一年 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) 区别listPython 原生列表ndarraynumpy 库提供的数组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]不是每个元素乘2ndarray按元素数学运算整个数组批量计算不需要 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, dtypeNone)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], dtypefloat) 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