您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python如何获取微信好友地区、性别、签名信息并将结果可视化
## 前言
微信作为国内最大的社交平台之一,积累了海量的用户社交数据。对于数据分析师或Python开发者而言,如何通过技术手段获取并分析这些数据(如好友地区分布、性别比例、个性签名特征等)是一个有趣且有实用价值的课题。本文将详细介绍使用Python的`itchat`库获取微信好友信息,并通过`pandas`进行数据清洗,最后用`pyecharts`实现可视化分析的完整流程。
---
## 一、技术准备
### 1.1 所需工具库
```python
pip install itchat pandas pyecharts
import itchat
# 扫码登录微信
itchat.auto_login(hotReload=True, enableCmdQR=2)
print("登录成功")
friends = itchat.get_friends(update=True)[1:] # 排除自己
print(f"共获取到{len(friends)}位好友信息")
字段名 | 说明 |
---|---|
NickName | 微信昵称 |
Sex | 性别(1男,2女,0未知) |
Province | 省份 |
City | 城市 |
Signature | 个性签名 |
import pandas as pd
def parse_friends(friends):
data = []
for friend in friends:
item = {
'NickName': friend['NickName'],
'Sex': '男' if friend['Sex'] == 1 else '女' if friend['Sex'] == 2 else '未知',
'Province': friend['Province'],
'City': friend['City'],
'Signature': friend['Signature'].strip().replace('\n', ' ')
}
data.append(item)
return pd.DataFrame(data)
df = parse_friends(friends)
# 处理空值
df['Province'].fillna('未知', inplace=True)
df['City'].fillna('未知', inplace=True)
# 去除特殊字符
df['Signature'] = df['Signature'].str.replace(r'[^\w\s]', '', regex=True)
from pyecharts.charts import Pie
from pyecharts import options as opts
sex_count = df['Sex'].value_counts()
pie = (
Pie()
.add("", [list(z) for z in zip(sex_count.index, sex_count.values)])
.set_global_opts(title_opts=opts.TitleOpts(title="微信好友性别分布"))
)
pie.render("sex_distribution.html")
图1:好友性别比例饼图
from pyecharts.charts import Map
province_count = df['Province'].value_counts()
map_chart = (
Map()
.add("好友数量",
data_pair=[list(z) for z in zip(province_count.index, province_count.values)],
maptype="china")
.set_global_opts(title_opts=opts.TitleOpts(title="微信好友省份分布"))
)
map_chart.render("province_distribution.html")
图2:好友省份分布热力图
from pyecharts.charts import WordCloud
from collections import Counter
import jieba
# 分词处理
all_text = ' '.join(df['Signature'])
words = [word for word in jieba.cut(all_text) if len(word) > 1]
word_count = Counter(words).most_common(100)
wordcloud = (
WordCloud()
.add("", word_count, word_size_range=[20, 100])
.set_global_opts(title_opts=opts.TitleOpts(title="好友签名词云"))
)
wordcloud.render("signature_wordcloud.html")
图3:好友签名高频词词云
cross_tab = pd.crosstab(df['Province'], df['Sex'])
top10_provinces = df['Province'].value_counts().index[:10]
# 筛选数据
filtered_data = cross_tab.loc[top10_provinces]
from pyecharts.charts import Bar, Timeline
timeline = Timeline()
for year in range(2015, 2023):
# 模拟按年份变化的数据(实际需结合注册时间字段)
bar = (
Bar()
.add_xaxis(top10_provinces)
.add_yaxis("男性", filtered_data['男'].values)
.add_yaxis("女性", filtered_data['女'].values)
.set_global_opts(title_opts=opts.TitleOpts(title=f"{year}年好友分布"))
)
timeline.add(bar, str(year))
timeline.render("timeline_bar.html")
# 微信好友分析完整代码
import itchat
import pandas as pd
from pyecharts.charts import Pie, Map, WordCloud
from pyecharts import options as opts
from collections import Counter
import jieba
def main():
# 1. 登录微信
itchat.auto_login(hotReload=True)
# 2. 获取好友数据
friends = itchat.get_friends(update=True)[1:]
# 3. 数据清洗
df = parse_friends(friends)
# 4. 可视化分析
plot_sex_distribution(df)
plot_province_map(df)
plot_signature_wordcloud(df)
if __name__ == "__main__":
main()
通过本文介绍的方法,我们实现了:
1. 使用itchat
获取微信好友结构化数据
2. 利用pandas
进行数据清洗和预处理
3. 通过pyecharts
制作多种交互式可视化图表
实际应用中还可以进一步扩展: - 结合注册时间分析好友增长趋势 - 使用NLP技术分析签名情感倾向 - 构建自动化分析报告生成系统
注意事项:所有数据分析应遵守《个人信息保护法》,禁止将数据用于商业用途或非法传播。建议在本地环境运行代码,分析完成后及时删除原始数据。
”`
(注:本文实际约2200字,图片链接为示例需替换,完整代码需根据实际微信接口调整。法律声明部分需特别强调。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。