1.  
  2. import itchat
  3.  
  4. itchat.login()
  5. friends=itchat.get_friends(update=True)[0:]
  6. male=female=other=0
  7. for i in friends[1:]:
  8. sex=i['Sex']
  9. if sex==1:
  10. male+=1
  11. elif sex==2:
  12. female+=1
  13. else:
  14. other+=1
  15.  
  16. total=len(friends[1:])
  17. malecol=round(float(male)/total*100,2)
  18. femalecol=round(float(female)/total*100,2)
  19. othercol=round(float(other)/total*100,2)
  20. print('男性朋友:%.2f%%' %(malecol)+'\n'+'女性朋友:%.2f%%' % (femalecol)+'\n'+'性别不明的好友:%.2f%%' %(othercol))
  21. print("显示图如下:")
  22.  
  23. import numpy as np
  24. import matplotlib.pyplot as plt
  25. import matplotlib as mpl
  26. #解决中文乱码不显示问题
  27. mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
  28. mpl.rcParams['axes.unicode_minus'] = False #解决保存图像是负号'-'显示为方块的问题
  29.  
  30. map = {
  31. 'Female': (malecol, '#7199cf'),
  32. 'Male': (femalecol, '#4fc4aa'),
  33. 'other': (othercol, '#e1a7a2')
  34. }
  35.  
  36. fig = plt.figure(figsize=(5,5))# 整体图的标题
  37. ax = fig.add_subplot(111)#添加一个子图
  38. ax.set_title('Gender of friends')
  39.  
  40. xticks = np.arange(3)+0.15# 生成x轴每个元素的位置
  41. bar_width = 0.5# 定义柱状图每个柱的宽度
  42. names = map.keys()#获得x轴的值
  43. values = [x[0] for x in map.values()]# y轴的值
  44. colors = [x[1] for x in map.values()]# 对应颜色
  45.  
  46. bars = ax.bar(xticks, values, width=bar_width, edgecolor='none')# 画柱状图,横轴是x的位置,纵轴是y,定义柱的宽度,同时设置柱的边缘为透明
  47. ax.set_ylabel('Proprotion')# 设置标题
  48. ax.set_xlabel('Gender')
  49. ax.grid()#打开网格
  50. ax.set_xticks(xticks)# x轴每个标签的具体位置
  51. ax.set_xticklabels(names)# 设置每个标签的名字
  52. ax.set_xlim([bar_width/2-0.5, 3-bar_width/2])# 设置x轴的范围
  53. ax.set_ylim([0, 100])# 设置y轴的范围
  54. for bar, color in zip(bars, colors):
  55. bar.set_color(color)# 给每个bar分配指定的颜色
  56. height=bar.get_height()#获得高度并且让字居上一点
  57. plt.text(bar.get_x()+bar.get_width()/4.,height,'%.2f%%' %float(height))#写值
  58. plt.show()
  59. #画饼状图
  60. fig1 = plt.figure(figsize=(5,5))# 整体图的标题
  61. ax = fig1.add_subplot(111)
  62. ax.set_title('Pie chart')
  63. labels = ['{}\n{} %'.format(name, value) for name, value in zip(names, values)]
  64. ax.pie(values, labels=labels, colors=colors)#并指定标签和对应颜色
  65. plt.show()
  66.  
  67. #用来爬去各个变量
  68. def get_var(var):
  69. variable=[]
  70. for i in friends:
  71. value=i[var]
  72. variable.append(value)
  73. return variable
  74.  
  75. #调用函数得到各个变量,并把数据存到csv文件中,保存到桌面
  76. NickName=get_var('NickName')
  77. Sex=get_var('Sex')
  78. Province=get_var('Province')
  79. City=get_var('City')
  80. Signature=get_var('Signature')
  81.  
  82. pros=set(Province)#去重
  83. prosarray=[]
  84. for item in pros:
  85. prosarray.append((item,Province.count(item)))#获取个数
  86. def by_num(p):
  87. return p[1]
  88. prosdsored=sorted(prosarray,key=by_num,reverse=True)#根据个数排序
  89.  
  90. #画图
  91. figpro = plt.figure(figsize=(10,5))# 整体图的标题
  92. axpro = figpro.add_subplot(111)#添加一个子图
  93. axpro.set_title('Province')
  94. xticks = np.linspace(0.5,20,20)# 生成x轴每个元素的位置
  95. bar_width = 0.8# 定义柱状图每个柱的宽度
  96. pros=[]
  97. values = []
  98. count=0
  99. for item in prosdsored:
  100. pros.append(item[0])
  101. values.append(item[1])
  102. count=count+1
  103. if count>=20:
  104. break
  105.  
  106. colors = ['#FFEC8B','#FFE4C4','#FFC125','#FFB6C1','#CDCDB4','#CDC8B1','#CDB79E','#CDAD00','#CD96CD','#CD853F','#C1FFC1','#C0FF3E','#BEBEBE','#CD5C5C','#CD3700','#CD2626','#8B8970','#8B6914','#8B5F65','#8B2252']# 对应颜色
  107.  
  108. bars = axpro.bar(xticks, values, width=bar_width, edgecolor='none')
  109. axpro.set_ylabel('人数')# 设置标题
  110. axpro.set_xlabel('省份')
  111. axpro.grid()#打开网格
  112. axpro.set_xticks(xticks)# x轴每个标签的具体位置
  113. axpro.set_xticklabels(pros)# 设置每个标签的名字
  114. axpro.set_xlim(0,20)# 设置x轴的范围
  115. axpro.set_ylim([0, 100])# 设置y轴的范围
  116.  
  117. for bar, color in zip(bars, colors):
  118. bar.set_color(color)# 给每个bar分配指定的颜色
  119. height=bar.get_height()#获得高度并且让字居上一点
  120. plt.text(bar.get_x()+bar.get_width()/4.,height,'%.d' %float(height))#写值
  121.  
  122. plt.show()
  123.  
  124. #保存数据
  125. from pandas import DataFrame
  126. data={'NickName':NickName,'Sex':Sex,'Province':Province,'City':City,'Signature':Signature}
  127. frame=DataFrame(data)
  128.  
  129. frame.to_csv('data.csv',index=True,encoding="utf_8_sig")

 itchat的学习路径:https://itchat.readthedocs.io/zh/latest/

python实战===itchat的更多相关文章

  1. zeromq 学习和python实战

    参考文档: 官网 http://zeromq.org/ http://www.cnblogs.com/rainbowzc/p/3357594.html   原理解读 zeromq只是一层针对socke ...

  2. Python实战:美女图片下载器,海量图片任你下载

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  3. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  4. python实战--数据结构二叉树

    此文将讲述如何用python实战解决二叉树实验 前面已经讲述了python语言的基本用法,现在让我们实战一下具体明确python的用法 点击我进入python速成笔记 先看一下最终效果图: 首先我们要 ...

  5. 再一波Python实战项目列表

    前言: 近几年Python可谓是大热啊,很多人都纷纷投入Python的学习中,以前我们实验楼总结过多篇Python实战项目列表,不但有用还有趣,最主要的是咱们实验楼不但有详细的开发教程,更有在线开发环 ...

  6. python实战:用70行代码写了一个山炮计算器!

    python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...

  7. python实战博客

    2018-10-31 更新Logging日志记录以及异常捕获 感谢廖大教程.Python实战 直接在闲置的服务器上开发.阿里云Centos 6.8 64位. 1 搭建开发环境 Python 环境是Py ...

  8. python实战提升--1

    #python实战提升 1. 如何在列表.字典.集合中根据条件筛选数据? python中for _ in range(10)与for i in range(10)有何区别 下划线表示 临时变量, 仅用 ...

  9. 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例

    centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeepe ...

随机推荐

  1. 【bzoj1596】[Usaco2008 Jan]电话网络 树形dp

    题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...

  2. 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币 背包dp

    题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...

  3. Python 源码剖析(五)【DICT对象】

    五.DICT对象 1.散列表概述 2.PyDictObject 3.PyDictObject的创建与维护 4.PyDictObject 对象缓冲池 5.Hack PyDictObject 这篇篇幅较长 ...

  4. zlog使用手册

    zlog使用手册 来源 http://hardysimpson.github.io/zlog/UsersGuide-CN.html Contents Chapter 1  zlog是什么? 1.1   ...

  5. 前端开发学习之——使用jquery/javascript判断及改变checkbox选中状态

    一.使用jquery判断及改变checkbox选中状态 1.使用JQuery判断一个checkbox 是否为选中: (1).attr('checked) 看JQuery版本1.6+返回:”checke ...

  6. 关于Javac编译器的那点事(一)

    Javac是什么? 它是一种编译器,将Java对人非常友好的语言,编译转化对所有机器都非常友好的语言,即:JVM能够识别的语言,也就是Java字节码.而Java字节码,说白了就是一连串二进制数字. J ...

  7. 删边(cip)

    删边(cip) 给出一个没有重边和自环的无向图,现在要求删除其中两条边,使得图仍然保持连通. 你的任务是计算有多少组不合法的选边方案.注意方案是无序二元组. Sol 神题,无从下手啊. 考虑点dfs建 ...

  8. 2017-7-18-每日博客-关于Linux下的鲜为人知的10条命令.doc

    这篇文章的目的是介绍一些少有人知的Linux命令,它们一定会高效地帮你管理你的桌面/服务器. 1. sudo !!命令 没有特定输入sudo命令而运行,将给出没有权限的错误.那么,你不需要重写整个命令 ...

  9. BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵乘法)

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 Description 潘塔 ...

  10. E. Border

    E. Border time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...