用 Python 制作微信好友个性签名词云图
0.前言
上次查看了微信好友的位置信息,想了想,还是不过瘾,于是就琢磨起了把微信好友的个性签名拿到,然后分词,接着分析词频,最后弄出词云图来。
1.环境说明
Win10 系统下 Python3,编译器是 Pycharm,需要安装 itchat、matplotlib、pandas、jieba、wordcloud、numpy、pillow 这几个包
介绍 Pycharm 安装第三方包的方法。
由于某些包不能直接用 Pycharm 安装,所以这里说一下安装的方法。
安装wordcloud
worcloud需要numpy> = 1.5.1,pillow和matplotlib,所以要先安装numpy,pillow和matplotlib。
在下面这个链接找到合适的whl文件,http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud
如果是电脑是64位,python是3.6就下载下面这个。
下载回来就放到Python的目录下,就比如我是把 Python 安装在E:Python36这个目录,就把下载回来的 wordcloud-1.3.3-cp36-cp36m-win_amd64.whl 放在这。
然后按win键+R ,输入cmd,回车
然后cd 到 Python 目录那
接下来就是安装了,pip install wordcloud-1.3.3-cp36-cp36m-win_amd64.whl
除了这个以外,某一个包需要访问外国网站才能安装,具体是哪个就不记得了,好像是 pandas。
2.相关代码
先把需要的东西导入,安装这些包可不简单
import itchat
import matplotlib.pyplot as plt
import re, jieba
import pandas as pd
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL.Image as Image
登录微信
itchat.auto_login(hotReload=True)
friends = itchat.get_friends(update=True)
获取数据
data = pd.DataFrame() # 提出好友的昵称、性别、省份、城市、个性签名,生成一个数据框
columns=['NickName', 'Sex', 'Province', 'City', 'Signature']
for col in columns:
val = []
for i in friends[1:]: # friends[0]是自己的信息,因此我们要从[1:]开始
val.append(i[col])
data[col] = pd.Series(val)
把个性签名中的 emoji 和别的东西过滤一下
siglist = []
for i in data['Signature']:
signature = i.strip().replace('emoji','').replace('span','').replace('class','')
rep = re.compile('1fd+w*|[<>/=]') # 具体含义另行查看
signature = rep.sub('', signature)
siglist.append(signature)
text = ''.join(siglist)
使用结巴分词进行分词,用 matplotlib 把图画出来
word_list = jieba.cut(text, cut_all=True)
word_space_split = ' '.join(word_list)
coloring = np.array(Image.open("E:/Python/wechat/toux.jpg")) #这个路径可以改,最好还是不要改
my_wordcloud = WordCloud(background_color="white", max_words=2000,
mask=coloring, max_font_size=100, random_state=42, scale=2,
font_path="C:/Windows/Fonts/simkai.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()
3.运行
先说明一下,如果能看懂代码,知道该怎么把必要的文件弄好,那就不怎么需要看下面这个。
如果看得不太理解,运行前一定要在 E 盘建立一个文件夹。路径是 E:PythonWechat ,然后在文件夹中放入一张命名为 toux.jpg 的照片,具体图片看个人喜好。
最好就是下图这样的照片
这样生成的词云就会很好看
意思就是图片要有白色的背景,人物颜色较鲜艳,人物突出(图片分辨率要高)
把代码安装顺序复制到 Pycharm,然后鼠标右键,选择 Run,扫描弹出来的二维码,登录微信网页版,确认后等待一下,看到下图就说明代码运行得很完美,成功运行,没有报错
然后稍微等一下就可以看到词云图了。
4.相关说明
参考链接:http://blog.csdn.net/Lee20093905/article/details/79052795
wordcloud的项目主页兼说明:https://github.com/amueller/word_cloud
wordcloud的whl文件:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud
itchat 的项目主页:https://github.com/littlecodersh/itchat
itchat 的说明文档:http://itchat.readthedocs.io/zh/latest/
pandas的项目主页:https://github.com/pandas-dev/pandas
pandas 的说明文档:http://pandas.pydata.org/pandas-docs/stable/
matplotlib的主页:https://matplotlib.org/
题图:Photo by Lauren Peng on Unsplash
- 过程化SQL、存储过程、自定义函数
- mybatis 的一些常用功能
- 常用但容易忘记的sql语句(sql server为主)
- 利用java的接口实现回调
- java的静态属性,静态块,构造函数的执行顺序
- bootstrap validator 使用示例
- 如何通过jq和php实现返回父级页面(附带记忆功能)
- springmvc下载文件
- PHP获取URL地址的一些坑
- 使用ResourceBundle读取配置文件
- 关于exp statistics的问题和简单测试(82天)
- laravel访问路由在nginx服务器上无法处理
- How Tomcat Works, A Guide to Developing Your Own Java Servlet Container
- 【开发指南】如何为nexus 5编译固件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mysql 常用查询性能优化
- 并发编程的基础
- Apache Atlas系列 -- 部署
- 深入浅出Spark的Checkpoint机制
- 基础知识 | R语言绘图保存的pdf图片无法显示中文怎么办?
- 基础知识 | R语言绘图基础之柱形图
- 高维数据 | R语言绘图基础之主成分分析
- 高维数据 |R语言数据可视化之t-SNE
- 基础知识 | R语言数据分析之控制流
- 基础知识 | R语言数据处理之日期值的转换
- 云开发 CloudBase CMS 内容管理系统正式开源啦!
- 高维数据 | R语言数据可视化之热力图
- 高维数据 | R语言数据可视化之日历图
- 打卡群刷题总结0804——二叉树的中序遍历
- 基础知识 | R语言数据管理之SQL语句