最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

練習(xí)題:使用MATLAB對Excel出租車訂單數(shù)據(jù)進(jìn)行處理

2022-04-15 15:15 作者:數(shù)學(xué)建模學(xué)習(xí)交流  | 我要投稿

? ? ? 下表給出了某出租車司機(jī)某月每天各小時的跑單數(shù)據(jù),每一行表示一天的數(shù)據(jù),每一列表示某一個小時的數(shù)據(jù)。單元格中:括號前面的數(shù)值表示這一單對應(yīng)的收入,括號內(nèi)的數(shù)表示路程公里數(shù)。如果某個單元格為空,則說明該司機(jī)在這個小時沒有接單。以1號的第1個小時為例,該出租車司機(jī)跑了四單,第一單收入為16元,路程公里數(shù)為3.55km;第二單收入為19元,路程公里數(shù)為4.83km;第三單收入為57元,路程公里數(shù)為15.23km;第四單收入為28元,路程公里數(shù)為6.96km。
? ? ??類似的,7號的第2個小時中,該司機(jī)跑了兩單,第一單收入為26元,路程公里數(shù)為6.55km;第二單收入為25元,路程公里數(shù)為5.64km。

數(shù)據(jù)表下載:https://wwi.lanzoup.com/iWqDd038c3vi

在線表格:https://docs.qq.com/sheet/DWU51Y2xiWUtxQmR1


? ? ??問題:對上面的excel表格進(jìn)行數(shù)據(jù)預(yù)處理,計算出每一天各小時的三個指標(biāo):(1)訂單數(shù) (2)收入 (3)路程公里數(shù)。請將這三個指標(biāo)分別保存到三個矩陣中,矩陣的大小為31*24,其第i行第j列的元素表示第i號的第j個小時的計算結(jié)果。以第一天的第一個小時為例,矩陣的第一行第一列的數(shù)值分別為:4、120和30.57。(注:120=16+19+57+28、30.57=3.55+4.83+15.23+6.96)

下圖是參考答案的部分截圖,大家可以自行完成后對照:

(1)訂單數(shù)

(2)收入

(3)路程公里數(shù)


下面給出分析思路和參考答案,大家可以先自己動手寫寫。

第一步:導(dǎo)入數(shù)據(jù)

在MATLAB中,導(dǎo)入excel數(shù)據(jù)的函數(shù)為xlsread,從MATLAB2019版本開始,MATLAB引入了新的導(dǎo)入數(shù)據(jù)的函數(shù),并不再推薦使用xlsread.

這三個函數(shù)分別用于保存表格table類型、保存矩陣類型、保存元胞數(shù)組類型。其中,表格table類型在機(jī)器學(xué)習(xí)(微信公眾號:《數(shù)學(xué)建模學(xué)習(xí)交流》查看歷史文章)的視頻中介紹過,類似于python中的pandas包。矩陣類型中的元素只能為數(shù)值型或者邏輯型的單個值,而元胞數(shù)組中包含的元素非常廣泛,可以包含任意類型的數(shù)據(jù),例如數(shù)值、文本、矩陣、表格等。

關(guān)于元胞數(shù)組的更多介紹,大家可查看MATLAB官網(wǎng),這里我們不介紹很詳細(xì)的基礎(chǔ)知識:

https://ww2.mathworks.cn/help/matlab/cell-arrays.html

在元胞數(shù)組中,小括號()取值和大括號{}取值大家一定要重點(diǎn)關(guān)注,很容易搞錯!基礎(chǔ)不扎實(shí)的同學(xué)可以搜索相關(guān)的文章學(xué)習(xí)。

由于我們這里的數(shù)據(jù)比較簡單,且單元格中包含的主要是文本,因此大家可以考慮將數(shù)據(jù)導(dǎo)入為元胞數(shù)組類型。

MATLAB2019版本之前的同學(xué)請使用xlsread函數(shù)讀取數(shù)據(jù):

如果你的版本更新,推薦使用readcell函數(shù):


導(dǎo)入進(jìn)來的data的數(shù)據(jù)類型為cell,即元胞數(shù)組:

顯然,第一行和第一列我們不需要,可通過下面的代碼去除:


去除后的結(jié)果如下:


第二步:對每個單元格的元素分別處理

接下來的思路很簡單,我們可以使用循環(huán)的方法,依次對每個單元格的元素進(jìn)行處理。

這里我們先以第一行第一列的元素為例:

'16(3.55),19(4.83),57(15.23),28(6.96)'

我們需要先找到有幾個訂單,然后對每個訂單分別提取出收入和里程公里數(shù)。

這個元素是一個字符數(shù)組(char類型),你可以就把它當(dāng)成就是一個字符串,我們可以考慮對它進(jìn)行分列(split函數(shù)),以英文的逗號對其進(jìn)行分列,可以得到一個新的元胞數(shù)組,我們保存到tmp這個變量中,這個元胞數(shù)組中包含的元素個數(shù)就是這個小時的訂單數(shù):

接下來,只需要對tmp中每個元素進(jìn)行循環(huán),下一個難點(diǎn)在于如何得到每筆訂單的收入和公里數(shù)。

以這個元胞數(shù)組中的第一個元素為例:

?'16(3.55)'

我們可以考慮先以小括號對其進(jìn)行分列,然后分別處理小括號前和小括號后的數(shù)據(jù)。

顯然,tmp2中的第一個元素就是我們想要的收入,它現(xiàn)在還是一個字符數(shù)組類型,我們可以使用str2double函數(shù)將其轉(zhuǎn)換成數(shù)值類型。

tmp2中的第二個元素是里程公里數(shù),但它里面還有個右括號沒有去除,我們可以考慮使用strrep函數(shù)來對字符進(jìn)行替換,將原來的右括號替換為空字符串,然后再轉(zhuǎn)換成數(shù)值類型。

以上就是大致的思路,只需要把每一步的關(guān)系理清楚了,最后拼在一起就能得到最終的代碼。

下面給出清風(fēng)老師寫的參考代碼:


上述代碼中,多了一個判斷data中的元素是否為缺失值或者為nan的情況,使用到的函數(shù)為ismissing,這個函數(shù)我們之前也介紹過,請看:缺失值和異常值的處理(微信公眾號:《數(shù)學(xué)建模學(xué)習(xí)交流》查看歷史文章),~就是取反的意思。

這個例題先介紹到這里,請大家課后自己編程完成,自己動手印象才會深刻。


進(jìn)階代碼:使用cellfun函數(shù)避免循環(huán)

上面我們使用到了循環(huán)分別對元胞數(shù)組中的每一個元素進(jìn)行了處理,事實(shí)上我們可以把這個處理過程封裝為一個函數(shù),然后直接調(diào)用MATLAB內(nèi)置的cellfun函數(shù)來調(diào)用我們自己封裝的這個函數(shù),這樣得到的結(jié)果和上面的循環(huán)版本完全相同,但代碼會簡潔很多。


關(guān)于cellfun函數(shù)的用法,大家可以參考MATLAB官網(wǎng)的介紹:https://ww2.mathworks.cn/help/matlab/ref/cellfun.html
這里我直接給出代碼,供學(xué)有余力的同學(xué)參考學(xué)習(xí):前三行仍然是導(dǎo)入數(shù)據(jù),第四行是核心,我們需要調(diào)用自己封裝好的fun函數(shù):

子函數(shù),可將其保存為單獨(dú)的m文件,命名為fun.m:




練習(xí)題:使用MATLAB對Excel出租車訂單數(shù)據(jù)進(jìn)行處理的評論 (共 條)

分享到微博請遵守國家法律
临漳县| 新安县| 海南省| 渭源县| 海阳市| 晋州市| 章丘市| 平谷区| 大兴区| 筠连县| 东台市| 宁远县| 定日县| 大悟县| 买车| 盐津县| 黄浦区| 岱山县| 兰坪| 富蕴县| 饶河县| 伊金霍洛旗| 合山市| 郯城县| 利辛县| SHOW| 宁德市| 紫阳县| 凌海市| 景东| 含山县| 石河子市| 岳阳县| 张北县| 调兵山市| 襄垣县| 虞城县| 华容县| 梨树县| 深泽县| 彰化市|