26張圖,帶你全面盤點2021微博熱搜!
2021是最好的一年,也是很差的一年,時光如白駒過隙,匆匆溜走,還有多少熱點,在你的記憶里!
這里整理了2021年全年的微博熱搜數(shù)據(jù),你想要的全在這里了!文末有全年熱點排行視頻,不要錯過哦!

數(shù)據(jù)處理
最近在網(wǎng)上爬取了2021年全年的微博熱搜數(shù)據(jù),每天都是一個文件

數(shù)據(jù)比較分散,我們先整理一下
合并數(shù)據(jù)
把當前目錄下的 csv 文件數(shù)據(jù)合并成同一個文件
import?pandas?as?pd
import?os
df_list?=?[]
for?i?in?os.listdir():
????if?"csv"?in?i:
????????day?=?i.split('.')[0].split('_')[-1]
????????df?=?pd.read_csv(i)
????????df['day']?=?day
????????df_list.append(df)
df?=?pd.concat(df_list,?axis=0)
df.to_csv("total.txt",?index=0)
由于 df 數(shù)據(jù)還是不便于后面的分析使用,接下來我們對 df 進行更進一步的處理操作
數(shù)據(jù)預處理
因為抓取數(shù)據(jù)的時候,會有一些重復的數(shù)據(jù),需要去除;同時對于熱搜字段和日期也需要進行一定的處理
df_new?=?df.copy(deep=True)??#?復制一個新的df
df_new.drop_duplicates(inplace=True)??#?刪除重復行
def?deal_day(s):
????d?=?s.split('-')[:2]
????return?'-'.join(d)
def?deal_hot(s):
????if?'萬'?in?s:
????????d?=?s.split('萬')[0]
????????return?int(float(d)*10000)
????else:
????????if?"?"?in?s:
????????????d?=?s.split("?")[1]
????????????return?int(d)
????????else:
????????????return?int(s)
df_new['day_new']?=?df_new['day'].apply(deal_day)
df_new['熱度']?=?df_new['熱度'].apply(deal_hot)
處理之后的數(shù)據(jù)如下

總共有11萬的熱搜數(shù)據(jù)!
我們拿到這些數(shù)據(jù),其實可以做很多有趣的分析,下面蘿卜哥就拋磚引玉,先做一些簡單的可視化分析

整體熱搜分析
可視化部分使用 Pyecharts 進行
#?數(shù)據(jù)可視化
import?pyecharts.options?as?opts
from?pyecharts.charts?import?Line,?Bar,?Pie,?Calendar
from?pyecharts.charts?import?WordCloud?as?wc
from?pyecharts.commons.utils?import?JsCode
from?pyecharts.globals?import?SymbolType
import?datetime
import?random
熱搜日歷
先來看看微博熱點日歷,這一年,微博運維小哥哥,哪一天最忙呢
searchcount_value?=?df_new.groupby('day')['熱度'].sum().values.tolist()
searchcount_index?=?df_new.groupby('day')['熱度'].sum().index.tolist()
search_data?=?list(zip(searchcount_index,?searchcount_value))
def?calendar_base(data)?->?Calendar:
????background_color_js?=?(
????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
)
????c?=?(
????????Calendar(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????????.add("",?data,?calendar_opts=opts.CalendarOpts(range_="2021",?pos_right="5%",?pos_left="8%"))
????????.set_global_opts(
????????????title_opts=opts.TitleOpts(title="微博熱搜日歷"),
????????????visualmap_opts=opts.VisualMapOpts(
????????????????max_=400000000,
????????????????min_=0,
????????????????orient="horizontal",
????????????????is_piecewise=True,
????????????????pos_top="230px",
????????????????pos_left="100px",
????????????),
????????)
????)
????return?c
calendar_base(search_data).render_notebook()
Output:

可以看到,7月末,8月初是熱搜最為密集的時期,畢竟是奧運會期間嘛。然后總體來看,上半年要比下半年熱搜更多,看來開年是各種熱門事件的集中爆發(fā)時間啊
而熱搜最高的就是2021-07-29這一天,我們來單獨看看這一天的情況
熱搜總量最高
df_07_29?=?df_new[df_new['day']?==?'2021-07-29']
df_07_29?=?df_07_29.sort_values(by='熱度',?ascending=False)
def?bar_chart(x,?y)?->?Bar:
????background_color_js?=?(
????????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
????)
????c?=?(
????????Bar(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????????#Bar()
????????.add_xaxis(x)
????????#?.add_xaxis(searchcount.index.tolist()[:10])
????????.reversal_axis()
????????.add_yaxis("",?y,?
???????????????????label_opts=opts.LabelOpts(position='inside',?formatter="{b}?{c}"),
??????????????????color='plum',
??????????????????)
????????.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30,),
?????????????????????????????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),),
????????????????????????yaxis_opts=opts.AxisOpts(
????????????????????????????axislabel_opts=opts.LabelOpts(is_show=False,),
????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),
????????????????????????axistick_opts=opts.AxisTickOpts(
????????????????????????is_show=False,
????????????????????????length=25,
????????????????????????linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
????????????????????),)
????????????????????????)
????????.set_series_opts(
????????????itemstyle_opts={
????????????"normal":?{
????????????????"color":?JsCode("""new?echarts.graphic.LinearGradient(0,?0,?0,?1,?[{
????????????????????offset:?0,
????????????????????color:?'rgba(255,100,97,.5)'
????????????????},?{
????????????????????offset:?1,
????????????????????color:?'rgba(221,160,221)'
????????????????}],?false)"""),
????????????????"barBorderRadius":?[30,?30,?30,?30],
????????????????"shadowColor":?'rgb(0,?160,?221)',
????????????}}
????????)
????)
????return?c
bar_chart(df_07_29['標題'].values.tolist()[:10],?df_07_29['熱度'].values.tolist()[:10]).render_notebook()
Output:

這一天的高量熱搜基本被奧運會相關的話題占據(jù)了,而乒乓球又是熱搜中的熱搜
我們再通過一個詞云圖來看看這一天出現(xiàn)的詞匯情況
import?jieba
from?wordcloud?import?WordCloud
from?PIL?import?Image
import?numpy?as?np
weibo_title?=?df_new['標題'].values.tolist()
font?=?r'C:\Windows\Fonts\FZSTK.TTF'
STOPWORDS?=?{"被",?"@",?"我",?"她",?"你",?"他",?"了",?"的",?"吧",?"嗎",?"在",?"啊",?"不",?"也",?"還",?"是",
?????????????"說",?"都",?"就",?"沒",?"做",?"人",?"被",?"不是",?"現(xiàn)在",?"什么",?"這",?"呢",?"知道",?"鄧",?"我們",?"他們",?"和",?"有",?"",?"",
????????????"要",?"就是",?"但是",?"而",?"為",?"自己",?"中",?"問題",?"一個",?"沒有",?"到",?"這個",?"并",?"對"}
#?STOPWORDS?=?{}
def?wordcloud(data,?name,?pic=None):
????comment?=?jieba.cut(str(data),?cut_all=False)
????words?=?'?'.join(comment)
????img?=?Image.open(pic)
????img_array?=?np.array(img)
????wc?=?WordCloud(width=2000,?height=1800,?background_color='white',?font_path=font,?mask=img_array,
???????????????????stopwords=STOPWORDS,?contour_width=3,?contour_color='steelblue')
????wc.generate(words)
????wc.to_file(name?+?'.png')
wordcloud(weibo_title,?'0729',?"1.PNG")
Output:

全年熱點排行
我們再來看看2021全年熱搜的排行榜
Top10
bar_chart(df_new_sort['標題'].values.tolist()[:10],?df_new_sort['熱度'].values.tolist()[:10]).render_notebook()
Output:

可以看到,趙英俊的意外離世還是引起了很大的波動,而趙麗穎馮紹峰的離婚也是賺足了吃瓜群眾的眼球
Top20
我們把榜單延長至 top20,來看看還有哪些熱點被廣大網(wǎng)友關注呢
bar_chart(df_new_sort['標題'].values.tolist()[11:20],?df_new_sort['熱度'].values.tolist()[11:20]).render_notebook()
Output:

每月最高熱搜
我們還是通過時間線圖的方式來展示每個月最高熱搜情況
month?=?['2021-01',?'2021-02',?'2021-03',?'2021-04',?'2021-05',?'2021-06',?
?????????'2021-07',?'2021-08',?'2021-09',?'2021-10',?'2021-11',?'2021-12']
result_dict?=?{}
for?i?in?month:
????dd?=?df_new[df_new['day_new']?==?i]
????dd?=?dd.sort_values(by='熱度',?ascending=False)
????dd_list?=?dd.iloc[0].values.tolist()
????result_dict[dd_list[-1]]?=?dd_list[0]?+?','?+?str(dd_list[1])
df_2021?=?pd.DataFrame.from_dict(result_dict,?orient='index',columns=['標題'])
df_2021?=?df_2021.reset_index().rename(columns?=?{'index':'day_new'})
y?=?gen_y(df_2021)
myLine(y).render_notebook()
Output:

可以看出,微博的吃瓜群眾們,關心的事情還真的是多姿多彩,既有家國大事,也有娛樂八卦;既有游戲體育,也有生活民生。可謂一個全方位吃瓜~

全年熱搜之王
下面我們把熱搜標題進行細分,從不同的詞匯上來探索下這一年的熱搜情況
首先進行 jieba 分詞處理,并提取出人名、名詞和動詞三類
import?jieba.posseg?as?psg
name_list?=?[]
noun_list?=?[]
verb_list?=?[]
for?i?in?weibo_title:
????result?=?psg.cut(i)
????for?x?in?result:
????????if?x.flag?==?'nr':
????????????name_list.append(x.word)
????????elif?x.flag?==?'n':
????????????noun_list.append(x.word)
????????elif?x.flag?==?'v':
????????????verb_list.append(x.word)
熱搜之王-人物
我們先來統(tǒng)計人物的熱搜情況
#?熱搜之王-人物
name_counts?=?{}
stopword?=?['陳',?'李',?'楊',?'王',?'郭',?'吳',?'周',?'明星',?'辟謠',?'石家莊',?'阿富汗',?'晉級',?'官宣']
for?w?in?name_list:
????if?w?not?in?stopword:
????????name_counts[w]?=?name_counts.get(w,?0)?+?1
sort_counts?=?sorted(name_counts.items(),?key=lambda?item:?item[1],?reverse=True)
bar_total([x[0]?for?x?in?sort_counts[:20]],?[x[1]?for?x?in?sort_counts[:20]],?"熱點人物").render_notebook()
Output:

可以看到王一博成為了全年上熱搜最多的那個人,強!而那個以一己之力重新定義牙簽的男人也在熱搜榜單
下面我們就來分別看下他們的熱搜具體情況
熱搜-王一博
wangyibo?=??df_new[df_new['標題'].str.contains('王一博')].sort_values(by='熱度',?ascending=False)
bar_chart(wangyibo['標題'].values.tolist()[:10],?wangyibo['熱度'].values.tolist()[:10]).render_notebook()
Output:

嗯,不做評論了,畢竟不是很熟悉~
熱搜-吳簽
wuyifan?=??df_new[df_new['標題'].str.contains('吳亦凡')].sort_values(by='熱度',?ascending=False)
bar_chart(wuyifan['標題'].values.tolist()[:10],?wuyifan['熱度'].values.tolist()[:10]).render_notebook()
Output:

哈哈哈,這對于簽哥來說應該是冰火兩重天的一年,前面好好的上熱搜,走流量,后面突然就涼了,也不知道現(xiàn)在是啥情況了~
人物-詞云
再通過詞云的方式來整體看下全年的熱搜名人榜
#?熱點之王詞云
def?wordcloud_base(words)?->?wc:
????background_color_js?=?(
????????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
????)
????c?=?(
????????wc(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????????.add("",?words,?word_size_range=[20,?100],?shape="star")
????????.set_global_opts(title_opts=opts.TitleOpts(title=""))
????)
????return?c
wordcloud_base(zip([x[0]?for?x?in?sort_counts[:100]],?[x[1]?for?x?in?sort_counts[:100]])).render_notebook()
Output:

熱搜之王-名詞
bar_total([x[0]?for?x?in?sort_noun[:20]],?[x[1]?for?x?in?sort_noun[:20]],?"熱門名詞").render_notebook()
Output:

出乎意料,2021年熱搜名詞最高的竟然是“男子”這個詞匯,要知道,我以前也分析過2019年的熱搜,當時的最高詞匯可是“女生”
玫瑰餅圖

下面我們就來探究下,到底“男子”這個詞匯為什么出現(xiàn)頻率這么高
男子與女子
#?男子和女子
nanzi?=?df_new[df_new['標題'].str.contains('男子')].sort_values(by='熱度',?ascending=False)
nvzi?=?df_new[df_new['標題'].str.contains('女子')].sort_values(by='熱度',?ascending=False)
bar_chart(nanzi['標題'].values.tolist()[:20],?nanzi['熱度'].values.tolist()[:20]).render_notebook()
bar_chart(nvzi['標題'].values.tolist()[:20],?nvzi['熱度'].values.tolist()[:20]).render_notebook()
Output:


原來2021年是奧運年,各種男女子項目都紛紛進入熱搜了~
名詞-詞云
wordcloud_base(zip([x[0]?for?x?in?sort_noun[:100]],?[x[1]?for?x?in?sort_noun[:100]])).render_notebook()
Output:

可以看到,新冠,疫苗,病例,本土等和疫情相關的詞匯依然是2021年的熱點詞匯,只能說疫情還未結束,我們仍需努力!
熱搜之王-動詞
最后來看下熱門的動詞情況
#?熱門動詞
bar_total([x[0]?for?x?in?sort_verb[:20]],?[x[1]?for?x?in?sort_verb[:20]],?"熱門動詞").render_notebook()
Output:

不出意外,“回應”仍然是微博的最熱動詞,這很“微博”
回應啥
我們來看看熱度最高的幾個回應都是啥
huiying?=?df_new[df_new['標題'].str.contains('回應')].sort_values(by='熱度',?ascending=False)
bar_chart(huiying['標題'].values.tolist()[:20],?huiying['熱度'].values.tolist()[:20]).render_notebook()
Output:

基本都是娛樂圈的那些事,回應有時候代表一種態(tài)度,可能是直面責難,勇于承擔;也可能是據(jù)理力爭,不懼輿論
其他熱門動詞
否認
否認就是正面硬剛了,我沒有,我不是,我不知道,否認三連搞起來
fouren?=?df_new[df_new['標題'].str.contains('否認')].sort_values(by='熱度',?ascending=False)
bar_chart(fouren['標題'].values.tolist()[:20],?fouren['熱度'].values.tolist()[:20]).render_notebook()
Output:

道歉
當然還有心真道歉的,痛徹心扉的文字,聲淚俱下的表述,讓你沒辦法硬起心腸,沒辦法不選擇原諒
daoqian?=?df_new[df_new['標題'].str.contains('道歉')].sort_values(by='熱度',?ascending=False)
bar_chart(daoqian['標題'].values.tolist()[:20],?daoqian['熱度'].values.tolist()[:20]).render_notebook()
Output:

離婚&分手
fenli?=?df_new[df_new['標題'].str.contains('離婚|分手')].sort_values(by='熱度',?ascending=False)
bar_chart(fenli['標題'].values.tolist()[:20],?fenli['熱度'].values.tolist()[:20]).render_notebook()
Output:

趙麗穎和馮紹峰的離婚絕對屬于年度大瓜了~
動詞-詞云
wordcloud_base(zip([x[0]?for?x?in?sort_verb[:100]],?[x[1]?for?x?in?sort_verb[:100]])).render_notebook()
Output:


全年熱搜視頻
熟悉我的小伙伴應該知道,寫這類文章,最后我一般都會制作一個動態(tài)條形視頻,這次也不例外,2021全年,每個熱點事件動態(tài)展示視頻
好了,以上就是今天分享的所有內容,如果對你有幫助,幫忙點贊和在看支持哦~
完整的微博熱搜數(shù)據(jù)獲取代碼,公眾號:jackcui-ai,后臺回復「微博」,即可獲取!

推薦閱讀
?? ?馬賽克,克星,真來了!?? ?領證啦!????又整新活,AI 殺麻了!
