本系列是微信公衆號/文章系列中數據分析的第一篇,僅作一個簡單的示例展示,可供分析參考。
注:爲避免其他影響,這裏不放出具體公衆號名稱。以下爲部分數據截圖。
廣告部分:
- 如何拿到微信文章相關數據,可見記一次微信公衆號爬蟲的經歷(微信文章閱讀點讚的獲取)。相關數據獲取可見文末聯繫方式
- 如何批量關注公衆號,可見自動批量關注微信公衆號(非逆向)
正文部分:
閱讀數
首先,微信文章主要三個數據指標是閱讀點贊和評論,其中評論又分爲評論內容、評論內容點贊、評論總數。先小試牛刀隨便根據閱讀點贊評論數據畫個圖。
# coding: utf-8
import numpy as np
import os
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
if __name__ == '__main__':
fname = fname # 文件名
# 讀取數據
df = pd.read_excel(fname, index_col=0)
plt.cla() # 清空畫圖
register_matplotlib_converters() # 時間序列畫圖,避免報錯或warnning
# 閱讀、點贊、評論數隨日期的變化
# 處理日期格式
df['date'] = pd.to_datetime(df['date'], format="%Y-%m-%d")
date, read_num, like_num, comments = df['date'], df['read_num'], df['like_num'], df['comments']
# 由於這裏一開始拿到的是評論內容(用--分割),所以這裏進行簡單的處理,統計評論數
comments_num = comments.apply(str).apply(lambda item: 0 if 'nan' in item else len(item.split('--')))
df['comments_num'] = comments_num
# 先把閱讀數畫一遍
plt.plot(date, read_num, label='read_num')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
閱讀、點贊、評論數
plt.plot(date, read_num, label='read_num')
plt.plot(date, like_num, label='like_num', color='red')
plt.scatter(date, comments_num, label='comments_num', color='orange')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
這裏評論數爲方便與閱讀和點贊區分,故用了散點來表示。但這裏發現由於閱讀數會遠遠大於點贊和評論數,所以點贊和評論數的趨勢不是很明顯。下面單獨把點贊和評論畫出來。
plt.plot(date, like_num, label='like_num', color='red')
plt.scatter(date, comments_num, label='comments_num', color='orange')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
當然,這裏還有一個方法可以做到把三個指標數據放一起對比。這裏對三個數據都取log函數
plt.plot(date, np.log(read_num), label='read_num')
plt.plot(date, np.log(like_num), label='like_num', color='red')
plt.scatter(date, np.log(comments_num), label='comments_num', color='orange')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
小結一
經過上面幾張圖,有以下發現:
- 某篇文章的閱讀數極其高,遠超超出其他文章。後續可單獨對其分析,或把其除去再分析
- 點贊和評論數據並不是正相關,且與閱讀數也非絕對正相關。
- 大部分文章的點贊數和評論數都處於較低水平,後續可把點贊/評論高的拿出來進行二次分析
- 大部分文章是沒有評論的
注:
- 公衆號分是否有留言功能,該公衆號是具備留言功能的
- 這裏要處理,獲取時間爲2020年3月,數據中最近的文章是1月份的。所以在分析的時候降低了最近文章指標低的影響因素
- 這裏沒有區分一天發多篇文章的情況,所以在下面要進一步進行處理.
整合分析
這裏對同一天/同一個月的文章進行彙總分析。當然也可以自定義改成按季度或者年份來分析
tmp_df = df[['date', 'read_num', 'like_num', 'comments_num']]
tmp_df = tmp_df.set_index(['date'])
rule = 'M' # D, 'M', 'Q', 'QS'...
tmp_df = tmp_df.resample(rule).sum() # 按天/月彙總
date = tmp_df.index
plt.plot(date, np.log(tmp_df['read_num']), label='read_num')
plt.plot(date, np.log(tmp_df['like_num']), label='like_num', color='red')
plt.scatter(date, np.log(tmp_df['comments_num']), label='comments_num', color='orange')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
按天分析
按月分析
頭條影響
公衆號在未認證的情況下,一天只能發表一次文章(但不一定只有一篇)。這裏對同一天文章放置在頭條的影響進行分析
toutiao_df = df['toutiao']
print(toutiao_df.value_counts())
"""
[Out]:
2 317
1 312
Name: toutiao, dtype: int64
"""
這裏分析可以得出,該公衆號在這段時間內大部分時間是同時發佈兩篇文章。所以可以很方便的進行對比分析。這裏可以直接將上面的代碼二次利用,繪圖。
tmp_df1 = df[df['toutiao'] == 1][['date', 'read_num', 'like_num', 'comments_num']]
tmp_df2 = df[df['toutiao'] == 2][['date', 'read_num', 'like_num', 'comments_num']]
tmp_df1 = tmp_df1.set_index(['date'])
tmp_df2 = tmp_df2.set_index(['date'])
rule = 'M' # D, 'M', 'Q', 'QS'...
tmp_df1 = tmp_df1.resample(rule).sum() # 按天/月彙總
tmp_df2 = tmp_df2.resample(rule).sum() # 按天/月彙總
date1 = tmp_df1.index
date2 = tmp_df2.index
plt.plot(date1, tmp_df1['read_num'], label='is_head')
plt.plot(date2, tmp_df2['read_num'], label='no_head')
plt.plot(date1, tmp_df1['like_num'], label='is_head')
plt.plot(date2, tmp_df2['like_num'], label='no_head')
plt.plot(date1, tmp_df1['comments_num'], label='is_head')
plt.plot(date2, tmp_df2['comments_num'], label='no_head')
plt.xlabel('date')
plt.xticks(rotation=30)
plt.ylabel('number')
plt.legend()
plt.show()
閱讀數
點贊數
評論數
小結二
經過上面幾張圖,有以下發現:
- 該公衆號文章在前期發表頻率並不高,總體指標也較爲穩定。能夠在一些時間段內產出較高反響的文章
- 頭條文章在各方面基本上會優於非頭條文章,且大部分數據情況好的文章都來自於頭條文章
- 大部分文章的點贊數和評論數都處於較低水平,後續可把點贊/評論高的拿出來進行二次分析
注:
4. 這裏發現在最新的時間段,文章指標較低,這個可能是由於近期文章的指標增長較慢,導致結果存在偏差。可根據需求刪除或過段時間二次分析。
以上就是第一次對微信文章數據的分析,下一篇會針對標題、評論等文字指標進行討論,挖掘數據指標高的文章類型及如何產出。