第一篇:數據分析實驗報告冊
《數據分析》
實驗報告冊
15-20 16 學年
目錄
實驗一 網上書店的數據庫創建及其查詢
實驗 1-1 “響當當”網上書店的數據庫創建
實驗1-2 “響當當”網上書店庫存、圖書和會員信息查詢
實驗1-3 “響當當”網上書店會員分布和圖書銷售查詢
實驗二 企業銷售數據的分類匯總分析
實驗2-1 Northwind公司客戶特征分析
實驗2-2 “北風”貿易公司銷售業績觀測板
實驗三 餐飲公司經營數據時間序列預測
實驗3-1 “美食佳”公司半成品年銷售量預測
實驗3-2 “美食佳”公司月管理費預測
實驗3-3 “美食佳”華東分公司銷售額趨勢預測
實驗3-4 “美食佳”公司會員卡發行量趨勢預測
實驗3-5 “美食佳”火鍋連鎖店原料年度采購成本預測
實驗四 住房建筑許可證數量的回歸分析
實驗4-1 “家家有房”公司建筑許可證一元線性回歸分析
實驗4-2 “家家有房”公司建筑許可證一元非線性回歸分析
實驗4-3 “家家有房”公司建筑許可證多元線性回歸分析
實驗4-4 “家家有房”公司建筑許可證多元非線性回歸分析
實驗五 手機用戶消費習慣聚類分析
實驗六 新產品價格敏感度測試模型分析
實驗一 網上書店的數據庫創建及其查詢
實驗 1-1 “響當當”網上書店的數據庫創建
實驗類型:驗證性
實驗學時:2 實驗目的:
? 理解數據庫的概念;
? 理解關系(二維表)的概念以及關系數據庫中數據的組織方式; ? 了解數據庫創建方法。
實驗步驟:
這個實驗我們沒有直接做,只是了解了一下數據庫的概念。
實驗1-2 “響當當”網上書店庫存、圖書和會員信息查詢
實驗目的
? 理解odbc的概念;
? 掌握利用microsoft query進行數據查詢的方法。
實驗步驟:
1..建立odbc數據源:啟動microsoft office query應用程序,在microsoft office query應用程序窗口中,執行“文件/新建”命令,出現 “選擇數據源”對話框,單擊“確定”按鈕,出現“創建新數據源”對話框,按照要求做相應的操作。
選擇數據源對話框
創建新數據源窗口
做圖上所示的選擇
odbc microsoft access安裝對話框
選擇數據庫對話框
選擇數據源對話框
2.查詢設計1—低庫存量圖書信息查詢:選擇“bookstore”數據源,點擊“確定”,進入“添加表”窗口,添加書表后,在“查詢設計”窗口的“表”窗格中,分別雙擊“書”表中需要查詢的“書名”、“isbn”、“庫存量”等字段,執行“視圖/條件”命令,在“條件”窗格的“條件字段”行的 實驗小結:
因為我們沒有嘗試建立數據庫,直接開始數據查詢,所以實驗時遇到了很多問題。比如我們在選擇數據源時就遇到了麻煩,弄了半天才開始查詢設計,而且不是很熟練,一直做了四五個查詢設計才慢慢熟練起來。
實驗思考:
1、在數據查詢過程中,如果所選的某個表與其他表之間沒有聯系的話,會 產生什么問題?
答:所選的查詢數據將會全部顯示在查詢窗口,與其它表的數據沒有直接聯系。這樣就不能表現出表與表數據之間的關聯性,數據也就失去賦予的意義。
2、若“響當當個”網上書店的某個會員了解自己最近2年的圖書訂購情況,請為他設計一個查詢。
答:分別添加“書”、“會員”、“訂單明細”和“訂單”表,雙擊“書”表的“書名”、“會員”表的“姓名”和“訂單明細”表的“訂購數量”以及“訂單”表的“訂購日期”字段,在向查詢條件窗口中輸入某一會員姓名以及相應的訂購日期.實驗1-3 “響當當”網上書店會員分布和圖書銷售查詢
實驗目的
?掌握復雜的數據查詢方法:多表查詢、計算字段和匯總查詢
實驗步驟: 1.查詢設計1—會員分布信息查詢:添加“會員”表到查詢設計窗口,在“查詢設計”窗口的“表”窗格中,雙擊“會員”表的“城市”和“會員號”字段。然后雙擊“會員號”字段的列標,在“編輯列”對話框中輸入列標“會員人數”,并選擇匯總方式:“計數”,單擊“確定”按鈕后即可看到查詢結果,其中顯示了各城市的會員人數,再設置相應的條件,進行相應的查詢。
選擇匯總方式
查詢結果
2.查詢設計2—圖書總訂購量和總銷售金額查詢:添加“訂單”、“訂單明細”和“書”表。在“查詢設計”窗口的“表”窗格中,雙擊“訂單”表的“訂購日期”、“訂單明細”表的“訂購數量”字段。另外還要構造一個計算字段“銷售金額”,方法是直接在某空白列的列標中輸入公式;在上面的字段中,“訂購數量”和“銷售金額”是匯總字段,分類字段是“訂購年份”,雙擊“訂購日期”列的列標,在編輯列對話框的字段項中輸入公式“year(訂購日期)”,在其中的列標項中輸入“訂購年份”然后分別雙擊“訂購數量”和“訂購數量*單價”字段的列標,在編輯列對話框的列標項中分別輸入“總訂購數量”和“總銷售金額”字樣,并在總計項中選擇“求和”。
在“條件”窗格的“條件字段”行的
5.查詢設計5—被訂購圖書的作者和出版社信息查詢:添加“會員”、“訂單”、“訂單明細”、“書”、“作者”和“出版社”表。在表之間建立合適的聯系。在“查詢設計”窗口的“表”窗格中,雙擊“書”表的“書名”、“作者”表的“姓名”和“出版社”表的“出版社名稱”字段。在條件窗格中添加關于訂購日期和會員姓名的條件。可以查看到結果為會員“劉丹”在2007年共訂購了7本圖書。
實驗小結:
實驗1-3的實驗比較難,但是經過前面的練習還是比之前快一點,不過還是遇到一些困難,比如查看到結果為會員“劉丹”在2007年共訂購了幾本書的查詢設計就在輸入指令時卡住了,經過幾個同學討論還是做出來了。一直到晚上天黑了才把一共十個實驗做完。
實驗思考:
1、在進行匯總查詢的過程中,如果被選擇的字段除了分類字段以外還包含了其他字段。
查詢結果是否正確?為什么?請舉例說明。
答:不正確,如果被選擇的字段除了分類字段以外還包含了其他字段,那么query將把多余的字段自動作為分類字段。
2、“響當當”網上書店的管理人員想了解最近2年中那位作者的書是最暢銷,請你設計一個查詢找到相關作者。
答:查詢近兩年的總訂購量。
實驗二 企業銷售數據的分類匯總分析
實驗2-1 North wind公司客戶特征分析
實驗類型:驗證性
實驗學時:2 實驗目的:
? 理解數據分類匯總在企業中的作用與意義; ? 掌握數據透視表工具的基本分類匯總功能;
? 掌握建立分類匯總數據排行榜、生成時間序列、繪制praetor曲線圖、計算各地區客戶分布、統計各地區客戶的平均銷售額和大宗銷售時間序列的方法和步驟。
實驗步驟:
一、匯總客戶銷售額排行榜 為了匯總客戶銷售額的排行榜,首先要獲得客戶每筆銷售的銷售額、所購買產品的類別以及銷售發生的時間,然后再利用數據透視表工具將銷售額按照客戶名稱、產品類別和銷售時間加以匯總。
步驟1:獲取各客戶每筆銷售的銷售額、銷售產品的類別和時間。
在一張空白的工作表中,選擇菜單“數據”→“數據透視表和數據透視圖” →“外部數據源”,單擊“獲取數據按鈕”,隨后啟動了Microsoft Query,選擇所建立的連接到Northwind.mdb數據庫的ODBC數據源——“NW”,并選擇“確定”,選擇“客戶”表中的的“公司名稱”、“訂單”表中的“訂購日期”、以及“類別”表中“類別名稱”,隨后Query彈出窗口“?查詢向導?無法繼續,因為該表格無法鏈接到您的查詢中。您必須在Microsoft Query 中的表格之間拖動字段,人工鏈接?!边@是因為類別表無法同訂單表建立聯系。單擊“確定”。
要查詢銷售額,需要在Query中首先增加“訂單明細”表,利用其中的“單價”、“數量”與“折扣”字段中的數據,才能計算銷售額。在數據窗格中,在一個空白字段的名稱處輸入公式:“訂單明細.單價*數量*(1-折扣)”。鍵入回車后就可以計算出銷售額。見圖2-7。
隨后,將“產品”表也添加到查詢中,雖然查詢結果中并不包括任何“產品”表中的字段,但是該表的能夠建立“類別”表與“訂單明細”表之間的聯系(“訂單明細”表指明所訂購產品的ID,“產品”表指明該產品屬于哪一個類別)。此時,查詢中的表都建立了正確的聯系,并在查詢結果中包括了匯總所需要的數據。如圖2-7。
圖2-7 查詢各客戶每筆銷售的銷售額、銷售產品的類別和時間
將計算銷售額的字段的列標命名為“銷售額”。選擇Query菜單中的“文件”→“將數據返回Microsoft Office Excel”,此時Query已經關閉,我們的操作對象回到了Excel,單擊“下一步”,指定位置在“現有工作表”,單元格A3,單擊完成。
步驟2:匯總客戶銷售額排行榜,并排序。
此時,在工作表的區域A1:G16的位置,出現了數據透視表的框架,數據透視表的浮動工具欄和數據透視表的字段列表。
為了能對銷售的時間——“訂購日期”進行組合以獲得各年的銷售額,首先將“訂購日期”拖至行域,將“銷售額”拖至數據域,“類別名稱”拖至列域,得到如圖2-8所示的數據透視表。
圖2-8 按訂購日期與類別匯總銷售額
為了能將銷售額按照年度匯總,將光標停留在“訂購日期”下方的任何單元格,右擊鼠標,選擇“組合及顯示明細數據”→“組合”,選擇組合的步長為年。
然后將單元格A4當中的字段名稱“訂購日期”改為“訂購年”,將它推至頁域,將字段列表中的“公司名稱”拖到行域,讓透視表按照列總計,從大到小排列,就得到了如圖2-9所示的數據透視表。它能夠反映了三年或者各年度,各個客戶的銷售額的大小,以及排列名詞的先后,還能夠觀察到各客戶訂購的產品類別和該類別的銷售額。
圖2-9 按照訂購年、客戶公司名稱、類別名稱匯總的銷售額排行榜
二、匯總前三大客戶各月銷售額,并繪制圖形
在前一部分實驗的基礎上,選擇前三個最重要的客戶,進一步觀察購買情況,他們購買情況的變化將對公司整體銷售業績產生很大影響。所以,將前三大客戶的銷售數據加以展開,按月顯示其銷售的變化。
步驟1:將實驗要求1所匯總的數據透視表復制到新的工作表。步驟2:利用數據透視表,匯總前三大客戶的銷售額時間序列。
按照實驗要求1匯總的數據透視表,反映出“高上補習班、正人資源、大鈺貿易”是公司的前三大客戶。點開“公司名稱”字段,選中這三個公司名稱,并拖到列域。
將列域的字段“類別名稱”拖出數據透視表。將頁域的字段“訂購年”旋轉到行域,將其重新組合。選擇組合的步長為“月”和“年”,把字段名稱修改為“訂購年”與“訂購月”。光標停留在數據表中任何單元格,右擊鼠標,選擇“表格選項”,將“對于空數據項顯示”設置為“0”,即當該單元格匯總出的數據值為空時,在數據透視表中將其顯示為0。此時得到的前三大客戶銷售額時間序列見圖2-10。
圖2-10 Northwind公司前三大客戶銷售額時間序列
步驟3:繪制前三大客戶銷售額時間序列圖。
光標停留在數據透視表中,選擇菜單“插入”→“圖表”,在當前工作簿自動插入一張圖表。選擇菜單“圖表”→“位置”,將該圖表調整到與數據透視表位于同一張工作表。選擇菜單“圖表”→“圖表類型”,選擇“折線圖”→“數據點折線圖”。隨后,再對該圖的大小、外觀以及數據系列的格式加以調整,就能得到Northwind公司前三大客戶銷售額時間序列圖,如圖2-1所示。
三、繪制按照客戶匯總的客戶數與銷售額帕累托曲線
步驟1:查詢“訂購日期”、客戶的“公司名稱”與“銷售額”等數據。
在Excel的空白工作表中,選擇菜單“數據”→“數據透視表與數據透視圖” →“外部數據源”→“獲取數據”,利用Microsoft Query,從“訂單”表、“訂單明細”表與“客戶”表中查詢 “訂購日期”、客戶的“公司名稱”與“銷售額”(銷售額=訂單明細.單價*數量*(1-折扣))等字段,將所查詢數據返回Excel。
步驟2:利用查詢的數據,制作數據透視表。
從數據透視表的字段列表中,選擇“訂購日期”,拖至行域,將“銷售額”拖至數據域。將“訂購日期”字段按年組合,然后拖至頁域,將“公司名稱”拖至行域,按照銷售額從大到小的順序排列,得到按照年度和客戶公司名稱匯總的數據透視表,如圖2-11。
圖2-11 Northwind公司按照年度匯總的各客戶銷售額
步驟3:利用數據透視表的數據,計算客戶數累計百分比與客戶銷售額累計百分比,繪制帕累托曲線。
在區域D4:G4依次輸入說明文字,“公司名稱”、“ 客戶百分比”、“ 客戶數累計百分比 ”、“銷售額累積百分比”。按照圖2-12輸入公式,得到如圖2-13所示的匯總數據。
圖2-12 Northwind公司按照年度匯總客戶數累計百分比和銷售額累計百分比公式
圖2-13 Northwind公司按照年度匯總客戶數累計百分比和銷售額累計百分比
區域F5:F93匯總累計的客戶數,即到該客戶為止,已有客戶數占到總客戶數的百分比。區域G5:G93匯總了到該客戶為止,已有客戶實現的銷售額占總銷售額的百分比。
選中區域F4:G93的數據,繪制無數據點散點圖,得到如圖2-14所示圖形。
圖2-14 客戶數與銷售額的帕累托初步曲線
步驟4:在曲線上添加代表20%客戶數的垂直參考線。在I5:I7單元格輸入“20%”,在J5與J7單元格輸入“0”和“120%”,在J6單元格輸入公式:“=INDEX(G5:G93,MATCH(I5,F5:F93,1),1)”,即從客戶數累計百分比中,查找到20%的客戶數在
圖2-15 Northwind公司客戶數與銷售額帕累托曲線垂直參考線數據
最后公司客戶銷售額與客戶數parato曲線呈現如圖所示:
圖2-2 公司客戶銷售額與客戶數parato曲線
四、繪制按照訂單匯總的銷售額與銷售次數帕累托曲線 步驟1:查詢“訂購日期”、“訂單ID”與“銷售額”等數據。
在Excel的空白工作表中,選擇菜單“數據”→“數據透視表與數據透視圖” →“外部數據源”→“獲取數據”,利用Microsoft Query,從“訂單”表和“訂單明細”表中查詢 “訂購日期”、“訂單ID”與“銷售額”(銷售額=訂單明細.單價*數量*(1-折扣))等字段,將查詢數據返回Excel。
步驟2:利用查詢的數據,制作數據透視表。
從數據透視表的字段列表中,選擇“訂購日期”,拖至行域,將“銷售額”拖至數據域。將“訂購日期”字段按年組合,拖至頁域,將“訂單ID”拖至行域,按照銷售額從大到小的順序排列,得到按照年度和訂單ID匯總的數據透視表,如圖2-16。
圖2-16 Northwind公司按照年度匯總各訂單銷售額
步驟3:利用數據透視表的數據,計算客戶數累計百分比與銷售額累計百分比,繪制帕累托曲線。
在區域D4:G4依次輸入說明文字,“銷售次數百分比”、“ 銷售次數累計百分比”、“ 銷售額累計百分比 ”。按照圖2-17輸入公式,得到如圖2-18所示的匯總數據。
圖2-17 Northwind公司按照年度匯總客戶數累計百分比和銷售額累計百分比公式
圖2-18 Northwind公司按照年度匯總客戶數累計百分比和銷售額累計百分比
區域E5:E834計算單次銷售占總銷售次數(即訂單數)的百分比,區域F5:F834匯總累計銷售次數占總銷售次數的百分比,即到該訂單為止,已有訂單數占到總訂單數的百分比。區域G5:G834匯總到該訂單為止,已有訂單實現的銷售額占總銷售額的百分比。
選中區域F4:G834的數據,繪制無數據點散點圖,得到如圖2-19圖形。
圖2-19 銷售次數與銷售額的帕累托初步曲線
步驟4:在曲線上添加代表20%客戶數的垂直參考線。
在I5:I7單元格輸入“20%”,在J5與J7單元格輸入“0”和“120%”,在J6單元格輸入公式:“=INDEX(G5:G834,MATCH(I5,F5:F G834,1),1)”,即從銷售次數累計百分比中,查找20%的銷售次數在
圖2-3 norwthwind公司銷售次數與銷售額parato曲線
五、匯總各地區客戶分布
步驟1:查詢“公司名稱”與“地區”字段等數據。
將Excel一張空白工作表命名為“5.各地區客戶分布”。選擇菜單“數據”→“數據透視表與數據透視圖” →“外部數據源”→“獲取數據”,利用Microsoft Query,從“客戶”表中查詢 “公司名稱”與“地區”字段,然后將所查詢的數據返回Excel。
步驟2:利用查詢的數據,制作數據透視表。
從數據透視表的字段列表中,選擇“地區”,拖至行域,選擇“公司名稱”,拖至數據域,得到按照地區匯總的客戶數的數據透視表,如圖2-20。
圖2-20 按照地區匯總客戶數的數據透視表
步驟3:利用數據透視表的數據,制作數據透視圖。光標停留在數據透視表中,選擇菜單“插入”→“圖表”,在新建工作表中建立數據透視圖,改變該圖表位置,將其調整到“5.各地區客戶分布”工作表中,得到了如圖2-4所示的圖形。
圖2-4 公司各地區客戶的分布
六、繪制各地區平均銷售額及銷售額占總銷售額百分比 步驟1:查詢“地區”與“銷售額”等數據。
在Excel的空白工作表中,選擇菜單“數據”→“數據透視表與數據透視圖” →“外部數據源”→“獲取數據”,利用Microsoft Query,選擇數據源,從“客戶”、和“訂單明細”表中,查詢客戶的“地區”與“銷售額”(銷售額=訂單明細.單價*數量*(1-折扣))等字段,將查詢數據返回Excel。查詢時應包括“訂單”表,該表能建立 “客戶”表和“訂單明細”表之間的聯系。
步驟2:利用查詢的數據,制作數據透視表。
從數據透視表的字段列表中,選擇“地區”,拖至行域,將“銷售額”拖至數據域,得到按照地區匯總的銷售額的數據透視表,如圖2-21。
圖2-21 Northwind公司按照地區匯總的銷售額
步驟3:利用數據透視表的數據,計算各地區平均銷售額與銷售額占總銷售額的百分比。在區域D4:G4依次輸入說明文字:“地區”、“ 客戶數 ”、“平均銷售額”與“ 銷售額占總額百分比”。按照圖2-22輸入公式,得到如圖2-23所示的匯總數據。
圖2-22 Northwind公司按照地區匯總平均銷售額、銷售額占總銷售額百分比公式
圖2-23 Northwind公司按照地區匯總平均銷售額、銷售額占總銷售額百分比
區域E5:E10存放各地區的客戶數,區域F5:F10計算各地區平均銷售額,區域G5:G10計算各地區銷售額占總銷售額的百分比。利用區域D5:D10與區域F5:G10中的數據,繪制柱型圖。由于一個數據系列是平均銷售額,一個數據系列是百分比,兩個系列數值相差懸殊,所以在圖2-24中,只能觀察到一個數據系列的柱型,另一個系列的柱型貼近“0”,無法觀察到。選中代表百分比的系列(選中平均銷售額的系列,移動上下箭頭,直到選中代表百分比的系列),選擇菜單“格式”→“數據系列格式” →“坐標軸”→“次坐標軸”,將代表百分比的系列對應到次坐標軸。
圖2-24 Northwind公司按照地區匯總平均銷售額、銷售額占總銷售額百分比圖
觀察該圖形,可以發現 “華東”與“西南”地區,客戶的平均銷售額比其他地區高,說明這兩個地區大客戶的銷售情況比較好。華北地區雖然銷售額占總銷售額的百分比最高,是Northwind公司最重要的市場,但該地區大客戶的銷售情況并不理想,平均銷售額并不高。今后該地區應更注重改善大客戶銷售情況。
七、繪制大宗銷售的銷售額時間序列。
步驟1:查詢“公司名稱 ”、“訂單ID”、“ 訂購日期”與“ 銷售額”等數據。
將Excel的空白工作表命名為“7.大宗銷售數據”,選擇菜單“數據”→“獲取外部數據” →“外部數據源”→“獲取數據”,利用Microsoft Query,從“客戶”表、“訂單”表和“訂單明細”表中,查詢“公司名稱 ”、“訂單ID”、“ 訂購日期”與“ 銷售額”(銷售額=訂單明細.單價*數量*(1-折扣))等字段,將查詢數據返回Excel,存放在區域A1:D831。
步驟2:挑選出銷售額超過2000元的訂單。
在區域F1:F2,按照圖2-25,輸入篩選的條件。利用Excel高級篩選功能,挑選出滿足條件的記錄,存放在區域H1:K186中。
圖2-25 Northwind公司2000元以上銷售額的訂單的銷售情況
步驟3:利用挑選出的訂單,制作數據透視表。利用區域H1:K186中的數據,制作數據透視表。從數據透視表的字段列表中,選擇“訂購日期”,拖至行域,將“銷售額”拖至數據域,將“訂購日期”字段按年組合,然后拖至頁域,將“公司名稱”拖至頁域,規定行域字段必須“顯示空數據項”,得到如圖2-26所示的數據透視表。
圖2-26 Northwind公司大宗銷售的時間序列數據透視表
步驟4:繪制大宗銷售的時間序列圖形。
為了讓圖形能夠正確反映銷售情況,去掉沒有發生銷售的時間點,如96年1月到96年6月,我們在數據透視表外面,另準備作圖數據。按照圖2-27,在區域E12:E33輸入從96年7月到98年4月的時間(98年5月數據不完整,故不包括在時間序列內),在單元格F12輸入公式:“=C12”,并復制到區域F13:F33。
圖2-27 Northwind公司大宗銷售的時間序列作圖數據
利用區域E11:F33中的數據,制作折線圖,將圖表X軸的類型改為分類軸?!肮久Q”選擇“全部”,在圖形上嘗試添加恰當的趨勢線,顯示趨勢線的方程與R2,并前推兩個周期,得到的時間序列圖形如圖2-28。從該圖形上,可以大致了解大宗銷售的變化趨勢,對未來的情況做初步估計。
圖2-28 Northwind公司大宗銷售的時間序列圖
實驗小結:
數據透視表分類匯總的兩種方法:
1、先將數據導入Excel成為數據清單,利用數據透視表匯總對數據清單進行匯總
2、利用數據透視表直接從數據庫中查詢、并匯總數據。數據透視表功能,使用最方便,可以把匯總表“旋轉”,從不同的“角度”查看數據,還可以篩選數據、合并數據、展開詳細數據、或者選擇部分數據加以查看。
實驗思考:
1、你還能從哪些方面對客戶的銷售數據進行分析,幫助該公司促進銷售或者為客戶提供更好的服務?
答:使用Northwind公司的銷售數據,生成凈銷售額時間序列,創建可以調節的產品列表框,并繪制特定產品銷售金額時間序列的圖形。觀測每種產品在不同年份不同月份的銷售情況,對下階段的銷售做出預測。
2、帕累托曲線可以幫助分析投入與產出之間的關系,它還能幫助該公司進哪些方面的分析?
答:①帶來80%利潤的20%的顧客在哪里,并且留住他們。②銷售量達80%的20%產品是哪些,找出來好好包裝開發。③銷售量達80%的20%城市在哪里,并且維護好。
實驗三 餐飲公司經營數據時間序列預測
實驗3-1 “美食佳”公司半成品年銷售量預測
實驗類型:驗證性
實驗學時:2 實驗目的: ? 理解數平滑預測法的概念;
? 掌握在excel中建立指數平滑預測模型的方法; ? 掌握尋找最優平滑常數的各種方法。
實驗步驟:
一、運用“數據分析”工具進行指數平滑預測 步驟1:確定時間序列的類型。
如圖3-1所示在單元格a1:b21中布置好公司從1987-2006年的銷售量數據。然后,繪制公司從1987年至2006年共20年的銷售量折線圖,結果如圖3-2所示,既沒有趨勢成分也沒有季節成分,呈現出的是圍繞一個水平上下波動的時間序列,說明適合用指數平滑法或移動平均法進行預測。本實驗的數據是年度數據,建議采用指數平滑預測法。
圖3-1 公司從1987-2006年的銷售量數據
圖3-2 公司從1987-2006年的銷售量折線圖
步驟2:利用“數據分析”工具中的指數平滑功能進行預測。
在“工具”菜單中選擇“加載宏”,在隨后彈出的“加載宏”對話框中選擇“分析工具庫”,然后單擊“確定”按鈕,將會在“工具”菜單下出現“數據分析”選項。在“工具”菜單中選擇“數據分析”,在出現的“數據分析”對話框中選擇“指數平滑”,出現如圖3-3所示的對話框。
圖3-3 指數平滑分析的參數設置
在“指數平滑”對話框中,在“輸入區域”輸入“b2:b21”單元格,“阻尼系數”輸入“0.75”(注:阻尼系數=1-平滑常數),在“輸出區域”輸入“c2”單元格,單擊“確定”按鈕,將會看到如圖3-4中單元格c2:c21的輸出結果。
將單元格c21往下復制,便得到2007年的指數平滑預測值7.96。
圖3-4 指數平滑預測結果
二、運用指數平滑公式進行預測 步驟1:利用公式
計算指數平滑預測值。
如圖3-5,在單元格f1中輸入平滑常數0.25,在單元格c2中輸入公式:“=b2”,作為
三、尋找最優的平滑常數 步驟1:計算均方誤差。
如圖3-5在單元格f2中輸入公式:“=average((b2:b21-c2:c21)^2)”,作為數組運算,需要同時按Ctrl+Shift+Enter三個鍵作為輸入結束,計算均方誤差MSE。步驟2:利用模擬運算表及查找引用函數功能,尋找最優平滑常數。
如圖3-7在單元格e7:e24中給出不同的平滑常數(大于0小于1),在單元格f6中輸入公式:“=f2”,選定單元格e6:f24,在“數據”菜單中選擇“模擬運算表”,在彈出的對話框中做如圖3-8所示的參數設置,利用一維模擬運算表功能計算不同平滑常數下的mse值,見圖3-7結果。
圖3-7 模擬運算表輔助查找最優平滑常數
圖3-8 模擬運算表對話框參數設置
在單元格f4中輸入公式:“=index(e7:e24,match(min(f7:f24),f7:f24,0))”,找到最優平滑常數為0.35。然后,根據最優平滑常數0.35(將此值代入單元格f1中),2007年的預測值為7.94。
步驟3:利用規劃求解功能,尋找最優平滑常數。規劃求解工具是一個從函數值所要達到的目標出發,反過來確定為達到這個目標,各自變量應取什么值的工具。
在“工具”菜單中選擇“規劃求解”,在彈出的對話框中做如圖3-9所示的參數設置,然后單擊“求解”按鈕,得到如圖3-10所示的規劃求解結果,其中可變單元格f2中顯示最優平滑常數為0.37。根據最優平滑常數0.37,2007年的預測值為7.93。
圖3-9 規劃求解參數設置
圖3-10 規劃求解的結果
以上兩種方法所尋找到的平滑常數都是基于實際銷售量與預測銷售量的均方誤差極小,從理論上證明了所獲得的平滑常數是最優的。
實驗思考:
1.為什么用模擬運算表加查找引用函數功能,得到的最優平滑常數(0.35),與用規劃求解功能得到的結果(0.37)不一樣?
答:用模擬運算表加查找引用函數功能得到的最優平滑常數(0.35)是根據設定的間隔求解,結果不是很準確。而規劃求解功能得到的結果(0.37)是精確結果。
2.可否調整模擬運算表的輸入數據間隔,再試一試,結果會如何?
答:在實驗3-1中,調整模擬運算表的輸入數據間隔,其結果不變。因為模擬運算表只是將數據代入變量中來求得對應的值,所得到的值與數據的間隔無關。
實驗3-2 “美食佳”公司月管理費預測
實驗目的:
? 理解移動平均預測法的概念;
? 掌握在excel中建立移動平均模型的方法; ? 掌握尋找最優移動平均跨度的各種方法。
實驗步驟:
一、運用“數據分析”工具進行移動平均預測 步驟1:確定時間序列的類型。
如圖3-11所示在單元格a1:c19中布置好公司從2006年1月至2007年6月的數據。
繪制公司從2006年1月至2007年6月共18個月的管理費用折線圖,結果如圖3-12所示,既沒有趨勢成分也沒有季節成分,呈現出的是圍繞一個水平上下波動的時間序列,說明適合用指數平滑法或移動平均法進行預測。本實驗的數據是月度數據,建議采用移動平均預測法。
圖3-11 公司從2006年1月至2007年6月的管理費數據
圖3-12 公司從2006年1月至2007年6月的管理費用折線圖
步驟2:利用“數據分析”工具的移動平均功能進行預測。在“工具”菜單中選擇“數據分析”,在出現的“數據分析”對話框中選擇“移動平均”,出現如圖3-13所示的對話框。
在“移動平均”對話框中,在“輸入區域”輸入“c2:c19”單元格,“間隔”輸入“3”(注:移動平均跨度為3),在“輸出區域”輸入“d3”單元格,單擊“確定”按鈕,將會看到如圖3-14中單元格d5:d20的輸出結果。
如單元格d20所示,2007年7月公司管理費用的移動平均預測值為20.3萬元。
圖3-13 移動平均對話框參數設置
圖3-14 移動平均預測結果
二、運用移動平均公式進行預測
步驟1:利用average()函數計算移動平均預測值。
如圖3-15,在單元格g1中輸入移動平均跨度3,在單元格d5中輸入移動平均模型預測公式:“=average(c2:c4)”。
將單元格d5往下復制,便得到2007年7月的移動平均預測值20.3。
圖3-15平均值函數的計算結果
步驟2:繪制移動平均預測圖。
利用單元格c2:d20中的數據繪制如圖3-16所示的公司18個月的管理費用及移動平均預測圖。
圖3-16 公司18個月的管理費用及移動平均預測圖
通過以上實驗能夠檢驗,運用“數據分析”工具和移動平均公式進行移動平均預測的預測結果是一致的?!懊朗臣选惫?007年7月的管理費移動平均預測值為20.3,此預測結果是基于移動平均跨度為3個月所獲得的。對沒有先期經驗的人來說,怎樣選擇移動平均跨度呢?又怎么判斷所選的移動平均跨度是最優的呢?下面的實驗步驟將指導我們掌握尋找最優移動平均跨度的不同方法。
三、尋找最優的移動平均跨度 步驟1:計算均方誤差。
此處用到兩個函數:sumxmy2()函數和count()函數。sumxmy2()函數的功能是返回兩數組中對應數值之差的平方和,它需要兩個參數,一個參數是 圖3-18結果。
圖3-18模擬運算表輔助查找最優移動平均跨度
圖3-19 模擬運算表參數設置
在單元格g4中輸入公式:“=index(f7:f15,match(min(g7:g15),g7:g15,0))”,找到最優移動平均跨度為5。根據最優移動平均跨度5(將此值代入單元格g1中),2007年7月的預測值為20.2。
實驗思考
1.可否利用規劃求解功能,尋找最優的移動平均跨度?
答:在實驗3-2中,無法利用規劃求解功能尋找最優的移動平均刻度。因為求MSE所用的公式為“=SUMXMY2(C2:C19,D2:D19)/COUNT(D2:D19)”與移動平均刻度值所在的G1單元格無直接聯系。
2.excel提供的移動平均趨勢線功能也可進行移動平均預測,但趨勢線方法與本實驗所介紹的方法有何不同?
答:Excel提供的移動平均趨勢線方法與本實驗所介紹的方法與本實驗所介紹方法的區別在于趨勢線的作用是對已知的一堆數據作回歸分析,以找到一個可以直接計算的方程式并對其他任意未經測量的數值進行計算。趨勢線方法考慮了大量可能的結果。
實驗3-3 “美食佳”華東分公司銷售額趨勢預測 實驗類型:驗證性
實驗學時:2 實驗目的:
? 理解趨勢預測法的概念;
? 掌握在excel中建立線性趨勢預測模型的方法; ? 掌握尋找線性趨勢模型參數的各種方法; ? 掌握線性趨勢值預測的不同方法。
實驗步驟:
步驟1:確定時間序列的類型。
如圖3-20所示在單元格a1:c12中布置好華東分公司從1996年至2006年的銷售額數據。繪制華東分公司從1996年至2006年共11年的銷售額折線圖,結果如圖3-21所示,具有較明顯的線性趨勢成分,呈上升趨勢,說明適合用線性趨勢法進行預測。
圖3-20 華東分公司從1996年至2006年的銷售額數據
圖3-21 華東分公司從1996年至2006年的銷售額折線圖
步驟2:添加線性趨勢線。
如圖3-22所示,在圖中選中數據系列,右鍵菜單中選擇“添加趨勢線”,出現“添加趨勢線”對話框。
如圖3-23所示,在“添加趨勢線”對話框的“類型”中選擇“線性”。
如圖3-24所示,在“添加趨勢線”對話框的“選項”中選擇“顯示公式”和“顯示r平方值”,得到如圖3-25的結果。
圖3-22 選用添加趨勢線功能
圖3-23 添加趨勢線對話框
圖3-24 添加趨勢線的選項對話框
圖3-25 華東分公司銷售額與和線性趨勢線
步驟3:用趨勢線前推法大致預測線性趨勢值。
選定線性趨勢線,右鍵菜單中選擇“趨勢線格式”,出現如圖3-26的“趨勢線格式”對話框。
如圖3-26所示,在“趨勢線格式”對話框中選定“選項”,將趨勢預測前推1周期,得到如圖3-27所示的大致預測結果。
由圖3-27中的趨勢線可見,公司2007年的銷售額預測值約為1000萬元。
圖3-26 趨勢預測前推1周期設置
圖3-27 趨勢預測前推1周期的大致預測結果
步驟4:用方程或函數準確預測線性趨勢值。
根據得到的線性趨勢方程公式y=11.473x+861.98,如圖3-28所示,在單元格c13中輸入公式:“=11.473*a13+861.98”,即將x=12(2007年為
圖3-29 帶預測點的銷售額線性趨勢預測圖
實驗思考
1.本實驗的幾張圖中,x軸是“分類”還是“自動”? 答:本實驗(實驗3-3)中,X軸是自動。
2.預測點數據如果作為新數據系列添加到圖形中,結果與圖3-29有何不同?
答:實驗3-3中,預測點數據如果作為新數據系列添加到圖形中,結果與圖3-29相比,預測部分的值將是一條直線。
3.為什么預測值一定在趨勢線的延伸線上?
答:預測值一定在趨勢線上的原因是預測值是依據趨勢線作出來的。4.若要預測公司2008年的全國銷售額,可以怎么做?若要預測公司2009年、2010年、甚至更遠年份的銷售額,會有什么問題?
答:若要預測2008年的全國銷售額,可依據2007年的預測值來作。但若要預測更遠年份的銷售額,則不能以之為基礎由趨勢線函數進行預測,因為彼時銷售額呈線性增長,與客觀事實不符。
5.除了本實驗中介紹的添加趨勢線方法可以找到線性趨勢預測模型的參數外,還可以用哪些方法找到線性趨勢預測模型y=a+bx中的參數 a和b。
答:還可用回歸方法找到Y=a+bX中參數a,b的值。
實驗3-4 “美食佳”公司會員卡發行量趨勢預測
實驗類型:驗證性
實驗學時:2 實驗目的:
? 理解非線性趨勢預測法的概念;
? 掌握在excel中建立非線性趨勢預測模型的方法; ? 掌握非線性趨勢值預測的方法。
預測公司2007年7月會員卡的發行量。
實驗步驟:
步驟1:確定時間序列的類型。
如圖3-30所示在單元格a1:c15中布置好公司從2006年5月至2007年6月的會員卡發行數據。
繪制公司從2006年5月至2007年6月共14個月的會員卡發行量的折線圖,結果如圖3-31所示,具有較明顯的非線性趨勢成分,說明適合用非線性趨勢法進行預測。從曲線的形狀看,它先上升較快后上升較慢,符合對數曲線的特征,因此我們可以選用對數趨勢模型進行預測。
圖3-30 2006年5月至2007年6月會員卡發行量數據
圖3-31 2006年5月至2007年6月會員卡發行量的折線圖
步驟2:添加非線性趨勢線。
如圖3-32所示,在圖中選中數據系列,右鍵菜單中選擇“添加趨勢線”,出現“添加趨勢線”對話框。
如圖3-33所示,在“添加趨勢線”對話框的“類型”中選擇“對數”。
如圖3-34所示,在“添加趨勢線”對話框的“選項”中選中“顯示公式”和“顯示r平方值”,得到如圖3-35的結果。
圖3-32 選擇添加趨勢線功能
圖3-33 添加趨勢線對話框
圖3-34 添加趨勢線選項對話框
圖3-35 2006年5月至2007年6月會員卡發行量和對數趨勢線
步驟3:趨勢線前推法大致預測非線性趨勢值。
選定對數趨勢線,右鍵菜單中選擇“趨勢線格式”,出現如圖3-36的“趨勢線格式”對話框。
如圖3-36所示,在“趨勢線格式”對話框中選定“選項”,將趨勢預測前推1周期,得到如圖3-37所示的大致預測結果。
由圖3-37中的趨勢線可見,公司2007年7月的會員卡發行量預測值約為25萬張。
圖3-36 趨勢預測前推1周期設置
圖3-37 趨勢預測前推1周期的大致預測結果
步驟4:用方程或函數準確預測非線性趨勢值。根據得到的方程公式y=7.7785ln(x)+3.7651,如圖3-38所示,在單元格c16中輸入公式:“=7.7785*ln(a16)+3.7651”,即將x=15(2007年7月為 規劃求解法找到對數趨勢預測模型y=a+bln(x)中的參數a和b?
答:還可用回歸方法找到Y=a+bX中參數a,b的值。
實驗3-5 “美食佳”火鍋連鎖店原料年度采購成本預測 實驗目的:
? 理解季節指數的概念; ? 掌握季節指數預測方法。
實驗步驟:
步驟1:確定時間序列的類型。
如圖3-40所示在單元格a1:c17中布置好公司從2003年
圖3-42 4年同期的原材料采購成本折線圖
步驟2:計算季節指數。
一年有4個季度,所以以4為移動平均跨度,計算移動平均數,其結果應該對應放在每4個季度的中間位置。但當移動平均跨度為4時,沒有中間季度位置可放,因此只能放在
圖3-44 中心化后的原材料采購成本移動平均數
平均季節指數應等于1,因此4個季度的季節指數總和必須等于4。如果不滿足這一點,則應對季節指數進行調整。方法是用每一個季節指數除以未調整的季節指數之
和再乘以季度指數總和4。如圖3-43中單元格i6所示,未調整前的季節指數之和為3.9852,所以需要調整。在單元格j2中輸入公式:“=i2/$i$6*4”,往下復制到j3:j5,得到調整后的季節指數。
步驟3: 消除季節影響。
如圖3-45所示,將調整后的季節指數復制到E列,分別對應2003-2007年的4個季度。
圖3-45 消除季節影響后的原材料采購成本
在單元格F2中輸入公式:“=D2/E2”,將公式復制到單元格F3:F17中,得到消除季節影響后的結果。
利用單元格F2:F17中的數據繪制公司從2003年 圖3-46 消除季節影響后的原材料采購成本及趨勢線
步驟4:計算預測值。
如圖3-47中G列所示,利用FORECAST()函數計算線性趨勢預測值。
圖3-47 趨勢預測值和季節預測值的計算
在單元格H2中輸入公式:“=G2*E2”,將公式復制到單元格H3:H21中,即在線性趨勢預測值的基礎上乘以調整后的季節指數得到最終的季節預測值。公司2007年1至4季度的采購成本預測值分別為73.0、20.9、13.8、154.9。
根據D列的原始采購成本數據和H列的季度預測值數據,作折線圖,結果如圖3-48所示。
圖3-48 2003-2004年原材料采購成本及2007年4個季度的原材料采購成本預測值
實驗思考
1.圖3-47中的“序號”一列有什么用?
答:圖3-47中“序號”一列的作用是為趨勢線公式的獲得提供依據(作為自變量X)。2.計算趨勢預測值時,若不用forcast()函數,還可以有什么方法?請至少用兩種方法試試看。
答:計算趨勢預測值還可用移動平均預測法、指數平滑預測法、一元線性回歸分析模型等。
3.季節指數模型是否只能用于季節數據的預測?若是年度、月度、甚至周數據,可以用季節指數模型嗎?
答:季節指數模型不是只能用于季節數據的預測,年度、月度、周數據等在某些情況下均能用季節指數模型。
實驗總結: 此次實驗中學習了指數平滑預測法、移動平均預測法、趨勢預測法、非線性趨勢預測法、季節指數的概念,計算趨勢預測值還可用移動平均預測法、指數平滑預測法、一元線性回歸分析模型等。實驗不難,關鍵要會分析和辨別使用何種分析方法。
實驗四 住房建筑許可證數量的回歸分析
實驗4-1 “家家有房”公司建筑許可證一元線性回歸分析
實驗目的
? 理解一元線性回歸分析的概念;
? 針對不同的問題,能夠建立適當的一元線性回歸模型; ? 掌握內建函數slope()、intercept()與linest()的用法;
? 掌握用規劃求解法、添加線性趨勢線法、回歸分析報告法確定線性回歸方程的系數; ? 給定自變量的情況下,根據線性回歸模型預測因變量的值。
實驗步驟:
步驟1:確定因變量與自變量并輸入觀測值。
根據實驗要求,我們確定因變量為建筑許可證的頒發數量,自變量為人口密度,并將數據合理的布置在excel工作表的單元格a1:b19中,以備建模使用。
步驟2:繪制因變量與自變量關系散點圖。
利用工作表的數據,以每平方公里的人口密度為x值,建筑許可證的頒發數量為y值,繪制xy散點圖,如圖4-1所示。從這個散點圖可以看出每平方公里的人口密度與建筑許可證的頒發數量之間存在著大體上的線性依賴關系。
圖4-1建筑許可證的頒發數量與每平方公里的人口密度散點圖
步驟3:求出回歸系數a、b的取值,計算判定系數R2,并進行預測。
excel提供了幾種不同的工具,包括規劃求解工具,intercept()、slope()與linest()等內建函數,在散點圖中添加趨勢線和趨勢線方程以及生成回歸分析報告等方法來確定回歸系數a和b。我們這里介紹利用規劃求解的方法來求解回歸系數。
步驟4:假定回歸系數的值,建立線性回歸模型。
假定回歸系數的值為a=1,b=1并將之放在單元格f2:f3中。用回歸直線方程y=a+bx以及每平方公里的人口密度來計算建筑許可證的頒發數量預測值,放在單元格c2中,即在單元c2中輸入公式“=$f$2+$f$3*a2”,并將此公式復制到c3:c19中,得到建筑許可證的頒發
數量預測值。在單元格f5中計算建筑許可證的頒發數量觀測值與預測值的均方誤差mse,即在單元格f5中輸入公式“{=average((c2:c19-b2:b19)^2)}”(注:其中的花括號不是直接輸入,是將所有內容輸入完后按住ctrl+shift鍵后再按回車鍵生成的)。如圖4-2所示:
圖4-2 回歸參數求解前的模型
步驟5:啟動規劃求解工具,確定模型最優參數。
在如圖4-3的“規劃求解參數”對話框中將目標單元格設為$f$5,使其等于最小值,將可變單元格設為$f$2:$f$3,無須設置任何約束條件即可直接求解,保存規劃求解結果。注意規劃求解受到迭代次數和精度的限制,本例需啟用8次規劃求解工具進行重復運算才能得到滿意的精度,即
圖4-4 回歸參數求解后的模型
根據上述回歸方程,如果任意給定人口密度(7000),即可預測出建筑許可證的頒發數量(14655.287),如圖4-5所示。
實驗思考
1.除了用規劃求解的方法外,還可以哪些其它方法求出建筑許可證數量與每平方里人口密度之間關系的回歸方程y=a+bx的系數,請用其它方法求得系數,并檢驗與實驗4-1所獲得的系數是否一致。
答:除用規劃求解額方法外,還可以利用添加趨勢線的方法獲得回歸方程Y=a+bX的系數。用規劃求解方法獲得的回歸方程Y=a+bX的系數中a的值為-23900.10788,b的值為5.500026742;而用添加趨勢線的方法獲得的a的值為-23901,,b的值為5.5001,在誤差允許的范圍內,可認為他們的系數一致。
2.如果每平方公里的人口密度與建筑許可證數量之間是非線性關系,該如何選擇非線性模型,并針對任意給定每平方公里的人口密度,預測建筑許可證的頒發數量。
答:若每平方公里的人口密度與建筑許可證數量之間是非線性關系,可利用添加趨勢線的方法來進行檢驗,找出每一種可能的非線性模型的均方誤差MSE,選擇其中最小的一項作為最佳的非線性模型。然后根據非線性模型的公式,帶入相應參數后即可預測建筑許可證的頒發數量。
3.根據擬合優度,進一步分析是否有其他非線性回歸模型,更適合人口密度與建筑許可證數量的相關關系。
答:根據擬合優度對其他非線性回歸模型進行分析,暫未找到更適合人口密度與建筑許可證數量的相關關系。
實驗4-2 “家家有房”公司建筑許可證一元非線性回歸分析
實驗目的
? 理解一元非線性回歸分析的概念;
? 針對不同的問題,能夠建立適當的一元非線性回歸模型;
? 掌握用規劃求解法、添加非線性趨勢線法、變換法確定非線性回歸方程的系數; ? 在給定自變量的情況下,根據非線性回歸模型預測因變量的值。
實驗步驟:
步驟1:確定因變量與自變量。
根據實驗要求,我們確定因變量為建筑許可證的頒發數量,自變量為自由房屋的均值。并將數據合理的布置在excel工作表的單元格a1:b19中,以備建模使用。
步驟2:選擇合適的回歸方程。
利用步驟1中準備的數據畫出散點圖,如圖4-5所示,通過散點圖選擇合適的擬合函數,建立含未知參數的方程。
圖4-5 建筑許可證的頒發數量與自由房屋的均值散點圖
仔細觀察散點圖,發現建筑許可證的頒發數量隨著自由房屋的均值增大而增大,且隨著自由房屋均值的增加建筑許可證的頒發數量增加的速度而放緩,這是對數曲線的特征,因此可以采用對數函數來進行擬合。即將建筑許可證的頒發數量(y)與自由房屋的均值(x)之間的關系表述為:
y= a + blnx 其中的參數a與b的值待定。
步驟3:假定回歸系數的值,建立非線性回歸模型。
假定回歸系數的值為a=1,b=1并將之放在單元格f2:f3中。用回歸對數方程y=a+blnx以及自由房屋均值來計算建筑許可證的頒發數量預測值,放在單元格c2中,即在單元c2中輸入公式“=$f$2+$f$3*ln(a2)”,并將此公式復制到c3:c19中,得到建筑許可證的頒發數量預測值。在單元格f5中計算建筑許可證的頒發數量觀測值與預測值的均方誤差mse,即在單元格f5中輸入公式“{=average((c2:c19-b2:b19)^2)}”(用ctrl+shift+enter組合鍵添加花括號)。如圖4-6所示:
圖4-6 回歸參數求解前的模型 步驟4:確定參數a與b的值。
對于本例的問題,我們采用規劃求解的方法來確定參數a與b的值,利用規劃求解工具計算出使mse極小的參數a與b,規劃求解對話框的設置如圖4-7所示。
圖4-7 規劃求解對話框
然后點擊“求解”按鈕,可得如圖4-8所示的結果。
圖4-8 規劃求解后的模型結果
步驟5:添加趨勢線,顯示R2值。
在圖4-7的散點圖中通過添加對數趨勢線,并在添加趨勢線對話框中的“選項”中選擇“顯示R2”與“顯示公式”,如圖4-9所示。我們發現R2達到0.9441,表明選擇對數回歸模型預測是可行的。同時我們也檢驗了趨勢線方法與規劃求解法所得到的回歸方程系數是一樣的。
圖4-9 添加了對數趨勢線
步驟6:進行預測。
根據對數回歸方程,如果任意給定 自由房屋的均值,即可預測出建筑許可證的頒發數量。將x=300,預測出頒發的建筑許可證數量為-78874.08+16877.319*ln(300)=17390.4708,如圖 4-8所示。
實驗思考:
1、請將此問題轉換為線性回歸模型,求解模型的參數和R2值,并與規劃求解法的結果進行比較。
答:若將此模型轉換為線性回歸模型,得到的模型為y=16877.34701Ln(X)-
79003.9859, MSE=2023817.464,與原模型中y=16878Ln(X)-78877,R2=0.9441,MSE=2006982.816相比,基本無差別。
實驗4-3 “家家有房”公司建筑許可證多元線性回歸分析 實驗目的
? 理解多元線性回歸分析的概念;
? 針對不同的問題,能夠建立適當的多元線性回歸模型; ? 掌握運用向前增選法確定回歸自變量;
? 在給定自變量的情況下,根據多元線性回歸模型預測因變量的值。
實驗步驟:
步驟1:輸入原始數據。
首先分析案例中的自變量和因變量,并將數據合理的布置在excel工作表的a1:d19中,如圖4-10所示,以備建模使用。
根據實驗要求,我們確定因變量為建筑許可證的頒發數量(y),自變量為每平方公里的人口密度(x1)、自由房屋的均值(x2)與平均家庭收入(x3),假設多元線性模型為:y=a+b1*x1+b2*x2+b3*x3。
圖4-10 人口密度、自由房屋均值、平均家庭收入與建筑許可證數量數據 步驟2:分別繪制三個候選自變量與因變量之間的關系圖。
圖4-11 建筑許可證數量與每平方公里人口密度的散點圖
這個問題涉及到三個候選自變量,每平方公里的人口密度(x1)、自由房屋的均值(x2)與平均家庭收入(x3)。首先分別對每個候選自變量繪制與因變量建筑許可證的頒發數量關系的散點圖,見圖4-11—圖4-13。
圖4-12 建筑許可證數量與自由房屋的均值的散點圖
圖4-13建筑許可證數量與平均家庭收入的散點圖
步驟3:針對每一個候選變量生成回歸分析報告。
分別對這三個候選變量做回歸分析報告,根據值,找出最優的變量。這里我們采用向前增選法,先給出建筑許可證的頒發數量與三個候選變量之間的回歸分析報告,分別見圖4-14和4-16。
圖4-14 許可證數量與人口密度的回歸分析報告
圖4-15 許可證數量與自由房屋均值的回歸分析報告
圖4-16 許可證數量與平均家庭收入的回歸分析報告
圖4-17 建筑許可證數量與人口密度及平均家庭收入的回歸分析報告
圖4-18 建筑許可證數量與自由房屋均值及平均家庭收入回歸分析報告
實驗思考
1.在用回歸分析報告求解參數時,自變量與因變量之間應該滿足什么關系? 答:在用回歸分析報告求解參數時,自變量與因變量之間應滿足一個或多個自變量值對應一個應變量。
2.為什么實驗結果只選用兩元線性回歸模型而不用三元線性回歸模型進行建筑許可證數量的預測?
答:實驗結果只選用兩元線性回歸模型二不用三元線性回歸模型既高興建筑許可證數量預測的原因是三元回歸分析報告中自有房屋的均值X2的調整后的R2的值并未超過一元回歸分析報告中對自有房屋的均值X2的調整后的R2的值,說明自有房屋的均值X2與建筑許可證數量的線性相關性不強,若它參與回歸預測,將會影響預測結果。
3.在用多元線性回歸時,如何確定候選變量,確定的依據是什么?
答:用多元線性回歸時,可依據對某一自變量在組合前得到的調整后的R2的值與組合后得到的調整后的R2的值之間的大大小進行候選變量的確定。若組合后得到的調整后的R2的值超過組合前得到的調整后的R2的值,則確定其為候選變量
4.從實驗4-2我們了解自有房屋的均值(x2)與建筑許可證數量是對數相關,如果我們用回歸方程y=a+b1*x1+b2*lnx2+b3*x3來進行預測是否更精確?那么我們又怎樣確定此方程的各項系數呢?
答:若用回歸方程Y=a+b1*X1+b2*lnX2+b3*X3來進行預測,結果不一定會更精確。因為Y是受3個自變量的共同影響。可用多元非線性回歸確定次方程的各項系數,因為線性回歸是特殊的非線性回歸。
實驗4-4 “家家有房”公司建筑許可證多元非線性回歸分析
實驗目的
? 理解多元非線性回歸分析的概念;
? 針對不同的問題,能夠建立適當的多元非線性回歸模型;
? 掌握用規劃求解法、變換技術加回歸分析報告法確定多元非線性回歸方程的系數; ? 在給定自變量的情況下,根據多元非線性回歸模型預測因變量的值。
實驗步驟:
步驟1:確定因變量與自變量。
根據實驗要求,我們確定因變量為建筑許可證的頒發數量(y),因變量為平均家庭收入(x1)與人均交納稅收(x2),并將數據合理的布置在excel工作表中。
步驟2:確定模型并對模型初始化。
因為是非線性模型,而且是多元的,所以我們這里假設模型為y=a+b1*x1^2+b2*x2^2。在單元格h2:h4中分別放入參數a,b1,b2初值1,并在單元格d2中輸入公式“=$h$2+ $h$3 *a2^2+$h$4*b2^2”,并將其復制到公式d3:d19中,在單元格h5中輸入公式“=sumxmy2(d2:d19,c2:c19)/count(d2:d19)”。
步驟3:啟用規劃求解工具。
在“工具”菜單中選擇“規劃求解”,打開“規劃求解”對話框,并在該對話框中做如
圖4-19中設置,然后點擊“求解”按鈕,并將結果保存在圖4-20中。
圖4-19規劃求解參數的設置
圖4-20 規劃求解后的模型結果
步驟4:根據獲得的參數進行預測。
利用規劃求解的結果,將參數a,b1,b2的值及平均家庭收入為80千元,人均交納的稅收為7千元代入模型y=a+b1*x1^2+b2*x2^2,可得建筑許可證的頒發數量預測值為11464.4。
步驟5:將非線性模型與線性模型結果比較。
將模型假設為線性模型y=a+b1*x1+b2*x2,并將參數放置在單元格h8:h11中,重復步驟2與步驟3,可以看到在線性模型求得的mse為1500179.183,比在非線性模型下求得的mse的值1158258.3大,因此在該實驗中,用二元非線性模型要比用線性模型求解的結果要好些。
實驗思考
1.如果要用回歸分析報告求解多元非線性模型的參數,首先要做的工作是什么?怎么做?
答:若要用回歸分析報告求解多元非線性模型的參數,首先要做的是確定因變量與自變量。并將數據合理地布置在Excel表中。
2.現王經理經過深入調查研究發現:建筑許可證的頒發數量既與每平方公里的人口密度有著密切的關系,也與自由房屋的均值有著密切的關系,此外還與平均家庭收入、人口增長百分比、失業率、人均交納的稅收等有著相關關系,并給出相關數據如表4-5,根據表4-5中所給的數據,想想用什么方法能夠較快的找出合適的自變量建立多元回歸分析模型,并以此預測建筑許可證的頒發數量。
答:可分別求出每一因素調整前的R2的值與調整后的R2作比較,再確定其是否影響顯著,以此進行選擇細分。
實驗總結:
本次實驗主要目的是理解數平滑預測法、移動平均預測法、趨勢預測法、非線性趨勢預測法、季節指數的概念;掌握在excel中建立指數平滑預測模型、移動平均模型、線性趨勢預測模型、非線性趨勢預測模型、季節指數預測的方法,掌握尋找最優平滑常數、最優移動平均跨度、線性趨勢模型參數、線性趨勢值預測的各種方法。
實驗五 手機用戶消費習慣聚類分析
實驗目的
? 理解聚類分析的概念; ? 理解聚類分析的原理;
? 掌握在SPSS中進行聚類分析的方法。
實驗步驟: 為研究移動用戶的手機消費習慣,現收集了反映移動用戶手機使用情況的數據,該數據中包含7個變量:客戶編號(Customer_ID)、工作日上班時期電話時長(Peak_mins)、工作日下班時期電話時長(OffPeak_mins)、周末電話時長(Weekend_mins)、國際電話時長(International_mins)、總通話時長(Total_mins)和平均每次通話時長(average_mins)。請用SPSS軟件按除客戶編號外的6個變量維度對移動用戶進行細分。部分數據如圖所示。
移動電話用戶手機使用情況部分數據
本次實驗采用迭代聚類方法進行數據分析。
1.數據的初步分析
選擇菜單 打開SPSS文件 telco.sav→分析(Analyze)→描述統計(Descriptive Statistics)→描述(Descriptives…)選入變量 將除“Customer_ID”外的其余6個變量選入變量框(Variables)中
設置選項 打開Options按鈕,勾選均值(Mean)、標準差(Std.deviation)、最小值(Minimum)、最大值(Maximum)四項
結果輸出見下圖。
上圖顯示6個變量數值差異較大,其中均值最大值為1064.3,最小值為4.1267,標準差的取值也從最小的3.804變化到最大的560.801。這種差異會影響聚類分析的結果。而要消除這種影響,需在聚類前對數據進行標準化處理。
2.標準化處理
在上一步彈出的“Descriptive”對話框中選擇“Save standardized values as variables”,即將標準化值另存為變量,輸出如下圖。
標準化的目的是消除量綱和變異的影響。消除量綱影響,要扣減平均值;消除變異影響,要除以標準差。因此標準化數據等于某變量的觀察值減去該變量的平均數,然后除以該變量的標準差。標準化后各變量的平均數為0,標準差為1,消除了量綱和變異的影響。如ID為K1000050的用戶工作日上班時間通話時長(Peak_mins)標準化后的值,Peak_mins標準化=(觀察值-均值)/標準差=(40.61-708.347)/515.258=-1.296。
3.聚類分析
選擇菜單 打開SPSS文件 telco.sav→分析(Analyze)→分類(Classify)→K均值聚類(K-Means Cluster…)選擇變量 選入上圖中紅框內的6個標準化數據變量
設置選項 主窗口設置選項如下圖中的
第二篇:實驗報告冊封皮
小果園小學三年級實驗報告冊
(2015—2016學年第二學期)
2016年2月
小果園小學四年級實驗報告冊
(2015—2016學年第二學期)
2016年2月
小果園小學五年級實驗報告冊
(2015—2016學年第二學期)
2016年2月
小果園小學六年級實驗報告冊
(2015—2016學年第二學期)
2016年2月
第三篇:科學實驗報告冊
實驗名稱:蠟燭的變化
實驗材料:蠟燭、火柴、干玻璃片、試管夾 實驗步驟:
1、檢驗試驗用品是否齊全。
2、點燃蠟燭,觀察現象。
3、試管夾夾住干玻璃片,放在火焰上方,觀察現象。
4、整理器材。
實驗現象:蠟燭開始燃燒,火焰下方蠟燭由固態變成液態,玻璃片上變黑。實驗結論:蠟燭燃燒,一是形態發生了變化,二是生成新的物質——煙。
實驗名稱:探究水泥的變化
實驗材料:火柴、杯子、盤子、酒精燈、玻璃棒、石棉網、水泥、鐵架臺、坩堝 實驗步驟:
1、檢查實驗用品是否齊全。
2、將水泥倒入盤中,往盤中的水泥加水,觀察水泥變化。
3、將水泥塊放入坩堝。
4、點燃酒精燈,給水泥塊加熱,觀察現象。
5、整理器材。
實驗現象:
1、往盤中的水泥加水,過了一會,水泥凝固了。
2、點燃酒精燈,給水泥塊加熱,水泥塊沒有變化。實驗結論:水泥不能恢復原狀。
實驗名稱:食鹽的變化
實驗材料:火柴、杯子、盤子、酒精燈、玻璃棒、石棉網、食鹽、鐵架臺、坩堝 實驗步驟:
1、檢驗試驗用品是否齊全。
2、向杯中倒入水,把食鹽放入水中。
3、用玻璃棒攪拌,觀察想象。
4、把食鹽水放入坩堝,放在鐵架臺上。
5、點燃酒精燈,給食鹽水加熱,觀察現象。
6、整理器材。
實驗現象:把食鹽放在水中,用玻璃棒攪拌,食鹽在水中溶解了,看不到了。
點燃酒精燈,給食鹽水進行加熱,坩堝上可以清晰地看到已經析出的食鹽顆粒。實驗結論:通過給食鹽水加熱的方法可以使溶解的食鹽恢復原狀。
實驗名稱:鐵生銹的條件
(一)實驗材料:鐵釘、砂紙、玻璃棒、堿、鹽、油、醋 實驗步驟:
1、檢驗試驗用品是否齊全。
2、用砂紙打磨鐵釘,去掉其表面覆蓋物。
3、把鐵釘放在瓶子里,放在一個地方,并編好號:
1、空氣,2、裝滿水,3、半
瓶水,4、鹽水,5、堿溶液、醋溶液......同時放入相同鐵釘,相同時間后觀察鐵釘生銹情況。
4、整理器材
實驗現象:水中,輕微生銹;一半水,一半空氣,嚴重生銹;空氣中,輕微生銹;
醋、堿、鹽、水中,嚴重生銹;
油中無銹。
實驗結論:鐵在空氣和水同時存在、有酸、堿、鹽的情況下容易生銹。
實驗名稱:鐵生銹的條件
(二)實驗材料:三枚相同的鐵釘、三個相同的試管、三個試管塞、干燥劑一小袋、水適量。實驗步驟:
1、檢驗實驗用品是否齊全。
2、把三枚鐵釘分別放入三個試管中。
3、一個試管放少量水,浸沒鐵釘的一部分;另一個試管放滿水,將鐵釘完全浸沒;一個試管放干燥劑。
4、最后分別用試管塞把三個試管塞緊。
5、整理器材。實驗現象:放置幾天后取出三枚鐵釘觀察,發現第一個試管中的鐵釘在緊密接觸水面的地方有鐵銹,而其他兩個鐵釘無鐵銹。
實驗結論:潮濕的空氣是鐵生銹的重要條件。
實驗名稱:牛奶的變化
實驗材料:燒杯、玻璃棒、醋、啤酒、食鹽、檸檬汁、牛奶 實驗步驟:
1、檢驗試驗用品是否齊全。
2、將醋加入裝有四分之一牛奶的燒杯中,攪拌,觀察現象。
3、將啤酒加入裝有四分之一牛奶的燒杯中,攪拌,觀察現象。
4、將食鹽加入裝有四分之一牛奶的燒杯中,攪拌,觀察現象。
5、將檸檬汁加入裝有四分之一牛奶的燒杯中,攪拌,觀察現象。
6、整理器材。
實驗現象:牛奶中放醋,牛奶中出現混合物凝結現象。
牛奶中放入啤酒,牛奶變成絮狀。
牛奶中加入食鹽,牛奶沒有變化。
牛奶中加入檸檬汁,牛奶中有沉淀生成。實驗結論:現象同結論。
實驗名稱:測量速度 實驗材料:米尺、秒表
實驗步驟:
1、檢查實驗用品是否齊全。
2、用正常的步伐走5米、10米,測出你用了多長時間。
3、用正常的步伐走5秒、10秒,量出你走的路程。
4、比正常步伐走得慢一點,測出走5米、10米用的時間和走5秒、10秒的路程。
5、比正常步伐走得快一點,測出走5米、10米用的時間和走5秒、10秒的路程。
6、整理器材。
實驗現象:用的時間長,路程長;時間短,路程就短。
實驗結論:相同時間比較運動的距離,跑的距離遠,說明運動的速度快,反之則運動的速度
慢;相同距離比較所用的時間,用的時間越少,說明速度越快,反之則運動的速度慢。
實驗名稱:慣性試驗
實驗材料:魚缸一個、雞蛋一個、光滑的薄木板一個、小錘一個 實驗步驟:
1、檢查實驗用品是否齊全。
2、把魚缸裝入二分之一的水,蓋上薄木板,然后把雞蛋放在木板上面。
3、用小錘沿水平方向迅速敲擊木板、看雞蛋如何運動。
4、整理器材。實驗現象:雞蛋會掉入水中。
實驗結論:雞蛋沒有隨木板一起運動,而是保持了它原有的運動趨勢,木板抽掉后,只好掉進魚缸內,說明雞蛋具有慣性。
實驗名稱:晝夜交替的模擬實驗 實驗材料:地球儀、手電筒、大頭針 實驗步驟:
1、檢查實驗用品是否齊全。
2、用手電筒的光代表太陽光把地球儀照亮。觀察地球儀上是否分成了明暗兩部分,思考哪邊是白天,哪邊是黑夜。
3、自西向東轉動地球儀,觀察是否出現晝夜交替現象,分別在什么位置是早上、正午和傍晚。
4、整理器材。
實驗現象:
1、地球儀上分成了明暗兩部分,向著“太陽”的那面是白天,背著“太陽”的那面是黑夜。
2、地球自西向東轉動,同一個地方出現了晝夜交替現象。當這個地方轉到剛被光照射到是早晨,正對“太陽”時是正午,轉到剛被光照不到時是傍晚。
實驗結論:地球是個球體,太陽只能照亮地球的一半,向著太陽的那面是白天,背著太陽的那面是黑夜。地球不停的自轉,晝夜現象就會交替出現。
實驗名稱:四季更替的模擬實驗 實驗材料:地球儀、手電筒
實驗步驟:
1、檢查實驗用品是否齊全。
2、在桌子上畫一個圓,把地球儀放在畫好的軌道上運動。
3、手電筒在中間始終照著地球儀。
4、地球儀在轉動過程中傾斜角度要保持一致。
5、觀察與思考:仔細觀察,“太陽”的光芒分別直射在什么地方?這與四季的形成又有什么關系呢?
6、整理器材。
實驗現象:地球儀上的南北半球接受手電光的照射程度不斷變化。
實驗結論:地球在繞太陽公轉的過程中,地軸總是傾斜的,并且傾斜的方向保持不變。由于地軸的傾斜,當地球處在公轉軌道不同位置時,南北半球接受太陽光的照射程度也不斷的變化,從而形成了寒來暑往的四季。
實驗名稱:月相變化模擬實驗 實驗材料:電燈、皮球
實驗步驟:
1、檢查實驗用品是否齊全。
2、在教室里準備一盞瓦數大的電燈,用這盞燈當作太陽,學生自己當作地球,用皮球當作月球。
3、把“月球”舉在空中,使“陽光”照到“月球”上,觀察此時“月球”的明亮部分是什么形狀。
4、然后使“月球”圍繞“地球”公轉一周,觀察“月球”的明亮部分有什么變化。
5、整理器材。
實驗現象:當“月球”亮面轉到背著“地球”的方向時,“月球”幾乎全是黑的;當“月球”亮面轉到向著“地球”的方向時,“月球”幾乎全是光明的;當“月球”亮面由向著“地球”到背著“地球”時,“月球”的明亮部分逐漸減少。
實驗結論:月球是一個不發光、不透明的球體,我們看到的月光是它反射太陽的光。月相實際上就是人們從地球上看到的月球被太陽照亮的部分。由于觀察的角度不同,所以看到的月相亮面大小、方向也就不同。
實驗名稱:日食和月食的形成模擬實驗 實驗材料:電燈、圓形小鏡子
實驗步驟:
1、檢查實驗用品是否齊全。
2、在與你的眼睛同樣高的墻壁上懸掛一盞電燈,用它當作太陽。手持一面圓形的小鏡子當作月亮,與你電燈的視線大體相平。
3、面對電燈,閉上一只眼睛,調整“月亮”與眼睛的距離,使“月亮”能完全遮住“太陽”。這時就發生了日食。
4、保持原有姿勢,沿逆時針方向原地轉動,當你的頭部(相當于地球)遮住射向“月亮”的光輝時,便發生了“月食”。
5、再重復幾次實驗,觀察“日食”和“月食”時哪邊先虧。
6、整理器材。實驗現象:“日食”時總是太陽的西邊先虧?!霸率场睍r總是月亮的東邊先虧。
實驗結論:月球圍繞地球轉,地球圍繞太陽轉,當月球轉到地球和太陽中間,三個天體大致呈一條直線的時候,月球的影子就會投在地球上,處在月影里的人由于被月球擋住了視線,就看不見太陽或只能看見一部分太陽,這就是日食。
實驗名稱:蚯蚓對干濕環境的反應
實驗材料:蚯蚓5條、長方形紙盒、黑濕布、透明的塑料薄膜 實驗步驟:
1、檢查實驗用品是否齊全。
2、找一個長方形紙盒把里面涂黑,把盒底挖掉一半,貼一塊透明的塑料薄膜。
3、在桌上鋪一塊黑濕布,在布上放上5條蚯蚓,用盒罩住,使蚯蚓正好在盒內的明暗交界處,觀察蚯蚓往哪爬,比較亮處和暗處蚯蚓的數量。
4、用一個長方形紙盒,在紙盒墊上塑料薄膜,在盒左邊放干土,在盒右邊放濕土,干土與濕土間隔一段距離。
5、在盒中間沒有土的地方,放5條蚯蚓,觀察蚯蚓往哪爬,比較干土與濕土中蚯蚓的數量。
6、整理器材。
實驗現象:
1、蚯蚓都爬到陰暗處。
2、蚯蚓都爬到濕土里。
實驗結論:蚯蚓適宜生活在陰暗潮濕的環境中。
實驗名稱:植物的向光性實驗
實驗材料:植物幼苗(玉米、小麥等)、火柴桿、小花盆(或培養皿)、泥土、不透光的紙盒、臺燈、剪刀
實驗步驟:
1、檢查實驗用品是否齊全。
2、用剪刀在不透光的紙盒一側挖一個直徑為1cm的孔,待模擬單側光照射時使用。
3、將幾株長勢相同但其尚未出胚芽鞘的小麥幼苗依次排開,分別栽種在兩個花盆中,幼苗的旁邊插一根火柴桿,作為對比的參照物。
4、將制好的遮光罩扣住花盆(一組用不透光的紙盒,另一組用一側帶小孔的紙盒),白天將裝置置于陽光充足的地方,夜間以臺燈代替光源,并使光從小孔中透入紙盒。
5、每天打開紙盒,觀察幼苗的生長情況,記錄下高度、傾斜角度及當日的溫度、天氣等情況。
6、整理器材。
實驗現象:幼苗朝紙盒開孔的方向生長,也就是向著光源的方向生長。實驗結論:植物的生長具有向光性。實驗名稱:饅頭發霉的對比試驗 實驗器材:四片饅頭片、塑料袋、放大鏡、滴管、鑷子 實驗步驟:
1、檢驗實驗用品是否齊全。
2、選四片饅頭,分別貼上號碼。
3、在1、3號上滴水,將2、4號烤干。
4、將4片饅頭分別裝入袋中。
5、將1、2號放在窗臺上,3、4號放在冰箱里。
6、幾天后,觀察4片饅頭,看看發生了什么變化,并記錄下來。
7、整理器材。
實驗現象:1號饅頭發霉最早,發霉面積最大。
2號、3號饅頭發霉時間和面積居中。
4號饅頭發霉時間晚,發霉面積小。實驗結論:饅頭在溫暖、潮濕的情況下容易發霉。
第四篇:數據結構實驗報告冊
實驗一 線性表的操作
實驗類型:驗證性 實驗要求:必修 實驗學時: 2學時
一、實驗目的:
參照給定的線性表順序表類和鏈表類的程序樣例,驗證給出的線性表的常見算法。
二、實驗要求:
1、掌握線性表順序表類和鏈表類的特點。掌握線性表的常見算法。
2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。
三、實驗內容:
1.設計一個靜態數組存儲結構的順序表類,要求編程實現如下任務:建立一個線性表,首先依次輸人數據元素1,2,3,…,10,然后刪除數據元素6,最后依次顯示當前線性表中的數據元素。要求采用順序表實現,假設該順序表的數據元素個數在最壞情況下不會超過10個。
第一題源代碼: #include
//定義模板類SeqList class SeqList { private: int length,x,j,data[10];public: public: SeqList()
//無參構造函數
{
length=0;
}
SeqList(T a[ ], int n)
//有參構造函數
{
for(int i=0;i data[i]=a[i]; length=n;} ~SeqList() //析構函數為空 { } int Length() //求線性表的長度 { return length;} T Get(int i) //按位查找,取線性表的第i個元素 { } int Locate(T x) //按值查找,求線性表中值為x的元素序號 { } void Insert(int i, T x) //在線性表中第i個位置插入值為x的元素 { } T Delete(int i) { if(length==0) throw“下溢”; if(i<1||i>length) throw“位置異常”; x=data[i-1]; for(j=i;j data[j-1]=data[j]; length--; return x;} void PrintList() { for(int i=0;i cout< ”; cout< void main(){ int n=10,a[10]={1,2,3,4,5,6,7,8,9,10};SeqList cout< //刪除線性表的第i個元素 //注意此處j已經是元素所在的數組下標 //遍歷線性表,按序號依次輸出各元素 -------------------------2.設計一個帶頭結點的單鏈表類,要求: (1)帶頭結點單鏈表類的成員函數包括取數據元素個數、插入元素、刪除所有值為k的元素、取數據元素。 (2)設計一個測試主函數,實際運行驗證所設計循環單鏈表類的正確性。第二題源代碼: #include struct Node { T data;Node Node //單鏈表頭指針 int length;public: LinkList() { first=new Node first->next=NULL; } LinkList(T a[],int n) //建立n個節點的指針 { Node first=new Node first->next=NULL; //初始化一個空鏈表 for(int i=0;i { s=new Node s->data=a[i]; s->next=first->next; first->next=s; } length=n; } ~LinkList() { Node while(p) { Node q=p; p=p->next; delete q; } } int Length(); //求單鏈表長度 T Get(int i); //取單鏈表第i個節點元素值 int Locate(T x); //求單鏈表值為x的元素序號 void Insert(int i,T x);//在單鏈表中第i個位置插入元素值x的節點 T Delete(int i); //在單鏈表中刪除第i個節點 void PrintList(); // 遍歷單鏈表,按序號依次輸出個元素 };/********************************/ template p=p->next; j++;} if(!p) throw “位置”;else return p->data;} /***********************************/ template p=p->next; if(p->data==x) return i+1;} } /***********************************/ template p=p->next; j++;} if(!p) throw“位置”;else { Node s=new Node s->data=x; s->next=p->next; p->next=s;} length++;} /**************************************/ template p=p->next; j++;} if(!p||!p->next) throw“位置”;else { Node q=new Node int x; q=p->next; x=q->data; p->next=q->next; delete q; length--; return x;} } /*******************************************/ template // 遍歷單鏈表,按序號依次輸出個元素 { Node p=p->next; cout<<“第”<<(i+1)<<“個元素為:”<<(p->data)< int r[ ]={10,9,8,7,6,5,4,3,2,1}; LinkList cout<<“原表為:”< a.PrintList(); cout< a.Insert(1,-2); //執行插入操作; a.Insert(2,-1); a.Insert(3,0); cout<<“執行插入后輸出為:”< a.PrintList(); cout< a.Delete(1); a.Delete(1); a.Delete(1); cout<<“執行刪除后輸出為:”< a.PrintList(); cout< cout<<“按位查找元素:”< cout<<“第 5 個元素為: ”; cout< //查找鏈表中第 5 個元素 cout< 心得體會: 實驗二 棧、隊列、串的操作 實驗類型:驗證性 實驗要求:必修 實驗學時: 2學時 一、實驗目的: 參照給定的棧類和隊列類的程序樣例,驗證給出的棧和隊列的常見算法,并結合線性表類實現有關串的操作。 二、實驗要求: 1、掌握棧、隊列、串的特點。掌握特殊線性表的常見算法。 2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。 三、實驗內容: 1.堆棧類測試和應用問題。要求: 設計一個主函數實現對順序堆棧類和鏈式堆棧類代碼進行測試。測試方法為:依次把數據元素1,2,3,4,5入棧,然后出棧堆棧中的數據元素并在屏幕上顯示。第一題源代碼: #include T data[StackSize]; int top;public: SeqStack() { top=-1; } ~SeqStack() { } void push(T x); T pop(); T GetTop() { if(top!=-1) return data[top]; } bool Empty() { top=-1?(return 1):(return 0); } }; template throw “上溢”;top++;data[top]=x;} template throw “下溢”;x=data[top--];return x;} /****************************************************/ template template top=NULL;} ~LinkStack(){ while(top) { Node p=top->next; delete top; top=p; } } void push(T x);T pop();T gettop(){ if(top!=NULL) return top->data;} bool Empty(){ top==NULL?return 1:return 0;} }; template //沒有申請空間時 會出現錯誤! s->data=x;s->next=top;top=s;} template throw “下溢”;x=top->data;p=top;top=top->next;delete p;return x;} /******************************************************/ void main(){ SeqStack for(int i=1;i<=5;i++) aa.push(i); cout<<“順序棧出棧:”;for(i=0;i<5;i++){ int k=0; k=aa.pop(); cout< ”;} cout< for(i=1;i<=5;i++) bb.push(i); cout<<“鏈式棧出棧:”;for(i=1;i<=5;i++){ int j=0; j=bb.pop(); cout< ”;} cout< 2.隊列類測試和應用問題。要求: 設計一個主函數對循環隊列類和鏈式隊列類代碼進行測試.測試方法為:依次把 1,2,3,4,5入隊,然后出隊中的數據元素并在屏幕上顯示。 第二題源代碼: #include const int QueueSize=100; /**************************************/ template int front, rear; CirQueue(){ front=rear=0;} ~ CirQueue(){ } void EnQueue(T x) { if((rear+1)% QueueSize ==front) throw “上溢”; rear=(rear+1)% QueueSize; data[rear]=x; } T GetQueue() { if(rear==front)throw “下溢”; int i=(front+1)% QueueSize; return data[i];} T DeQueue(){ if(rear==front) throw “下溢”; front=(front+1)% QueueSize; return data[front]; } };/*********************************************/ template /*********************************************/ template //隊頭隊尾指針 public: LinkQueue(); ~LinkQueue(){ } void EnQueue(T x); //將x入隊 T DeQueue(); //將隊頭元素出隊 T GetQueue() { if(front!=rear) return front->next->data; //取對頭元素 } bool Empty() //判斷鏈隊列是否為空 { front==rear?return 1:return 0;} };/***************************************/ template //創建頭結點s front=rear=s;} /***************************************/ template throw“下溢”;p=front->next;x=p->data;front->next=p->next;if(p->next==NULL) rear=front;delete p;return x;} /***********************************************/ void main(){ CirQueue a.EnQueue(i); b.EnQueue(i);} for(i = 1;i <= 5;i++){ int k,j(0); k = a.DeQueue(); j=b.DeQueue(); cout<<“循環隊列輸出:”<< k<<“ ”<<“鏈隊列輸出:”< 心得體會: 實驗三 多維數組和廣義表的操作 實驗類型:驗證性 實驗要求:必修 實驗學時: 2學時 一、實驗目的:參照給定的多維數組類和廣義表類的程序樣例,驗證給出的多維數組和廣義表的常見算法,并實現有關的操作。 二、實驗要求: 1、掌握多維數組和廣義表的特點。掌握它們的常見算法。 2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。 三、實驗內容: 1.設計函數建立一個n*n階的對稱矩陣。要求: (1)實現將對稱矩陣用一維數組存儲輸出。(2)實現矩陣轉置算法。(3)實現魔方陣算法。 (4)設計一個測試例子,并編寫主程序進行測試。 第一題源代碼: 1.1 #include for(j =0;j < n;j++){ a[i][j] = rand()% 10 + 1; a[j][i] = a[i][j]; } for(i = 0;i < n;i++){ for(j = 0;j < n;j++) cout< cout< } puts(“轉化后: ”); int k = 0; for(i = 0;i < n;i++) for(j = 0;j <= i;j++) { k = i *(i + 1)/ 2 + j; save[k] = a[i][j];k++;} for(i = 0;i < n *(n + 1)/ 2;i++)cout< cout< 運行結果: 1.2 #include template struct element { int row, col;T item;}; struct SparseMatrix { element void Trans1(SparseMatrix A, SparseMatrix &B){ B.mu=A.nu;B.nu=A.mu;B.tu=A.tu;if(B.tu>0) { int pb = 0; for(int col = 0;col for(int pa = 0;pa < A.tu;pa++) if(A.data[pa].col==col) { B.data[pb].row= A.data[pa].col; B.data[pb].col= A.data[pa].row; B.data[pb].item= A.data[pa].item; pb++; } } } int main(){ int i;SparseMatrix AA,BB;puts(“輸入行數 列數 非零元素個數”);cin >> AA.mu >> AA.nu >> AA.tu;puts(“輸入三元表:”); //puts()與 cout 一樣 for(i = 0;i < 7;i++){ cin >> AA.data[i].row; cin >> AA.data[i].col; cin >> AA.data[i].item;} Trans1(AA,BB);puts(“輸出三元表í:”);for(i = 0;i < 7;i++){ cout< cout< cout< return 0;} 運行結果: 心得體會: 實驗四 樹和二叉樹 實驗類型:驗證性 實驗要求:必修 實驗學時: 2學時 一、實驗目的: 參照給定的二叉樹類的程序樣例,驗證給出的有關二叉樹的常見算法,并實現有關的操作。 二、實驗要求: 1、掌握二叉樹、哈夫曼樹和樹的特點。掌握它們的常見算法。 2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。 三、實驗內容: 1.設計實現二叉樹類,要求: (1)編寫一個程序,首先建立不帶頭結點的二叉鏈式存儲結構的二叉樹,然后分別輸出按照前序遍歷二叉樹、中序遍歷二叉樹和后序遍歷二叉樹訪問各結點的序列信息,最后再測試查找函數和撤銷函數的正確性。 (2)實現二叉樹層次遍歷的非遞歸算法。 (3)假設二叉樹采用鏈式存儲結構進行存儲,編寫一個算法,輸出一個二叉樹的所有葉子結點,并統計葉子結點個數。(4)編寫求二叉樹高度的函數(5)編寫一主函數來驗證算法實現 第一題源代碼: #include struct BiNode { T data;BiNode template static int i; BiNode void Creat(BiNode { char ch; cin>>ch; if(ch=='#')root=NULL; else { root=new BiNode root->data=ch; Creat(root->lchild); Creat(root->rchild); } } void Release(BiNode { if(root!=NULL) { Release(root->lchild); Release(root->rchild); delete root; } } //前序建立擴展二叉樹 //建立一棵空樹 //生成一個結點 //遞歸建立左子樹 //遞歸建立右子樹 void PreOrder(BiNode //前序遍歷 { if(root==NULL) return;else { cout< PreOrder(root->lchild); PreOrder(root->rchild);} } void InOrder(BiNode { if(root==NULL) return;else { InOrder(root->lchild); cout<<(root->data); InOrder(root->rchild);} } void PostOrder(BiNode { if(root==NULL) return;else { InOrder(root->lchild); InOrder(root->rchild); cout<<(root->data);} } void LevelOrder(BiNode BiNode int front = 0, rear = 0; //中序遍歷二叉樹 //后序遍歷二叉樹 //采用順序隊列,并假定不會發生上溢 if(root==NULL) return; Q[++rear]=root; while(front!=rear) { BiNode cout< if(q->lchild!=NULL) Q[++rear]=q->lchild; if(q->rchild!=NULL) Q[++rear]=q->rchild; } } void showleaf(BiNode //顯示葉子節點,并統計個數 { if(root==NULL) { return; } else { if((root->lchild==NULL)&&(root->rchild==NULL)) { cout< i++; } else { showleaf(root->lchild); showleaf(root->rchild); } } } int Depth(BiNode //算法求二叉樹的深度 { if(root==NULL) return 0; else { int hl= Depth(root->lchild); int hr= Depth(root->rchild); if(hl>hr) return hl+1; else return hr+1; } } public: BiTree(){ Creat(root); } BiTree(BiNode Release(root);} void display(){ cout<<“前序遍歷二叉樹: PreOrder(root); cout< cout<<”中序遍歷二叉樹: InOrder(root); cout< cout<<“后序遍歷二叉樹: PostOrder(root); cout< cout<<”層序遍歷二叉樹: LevelOrder(root); cout< cout<<“輸出葉子節點: showleaf(root); ”;“;”;“;”; cout< cout<<“葉子節點數為:”< cout<<“樹的深度為: ”< } };template void main(){ cout<<“前序建立擴展二叉樹:”< 運行結果: 一:實踐名稱: 實踐日期: 實踐內容及目的: 1 完整拆裝筆記本整機 認識筆記本硬盤、光驅、鍵盤、接口 實踐操作記錄: 你所拆的筆記本是什么品牌什么型號的: 2 你所拆筆記本的屏是________寸的 硬盤的品牌是_________、容量是_________、轉速_________轉/分鐘、接口類型是________ 4 光驅接口類型是_____________ 5 此機有什么接口___________________________________________ 描述你拆機的步驟: 二:實踐名稱:前級隔離電路 實踐日期: 實踐原理和目的: 筆記本供電設備,適配器和電池匯聚到公共點,當有適配器時電池不能放電,適配器通過充電電路給電池充電,當只有電池時,電池給主板供電。能在主板中找出公共點。3 掌握隔離保護電路框架和原理 實踐操作記錄: 請畫出筆記本主板中適配器放電回路、電池放電回路、電池充電回路電路圖 三:實踐名稱:系統DC電路 實踐日期: 實驗原理和目的: 系統電源(3.3V;5V)是筆記本上的主要供電。2 公共點經過DC電路產生主板所需電壓3.3V和5V 3 DC電路工作條件:供電、開啟、基準、接地。4 DC電路工作正常后會發出PGOOD信號。實踐操作記錄: 1 芯片型號 供電在腳,開啟信號在腳,基準電壓在 腳,PG信號在 腳,線圈產生的電壓為 V和 V 3 3.3V線圈對地阻值 歐,5V線圈對地阻值 歐,上、下端管控制極對地阻值分別是 歐和 歐。4 畫出系統DC電路圖(標明器件名稱、標識) 四:CPU供電電路 實踐日期: 實踐原理和目的: CPU供電采用的DC電路原理 CPU供電芯片的工作條件:供電、開啟、睡眠、基準 CPU供電工作正常后會產生一個PGOOD信號和CLK_EN時鐘開啟信號。實踐操作記錄: 1 CPU供電芯片型號是 供電在腳,開啟信號在腳,基準電壓在 腳,CPU調節CPU供電電壓的識別腳分別是,PG信號在腳,CLK_EN在腳,CPU供電線圈對地阻值是 歐。3 畫出你跑出來的CPU供電電路: 五:實踐名稱:可調電源的使用 實踐日期: 實踐原理和目的: 1 掌握可調電源的使用步驟 2 記住使用可調電源的注意事項 學會通過可調電源判斷筆記本的故障范圍 使用的材料及工具: 筆記本電腦主板、萬用表、可調電源 1 可調電源使用步驟是:使用可調電源應注意:你看到的可調電源擺動情況是如何的?你分析故障在什么部位? 六:實踐名稱:更換燈管 實踐日期: 實踐原理和目的: 1 了解更換燈管的注意事項 2 掌握更換燈管的步驟 使用的材料及工具: 筆記本電腦主板、萬用表、可調電源、烙鐵 1 寫出更換燈管的注意事項寫出你更換燈管的步驟,結果用測屏套件是否點亮。 七:實踐名稱:更換高壓條 實踐日期: 實踐原理和目的: 了解高壓條工作條件和原理 2 掌握更換高壓條注意事項和代換原則 使用的材料及工具: 筆記本電腦主板、萬用表、可調電源、通用高壓條 1 原高壓條輸入端接口定義 如何查找屏線上高壓條的供電針腳?如何查找屏線上高壓條的開啟信號腳? 4、如何查找屏線上高壓條的亮度調節信號腳?更換步驟: 八:實踐名稱:換屏改屏線 實踐日期: 實踐原理和目的: 1 了解屏的代換原則 2 掌握屏線接口定義和規律 使用的材料及工具: 筆記本電腦主板、萬用表、可調電源、屏線 1 原屏接口定義新屏接口定義兩個屏可以代換嗎?描述換屏的步驟: 九:實踐名稱:筆記本開機電路 實踐日期: 實踐原理和目的: 了解筆記本開機電路的幾種結構 2 掌握筆記本開機條件 使用的材料及工具: 筆記本電腦主板、萬用表、可調電源 1 此機型屬于哪種開機模式此機型開機條件的測試點分別在那些器件上此機能開機嗎?請說明理由 十:實踐名稱:RTC電路 實踐日期: 實踐原理和目的: 了解RTC電路結構,主要有RTCRST、RTCVCC 2 了解RTC電路工作于待機時。使用的材料及工具: 筆記本電腦主板、萬用表、可調電源 1 畫出你跑出來的RTC電路關鍵測試點。RTCVCC的電壓測試時是多少V? RTCRST的電壓測試時是多時V? 晶振是否起振,電壓時多少V? 十一:實驗名稱:內存電路 實踐時期: 實踐原理和目的: 掌握內存對地阻值測試方法,通過測試判斷不過內存的故障 2 了解內存與北橋或者CPU之間的鏈接關系 3 了解DDR3內存與DDR2的不同 使用材料及工具: 筆記本電腦主板、萬用表、可調電源 測試內存信號線、地址線、供電、時鐘、碼片腳的對地阻值測試北橋或者CPU端信號線對地阻值。DDR3的復位信號時哪里來的 加電后內存供電時多少V? 內存信號線、地址線、時鐘上的電壓時多時V?第五篇:筆記本電腦維修實驗報告冊