微信小项目——统计好友人数,省市分布,排序并统计好友签名特点,用pyechat显示图像并存为HTML文件

此小项目参考《微信好友数据分析 》——余本国

一、功能介绍:

  本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并
进行一些简单的数据分析,功能包括:
  1.爬取好友列表,显示好友昵称、性别和地域和签名, 文件保存为 xlsx 格式
  2.统计好友的地域分布,并且做成词云和可视化展示在地图上
  3.获取所有好友的头像,合并成一张大图

三、运行环境及相关库的安装

  1. Python 3.x(使用Anaconda的spyder编辑器)
  2. 使用到的Python库安装:
  • 在Anaconda的Anaconda Prompt下运行下列命令,安装前先升级pip,代码如下:
Python -m pip install --upgrade pip
  • 安装 wxpy: pip install wxpy
     
  • 安装 PIL: pip install pillow
     
  • 安装 pyecharts:pip install pyecharts
     
  • 安装 Itchat: pip install itchat
     
  • 安装 Jieba: pip install jieba
     
  • 安装 Pandas:pip install Pandas
     
  • 安装 Numpy:pip install Numpy
  • 安装地图数据包:pip install echarts-china-provinces-pypkg    
    •   pip install echarts-countries-pypkg 

四、如何运行?(初次运行可以使用spyder的IPython console进行交互式输入)

  以上库安装好了以后就可进行以下步骤coding

  1.登录——获取用户信息:

  打开spyder的IPython console 进行交互式编写

微信小项目——统计好友人数,省市分布,排序并统计好友签名特点,用pyechat显示图像并存为HTML文件

 

In [3]: from wxpy import * #导入模块

In [4]: bot=Bot(cache_path=True)#初始化机器人,选择缓存模式(扫码)登录
Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Loading the contact, this may take a little while.
Login successfully as 舒心陈

In [5]: friend_all=bot.friends()

In [6]: print(friend_all[0].raw)#friend_all[0]是你的微信昵称,.raw则是获取你的全部信息
{UserName: @616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c, City: ‘‘, DisplayName: ‘‘, PYQuanPin: ‘‘, RemarkPYInitial: ‘‘, Province: ‘‘, KeyWord: ‘‘, RemarkName: ‘‘, PYInitial: ‘‘, EncryChatRoomId: ‘‘, Alias: ‘‘, Signature: 好开心啊~, NickName: 舒心陈, RemarkPYQuanPin: ‘‘, HeadImgUrl: /cgi-bin/mmwebwx-bin/webwxgeticon?seq=879163398&username=@616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c&skey=@crypt_6e5fb2f2_41b8311b5e5bb5ea58c12688ff48ccf9, UniFriend: 0, Sex: 1, AppAccountFlag: 0, VerifyFlag: 0, ChatRoomId: 0, HideInputBarFlag: 0, AttrStatus: 0, SnsFlag: 1, MemberCount: 0, OwnerUin: 0, ContactFlag: 0, Uin: 3129189532, StarFriend: 0, Statues: 0, MemberList: [], WebWxPluginSwitch: 0, HeadImgFlag: 1}

2、统计用户信息

In [7]: len(friend_all) #统计查阅了多少好友
Out[7]: 173
  
  为了获取好友信息中需要的部分,我们对信息需要进行处理。从上面的获取信息全字段来看,我们获取的每位好友的信息都是一个字典,字典里只有‘City‘、‘Province‘、‘Signature‘、
‘NickName‘、‘HeadImgUrl‘、‘Sex‘是我们需要的。下面我们就对这几个 key 进行提取。方法是:对这几个 key 提取相应的值,放入一个列表 list_0 中,即每个好友的这些 key
的值做成了一个列表,在对所有的好友使用 for 循环进行同样的操作,将所有好友的列表做成一个大列表 lis 的元素,即列表中的元素是列表。 

 

In[7]:lis=[]
In[8]:for a_friend in friend_all:
    NickName=a_friend.raw.get(NickName,None)
    #Sex=a_friend.raw.get(‘Sex‘,None)
    Sex={1:"",2:"",0:"其他"}.get(a_friend.raw.get(Sex,None),None)
    City=a_friend.raw.get(City,None)
    Province=a_friend.raw.get(Province,None)
    Signature=a_friend.raw.get(Signature,None)
    HeadImgUrl=a_friend.raw.get(HeadImgUrl,None)
    HeadImgFlag=a_friend.raw.get(HeadImgFlag,None)
    list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag]
    lis.append(list_0)
 
为了将 lis 列表能够保存到 excel 中,便于后面的使用,也便于此方法的再次使用,我们将这个功能写成函数 lis2e07(),即将这种列表套列表的 lis 转成 07 版以上的 exce 进行保存在本地。 

 

def lis2e19(filename,lis):
    ‘‘‘
    将列表写入 07 版 excel 中,其中列表中的元素是列表.
    filename:保存的文件名(含路径)
    lis:元素为列表的列表,如下:
    lis = [["名称", "价格", "出版社", "语言"],
            ["暗时间", "32.4", "人民邮电出版社", "中文"],
            ["拆掉思维里的墙", "26.7", "机械工业出版社", "中文"]]
    ‘‘‘
    import openpyxl
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.title = list2excel19
    file_name = filename
    for i in range(0, len(lis)):
        for j in range(0, len(lis[i])):
            sheet.cell(row=i+1, column=j+1, value=str(lis[i][j])) 
    
    wb.save(file_name)
    print("写入数据成功!")
lis2e19(rC:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx,lis)

 

将列表信息存储到 excel 中,文件名为 yubg1.xlsx。 
lis2e19(rC:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx,lis)

打开文件(部分截图):

微信小项目——统计好友人数,省市分布,排序并统计好友签名特点,用pyechat显示图像并存为HTML文件

 

对数据进行初略的认知分析。

#对数据进行初步探索
#方法一
#粗略获取好友的统计信息
data = friend_all.stats_text(total=True, sex=True,top_provinces=10, top_cities=100)
from pandas import read_excel
df=read_excel(rC:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx,sheetname=list2excel19)
print(data)

 

部分数据截图如下:

微信小项目——统计好友人数,省市分布,排序并统计好友签名特点,用pyechat显示图像并存为HTML文件

 

五、功能模块代码

微信小项目——统计好友人数,省市分布,排序并统计好友签名特点,用pyechat显示图像并存为HTML文件

上一篇:标准C++中的string类的用法总结


下一篇:微信好友分析