2018年异逐,我在簡書寫下了這些文字

轉(zhuǎn)眼間,2018年即將過去插掂,各種APP開始推送我在2018年做了那些時(shí)間灰瞻,花了多少時(shí)間在這些APP上面腥例。當(dāng)然我們的生活還得掌握在自己的手上,我需要給我這一年來的寫作做一個(gè)總結(jié)酝润。

我的文章基本都在簡書上燎竖,從2016年到現(xiàn)在將近寫了300篇,本次的數(shù)據(jù)挖掘主要基于簡書平臺(tái)要销。

數(shù)據(jù)獲取

數(shù)據(jù)挖掘的第一步是在于數(shù)據(jù)獲取构回,數(shù)據(jù)獲取的常見策略就是網(wǎng)頁爬蟲。我本身就是靠爬蟲入門Python疏咐,后期也花了一些時(shí)間在爬蟲的練習(xí)上纤掸,所以這一步難不倒我。代碼如下:

# 構(gòu)建抓取的主頁面
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
    "accept": "text/html, */*; q=0.01"
}
# 構(gòu)建爬取鏈接
url = "http://www.reibang.com/u/9ea40b5f607a?order_by=shared_at"
data = {
    'page': 1
}
# 爬取所有文章頁面的URL
pattern = re.compile(r'<a.*href=("/p/[0-9a-zA-Z]*")>')
# 一共296篇浑塞,每頁9篇
page_num = math.floor( 296 / 9) 
page_url = []
for i in range(1, page_num+2):
    data['page'] = i
    r = requests.get(url = url, headers=headers, params=data)
    # 判斷返回碼是否為200
    if r.status_code == 200:
        # 從主頁面解析出其他頁面的網(wǎng)址
        hrefs = re.findall(pattern=pattern, string=r.text)
        # 去重
        hrefs = list(set(hrefs))
        # 加入url
        page_url += hrefs
        # 隨機(jī)等待幾秒, 避免對服務(wù)器造成太大壓力
        time.sleep(random.random() * 10 / 2)
    else:
        #如果不為200, 則返回當(dāng)前的爬取頁面
        print("current page is:{}".format(i))
        break
# 保存所有的URL地址信息
url_file = open('page_url.txt','w')
for url in page_url:
    url_file.write('http://www.reibang.com' + url[1:-1] + '\n')
    
url_file.close()
# 為了方便進(jìn)行時(shí)間分析借跪,將時(shí)間以時(shí)間戳(timestamp)的形式進(jìn)行存放
# 獲取的時(shí)間是當(dāng)?shù)貢r(shí)間
def time_convert(localtime, fmt="%Y.%m.%d %H:%M"):
    tmp_time = time.strptime(localtime,fmt)
    tmp_stamp = time.mktime(tmp_time)
    return tmp_stamp
def parse_page_url(url, headers):
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.content, "lxml")
    # 標(biāo)題
    title = str(soup.find(attrs={"class":"title"}).string)
    # 文章發(fā)布時(shí)間
    publish_time = soup.find(attrs={"class":"publish-time"})
    first_publish_time = time_convert(str(publish_time.string[:-1]))
    ## 并非所有文章都會(huì)有更新
    if publish_time.get('title'):
        last_update_time = time_convert(" ".join(publish_time['title'].split(" ")[1:]))
    else:
        last_update_time = ""
    # 除了字?jǐn)?shù),標(biāo)題和日期外, 其他是動(dòng)態(tài)加載
    # 仔細(xì)觀察網(wǎng)頁酌壕,發(fā)現(xiàn)最后有一個(gè)<script type="application/json">部分記錄著需要的信息
    # 多級結(jié)構(gòu)
    info_dict = json.loads(str(soup.find(attrs={"data-name":"page-data"}).string))
    #print(info_dict)
    likes_count = info_dict['note']['likes_count']
    views_count = info_dict['note']['views_count']
    public_wordage = info_dict['note']['public_wordage']
    # 返回字典
    return {
        'title' : title,
        'first_time': first_publish_time,
        'last_time': last_update_time,
        'likes': likes_count,
        'views': views_count,
        'words': public_wordage
    }
stat_list = []
for url in open("./page_url.txt",'r'):
    url = url.strip()
    time.sleep(random.random() * 10 / 2)
    print("Processing {}".format(url))
    result = parse_page_url(url, headers=headers)
    print("The title is {}".format(result['title']))
    print("The view is {}".format(result['views']))
    stat_list.append(result)
# 數(shù)據(jù)保存為JSON格式
with open('artile_stat.json','w', encoding="utf-8") as file:
    file.write(json.dumps(stat_list,indent=2,ensure_ascii=False))

代碼雖然很長掏愁,但是邏輯比較簡單,就是先獲取我所有的文章的URL卵牍,然后從每個(gè)URL中獲取每個(gè)文章的如下信息(這里沒有獲取文章全文果港,后期如果做文本挖掘的話,會(huì)考慮下載全文糊昙。)

  • 文章名
  • 發(fā)表日期
  • 字?jǐn)?shù)
  • 閱讀量
  • 喜歡數(shù)

其中獲取閱讀量和喜歡數(shù)的過程比較麻煩辛掠,因?yàn)楹啎晕堰@些信息藏了起來,利用了js腳本最后進(jìn)行加載释牺,所以找了半天公浪。(估計(jì)未來就要用ajax技術(shù)反爬取了)

還有一點(diǎn),我將時(shí)間也特意轉(zhuǎn)成了時(shí)間戳的形式船侧,方便涉及到時(shí)間序列的分析欠气。

最后數(shù)據(jù)保存為JSON格式,便于不同程序間的數(shù)據(jù)交互镜撩。

數(shù)據(jù)探索

數(shù)據(jù)探索原本計(jì)劃用的R語言预柒,但是考慮連續(xù)性,就繼續(xù)用了Python(畢竟我又不是只會(huì)一門R語言)袁梗。

加載數(shù)據(jù)宜鸯,查看數(shù)據(jù)是否能夠被pandas識(shí)別。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_json('./artile_stat.json', encoding="utf-8")
df.head()

pandas非常智能的將時(shí)間戳用人類更加喜歡的形式進(jìn)行了展示遮怜。

前5行

第一個(gè)問題: 我到目前為止一共寫了多少字淋袖,有多少人看?

total_words = np.sum(df['words'])
total_views = np.sum(df['views'])
total_likes = np.sum(df['likes'])
print(total_words, total_views, total_likes)
# 334190 335781 1512

簡書本身也是有字?jǐn)?shù)統(tǒng)計(jì)和收獲的喜歡數(shù)統(tǒng)計(jì)锯梁,我進(jìn)行了比較之后發(fā)現(xiàn)兩者基本吻合即碗。而總閱讀量則是簡書沒有提供給我的信息焰情。

數(shù)據(jù)顯示,從2016年開始到現(xiàn)在剥懒,我一共寫了30多萬字内舟,有30多萬的瀏覽次數(shù),考慮到我寫了快300篇初橘,也就是平均每篇的1000閱讀量验游。那么,只要我堅(jiān)持寫下去保檐,再寫700篇耕蝉,閱讀量就能破百萬了。

# 統(tǒng)計(jì)不同年份的字?jǐn)?shù)夜只,喜歡數(shù)垒在,字?jǐn)?shù)
year_stat = df.groupby([pd.Grouper(freq="1Y", key="first_time")]).sum()
year_stat.iloc[:,1:3].plot(kind="line")

那么這些數(shù)據(jù)細(xì)化到每一年又是一種怎樣的變化呢?

閱讀量
喜歡數(shù)

盡管我寫的東西的確實(shí)越來越多了盐肃,但是后期專業(yè)性越來強(qiáng),技術(shù)內(nèi)容越來越多权悟,反而我的閱讀量是越來越少砸王。但是閱讀量并不是衡量作品的最好指標(biāo),畢竟很多閱讀量僅僅是來自于搜索引擎峦阁,喜歡數(shù)可能才是更好的指標(biāo)谦铃,所以從這個(gè)角度,我寫的東西反倒是更受專業(yè)的人的喜歡了榔昔。希望2019年驹闰,我也不在局限于我自己的專業(yè)領(lǐng)域,也要多扯淡撒会,寫點(diǎn)群眾們喜聞樂見的文章嘹朗。

以上算是年度性的總結(jié),如果單獨(dú)看2018年诵肛,還可以看下哪一個(gè)月的寫作量最高屹培,以及我喜歡在周幾推送文章呢?

index = df.first_time > pd.to_datetime('2018-1-1',format="%Y-%m-%d")
year2018 = df[index]
month_stat = year2018.groupby(pd.Grouper(freq="1W",key="first_time"))
month_stat.count().iloc[:,2].plot(kind="line")
一年中的發(fā)表分布

我發(fā)現(xiàn)今年的6月份和7月份寫的東西很少怔檩,然而我也記不起當(dāng)時(shí)自己為何寫的那么少褪秀,反思一下,可能天氣太熱薛训,沒有狀態(tài)媒吗。

week_stat = year2018.groupby(df['first_time'].dt.dayofweek)['title'].count()
week_stat.plot(kind="bar")
一周的發(fā)文分布

這里的0表示周一,5和6就是周六和周日乙埃,這個(gè)分布就非常容易理解了闸英,畢竟周末是休息的時(shí)間呀锯岖。

接下來就是評選下我的年度最受歡迎的文章了, 我最喜歡其中snakemake--我最喜歡的流程管理工具, 因?yàn)閟nakemake是我使用頻率比較頻繁的工具自阱,所以里面會(huì)有很多新的體會(huì)在里面嚎莉,而且我也安利了很多人去用它。

year2018.sort_values(by="views", ascending=False).iloc[0:10,:]
年度十佳

最后做一個(gè)詞云沛豌,總結(jié)下我的2018吧趋箩。

# 詞頻分析
import jieba
all_words = "\n".join(df.title)
words = jieba.lcut(all_words)
counts = {}
stopwords = [line.strip() for line in open("./STOP_USE.txt", encoding="utf-8").readlines()]

for word in words:
    if word not in stopwords:
        if len(word) == 1:
            continue
        else:
            counts[word] = counts.get(word,0) + 1
from PIL import Image
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
stopwords += list(STOPWORDS)
my_mask = np.array(Image.open("./mask.jpg"))
wc = WordCloud(width= 3000,
               height= 1500,
               max_words= 300,
               background_color="white", 
               mask=my_mask,
               stopwords=stopwords, 
               max_font_size=50,
              font_path='./SourceHanSerifCN-Regular.ttf')
wc.generate(" ".join(words))
wc.to_file("result.pdf")
我的2018
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市加派,隨后出現(xiàn)的幾起案子叫确,更是在濱河造成了極大的恐慌,老刑警劉巖芍锦,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竹勉,死亡現(xiàn)場離奇詭異,居然都是意外死亡娄琉,警方通過查閱死者的電腦和手機(jī)次乓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孽水,“玉大人票腰,你說我怎么就攤上這事∨” “怎么了杏慰?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炼鞠。 經(jīng)常有香客問我缘滥,道長,這世上最難降的妖魔是什么谒主? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任朝扼,我火速辦了婚禮,結(jié)果婚禮上霎肯,老公的妹妹穿的比我還像新娘吟税。我一直安慰自己,他們只是感情好姿现,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布肠仪。 她就那樣靜靜地躺著,像睡著了一般备典。 火紅的嫁衣襯著肌膚如雪异旧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天提佣,我揣著相機(jī)與錄音吮蛹,去河邊找鬼荤崇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潮针,可吹牛的內(nèi)容都是我干的术荤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼每篷,長吁一口氣:“原來是場噩夢啊……” “哼瓣戚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起焦读,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤子库,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后矗晃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仑嗅,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年张症,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仓技。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俗他,死狀恐怖脖捻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拯辙,我是刑警寧澤郭变,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布颜价,位于F島的核電站涯保,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏周伦。R本人自食惡果不足惜夕春,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望专挪。 院中可真熱鬧及志,春花似錦、人聲如沸寨腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迫卢。三九已至倚搬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乾蛤,已是汗流浹背每界。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工捅僵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眨层。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓庙楚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趴樱。 傳聞我的和親對象是個(gè)殘疾皇子馒闷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容