日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Python數學建模之數據導入

瀏覽:135日期:2022-06-16 08:17:12
目錄一、數據導入是所有數模編程的第一步二、在程序中直接向變量賦值2.1、為什么直接賦值?2.2、直接賦值的問題與注意事項三、Pandas 導入數據3.1、Pandas 讀取 Excel 文件3.2、Pandas 讀取 csv 文件3.3、Pandas 讀取文本文件3.4、Pandas 讀取其它文件格式四、數據導入例程一、數據導入是所有數模編程的第一步

編程求解一個數模問題,問題總會涉及一些數據。

有些數據是在題目的文字描述中給出的,有些數據是通過題目的附件文件下載或指定網址提供的,還有些數據是需要自己搜集的。不論是哪種方式獲得的數據,也不論哪種類型的問題和算法,首先都是要把這些數據以適當的方式和格式導入到程序中。

如果數據格式有問題,輕則讀取數據時發生錯誤,要浪費時間去查找和解決,在數模競賽中就會讓人非常焦躁。數據錯誤還是輕的嗎?對,重則讀取數據有錯誤,程序卻在繼續運行,得到了錯誤的結果,這在數模競賽中就更糟糕了。你可能都不知道發生了錯誤,就算感覺有問題也不會把錯誤直接鎖定到數據導入部分,結果不停地去修改其它模塊,直到把正確的模塊也搞錯了,最后無可救藥。

因此,確保數模編程第一步“數據導入”的順利完成,比原先的想象更重要。賽題所給數據文件中的數據組織方式不同,也需要使用不同的方法來導入數據。

那么好了,既然是要具體問題具體分析,這不跟沒說一樣嗎?這正是本文希望回答的問題,雖然針對不同問題的最佳的數據導入方法也不同,但我們先要學會一種未必最佳,但是通用、安全、簡單、好學的方法。

二、在程序中直接向變量賦值

直接在程序中向變量賦值,是雖然笨拙但最簡單的方法,也許還是最可靠的方法——如果你沒有敲錯鍵盤的話。

確實,把直接賦值作為數據導入方法來介紹,實在是不好意思說出口。但是,對于數模競賽這種特殊的需求,直接賦值的方法還是十分常用的,而且完全符合簡單、實用、可靠的要求。

不過,直接賦值也并非我們想的那么簡單,還是值得認真地談一談。

2.1、為什么直接賦值?

絕大部分數學建模教材中的例程,都是使用直接賦值的方法導入數據。很大比例的博客例程,包括本系列的大多數案例,也都是在程序中直接賦值的。

其原因在于,一是為了保證程序的完整性,復制粘貼回車就能得到運行結果,不需要復制數據文件等操作,就避免了由此引起的各種錯誤;二是為了把讀者的注意力聚焦在主要的知識點,避免干擾;三是使例程更加直觀易懂,便于理解例程的算法。

這些原因也都是直接賦值的優點。那么,這些優點不也正是數模競賽編程活動的痛點嗎?沒錯,這就是直接賦值方法在數學建模培訓和數模競賽編程的實踐中廣泛流行的原因。

2.2、直接賦值的問題與注意事項

但是,即使在數模競賽編程中,直接賦值也會有幾個問題。

一是某些問題不能使用直接賦值方法。這主要是大數據的問題,數據量或數據文件的數量極大,已經不能使用直接賦值實現了。

二是一些問題雖然可以直接賦值,但很容易出錯。這主要是數據量很大,或者數據結構、類型比較復雜的問題。

例如,多元分析、時間序列、數據統計類的題目可能都有很大的數據量,在附件中提供數據文件。這時如果在使用直接賦值導入數據,不再是敲鍵盤了,而是從文件中把數據復制粘貼到程序中。

這時要特別注意的問題是:

文件中的數據分隔符是什么,空格還是逗號,與變量賦值的格式要求是否一致? 即使文件中的數據分隔符看上去是空格,也需要檢查到底是空格還是制表符,是一個空格還是幾個空格? 文件中的數據有沒有錯漏等異常?這在讀取文件中可以通過程序檢查、識別和處理,在復制粘貼時就要人工處理了。

三是數據量不大的問題,完全可以用直接賦值導入數據,但也會由于疏忽大意而出錯。

這倒不是說敲錯鍵盤了,而是由于例程不一定是把數據賦值作為獨立模塊處理的,而是分散在算法的過程中進行賦值。同學在使用和修改例程時時,就很容易忘記修改算法過程中的變量賦值。這種情況屢見不鮮,有時是因為對程序沒有搞明白,忽略了算法步驟中的某個變量;更多時候是忙中出錯,在反復調試和更換數據時暈頭轉向,只顧了修改開始的數據而疏忽了后面的數據。

養成數據導入模塊化的習慣,才能避免這一類的疏忽:

將數據導入模塊作為單獨的函數。 如果不愿意使用數據導入函數,則要把數據導入部分集中寫成一段,放在程序的起始部分。 不要把問題本身的數據導入與算法所需的參數賦值混淆,分為兩個獨立的函數或段落。

例程 1:將數據導入作為單獨的函數

# 子程序:定義優化問題的目標函數def cal_Energy(X, nVar, mk): # m(k):懲罰因子 p1 = (max(0, 6*X[0]+5*X[1]-320))**2 p2 = (max(0, 10*X[0]+20*X[1]-7027)**2 fx = -(10*X[0]+9*X[1]) return fx+mk*(p1+p2)# 子程序:模擬退火算法的參數設置def ParameterSetting(): tInitial = 100.0 # 設定初始退火溫度(initial temperature) tFinal = 1 # 設定終止退火溫度(stop temperature) alfa = 0.98 # 設定降溫參數,T(k)=alfa*T(k-1) nMarkov = 100 # Markov鏈長度,也即內循環運行次數 youcans = 0.5 # 定義搜索步長,可以設為固定值或逐漸縮小 return tInitial, tFinal, alfa, nMarkov, youcans

例程 2:將數據導入集中寫成一段,放在程序的起始部分

# 主程序def main(): # 模型數據導入 p1 = [6, 5, -320] p2 = [10, 20, -7027] p3 = [10, 9] print(p1,p2,p3) # 算法參數設置 tInitial = 100.0 # 設定初始退火溫度(initial temperature) tFinal = 1 # 設定終止退火溫度(stop temperature) alfa = 0.98 # 設定降溫參數,T(k)=alfa*T(k-1) nMarkov = 100 # Markov鏈長度,也即內循環運行次數 youcans = 0.5 # 定義搜索步長,可以設為固定值或逐漸縮小 print(tInitial, tFinal, alfa, nMarkov, youcans)三、Pandas 導入數據

雖然很多數模競賽的問題可以通過直接賦值獲取數據,但主流的數據導入方法還是讀取數據文件。

數學建模中常用的數據文件格式有文本文件(.txt)、Excel 文件(.xls, .xlsx)和 csv 文件(.csv)。

在讀取文本文件時,會遇到逗號、空格、制表符等不同的數據分割符。讀取 Excel 文件時,首先 .xls 與 .xlsx 的格式不同,其次要考慮數據表帶不帶標題行,有時文件中還有多個工作表。讀取文件時還會遇到數據缺失,非法字符。對于小白來說,特別在競賽時,處理這些問題時都會心神不寧。

Python 中讀取數據文件的方法也很多。本文非常不推薦使用 Python 自身的文件操作如打開(open)、關閉(close)、讀寫(read、readline)函數,而是推薦使用 Pandas 讀取數據文件。原因在于:

Pandas 提供了多種常用文件格式的讀寫函數,以上各種情況都能一行代碼搞定。 Pandas 是基于 NumPy 構建的數據分析工具包,便于進行數據整理與清洗,操作方便靈活。 Pandas 提供了與其它各種數據結構的轉換工具,使用簡單靈活。 很多數學建模算法的例程就是使用 Pandas 的 Series、DataFrame 數據結構,無需進行轉換。3.1、Pandas 讀取 Excel 文件

Pandas 使用 read_excel() 函數讀取 Excel文件。

pd.read_excel(io, sheetname=0,header=0,index_col=None,names=None)

pd.read_excel() 的主要參數:

io : 文件路徑(包括文件名)。 header :指定作為列名的行。默認為 0,即首行為標題行。設置 header=None,表示無標題行,首行就是數據行。 sheetname:指定工作表。默認為 sheetname=0。設置 sheetname=None 返回全表, 設置 sheetname=[0,1] 返回多表 。 index_col :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

pd.read_excel() 使用實例:

# sheetname 表示讀取指定的工作表,header=0 表示首行為標題行,header=None 表示首行為數據行df = pd.read_excel('data/youcans1.xls', sheetname=’Sheet1’, header=0)3.2、Pandas 讀取 csv 文件

**Pandas 使用 pandas.read_csv() 函數讀取 Excel文件。 **

pd.read_csv( filepath ,sep=’,’, header=’infer’, names=None, index_col=None)

pd.read_csv() 的主要參數:

filepath : 文件路徑(包括文件名)。 sep:指定分隔符。默認為逗號 ’,’,可根據需要設置其它分隔符。 header :指定作為列名的行。如果文件沒有列名則默認為 0,表示首行就是數據行;設置 header=None,表示無標題行,首行就是數據行。 index_col :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

pd.read_csv() 使用實例:

# sep=’,’表示間隔符為逗號,header=0表示首行為標題行,header=None 表示首行為數據行df = pd.read_csv('data/youcans2.csv', header=0, sep=’,’) 3.3、Pandas 讀取文本文件

**對于文本文件 .txt 和 .dat,可以使用 pandas.read_table() 函數讀取 。 **

pd.read_csv( filepath ,sep=’t’, header=’infer’, names=None, index_col=None)

pd.read_table() 的主要參數:

filepath : 文件路徑(包括文件名)。 sep:指定分隔符。默認為 tab 制表符,可根據需要設置其它分隔符。 header :指定作為列名的行。如果文件沒有列名則默認為 0,表示首行就是數據行;設置 header=None,表示無標題行,首行就是數據行。 index_col :指定作為行索引的列編號或列名。 names:指定列名, 類型為 list。

pd.read_table() 使用實例:

# sep=’t’表示分隔符為制表符,header=None 表示無標題行,第一行是數據df = pd.read_table('data/youcans3.dat', sep='t', header=None)3.4、Pandas 讀取其它文件格式

Pandas 還提供了讀取多種文件格式的函數,使用方法也都類似,都是一行代碼搞定。例如:

pandas.read_sql,讀取 SQL 數據庫 pandas.read_html,抓取網頁中的表格數據 pandas.read_json,讀取 JSON 數據文件 pandas.read_clipboard,讀取剪貼板內容

由于這些文件格式中數模競賽中很少用到,本文就不進行詳細介紹了。有需要的同學可以根據函數名通過搜索引擎搜索參考資料,也可以查閱官方文檔:

Pandas 輸入輸出函數的說明文檔

Input/output — pandas 1.2.4 documentation (pydata.org)

https://pandas.pydata.org/pandas-docs/stable/reference/io.html

此外,對于大數據類的問題,所需處理的數據量可能非常大,必要時需對文件進行拆分或合并,也可以用 pandas 進行處理,這將在后續文章結合具體問題進行講解。

四、數據導入例程

【重要說明】以上章節的內容雖然介紹了數據導入的基本方法,但恐怕還是難以達到消化吸收,為我所用。為了解決這個問題,本文將相關內容整合為例程,以便于讀者學習收藏,也便于使用修改。

例程01:讀取數據文件

import pandas as pd# 讀取數據文件def readDataFile(readPath): # readPath: 數據文件的地址和文件名 # readPath = '../data/youcansxupt.csv' # 文件路徑也可以直接在此輸入 try:if (readPath[-4:] == '.csv'): dfFile = pd.read_csv(readPath, header=0, sep=',') # 間隔符為逗號,首行為標題行 # dfFile = pd.read_csv(filePath, header=None, sep=',') # sep: 間隔符,無標題行elif (readPath[-4:] == '.xls') or (readPath[-5:] == '.xlsx'): # sheet_name 默認為 0 dfFile = pd.read_excel(readPath, header=0) # 首行為標題行 # dfFile = pd.read_excel(filePath, header=None) # 無標題行elif (readPath[-4:] == '.dat'): # sep: 間隔符,header:首行是否為標題行 dfFile = pd.read_table(readPath, sep=' ', header=0) # 間隔符為空格,首行為標題行 # dfFile = pd.read_table(filePath,sep=',',header=None) # 間隔符為逗號,無標題行else: print('不支持的文件格式。') except Exception as e:print('讀取數據文件失敗:{}'.format(str(e)))return return dfFile# 主程序def main(): # 讀取數據文件 # Youcans, XUPT readPath = '../data/toothpaste.csv' # 數據文件的地址和文件名 dfFile = readDataFile(readPath) # 調用讀取文件子程序print(type(dfFile)) # 查看 dfFile 數據類型 print(dfFile.shape) # 查看 dfFile 形狀(行數,列數) print(dfFile.head()) # 顯示 dfFile 前 5 行數據 returnif __name__ == ’__main__’: # Youcans, XUPT main()

例程01 運行結果:

<class ’pandas.core.frame.DataFrame’>

(30, 6)

   period  price  average  advertise  difference  sales

0       1   3.85     3.80       5.50       -0.05   7.38

1       2   3.75     4.00       6.75        0.25   8.51

2       3   3.70     4.30       7.25        0.60   9.52

3       4   3.70     3.70       5.50        0.00   7.50

4       5   3.60     3.85       7.00        0.25   9.33

例程01 程序說明:

1.本例程需要讀取數據文件 '../data/toothpaste.csv',該文件保存在 ../data/ 目錄下。讀者需要修改該數據文件的文件路徑和文件名,以便讀取自己需要的本地文件。

2.本例程可以根據文件名的后綴自動識別文件類型,調用相應的函數讀取文件。

3.本例程中讀取文件模塊使用 try...except 語句進行簡單的異常處理。如果讀取失敗,可以根據拋出的異常類型查找錯誤。

以上就是淺談Python數學建模之數據導入的詳細內容,更多關于Python 數學建模 數據導入的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲性色av| 精品久久国产一区| 你懂的国产精品永久在线| 日韩中文一区二区| 亚洲精品欧洲| 日韩精品一区二区三区中文字幕| 综合国产视频| 亚洲精选av| 亚洲一级大片| 日韩和欧美一区二区| 日本精品在线播放| 国产精区一区二区| 国产精品一站二站| 国产精品白丝久久av网站| 国产日韩一区二区三区在线播放| 欧美日韩午夜电影网| 国产欧美在线| 日韩高清国产一区在线| 亚洲精品少妇| 69堂精品视频在线播放| 国产精品va| 狠狠躁少妇一区二区三区| 亚洲综合在线电影| 欧美成人综合| 亚洲无线观看| 国产精品片aa在线观看| 丁香婷婷久久| 亚洲免费成人av在线| 日本不卡在线视频| 久久精品国产999大香线蕉| 日韩av专区| 丝袜美腿诱惑一区二区三区| 日韩在线综合| 亚洲一区二区动漫| 亚洲精品高潮| 国产精品sss在线观看av| 中文av在线全新| 一本一道久久a久久精品蜜桃| 石原莉奈一区二区三区在线观看| 午夜亚洲福利| 国产一区二区精品福利地址| 久久高清精品| 免费成人在线影院| 国产日韩亚洲欧美精品| а√天堂中文在线资源8| 激情久久久久久久| 亚洲人成在线影院| 国产亚洲人成a在线v网站| 国产精品13p| 日韩午夜av在线| 日韩av在线播放中文字幕| 韩国一区二区三区视频| 亚洲一级黄色| 欧美日韩在线精品一区二区三区激情综合| 国产精品**亚洲精品| 久久三级福利| 日韩精品欧美大片| 高清日韩欧美| 久久电影一区| 欧美精品影院| 久久一区二区三区喷水| 日本a口亚洲| 国产aa精品| 丝袜国产日韩另类美女| 国产一区二区三区亚洲综合| 亚洲欧美日韩国产一区| 精品一区91| 久久高清一区| 97欧美在线视频| 亚洲免费福利一区| 日韩精品久久久久久久电影99爱 | 伊人成人网在线看| 国产日产一区| 不卡在线一区二区| 国产麻豆一区二区三区精品视频| 亚洲国产专区校园欧美| 欧美一区二区三区免费看| 日韩欧美美女在线观看| 日韩精品诱惑一区?区三区| 亚洲婷婷丁香| 久久在线电影| 麻豆精品在线观看| 蜜桃免费网站一区二区三区| 伊人久久av| 亚洲最新av| 久久国产日本精品| 国产精品亚洲成在人线| 亚洲专区欧美专区| 日韩国产综合| 欧美日韩一区二区三区在线电影| 国产一区二区亚洲| 7m精品国产导航在线| 影音国产精品| 中文一区一区三区高中清不卡免费| 欧美一级网站| 午夜国产欧美理论在线播放| 精品网站999| 亚洲欧美在线专区| 欧美日韩国产在线观看网站| 日韩成人a**站| 91精品国产自产观看在线| 亚洲激情婷婷| 性感美女一区二区在线观看| 麻豆视频久久| 亚洲一区二区三区四区电影 | 国产成人精品亚洲日本在线观看| 日韩不卡一二三区| 国产精品日本一区二区不卡视频 | 男女男精品网站| 成人精品天堂一区二区三区| 国内一区二区三区| 亚洲尤物av| 黄色在线一区| 91一区二区| 国产欧美欧美| 日本一区二区三区中文字幕| 一区三区视频| 国产一区久久| 伊伊综合在线| 日本久久综合| 福利一区和二区| 精品国内亚洲2022精品成人| 国产精品视频一区二区三区综合 | 国产欧美日韩免费观看| 日韩av一区二区三区| 视频精品一区二区| 亚洲一区二区三区四区五区午夜 | 日韩在线看片| 欧美天堂视频| 都市激情国产精品| 国产精品对白久久久久粗| 999国产精品视频| 97精品一区二区| 中文另类视频| 欧美手机在线| 亚洲精品网址| 亚洲视频www| 美女网站一区| 亚洲v在线看| 日韩网站在线| 一本一道久久a久久| 中文字幕av一区二区三区四区| 久久福利影视| 日韩欧乱色一区二区三区在线| 亚洲+小说+欧美+激情+另类| 日韩专区视频网站| 欧美亚洲国产日韩| 久久精品国产福利| 亚洲人成在线网站| 伊人久久大香线蕉av超碰演员| 日韩视频一区| 亚洲+小说+欧美+激情+另类| 亚洲性视频在线| 欧美色综合网| 日韩.com| 午夜国产精品视频免费体验区| 视频一区欧美日韩| 欧美亚洲tv| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 丁香婷婷久久| 久久青草久久| 免费视频久久| 鲁大师影院一区二区三区| 日韩激情综合| 黑森林国产精品av| 在线亚洲观看| 91免费精品国偷自产在线在线| 国产精品高清一区二区| 成人片免费看| 免费在线观看成人| 国产精品久久久久久久久久妞妞| 成人精品动漫一区二区三区| 激情婷婷亚洲| 日本综合精品一区| 国产资源在线观看入口av| 午夜一级久久| 久久99精品久久久野外观看| 天堂√8在线中文| 美日韩精品视频| 国产精品成人自拍| 九一成人免费视频| 日本一区二区中文字幕| 久久伊人国产| 欧美日韩国产一区精品一区| 日韩激情av在线| 97国产精品| 免费精品视频在线| 久久精品亚洲| 久久亚洲欧洲| 丰满少妇一区| 亚洲一区二区三区久久久| 精品国产美女a久久9999| 欧美日韩四区| 国产精品一级| 欧美日韩四区| 老司机精品视频网| 亚洲欧美日本日韩| 水蜜桃久久夜色精品一区| 亚洲黄页一区| 国产91在线精品|