设为首页 | 加入收藏

欢迎访问9号彩票平台是否合法_9号彩票平台登录注册_9号彩票官网

活动预告 >> 订婚-数据 | 根据 Python 剖析微信老友数据

作者:飞鸿踏雪 PayneQin

来历:大众号『5厘米的抱负』

博文链接:http://blog.csdn.net/qinyuanpei/article/details/79360703

最近微信迎来了一次重要的更新,答应用户对"发现"页面进行定制。不知道从什么时分开端,微信朋友圈变得越来越杂乱,当越来越多的人挑选"仅展现最近三天的朋友圈",大约连微信官方都是一脸的百般无法。逐步泛化的老友联络,让微信从熟人交际逐步过渡到陌生人交际,而朋友圈里亦真亦幻的状况更新,似乎在尽力证明每一个个别的"风趣"。

有人挑选在朋友圈里记载日子的点滴,有人挑选在朋友圈里展现观念的异同,可归根结底,人们无时无刻不在窥探着他人的日子,唯一怕他人过多地了解自己的日子。人道中交织着的光亮与漆黑,像一只浑身长满刺的刺猬,离得太远会感觉到冰冷,而靠得太近则惧怕被刺扎到。朋友圈就像春节走亲戚,即使你心中有一万个不爽快,总是不愿意撕破脸,或屏蔽对方,或不给对方看,或仅展现最终三天,所以通讯录里的联络人越来越多,朋友圈越来越大,可再不会有能实在触动你心里的"小红点"出现,人类让一个产品变得越来越杂乱,然后说它无法满足人类的需求,这大约是一开端就始料不及的吧!

有人说,人道远比核算机编程更杂乱,由于即使是人类迄今为止最巨大的创造——核算机,在面临人类的自然言语时相同会张惶失措 。人类有多少言语存在着不置可否的意义,我以为言语是人类最大的误解,人类经常喜爱推测言语背面躲藏的意义,好像在交流时表达清晰的意义会让人类没有体面,更不用说网络上盛行的猜想女朋友实在意图的事例。金庸先生的武侠小说《射雕英雄传》里,在信息阻塞的南宋时期,江湖上裘千丈的一句鬼话,就搅得整个武林翻天覆地。

其实,一两句话说清楚欠好吗?黄药师、全真七子、江南六怪间的种种纠葛,哪一场不是误解?一众儿武功震古烁今的武林高手,怎样没有一点点的去伪存真的才能,言语造成了多少误解。

可即使人类的言语杂乱得像一本无字天书,可人类仍是从这些言语中寻找到蛛丝马迹。古人有文王"拘而演周易"、东方朔测字卜卦,这种带有"迷信"颜色的原始崇拜,就好像今天人们迷信星座运势一般,都是人类在上千年的演化中不断对经历进行总结和练习的成果。如此说起来,咱们的人工智能未尝不是一种愈加科学化的"迷信",由于数据和算法让咱们在不断地信任,这一切都是实在地。

日子在数字年代的咱们,无疑是悲痛的,一面尽力地在他人面前躲藏实在地自己,一面不无遗憾地慨叹自己无处遁逃,每一根数字神经都紧紧地联络着你和我,你不能巴望任何一部数字设备具有实在的智能,可你生命里的每个瞬间,都在悄然间被数据地折射出来。

今天这篇文章会依据 Python 对微信老友进行数据剖析,这儿挑选的维度首要有:性别、头像、签名、方位,首要选用图表和词云两种方法来出现成果,其间,对文本类信息会选用词频剖析和情感剖析两种办法。常言道:工欲善其事,必先利其器也。

在正式开端这篇文章前,简略介绍下本文中运用到的第三方模块:

  • itchat:微信网页版接口封装Python版别,在本文顶用以获取微信老友信息。

  • jieba:结巴分词的 Python 版别,在本文顶用以对文本信息进行分词处理。

  • matplotlib: Python 中图表制造模块,在本文顶用以制造柱形图和饼图

  • snownlp:一个 Python 中的中文分词模块,在本文顶用以对文本信息进行情感判别。

  • PIL: Python 中的图画处理模块,在本文顶用以对图片进行处理。

  • numpy: Python中 的数值核算模块,在本文中合作 wordcloud 模块运用。

  • wordcloud: Python 中的词云模块,在本文顶用以制造词云图片。

  • TencentYoutuyun:腾讯优图供给的 Python 版别 SDK ,在本文顶用以识他人脸及提取图片标签信息。

以上模块均可经过 pip 装置,关于各个模块运用的具订婚-数据 | 根据 Python 剖析微信老友数据体阐明,请自行查阅各自文档。

剖析微信老友数据的条件是取得老友信息,经过运用 itchat 这个模块,这一切会变得十分简略,咱们经过下面两行代码就可以完成:

  1. itchat.auto_login(hotReload = True)

  2. friends = itchat.get_friends(update = True)

同平常登录网页版微信相同,咱们运用手机扫描二维码就可以登录,这儿回来的friends对象是一个调集,榜首个元素是其时用户。所以,鄙人面的数据剖析流程中,咱们一向取friends[1:]作为原始输入数据,调会集的每一个元素都是一个字典结构,以我本人为例,可以注意到这儿有Sex、City、Province、HeadImgUrl、Signature这四个字段,咱们下面的剖析就从这四个字段下手:

老友性别

剖析老友性别,咱们首先要取得一切老友的性别信息,这儿咱们将每一个老友信息的Sex字段提取出来,然后别离核算出Male、Female和Unkonw的数目,咱们将这三个数值组装到一个列表中,即可运用matplotlib模块制造出饼图来,其代码完成如下:

  1. def analyseSex(firends):

  2. sexs = list(map(lambda x:x['Sex'],friends[1:]))

  3. counts = list(map(lambda x:x[1],Counter(sexs).items))

  4. labels = ['Unknow','Male','Female']

  5. colors = ['red','yellowgreen','lightskyblue']

  6. plt.figure(figsize=(8,5), dpi=80)

  7. plt.axes(aspect=1)

  8. plt.pie(counts,

  9. labels=labels,

  10. colors=colors,

  11. labeldistance = 1.1,

  12. autopct = '%3.1f%%',

  13. shadow = False,

  14. startangle = 90,

  15. pctdistance = 0.6

  16. )

  17. plt.legend(loc='upper right',)

  18. plt.title(u'%s的微信老友性别组成' % friends[0]['NickName'])

  19. plt.show

这儿简略解说下这段代码,微信中性别字段的取值有Unkonw、Male和Female三种,其对应的数值别离为0、1、2。经过Collection模块中的Counter对这三种不同的取值进行核算,其items办法回来的是一个元组的调集,该元组的榜首维元素表明键,即0、1、2,该元组的第二维元素表明数目,且该元组的调集是排序过的,即其键依照0、1、2 的顺序排列,所以经过map办法就可以得到这三种不同取值的数目,咱们将其传递给matplotlib制造即可,这三种不同取值各自所占的百分比由matplotlib核算得出。下图是matplotlib制造的老友性别分布图:

看到这个成果,我一点都不觉得意外,男女比例严峻失衡,这尽管可以解说我独身的原因,可我不觉得经过调整男女比例就能解决问题,好多人以为自己独身是由于交际圈子狭小,那么是不是扩订婚-数据 | 根据 Python 剖析微信老友数据展了交际圈子就能脱节独身呢?我觉得或许这样会添加脱单的概率,可幸运之神应该不会眷顾我,由于我的好运气早在我24岁从前就耗费完啦。

在知乎上有一个抢手的论题:现在的男性是否遍及不再对女人打开寻求了?,其实订婚-数据 | 根据 Python 剖析微信老友数据哪里会有人喜爱孤单呢?无非是怕一次又一次的绝望算了。有的人并不是我的花儿,我只是刚订婚-数据 | 根据 Python 剖析微信老友数据好途径了她的开放。从前有人说我是一个多情的人,可她永久不会知道,我做出的每一个决定都火热而悲凉。所谓"慧极必伤,情深不寿;谦谦君子,温润如玉",世人苦五毒者大略如此。

老友头像

剖析老友头像,从两个方面来剖析,榜首,在这些老友头像中,运用人脸头像的老友比重有多大;第二,从这些老友头像中,可以提取出哪些有价值的要害字。这儿需求依据HeadImgUrl字段下载头像到本地,然后经过腾讯优图供给的人脸辨认相关的API接口,检测头像图片中是否存在人脸以及提取图片中的标签。其间,前者是分类汇总,咱们运用饼图来出现成果;后者是对文本进行剖析,咱们运用词云来出现成果。

要害代码如下所示:

  1. def analyseHeadImage(frineds):

  2. basePath = os.path.abspath('.')

  3. baseFolder = basePath + '\HeadImages\'

  4. if(os.path.exists(baseFolder) == False):

  5. os.makedirs(baseFolder)

  6. faceApi = FaceAPI

  7. use_face = 0

  8. not_use_face = 0

  9. image_tags = ''

  10. for index in range(1,len(friends)):

  11. friend = friends[index]

  12. imgFile = baseFolder + '\Image%s.jpg' % str(index)

  13. imgData = itchat.get_head_img(userName = friend['UserName'])

  14. if(os.path.exists(imgFile) == False):

  15. with open(imgFile,'wb') as file:

  16. file.write(imgData)

  17. time.sleep(1)

  18. result = faceApi.detectFace(imgFile)

  19. if result == True:

  20. use_face += 1

  21. else:

  22. not_use_face += 1

  23. result = faceApi.extractTags(imgFile)

  24. image_tags += ','.join(list(map(lambda x:x['tag_name'],result)))

  25. labels = [u'运用人脸头像',u'不运用人脸头像']

  26. counts = [use_face,not_use_face]

  27. colors = ['red','yellowgreen','lightskyblue']

  28. plt.figure(figsize=(8,5), dpi=80)

  29. plt.axes(aspect=1)

  30. plt.pie(counts,

  31. labels=labels,

  32. colors=colors,

  33. labeldistance = 1.1,

  34. autopct = '%3.1f%%',

  35. shadow = False,

  36. startangle = 90,

  37. pctdistance = 0.6

  38. )

  39. plt.legend(loc='upper right',)

  40. plt.title(u'%s的微信老友运用人脸头像状况' % friends[0]['NickName'])

  41. plt.show

  42. image_tags = image_tags.encode('iso8859-1').decode('utf-8')

  43. back_coloring = np.array(Image.open('face.jpg'))

  44. wordcloud = WordCloud(

  45. font_path='simfang.ttf',

  46. background_color="white",

  47. max_words=1200,

  48. mask=back_coloring,

  49. max_font_size=75,

  50. random_state=45,

  51. width=800,

  52. height=480,

  53. margin=15

  54. )

  55. wordcloud.generate(image_tags)

  56. plt.imshow(wordcloud)

  57. plt.axis("off")

  58. plt.show

这儿咱们会在其时目录新建一个HeadImages目录,用以存储一切老友的头像,然后咱们这儿会用到一个名为FaceApi类,这个类由腾讯优图的SDK封装而来,这儿别离调用了人脸检测和图画标签辨认两个API接口,前者会核算"运用人脸头像"和"不运用人脸头像"的老友各自的数目,后者会累加每个头像中提取出来的标签。其剖析成果如下图所示:

可以注意到,在一切微信老友中,约有挨近1/4的微信老友运用了人脸头像, 而有挨近3/4的微信老友没有人脸头像,这阐明在一切微信老友中对"颜值 "有自傲的人,只是占到老友总数的25%,或许说75%的微信老友行事风格偏低调为主,不喜爱用人脸头像做微信头像。这是否阐明"美观的皮郛"并非是千人一面,长得美观的人实在是少量中的少量。

所以,当女生的妆容越来越向着"韩式半永久粗平眉"、"瓜子脸"和"大红唇"挨近的时分,当男生的服饰越来越向着"大背头"、"高领毛衣"和"长款大衣"挨近的时分,咱们能不能实在得特性一次。生命中有太多被尘俗绑架着的工作,既要和他人不相同 ,一起还要和大多数人相同,这是人生在世的百般无法。考虑到腾讯优图并不能实在得辨认"人脸",咱们这儿对老友头像中的标签再次进行提取,来协助咱们了解微信老友的头像中有哪些 要害词,其剖析成果如图所示:

经过词云,咱们可以发现:在微信老友中的签名词云中,出现频率相对较高的要害字有:女孩、树木、房子、文本、截图、卡通、合影、天空、大海。这阐明在我的微信老友中,老友挑选的微信头像首要有日常、旅行、景色、截图四个来历,老友挑选的微信头像中风格以卡通为主,老友挑选的微信头像中常见的要素有天空、大海、房子、树木。

经过调查一切老友头像,我发现在我的微信老友中,运用个人相片作为微信头像的有15人,运用网络图片作为微信头像的有53人,运用动漫图片作为微信头像的有25人,运用合照图片作为微信头像的有3人,运用孩提相片作为微信头像的有5人,运用景色图片作为微信头像的有13人,运用女孩相片作为微信头像的有18人,根本契合图画标签提取的剖析成果。

老友签名

剖析老友签名,签名是老友信息中最为丰厚的文本信息,依照人类惯用的"贴标签"的办法论,签名可以剖分出某一个人在某一段时刻里状况,就像人高兴了会笑、哀伤了会哭,哭和笑两种标签,别离表明晰人高兴和哀伤的状况。

这儿咱们对签名做两种处理,榜首种是运用用结巴分词进行分词后生成词云,意图是了解老友签名中的要害字有哪些,哪一个要害字出现的频率相对较高;第二种是运用SnowNLP剖析老友签名中的爱情倾向,即老友签名全体上是表现为正面的、负面的仍是中立的,各自的比重是多少。这儿提取Signature字段即可,其中心代码如下:

  1. def analyseSignature(friends):

  2. signatures = ''

  3. emotions =

  4. pattern = re.compile("1fd.+")

  5. for friend in friends:

  6. signature = friend['Signature']

  7. if(signature != None):

  8. signature = signature.strip.replace('span', '').replace('class', '').replace('emoji', '')

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

  10. if(len(signature)>0):

  11. nlp = SnowNLP(signature)

  12. emotions.append(nlp.sentiments)

  13. signatures += ' '.join(jieba.analyse.extract_tags(signature,5))

  14. with open('signatures.txt','wt',encoding='utf-8') as file:

  15. file.write(signatures)

  16. back_coloring = np.array(Image.open('flower.jpg'))

  17. wordcloud = WordCloud(

  18. font_path='simfang.ttf',

  19. background_color="white",

  20. max_words=1200,

  21. mask=back_coloring,

  22. max_font_size=75,

  23. random_state=45,

  24. width=960,

  25. height=720,

  26. margin=15

  27. )

  28. wordcloud.generate(signatures)

  29. plt.imshow(wordcloud)

  30. plt.axis("off")

  31. plt.show

  32. wordcloud.to_file('signatures.jpg')

  33. count_good = len(list(filter(lambda x:x>0.66,emotions)))

  34. count_normal = len(list(filter(lambda x:x>=0.33 and x<=0.66,emotions)))

  35. count_bad = len(list(filter(lambda x:x<0.33,emotions)))

  36. labels = [u'负面消沉',u'中性',u'正面活跃']

  37. values = (count_bad,count_normal,count_good)

  38. plt.rcParams['font.sans-serif'] = ['simHei']

  39. plt.rcParams['axes.unicode_minus'] = False

  40. plt.xlabel(u'情感判别')

  41. plt.ylabel(u'频数')

  42. plt.xticks(range(3),labels)

  43. plt.legend(loc='upper right',)

  44. plt.bar(range(3), values, color = 'rgb')

  45. plt.title(u'%s的微信老友签名信息情感剖析' % friends[0]['NickName'])

  46. plt.show

经过词云,咱们可以发现:

在微信老友的签名信息中,出现频率相对较高的要害词有:尽力、长大、夸姣、高兴、日子、美好、人生、远方、韶光、漫步。公然我的微信老友都是温暖、正派的好青年啊! :smile:其实,签名这个设定,从某种程度上是在反映人的一种心态,人在年轻时难免"为赋新词强说愁",比及你实在到了这个精力境界,忽然发现年轻时图样图森破,或许这便是咱们不愿意让他人了解曩昔的原因,由于伴随着人的生长,某一种瞬间的状况几乎不忍直视,QQ空间陪同了咱们这代人的整个芳华,令人形象深入的"那年今天"功用,有时让咱们感到回想的温暖,有时让咱们感到年月的萧杀,"其时只道是寻常"的物是人非,"回忆历来萧瑟处"的淡定沉着,"今夕复何夕"的丢失惆怅……都在这一行行签名里留下深深浅浅的印记。在知乎上有关于签名的论题谈论,对此感爱好的朋友无妨找时刻看看。:smile:

经过柱状图,咱们可以发现:

在微信老友的签名信息中,正面活跃的情感判别约占到55.56%,中立的情感判别约占到32.10%,负面消沉的情感判别约占到12.35%。

这个成果和咱们经过词云展现的成果根本契合,这阐明在微信老友的签名信息中,约有87.66%的签名信息,传达出来都是一种活跃向上的情绪。朋友圈中根本上有两类用户,榜首类用户运用朋友圈记载自己的日子,第二类用户运用朋友圈输出自己的观念。明显,关于第二类用户,它并不介怀他人了解它的曩昔,它更在乎它从始至终输出的观念是否共同。

所以,不论朋友圈里他人在或晒美食、或晒旅行、或秀恩爱、或晒宝宝、或煲鸡汤等等,在我看来这都是一种日子方法,精力层次和物质层次比你高的人群,觉得你朋友圈里的内容"无趣",这是契合人类一向的认知方法的,在大多数状况下,反而是那些和你层次差不多的人群,对不熟悉的人或许事物妄加判别,假如你不喜爱我朋友圈里的内容,请直接屏蔽我就好,由于这样咱们还可以做朋友;假如你由于喜爱A而在我这儿和我说B欠好,这就真的是三观不合啦。

我信任没有彻底爱好匹配的两个人,即使是男女朋友或许情侣之间,总之人与人共处嘛,真挚和相互尊重是根本要求。

老友方位

剖析老友方位,首要经过提取Province和City这两个字订婚-数据 | 根据 Python 剖析微信老友数据段。Python中的地图可视化首要经过Basemap模块,这个模块需求从国外网站下载地图信息,运用起来十分的不方便。百度的ECharts在前端运用的比较多,尽管社区里供给了pyecharts项目,可我注意到由于方针的改动,现在Echarts不再支撑导出地图的功用,所以地图的定制方面现在依然是一个问题,干流的技能计划是装备全国各省市的JSON数据,这儿博主运用的是BDP个人版,这是一个零编程的计划,咱们经过Python导出一个CSV文件,然后将其上传到BDP中,经过简略拖拽就可以制造可视化地图,几乎不能再简略,这儿咱们只是展现生成CSV部分的代码:

  1. def analyseLocation(friends):

  2. headers = ['NickName','Province','City']

  3. with open('location.csv','w',encoding='utf-8',newline='',) as csvFile:

  4. writer = csv.DictWriter(csvFile, headers)

  5. writer.writeheader

  6. for friend in friends[1:]:

  7. row = {}

  8. row['NickName'] = friend['NickName']

  9. row['Province'] = friend['Province']

  10. row['City'] = friend['City']

  11. writer.writerow(row)

下图是BDP中生成的微信老友地舆分布图,可以发现:我的微信老友首要会集在宁夏和陕西两个省份。数字年代的神经触动着每一个交际联络链的人,咱们想要极力去维护的那点隐私,在这些数据中一点点地折射出来。人类或许可以不断地假装自己,可这些从数据背面抽离出来的规则和联络不会诈骗人类。

数学从前被人称为最没有用的学科,由于日子中并不需求崇高而朴实的核算,在不同的学科知识里,经历公式永久比理论公式更为常用。但是此时此刻,你看,这国际就像一只滴滴答答转动着的时钟,每一分每一秒都是严丝合缝的。

写这篇文章的时分,我一向不知道该怎样着笔,由于微信是一个奇特的存在,它是一个国民等级的全民APP,所以,微信的产品规划一向都是一个风趣的现象,从开始底部Tab的数目、每个Tab的称号、"发现"页面的定制、小程序进口、朋友圈进口到朋友圈谈论等等一系列的规划细节,都是值得咱们透过人道和心理去研讨的。即使是被人们封神的"张小龙",在面临结构最为杂乱的我国用户集体的时分,他的洒脱中仍旧难免充溢无法,从对朋友圈的置之脑后就可以看出,这是一个怎样做都不会让人满足的功用,任何一个生态在面临巨大的用户集体的时分,功用的增减就会变成一个难题。

所谓"林子大了什么鸟都有",知乎面临的是相同的问题,营销类大众号在不断消费社会论题的一起,引导着一批又一批粉丝的价值取向,人类总巴望着他人了解自己,可人类真的了解自己吗?这篇博客是我对数据剖析的又一次测验,首要从性别、头像、签名、方位四个维度,对微信老友进行了一次简略的数据剖析,首要选用图表和词云两种方法来出现成果。

总而言之一句话,"数据可视化是手法而并非意图",重要的不是咱们在这儿做了这些图出来,而是从这些图里反映出来的现象,咱们可以得到什么本质上的启示,我一位朋友问我怎样什水饴是什么么都想抓取,为什么啊,由于我不明白人类啊!

题图:pexels,CC0 授权。

点击阅览原文,检查更多 Python 教程和资源。



上一条      下一条
返回顶部