首页 > 编程语言 >Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频)

Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频)

时间:2022-10-12 12:32:33浏览次数:50  
标签:info Python 微信 rank moment 评论 朋友圈 post user

"IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 

本文内容将通过一个具体实例讲解将朋友圈数据导出为JSON文件的方法,并介绍使用Python统计分析JSON数据的过程。


注:本文中涉及的实例文件为《Python数据分析从入门到精通》随书资源文件


0

1

将朋友圈数据导出到JSON文件

使用开源工具WeChatMomentExport导出微信朋友圈数据,WeChatMomentExport的源码地址和使用教程请参考https://github.com/Chion82/WeChatMomentExport

如图1所示。


Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频)_python数据分析

图1.使用WeChatMomentExport导出数据


使用WeChatMomentExport可导出如下所示的分类信息,每一个分类信息都保存到对应的JSON文件中。

  • 发朋友圈数量排名。
  • 朋友圈点赞数排名。
  • 被点赞数排名。
  • 发评论数量排名。
  • 朋友圈收到评论数量排名。
  • 被无视概率排名(评论被回复数/写评论数,条件为 写评论数>=15)。
  • 发投票/问卷调查类广告数排名。


0

2

统计处理JSON文件中的朋友圈数据?


使用WeChatMomentExport导出数据后,接着使用Python统计分析朋友圈的各类信息。实例文件wechat_moment_stat.py的功能是分别统计处理7个JSON文件中的数据,然后输出显示统计结果。文件wechat_moment_stat.py的具体实现流程如下所示。


通过函数get_user()获取每个朋友圈用户的详细信息,具体实现代码如下所示。

def get_user(user_name):
foruser_info in result:
ifuser_info['user'] == user_name:
returnuser_info
user_info= {
'user': user_name,
'moments': [],
'post_comments': [],
'replied_comments': [],
'received_comments': [],
'post_likes': 0,
'received_likes': 0,
'spam_counts': 0,
}
result.append(user_info)
returnuser_info


编写函数is_spam()提取朋友圈留言中的信息,具体实现代码如下所示。


def is_spam(moment_text):
投' in moment_text and '谢' in moment_text):
returnTrue
投票' in moment_text):
returnTrue
问卷' in moment_text):
returnTrue
填' in moment_text and '谢' in moment_text):
returnTrue
returnFalse

编写函数handle_moment()处理留言信息,具体实现代码如下所示。


defhandle_moment(moment):

  

排序处理7类信息,具体实现代码如下所示。

user_info= get_user(moment['author'])
user_info['moments'].append(moment)
user_info['received_likes']= user_info['received_likes'] + len(moment
['likes'])
user_info['received_comments'].extend(moment['comments'])
if(is_spam(moment['content'])):
user_info['spam_counts']= user_info['spam_counts'] + 1
forcomment_info in moment['comments']:
comment_user= get_user(comment_info['author'])
comment_user['post_comments'].append(comment_info)
if(comment_info['to_user'] != ''):
replied_user= get_user(comment_info['to_user'])
replied_user['replied_comments'].append(comment_info)
forlike_info in moment['likes']:
like_user= get_user(like_info)
like_user['post_likes']= like_user['post_likes'] + 1


for moment_info in origin_data:
handle_moment(moment_info)

f = open('user_output.json', 'w')
f.write(json.dumps(result))
f.close()

post_moment_rank = sorted(result, key=lambdauser_info: len(user_info
['moments']), reverse=True)
post_like_rank = sorted(result, key=lambda user_info:user_info['post_
likes'], reverse= True)
received_like_rank = sorted(result, key=lambdauser_info: user_info
['received_likes'], reverse=True)
post_comment_rank = sorted(result, key=lambdauser_info: len(user_info
['post_comments']), reverse=True)
received_comment_rank = sorted(result, key=lambdauser_info: len(user_info
['received_ comments']), reverse=True)
no_reply_rank = sorted(result, key=lambdauser_info: ((float(len(user_
info['replied_comments']))/len(user_info['post_comments'])) if len(user_info
['post_comments'])>0 else 999))
spam_rank = sorted(result, key=lambda user_info:user_info['spam_counts'],
reverse=True)

f = open('post_moment_rank.json', 'w')
f.write(json.dumps(post_moment_rank))
f.close()

打印输出发送朋友圈信息最多的前5位数据,具体实现代码如下所示。


print('前5位点赞数量最多:')
temp_list = []
for i in range(5):
赞)' % post_like_
rank[i]['post_likes'])
print(', '.join(temp_list))

f = open('received_like_rank.json', 'w')
f.write(json.dumps(received_like_rank))
f.close()

打印输出前5位获得最多赞的用户信息,具体实现代码如下所示。


print('前5位获得最多赞:')
temp_list = []
for i in range(5):
赞)' % received_
like_rank[i] ['received_likes'])
print(', '.join(temp_list))

f = open('post_comment_rank.json', 'w')
f.write(json.dumps(post_comment_rank))
f.close()


打印输出前5位评论数量最多的用户信息,具体实现代码如下所示。


print('前5位评论数量最多:')
temp_list = []
for i in range(5):
评论)' % len(post_
comment_rank[i]['post_comments']))
print(', '.join(temp_list))

f = open('received_comment_rank.json', 'w')
f.write(json.dumps(received_comment_rank))
f.close()


打印输出前5位朋友圈评论最多的用户信息,具体实现代码如下所示。

print('前5位朋友圈评论最多:')
temp_list = []
for i in range(5):
评论)' % len
(post_comment_rank[i]['received_comments']))
print(', '.join(temp_list))

f = open('no_reply_rank.json', 'w')
f.write(json.dumps(no_reply_rank))
f.close()

f = open('spam_rank.json', 'w')
f.write(json.dumps(spam_rank))
f.close()

打印输出收到评论回复数/写评论数前5名且发出评论数>=15用户的信息,具体实现代码如下所示。


print('================================')


print('前5名(收到评论回复数/写评论数且 发出评论数>=15):')
temp_list = []
for user_info in no_reply_rank:
iflen(user_info['post_comments']) < 15:
continue
if (len(temp_list) > 5):
break
收到评论回复%d, 写评论%d)' % (len
(user_info['replied_comments']), len(user_info['post_comments']))))
print(', '.join(temp_list))


执行后打印输出朋友圈的统计结果如下所示。


前5位发最多朋友圈:
Joe(69 条), xxx (62 条), 嬴子夜。(58 条), xxx(46 条), psh(40 条)
前5位点赞数量最多:
Saruman(33 赞), xxx(28赞),ChiaChia.Ý(27赞),❄️Max❄(27 赞), 郭含阳(23赞)
前5位获得最多赞:
陈思君(38 赞), 404(32 赞), (29 赞), Justin Tan(27 赞), 杨宗炜 (26 赞)
前5位评论数量最多:
杨宗炜 (110 评论), 404(95 评论), Saruman(94 评论), MATTHEW °Д°(77 评论), Joe(57 评论)
前5位朋友圈评论最多:
杨宗炜 (209 评论), 404(130 评论), Joe(37 评论), MATTHEW °Д°(68 评论), ❄️Max❄(69 评论)
================================
收到评论回复数/写评论数且 发出评论数>=15:
Joe(收到评论回复13, 写评论57), jjy(收到评论回复4, 写评论16), Saruman(收到评论回复30, 写评论94), 玺玺玺(收到评论回复7, 写评论21), ChiaChia.Ý(收到评论回复6, 写评论15), 郭含阳(收到评论回复14, 写评论33)


标签:info,Python,微信,rank,moment,评论,朋友圈,post,user
From: https://blog.51cto.com/u_15143384/5749412

相关文章

  • 为什么要让孩子学习Python
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 每一个新领域都能给孩子们带来......
  • Python Parser的用法
    ------2022年10月12日11:56:29-------注意,在解析parse中,对于可选参数选取最长的名称,中划线转换为下划线--------PythonParser的用法文章目录[隐藏]目录一、介绍......
  • python 不可变数据类型--字符串
    不可变数据类型:字符串是不可变数据类型,但一些性质类似列表(每个位置都有索引),但因为是不可变数据类型,字符串生成了就不能发生改变(不能str[0]='d'),有些字符串方法‘改变了’,......
  • python中 yaml.dump 对dict dump成yaml文件时,给特定字符串保留(加上)单引号
    以下例子来源于https://www.cnblogs.com/saiminhou/p/13729119.htmlpythonyamldict对str类型加上单引号源数据:dict1={"user_id":23026,"contact":[{"na......
  • 力扣350(java&python)-两个数组的交集 II(简单)
    题目:给你两个整数数组 nums1和nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑......
  • Python的常用库及区别——numpy、pandas、matplotlib、scipy
    1.Numpy  numpy是python科学计算的基础包,好多算法都是基于numpy构建的。其功能有:快速高效的多维数组ndarray用于对数组执行元素及计算以及直接对数组执行数字运......
  • python parser.parse_args action=‘store_true‘ 和 ‘store_false’
    store_true就是存储的值为true(store_false就是存储的值为false),用sh命令触发值的设置:parser.add_argument('-p',action='store_true',default=false)#pythontes......
  • Python基础一
    #变量名是区分大小写的#导入模块儿importrandomfromrandomimport*print('Helloworld!')print(len('HelloWorld'))#str()函数可以传入一个整型值,并求值为它的字符串......
  • 9 月编程语言排行榜:Python 反超 C++,万年不变的前三终于变了
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 TIOBE发布了9 月份的编程语......
  • 如何解决python爬虫的ip资源问题
    解决python爬虫的ip资源需求,有以下三种方法:一.采购http代理,api提取此类方法适用于爬虫脚本或软件在本地电脑或服务器终端运行的情况,通过api提取的方式获取海量代理ip,因为ap......