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