ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python数据分析实战:从数据清洗到可视化的完整流程

Python数据分析实战:从数据清洗到可视化的完整流程 1. 第一次作业3.2到底在考什么先看清题目背后的意图很多人拿到作业题的第一反应是赶紧打开编译器开始敲代码我当年也是这么干的结果第一次作业3.2硬生生写了三版才过。后来回头复盘才发现这类作业真正的难点从来不是代码本身而是你有没有读懂题目想考察的能力点。第一次作业3.2通常出现在数据分析或Python编程入门课的第三章末尾前两节刚讲完pandas的基础操作和matplotlib的绘图逻辑这一题就是让你把两者串起来用。表面上题目说导入数据-做基础清洗-画图展示实际上老师想看到的是你有没有形成一套完整的数据处理思维而不是只会调用几个孤立的函数。我把这类作业的常见评分维度和容易丢分的地方整理成了一张表你可以对着自查评分维度考察意图常见丢分点数据导入正确性是否理解文件路径与读取格式路径写错、编码格式乱掉数据清洗完整度是否掌握缺失值和异常值处理直接dropna一刀切可视化表达能力是否理解图表类型与业务场景匹配全部画成折线图代码可读性是否具备工程化交付意识变量名随意、无注释结论解读是否从图表中提炼出业务洞察画完图不知道说了什么这五个维度里最容易被忽略的是最后一项。大多数第一次交作业的人画完图就觉得自己完成了其实图表只是中间产物你要通过图表告诉看作业的人数据里发生了什么这一句话的价值往往占整道题20%以上的分数。第一次作业的核心目的说白了就是帮你把读数据-理数据-表达数据这条链路完整地走一遍。你会发现很多人在这个环节暴露出一个问题对着一堆CSV数据无从下手。这不是能力问题是缺少一套标准动作。接下来的内容我就从环境准备开始把每个环节一次说清楚。2. 环境准备与数据获取的隐形门槛2.1 虚拟环境别忽略版本错位是第一个坑第一次作业最常见的问题出现在最开头环境的混乱。很多同学直接打开系统自带的Python环境就开始装包几个项目共用一套依赖装到后面某个包把另一个包的版本覆盖了代码就莫名其妙跑不起来。建议你从第一次作业开始就养成建虚拟环境的习惯。用conda创建命令很简单conda create -n first_homework python3.9 conda activate first_homework其实用venv也一样关键是先把隔离这件事做对。为什么强调这个因为pandas和matplotlib的版本迭代偶尔会带来接口变化你这一次作业用的版本和几个月后项目用的版本很可能不一致到时候排查问题会非常痛苦。装包的时候有个细节别只装pandas和matplotlib这俩是明面上的主角但真正支撑数据处理流程的numpy、openpyxl也一起处理好。如果你要读的文件是Excel格式缺少openpyxl这个引擎pandas会直接抛异常。2.2 数据文件放哪、路径怎么写、编码怎么选拿到作业配套的数据文件后第一步不是急着读而是先把文件放在正确的位置。我个人的习惯是打通在项目目录下建一个data子文件夹所有原始数据放进去脚本放根目录输出结果放到output目录。这样做的好处是路径清晰可复现助教也好找你的文件。路径这块有一个非常容易踩的坑中文路径。如果你的用户名是中文或者数据文件的路径包含了中文文件夹名很多情况下pandas读取会没问题但如果遇到某些版本的引擎或者配合字符串拼接路径中文路径会触发编码问题。最好在作业一开始把所有相关的路径统一改成英文省得后面查编码查到想哭。读取数据的时候编码是一个高频翻车点。CSV文件最常见的编码是UTF-8但有些从Windows环境下导出的文件会是GBK。判断方法很简单先直接用UTF-8读报错的话换成GBK再试。可以用errors参数做容错处理但不建议养成这样的习惯——如果你连正确的编码都不确定数据读进来很可能是错乱的。在读数据之前有个习惯值得培养先不要急着跑全部代码先把文件打开看一眼。用文本编辑器检查前几行确认分隔符是逗号还是制表符、有没有奇怪的注释行、列名是否完整。这个动作30秒就能完成但能帮你避免后面90%的解析错误。3. 从原始数据到可用数据清洗流程全拆解3.1 先做概览shape、info、describe三件套数据读进来了别急着画图。第一次作业里很多人在这一步直接跳到了可视化结果画出来的图扭曲得没法看原因就是没见过数据长什么样。拿到DataFrame之后第一件事永远是看数据形态。三个函数打天下df.shape # 有多少行多少列 df.info() # 每列的类型、非空值数量 df.describe() # 数值列的统计分布这三行代码的输出基本告诉你数据的大致面貌。shape告诉你这是一个大表还是小表info告诉你哪些列缺失严重describe则帮你初步判断有没有离谱的异常值。这里有两个容易忽略的细节。第一describe默认只统计数值列如果想要看类别列的分布情况要单独用value_counts。第二如果某列的类型显示为object你就要警惕这一列到底是字符串还是被读歪了的数值比如一列收入数据因为中间混入了未知两个字整个列被读成了字符串这种类型问题在info中一眼能看出来但很多人扫一眼就过去了后面计算均值时报错才反应过来。3.2 缺失值处理的度不是删得越多越好第一次作业中几乎必考的考点是缺失值处理。这个环节最常见的错误是遇到NaN就直接dropna把整行干掉。数据量大的时候这种行为看着没什么影响但其实你删除的是数据里的真实样本。处理缺失值需要分情况讨论。先看缺失率的占比缺失率低于5%且样本量充足直接删除影响不大。缺失率在5%到20%之间需要根据列的性质决定填充策略。数值列用中位数填充通常比平均数更稳健因为平均数容易受异常值影响类别列用众数填充比如性别列缺失就填出现次数最多的那个值。缺失率超过50%再填充就没有太大意义了。如果这一列对分析目标影响不大直接丢列。这里如果加入了作业的标准答案思维很多人会害怕丢列导致评分点不完整。但从实际业务角度看一列一半以上数据都是空的就说明数据采集过程出现了系统性缺陷这时候硬着头皮填充反而是在制造虚假数据。作业里也要把这个判断逻辑写进注释老师看到的是你的思考能力而不仅仅是一个删除或填充的动作。3.3 重复值、异常值和类型转换一次清完缺失值搞定之后按顺序处理重复值。用duplicated()配合sum()先看看重复量再用drop_duplicates()执行删除。注意subset参数可以指定判断重复的列范围有时候你以为的重复行其实只是某些核心字段重复了其他字段有差异这时候需要人工判断保留哪条。异常值处理稍微复杂一点。最简单的检测方式是用describe看最大值和最小值。例如销售数据里单价列的最大值是99999比你明显不合理年龄列出现了200岁一眼就知道是录入错误。这种情况下有两种处理方式直接删除或者按业务规则修正。删除之前最好先确认异常值占比占比极小千分之一级别删除无伤大雅占比一大就说明数据质量问题严重需要回头查原始数据源。类型转换也是高频需求。把字符串型的日期统一转成datetime格式、把收入表里的金额字符串去掉千分位逗号再转成float。这里建议用pd.to_numeric配合errorscoerce做转换coerce会把无法解析的字符串转成NaN比逐行手工处理高效得多。转完之后再用info验证类型的确实变了这样进入下一个环节的数据才是可用的。4. 一张能拿高分的图是怎么做出来的4.1 图表选型先想清楚你想表达什么数据清洗完毕画图是第一次作业3.2最出效果的部分但也是审美翻车重灾区。很多人不管三七二十一拿到的数据里有时间列就画折线图有分类列就画柱状图这种默认选择虽然不算错但很难拿高分。选图表类型之前先问自己一句话我这张图要回答什么问题这是整个可视化环节最重要的一步。如果数据是某店铺连续30天的营业额核心目的是看趋势变化折线图是对的。注意别把折线图画成那种每个点都标数值的刻度尺——趋势图的价值在于走向不在单个点。如果数据是各品类销售额的对比柱状图合适但你要考虑按数值排序还是按品类固有顺序排列。排序之后信息传达效率高很多视觉上也像一个有设计感的作品而不是随手生成的默认图。如果数据是占比结构饼图不是不能用但超过五个分类的饼图很难读。这种时候横向条形图按占比从高到低排列效果远好于支离破碎的饼图。我之前帮朋友改过一份作业他把12个品类的占比硬画到一个饼图里那些小于3%的小切片挤在一起图例都对上号。这个案例是想说明图表的可读性大于一切花哨效果。4.2 中文字体、坐标轴、配色细节里的专业感matplotlib默认情况下中文显示会乱码这是做作业时几乎人人都会撞上的问题。第一次作业3.2如果数据里有中文比如产品名称城市这类字段画图前先解决字体问题。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] plt.rcParams[axes.unicode_minus] False这两行代码把默认字体改为黑体或微软雅黑顺便修正负号显示。不同操作系统字体名称稍有差异Windows上SimHei基本稳macOS上可以用PingFang SC。如果字体的设置没生效查一下系统安装了哪些中文字体然后填对应的字体名。坐标轴这块很多人只画图不标轴。matplotlib默认会显示刻度数值但没有轴标签图就变成只有自己看得懂的产物。x轴和y轴的label一定要写清楚单位比如日期2023年1月-6月营业额元。标题也要写标题要能概括这张图的核心信息而不是简单写个图1。配色上第一次作业不需要炫技默认配色其实已经够用了。如果想让图看起来舒服一些记住一个原则同一张图里颜色种类不超过5种同一系列的数据用同色系不同深浅表达。千万别每根柱子选一个彩虹色那是PPT时代的审美。4.3 把图表导出成文件保存路径别马虎作业要求里通常会要求提交图片文件。导出图片用savefig这里有一个常见低级错误直接plt.show()截图保存。截图的分辨率和尺寸取决于屏幕很可能被压缩交给助教后显示发虚。plt.savefig(../output/bar_chart.png, dpi300, bbox_inchestight)dpi设为300基本达到印刷级别清晰度bbox_inchestight会自动裁剪多余白边让图片在报告中嵌入时更紧凑。保存格式方面如果报告里只要求查看PNG足够如果要进一步放大或编辑PDF格式是更好的选择。图片文件命名也有讲究。别用图1.png这种名字建议按照内容命名比如category_sales_bar.png这样后期整理报告时图片和结论之间的对应关系一目了然。4.4 画完图之后还要把结论写出来这一步是拉开分数差距的关键图是给你看的结论是给读者看的。作业里画完图旁边至少要配一两句话说明这图揭示了什么。比如你画了一张各区域销售额柱状图不能只写各区域销售额对比图当注释而是要写华东区销售额明显领先于其他区域约为西南区的2.3倍建议进一步分析华东区畅销品类的共性特征。这种带有业务洞察的解读比干巴巴的图表说明值钱得多。我第一次做这个作业的时候图画得稀烂但结论写了一整段老师给的评语是分析有思路图表表达待提升。反过来如果你的图很精美但没有任何文字解读老师只能认为你对数据没有理解。所以记住一个公式图表是证据结论是你对该证据的解读两者缺一不可。5. 提交前一定要过的这份自查清单作业写完、图也导出了先别急着提交。第一次作业3.2最常见的扣分点往往不是在功能实现上而是出现在一些看起来很小但真的很要命的问题上。经历过一次因为这种小问题被打回之后我给自己整理了一份提交前的自查清单照着过一遍基本不会再有低级失误。第一个必查项代码从头到尾能跑通吗很多人写完代码后用的不是单个脚本而是自己在Jupyter里一格一格跑通的。交作业之前把整个脚本从头运行一次看看在干净的运行环境下会不会报错。特别注意你是不是在某些cell里顺手定义过变量后面又用到了这些变量如果答案是肯定的那脚本独立运行的时候一定会挂。把所有cell的执行顺序理顺或者直接将有用代码提取到一个独立py文件里验证这是最关键的一步。第二个项文件路径是否依赖了你电脑上的特定位置如果你的脚本里写着D:/作业/数据.csv这种绝对路径那助教拿到代码后大概率跑不起来。把路径改成相对路径并确保数据文件和脚本的相对位置关系在提交的压缩包里是完整的。第三个项图表的输出文件是不是真的保存了很多人最后只交了代码忘记把代码生成的图片一起放进压缩包。或者图是有的但内容和代码里的最新一版对不上。正确做法是改完代码保存图片后再打包提交先打包再改代码的情况大概率图片是旧版。第四个项代码注释和变量命名的可读性。第一次作业的成绩评定里通常有代码规范这项。变量名就别写a、b、c了data、df、sales_df这种见名知意的命名花不了几秒钟但给阅读者省了大量时间。注释没必要每行都写核心逻辑处加一两句说明含义即可。第五个项输出结论是不是完整对照一下我在第一部分列出的评分维度看看图表之后有没有写上解读文字。这是很多人遗漏的点也是相对容易补上的分。这份自查清单我后来一直沿用到工作中。实际上不只是这一个小作业任何数据类交付物提交前过一遍这个清单都能显著减少被打回的概率。关于遇到报错的时候的处理方式再分享一个小技巧别只看最后那行报错信息要往上看异常栈的前半部分那才是真正报错的位置。很多人一看到红色报错就手足无措其实报错信息是程序在帮你指路按图索骥往下排查绝大多数问题在十分钟内都能解决。
返回列表