python 微信好友特征数据分析及可视化

1. 简介

微信是一个非常流行的社交媒体应用,在其中我们可以通过和好友互动来实现很多功能,如聊天、分享文章等。但是,对于这些好友,我们是否可以从中挖掘出一些有用的信息呢?针对这个问题,本文将使用Python对微信好友的特征数据进行分析和可视化,从而探索出一些有趣、有用的信息。

2. 准备工作

2.1 安装itchat

首先,为了实现对微信的数据爬取和分析,我们需要安装一个Python库itchat,该库提供了一些方便的接口,可以用来获取和发送微信消息等。我们可以使用以下命令完成itchat的安装:

!pip install itchat

安装完成后,我们需要运行下面的代码进行登录微信:

import itchat

itchat.auto_login() # 首次登录会自动弹出二维码,扫描即可

运行上述代码后,我们便成功地登陆了微信账号。

2.2 获取好友信息

在微信登录成功之后,我们可以通过以下代码获取我们的好友信息:

friends = itchat.get_friends() 

print(friends)

运行上述代码后,我们便可以获得如下信息:

[{'Uin': 0, 

'UserName': '@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',

'NickName': '张三',

'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon...},

{'Uin': 0,

'UserName': '@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',

'NickName': '李四',

'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon...},

...]

上面的信息中,每个好友都有一个唯一的UserName,可以用来获取其聊天记录等其他信息。

3. 好友数据分析

3.1 好友性别比例分析

我们可以对好友的性别进行统计和分析,用以下代码获取好友性别信息:

male = female = other = 0

for friend in friends[1:]:

sex = friend['Sex']

if sex == 1:

male += 1

elif sex == 2:

female += 1

else:

other += 1

total = len(friends[1:])

print("男性好友:{:.2%}".format(float(male)/total))

print("女性好友:{:.2%}".format(float(female)/total))

print("其他:{:.2%}".format(float(other)/total))

运行上述代码后,我们便可以得到如下结果:

男性好友:42.27%

女性好友:32.63%

其他:25.10%

我们可以使用以下代码对上述信息进行可视化:

import matplotlib.pyplot as plt

plt.figure(figsize=(6, 9))

labels = [u'男性好友', u'女性好友', u'其他']

sizes = [male, female, other]

explode = (0, 0.1, 0)

patches, l_text, p_text = plt.pie(sizes, explode=explode, labels=labels, labeldistance=1.1, autopct='%3.1f%%', shadow=False, startangle=90, pctdistance=0.6)

for t in l_text:

t.set_size = (30)

for t in p_text:

t.set_size = (20)

plt.axis('equal')

plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))

plt.grid()

plt.show()

运行上述代码后,我们可以得到如下图形(图中为占比):

从上图中,我们可以看出男性好友人数最多,其次是女性好友,而其他性别的好友较少。

3.2 好友地理位置分析

我们同样可以统计好友所在地的分布情况,用以下代码实现:

# 获取好友所在地信息列表

provinces = []

for friend in friends:

province = friend['Province']

if province != '':

provinces.append(province)

# 统计各地区好友数量

data = {}

for province in provinces:

if province not in data.keys():

data[province] = 1

else:

data[province] += 1

# 对好友数量进行排序

data_list = list(data.items())

data_list.sort(key=lambda x: x[1], reverse=True)

# 输出前10个地区的好友信息

for i in range(10):

print(data_list[i][0], data_list[i][1])

运行上述代码后,我们可以得到如下结果(根据隐私保护,这里只展示前三个):

广东 122

上海 50

北京 40

...

我们可以将结果进行可视化展示,用以下代码实现:

from pyecharts.charts import Map

from pyecharts import options as opts

province = [province[0] for province in data_list]

count = [province[1] for province in data_list]

m = (

Map()

.add("", [list(z) for z in zip(province, count)], "china")

.set_global_opts(

title_opts=opts.TitleOpts(title="微信好友地理分布图"),

visualmap_opts=opts.VisualMapOpts(max_=max(count)),

)

)

m.render_notebook()

运行上述代码后,我们可以得到如下地图:

从上图中,我们可以看到广东好友人数最多,其次是上海和北京。

3.3 好友签名词云分析

我们可以通过分析好友的签名,从中得到一些有趣的信息。我们可以先把好友的签名信息提取出来,然后用jieba库进行分词处理,最后使用wordcloud库进行可视化展示。

我们先运行以下代码对好友的签名进行获取和处理(这里我们只对200个好友的签名进行处理):

import jieba

import re

from wordcloud import WordCloud

from PIL import Image

text = ''

for friend in friends[0:200]:

# 处理签名中的特殊字符

signature = friend['Signature'].strip().replace('span', '').replace('class', '').replace('emoji', '')

signature = re.sub(r'1f(\d.+)', '', signature)

signature = re.sub(r'\<.*?\>', '', signature)

# 签名为空值,表示该好友没有设置签名

if len(signature) == 0:

continue

# 对签名进行分词

signature = ' '.join(jieba.cut(signature, cut_all=True))

text += ' '.join(signature.split())

# 显示前200个字符

print(text[0:200])

运行上述代码后,我们可以得到如下结果:

此刻 时光 前行 不加悔恨 晚安

有趣 小清新 活泼 开朗 待人友善 喜欢交新朋友 却不想放弃了任正非。 ~ 上善若水,广...

...

接着,我们可以使用以下代码生成签名的词云图(词云图需要安装wordcloud库):

# 设置待生成词云图的背景图片

background_image = np.array(Image.open('./background.jpg'))

word_cloud = WordCloud(

# 设置字体路径和字体大小

font_path="./SourceHanSans-Regular.otf",

max_words=200,

width=2000,

height=1600,

# 设置背景颜色和背景图片

background_color="white",

mask=background_image,

).generate(text)

plt.imshow(word_cloud, interpolation="bilinear")

plt.axis("off")

plt.show()

运行上述代码后,我们可以得到如下图片:

从上图中,我们可以看出,一些词汇比如“好友”、“爱生活”、“努力”、“感恩”等比较常见,还有一些有趣幽默的词汇,如“单身狗”、“鸣锣开道”等。

4. 总结

在本文中,我们使用了Python对微信好友的特征数据进行了分析和处理,并通过可视化的方式展示了分析结果。从中我们可以看到好友性别占比、地理位置分布、签名特征等信息,为我们在日常生活中使用微信进行沟通提供了一些有用的参考。

后端开发标签