2011-09-20 58 views
24

我使用R進行數據分析,對此非常滿意。然而,清潔數據可能會更容易一些。我正在考慮學習適合這項任務的另一種語言。具體來說,我正在尋找一種工具來獲取原始數據,刪除不必要的變量或觀察值,並對其進行格式化以便於在R中加載。內容將主要是數字和字符串數據,而不是多行文本。Python或awk/sed清理數據

我正在考慮awk/sed組合與Python。 (我認識到Perl會是另一種選擇,但是如果我要學習另一種完整語言,Python似乎是一個更好,更具擴展性的選擇。)

sed/awk的優點是它會更快學習。缺點是這種組合不如Python可擴展。事實上,如果我學會了Python,我可能會想象一些「任務蠕變」,這可能很好,但不是我的目標。

我的另一個考慮是對大數據集的應用程序。據我瞭解,awk/sed一行一行地操作,而Python通常會將所有數據拉入內存。這可能是sed/awk的另一個優勢。

我還有其他問題嗎?任何建議,你可以提供將不勝感激。 (包括我的R用戶提供他們清洗的建議R標誌。)

+0

通過「清理」,你是指裁剪異常值或恢復一致性或其他任何東西?通過「數據」,你的意思主要是數字或字符串,或只是文本?對我來說,這個當前問題的目標太籠統了。 – nye17

+0

@ nye17,抱歉的歧義。我增加了一些細節。 – Charlie

+2

我主要是爲自己使用python,但如果它純粹是基於文本的數據集的操縱,作爲R的數據接口,我強烈建議perl,因爲它具有強大的正則表達式和處理文本的靈活性。 – nye17

回答

15

,不要破壞你的冒險,但我說沒有,這裏是爲什麼:

  • R的矢量化,其中SED/AWK不
  • [R已經有兩個Perl的正則表達式和擴展正則表達式
  • R能夠更容易地進行追索的統計程序(比如,歸集)如果你需要它
  • R可以想像,總結,...

和最重要的是:你已經知道R

這就是說,當然sed/awk對於小程序甚至是單行程序來說都很棒,而Python是一種很好的語言。但我會考慮也堅持R.

+4

我不認爲他正在考慮放棄R,而是補充它。 – Karl

3

我建議長期投資於處理數據文件的適當語言,比如python,perl或ruby,以及短期的sed/awk解決方案。我認爲所有的數據分析師至少需要三種語言;我使用C進行大量計算,perl處理數據文件,R使用交互式分析和圖形。

在python成爲流行之前,我學會了perl。我聽說過很多關於紅寶石的東西,所以你可能想嘗試一下。

對於其中的任何一種,您都可以逐行使用文件; python不需要提前閱讀完整的文件。

+2

當然,有人提醒說'C++可能比C更好',同樣,Python粉絲認爲它比Perl更好。但作爲一般規則,知道'R,* a *腳本語言和*現代可移植編譯語言*'是一個好方法。 –

+0

@DirkEddelbuettel事實上,我陷入了90年代後期,編程方式;我擔心學生會以我查看Fortran程序員的方式查看我。 – Karl

1

我會爲這種類型的處理推薦'awk'。

想必您只是在簡單的文本文件中搜索/拒絕無效的觀察結果。

awk在這項任務中閃電般快,編程非常簡單。

如果你需要做更復雜的事情,那麼你可以。

如果你不介意性能問題,Python也是一種可能性。 「rpy」庫可用於緊密集成python和R組件。

10

我經常使用Python和Perl。我知道sed相當好,曾經使用awk很多。我已經在適合和噴發中使用了R。 Perl是數據轉換功能和速度中最好的。

  • Perl基本上可以完成sed和awk所能做的所有事情,但還有很多。 (實際上,perl附帶的a2p和s2p會將awk和sed腳本轉換爲Perl。)
  • Perl包含在大多數Linux/Unix系統中。當情況並非如此時,有充分的理由學習sed和awk。這個理由已經很久了。
  • Perl有一套豐富的模塊,可以提供比awk或sed更強大的功能。例如,這些模塊支持反向補充DNA序列,計算統計數據,解析CSV文件或計算MD5s的單行程序。 (有關軟件包,請參見http://cpan.org/
  • Perl基本上和sed和awk一樣簡潔。對於像我這樣的人(而且,我懷疑你),在命令行上快速轉換數據是一大福音。 Python對於有效的命令行使用太羅嗦。

我老實說不知道爲什麼要用Perl學習sed和awk。

爲了記錄,我不是「一個Perl人」。我喜歡它作爲一把瑞士軍刀,而不是一種宗教信仰。

+2

+1從公平的編碼背景進行比較。用於Perl的 – nye17

+0

+1。雖然Python可能更易於閱讀,但Perl在速度和緊湊性方面都有優勢。命令行選項確實是一種祝福。 –

+0

'每個Unix系統都有Perl'的參數對sed和awk更適用,如果你需要(不寒而慄)在Windoze上工作,這兩個更容易被擱置。讓我們回到我剛剛使用R的角度,因爲查理在Windows上顯然擁有R。我曾經在Perl中編寫過大量數據過濾器,但完全轉向R. –

1

我同意德克。我想到了同樣的事情,並且也使用了其他語言。但是最終我再次感到驚訝,更有經驗的用戶用R做了什麼。像ddplyplyr這樣的軟件包對你來說可能很有意思。話雖這麼說SQL幫助我的數據雜耍經常

6

我會推薦/ AWK連同其他的一些命令行工具在UNIX一樣平臺上可用的財富 sed的:通訊,TR,排序,剪切,加入,grep的,並建立在像循環和什麼的shell功能。你真的不需要學習另一種編程語言,因爲R可以處理數據操作,並且如果不比其他流行的腳本語言更好。

+0

Jeff的一個很好的觀點是:當用管道粘在一起時,像他提到的那些命令行工具可以非常快速和強大地切割和切割數據。 Perl補充了許多這些工具(而不是取而代之)。有關摘要,請參閱位於http://www.gnu.org/s/coreutils/manual/html_node/index.html的GNU coreutils手冊。 – Reece

+0

更好的是,如果你使用Jeff和Dirk的littler包中的精美'r'二進制文件,R可以使用相同的管道。所以回到使用R :) –

+0

提問者沒有指定一個平臺,但對於Windows上的大多數人來說,這可能不是一個好的方法。 Unix工具向Windows環境的轉移並非沒有問題。 – user287424