基于Python实现的微信好友数据分析

基于Python实现的微信好友数据分析攻略

准备工作

为了进行微信好友数据分析,我们需要完成以下准备工作:

  1. 安装Python编程环境和必要的Python包,如pandas, matplotlib等。
  2. 获取微信好友聊天记录数据文件,可以导出微信聊天记录到文件,通常以txt格式保存。

数据清洗

在进行数据分析前,我们需要对数据进行清洗,以消除数据上的噪声以及非数据内容。在本实例中,我们将主要对微信好友聊天记录数据进行清洗。

步骤

  • 读取数据文件:使用Python编程环境的pandas包读取数据文件,可以使用read_csv函数读取txt文件。
  • 数据清洗:针对微信聊天记录,需要排除非文本内容。(如:图片、表情等)
  • 数据去重:为了消除重复数据带来的影响,我们需要去除重复的行数据。
  • 删除无用列数据:保留对我们有用的数据。在微信聊天记录中,我们关心的数据有:发送方,接收方,时间和聊天内容。

示例

import pandas as pd
# 读取数据文件
df = pd.read_csv('wechat_chat_history.txt', header=None, names=['text'])
# 清洗数据,去掉聊天记录中的图片、表情等非文本内容
df = df[~df.text.str.contains('<img')]
df = df[~df.text.str.contains('<span class=\"emoji')]
# 去重重复数据
df.drop_duplicates(inplace=True)
# 获取有用的数据(发送方,接收方,时间和聊天内容)
df[['user', 'type1', 'type2', 'type3', 'chat']] = df.text.str.split(n=4, expand=True)
df.drop(['text', 'type1', 'type2', 'type3'], axis=1, inplace=True)

数据分析

完成数据清洗步骤后,我们开始进行微信好友数据分析。以下是本实例中,我们将要探索的问题:

  • 总体聊天趋势:每天,每周,每月聊天量的变化情况。
  • 活跃聊天好友:哪些好友最活跃?
  • 好友性别比例:我有多少比例的男女好友?
  • 好友省份分布情况:散居各地的好友分布在省份上面如何?

步骤

总体聊天趋势

  • 统计每日、每周、每月聊天次数。
  • 使用可视化工具(如:matplotlib)绘制时间序列图,直观呈现聊天趋势。

活跃聊天好友

  • 根据聊天次数多少,排序输出好友列表。
  • 支持查看不同时间间隔内的好友活跃度。

好友性别比例

  • 使用好友性别的头像进行统计。
  • 将头像转为黑白图像,使用图像处理工具(如:opencv)进行颜色统计。
  • 统计男女头像比例,绘制饼图或柱状图进行可视化呈现。

好友省份分布情况

  • 通过解析好友所在地,获取省份信息。
  • 将所有的好友按省份进行分组,统计每个省份的好友数量。
  • 绘制热力图或地图,可视化呈现好友分布情况。

示例

总体聊天趋势

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据文件
df = pd.read_csv('wechat_chat_history.txt', header=None, names=['text'])
# 清洗数据,去掉聊天记录中的图片、表情等非文本内容
df = df[~df.text.str.contains('<img')]
df = df[~df.text.str.contains('<span class=\"emoji')]
# 去重重复数据
df.drop_duplicates(inplace=True)
# 获取有用的数据(发送方,接收方,时间和聊天内容)
df[['user', 'type1', 'type2', 'type3', 'chat']] = df.text.str.split(n=4, expand=True)
df.drop(['text', 'type1', 'type2', 'type3'], axis=1, inplace=True)

# 统计每一天的聊天次数
df['date'] = pd.to_datetime(df['chat'].str[:10])
daily_counts = df.groupby('date').size().reset_index(name='counts')
daily_counts.set_index('date', inplace=True)

# 统计每一周的聊天次数
weekly_counts = daily_counts.resample('w').sum()

# 统计每一月的聊天次数
monthly_counts = daily_counts.resample('m').sum()

plt.figure(figsize=(16, 4))
plt.plot(daily_counts, label='daily counts')
plt.plot(weekly_counts, label='weekly counts')
plt.plot(monthly_counts, label='monthly counts')
plt.xlabel('date')
plt.ylabel('chat counts')
plt.legend()
plt.show()

活跃聊天好友

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据文件
df = pd.read_csv('wechat_chat_history.txt', header=None, names=['text'])
# 清洗数据,去掉聊天记录中的图片、表情等非文本内容
df = df[~df.text.str.contains('<img')]
df = df[~df.text.str.contains('<span class=\"emoji')]
# 去重重复数据
df.drop_duplicates(inplace=True)
# 获取有用的数据(发送方,接收方,时间和聊天内容)
df[['user', 'type1', 'type2', 'type3', 'chat']] = df.text.str.split(n=4, expand=True)
df.drop(['text', 'type1', 'type2', 'type3'], axis=1, inplace=True)

# 按照联系人计数,并排序输出
friend_counts = df['user'].value_counts().reset_index().rename(columns={'index':'friend', 'user': 'counts'})
friend_counts.plot(kind='bar', x='friend', y='counts', figsize=(16, 6))
plt.xlabel("friend")
plt.ylabel("counts")
plt.show()

参考资料

  • Pandas documentation, “Pandas next-generation data manipulation for Python”. https://pandas.pydata.org/
  • Matplotlib documentation, “2D plotting library for Python”. https://matplotlib.org/
  • OpenCV documentation, “Open Source Computer Vision Library”. https://opencv.org/

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python实现的微信好友数据分析 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决办法

    Python使用pip安装模块出现ReadTimeoutError:HTTPSConnectionPool的解决办法 在Python中,使用pip安装模块是非常常见的操作。但是,在使用pip安装模块时,有时会出现ReadTimeoutErrorHTTPSConnectionPool的错误。本文将详细讲解使用pip安装模块出现ReadTimeoutError:…

    python 2023年5月13日
    00
  • 几行Python代码爬取3000+上市公司的信息

    爬取上市公司信息是一个非常有用的应用场景,可以帮助我们在Python中快速获取上市公司的信息。本攻略将介绍几行Python代码爬取3000+上市公司的信息的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取上市公司信息页面的示例: import requests ur…

    python 2023年5月15日
    00
  • python实现NB-IoT模块远程控制

    Python实现NB-IoT模块远程控制完整攻略 1. 前言 NB-IoT是一种低功耗、广覆盖、高容量的无线通信技术,被广泛应用于物联网设备的连接和控制。基于Python语言,我们可以利用NB-IoT模块实现远程控制,实现物联网设备的远程管理。 2. 硬件和软件的准备 2.1 硬件准备 NB-IoT模块:如华为ME309或者Quectel BC95等NB-I…

    python 2023年6月3日
    00
  • python实现自动重启本程序的方法

    要实现Python程序的自动重启功能,主要利用Python的os和sys模块,以及subprocess库中的Popen方法。 以下是步骤: 1. 导入模块 为了实现自动重启功能,我们需要使用Python中的os、sys模块,以及subprocess库中的Popen方法。所以首先需要导入这些模块: import os import sys import sub…

    python 2023年5月19日
    00
  • Python根据指定日期计算后n天,前n天是哪一天的方法

    根据指定日期计算后n天、前n天是Python中常用的日期操作之一,下面将给出一份完整的攻略。 步骤1:导入相关的库 在Python中,处理日期相关的操作最常用的库莫过于datetime库。因此在代码中要使用到相关的函数,就需要先导入datetime库。 import datetime 步骤2:定义指定日期 定义指定日期可以采用两种方式。 第一种方式是定义字符…

    python 2023年6月2日
    00
  • 详解Python的collections模块中的deque双端队列结构

    下面就详细讲解一下Python的collections模块中的deque双端队列结构。 1. 简介 首先来介绍一下deque,它是Python的collections模块提供的一个双端队列结构。deque支持从两端快速的append和pop操作,时间复杂度都是O(1),因此比传统的list在很多场景下都要更为高效。deque还提供了一些其他基础队列操作,如长…

    python 2023年6月3日
    00
  • python使用正则表达式来获取文件名的前缀方法

    以下是“Python使用正则表达式来获取文件名的前缀方法”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和处理文本的强大工具。在文件处理中,有时需要获取文件名的前缀,即文件名中除去扩展名的部分。本文将详细讲解Python使用正则表达式来获取文件名的前缀方法,以及如何在实际开发中应用。 二、解决方案 2.1 获取文件名的前缀 在Pyth…

    python 2023年5月14日
    00
  • 爬山算法简介和Python实现实例

    爬山算法简介和Python实现实例 爬山算法简介 爬山算法(Hill Climbing Algorithm)是一种简单且常用的启发式优化算法。该算法的基本思想是从当前解出发,每次搜索邻域中比当前解更优的解,直到达到一个局部最优解。 但是,爬山算法容易陷入局部最优解,并且不能保证找到全局最优解。因此,在实际应用中常常会利用多次随机化生成多个初始解,或者使用其他…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部