30 行代码绘出你的微信朋友统计图

前言

大家好,这里是「brucepk」爬虫 系列教程。此文首发于「brucepk」公众号,欢迎大家关注。此系列教程以实例项目为材料进行分析,从项目中学习 python 爬虫,跟着我一起学习,每天进步一点点。

学编程是一件枯燥的事情,比较好的方法是在实际项目中学习成长。今天带来的是 30 行代码画出你的微信朋友的性别统计图。

最近发现一个有意思的库:itchat,itchat 是一个开源的微信个人号接口。今天就用 itchat 来统计自己微信好友性别的比例并用柱形图展示出来。

项目环境:python 3

环境安装

通过下面命令安装 itchat:

pip install itchat

通过下面命令安装 matplotlib:

pip install matplotlib

Matplotlib 是一个 Python 的 2D 绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

先给大家展示下成果图:

程序结构:

  1. 登录微信;
  2. 统计出微信里好友男女人数;
  3. 根据第 2 步统计的人数画出柱形图。

登录微信

itchat.auto_login(hotReload=True)

第一次运行程序需要微信扫码登录,这里直接调用 auto_login 方法传入值为 True 的hotReload。该方法会生成一个静态文件 itchat.pkl,用于存储登陆的状态。这样即使程序关闭,一定时间内重新开启也可以不用重新扫码。

统计人数

用 get_friends 获取所有好友信息。
循环统计时从 1 开始,因为 friends[0] 是自己的信息。

friends=itchat.get_friends(update=True)[0:]  #获取所有好友信息
male = female = other =0
for i in friends[1:]:
    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) + "\n" +
"女性好友: %.2f%%" % (float(female) / total * 100) + "\n" +
"不明性别好友: %.2f%%" % (float(other) / total * 100))

画图

设置 x 轴、 y 轴 和标题的名称,定义柱形图的颜色,最后通过 plt.show显示出来。

plt.xlabel("sex")
plt.ylabel("count")
plt.title("Gender statistics")
a=plt.subplot(1,1,1)
plt.bar(10, male, facecolor=‘red‘, width=3, label=‘male‘)
plt.bar(15, female, facecolor=‘yellow‘, width=3, label=‘female‘)
plt.bar(20, other, facecolor=‘blue‘, width=3, label=‘other‘)
plt.legend()
plt.show()
 

这样微信好友的统计图就完成了,当然,这只是 itchat 冰山一角的功能,还有很多有意思的功能等着我们去挖掘。

完整代码我以上传到 GitHub 上,需要的同学可以自己下载。

https://github.com/Brucepk/wechat_friend

也可以在公众号后台回复「微信好友统计」获取。

推荐阅读

python 爬虫爬取煎蛋网妹子图

原文地址:https://www.cnblogs.com/brucepk/p/9295337.html

时间: 2024-10-11 18:39:04

30 行代码绘出你的微信朋友统计图的相关文章

数据结构——30行代码实现栈和模拟递归

本文始发于个人公众号:TechFlow,原创不易,求个关注 栈的定义 原本今天想给大家讲讲快速选择算法的,但是发现一连写了好几篇排序相关了,所以临时改了题目,今天聊点数据结构,来看看经典并且简单的数据结构--栈. 栈这个结构我想大家应该都耳熟能详,尤其是在很多地方将和堆并列在一起,称作"堆栈"就更广为人知了.但其实堆和栈本质上是两种不同的数据结构,我们不能简单地混为一谈.让我们先从比较简单的栈开始. 栈和队列的本质其实都是数组(严格地说是线性表).只不过我们在数组上增加了一些限制,使得

反-反爬虫:用几行代码写出和人类一样的动态爬虫

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:李大伟 Phantomjs简介 什么是Phantomjs Phantomjs官网介绍是:不需要浏览器的完整web协议栈(Full web stack No browser required),也就是常说的无头浏览器--或者好听点叫做:无界面的web解析器. Phantomjs的特点 由于"无头"--免去了渲染可视化的网页界面,她的速度要比一般的浏览器快不少,又因为她是完整的web协议栈,所以不仅仅提供了JavaScri

运用椭圆画法,45行代码画出任意正多边形

最近做Box2dWeb开发时,想写个创建正多边形的功能,可是由于学识尚浅,我在草稿纸上画了,想了一个上午也没有研究出什么好方法.后来翻抽屉的时候,找出了以前哥哥画的一张用同心圆画椭圆的示意图.看到这幅画,我不禁在想椭圆不就是一个N边形吗?圆不就是一个正N边形吗?如果把两个同心圆的半径设定为相等,画出来的椭圆不就是一个圆吗?因此,我立刻开始实验.原本我以为比较难,会用到圆的解析式之类的,没想到就45行代码就搞定了,主要用到的数学知识就是sin和cos. 也许有人不明白如何用同心圆画椭圆,我就借用网

Tensorflow快餐教程(1) - 30行代码搞定手写识别

去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的.这是写这一系列的初心. 快餐教程系列希望能够尽可能降低门槛,少讲,讲透. 为了让大家在一开始就看到一个美好的场景,而不是停留在漫长的基础知识积累上,参考网上的一些教程,我们直接一开始就直接展示用tensorflow实现MNIST手写识别的例子.然后基础知识我们再慢慢讲. Tensorflow安装速成教程 由于Python是跨平台的语言,

用30行代码开发一个上传、下载文件的接口

分享一段代码,开发了3个接口: 1.上传文件 2.查看所有文件 3.下载文件 使用python开发,需要安装flask模块,使用pip install flask安装即可,代码量特别少,就能实现,加上注释总共35行代码,特别的简单,代码如下: import flask,os,time from flask import request,send_from_directory,jsonify app = flask.Flask(__name__)#创建一个app,代表这个web服务 @app.ro

30行代码构建javascript 的MVC模式

MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 很多讲解MVC的例子都从一个具体的框架的某个概念入手,比如Backbone的collection或AngularJS中model,这当然不失为一个好办法.但框架之所以是框架,而不是类库(jQuery)或者工具集(Underscore),就是因为它们的背后有着众多优秀的设计理念和最佳实践,这些设计精髓相辅相成,环环相扣,缺一不可,要想在短时间内透过复杂的框架而看

30 行代码实现 JS 中的 MVC

一连串的名字走马观花式的出现和更迭,它们中一些已经渐渐淡出了大家的视野,一些还在迅速茁壮成长,一些则已经在特定的生态环境中独当一面舍我其谁.但不论如何,MVC已经并将持续深刻地影响前端工程师们的思维方式和工作方法. 很多讲解MVC的例子都从一个具体的框架的某个概念入手,比如Backbone的collection或AngularJS中model,这当然不失为一个好办法.但框架之所以是框架,而不是类库(jQuery)或者工具集(Underscore),就是因为它们的背后有着众多优秀的设计理念和最佳实

30行代码实现JavaScript中的MVC

从09年左右开始,MVC逐渐在前端领域大放异彩,并终于在刚刚过去的2015年随着React Native的推出而迎来大爆发:AngularJS.EmberJS.Backbone.ReactJS.RiotJS.VueJS…… 一连串的名字走马观花式的出现和更迭,它们中一些已经渐渐淡出了大家的视野,一些还在迅速茁壮成长,一些则已经在特定的生态环境中独当一面舍我其谁.但不论如何,MVC已经并将持续深刻地影响前端工程师们的思维方式和工作方法. 很多讲解MVC的例子都从一个具体的框架的某个概念入手,比如B

PowerShell:30行代码轻松实现SQL Server数据库容量监控

本文介绍如何用PowerShell脚本实现SQL Server数据库容量监控 闲话就不多说,直入主题 一.建表 为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名. CREATE TABLE table_name( [LOG_DATE] [varchar](20) NULL, [DB_NAME] [varchar](50) NULL, [TOTAL_SIZE_MB] [numeric](15, 2) NULL, [USE_SIZE_MB] [numeric](15, 2)