在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們將深入探討如何使用Python腳本和命令行來轉(zhuǎn)換數(shù)據(jù)。
但是首先,值得提出一個您可能正在思考的問題:“ Python如何適合命令行,為什么當我知道我可以使用IPython筆記本完成所有數(shù)據(jù)科學工作時,為什么還要使用命令行與Python進行交互?還是Jupyter實驗室?”
筆記本非常適合快速進行數(shù)據(jù)可視化和探索,但是Python腳本是將我們學到的東西投入生產(chǎn)的一種方式。假設(shè)您想建立一個網(wǎng)站,以幫助人們發(fā)布具有理想標題和提交時間的Hacker News帖子。為此,您需要腳本。
本教程假定您具有函數(shù)的基本知識,并且有一點命令行經(jīng)驗也不會受到損害。如果您以前從未使用過Python,請隨時查看我們涵蓋Python函數(shù)基礎(chǔ)的任務(wù),或者更深入地研究我們的一些數(shù)據(jù)科學課程。最近,我們發(fā)布了兩個新的交互式命令行課程:“ 命令行元素”和“命令行中的文本處理”,因此如果您想更深入地研究命令行,我們也建議您
也就是說,不必過分擔心先決條件!我們將解釋我們正在做的所有事情,所以讓我們開始吧!
熟悉數(shù)據(jù)
Hacker News是一個站點,用戶可以在該站點上通過Internet(通常是有關(guān)技術(shù)和創(chuàng)業(yè)公司)提交文章,而其他人可以“贊揚”這些文章,表示他們喜歡它們。提交的投票越多,在社區(qū)中就越受歡迎。熱門文章進入Hacker News的“首頁”,在其他網(wǎng)站上它們更有可能被他人看到。
我們將使用的數(shù)據(jù)集是由Arnaud Drizard使用Hacker News API編譯的,可以在此處找到。我們從數(shù)據(jù)中隨機抽取了10000行,并刪除了所有多余的列。我們的數(shù)據(jù)集只有四列:
submission_time -故事提交時。
upvotes -提交的投票數(shù)。
url —提交的基本域。
headline—提交的標題。用戶可以對其進行編輯,而不必與原始文章的標題相匹配。
我們將編寫腳本來回答三個關(guān)鍵問題:
哪些新聞最常出現(xiàn)在頭條新聞中?
哪些域名最常提交給Hacker News?
大多數(shù)文章什么時候提交?
切記:在編程時,有多種方法可以處理任務(wù)。在本教程中,我們將逐步解決這些問題,但是肯定還有其他方法同樣有效,因此請隨時嘗試并嘗試提出自己的方法!
使用命令行和Python腳本讀取數(shù)據(jù)
要加注星標,讓我們Transforming_Data_with_Python在桌面上創(chuàng)建一個文件夾。要使用命令行創(chuàng)建文件夾,可以使用mkdir命令,后跟文件夾名稱。例如,如果要創(chuàng)建一個名為的文件夾test,則可以導(dǎo)航到Desktop目錄,然后鍵入mkdir test。
我們將稍后討論為什么創(chuàng)建文件夾,但是現(xiàn)在,讓我們使用cd命令導(dǎo)航到創(chuàng)建的文件夾。該cd命令允許我們使用命令行更改目錄。
盡管有多種使用命令行創(chuàng)建文件的方法,但我們可以利用一種稱為管道傳輸和重定向輸出的技術(shù)來一次完成兩件事:將輸出從stdout(命令行生成的標準輸出)重定向到文件中并創(chuàng)建一個新文件!換句話說,我們可以讓它創(chuàng)建一個新文件并使它的輸出成為該文件的內(nèi)容,而不是讓命令行僅打印其輸出。
要做到這一點,我們可以使用>和>>,這取決于我們想用文件來完成。如果文件不存在,兩者都會創(chuàng)建一個文件;但是,>將使用重定向的輸出覆蓋文件中已有的文本,同時>>將任何重定向的輸出附加到文件中。
我們希望將數(shù)據(jù)讀入該文件并創(chuàng)建一個描述性的文件名和函數(shù)名稱,因此我們將創(chuàng)建一個名為的函數(shù),load_data()并將其保存在名為的文件中read.py。讓我們使用讀取數(shù)據(jù)的命令行創(chuàng)建函數(shù)。為此,我們將使用該printf函數(shù)。(我們將使用printf它,因為它允許我們打印換行符和制表符,我們將使用它們來使腳本對自己和其他人更具可讀性)。
為此,我們可以在命令行中輸入以下內(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.請記住,我們要使腳本可讀,我們正在使用printf命令通過命令行生成一些輸出,以在生成輸出時保留格式。
b.進口大熊貓。
c.將數(shù)據(jù)集(hn_stories.csv)讀入pandas數(shù)據(jù)框。
d.使用df.columns列名添加到我們的數(shù)據(jù)幀。
e.創(chuàng)建一個名為的函數(shù)load_data(),其中包含用于讀取和處理數(shù)據(jù)集的代碼。
f.利用換行符(\n)和制表符(\t)保留格式,因此Python可以讀取腳本。
g.將輸出重定向printf到read.py使用>運算符調(diào)用的文件。由于read.py尚不存在,因此已創(chuàng)建文件。
運行上面的代碼后,我們可以cat read.py在命令行中鍵入并執(zhí)行命令以檢查的內(nèi)容read.py。如果一切正常運行,我們的read.py文件將如下所示:
創(chuàng)造 __init__.py
在該項目的其余部分,我們將創(chuàng)建更多腳本來回答我們的問題并使用該load_data()函數(shù)。盡管我們可以將該函數(shù)粘貼到使用該函數(shù)的每個文件中,但是如果我們正在處理的項目很大,則可能會變得非常麻煩。
為了解決這個問題,我們可以創(chuàng)建一個名為的文件__init__.py。本質(zhì)上,__init__.py允許文件夾將其目錄文件視為包。最簡單的形式__init__.py可以是一個空文件。它只需要存在就可以將目錄文件視為包。您可以在Python文檔中找到有關(guān)包和模塊的更多信息。
因為load_data()是中的函數(shù)read.py,所以我們可以使用導(dǎo)入包的相同方法來導(dǎo)入該函數(shù):from read import load_data()。
還記得使用命令行創(chuàng)建文件的多種方法嗎?我們可以使用另一個命令來創(chuàng)建文件__init__.py這次,我們將使用該touch命令來創(chuàng)建文件。touch是一個在您運行命令后立即為您創(chuàng)建一個空文件的命令:
探索標題中的單詞
現(xiàn)在,我們已經(jīng)創(chuàng)建了一個腳本來讀取和處理數(shù)據(jù)以及創(chuàng)建的數(shù)據(jù)__init__.py,我們可以開始分析數(shù)據(jù)了!我們要探索的第一件事是標題中出現(xiàn)的獨特詞。為此,我們要執(zhí)行以下操作:
1)count.py使用命令行創(chuàng)建一個名為的文件。
2)load_data從導(dǎo)入read.py,并調(diào)用函數(shù)以讀取數(shù)據(jù)集。
3)將所有標題合并為一個長長的字符串。當您合并標題時,我們希望在每個標題之間留一個空格。在此步驟中,我們將使用Series.str.cat連接字符串。
4)將長字符串拆分成單詞。
5)使用Counter類可以計算每個單詞在字符串中出現(xiàn)的次數(shù)。
6)使用該.most_common()方法將100個最常用的單詞存儲到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
運行上面的代碼后,您可以cat count.py在命令行中鍵入并執(zhí)行命令以檢查的內(nèi)容count.py。如果一切正常運行,您的count.py文件將如下所示:
現(xiàn)在,我們已經(jīng)創(chuàng)建了Python腳本,我們可以從命令行運行腳本以獲取一百個最常用單詞的列表。要運行腳本,我們從命令行鍵入python count.py命令。
腳本運行后,您將看到以下打印結(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)站上滾動瀏覽它們會有些尷尬,但是您可能會注意到最常見的詞,例如等等。這些詞被稱為停用詞the,to a for這些詞對人類語音很有用,但對數(shù)據(jù)分析沒有任何幫助。您可以在我們的spaCy教程中找到更多有關(guān)停用詞的信息;如果要擴展此項目,則從我們的分析中刪除停用詞將是一個有趣的下一步。
即使包含了停用詞,我們也可以發(fā)現(xiàn)一些趨勢。除了停用詞之外,這些詞中的絕大多數(shù)都是與技術(shù)和創(chuàng)業(yè)相關(guān)的術(shù)語。考慮到HackerNews專注于科技創(chuàng)業(yè)公司,這并不奇怪,但是我們可以看到一些有趣的特定趨勢。例如,谷歌是該數(shù)據(jù)集中最常提及的品牌。Facebook,Apple和Twitter等其他品牌也是討論的熱門話題。
探索域提交
現(xiàn)在我們已經(jīng)探索了不同的標題并顯示了前100個最常用的詞,現(xiàn)在我們可以探索域提交了!為此,我們可以執(zhí)行以下操作:
1)domains.py使用命令行創(chuàng)建一個名為的文件。
2)load_data從導(dǎo)入read.py,并調(diào)用函數(shù)以讀取數(shù)據(jù)集。
3)使用value_counts()大熊貓中的方法來計算列中每個值的出現(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ù)文章何時提交。一種簡單的重組方法是查看文章的提交時間。為了弄清楚這一點,我們需要使用該submission_time列。
該submission_time列包含如下時間戳:2011-11-09T21:56:22Z。這些時間以UTC表示,UTC是大多數(shù)軟件用于保持一致性的通用時區(qū)(想象一個數(shù)據(jù)庫中填充的時間都具有不同的時區(qū);要使用它會非常麻煩)。
要從時間戳獲取小時,我們可以使用該dateutil庫。中的parser模塊dateutil包含parse函數(shù),該函數(shù)可以帶一個時間戳,如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行https://www.aaa-cg.com.cn/data/2304.html并返回一個datetime對象。這是文檔的鏈接。解析時間戳后,hour結(jié)果日期對象的屬性將告訴您文章提交的時間。
為此,我們可以執(zhí)行以下操作:
1)times.py使用命令行創(chuàng)建一個名為的文件。
2)編寫一個函數(shù)以從時間戳中提取小時。此函數(shù)應(yīng)首先用于dateutil.parser.parse解析時間戳,然后從結(jié)果datetime對象中提取小時,然后使用來返回小時.hour。
3)使用pandas apply()方法創(chuàng)建提交時間列。
4)使用value_counts()大熊貓中的方法來計算每小時發(fā)生的次數(shù)。
5)打印結(jié)果。
我們在命令行中執(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
這是它看起來像一個單獨.py文件的樣子(如上所述,您可以通過cat times.py從命令行運行以檢查文件來進行確認):
現(xiàn)在,我們已經(jīng)創(chuàng)建了Python腳本,我們可以從命令行運行腳本,以獲取特定時間內(nèi)發(fā)布了多少篇文章的列表。為此,您可以從命令行鍵入python times.py命令。運行此腳本,您將看到以下結(jié)果:
您會注意到大多數(shù)提交內(nèi)容是在下午發(fā)布的。但是請記住,這些時間是UTC時間。如果您有興趣擴展此項目,請嘗試在腳本中添加一個部分,以將UTC的輸出轉(zhuǎn)換為本地時區(qū)。
下一步
在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們探索了數(shù)據(jù)并建立了一個短腳本目錄,這些短腳本可相互配合以提供所需的答案。這是構(gòu)建我們的數(shù)據(jù)分析項目的生產(chǎn)版本的第一步。
但是,當然,這僅僅是開始!在如何使用Python腳本轉(zhuǎn)換數(shù)據(jù)和命令行中,我們沒有使用過upvotes數(shù)據(jù),因此這是擴展分析范圍的一個不錯的下一步:
a.標題長度最大才能獲得最多投票?
b.提交時間最多的是什么?
c.投票總數(shù)隨時間變化如何?
我們鼓勵您結(jié)合自己的問題,并在繼續(xù)探索此數(shù)據(jù)集時發(fā)揮創(chuàng)造力!
https://www.toutiao.com/i6831049808313057804/
python代碼寫好了運行的方法:首先文件地址欄輸入cmd,敲入回車;然后在對應(yīng)的目錄下輸入【python hello.py】即可運行程序。
Python由荷蘭數(shù)學和計算機科學研究學會的吉多·范羅蘇姆 于1990 年代初設(shè)計,作為一門叫做ABC語言的替代品。
Python提供了高效的高級數(shù)據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊獭?/p>
首先安裝anaconda,里面包含了運行代碼所需要的三方庫包和python解釋器,然后,找到anaconda打開jupyter,將記事本寫好的代碼復(fù)制進去運行即可;也可以將記事本后綴txt改為py,打開powershell窗口然后直接單擊即可。
這個很簡單,不難,vs2017中已經(jīng)集成了python運行環(huán)境,在安裝的時候,只要選中“python開發(fā)”這項,那么就可以直接在vs2017中創(chuàng)建python項目,并運行python程序,下面我簡單介紹一下主要過程:
1.安裝“python開發(fā)”環(huán)境,這里點擊運行Visual Studio Installer,在主界面點擊“更多”按鈕,然后“修復(fù)”,在彈出的對話框中需要勾選“python開發(fā)”這項,如下:
2.安裝成功后,我們再啟動vs2017,就可以創(chuàng)建python項目了,如下,依次選擇“文件”->“新建”->“項目”,選擇python,輸入項目名稱和位置就行:
3.點擊“確定”,進入項目向?qū)В@里我們可以選擇python的虛擬環(huán)境,Anaconda4.2.0,python2.7,python3.6或python3.7都可以,如下:
4.項目創(chuàng)建成功后,我們就可以新建py文件,編寫python代碼了,如下,一個簡單的測試程序:
點擊運行按鈕,程序就能正常運行,如下:
5.這里我們也可以在線安裝python包,右鍵“python3.6(64-bit)”,選擇“安裝python包”,就可以直接在線安裝python包,如下:
直接導(dǎo)入對應(yīng)的包,就可以編寫相關(guān)代碼,程序也可以正常運行調(diào)試,如下:
至此,我們就完成了在vs2017中配置python開發(fā)環(huán)境。總的來說,整個過程很簡單,就是需要先裝python插件,之后我們就可以在vs2017中創(chuàng)建python項目,調(diào)試運行python代碼了,只要你有一定的vs使用基礎(chǔ),熟悉一下相關(guān)資料和示例,很快就能掌握的,網(wǎng)上也有相關(guān)教程,感興趣的話,可以搜一下,希望以上分享的內(nèi)容能對你有所幫助吧,也歡迎大家評論、留言。