99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線(xiàn)電話(huà):13121318867

登錄
首頁(yè)精彩閱讀Python讀取外部數(shù)據(jù)文件
Python讀取外部數(shù)據(jù)文件
2016-09-21
收藏
不論是數(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í)中,我們將針對(duì)Python如何獲取外部數(shù)據(jù)做一個(gè)詳細(xì)的介紹,從中我們將會(huì)學(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ù)庫(kù)數(shù)據(jù),如MySQL數(shù)據(jù)、SQL Server數(shù)據(jù)

一、讀取文本文件的數(shù)據(jù)
大家都知道,Python中pandas模塊是專(zhuān)門(mén)用來(lái)數(shù)據(jù)分析的一個(gè)強(qiáng)大工具,在《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(二)》中我們?cè)敿?xì)介紹了有關(guān)pandas模塊的應(yīng)用,下面我們就來(lái)介紹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')

對(duì)于中文的文本文件常容易因?yàn)榫幋a的問(wèn)題而讀取失敗,正如上圖所示。遇到這樣的編碼問(wèn)題該如何處置呢?解決辦法有兩種情況:
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ù)存儲(chǔ)格式,而且其存儲(chǔ)量要比Excel電子表格大很多,下面我們就來(lái)看看如何利用Python讀取csv格式的數(shù)據(jù)文件:
In [5]: mydata_csv = pd.read_csv('C:\\test.csv',sep = ',',encoding = 'utf-8')
In [6]: mydata_csv

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

二、讀取電子表格文件
這里所說(shuō)的電子表格就是Excel表格,可以是xls的電子表格,也可以是xlsx的電子表格。在日常工作中,很多數(shù)據(jù)都是存放在Excel電子表格中的,如果我們需要使用Python對(duì)其進(jìn)行分析或處理的話(huà),第一步就是如何讀取Excel數(shù)據(jù)。下面我們來(lái)看看如果讀取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í)候,可能會(huì)讓你遇到一種苦惱,那就是你的電腦里存放了很多統(tǒng)計(jì)軟件自帶的或生成的數(shù)據(jù)集,諸如R語(yǔ)言數(shù)據(jù)集、SAS數(shù)據(jù)集、SPSS數(shù)據(jù)集等。那么問(wèn)題來(lái)了,如果你電腦里都裝了這些軟件的話(huà),這些數(shù)據(jù)集你自然可以看見(jiàn),并可以方便的轉(zhuǎn)換為文本文件或電子表格文件,如果你的電腦里沒(méi)有安裝SAS或SPSS這樣大型的統(tǒng)計(jì)分析軟件的話(huà),那么你該如何查看這些數(shù)據(jù)集呢?請(qǐng)放心,Python很萬(wàn)能,它可以讀取很多種統(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打開(kāi)的數(shù)據(jù)集,如果你的電腦中沒(méi)有安裝SAS,那你也可以通過(guò)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),自己測(cè)試了好多次,查了好多資料,功夫不負(fù)有心人啊,最終還是搞定了。關(guān)于讀取SPSS數(shù)據(jù)文件,需要為您的Python安裝savReaderWriter模塊,該模塊可以到如下鏈接進(jìn)行下載并安裝:https://pypi.python.org/pypi/savReaderWriter/3.4.2。
安裝savReaderWriter模塊
可以通過(guò)該命令進(jìn)行savReaderWriter模塊的安裝:python setup.py install
下圖是SPSS數(shù)據(jù)在SPSS中打開(kāi)的樣子:

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


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

四、讀取數(shù)據(jù)庫(kù)數(shù)據(jù)
企業(yè)中更多的數(shù)據(jù)還是存放在諸如MySQL、SQL Server、DB2等數(shù)據(jù)庫(kù)中,為了能夠使Python連接到數(shù)據(jù)庫(kù)中,科學(xué)家專(zhuān)門(mén)設(shè)計(jì)了Python DB API的接口。我們?nèi)匀煌ㄟ^(guò)例子來(lái)說(shuō)明Python是如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接與操作的。

1、Python連接MySQL
MySQLdb模塊是一個(gè)連接Python與MySQL的中間橋梁,但目前只能在Python2.x中運(yùn)行,但不意味著Python3就無(wú)法連接MySQL數(shù)據(jù)庫(kù)。這里向大家介紹一個(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),目的是為接下來(lái)的數(shù)據(jù)庫(kù)操作做鋪墊。
In [5]: cursor = conn.cursor()
In [6]: sql = 'select * from memberinfo'
執(zhí)行SQL語(yǔ)句
In [7]: cursor.execute(sql)
Out[7]: 4
In [8]: data = cursor.fetchall()
In [9]: data

我們發(fā)現(xiàn)data中存儲(chǔ)的是元組格式的數(shù)據(jù)集,我們?cè)凇禤ython數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》中講到,構(gòu)造DataFrame數(shù)據(jù)結(jié)構(gòu)只能通過(guò)數(shù)組、數(shù)據(jù)框、字典、列表等方式構(gòu)建,但這里是元組格式的數(shù)據(jù),該如何處理呢?很簡(jiǎn)單,只需使用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

最后千萬(wàn)千萬(wàn)注意的是,當(dāng)你的數(shù)據(jù)讀取完之后一定要記得關(guān)閉游標(biāo)和連接,因?yàn)椴魂P(guān)閉會(huì)導(dǎo)致電腦資源的浪費(fèi)。
In [19]: cursor.close()
In [20]: conn.close()

2、Python連接SQL Server
使用Python連接SQL Server數(shù)據(jù)庫(kù),我們這里推薦使用pymssql模塊,該模塊的語(yǔ)法與上面講的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è)基本的第一步,才會(huì)順利的進(jìn)行下面的清洗、處理、分析甚至挖掘部分。這一期的內(nèi)容出來(lái)的有點(diǎn)晚,主要還是工作比較繁忙,后期繼續(xù)再接再勵(lì),謝謝大家一直以來(lái)的支持和互動(dòng)。在下一期中,我們將介紹R語(yǔ)言中caret包如何實(shí)現(xiàn)特征選擇。

對(duì)Python數(shù)據(jù)分析和挖掘感興趣的童靴看過(guò)來(lái),CDA開(kāi)設(shè)Python數(shù)據(jù)挖掘課程,歡迎微信掃碼,直達(dá)課程:


數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線(xiàn)
立即咨詢(xún)
客服在線(xiàn)
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }