【Py大法系列--04】几十行代码让你知道朋友圈都是什么样的朋友

引言

在第一篇文章中【Py大法系列--01】20多行代码生成你的微信聊天机器人中,我们通过Python第三方库itchat实现了一个自动聊天的机器人,是不是觉得很有趣和很有用呢?在文章的结尾我们也提到了用itchat可以实现很多实用的功能,今天就结合几大常用的Python数据分析包,结合itchat的能力实现朋友圈的分析。

从哪里做起

微信现在越来越融入到了我们每个人的生活,从简单的聊天工具到衣食住行的服务,再到传播着丰富多彩信息的自媒体和涵盖万物的小程序,微信俨然就是一个小的生态系统。而人,是整个微信生态的核心,每个人朋友圈就是自我小生态的核心。itchat为我们提供了获取朋友信息的接口:

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

通过debug可以看到每个friend的信息:
image

可以看到每个好友的信息还是很丰富的,从昵称、性别、到地域等,好友列表按照通讯录排列,第一个是用户自己,接着是星标置顶的好友,比如瑾瑾在我的列表里排第一位。我们今天所有的工作都将从好友的信息做起。

统计好友性别分布

性别分布是最容易统计的数据,通过查看我自己和几个好友的数据,得出sex和性别的对应关系为:

sex = 0: 未知sex = 1: 男生sex = 2: 女生

pyecharts 是一个用于生成 Echarts 图表的类库,而Echarts 是百度开源的一个数据可视化 JS 库。主要用于数据可视化。利用pyecharts画出好友性别分布:

from pyecharts import Pieboy=girl=nothing=0for i in friends[1:]:      sex =i["Sex"]      if sex==1:          boy+=1      elif sex==2:          girl+=1      else:          nothing+=1total=len(friends[1:])attr =["迷妹","迷弟" , "低调的匿名粉丝"]v1 =[boy,girl, nothing]pie = Pie("粉丝性别分布", title_pos='center')pie.add("", attr, v1, radius=[40, 75], label_text_color=None,is_label_show=True      ,is_legend_show=False)pie.show_config()pie.render("./sex_data.html")

运行结果如下:

image

没想到我的微信上的迷妹竟然比迷弟都多了这么多,实在是吃鲸,还希望瑾瑾不要打我。

好友地域分布

分析完好友的性别我们再来分析好友的地域分布,看看自己的好友是不是遍布天南地北:

from pyecharts import Mapimport pandas as pddef get_var(var):    variable=[]    for i in friends:        value=i[var]        variable.append(value)    return variableNickName=get_var("NickName")Sex=get_var("Sex")Province=get_var('Province')Signature=get_var('Signature')city=get_var('City')data={'NickName':NickName,'Sex':Sex,'Province':Province,'Signature':Signature,'city':city}frame=pd.DataFrame(data)result1=frame.groupby(['Province'],as_index=False).size()a1=list(result1)a2=result1.indexmap=Map("我的好友占了大半个中国啊!", "来自微信的朋友圈", title_pos="center",width=1200, height=600)map.add("", a2, a1, maptype='china', is_visualmap=True, visual_text_color='#000',visual_range=[1, 8],        is_label_show=True,        symbol="diamon",        label_pos="inside"        )map.show_config()map.render("./area_data.HTML")

最后的结果如下:

image

非常地准,作为一个飘过北、上、杭的“浪里白条”,除了老家河南,我的好友基本集中在上海、北京和杭州,什么时候也可以到广深溜一波。

好友个性签名词云分析

微信签名是了解一个人性格和态度的重要参考,想看看我的朋友圈里的大神们都是走的文艺风,还是小清新,还是大学霸… …话不多说,一试便知:jieba(结巴)是一个强大的分词库,完美支持中文分词;wordcloud是一个基于Python的词云生成类库,很好用;matplotlib.pyplot是一些命令行风格函数的集合,使matplotlib以类似于MATLAB的方式工作。每个pyplot函数对一幅图片(figure)做一些改动:比如创建新图片,在图片创建一个新的作图区域(plotting area),在一个作图区域内画直线,给图添加标签(label)等:

import reimport jiebaimport wordcloud as wcimport numpy as npimport PIL.Image as Imageimport matplotlib.pyplot as pltsiglist=[]for i in friends:    signature=i['Signature'].strip().replace("span","").replace("class","").replace("emoji","")    rep=re.compile("1f\d+\w*|[<>/=]")    signature=rep.sub("",signature)    siglist.append(signature)text="".join(siglist)wordlist=jieba.cut(text,cut_all=True)word_space_split=" ".join(wordlist)coloring = np.array(Image.open("./1.jpg"))  # 一张猴子图片,试了很多照片,还是这个好my_wordcloud = wc.WordCloud(background_color="white",  # 背景颜色                            mask=coloring,                            max_words=200,  # 最大词数                            max_font_size=60,  # 字体最大值                            random_state=42,                            scale=4,  # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。                            font_path="./HYQiHei-25J.ttf",  # 字体,注意选择合适的字体,否则可能会显示乱码。                            width=400, height=200  # 像素                            ).generate(word_space_split)image_colors = wc.ImageColorGenerator(coloring)# plt.imshow(my_wordcloud.recolor(color_func=image_colors))plt.imshow(my_wordcloud)plt.axis("off")  # 不显示坐标轴plt.show()my_wordcloud.to_file('./test.jpg')

最后的结果如下:

image

对于词云的分布也是有很多可以挖掘的信息,看起来我的朋友们比较偏向于文艺风。爱自己、爱生活、有梦想、拥抱世界。我还在右下角的角落里看到了低调的我交。

后记

微信是一个神奇的存在,它是一个国民级别的全民APP,所以,微信的产品设计一直都是一个有趣的现象,从最初底部Tab的数目、每个Tab的名称、"发现"页面的定制、小程序入口、朋友圈入口到朋友圈评论等等一系列的设计细节,都是值得我们透过人性和心理去研究的。即使是被人们封神的"张小龙",在面对结构最为复杂的中国用户群体的时候,他的潇洒中依旧不免充满无奈,从对朋友圈的置之不理就可以看出,这是一个怎么做都不会让人满意的功能,任何一个生态在面对巨大的用户群体的时候,功能的增减就会变成一个难题。当然,上面一段是我抄的,太晚了,没时间写感想,该睡觉了,相信我们已经看到了itchat和Python的巨大生产力,那么就关注博主的微信公众号:“尼克毛的技术小站”,关注Py大法系列,我们一起学Python吧。

Py大法系列文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容