国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Python挖掘GitHub的流行趨勢(shì)(上)

Lionad-Morotar / 1951人閱讀

摘要:假設(shè)使用了最新的編程工具和技術(shù),分析可以幫助我們檢測(cè)最流行的技術(shù)。我們使用工具將結(jié)果轉(zhuǎn)換為干凈的并創(chuàng)建數(shù)據(jù)幀。后者表示實(shí)際使用代碼的人數(shù),因此它與不同的組相關(guān)。為此,我們使用了一個(gè)名為的庫(kù),該庫(kù)基于語(yǔ)言檢測(cè)項(xiàng)目。

來(lái)源 | 愿碼(ChainDesk.CN)內(nèi)容編輯

愿碼Slogan | 連接每個(gè)程序員的故事

網(wǎng)站 | http://chaindesk.cn

愿碼愿景 | 打造全學(xué)科IT系統(tǒng)免費(fèi)課程,助力小白用戶、初級(jí)工程師0成本免費(fèi)系統(tǒng)學(xué)習(xí)、低成本進(jìn)階,幫助BAT一線資深工程師成長(zhǎng)并利用自身優(yōu)勢(shì)創(chuàng)造睡后收入。

官方公眾號(hào) | 愿碼 | 愿碼服務(wù)號(hào) | 區(qū)塊鏈部落

免費(fèi)加入愿碼全思維工程師社群 | 任一公眾號(hào)回復(fù)“愿碼”兩個(gè)字獲取入群二維碼


本文閱讀時(shí)長(zhǎng):10min

在本文中,我們將探討如何利用Python的強(qiáng)大功能來(lái)收集和處理來(lái)自GitHub的數(shù)據(jù)并使其準(zhǔn)備好分析。

GitHub采用廣泛使用的版本控制方法,通過(guò)在編程領(lǐng)域?qū)崿F(xiàn)社交網(wǎng)絡(luò)功能,將編碼提升到最高水平。GitHub允許您創(chuàng)建代碼存儲(chǔ)庫(kù)并提供多種協(xié)作功能,錯(cuò)誤跟蹤,功能請(qǐng)求,任務(wù)管理和維基。它擁有大約2000萬(wàn)用戶和5700萬(wàn)個(gè)代碼庫(kù)(來(lái)源:維基百科)。這些統(tǒng)計(jì)數(shù)據(jù)很容易證明這是程序員最具代表性的平臺(tái)。它也是幾個(gè)開源項(xiàng)目的平臺(tái),這些項(xiàng)目為軟件開發(fā)領(lǐng)域做出了巨大貢獻(xiàn)。假設(shè)GitHub使用了最新的編程工具和技術(shù),分析GitHub可以幫助我們檢測(cè)最流行的技術(shù)。存儲(chǔ)庫(kù)在GitHub上的受歡迎程度是通過(guò)它從社區(qū)收到的提交數(shù)量來(lái)評(píng)估的。我們將在本文中使用GitHub API來(lái)收集具有最多提交數(shù)量的存儲(chǔ)庫(kù)的數(shù)據(jù),然后發(fā)現(xiàn)其中最流行的技術(shù)。

范圍和流程

GitHub API允許我們獲取有關(guān)用戶提交的公共代碼存儲(chǔ)庫(kù)的信息。它涵蓋了許多開源,教育和個(gè)人項(xiàng)目。我們的重點(diǎn)是找到過(guò)去幾個(gè)月的趨勢(shì)技術(shù)和編程語(yǔ)言,并與過(guò)去幾年的存儲(chǔ)庫(kù)進(jìn)行比較。我們將收集有關(guān)存儲(chǔ)庫(kù)的所有元信息,例如:

Name:存儲(chǔ)庫(kù)的名稱

Description:存儲(chǔ)庫(kù)的描述

Watchers:人們關(guān)注存儲(chǔ)庫(kù)并獲得有關(guān)其活動(dòng)的通知

Forks?:用戶將存儲(chǔ)庫(kù)克隆到自己的帳戶

Open Issues:提交的有關(guān)存儲(chǔ)庫(kù)的問(wèn)題

我們將使用這些數(shù)據(jù),定性和定量信息的組合,來(lái)識(shí)別最新趨勢(shì)和微弱信號(hào)。該過(guò)程可以通過(guò)下圖中顯示的步驟表示:

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

在使用API之前,我們需要設(shè)置授權(quán)。API允許您訪問(wèn)所有公開可用的數(shù)據(jù),但某些端點(diǎn)需要用戶權(quán)限。您可以使用應(yīng)用程序設(shè)置創(chuàng)建具有某些特定范圍訪問(wèn)權(quán)限的新令牌。范圍取決于您的應(yīng)用程序的需求,例如訪問(wèn)用戶電子郵件,更新用戶配置文件等。?密碼授權(quán)僅在某些情況下需要,例如用戶授權(quán)的應(yīng)用程序訪問(wèn)。在這種情況下,您需要提供用戶名或電子郵件以及密碼。
所有API訪問(wèn)均通過(guò)HTTPS進(jìn)行,并可從https://api.github.com/ 域訪問(wèn)。所有數(shù)據(jù)都以JSON的形式發(fā)送和接收。

速率限制

GitHub Search API旨在幫助查找特定項(xiàng)(存儲(chǔ)庫(kù),用戶等)。速率限制策略允許每次搜索最多1,000個(gè)結(jié)果。對(duì)于使用基本身份驗(yàn)證,OAuth或客戶端ID和密鑰的請(qǐng)求,您每分鐘最多可以發(fā)出30個(gè)請(qǐng)求。對(duì)于未經(jīng)身份驗(yàn)證的請(qǐng)求,速率限制允許您每分鐘最多發(fā)出10個(gè)請(qǐng)求。

連接到GitHub

GitHub提供了一個(gè)搜索端點(diǎn),它返回與查詢匹配的所有存儲(chǔ)庫(kù)。隨著我們的進(jìn)展,在分析的不同步驟中,我們將更改變量q(查詢)的值。在第一部分中,我們將檢索自2017年1月1日以來(lái)創(chuàng)建的所有存儲(chǔ)庫(kù),然后我們將比較前幾年的結(jié)果。

首先,我們初始化一個(gè)空列表結(jié)果,該結(jié)果存儲(chǔ)有關(guān)存儲(chǔ)庫(kù)的所有數(shù)據(jù)。其次,我們使用API所需的參數(shù)構(gòu)建get請(qǐng)求。我們每個(gè)請(qǐng)求只能獲得100個(gè)結(jié)果,因此我們必須使用分頁(yè)技術(shù)來(lái)構(gòu)建完整的數(shù)據(jù)集。

results = []

q = "created:>2017-01-01"

def search_repo_paging(q):

url = "https://api.github.com/search/repositories"

params = {"q" : q, "sort" : "forks", "order": "desc", "per_page" : 100}

while True:

res = requests.get(url,params = params)

result = res.json()

results.extend(result["items"])

params = {}

try:

url = res.links["next"]["url"]

except:

break

在第一個(gè)請(qǐng)求中,我們必須將所有參數(shù)傳遞給請(qǐng)求中的方法。然后,我們?yōu)槊總€(gè)下一頁(yè)創(chuàng)建一個(gè)新請(qǐng)求,可以在鏈接中找到包含所有其他參數(shù)的資源的完整鏈接。這就是我們清空params詞典的原因。
GET?res.links"next".?res.?

重復(fù)該操作,直到字典中沒有下一頁(yè)鍵。對(duì)于其他數(shù)據(jù)集,我們修改搜索查詢的方式是從前幾年檢索存儲(chǔ)庫(kù)。例如,要從2015年獲取數(shù)據(jù),我們定義以下查詢:res.links?

q = "created:2015-01-01..2015-12-31"

為了找到合適的存儲(chǔ)庫(kù),API提供了大量的查詢參數(shù)。使用限定符系統(tǒng)可以高精度地搜索存儲(chǔ)庫(kù)。從主搜索參數(shù)q開始,我們有以下選項(xiàng):

sort:設(shè)置為forks,因?yàn)槲覀冇信d趣找到具有最大數(shù)量的分支的存儲(chǔ)庫(kù)(您還可以按星數(shù)或更新時(shí)間排序)

order:設(shè)置為降序

per_page:設(shè)置為返回的最大存儲(chǔ)庫(kù)數(shù)量

當(dāng)然,搜索參數(shù)q?可以包含多個(gè)限定符組合。

數(shù)據(jù)拉動(dòng)

我們通過(guò)GitHub API收集的數(shù)據(jù)量使其適合內(nèi)存。我們可以直接在pandas數(shù)據(jù)幀中處理它。如果需要更多數(shù)據(jù),我們建議將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,例如MongoDB。
我們使用JSON工具將結(jié)果轉(zhuǎn)換為干凈的JSON并創(chuàng)建數(shù)據(jù)幀。

from pandas.io.json import json_normalize

import json

import pandas as pd

import bson.json_util as json_util

sanitized = json.loads(json_util.dumps(results))

normalized = json_normalize(sanitized)

df = pd.DataFrame(normalized)

數(shù)據(jù)框df?包含與GitHub API返回的所有結(jié)果相關(guān)的列。我們可以通過(guò)輸入以下內(nèi)容列出它們:

Df.columns

Index(["archive_url", "assignees_url", "blobs_url", "branches_url",

"clone_url", "collaborators_url", "comments_url", "commits_url",

"compare_url", "contents_url", "contributors_url", "default_branch",

"deployments_url", "description", "downloads_url", "events_url",

"Fork",

"forks", "forks_count", "forks_url", "full_name", "git_commits_url",

"git_refs_url", "git_tags_url", "git_url", "has_downloads",

"has_issues", "has_pages", "has_projects", "has_wiki", "homepage",

"hooks_url", "html_url", "id", "issue_comment_url",

"Issue_events_url",

"issues_url", "keys_url", "labels_url", "language", "languages_url",

"merges_url", "milestones_url", "mirror_url", "name",

"notifications_url", "open_issues", "open_issues_count",

"owner.avatar_url", "owner.events_url", "owner.followers_url",

"owner.following_url", "owner.gists_url", "owner.gravatar_id",

"owner.html_url", "owner.id", "owner.login",

"Owner.organizations_url",

"owner.received_events_url", "owner.repos_url", "owner.site_admin",

"owner.starred_url", "owner.subscriptions_url", "owner.type",

"owner.url", "private", "pulls_url", "pushed_at", "releases_url",

"score", "size", "ssh_url", "stargazers_count", "stargazers_url",

"statuses_url", "subscribers_url", "subscription_url", "svn_url",

"tags_url", "teams_url", "trees_url", "updated_at", "url",

"Watchers",

"watchers_count", "year"],

dtype="object")

然后,我們選擇將用于進(jìn)一步分析的變量子集。我們跳過(guò)與URL、所有者信息或ID?相關(guān)的所有技術(shù)變量??。其余列包含的信息很可能有助于我們識(shí)別新的技術(shù)趨勢(shì):

description:存儲(chǔ)庫(kù)的用戶描述

watchers_count:觀察者人數(shù)

size:存儲(chǔ)庫(kù)的大小(以KB為單位)

forks_count:叉的數(shù)量

open_issues_count:未解決的問(wèn)題數(shù)量

language:編寫存儲(chǔ)庫(kù)的編程語(yǔ)言

我們選擇了衡量存儲(chǔ)庫(kù)流行度的標(biāo)準(zhǔn)。此數(shù)字表示有多少人對(duì)該項(xiàng)目感興趣。?但是,我們也可以使用它給我們提供有關(guān)流行度的略有不同的信息。后者表示實(shí)際使用代碼的人數(shù),因此它與不同的組相關(guān)。watchers_count?forks_count?

數(shù)據(jù)處理

在上一步中,我們構(gòu)建了原始數(shù)據(jù),現(xiàn)在可以進(jìn)行進(jìn)一步分析。?我們的目標(biāo)是分析兩種類型的數(shù)據(jù):

描述中的文字?jǐn)?shù)據(jù)

其他變量的數(shù)值數(shù)據(jù)

它們中的每一個(gè)都需要不同的預(yù)處理技術(shù)。讓我們看一下Detail?中的每種類型。

文本數(shù)據(jù)

對(duì)于第一種,我們必須創(chuàng)建一個(gè)包含已清理字符串的新變量。我們將分三個(gè)步驟完成,這些步驟已在前幾章中介紹過(guò):

選擇英文說(shuō)明

符號(hào)化

停用詞

由于我們只處理英語(yǔ)數(shù)據(jù),因此我們應(yīng)該刪除所有用其他語(yǔ)言編寫的描述。這樣做的主要原因是每種語(yǔ)言都需要不同的處理和分析流程。如果我們留下俄語(yǔ)或中文的描述,我們會(huì)得到非常嘈雜的數(shù)據(jù),而這些數(shù)據(jù)是我們無(wú)法解釋的。因此,可以說(shuō)我們正在分析英語(yǔ)世界的趨勢(shì)。

首先,我們刪除description列中的所有空字符串。

df = df.dropna(subset=["description"])

為了刪除非英語(yǔ)描述,我們必須首先檢測(cè)每個(gè)文本中使用的語(yǔ)言。為此,我們使用了一個(gè)名為langdetect?的庫(kù),該庫(kù)基于??Google語(yǔ)言檢測(cè)項(xiàng)目。

from langdetect import detect

df["lang"] = df.apply(lambda x: detect(x["description"]),axis=1)

我們創(chuàng)建一個(gè)包含所有預(yù)測(cè)的新列。我們看到不同的語(yǔ)言,??例如en?(英語(yǔ)),zh-cn?(中文),vi?(越南語(yǔ))或ca?(加泰羅尼亞語(yǔ))。

df["lang"]

0 en

1 en

2 en

3 en

4 en

5 zh-cn

在我們的數(shù)據(jù)集中,en占所有存儲(chǔ)庫(kù)的78.7%。我們現(xiàn)在只選擇那些帶有英文描述的存儲(chǔ)庫(kù):

df = df[df["lang"] == "en"]

在下一步中,我們將使用預(yù)處理的文本數(shù)據(jù)創(chuàng)建一個(gè)新的clean列。我們執(zhí)行以下代碼來(lái)執(zhí)行標(biāo)記化并刪除停用詞:

import nltk

from nltk import word_tokenize

from nltk.corpus import stopwords

def clean(text = "", stopwords = []):



#tokenize

tokens = word_tokenize(text.strip())

#lowercase

clean = [i.lower() for i in tokens]

#remove stopwords

clean = [i for i in clean if i not in stopwords]

#remove punctuation

punctuations = list(string.punctuation)

clean = [i.strip("".join(punctuations)) for i in clean if i not in punctuations]

return " ".join(clean)



df["clean"] = df["description"].apply(str) #make sure description is a string

df["clean"] = df["clean"].apply(lambda x: clean(text = x, stopwords = stopwords.words("english")))

Finally, we obtain a clean column which contains cleaned English descriptions, ready for analysis:

df["clean"].head(5)

0 roadmap becoming web developer 2017

1 base repository imad v2 course application ple…

2 decrypted content eqgrp-auction-file.tar.xz

3 shadow brokers lost translation leak

4 learn design large-scale systems prep system d...
數(shù)值數(shù)據(jù)

對(duì)于數(shù)值數(shù)據(jù),我們將統(tǒng)計(jì)檢查值的分布以及是否存在任何缺失值:

df[["watchers_count","size","forks_count","open_issues"]].describe()


我們看到在所有四個(gè)變量中沒有缺失值:watchers_count、size、forks_count和open_issues。watchers_count的值從0到20,792不等,而最小的fork數(shù)是33,并上升到2,589。前四分之一的存儲(chǔ)庫(kù)沒有開放問(wèn)題,而前25%的存儲(chǔ)庫(kù)有超過(guò)12個(gè)問(wèn)題。值得注意的是,在我們的數(shù)據(jù)集中,有一個(gè)包含458個(gè)開放問(wèn)題的存儲(chǔ)庫(kù)。

一旦我們完成了數(shù)據(jù)的預(yù)處理,我們的下一步就是分析它,以便從中獲得可操作的見解。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43651.html

相關(guān)文章

  • 使用Python挖掘GitHub流行趨勢(shì)(下)

    摘要:我們將數(shù)據(jù)幀轉(zhuǎn)換為基于列的時(shí)間序列然后,我們使用聚合方法按語(yǔ)言和年份重構(gòu)數(shù)據(jù),并按語(yǔ)言計(jì)算出現(xiàn)次數(shù)我們?cè)跅l形圖上表示結(jié)果上圖顯示了匯編,,中的多種編程語(yǔ)言,,和移動(dòng)語(yǔ)言,以及,和等現(xiàn)代語(yǔ)言。使用集合將確保我們具有唯一的值。 showImg(https://segmentfault.com/img/remote/1460000018986014?w=1800&h=696); 來(lái)源 | ...

    dack 評(píng)論0 收藏0
  • 拉勾數(shù)據(jù)崗位和熱門編程語(yǔ)言現(xiàn)狀分析

    摘要:另外數(shù)學(xué)成為了一個(gè)關(guān)鍵詞,編程語(yǔ)言主要是等,運(yùn)營(yíng)也出現(xiàn)在詞云中說(shuō)明數(shù)據(jù)分析師也需要有運(yùn)營(yíng)能力。 功能點(diǎn) 爬取數(shù)據(jù) 所有公司數(shù)據(jù),名稱簡(jiǎn)寫,城市,行業(yè),職位數(shù)量,人數(shù)范圍,標(biāo)簽,介紹,融資階段,平均工資 github2016年度最受歡迎編程語(yǔ)言相應(yīng)年數(shù)薪水,城市,學(xué)歷要求,公司融資階段,公司行業(yè) 大數(shù)據(jù)行業(yè)五大崗位相應(yīng)年數(shù)薪水,城市,學(xué)歷要求,公司融資階段,公司行業(yè),崗位要求 編程語(yǔ)...

    atinosun 評(píng)論0 收藏0
  • 【譯】關(guān)于機(jī)器學(xué)習(xí)11個(gè)開源工具

    摘要:雖然廣受歡迎,但是仍受到來(lái)自另外一個(gè)基于的機(jī)器學(xué)習(xí)庫(kù)的競(jìng)爭(zhēng)年出現(xiàn)的。還提供更傳統(tǒng)的機(jī)器學(xué)習(xí)功能的庫(kù),包括神經(jīng)網(wǎng)絡(luò)和決策樹系統(tǒng)。和的機(jī)器學(xué)習(xí)庫(kù)。顧名思義,是用于神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)的庫(kù),便于將瀏覽器用作數(shù)據(jù)工作臺(tái)。 關(guān)于機(jī)器學(xué)習(xí)的11個(gè)開源工具 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:11 open source tools to make the most of machine learning英文連...

    岳光 評(píng)論0 收藏0
  • 23種深度學(xué)習(xí)庫(kù)排行榜:TensorFlow最活躍、Keras最流行

    摘要:我們對(duì)種用于數(shù)據(jù)科學(xué)的開源深度學(xué)習(xí)庫(kù)作了排名。于年月發(fā)布了第名,已經(jīng)躋身于深度學(xué)習(xí)庫(kù)的上半部分。是最流行的深度學(xué)習(xí)前端第位是排名較高的非框架庫(kù)。頗受對(duì)數(shù)據(jù)集使用深度學(xué)習(xí)的數(shù)據(jù)科學(xué)家的青睞。深度學(xué)習(xí)庫(kù)的完整列表來(lái)自幾個(gè)來(lái)源。 我們對(duì)23種用于數(shù)據(jù)科學(xué)的開源深度學(xué)習(xí)庫(kù)作了排名。這番排名基于權(quán)重一樣大小的三個(gè)指標(biāo):Github上的活動(dòng)、Stack Overflow上的活動(dòng)以及谷歌搜索結(jié)果。排名結(jié)果...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<