Python利用itchat对微信好友分析(window,PyCharm)

一、前言

今天是假期的第七天,厌倦那些无聊的生活。于是对着实验楼的教程,就开干了。

那做好的感受是什么?

其实,谈不上什么收获,都是抄别人的脚本,再调试一波。

如果问学到了什么,也没学到什么。

二、实验效果

三、实验过程

1.搭建虚拟环境,并且安装相应的包

--打开cmd:

  • mkvirtualenv wechats
  • pip install itchat pillow
  • pip install pyecharts pyecharts_snapshot echarts-countries-pypkg echarts-china-provinces-pypkg echarts-china-cities-pypkg

 2.在pycharm上新建“纯python”项目,添加相应的虚拟环境

 3.新建python文件,输入一下代码:

# -*- coding:utf-8 -*-

import itchat
from collections import Counter
from pyecharts import Bar
import re
from pyecharts import Map

# 实现获取朋友指定信息的方法
def get_key_info(friends_info, key):
    return list(map(lambda friend_info: friend_info.get(key), friends_info))


# 获取朋友的相关信息,生成一个 {key:[value1,value2,...],} 类型的字典,最后返回该字典
def get_friends_info(friends):
    friends_info = dict(
    username=get_key_info(friends, 'UserName'), # 用户名
    sex=get_key_info(friends, 'Sex'), # 性别
    province=get_key_info(friends, 'Province'), # 省份
    city=get_key_info(friends, 'City') # 城市
)
    return friends_info

if __name__ == '__main__':
    itchat.auto_login(hotReload=True)
    friends = itchat.get_friends(update=True)

from pyecharts import Page, Pie

# 处理数据
def count_nums(new_list):
    new_dict = {}
    for i in new_list:
        if bool(re.search('[a-z]|[A-Z]', i)): # 如果带英文字母(要么是国外,要么是乱写的)就跳出本次循环
            continue
        elif not new_dict.__contains__(i):
            new_dict[i] = 1
        else:
            new_dict[i] += 1
    new_dict.pop('') # 去掉空的键
    return new_dict


def analysis(friends):
    friends_info = get_friends_info(friends)

# 男女性别比例
    sex_list = friends_info['sex']

    sex_dict = dict(Counter(sex_list))
    attr = ["未知", "男性", "女性"]
    value = [sex_dict[0], sex_dict[1], sex_dict[2]]
    page = Page()
    chart1 = Pie("微信好友性别比例图",title_pos='center') #标题放在中间
    chart1.add("", attr, value, is_label_show=True, legend_orient="vertical", legend_pos="left") #显示标签,图例组件垂直分布,图例位于左侧
    page.add(chart1) #把chart1添加到页面中

 #中国省级分析
    province_list = friends_info['province']
    province_dict = count_nums(province_list)
    attr, value = list(province_dict.keys()), list(province_dict.values())
    # 中国省级分析画图
    chart2 = Map('好友省级分布(中国地图)', width=1200, height=600) #设置图像的长和高的像素值
    chart2.add('', attr, value, maptype='china', is_label_show=True, is_visualmap=True, visual_text_color='#000') #地图类型为中国,显示标签数据,使用视觉映射组件,文本颜色为黑色
    page.add(chart2) #把chart2添加到页面中

# 中国城市分析(取前10个人数最多的城市)
    city_list = friends_info['city']
    city_dict = count_nums(city_list)
    top_ten_city = dict(sorted(city_dict.items(), key=lambda x: x[1], reverse=True)[0:10])
    attr, value = list(top_ten_city.keys()), list(top_ten_city.values())
# 中国城市分析画图
    chart3 = Bar('好友城市分布Top10柱状图', width=900, height=500) #设置图形的长和宽
    chart3.add('', attr, value, is_stack=False,is_label_show=True,bar_category_gap='20%') #把数据堆叠设置为False,显示标签,类目轴的柱状距离为20%
    page.add(chart3) #把chart3添加到页面中

    page.render('analysisResult.html') #生成整个页面,命名为analysisResult.html




if __name__ == '__main__':
    itchat.auto_login(hotReload=True)
    friends = itchat.get_friends(update=True)

    analysis(friends)

4.运行,同目录下自动生成HTML文件,再运行HTML页面即可

 四、总结

  • 学习时不能急于求成,上面就是一种急于求成的做法。照着上面的教程,对,你做出来了,你能跟别人解释清楚吗?那些代码是什么意思?能用在什么场景?等等,这都需要你思考。
  • 脚本是从上往下执行,前面的函数不能调用后面的函数。如下如:

  • 虽然实验楼的教程是把分析方法分成很多部分了,你得整理成一个函数
  • 注意缩进

猜你喜欢

转载自blog.csdn.net/lezeqe/article/details/86539356
今日推荐