微信API接口应用及可视化数据分析

from os import path
import re, jieba
import matplotlib.font_manager as fm
from pylab import *
from wxpy import *
import re, jieba
import matplotlib.pyplot as plt
#词云生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要对中文进行处理
import matplotlib.font_manager as fm
from python练习脚本.friends_ana import jiebaclearText, make_wordcloud, d
from pyecharts import Bar, Grid, Line
#机器人
def robots(name):
    my_friend = ensure_one(bot.search(name))
    # 调用图灵机器人API
    tuling = Tuling(api_key='254507344a264d67a9eaa68264e9e5d1')
    # 使用图灵机器人自动与指定好友聊天
    @bot.register(my_friend)
    def reply_my_friend(msg):
        tuling.do_reply(msg)
    embed()
# 向文件传输助手发送消息
def test(str):

    bot.file_helper.send(str)
def mesage():
    #获取好友列表(包括自己)
    my_friends = bot.friends(update=False)
    '''
    stats_text 函数:帮助我们简单统计微信好友基本信息
    简单的统计结果的文本
        :param total: 总体数量
        :param sex: 性别分布
        :param top_provinces: 省份分布
        :param top_cities: 城市分布
        :return: 统计结果文本
    '''
    print(my_friends.stats_text())
#折线图分析好友省份分布
def lines(attr,num):
    line = Line("Top 10 cities", title_top="50%")
    line.add(
    "人数最多",
    attr,
    num,
    mark_point=["max", "min"],
    legend_top="50%",
    )
    grid = Grid()
    grid.add(line, grid_top="60%")
    grid.render('H:grid.html')
#给指定朋友发送消息,图片
def sendtofriend(name):
    # 查找朋友
    my_friend = bot.friends().search(name)[0]
    # 发送消息
    my_friend.send('hello!')
    '''
    除此之外还有可以发送一下内容,自己动手尝试吧
    发送图片
    my_friend.send_image('hello.png')
    发送视频
    my_friend.send_video('hello.mp4')
    发送文件
    my_friend.send_file('hello.rar')
    '''
#微信城市分布条形图
def city(weight,city):
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    n_groups = 10
    fig, ax = plt.subplots()
    index = np.arange(n_groups)
    bar_width = 0.35
    opacity = 0.4
    error_config = {'ecolor': '0.3'}
    rects1 = ax.bar(index, weight, bar_width,alpha=opacity, color='b', error_kw=error_config,label='城市')
    ax.set_xlabel('城市名称')
    ax.set_ylabel('数据占比(%)')
    ax.set_title('好友城市Top10')
    ax.set_xticks(index + bar_width / 2)
    ax.set_xticklabels((city))
    ax.legend()
    fig.tight_layout()
    plt.show()
# 定义个函数式用于分词
def jiebaclearText(text):
    # 定义一个空的列表,将去除的停用词的分词保存
    mywordList = []
    # 进行分词
    seg_list = jieba.cut(text, cut_all=False)
    # 将一个generator的内容用/连接
    listStr = '/'.join(seg_list)
    listStr = listStr.replace("class", "")
    listStr = listStr.replace("span", "")
    listStr = listStr.replace("emoji", "")
    # 打开停用词表
    f_stop = open(stopwords_path, encoding="utf8")
    # 读取
    try:
        f_stop_text = f_stop.read()
    finally:
        f_stop.close()  # 关闭资源
    # 将停用词格式化,用\n分开,返回一个列表
    f_stop_seg_list = f_stop_text.split("\n")
    # 对默认模式分词的进行遍历,去除停用词
    for myword in listStr.split('/'):
        # 去除停用词
        if not (myword.split()) in f_stop_seg_list and len(myword.strip()) > 1:
            mywordList.append(myword)
    return ' '.join(mywordList)

# 生成词云图
def make_wordcloud(text1, i):
    bg = plt.imread(d + r"/image/爱心01.jpg")
    # 生成
    wc = WordCloud(  # FFFAE3
        background_color="#FFFFFF",  # 设置背景为白色,默认为黑色
        width=990,  # 设置图片的宽度
        height=440,  # 设置图片的高度
        mask=bg,
        margin=10,  # 设置图片的边缘
        max_font_size=70,  # 显示的最大的字体大小
        random_state=20,  # 为每个单词返回一个PIL颜色
        font_path=d + '/static/simkai.ttf'  # 中文处理,用系统自带的字体
    ).generate(text1)
    # 为图片设置字体
    my_font = fm.FontProperties(fname=d + '/static/simkai.ttf')
    # 图片背景
    bg_color = ImageColorGenerator(bg)
    # 开始画图
    plt.imshow(wc.recolor(color_func=bg_color))
    # 为云图去掉坐标轴
    plt.axis("off")
    # 画云图,显示
    # 保存云图
    wc.to_file(d + r"/image/render_0%d.png" % i)
def wordcloud():
    # 清洗数据,生成词云图
    # 获取当前的项目文件加的路径
    d = path.dirname(__file__)

    # 微信昵称
    nick_name = ''
    #  微信个性签名
    wx_signature = ''
    for friend in my_friends:
        # 微信昵称:NickName
        nick_name = nick_name + friend.raw['NickName']
        # 个性签名:Signature
        wx_signature = wx_signature + friend.raw['Signature']

    nick_name = jiebaclearText(nick_name)
    wx_signature = jiebaclearText(wx_signature)
    make_wordcloud(nick_name, 1)
    make_wordcloud(wx_signature, 2)
    # 获取微信公众号名称
    wx_public_name = ''
    # # 公众号简介
    wx_pn_signature = ''
    # 获取微信公众号列表
    my_wx_pn = bot.mps(update=False)
    for wx_pn in my_wx_pn:
        wx_public_name = wx_public_name + wx_pn.raw['NickName']
        wx_pn_signature = wx_pn_signature + wx_pn.raw['Signature']

    wx_public_name = jiebaclearText(wx_public_name)
    make_wordcloud(wx_public_name, 3)
    wx_pn_signature = jiebaclearText(wx_pn_signature)
    make_wordcloud(wx_pn_signature, 4)
if __name__=='__main__':

    bot = Bot(cache_path="H:wxpy.pkl")
    # 获取好友列表(包括自己)
    my_friends = bot.friends(update=False)
    # 读取停用词表
    stopwords_path = d + '/static/stopwords.txt'
    wordcloud()
    #robots('姓名')
    #test('hello')
    # 城市分布数量权值
    # city_weight = (10.2, 8.98, 8.57, 2.04, 2.04, 1.63, 1.63, 1.22, 1.22, 1.22)
    # city=('荆州', '武汉', '黄石', '海淀', '广州','深圳', '黄冈', '杭州', '长沙', '昌平')
    # city(city_weight,city)
    mesage()

 

你可能感兴趣的:(Python学习)