旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 大數(shù)據(jù)分析 > 如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行

如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行

時(shí)間:2020-05-26來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-05-26點(diǎn)擊量:作者:Sissi



  在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們將深入探討如何使用Python腳本和命令行來轉(zhuǎn)換數(shù)據(jù)。
 

  但是首先,值得提出一個(gè)您可能正在思考的問題:“ Python如何適合命令行,為什么當(dāng)我知道我可以使用IPython筆記本完成所有數(shù)據(jù)科學(xué)工作時(shí),為什么還要使用命令行與Python進(jìn)行交互?還是Jupyter實(shí)驗(yàn)室?”
 

  筆記本非常適合快速進(jìn)行數(shù)據(jù)可視化和探索,但是Python腳本是將我們學(xué)到的東西投入生產(chǎn)的一種方式。假設(shè)您想建立一個(gè)網(wǎng)站,以幫助人們發(fā)布具有理想標(biāo)題和提交時(shí)間的Hacker News帖子。為此,您需要腳本。
 

  本教程假定您具有函數(shù)的基本知識(shí),并且有一點(diǎn)命令行經(jīng)驗(yàn)也不會(huì)受到損害。如果您以前從未使用過Python,請(qǐng)隨時(shí)查看我們涵蓋Python函數(shù)基礎(chǔ)的任務(wù),或者更深入地研究我們的一些數(shù)據(jù)科學(xué)課程。最近,我們發(fā)布了兩個(gè)新的交互式命令行課程:“ 命令行元素”和“命令行中的文本處理”,因此如果您想更深入地研究命令行,我們也建議您
 

  也就是說,不必過分擔(dān)心先決條件!我們將解釋我們正在做的所有事情,所以讓我們開始吧!
 

  熟悉數(shù)據(jù)
 

  Hacker News是一個(gè)站點(diǎn),用戶可以在該站點(diǎn)上通過Internet(通常是有關(guān)技術(shù)和創(chuàng)業(yè)公司)提交文章,而其他人可以“贊揚(yáng)”這些文章,表示他們喜歡它們。提交的投票越多,在社區(qū)中就越受歡迎。熱門文章進(jìn)入Hacker News的“首頁(yè)”,在其他網(wǎng)站上它們更有可能被他人看到。
 

  我們將使用的數(shù)據(jù)集是由Arnaud Drizard使用Hacker News API編譯的,可以在此處找到。我們從數(shù)據(jù)中隨機(jī)抽取了10000行,并刪除了所有多余的列。我們的數(shù)據(jù)集只有四列:
 

  submission_time -故事提交時(shí)。

  upvotes -提交的投票數(shù)。

  url —提交的基本域。

  headline—提交的標(biāo)題。用戶可以對(duì)其進(jìn)行編輯,而不必與原始文章的標(biāo)題相匹配。
 

  我們將編寫腳本來回答三個(gè)關(guān)鍵問題:
 

  哪些新聞最常出現(xiàn)在頭條新聞中?

  哪些域名最常提交給Hacker News?

  大多數(shù)文章什么時(shí)候提交?
 

  切記:在編程時(shí),有多種方法可以處理任務(wù)。在本教程中,我們將逐步解決這些問題,但是肯定還有其他方法同樣有效,因此請(qǐng)隨時(shí)嘗試并嘗試提出自己的方法!
 

  使用命令行和Python腳本讀取數(shù)據(jù)
 

  要加注星標(biāo),讓我們Transforming_Data_with_Python在桌面上創(chuàng)建一個(gè)文件夾。要使用命令行創(chuàng)建文件夾,可以使用mkdir命令,后跟文件夾名稱。例如,如果要?jiǎng)?chuàng)建一個(gè)名為的文件夾test,則可以導(dǎo)航到Desktop目錄,然后鍵入mkdir test。
 

  我們將稍后討論為什么創(chuàng)建文件夾,但是現(xiàn)在,讓我們使用cd命令導(dǎo)航到創(chuàng)建的文件夾。該cd命令允許我們使用命令行更改目錄。
 

  盡管有多種使用命令行創(chuàng)建文件的方法,但我們可以利用一種稱為管道傳輸和重定向輸出的技術(shù)來一次完成兩件事:將輸出從stdout(命令行生成的標(biāo)準(zhǔn)輸出)重定向到文件中并創(chuàng)建一個(gè)新文件!換句話說,我們可以讓它創(chuàng)建一個(gè)新文件并使它的輸出成為該文件的內(nèi)容,而不是讓命令行僅打印其輸出。
 

  要做到這一點(diǎn),我們可以使用>和>>,這取決于我們想用文件來完成。如果文件不存在,兩者都會(huì)創(chuàng)建一個(gè)文件;但是,>將使用重定向的輸出覆蓋文件中已有的文本,同時(shí)>>將任何重定向的輸出附加到文件中。
 

  我們希望將數(shù)據(jù)讀入該文件并創(chuàng)建一個(gè)描述性的文件名和函數(shù)名稱,因此我們將創(chuàng)建一個(gè)名為的函數(shù),load_data()并將其保存在名為的文件中read.py。讓我們使用讀取數(shù)據(jù)的命令行創(chuàng)建函數(shù)。為此,我們將使用該printf函數(shù)。(我們將使用printf它,因?yàn)樗试S我們打印換行符和制表符,我們將使用它們來使腳本對(duì)自己和其他人更具可讀性)。
 

  為此,我們可以在命令行中輸入以下內(nèi)容
 

  printf "import pandas as pd\n\ndef load_data():\n\thn_stories = pd.read_csv('hn_stories.csv')\n\thn_stories.colummns = ['submission_time', 'upvotes', 'url', 'headline']\n\treturn(hn_stores)\n" > read.py
 

  檢查上面的代碼,有很多事情要做。讓我們將其分解。在函數(shù)中,我們是:
 

  a.請(qǐng)記住,我們要使腳本可讀,我們正在使用printf命令通過命令行生成一些輸出,以在生成輸出時(shí)保留格式。

  b.進(jìn)口大熊貓。

  c.將數(shù)據(jù)集(hn_stories.csv)讀入pandas數(shù)據(jù)框。

  d.使用df.columns列名添加到我們的數(shù)據(jù)幀。

  e.創(chuàng)建一個(gè)名為的函數(shù)load_data(),其中包含用于讀取和處理數(shù)據(jù)集的代碼。

  f.利用換行符(\n)和制表符(\t)保留格式,因此Python可以讀取腳本。

  g.將輸出重定向printf到read.py使用>運(yùn)算符調(diào)用的文件。由于read.py尚不存在,因此已創(chuàng)建文件。
 

  運(yùn)行上面的代碼后,我們可以cat read.py在命令行中鍵入并執(zhí)行命令以檢查的內(nèi)容read.py。如果一切正常運(yùn)行,我們的read.py文件將如下所示:

大數(shù)據(jù)分析Python
 

  創(chuàng)造 __init__.py
 

  在該項(xiàng)目的其余部分,我們將創(chuàng)建更多腳本來回答我們的問題并使用該load_data()函數(shù)。盡管我們可以將該函數(shù)粘貼到使用該函數(shù)的每個(gè)文件中,但是如果我們正在處理的項(xiàng)目很大,則可能會(huì)變得非常麻煩。
 

  為了解決這個(gè)問題,我們可以創(chuàng)建一個(gè)名為的文件__init__.py。本質(zhì)上,__init__.py允許文件夾將其目錄文件視為包。最簡(jiǎn)單的形式__init__.py可以是一個(gè)空文件。它只需要存在就可以將目錄文件視為包。您可以在Python文檔中找到有關(guān)包和模塊的更多信息。
 

  因?yàn)閘oad_data()是中的函數(shù)read.py,所以我們可以使用導(dǎo)入包的相同方法來導(dǎo)入該函數(shù):from read import load_data()。
 

  還記得使用命令行創(chuàng)建文件的多種方法嗎?我們可以使用另一個(gè)命令來創(chuàng)建文件__init__.py這次,我們將使用該touch命令來創(chuàng)建文件。touch是一個(gè)在您運(yùn)行命令后立即為您創(chuàng)建一個(gè)空文件的命令:
 

大數(shù)據(jù)分析Python
 

  探索標(biāo)題中的單詞
 

  現(xiàn)在,我們已經(jīng)創(chuàng)建了一個(gè)腳本來讀取和處理數(shù)據(jù)以及創(chuàng)建的數(shù)據(jù)__init__.py,我們可以開始分析數(shù)據(jù)了!我們要探索的第一件事是標(biāo)題中出現(xiàn)的獨(dú)特詞。為此,我們要執(zhí)行以下操作:
 

  1)count.py使用命令行創(chuàng)建一個(gè)名為的文件。

  2)load_data從導(dǎo)入read.py,并調(diào)用函數(shù)以讀取數(shù)據(jù)集。

  3)將所有標(biāo)題合并為一個(gè)長(zhǎng)長(zhǎng)的字符串。當(dāng)您合并標(biāo)題時(shí),我們希望在每個(gè)標(biāo)題之間留一個(gè)空格。在此步驟中,我們將使用Series.str.cat連接字符串。

  4)將長(zhǎng)字符串拆分成單詞。

  5)使用Counter類可以計(jì)算每個(gè)單詞在字符串中出現(xiàn)的次數(shù)。

  6)使用該.most_common()方法將100個(gè)最常用的單詞存儲(chǔ)到wordCount。
 

  如果使用命令行創(chuàng)建此文件,則外觀如下:
 

  printf "from read import load_data\nfrom collections import Counter\n\nstories = load_data()\nheadlines = stories['headline'].str.cat(sep = ' ').lower()\nwordCount = Counter(headlines.split(' ')).most_common(100)\nprint(wordCount)\n" > count.py
 

  運(yùn)行上面的代碼后,您可以cat count.py在命令行中鍵入并執(zhí)行命令以檢查的內(nèi)容count.py。如果一切正常運(yùn)行,您的count.py文件將如下所示:

大數(shù)據(jù)分析Python
 

  現(xiàn)在,我們已經(jīng)創(chuàng)建了Python腳本,我們可以從命令行運(yùn)行腳本以獲取一百個(gè)最常用單詞的列表。要運(yùn)行腳本,我們從命令行鍵入python count.py命令。
 

  腳本運(yùn)行后,您將看到以下打印結(jié)果:
 

  [('the', 2045), ('to', 1641), ('a', 1276), ('of', 1170), ('for', 1140), ('in', 1036), ('and', 936), ('', 733), ('is', 620), ('on', 568), ('hn:', 537), ('with', 537), ('how', 526), ('-', 487), ('your', 480), ('you', 392), ('ask', 371), ('from', 310), ('new', 304), ('google', 303), ('why', 262), ('what', 258), ('an', 243), ('are', 223), ('by', 219), ('at', 213), ('show', 205), ('web', 192), ('it', 192), ('–', 184), ('do', 183), ('app', 178), ('i', 173), ('as', 161), ('not', 160), ('that', 160), ('data', 157), ('about', 154), ('be', 154), ('facebook', 150), ('startup', 147), ('my', 131), ('|', 127), ('using', 125), ('free', 125), ('online', 123), ('apple', 123), ('get', 122), ('can', 115), ('open', 114), ('will', 112), ('android', 110), ('this', 110), ('out', 109), ('we', 106), ('its', 102), ('now', 101), ('best', 101), ('up', 100), ('code', 98), ('have', 97), ('or', 96), ('one', 95), ('more', 93), ('first', 93), ('all', 93), ('software', 93), ('make', 92), ('iphone', 91), ('twitter', 91), ('should', 91), ('video', 90), ('social', 89), ('&', 88), ('internet', 88), ('us', 88), ('mobile', 88), ('use', 86), ('has', 84), ('just', 80), ('world', 79), ('design', 79), ('business', 79), ('5', 78), ('apps', 77), ('source', 77), ('cloud', 76), ('into', 76), ('api', 75), ('top', 74), ('tech', 73), ('javascript', 73), ('like', 72), ('programming', 72), ('windows', 72), ('when', 71), ('ios', 70), ('live', 69), ('future', 69), ('most', 68)]
 

  在我們的網(wǎng)站上滾動(dòng)瀏覽它們會(huì)有些尷尬,但是您可能會(huì)注意到最常見的詞,例如等等。這些詞被稱為停用詞the,to a for這些詞對(duì)人類語(yǔ)音很有用,但對(duì)數(shù)據(jù)分析沒有任何幫助。您可以在我們的spaCy教程中找到更多有關(guān)停用詞的信息;如果要擴(kuò)展此項(xiàng)目,則從我們的分析中刪除停用詞將是一個(gè)有趣的下一步。
 

  即使包含了停用詞,我們也可以發(fā)現(xiàn)一些趨勢(shì)。除了停用詞之外,這些詞中的絕大多數(shù)都是與技術(shù)和創(chuàng)業(yè)相關(guān)的術(shù)語(yǔ)??紤]到HackerNews專注于科技創(chuàng)業(yè)公司,這并不奇怪,但是我們可以看到一些有趣的特定趨勢(shì)。例如,谷歌是該數(shù)據(jù)集中最常提及的品牌。Facebook,Apple和Twitter等其他品牌也是討論的熱門話題。
 

  探索域提交
 

  現(xiàn)在我們已經(jīng)探索了不同的標(biāo)題并顯示了前100個(gè)最常用的詞,現(xiàn)在我們可以探索域提交了!為此,我們可以執(zhí)行以下操作:
 

  1)domains.py使用命令行創(chuàng)建一個(gè)名為的文件。

  2)load_data從導(dǎo)入read.py,并調(diào)用函數(shù)以讀取數(shù)據(jù)集。

  3)使用value_counts()大熊貓中的方法來計(jì)算列中每個(gè)值的出現(xiàn)次數(shù)。

  4)遍歷該系列并打印索引值及其關(guān)聯(lián)的總數(shù)。
 

  這是命令行形式的外觀:
 

  printf "from read import load_data\n\nstories = load_data()\ndomains = stories['url'].value_counts()\nfor name, row in domains.items():\n\tprint('{0}: {1}'.format(name, row))\n" > domains.py
 

  再一次,如果我們cat domains.py在命令行中輸入來檢查domains.py,我們應(yīng)該看到:

大數(shù)據(jù)分析Python
 

  探索提交時(shí)間
 

  我們想知道大多數(shù)文章何時(shí)提交。一種簡(jiǎn)單的重組方法是查看文章的提交時(shí)間。為了弄清楚這一點(diǎn),我們需要使用該submission_time列。
 

  該submission_time列包含如下時(shí)間戳:2011-11-09T21:56:22Z。這些時(shí)間以UTC表示,UTC是大多數(shù)軟件用于保持一致性的通用時(shí)區(qū)(想象一個(gè)數(shù)據(jù)庫(kù)中填充的時(shí)間都具有不同的時(shí)區(qū);要使用它會(huì)非常麻煩)。
 

  要從時(shí)間戳獲取小時(shí),我們可以使用該dateutil庫(kù)。中的parser模塊dateutil包含parse函數(shù),該函數(shù)可以帶一個(gè)時(shí)間戳,并返回一個(gè)datetime對(duì)象。這是文檔的鏈接。解析時(shí)間戳后,hour結(jié)果日期對(duì)象的屬性將告訴您文章提交的時(shí)間。
 

  為此,我們可以執(zhí)行以下操作:
 

  1)times.py使用命令行創(chuàng)建一個(gè)名為的文件。

  2)編寫一個(gè)函數(shù)以從時(shí)間戳中提取小時(shí)。此函數(shù)應(yīng)首先用于dateutil.parser.parse解析時(shí)間戳,然后從結(jié)果datetime對(duì)象中提取小時(shí),然后使用來返回小時(shí).hour。

  3)使用pandas apply()方法創(chuàng)建提交時(shí)間列。

  4)使用value_counts()大熊貓中的方法來計(jì)算每小時(shí)發(fā)生的次數(shù)。

  5)打印結(jié)果。
 

  我們?cè)诿钚兄袌?zhí)行以下操作:
 

  printf "from dateutil.parser import parse\nfrom read import load_data\n\n\ndef extract_hour(timestamp):\n\tdatetime = parse(timestamp)\n\thour = datetime.hour\n\treturn hour\n\nstories = load_data()\nstories['hour'] = stories['submission_time'].apply(extract_hour)\ntime = stories['hour'].value_counts()\nprint(time)" > times.py
 

  這是它看起來像一個(gè)單獨(dú).py文件的樣子(如上所述,您可以通過cat times.py從命令行運(yùn)行以檢查文件來進(jìn)行確認(rèn)):

大數(shù)據(jù)分析Python
 

  現(xiàn)在,我們已經(jīng)創(chuàng)建了Python腳本,我們可以從命令行運(yùn)行腳本,以獲取特定時(shí)間內(nèi)發(fā)布了多少篇文章的列表。為此,您可以從命令行鍵入python times.py命令。運(yùn)行此腳本,您將看到以下結(jié)果:

 

大數(shù)據(jù)分析Python
 

  您會(huì)注意到大多數(shù)提交內(nèi)容是在下午發(fā)布的。但是請(qǐng)記住,這些時(shí)間是UTC時(shí)間。如果您有興趣擴(kuò)展此項(xiàng)目,請(qǐng)嘗試在腳本中添加一個(gè)部分,以將UTC的輸出轉(zhuǎn)換為本地時(shí)區(qū)。
 

  下一步
 

  在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們探索了數(shù)據(jù)并建立了一個(gè)短腳本目錄,這些短腳本可相互配合以提供所需的答案。這是構(gòu)建我們的數(shù)據(jù)分析項(xiàng)目的生產(chǎn)版本的第一步。
 

  但是,當(dāng)然,這僅僅是開始!在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們沒有使用過upvotes數(shù)據(jù),因此這是擴(kuò)展分析范圍的一個(gè)不錯(cuò)的下一步:
 

  a.標(biāo)題長(zhǎng)度最大才能獲得最多投票?

  b.提交時(shí)間最多的是什么?

  c.投票總數(shù)隨時(shí)間變化如何?
 

  我們鼓勵(lì)您結(jié)合自己的問題,并在繼續(xù)探索此數(shù)據(jù)集時(shí)發(fā)揮創(chuàng)造力!

 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖