利用Python讀取外部數(shù)據(jù)文件

不論是數(shù)據(jù)分析,數(shù)據(jù)可視化祷杈,還是數(shù)據(jù)挖掘斑司,一切的一切全都是以數(shù)據(jù)作為最基礎(chǔ)的元素。利用Python進(jìn)行數(shù)據(jù)分析但汞,同樣最重要的一步就是如何將數(shù)據(jù)導(dǎo)入到Python中宿刮,然后才可以實(shí)現(xiàn)后面的數(shù)據(jù)分析、數(shù)據(jù)可視化私蕾、數(shù)據(jù)挖掘等僵缺。

在本期的Python學(xué)習(xí)中,我們將針對Python如何獲取外部數(shù)據(jù)做一個(gè)詳細(xì)的介紹踩叭,從中我們將會學(xué)習(xí)以下4個(gè)方面的數(shù)據(jù)獲瓤某薄:

1、讀取文本文件的數(shù)據(jù)容贝,如txt文件和csv文件

2自脯、讀取電子表格文件,如Excel文件

3斤富、讀取統(tǒng)計(jì)軟件生成的數(shù)據(jù)文件膏潮,如SAS數(shù)據(jù)集、SPSS數(shù)據(jù)集等

4茂缚、讀取數(shù)據(jù)庫數(shù)據(jù)戏罢,如MySQL數(shù)據(jù)、SQL Server數(shù)據(jù)


一脚囊、讀取文本文件的數(shù)據(jù)

大家都知道龟糕,Python中pandas模塊是專門用來數(shù)據(jù)分析的一個(gè)強(qiáng)大工具,在《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》和《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(二)》中我們詳細(xì)介紹了有關(guān)pandas模塊的應(yīng)用悔耘,下面我們就來介紹pandas是如何讀取外部數(shù)據(jù)的讲岁。


1、讀取txt數(shù)據(jù)

In [1]:?import pandas as pd

In [2]:?mydata_txt = pd.read_csv('C:\\test_code.txt',sep = '\t',encoding = 'utf-8')

對于中文的文本文件常容易因?yàn)榫幋a的問題而讀取失敗衬以,正如上圖所示缓艳。遇到這樣的編碼問題該如何處置呢?解決辦法有兩種情況:

1)當(dāng)原始文件txt或csv的數(shù)據(jù)不是uft8格式時(shí)看峻,需要另存為utf8格式編碼阶淘;

2)如果原始的數(shù)據(jù)文件就是uft8格式,為了正常讀入互妓,需要將read_csv函數(shù)的參數(shù)encoding設(shè)置為utf-8


將原始數(shù)據(jù)另存為utf8格式的數(shù)據(jù)溪窒,重新讀入txt數(shù)據(jù)

In [3]:?mydata_txt = pd.read_csv('C:\\test.txt',sep = '\t',encoding = 'utf-8')

In [4]:?mydata_txt

很順利坤塞,txt文本文件數(shù)據(jù)就這樣進(jìn)入了Python的口袋里了。


2澈蚌、讀取csv數(shù)據(jù)

csv文本文件是非常常用的一種數(shù)據(jù)存儲格式摹芙,而且其存儲量要比Excel電子表格大很多,下面我們就來看看如何利用Python讀取csv格式的數(shù)據(jù)文件:

In [5]:?mydata_csv = pd.read_csv('C:\\test.csv',sep = ',',encoding = 'utf-8')

In [6]:?mydata_csv

如果你善于總結(jié)的話宛瞄,你會發(fā)現(xiàn)浮禾,txt文件和csv文件均可以通過pandas模塊中的read_csv函數(shù)進(jìn)行讀取。該函數(shù)有20多個(gè)參數(shù)份汗,類似于R中的read.table函數(shù)盈电,如果需要查看具體的參數(shù)詳情,可以查看幫助文檔:help(pandas.read_csv)裸影。


二挣轨、讀取電子表格文件

這里所說的電子表格就是Excel表格军熏,可以是xls的電子表格轩猩,也可以是xlsx的電子表格。在日常工作中荡澎,很多數(shù)據(jù)都是存放在Excel電子表格中的均践,如果我們需要使用Python對其進(jìn)行分析或處理的話,第一步就是如何讀取Excel數(shù)據(jù)摩幔。下面我們來看看如果讀取Excel數(shù)據(jù)集:

In [7]:?mydata_excel = pd.read_excel('C:\\test.xlsx',sep = '\t',encoding = 'utf-8')

In [8]: mydata_excel

?

三彤委、讀取統(tǒng)計(jì)軟件生成的數(shù)據(jù)文件

往往在集成數(shù)據(jù)源的時(shí)候,可能會讓你遇到一種苦惱或衡,那就是你的電腦里存放了很多統(tǒng)計(jì)軟件自帶的或生成的數(shù)據(jù)集焦影,諸如R語言數(shù)據(jù)集、SAS數(shù)據(jù)集封断、SPSS數(shù)據(jù)集等斯辰。那么問題來了,如果你電腦里都裝了這些軟件的話坡疼,這些數(shù)據(jù)集你自然可以看見彬呻,并可以方便的轉(zhuǎn)換為文本文件或電子表格文件,如果你的電腦里沒有安裝SAS或SPSS這樣大型的統(tǒng)計(jì)分析軟件的話柄瑰,那么你該如何查看這些數(shù)據(jù)集呢闸氮?請放心,Python很萬能教沾,它可以讀取很多種統(tǒng)計(jì)軟件的數(shù)據(jù)集蒲跨,下面我們介紹幾種Python讀取統(tǒng)計(jì)數(shù)據(jù)集的方法:

1、讀取SAS數(shù)據(jù)集

SAS數(shù)據(jù)集的讀取可以使用pandas模塊中的read_sas函數(shù)授翻,我們不妨試試該函數(shù)讀取SAS數(shù)據(jù)集或悲。下圖是使用SAS打開的數(shù)據(jù)集镐作,如果你的電腦中沒有安裝SAS,那你也可以通過Python實(shí)現(xiàn)數(shù)據(jù)的讀取隆箩。


In [1]:?import pandas as pd

In [2]:?mydata_sas = pd.read_sas('G:\\class.sas7bdat',encoding='utf8')

2该贾、讀取SPSS數(shù)據(jù)集

讀取SPSS數(shù)據(jù)就稍微復(fù)雜一點(diǎn),自己測試了好多次捌臊,查了好多資料杨蛋,功夫不負(fù)有心人啊,最終還是搞定了理澎。關(guān)于讀取SPSS數(shù)據(jù)文件逞力,需要為您的Python安裝savReaderWriter模塊,該模塊可以到如下鏈接進(jìn)行下載并安裝:https://pypi.python.org/pypi/savReaderWriter/3.4.2糠爬。

安裝savReaderWriter模塊

可以通過該命令進(jìn)行savReaderWriter模塊的安裝:python setup.py install

下圖是SPSS數(shù)據(jù)在SPSS中打開的樣子:


In [1]:?import savReaderWriter

In [2]:?mydata_spss = savReaderWriter.SavReader('employee_data.sav')

In [3]:?mydata_spss


3寇荧、實(shí)在沒辦法該怎么辦?

如果你嘗試了好多種模塊都無法讀取某個(gè)統(tǒng)計(jì)軟件的數(shù)據(jù)执隧,我建議你還是回到R中揩抡,R也是開源的統(tǒng)計(jì)分析工具,體積也非常小镀琉,只有40M左右峦嗤,而且R自帶的foreign包可以讀取很多種統(tǒng)計(jì)軟件的數(shù)據(jù)集,當(dāng)讀取成功后屋摔,再利用write.csv函數(shù)將數(shù)據(jù)集寫出為csv格式的數(shù)據(jù)烁设,這樣Python就可以輕松讀取csv數(shù)據(jù)集了,萬事靈活一點(diǎn)就可以完成你想要的任何結(jié)果~


四钓试、讀取數(shù)據(jù)庫數(shù)據(jù)

企業(yè)中更多的數(shù)據(jù)還是存放在諸如MySQL装黑、SQL Server、DB2等數(shù)據(jù)庫中弓熏,為了能夠使Python連接到數(shù)據(jù)庫中恋谭,科學(xué)家專門設(shè)計(jì)了Python DB API的接口。我們?nèi)匀煌ㄟ^例子來說明Python是如何實(shí)現(xiàn)數(shù)據(jù)庫的連接與操作的硝烂。


1箕别、Python連接MySQL

MySQLdb模塊是一個(gè)連接Python與MySQL的中間橋梁,但目前只能在Python2.x中運(yùn)行滞谢,但不意味著Python3就無法連接MySQL數(shù)據(jù)庫串稀。這里向大家介紹一個(gè)非常靈活而強(qiáng)大的模塊,那就是pymysql模塊狮杨。我比較喜歡他的原因是母截,該模塊可以偽裝成MySQLdb模塊,具體看下面的例子:

In [1]:?import pymysql

In [2]:?pymysql.install_as_MySQLdb() ? ?#偽裝為MySQLdb模塊

In [3]:?import MySQLdb


使用Connection函數(shù)聯(lián)通Python與MySQL

In [4]:?conn = MySQLdb.Connection(

???...:?? ? ? ?host = 'localhost',

???...:?? ? ? ?user = 'root',

???...:?? ? ? ?password = 'snake',

???...:?? ? ? ?port = 3306,

???...:?? ? ? ?database = 'test',

???...:?? ? ? ?charset='gbk')

使用conn的游標(biāo)方法(cursor)橄教,目的是為接下來的數(shù)據(jù)庫操作做鋪墊清寇。

In [5]:?cursor = conn.cursor()

In [6]:?sql = 'select * from memberinfo'

執(zhí)行SQL語句

In [7]:?cursor.execute(sql)

Out[7]:?4

In [8]:?data = cursor.fetchall()

In [9]:?data

我們發(fā)現(xiàn)data中存儲的是元組格式的數(shù)據(jù)集喘漏,我們在《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》中講到,構(gòu)造DataFrame數(shù)據(jù)結(jié)構(gòu)只能通過數(shù)組华烟、數(shù)據(jù)框翩迈、字典、列表等方式構(gòu)建盔夜,但這里是元組格式的數(shù)據(jù)负饲,該如何處理呢?很簡單喂链,只需使用list函數(shù)就可以快速的將元組數(shù)據(jù)轉(zhuǎn)換為列表格式的數(shù)據(jù)返十。

In [10]:?data = list(data)

In [11]:?data

下面我們就是要pandas模塊中的DataFrame函數(shù)將上面的data列表轉(zhuǎn)換為Python的數(shù)據(jù)框格式:

In [14]:?import pandas as pd

In [15]:?mydata = pd.DataFrame(data, columns = ['id','name','age','gender'])

In [16]:?mydata

最后千萬千萬注意的是,當(dāng)你的數(shù)據(jù)讀取完之后一定要記得關(guān)閉游標(biāo)和連接椭微,因?yàn)椴魂P(guān)閉會導(dǎo)致電腦資源的浪費(fèi)洞坑。

In [19]:?cursor.close()

In [20]:?conn.close()


2、Python連接SQL Server

使用Python連接SQL Server數(shù)據(jù)庫蝇率,我們這里推薦使用pymssql模塊迟杂,該模塊的語法與上面講的pymysql是一致的,這里就不一一講解每一步的含義了瓢剿,直接上代碼:

In [21]:?import pymssql

In [22]:?connect = pymssql.connect(

????...:?? ? host = '172.18.1.6\SqlR2',

????...:?? ? user = 'sa',

????...:?? ? password = '1q2w3e4r!!',

????...:?? ? database='Heinz_Ana',

????...:?? ? charset='utf8')


In [23]:?cursor = connect.cursor()

In [24]:?sql = 'select * from HeinzDB2_10'

In [25]:?cursor.execute(sql)

In [26]:?data = cursor.fetchall()


In [27]:?data[0]

Out[27]:?(67782, '2013-05-01', '二階段', 1.0, 279.0)


In [28]:?mydata = pd.DataFrame(list(data),columns = ['ConsumerID',

????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'Purdate',

????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'Phase',

????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'ChangeTinRatio',

????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'TOTALAMT'])


In [29]:?mydata.head()

本期的內(nèi)容就是向大家介紹如何使用Python實(shí)現(xiàn)外部數(shù)據(jù)的讀取逢慌,只有完成了這個(gè)基本的第一步悠轩,才會順利的進(jìn)行下面的清洗间狂、處理、分析甚至挖掘部分火架。這一期的內(nèi)容出來的有點(diǎn)晚鉴象,主要還是工作比較繁忙,后期繼續(xù)再接再勵(lì)何鸡,謝謝大家一直以來的支持和互動(dòng)纺弊。在下一期中,我們將介紹R語言中caret包如何實(shí)現(xiàn)特征選擇骡男。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淆游,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子隔盛,更是在濱河造成了極大的恐慌犹菱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吮炕,死亡現(xiàn)場離奇詭異腊脱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)龙亲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門陕凹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悍抑,“玉大人,你說我怎么就攤上這事杜耙∷崖猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵佑女,是天一觀的道長浆兰。 經(jīng)常有香客問我,道長珊豹,這世上最難降的妖魔是什么簸呈? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮店茶,結(jié)果婚禮上蜕便,老公的妹妹穿的比我還像新娘。我一直安慰自己贩幻,他們只是感情好轿腺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丛楚,像睡著了一般族壳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趣些,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天仿荆,我揣著相機(jī)與錄音,去河邊找鬼坏平。 笑死拢操,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舶替。 我是一名探鬼主播令境,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顾瞪!你這毒婦竟也來了舔庶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陈醒,失蹤者是張志新(化名)和其女友劉穎惕橙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孵延,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吕漂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尘应。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶凝。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吼虎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苍鲜,到底是詐尸還是另有隱情思灰,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布混滔,位于F島的核電站洒疚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坯屿。R本人自食惡果不足惜油湖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望领跛。 院中可真熱鬧乏德,春花似錦、人聲如沸吠昭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矢棚。三九已至郑什,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒲肋,已是汗流浹背蘑拯。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肉津,地道東北人强胰。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像妹沙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子熟吏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容