1. 程式人生 > >關於程式設計師能做什麼副業,我爬相關文章用機器學習演算法分析 | 附原始碼

關於程式設計師能做什麼副業,我爬相關文章用機器學習演算法分析 | 附原始碼

​最近想了解下程式設計師可以做什麼副業,我抓取了各大網站關於程式設計師搞副業的文章,但抓取的文章較多,為了將相似的文章歸攏到一起,我用聚類演算法將文章劃分到不同的主題。下面我就來介紹一下分析的結論以及過程。文末回覆關鍵字即可獲取本次分析原始碼。
本次分析的文章是從部落格園、CSDN、知乎、今日頭條和微信上抓取,共140篇,聚類得到的主題如下:

  • 接私活:主要是在碼市、程式設計師客棧等網站接專案做外包,對於接私活的評價大家褒貶不一,有的人決定接私活能夠鍛鍊技術,但有的人覺得是重複勞動,可積累性差。我自己也接過私活,不建議程式設計師接私活,因為它相當於是工作時間的延伸,並沒有給你帶來其他的可能性

  • 寫作:反對接私活的一部分人就提出來走寫作這條路,因為寫作一來可以有深度的思考,二來也可以沉澱技術,最後通過輸出的內容變現

  • 出書和錄視訊:看書和看視訊也是我們學習技術的主要途徑,錄視訊是對技術能力和表達能力有更高的要求,相對而言寫書會容易一些。對於程式設計師來說如果經常寫原創部落格,會有出版社的人員主動聯絡你。如果自己有時間、有能力的話可以考慮寫本書,既可以賺錢還能提高個人影響力。我去年就寫了一本小冊,這個過程中確實需要付出很多時間和精力

  • 小專案:這個相對於外包來說會好一些,原文作者舉了個例子,通過網上爬取公開的個人資訊和聯絡方式,包裝成軟體出售,獲得了不菲的收入

  • 公眾號:通過公眾號積累流量,接廣告賺錢

  • 投資學習:通過聚類分析發現有些文章的觀點畫風比較清奇,認為程式設計師最大的副業是投資自己。這也是一條很好的路子,不斷地拓寬自己的知識廣度、打穿知識深度,能夠在主營業務上創造出獨一無二的成果也是一種副業

當然還有一些的關於討論程式設計師應不應該搞副業的主題也能聚在一起,這裡就不舉例了,有興趣朋友可以看詳細的分析資料。

下面來介紹下分析過程

資料抓取:需求比較明確,第一步找到文章搜尋的入口,第二步找到文章詳情的入口。實現方案有兩種,第一種是請求介面;第二種是解析網頁HTML程式碼。在本次分析中這兩種方案都有涉及,其中微信公眾號的資料抓取比較困難,我用的是開源的專案wechatsogou,這個專案直接用也是有各種問題,但我都解決了,需要注意的問題在原始碼中都有說明。由於這次抓取的網站比較多,抓取這一步花費了60%的時間。資料清洗:主要目的是為了保證我們後續分析的資料是乾淨的,且沒有噪音。這裡我主要做了兩步,第一步限制文章的title包含“程式設計師”和“副業”,保證文章內容是可靠的;第二步通過BeautifulSoup取出HTML標籤,保證正文乾淨

# 過濾文章
def article_filter(article):
    title = article['title']
    if '副業' in title and '程式設計師' in title:
        return True
return False

# 清洗正文,去掉html標籤
def content_clean(content):
    content_bs = BeautifulSoup(content)
    content_text = content_bs.get_text()
    content_text = re.sub('\n|\xa0', '', content_text)
    return content_text

特徵提取:因為我們是作文字分析,所以我們要將文字轉化成計算機能識別的數字特徵。轉化的方式有兩種,第一種詞袋空間VSM(vector space model),簡單來說它將一篇文章儲存為一個數組,陣列第n位的元素值代表該文章中第i個詞出現的頻次。然後通過TF-IDF計算第i個詞在這篇文章的權重。如果某個詞是文章的關鍵詞,那麼它的權重比其他詞就大。所以如果兩篇表達的是同一個主題,那麼它倆的詞分佈以及詞的權重會很像,做聚類的時候自然就能聚到一起;另一種方式是將文件轉化成向量,即:Doc2Vector。這裡主要介紹第一種方式,關於第二種原始碼也有涉及,有興趣的朋友可以自行看原始碼。

# 計算tf-idf 作為每個詞的權重
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
# 統計詞頻
vectorizer = CountVectorizer(token_pattern=r"(?u)\b\w+\b")
# 計算tf-idf
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
# 權重矩陣, 二位陣列,每行是一篇文章,每列是一個詞
weight_matrix = tfidf.toarray()
# 特徵詞,資料,每個元素是一個詞,也是weight_matrix第i列的詞
word = vectorizer.get_feature_names()

聚類分析:關於聚類的演算法有很多,比如:K-Means、Birch、LDA和DBSCAN。本次分析中我用到了K-Means和Birch,這裡主要介紹K-Means的程式碼。K-Means的思想比較簡單,就是將兩個距離較近的文章聚成一類。前面我們已經將文章轉成向量了,所以可以計算文章之間的距離。

# Kmeans 聚類
from sklearn.cluster import KMeans

# 聚成 15 類
kmeans = KMeans(n_clusters=15)
kmeans.fit(weight_matrix)

# 聚類結果,存放第i篇文章屬於第幾類
kmeans.labels_

 

K-Means的用法也比較簡單,只需指定要最終聚出的類數量(n_clusters)即可。

效果評估:主要用來評估聚在一起的文章是否真的是同一類,或者同一類的文章是否聚在了一起。因為之前我們計算了TF-IDF,我們能獲取每篇文章的關鍵詞,所以我把每篇文章所在的類別、標題、以及關鍵詞輸出到檔案,來進行評估

# 提取每篇文章最關鍵的5個詞
# keywords
def get_key_words(weight, words):
    topk_weight = sorted(weight, reverse=True)[:5]
    min_weight = topk_weight[-1]
    max_weight = topk_weight[0]
    
    key_words = []
    for index, x in enumerate(weight):
        if x >= min_weight:
            key_words.append(words[index])
    return " ".join(key_words)

f = open("cluster_res.txt", "w", encoding='utf-8')
for index, label in enumerate(kmeans.labels_):
        kws = get_key_words(weight_matrix[index], word)
        raw = '%d\t%d\t%s\t%s\t%s\t%s\n' % (index,label, kws, attrs[index][0], attrs[index][1], attrs[index][2])
        f.write(raw)

下面貼幾個case,聚類的效果還可以

類別3是接私活相關的文章,類別6是投資學習的文章,類別7是出書和視訊的文章。本次分析過程就介紹到這裡,其實這次分析具體到每個步驟可能沒做那麼細,比如:資料清洗、模型優化等,但整個流程還算比較完整。如果各位有興趣可以自行深入研究。

希望這次分析能對你有用,歡迎公眾號「渡碼」。公眾號回覆關鍵字 副業 即可獲得完整原始碼。

相關推薦

關於程式設計師什麼副業相關文章機器學習演算法分析 | 原始碼

​最近想了解下程式設計師可以做什麼副業,我抓取了各大網站關於程式設計師搞副業的文章,但抓取的文章較多,為了將相似的文章歸攏到一起,我用聚類演算法將文章劃分到不同的主題。下面我就來介紹一下分析的結論以及過程。文末回覆關鍵字即可獲取本次分析原始碼。本次分析的文章是從部落格園、CSDN、知乎、今日頭條和微信上抓取,

分享成功程式設計師的多了寫個反面的教材---一個高齡菜鳥程式設計師的工作經歷

    首先,解釋一下我高齡菜鳥的定義,我呢做軟體開發已經六年多七年頭了,目前來說在就業市場上依然還沒有什麼競爭力,為什麼會這樣呢,自己總結一下吧。     我專業是電腦科學與技術,因為我是從一個鄉鎮出來的,在高中的時候在一些雜誌也好等等的瞭解,覺得軟體開發是我喜歡並適合的

黑馬程式設計師—八期黑馬放棄了

  心裡很沉很沉,對於八期黑馬的開課,似乎對於我老說沒有多大的誘惑了,沒有了這多半月以來的激情澎湃!  黑馬,讓我在學習的同時,逛論壇賺技術的同步中,重新找到了昔日高考的那種備戰到氛圍!  從開始的自信滿滿,到現在的傷痕累累,心裡五味具雜,本以為自己大學的兩年半計算機知識,兩年半的java技術積累會讓我比其他

國內的程式設計師一輩子嗎?

我上一家公司還是有這樣一個口號,程式設計師有兩條可以發展的路可以走一個是走技術路線,主要你專注技術一樣可以得到很多。還有就是去做管理。但是這個只是口號。沒有辦法很多熱愛技術的人慢慢去帶專案,跟客戶溝通。自己想靜下心來寫點東西的時間都沒有。 現在的這家公司更是根本都沒有兩條路的

OSChina 週日亂彈 —— 程式設計師轉行中醫這決心

Osc亂彈歌單(2019)請戳(這裡) 【今日歌曲】 @宇辰OSC :分享胡夏的單曲《羞答答的玫瑰靜悄悄地開》:羞答答的玫瑰靜

應該使用哪種機器學習演算法

我應該使用哪種機器學習演算法? 該資源主要面向初學者到中級資料科學家或分析師,他們有興趣識別和應用機器學習演算法來解決他們感興趣的問題。 當面對各種各樣的機器學習演算法時,初學者提出的一個典型問題是“我應該使用哪種演算法?”   問題的答案因許多因素而異,包括:

#浙大畢業生3萬月薪程式設計師網約車司機:高興樂意

浙大畢業的高材生放棄程式設計師高薪去做網約車司機:昨天打網約車回家,遇到一位浙大畢業的程式設計師,放棄了3萬一月的程式設計師工作,成了專職的網約車司機,1萬塊錢一個月,圖的是自由自在,並稱有錢難買我開心,各位怎麼看? 這裡的一萬塊錢指的是毛利潤,扣除車輛運營成本後的收入,即使如此,這

搞笑趣圖:這些痛只有程式設計師給客戶演示bug沒被發現

點選上方藍色字型【學習web前端】可【快速關注】寫了一大堆SQL語句,自己都不敢相信居然執行成功

程式設計師除了編程式碼哪些職業規劃?

點選上方“CSDN”,選擇“置頂公眾號” 關鍵時刻,第一時間送達! 不思進取的程式設計師不是好的程式設計師。無數的開發者都夢想著可以加入 Google、Facebook、Apple、BAT 這

一個阿里工作5年java程式設計師的從業心得你甘心一輩子碼農嗎?

你願意做碼農嗎? 恍然間,發現自己在這個行業裡已經摸爬滾打了五年了,原以為自己就憑已有的專案經驗和工作經歷怎麼著也應該算得上是一個業內比較資歷的人士了,但是今年在換工作的過程中卻遭到了重大的挫折。詳細過程我就不再敘述,在此,只想給大家說一說被拒絕的原因,看看大家有沒有相似的經歷,和類似的

#碩士程式設計師被本科嘲諷年齡比大級別比讀研有啥呢?

現在程式設計師想進大廠可以通過校招或者社招進去,很多人選擇讀研其實本科畢業就可以選擇進網際網路那個大企業,但是也有些人會選擇讀研提高自己再工作,這樣自己選擇的餘地多一些或者對自己將來的職場生涯更加容易。但是最近一說是被一個本科給嘲諷了,年齡比我大級別比我低,真沒用。 如果有想學習java的程

#程式設計師為什麼總是加班就不多招幾個人嘛?

據說,某網際網路公司招了個日本人做研發,上班第一天就對部門同事說:“我在日本工作時是個加班狂,每天都很晚回家,希望大家跟上我的步伐。”一個月之後他辭職回日本了,扔下一句話:“你們這樣加班,經常睡在公司是很不人道的。” 絕大部分的程式設計師都會存在經常加班的情況,既然程式設計師加班那麼多,

#浙大畢業生放棄月薪三萬程式設計師去開網約車網友:享受生活

你要問現在最賺錢的行業是哪個行業,我想網際網路行業肯定能夠入選,畢竟人均收入月入過萬。但是最近看到一帖子,一浙大畢業生甘願放棄3萬一月的it行業,不去做碼農反而是去開起了網約車司機,進而引發網友熱議。 如果有想學習java的程式設計師,可來我們的java學習扣qun:72340,3928免費

決定一個程式設計師走多遠的不是年齡而是這兩個原因!

都說程式設計師有“中年危機”,說是程式設計師到了30-40歲就開始不吃香了,甚至會被企業淘汰。那麼事實真的是如此嗎?建議大家不妨看看那些程式設計師大腕,哪一個不是50歲上下的。 當然程式設計師是個很燒腦的工作,對自身技術要求很高,如果你到了中年而技術水平還停留在初級階段,那你被淘汰也沒什麼抱怨的

程式設計師自己寫測試還要測試人員什麼?

在向開發人員介紹單元測試或TDD等工程實踐時,往往可以聽到這樣的疑問。比如: 自己寫的程式,自己無法從另一個角度測出問題。寫bug的時間都不夠了,哪有時間來寫測試?開發來寫測試了,測試幹什麼?除了核心程式碼,沒有什麼值得測試的。…… 一個例子首先我們看一個例子。  全專案唯

程式設計師就業三年竟看不懂這短短一行程式碼!網友的解釋卻讓笑翻

現在的程式碼邏輯,似乎越來越讓人難以捉摸了,各種奇葩的程式碼層出不窮。有些程式碼一眼看上去似乎有錯誤,可是一理程式碼邏輯,好像又沒有錯誤的樣子,著實消遣了很多程式設計師! 在這我還是要推薦下我自己的前端學習群:733581373,不管你是小白還是大牛,小編我都挺歡迎,不定

會敲程式碼就是程式設計師不到這3點再幹十年也只能是基層碼農!

隨著網際網路的發展和科技公司的崛起,程式設計師成了現在比較熱門的行業了,尤其是創業這幾年,大多數都是“顛覆性”的設計,要結合網際網路差的就是程式設計師。程式設計師吃香的程度可以從工資上面清晰的看出來,有經驗的跳槽工資就加50%,月薪3-5萬的程式設計師更是數不勝數。 在程式設計師吃香的時候

#程式設計師面試的時候題目都沒直接溜了網友:不想題唄!

程式設計師是一個神奇的職業,有很多程式設計師竟然是靠跳槽加薪的,今天要說的是一個關於跳槽面試的事情,面試的時候讓你做套面試題,給你倒杯水的功夫,你人怎麼就不見呢?這讓這個公司的HR百思不得其解。 如果有想要學習java的小夥伴,可來我們的java學習扣裙哦:72

#領導承諾加薪挽留程式設計師但未實現程式設計師要在程式碼裡埋坑!

在職場上的如果想離職,你就要堅決的走,這是一個職場的真理。因為在老闆眼裡你已經不打算長期幹了,如果有能頂替你的新人肯定會把你踢了。 就有一名程式設計師已經找到薪酬更好的工作,領導卻用加薪挽留,但是最後卻並沒有實現承諾,這名程式設計師表示很氣憤,吐槽稱:我呵呵,準