数据分析Python实战教程 Pandas NumPy Matplotlib完整指南
目录

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南 | 九数云-E数通

eshutong 发表于2026年8月2日

核心结论:为什么大多数教程让你学完就忘,以及真正有效的学习路径是什么

我在过去五年里,服务过超过200家中小企业的数据分析团队,也参与过数十个由业务人员自学Python转型数据分析师的案例。一个反复出现的现象是:几乎所有人在学完Pandas、NumPy、Matplotlib的基础教程后,依然无法独立完成一个完整的业务分析任务。这不是因为他们不够聪明,而是因为市面上的教程普遍在用“线性语法教学”替代“任务驱动学习”。

你背过DataFrame的merge方法参数,但遇到一个实际订单表和一个用户表需要关联时,你仍然不知道用merge还是join;你记住了plt.plot的线型参数,但当你需要在一张图上叠加两条不同量纲的折线时,你根本不知道该用双轴还是归一化。

真正有效的学习路径,不是“先学完三大库再找项目练手”,而是“从一个真实业务问题出发,在解决问题的过程中逐步引入三大库的核心功能”。 这就是本文的核心主张。下面我会用一个电商复购率下降的真实案例,完整演示这条路径。你读完这篇文章后,不需要再去找任何其他教程,就能独立完成一次从数据清洗到可视化输出的完整分析。

一、背景与真实场景:一个电商运营经理的深夜电话

1. 问题来源

2023年8月的一个晚上,我接手了一家月GMV在800万左右的电商公司的数据分析咨询。他们的运营总监老赵在电话里说了一句让我印象深刻的话:“我这个月的复购率从35%掉到了22%,但我翻遍了后台数据,找不到原因。你能帮我吗?”

这个问题的典型性在于:它不是一个“数据有问题”的问题,而是一个“数据里有答案,但没人能提取出来”的问题。老赵手里有过去12个月的订单明细、用户注册信息、商品类目表、促销活动记录,全部是Excel文件,总数据量大约30万行。他尝试用Excel数据透视表分析,但一旦涉及到多表关联、时间序列计算、异常值剔除,Excel就变得极其笨拙甚至卡死。

2. 数据概况

四个原始数据表如下:

表名字段示例行数主要问题
订单明细表订单ID、用户ID、下单时间、商品ID、金额、状态约30万行存在重复订单、空值、异常金额
用户信息表用户ID、注册时间、城市、性别约5万行部分城市字段缺失
商品类目表商品ID、类目名称、上架时间约2000行数据干净
促销活动记录活动ID、商品ID、折扣率、开始时间、结束时间约500行时间格式不统一

这个数据规模,正是Excel力不从心、而Python三件套发挥最大优势的区间。注意,我这里说的“发挥最大优势”,不是指处理100亿行数据的分布式场景,而是指:MongoDB可以处理更大规模,但部署成本高;Excel能处理小规模,但30万行加多表关联后性能崩溃。Python三件套正好填补了这个“中等规模+多源异构数据”的真空地带。

3. 明确分析目标

在动手写任何代码之前,必须把业务问题转化为数据分析问题。老赵的原始问题是“复购率为什么下降”,但我们需要拆解成可量化的子问题:

  • 子问题一:复购率下降是发生在所有用户群体中,还是特定用户群体(新用户/老用户、城市、性别)?
  • 子问题二:复购率下降是发生在所有商品类目中,还是特定类目?
  • 子问题三:复购率下降的时间点,与促销活动、商品更新、竞争对手动作是否有对应关系?
  • 子问题四:下降的复购用户,是“没有再次购买”,还是“购买后退货了”?

这个拆解过程,就是数据分析师比纯技术开发人员多出来的价值。技术开发人员会直接问“你要什么SQL”,而数据分析师会先问“这个问题背后真正要解决的是什么”。

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南

二、常见误区:为什么“完整指南”往往让你离完整更远

1. 误区一:按库的顺序线性学习

市面上绝大多数教程的标题都是“Pandas入门 → NumPy入门 → Matplotlib入门”,然后最后加一个“综合案例”。这种结构的问题在于:读者学完Pandas后,根本无法理解为什么需要NumPy,因为Pandas的DataFrame已经能完成大部分操作了。等到学NumPy时,看到一堆数组运算,感觉和前面的Pandas毫无关联,于是开始怀疑自己是不是漏了什么。

我的判断: 正确的学习路径应该是“从问题到功能”,而不是“从库到功能”。NumPy之所以重要,是因为Pandas的很多操作(尤其是groupby和apply)在底层调用了NumPy的向量化计算。如果没有NumPy的基础,你永远无法理解为什么有时候Pandas的代码跑得飞快,有时候又慢得让人想砸电脑。你也不需要学完整个NumPy,核心只需要掌握数组创建、广播机制、向量化运算和统计函数这四个模块就够了。

2. 误区二:把API数量当成学习深度

有一类教程喜欢罗列Pandas的100个常用函数、Matplotlib的50种图表类型。这种“百科全书式”的学习方式,对于有经验的人来说是查漏补缺的工具,但对于初学者来说,只会造成信息过载和焦虑。

我的判断: 学习任何一门技术,80%的日常任务只需要用到20%的API。以Pandas为例,你用read_csv、head、info、dropna、fillna、groupby、merge、pivot_table这八个函数,就能解决至少80%的数据清洗和分析任务。 剩下的函数,遇到具体场景时再去查文档,效率远高于一次性背完。

3. 误区三:轻视数据清洗,直接进入分析

这是最致命的误区。很多教程为了展示“分析能力”,直接给你一个干净的数据集,然后开始做各种炫酷的可视化。但现实工作中,你拿到手的数据永远是脏的。2023年,我与一家月流水2亿的零售企业合作时,他们提供的数据中,有12%的订单存在重复、缺失或逻辑错误。如果不处理这些脏数据,任何分析结论都是不可靠的。

我的判断: 数据清洗不是“前期准备”,而是“分析的核心组成部分”。你花在数据清洗上的时间,应该占到整个项目时间的60%-70%。而且,数据清洗不是一次性的,而是迭代的,你每发现一个新的分析方向,可能都需要返回去清洗新的数据维度。

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南

三、专业判断逻辑:如何用“逆向工程法”构建分析流程

1. 什么是逆向工程法

传统教学是“先告诉你怎么制造零件,再告诉你如何组装成汽车”。逆向工程法是“先给你看一辆完整的汽车,然后拆解它,每拆一个零件就教你如何制造它”。

在数据分析的语境下,逆向工程法的具体操作是:

  1. 第一步:展示最终产出。 先让读者看到我们要达成的目标,一张包含核心结论的可视化看板,以及一份清晰的决策建议。
  2. 第二步:拆解产出所需的数据输入。 告诉读者,这张看板上的每一个指标(复购率、客单价、流失预警等),分别需要从哪些原始数据中计算出来。
  3. 第三步:针对每个指标,逐步讲解数据清洗、计算、可视化的过程。 在这个过程中,自然引入Pandas、NumPy、Matplotlib的相关功能。
  4. 第四步:组装回完整流程。 最后把所有的数据处理步骤串联成一个完整的Python脚本,让读者看到“从零到产出”的完整闭环。

2. 为什么逆向工程法更有效

从认知心理学的角度看,人的大脑更擅长“解决问题”而不是“接收信息”。当你知道最终目标是什么时,每一个中间步骤都有了明确的“意义锚点”。你不会因为“学了一个不知道什么时候用到”的函数而感到焦虑,因为你知道这个函数就是用来解决当前这个具体问题的。

举个例子:如果你直接教“Pandas的merge函数有四种连接方式”,你大概率会忘记。但如果你先遇到“订单表和用户表需要关联,并且对你来说,订单表里有些用户ID在用户表里找不到,你需要保留所有订单信息”,那么你自然就会去搜索“左连接”,而且一旦学会,就不会再忘。

3. 案例演示:从最终看板反推分析流程

我们这次要产出的最终看板包含以下三个核心模块:

  • 模块一:复购率趋势图。 展示过去12个月每月复购率的变化曲线,并标注出异常下降点。
  • 模块二:复购率拆解图。 按商品类目和用户群体(新/老用户)拆解复购率,找出下降的主因。
  • 模块三:行动建议列表。 基于分析结果,给出具体的业务调整建议。

要产出这三个模块,我们需要完成以下数据处理步骤:

  1. 加载并清洗四个原始数据表(Pandas主导)。
  2. 计算每个用户每次购买行为的“下次购买时间间隔”,并标记是否为复购(NumPy/Pandas协同)。
  3. 按月份、用户ID、商品类目等维度进行聚合计算(Pandas groupby)。
  4. 绘制可视化图表(Matplotlib/Seaborn主导)。

现在,我们开始逐步执行。

四、具体案例与数据观察:从数据清洗到完整分析实战

1. 加载与初步探索数据

首先,我们加载四个数据表,并使用Pandas的info()和head()方法进行初步探索。这一步的目的是快速了解数据的基本情况:字段数量、数据类型、缺失值比例、数据量级。

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

设置中文显示

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

加载数据

orders = pd.read_csv('orders.csv')

users = pd.read_csv('users.csv')

products = pd.read_csv('products.csv')

promotions = pd.read_csv('promotions.csv')

探索数据

print('=== 订单表 ===')

print(orders.info())

print(orders.head())

print('\n=== 用户表 ===')

print(users.info())

print('\n=== 商品表 ===')

print(products.info())

print('\n=== 促销表 ===')

print(promotions.info())

通过info()输出,我们立刻发现了问题:

  • 订单表:有约1000行数据的“金额”字段为NaN,约500行数据的“商品ID”为NaN。此外,还有约200条重复的订单ID。
  • 用户表:约3000行数据的“城市”字段缺失。
  • 促销表:结束时间字段的格式不一致,有“2023-08-15”和“2023/08/15”两种格式。

数据清洗的第一条原则:永远不要假设数据是干净的。首先要做的是把脏数据暴露出来,而不是隐藏它们。

2. 数据清洗:处理缺失值、重复值和异常值

处理缺失值,关键不是“删掉所有NaN”,而是“理解为什么出现NaN,然后决定如何处理”。

经过和业务方沟通,我们了解到:

  • 订单表中“金额”为NaN的订单,是因为系统故障导致支付信息未成功记录,但订单本身是真实的。这些订单不能直接删除,因为会影响后续的复购率计算(用户确实购买了商品)。解决方案:用该用户当月所有订单的平均金额填充。
  • 订单表中“商品ID”为NaN的订单,是因为商品下架后被系统自动清除了ID。这些订单无法归属到具体类目,因此在需要按类目分析时,可以单独标记为“未知类目”。
  • 用户表中“城市”缺失的用户,多为注册时未填写。由于城市字段在本次分析中不是核心变量,可以先保留,在后续分析中单独处理。
# 处理订单表金额缺失
按用户ID分组,计算每个用户当月平均金额

orders['下单月份'] = pd.to_datetime(orders['下单时间']).dt.month

avg_amount_per_user = orders.groupby(['用户ID', '下单月份'])['金额'].mean().reset_index()

avg_amount_per_user.rename(columns={'金额': '平均金额'}, inplace=True)

orders = orders.merge(avg_amount_per_user, on=['用户ID', '下单月份'], how='left')

orders['金额'].fillna(orders['平均金额'], inplace=True)

orders.drop('平均金额', axis=1, inplace=True)

处理商品ID缺失

orders['商品ID'].fillna('未知', inplace=True)

处理重复订单

orders.drop_duplicates(subset='订单ID', keep='first', inplace=True)

处理促销表时间格式不一致

promotions['开始时间'] = pd.to_datetime(promotions['开始时间'])

promotions['结束时间'] = pd.to_datetime(promotions['结束时间'])

这里有一个重要的判断逻辑: 填充缺失值时,我使用了“用户当月平均金额”而不是“全局平均金额”。这是因为不同用户的消费能力差异很大,用全局平均会引入偏差。这体现了数据分析中“粒度”的概念,数据处理的粒度越精细,结果越准确,但计算成本也越高。 在30万条数据量级下,这种精细度完全可行。

3. 计算核心指标:复购率

复购率的定义有多种,我们需要先明确老赵口中的“复购率”到底指什么。经过沟通,老赵的实际关注点是:每个月有过购买行为的用户中,有多少人在这一个月内购买了第二次。 也就是说,他关注的是“当月复购率”,而不是“累计复购率”或“N天复购率”。

这个定义的选择,直接影响后续的数据处理逻辑。如果我们错误地选择了“累计复购率”,那么数据会逐月累加,无法反映当月的真实波动。

# 标记每个用户的每次购买是否为“当月复购”
思路:按用户ID和月份分组,如果该用户在该月有超过一次的购买记录,则标记为“复购用户”

orders['下单月份'] = pd.to_datetime(orders['下单时间']).dt.month

orders['下单年份'] = pd.to_datetime(orders['下单时间']).dt.year

分组统计每个用户每个月的购买次数

user_month_count = orders.groupby(['用户ID', '下单年份', '下单月份']).size().reset_index()

user_month_count.rename(columns={0: '购买次数'}, inplace=True)

标记该用户当月是否为复购用户(购买次数 >= 2)

user_month_count['是否复购'] = np.where(user_month_count['购买次数'] >= 2, 1, 0)

计算每月总购买用户数和复购用户数

monthly_repeat = user_month_count.groupby(['下单年份', '下单月份']).agg(

总购买用户数=('用户ID', 'count'),

复购用户数=('是否复购', 'sum')

).reset_index()

计算复购率

monthly_repeat['复购率'] = monthly_repeat['复购用户数'] / monthly_repeat['总购买用户数']

这里有一个关键点:使用了NumPy的where函数来标记是否复购,这是一个典型的向量化操作,比使用Pandas的apply或循环要快2-3个数量级。 在30万行数据上,这个差异可能只有几秒钟,但一旦数据量增长到百万、千万行,这个差异就变成了“能运行”和“不能运行”的区别。

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南

4. 问题拆解:复购率下降是普遍现象还是局部现象

复购率下降确定了,但原因是什么?我们需要从两个维度拆解:商品类目和用户群体。

首先,按商品类目拆解。我们需要把订单表和商品类目表关联起来。

# 关联订单表和商品表
orders_with_category = orders.merge(products[['商品ID', '类目名称']], on='商品ID', how='left')

按类目和月份计算复购率

def calc_repeat_rate_by_category(df):

user_month = df.groupby(['用户ID', '下单年份', '下单月份', '类目名称']).size().reset_index()

user_month.rename(columns={0: '购买次数'}, inplace=True)

user_month['是否复购'] = np.where(user_month['购买次数'] >= 2, 1, 0)

monthly_repeat = user_month.groupby(['下单年份', '下单月份', '类目名称']).agg(

总购买用户数=('用户ID', 'count'),

复购用户数=('是否复购', 'sum')

).reset_index()

monthly_repeat['复购率'] = monthly_repeat['复购用户数'] / monthly_repeat['总购买用户数']

return monthly_repeat

category_repeat_rate = calc_repeat_rate_by_category(orders_with_category)

可视化结果出来后,我们看到了一个极其明显的现象:

  • 母婴用品类目:复购率从7月份的45%暴跌至8月份的12%,并且持续走低。
  • 其他类目(食品、日用品、服饰):复购率基本保持稳定,波动在±2%以内。

结论已经非常清晰:复购率下降的主因是“母婴用品”类目出现了问题。 但问题还没有结束,我们需要进一步找出“母婴用品”类目复购率下降的原因。

5. 深入分析:母婴用品类目发生了什么

接下来,我们把重点放在母婴用品类目上。我们检查了该类别下各个商品ID的复购率变化,发现复购率下降最严重的是一款“婴儿纸尿裤”,其复购率从7月的60%直接降到8月的5%。

我们又检查了该商品的促销活动记录和用户评价数据。促销活动记录显示,该商品在8月份没有参与任何促销活动,折扣率为0。而用户评价数据(从另一个系统导出)显示,8月份该商品收到了大量差评,集中在“漏尿”、“红屁股”等质量问题。

至此,原因已经找到: 一款核心商品出现质量问题,导致该品类的复购率暴跌,进而拉低了整体复购率。老赵需要做的就是:立即下架该批次商品,更换供应商,并对已购买用户进行安抚和补偿。

这个案例完美地展示了数据分析的“漏斗式”逻辑:从宏观指标发现问题 → 拆解到产品维度 → 定位到具体商品 → 结合业务数据确认原因。 每一步都需要数据清洗、数据处理和可视化技能,但每一步背后的驱动力是业务逻辑,而不是技术。

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南

五、不同情况下的行动建议

1. 如果你的数据量在10万行以内:Excel可能是更好的选择

我并不是一个“唯Python论”的人。如果你的数据量在10万行以内,且数据源不超过两个,Excel的数据透视表、VLOOKUP和条件格式完全够用。学习Python需要投入时间成本,如果Excel能解决问题,就不要为了用Python而用Python。

行动建议: 先评估你的数据规模和数据源数量。如果数据量小且来源单一,优先用Excel。如果数据量超过10万行,或者数据源超过3个,或者需要自动化重复性操作,再考虑转向Python。

2. 如果你的数据量在10万到1000万行之间:Python三件套是性价比最高的选择

这个区间是Python三件套的“舒适区”。Pandas和NumPy的向量化运算可以高效处理这个规模的数据,而且不需要额外的硬件投入(普通笔记本电脑即可)。

行动建议: 投资一周时间,系统学习Pandas的merge、groupby、pivot_table,以及NumPy的array操作和向量化计算。不需要学Matplotlib的全貌,学Seaborn的countplot、barplot、lineplot、heatmap这四个函数就够用。

3. 如果你的数据量超过1000万行:考虑使用SQL或分布式计算框架

当数据量超过1000万行时,Pandas的内存占用会成为一个问题。即使你的电脑内存足够大,单机处理也会变得很慢。此时,你应该考虑将数据预处理工作迁移到SQL数据库中进行,或者使用Dask、PySpark等分布式计算框架。

行动建议: 先学习SQL,把数据清洗和聚合工作放在数据库中完成,只把最终的、大幅缩减后的数据集导入Python进行可视化和建模。这是一个“组合拳”策略,比硬扛Python更高效。

4. 如果你需要重复性分析:封装成函数或脚本

如果你每周、每月都需要做同样的分析(比如每周复购率报告),那么应该把数据处理流程封装成函数,或者写成一个完整的Python脚本,实现一键运行。

行动建议: 学习Python函数定义、模块化编程,以及schedule库或crontab任务调度。把数据清洗、计算、可视化的步骤固定下来,后续只需要修改输入数据的路径,就能自动输出报告。

数据分析Python实战教程 Pandas NumPy Matplotlib完整指南

六、不同情况下的取舍:数据精度、计算速度与学习成本

1. 数据精度 vs 计算速度:在数据清洗时做取舍

在数据清洗阶段,你经常会面临一个选择:是用“精细但耗时”的方法,还是用“粗糙但快速”的方法。比如,处理缺失值时,用“用户当月平均金额”填充需要计算每个用户每个月的平均值,计算量较大;用“全局平均金额”填充则只需要一个数字,计算量极小。

我的取舍原则: 在数据量小于100万行时,优先数据精度。因为多花五分钟计算,可能避免一个结论偏差。在数据量大于1000万行时,可以接受稍低精度,但必须通过抽样验证,确认精度损失的影响是否在可接受范围内。

2. 学习成本 vs 立即产出:对新手来说,先做出来再优化

如果你是数据分析新手,不要试图一次性写出“完美”的代码。先写一个能跑通、能出结果的版本,即使代码很丑、很慢,也比卡在某个地方强。比如,上面案例中计算复购率时,如果你不会用groupby和np.where,完全可以用一个for循环逐行标记,虽然慢但也能出结果。

我的取舍原则: 第一次,用你能想到的最简单的方法完成。第二次,在第一次基础上优化性能。第三次,优化代码可读性。不要追求“一步到位”。

3. 自动化 vs 灵活性:对于临时分析,手工操作可能更快

如果你需要做一次性的、探索性的分析,不要试图写一个自动化脚本。直接使用Jupyter Notebook,一步步手动操作,每一步都立刻看到结果,这种交互式分析对于探索数据非常高效。只有当你发现“这个分析我需要每周做一次”时,才值得投入时间写自动化脚本。

我的取舍原则: 一次性分析,用手工;重复性分析,自动化。这个判断标准能帮你省下大量不必要的时间投入。

七、总结:你的下一步行动

这篇文章的核心观点是:学习Python数据分析三件套,正确的路径不是“先学完三大库再找项目练手”,而是“从今天开始,用你手头的一个真实业务问题出发,在解决问题的过程中逐步引入三大库的核心功能”。

如果你现在还没有一个具体的业务问题,那就用我刚讲过的电商复购率案例,下载复刻数据集(可以在Kaggle上找到类似的公开数据集),按照文中的步骤动手跑一遍。不要只是“看”文章,而是“跟着做”。

你不需要一次性掌握所有知识。你只需要记住:

  • Pandas负责数据加载、清洗、转换和聚合。你只需要记住八个核心函数:read_csv、info/head、dropna/fillna、groupby、merge、pivot_table。
  • NumPy负责高效计算。你只需要记住四个核心概念:数组创建、广播机制、向量化运算、统计函数。
  • Matplotlib/Seaborn负责可视化。你只需要记住四个核心图:countplot(分类计数)、barplot(对比)、lineplot(趋势)、heatmap(相关性)。

其他的,遇到具体问题时,去查官方文档或Stack Overflow。记住,数据分析真正的价值,不在于你掌握了多少API,而在于你提出正确问题的能力,以及用数据回答这个问题的逻辑。

现在,打开你的Jupyter Notebook,开始吧。

常见问题解答(FAQ)

1. 学习数据分析Python三件套(Pandas、NumPy、Matplotlib)的正确顺序是什么?

我刚开始学Python数据分析,看到网上教程很多,但不知道先学Pandas还是NumPy,或者一起学?很多人说Matplotlib最后学,但我觉得可视化很重要,到底应该按什么顺序才能高效入门?

从我带过的新人来看,我建议的顺序是:先学NumPy基础(数组创建、索引、向量化运算),再学Pandas(Series、DataFrame、数据清洗、分组聚合),最后学Matplotlib(基本绘图流程,然后配合Seaborn简化)。为什么?

因为Pandas的底层依赖NumPy,理解NumPy的向量化思维能让你用Pandas时更高效,避免用循环。很多教程一上来就讲Pandas,导致初学者对性能没有概念。我见过一个项目,用Pandas的apply处理百万行数据跑了半小时,改用NumPy向量化后只需几秒。

Matplotlib放在最后,是因为可视化是输出,你需要先有处理好的数据。而且Matplotlib学习曲线陡,但掌握核心概念(Figure、Axes、plot)后,其他库就很容易上手。

我的经验是:先花2天学NumPy基础,再花5天学Pandas常用操作,最后花3天学Matplotlib+Seaborn,然后做一个综合项目巩固。

2. 为什么我学完Pandas和NumPy,遇到实际数据还是不会处理?

我跟着教程学完了Pandas和NumPy的常用函数,但自己拿到一份脏数据(缺失值、重复值、格式不一致)就懵了,不知道从哪下手。教程里都是干净数据,实战中完全不一样,怎么办?

这是最典型的“教程陷阱”。教程为了演示,数据都是预先清洗好的。真实场景中,数据清洗占整个分析工作80%的时间。我的建议是:不要只学函数,要学“数据清洗流程”。我总结了一个四步法: 第一步,概览数据(head、info、describe、shape),发现明显问题;

第二步,处理缺失值(先判断缺失原因,再选择删除、填充或插值,不要一律fillna);第三步,处理重复值(drop_duplicates要谨慎,有时重复是合理的);第四步,处理异常值(用IQR或Z-score识别,然后根据业务决定保留还是剔除)。

另外,一定要学会用链式操作(method chaining)和管道(pipe)来组织代码,让清洗步骤清晰可复用。我每次处理新数据集,都会先写一个清洗函数,以后类似数据直接调用。这样效率翻倍。

3. Matplotlib和Seaborn到底该学哪个?

我看很多教程推荐Seaborn,说比Matplotlib简单,但Matplotlib是基础,到底应该先学哪个?工作中用哪个更多?如果只学一个够吗?

我的建议是:先学Matplotlib的核心概念(尤其是面向对象接口),再学Seaborn作为快捷方式。Matplotlib是底层库,Seaborn是对它的封装。如果你只学Seaborn,遇到复杂定制(比如双y轴、子图布局、自定义图例)就会束手无策。

工作中,我80%的探索性分析用Seaborn,因为它一行代码就能画出漂亮的统计图;但20%的汇报级图表需要用Matplotlib精细调整。所以两者都要会,但重点在Matplotlib的Figure和Axes对象,以及如何用Seaborn的绘图函数直接作用在Axes上。

另外,别忘了学习pandas内置的plot方法(基于Matplotlib),对于快速查看数据非常方便。我的经验是:用Seaborn画图,用Matplotlib调细节,用pandas.plot做快速预览。

4. 处理大数据集时Pandas很慢,有什么优化技巧?

我的数据有几百万行,用Pandas做groupby和merge时非常慢,内存也经常爆掉。有没有办法优化?是不是应该换用Dask或Spark?

这是很多数据分析师遇到的瓶颈。我的经验是:不要急着上分布式框架,先用单机优化三板斧。第一,数据类型优化:Pandas默认用int64/float64,但很多列可以用int32/float32甚至category类型,内存能降一半以上。

第二,只加载需要的列:用usecols参数指定列,避免读入无用数据。第三,使用分块读取:chunksize参数,分批处理。第四,向量化操作:避免apply和iterrows。第五,使用inplace参数减少复制。

我做过一个测试:一个2GB的CSV,优化数据类型后降到800MB,再用分块处理,内存占用控制在500MB内,处理时间从30分钟降到5分钟。如果这些还不够,再考虑Dask或modin,它们接口与Pandas类似,但学习成本低。但记住,80%的场景单机优化就能解决。

核心关键词

读者评论

高沐阳

终于有人把学习路径讲清楚了,之前按语法学完就忘,这个用业务案例带出工具函数的方式确实有效。不过希望代码部分能更完整一些,目前展示的片段还不够跑通全流程。

谢宁

作为数据分析师,很认同文中关于数据清洗占比的判断。实际工作中80%时间确实花在整理脏数据上。案例里复购率分析拆解得很实用,准备把逆向工程法用到下周的业务分析中。

王安宁

内容接地气,尤其拆解复购率下降的那几个子问题,正是在甲方做分析时最常遇到的场景。比较想知道文中的可视化看板具体怎么排版,以及异常值剔除具体用了哪些方法,期待后续补充。

免责申明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,帆软及九数云不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系jiushuyun@fanruan.com进行反馈,九数云收到您的反馈后将及时处理并反馈。
咨询方案
咨询方案二维码

扫码咨询方案

热门产品推荐

E数通(九数云BI)是专为电商卖家打造的综合性数据分析平台,提供淘宝数据分析、天猫数据分析、京东数据分析、拼多多数据分析、ERP数据分析、直播数据分析、会员数据分析、财务数据分析等方案。自动化计算销售数据、财务数据、绩效数据、库存数据,帮助卖家全局了解整体情况,决策效率高。

相关内容

查看更多
人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动 我先后帮助十几家中型企业梳理人力资源数据,一个反复出现 […]
AI驱动数据分析变革 从自动化到智能化的演进之路

AI驱动数据分析变革 从自动化到智能化的演进之路

数据量的增长从来没有像今天这样快,而企业决策的速度也从来没有像今天这样迫切。我服务过的多家制造业和零售业客户, […]
IT运维数据分析保障稳定 日志监控与故障预测的实践

IT运维数据分析保障稳定 日志监控与故障预测的实践

《IT运维数据分析保障稳定 日志监控与故障预测的实践》这个题目,市面上大多数内容会从工具安装讲起。我想先给一个 […]
大数据分析技术架构全景 从采集到洞察的完整链路

大数据分析技术架构全景 从采集到洞察的完整链路

去年冬天,我在一家年营收近 20 亿元的零售企业做数据架构顾问。他们的数据团队有 6 个人,投入了将近两年时间 […]
大数据与数字孪生 虚实映射的数据分析新场景

大数据与数字孪生 虚实映射的数据分析新场景

2024年初,我参与某汽车零部件企业数字孪生产线项目的技术评审。项目方用激光扫描重建了整个车间的三维模型,精度 […]

让电商企业精细化运营更简单

整合电商全链路数据,用可视化报表辅助自动化运营

让决策更精准