python數(shù)學(xué)建模之三大模型與十大常用算法詳情
前言
數(shù)學(xué)建模的介紹與作用
全國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽:
全國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽創(chuàng)辦于1992年,每年一屆,已成為全國(guó)高校規(guī)模最大的基礎(chǔ)性學(xué)科競(jìng)賽,也是世界上規(guī)模最大的數(shù)學(xué)建模競(jìng)賽。2018年,來(lái)自全國(guó)34個(gè)省/市/區(qū)(包括香港、澳門和臺(tái)灣)及美國(guó)和新加坡的1449所院校/校區(qū)、42128個(gè)隊(duì)(本科38573隊(duì)、???555隊(duì))、超過(guò)12萬(wàn)名大學(xué)生報(bào)名參加本項(xiàng)競(jìng)賽。
競(jìng)賽宗旨:創(chuàng)新意識(shí) 團(tuán)隊(duì)精神 重在參與 公平競(jìng)爭(zhēng)
指導(dǎo)原則:擴(kuò)大受益面,保證公平性,推動(dòng)教學(xué)改革,提高競(jìng)賽質(zhì)量,擴(kuò)大國(guó)際交流,促進(jìn)科學(xué)研究。
數(shù)學(xué)建模競(jìng)賽的意義:
培養(yǎng)科學(xué)研究的能力培養(yǎng)通過(guò)研究學(xué)習(xí)新認(rèn)識(shí)的能力培養(yǎng)團(tuán)隊(duì)合作能力培養(yǎng)創(chuàng)新意識(shí)和創(chuàng)造能力訓(xùn)練快速獲取信息和資料的能力鍛煉快速了解和掌握新知識(shí)的技能培養(yǎng)團(tuán)隊(duì)合作意識(shí)和團(tuán)隊(duì)合作精神增強(qiáng)寫作技能和排版技術(shù)更重要的是訓(xùn)練人的邏輯思維和開放性思考方式
就業(yè):培養(yǎng)動(dòng)手實(shí)踐經(jīng)驗(yàn)
發(fā)展:科研潛力的最好證明
運(yùn)用數(shù)學(xué)、計(jì)算機(jī)技術(shù)和問(wèn)題背景學(xué)科等知識(shí),解決極富挑戰(zhàn)性的實(shí)際問(wèn)題。
- 中國(guó)大學(xué)生在線數(shù)學(xué)建模專題網(wǎng):
http://dxs.moe.gov.cn/zx/qkt/sxjm/
- 美賽官網(wǎng):
https://www.comap.com/
1 三大模型與十大常用算法【簡(jiǎn)介】
1-1 三大模型
預(yù)測(cè)模型:神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、灰色預(yù)測(cè)、擬合插值預(yù)測(cè)(線性回歸)、時(shí)間序列預(yù)測(cè)、馬爾科夫鏈預(yù)測(cè)、微分方程預(yù)測(cè)、Logistic 模型等等。應(yīng)用領(lǐng)域:人口預(yù)測(cè)、水資源污染增長(zhǎng)預(yù)測(cè)、病毒蔓延預(yù)測(cè)、競(jìng)賽獲勝概率
預(yù)測(cè)、月收入預(yù)測(cè)、銷量預(yù)測(cè)、經(jīng)濟(jì)發(fā)展情況預(yù)測(cè)等在工業(yè)、農(nóng)業(yè)、商業(yè)等經(jīng)濟(jì)領(lǐng)域,以及環(huán)境、社會(huì)和軍事等領(lǐng)域中都有廣泛的應(yīng)用。
優(yōu)化模型:規(guī)劃模型(目標(biāo)規(guī)劃、線性規(guī)劃、非線性規(guī)劃、整數(shù)規(guī)劃、動(dòng)態(tài) 規(guī)劃)、圖論模型、排隊(duì)論模型、神經(jīng)網(wǎng)絡(luò)模型、現(xiàn)代優(yōu)化算法(遺傳算法、模擬退火算法、蟻群算法、禁忌搜索算法)等等。應(yīng)用領(lǐng)域:快遞員派送快遞的最短路徑問(wèn)題、水資源調(diào)度優(yōu)化問(wèn)題、高速路
口收費(fèi)站問(wèn)題、軍事行動(dòng)避空偵察的時(shí)機(jī)和路線選擇、物流選址問(wèn)題、商區(qū)布局規(guī)劃等各個(gè)領(lǐng)域。
評(píng)價(jià)模型:模糊綜合評(píng)價(jià)法、層次分析法、聚類分析法、主成分分析評(píng)價(jià)法、
灰色綜合評(píng)價(jià)法、人工神經(jīng)網(wǎng)絡(luò)評(píng)價(jià)法等等。應(yīng)用領(lǐng)域:某區(qū)域水資源評(píng)價(jià)、水利工程項(xiàng)目風(fēng)險(xiǎn)評(píng)價(jià)、城市發(fā)展程度評(píng)價(jià)、足球教練評(píng)價(jià)、籃球隊(duì)評(píng)價(jià)、水生態(tài)評(píng)價(jià)、大壩安全評(píng)價(jià)、邊坡穩(wěn)定性評(píng)價(jià)
1-2 十大常用算法
2 python數(shù)據(jù)分析之Pandas 2-1什么是pandas
一個(gè)開源的Python類庫(kù):用于數(shù)據(jù)分析、數(shù)據(jù)處理、數(shù)據(jù)可視化
- 高性能
- 容易使用的數(shù)據(jù)結(jié)構(gòu)
- ·容易使用的使用分析工具
很方便和其他類庫(kù)一起使用:
- numpy:用于科學(xué)計(jì)算
- scikit-learn:用于機(jī)器學(xué)習(xí)
2-2 pandas讀取文件
''' 當(dāng)使用Pandas做數(shù)據(jù)分析時(shí),需要讀取事先準(zhǔn)備好的數(shù)據(jù)集,這是做數(shù)據(jù)分析的第一步。 Pandas提供了多種讀取數(shù)據(jù)的方法: read_csv() 用于讀取文本文件 read_excel() 用于讀取文本文件 read_json() 用于讀取json文件 read_sql_query()讀取sql語(yǔ)句的 通用流程: 1-導(dǎo)入庫(kù)import pandas as pd 2-找到文件所在位置(絕對(duì)路徑=全稱)(相對(duì)路徑=和程序在同一個(gè)文件夾中的路徑的簡(jiǎn)稱) 3-變量名=pd.讀寫操作方法(文件路徑,具體的篩選條件,...) ./ 當(dāng)前路徑 ../ 上一級(jí) 將csv中的數(shù)據(jù)轉(zhuǎn)換為DataFrame對(duì)象是非常便捷。和一般文件讀寫不一樣,它不需要你做打開文件、 讀取文件、關(guān)閉文件等操作。相反,您只需要一行代碼就可以完成上述所有步驟,并將數(shù)據(jù)存儲(chǔ)在 DataFrame中。 ''' import pandas as pd # 輸入?yún)?shù):數(shù)據(jù)輸入的路徑【可以是文件路徑,可以是URL,也可以是實(shí)現(xiàn)read方法的任意對(duì)象?!? df = pd.read_csv('s') print(df, type(df)) # Pandas默認(rèn)使用utf-8讀取文件 print() import pandas as pd lxw = open(r"t.csv", encoding='utf-8') print(pd.read_csv(lxw)) print() import os # 打印當(dāng)前目錄 print(os.getcwd())
Pandas需要先讀取表格類型的數(shù)據(jù),然后進(jìn)行分析
詳細(xì)版學(xué)習(xí):
# 1: import pandas as pd df = pd.read_csv('nba.csv') print(df) # 2: import pandas as pd df = pd.read_csv('nba.csv') # to_string() 用于返回 DataFrame 類型的數(shù)據(jù),如果不使用該函數(shù),則輸出結(jié)果為數(shù)據(jù)的前面 5 行和末尾 5 行,中間部分以 ... 代替(如上) print(df.to_string()) # 3: import pandas as pd # 三個(gè)字段 name, site, age nme = ["Google", "Runoob", "Taobao", "Wiki"] st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"] ag = [90, 40, 80, 98] # 字典 dict = {'name': nme, 'site': st, 'age': ag} df = pd.DataFrame(dict) # 保存 dataframe print(df.to_csv('site.csv')) # 4: import pandas as pd df = pd.read_csv('正解1.csv') # head( n ) 方法用于讀取前面的 n 行,如果不填參數(shù) n ,默認(rèn)返回 5 行 # print(df.head()) # df.head(50).to_csv('site4.csv') df.tail(10).to_csv('site4.csv') print("over!") # 5: import pandas as pd df = pd.read_csv('nba.csv') # 讀取前面 10 行 print(df.head(10)) # 6: import pandas as pd df = pd.read_csv('nba.csv') # tail( n ) 方法用于讀取尾部的 n 行,如果不填參數(shù) n ,默認(rèn)返回 5 行,空行各個(gè)字段的值返回 NaN print(df.tail()) # 7: import pandas as pd df = pd.read_csv('nba.csv') # 讀取末尾 10 行 print(df.tail(10)) # 8: import pandas as pd df = pd.read_csv('正解1.csv') # info() 方法返回表格的一些基本信息 print(df.info()) # non-null 為非空數(shù)據(jù),我們可以看到上面的信息中,總共 458 行,College 字段的空值最多
- 所有csv、excel文件可在資源當(dāng)中自行提用,沒有的可自行補(bǔ)充!
- 提示:須提前安裝好pandas庫(kù)。【終端安裝命令:pip install pandas】
import pandas as pd lxw = pd.read_csv('nba.csv') # 查看前幾行數(shù)據(jù) print(lxw.head()) # 查看索引列 print(lxw.index) # 查看列名列表 print(lxw.columns) # 查看數(shù)據(jù)的形狀(返回行、列數(shù)) print(lxw.shape) # 查看每列的數(shù)據(jù)類型 print(lxw.dtypes) print() # 讀取txt文件,自己指定分隔符、列名 fpath = 'D:\PyCharm\數(shù)學(xué)建模大賽\數(shù)據(jù)分析-上-2\Python成績(jī).csv' lxw = pd.read_csv( fpath, sep=',', header=None, names=['name', 'Python-score'] ) # print(lxw) lxw.to_csv('Python成績(jī)2.csv') # 讀取excel文件: import pandas as pd lxw = pd.read_excel('暑假培訓(xùn)學(xué)習(xí)計(jì)劃.xls') print(lxw)
注:如果最后這里【讀取excel文件]運(yùn)行出錯(cuò),那就在終端安裝
pip install xlrd
。
2-3 pandas數(shù)據(jù)結(jié)構(gòu)
''' 1-Series: 一維數(shù)據(jù),一行或一列 【Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)(不同數(shù)據(jù)類型)以 及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成】 2-DataFrame:二維數(shù)據(jù),整個(gè)表格,多行多列 ''' import pandas as pd # 1-1僅用數(shù)據(jù)列表即可產(chǎn)生最簡(jiǎn)單的Series lxw = pd.Series([1, 'a', 5.2, 6]) print(lxw) # 運(yùn)行結(jié)果解說(shuō):左邊為索引,右邊為數(shù)據(jù) # 獲取索引 print(lxw.index) # 獲取數(shù)據(jù) print(lxw.values) print() # 1-2 創(chuàng)建一個(gè)具有索引標(biāo)簽的Series lxw2 = pd.Series([5, '程序人生6', 666, 5.2], index=['sz', 'gzh', 'jy', 'xy']) print(lxw2) print(lxw2.index) # 寫入文件當(dāng)中 lxw2.to_csv('gzh.csv') print() # 1-3 使用過(guò)Python字典創(chuàng)建Series lxw_ej = {'python': 390, 'java': 90, 'mysql': 90} lxw3 = pd.Series(lxw_ej) print(lxw3) # 1-4 根據(jù)標(biāo)簽索引查詢數(shù)據(jù) print(lxw3['java']) print(lxw2['gzh']) print(lxw2[['gzh', 'jy']]) print(type(lxw2[['gzh', 'jy']])) print(lxw[2]) print(type(lxw[2])) print() # 2 根據(jù)多個(gè)字典序列創(chuàng)建dataframe lxw_cj = { 'ps': [86, 92, 88, 82, 80], 'windows操作系統(tǒng)': [84, 82, 88, 80, 92], '網(wǎng)頁(yè)設(shè)計(jì)與制作': [92, 88, 97, 98, 83] } df = pd.DataFrame(lxw_cj) # print(df) # df.to_excel('lxw_cj.xlsx') # 須提前安裝好openxlsx,即pip install openpyxl[可在終端安裝] print("over!") print(df.dtypes) print(df.columns) print(df.index) print() # 3-從DataFrame中查詢Series ''' ·如果只查詢一行、一列的話,那么返回的就是pd.Series ·如果查詢多行、多列時(shí),返回的就是pd.DataFrame ''' # 一列: print(df['ps']) print(type(df['ps'])) # 多列: print(df[['ps', 'windows操作系統(tǒng)']]) print(type(df[['ps', 'windows操作系統(tǒng)']])) print() # 一行: print(df.loc[1]) print(type(df.loc[1])) # 多行: print(df.loc[1:3]) print(type(df.loc[1:3]))
DataFrame 加強(qiáng)
2-3-1 pandas數(shù)據(jù)結(jié)構(gòu)之DataFrame
# DataFrame數(shù)據(jù)類型 ''' DataFrame是Pandas的重要數(shù)據(jù)結(jié)構(gòu)之一,也是在使用數(shù)據(jù)分析過(guò)程中最常用的結(jié)構(gòu)之一, 可以這么說(shuō),掌握了Dataframe的用法,你就 擁有了學(xué)習(xí)數(shù)據(jù)分析的基本能力。 ''' # 認(rèn)識(shí)Dataframe結(jié)構(gòu): ''' Dataframe是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),既有行標(biāo)簽,又有列標(biāo)簽,她也被稱異構(gòu)數(shù)據(jù)表,所謂 異構(gòu),指的是表格中每列的數(shù)據(jù)類型可以不同,比如可以是字符串、整型或者浮點(diǎn)型等。 Dataframe的每一列數(shù)據(jù)都可以看成一個(gè)Series結(jié)構(gòu),只不過(guò),Dataframe為每列數(shù)據(jù)值增加了 一個(gè)標(biāo)簽。因此Dataframe其實(shí)是從Series的基礎(chǔ)上演變而來(lái),并且他們有相同的標(biāo)簽,在數(shù)據(jù)分析 任務(wù)中Dataframe的應(yīng)用非常廣泛,因此描述數(shù)據(jù)的更為清晰、直觀。 同Series一樣,Dataframe自帶行標(biāo)簽索引,默認(rèn)為“隱式索引”。 當(dāng)然,你也可以用“顯式索引”的方式來(lái)設(shè)置行標(biāo)簽。 ''' # 特點(diǎn): ''' Dataframe 每一列的標(biāo)簽值允許使用不同的數(shù)據(jù)類型; Dataframe 是表格型的數(shù)據(jù)結(jié)構(gòu),具有行和列; Dataframe 中的每個(gè)數(shù)據(jù)都可以被修改 Dataframe 結(jié)構(gòu)的行數(shù)、列數(shù)允許增加或者刪除 Dataframe 有兩個(gè)方向的標(biāo)簽軸,分別是行標(biāo)簽和列標(biāo)簽 Dataframe 可以對(duì)行和列執(zhí)行算術(shù)運(yùn)算 ''' # DataFrame 構(gòu)造方法如下: # pandas.DataFrame( data, index, columns, dtype, copy) ''' data:輸入的數(shù)據(jù),可以是ndarray, series, list, dict, 標(biāo)量以及一個(gè)Dataframe; index:行標(biāo)簽,如果沒有傳遞index值,則默認(rèn)行標(biāo)簽是RangeIndex(0, 1, 2, ..., n)代表data的元素個(gè)數(shù); columns:列標(biāo)簽,如果沒有傳遞columns值,則默認(rèn)列標(biāo)簽是RangIndex(0, 1, 2, ..., n); dtype:要強(qiáng)制的數(shù)據(jù)類型,只允許使用一種數(shù)據(jù)類型,如果沒有,自行推斷; copy:從輸入復(fù)制數(shù)據(jù)。對(duì)于dict數(shù)據(jù), copy=True, 重新復(fù)制一份。對(duì)于Dataframe或者ndarray輸入,類似于copy=False,它用的是試圖。 ''' # 1: 使用普通列表創(chuàng)建 import pandas as pd lxw = [5, 2, 1, 3, 1, 4] df = pd.DataFrame(lxw) df2 = pd.Series(lxw) print(df) print(df2) print() # 2:使用嵌套列表創(chuàng)建 import pandas as pd lxw = [['lxw', 21], ['cw', 23], ['tzs', 22]] df3 = pd.DataFrame(lxw, columns=['Name', 'Age']) print(df3) # 指定數(shù)值元素的數(shù)據(jù)類型為float # 注:dtype只能設(shè)置一個(gè),設(shè)置多個(gè)列的數(shù)據(jù)類型,需要使用其他公式 print() # 分配列標(biāo)簽注意點(diǎn) import pandas as pd # 分配列標(biāo)簽 lxw2 = [['lxw', '男', 21, 6666], ['cw', '女', 22, 6520], ['ky', '女', 20, 5200], ['tzs', '男', 22, 6523]] # int滿足某列特征,會(huì)自動(dòng)使用,不滿足,則會(huì)自動(dòng)識(shí)別 df = pd.DataFrame(lxw2, columns=['Name', 'xb', 'age', 'gz'], dtype=int) print(df) print(df['Name'].dtype) print() # ~字典創(chuàng)建: import pandas as pd lxw3 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 8, 'c': 9}] df = pd.DataFrame(lxw3, index=['first', 'second']) print(df) # 注:如果其中某些元素缺失,也就是字典的key無(wú)法找到對(duì)應(yīng)的value將使用NaN代替 print() # 使用列表嵌套字典創(chuàng)建一個(gè)DataFrame對(duì)象 import pandas as pd # lxw3 df1 = pd.DataFrame(lxw3, index=['first', 'second'], columns=['a', 'b']) df2 = pd.DataFrame(lxw3, index=['first', 'second'], columns=['a', 'b2']) print(df1) print("============================================") print(df2)
import pandas as pd data = [['lxw', 10], ['wink', 12], ['程序人生6', 13]] df = pd.DataFrame(data, columns=['Site', 'Age'], dtype=float) print(df) # 1:使用 ndarrays 創(chuàng)建 import pandas as pd data = {'Site': ['lxw', '程序人生6', 'wink'], 'Age': [10, 12, 13]} df = pd.DataFrame(data) print(df) # 2:還可以使用字典(key/value),其中字典的 key 為列名: import pandas as pd data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}] df = pd.DataFrame(data) print(df) # 沒有對(duì)應(yīng)的部分?jǐn)?shù)據(jù)為 NaN # 3:Pandas 可以使用 loc 屬性返回指定行的數(shù)據(jù),如果沒有設(shè)置索引,第一行索引為 0,第二行索引為 1,以此類推: import pandas as pd data = { "calories": [420, 380, 390], "duration": [50, 40, 45] } # 數(shù)據(jù)載入到 DataFrame 對(duì)象 df = pd.DataFrame(data) # 返回第一行 print(df.loc[0]) # 返回第二行 print(df.loc[1]) print(df.loc[2]) # 注意:返回結(jié)果其實(shí)就是一個(gè) Pandas Series 數(shù)據(jù)。 # 也可以返回多行數(shù)據(jù),使用 [[ ... ]] 格式,... 為各行的索引,以逗號(hào)隔開:
2-3-1 Pandas 數(shù)據(jù)結(jié)構(gòu)之Series
# Pandas Series 類似表格中的一個(gè)列(column),類似于一維數(shù)組,可以保存任何數(shù)據(jù)類型。 ''' Series 由索引(index)和列組成,函數(shù)如下: pandas.Series( data, index, dtype, name, copy) 參數(shù)說(shuō)明: data:一組數(shù)據(jù)(ndarray 類型)。 index:數(shù)據(jù)索引標(biāo)簽,如果不指定,默認(rèn)從 0 開始。 dtype:數(shù)據(jù)類型,默認(rèn)會(huì)自己判斷。 name:設(shè)置名稱。 copy:拷貝數(shù)據(jù),默認(rèn)為 False。 ''' import pandas as pd lxw = [1, 2, 3] myvar = pd.Series(lxw) print(myvar) print() # 如果沒有指定索引,索引值就從 0 開始,我們可以根據(jù)索引值讀取數(shù)據(jù) print(myvar[1]) print() import pandas as pd lxw = ["Google", "Runoob", "Wiki"] myvar2 = pd.Series(lxw, index=['x', 'y', 'z']) print(myvar2) print() # 根據(jù)索引值讀取數(shù)據(jù): print(myvar2['y']) print() # 也可以使用 key/value 對(duì)象,類似字典來(lái)創(chuàng)建 Series import pandas as pd lxw = {1: "Google", 2: "Runoob", 3: "Wiki"} myvar3 = pd.Series(lxw) print(myvar3) print() # 只需要字典中的一部分?jǐn)?shù)據(jù),只需要指定需要數(shù)據(jù)的索引即可 myvar3 = pd.Series(lxw, index=[1, 2]) print(myvar3) print() # 設(shè)置 Series 名稱參數(shù) import pandas as pd lxw = {1: "Google", 2: "Runoob", 3: "Wiki"} myvar4 = pd.Series(lxw, index=[1, 3], name="lxw-pro") print(myvar4)
2-4查詢數(shù)據(jù)
# Pandas查詢數(shù)據(jù)的四種方法: ''' 1-df.loc方法,根據(jù)行、列的標(biāo)簽值查詢 2-df.iloc方法,根據(jù)行、列的數(shù)字位置查詢 3-df.where方法 4-df.query方法 建議:.loc既能查詢,又能覆蓋寫入,強(qiáng)烈推薦! ''' # Pandas使用df.loc查詢數(shù)據(jù)的方法: ''' 1-使用單個(gè)label值查詢數(shù)據(jù) 2-使用值列表批量查詢 3-使用數(shù)值區(qū)間進(jìn)行范圍查詢 4-使用條件表達(dá)式查詢 5-調(diào)用函數(shù)查詢 ''' # 注:以上方法,即適用于行,也使用于列 import pandas as pd df = pd.read_csv('sites.csv') # print(df.head(10)) df.set_index('create_dt', inplace=True) # print(df.index) a = df.index # 去重->轉(zhuǎn)為列表->排順序 qc = sorted(list(set(a))) # print(qc)
# 替換掉利潤(rùn)率當(dāng)中的后綴% df.loc[:, 'lrl'] = df['lrl'].str.replace("%", "").astype('int32') # astype() 對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換
astype()相關(guān)知識(shí)闡述:
''' Python中與數(shù)據(jù)類型相關(guān)函數(shù)及屬性有如下三個(gè):type/dtype/astype type() 返回參數(shù)的數(shù)據(jù)類型 dtype 返回?cái)?shù)組中元素的數(shù)據(jù)類型 astype() 對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換 你可以使用 .astype() 方法在不同的數(shù)值類型之間相互轉(zhuǎn)換。a.astype(int).dtype # 將 a 的數(shù)值類型從 float64 轉(zhuǎn)換為 int '''
這里運(yùn)行的話,就會(huì)報(bào)錯(cuò):
后面上網(wǎng)查找解決類似的問(wèn)題,一番查找之后,終于解決問(wèn)題
# 替換掉利潤(rùn)率當(dāng)中的后綴% df['lrl'] = df['lrl'].map(lambda x: x.rstrip('%')) print(df)
運(yùn)行效果如下:
# 查詢數(shù)據(jù)類型 print(df.dtypes) # 打印文件前幾行 print(df.head())
2-4-1 使用單個(gè)label值查詢數(shù)據(jù)
print(df.loc['2016-12-02', 'yye']) # 得到指定時(shí)間里相對(duì)應(yīng)的的單個(gè)值
運(yùn)行結(jié)果如下:
# 得到指定時(shí)間內(nèi)相對(duì)應(yīng)的的一個(gè)Series print(df.loc['2016-11-30', ['sku_cost_prc', 'sku_sale_prc']])
運(yùn)行結(jié)果如下:
2-4-2使用值列表批量查詢
# 得到Series print(df.loc[['2016-12-05', '2016-12-31'], 'sku_sale_prc'])
運(yùn)行結(jié)果如下:
提示:圖有點(diǎn)長(zhǎng),故只截取了部分
# 得到DataFrame print(df.loc[['2016-12-08', '2016-12-12'], ['sku_cnt', 'sku_sale_prc']])
運(yùn)行部分結(jié)果如下:
2-4-3 使用數(shù)值區(qū)間進(jìn)行范圍查詢
# 行index按區(qū)間: print(df.loc['2016-12-02': '2016-12-08'], ['yye'])
運(yùn)行部分結(jié)果如下:
# 列index按區(qū)間: print(df.loc['2016-12-12', 'yye': 'lrl'])
運(yùn)行部分結(jié)果如下:
# 行和列都按區(qū)間查詢: print(df.loc['2016-11-30': '2016-12-02', 'sku_cnt': 'lrl'])
運(yùn)行部分結(jié)果如下:
2-4-4 使用條件表達(dá)式查詢
# 簡(jiǎn)單條件查詢,營(yíng)業(yè)額低于3的列表 print(df.loc[df['yye'] < 3, :]) # 可觀察營(yíng)業(yè)額的boolean條件 print(df['yye'] < 3)
# 復(fù)雜條件查詢: print(df.loc[(df['yye'] < 5) & (df['yye'] > 2) & (df['sku_cnt'] > 1), :])
運(yùn)行部分結(jié)果如下:
# 再次觀察這里的boolean條件 print((df['yye'] < 5) & (df['yye'] > 2) & (df['sku_cnt'] > 1))
運(yùn)行部分結(jié)果如下:
2-4-5 調(diào)用函數(shù)查詢
# 直接寫lambda表達(dá)式 print(df.loc[lambda df: (df['yye'] < 4) & (df['yye'] > 2), :])
運(yùn)行部分如果如下:
# 函數(shù)式編程的本質(zhì): # 函數(shù)本身可以像變量一樣傳遞 def my_query(df): return df.index.str.startswith('2016-12-08') print(df.loc[my_query, :])
遇到的問(wèn)題:
- 1、雖說(shuō)三大模型十大算法【簡(jiǎn)介】講的很是明確,可在網(wǎng)上要查詢相關(guān)模型或者算法還是很雜亂的,不是很清楚自己適合那一版本。
- 2、學(xué)習(xí)pandas過(guò)程當(dāng)中遇到查詢數(shù)據(jù)時(shí)遇【替換掉利潤(rùn)率當(dāng)中的后綴%】 出現(xiàn)差錯(cuò),后面通過(guò)網(wǎng)上查詢解決問(wèn)題。
到此這篇關(guān)于python數(shù)學(xué)建模之三大模型與十大常用算法詳情的文章就介紹到這了,更多相關(guān)python三大模型與十大算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 詳解爬取并統(tǒng)計(jì)CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python爬取CSDN全站綜合熱榜標(biāo)題,順便統(tǒng)計(jì)關(guān)鍵詞詞頻,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11Pytorch distributed 多卡并行載入模型操作
這篇文章主要介紹了Pytorch distributed 多卡并行載入模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06完美解決jupyter由于無(wú)法import新包的問(wèn)題
這篇文章主要介紹了完美解決jupyter由于無(wú)法import新包的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Pandas數(shù)據(jù)清洗的實(shí)現(xiàn)
在處理數(shù)據(jù)的時(shí)候,需要對(duì)數(shù)據(jù)進(jìn)行一個(gè)清洗過(guò)程,本文就來(lái)介紹一下Pandas數(shù)據(jù)清洗的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11python使用post提交數(shù)據(jù)到遠(yuǎn)程url的方法
這篇文章主要介紹了python使用post提交數(shù)據(jù)到遠(yuǎn)程url的方法,涉及Python使用post傳遞數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2015-04-04Python中ImportError錯(cuò)誤的詳細(xì)解決方法
最近辛辛苦苦安裝完了python,最后再運(yùn)行的時(shí)候會(huì)出現(xiàn)錯(cuò)誤,所以這篇文章主要給大家介紹了關(guān)于Python中ImportError錯(cuò)誤的詳細(xì)解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

TensorFlow 多元函數(shù)的極值實(shí)例

Anaconda安裝pytorch及配置PyCharm 2021環(huán)境