機器學(xué)習(xí)課件第2章 Python數(shù)據(jù)處理基礎(chǔ)_第1頁
機器學(xué)習(xí)課件第2章 Python數(shù)據(jù)處理基礎(chǔ)_第2頁
機器學(xué)習(xí)課件第2章 Python數(shù)據(jù)處理基礎(chǔ)_第3頁
機器學(xué)習(xí)課件第2章 Python數(shù)據(jù)處理基礎(chǔ)_第4頁
機器學(xué)習(xí)課件第2章 Python數(shù)據(jù)處理基礎(chǔ)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章Python數(shù)據(jù)處理基礎(chǔ)

2.1Python程序開發(fā)技術(shù)

Python的特點:面向?qū)ο髷?shù)據(jù)類型豐富具有功能強大的模塊庫易拓展可移植性【例】Python語言綜合示例——天天學(xué)習(xí),天天向上。importrandom#包含隨機數(shù)模塊,以生成隨機數(shù)#定義fib_loop函數(shù),構(gòu)造斐波那契數(shù)列deffib_loop(n):listNum=[]a,b=0,1#for結(jié)構(gòu),循環(huán)體重復(fù)運行n次foriinrange(n):a,b=b,a+blistNum.append(a)print(i,listNum)returnlistNum#返回一個數(shù)據(jù)列表listNumlistPlan=['吃零食','學(xué)習(xí)','學(xué)習(xí)','學(xué)習(xí)','看電影','學(xué)習(xí)','旅游','睡覺','學(xué)習(xí)']listNum=fib_loop(6)#調(diào)用fib_loop函數(shù)生成斐波那契數(shù)列varIdx=random.randint(0,5)#生成0~4的隨機數(shù)varIdxvarRandom=listNum[varIdx]print('今日運程:宜',listPlan[varRandom])#根據(jù)隨機編號抽取今日計劃2.2基本數(shù)據(jù)類型

Python3中有六個標準的數(shù)據(jù)類型:Number(數(shù)字)String(字符串)List(列表)Tuple(元組)Set(集合)Dictionary(字典)1.可變類型與不可變類型可變數(shù)據(jù)類型在聲明時會開辟一個內(nèi)存空間,使用Python的內(nèi)置方法對內(nèi)存中的數(shù)據(jù)進行修改時,內(nèi)存地址不發(fā)生變化??勺償?shù)據(jù)包括列表、字典和集合。不可變類型不可變數(shù)據(jù)類型在聲明時候也會開辟一塊內(nèi)存,不能改變這個數(shù)據(jù)的值。當(dāng)改變賦值時,會重新開辟一塊內(nèi)存空間。不可變數(shù)據(jù)有數(shù)字、字符串和元組。Python的六個標準數(shù)據(jù)類型中:不可變數(shù)據(jù)(3個):Number(數(shù)字)、String(字符串)、Tuple(元組);可變數(shù)據(jù)(3個):List(列表)、Dictionary(字典)、Set(集合)【例2.2】數(shù)值類型不可改變。i=3print(id(i))i+=1print(id(i))2.String(字符串)類型Python中的字符串用半角的單引號或雙引號括起來,獲取字符串的一部分的操作也稱為切片,截取格式為:

字符串變量[頭下標:尾下標]訪問方法:正序訪問時,可以獲取到頭下標到尾下標減1位置的字符。也可以逆序讀取,最后一個字符下標為-1。柵欄式位置:Python字符串的首字母下標為0,可以認為字符串位置與該位置上的數(shù)值交錯出現(xiàn),形成“柵欄”式。【例2.3】字符串的訪問。str='Picture'print(str[1:3])#第二、三個字符print(str[-3:-1])#倒數(shù)第二、三個字符print(str[3:-1])#正數(shù)第四個到倒數(shù)第二個字符print(str[-6:7])#倒數(shù)第六個到正數(shù)第七個字符print(str[2:])#第三個字符開始的所有字符print(str*2)#輸出字符串兩次print(str+"TEST")#連接字符串由于字符串是不可變類型,所以向字符串某位置賦值會導(dǎo)致錯誤?!纠?.4】字符串賦值。word='Python'print(word[0],word[5])print(word[-1],word[-6])如果繼續(xù)添加一行語句:word[0]=Q'由于無法修改word字符串,因此會導(dǎo)致錯誤:“TypeError:'str'objectdoesnotsupportitemassignment”。如果需要修改字符串的內(nèi)容,可以使用重新賦值語句,如下:word='Qython'即生成一個新的word變量。3.

List(列表)類型List(列表)使用方括號[]進行定義,數(shù)據(jù)項之間用逗號分隔。列表是Python中使用最頻繁的數(shù)據(jù)類型。列表的數(shù)據(jù)項可以是數(shù)字、字符串,也可以是列表。列表截取語法與字符串類似,格式如下:列表變量[頭下標:尾下標]【例2.5】列表的訪問。list=['a',56,1.13,'HelloWorld',[7,8,9]]print(list)#完整列表print(list[4])#第五個元素print(list[-2:5])#從倒數(shù)第二個到正數(shù)第五個元素print(list[2:])#第三個元素開始的所有元素列表中的元素可以賦值修改。List還內(nèi)置了很多方法,例如append()、pop()等等。【例2.6】列表元素的修改。a=[1,2,3,4,5,6]a[0]=9#將第一個元素設(shè)為9print(a)a.append(7)#在列表末尾追加7print(a)a[2:5]=[]#將第三到五個元素值設(shè)置為空值print(a)a.pop(2)#將第三個元素移除print(a)在實際應(yīng)用中,經(jīng)常需要對列表中的數(shù)據(jù)項進行遍歷(也稱為迭代)。Python中常用的列表迭代方法有三種:for循環(huán)遍歷按索引序列遍歷按下標遍歷?!纠?.7】列表的遍歷。lis=['螞蚱','螳螂','蟈蟈','蝗蟲','蛐蛐']#(1)直接遍歷foriteminlis:print(item)#(2)按索引遍歷foriinenumerate(lis):print(i)#(3)對于列表類型,還有一種通過下標遍歷的方式,如使用range()函數(shù)foriinrange(len(lis)):print(lis[i])4.Tuple(元組)類型元組寫在小括號()里,元素之間用逗號分隔,元素可以具有不同的類型。元組(Tuple)與列表類似,但元組的元素不能修改。元組可以被索引,下標索引也是從0開始,-1為從末尾位置?!纠?.8】元組的訪問。tuple=('SpiderMan',2017,33.4,'Homecoming',14)tinytuple=(16,'Marvel')print(tuple)#輸出完整元組print(tuple[0])#輸出元組的第一個元素print(tuple[3:4])#輸出從第二個元素開始到第三個元素print(tuple+tinytuple)#連接元組元組的元素不可改變,但如果元組包含了可變類型的數(shù)據(jù)項,則該數(shù)據(jù)項可以修改?!纠?.9】修改元組中的List類型數(shù)據(jù)項。tuple=([16,'Marvel'],'SpiderMan',2017,33.4,'Homecoming',14,)print(tuple[0])tuple[0][0]='Marvel'tuple[0][1]='16'print(tuple)5.Dictionary(字典)字典是一種可變?nèi)萜髂P停铱纱鎯θ我忸愋蛯ο?。字典使用大括號{}定義,格式如下:d={key1:value1,key2:value2}字典的每個鍵值(key/value)對用冒號分隔,鍵值對之間用逗號分隔。鍵一般是唯一的。如果出現(xiàn)了重復(fù),則后面的鍵值對會替換前面的鍵值對。值的數(shù)據(jù)及類型不限,可以是字符串、數(shù)字或元組。1)字典的訪問

訪問字典中的值需要使用字典的鍵值,這個鍵值用方括號括起來格式為:dt[‘key’]【例2.10】字典的訪問。dict={'Name':'Mary','Age':7,'Class':'First'};print(dict);print("Name:",dict['Name'])print("Age:",dict['Age'])【例2.11】列表可以作為字典的value值。dict={'Name':['Mary','Tom','Philp'],'Age':[7,8,9],'Class':['1st','2nd','3rd']};print(dict);print("Name:",dict['Name'])dict['Age']=[8,9,10]print("Age:",dict['Age'])2)修改字典可以向字典添加、修改或刪除鍵/值對,如下例:【例2.12】修改字典。dict={'Name':'Zara','Class':'First'};#添加adddict['Gender']="Female"print(dict)#修改updatedict.update({"No":"001"})print(dict)#也可以使用update方法添加/修改多個數(shù)據(jù)dict.update({'Gender':"F","Id":1})print(dict)3)刪除字典元素刪除一個字典用del命令,清空字典用clear命令?!纠?.13】刪除字典元素。deldict['Gender']print(dict)dict.clear()print(dict)5.Set(集合)類型Set(集合)由一列無序的、不重復(fù)的數(shù)據(jù)項組成。集合是可變類型。與數(shù)學(xué)中的集合概念相同,集合中每個元素都是唯一的。集合不設(shè)置順序,每次輸出時元素的排序可能都不相同。集合使用大括號,形式上和字典類似,但數(shù)據(jù)項不是成對的。

1)創(chuàng)建set集合創(chuàng)建集合可以使用大括號{}或者set()函數(shù),但創(chuàng)建一個空集合必須用set()函數(shù)而不能用{},因為空的大括號{}創(chuàng)建的是空的字典。建立一個由(v1,v2,…)組成的集合mySet,可以使用:mySet={v1,v2,...}。還可以使用List列表來創(chuàng)建集合,列表中的數(shù)據(jù)項直接作為集合的元素。生成的set集合和原List列表相比,數(shù)據(jù)項順序有可能不同,并且會去除重復(fù)數(shù)據(jù)項?!纠?.14】創(chuàng)建集合。#創(chuàng)建一個空集合var=set()print(var,type(var))#顯示集合內(nèi)容和類型

#具有數(shù)據(jù)的集合var={'LiLei','HanMeiMei','ZhangHua','LiLei','LiLei'}print(var,type(var))#顯示集合內(nèi)容和類型【例2.15】集合成員檢測。#判斷元素在集合內(nèi)result='LiLei'invarprint(result)#判斷元素不在集合內(nèi)

result='lilei'notinvar#大小寫敏感print(result)2)集合添加、刪除為集合添加數(shù)據(jù)項有兩種常用方法,是add()和update()。刪除集合項的常用方法是remove()?!纠?.16】增加、刪除集合元素。var={'LiLei','HanMeiMei','ZhangHua'}var.add('LiBai')#add方法添加元素print(var)var.update('DuFu')#update方法首先拆分元素,然后各個添加print(var)#數(shù)據(jù)項無序,且去除重復(fù)項

var.remove('D')var.remove('F')var.remove('u')print(var)3)SET集合的遍歷集合中的元素也可以使用遍歷進行訪問,可以使用直接遍歷,也可以使用enumerate索引進行遍歷。不過,集合類型不支持range()方式的遍歷?!纠?.17】有一個集合anml,其內(nèi)容為{'紫貂','松貂','青鼬','狼獾’},對anml集合進行遍歷。方法一:anml={'紫貂','松貂','青鼬','狼獾'}foriteminanml:print(item)方法二:anml={'紫貂','松貂','青鼬','狼獾'}foriteminenumerate(anml):print(item)4)Python集合操作符號Python集合類型與數(shù)學(xué)中的集合操作類似,支持集合的交集、并集、差集、包含等數(shù)學(xué)操作。

數(shù)學(xué)集合運算符與Python集合操作符對比表集合操作數(shù)學(xué)符號Python操作符差集--交集∩&并集∪|不等于≠!=等于===包含于∈in不包含于notin【例2.18】集合的交集、并集(合集)、差集。#分別構(gòu)造獾和貂兩個集合Huan={'豬獾','蜜獾','狼獾',}Diao={'紫貂','松貂','美洲水鼬','狼獾'}#交集DiaoXiong=Huan&Diaoprint('貂熊是:',DiaoXiong)#并集Youke=Huan|Diaoprint('鼬科的是:',Youke)#差集DiaoT=Diao-Huanprint('除去獾的貂類:',DiaoT)非洲有一種兇猛的小型鼬科動物,名為狼獾,也被稱為貂熊。江湖人稱“平頭哥”。2.3數(shù)據(jù)文件讀寫

機器學(xué)習(xí)的本質(zhì)是數(shù)據(jù)處理,及在此基礎(chǔ)上的算法運行。實際應(yīng)用中,經(jīng)常使用大量的數(shù)據(jù),需要使用數(shù)據(jù)文件。2.3.1打開與關(guān)閉文件1.打開文件打開文件的內(nèi)置函數(shù)是open()函數(shù),打開文件后會創(chuàng)建一個文件對象。對文件的訪問通過這個文件對象進行。語法:open(file_name[,access_mode][,buffering])主要參數(shù):file_name:字符串類型,要訪問的文件名稱。access_mode:文件的打開模式,讀取、寫入或追加等??蛇x參數(shù),默認為r(只讀模式)。寫數(shù)據(jù)常用的是w’、‘a(chǎn)’模式,分別表示改寫和添加。如:f=open('datafile.txt','w’)2.寫入文件向文件中寫入數(shù)據(jù),使用文件對象的write()方法,參數(shù)為要寫入文件的字符串。如:f.write(‘somedata’)3.關(guān)閉文件關(guān)閉使用文件對象的close方法。如:f.close()【例2.19】打開文件并寫入數(shù)據(jù)。filename='INFO.txt'f=open(filename,'w')#清空原文件數(shù)據(jù),文件不存在則創(chuàng)建新文件f.write("IamZhangSanFeng.\n")f.write("IamnowstudyinginECNU.\n")f.close()運行后,程序在當(dāng)前目錄生成了一個INFO.txt文件,內(nèi)容為三行數(shù)據(jù)。文件的讀寫也會產(chǎn)生錯誤。例如讀取一個不存在的文件或者沒有正常關(guān)閉的文件,會產(chǎn)生IOError錯誤。為了避免此類問題,可以使用try...finally語句,不過更方便的是使用Python提供的with語句。2.3.2讀取文件內(nèi)容

文件對象中也提供了讀取文件的方法,包括read()、readline()、readlines()等方法。其功能分別如下:file.read([count]):默認讀整個文件。如果設(shè)置了參數(shù)count,則讀取count個字節(jié),返回值為字符串。file.readline():從當(dāng)前位置開始,讀取文件中的一行,返回值為字符串。file.readlines():從當(dāng)前位置開始讀取文件的所有行,返回值為列表,每行為列表的一項?!纠?.21】read()函數(shù)讀取整個文件。withopen("INFO.txt")asf:#默認模式為‘r’,只讀模式ct10=f.read(5)#讀5個字符print(ct10)print('======')contents=f.read()#從當(dāng)前位置,讀文件全部內(nèi)容print(contents)有時讀取的數(shù)據(jù)具有特殊字符或需要去掉的空格,如\n(換行)、\r(回車)、\t(制表符)、''(空格)等,常用去空白符函數(shù):strip():去除頭、尾的字符和空白符。lstrip():用來去除開頭字符、空白符。rstrip():用來去除結(jié)尾字符、空白符。【例2.22】使用readline()函數(shù)逐行讀取。withopen('data.txt')asf:line1=f.readline()#讀取第一行數(shù)據(jù)(此時已經(jīng)指向第一行末尾)line2=f.readline()#從上一次讀取末尾開始讀?。ǖ诙校﹑rint(line1)print(line2)print(line1.strip())print(line2.strip())print(line1.split())【例2.23】使用readlines()一次讀取多行:withopen('data.txt')asf:lines=f.readlines()#文件數(shù)據(jù)讀到一個列表,每個元素對應(yīng)一行print(lines)#每一行數(shù)據(jù)都包含了換行符print('================================')forlineinlines:print(line.rstrip())#使用rstrip()處理空格【例2.24】使用for循環(huán)逐行讀取文件。#逐行讀取withopen('data.txt')asf:forlineDatainf:print(lineData.rstrip())#去掉每行末尾的換行符2.3.3將數(shù)據(jù)寫入文件

如果需要對文件寫入數(shù)據(jù),打開方式需要選擇‘w’(寫入)或者‘a(chǎn)’(追加)模式,才能對文件內(nèi)容進行改寫或添加。寫入文件可以使用Python提供的write方法。write方法的語法如下:fileObject.write(byte)其中,參數(shù)byte為待寫入文件的字符串或字節(jié)?!纠?.25】新建文本文件并寫入內(nèi)容。filename='write_data.txt'withopen(filename,'w')asf:#'w'表示寫數(shù)據(jù),會清空原文件f.write("IamZhangSanFeng.\n")f.write("IamnowstudyinginECNU.\n")2.3.4Pandas存取文件

Pandas的核心功能是數(shù)據(jù)計算和處理,對外部文件讀寫數(shù)據(jù)也是Pandas功能的一部分。而且,可以使用Pandas在數(shù)據(jù)讀寫階段對數(shù)據(jù)做一定的預(yù)處理,為接下來的數(shù)據(jù)分析做準備。讀函數(shù)寫函數(shù)功能read_csvto_csv將CSV文件讀入DataFrame,默認逗號分隔。read_excelto_excel將Excel文件讀取到PandasDataFrame中。read_sqlto_sql將SQL查詢或數(shù)據(jù)庫表讀取到DataFrame中。read_jsonto_json讀寫JSON格式文件和字符串。read_htmlto_html可以讀寫HTML字符串/文件/URL,將HTML表解析為Pandas列表DataFrames。表2.2Pandas主要讀寫函數(shù)1.read_csv函數(shù)功能:從文件、URL、文件新對象中加載帶有分隔符的數(shù)據(jù),默認分隔符是逗號。read_csv的格式如下:pd.read_csv(filepath_or_buffer,sep,header,encoding,index_col,columns…)該函數(shù)有20多個參數(shù),其主要參數(shù)如下:filepath_or_buffer:字符型,代表文件名或數(shù)據(jù)對象的路徑,也可以是URL。sep:字符型,數(shù)據(jù)的分隔符。read_csv中默認是逗號;read_table中默認是tab空格。header:整型或整數(shù)列表,默認為None,代表列名的行號或數(shù)據(jù)的起始行。Pandas讀文件時默認第一行為關(guān)鍵字行。如果數(shù)據(jù)沒有關(guān)鍵字,需要將header設(shè)置為None。encoding:字符型,可選參數(shù),注明數(shù)據(jù)的編碼,默認為”utf-8”。index_col:整數(shù),默認為None,指定行索引的列號。【例2.29】讀取無標題數(shù)據(jù)并設(shè)置標題名。importpandasaspddata1=pd.read_table('data.txt',sep='',header=None,names=["H","W","C"])print(data1)2.3.5NumPy存取文件

Num

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論