美文网首页
分析朋友圈

分析朋友圈

作者: 泡泡坪 | 来源:发表于2018-11-01 23:50 被阅读27次

正所谓物以类聚,人以群分,你是怎样的人,也会吸引到怎样的人,了解一个人是怎样,最快速的方法是了解他的社交圈是怎样。之前了解过itchat,但是没用过,今天就来学习一下。itchat的功能很强大,这里我们仅用它爬取wechat中我们每个好友的基本信息, 它还有更为强大的功能接口。
首先,在终端安装一下itchat包,终端运行,pip install itchat
安装完成后导入itchat包,运行过程中会生产一个登陆二维码,用自己的温馨扫码之后即可登陆。登陆成功后,就可以把自己好友的相关信息爬下来。

itchat.login()
data = itchat.get_friends(update=True)[0:]

friends = pd.DataFrame(data)
friends.to_csv('friends.csv')

保存数据在本地,然后我们就可以对朋友圈数据进行分析啦。
首先我们先看一下有什么字段


字段属性

字段属性很多,但是这里我们就取基本信息字段分析就行了,如姓名,性别,省份,城市,个人签名。然后就要做数据清理,字段为空的数据

#数据清洗
friends['City'].fillna('other', inplace=True)
friends['Province'].fillna('other', inplace=True)
friends['Sex'].fillna('other', inplace=True)
friends['Signature'].fillna('空', inplace=True)

微信好友男女比例

根据Sex字段判断性别,1 代表男性(man),2 代表女性(women),3 未知(unknown)

friends['Sex'][friends['Sex']==1] = '男'
friends['Sex'][friends['Sex']==2] = '女'
friends['Sex'][friends['Sex']==0] = '性别不明'

df_sex = friends['Sex'].value_counts()
fig = plt.figure(figsize=(10,6))
plt.axis('equal')
plt.pie(df_sex, labels=df_sex.index, colors=['lightskyblue', 'pink', 'orange'],
        autopct='%.2f%%', pctdistance=0.6, startangle=90, radius=1.1, frame=False)
plt.show()
性别比例图

从图中可看得出来,男女比例接近,但这掩盖不了我是一只单身汪的事实。。。

friends里面还包含了好友名字、省份、城市、个人签名等等的数据,可以用来分析微信好友的城市分布。

好友省份比例图

df_province = friends['Province'].value_counts()
fig = plt.figure(figsize=(10,6))
df_province.plot(kind='bar', color='green', alpha=0.5, grid=True, title = '好友省份人数图')
plt.show()
好友省份人数图

根据省份的分组以及聚合,做出图,如无意外,我的大部分好友都是广东(这不是废话么),因为微信的设置问题,有一些是直接跳过省份选城市的,很多国外的一些城市会被当成了省份,接下来对广东省的城市再进行一次分布分析

广东省城市统计

df_city = friends[friends['Province'] == '广东']['City'].value_counts()
fig = plt.figure(figsize=(10,6))
df_city.plot(kind='bar', color='orange', alpha=0.5, grid=True, title = '广东省城市统计图', rot=0)
plt.show()
广东省城市统计图

根据分析图可得知,广东的朋友大部分集中在东莞,广州以及深圳。

个性签名分析

friends里面有每个好友的个性签名,可以做个词云图分析一下个性签名的高频词语,

把Signature打印一下,发现有表情的,还有类似<>/= 之类的符号,也有span之类的,也需要写个简单的正则将这些还有特殊符号的替换掉,再把所有拼起来,得到text字串。

signature_list = []
for i in friends.values:
    signature = i[-1].strip().replace("span","").replace("class","").replace("emoji","")
    rep = re.compile("1f\d+\w*|[<>/=]")
    signature = rep.sub("", signature)
    if len(signature) > 0:
        signature_list.append(signature)
text = "".join(signature_list)

导入jieba,然后就可以作图了

wc = WordCloud(
        background_color="white",
        # 设置最大显示的词云数
        max_words=2000,
        # 这种字体都在电脑字体中,window在C:\Windows\Fonts\下,mac下可选/System/Library/Fonts/PingFang.ttc 字体
        font_path='C:\\Windows\\Fonts\\simfang.ttf',
        height=500,
        width=500,
        # 设置字体最大值
        max_font_size=60,
        # 设置有多少种随机生成状态,即有多少种配色方案
        random_state=30
)

# 结巴分词
# word_list = jieba.cut(text)
# text = ' '.join(list(word_list))
# print(text)

myword = wc.generate(text)
# 展示词云图
plt.imshow(myword)
plt.axis("off")
plt.show()

用jieba分词的话就做词云图,不用的话,就做句子图


句子图
词云图

从这些词云图中,高频词有空空,数据,努力,自己,运动,压力,挖掘,业精于勤。
从这些此种,我解释一下自己朋友圈的个人标签:
数据,挖掘:估计应该都是都是关注数据分析,数据挖掘这一类的,就是关于技术的
努力,业精于勤:天道酬勤,满满的正能量
自己:自以为是,自我为中心之类
运动,压力:说明朋友圈的人,压力还是有的啊,所以要多运动释放一下吧

最后

第一次玩itchat,感觉我进入了新世界航海了,我的微信好友数量不是很多,如果你的微信好友有几千个,可以得到几千条数据,可以用机器学习算法搞一下。当然,itchat包还有很多很有趣的功能,包括自动回等,有时间再写一篇吧。

相关文章

网友评论

      本文标题:分析朋友圈

      本文链接:https://www.haomeiwen.com/subject/etofxqtx.html