1. 项目介绍
本项目基于导出的微信聊天记录,进行聊天行为分析与可视化展示。通过数据清洗、关键词提取、聊天频率统计等方式,了解聊天习惯、活跃时间段、关键词热度等。
⸻
2. 功能模块说明
(1)数据读取模块
import pandas as pd
def read_chat_data(file_path):
df = pd.read_csv(file_path, encoding='utf-8') # 你也可以是 .txt 或 .xlsx
return df
(2)数据清洗模块
import re
def clean_chat_data(df):
df = df.dropna() # 去除空行
df['时间'] = pd.to_datetime(df['时间'], errors='coerce') # 时间格式标准化
df = df.dropna(subset=['时间']) # 删除解析失败的时间
return df
(3)数据分析模块
def analyze_message_count(df):
count_by_person = df['发送人'].value_counts()
return count_by_person
def analyze_hourly_activity(df):
df['小时'] = df['时间'].dt.hour
hour_count = df['小时'].value_counts().sort_index()
return hour_count
(4)可视化模块
import matplotlib.pyplot as plt
def plot_message_count(count_by_person):
count_by_person.plot(kind='bar', color='skyblue')
plt.title('消息数按发送人统计')
plt.xlabel('发送人')
plt.ylabel('消息数')
plt.tight_layout()
plt.show()
def plot_hourly_activity(hour_count):
hour_count.plot(kind='line', marker='o', color='orange')
plt.title('每小时消息活跃度')
plt.xlabel('小时')
plt.ylabel('消息数')
plt.grid(True)
plt.tight_layout()
plt.show()
⸻
3. 主程序调用示例
file_path = 'weChat_chat_log.csv' # 改成你的实际文件名
df = read_chat_data(file_path)
df = clean_chat_data(df)
# 分析
msg_count = analyze_message_count(df)
hourly = analyze_hourly_activity(df)
# 可视化
plot_message_count(msg_count)
plot_hourly_activity(hourly)
⸻
4. 可选高级功能(加分项)
• 关键词词云分析(用 jieba 分词 + wordcloud)
• 情感分析(可用 SnowNLP)
• 聊天频次日历图(类似 heatmap)
⸻
5. 总结与扩展
• 本次分析发现最多消息来自某某人,聊天高峰在晚上8点
• 未来可结合聊天内容做关键词、情绪分析或生成图表动态网页展示
1. 模拟微信聊天数据
我们假设有如下字段:
• 时间:聊天时间
• 发送人:发送消息的名字
• 消息内容:消息文本内容
import pandas as pd
from datetime import datetime, timedelta
import random
# 模拟聊天人和消息内容
people = ['小明', '小红', '小李']
messages = ['你好呀', '吃饭了吗?', '今晚看电影吗?', '哈哈哈', '在吗', '开会中', '写作业', '明天上课几点?']
# 生成模拟数据
data = []
start_time = datetime(2025, 4, 1, 8, 0)
for i in range(200): # 模拟200条消息
time = start_time + timedelta(minutes=random.randint(1, 5000))
sender = random.choice(people)
content = random.choice(messages)
data.append([time, sender, content])
df = pd.DataFrame(data, columns=['时间', '发送人', '消息内容'])
df.to_csv('mock_wechat_chat.csv', index=False, encoding='utf-8-sig')
print(df.head())
⸻
2. 数据读取与清洗模块
def read_and_clean_data(file_path):
df = pd.read_csv(file_path, encoding='utf-8')
df['时间'] = pd.to_datetime(df['时间'], errors='coerce')
df.dropna(subset=['时间'], inplace=True)
return df
⸻
3. 数据分析模块
def analyze_chat_frequency(df):
return df['发送人'].value_counts()
def analyze_hourly_distribution(df):
df['小时'] = df['时间'].dt.hour
return df['小时'].value_counts().sort_index()
⸻
4. 可视化模块
import matplotlib.pyplot as plt
def plot_sender_counts(sender_counts):
sender_counts.plot(kind='bar', color='lightgreen')
plt.title('各成员消息数量统计')
plt.xlabel('发送人')
plt.ylabel('消息数')
plt.tight_layout()
plt.show()
def plot_hourly_activity(hour_counts):
hour_counts.plot(kind='line', marker='o', color='coral')
plt.title('每小时消息发送数量')
plt.xlabel('小时')
plt.ylabel('消息数')
plt.grid(True)
plt.tight_layout()
plt.show()
⸻
5. 主程序整合运行
file_path = 'mock_wechat_chat.csv'
df = read_and_clean_data(file_path)
# 分析
sender_counts = analyze_chat_frequency(df)
hourly_counts = analyze_hourly_distribution(df)
# 可视化
plot_sender_counts(sender_counts)
plot_hourly_activity(hourly_counts)