山东威海旅游景点:关于程序员能做什么副业,我爬相关文章用机械学习算法剖析 | 附源码

admin 3个月前 (06-19) 科技 42 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是出书和视频的文章。本次剖析历程就先容到这里,实在这次剖析详细到每个步骤可能没做那么细,好比:数据洗濯、模子优化等,但整个流程还算对照完整。若是列位有兴趣可以自行深入研究。

希望这次剖析能对你有用,迎接民众号「渡码」。民众号回复要害字 副业 即可获得完整源码。

,

诚信在线赌博正规吗

诚信在线赌博正规吗(现:阳光在线官网)现已开放诚信在线手机版、诚信在线电脑客户端下载。诚信在线娱乐游戏公平、公开、公正,用实力赢取信誉。

网友评论

  • (*)

最新评论

  • UG环球注册 2020-06-19 00:45:50 回复

    欧博官网手机欢迎进入欧博官网手机(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。办公室必聊~很火

    1

文章归档

站点信息

  • 文章总数:794
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1433
  • 评论总数:425
  • 浏览总数:34829