版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章Python網(wǎng)絡(luò)爬蟲《Python數(shù)據(jù)分析與應(yīng)用》網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲(WebSpider),又被稱為網(wǎng)頁蜘蛛或網(wǎng)絡(luò)機(jī)器人,通過一定的規(guī)則自動(dòng)地抓取網(wǎng)絡(luò)信息。網(wǎng)絡(luò)爬蟲就是根據(jù)網(wǎng)址獲取網(wǎng)頁信息。例如,當(dāng)輸入網(wǎng)址:/,瀏覽器向DNS服務(wù)器發(fā)出請(qǐng)求,經(jīng)過解析,將發(fā)送給瀏覽器的HTML、JS、CSS等文件解析出來,便成了百度內(nèi)容。爬蟲流程爬取
Python提供了requests等庫實(shí)現(xiàn)HTTP請(qǐng)求操作,獲取網(wǎng)頁的源代碼。
Requests
方法解釋requests.get()獲取html的主要方法requests.head()獲取html頭部信息的主要方法requests.post()向html網(wǎng)頁提交post請(qǐng)求的方法requests.put()向html網(wǎng)頁提交put請(qǐng)求的方法requests.patch()向html提交局部修改的請(qǐng)求requests.delete()向html提交刪除請(qǐng)求Requests
importrequestsr=requests.get(url='http://www……')#GET請(qǐng)求print(r.status_code)#獲取返回狀態(tài)print(r.url)print(r.text)#打印解碼后的返回?cái)?shù)據(jù)解析從網(wǎng)頁源代碼中提取有用的信息。方法1:采用正則表達(dá)式提取,但是在構(gòu)造正則表達(dá)式時(shí)比較復(fù)雜且容易出錯(cuò)。方法2:由于網(wǎng)頁的結(jié)構(gòu)有一定的規(guī)則,可以利用BeautifulSoup、pyquery、lxml等庫提取網(wǎng)頁節(jié)點(diǎn)屬性、CSS選擇器等網(wǎng)頁信息。
存儲(chǔ)將提取到的數(shù)據(jù)保存到某處以便后續(xù)處理和分析,可以保存為TXT文本或JSON文本,也可以保存到MySQL和MongoDB等數(shù)據(jù)庫。正則表達(dá)式
正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法,是指通過事先定義好的特定字符(“元字符”)組成的“規(guī)則字符串”,對(duì)字符串進(jìn)行過濾邏輯。凡是符合規(guī)則的字符串,認(rèn)為“匹配”,否則,不“匹配”。
正則表達(dá)式
采用正則表達(dá)式判斷一個(gè)字符串是否包含合法的Email,需要?jiǎng)?chuàng)建一個(gè)匹配Email的正則表達(dá)式,然后通過該正則表達(dá)式去判斷。正則表達(dá)式元字符含義輸入輸出.匹配任意字符
a.cAbc^匹配開始位置^abcAbc$匹配結(jié)束位置abc$Abc*
匹配前一個(gè)元字符0到多次abc*ab;abccc+匹配前一個(gè)元字符1到多次abc+abc;abccc?匹配前一個(gè)元字符0到1次abc?ab;abcre模塊fIndall()compile()match()search()replace()split()Python中的re模塊提供了一個(gè)正則表達(dá)式引擎接口,允許將正則表達(dá)式編譯成模式對(duì)象,通過這些模式對(duì)象執(zhí)行模式匹配搜索和字符串分割、子串替換等操作。Findall()>>>importre>>>p=pile(r'\d+')>>>print(p.findall('o1n2m3k4'))['1','2','3','4']search()>>>importre>>>a="123abc456">>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))123abc456>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))123>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))abc>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))456Match()>>>importre>>>print(re.match('www','').span())#在起始位置匹配(0,3)>>>print(re.match('com',''))#不在起始位置匹配Nonesplit()1)只傳一個(gè)參數(shù),默認(rèn)分割整個(gè)字符串>>>str="a,b,c,d,e";>>>str.split(',');["a","b","c","d","e"]split()2)傳入兩個(gè)參數(shù),返回限定長度的字符串>>>str="a,b,c,d,e";>>>str.split(',',3);["a","b","c"]
split()3)使用正則表達(dá)式匹配,返回分割的字符串>>>str="aa44bb55cc66dd";>>>print(re.split('\d+',str))["aa","bb","cc","dd"]BeautifulSouplxml作為BeautifulSoup庫解析器BeautifulSoup
BeautifulSoup將HTML文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都是Python對(duì)象BeautifulSoupfromurllib.requestimporturlopenfrombs4importBeautifulSoup#導(dǎo)入BeautifulSoup對(duì)象html=urlopen('/new100.html')#打開url,獲取html內(nèi)容bs_obj=BeautifulSoup(html.read(),'html.parser')#把html內(nèi)容傳到BeautifulSoup對(duì)象
text_list=bs_obj.find_all("a","navmore")#找到”class=navmore”的a標(biāo)簽fortextintext_list:print(text.get_text())#打印標(biāo)簽的文本html.close()#關(guān)閉文件動(dòng)態(tài)網(wǎng)頁的內(nèi)容由JavaScript動(dòng)態(tài)加載生成,而Request模塊不能執(zhí)行JS和CSS代碼。一般采用Selenium抓取動(dòng)態(tài)網(wǎng)頁的數(shù)據(jù),Selenium最初是Web的測(cè)試工具,可以操作瀏覽器,像BeautifulSoup一樣得到html頁面元素。SeleniumSeleniumphantomjs不同的瀏覽器,如IE、Chrome、Firefox等,WebDriver需要不同的驅(qū)動(dòng)來實(shí)現(xiàn)。
在Firefox瀏覽器webdriver驅(qū)動(dòng)下載網(wǎng)址/mozilla/geckodriver/releases,下載geckodriver.exe文件。
Selenium Scrapy是Python開發(fā)的抓取框架,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。在anacondaPrompt下使用命令:pipinstallScrapy進(jìn)行安裝爬蟲框架ScrapyScrapy是爬取網(wǎng)站數(shù)據(jù)的應(yīng)用框架,可以進(jìn)行定制化爬取。爬蟲框架Scrapy爬取網(wǎng)站數(shù)據(jù)的應(yīng)用框架,可以進(jìn)行定制化爬取。步驟1:創(chuàng)建一個(gè)Scrapy項(xiàng)目
步驟2:設(shè)置數(shù)據(jù)存儲(chǔ)模板,填寫Item.py文件步驟3:編寫爬取網(wǎng)站的
spider,填寫meiju.py文件步驟4:編寫settings.py配置文件步驟5:編寫數(shù)據(jù)處理的Pipeline.py文件,存儲(chǔ)提取到的Item數(shù)據(jù)爬蟲框架Scrapy第7章Python與數(shù)據(jù)分析《Python數(shù)據(jù)分析與應(yīng)用》啤酒與尿布“啤酒與尿布”。該故事產(chǎn)生于20世紀(jì)90年代的美國沃爾瑪超市,超市管理人員分析銷售數(shù)據(jù)時(shí)發(fā)現(xiàn)了一個(gè)令人難于理解的現(xiàn)象——“啤酒”與“尿布”兩件看上去毫無關(guān)系的商品會(huì)經(jīng)常出現(xiàn)在年輕的父親的同一個(gè)購物籃。這是由于在美國有嬰兒的家庭中,母親留在家中照看嬰兒,父親去超市購買尿布。父親在購買尿布的同時(shí),往往會(huì)順便為自己購買啤酒。至此,超市人員將屬于食品飲料的“啤酒”和屬于生活用品的“尿布”擺放在一處,從而致使兩種商品的銷售量直線上升。數(shù)據(jù)分析流程(1)明確目標(biāo)(2)獲取數(shù)據(jù)(3)清洗數(shù)據(jù)(4)特征工程(5)構(gòu)建模型(6)模型評(píng)估。明確目標(biāo)這是數(shù)據(jù)分析與挖掘的第一步,即明確數(shù)據(jù)分析的對(duì)象、目標(biāo)、或任務(wù)。此環(huán)節(jié)應(yīng)該跟業(yè)務(wù)需求方多次溝通與合作,把握最終要解決的問題。規(guī)劃哪些數(shù)據(jù)可能會(huì)影響到這些問題的答案,這一步就稱為數(shù)據(jù)的獲取過程。數(shù)據(jù)獲取數(shù)據(jù)清洗為確保數(shù)據(jù)分析或挖掘結(jié)果的準(zhǔn)確性,往往需要對(duì)數(shù)據(jù)做一些基本的清洗和整理,如數(shù)據(jù)的一致性檢驗(yàn)、缺失值和異常值的處理等。特征工程通過Scipy、Pandas、Sklearn等分析庫對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一量綱等標(biāo)準(zhǔn)化處理,對(duì)數(shù)據(jù)進(jìn)行離散化處理,采用啞變量、獨(dú)熱編碼進(jìn)行數(shù)據(jù)重編碼,實(shí)施特征工程。模型評(píng)估通常情況下,在模型搭建好后,并不意味著分析或挖掘任務(wù)的結(jié)束,還需要對(duì)模型的擬合效果做評(píng)估,其目的就是不斷優(yōu)化模型,使最終的模型能夠更好地反映數(shù)據(jù)的真實(shí)性。構(gòu)建模型建模的目的主要是為了預(yù)測(cè),例如使用線性回歸模型預(yù)測(cè)產(chǎn)品的銷售額;利用決策樹模型預(yù)測(cè)用戶是否具有欺詐行為;利用樸素貝葉斯模型預(yù)測(cè)郵件是否為垃圾郵件。Python數(shù)據(jù)分析庫庫名簡
介Numpy提供數(shù)組支持,以及相應(yīng)的高效處理函數(shù)Matplotlib強(qiáng)大的數(shù)據(jù)可視化工具、作圖庫Pandas強(qiáng)大的數(shù)據(jù)分析、數(shù)據(jù)處理和數(shù)據(jù)清洗工具seaborn數(shù)據(jù)可視化工具、作圖庫Scipy提供矩陣支持,以及矩陣相關(guān)的數(shù)值計(jì)算模塊sklearn經(jīng)典的機(jī)器學(xué)習(xí)庫NumpyNumPy是Python的數(shù)據(jù)分析的基本庫,是在Python的Numeric數(shù)據(jù)類型的基礎(chǔ)上,引入Scipy模塊中針對(duì)數(shù)據(jù)對(duì)象處理的功能,用于數(shù)值數(shù)組和矩陣類型的運(yùn)算、矢量處理等。MatplotlibMatplotlib具有兩個(gè)重要的模塊——pylab和pyplot。Pylab實(shí)現(xiàn)了MATLAB的繪圖功能,就是MATLAB的Python版本。pyplot主要用于將NumPy統(tǒng)計(jì)結(jié)果可視化,可以繪制線圖、直方圖、餅圖、散點(diǎn)圖以及誤差線圖等各種圖形。Pandas
Pandas的名稱來源于面板數(shù)據(jù)(PanelData)和Python數(shù)據(jù)分析(DataAnalysis),作為Python進(jìn)行數(shù)據(jù)分析和挖掘時(shí)的數(shù)據(jù)基礎(chǔ)平臺(tái)和事實(shí)上的工業(yè)標(biāo)準(zhǔn),支持關(guān)系型數(shù)據(jù)的增、刪、改、查,具有豐富的數(shù)據(jù)處理函數(shù),支持時(shí)間序列分析功能,靈活處理缺失數(shù)據(jù)等。seabornSeaborn是圖形可視化python包,作為matplotlib的補(bǔ)充,在其基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,高度兼容numpy與pandas數(shù)據(jù)結(jié)構(gòu)以及scipy等統(tǒng)計(jì)模式,能做出具有吸引力的圖。ScipyScipy是2001年發(fā)行的類似于Matlab和Mathematica等數(shù)學(xué)計(jì)算軟件的Python庫,用于統(tǒng)計(jì)、優(yōu)化、整合、線性代數(shù)模塊、傅里葉變換、信號(hào)和圖像處理等數(shù)值計(jì)算。scipy具有stats(統(tǒng)計(jì)學(xué)工具包)、erpolate(插值,線性的,三次方)、cluster(聚類)、signal(信號(hào)處理)等模塊。SklearnSklearn(又稱為scikit-learn)是簡單高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析工具,基于python語言的NumPy、SciPy和matplotlib庫之上,是當(dāng)前較為流行的機(jī)器學(xué)習(xí)框架。數(shù)據(jù)分類定類數(shù)據(jù):表示個(gè)體在屬性上的特征和類別上的不同變量,只是一種標(biāo)志,沒有次序關(guān)系,不可以直接測(cè)量的數(shù)據(jù)。如外貌,出生地等。定序數(shù)據(jù):表示個(gè)體在某個(gè)有序狀態(tài)中所處的位置,不能直接做四則運(yùn)算。如學(xué)歷分為初中、高中、大學(xué)、碩士、博士等。定量數(shù)據(jù):定量數(shù)據(jù)又稱為定距數(shù)據(jù),具有間距特征的變量,可以直接測(cè)量的數(shù)據(jù),如身高、體重、氣溫等。數(shù)據(jù)統(tǒng)計(jì)量(1)極差極差又稱范圍誤差或全距,用來衡量指定變量間差異變化范圍,是最大值與最小值的差距,用于標(biāo)志值變動(dòng)的最大范圍。通常極差越大,樣本變化范圍越大。(2)平均數(shù)平均值用于測(cè)量數(shù)據(jù)集中趨勢(shì),計(jì)算公式是所有數(shù)據(jù)之和除以數(shù)據(jù)的個(gè)數(shù)。數(shù)據(jù)統(tǒng)計(jì)量(3)中位數(shù)中位數(shù)是指將樣本數(shù)值集合劃分為數(shù)量相等或相差1的上下兩部分。對(duì)于有限的數(shù)集,可以通過把所有觀察值高低排序后找出正中間的一個(gè)作為中位數(shù)。如果觀察值有偶數(shù)個(gè),通常取最中間的兩個(gè)數(shù)值的平均數(shù)作為中位數(shù)。(4)眾數(shù)眾數(shù)是樣本觀測(cè)值在頻數(shù)分布表中頻數(shù)最多的那組數(shù)。例如:1,2,2,2,3,3,4的眾數(shù)是2。如果所有數(shù)據(jù)出現(xiàn)的次數(shù)都一樣,那么這組數(shù)據(jù)沒有眾數(shù)。例如:1,2,3,4,5沒有眾數(shù)。數(shù)據(jù)統(tǒng)計(jì)量(5)方差方差是實(shí)際值與期望值之差平方的平均值,方差是在概率論和統(tǒng)計(jì)方差衡量隨機(jī)變量或一組數(shù)據(jù)是離散程度的度量。(6)協(xié)方差協(xié)方差用于衡量兩個(gè)變量的總體誤差,兩個(gè)變量是否相對(duì)它們各自平均值有一致行為。1)如果兩個(gè)變量同時(shí)處于平均值之上或之下,兩個(gè)變量就是正關(guān)聯(lián)性。2)如果兩個(gè)變量一個(gè)處于平均值之上,另一個(gè)處于平均值之下,就是負(fù)關(guān)聯(lián)性。當(dāng)兩個(gè)變量相同時(shí),協(xié)方差就是方差。數(shù)據(jù)統(tǒng)計(jì)量皮爾森相關(guān)系數(shù)度量兩個(gè)變量之間的相關(guān)程度其值介于-1與+1之間,表示兩變量存在一定程度的相關(guān),越接近1,兩變量間線性關(guān)系越密切;越接近于0,表示兩變量的線性相關(guān)越弱
數(shù)據(jù)可視化數(shù)據(jù)可視化是指將大型數(shù)據(jù)集中的數(shù)據(jù)以統(tǒng)計(jì)圖表和圖形圖像形式呈現(xiàn),表現(xiàn)抽象或復(fù)雜的概念、技術(shù)和信息,并利用數(shù)據(jù)分析和開發(fā)工具發(fā)現(xiàn)其中未知信息的處理過程。數(shù)據(jù)可視化起源于1960年代計(jì)算機(jī)圖形學(xué),通過計(jì)算機(jī)創(chuàng)建圖形圖表,將數(shù)據(jù)的各種屬性和變量呈現(xiàn)出來,通過餅圖、直方圖、散點(diǎn)圖、柱狀圖等原始的統(tǒng)計(jì)圖表將數(shù)據(jù)可視化是最基礎(chǔ)和常見應(yīng)用。折線圖折線圖又名線形圖,或折線統(tǒng)計(jì)圖,是以折線的上升或下降表示數(shù)量變化的統(tǒng)計(jì)圖。折線圖不僅可以表示數(shù)量的多少,而且反映同一事物在不同時(shí)間里數(shù)據(jù)的變化趨勢(shì)。
餅圖餅圖屬于最傳統(tǒng)的統(tǒng)計(jì)圖形之一,通過各扇形面積的大小反映部分與部分,部分與總體的比例關(guān)系。但不擅長對(duì)比差異不大或水平值過多的離散型變量。散點(diǎn)圖散點(diǎn)圖又稱為散點(diǎn)分布圖,和折線圖需要的數(shù)組非常相似,區(qū)別是折線圖會(huì)將各數(shù)據(jù)點(diǎn)連接起來;而散點(diǎn)圖則只是描繪各數(shù)據(jù)點(diǎn),并不會(huì)將這些數(shù)據(jù)點(diǎn)連接起來。直方圖直方圖又稱質(zhì)量分布圖,由一系列高度不等的縱向條紋和線段表示數(shù)據(jù)分布形態(tài),一般用橫軸表示數(shù)據(jù)所屬類別,縱軸表示數(shù)量或者占比。條形圖條形圖是統(tǒng)計(jì)圖資料分析中最常用的圖形,又名柱狀圖,可以清楚地表明各種數(shù)量的多少,用來描述各個(gè)類別之間的關(guān)系。箱線圖箱線圖又稱箱形圖或盒式圖,主要用于分析數(shù)據(jù)內(nèi)部的分布狀態(tài)或分散狀態(tài),不同于折線圖、柱狀圖或餅圖等傳統(tǒng)圖表只是數(shù)據(jù)大小、占比、趨勢(shì)的呈現(xiàn)。箱線圖包含統(tǒng)計(jì)學(xué)的均值、分位數(shù)、極值等統(tǒng)計(jì)量,用于分析不同類別數(shù)據(jù)平均水平差異,展示屬性與中位數(shù)離散速度,并揭示數(shù)據(jù)間離散程度、異常值、分布差異等。箱線圖是一種基于“五位數(shù)”摘要顯示數(shù)據(jù)分布的標(biāo)準(zhǔn)化方法熱力圖熱力圖又稱為熱點(diǎn)圖,也稱為交叉填充表,展示兩個(gè)離散變量的組合關(guān)系,通過每個(gè)單元格顏色的深淺代表數(shù)值的高低以及差異情況。第8章
Numpy《Python數(shù)據(jù)分析與應(yīng)用》NumPy NumPy是Python的開源數(shù)字?jǐn)U展,定義了數(shù)值數(shù)組和矩陣類型以及基本運(yùn)算的語言擴(kuò)展,用于矩陣數(shù)據(jù)、矢量處理等。 Numpy的官方網(wǎng)址/NumPyndarray屬性名含義ndarray.ndim數(shù)組的軸(維度)的數(shù)量ndarray.shape數(shù)組的維度。為一個(gè)整數(shù)元組,表示每個(gè)維度上的大小。對(duì)于一個(gè)n行m列的矩陣來說,shape就是(n,m)。shape元組的長度就是秩(或者維度的數(shù)量)ndim。ndarray.size數(shù)組的元素的總個(gè)數(shù)。這等于shape元素的乘積。ndarray.dtype用來描述數(shù)組中元素類型的對(duì)象。ndarray.itermsize數(shù)組的每個(gè)元素的字節(jié)大小。例如,一個(gè)類型為float64的元素的數(shù)組itemsize為8。ndarray.data該緩沖區(qū)包含了數(shù)組的實(shí)際元素。python提供array模塊,但是array不支持多維,也沒有各種運(yùn)算函數(shù),不適合做數(shù)值運(yùn)算。
而numpy提供的同質(zhì)多維數(shù)組ndarray正好彌補(bǔ)以上不足。創(chuàng)建數(shù)組ArrayArangeLinspacelogspace1.array創(chuàng)建數(shù)組importnumpyasnp#引入numpy庫a=np.array([[1,5],[4,5,7]])#創(chuàng)建數(shù)組,將元組或列表作為參數(shù)a5=np.array(([1,5,3,4,5],[6,7,8,9,5]))#創(chuàng)建二維的narray對(duì)象print(type(a))#a的類型是數(shù)組print(type(a5))print(a)print(a5)2.arange函數(shù)創(chuàng)建數(shù)組importnumpyasnpa=np.arange(15)#利用arange函數(shù)創(chuàng)建數(shù)組print(a)a5=np.arange(1,5,0.1)#arang函數(shù)和range函數(shù)print(a5)3.linspace用于創(chuàng)建指定數(shù)量等間隔的序列,實(shí)際生成一個(gè)等差數(shù)列importnumpyasnpa=np.linspace(0,1,15)#從0開始到1結(jié)束,共15個(gè)數(shù)的等差數(shù)列print(a)4.logspace用于生成等比數(shù)列importnumpyasnpa=np.logspace(0,5,5)#生成首位是10的0次方,末位是10的5次方,含5個(gè)數(shù)的等比數(shù)列print(a)查看數(shù)組importnumpyasnp#引入numpy庫a=np.array([[1,5],[4,5,7],3])#創(chuàng)建數(shù)組,將元組或列表作為參數(shù)a5=np.array(([1,5,3,4,5],[6,7,8,9,5]))#創(chuàng)建二維的narray對(duì)象print(type(a))#a的類型是數(shù)組print(a)print(a5)print(a.dtype)#查看a數(shù)組中每個(gè)元素的類型print(a6.dtype)#查看a5數(shù)組中每個(gè)元素的類型查看數(shù)組importnumpyasnp#引入numpy庫a=np.array([[1,5],[4,5,7],3])a5=np.array(([1,5,3,4,5],[6,7,8,9,5]))#創(chuàng)建二維narrayprint(a.shape)#查看數(shù)組的行列,3行print(a6.shape)#查看數(shù)組的行列,返回5行5列print(a.shape[0])#查看a的行數(shù)print(a6.shape[1])#查看a5的列數(shù)print(a.ndim)#獲取數(shù)組的維數(shù)print(a6.ndim)print(a6.T)#簡單轉(zhuǎn)置矩陣ndarray索引和切片importnumpyasnpa=np.array([[1,5,3,4,5],[6,7,8,9,5]])print(a)print(a[:])#選取全部元素print(a[1])#選取行為1的全部元素print(a[0:1])#截取[0,1)的元素print(a[1,5:5])#截取第二行第[5,5)的元素[895]print(a[1,:])#截取第二行,返回[67895]print(a[1,5])#截取行號(hào)為一,列號(hào)為5的元素8print(a[1][5])線性代數(shù)函
數(shù)z說明函
數(shù)說
明np.zeros生成零矩陣np.ones生成所有元素為1的矩陣np.eye生成單位矩陣np.transpose矩陣轉(zhuǎn)置np.dot計(jì)算兩個(gè)數(shù)組的點(diǎn)積np.inner計(jì)算兩個(gè)數(shù)組的內(nèi)積np.diag矩陣主對(duì)角線與一維數(shù)組間轉(zhuǎn)換np.trace矩陣主對(duì)角線元素的和np.linalg.det計(jì)算矩陣行列式np.linalg.eig計(jì)算特征根與特征向量np.linalg.eigvals計(jì)算方陣特征根np.linalg.inv計(jì)算方陣的逆np.linalg.pinv計(jì)算方陣的Moore-Penrose偽逆np.linalg.solve計(jì)算Ax=b線性方程組解np.linalg.lstsq計(jì)算Ax=b的最小二乘解np.linalg.qr計(jì)算QR分解np.linalg.svd計(jì)算奇異值分解np.linalg.norm計(jì)算向量或矩陣的范數(shù)四則運(yùn)算importnumpyasnpimportnumpy.linalgaslg#求矩陣的逆需要先導(dǎo)入numpy.linalga1=np.array([[1,2,3],[4,5,6],[5,4,5]])a5=np.array([[1,5,4],[3,4,7],[7,5,6]])print(a1+a5)#相加print(a1-a5)#相減print(a1/a5)#對(duì)應(yīng)元素相除,如果都是整數(shù)則取商print(a1%a5)#對(duì)應(yīng)元素相除后取余數(shù)print(a1**5)#矩陣每個(gè)元素都取n次方矩陣運(yùn)算importnumpyasnpimportnumpy.linalgaslg#求矩陣的逆需要先導(dǎo)入numpy.linalga1=np.array([[1,2,3],[4,5,6],[5,4,5]])a5=np.array([[1,5,4],[3,4,7],[7,5,6]])print(a1.dot(a5))#點(diǎn)乘滿足:第一個(gè)矩陣的列數(shù)等于第二個(gè)矩陣的行數(shù)print(a1.transpose())#轉(zhuǎn)置等價(jià)于print(a1.T)print(lg.inv(a1))#用linalg的inv函數(shù)來求逆特征根和特征向量importnumpyasnparr=np.array([[1,2,5],[3,6,7],[4,2,9]])print('計(jì)算3×3方陣的特征根和特征向量:\n',arr)print('求解結(jié)果為:\n',np.linalg.eig(arr))多元一次方程組importnumpyasnp#多元線性方程組a=np.array([[1,3,5],[2,5,-1],[2,4,7]])b=np.array([10,6,4])x=np.linalg.solve(a,b)print(x)統(tǒng)計(jì)量函
數(shù)說明函
數(shù)說
明min(arr,axis)最小值cumsum(arr,axis)軸方向計(jì)算累計(jì)和max(arr,axis)最大值cumprod(arr,axis)軸方向計(jì)算累計(jì)乘積mean(arr,axis)平均值argmin(arr,axis)軸方向最小值所在的位置median(arr,axis)中位數(shù)argmax(arr,axis)軸方向最大值所在的位置sum(arr,axis)和corrcoef(arr)計(jì)算皮爾遜相關(guān)系數(shù)std(arr,axis)標(biāo)準(zhǔn)差cov(arr)計(jì)算協(xié)方差矩陣var(arr,axis)方差
平均值importnumpyasnpX=np.array([160,165,157,122,159,126,160,162,121])#方法1:num=len(X)sum=sum(X)mean=sum/numprint(mean)#方法2:mean=np.mean(X)print(mean)最值importnumpyasnpX=np.array([160,165,157,122,159,126,160,162,121])MIN=np.min(X)MAX=np.max(X)print(MIN)print(MAX)中位數(shù)importnumpyasnpX=np.array([160,165,157,122,159,126,160,162,121])median=np.median(X)print(median)極差importnumpyasnpa=np.array([[3,2,5],[7,4,3],[2,4,9]])print('數(shù)組是:',a)print('調(diào)用ptp()函數(shù):',np.ptp(a))print('沿軸1調(diào)用ptp()函數(shù):',np.ptp(a,axis=1))print('沿軸0調(diào)用ptp()函數(shù):',np.ptp(a,axis=0))方差importnumpyasnpX=np.array([1,5,6])var=X.var()print(var)協(xié)方差importnumpyasnpX=np.array([[1,5,6],[4,3,9],[4,2,9],[4,2,2]])cov=np.cov(X)print(cov)第9章
Matplotlib
《Python數(shù)據(jù)分析與應(yīng)用》MatplotlibMatplotlib發(fā)布于2007年,在其函數(shù)設(shè)計(jì)時(shí)參考MATLAB相關(guān)函數(shù),故命名以“Mat”開頭,“Plot”表示繪圖,“Lib”為集合。Matplotlib可以繪制線圖、直方圖、餅圖、散點(diǎn)圖以及誤差線圖等各種圖形,主要用于將NumPy統(tǒng)計(jì)計(jì)算結(jié)果可視化。Matplotlib官方網(wǎng)址為:/Matplotlib繪圖步驟Matplotlib畫圖流程大致分為如下步驟:步驟1:figure函數(shù)創(chuàng)建畫布,決定是否創(chuàng)建子圖。步驟2:使用plot函數(shù)繪制圖形。步驟3:設(shè)置繪圖對(duì)象的各種屬性。importmatplotlib.pyplotaspltfig=plt.figure()ax=fig.add_subplot(111)ax.set(xlim=[0.5,4.5],ylim=[-2,8],title='AnExample Axes‘,ylabel='Y-Axis',xlabel='X-Axis')plt.show()
繪圖函數(shù)Matplotlib中繪圖函數(shù)為plot,使用語法如下:plt.plot(x,y,color,marker,linestyle,**kwargs)參數(shù)接收值說明默認(rèn)值x,yarray表示x軸與y軸對(duì)應(yīng)的數(shù)據(jù);無colorstring表示折線的顏色;Nonemarkerstring表示折線上數(shù)據(jù)點(diǎn)處的類型;Nonelinestylestring表示折線的類型;-linewidth數(shù)值線條粗細(xì):linewidth=1.=5.=0.31alpha
0~1之間的小數(shù)表示點(diǎn)的透明度;Nonelabelstring數(shù)據(jù)圖例內(nèi)容:label=‘實(shí)際數(shù)據(jù)’None子圖Matplotlib提供如下三種方式繪制子圖:(1)通過plt的subplot;(2)通過figure的add_subplot;(3)通過plt的subplots。子圖subplot(233)表示在當(dāng)前畫布的右上角創(chuàng)建一個(gè)兩行三列的繪圖區(qū)域,選擇在第3個(gè)位置繪制子圖二維圖函數(shù)名稱描述函數(shù)名稱描述Bar繪制條形圖Polar繪制極坐標(biāo)圖Barh繪制水平條形圖Scatter繪制x與y的散點(diǎn)圖Boxplot繪制箱型圖Stackplot繪制堆疊圖Hist繪制直方圖Stem繪制二維離散數(shù)據(jù)(“火柴圖”)his2d繪制2D直方圖Step繪制階梯圖Pie繪制餅狀圖Quiver繪制一個(gè)二維按箭頭線性圖使用plot函數(shù)實(shí)現(xiàn)畫線。plot函數(shù)的第一個(gè)數(shù)組是橫軸的值,第二個(gè)數(shù)組是縱軸的值,最后一個(gè)參數(shù)表示線的顏色。importmatplotlib.pyplotaspltplt.plot([1,2,3],[3,6,9],'-r')plt.plot([1,2,3],[2,4,9],':g')plt.show()
散點(diǎn)圖
scatter函數(shù)用來繪制散點(diǎn)圖。scatter函數(shù)也需要兩組配對(duì)的數(shù)據(jù)指定x和y軸的坐標(biāo)。importmatplotlib.pyplotaspltimportnumpyasnp
N=20
plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='r',s=100,alpha=0.5)plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='g',s=200,alpha=0.5)plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='b',s=300,alpha=0.5)
plt.show()餅狀圖pie函數(shù)用來繪制餅狀圖,用來表達(dá)集合中各個(gè)部分的百分比。importnumpyasnplabels=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']data=np.random.rand(7)*100plt.pie(data,labels=labels,autopct='%1.1f%%')plt.axis('equal')plt.legend()plt.show()條形圖bar函數(shù)用來繪制條形圖,用來描述一組數(shù)據(jù)的對(duì)比情況,例如:一周七天,每天的城市車流量。直方圖直方圖用hist函數(shù)用來繪制,看起來與條形圖有些類似。但它們的含義是不一樣,直方圖描述了某個(gè)范圍內(nèi)數(shù)據(jù)出現(xiàn)的頻度。箱線圖importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltnp.random.seed(2)df=pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])#生成0~1的5*4維度數(shù)據(jù)并存入4列DataFrame中
df.boxplot()plt.show()#顯示圖像三維圖三維圖創(chuàng)建主要有如下兩種方式:(1)利用關(guān)鍵字projection='3d’來實(shí)現(xiàn)(2)通過從mpl_toolkits.mplot3d導(dǎo)入對(duì)象Axes3D來實(shí)現(xiàn)三維曲線圖frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp
ax=plt.axes(projection='3d')
#三維線的數(shù)據(jù)zline=np.linspace(0,15,1000)xline=np.sin(zline)yline=np.cos(zline)ax.plot3D(xline,yline,zline,'gray')三維散點(diǎn)圖importmatplotlib.pyplotaspltimportnumpyasnp
ax=plt.axes(projection='3d')
zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')三維等高線圖frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp
deff(x,y):returnnp.sin(np.sqrt(x**2+y**2))x=np.linspace(-6,6,30)y=np.linspace(-6,6,30)X,Y=np.meshgrid(x,y)Z=f(X,Y)
fig=plt.figure()ax=plt.axes(projection='3d')ax.contour3D(X,Y,Z,50,cmap='binary')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')#俯仰角設(shè)為60度,把方位角調(diào)整為35度ax.view_init(60,35)動(dòng)態(tài)圖matplotlib畫圖有阻塞和交互兩種顯示模式:(1)阻塞模式:采用plt.show顯示圖片,且圖片關(guān)閉之前代碼將阻塞在該行(2)交互模式:采用plt.plot顯示圖片,且不阻塞代碼的繼續(xù)運(yùn)行。Matplotlib中默認(rèn)是使用阻塞模式。
matplotlib的animation模塊實(shí)現(xiàn)動(dòng)態(tài)圖較為繁瑣。而交互式繪圖和暫停功能較為簡單,通過“畫圖-->清理-->畫圖”的循環(huán)實(shí)現(xiàn)動(dòng)態(tài)效果。相關(guān)函數(shù)如下所示:plt.ion():打開交互模式plt.ioff():關(guān)閉交互模式plt.clf():清除當(dāng)前的Figure對(duì)象plt.cla():清除當(dāng)前的Axes對(duì)象plt.pause():暫停功能概率分布泊松分布正態(tài)分布均勻分布二項(xiàng)分布泊松分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.poisson(9,10000)plt.hist(list,bins=8,color='b',alpha=0.4,edgecolor='r')plt.show()正態(tài)分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.normal(0,1,10000)plt.hist(list,bins=8,color='r',alpha=0.5,edgecolor='r')plt.show()均勻分布importnumpyasnpimportmatplotlib.pyplotasplt
list=np.random.uniform(0,10,10000)plt.hist(list,bins=7,color='g',alpha=0.4,edgecolor='b')plt.show()二項(xiàng)分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.binomial(n=10,p=0.5,size=10000)plt.hist(list,bins=8,color='g',alpha=0.4,edgecolor='b')plt.show()三維圖三維圖創(chuàng)建主要有如下兩種方式利用關(guān)鍵字projection='3d’來實(shí)現(xiàn)通過從mpl_toolkits.mplot3d導(dǎo)入對(duì)象Axes3D來實(shí)現(xiàn)三維曲線圖frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp
ax=plt.axes(projection='3d')
#三維線的數(shù)據(jù)zline=np.linspace(0,15,1000)xline=np.sin(zline)yline=np.cos(zline)ax.plot3D(xline,yline,zline,'gray')三維散點(diǎn)圖importmatplotlib.pyplotaspltimportnumpyasnp
ax=plt.axes(projection='3d')
zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')三維等高線圖importmatplotlib.pyplotaspltimportnumpyasnp
ax=plt.axes(projection='3d')
zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')第10章Pandas
《Python數(shù)據(jù)分析與應(yīng)用》pandaspandas是基于NumPy的數(shù)據(jù)分析工具,官方網(wǎng)址是。pandas提供了快速,靈活和富有表現(xiàn)力的數(shù)據(jù)結(jié)構(gòu),目的是使“關(guān)系”或“標(biāo)記”數(shù)據(jù)的工作既簡單又直觀。Pandas用于數(shù)據(jù)清洗,對(duì)噪音等數(shù)據(jù)進(jìn)行處理,從而便于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析。pandaspandas常用6個(gè)類Series:基本數(shù)據(jù)結(jié)構(gòu),一維標(biāo)簽數(shù)組,能夠保存任何數(shù)據(jù)類型DataFrame:基本數(shù)據(jù)結(jié)構(gòu),一般為二維數(shù)組,是一組有序的列Index:索引對(duì)象,負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(比如軸名稱)groupby:分組對(duì)象,通過傳入需要分組的參數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)分組Timestamp:時(shí)間戳對(duì)象,表示時(shí)間軸上的一個(gè)時(shí)刻Timedelta:時(shí)間差對(duì)象,用來計(jì)算兩個(gè)時(shí)間點(diǎn)的差值Pandas2個(gè)重要類創(chuàng)建Series
創(chuàng)建Series對(duì)象的函數(shù)是Series,它的主要參數(shù)是data和index,其基本語法格式如下。pandas.Series(data=None,
index=None,
name=None)
參數(shù)說明如下:data:接收array或dict。表示接收的數(shù)據(jù)。默認(rèn)為None。index:接收array或list。表示索引,必須與數(shù)據(jù)長度相同name:接收string或list。表示Series對(duì)象的名稱。默認(rèn)為None。通過ndarray創(chuàng)建Seriesimportpandasaspdimportnumpyasnpprint('通過ndarray創(chuàng)建的Series為:\n',pd.Series(np.arange(5),index=['a','b','c','d','e'],name='ndarray'))通過dict創(chuàng)建Seriesdict的鍵作為Series的索引,dict的值作為Series的值,無須傳入index參數(shù)。通過dict創(chuàng)建Series對(duì)象,代碼如下所示:importpandasaspddict={'a':0,'b':1,'c':5,'d':3,'e':4}print('通過dict創(chuàng)建的Series為:\n',pd.Series(dict))通過list創(chuàng)建Seriesimportpandasaspdlist1=[0,1,5,3,4]print('通過list創(chuàng)建的Series為:\n',pd.Series(list1,index=['a','b','c','d','e'],name='list'))Series屬性Series擁有8個(gè)常用屬性,如下所示。values:以ndarray的格式返回Series對(duì)象的所有元素index:返回Series對(duì)象的索引dtype:返回Series對(duì)象的數(shù)據(jù)類型shape:返回Series對(duì)象的形狀nbytes:返回Series對(duì)象的字節(jié)數(shù)ndim:返回Series對(duì)象的維度size:返回Series對(duì)象的個(gè)數(shù)T:返回Series對(duì)象的轉(zhuǎn)置訪問Series的屬性importpandasaspdseries1=pd.Series([1,5,3,4])print("series1:\n{}\n".format(series1))print("series1.values:{}\n".format(series1.values))#數(shù)據(jù)print("series1.index:{}\n".format(series1.index))#索引print("series1.shape:{}\n".format(series1.shape))#形狀print("series1.ndim:{}\n".format(series1.ndim))#維度訪問Series數(shù)據(jù)通過索引位置訪問Series的數(shù)據(jù)與ndarray相同,importpandasaspdseries5=pd.Series([1,5,3,4,5,6,7],index=["C","D","E","F","G","A","B"])#通過索引位置訪問Series數(shù)據(jù)子集print("series5位于第1位置的數(shù)據(jù)為:",series5[0])#通過索引名稱(標(biāo)簽)也可以訪問Series數(shù)據(jù)print("Eis{}\n".format(series5["E"]))更新Seriesimportpandasaspdseries1=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series1:\n{}\n".format(series1))#更新元素series1['a']=3print('更新后的Series1為:\n',series1)追加Series和插入單個(gè)值importpandasaspdseries1=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series1:\n{}\n".format(series1))series1=pd.Series([4,5],index=['f','g'])#追加Seriesprint('在series插入series1后為:\n',series.append(series1))刪除Series元素importpandasaspdseries=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series:\n{}\n".format(series))#刪除數(shù)據(jù)series.drop('e',inplace=True)print('刪除索引e對(duì)應(yīng)數(shù)據(jù)后的series為:\n',series)。DataFrameDataFrame是pandas基本數(shù)據(jù)結(jié)構(gòu),類似數(shù)據(jù)庫中的表。DataFrame既有行索引,也有列索引,可以看作是Series組成的dict,每個(gè)Series是DataFrame的一列
創(chuàng)建DataFrameDataFrame函數(shù)用于創(chuàng)建DataFrame對(duì)象,其基本語法格式如下pandas.DataFrame(data=None,
index=None,
columns=None,
dtype=None,
copy=False)參數(shù)說明如下所示:data:接收ndarray、dict、list或DataFrame。表示輸入數(shù)據(jù)。默認(rèn)為None。index:接收Index,ndarray。表示索引。默認(rèn)為None。columns:接收Index,ndarray。表示列標(biāo)簽(列名)。默認(rèn)為None。通過dict創(chuàng)建DataFrameimportpandasaspddict1={'col1':[0,1,5,3,4],'col5':[5,6,7,8,9]}print('通過dict創(chuàng)建的DataFrame為:\n',pd.DataFrame(dict1,index=['a','b','c','d','e']))通過list創(chuàng)建DataFrameimportpandasaspdlist5=[[0,5],[1,6],[5,7],[3,8],[4,9]]print('通過list創(chuàng)建的DataFrame為:\n',pd.DataFrame(list5,index=['a','b','c','d','e'],columns=['col1','col5']))通過Series創(chuàng)建DataFrameimportpandasaspdnoteSeries
=
pd.Series(["C",
"D",
"E",
"F",
"G",
"A",
"B"],
index=[1,
5,
3,
4,
5,
6,
7])weekdaySeries
=
pd.Series(["Mon",
"Tue",
"Wed",
"Thu","Fri",
"Sat",
"Sun"],
index=[1,
5,
3,
4,
5,
6,
7])df4
=
pd.DataFrame([noteSeries,
weekdaySeries])print("df4:\n{}\n".format(df4))DataFrame屬性values:以ndarray的格式返回DataFrame對(duì)象的所有元素index:返回DataFrame對(duì)象的Indexcolumns:返回DataFrame對(duì)象的列標(biāo)簽dtypes:返回DataFrame對(duì)象的數(shù)據(jù)類型axes:返回DataFrame對(duì)象的軸標(biāo)簽ndim:返回DataFrame對(duì)象的軸尺寸數(shù)size:返回DataFrame對(duì)象的個(gè)數(shù)shape:返回DataFrame對(duì)象的形狀更新DataFrameimportpandasaspddf=pd.DataFrame({'col1':[0,1,5,3,4],'col5':[5,6,7,8,9]},index=['a','b','c','d','e'])print('DataFrame為:\n',df)#更新列df['col1']=[10,11,15,13,14]print('更新列后的DataFrame為:\n',df)插入和刪除DataFrameimportpandasaspddf3=pd.DataFrame({"note":["C","D","E","F","G","A","B"],"weekday":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]})print("df3:\n{}\n".format(df3))df3["No."]=pd.Series([1,5,3,4,5,6,7])#采用賦值的方法插入列print("df3:\n{}\n".format(df3))deldf3["weekday"]#刪除列的方法有多種,如del、pop、dropprint("df3:\n{}\n".format(df3))Index
(1)
隱式創(chuàng)建
創(chuàng)建Series或DataFrame等對(duì)象時(shí),索引會(huì)轉(zhuǎn)換為Index對(duì)象
(2)顯式創(chuàng)建
Index對(duì)象可以通過pandas.Index()函數(shù)創(chuàng)建
。
plotMatplotlib繪制一張圖表需要各個(gè)基礎(chǔ)組件對(duì)象,工作量較大。而pandas中使用行標(biāo)簽和列標(biāo)簽以及分組信息,較為簡便的完成圖表的制作。散點(diǎn)圖
importnumpyasnpimportpandasaspdwdf=pd.DataFrame(np.arange(20),columns=['W'])wdf['Y']=wdf['W']*1.5+2wdf.iloc[3,1]=128wdf.iloc[18,1]=150wdf.plot(kind='scatter',x='W',y='Y')
條形圖importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdf2=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])df2.plot.bar()plt.show()
直方圖與密度圖importpandasaspdimportnumpyasnp
n1=np.random.normal(loc=10,scale=5,size=1000)n2=np.random.normal(loc=50,scale=7,size=1000)n=np.hstack((n1,n2))s=pd.DataFrame(data=n)s.plot(kind='hist',bins=100,density=True)s.plot(kind='kde')
箱線圖importnumpyasnpimportpandasaspd
wdf=pd.DataFrame(np.arange(20),columns=['W'])wdf['Y']=wdf['W']*1.5+2wdf.iloc[3,1]=128wdf.iloc[18,1]=150importmatplotlib.pyplotaspltplt.boxplot(wdf)plt.show()面積圖importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdf=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])df.plot.area()
plt.show()數(shù)據(jù)轉(zhuǎn)換函數(shù)名說
明df.replace(a,b)df.replace(a,b)是指用b替換a值df['col1'].map()對(duì)指定列進(jìn)行函數(shù)轉(zhuǎn)換,用于Series。pd.merge(df1,df2)用于合并df1和df2,按照共有的列連接bine_first(df2)用df2的數(shù)據(jù)補(bǔ)充df1的缺失值。
pandas.cut將連續(xù)數(shù)據(jù)進(jìn)行離散化數(shù)據(jù)分組與聚合函數(shù)名說
明df.groupby數(shù)據(jù)分組Df.agg數(shù)據(jù)聚合數(shù)據(jù)處理函數(shù)名說
明df.fillna缺失值填充df.dropna缺失值刪除df.duplicated()df.drop_duplicates()重復(fù)值清洗讀取外部數(shù)據(jù)函數(shù)名說
明pd.read_excel操作Excel讀取文本文件的命令是
read_csv或者
read_table,將
DataFrame寫入CSV文件命令為
df.to_csv操作文本文件Pandas操作mysql數(shù)據(jù)庫,使用pymysql模塊的read_sql讀取數(shù)據(jù),使用read_sql_query()函數(shù)查詢數(shù)據(jù),to_sql()函數(shù)寫入數(shù)據(jù)到數(shù)據(jù)庫。操作數(shù)據(jù)庫第11章scipy
《Python數(shù)據(jù)分析與應(yīng)用》ScipyScipy用于統(tǒng)計(jì)、優(yōu)化、整合、線性代數(shù)模塊、傅里葉變換、信號(hào)和圖像處理等,常用的scipy工具有stats(統(tǒng)計(jì)學(xué)工具包)、erpolate(插值,線性的,三次方)、cluster(聚類)、signal(信號(hào)處理)等。安裝scipy之前必須安裝numpyScipy官方網(wǎng)址。ScipyScipy功能函數(shù)功能函數(shù)積分egrate線性代數(shù)scipy.linalg信號(hào)處理scipy.signal稀疏矩陣scipy.sparse空間數(shù)據(jù)結(jié)構(gòu)和算法scipy.spatial統(tǒng)計(jì)學(xué)scipy.stats最優(yōu)化scipy.optimize多維圖像處理scipy.ndimage插值erpolate聚類scipy.cluster曲線擬合scipy.curve_fit文件輸入/輸出scipy.io傅里葉變換scipy.fftpack稀疏矩陣
在矩陣中,若數(shù)值為0的元素?cái)?shù)目遠(yuǎn)遠(yuǎn)多于非0元素的數(shù)目,并且非0元素分布沒有規(guī)律時(shí),則稱該矩陣為稀疏矩陣。coo_matrix()用于創(chuàng)建稀疏矩陣,語法如下所示。
coo_matrix((data,(i,j)),[shape=(M,N)])矩陣運(yùn)算fromscipy.linalgimport*importnumpyasnp
A=np.matrix('[1,2;3,4]')print(A)print(A.T)#轉(zhuǎn)置矩陣print(A.I)#逆矩陣[[12][34]][[13][24]][[-2.1.][1.5-0.5]]線性方程組求解
fromscipyimportlinalgimportnumpyasnpa=np.array([[1,3,5],[2,5,-1],[2,4,7]])b=np.array([10,6,4])x=linalg.solve(a,b)print(x)非線性方程組求解
fromscipy.optimizeimportfsolvefrommathimportsindeff(x):
x0,x1,x2=x.tolist()
return[5*x1+3,4*x0*x0-2*sin(x1*x2),x1*x2-1.5]
#f計(jì)算方程組的誤差,[1,1,1]是未知數(shù)的初始值result=fsolve(f,[1,1,1])
print(result)print(f(result))函數(shù)最值
fromscipy.optimizeimportminimizeimportnumpyasnp
#計(jì)算1/x+x的最小值deffun(args):a=argsv=lambdax:a/x[0]+x[0]returnvif__name__=="__main__":args=(1)#ax0=np.asarray((2))#初始猜測(cè)值res=minimize(fun(args),x0,method='SLSQP')print(res.fun)print(res.success)print(res.x)最小二乘法
最小二乘法可以理解為就是通過最小化誤差的平方和來尋找最佳的匹配函數(shù),常用于曲線擬合。一般情況下擬合的曲線為k*x+b函數(shù),即尋找最好的k、b值實(shí)現(xiàn)分類效果。 scipy的leastsq函數(shù)用于最小二乘法的擬合
scipy.optimize.leastsq(func,x0,args=())數(shù)據(jù)分布泊松分布正態(tài)分布指數(shù)分布均勻分布正態(tài)分布正態(tài)分布(Normaldistribution),也稱“常態(tài)分布”,又名高斯分布(Gaussiandistribution),正態(tài)曲線呈鐘型,兩頭低,中間高,左右對(duì)稱因其曲線呈鐘形,又稱之為鐘形曲線。scipy.norm實(shí)現(xiàn)正態(tài)分布。binomial=stats.binom.pmf(k,n,p)指數(shù)分布
指數(shù)分布描述的是事件發(fā)生的時(shí)間間隔,主要用于描述電子元器件的壽命。
scipy.expon實(shí)現(xiàn)指數(shù)分布。泊松分布#平均值,方差,偏度,峰度mean,var,skew,kurt=poisson.stats(mu,moments='mvsk')泊松分布用于描述單位時(shí)間/面積內(nèi),隨機(jī)事件發(fā)生的次數(shù)。例如,譬如:某一服務(wù)設(shè)施一定時(shí)間內(nèi)到達(dá)的人數(shù)、一個(gè)月內(nèi)機(jī)器損壞的次數(shù)等。指數(shù)分布指數(shù)分布描述的是事件發(fā)生的時(shí)間間隔,主要用于描述電子元器件的壽命。scipy.expon實(shí)現(xiàn)指數(shù)分布。統(tǒng)計(jì)量統(tǒng)計(jì)量包括平均數(shù)、中位數(shù)、眾數(shù)、樣本均值(即n個(gè)樣本的算術(shù)平均值),樣本方差(即n個(gè)樣本與樣本均值之間平均偏離程度的度量)等,用于數(shù)據(jù)進(jìn)行分析、檢驗(yàn)的變量。
眾數(shù)是指在統(tǒng)計(jì)分布上具有明顯集中趨勢(shì)點(diǎn)的數(shù)值,是出現(xiàn)次數(shù)最多的數(shù)值,代表數(shù)據(jù)的一般水平。scipy.stats提供mode函數(shù)實(shí)現(xiàn)求眾數(shù)。scipy.stats模塊提供了pearsonr函數(shù)計(jì)算皮爾森相關(guān)系數(shù),語法如下所示:fromscipy.statsimportpearsonrpearsonr(x,y)參數(shù)解釋如下:x為特征,y為目標(biāo)變量。圖像處理圖像處理和分析通常被看作是對(duì)二維值數(shù)組的操作。scipy.ndimage提供了許多通用的圖像處理和分析功能,支持圖像矩陣變換、圖像濾波、圖像卷積等功能。圖像旋轉(zhuǎn)Scipy提供ndimage.rotate函數(shù)用于旋轉(zhuǎn)圖像。rotate_flower=ndimage.rotate(flower,45)plt.imshow(rotate_flower)plt.title('rotate_flower')圖像平滑
圖像平滑是一種區(qū)域增強(qiáng)的算法,用于突出圖像的低頻成分、主干部分或抑制圖像的噪聲和干擾高頻成分,使圖像亮度平緩漸變、減少突變梯度,改善圖像質(zhì)量的圖像處理方法。圖像平滑分為:高斯濾波中值濾波高斯濾波scipy.ndimage模塊提供gaussian_filter函數(shù)。fromscipyimportndimageimportmatplotlib.imageasmpimgimportmatplotlib.pyplotaspltflower=mpimg.imread('d://flower.jpg')flower1=ndimage.gaussian_filter(flower,sigma=3)plt.imshow(flower1)plt.show()scipy.ndimage模塊的median_filte函數(shù)實(shí)現(xiàn)中值濾波。fromscipyimportndi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考作文題目及高分范文集
- 職場溝通與團(tuán)隊(duì)合作培訓(xùn)課件
- 中介助理崗位責(zé)任及工作流程
- 2025年化妝品成分十年技術(shù)突破報(bào)告
- 課堂教學(xué)質(zhì)量評(píng)估標(biāo)準(zhǔn)
- 碩士研究生復(fù)試英語口語模板
- 四年級(jí)下冊(cè)語文課文教學(xué)方案設(shè)計(jì)
- 醫(yī)藥制造質(zhì)量管理體系建設(shè)
- 小學(xué)四年級(jí)科學(xué)閱讀練習(xí)題集
- 2026年人防工程防護(hù)效能評(píng)估報(bào)告試題
- 2025租房合同范本下載(可直接打?。?/a>
- 新一代工藝及器件仿真工具Sentaurus
- 《陸上風(fēng)電場工程概算定額》NBT 31010-2019
- 殘疾學(xué)生送教上門備課、教案
- DB11T 489-2024 建筑基坑支護(hù)技術(shù)規(guī)程
- 一例火電機(jī)組有功功率突變?cè)蚍治黾邦A(yù)防措施
- 藥品臨床綜合評(píng)價(jià)實(shí)施方案
- 除塵布袋更換施工方案
- 養(yǎng)老護(hù)理員培訓(xùn)演示文稿
- 深圳加油站建設(shè)項(xiàng)目可行性研究報(bào)告
- 浙江省交通設(shè)工程質(zhì)量檢測(cè)和工程材料試驗(yàn)收費(fèi)標(biāo)準(zhǔn)版浙價(jià)服定稿版
評(píng)論
0/150
提交評(píng)論