為了更好的運營,我剖析了某公眾號的資料

僱個城管打天下發表於2019-02-23

完整原始碼可在公眾號:「01二進位制」後臺回覆:「公眾號資料分析」獲取

1. 前言

在同學的影響下,我在18年9月註冊了一個公眾號「01二進位制」,因為種種原因(其實就是懶)直到11月11日才在這個公眾號上釋出了第一篇文章。到寫這篇文的時候,我已經發布過21篇文章,使用者也只有86人,這不禁引發了我深深的思考。為啥我的公號沒有使用者?

為了更好的運營,我剖析了某公眾號的資料

為此我還特地請教了我的好友?哥,他告訴我,文筆是一方面,另一方面還要能抓住熱點,說完便給我發了一份某知名公眾號的相關資料,讓我給安排安排。

為了更好的運營,我剖析了某公眾號的資料

這不,一分析才發現原來想讓公眾號有閱讀量也是要講究套路的,接下來就讓我們以一個coder的角度去分析下究竟是哪些套路吧。

2. 分析目的

筆者在本專案中的分析目的主要有3個:

(1)對某知名公眾號內容運營方面的若干分析,主要是對發文量、點贊量、發文時間等方面的描述性分析;

(2)通過對標題的分析,來說明什麼樣標題更受人喜歡;

(3)將冗雜無序的結構化資料和非結構化資料進行視覺化,展現資料之美。

3. 實驗環境

工欲善其事,必先利其器,在開始分析之前,我先說明此次分析所處的實驗環境,以免出現異常:

  • MacOS 10.14.3
  • Python 3.6.8(Anaconda)
  • Visual Studio Code(開發)
  • Jupyter Notebook(除錯環境)
  • 使用的包有:
    • pkuseg(分詞)
    • pyecharts(繪圖)
    • numpy(數學計算)
    • pandas(資料計算)

4. 資料獲取及預覽

4.1 資料獲取

本次資料集是通過網路爬蟲爬取某公眾號的所以文章整理而成,該部分不進行闡述,需要資料集可以直接下載原始碼檢視或者在公眾號:「01二進位制」後臺回覆:「公眾號資料集」獲取。

4.2 資料預覽

在該專案中,我使用了Pandas進行資料的讀取和預覽,Pandas在資料科學中使用非常廣泛,有興趣的小夥伴可以去搜尋相關資料瞭解下。

資料預覽程式碼如下:

import pandas as pd
# 讀取資料集
df=pd.read_excel('data/data.xlsx')
# 顯示前五行資料
df.head()
複製程式碼

此次的資料集長下面這樣?:

為了更好的運營,我剖析了某公眾號的資料

我統計了下,截至2019年1月22日,該公眾號總共發表文章1111篇(對單身?還真是一個友好的數字呢)。

5. 描述性分析

該部分中,筆者將會對該資料集中主要的數值型資料進行描述性的統計分析,屬於較為常規的資料分析,能揭示出一些問題。視覺化工具採用的是pyecharts,官網地址:pyecharts.org/#/,推薦使用他的原因…

5.1 文章來源

單靠一個人的力量想要讓公眾號保持每日一文的活躍度很難。所以,很多公眾號都會適時的轉載一些別人寫的比較好的文章。但如果轉載文章過多,原創性就大大降低了,那麼比例要多少比較好呢?我們來看看該知名公眾號的轉載文章數量和原創文章數量吧:

# 獲取轉載文章
df_copy = df[df['原文連結'].str.len() > 5]
print('轉載文章數量為:'+str(len(df_copy)))
print('原創文章數量為:'+str(len(df)-len(df_copy)))
複製程式碼

在該資料集中,只要原文連結這一欄裡有資料的則預設為轉載,沒有資料的預設為原創,輸出的結果為:

轉載文章數量為:249
原創文章數量為:862
複製程式碼

粗略計算下比例大約為3.5:1

5.2 他到底有多火

從文章開始我就在說這個資料集是某知名公眾號的資料集,那麼到底有多知名呢?接下來我們從發文數量、點贊數量和平均每篇文章的點贊數量入手來一探究竟。

其實這個部分的思路不難:只需要建立一個5行4列(表示5年,4個季度)的矩陣,獲取到時間所在的年份和季度後再在相應位置上加1:

# 獲取文章數隨季度變化的矩陣
def getPostJiDu(df):
    # 生成一個5行4列全為0的矩陣
    list_jidu = [[0]*4 for i in range(5)]
    for articleTime in df['發文時間']:
        # 獲取日期
        date = str(articleTime).split(' ')[0]
        # 獲取所在年份
        year = getYear(date)
        # 獲取所在季度
        jidu = getJiDu(date)
        list_jidu[year-2015][jidu-1] += 1
    return list_jidu
複製程式碼

然後在利用pyecharts將圖示畫出來即可:

# 畫出發文數量隨季度變化的走勢圖
def drawPostJiDu(df):
    # 獲取文章季度矩陣
    res_list = getPostJiDu(df)
    # 構造標題列表
    attr = []
    for year in range(len(res_list)):
        for month in range(len(res_list[year])):
            attr.append("{}年第{}季度".format(str(year+2015),str(month+1)))

    # 構造值列表
    v1 = reduce(operator.add, res_list)

    # 去掉無用值
    attr = attr[2:-3]
    v1 = v1[2:-3]

    line = Line("發文數量變化走勢圖", width=1500, height=500)
    line.add("某知名公眾號", attr, v1, is_stack=True,
             is_label_show=True, is_smooth=True, is_fill=True,  xaxis_name='季度', yaxis_name='發文數',xaxis_rotate=30)
    return line
複製程式碼

這裡提一下,因為該公眾號2015年第1、2季度和2019年2、3、4季度均沒有資料,所以需要執行一步去掉無用值的操作。

1

以此類推我們也可以得到點贊數量隨時間變化的走勢圖:

為了更好的運營,我剖析了某公眾號的資料

下面是平均每篇文章點贊數量的變化。

為了更好的運營,我剖析了某公眾號的資料

不得不說,這個公眾號的流量真的不容小覷,平均一篇文章能有1w+的點贊量(還不算閱讀量),難怪廣告商都排隊買她家的廣告位,據說有的廣告商甚至開出了30w的廣告費!(啥時候我的文章也能有這麼多流量啊?)

5.3 會不會是標題黨

說實話,筆者在做分析的時候,看到上面的資料異常震驚,他每天到底發的是什麼樣的文章才能有這麼龐大的流量啊。

為了更好的運營,我剖析了某公眾號的資料

高中語文老師經常跟我們提起,一個好的文章標題可以給你的文章加分不少。想到這我就開始懷疑這傢伙會不會是一個標題黨?又或是它的標題真的那麼吸引人?實踐是檢驗整理的唯一標準。來來來,收起笑容,我們來分析下。

5.3.1 什麼樣的文章標題更討喜

這一部分我們的思路如下:獲取到文章標題,然後進行分詞、停用詞過濾、統計詞頻,生成詞雲。這些都是上篇文章介紹過的,如果不清楚,移步《李鬼見李逵——我用翟天臨的論文做了分析》,這裡直接上程式碼:

# 選擇文章標題並分析
def chooseMostPop50Titles(df):
    texts=[]
    for title in list(df['標題']):
        # 防止出現沒有標題的文章
        if len(str(title))>3:
            if str(title) not in ['分享圖片']:
                # 分詞、去掉停用詞
                text=cleanWord(str(title))
                texts.append(text)
    # 將二維陣列變成一維陣列
    title_cuts=reduce(operator.add, texts)
    
    # 統計每個詞的詞頻
    counter = Counter(title_cuts)
    # 選出詞頻最高的50個
    counter=counter.most_common(50)
    # 輸出詞頻最高的50個單詞
    pprint.pprint(counter)
    name = []
    value = []
    for count in counter:
        name.append(count[0])
        value.append(count[1])
    return drawWordCloud(name,value)

# 資料視覺化(生成詞雲)
def drawWordCloud(name, value):
    wordcloud = WordCloud(width=800, height=400)
    wordcloud.add("標題詞雲圖", name, value, word_size_range=[
                  20, 100], rotate_step=20)
    return wordcloud
複製程式碼

考慮到篇幅的問題,詞頻統計的結果我就不放出來了,這裡直接放出詞雲圖:

為了更好的運營,我剖析了某公眾號的資料

看到這張詞雲圖,大致就能猜到該公眾號面向的主要群體是哪一類人了。有興趣的可以在評論區留言說說你對這張詞雲圖的想法。

5.3.2 標題多長比較好

標題能抓住痛點自然是好事,但是和長度有沒有關係呢?(這個部分很簡單,就是歸類下長度,所以直接放程式碼了)

# 畫出標題長度和點贊數之間的關係
def drawTitleLenAndFavourite(df):
    v1 = [0]*6
    for i in range(len(df['標題'])):
        title_len = len(str(df['標題'][i]))
        if title_len >= 5 and title_len <= 8:
            v1[0] += df['點贊'][i]
        elif title_len >= 9 and title_len <= 12:
            v1[1] += df['點贊'][i]
        elif title_len >= 13 and title_len <= 16:
            v1[2] += df['點贊'][i]
        elif title_len >= 17 and title_len <= 20:
            v1[3] += df['點贊'][i]
        elif title_len >= 20 and title_len <= 24:
            v1[4] += df['點贊'][i]
        elif title_len >= 25:
            v1[5] += df['點贊'][i]
    attr = ['5-8', '9-12', '13-16', '17-20', '21-24', '24+']
    bar = Bar("標題長度和點贊數之間的關係", title_pos='center')
    bar.add("", attr, v1, is_label_show=True)
    return bar
複製程式碼

視覺化結果:

為了更好的運營,我剖析了某公眾號的資料

現在想想,高中語文老師說的標題不宜過長,也不宜過短,13-16字之間最適宜原來不是忽悠我啊。

5.4 什麼時候發文章比較好

每個人看文章的時間都不確定,但是大多數人的空閒時間還是差不多的,所以到這就有人會問了什麼時候推送文章會比較好呢?我們先來看看這個公眾號是怎麼安排的。

5.4.1 發文數量和所在時間段的關係

粗略的瀏覽了下資料發現大多都是在晚上,所以這裡我覺得采用餅狀圖來視覺化二者之間的關係比較好(其實就是想順便換個圖表試試)

# 畫出發文數量和所在小時之間的餅狀關係圖
def drawPostHour(df):
    # 獲取發文時間
    list_hour = getPostHour(df)
    array = np.array(list_hour)
    # 獲取發文時間最多的5個時間段
    attr = list(sorted(np.argsort(array)[-5:]))
    attr = ["{}時".format(i) for i in attr]
    # 獲取發文時間最多的5個時間的數量
    v1 = list(array[sorted(np.argsort(array)[-5:])])
    pie = Pie("發文時間分佈圖")
    pie.add("", attr, v1, is_label_show=True)
    return pie
複製程式碼

在上述程式碼中,我們用getPostHour()這個函式來生成一個集合,思路和上面類似,先生成一個全為0的列表,在時間內的加一就可以了。下面是生成的餅圖:

為了更好的運營,我剖析了某公眾號的資料

可以看到該公眾號大多數文章都是在晚上10點、11點左右推送的,細想一下確實也是。大多數上班族在睡覺之前也就是這個時間段躺在床上刷手機,久而久之都讓使用者養成每天睡覺前必看一篇文章的習慣了,不得不說這種使用者黏性是真的強啊!

5.4.2 使用者點贊量如何

公眾號推文給使用者,那使用者對文章的反應怎麼樣呢?我們來看看使用者點贊隨發文時間的柱狀圖:

為了更好的運營,我剖析了某公眾號的資料

程式碼的思路和之前的一致,這裡就不放出來了,總的來說,這個公眾號的點贊量還是很可觀的。

6. 結語

通過上述幾個分析,我覺得如果想讓公眾號有更多的讀者和閱讀量上一個臺階可以從下面2個角度去考慮:

  • 要起一個好的標題,這個標題一定要符合你面向群體的喜好,而且不能太長
  • 思考一下你面向群體的空閒時間,在空閒時間內推送文章,逐漸讓使用者對公眾號產生黏性

此外,本文是基礎的探索性質的資料分析文,不是資料分析報告,重在啟迪思路,授人以漁,而且受限於資料規模,得出結論不是本文的目的,對結果的分析分散在各個部分,“文末結論控”不喜勿噴。

完整原始碼可在公眾號:「01二進位制」後臺回覆:「公眾號資料分析」獲取


“萬水千山都是情,給個關注行不行?”

為了更好的運營,我剖析了某公眾號的資料

相關文章