数人之道原创文章,转载请联系我们
2022 年虎年新春的钟声即将敲响,拼搏奋斗了一年,我们都期盼着归家的团聚与喜悦,洗去身上的疲倦,调整好状态,抖擞地继续新一年的征程。但如今国内已被奥密克戎攻破防线,新变种的病毒来势汹汹,全国包括一线城市在内的多个地区均已破防,这让春节的出行政策变得更加难以预测。希望大家都能如愿回家,过个好年。
在新的一年里,我们不妨停下匆匆的脚步,回顾过去的 2021 年,看看都发生了哪些大事,留下了哪些印记。
这次我们利用微博热搜的数据进行 2021 年及今年开年热点事件的回顾分析。分析前的准备工作不再赘述,可参考之前的数据分析文章。
1
热搜年度日历热度分布
获取去年所有的热搜数据,按日期汇总热度值,通过日历的形式,可视化输出热搜年度日历热度分布图。
【代码】
# 获取日期列表
def get_date_list(start, end):
date_list = []
start_dt = datetime.strptime(start, "%Y-%m-%d")
end_dt = datetime.strptime(end, "%Y-%m-%d")
while start_dt <= end_dt:
date_list.append(start_dt.strftime("%Y-%m-%d"))
start_dt = start_dt + timedelta(days=1)
return date_list
# 获取热搜信息
def get_trend_topic():
# 指定获取热搜的日期区间
date_list = get_date_list("2021-01-01", "2021-12-31")
topic = []
hotNumber = []
date = []
month = []
icon = []
durations = []
fenlei = []
# 爬取指定日期的热搜内容
for i in range(0, len(date_list)):
url = "url" + date_list[i]
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
trend = json.loads(res.text)
trend = trend["data"]
# 循环获取热搜的各信息项
for j in range(0, len(trend)):
try:
topic.append(trend[j]["topic"])
hotNumber.append(trend[j]["hotNumber"])
date.append("20" + trend[j]["date"][0:8])
month.append("20" + trend[j]["date"][0:5])
icon.append(trend[j]["icon"])
durations.append(trend[j]["durations"])
fenlei.append(trend[j]["fenlei"])
except:
print(trend[j]["date"])
continue
# 设置每日热搜请求的间隔时间
time.sleep(0.5)
# 创建数据表
tb_trend = pd.DataFrame(
{"topic": topic, "hotNumber": hotNumber, "date": date, "month": month, "icon": icon, "durations": durations, "fenlei": fenlei})
# 删除重复行
tb_trend = tb_trend.drop_duplicates()
# 按日期汇总热搜热度值
sum_hot = tb_trend.groupby("date", as_index=False)["hotNumber"].sum().values.tolist()
# 数据可视化输出
calendar(sum_hot, "2021年热搜日历分布图", "2021年热搜日历分布图")
【结果】
图1:2021 年度热搜日历热度分布情况
【分析】
热搜日历中,七月下旬到八月上旬的热搜热度值分布最为集中,可能是由于暑假及东京奥运会举办的缘故;一月份及年末的热搜热度最低,但在 11 月 17 日突然出现低热热搜季的小爆发。
2
最高热度日热搜
通过上面的热搜热度日历图,可以看到,2021 年度热搜的热度值最高的是七月份,表示七月份的热搜最密集。其中,热度最高的一天是 7 月 29 日。
我们抽取 7 月 29 日的数据,看看那一天大家都在讨论什么。
【结果】
图2:2021 年度热搜热度最高日前 15 大话题
【分析】
将热度最高日的数据提取后,按当天的话题进行热度值汇总,并排序,可以得到当日的最热话题。
看到热度最高日的话题基本围绕东京奥运会中国队的战况。而第一位话题是“林丹最敬佩的对手是李宗伟”,十分正能量的话题。此话题热度值简直爆表,成为年度 Top1 话题。可见,林丹和李宗伟在羽毛球场上相爱相杀的伟大友谊是多么的难能可贵,李宗伟的强大和刻苦给林丹带来很大的冲击力。
3
月度十大热搜
获取去年所有的热搜数据,按月份及话题汇总热度值,通过饼图的形式,可视化输出热搜月度前十大话题。
【代码】
# 按月份汇总热搜热度
sum_hot_mth_top = tb_trend.groupby(["topic", "month"], as_index=False)["hotNumber"].sum()
sum_hot_mth_top = sum_hot_mth_top.sort_values("hotNumber", ascending=False)
# 按月份提取每月热搜前十话题
for mth in month_list:
sum_hot_mth_top_new = sum_hot_mth_top[sum_hot_mth_top["month"] == mth]
name = sum_hot_mth_top_new["topic"].head(10).to_list()
value = sum_hot_mth_top_new["hotNumber"].head(10).to_list()
# 数据可视化输出
pie(name, value, mth + "月热搜前10", mth + "月热搜前10")
【结果】
图3:2021 年月度热搜十大话题(1-12 月轮播)
视频:2021 年月度热搜十大话题(时长 35 秒)
【分析】
2021 年每个月的月度热搜前十大话题都能体现当月的重大热点事件,下面灏灏带大家一起来回顾一下。
当然,有些大家仍记忆犹新的热点事件没有出现在月度热搜中,有可能是由于横跨两月,导致其权重下降。
4
热搜年度话题
获取去年所有的热搜数据,按话题汇总热度值,通过柱状图的形式,可视化输出热搜年度前 15 大话题。
【代码】
# 按话题汇总年度热搜热度
sum_hot_year_top = tb_trend.groupby("topic", as_index=False)["hotNumber"].sum()
sum_hot_year_top = sum_hot_year_top.sort_values("hotNumber", ascending=False)
name_year_hot = sum_hot_year_top["topic"].head(15).to_list()
value_year_hot = sum_hot_year_top["hotNumber"].head(15).to_list()
# 数据可视化输出
bars_non_slider2(name_year_hot, value_year_hot, "2021年度热搜最热话题", "2021年度热搜最热话题")
【结果】
图4:2021 年度热搜前 15 大话题
【分析】
“林丹最敬佩的对手是李宗伟”话题以爆表的热度引领年度热搜榜榜首。接下来是吴亦凡性侵被刑拘和袁隆平爷爷逝世。这两个放在一起感觉十分别扭,而且中国最伟大的科学家之一的关注度竟然还不及一个流量明星,着实让人感到唏嘘。
年度热搜前十五名大部分都是娱乐圈艺人、明星的负面消息(今年称之为娱乐圈明星集体塌房年真不为过)和电视剧、综艺节目;其余还有疫情、暴雨等社会热点新闻;袁隆平爷爷占据了两条年度热搜。
5
霸榜最长时间热搜
获取去年所有的热搜数据,按话题汇总在榜时长值,通过柱状图的形式,可视化输出热搜年度霸榜最长时间的前 15 大话题。
【代码】
# 按话题汇总热搜在榜时长
sum_duration = tb_trend.groupby("topic", as_index=False)["durations"].sum()
sum_duration = sum_duration.sort_values("durations", ascending=False)
name = sum_duration["topic"].head(15).to_list()
value = sum_duration["durations"].head(15).to_list()
# 数据可视化输出
bars_non_slider(name, value, "2021年热搜在榜时长前15", "2021年热搜在榜时长前15")
【结果】
图5:2021 年度热搜霸榜时长前 15 大话题
【分析】
2021 年霸榜微博热搜最长时间的话题基本都是电视剧及综艺节目。看来现在的电视剧和综艺通过购买热搜,利用热搜的热度进行宣传,已经成为常规操作了。
基金是唯一在霸榜时长前 15 中不是电视综艺的话题,且排在第五位,看来去年的基金行情是真绿得发慌(基金一上热搜准没好事)。
6
年度热搜类别
获取去年所有的热搜数据,按话题类别汇总热度值,通过柱状图的形式,可视化输出热搜年度前 15 大话题类别。
【代码】
# 按类别汇总热搜热度
sum_fenlei = tb_trend.groupby("fenlei", as_index=False)["hotNumber"].sum()
sum_fenlei = sum_fenlei.sort_values("hotNumber", ascending=False)
name_fenlei_hot = sum_fenlei["fenlei"].head(15).to_list()
value_fenlei_hot = sum_fenlei["hotNumber"].head(15).to_list()
# 数据可视化输出
bars_non_slider2(name_fenlei_hot, value_fenlei_hot, "2021年度热搜类别前15", "2021年度热搜类别前15")
【结果】
图6:2021 年度热搜热度前 15 大类别
【分析】
社会事件类话题毫无悬念地雄踞年度最受关注热搜类别,该类话题的热度大幅度超过其他类别。娱乐类话题(包括明星、综艺、电视剧、电影等)也占据了热搜相当大的比重。其余的是体育、时事、财经、互联网等与国计民生相关的类别话题。
7
热搜年度关键词
获取去年所有的热搜数据,对所有话题进行分词,并剔除停用词,统计分词的词频,通过词云的形式,可视化输出热搜年度关键词。
【代码】
# 将热搜话题用逗号分隔合并,转换成字符串
seg = tb_trend["topic"].to_list()
seg = ",".join(seg)
# 对合并后的热搜话题进行分词
seg_list = list(jieba.cut(seg))
seg_list_new = []
for m in range(0, len(seg_list)):
if len(seg_list[m]) > 1 and is_number(seg_list[m]) == False:
seg_list_new.append(seg_list[m])
# 统计分词结果词频,并转换为元组
result = Counter(seg_list_new).items()
# 数据可视化输出
word_cloud(result, "2021年度热搜关键词", "2021年度热搜关键词")
【结果】
图7:2021 年度热搜关键词
【分析】
热搜年度关键词排在前列的基本都是与新冠相关的(确诊、新增、疫苗、疫情、新冠、本土、病例、核酸、接种等),可见 2021 年,我们仍在与已经于全球范围流行了近两年的新冠病毒艰难抗争中。同时还有奥运相关的关键词,2021 年,我们见证了历史上第一次在非奥运年份举办奥运会。
这些或喜或悲的关键词伴随着我们走过了困难重重但又是一路高歌的一年。
8
2022 年开年热搜
获取今年所有的热搜数据,按话题汇总热度值,通过柱状图的形式,可视化输出热搜本年目前为止的前十大话题。
【结果】
图8:2022 开年热搜十大话题
【分析】
2022 年刚开年,新冠奥密克戎变种毒株攻破了中国的防线,而且还有研究表明罹患新冠后会造成男性性功能不可逆的损伤(简直骇人听闻,不知道是否外国的政治伎俩,迫使其国人接种疫苗)。
习主席的新年贺词、江歌母亲诉刘鑫案胜诉等正能量的事件为 2022 年开了一个好头。愿大家在虎年里都能有锦绣前程、累累硕果,美好始终相伴!
封面图片来源:unsplash
封面图片作者:Jan Baborák