利用Python讀取外部數據文件


 
 

不論是數據分析,數據可視化,還是數據挖掘,一切的一切全都是以數據作為最基礎的元素。利用Python進行數據分析,同樣最重要的一步就是如何將數據導入到Python中,然后才可以實現后面的數據分析、數據可視化、數據挖掘等。

在本期的Python學習中,我們將針對Python如何獲取外部數據做一個詳細的介紹,從中我們將會學習以下4個方面的數據獲取:

1、讀取文本文件的數據,如txt文件和csv文件

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

3、讀取統計軟件生成的數據文件,如SAS數據集、SPSS數據集等

4、讀取數據庫數據,如MySQL數據、SQL Server數據

 

一、讀取文本文件的數據

大家都知道,Python中pandas模塊是專門用來數據分析的一個強大工具,在《Python數據分析之pandas學習(一)》和《Python數據分析之pandas學習(二)》中我們詳細介紹了有關pandas模塊的應用,下面我們就來介紹pandas是如何讀取外部數據的。

 

1、讀取txt數據

In [1]: import pandas as pd

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


對於中文的文本文件常容易因為編碼的問題而讀取失敗,正如上圖所示。遇到這樣的編碼問題該如何處置呢?解決辦法有兩種情況:

1)當原始文件txt或csv的數據不是uft8格式時,需要另存為utf8格式編碼;

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

 

將原始數據另存為utf8格式的數據,重新讀入txt數據

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

In [4]: mydata_txt

很順利,txt文本文件數據就這樣進入了Python的口袋里了。

 

2、讀取csv數據

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

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

In [6]: mydata_csv

如果你善於總結的話,你會發現,txt文件和csv文件均可以通過pandas模塊中的read_csv函數進行讀取。該函數有20多個參數,類似於R中的read.table函數,如果需要查看具體的參數詳情,可以查看幫助文檔:help(pandas.read_csv)。

 

二、讀取電子表格文件

這里所說的電子表格就是Excel表格,可以是xls的電子表格,也可以是xlsx的電子表格。在日常工作中,很多數據都是存放在Excel電子表格中的,如果我們需要使用Python對其進行分析或處理的話,第一步就是如何讀取Excel數據。下面我們來看看如果讀取Excel數據集:

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

In [8]: mydata_excel

 

三、讀取統計軟件生成的數據文件

往往在集成數據源的時候,可能會讓你遇到一種苦惱,那就是你的電腦里存放了很多統計軟件自帶的或生成的數據集,諸如R語言數據集、SAS數據集、SPSS數據集等。那么問題來了,如果你電腦里都裝了這些軟件的話,這些數據集你自然可以看見,並可以方便的轉換為文本文件或電子表格文件,如果你的電腦里沒有安裝SAS或SPSS這樣大型的統計分析軟件的話,那么你該如何查看這些數據集呢?請放心,Python很萬能,它可以讀取很多種統計軟件的數據集,下面我們介紹幾種Python讀取統計數據集的方法:

1、讀取SAS數據集

SAS數據集的讀取可以使用pandas模塊中的read_sas函數,我們不妨試試該函數讀取SAS數據集。下圖是使用SAS打開的數據集,如果你的電腦中沒有安裝SAS,那你也可以通過Python實現數據的讀取。

 

In [1]: import pandas as pd

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

2、讀取SPSS數據集

讀取SPSS數據就稍微復雜一點,自己測試了好多次,查了好多資料,功夫不負有心人啊,最終還是搞定了。關於讀取SPSS數據文件,需要為您的Python安裝savReaderWriter模塊,該模塊可以到如下鏈接進行下載並安裝:https://pypi.python.org/pypi/savReaderWriter/3.4.2。

安裝savReaderWriter模塊

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

下圖是SPSS數據在SPSS中打開的樣子:

 

In [1]: import savReaderWriter

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

In [3]: mydata_spss

 

3、實在沒辦法該怎么辦?
       如果你嘗試了好多種模塊都無法讀取某個統計軟件的數據,我建議你還是回到R中,R也是開源的統計分析工具,體積也非常小,只有40M左右,而且R自帶的foreign包可以讀取很多種統計軟件的數據集,當讀取成功后,再利用write.csv函數將數據集寫出為csv格式的數據,這樣Python就可以輕松讀取csv數據集了,萬事靈活一點就可以完成你想要的任何結果~

 

四、讀取數據庫數據

企業中更多的數據還是存放在諸如MySQL、SQL Server、DB2等數據庫中,為了能夠使Python連接到數據庫中,科學家專門設計了Python DB API的接口。我們仍然通過例子來說明Python是如何實現數據庫的連接與操作的。

 

1、Python連接MySQL

MySQLdb模塊是一個連接Python與MySQL的中間橋梁,但目前只能在Python2.x中運行,但不意味着Python3就無法連接MySQL數據庫。這里向大家介紹一個非常靈活而強大的模塊,那就是pymysql模塊。我比較喜歡他的原因是,該模塊可以偽裝成MySQLdb模塊,具體看下面的例子:

In [1]: import pymysql

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

In [3]: import MySQLdb

 

使用Connection函數聯通Python與MySQL

In [4]: conn = MySQLdb.Connection(

   ...:        host = 'localhost',

   ...:        user = 'root',

   ...:        password = 'snake',

   ...:        port = 3306,

   ...:        database = 'test',

   ...:        charset='gbk')

使用conn的游標方法(cursor),目的是為接下來的數據庫操作做鋪墊。

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

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

執行SQL語句

In [7]: cursor.execute(sql)

Out[7]: 4

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

In [9]: data

我們發現data中存儲的是元組格式的數據集,我們在《Python數據分析之pandas學習(一)》中講到,構造DataFrame數據結構只能通過數組、數據框、字典、列表等方式構建,但這里是元組格式的數據,該如何處理呢?很簡單,只需使用list函數就可以快速的將元組數據轉換為列表格式的數據。

In [10]: data = list(data)

In [11]: data

下面我們就是要pandas模塊中的DataFrame函數將上面的data列表轉換為Python的數據框格式:

In [14]: import pandas as pd

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

In [16]: mydata

最后千萬千萬注意的是,當你的數據讀取完之后一定要記得關閉游標和連接,因為不關閉會導致電腦資源的浪費。

In [19]: cursor.close()

In [20]: conn.close()

 

2、Python連接SQL Server

使用Python連接SQL Server數據庫,我們這里推薦使用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()

本期的內容就是向大家介紹如何使用Python實現外部數據的讀取,只有完成了這個基本的第一步,才會順利的進行下面的清洗、處理、分析甚至挖掘部分。這一期的內容出來的有點晚,主要還是工作比較繁忙,后期繼續再接再勵,謝謝大家一直以來的支持和互動。在下一期中,我們將介紹R語言中caret包如何實現特征選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM