用python 分析微信好友信息并生成词云

2023-11-17

在知乎上偶然看到有人推荐itchart这个微信接口,抱着好奇的想法尝试了以下,果然非常好玩。
官方链接:http://itchat.readthedocs.io/zh/latest/#itchat

目录结构

这里写图片描述
get_info.py这个类用来爬取好友信息并保存到指定文件

import itchat
import os
import time

basepath = os.path.dirname(os.path.realpath(__file__))
download_path = basepath+'\downloads'+ '\\'

# 调用itchat接口登录并拉取数据
itchat.login()
friends = itchat.get_friends(update=True)[0:]

fmt='%Y%m%d%H%M%S'      #定义时间显示格式
Date=time.strftime(fmt,time.localtime(time.time()))

download_file_name = 'friendslist_'+friends[0]['NickName']+ '_' + Date + '.txt'

f = open(download_path+download_file_name,'wb')
print(download_path+download_file_name)

for i in friends[1:]:
    friend = (str(i) + "\n").encode(encoding='gb18030')
    # print(str(i))
    f.write(friend)

f.close()

analyse.py这个类根据下载的好友数据分析好友信息

# Author:Jason.wang

import re
import os
import time

base_pic = "C:/Users/Think/Pictures/Saved Pictures/beb28c538ac52a91.jpg"
source_file = "friendslist_雨佳Clara_20170724223344.txt"
source_file = "friendslist_say_20170724132202.txt"

basepath = os.path.dirname(os.path.realpath(__file__))
download_file = basepath+'\downloads\\'+ source_file

fs_str = ''
with open(download_file,'rb') as f:
    fs_str = f.read().decode('gb18030')

friends = fs_str.split('\n')

# 初始化计数器 
male = female = other = 0
# 所有省份
Provinces_list = []
#friends[0]是自己的信息,所以要从friends[1]开始 
for i in friends:
    if i.__len__()>0:
        i = i.replace('<ContactList: [','"<ContactList: [')
        i = i.replace(']>',']>"')
        friend = eval(i)

        # 统计性别
        sex = friend["Sex"]
        if sex == 1:
            male += 1
            exit
        elif sex ==2:
            female += 1
        else:
            other+=1

        # 统计地区
        Province = friend["Province"]
        Provinces_list.append(Province)


#计算朋友总数 
total = len(friends)
#打印出自己的好友性别比例 
print("总好友数:  %d" % total + "\n" +
    "男性好友:  %d 个,占比 %.2f%%" % (male,(float(male)/total*100)) + "\n" +
      "女性好友:  %d 个,占比 %.2f%%" % (female,(float(female) / total * 100)) + "\n" +
      "不明性别好友:  %d 个,占比 %.2f%%" % (other,(float(other) / total * 100)))



Provinces_set = set(Provinces_list)
Provinces_dict = {}
for i in Provinces_set:
    Provinces_dict[i] = Provinces_list.count(i)
# 对省份字典按value排序
Provinces_dict = sorted(Provinces_dict.items(),key=lambda asd:asd[1],reverse=True)

print("===============人数排名前10地区如下==================")
top = 0
for k,v in Provinces_dict:
    if top<10:
        print("%s : %d 个,占比 : %.2f%%" % (k,v,float(v)/total*100))
    top+=1

输出结果:
这里写图片描述

ciyun.py根据签名生成词云

# -*- coding:UTF-8 -*-
# Author:Jason.wang
import re
import os
import time

base_pic = "C:/Users/Think/Pictures/Saved Pictures/beb28c538ac52a91.jpg"
source_file = "friendslist_雨佳Clara_20170724223344.txt"
# source_file = "friendslist_say_20170724132202.txt"

basepath = os.path.dirname(os.path.realpath(__file__))
download_file = basepath+'\downloads\\'+ source_file

fs_str = ''
with open(download_file,'rb') as f:
    fs_str = f.read().decode('gb18030')

friends = fs_str.split('\n')


siglist = []
for i in friends:
    if i.__len__()>0:
        i = i.replace('<ContactList: [','"<ContactList: [')
        i = i.replace(']>',']>"')
        friend = eval(i)
        # print(friend)
        # print(friend["Signature"])
        signature = friend["Signature"].strip().replace("span","").replace("class","").replace("emoji","")
        rep = re.compile("1f\d+\w*|[<>/=]")
        signature = rep.sub("",signature)
        siglist.append(signature)
text = "".join(siglist)

import jieba
wordlist = jieba.cut(text,cut_all=True)
word_space_split = " ".join(wordlist).replace("\n","")

print(word_space_split)



import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL.Image as Image

coloring = np.array(Image.open(base_pic))
my_wordcloud = WordCloud(background_color="white",max_words=2000,
                         mask=coloring,max_font_size=60,random_state=42,scale=2,
                        font_path="C:/windows/fonts/SimHei.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()

效果:
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python 分析微信好友信息并生成词云 的相关文章

随机推荐

  • 这台计算机无法连接到服务器,请确认网络连接是否正常,Win7玩英雄联盟提示“无法连接到服务器,请检查您的网络连接”六种解决方法...

    说到LOL英雄联盟相信很多玩家都比较熟悉了 它是一款网络游戏 但是最近有用户说Win7系统玩英雄联盟的时候提示 连接失败 无法连接到服务器 请检查您的网络连接 如下图所示 导致游戏无法顺利进行 怎么办呢 下面小编给大家分享Win7玩英雄联盟
  • Shell脚本之数字大小排列(小到大)

    脚本内容 bin bash read p 请输入一个数字 num1 read p 请输入一个数字 num2 read p 请输入一个数字 num3 tmp 0 如果 num1 大于 num2 就把 num1 和和 num2 的值对调 确保
  • defineProperty和proxy区别

    1 不同点 区别一 defineProperty 是对属性劫持 proxy 是对代理对象 如果需要监听某一个对象的所有属性 需要遍历对象的所有属性并对其进行劫持来进行监听 Object keys data forEach key gt le
  • 重构——在对象之间搬移特性(2)

    Inline Class 某个类并没有做太多的事情 应该将这个类的所有特性搬移到另一个类中 然后移除原类 过程与Extract Class相反 不再做介绍 Hide Delegate 客户通过一个委托关系来调用另一个对象 应当在服务类上建立
  • 回顾 Spring

    什么是Spring spring是一个为了简化企业级开发 它是轻量级的 使用IoC AOP等进行开发的一站式框架 比如 控制反转 依赖注入 面向切面编程 spring事务管理 通过spring继承其他框架 Spring继承jdbc myba
  • Python入门之魔法方法

    魔法方法 魔法方法总是被双下划线包围 例如 init 魔法方法是面向对象的 Python 的一切 如果你不知道魔法方法 说明你还没能意识到面向对象的 Python 的强大 魔法方法的 魔力 体现在它们总能够在适当的时候被自动调用 魔法方法的
  • I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁

    字节格式 发送到SDA线上的每个字节必须是8位 每次传输的字节数量是不受限制的 每个字节后必须跟着一个ACK应答位 数据从最高有效位 MSB 开始传输 如果从机要执行一些功能后才能接收或者发送新的完整数据 比如说服务一个内部中断 那么它可以
  • STM32实现水下四旋翼(六)传感任务2——姿态解算代码实现(使用角度传感器)

    目录 一 绪论 二 JY901B与JY GPSIMU角度传感器介绍 1 角度传感器简介 2 JY901B的IIC通讯协议 3 JY GPSIMU的串口通讯协议 三 STM32的IIC与串口读取三轴角度驱动程序 1 IIC读取JY901B角度
  • Wide&deep模型详解

    谷歌于2016年提出的Wide Deep模型 Wide Deep模型的主要思路正如其名 是由单层的Wide部分和多层的Deep部分组成的混合模型 其中 Wide部分的主要作用是让模型具有较强的 记忆能力 Deep部分的主要作用是让模型具有
  • 为什么选择SoilVUE10 土壤湿度和温度剖面传感器

    几十年来 时域反射仪 TDR 一直是测量土壤含水量的主要方法之一 简单地说 电磁脉冲是沿着棒 或波导 发送的 这些脉冲在沿波导的不同点被反射 在从电缆到波导的过渡处以及在波导的末端处反射最为强烈 然后记录脉冲的传播时间 脉冲传播时间的测量受
  • Taichi安装与应用

    1 Taichi安装 看到知乎大神的作品后 99行代码的 冰雪奇缘 https zhuanlan zhihu com p 97700605 便尝试使用了一下Taichi 在Taichi官网上写的Python3 6 或者 Python3 7
  • ios如何上传文件到服务器,ios通过ftp上传文件到服务器

    ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 怎样上传文件到Windows操作系统云服
  • mysql唯一索引与null

    1 建表 CREATE TABLE test user id bigint 20 unsigned NOT NULL AUTO INCREMENT name varchar 255 NOT NULL age int 11 DEFAULT N
  • error getting endorser client for channel: endorser client failed to connect to XXX 问题的解决方案

    在启动hyperledger fabric 的示例程序 first network 的过程中遇到了 error getting endorser client for channel endorser client failed to co
  • mysql 根据id修改,一个id却修改了两条

    原来是因为前同事埋的坑 id用的不是bigint而是varchar hash碰撞 直接1557276925125128192和1557276925125128193id一起修改了 当id不连着的时候 又发现不了这个问题 id改成bigint
  • 图像验证码识别(四)——灰度化和二值化

    一 灰度化 灰度化应用很广 而且也比较简单 灰度图就是将白与黑中间的颜色等分为若干等级 绝大多数位256阶 在RGB模型种 黑色 R G B 0 与白色 R G B 255 那么256阶的灰度划分就是R G B i 其中i取0到255 从前
  • grub2各种手动命令引导教程(引导Ubuntu及安装镜像,arch Linux及安装镜像,Windows及winPE)

    手动引导ubuntu的iso镜像文件从而安装ubuntu grub gt 代表命令的开始 假设ubuntu镜像在U盘的第一个分区的根目录下即 hd0 1 ubuntu 18 04 desktop amd64 iso 手动引导下可以按TAB键
  • Java的线程同步 & 并发操作

    并发 CUP在同一时间或同一时段内只能执行一件事情 而不同时件执行时 切换得十分快速 因为CUP的频率非常高 切换的速度人根本感受不出来 同步 同步是多个任务进行时 按照一定的规律进行着 线程并发 同一时间间隔中 有多个线程在同时执行 就是
  • github使用,上传,上传失败解决方案----03

    1 首先登上github GitHub Where the world builds software GitHub 发现登不上 在设置中找到代理关掉他或者打开不断切换 我就是这么试的他就可以登录了 2 创建账号 首先创建账号 根据提示下一
  • 用python 分析微信好友信息并生成词云

    在知乎上偶然看到有人推荐itchart这个微信接口 抱着好奇的想法尝试了以下 果然非常好玩 官方链接 http itchat readthedocs io zh latest itchat 目录结构 get info py这个类用来爬取好友