WhatsApp 聊天记录如何导出为 CSV?使用 Python 进行数据分析

前言

在日常工作中,WhatsApp 不仅用于即时通讯,也经常承担客户沟通、项目协作和群组讨论等任务。

当聊天记录越来越多时,如果想统计每天的消息数量、分析不同时间段的沟通频率,或者快速筛选某个关键词,直接在 WhatsApp 中逐条查看显然不够方便。

一种可行的方案是:先将 WhatsApp 聊天记录导出为 CSV,再使用 Python 对数据进行处理。

本文将介绍从聊天数据导出、CSV 读取、数据清洗到基础统计分析的完整流程。

一、整体实现思路

整个流程可以分为四个步骤:

  1. 从 WhatsApp 导出聊天记录。
  2. 将聊天数据保存为 CSV 格式。
  3. 使用 Python 和 pandas 读取数据。
  4. 对消息数量、时间分布及关键词进行分析。

CSV 是一种通用的数据交换格式,可以使用 Excel、Python 或其他数据分析工具进行处理。

相比直接解析聊天界面,使用结构化数据进行分析通常更加方便。

二、准备运行环境

本次示例使用以下环境:

  • Python 3.10 或更高版本
  • pandas
  • matplotlib
  • Google Chrome
  • WhatsApp Web

首先安装 Python 依赖:

bash 复制代码
pip install pandas matplotlib

安装完成后,即可开始准备数据。

三、导出 WhatsApp 聊天记录

WhatsApp 手机端提供内置的聊天导出功能,但无法直接生成标准的 CSV 数据表。

如果使用手机端导出的 TXT 文件,需要额外编写解析逻辑,处理时间戳、发送者和多行消息等问题。

另一种方式是使用支持 CSV 格式的导出工具。

例如,WAExport 是一款基于 Chrome 和 WhatsApp Web 的聊天记录导出扩展,支持将聊天内容保存为 HTML、Excel 或 CSV。

基本操作流程:

  1. 在 Chrome 浏览器中打开 WhatsApp Web。
  2. 安装并打开 WAExport 扩展。
  3. 选择需要导出的个人或群组聊天。
  4. 根据需求设置日期范围。
  5. 选择 CSV 格式并执行导出。

导出完成后,将文件保存为:

whatsapp_chat.csv

需要注意,导出工具生成的 CSV 字段名称可能不同,后续代码需要根据实际文件结构进行调整。

四、使用 pandas 读取 CSV

首先创建一个 Python 文件:

analyze_whatsapp.py

然后编写以下代码:

python 复制代码
import pandas as pd

df = pd.read_csv("whatsapp_chat.csv")

print(df.head())
print(df.columns.tolist())

执行后,程序会输出 CSV 的前五行和所有字段名称。

为了方便演示,假设我们已经将实际 CSV 字段整理为以下结构:

date sender message
2026-10-01 09:00 User A Hello
2026-10-01 09:05 User B Good morning
2026-10-01 10:20 User A Project update

其中:

  • date:消息发送时间
  • sender:发送者
  • message:消息内容

这只是示例字段,不代表 WAExport 的固定导出表头。

如果实际 CSV 使用其他列名,可以通过 rename() 进行转换。

五、清洗 WhatsApp 聊天数据

在分析之前,需要先处理时间格式和空值。

python 复制代码
import pandas as pd

df = pd.read_csv("whatsapp_chat.csv")

df["date"] = pd.to_datetime(
    df["date"],
    errors="coerce"
)

df = df.dropna(subset=["date"])

df["message"] = df["message"].fillna("")

这里使用 errors="coerce",将无法识别的时间转换为缺失值。

然后使用 dropna() 删除没有有效时间的记录。

这样可以避免后续统计出现异常。

六、统计每天的 WhatsApp 消息数量

首先从时间字段中提取日期:

python 复制代码
df["day"] = df["date"].dt.date

daily_messages = (
    df.groupby("day")
    .size()
    .reset_index(name="count")
)

print(daily_messages)

假设得到以下结果:

day count
2026-10-01 125
2026-10-02 98
2026-10-03 143

这样就能直观看到每天的消息数量。

进一步使用 matplotlib 绘制趋势图:

python 复制代码
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))

plt.plot(
    daily_messages["day"],
    daily_messages["count"]
)

plt.xlabel("Date")
plt.ylabel("Message Count")
plt.title("WhatsApp Daily Message Count")

plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

通过折线图,可以观察不同日期的消息活跃程度。

七、分析 WhatsApp 群组成员的发言数量

对于群组聊天,还可以统计不同成员发送的消息数量。

python 复制代码
sender_stats = (
    df.groupby("sender")
    .size()
    .sort_values(ascending=False)
)

print(sender_stats)

如果希望以图表展示:

python 复制代码
sender_stats.plot(
    kind="bar",
    figsize=(10, 5)
)

plt.title("WhatsApp Messages by Sender")
plt.xlabel("Sender")
plt.ylabel("Message Count")

plt.tight_layout()
plt.show()

通过这个方法,可以了解不同成员的消息数量分布。

不过,发言数量只能反映消息频率,不能直接代表沟通质量或工作效率。

八、统计消息发送时间分布

如果想了解群组在什么时间最活跃,可以提取小时信息:

python 复制代码
df["hour"] = df["date"].dt.hour

hourly_stats = (
    df.groupby("hour")
    .size()
    .reindex(range(24), fill_value=0)
)

print(hourly_stats)

再绘制柱状图:

python 复制代码
hourly_stats.plot(
    kind="bar",
    figsize=(10, 5)
)

plt.title("WhatsApp Message Activity by Hour")
plt.xlabel("Hour")
plt.ylabel("Message Count")

plt.tight_layout()
plt.show()

通过图表可以查看消息集中在哪些时间段。

如果数据涉及跨时区沟通,还需要确认导出时间戳的时区设置。

九、提取包含指定关键词的消息

例如,希望找出所有包含 project 的聊天记录:

python 复制代码
keyword = "project"

filtered = df[
    df["message"].astype(str).str.contains(
        keyword,
        case=False,
        regex=False,
        na=False
    )
]

print(filtered)

这里:

  • case=False:忽略英文大小写
  • regex=False:将关键词作为普通文本匹配
  • na=False:忽略空值

这种方法适合筛选项目名称、订单编号或特定讨论主题。

十、将统计结果导出为 Excel

分析完成后,可以把统计结果保存为 Excel 文件。

首先安装:

bash 复制代码
pip install openpyxl

然后执行:

python 复制代码
with pd.ExcelWriter(
    "whatsapp_analysis.xlsx",
    engine="openpyxl"
) as writer:

    daily_messages.to_excel(
        writer,
        sheet_name="Daily Messages",
        index=False
    )

    sender_stats.rename(
        "message_count"
    ).to_excel(
        writer,
        sheet_name="Sender Statistics"
    )

    hourly_stats.rename(
        "message_count"
    ).to_excel(
        writer,
        sheet_name="Hourly Statistics"
    )

这样就可以生成包含多个工作表的 Excel 分析文件。

十一、数据隐私与安全注意事项

WhatsApp 聊天记录可能包含电话号码、个人身份信息和商业沟通内容。

在导出和分析数据时,建议:

  1. 只处理自己有权访问和使用的聊天记录。
  2. 不要将真实聊天数据直接上传到公开 GitHub 仓库。
  3. 分享分析结果前,对姓名、电话号码等信息进行匿名化。
  4. 将导出文件保存在安全的位置。
  5. 不再需要原始数据时,按照适用的数据保留规则进行清理。

如果只是学习 Python 数据分析,也可以使用模拟数据代替真实聊天内容。

总结

本文介绍了如何将 WhatsApp 聊天记录转换为 CSV 数据,并使用 Python 完成基础分析。

主要实现了以下功能:

  • 读取与清洗聊天数据
  • 统计每日消息数量
  • 分析群组成员发言数量
  • 统计不同时间段的消息分布
  • 根据关键词筛选聊天内容
  • 将分析结果保存为 Excel

对于需要定期处理 WhatsApp 聊天数据的开发者来说,CSV 配合 pandas 是一种灵活且容易扩展的方案。

后续还可以结合自然语言处理、数据可视化或自动化报表,进一步扩展聊天

相关推荐
AI 编程助手GPT2 小时前
GPT 排的日志时间线差一小时?用 zoneinfo 复现夏令时回拨
人工智能·python·gpt
Thanks_ks2 小时前
【第 003 讲】全面认识 Python:语言起源与设计哲学 | 行业地位与流行趋势 | 技术优势与应用领域 | 技术边界与工程局限
人工智能·python·数据分析·编程语言·python 入门·web 开发·python 之禅
Wang's Blog2 小时前
Java 项目实战:交友项目 - 我的访客:需求说明
java·开发语言·交友
TianFuRuanJian2 小时前
DTEmpower走进中国水科院,助力水利科研数据分析国产化
数据挖掘·数据分析
用户790860057262 小时前
给 AI 装上耳朵:离线语音识别与唤醒,国内环境踩坑实录
python
布莱克6052 小时前
C++ 中堆和栈的区别详解
开发语言·c++·栈·堆
用户790860057262 小时前
我让 AI 自己上了趟网:browser-use 的三个致命坑和 CDP 混合方案
python
安枳杦3 小时前
把一个 FastAPI 网页塞进 macOS 的 Dock:Tauri 2 + PyInstaller 实战
python
像风一样自由20203 小时前
3.Dockerfile如何构建一个Python算法镜像
开发语言·人工智能·python·大模型
Dmz丶3 小时前
前端转 AI 100 天 Day 36:Prompt 工程入门——从“感觉对了就行”到方法论
python