摘要:假設(shè)使用了最新的編程工具和技術(shù),分析可以幫助我們檢測最流行的技術(shù)。我們使用工具將結(jié)果轉(zhuǎn)換為干凈的并創(chuàng)建數(shù)據(jù)幀。后者表示實際使用代碼的人數(shù),因此它與不同的組相關(guān)。為此,我們使用了一個名為的庫,該庫基于語言檢測項目。
來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯
愿碼Slogan | 連接每個程序員的故事
網(wǎng)站 | http://chaindesk.cn
愿碼愿景 | 打造全學科IT系統(tǒng)免費課程,助力小白用戶、初級工程師0成本免費系統(tǒng)學習、低成本進階,幫助BAT一線資深工程師成長并利用自身優(yōu)勢創(chuàng)造睡后收入。
官方公眾號 | 愿碼 | 愿碼服務號 | 區(qū)塊鏈部落
免費加入愿碼全思維工程師社群 | 任一公眾號回復“愿碼”兩個字獲取入群二維碼
本文閱讀時長:10min
在本文中,我們將探討如何利用Python的強大功能來收集和處理來自GitHub的數(shù)據(jù)并使其準備好分析。
GitHub采用廣泛使用的版本控制方法,通過在編程領(lǐng)域?qū)崿F(xiàn)社交網(wǎng)絡(luò)功能,將編碼提升到最高水平。GitHub允許您創(chuàng)建代碼存儲庫并提供多種協(xié)作功能,錯誤跟蹤,功能請求,任務管理和維基。它擁有大約2000萬用戶和5700萬個代碼庫(來源:維基百科)。這些統(tǒng)計數(shù)據(jù)很容易證明這是程序員最具代表性的平臺。它也是幾個開源項目的平臺,這些項目為軟件開發(fā)領(lǐng)域做出了巨大貢獻。假設(shè)GitHub使用了最新的編程工具和技術(shù),分析GitHub可以幫助我們檢測最流行的技術(shù)。存儲庫在GitHub上的受歡迎程度是通過它從社區(qū)收到的提交數(shù)量來評估的。我們將在本文中使用GitHub API來收集具有最多提交數(shù)量的存儲庫的數(shù)據(jù),然后發(fā)現(xiàn)其中最流行的技術(shù)。
范圍和流程GitHub API允許我們獲取有關(guān)用戶提交的公共代碼存儲庫的信息。它涵蓋了許多開源,教育和個人項目。我們的重點是找到過去幾個月的趨勢技術(shù)和編程語言,并與過去幾年的存儲庫進行比較。我們將收集有關(guān)存儲庫的所有元信息,例如:
Name:存儲庫的名稱
Description:存儲庫的描述
Watchers:人們關(guān)注存儲庫并獲得有關(guān)其活動的通知
Forks?:用戶將存儲庫克隆到自己的帳戶
Open Issues:提交的有關(guān)存儲庫的問題
我們將使用這些數(shù)據(jù),定性和定量信息的組合,來識別最新趨勢和微弱信號。該過程可以通過下圖中顯示的步驟表示:
在使用API之前,我們需要設(shè)置授權(quán)。API允許您訪問所有公開可用的數(shù)據(jù),但某些端點需要用戶權(quán)限。您可以使用應用程序設(shè)置創(chuàng)建具有某些特定范圍訪問權(quán)限的新令牌。范圍取決于您的應用程序的需求,例如訪問用戶電子郵件,更新用戶配置文件等。?密碼授權(quán)僅在某些情況下需要,例如用戶授權(quán)的應用程序訪問。在這種情況下,您需要提供用戶名或電子郵件以及密碼。
所有API訪問均通過HTTPS進行,并可從https://api.github.com/ 域訪問。所有數(shù)據(jù)都以JSON的形式發(fā)送和接收。
GitHub Search API旨在幫助查找特定項(存儲庫,用戶等)。速率限制策略允許每次搜索最多1,000個結(jié)果。對于使用基本身份驗證,OAuth或客戶端ID和密鑰的請求,您每分鐘最多可以發(fā)出30個請求。對于未經(jīng)身份驗證的請求,速率限制允許您每分鐘最多發(fā)出10個請求。
連接到GitHubGitHub提供了一個搜索端點,它返回與查詢匹配的所有存儲庫。隨著我們的進展,在分析的不同步驟中,我們將更改變量q(查詢)的值。在第一部分中,我們將檢索自2017年1月1日以來創(chuàng)建的所有存儲庫,然后我們將比較前幾年的結(jié)果。
首先,我們初始化一個空列表結(jié)果,該結(jié)果存儲有關(guān)存儲庫的所有數(shù)據(jù)。其次,我們使用API所需的參數(shù)構(gòu)建get請求。我們每個請求只能獲得100個結(jié)果,因此我們必須使用分頁技術(shù)來構(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
在第一個請求中,我們必須將所有參數(shù)傳遞給請求中的方法。然后,我們?yōu)槊總€下一頁創(chuàng)建一個新請求,可以在鏈接中找到包含所有其他參數(shù)的資源的完整鏈接。這就是我們清空params詞典的原因。
GET?res.links"next".?res.?
重復該操作,直到字典中沒有下一頁鍵。對于其他數(shù)據(jù)集,我們修改搜索查詢的方式是從前幾年檢索存儲庫。例如,要從2015年獲取數(shù)據(jù),我們定義以下查詢:res.links?
q = "created:2015-01-01..2015-12-31"
為了找到合適的存儲庫,API提供了大量的查詢參數(shù)。使用限定符系統(tǒng)可以高精度地搜索存儲庫。從主搜索參數(shù)q開始,我們有以下選項:
sort:設(shè)置為forks,因為我們有興趣找到具有最大數(shù)量的分支的存儲庫(您還可以按星數(shù)或更新時間排序)
order:設(shè)置為降序
per_page:設(shè)置為返回的最大存儲庫數(shù)量
當然,搜索參數(shù)q?可以包含多個限定符組合。
數(shù)據(jù)拉動我們通過GitHub API收集的數(shù)據(jù)量使其適合內(nèi)存。我們可以直接在pandas數(shù)據(jù)幀中處理它。如果需要更多數(shù)據(jù),我們建議將其存儲在數(shù)據(jù)庫中,例如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)的列。我們可以通過輸入以下內(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")
然后,我們選擇將用于進一步分析的變量子集。我們跳過與URL、所有者信息或ID?相關(guān)的所有技術(shù)變量??。其余列包含的信息很可能有助于我們識別新的技術(shù)趨勢:
description:存儲庫的用戶描述
watchers_count:觀察者人數(shù)
size:存儲庫的大?。ㄒ訩B為單位)
forks_count:叉的數(shù)量
open_issues_count:未解決的問題數(shù)量
language:編寫存儲庫的編程語言
我們選擇了衡量存儲庫流行度的標準。此數(shù)字表示有多少人對該項目感興趣。?但是,我們也可以使用它給我們提供有關(guān)流行度的略有不同的信息。后者表示實際使用代碼的人數(shù),因此它與不同的組相關(guān)。watchers_count?forks_count?
數(shù)據(jù)處理在上一步中,我們構(gòu)建了原始數(shù)據(jù),現(xiàn)在可以進行進一步分析。?我們的目標是分析兩種類型的數(shù)據(jù):
描述中的文字數(shù)據(jù)
其他變量的數(shù)值數(shù)據(jù)
它們中的每一個都需要不同的預處理技術(shù)。讓我們看一下Detail?中的每種類型。
文本數(shù)據(jù)對于第一種,我們必須創(chuàng)建一個包含已清理字符串的新變量。我們將分三個步驟完成,這些步驟已在前幾章中介紹過:
選擇英文說明
符號化
停用詞
由于我們只處理英語數(shù)據(jù),因此我們應該刪除所有用其他語言編寫的描述。這樣做的主要原因是每種語言都需要不同的處理和分析流程。如果我們留下俄語或中文的描述,我們會得到非常嘈雜的數(shù)據(jù),而這些數(shù)據(jù)是我們無法解釋的。因此,可以說我們正在分析英語世界的趨勢。
首先,我們刪除description列中的所有空字符串。
df = df.dropna(subset=["description"])
為了刪除非英語描述,我們必須首先檢測每個文本中使用的語言。為此,我們使用了一個名為langdetect?的庫,該庫基于??Google語言檢測項目。
from langdetect import detect df["lang"] = df.apply(lambda x: detect(x["description"]),axis=1)
我們創(chuàng)建一個包含所有預測的新列。我們看到不同的語言,??例如en?(英語),zh-cn?(中文),vi?(越南語)或ca?(加泰羅尼亞語)。
df["lang"] 0 en 1 en 2 en 3 en 4 en 5 zh-cn
在我們的數(shù)據(jù)集中,en占所有存儲庫的78.7%。我們現(xiàn)在只選擇那些帶有英文描述的存儲庫:
df = df[df["lang"] == "en"]
在下一步中,我們將使用預處理的文本數(shù)據(jù)創(chuàng)建一個新的clean列。我們執(zhí)行以下代碼來執(zhí)行標記化并刪除停用詞:
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ù)
對于數(shù)值數(shù)據(jù),我們將統(tǒng)計檢查值的分布以及是否存在任何缺失值:
df[["watchers_count","size","forks_count","open_issues"]].describe()
我們看到在所有四個變量中沒有缺失值:watchers_count、size、forks_count和open_issues。watchers_count的值從0到20,792不等,而最小的fork數(shù)是33,并上升到2,589。前四分之一的存儲庫沒有開放問題,而前25%的存儲庫有超過12個問題。值得注意的是,在我們的數(shù)據(jù)集中,有一個包含458個開放問題的存儲庫。
一旦我們完成了數(shù)據(jù)的預處理,我們的下一步就是分析它,以便從中獲得可操作的見解。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/43651.html
摘要:我們將數(shù)據(jù)幀轉(zhuǎn)換為基于列的時間序列然后,我們使用聚合方法按語言和年份重構(gòu)數(shù)據(jù),并按語言計算出現(xiàn)次數(shù)我們在條形圖上表示結(jié)果上圖顯示了匯編,,中的多種編程語言,,和移動語言,以及,和等現(xiàn)代語言。使用集合將確保我們具有唯一的值。 showImg(https://segmentfault.com/img/remote/1460000018986014?w=1800&h=696); 來源 | ...
摘要:另外數(shù)學成為了一個關(guān)鍵詞,編程語言主要是等,運營也出現(xiàn)在詞云中說明數(shù)據(jù)分析師也需要有運營能力。 功能點 爬取數(shù)據(jù) 所有公司數(shù)據(jù),名稱簡寫,城市,行業(yè),職位數(shù)量,人數(shù)范圍,標簽,介紹,融資階段,平均工資 github2016年度最受歡迎編程語言相應年數(shù)薪水,城市,學歷要求,公司融資階段,公司行業(yè) 大數(shù)據(jù)行業(yè)五大崗位相應年數(shù)薪水,城市,學歷要求,公司融資階段,公司行業(yè),崗位要求 編程語...
摘要:雖然廣受歡迎,但是仍受到來自另外一個基于的機器學習庫的競爭年出現(xiàn)的。還提供更傳統(tǒng)的機器學習功能的庫,包括神經(jīng)網(wǎng)絡(luò)和決策樹系統(tǒng)。和的機器學習庫。顧名思義,是用于神經(jīng)網(wǎng)絡(luò)機器學習的庫,便于將瀏覽器用作數(shù)據(jù)工作臺。 關(guān)于機器學習的11個開源工具 翻譯:瘋狂的技術(shù)宅英文標題:11 open source tools to make the most of machine learning英文連...
摘要:我們對種用于數(shù)據(jù)科學的開源深度學習庫作了排名。于年月發(fā)布了第名,已經(jīng)躋身于深度學習庫的上半部分。是最流行的深度學習前端第位是排名較高的非框架庫。頗受對數(shù)據(jù)集使用深度學習的數(shù)據(jù)科學家的青睞。深度學習庫的完整列表來自幾個來源。 我們對23種用于數(shù)據(jù)科學的開源深度學習庫作了排名。這番排名基于權(quán)重一樣大小的三個指標:Github上的活動、Stack Overflow上的活動以及谷歌搜索結(jié)果。排名結(jié)果...
閱讀 1323·2021-11-25 09:43
閱讀 2038·2021-11-11 10:58
閱讀 1384·2021-11-08 13:18
閱讀 2833·2019-08-29 16:25
閱讀 3591·2019-08-29 12:51
閱讀 3399·2019-08-29 12:30
閱讀 819·2019-08-26 13:24
閱讀 3762·2019-08-26 10:38