1.爬取数据
微博数据爬取python工具有很多。
本次为我们选用:weiboSpider
https://github.com/dataabc/weiboSpider
唯一的难度是cookie的获取,严格按照说明文档进行即可。
配置好config.json文件运行main.py即可爬取数据。
数据爬取完成后我们获取了原始数据:
2.数据分析
(1)基本信息统计
import pandas as pdimport matplotlib.pyplot as plt# 设置全局字体plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用指定的字体来代替默认的无法显示中文的字体plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负号'-'显示为方块的问题# 读取CSV文件df = pd.read_csv('donglu.csv')# 计算基本统计信息total_weibo_count = len(df)average_likes = df["点赞数"].mean()average_forwards = df["转发数"].mean()average_comments = df["评论数"].mean()print(f"总微博数量: {total_weibo_count}")print(f"平均点赞数: {average_likes}")print(f"平均转发数: {average_forwards}")print(f"平均评论数: {average_comments}")# 绘制柱状图stats = [average_likes, average_forwards, average_comments]labels = ['平均点赞数', '平均转发数', '平均评论数']plt.figure(figsize=(10, 6))plt.bar(labels, stats, color=['blue', 'green', 'red', 'purple'])plt.title('微博统计信息')plt.xlabel('统计项目')plt.ylabel('数量')plt.show()# 统计每天发微博的数量并进行可视化df['发布时间'] = pd.to_datetime(df['发布时间'])daily_weibo_count = df.groupby(df['发布时间'].dt.date)['微博正文'].count()plt.figure(figsize=(10, 6))daily_weibo_count.plot(kind='bar', color='skyblue')plt.title('每天微博发布数量')plt.xlabel('日期')plt.ylabel('数量')plt.show()
分析:赞评比高于50%,董老师粉丝粘性和活跃度还是比较高的。有两天单日发微博超过30条,我们看看那两天发生了什么?
# 将日期列转换为日期类型df['发布时间'] = pd.to_datetime(df['发布时间'])# 统计每天发微博的数量daily_weibo_count = df.groupby(df['发布时间'].dt.date)['微博正文'].count()# 找出单日发微博超过30条的日期high_activity_dates = daily_weibo_count[daily_weibo_count > 30].index# 打印这些日期对应的微博for date in high_activity_dates: high_activity_weibo = df[df['发布时间'].dt.date == date] print(f"日期: {date}") print(high_activity_weibo[['微博正文', '点赞数', '转发数', '评论数']]) print("\n")
日期: 2021-12-31 微博正文 点赞数 转发数 评论数6960 #孤岛跨年晚会# @水木年华缪杰 精彩献唱 董路的微博视频 254 7 226961 #孤岛跨年晚会# @水木年华缪杰 《在他乡》 董路的微博视频 302 10 166962 #孤岛跨年晚会# 《为你唱首歌》 董路的微博视频 70 1 26963 #孤岛跨年晚会# 健身操-引领高潮!董路的微博视频 125 3 166964 【中奖公布】#孤岛跨年晚会#第11轮-奖品:矿泉水(正确弹幕的前5名,重复无效)⭐ 中奖者主... 19 0 1... ... ... ... ...7016 歌伴舞,正在紧张排练中……#孤岛跨年晚会# 董路的微博视频 531 0 1137017 #孤岛跨年晚会# 下午14:00开始,孤岛开播!一起跨年 一起嗨!董路的微博视频 332 13 437018 今天#孤岛跨年晚会# 其中一个抽奖环节:#中国足球小将[超话]# 全体队员的签名球衣(10件... 533 15 1457019 夜深了,导演组还在工作着。距离首届#孤岛跨年晚会# 还有——12小时!新年快乐!董路的微博... 430 8 437020 2021年,#中国足球小将[超话]# 最后一练。小赵一脚凌空赢了……[二哈] 董路的微博视频 304 8 30[61 rows x 4 columns]日期: 2022-01-01 微博正文 点赞数 转发数 评论数6924 【精彩回顾】#孤岛跨年晚会# 嘉宾录制版@二人转九级 🌟歌曲《如愿》 董路的微博视频 938 77 1376925 李霄鹏为何组成如此大规模的国足教练组?郑智、邵佳一、李金羽们能为国足做什么?董路的微博直播... 218 29 15116926 【精彩回顾】#孤岛跨年晚会# 嘉宾录制版@低调一仔 🌟歌曲《春风十里》 董路的微博视频 238 8 236927 【精彩回顾】#孤岛跨年晚会# 嘉宾录制版@玄灵子Ho 🌟昆曲《玉簪记》选段 董路的微博视频 202 4 206928 【精彩回顾】#孤岛跨年晚会# 嘉宾录制版@10号frank 🌟相声《新八扇屏之小孩子》 董... 229 6 286929 看英超抢手VS曼城,聊孤岛春晚。董路的微博直播 新年第一专车 225 13 23726930 已经联系。感谢 #孤岛跨年晚会# [组图共2张] 原图 307 4 316931 【⚠️ 中奖者尽快完成私信!】#孤岛跨年晚会#各位中奖者主动私信到@刘凯源他爹辉子 ,请注明... 22 0 06932 昨晚,孤岛晚会回顾 董路的微博视频 274 24 15886933 昨晚,小缪@水木年华缪杰 唱得开心,聊得也可以 董路的微博视频 272 8 226934 三年之内,我一定办一次演出嘉宾都来北京现场的#孤岛跨年晚会# !立贴为证! 原图 388 8 526935 这10件球衣,现在没有什么价值,将来的话,也可能……也没什么价值 董路的微博视频 377 8 716936 昨晚#孤岛跨年晚会# 我老婆没事儿发留言居然中了五个奖!现在我决定除了留一个美容项目,其余四... 333 5 676937 ⚠️ 提醒:医美套装仅限北京地区 原图 67 0 66938 据《北京青年报》消息,李霄鹏教练团队的搭建工作已经基本完成,如无意外、包括郑智、李金羽、肇俊... 638 20 1496939 【预告】今晚新年V+第一车20:30在线解说英超焦点战:阿森纳VS曼城22:30简单回顾昨晚... 289 5 476940 我可以负责任地说,主要是伴舞的功劳#孤岛跨年晚会# 董路的微博视频 1179 53 3006941 【#孤岛跨年晚会# 哪个印象最深?】董路的微博视频⭐ 诗朗诵《将进酒》 董路的微博视频 ⭐... 536 29 1616942 第一届#孤岛跨年晚会# ,会员专车连续直播近11个半小时,累计观看次数:18.9万!普通车因... 839 26 1506943 #孤岛跨年晚会# 难忘今宵,来年再见!董路的微博视频 445 14 406944 #孤岛跨年晚会# @别克93 生日快乐!早日康复!!!董路的微博视频 387 2 306945 #孤岛跨年晚会# @苗霖66 献唱#中国足球小将# 《哨声不止 战斗不息》 董路的微博视频 255 5 116946 #孤岛跨年晚会# 口琴《我和我的祖国》 董路的微博视频 173 4 106947 #孤岛跨年晚会# 歌曲《一生所爱》 董路的微博视频 115 2 96948 #孤岛跨年晚会# 歌曲《朋友》 董路的微博视频 133 2 76949 #孤岛跨年晚会# 诗歌朗诵《这是一谭绝望的死水》 董路的微博视频 111 7 36950 #孤岛跨年晚会# @乌尔肯0128 女朋友 迪娜,献唱哈萨克族歌曲《坚持走下去》 董路的... 334 6 316951 #孤岛跨年晚会#歌曲《I wish you love》 董路的微博视频 155 4 196952 #孤岛跨年晚会# 歌曲《原来的我》 董路的微博视频 129 2 156953 #孤岛跨年晚会# 歌曲串烧《曾经青春》 董路的微博视频 94 1 56954 #孤岛跨年晚会# 歌曲《突然的自我》 董路的微博视频 86 1 36955 #孤岛跨年晚会# 川剧变脸 董路的微博视频 160 2 96956 我儿子现场看#孤岛跨年晚会# ,有点入戏了 原图 363 3 356957 【中奖公布】#孤岛跨年晚会#第12轮-下-奖品:牙套(正确弹幕的前5名,重复无效)⭐ 中奖者... 18 0 26958 【中奖公布】#孤岛跨年晚会#第12轮-上-奖品:牙套(正确弹幕的前5名,重复无效)⭐ 中奖者... 17 0 26959 告别2021,喜迎2022!大家新年快乐!#孤岛跨年晚会# 董路的微博视频 208 9 30日期: 2022-07-25 微博正文 点赞数 转发数 评论数4481 【平衡彻底打破】#2034杯[超话]# 总决赛首轮:宜兴西甲6:0太仓百川源源集锦。董路的... 909 29 1434482 #2034杯[超话]# 总决赛第二轮对阵形势! [组图共2张] 原图 470 28 854483 宜兴西甲,整合的“恒大10”,国内最强了。这真不是谦虚。 原图 1499 34 3944484 #2034杯[超话]#焦点战 宜兴西甲VS太仓百川,我在现场解说,不用对表的 董路的微博视频 438 10 354485 坐山观虎斗——宜兴西甲VS太仓百川,生死战!我现场解说。董路的微博直播 378 15 21304486 他来了,他来了!董路的微博视频 540 12 634487 生死战前,周总竟然在做这种事儿!今晚20:30,#2034杯[超话]# 首轮——宜兴西甲V... 579 13 754488 #中国足球小将[超话]# 11红队昊炎转身破门!董路的微博视频 240 13 134489 #中国足球小将[超话]# 11红队昊炎转身破门!董路的微博视频 154 3 144490 #2034杯[超话]# 首轮,#中国足球小将[超话]# 11多点开花,7:1战胜常州喜悦,这... 337 8 564491 【比赛集锦】#2034杯##中国足球小将# 2011选拔红队7-1常州喜悦比赛集锦#全力拼一... 242 16 234492 唐华健 又双叒叕开挂了 #2034杯[超话]# 董路的微博视频 611 19 984493 苏州烈日之下,王总行走江湖……#2034杯[超话]# 董路的微博视频 516 11 574494 “2034杯”第二届小学生足球大会苏州总决赛 中国足球小将2011选拔红队VS常州喜悦 ... 562 12 10914495 中国足球小将11红队首战!唐氏兄弟,昊炎小辫儿全力出击!董路的微博直播 279 6 12774496 【秒杀!2034限量特惠券】#VPlus粉丝订阅#我是@董路, 为大家准备了V+订阅 4.9... 37 4 14497 董路的微博直播 99 7 3984498 #2034杯[超话]# 首战,石门五小不敌重庆初心。惊现最萌身高差[污] 原图 350 4 314499 东亚杯国足对日本中场休息室,扬科维奇说:“守也不见得守得住,我们攻出去!” 董路的微博视频 1416 69 1184500 快速了解#2034杯[超话]#总决赛小程序 二零三四杯 点总决赛进入帮您快速了解赛程和赛果 ... 310 16 644501 #2034杯[超话]# 总决赛揭幕战,#中国足球小将[超话]# 7号张林峒的表现得到很多球迷... 541 15 1164502 小伙子有大能量 #中国足球小将[超话]#赵峰屹 #2034杯[超话]# 董路的微博视频 #全... 732 34 1224503 央视频首页头条推荐#2034杯[超话]# 现场直播!全部比赛都有直播和回放! 原图 754 28 744504 hi,每周一订阅抽奖福利持续放送中,订阅我的V+年费,最高赢1000元现金红包,更多V+会员... 59 2 44505 【比赛集锦】#2034杯##中国足球小将# ⭐2011选拔黄队3-0伊犁如山 比赛集锦#全力... 542 17 934506 昨晚#2034杯[超话]# 开幕式,一位球迷拍摄制作的视频[握手] 董路的微博视频 #全力拼... 744 49 624507 我拍的,美吗? 原图 484 12 1054508 独家视角关注2034杯,今天小将11红黄两队都将面临挑战,晚上宜兴西甲和太仓百川的对决是全天... 376 15 23284509 清华附中小将09在第一届中国青少年联赛北京赛区(U13组)的比赛中,三战三胜,进30球失0球... 1232 51 1774510 董路的微博直播 260 11 4714511 我感觉“保护性接应”在#2034杯[超话]#上要火我感觉 董路的微博视频 584 31 664512 听说这段在直播间“炸”了?#2034杯[超话]# 董路的微博视频 1102 54 1124513 #2034杯##小学生足球大会# 开幕式上来自新疆与青海的小球员们共同演绎藏语歌曲《FLY》... 560 43 504514 青超北京赛区决赛,面对对手接连的犯规,#中国足球小将[超话]# 老二做出了最好的回应。[赞]... 437 0 60
一天是孤岛跨年晚会,一天是第二届2034杯决赛日。
(2)受欢迎的内容类型分析
# 判断每条微博的内容类型def get_content_type(row): if row["微博视频url"]!='无': return "视频" elif row["原始图片url"]!='无': return "图片" elif row["微博正文"]: return "文字" else: return "未知"# 应用函数,创建新的列“内容类型”df["内容类型"] = df.apply(get_content_type, axis=1)# 统计各内容类型的互动数平均值avg_interactions_by_content_type = df.groupby("内容类型")[["点赞数", "转发数", "评论数"]].mean()# 设置图片大小plt.figure(figsize=(10, 6))# 绘制柱状图avg_interactions_by_content_type.plot(kind='bar', rot=0)plt.title('各内容类型的互动数平均值')plt.xlabel('内容类型')plt.ylabel('平均互动数')# 显示图形plt.tight_layout()plt.show()
分析:发文字评论数更高,发视频点赞数更高。
(3)互动趋势分析
# 将发布时间转换为日期格式df['发布时间'] = pd.to_datetime(df['发布时间'])# 提取日期信息df['日期'] = df['发布时间'].dt.date# 统计每天的互动数daily_interactions = df.groupby('日期')[['点赞数', '转发数', '评论数']].sum()# 绘制互动趋势图plt.figure(figsize=(12, 6))plt.plot(daily_interactions.index, daily_interactions['点赞数'], label='点赞数')plt.plot(daily_interactions.index, daily_interactions['转发数'], label='转发数')plt.plot(daily_interactions.index, daily_interactions['评论数'], label='评论数')plt.xlabel('日期')plt.ylabel('互动数')plt.title('每天的互动趋势')plt.legend()plt.grid(True)plt.show()
有一天明显点赞异常,上了大热门,让我们看看是哪一天?
# 找到异常的日期outlier_date = daily_interactions[daily_interactions['点赞数'] == daily_interactions['点赞数'].max()].index[0]# 根据异常日期筛选原始数据outlier_data = df[df['日期'] == outlier_date]# 输出异常日期和内容print(f"异常日期:{outlier_date}")print("异常内容:")for index, row in outlier_data.iterrows(): print(f"微博id:{row['微博id']},发布时间:{row['发布时间']},点赞数:{row['点赞数']},转发数:{row['转发数']},评论数:{row['评论数']},微博正文:{row['微博正文']}")
异常日期:2022-03-16异常内容:微博id:Lk29djvN4,发布时间:2022-03-16 20:47:00,点赞数:2050,转发数:74,评论数:6321,微博正文:如果还有爱,就拥有前进的力量!董路的微博直播 如果还有爱 微博id:Lk29cbYsZ,发布时间:2022-03-16 20:47:00,点赞数:7810,转发数:340,评论数:759,微博正文:这是我创立的球队#中国足球小将# 2017年8月开始到现在,已经成长近5年了请大家给青少年一些时间,给足球一些时间 董路的微博视频 微博id:Lk1ZAnCIB,发布时间:2022-03-16 20:23:00,点赞数:23766,转发数:668,评论数:1052,微博正文:#董路回击冯巩# 我不属于中国男足的一份子我属于为中国男足的未来而努力的人中的一份子!球不是我输的我每天都在为中国足球而付出劳作几个演小品出身的艺术家你们对中国足球丝毫没有贡献为了中国踢球孩子的成长能有一个更好的舆论环境请你们口下留情吧我把流量给你们不就完了吗...全文 显示地图 微博id:Lk1Y7Eyvu,发布时间:2022-03-16 20:20:00,点赞数:3911,转发数:198,评论数:275,微博正文:这是我创立的赛事,叫做#2034杯#小学生足球大会。2034年世界杯是一个梦想,届时将会是如今很多学球孩子的当打之年!把握当下,放眼未来!#董路回击冯巩##中国足球# 董路的微博视频 微博id:Lk1Sp9MfG,发布时间:2022-03-16 20:05:00,点赞数:8343,转发数:244,评论数:352,微博正文:中国孩子还有足球的梦想,中国孩子还在为将来国而战而努力,假如你们不热爱足球,请你们远离。⭐ #中国足球小将#3-1利物浦#董路回击冯巩##中国足球# 董路的微博视频 微博id:Lk1M4mIFo,发布时间:2022-03-16 19:50:00,点赞数:12319,转发数:391,评论数:490,微博正文:请老艺术家们,为了中国足球的未来,为了中国足球的文化普及和舆论环境的改善,别再和普罗大众一样,只知道嘲讽戏虐了,差不多得了,弄得好像你们多热爱足球似的。⭐ #中国足球小将#《挑战拉玛西亚》纪录片 中国足球小将的微博视频 #董路回击冯巩##中国足球# 微博id:Lk1ESxdXU,发布时间:2022-03-16 19:32:00,点赞数:6558,转发数:279,评论数:465,微博正文:画面中,20年前那些嬉皮笑脸高呼“解散”“下课”的人,现在都有手机了,然后在网络上肆意谩骂着,一干社会名流为了流量也加入群殴…这个娱乐至死的时代,中国足球的未来在哪儿?这个群魔乱舞的环境中,中国踢球的孩子如何感受?北京·艺海博通体育高尔夫练习场 董路的微博视频 显示地图 微博id:Lk1Epjdg0,发布时间:2022-03-16 19:31:00,点赞数:1001,转发数:29,评论数:141,微博正文:中国足球加油!#中国足球小将[超话]# 北京·艺海博通体育高尔夫练习场 董路的微博视频 显示地图 微博id:Lk0mlhCMQ,发布时间:2022-03-16 16:14:00,点赞数:71129,转发数:605,评论数:685,微博正文:你说喜剧表演艺术家踢球和我说相声比,哪个水平相对高一些?董路的微博视频 微博id:Lk0lOssoK,发布时间:2022-03-16 16:12:00,点赞数:480,转发数:9,评论数:66,微博正文:欧冠曼联被马竞淘汰,双方防守的投入最终决定了比赛的结局。曼联的防守真的太不成样子了,边前卫格林伍德、拉什福德、桑乔都先后出现过失位导致丢球,这次是埃兰加……#老董聊球# 董路的微博视频 微博id:Lk03vcQTR,发布时间:2022-03-16 15:27:00,点赞数:1913827,转发数:15510,评论数:7487,微博正文:国足的流量,真香吧!一个海参的虚假传说,一个网上到处都是的烂梗,还当包袱使活呢当年春晚小品就经常抄网上的段子,咯吱人笑,现在拍段子,依然如此,真没长进啊!对了,提醒一下老艺术家:海参赞助整个中国之队的,女足队员也吃啊。到底谁蹭谁啊…… 董路的微博视频 微博id:LjZE1vOLJ,发布时间:2022-03-16 14:25:00,点赞数:4862,转发数:152,评论数:294,微博正文:这位老兄说得比我都狠!直击相声出身的小品表演艺术家的心灵 董路的微博视频 微博id:LjZ4bmwPv,发布时间:2022-03-16 12:56:00,点赞数:1186,转发数:22,评论数:251,微博正文:一位车友发给我的。杨毅兄弟是不是对5万这个数字有什么误解。 原图 微博id:LjVU6w8SL,发布时间:2022-03-16 04:53:00,点赞数:174,转发数:0,评论数:11,微博正文:弗雷德和菲利克斯的个人秀。董路的微博视频 微博id:LjVTi2Pml,发布时间:2022-03-16 04:51:00,点赞数:206,转发数:0,评论数:23,微博正文:马竞进球,连续传递12脚,曼联又没能限制对方翼卫。#老董聊球# 董路的微博视频
分析:蹭巩汉林流量直接干上大热门,不蹭热搜很难有这么大流量。
import pandas as pdimport matplotlib.pyplot as plt# 将发布时间转换为日期格式df['发布时间'] = pd.to_datetime(df['发布时间'])# 提取日期信息df['日期'] = df['发布时间'].dt.date# 筛选掉2022年3月15日到3月17日和2021年12月30日到2022年1月2日的数据df_filtered = df[ ((df['日期'] < pd.to_datetime('2022-03-15').date()) | (df['日期'] > pd.to_datetime('2022-03-17').date())) & ((df['日期'] < pd.to_datetime('2021-12-30').date()) | (df['日期'] > pd.to_datetime('2022-01-02').date()))]# 统计每天的互动数daily_interactions = df_filtered.groupby('日期')[['点赞数', '转发数', '评论数']].sum()# 使用移动平均线window_size = 10 # 可根据需要调整窗口大小daily_interactions_smoothed = daily_interactions.rolling(window=window_size).mean()# 绘制互动趋势图plt.figure(figsize=(12, 6))plt.plot(daily_interactions_smoothed.index, daily_interactions_smoothed['点赞数'], label='点赞数')plt.plot(daily_interactions_smoothed.index, daily_interactions_smoothed['转发数'], label='转发数')plt.plot(daily_interactions_smoothed.index, daily_interactions_smoothed['评论数'], label='评论数')plt.xlabel('日期')plt.ylabel('互动数')plt.title('每天的互动趋势')plt.legend()plt.grid(True)plt.show()
分析:剔除两次异常的数据画出趋势图,可以看到车友的总体活跃度明显先呈现一波上升趋势,然后开始稳步走低。
(4)地理位置信息分析
# 统计不同发布位置的微博数量# 去除发布位置为“无”的数据filtered_df = df[df["发布位置"] != "无"]# 统计不同发布位置的微博数量location_counts = filtered_df["发布位置"].value_counts()# 绘制柱状图import matplotlib.pyplot as plt# 绘制柱状图plt.figure(figsize=(10, 10))location_counts[:10].plot(kind='bar', color='skyblue')# plt.xlabel('发布位置')plt.ylabel('微博数量')plt.title('不同发布位置的微博数量')# 旋转x轴标签plt.xticks(rotation=10,fontsize=5)plt.show()
分析:巴塞罗那是董老师最喜欢显摆的地址。
(5)时间趋势分析
# 提取小时信息df['发布时间'] = pd.to_datetime(df['发布时间'])df["小时"] = df["发布时间"].dt.hour# 统计不同小时的互动数hourly_interactions = df.groupby("小时")[["点赞数", "转发数", "评论数"]].mean()# 绘制互动数随小时变化的折线图plt.figure(figsize=(10, 6))plt.plot(hourly_interactions.index, hourly_interactions["点赞数"], label="点赞数")plt.plot(hourly_interactions.index, hourly_interactions["转发数"], label="转发数")plt.plot(hourly_interactions.index, hourly_interactions["评论数"], label="评论数")plt.xlabel("小时")plt.ylabel("平均互动数")plt.legend()plt.grid(True)plt.title("互动数随小时变化")plt.show()# 提取小时信息df['小时'] = df['发布时间'].dt.hour# 统计不同小时的微博数量hourly_counts = df['小时'].value_counts().sort_index()# 绘制柱状图plt.figure(figsize=(10, 6))hourly_counts.plot(kind='bar', color='skyblue')plt.xlabel('发布小时')plt.ylabel('微博数量')plt.title('不同小时发布的微博数量')plt.show()
分析:董老师发布微博火力集中在中午和晚上,车友的评论高峰期在晚上九点。15点的点赞异常完全是被蹭巩汉林热度的那条微博给影响了数据真实性。
(6)工具偏好分析
# 过滤只包含手机型号的数据filtered_df = df[df["发布工具"].isin(["iPhone 11", "iPhone 11 Pro", "iPhone 11 Pro Max", "iPhone 12","iPhone 13 Pro","iPhone 13 Pro Max","iPhone 14","iPhone 14 Pro","Redmi K50","荣耀Magic3 至臻版 5G"])]tool_counts = filtered_df["发布工具"].value_counts()# 绘制饼图plt.figure(figsize=(10, 10))plt.pie(tool_counts, labels=tool_counts.index, autopct='%1.1f%%', startangle=140, colors=['skyblue', 'yellow', 'green', 'orange', 'red'])plt.title('不同发布工具的微博数量分布')plt.axis('equal') # 使饼图保持圆形plt.show()
分析:董老师每代都买,用得最多的是iphone12。
(7)内容情感分析
from textblob import TextBlob# 定义情感分析函数def analyze_sentiment(text): analysis = TextBlob(text) if analysis.sentiment.polarity > 0: return "正面" elif analysis.sentiment.polarity < 0: return "负面" else: return "中性"# 应用情感分析函数,创建新的列“情感”df["情感"] = df["微博正文"].apply(analyze_sentiment)# 统计不同情感的微博数量sentiment_counts = df["情感"].value_counts()print(sentiment_counts)# 绘制饼图plt.figure(figsize=(8, 8))plt.pie(sentiment_counts, labels=sentiment_counts.index, autopct='%1.1f%%', startangle=140, colors=['lightgreen', 'lightcoral', 'lightblue'])plt.title('微博情感分布')plt.axis('equal') # 使饼图保持圆形plt.show()
from wordcloud import WordCloudimport matplotlib.pyplot as plt# 提取所有微博内容all_text = ' '.join(df['微博正文'])# 创建词云对象,指定字体路径wordcloud = WordCloud(font_path='/path/simhei.ttf', width=800, height=400, background_color='white').generate(all_text)# 绘制词云图plt.figure(figsize=(10, 6))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.show()
分析:大V文字表达还是中性为主。
(8)高互动内容特征分析
# 找到点赞数最高的前5个微博top_likes = df.nlargest(5, '点赞数')# 找到转发数最高的前5个微博top_reposts = df.nlargest(5, '转发数')# 找到评论数最高的前5个微博top_comments = df.nlargest(5, '评论数')# 输出点赞数最高的前5个微博的内容print("点赞数最高的前5个微博的内容:")for index, row in top_likes.iterrows(): print(f"点赞数: {row['点赞数']}") print(row["微博正文"])# 输出转发数最高的前5个微博的内容print("\n转发数最高的前5个微博的内容:")for index, row in top_reposts.iterrows(): print(f"转发数: {row['转发数']}") print(row["微博正文"])# 输出评论数最高的前5个微博的内容print("\n评论数最高的前5个微博的内容:")for index, row in top_comments.iterrows(): print(f"评论数: {row['评论数']}") print(row["微博正文"])
点赞数最高的前5个微博的内容:国足的流量,真香吧!一个海参的虚假传说,一个网上到处都是的烂梗,还当包袱使活呢当年春晚小品就经常抄网上的段子,咯吱人笑,现在拍段子,依然如此,真没长进啊!对了,提醒一下老艺术家:海参赞助整个中国之队的,女足队员也吃啊。到底谁蹭谁啊…… 董路的微博视频 点赞数: 1913827#逐梦少年# 《荒漠的小草们》如何看待足球中的挫折教育?分享你的看法,我将随机抽取三位观众,每人送出品牌电磁炉一个;同时评论点赞数最高的一位用户,我将送出价值3000的智能锁 董路的微博视频 点赞数: 71143你说喜剧表演艺术家踢球和我说相声比,哪个水平相对高一些?董路的微博视频 点赞数: 71129有事儿说事儿,别总“丢脸丢脸”的,说得像平时走穴赚钱、春晚演个小品就能给中国人挣多少脸似的。 原图 点赞数: 70133#中国足球小将# 脚踏实地,面向未来守住希望,奋发图强#嘲讽中国足球也该有底线##请支持低谷中的国足# 董路的微博视频 点赞数: 35811转发数最高的前5个微博的内容:国足的流量,真香吧!一个海参的虚假传说,一个网上到处都是的烂梗,还当包袱使活呢当年春晚小品就经常抄网上的段子,咯吱人笑,现在拍段子,依然如此,真没长进啊!对了,提醒一下老艺术家:海参赞助整个中国之队的,女足队员也吃啊。到底谁蹭谁啊…… 董路的微博视频 转发数: 15510#欧冠巴萨vs尤文# C罗点球先拔头筹!董路的微博视频 转发数: 4455今天清华附中#中国足球小将[超话]# 两个任意球配合进球。如果你愿意可以转评赞,我想看到像日本孩子踢球被国人传播的那个景象。[笑cry] 董路的微博视频 转发数: 3573移动的私人观赛包厢,在路上也能看比赛,不错过任何精彩!躺在@别克 世纪私享豪华后座的160°云感座椅,加热按摩一应俱全!开启32吋可升降智能屏,观看本届世界杯的精彩瞬间,又有Bose悦尊音响系统的21只高性能扬声器使赛场原声环绕耳畔!随手从冰箱拿出冰汽水,闭目享受的一刹那,我心中的最佳人选已经...全文 [组图共9张] 原图 转发数: 3107我主演的《三毛流浪记》,1947年出品。我还在KTV工作过…… 原图 转发数: 2770评论数最高的前5个微博的内容:孤岛跨年晚会,车友连线联欢,一起跨年一起嗨!董路的微博直播 孤岛跨年晚会 评论数: 260465四名归化球员第一次同时首发,国足拼了!在线同步解读:中国🇨🇳VS澳大利亚🇦🇺!不放过比赛每一个关键的细节!董路的微博直播 国足加油! 评论数: 50359北京市锦标赛决赛——怀柔VS东城 董路的微博直播 决赛 评论数: 41115大直播!#国足VS沙特#赛前分析、比赛解说、赛后评论,抽奖!最少7个小时连播!拼了!都来看!#VPlus粉丝订阅#我是@董路, 为大家准备了V+订阅 5 折 限时优惠券~快来领取,订阅成为我的 V+会员,享受专属权益!董路的优惠券 董路的微博直播 中沙之战大直播 评论数: 35935聊聊欧洲足球热点,有奖品随时发放!球迷肯定喜欢 董路的微博直播 评论数: 34550
分析:点赞转发最高的全靠蹭和做活动,评论高的靠岛上的互动评论
(9)三届2034杯热度分析
第一届2023杯:April 30, 2021, to May 4, 2021.
第二届2023杯:July 20, 2022, to July 30, 2022.
第三届2023杯:July 16, 2023, to July 23, 2023.
from datetime import datetime# 将日期字符串转换为日期对象df['日期'] = pd.to_datetime(df['发布时间'])# 筛选第一届比赛的记录first_competition_start = datetime(2021, 4, 30)first_competition_end = datetime(2021, 5, 4)first_competition_data = df[(df['日期'] >= first_competition_start) & (df['日期'] <= first_competition_end)]# 筛选第二届比赛的记录second_competition_start = datetime(2022, 7, 20)second_competition_end = datetime(2022, 7, 30)second_competition_data = df[(df['日期'] >= second_competition_start) & (df['日期'] <= second_competition_end)]# 筛选第三届比赛的记录third_competition_start = datetime(2023, 7, 16)third_competition_end = datetime(2023, 7, 23)third_competition_data = df[(df['日期'] >= third_competition_start) & (df['日期'] <= third_competition_end)]# 计算人气指数,这里以点赞数为例,可以根据需要替换成其他指标或综合指标first_competition_popularity = first_competition_data['点赞数'].sum()second_competition_popularity = second_competition_data['点赞数'].sum()third_competition_popularity = third_competition_data['点赞数'].sum()print(f'第一届比赛人气指数:{first_competition_popularity}')print(f'第二届比赛人气指数:{second_competition_popularity}')print(f'第三届比赛人气指数:{third_competition_popularity}')# 假设你已经计算了第一届、第二届和第三届比赛的人气指数competition_labels = ['第一届', '第二届', '第三届']popularity_scores = [first_competition_popularity, second_competition_popularity, third_competition_popularity]# 创建树状图plt.figure(figsize=(10, 6))plt.bar(competition_labels, popularity_scores, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('点赞人气指数')plt.title('点赞人气指数对比')# 显示图形plt.show()# 计算人气指数,这里以点赞数为例,可以根据需要替换成其他指标或综合指标first_competition_popularity = first_competition_data['转发数'].sum()second_competition_popularity = second_competition_data['转发数'].sum()third_competition_popularity = third_competition_data['转发数'].sum()print(f'第一届比赛人气指数:{first_competition_popularity}')print(f'第二届比赛人气指数:{second_competition_popularity}')print(f'第三届比赛人气指数:{third_competition_popularity}')# 假设你已经计算了第一届、第二届和第三届比赛的人气指数competition_labels = ['第一届', '第二届', '第三届']popularity_scores = [first_competition_popularity, second_competition_popularity, third_competition_popularity]# 创建树状图plt.figure(figsize=(10, 6))plt.bar(competition_labels, popularity_scores, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('转发人气指数')plt.title('转发人气指数对比')# 显示图形plt.show()# 计算人气指数,这里以点赞数为例,可以根据需要替换成其他指标或综合指标first_competition_popularity = first_competition_data['评论数'].sum()second_competition_popularity = second_competition_data['评论数'].sum()third_competition_popularity = third_competition_data['评论数'].sum()print(f'第一届比赛人气指数:{first_competition_popularity}')print(f'第二届比赛人气指数:{second_competition_popularity}')print(f'第三届比赛人气指数:{third_competition_popularity}')# 假设你已经计算了第一届、第二届和第三届比赛的人气指数competition_labels = ['第一届', '第二届', '第三届']popularity_scores = [first_competition_popularity, second_competition_popularity, third_competition_popularity]# 创建树状图plt.figure(figsize=(10, 6))plt.bar(competition_labels, popularity_scores, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('评论人气指数')plt.title('评论人气指数对比')# 显示图形plt.show()
import matplotlib.pyplot as plt# 将日期字符串转换为日期对象df['日期'] = pd.to_datetime(df['发布时间'])# 筛选第一届比赛的记录first_competition_start = datetime(2021, 4, 30)first_competition_end = datetime(2021, 5, 4)first_competition_data = df[(df['日期'] >= first_competition_start) & (df['日期'] <= first_competition_end)]# 筛选第二届比赛的记录second_competition_start = datetime(2022, 7, 20)second_competition_end = datetime(2022, 7, 30)second_competition_data = df[(df['日期'] >= second_competition_start) & (df['日期'] <= second_competition_end)]# 筛选第三届比赛的记录third_competition_start = datetime(2023, 7, 16)third_competition_end = datetime(2023, 7, 23)third_competition_data = df[(df['日期'] >= third_competition_start) & (df['日期'] <= third_competition_end)]# 统计每届比赛发微博数量first_competition_tweet_count = len(first_competition_data)second_competition_tweet_count = len(second_competition_data)third_competition_tweet_count = len(third_competition_data)# 创建树状图competition_labels = ['第一届', '第二届', '第三届']tweet_counts = [first_competition_tweet_count, second_competition_tweet_count, third_competition_tweet_count]plt.figure(figsize=(10, 6))plt.bar(competition_labels, tweet_counts, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('发微博数量')plt.title('每届比赛发微博数量对比')# 显示图形plt.show()
import matplotlib.pyplot as plt# 将日期字符串转换为日期对象df['日期'] = pd.to_datetime(df['发布时间'])# 筛选第一届比赛的记录first_competition_start = datetime(2021, 4, 30)first_competition_end = datetime(2021, 5, 4)first_competition_data = df[(df['日期'] >= first_competition_start) & (df['日期'] <= first_competition_end)]# 筛选第二届比赛的记录second_competition_start = datetime(2022, 7, 20)second_competition_end = datetime(2022, 7, 30)second_competition_data = df[(df['日期'] >= second_competition_start) & (df['日期'] <= second_competition_end)]# 筛选第三届比赛的记录third_competition_start = datetime(2023, 7, 16)third_competition_end = datetime(2023, 7, 23)third_competition_data = df[(df['日期'] >= third_competition_start) & (df['日期'] <= third_competition_end)]# 进一步筛选出发布工具为"微博直播平台"的记录first_competition_live = first_competition_data[first_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]second_competition_live = second_competition_data[second_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]third_competition_live = third_competition_data[third_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]# 统计每届比赛发微博数量first_competition_tweet_count = len(first_competition_live)second_competition_tweet_count = len(second_competition_live)third_competition_tweet_count = len(third_competition_live)# 创建树状图competition_labels = ['第一届', '第二届', '第三届']tweet_counts = [first_competition_tweet_count, second_competition_tweet_count, third_competition_tweet_count]plt.figure(figsize=(10, 6))plt.bar(competition_labels, tweet_counts, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('发微博数量')plt.title('每届比赛发微博数量对比(仅微博直播平台)')# 显示图形plt.show()plt.figure(figsize=(10, 6))plt.bar(competition_labels, tweet_counts, color=['blue', 'green', 'red'])plt.xlabel('比赛届数')plt.ylabel('发微博数量')plt.title('每届比赛发微博数量对比(仅微博直播平台)')# 显示图形plt.show()
import matplotlib.pyplot as plt# 将日期字符串转换为日期对象df['日期'] = pd.to_datetime(df['发布时间'])# 筛选第一届比赛的记录first_competition_start = datetime(2021, 4, 30)first_competition_end = datetime(2021, 5, 4)first_competition_data = df[(df['日期'] >= first_competition_start) & (df['日期'] <= first_competition_end)]# 筛选第二届比赛的记录second_competition_start = datetime(2022, 7, 20)second_competition_end = datetime(2022, 7, 30)second_competition_data = df[(df['日期'] >= second_competition_start) & (df['日期'] <= second_competition_end)]# 筛选第三届比赛的记录third_competition_start = datetime(2023, 7, 16)third_competition_end = datetime(2023, 7, 23)third_competition_data = df[(df['日期'] >= third_competition_start) & (df['日期'] <= third_competition_end)]# 筛选出发布工具为"微博直播平台"或"微博直播"的记录first_competition_live = first_competition_data[first_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]second_competition_live = second_competition_data[second_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]third_competition_live = third_competition_data[third_competition_data['发布工具'].isin(['微博直播平台', '微博直播'])]# 计算每届比赛的点赞人气、评论人气和转发人气first_competition_likes = first_competition_live['点赞数'].sum()first_competition_comments = first_competition_live['评论数'].sum()first_competition_reposts = first_competition_live['转发数'].sum()second_competition_likes = second_competition_live['点赞数'].sum()second_competition_comments = second_competition_live['评论数'].sum()second_competition_reposts = second_competition_live['转发数'].sum()third_competition_likes = third_competition_live['点赞数'].sum()third_competition_comments = third_competition_live['评论数'].sum()third_competition_reposts = third_competition_live['转发数'].sum()# 创建树状图labels = ['点赞数', '评论数', '转发数']first_competition_scores = [first_competition_likes, first_competition_comments, first_competition_reposts]second_competition_scores = [second_competition_likes, second_competition_comments, second_competition_reposts]third_competition_scores = [third_competition_likes, third_competition_comments, third_competition_reposts]x = range(len(labels))plt.figure(figsize=(12, 6))plt.bar(x, first_competition_scores, width=0.2, label='第一届', align='center')plt.bar([i + 0.2 for i in x], second_competition_scores, width=0.2, label='第二届', align='center')plt.bar([i + 0.4 for i in x], third_competition_scores, width=0.2, label='第三届', align='center')plt.xlabel('指标')plt.ylabel('人气指数')plt.title('每届比赛人气指数对比(仅微博直播平台)')plt.xticks([i + 0.2 for i in x], labels)plt.legend()plt.show()x, first_competition_scores, width=0.2, label='第一届', align='center')plt.bar([i + 0.2 for i in x], second_competition_scores, width=0.2, label='第二届', align='center')plt.bar([i + 0.4 for i in x], third_competition_scores, width=0.2, label='第三届', align='center')plt.xlabel('指标')plt.ylabel('人气指数')plt.title('每届比赛人气指数对比(仅微博直播平台)')plt.xticks([i + 0.2 for i in x], labels)plt.legend()plt.show()
分析:三届比赛发微博的数量第二届是第一届和第三届的两倍,第一届和第三届基本持平;第一届发车数量较少,第二三届发车数量大体相同,但车友评论量有明显下降趋势。
(10)发车期间车友活跃度分析
import matplotlib.pyplot as plt# 筛选出发布工具为"微博直播平台"或"微博直播"的记录live_data = df[df['发布工具'].isin(['微博直播平台', '微博直播'])]# 将发布时间转换为日期格式live_data['日期'] = pd.to_datetime(live_data['发布时间'])# 统计每天的互动数daily_interactions = live_data.groupby('日期')[['点赞数', '转发数', '评论数']].sum()# 绘制点赞数趋势图plt.figure(figsize=(12, 6))plt.plot(daily_interactions.index, daily_interactions['点赞数'], label='点赞数', color='blue')plt.xlabel('日期')plt.ylabel('点赞数')plt.title('每天的点赞数趋势')plt.legend()plt.grid(True)plt.show()# 绘制转发数趋势图plt.figure(figsize=(12, 6))plt.plot(daily_interactions.index, daily_interactions['转发数'], label='转发数', color='green')plt.xlabel('日期')plt.ylabel('转发数')plt.title('每天的转发数趋势')plt.legend()plt.grid(True)plt.show()# 绘制评论数趋势图plt.figure(figsize=(12, 6))plt.plot(daily_interactions.index, daily_interactions['评论数'], label='评论数', color='red')plt.xlabel('日期')plt.ylabel('评论数')plt.title('每天的评论数趋势')plt.legend()plt.grid(True)plt.show()# 计算点赞、评论、转发的平均数average_likes = live_data['点赞数'].mean()average_comments = live_data['评论数'].mean()average_forwards = live_data['转发数'].mean()print(f'平均点赞数: {average_likes}')print(f'平均评论数: {average_comments}')print(f'平均转发数: {average_forwards}')
分析:
日常发车车友整体评论稳定在2000,元旦孤岛晚会非常成功,评论数据断层碾压,是一场非常成功的大爆款直播。
日常发车点赞数据稳定在300,有两场直播点赞破万,分别是:
喜剧艺术家巩汉林展示的假国足签名足球,折射出中国足球一个怎样的混乱环境?董路的微博直播 假签名足球 国足1:1阿曼,遗憾在哪里?收获又是什么?董路的微博直播 复盘国足
说明车友认为批判中国足球是最大快人心的。
日常发车转发数据稳定在20,有三场直播转发数过500,分别是:
#海外青训论坛# 第4期2月7日 周一 21:00 北京时间#微博电台计划#1. 澳洲 墨尔本 金融投资——石雷《欧洲中国队(英格兰队)的崎岖复兴之路》【自我简介】2000年在伦敦学习工作,之后在华尔街任投资经理。因工作关系,全面调研过英格兰足球市场和运作机制,在此和大家分享英足总走过的曲折的青...全文 #微博电台计划# #海外青训论坛# 第2期1月23日 周日 21:001. 意大利 米兰 体育商务——范雷《意大利孩子的‘’足球生物钟‘’》【自我简介】移居意大利11年,从事相关足球商务业务6年2.澳大利亚 悉尼 悉尼业余足球俱乐部运营者——李鑫《足球不只是技术—带你走进我们的亚洲强敌澳大利亚足球...全文 聚焦欧冠,展望国足 董路的微博直播
说明车友认为海外青训论坛的内容是最有价值最值得转发的。
版权归原作者 全栈海哥 所有, 如有侵权,请联系我们删除。