使用python讀取數(shù)據(jù)科學(xué)最常用的文件格式
掃描二維碼
隨時(shí)隨地手機(jī)看文章
原文轉(zhuǎn)載于:https://blog.csdn.net/kevinelstri/article/details/61921812
Author:kevinelstri?
DateTime:2017/3/13
譯文:How to read most commonly used file formats in Data Science (using Python)?
1、什么是文件格式?
?????文件格式是在文件中存儲(chǔ)信息的一種標(biāo)準(zhǔn)方法。首先,文件格式指定文件是一個(gè)二進(jìn)制或ASCII文件。其次,文件展示了文件的組織形式。例如,逗號(hào)分隔值(CSV)文件格式存儲(chǔ)在純文本的表格數(shù)據(jù)。
?????通常,你遇到的文件都取決于你使用的應(yīng)用。例如,在一個(gè)圖像處理系統(tǒng)中,你需要將圖像文件作為輸入輸出,所以你會(huì)看到一個(gè)JPEG,GIF或PNG格式。
?????作為數(shù)據(jù)科學(xué)家,你需要了解各種文件格式的底層結(jié)構(gòu)以及它們的優(yōu)缺點(diǎn)等。除非你了解了數(shù)據(jù)的底層結(jié)構(gòu),否則你不能夠去探索它。而且,有時(shí)你需要決定怎么去存儲(chǔ)數(shù)據(jù)。
?????選擇最佳的文本格式來存儲(chǔ)數(shù)據(jù)可以提高你的模型在數(shù)據(jù)處理中的性能。
?????CSV格式屬于電子表格文件格式。
?????那么什么是電子表格文件格式呢?
?????在電子表格文件格式中,數(shù)據(jù)存儲(chǔ)在單元格中。每個(gè)單元格按照行和列結(jié)構(gòu)進(jìn)行組織。電子表格中的列可以有不同的數(shù)據(jù)類型。例如,一列可以是字符串類型,日期類型或整數(shù)類型。最流行的電子表格文件格式就是CSV格式,xls格式和xlsx格式。
?????CSV中的每一行代表一個(gè)觀察,通常稱為一條記錄。每個(gè)記錄可以包含一個(gè)或多個(gè)由逗號(hào)分隔的字段。
?????有時(shí),你可能會(huì)看到文件中不使用逗號(hào)分隔,但是使用制表符進(jìn)行分隔,這樣的文件格式稱為TSV(制表符分隔值)文件格式。
?????下面是將CSV文件使用Notepad打開的結(jié)果:
import pandas as pd
pf = pd.read_csv('train.csv')
3.2 XLSX
?????xlsx是微軟Excel打開XML文件格式,它也是電子表格文件格式,它是基于XML格式創(chuàng)建的Excel。xlsx數(shù)據(jù)是在一個(gè)表的單元格和列下組織的,每一個(gè)xlsx文件可以包含多于一個(gè)的表格,因此工作簿可以包含多個(gè)表。
?????下面的圖像顯示一個(gè)“xlsx文件是微軟Excel打開:?
?????在上面的圖像中,你可以看到文件中存在多個(gè)表,包含客戶、雇員、發(fā)票和訂單,圖像顯示的數(shù)據(jù)只有一個(gè)表-“發(fā)票”。
import pandas as pd
pf = pd.read_excel('train.xlsx',sheetname = 'invoice')
3.3 ZIP
?????zip格式是存檔文件格式。
?????在歸檔文件格式中,創(chuàng)建一個(gè)包含多個(gè)文件以及元數(shù)據(jù)的文件。歸檔文件格式用于將多個(gè)數(shù)據(jù)文件收集到一個(gè)文件中。這樣做是為了簡單地壓縮文件,使用更少的存儲(chǔ)空間。
?????有許多流行的計(jì)算機(jī)數(shù)據(jù)存檔格式創(chuàng)建歸檔文件。ZIP,RAR和Tar是最流行的基于數(shù)據(jù)壓縮的存檔文件格式。
?????所以,一個(gè)ZIP文件格式是一種無損壓縮格式,這意味著如果你使用zip格式壓縮多個(gè)文件,解壓縮后,可以完全恢復(fù)數(shù)據(jù)。zip文件格式使用許多壓縮算法壓縮文檔。您可以輕松地識(shí)別ZIP文件的ZIP擴(kuò)展名。
import zipfile
archive = zipfile.ZipFile('T.zip', 'r')
df = archive.read('train.csv')
3.4 TXT純文本格式
?????在純文本文件格式,一切都寫在純文本。通常,這個(gè)文本是非結(jié)構(gòu)化的,并且沒有與它相關(guān)的元數(shù)據(jù)。txt格式的文件可以很容易地通過任何程序進(jìn)行讀取。但是通過計(jì)算機(jī)程序來編譯是非常困難的。
?????舉一個(gè)簡單的文本文件示例,下面的示例顯示包含文本的文本文件數(shù)據(jù):
“In my previous article, I introduced you to the basics of Apache Spark, different data representations?
(RDD / DataFrame / Dataset) and basics of operations (Transformation and Action). We even solved a machine?
learning problem from one of our past hackathons. In this article, I will continue from the place I left in?
my previous article. I will focus on manipulating RDD in PySpark by applying operations?
(Transformation and Actions).”
text_file = open("text.txt", "r")
lines = text_file.read()
3.5 JSON
?????Javascript對象符號(hào)(JSON)是一個(gè)基于文本的開放標(biāo)準(zhǔn)的數(shù)據(jù)交換網(wǎng)絡(luò)設(shè)計(jì)。JSON格式用于在網(wǎng)上傳輸結(jié)構(gòu)化數(shù)據(jù)。JSON格式的文件可以很容易地使用任何編程語言來讀取,因?yàn)樗仟?dú)立于語言的數(shù)據(jù)格式。
?????以一個(gè)JSON文件為實(shí)例,下面顯示了一個(gè)典型的JSON文件存儲(chǔ)信息的員工信息:
{
"Employee": [
{
"id":"1",
"Name": "Ankit",
"Sal": "1000",
},
{
"id":"2",
"Name": "Faizy",
"Sal": "2000",
}
]
}
?????讀取JSON文件:
import pandas as pd
df = pd.read_json('train.json')
3.6 XML
?????XML也稱為可擴(kuò)展標(biāo)記語言。顧名思義,它是一種標(biāo)記語言。它具有一定的編碼數(shù)據(jù)規(guī)則。XML文件格式是一個(gè)人類可讀和機(jī)器可讀的文件格式。XML的自描述性語言設(shè)計(jì)用于通過Internet發(fā)送信息。XML是HTML非常相似,但有一些差異。例如,XML不使用預(yù)定義的標(biāo)簽為HTML。
?????以XML文件格式的簡單例子,下面顯示了一個(gè) XML文檔,包含一個(gè)員工的信息:
Ankit
Anlytics Vidhya
+9187654321
?????讀取XML文件:
import xml.etree.ElementTree as ET
tree = ET.parse('/home/sunilray/Desktop/2 sigma/train.xml')
root = tree.getroot()
print root.tag
3.7 HTML
?????HTML代表超文本標(biāo)記語言,它是用于創(chuàng)建網(wǎng)頁的標(biāo)準(zhǔn)標(biāo)記語言,HTML是用來描述網(wǎng)頁結(jié)構(gòu)使用的標(biāo)記。HTML標(biāo)簽類似于XML但是是預(yù)定義的??梢院苋菀椎刈R(shí)別的HTML文檔分段標(biāo)簽,如
代表HTML文檔的標(biāo)題,“HTML段落段落”,并且HTML是不區(qū)分大小寫的。
?????下面顯示一個(gè)HTML文檔:
My First Heading
My first paragraph.
?????讀取HTML文件:
?????使用BeautifulSoup庫來讀取HTML文件,參考:使用BeautifulSoup進(jìn)行網(wǎng)絡(luò)爬蟲
?????圖像文件可能是數(shù)據(jù)科學(xué)中最迷人的文件格式。任何計(jì)算機(jī)視覺中的應(yīng)用是基于圖像處理過程的,所以有必要了解不同的圖像文件格式。
?????常見的圖像文件是三維的,有RGB值。但是,他們也可以是二維(灰度)或四維(有強(qiáng)度),圖像是由像素和與其相關(guān)的元數(shù)據(jù)構(gòu)成的。
?????每個(gè)圖像由一個(gè)或多個(gè)像素幀組成,每個(gè)幀是由二維數(shù)組的像素值,像素值可以是任何強(qiáng)度。元數(shù)據(jù)與圖像是相關(guān)的,可以是一個(gè)圖像類型(PNG)或像素尺寸。
?????讀取png圖片:
from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)
import matplotlib.pyplot as plt
plt.imshow(f)
plt.show()
?????如果想閱讀關(guān)于圖像處理的文章,可以參考:基于python的圖像處理基礎(chǔ)
3.9 HDF?????在分層數(shù)據(jù)格式(HDF),您可以很容易存儲(chǔ)大量的數(shù)據(jù)。它不僅用于存儲(chǔ)高容量或復(fù)雜的數(shù)據(jù),而且還用于存儲(chǔ)小體積或簡單的數(shù)據(jù)。
?????使用HDF的優(yōu)點(diǎn):
它具有靈活,高效的存儲(chǔ)和快速I/O.
多格式支持HDF
?????現(xiàn)在有多個(gè)HDF格式。但是,HDF5是最新的版本,它用來解決一些老的HDF文件格式的限制。HDF5格式與XML相似,像XML,HDF5文件都是自描述的,允許用戶指定復(fù)雜的數(shù)據(jù)關(guān)系和依賴關(guān)系。
?????以一個(gè)HDF5文件格式為例,可以識(shí)別以.h5為擴(kuò)展的文件:?
?????讀取HDF5文件:
import pandas as pd
df = pd.read_hdf('train.h5')
3.10 PDF
?????PDF(Portable Document Format)是通過結(jié)合圖形來解釋和文本顯示的格式結(jié)合,一個(gè)PDF文件的特點(diǎn)在于它可以通過密碼保護(hù)。
?????安裝pdfminer庫:
python setup.py install
?????讀取PDF文件:
pdf2txt.py train.pdf # 測試讀取pdf
3.11 docx
?????微軟Word的docx文件是另一種文件格式,它是基于文本的數(shù)據(jù)組織的。它有許多特點(diǎn),如表格的內(nèi)聯(lián)加法,圖像、超鏈接等,這有助于在一個(gè)非常重要的文件格式。
docx文件對于PDF文件,具有的優(yōu)點(diǎn)就是docx文件是可編輯的。你也可以把docx文件轉(zhuǎn)換成任何其他格式。
?????安裝docx2txt庫:
pip install docx2txt
?????讀取docx文件:
import docx2txt
text = docx2txt.process("file.docx")
3.12 mp3
?????MP3文件格式來自于多媒體文件格式,多媒體文件格式類似于圖像文件格式,但它們恰好都是最復(fù)雜的文件格式。
?????在多媒體文件格式中,您可以存儲(chǔ)各種數(shù)據(jù),如文字圖像,圖形,視頻和音頻數(shù)據(jù)。例如,一個(gè)多媒體格式可以允許文本被存儲(chǔ)為富文本格式(RTF)的數(shù)據(jù)而非ASCII數(shù)據(jù),這是一個(gè)純文本格式。
?????MP3是一種最常見的音頻編碼格式的數(shù)字音頻。一個(gè)MP3文件格式采用的MPEG-1編碼格式為視頻和音頻壓縮標(biāo)準(zhǔn)。在有損壓縮中,一旦壓縮原始文件,則無法恢復(fù)原始數(shù)據(jù)。
?????一個(gè)MP3文件格式過濾掉人類無法聽到的聲音,壓縮了音頻的質(zhì)量。MP3壓縮通常減小達(dá)到75%至95%,從而節(jié)省了大量的空間。
?????一個(gè)MP3文件有許多框架??蚣芸梢赃M(jìn)一步分為標(biāo)題和數(shù)據(jù)塊。我們稱這些序列的框架是基本流。
?????在MP3的頭部,找出有效的框架和一個(gè)數(shù)據(jù)塊的開始包含(壓縮)在頻率和振幅的音頻信息。
?????下面是MP3文件結(jié)構(gòu):下載?
?????讀取多媒體文件格式:
?????參考:PyMedia3.13 mp4
?????MP4文件格式用于存儲(chǔ)視頻和電影。它包含多幅圖像(稱為幀),從而起到在一個(gè)視頻形式為每一個(gè)特定的時(shí)間。兩種方法來解釋mp4,一個(gè)是一個(gè)封閉的實(shí)體,其中整個(gè)視頻被認(rèn)為是一個(gè)單一的實(shí)體。另一個(gè)是馬賽克的圖像,其中在視頻中的每個(gè)圖像被認(rèn)為是作為一個(gè)不同的實(shí)體,這些圖像從視頻進(jìn)行采樣。?
?????讀取MP4文件:
?????參考:MoviePy
from moviepy.editor import VideoFileClip
clip = VideoFileClip(‘.mp4’)