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

資訊專欄INFORMATION COLUMN

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

Lionad-Morotar / 1938人閱讀

摘要:假設使用了最新的編程工具和技術,分析可以幫助我們檢測最流行的技術。我們使用工具將結果轉換為干凈的并創建數據幀。后者表示實際使用代碼的人數,因此它與不同的組相關。為此,我們使用了一個名為的庫,該庫基于語言檢測項目。

來源 | 愿碼(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個請求。

連接到GitHub

GitHub提供了一個搜索端點,它返回與查詢匹配的所有存儲庫。隨著我們的進展,在分析的不同步驟中,我們將更改變量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

相關文章

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

    摘要:我們將數據幀轉換為基于列的時間序列然后,我們使用聚合方法按語言和年份重構數據,并按語言計算出現次數我們在條形圖上表示結果上圖顯示了匯編,,中的多種編程語言,,和移動語言,以及,和等現代語言。使用集合將確保我們具有唯一的值。 showImg(https://segmentfault.com/img/remote/1460000018986014?w=1800&h=696); 來源 | ...

    dack 評論0 收藏0
  • 拉勾數據崗位和熱門編程語言現狀分析

    摘要:另外數學成為了一個關鍵詞,編程語言主要是等,運營也出現在詞云中說明數據分析師也需要有運營能力。 功能點 爬取數據 所有公司數據,名稱簡寫,城市,行業,職位數量,人數范圍,標簽,介紹,融資階段,平均工資 github2016年度最受歡迎編程語言相應年數薪水,城市,學歷要求,公司融資階段,公司行業 大數據行業五大崗位相應年數薪水,城市,學歷要求,公司融資階段,公司行業,崗位要求 編程語...

    atinosun 評論0 收藏0
  • 【譯】關于機器學習11個開源工具

    摘要:雖然廣受歡迎,但是仍受到來自另外一個基于的機器學習庫的競爭年出現的。還提供更傳統的機器學習功能的庫,包括神經網絡和決策樹系統。和的機器學習庫。顧名思義,是用于神經網絡機器學習的庫,便于將瀏覽器用作數據工作臺。 關于機器學習的11個開源工具 翻譯:瘋狂的技術宅英文標題:11 open source tools to make the most of machine learning英文連...

    岳光 評論0 收藏0
  • 23種深度學習庫排行榜:TensorFlow最活躍、Keras最流行

    摘要:我們對種用于數據科學的開源深度學習庫作了排名。于年月發布了第名,已經躋身于深度學習庫的上半部分。是最流行的深度學習前端第位是排名較高的非框架庫。頗受對數據集使用深度學習的數據科學家的青睞。深度學習庫的完整列表來自幾個來源。 我們對23種用于數據科學的開源深度學習庫作了排名。這番排名基于權重一樣大小的三個指標:Github上的活動、Stack Overflow上的活動以及谷歌搜索結果。排名結果...

    princekin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<