ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从 CSV 到图表:Pandas 数据处理与 Matplotlib 可视化上手实践

从 CSV 到图表:Pandas 数据处理与 Matplotlib 可视化上手实践

从 CSV 到图表:Pandas 数据处理与 Matplotlib 可视化上手实践

【免费下载链接】code_snippets项目地址: https://gitcode.com/gh_mirrors/co/code_snippets

如果你从没写过数据分析代码,这篇教程给你一条最短路径:拿一份真实的 CSV 文件,用 Pandas 读进来整理,再用 Matplotlib 画成折线图。整个过程在 code_snippets 仓库里都有现成示例,按本文顺序跑完,你会得到一张「开发者薪资随年龄变化」的对比图表,并能把同样的四步——读文件、取列、筛选、画图——套用到自己的数据上。

先看最终结果

跑通后你会得到一张折线图:横轴是年龄,纵轴是薪资中位数,图上同时画出三条曲线——All Devs(灰色虚线)、Python(蓝)、JavaScript(橙),并用图例区分含义。这张图就是 Python/Matplotlib/01-Introduction/finished_code.py 的最终产出,结果图已经在仓库里存好,可以直接对照:

对照它来写代码,出了问题能立刻判断是数据、坐标轴还是图例环节错了。

数据从哪里来:两份现成 CSV

最小路径用的是 Python/Matplotlib/05-Fill_Betweens/data.csv:只有 39 行、4 列,列名是Age、All_Devs、Python、JavaScript,每行对应一个年龄段。数据量小,适合先跑通流程。

之后想处理大文件,可以换成 Python/Matplotlib/02-BarCharts/data.csv:约 8.7 万行的调查数据,其中LanguagesWorkedWith列用分号分隔多个语言,是练习字符串拆分的真实素材。

本地没有仓库时,先克隆一份再操作:

git clone https://gitcode.com/gh_mirrors/co/code_snippets

用 Pandas 建立和筛选数据

DataFrame 有两个入口。如果你手头已经有结构化数据,可以直接用字典建表,Python/Pandas/02-DataFrames/Snippets.ipynb 讲的就是这种用法:

import pandas as pd people = { "first": ["Corey", "Jane", "John"], "last": ["Schafer", "Doe", "Doe"], "email": ["c@x.com", "j@x.com", "j2@x.com"], } df = pd.DataFrame(people)

另一种入口是从 CSV 读入,本文的重点就是这条线。读文件、取列、按条件筛选各是一行:

import pandas as pd data = pd.read_csv('data.csv') data['Age'] # 取单列 data[(data['Age'] >= 30)] # 保留满足条件的行

筛选语法还可以再扩展。字符串列做包含匹配时,Python/Pandas/04-Filtering/Pandas-Demo.ipynb 用的是df['col'].str.contains('Python', na=False),其中na=False用来处理空值,避免报错,值得照搬。

用 Matplotlib 绘制多系列折线图

数据就位后,绘图就是四步:逐条画线、加标题与轴标签、加图例、输出。下面这份完整代码可以在 05-Fill_Betweens 目录下直接运行,参考该目录的 starting_code.py:

import pandas as pd from matplotlib import pyplot as plt data = pd.read_csv('data.csv') ages = data['Age'] plt.plot(ages, data['All_Devs'], color='#444444', linestyle='--', label='All Devs') plt.plot(ages, data['Python'], label='Python') plt.plot(ages, data['JavaScript'], label='JavaScript') plt.title('Median Salary by Age') plt.xlabel('Ages') plt.ylabel('Median Salary (USD)') plt.legend() plt.tight_layout() plt.savefig('salary.png') plt.show()

几个要点:每次plt.plot调用画一条系列曲线,label决定图例文字;color和linestyle用来区分系列风格;plt.tight_layout()防止标签被裁掉;savefig把结果存成图片文件,show()弹窗口预览。

新手常卡住的三个位置

结论先行:新手报错基本集中在两类——文件没找到、图没显示出来。

  1. FileNotFoundError:当前工作目录不在 CSV 所在目录。先cd到文件所在目录,或改用绝对路径。
  2. 序列长度不一致:plt.plot要求 x、y 数组长度相同。筛选后数据变短是正常现象,但混用了筛选前后的列就会出错,画图前用data.shape确认行列数。
  3. plt.show()没有弹窗:在无图形界面的服务器上,弹窗口本来就不工作,改用savefig导出 PNG 查看即可,本文正是这种处理。

另外记住一条规则:图例不出现,几乎都是漏写了label或漏调plt.legend()。

接下来看哪些文件

折线图跑通之后,建议按仓库目录的难度顺序继续:

  • 02-BarCharts/finished_code.py:读取 8.7 万行的调查 CSV,配合Counter统计并画出「最流行语言 Top 15」横向柱状图,能学到字符串拆分与聚合。
  • 05-Fill_Betweens/finished_code.py:用fill_between在两条曲线之间按条件填色,让「高于/低于基准」一目了然。
  • 10-Subplots/finished_code.py:把一张图拆成两个独立子图分别绘制,并用fig1.savefig、fig2.savefig分别保存。

如果之后要处理真实业务数据,再看 Python/Pandas/ 下的 09-Cleaning-Data 与 10-Datetime-Timeseries 两个目录,分别覆盖缺失值清洗和时间序列处理,正好接上本文的路径。

【免费下载链接】code_snippets项目地址: https://gitcode.com/gh_mirrors/co/code_snippets

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表