扒扒我的微信朋友圈
来源:互联网 发布:软件测试培训三个月 编辑:程序博客网 时间:2024/06/12 00:47
周末了,总想搞点事情,无意中了解到Python中的itchat包,可以抓取个人微信账号的信息。于是乎。。。
首先安装itchat 包,在通过ITCHAT登录微信,过程中会产生一个二维码,微信扫描即可登录。
import itchatitchat.login()
#friends[0]是自己的信息,所以从friends[1]开始friends = itchat.get_friends(update = True)[1:]
#关键信息去敏
Name = []for x in NickName: x1 = x.replace(x,x[0]+"*"*(len(x)-1)) Name.append(x1)data = pd.DataFrame({'Name':Name, 'Sex':Sex, 'Province':Province, 'City':City, 'Signature':Signature})data.head()
运行结果如下:
好了,我们瞅一眼就行。
1. 自己微信好友的男女比例
#初始化计数器male = female = other = 0#for i in friends: sex = i['Sex'] if sex ==1: male +=1 elif sex ==2: female +=1 else: other +=1#计算朋友总数total = len(friends[1:])#打印出自己好友的性别比例print('男性好友: %.2f%%' %(float(male)/total*100))print('女性好友:%.2f%%' %(float(female)/total*100))print( '不明性别的好友: %.2f%%' %(float(other)/total*100))
输出结果如下:
男性好友: 62.02%女性好友:31.78%不明性别的好友: 6.98%
哎呀,女性好友也不少,然而为什么还是一只汪。好了这不重要,我们看看分布图:
import matplotlib.pyplot as pltimport numpy as np%matplotlib inlineplt.rcParams['font.sans-serif']=['STHeiti'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False #创建figurefig = plt.figure(figsize = (6,9))labels =['男性好友', '女性好友', '不明性别的好友']colors = ['red','yellowgreen','lightskyblue']sizes = [male, female, other]explode = (0.05,0,0)plt.pie(sizes,explode=explode,labels=labels,colors=colors, labeldistance = 1.1,autopct = '%3.1f%%',shadow = False, startangle = 90,pctdistance = 0.6)# patches,l_text,p_text = # for t in l_text:# t.set_size=(30)# for t in p_text:# t.set_size=(20)# 设置x,y轴刻度一致,这样饼图才能是圆的plt.axis('equal')plt.legend()plt.show()
我竟然有这么多好友连自己的性别都不知道,那谁谁谁,自己看一下自己。
2. 自己微信好友的城市分布
再仔细观察friends列表,发现里面还包含了好友昵称、省份、城市、个人简介等等的数据,刚好可以用来分析好友城市分布,最好的方式是定义一个函数把数据都爬下来,存到数据框里,再进行分析。
#定义一个函数,爬去各个变量def get_var(var): variable = [] for i in friends: value = i[var] variable.append(value) return variable# 调用函数得到想要的变量,保存在CSV文件中import pandas as pdNickName = get_var('NickName')Sex = get_var('Sex')Province = get_var('Province')City = get_var('City')Signature = get_var('Signature')
#省份这一列中有空字符串,我们用‘其他’字符串代替province =[]for each in Province: if each =='': province.append('其他') else: province.append(each) data_new = pd.DataFrame({'Name':Name, 'Sex':Sex, 'Province':province, 'City':city, 'Signature':Signature})print(data_new.head())print(data_new.info())
#画出好友城市分布图#先分组province_dis = data_new.groupby('Province')['Province'].count().sort_values(ascending = False)province_dis
再做一个分布图:
fig, ax = plt.subplots(figsize = (9,6))labels = province_dis.index.tolist()plt.bar(range(len(province_dis)),province_dis.values.tolist(),tick_label = labels,ec='k', lw=1, hatch='o',color = 'g')ax.set_xticklabels(labels, rotation =65)plt.show()
主要分布也是符合实际场景的,多在上海和江苏。哎呦,我还不知道,我的好友中有这么多‘歪果仁’’。
3. 微信好友个性签名的自定义词云图
import resiglist = []for i in friends: signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","") rep = re.compile( "1fd+w*|[<>/=]") signature = rep.sub( "", signature) siglist.append(signature)text = "".join(siglist)
这边用的是结巴分词库import jiebawordlist = jieba.cut(text , cut_all= True)word_space_split = " ".join(wordlist)
好了,进入画图阶段了,可以根据自己喜欢的图片、颜色、形状画出相似的图片,我这里用的是我自己的微信头像。from wordcloud import WordCloud , ImageColorGeneratorimport numpy as npimport PIL.Image as Imagefig = plt.figure(figsize=(10,10))coloring = np.array(Image.open( "./wechat.jpg"))my_wordcloud = WordCloud( background_color= "black", max_words= 2000, mask=coloring , max_font_size= 60, random_state= 42, scale= 2,font_path = "./华文仿宋.ttf").generate(word_space_split)image_colors = ImageColorGenerator(coloring)plt.imshow(my_wordcloud.recolor( color_func=image_colors))plt.imshow(my_wordcloud)plt.axis( "off")plt.show()
从云词中可以看出,我的微信好友签名中有人为了生活而努力,奋不顾身;有人非常注重信用,有人渴望成功,也有脚踏实地专心做着贷款金融精英。。。还有一群管老婆叫大人的妻管严(真编不下去了)。
最后,附上本人帅气的微信头像,大家对比一下:
今天的搞事情系列就到这里,有兴趣的朋友可以试一试!更多更好玩的,敬请期待!
阅读全文
0 0
- 扒扒我的微信朋友圈
- 扒的vector
- 支付宝Copy 微信代码被扒
- 我也是扒在玻璃上的蝇子?
- 扒扒这些年学过的编程语言
- 套残理员呢?弹簧的游扒
- 扒网页~~~
- 扒照片
- 扒新闻
- 深扒“微信乞丐” 教你如何不乞讨就赚大钱!
- 扒掉Smarty的裤衩儿
- 企鹅扒了中移动的内裤
- 【源码】网上随意扒的源码
- 扒光tp后的一些感想
- 扒来的mac快捷键总会
- 扒谱大杂烩-都是前辈写的
- 如何扒出Momentum的背景
- 防止你的代码被扒
- 机器学习之numpy和matplotlib学习(十五)
- 【转载两篇关于android按键事件传递的文章,流程非常完整】Android按键事件传递流程(二)
- jQuery面试题-2017年7月1日
- thinkphp中的一些坑(foreach和volist)
- 调研TCP定时器
- 扒扒我的微信朋友圈
- 前端优化的方法有哪些
- CSS中的id和class
- bzoj 1798 线段树
- 如何将Tomcat注册为系统服务
- Eclipse Maven仓库阿里云镜像配置
- 多渠道打包
- Centos7.2 配置redis主从
- maven+spring+springmvc+mybatis之一个项目搭建的血泪史