前 言 如果你是數(shù)據(jù)行業(yè)的一份子,,那么你肯定會(huì)知道和不同的數(shù)據(jù)類(lèi)型打交道是件多么麻煩的事,。不同數(shù)據(jù)格式,、不同壓縮算法,、不同系統(tǒng)下的不同解析方法——很快就會(huì)讓你感到抓狂!噢,!我還沒(méi)提那些非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)呢,。 對(duì)于所有數(shù)據(jù)科學(xué)家和數(shù)據(jù)工程師來(lái)說(shuō),和不同的格式打交道都乏味透頂,!但現(xiàn)實(shí)情況是,,人們很少能得到整齊的列表數(shù)據(jù)。因此,,熟悉不同的文件格式,、了解處理它們時(shí)會(huì)遇到的困難以及處理某類(lèi)數(shù)據(jù)時(shí)的最佳/最高效的方法,對(duì)于任何一個(gè)數(shù)據(jù)科學(xué)家(或者數(shù)據(jù)工程師)而言都必不可少,。 在本篇文章中,,你會(huì)了解到數(shù)據(jù)科學(xué)家或數(shù)據(jù)工程師必須知道的幾種常規(guī)格式。我會(huì)先向你介紹數(shù)據(jù)行業(yè)里常用的幾種不同的文件格式,。隨后,我會(huì)向大家介紹如何在 Python 里讀取這些文件格式,。 PS:在后文中提到的數(shù)據(jù)科學(xué)家,,同樣也包括數(shù)據(jù)工程師以及所有的數(shù)據(jù)科學(xué)專(zhuān)家。 目 錄
1. 逗號(hào)分隔值 2. XLSX 3. ZIP 4. 純文本(txt) 5. JSON 6. XML 7. HTML 8. 圖像 9. 分層數(shù)據(jù)格式 10. PDF 11. DOCX 12. MP3 13. MP4 1. 文件格式是什么,。 文件格式是計(jì)算機(jī)為了存儲(chǔ)信息而使用的對(duì)信息的特殊編碼方式,。首先,文件格式代表著文件的類(lèi)型,,如二進(jìn)制文件或者 ASCII 文件等,。其次,它體現(xiàn)了信息組織的方式,。比如,,逗號(hào)分隔值(CSV)文件格式用純文本來(lái)儲(chǔ)存列表數(shù)據(jù),。 為了識(shí)別一個(gè)文件的格式,,你通常會(huì)去看這個(gè)文件的擴(kuò)展名,。比如,,一個(gè)以“CSV”格式保存的名為“Data”的文件下方的文件名會(huì)顯示為“Data.csv”,。看到“.csv”這個(gè)擴(kuò)展名,,我們就會(huì)清楚地知道這是一個(gè)“CSV”文件,,并且還可以知道其中的數(shù)據(jù)是以表格的形式儲(chǔ)存的。 2. 數(shù)據(jù)科學(xué)家應(yīng)當(dāng)了解各種不同文件格式的原因,。 通常,,你碰到的文件類(lèi)型取決于你當(dāng)下構(gòu)造的應(yīng)用。舉個(gè)例子,,在一個(gè)圖像處理系統(tǒng)中,,你需要把圖像作為輸入和輸出。所以,,你所見(jiàn)到的文件大都是jpeg,、gif 或者 png 格式的。 作為一個(gè)數(shù)據(jù)科學(xué)家,,你需要了解各種文件格式的底層結(jié)構(gòu)以及相應(yīng)的優(yōu)勢(shì)和劣勢(shì),。只有了解了數(shù)據(jù)的底層結(jié)構(gòu),你才能夠進(jìn)一步去探索它,,或者決定如何來(lái)儲(chǔ)存相關(guān)的數(shù)據(jù),。 選擇一個(gè)最理想的文件格式來(lái)儲(chǔ)存數(shù)據(jù)能夠提升你的模型在處理數(shù)據(jù)時(shí)的性能。 現(xiàn)在,,讓我們討論一下下方這些文件格式以及如何在 Python 中讀取它們:
3. 不同的文件格式以及從 Python 中讀取這些文件的方法,。 3.1 逗號(hào)分隔值 逗號(hào)分隔值文件格式屬于電子表格文件格式的一種。 什么是電子表格文件格式,? 在電子表格文件格式中,,數(shù)據(jù)被儲(chǔ)存在單元格里。每個(gè)單元格都處于特定的行和列中,。電子表格文件中的列擁有不同的類(lèi)型,。比如說(shuō),它可以是字符串型的,、日期型的或者整數(shù)型的,。最常用的電子表格文件格式包括:逗號(hào)分隔值(CSV)、Microsoft Excel 電子表格(xls)以及 Microsoft Excel Open XML 電子表格(xlsx),。 CSV 文件中的每一行都代表一份觀察報(bào)告,,或者也可以說(shuō)是一條記錄,。每一個(gè)記錄都包含一個(gè)或者更多由逗號(hào)分隔的字段。 有時(shí)你看你會(huì)遇到用制表符而非逗號(hào)來(lái)分隔字段的文件,。這種文件格式被稱(chēng)為 TSV(制表符分隔值)文件格式,。 下面是一個(gè)用 Notepad 打開(kāi)的 CSV 文件。 在 Python 中從 CSV 文件里讀取數(shù)據(jù) 現(xiàn)在讓我們看看如何在 Python 中讀取一個(gè) CSV 文件,。你可以用 Python 中的“pandas”庫(kù)來(lái)加載數(shù)據(jù)。 import pandas as pd df = pd.read_csv(“/home/Loan_Prediction/train.csv”) 上方的代碼將會(huì)把 train.csv 文件加載進(jìn) DataFrame df 中,。 3.2 XLSX文件 XLSX 是 Microsoft Excel Open XML 的文件格式,,它同樣可以歸入電子表格文件格式這一類(lèi)中。它是由 Microsoft Excel 開(kāi)發(fā)的一種基于 XML 文件格式,。Microsoft Office 2007 最先采用 XLSX 格式來(lái)儲(chǔ)存數(shù)據(jù),。 在 XLSX 中,數(shù)據(jù)被放在工作表的單元格和列當(dāng)中,。每個(gè) XLSX 文件可能包含一個(gè)或者更多工作表,,所以一個(gè)工作簿中可能會(huì)包含多個(gè)工作表。 下面是一個(gè)在 Microsoft Excel 中打開(kāi)的“xlsx”文件,。 上圖顯示的這個(gè)文件里包含多個(gè)工作表,這些工作表的名稱(chēng)分別為 Customers,、Employees,、Invoice 和 Order。圖片中顯示的是其中一個(gè)工作表——“Invoice”——中的數(shù)據(jù),。 從 XLSX 文件讀取數(shù)據(jù) 讓我們一起來(lái)加載一下來(lái)自 XLSX 文件的數(shù)據(jù)并且定義一下相關(guān)工作表的名稱(chēng),。此時(shí),你可以用 Python 中的“pandas”庫(kù)來(lái)加載這些數(shù)據(jù),。 import pandas as pd df = pd.read_excel(“/home/Loan_Prediction/train.xlsx”,sheetname = “Invoice”) 上方的代碼將會(huì)把來(lái)自“train.xlsx”文件的工作表“Invoice”加載進(jìn) DataFrame df 中,。 3.3 ZIP 文件 ZIP 格式是一種歸檔文件格式。 什么是歸檔文件格式,? 在歸檔文件格式中,,你可以創(chuàng)建一個(gè)包含多個(gè)文件和元數(shù)據(jù)的文件。歸檔文件格式通常用于將多個(gè)數(shù)據(jù)文件放入一個(gè)文件中的過(guò)程,。這么做是為了方便對(duì)這些文件進(jìn)行壓縮從而減少儲(chǔ)存它們所需的存儲(chǔ)空間,。 有很多種常用的電腦數(shù)據(jù)歸檔格式可以創(chuàng)建歸檔文件。Zip,、RAR 和 Tar 是最常用的3種用于壓縮數(shù)據(jù)的歸檔文件格式,。 因此,ZIP 文件格式是一種無(wú)損壓縮格式,,這意味著如果你用 ZIP 格式壓縮了多個(gè)文件,,那么在解壓縮之后你能夠完全恢復(fù)這些數(shù)據(jù),。ZIP 文件格式使用多種壓縮算法來(lái)壓縮文件。你可以通過(guò) .zip 這個(gè)擴(kuò)展名輕易地識(shí)別出一個(gè) ZIP 文件,。 在 Python 中讀取 .ZIP 文件 你可以通過(guò)導(dǎo)入“zipfile”包來(lái)讀取 zip 文件,。下方的代碼可以實(shí)現(xiàn)讀取“T.zip”中的“train.csv”文件。 import zipfile 在這里我已經(jīng)討論了其中一種最常用的歸檔格式,,也已經(jīng)討論了如何在 python 中打開(kāi)這種歸檔格式,。我不會(huì)再對(duì)其他的歸檔格式進(jìn)行展開(kāi)討論。如果你想了解不同類(lèi)型的歸檔格式并且想對(duì)其做出比較,,可以點(diǎn)開(kāi)這個(gè)鏈接:https://en./wiki/Comparison_of_archive_formats,。 3.4 純文本(txt)文件格式 在純文本文件格式中,,所有的內(nèi)容都是純文本,。通常,這個(gè)文本的形式是非結(jié)構(gòu)的,,而且也沒(méi)有與元數(shù)據(jù)關(guān)聯(lián),。txt 文件格式可以被任何程序讀取。但是如果想通過(guò)計(jì)算機(jī)程序來(lái)解析它,,并不是件容易的事,。 讓我們以一個(gè)文本文件為例。 下面是一段包含了文本的文本文件數(shù)據(jù): “In my previous article, I introduced you to the basics of Apache Spark, different data representations 假設(shè)上面的文本來(lái)自一個(gè)名叫 text.txt 的文件,,如果你想要讀取它,,那么可以參考下方的代碼。 text_file = open('text.txt', 'r') 3.5 JSON 文件格式 JavaScript 對(duì)象表示法(JSON)是一個(gè)基于文本的開(kāi)放式標(biāo)準(zhǔn),,通常用于在網(wǎng)絡(luò)上交換數(shù)據(jù),。JSON 格式被用來(lái)在網(wǎng)絡(luò)上傳輸結(jié)構(gòu)化數(shù)據(jù)。JSON 文件格式可以被任何編程語(yǔ)言輕易讀取,,因?yàn)樗且环N獨(dú)立于語(yǔ)言的數(shù)據(jù)格式,。 請(qǐng)看下面某個(gè) JSON 文件的樣例。 下面我們看到的是一個(gè)典型的 JSON 文件儲(chǔ)存員工信息的過(guò)程,。 { 讀取 JSON 文件 讓我們加載來(lái)自 JSON 文件的數(shù)據(jù),。你可以使用 Python 中的“pandas”庫(kù)來(lái)加載數(shù)據(jù)。 import pandas as pd df =pd.read_json(“/home/kunal/Downloads/Loan_Prediction/train.json”) 3.6 XML 文件格式 XML 同樣被稱(chēng)為可擴(kuò)展標(biāo)記語(yǔ)言,。從名字中我們可以看出,,它是一種標(biāo)記語(yǔ)言,在編碼數(shù)據(jù)時(shí)需要遵循某些規(guī)則,。XML 文件格式是一種既人類(lèi)可讀又機(jī)器可讀的文件格式,。XML 通常用于網(wǎng)絡(luò)上發(fā)送信息的自描述語(yǔ)言。XML 和 HTML 非常類(lèi)似,,但是它們之間也存在某些區(qū)別,。比如,,XML 并不像 HTML 那樣使用預(yù)定義表情。 “”是一個(gè) XML 聲明,,它會(huì)出現(xiàn)在文件開(kāi)始處(位置可以改變),。在這個(gè)聲明中,version 指明了 XML 的版本,,encoding 指明了文檔中使用的字符編碼,。 在 python 中讀取 XML 你可以導(dǎo)入 xml.etree. ElementTree 庫(kù)來(lái)讀去 XML 文檔中的數(shù)據(jù),。 讓我們導(dǎo)入一個(gè)名叫 train 的 xml 文件,然后打印它的根標(biāo)簽,。 3.7 HTML 文件 HTML 的全稱(chēng)是超文本標(biāo)記語(yǔ)言,。它是一種用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言。HTML 通過(guò)標(biāo)記來(lái)描述網(wǎng)頁(yè)的結(jié)構(gòu),。HTML 的標(biāo)簽和 XML 的相同,,但是它們已經(jīng)被預(yù)定義過(guò)。根據(jù)標(biāo)簽?zāi)隳軌蜉p易地識(shí)別出 HTML 文件的分段,,比如說(shuō) 代表段落。HTML 不區(qū)分大小寫(xiě),。 下面是一個(gè) HTML 文檔,。 HTML 的每一個(gè)標(biāo)簽都需要放在尖括號(hào)(<>)里。 定義文檔使用的是 HTML 格式,。 是這個(gè)文檔的根標(biāo)簽,。 分別代表 HTML 文件中的標(biāo)題,、內(nèi)容,、頭部和段落。 讀取 HTML 文件 為了讀取 HTML 文件,,你可以使用 BeautifulSoup 庫(kù),。請(qǐng)參考教程 Beginner’s guide to Web Scraping in Python using BeautifulSoup: https://www./blog/2015/10/beginner-guide-web-scraping-beautiful-soup-python/,它會(huì)告訴你如何解析 HTML 文件,。 3.8 圖像文件 在數(shù)據(jù)科學(xué)所能用到的所有文件格式中,,圖像文件也許是最讓人著迷的那一個(gè)。任何計(jì)算機(jī)視覺(jué)應(yīng)用都是圖像處理為基礎(chǔ)的,。所以,,了解不同的圖像文件格式是非常有必要的,。 圖像文件通常都是3維的,它們擁有 RGB 值,。但是它們也可以是2維(灰度圖像),,甚至是4維(擁有強(qiáng)度)的——由像素組成并且關(guān)聯(lián)了元數(shù)據(jù)的圖片。 每張圖片都是由一個(gè)或者多個(gè)像素幀組成的,。每一幀都由像素值的2維陣列組成,。像素值可以具有任何強(qiáng)度。和一張圖片關(guān)聯(lián)的元數(shù)據(jù)可以是圖像類(lèi)型(.png)的,,也可以是像素類(lèi)型的,。 讓我們?cè)囍虞d一張圖片。 現(xiàn)在,,讓我們確認(rèn)一下這個(gè)圖片的類(lèi)型和形狀。 如果你想閱讀關(guān)于圖像處理的內(nèi)容,,你可以參考文章 Basics of Image Processing in Python:https://www./blog/2014/12/image-processing-python-basics/,。它會(huì)用實(shí)例來(lái)教會(huì)你如何處理圖像。 3.9 分層數(shù)據(jù)格式(HDF) 在分層數(shù)據(jù)格式(HDF)中,,你可以輕易地儲(chǔ)存大量的數(shù)據(jù)。它不僅可以?xún)?chǔ)存高容量或者復(fù)雜的數(shù)據(jù),,同樣也可以?xún)?chǔ)存小容量或者簡(jiǎn)單的數(shù)據(jù),。 使用 HDF 的優(yōu)勢(shì)如下: 它可以在任何大小和類(lèi)型的系統(tǒng)中使用。 它的儲(chǔ)存更加靈活高效,, I/O 速度快,。 很多格式都支持 HDF。 現(xiàn)在我們能夠見(jiàn)到很多種 HDF 格式,。但是,,最新版的 HDF5 能夠突破過(guò)去的 HDF 文件格式所受的某些限制。HDF5 格式和 XML 具有一定的相似之處,。和 XML 一樣,,HDF5 文件也具有自定義功能,它允許用戶(hù)規(guī)定復(fù)雜的數(shù)據(jù)關(guān)系和依賴(lài)關(guān)系,。 讓我們以一個(gè) HDF5 文件格式為例進(jìn)行做簡(jiǎn)單的講解,。 讀取 HDF5 文件 你可以使用 pandas 來(lái)讀取 HDF 文件,。下面的代碼可以將 train.h5 的數(shù)據(jù)加載到“t”中,。 t = pd.read_hdf(‘train.h5’) 3.10 PDF 文件格式 PDF(便攜式文件格式)是一種非常好用的格式,它能夠解析并顯示與圖片結(jié)合在一起的文本,。PDF 文件的一個(gè)特色就是它可以設(shè)置密碼來(lái)保護(hù)文件,。 下面是一個(gè) pdf 文件,。 讀取 PDF 文件 利用程序來(lái)讀取 PDF 格式是一個(gè)非常復(fù)雜的工作,。但是目前已經(jīng)存在一些能夠很好的解析 PDF 文件的庫(kù),,其中就包括 PDFMiner。想要通過(guò) PDFMiner 來(lái)讀取 PDF 文件,,你需要: 從網(wǎng)上下載 PDFMiner 并進(jìn)行安裝 用如下代碼提取 PDF 文件 3.11 DOCX 文件格式 Microsoft word docx 文件是另一種常用的記錄文本數(shù)據(jù)的文件格式,。它具有眾多特性,比如可以嵌入表格,、圖片,、超鏈接等等。這使得 docx 成為一種極其重要的文件格式,。 比起 PDF 文件,,docx 文件的優(yōu)勢(shì)在于可以進(jìn)行編輯,你可以把一個(gè) docx 文件轉(zhuǎn)換成其他格式的文件,。 下面是一個(gè) docx 文件: 讀取 docx 文件 和 PDF 格式類(lèi)似,python 也擁有一個(gè)解析 docx 文件的庫(kù),。它叫做 python-docx2txt,。 通過(guò) pip,很容易就能安裝此庫(kù),,輸入: 為了在 Python 中讀取 docx 文件,,輸入以下代碼: 3.12 MP3 文件格式 MP3 文件格式屬于多媒體文件格式。多媒體文件格式和圖像文件格式比較相似,,但是 MP3 文件格式是文件格式中最為復(fù)雜的類(lèi)型,。 在多媒體文件格式中,你可以?xún)?chǔ)存多種數(shù)據(jù),,比如文字圖片,、圖形圖片、視頻和音頻數(shù)據(jù),。其中,,多媒體格式可以把文本儲(chǔ)存為 RTF 格式的數(shù)據(jù)而不是純文本格式中的 ASCII 數(shù)據(jù)。 MP3 是最常用的音頻編碼格式,。mp3 文件格式使用 MPEG-1 編碼格式,,它是視頻、音頻有損壓縮的標(biāo)準(zhǔn)格式,。在有損壓縮中,,一旦你對(duì)原始文件進(jìn)行了壓縮,你就不可能再恢復(fù)原始的數(shù)據(jù)了。 mp3 文件格式通過(guò)濾掉人耳不能聽(tīng)到的聲音來(lái)對(duì)音頻進(jìn)行壓縮,。原始文件經(jīng)過(guò)MP3 壓縮后其大小一般會(huì)減少75%到95%,,因此能夠節(jié)省很多空間。 mp3 文件格式結(jié)構(gòu) 一個(gè) mp3 文件由若干幀組成,。其中,,每個(gè)幀又可以進(jìn)一步分為幀頭和數(shù)據(jù)塊。我們稱(chēng)幀的排列順序?yàn)榇a流,。 mp3 的幀頭通常標(biāo)志一個(gè)有效幀的開(kāi)端,,數(shù)據(jù)塊則包含頻率和振幅這類(lèi)(壓縮過(guò)的)音頻信息。如果你想更加了解 mp3 的文件結(jié)構(gòu),,請(qǐng)參考此鏈接:https://upload./wikipedia/commons/0/01/Mp3filestructure.svg,。 在 python 中讀取多媒體文件 想在 Python 中讀取多媒體文件或者對(duì)其進(jìn)行操作,你需要使用名叫 PyMedia 的庫(kù):http:///tut/index.html,。 3.13 MP4 文件格式 MP4 文件格式用于儲(chǔ)存視頻和影片,。它包含了很多圖片(被稱(chēng)為幀),這些圖片在特定的時(shí)間段中播放,,從而呈現(xiàn)出視頻的形式,。有兩個(gè)方法可以解析 mp4 文件:一種是把整個(gè)視頻看作單個(gè)的實(shí)體;另一種則是把視頻中的每一張圖片看作不同的實(shí)體,,認(rèn)為圖片是從視頻中抽樣得到的,。 下面是一個(gè) MP4 視頻。 讀取 MP4 文件 python 同樣也有一個(gè)用于讀取和編輯 MP4 文件的庫(kù),,名叫 MoviePy。 你可以從 http://zulko./moviepy/ 下載這個(gè)庫(kù),。為了讀取 MP4 視頻片段,請(qǐng)?jiān)?Python 中使用如下代碼: 隨后你可以在 jupyter notebook 中顯示它,,輸入: 尾 聲 在本文中,,我向大家介紹了一些數(shù)據(jù)科學(xué)家每天都要用到的基本的文件格式。但是有很多其他的文件格式,,我沒(méi)有來(lái)得及向大家介紹,,可能會(huì)在其他文章的中陸續(xù)向大家呈現(xiàn)。 我希望這篇文章能讓你有所收獲,,同時(shí)也希望你能探索更多的文件格式,。祝你好運(yùn)! 本文作者 Ankit Gupta 目前是 IIIT Allahabad 的研究助理,,他喜歡解決復(fù)雜的數(shù)據(jù)挖掘問(wèn)題,,從而更多地了解數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)算法。目前正在開(kāi)發(fā)一個(gè)軟件缺陷預(yù)測(cè)項(xiàng)目。 本文由 AI100 編譯,,轉(zhuǎn)載需得到本公眾號(hào)同意,。 編譯:AI100 原文鏈接:https://www./blog/2017/03/read-commonly-used-formats-using-python/ |
|