Python-與大數(shù)據(jù)分析(Python基礎)_第1頁
Python-與大數(shù)據(jù)分析(Python基礎)_第2頁
Python-與大數(shù)據(jù)分析(Python基礎)_第3頁
Python-與大數(shù)據(jù)分析(Python基礎)_第4頁
Python-與大數(shù)據(jù)分析(Python基礎)_第5頁
已閱讀5頁,還剩458頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python與大數(shù)據(jù)分析

——對外經(jīng)貿大學信息學院

2023/11/202023最新整理收集do

something自我介紹劉寧寧對外經(jīng)濟貿易大學信息學院講師。專注于對圖像分類(VisualObjectClassification)、文本處理(NaturalLanguageProcessing)、模式識別(PatternRecognition)等方面的研究。6.00@163.com2023/11/20為什么大數(shù)據(jù)首選是Python呢?2023/11/20第一部分初識Python第二部分基本概念變量、注釋、print函數(shù)、數(shù)據(jù)類型、算術運算符、類型轉換第三部分數(shù)據(jù)的容器列表、元組、字典、集合第四部分控制結構與推導式2023/11/20第五部分數(shù)據(jù)的讀寫操作2023/11/20第六部分錯誤類型和異常捕獲第七部分字符編碼問題處理第八部分編寫函數(shù)處理數(shù)據(jù)第九部分變量作用域2023/11/20第十部分Python中的模塊第十一部分Python中的類第十五部分Numpy基礎知識第十六部分Pandas數(shù)據(jù)分析第十三部分正則表達式第十四部分日期數(shù)據(jù)的處理第一部分

初識PythonPython語言的誕生和發(fā)展歷史Python語言的特點運行環(huán)境及安裝2023/11/20Python語言的誕生和發(fā)展歷史Python語言是一種解釋型、面向對象、動態(tài)數(shù)據(jù)類型的高級程序設計語言Python語言是數(shù)據(jù)分析師的首選數(shù)據(jù)分析語言,也是智能硬件的首選語言數(shù)據(jù)分析創(chuàng)建復雜的Web應用程序游戲開發(fā)動畫電影效果……網(wǎng)站開發(fā)智能硬件開發(fā)2023/11/20Python與蟒蛇有關?Guido

van

Rossum于1989年在荷蘭國家數(shù)學和計算機科學研究所設計出來的Python語言的誕生BBC

“MontyPython‘sFlyingCircus”(蒙提·派森的飛行馬戲團)GuidovanRossum(人稱“龜叔”)2023/11/20Python2.0版本于2000年10月發(fā)布。在2008年12月,Python3.0發(fā)布,此版本沒有完全兼容之前的Python

2.0Python也因此分為了Python3.5派系和Python2.7派系兩大陣營Python語言的發(fā)展歷史2023/11/20TIOBE

INDEX:編程語言流行程度排行榜Python語言的TIOBE

INDEX2023/11/20Python曾在2007年和2010年兩度被TIOBE排行榜評為“年度編程語言”現(xiàn)已成為了第五大流行編程語言(截至2016年10月)Python語言的TIOBE

INDEX2023/11/20Python語言的特點優(yōu)點一:優(yōu)雅、簡單、明確(減少花哨、晦澀或以“炫技”為目的的代碼)讓數(shù)據(jù)分析師們擺脫了程序本身語法規(guī)則的泥潭,更快的進行數(shù)據(jù)分析C語言Python語言2023/11/20優(yōu)點二:強大的標準庫完善的基礎代碼庫,覆蓋了網(wǎng)絡通信、文件處理、數(shù)據(jù)庫接口、圖形系統(tǒng)、XML處理等大量內容,被形象地稱為“內置電池”(batteriesincluded)Python使用者——“調包俠”2023/11/20優(yōu)點三:良好的可擴展性大量的第三方模塊,覆蓋了科學計算、Web開發(fā)、數(shù)據(jù)接口、圖形系統(tǒng)等眾多領域,開發(fā)的代碼通過很好的封裝,也可以作為第三方模塊給別人使用。如Pandas、Numpy、Seaborn、Scikit-learn等等優(yōu)點四:免費、開源2023/11/20缺點一:運行速度慢缺點二:加密難缺點三:縮進規(guī)則缺點四:多線程災難Python語言的缺點2023/11/20Python語言與Java動態(tài)類型和靜態(tài)類型Python中一切皆對象括號與縮進應用領域2023/11/20Python語言與R語言機器學習的一把利器可讀性強,便于上手靈活性強:可與其他如Web應用程序進行整合以統(tǒng)計推斷為導向數(shù)據(jù)分析之外的領域有所限制包凌亂且一致性較差2023/11/20Python語言與R語言的應用場景對比網(wǎng)絡爬蟲連接數(shù)據(jù)庫內容管理系統(tǒng)API構建統(tǒng)計分析互動式圖標/面板2023/11/20運行環(huán)境及安裝推薦使用Anaconda進行Python安裝、環(huán)境配置及工具包管理IpythonqtconsolePyCharmJupyter

NotebookSpyder2023/11/20IPython鼓勵一種“執(zhí)行-探索”(execute-explore)的工作模式輸入代碼之后,按下回車,便會立即得到代碼運行結果交互式計算和開發(fā)環(huán)境:IPython2023/11/20交互式計算和開發(fā)環(huán)境:IPython輸入“?”獲得IPython的詳細介紹輸入“%quickref”獲得IPython的快速參考2023/11/20交互式計算和開發(fā)環(huán)境:IPython輸入“help()”查看IPython的幫助文檔使用內省“pandas?”查看Pandas的幫助文檔2023/11/20基于Qt框架的GUI控制臺——qtconsole為終端應用程序提供諸如內嵌圖片、多行編輯、語法高亮之類的富文本編輯功能啟動命令:jupyter

qtconsole缺點:功能少、用戶友好性不夠2023/11/20Jupyter

NotebookJulia+Python+R

=

Jupyter基于Web技術的交互式計算文檔格式支持Markdown和Latex語法支持代碼運行、文本輸入、數(shù)學公式編輯、內嵌式畫圖和其他如圖片文件的插入,是一個對代碼友好的筆記本2023/11/20Jupyter

NotebookJupyter支持包含R

kernel(支持R語言)啟動命令:jupyter

notebook2023/11/20Jupyter

Notebook推薦使用JupyterNotebook進行數(shù)據(jù)分析,并將自己數(shù)據(jù)分析的思考過程寫在其中,方便之后整理思路以及向別人展示數(shù)據(jù)分析結果從左至右分別是默認Python終端、IPython和Jupyter

Notebook2023/11/20R

Notebook2016年10月,R語言的集成環(huán)境RStudio也擁有了自己的RNotebook了2023/11/20集成開發(fā)環(huán)境IDE——PyCharm

&

Spyder2023/11/20數(shù)據(jù)科學計算平臺——Anaconda“l(fā)eadingopendatascienceplatformpoweredbyPython自動配置Python環(huán)境,下載并安裝JupyterNotebook、qtconsole和集成開發(fā)環(huán)境Spyder包管理器conda2023/11/20總結Python語言的特點:優(yōu)雅、簡單、易學Python語言的誕生與發(fā)展歷史Python語言的運行環(huán)境:IPython、Jupyter

Notebook、Spyder…Python語言的數(shù)據(jù)科學計算平臺:Anaconda2023/11/20實踐案例1:PyCharm下

HelloWorld通過例子說明Python與其他語言的區(qū)別萬物皆對象空格控制結構報錯2023/11/20第二部分

基本概念變量、注釋、print函數(shù)、數(shù)據(jù)類型算術運算符、類型轉換2023/11/20解釋型語言PythonPython語言是一種解釋型、面向對象、動態(tài)數(shù)據(jù)類型的高級程序設計語言2023/11/20數(shù)據(jù)集變量及相關含義公開數(shù)據(jù)集資源

UCI數(shù)據(jù)集

Kaggle數(shù)據(jù)集

Yahoo!股票價格數(shù)據(jù)

……2023/11/20用來存儲一些之后可能會變化的值對科比投籃ID為

1的一次投籃進行分析,那么我們就可以創(chuàng)建一個名稱為shot_id的變量,并且將

1值儲存在變量shot_id

中如果之后我們想要分析科比的另外一次投籃,比如投籃ID為

2的投籃,我們只需要修改變量shot_id

的賦值,將shot_id

賦值為2

即可變量和常量變量2023/11/20變量名必須是大小寫英文字母、數(shù)字或下劃線_

的組合,不能用數(shù)字開頭,并且對大小寫敏感關鍵字不能用于命名變量(31個),如and、as、assert、break、class、continue、def、del等變量命名規(guī)則2023/11/20通過賦值運算符

=變量名和想要賦予變量的值連接起來,變量的賦值操作就完成了聲明和定義的的過程,在其他語言中需要制定類型;同一變量可以反復賦值,而且可以是不同類型的變量,這也是Python語言稱之為動態(tài)語言的原因變量賦值2023/11/20常量表示“不能變”的變量Python中是沒有常量的關鍵字的,只是我們常常約定使用大寫字母組合的變量名表示常量,也有不要對其進行賦值”的提醒作用常量2023/11/20如同我們在看書時做筆記一樣Python語言會通過注釋符號識別出注釋的部分,將它們當做純文本,并在執(zhí)行代碼時跳過這些純文本在Python語言中,使用

#進行行注釋注釋2023/11/20多行注釋使用連續(xù)單個單引號或者雙引號2023/11/20在Python2.x版本中,同時兼容print

和print()在Python3.x版本中,print

函數(shù)為帶括號的print()如果想要看變量的值,則直接在

print后面加上變量名即可。如果是想要輸出提示信息,如一句話,那我們需要將提示信息用‘單引號包裹起來(這使得內容構成一個字符串)print函數(shù)2023/11/20使用逗號,隔開變量與其他剩余內容,則print

在輸出時會依次打印各個字符串或變量,遇到逗號,時會輸出一個空格print

函數(shù)不僅可以打印變量值,也可以打印計算結果2023/11/20Python語言的數(shù)據(jù)類型包括整型、浮點型、字符串、布爾型和空值整型(int)整型的取值為整數(shù),有正有負,如

2,-666,666

等。在科比投籃數(shù)據(jù)集中,shot_id、game_event_id、game_id、loc_x、loc_y、minutes_remaining、period、playoffs、seconds_remaining、shot_distance、shot_made_flag、team_id都是整型變量數(shù)據(jù)類型2023/11/20浮點型的取值為小數(shù),當計算有精度要求時被使用,由于小數(shù)點可以在相應的二進制的不同位置浮動,故而稱為浮點數(shù)如

3.14,-6.66

等,但是如果是非常大或者非常小的浮點數(shù),就需要使用科學計數(shù)法表示,用

e

代替

10

。科比投籃數(shù)據(jù)集中的

lat

和lon

為浮點型變量。浮點型(float)2023/11/20字符串(str)字符串是以兩個單引號或兩個雙引號包裹起來的文本字符串JumpShot包括J,u,m,p,空格,S,h,o,t

這9個字符字符串(str)2023/11/20轉義字符:字符串里常常存在一些如換行、制表符等有特殊含義的字符,這些字符稱之為轉義字符比如

\n

表示換行,

\t

表示制表符,Python還允許用r“

”表示“”內部的字符串默認不轉義2023/11/20布爾型(bool)布爾型只有

True

False

兩種值。比較運算和條件表達式都會產生

True

False

布爾型(bool)2023/11/20布爾型(bool)布爾值可以進行

and

、

or

not

運算,

and

or

運算分別用

&

|

表示and運算or運算2023/11/20布爾型(bool)

not

運算為非運算,即把

True

變成

False

False

變成

True

。2023/11/20空值是Python里一個特殊的值,用

None

表示,一般用

None

填充表格中的缺失值使用type()

函數(shù)來獲取某值的類型空值(NoneType)2023/11/20數(shù)據(jù)集變量的數(shù)據(jù)類型總結int64、float64分別表示64位的整型和64位的浮點型2023/11/20日期數(shù)據(jù)類型還有一種特殊的數(shù)據(jù)類型——日期類型這種類型數(shù)據(jù)在金融、交通等領域十分常見,我們將在日期數(shù)據(jù)的處理這一部分對這一類型的數(shù)據(jù)分析進行詳細講解2023/11/20二元數(shù)學運算符算術運算符2023/11/20Python2.x版本與Python3.x版本(以下簡稱Python2和Python3)的整除是不同的。2023/11/20函數(shù)

int()、float()、str()

和bool()

分別用于將變量轉換成整型、浮點型、字符串和布爾型變量類型轉換2023/11/20某些變量無法轉換成數(shù)值型變量2023/11/20只有在變量值為0時,bool

轉換的結果才為False:2023/11/20除了使用type()

外,我們還可以使用isinstance()

來獲得數(shù)據(jù)類型2023/11/20總結數(shù)據(jù)類型、算術運算符、類型轉換變量、注釋、print函數(shù)2023/11/20第三部分

數(shù)據(jù)的容器(結構)列表、元組、字典、集合2023/11/20列表科比投籃數(shù)據(jù)集列表(list)是一個有序的序列結構,序列中的元素可以是不同的數(shù)據(jù)類型列表可以進行一系列序列操作,如索引、切片、加、乘和檢查成員等2023/11/20將列表中的各元素用逗號分隔開,并用中括號將所有元素包裹起來列表創(chuàng)建2023/11/20使用append()方法添加元素,該方法會在列表末尾位置添加數(shù)據(jù)元素使用remove()方法刪除元素列表對象的增減2023/11/20實踐練習現(xiàn)有一空的列表“kobe_list”用來存入科比某次投籃的信息請利用append()方法將投籃ID2、投籃類型'JumpShot'、科比所在球隊'LosAngelesLakers'和對手'POR'按順序加入到列表變量kobe_list中2023/11/20remove()方法適用于知道要刪除的值的情況,當我們不知道具體元素值,但是知道元素的索引位置時,我們可以使用del

函數(shù)配合列表索引,刪除索引位置的元素或者使用pop()方法列表對象的增減2023/11/20通過insert()

方法在指定的索引位置添加數(shù)據(jù)元素列表對象的增減2023/11/20實踐練習kobe_list=[2,'LosAngelesLakers','JumpShot','POR']現(xiàn)在需要添加更多關于科比某次投籃的信息,包括投籃位置(按區(qū)域劃分)、比賽日期和對陣形式(主場或者客場)在kobe_list插入‘LeftSide(L)’,‘2000-10-31’,和'LAL@POR'并刪除數(shù)據(jù)元素2在'LosAngelesLakers'之后加上matchup的值2023/11/20Python語言中所有的索引都是從0開始計數(shù)的,如果列表中有n個元素,那么最后一個元素的索引是n-1

如果我們想要獲取kobe_list中第3個元素及倒數(shù)第二個元素列表索引2023/11/20Python內置的用于判斷列表長度的函數(shù)為len()列表長度2023/11/20切片操作需要提供起始索引位置和最后索引位置,然后用冒號:將兩者分開如果未輸入步長,則默認步長為1切片操作返回一系列從起始索引位置開始到最后索引位置結束的數(shù)據(jù)元素需要注意的是,起始索引位置的值包含在返回結果中,而最后索引位置的值不包含在返回結果中列表切片2023/11/20切片操作需要提供起始索引位置和最后索引位置,然后用冒號:將兩者分開列表切片2023/11/20逆向切片我們可以省略起始索引位置,表示從最開始進行切片,當我們將兩個索引都省略之后,我們將按原樣復制一個列表,如果想要將列表的順序顛倒,則可以使用::-1列表切片2023/11/20列表中的元素也可以是列表,這樣可以將列表看成更高維的數(shù)組拆開很容易理解嵌套列表2023/11/20實踐練習現(xiàn)有科比某次投籃信息的列表kobe_listkobe_list=['LosAngelesLakers','LAL@POR','JumpShot','POR','LeftSide(L)','2000-10-31']請使用切片方法取出索引位置3到5的元素,并存入到列表three_five中并提取比賽日期中的年份存入變量year中提示:讀取年份時,先使用索引方法將kobe_list或者three_five最后一個日期元素值'2000-10-13'提取出來,索引位置為-1,然后對該字符串進行切片操作,切片為0:42023/11/20元組元組(tuple)數(shù)據(jù)結構與列表類似,其中元素可以有不同的類型但是元組中的元素是不可變的,即一旦初始化之后,就不能夠再做修改(報錯:元組對象不支持賦值)2023/11/20由于元組是不可變的,因此元組對象沒有append()、insert()和del這樣的方法。實際上,tuple的使用可以使得代碼更安全,防止錯誤賦值導致重要對象的改變。2023/11/20實踐練習現(xiàn)有科比某次投籃信息的元組kobe_tuplekobe_tuple=([2,'JumpShot'],'LosAngelesLakers','POR')請將kobe_tuple中的投籃ID由2改為3,投籃類型由JumpShot改為'SlamDunkShot'提示:通過kobe_tuple[][]方式訪問元組中的列表元素中的某一個元素2023/11/20字典字典(dict)在其他語言中被稱作哈希映射(hashmap)或者相關數(shù)組(associativearrays)字典是一種大小可變的鍵值對集,其中的鍵(key)和值(value)都是Python對象字典用在需要高速查找的地方2023/11/20字典的創(chuàng)建使用大括號{}

包含鍵值對,并用冒號:

分隔鍵和值,形成鍵:值對可以看出,字典中的數(shù)據(jù)元素是無序的,并不會按照初始化的順序排列。不同鍵所對應的值可以相同,但是字典中的鍵必須是唯一的字典創(chuàng)建2023/11/20利用for循環(huán)和zip()函數(shù)創(chuàng)建字典zip()函數(shù)用于將多個序列(列表、元組等)中的元素配對,產生一個如[(列表1元素,列表2元素),(,)]

的新的元組列表;for循環(huán)用于重復執(zhí)行將值放入鍵中的操作。字典創(chuàng)建2023/11/20實踐練習請創(chuàng)建關于科比投籃信息的字典kobe_dict,鍵為shot_id,值為shot_zone_area其中列表shot_id與列表shot_zone_area應按照順序一一對應shot_id=[1,2,3]shot_zone_area=['RightSide(R)','LeftSide(L)','LeftSideCenter(LC)']2023/11/20字典的元素訪問(以及插入、設置)方式與列表和元組一樣。不同的是,列表和元組的索引號是按照順序自動生成,而字典的索引號是鍵字典索引字典中某值的索引還可以通過get方法,如果字典不包含某個鍵,可以返回None,或者自己指定的值2023/11/20如果在字典中不存在索引的鍵,則系統(tǒng)會報錯字典索引2023/11/20我們可以通過in

判斷是否存在某個鍵,其語法跟在列表和元組中判斷是否存在某個值是相同的,也可以使用內置的has_key()

方法字典索引2023/11/20如果不太確定字典中有哪些鍵或者值,我們可以使用keys()

方法或者values()方法字典索引2023/11/20在有些情況下,我們需要取出字典中的鍵值對用于下一步的分析,此時可以使用items()

方法,該方法將返回所有鍵值對,并將其保存在一個元組列表(列表中的元素為元組)中字典索引2023/11/20字典的刪減有三種方法使用del

函數(shù)對單一元素或者整個字典進行刪除使用pop()

方法刪除單一元素使用clear()方法清空詞典的所有元素字典元素刪減2023/11/20集合集合(set)是一種無序集,它是一組鍵的集合,不存儲值在集合中,重復的鍵是不被允許的。集合可以用于去除重復值集合也可以進行數(shù)學集合運算,如并、交、差以及對稱差等。應用:

去重。把一個列表變成集合,就自動去重了

關系測試。測試兩組數(shù)據(jù)之前的交集、差集、并集等關系2023/11/20集合的創(chuàng)建有兩種方式:使用set()

函數(shù)或者使用大括號{}需要注意的是,創(chuàng)建空集合,必須使用set()

,而不是{},因為{}表示創(chuàng)建一個空的字典集合創(chuàng)建2023/11/20集合支持數(shù)學集合運算,如并、交、差以及對稱差等集合運算2023/11/20集合支持數(shù)學集合運算,如并、交、差以及對稱差等集合運算2023/11/20總結創(chuàng)建、索引、增減、切片操作列表、元組、字典、集合2023/11/20第四部分

控制結構if選擇結構、for循環(huán)結構、while循環(huán)結構2023/11/20布爾值在這個世界上,文字和認知中有真和假的判斷,而對于計算機而言,布爾值True和False就表示真和假

True、False是比較顯式的真和假,而在Python中以下值都會被看作是假(False):2023/11/20==

符號是判斷兩個值、變量之間是否相等的操作符,相等則返回布爾值True對于字符型變量也是可以這么操作的:==

符號2023/11/20if選擇結構判斷條件為真(True)的時候才執(zhí)行冒號后下面的語句比如現(xiàn)在我們已有一個精靈寶貝的HP值,而我只希望當這個HP值大于

20的時候才打印出來2023/11/20除了if語句外,還有if-else、if-elif語句2023/11/20for循環(huán)結構

for循環(huán)是可以依次得到序列循環(huán)中每個元素,并依次處理2023/11/20現(xiàn)在有一個列表,這個列表存放的是10個小精靈的HP數(shù)值,現(xiàn)在希望得到里面每個數(shù)字都乘以2

2023/11/20while循環(huán)結構while循環(huán)和for循環(huán)不同的是,它的停止條件是個人自己設定的:判斷條件和if語句是相同的,而什么時候用while呢?在你確定滿足條件而不確定需要的循環(huán)次數(shù)時,那么while是最好的選擇?,F(xiàn)在有一個小精靈的HP數(shù)值變量,我希望它在大于20的時候,逐次變小,直到等于20為止。2023/11/20組合使用除了單獨使用上述控制結構之外,我們還可以嵌套使用。比如說在前面的HP序列,我只希望其中的偶數(shù)乘以”2”,奇數(shù)不變。2023/11/20python作為一種簡潔、直接、貼近人類自然語言的計算機語言,它對于基礎的數(shù)據(jù)結構tuple、list、dict內嵌了很多十分方便的函數(shù)和操作。在前面章節(jié)介紹的方法之外,這章將介紹在list/dict內部使用for循環(huán)來構造list/dict的方法。這些方法將讓我們更加美觀可讀、方便簡潔地實現(xiàn)一些功能。列表推導式2023/11/20列表推導式list是使用python過程中是一個非常常用的數(shù)據(jù)結構,無論是作為最終數(shù)據(jù)的保存結果,還是中間數(shù)據(jù)結果的臨時存儲,都能提供很方便的功能。使用列表推導式可以讓循環(huán)在列表內完成。2023/11/20以下為例子,對列表中每個數(shù)值逐個減去均值2023/11/20含義解析:關鍵詞for循環(huán)后跟的是循環(huán)語法,這部分不變;而在for循環(huán)真正表達式部分則在列表推導式中移前,運算結果直接添加入列表中。2023/11/20字典也可以用推導式,但沒有列表推導式那么常用。字典推導式多用于需要元素有一一對應關系時,比如前面談到當變量是字符型時,需要將字符轉換為一一對應的數(shù)值型。字典推導式2023/11/20UnitedStatesEnergy,Census,andGDP2010-2014數(shù)據(jù)集中Region變量是字符型,如現(xiàn)需要對其進行數(shù)值轉換。2023/11/20enumerate

是Python的一個常用內置函數(shù),它用在列表中時,不但會產生列表內的元素,并且會從"0"開始按順序生成序號。2023/11/20總結for循環(huán)、while循環(huán)布爾值、if條件判斷列表推導式、字典推導式2023/11/20第五部分

數(shù)據(jù)文件的讀寫操作2023/11/20數(shù)據(jù)的讀取對文件操作之前需要用open()

函數(shù)打開文件

mode

參數(shù)中的r指讀出,

w指寫入打開之后將返回一個文件對象(fileobject),后續(xù)對文件內數(shù)據(jù)的操作都是基于這個文件對象的方法(method)來實現(xiàn)的2023/11/20數(shù)據(jù)的讀取對文件數(shù)據(jù)的讀取是用的read()

方法,read()

方法將返回文件中的所有內容用print打印所有內容會顯示Hello,world!

,記得每次用完文件后,都要關閉文件f.close()。否則,文件就會一直被Python占用,不能被其他進程使用2023/11/20數(shù)據(jù)的讀取也可以使用withopen()asf:

在操作后自動關閉文件2023/11/20數(shù)據(jù)的讀取在

read()

中加入數(shù)字,可指定讀取的字符數(shù)2023/11/20數(shù)據(jù)的寫入寫入的操作和讀取是類似的,不過用的是write()

函數(shù),同時需要將打開文件的mode參數(shù)設置為

w

2023/11/20文本文件的操作常見的數(shù)據(jù)文件包括txt

格式或者csv(逗號分隔值文件格式)格式文2023/11/20文本文件的讀取通過open()函數(shù)打開文件,返回文件對象對文件對象進行讀取操作,除了前面介紹的read()

之外還有兩種讀取數(shù)據(jù)的方法:

readline()

是每次讀入一條數(shù)據(jù)的方式,readlines()

是一次性讀入文件所有數(shù)據(jù)2023/11/20文本文件的讀取

readlines()

讀取后得到的是每行數(shù)據(jù)組成的列表,但是一行樣本數(shù)據(jù)全部存儲為一個字符串,并且數(shù)據(jù)讀入后并沒有將換行符去掉(windows系統(tǒng)的換行符是

\r\n

,linux系統(tǒng)的換行符號是

\n)在讀入數(shù)據(jù)之后,用

for循環(huán)對每一個元素去除換行符,并將每一個變量值用字符串處理方法

.split()

分隔開來2023/11/20文本文件的讀取

.strip()

本身是一個對字符串指定字符去除的方法,但括號里參數(shù)為空的時候,就會去除\r\n\t

2023/11/20文本文件的寫入設置參數(shù)mode=w。

write()、writelines()

是兩個對文件對象的寫入數(shù)據(jù)的方法。write()是逐次寫入,writelines()可對一個列表里的所有數(shù)據(jù)一次性寫入文件中如果有換行需要,則要在每條數(shù)據(jù)后增加換行符,同時用字符串.join()

的方法將每個變量數(shù)據(jù)聯(lián)合成一個字符串并增加間隔符

\t2023/11/20逗號分隔值文件的操作csv文件用逗號,作為分隔符2023/11/20逗號分隔值文件的讀取利用Python內置的

csv

模塊讀取數(shù)據(jù)2023/11/20逗號分隔值文件的寫入引入csv模塊

open()

打開文件,使用csv.writer()

作為寫入器,

writerow()方法逐行寫入2023/11/20總結open()、write()、readlines()、.strip()、.join()文本文件讀寫操作、逗號分隔值文件讀寫操作csv模塊、csv.reader()、csv.writer()2023/11/20實踐案例2:

白葡萄酒品質探索2023/11/20第六部分

錯誤類型和異常捕獲錯誤類型語法錯誤異常捕獲異常assert、with語句自助控制異常爬蟲HTTP異常處理2023/11/20錯誤類型語法錯誤(Syntaxerrors)代碼編譯時的錯誤,不符合Python語言規(guī)則的代碼會停止編譯并返回錯誤信息異常(Exceptions)相較于語法錯誤,異常比較難發(fā)現(xiàn),因為它只在代碼運行時才會發(fā)生,如類型錯誤、數(shù)值錯誤、索引錯誤和屬性錯誤等。語法錯誤包含在異?;愔绣e誤類型2023/11/20錯誤類型Python與Java異常類層級區(qū)別Java異常類層級BaseExceptionExceptionStandardErrorRuntimeErrorMemoryErrorRuntimeErrorSyntaxError……StopIterationWarningSystemExitKeyboardInterruptGeneratorExitPython異常類層級2023/11/20語法錯誤常見的語法錯誤(SyntaxError)包括:缺少起始符號或結尾符號(括號、引號等)縮進錯誤關鍵詞拼寫錯誤語法錯誤2023/11/20語法錯誤常見的語法錯誤(SyntaxError)包括:缺少起始符號或結尾符號(括號、引號等)縮進錯誤關鍵詞拼寫錯誤語法錯誤2023/11/20語法錯誤常見的語法錯誤(SyntaxError)包括:缺少起始符號或結尾符號(括號、引號等)縮進錯誤關鍵詞拼寫錯誤語法錯誤修改語法錯誤實戰(zhàn)演練http:///learn/course/2/lecture/148/2023/11/20異常通常由以下問題引起:在定義函數(shù)之前就引用該函數(shù)調用不屬于某個對象的方法或者屬性試圖將某個值轉換為不恰當?shù)臄?shù)據(jù)類型異常2023/11/20除零錯誤(ZeroDivisionError):除數(shù)為0名稱錯誤(NameError):變量使用前未進行申明或者初始化聚類分析六種典型的異常2023/11/20類型錯誤(TypeError):某些函數(shù)或者方法只適用于特定的數(shù)據(jù)類型,如果對數(shù)據(jù)類型的操作不當,就會產生類型錯誤數(shù)值錯誤(ValueError):在輸入類型正確的情況下,具體輸入值錯誤聚類分析六種典型的異常2023/11/20索引錯誤(IndexError):超出序列長度的索引操作屬性錯誤(AttributeError):方法或者屬性不適用該對象聚類分析六種典型的異常2023/11/20異常層級檢查、修改語法錯誤和異常實戰(zhàn)演練http:///learn/course/2/lecture/149/2023/11/20代碼編寫環(huán)境自帶的高亮顯示便于發(fā)現(xiàn)常規(guī)語法錯誤但難于發(fā)現(xiàn)異常Jupyter

NotebookPyCharm捕獲異常2023/11/20程序要遇到異常的時候,往往是直接中斷,跳出執(zhí)行。但是有些時候,我們需要在遇到異常的時候另外處理,而不是直接停止。解決方法:try...except...語句try...except...else語句finally子句捕獲異常2023/11/20捕獲異常try...except...語句

try關鍵詞內執(zhí)行的是正常代碼,當這部分代碼出錯的時候,會跳過錯誤代碼后進入

except關鍵詞內部,執(zhí)行此部分的代碼2023/11/20try...except...else語句當在

try...except...后加入的

else

指,當程序沒發(fā)生錯誤時執(zhí)行的部分2023/11/20try...except...else…工作原理是執(zhí)行第一個匹配該異常的except子句開始執(zhí)行try部分try部分執(zhí)行異常否執(zhí)行else部分語句,控制流通過整個try語句2023/11/20finally子句

finally語句是指,無論程序運行對或錯,都會執(zhí)行的部分2023/11/20assert關鍵字當Expression部分為True時,則正確執(zhí)行,程序繼續(xù)下去;當判斷為False時,則拋出后面的e錯誤提示。在大型的項目中,assert常被用來作為“防御性編程”assert、with語句2023/11/20with語句有時候打開了文件卻忘記關閉,或者是在讀取文件過程出錯,那么"with"語句能夠很好解決關于文件讀取、寫入的問題上面的語句等價于兩種特殊的簡便方法2023/11/20自主控制異常除了在代碼運行出錯時觸發(fā)錯誤,我們還可以主動控制拋出異常,通過使用關鍵詞

raise(類似Java語言中的throw)自主控制異常:拋出異常2023/11/20自主控制異常自定義異常的原因Python提供的內建異常不夠用可以預估某個錯誤的產生自主控制異常:用戶自定義異常定義異常類繼承于Exception類,由它開始擴展2023/11/20自主定義的NotIntError異常類,捕獲非整型錯誤ASCII編碼集2023/11/20在編寫API時,定義一個Root

Exception根異常,其他異常都繼承于根異常好處1:API代碼層次更清晰好處2:API與調用程序代碼隔離如:需要做一個鏈接數(shù)據(jù)庫服務的模塊,提供一個connect函數(shù)用于鏈接,鏈接可能出現(xiàn)情況:Socket連接超時Socket拒絕連接聚類分析以定義API異常為例2023/11/20這樣精確定義多個異常,使得代碼層次清晰,增強了可讀性在代碼的最后還捕獲了Error以及Exception兩個異常,這兩個操作分別對應于可拓展性與健壯性的目的聚類分析調用API時異常捕獲的技巧2023/11/20編寫工具類函數(shù)時,函數(shù)處理流程會產生很多狀態(tài)用返回值代表函數(shù)處理狀態(tài),調用者需要去理解每個狀態(tài)碼的意義,存在學習成本聚類分析使用異常代替返回狀態(tài)碼2023/11/20使用異常的方式2023/11/20增強代碼的魯棒性而不必影響程序的主邏輯,專注程序主邏輯,保持代碼的簡潔清晰異常判斷是就地實時的,與代碼運行是實時的一些低調用級別的代碼塊沒有判斷和處理其上級調用模塊的權限或者根本無法判斷,只能由其上級調用模塊來決定下一步怎么做,這時當前模塊可以不用處理,將錯誤拋出給調用者利用拋出異常并處理的優(yōu)點2023/11/20異常處理應該與正常流程控制分離異常處理與流程控制異常處理搞亂了代碼邏輯將異常代碼塊抽離到另外的函數(shù)中2023/11/20網(wǎng)絡爬蟲框架爬蟲HTTP異常處理URL管理模塊,負責管理、調度所有URL爬蟲啟動的入口,通常是一組URL下載模塊,為了提高效率,Crawler通常是并行的。解析模塊,從網(wǎng)頁中解析出有價值的信息,并將新發(fā)現(xiàn)的URL加入到URLQueue中。存儲模塊,將數(shù)據(jù)存在存儲介質中,通常是文件或數(shù)據(jù)庫。2023/11/20獲取要訪問的URL的IP地址(右圖中標號為1、2)向WebServer請求資源(右圖中標號為3)WebServer收到請求,將響應返回給客戶端(右圖中標號為4)聚類分析HTTP請求過程2023/11/20①URLError:不能夠處理一個response網(wǎng)絡無連接,即本機無法上網(wǎng)連接不到特定的服務器服務器不存在聚類分析HTTP請求過程的兩種常見異常2023/11/20②HTTPError:URLError的子類,在特定的HTTP

URLs中產生每一個HTTP響應對象response包含一個數(shù)字“狀態(tài)碼”urllib2

會幫助處理重定向問題,不能處理則產生HTTPError狀態(tài)碼:404-頁面無法找到,403-請求禁止,401-帶驗證請求2023/11/20①捕獲到HTTPError,輸出code,不再處理URLError異常。如果發(fā)生的不是HTTPError,則去捕獲URLError異常,輸出錯誤原因聚類分析異常處理技巧2023/11/20異常處理技巧②利用

hasattr

方法提前對異常的屬性進行判斷,以免出現(xiàn)屬性輸出報錯的現(xiàn)象2023/11/20只處理你知道的異常,避免捕獲所有異常然后吞掉它們拋出的異常應該說明原因,有時候你知道異常類型也猜不出所以然的不要使用異常來控制流程,那樣你的程序會無比難懂和難維護如果有需要,切記使用finally來釋放資源一些經(jīng)驗2023/11/20總結捕獲異常語法錯誤和異常拋出異常,自定義異常類assert,with語句爬蟲HTTP異常處理,URLError,HTTPError,code,reason2023/11/20第七部分

字符編碼問題處理編碼和解碼編碼集解決亂碼2023/11/20編碼是為了讓機器讀懂語言。即輸入的是字符“中文”,那么編碼就是將“中文”編碼為二進制格式讓機器讀懂在Python中,機器其實是不認識unicode的,而是接收的

str

即使輸入的數(shù)據(jù)是unicode的,而在Python內部都會將

unicode

自動轉為str

編碼和解碼電腦編碼(encode)strunicode解碼(decode)2023/11/20編碼和解碼進攻編碼鼓聲士兵解碼行為2023/11/20

str通過解碼函數(shù)decode()轉換為unicode,unicode通過編碼函數(shù)encode()

轉換為

str

http:///learn/course/2/lecture/96/2023/11/20電腦只”認識”

0

1二進制數(shù)值,從一開始,人們想到的方法就是賦予每一個字符唯一的一串0

1

編碼表示。這是一個ASCII編碼集中對字符

A的編碼,這是一個八位0/1

數(shù)字01000001編碼集2023/11/20在1967年出現(xiàn)了ASCII標準,這主要是基于拉丁字母的一套電腦編碼系統(tǒng)ASCII標準是每個英文字母有一一對應獨立的8位數(shù)字串,比如說字母A,ASCII中對應的二進制值為01000001

。這樣,我在輸入A的時候,編譯器會借助編碼集將A轉換為01000001聚類分析01000001ASCII編碼集2023/11/20ASCII總共可以存儲256個字符,1967年制定這套標準的人只考慮英語世界的使用者。那么256個編碼集對于使用英語和拉丁語系是夠用的,但是對于中文、日文、韓文,就完全不夠用了ASCII聚類分析ASCII編碼集2023/11/20聚類分析ASCII聚類分析ASCII編碼集2023/11/20聚類分析GB2312編碼集是由中國國家標準總局發(fā)布1981年5月1日實施的一套收錄了6763個漢字、拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個字符的標準。但是這套標準沒有包含部分罕見字和繁體字,于是后面出現(xiàn)GBK、GB18030在GB2312的基礎上進行擴充解決。GBK2023/11/20聚類分析Unicode是標準統(tǒng)一所有語言文字的標準編碼集,它目前已經(jīng)收錄超過十萬個字符Unicode包括兩個方面編碼方式(一個字符對應編碼集中的二進制數(shù)值)實現(xiàn)方式(傳輸、存儲):UTF-8、UTF-16Unicode2023/11/20Python

2.x版本有兩種用于字符處理的數(shù)據(jù)格式:str和unicodestr

字節(jié)流是以兩個單引號

‘’或兩個單引號

“”來賦值的,訪問一個元素就是一個字節(jié)Python字符串2023/11/20Python字符串unicode

字符串是在‘’或“”前加u來賦值的,同時訪問一個元素則是一個字符http:///learn/course/2/lecture/94/2023/11/20Python

3.x版本中的字符串Python3.x版本有兩種表示字符串的類型:bytes

和str,str

類中包含了unicode

字符,非unicode編碼如UTF-8、GBK被定義成了bytes使用

encode()

和decode()

函數(shù)進行相互轉換2023/11/20如果出現(xiàn)亂碼的狀況,那肯定是編碼轉碼出現(xiàn)了問題,這不外乎有以下幾個關鍵點:Python解釋器設置的默認編碼源文件設置的編碼終端編碼解決亂碼2023/11/20Python解釋器的編碼指Python內部認為的字符

str

的編碼,即一個str變量,要轉換為unicode時,Python解釋器默認的轉換方式Python的默認轉換方式是ASCII,sys.getdefaultencoding()

函數(shù)可以獲得默認編碼信息聚類分析解釋器編碼2023/11/20在ASCII默認編碼條件下對中文字符編碼會出現(xiàn)錯誤,因為ASCII不能對中文進行編碼聚類分析解釋器編碼2023/11/20通過前面介紹的encode()函數(shù)和decode()

函數(shù)可以設置參數(shù),指定編碼方式對中文字符進行GBK編碼和UTF-8編碼聚類分析解釋器編碼2023/11/20中文字符str的解碼問題聚類分析解釋器編碼2023/11/20想要得到GBK編碼的str:先對其進行

UTF-8解碼,再對其進行GBK編碼聚類分析解釋器編碼http:///learn/course/2/lecture/97/2023/11/20源文件編碼也就是代碼文件的編碼,文件不僅可以保存代碼,而且還可以對數(shù)據(jù)進行存儲文件保存數(shù)據(jù)也是有編碼的,如果源文件中有中文,那么直接按照默認的編碼方式運行Python文件的時候會出現(xiàn)編碼錯誤,若想要在源碼中寫非ASCII文字,可以在源碼文件開頭加入一行:或者聚類分析源文件編碼2023/11/20這個指使用終端顯示的時候會出現(xiàn)的問題windows中文版終端用的是CP936,通常被等同認為是GBK而linux系統(tǒng)終端用的是utf-8所以若不想在終端打印顯示出來的字符出現(xiàn)亂碼,則在打印前需要將打印的內容按照終端相同的編碼方式進行轉換聚類分析終端編碼2023/11/20在數(shù)據(jù)分析中,出現(xiàn)編碼問題最多的還是在文件讀寫這個階段使用read()讀取的文件內容,得到的是str格式的聚類分析文件讀寫編碼2023/11/20用UTF-8解碼再用GBK編碼打印出來的是亂碼,這就是編碼不同導致的亂碼聚類分析文件讀寫編碼2023/11/20用write()方法寫入的時候也需要是str格式。也就是說,如果寫入的數(shù)據(jù)是unicode時,將會出錯聚類分析文件讀寫編碼2023/11/20解決辦法:先將unicode格式編碼為str,再寫入聚類分析文件讀寫編碼2023/11/20如果你發(fā)現(xiàn)常用的

gbk、

utf-8編碼解碼都沒辦法解決亂碼問題,那么有可能該文本使用了這兩種之外的編碼方式chardet是一個Python包,提供測試文本的編碼方法,最后返回的是對編碼方法的一個估計聚類分析編碼檢測工具——chardet2023/11/20總結ASCII,GBK,Unicode編碼和解碼亂碼問題:Python解釋器設置的默認編碼、源文件的編碼、終端編碼Python

2.x和Python

3.x版本的字符串編碼檢測工具chardet2023/11/20第八部分

編寫函數(shù)處理數(shù)據(jù)函數(shù)的語法規(guī)則參數(shù)設定lambda函數(shù)2023/11/20實例:平方函數(shù),輸入變量x返回其平方值x2函數(shù)的語法規(guī)則2023/11/20函數(shù)的語法規(guī)則2023/11/20幾種參數(shù)設定方法順序傳入關鍵詞默認參數(shù)不定長參數(shù)參數(shù)設定2023/11/20按照輸入?yún)?shù)列表的順序傳入x=1,y=2,z=3聚類分析順序傳入2023/11/20直接在參數(shù)列表里設定關鍵詞確定聚類分析關鍵詞2023/11/20可以將位置和關鍵詞的方法混合使用如果傳入的第一個參數(shù)是用關鍵詞傳入的,那么后面每個參數(shù)都需要是關鍵詞傳入,否則會出現(xiàn)語法錯誤聚類分析關鍵詞2023/11/20輸入的參數(shù)可以是事先設定好賦值,也就是默認值。在調動函數(shù)的時候,可以不輸入?yún)?shù),函數(shù)內部會直接調用默認參數(shù)值。例如默認z=3聚類分析默認參數(shù)2023/11/20默認參數(shù)的默認值是可以修改的,將上面的z值傳入設置為4

需要注意的是,默認參數(shù)必須放到參數(shù)列表的末位聚類分析默認參數(shù)2023/11/20這是為了解決,不確定需要傳入?yún)?shù)個數(shù)的情況聚類分析不定長參數(shù)*args2023/11/20*args如果輸入是一個list,那么可以用*list

的方式傳入聚類分析不定長參數(shù)*args2023/11/20函數(shù)定義時,*可以將按位置傳遞進來的參數(shù)“打包”成元組(tuple)類型函數(shù)調用時,*可以“解壓”待傳遞到函數(shù)中的元組、列表、集合、字符串等類型,并按位置傳遞到函數(shù)入口參數(shù)中聚類分析不定長參數(shù)*args2023/11/20*args*args傳入的時候,如果調用函數(shù)使用關鍵詞傳入?yún)?shù)時會出錯不定長參數(shù)聚類分析不定長參數(shù)*args2023/11/20**kwargs**kwargs

的出現(xiàn)便是解決需要傳入特定關鍵詞參數(shù)的情況聚類分析不定長參數(shù)**kwargs2023/11/20聚類分析常見包中的不定參數(shù)scikit-learn中的測試集訓練集劃分函數(shù)def

train_test_split(*array,**options)2023/11/20函數(shù)定義時*可以將按位置傳遞進來的參數(shù)“打包”成元組(tuple)類型

**可以將按關鍵字傳遞進來的參數(shù)“打包”成字典(dictionary)類型聚類分析函數(shù)定義與調用時,不定長參數(shù)的傳入函數(shù)調用時*可以“解壓”待傳遞到函數(shù)中的元組、列表、集合、字符串等類型,并按位置傳遞到函數(shù)入口參數(shù)中

**可以“解壓”待傳遞到函數(shù)中的字典,并按關鍵字傳遞到函數(shù)入口參數(shù)中2023/11/20簡化的函數(shù)定義方式lambda函數(shù)2023/11/20總結位置傳入、關鍵詞、默認參數(shù)、不定長參數(shù)參數(shù)定義的順序:必選參數(shù)、默認參數(shù)、可變參數(shù)和關鍵字參數(shù)函數(shù)的語法規(guī)則lambda函數(shù)2023/11/20第九部分

變量作用域局部變量全局變量局部變量轉為全局變量同名變量引用2023/11/20聚類分析局部變量局部變量是指那些有固定的變量作用域,只有在此作用域內才能調用此變量。具體而言,比如函數(shù)內的局部變量的作用域僅限于函數(shù)內。以下建立一個新的函數(shù),命名為mean(),用于求平均局部變量2023/11/20聚類分析局部變量在關鍵詞

def

定義函數(shù)的范圍內,新定義/賦值的變量都是局部變量,在該函數(shù)之外引用函數(shù)內命名的變量的時候會報錯2023/11/20聚類分析局部變量同理,在局部區(qū)域引用局部區(qū)域以外的變量,也會引起報錯。2023/11/20全局變量全局變量是相對局部變量而言的作用范圍在全局,即在初始定義賦值后,無論是函數(shù)、類、lambda函數(shù)內都可以引用全局變量。在關鍵詞

def

、class、lambda之外定義的變量,都作為全局變量。在上面的mean()函數(shù)內定義的length變量移至關鍵詞

def之外即變?yōu)槿肿兞浚喝肿兞?023/11/20有時候會有在函數(shù)內定義的局部變量在函數(shù)外引用的需求,比如前面的mean()函數(shù)中最開始"length"定義時是局部變量,現(xiàn)只需要在定義變量時使用關鍵詞"global"即可將其定義為全局變量局部變量轉為全局變量2023/11/20當某局部變量和全局變量都有相同變量名時,函數(shù)內引用該變量會直接調用函數(shù)內定義的局部變量。問題:如果有嵌套函數(shù),并且有多個同名變量該怎么辦?同名變量引用2023/11/20聚類分析LEGB原理簡要介紹當一個函數(shù)體內需要引用一個變量的時候,會按照如下順序查找:首先查找局部變量(Locals);如果找不到叫做該名稱的局部變量,則去函數(shù)體的外層去尋找局部變量(Enclosingfunctionlocals)。(適用于嵌套函數(shù)的情況)如果函數(shù)體外部的局部變量中也找不到叫做該名稱的局部變量,則從全局變量(Global)中尋找。再找不到,只好去找內置庫(Bulit-in)像C語言就沒有這種機制,局部區(qū)找不到就直接跳到靜態(tài)變量(static)區(qū)了當前??蚯耙粋€棧框再前一個??蛉謪^(qū)(棧底)……2023/11/20第十部分Python中的模塊模塊簡介數(shù)據(jù)分析領域常用的包搜索路徑管理模塊的導入利用csv、pandas導入數(shù)據(jù)缺失值處理使用matplotlib繪圖2023/11/20模塊簡介內置電池(batteries

included)

基礎代碼庫,覆蓋了網(wǎng)絡通信、文件處理、數(shù)據(jù)庫接口、圖形系統(tǒng)、XML處理第三方工具包Pandas:數(shù)據(jù)處理與分析Numpy:科學計算BeautifulSoup4:處理HTML文檔Matplotlib:繪圖Scikit-learn:基于SciPy和Numpy的開源機器學習模塊Tensorflow:深度學習框架2023/11/20Python程序的架構

Python程序的構架指:將一個程序分割為源代碼文件的集合以及將這些部分連接在一起的方法Python源代碼文件:*.py一個py文件是一個模塊(module)多個模塊可以組成一個包(package)模塊1函數(shù)類模塊2函數(shù)類包2023/11/20模塊的執(zhí)行環(huán)境模塊的執(zhí)行環(huán)境:模塊包含變量、函數(shù)、類以及其他的模塊(如果導入的話),而函數(shù)也有自己的本地變量模塊內的情況及模塊的交互模塊全局變量局部變量函數(shù)成員類變量import其他模塊(Python或C)變量函數(shù)類其他模塊(Python或C)變量函數(shù)類importimport2023/11/20模塊的作用pyproject__init__.pymodule0.pyPackage_a__init__.pymodule1.pymodule2.pyPackage_b__init__.pymodule3.py模塊是Python中的最高級別組織單元,它將程序代碼和數(shù)據(jù)封裝起來以便重用模塊的三個角色:代碼重用系統(tǒng)命名空間的劃分(模塊可理解為變量名的封裝,即模塊就是命名空間)實現(xiàn)共享服務和數(shù)據(jù)一個簡單的Python項目2023/11/20數(shù)據(jù)庫IO類數(shù)據(jù)分析領域常用的包2023/11/20描述性

統(tǒng)計類文本基本操作2023/11/20回歸假設檢驗時間序列支持向量機(SVM)2023/11/20模塊的導入pyproject__init__.pymodule0.pyPackage_a__init__.pymodule1.pymodule2.pyPackage_b__init__.pymodule3.py導入從本質上講,就是在一個文件中載入另一個文件,并且能夠讀取那個文件的內容。一個模塊內的內容通過這樣的方法其屬性(object,attribute)能夠被外界使用2023/11/20模塊導入的方式pyproject__init__.pymodule0.pyPackage_a__init__.pymodule1.pymodule2.pyPackage_b__init__.pymodule3.pyimport

Package_a.module1import

Package_b.module3from

Package_a.module1

import*import

module0from

module0

import*import

Package_a.module1

as

m1t

=

m1.Test()from

Package_a.module1

import*t

=

Test()注意使用區(qū)別import

xfrom

x

import

*from

x

import

a,b,c①②③2023/11/20模塊的方式非常簡單,在"import"后加上"模塊名稱"就可以了。通過這一句,計算機就在指定的位置找到了"numpy.py"文件,并準備好該文件擁有的之后會用到的函數(shù)和屬性。在導入"numpy"后,我們就可以通過點符號"."連接模塊名稱和函數(shù)名,使用該模塊中的函數(shù)和屬性。導入整個模塊2023/11/20指定的方式是采用"import

模塊名稱as

別名"。我們可以將"numpy"簡記為"np",并且在調用時,直接使用"np"就可以:別名2023/11/20此過程的實現(xiàn)方式是“from

模塊名稱

import

函數(shù)名稱",但是要注意我們只拿到了某個具體的工具,而沒有拿到整個工具箱只導入某個對象2023/11/20import模塊時,Python都做了哪些事情?是使用當前存在的模塊對象Python解釋器檢查module

registry(sys.modules)部分模塊先前是否已經(jīng)導入?否①創(chuàng)建一個新的、空的module對象②在sys.module字典中插入該模塊對象③加載該模塊代碼所對應的對象然后在新的模塊命名空間、執(zhí)行該模塊代碼對象(codeobject)。所有由該代碼指定的變量均可以通過該模塊對象引用2023/11/20import搜索的路徑順序①程序的主目錄②PYTHONPATH(環(huán)境變量)目錄③標準鏈接庫目錄④任何.pth文件的內容以上四個組件組合起來就變成了sys.path,其保存了模塊搜索路徑在機器上的實際配置,可以通過打印內置的sys.path

列表來查看這些路徑搜索路徑①和③是系統(tǒng)自定義的,而②和④可以用于拓展路徑,從而加入自己的源代碼目錄2023/11/20通過.pth文件修改搜索路徑通過site模塊的getsitepackages()

函數(shù)獲得包文件位置新建

myworkpath.pth

文件,列出模塊搜索路徑2023/11/20將myworkpath.pth

文件放在包文件目錄下查看路徑是否添加成功2023/11/20臨時修改模塊搜索路徑使用sys.path在Python程序運行時臨時修改模塊搜索路徑。2023/11/20我們將使用一份包含5000個樣本的美國高中生社交網(wǎng)絡信息數(shù)據(jù)集。數(shù)據(jù)均采樣于2006年,對應于高中四年級的畢業(yè)生。每個樣本包含40個變量,其中"gradyear"、"gender"、"age"和"friends"四個變量分別代表畢業(yè)生的畢業(yè)年份、性別、年齡和好友數(shù)。社交網(wǎng)絡信息數(shù)據(jù)集介紹利用CSV模塊導入數(shù)據(jù)利用csv模塊導入數(shù)據(jù)2023/11/20其余36個變量代表了36個詞語,這36個詞語代表了畢業(yè)生的5大基本特征:課外活動、時尚、宗教、浪漫和反社會行為。每個詞語變量的取值代表對應的詞語在高中生的社交網(wǎng)絡服務平臺發(fā)布的消息中出現(xiàn)的頻次。社交網(wǎng)絡信息數(shù)據(jù)集介紹2023/11/20通過“csv”模塊導入數(shù)據(jù)集文件

teenager_sns.csv

中的數(shù)據(jù)利用CSV模塊導入數(shù)據(jù)2023/11/20讀完數(shù)據(jù)后,我們得到一個二維列表"teenager_sns",列表中的一個元素為文件中的一行,第一個元素為變量名列表,之后的一個元素對應著一個樣本。我們以第一個元素和第二個元素為例:我們發(fā)現(xiàn)所有的變量值都為字符型,所以在后面的分析中需要對數(shù)據(jù)進行類型轉換。在導入數(shù)據(jù)之后,我們首先要做的事情就是初探我們的數(shù)據(jù)。利用CSV模塊導入數(shù)據(jù)2023/11/20利用CSV模塊導入數(shù)據(jù)2023/11/20缺失值處理接下來,我們來分析一下數(shù)據(jù)集中的

age變量,看看美國高中畢業(yè)生的年齡特征。為了得到完整的

age列表,我們使用了以下方式:2023/11/20缺失值處理我們先來看看缺失值的占比情況2023/11/20缺失值處理計算得到的缺失值占比為0.1602,也就是說,大約每5個樣本里就有一個樣本有缺失值,這樣的占比還是比較大的,所以我們不能直接刪除存在缺失值的樣本,直接刪除會影響數(shù)據(jù)的客觀性和結果的準確性。一種非常合理的方式是使用均值對缺失值進行填補。2023/11/20缺失值處理下面,我們對數(shù)據(jù)集中的畢業(yè)生年齡進行分析,我們使用Python內置的

max()

min()

函數(shù)得到

age_without_missing

中的最大值和最小值:這種偏離變量實際范圍的值稱為異常值。我們將在類的部分對異常值進行檢測和處理。2023/11/20社交網(wǎng)絡信息數(shù)據(jù)集介紹利用CSV模塊導入數(shù)據(jù)利用pandas導入數(shù)據(jù)利用pandas將數(shù)據(jù)存入一個DataFrame數(shù)據(jù)結構中2023/11/20得到了一個pandas內置的DataFrame類的實例提取age列,并得到其描述統(tǒng)計信息2023/11/20使用pandas內置的mean()和fillna()方法進行缺失值填補2023/11/20使用pandas內置的hist()方法畫出缺失值填補后的年齡分布圖2023/11/20社交網(wǎng)絡信息數(shù)

溫馨提示

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

評論

0/150

提交評論