Python 分析程序員最關心的竟不是技術,而是…

本文首發於 CSDN 程序人生(ID:coder_life)

從工業時代進入到信息服務時代,互聯網行業逐漸興起,傳統行業逐漸沒落。現如今,很多人混跡於互聯網+的時代,人人都要學習編程已經逐漸被重視起來。

作爲一個入行五年的老鳥,回首看看這五年的經歷,恍若隔世。

從PC互聯網時代到移動互聯網時代的轉變,也就是前幾年的事情。IT界的快節奏已經成爲常態。小步快跑 ,產品的快速的迭代,移動互聯網有了飛速的發展。

現在,更加快捷方便的生活體驗,都是由一羣懷揣着“改變世界”的夢想的人,一羣不辭辛勞的程序員實現的。

“程序員”在大衆心裏,有很多刻板印象的標籤:死宅 、呆板、加班、智商很高情商卻很感人,極客、一年四季的格子衫等,更有那句著名的“錢多話少死得早”。

這些刻板印象,對也不全對,它們只是程序員衆多特性中的一個方面。

這樣的一羣人,他們對電腦的性能要求極高,對機械鍵盤非常熱衷,對耳機追求到極致,除了我們常見的一些,他們還關心、喜歡的還有啥。

筆者將從CSDN程序人生 近幾年的發文數據中,從數據的角度,來分析一下這羣極客的人,腦子裏面裝的究竟都有些什麼。

1. 數據獲取

本次數據來源爲CSDN程序人生公衆號發文,第一步需要從獲取公衆號近幾年的發文數據。公衆號內容因發佈在微信官方平臺,所以只能通過微信,才能獲取到對應的數據。

  • 抓包
    抓包是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯等操作。在這裏,我們需要使用我們自己的個人電腦,安裝相應的抓包工具進行抓包(Mac推薦使用Charles,Windows推薦使用Fiddler)。

  • HTTPS
    HTTPS是安全爲目標的HTTP通道,HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS的出現增加了抓包的難度,但並不是不可解的。

爲了解決這個問題,抓包工具會作爲一箇中間代理人,手機端與抓包工具進行通信,抓包工具在與服務端進行通信。

手機端與抓包工具建立HTTPS請求使用的公鑰是抓包工具下發給他的。所以,爲了能正常通信,需要安裝抓包工具生成的根證書並信任該證書。

從抓取到的數據包中,可以分析出公衆號文章列表對應的請求接口,只需要分頁發送所有數據請求,就可以拿到整個文章列表。

但點贊(好看)數與閱讀數量就比較難獲取。這兩項數據只在微信客戶端上有,經過分析(猜測),此請求是微信客戶端觸發並更新到頁面中的,要獲取到此數據,只能使用笨辦法,讓微信打開文章詳情頁面,發送請求,我們將請求返回的數據存儲起來,在與文章標題進行關聯,數據就可以使用了。

自動化才能解放雙手,所以此處使用AnyProxy+ADB Shell 。

AnyProxy是一個基於Node.js的、可供插件配置的HTTP/HTTPS代理服務器。和上面提到的Charles 、 Fiddler類似,但更加適合開發者使用。

ADB是Android開發SDK中的一個工具,它可以使用屏幕點擊、輸入、滑動等功能,由此實現自動化點擊屏幕。

啓動AnyProxy,設置指定插件JS的路徑,並運行ADB腳本,自動化打開頁面,使得插件能夠自動地將微信發送的請求中的Request與Response數據存儲在數據庫文件中,插件核心代碼如下:

var url = require("url")
module.exports = {
   *beforeSendResponse(requestDetail, responseDetail)
  {
       try {
           var pathName = url.parse(requestDetail.url).pathname
           if(pathName == "/mp/getappmsgext") {
               saveReadCount(requestDetail, responseDetail)
          }
      } catch(err) {
           console.log("err")
      }
  }
};

2. 數據清洗與分析

經過一段時間的數據抓取,並且對數據進行了關聯,本地一共獲取到的數據有2630條,與動輒成千上萬的電影評論數據相比,雖然量不是很多,但也足夠我們從中分析出一些關鍵信息。

點贊是對網絡上的某個內容(比如一條貼子、一篇文章或者一條微博等)表示贊同、喜愛。所以我們先來看一下程序人生公衆號推文的點贊TOP10:

因爲數據是存儲在數據庫中,所以只需要使用簡單的SQL查詢就可以拿到我們想要的數據,SQL代碼如下:

select title as 標題, author as 作者, CAST(likeCount as int) as 點贊數 from messages order by 點贊數 DESC limit 10

執行上述SQL,拿到的結果如下:

在這裏插入圖片描述
從上圖可以看到,“長春長生‘’最受關注,點贊數量遠高於其它文章,可以看出我們程序員小哥哥們,也是時實關注社會重大事件,憂國憂民。

當然,點贊只是其中的一個指標,不能表示全部。畢竟有好多程序員連贊都懶得點。

除了點贊數量,我們來看看閱讀數量的排行,此處使用的是控制檯打印輸出的數據,爲了更好地格式化結構,使用了PrettyTable, 代碼如下:

def getArticInfos(min, max):
   conn = sqlite3.connect('wechat.db')
   conn.text_factory = str
   cursor = conn.cursor()
   cursor.execute("select title, author, datetime, CAST(readCount as int) as read, CAST(likeCount as int) as like from messages where datetime > '2018-01-01 00:00:00' order by read desc")
   values = cursor.fetchall()
   table = PrettyTable(["Title", "Author", "Time", "Read Count", "Like Count"])
   table.align["Title"] = "l" 
   table.align["Author"] = "l" 
   table.padding_width = 1
   totalCount = 0
   for item in values:
       readCount = item[3]
       if  readCount >= min and readCount < max:
           table.add_row([str(item[0]), str(item[1]), str(item[2]), str(item[3]), str(item[4])])
           totalCount += 1
   print table
   print "Total Count:" + str(totalCount)
   conn.close()

此處列出了從7W+到10W+的文章列表:
在這裏插入圖片描述
從圖中我們可以看到,張小龍微信第一版需求啓發地的龍泉寺備受關注,程序員的負面新聞也是衆多程序員關注的焦點。行業新聞及與他們相關的事情,更能夠吸引他們的注意。

最後,我們再整體地來看一下,這些文章中,標題裏面都會出現哪些高頻的詞語。特此,使用Jieba分詞來進行分詞,並使用Matplotlib生成詞雲圖,如下:
在這裏插入圖片描述
從圖中,我們可以看到,“學習”可以說是相當高頻的一個詞語,當然,在各行各業,學習都是一個很重要的話題以及技能。

尤其是在 IT 行業,更新迭代更是異常迅捷,甚至快到前兩天剛學的知識,過兩天就過時了。

所以,衆多的程序員都很關注自己的個人成長,學習自然必不可少。架構、框架、指南是一個吸引程序員比較好的詞語。

最後最後,我想說的是,很想不通,作爲一個程序員,你沒有女朋友,你new一個對象不就完了嗎?居然還要去相親?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章