python分析好友情况,并且制作机器人聊天

编程入门 行业动态 更新时间:2024-10-24 20:21:14

python分析好友情况,并且制作<a href=https://www.elefans.com/category/jswz/34/1771107.html style=机器人聊天"/>

python分析好友情况,并且制作机器人聊天

1首先安装Pyechart库

打开cmd,在cmd中使用pip命令安装pyecharts库,如下所示:
pip install pyecharts -i / --trusted-host mirrors.aliyun

 

2我们先分析我们好友性别比例情况吧,可用该函数实现。
 1 def fun_analyse_sex(friends):
 2     sexs = list(map(lambda x:x['Sex'],friends[1:]))#收集性别数据
 3     counts = list(map(lambda x:x[1],Counter(sexs).items()))#统计不同性别的数量
 4     counts = sorted(counts)
 5     labels = ['secret','male','female']#2:女,1:男,0:保密
 6     colors = ['red','yellow','blue']
 7     plt.figure(figsize=(8,5), dpi=80)
 8     plt.axes(aspect=1)
 9     plt.pie(counts, #性别统计结果
10     labels=labels, #性别展示标签
11     colors=colors, #饼图区域配色
12     labeldistance = 1.1, #标签距离圆点距离
13     autopct = '%3.1f%%', #饼图区域文本格式
14     shadow = False, #饼图是否显示阴影
15     startangle = 90, #饼图起始角度
16     pctdistance = 0.6 #饼图区域文本距离圆点距离
17     )
18     plt.legend(loc='upper left')#标签位置
19     plt.title('mywechat''%sfemale and male' % friends[0]['NickName'])
20     plt.show()
 

运行的显示效果如下:

 

 



哈哈,比例好像有点不对。
3我们再来试试分析微信朋友的个性签名吧,并把它分为积极,消极和中性,且做成词云图。
def fun_analyse_Signature(friends):signatures = ''emotions = []for friend in friends:signature = friend['Signature']if signature != None:signature = signature.strip().replace("span","").replace("class","").replace("emoji","")#去除无关数据signature = re.sub(r'1f(\d.+)',"",signature)if len(signature) > 0:nlp = snownlp.SnowNLP(signature)emotions.append(nlp.sentiments)#nlp.sentiments:权值signatures += " ".join(jieba.analyse.extract_tags(signature,5))#关键字提取back_coloring = np.array(Image.open("xiaohuangren.jpg"))#图片可替换word_cloud2 = WordCloud(font_path = 'simkai.ttf',background_color = 'white',max_words = 1200,mask = back_coloring,margin = 15)word_cloud2.generate(signatures)image_colors = ImageColorGenerator(back_coloring)plt.figure(figsize=(8,5),dpi=160)plt.imshow(word_cloud2.recolor(color_func=image_colors))plt.axis("off")plt.show()word_cloud2.to_file("signatures.jpg")
#人生观count_positive = len(list(filter(lambda x:x>0.66,emotions)))#大于0.66为积极count_negative = len(list(filter(lambda x:x<0.33,emotions)))#小于0.33为消极count_neutral = len(list(filter(lambda x:x>=0.33 and x <= 0.66,emotions)))labels = [u'积极',u'中性',u'消极']values =(count_positive,count_neutral,count_negative)plt.rcParams['font.sans-serif'] = ['simHei']plt.rcParams['axes.unicode_minus'] = Falseplt.xlabel("情感判断")plt.ylabel("频数")plt.xticks(range(3),labels)plt.legend(loc='upper right')plt.bar(range(3),values,color='rgb')plt.title(u'%s的微信好友签名信息情感分析情况' % friends[0]['NickName'])plt.show()
 

 

效果运行如下:

生成柱状图效果


4我们再来分析微信好友数量和群数量情况吧,代码如下

import itchat
from itchat.content import TEXT
from itchat.content import *
import sys
import time
import re
import os@itchat.msg_register([TEXT,PICTURE,FRIENDS,CARD,MAP,SHARING,RECORDING,ATTACHMENT,VIDEO],isGroupChat=True)
def receive_msg(msg):groups  = itchat.get_chatrooms(update=True)friends = itchat.get_friends(update=True)print ("群数量:",len(groups))for i in range(0,len(groups)):print (i+1,"--",groups[i]['NickName'],groups[i]['MemberCount'],"人")print ("好友数量",len(friends)-1)for f in range(1,len(friends)):#第0个好友是自己,不统计if friends[f]['RemarkName']: # 优先使用好友的备注名称,没有则使用昵称user_name = friends[f]['RemarkName']else:user_name = friends[f]['NickName']sex = friends[f]['Sex']print (f,"--",user_name,sex)
itchat.auto_login(hotReload=True)
itchat.run()
 

 


运行效果如下: 下面一些就不截图了。




5我们再来做个好友所在地分析吧:代码如下:(先把好友信息存进csv文件里面,在把csv文件内容用地图显示)
def analyseLocation(friends):headers = ['NickName','Province','City']with open('F:\\www\cgi-bin\wechat_data.xlsx','w',encoding='utf-8',newline='',) as csvFile:writer = csv.DictWriter(csvFile, headers)writer.writeheader()for friend in friends[1:]:row = {}row['NickName'] = friend['NickName']row['Province'] = friend['Province']row['City'] = friend['City']writer.writerow(row)
def shou_data_in_countrymap(save_road,file_name,sheet_name='wechat1',\column_name='Province'):'''将这些个好友在全国地图上做分布'''f=open(file_name,'rb')data=pd.read_excel(f,sheetname=sheet_name)province_list = data[column_name].fillna('NAN').tolist()#将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换count_province = pd.value_counts(province_list)#对 list 进行全频率统计value =count_province.tolist() attr =count_province.index.tolist()map=Map("各省微信好友分布", width=1200, height=600) map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000',is_label_show = True) #显示地图上的省份
    map.show_config() map.render(save_road+'map1'+'.html')f.close()

 

效果如下:


 





 






6最后我们来做个微信机器人聊天:代码如下(我们要申请一个茉莉机器人) 可以在这里申请一个:/
import itchat
import requestsdef get_response(msg):apiurl = '.php'  #moli机器人的网址data={"question": msg,    #获取到聊天的文本信息"api_key": "215bbeaf9f4788d1c57d3c06ec76b659","api_secret": "cjoxg5lqrt58"}r=requests.post(apiurl,data=data)  #构造网络请求return r.text
@itchat.msg_register(itchat.content.TEXT)     #好友消息的处理
def print_content(msg):return get_response(msg['Text'])
@itchat.msg_register([itchat.content.TEXT], isGroupChat=True)  #群消息的处理
def print_content(msg):return get_response(msg['Text'])
itchat.auto_login(True)           #自动登录
itchat.run()
 

 

运行效果后会有个二维码扫描就会自动回复消息了。
好了 到了完整代码了:
import itchat
import numpy as np
#import os
from collections import Counter
import matplotlib.pyplot as plt
#from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
from PIL import Image
#import time
import re
import snownlp
import jieba
import jieba.analyse
import pandas as pd
#from pandas import DataFrame
#import openpyxl
import csv
from pyecharts import Mapdef fun_analyse_sex(friends):sexs = list(map(lambda x:x['Sex'],friends[1:]))#收集性别数据counts = list(map(lambda x:x[1],Counter(sexs).items()))#统计不同性别的数量counts = sorted(counts)labels = ['保密','男','女']#2:女,1:男,0:保密colors = ['red','yellow','blue']plt.figure(figsize=(8,5), dpi=80)plt.axes(aspect=1)plt.pie(counts, #性别统计结果labels=labels, #性别展示标签colors=colors, #饼图区域配色labeldistance = 1.1, #标签距离圆点距离autopct = '%3.1f%%', #饼图区域文本格式shadow = False, #饼图是否显示阴影startangle = 90, #饼图起始角度pctdistance = 0.6 #饼图区域文本距离圆点距离
    )plt.legend(loc='upper left')#标签位置plt.title('mywechat''%sfemale and male' % friends[0]['NickName'])plt.show()
def fun_analyse_Signature(friends):signatures = ''emotions = []for friend in friends:signature = friend['Signature']if signature != None:signature = signature.strip().replace("span","").replace("class","").replace("emoji","")#去除无关数据signature = re.sub(r'1f(\d.+)',"",signature)if len(signature) > 0:nlp = snownlp.SnowNLP(signature)emotions.append(nlp.sentiments)#nlp.sentiments:权值signatures += " ".join(jieba.analyse.extract_tags(signature,5))#关键字提取back_coloring = np.array(Image.open("xiaohuangren.jpg"))#图片可替换word_cloud2 = WordCloud(font_path = 'simkai.ttf',background_color = 'white',max_words = 1200,mask = back_coloring,margin = 15)word_cloud2.generate(signatures)image_colors = ImageColorGenerator(back_coloring)plt.figure(figsize=(8,5),dpi=160)plt.imshow(word_cloud2.recolor(color_func=image_colors))plt.axis("off")plt.show()word_cloud2.to_file("signatures.jpg")
#人生观count_positive = len(list(filter(lambda x:x>0.66,emotions)))#大于0.66为积极count_negative = len(list(filter(lambda x:x<0.33,emotions)))#小于0.33为消极count_neutral = len(list(filter(lambda x:x>=0.33 and x <= 0.66,emotions)))labels = [u'积极',u'中性',u'消极']values =(count_positive,count_neutral,count_negative)plt.rcParams['font.sans-serif'] = ['simHei']plt.rcParams['axes.unicode_minus'] = Falseplt.xlabel("情感判断")plt.ylabel("频数")plt.xticks(range(3),labels)plt.legend(loc='upper right')plt.bar(range(3),values,color='rgb')plt.title(u'%s的微信好友签名信息情感分析情况' % friends[0]['NickName'])plt.show()def ger_friend_msg():                     #得到的信息存进csv文件里面import timeRemarkName = get_data('RemarkName')NickName = get_data('NickName')  # 是一个列表City = get_data('City')Province = get_data('Province')Sex = get_data('Sex')Signature = get_data('Signature')data = {'备注': RemarkName, '昵称': NickName, '城市': City, '省份': Province,'性别': Sex, '微信签名': Signature}  # 字典,字典的value是列表frame = DataFrame(data)time = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())  # 生成一个当前事件,以这个时间来命名最后地csv文件,能很直白地看出最新执行脚本的时间和最新的csv文件file_name = time + '微信好友.csv'frame.to_csv('f:\\www\\靓仔贵雨\\friends.csv', encoding='utf_8_sig', index=True)def get_data(arg):       #得到所有信息data_list = []for i in friends:value = i[arg]if value == 1:#1代表男/2代表女value = '男'#这里把1/2换成了男女
            data_list.append(value)elif value == 2:value = '女'data_list.append(value)elif value == 0:value = '未知'data_list.append(value)else:data_list.append(value)return data_list
def analyseLocation(friends):headers = ['NickName','Province','City']with open('F:\\www\cgi-bin\wechat_data.xlsx','w',encoding='utf-8',newline='',) as csvFile:writer = csv.DictWriter(csvFile, headers)writer.writeheader()for friend in friends[1:]:row = {}row['NickName'] = friend['NickName']row['Province'] = friend['Province']row['City'] = friend['City']writer.writerow(row)
def shou_data_in_countrymap(save_road,file_name,sheet_name='wechat1',\column_name='Province'):'''将这些个好友在全国地图上做分布'''f=open(file_name,'rb')data=pd.read_excel(f,sheetname=sheet_name)province_list = data[column_name].fillna('NAN').tolist()#将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换count_province = pd.value_counts(province_list)#对 list 进行全频率统计value =count_province.tolist() attr =count_province.index.tolist()map=Map("各省微信好友分布", width=1200, height=600) map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000',is_label_show = True) #显示地图上的省份
    map.show_config() map.render(save_road+'map1'+'.html')f.close()#if __name__ == "__main__":
def main():itchat.auto_login(hotReload=True)friends = itchat.get_friends(update=True)fun_analyse_sex(friends)fun_analyse_Signature(friends)#ger_friend_msg()save_road=r'F:\www\cgi-bin\pictuer'file_name='F:\\www\cgi-bin\wechat_data.xlsx'shou_data_in_countrymap(save_road,file_name)
main()
 

 

今天分享就到这里了~~~~~



 

 

 

 




 

 
 
 

转载于:.html

更多推荐

python分析好友情况,并且制作机器人聊天

本文发布于:2024-03-10 10:29:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727725.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:机器人   好友   情况   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!