數據分析與數據管理系統實踐
一、數據介紹
公司員工信息 ,Excel文件
提供 44 名員工 姓名、所在部門工作職務車的編號
公司員工的信用卡刷記錄(兩週) ,Excel 文件
約 1400 行信用卡刷記錄,內容包括:員工姓名、地點稱金額時間
二、大作業要求
1、根據自己所學數據庫操作和管理知識,創建一個數據庫,把兩個Excel表導入這個數據庫,並對應建立兩個表;對兩個表創建主鍵、外鍵、索引,還可以自己增加一些列,或者做一些視圖;
2、綜合運用自己所學的查詢語句和SQL開發技巧對數據進行統計分析,並要求回答如下問題;
問題一:員工的消費有一些什麼有趣的模式和規律,請寫出你分析的SQL語句,並截取分析結果,說明你是如何找到的這些模式和規律的;(不少於5個模式)
問題二:員工的消費有什麼異常現象,你是如何找到這個異常的,請寫出你得到分析的SQL語句,並截取分析結果。(不少於3個異常)
3、學習一門開發工具,開發一個小型數據庫管理系統
系統基本功能1:增加、刪除和修改這兩個表的記錄
系統基本功能2:提供輸入框接受用戶手動輸入SQL查詢語句,能輸出用戶任意輸入的SQL查詢語句的查詢結果。
系統基本功能3:能夠按人、按消費地點、按天這三種組合,設計並輸出幾個統計報表。
三、實驗過程及結果
1、創建“大數據作業”數據庫後,右鍵點擊該數據庫,選擇【任務】—>【導入數據】,如右圖所示:
2、選擇導入的數據源,下一步,選擇導入的數據庫目標,如下圖所示:
3、在指定表複製或查詢中應該可以選擇【編寫查詢已指定要傳輸的數據】對數據進行清洗,嘗試着寫SQL語句過濾到髒數據,但沒有成功,所以就選擇直接先全將數據導入到數據庫,再對數據進行過濾。
4、通過對數據的查詢,我們可以發現creditcard表中存在一些類似“Katerina抯 Caf?28”的奇字符,下面在數據庫裏對錶中數據進行清洗。
5、新建查詢對數據清洗,並將新的數據建立一張新表。
將employee表中FirstName和LastName合併,創建newemployee表
select FirstName+' '+LastName as name,CurrentEmploymentType,CurrentEmploymentTitle
into newemployee
from employee
將creditcard表中FirstName和LastName合併,創建newcreditcard表
select FirstName+' '+LastName as name,timestamp,location,price
into newcreditcard
from creditcard
通過對兩張表的name查詢,可以發現newemployee表共44名員工,newcreditcard表去掉爲NULL共55人
select distinct name
from newemployee
select distinct name
from newcreditcard
在這裏我們對存在newemployee表中的44名員工進行對他們的消費記錄的查詢,可以發現creditcard表中錯誤不會影響,當然也可以嘗試清洗一下數據
select *
into newcreditcard1
from newcreditcard
where name in (
select name
from newemployee
)
清洗數據:
select *
into newcreditcard
from credtcard
where location not like '%[0-9]%'and FirstName is not NULL and LastName is not NULL
6、設置表中數據的數據類型、主鍵,newemployee表中FirstName、LastName沒有重複項,可以設置爲主鍵,而newcreditcard1表中有重複項,如果要設置主鍵,就必須FirstName、LastName、timestamp、location都設置爲主鍵。
7、分析數據:
(1)模式和規律
① 查詢每個人兩週內的消費總金額和職業,可以發現卡車司機職業的消費金額比其他人都高,Valeria Morlun消費最多。
② 查詢所有消費地點的消費人次,可以發現Hippokampos、Guy's Gyros、Brew've Been Served普遍比其他地方消費次數高,比較受歡迎。
③ 查詢每個人到某個地點的消費次數,可以發現大部分人兩週內基本每天都去某個地方消費一次。
④ 查詢每天所有人的消費次數總和,可以發現6號至10號五天和13號至17號五天,消費次數比11、12號和18、19號要多,可以猜想工作日出門次數比周末次數多,消費次數多。
⑤ 查詢每天某一時間段內的消費次數,將一天分24小時爲【00:00:00-03:00:00】、【03:00:00-06:00:00】、【06:00:00-09:00:00】、【09:00:00-12:00:00】、【12:00:00-15:00:00】、【15:00:00-18:00:00】、【18:00:00-21:00:00】、【21:00:00-24:00:00】八個時間段,發現【00:00:00-03:00:00】、【03:00:00-06:00:00】、【15:00:00-18:00:00】這幾個時間段消費次數較少,大多數消費集中在其他時間段:早餐、午餐、下午茶、晚餐。
【06:00:00-09:00:00】
【09:00:00-12:00:00】
【12:00:00-15:00:00】
【15:00:00-18:00:00】
【18:00:00-21:00:00】
【21:00:00-24:00:00】
【00:00:00-03:00:00】
【03:00:00-06:00:00】
(2)異常現象
① Adan Morlun和Claudio Nant兩人消費次數都比較少且平均消費金額比較大,最大單筆消費也比較多。
select FirstName,LastName,COUNT(*)as '消費次數',SUM(price)as '總金額',AVG(price)as '平均消費金額',MAX(price)as '單筆最大消費'
from newcredtcard
group by FirstName,LastName
order by AVG(price)desc
② 13號的凌晨【00:00:00-03:00:00】和12、13號【03:00:00-06:00:00】有消費記錄
③ Maximum Iron and Steel、Abila Scrapyard這幾個地點,消費次數少,且金額大,平均金額也很大。
select location,COUNT(*)as '消費次數',SUM(price)as '總金額',AVG(price)as '平均消費金額',MAX(price)as '單筆最大消費'
from newcreditcard
group by location
order by AVG(price)desc
8、數據庫開發
開發工具:Delphi 2010
開發環境:Windows XP(在虛擬機上完成的,SQL Server Management Studio也在XP裏,因爲我的主機Win10安裝不成功)
開始選擇Delphi 7 ,但感覺界面不太友好,就又重新選了Delphi 2010安裝,安裝網上有教程,破解也有,但沒有破解出來,且只有14天的試用期。DevExpress VCL 13.1.4是後面網上找教程安裝的插件,主要是一些控件的使用會用到,根據網上教程以及《Delphi程序開發範例寶典》進行數據庫開發,具體實驗截圖見下:
主界面:
主體框架結構:
Ucreadtcard.pas:對creditcard表(這裏命名錯了)的增刪改操作的主程序;
UDMmain.pas:數據庫連接模塊,後面會看到;
Uemployee.pas:對employee表的增刪改操作的主程序;
Ugroup.pas:對creditcard表分組查詢操作(按人、地點、天)的主程序;
Umain.pas:主窗口程序;
USQL.pas:SQL查詢的主程序
主窗口:設置了SQL查詢、employee表、creditcard表、統計,四個按鈕,通過dxBarManager進行管理,點擊觸發通過ActionList管理,dxSkinController界面皮膚管理控件。
按鈕觸發事件代碼如下:
Employee表的窗口界面,一張表控件和數據庫導航控件,導航控件可以對數據庫進行增刪改操作,creditcard表一樣。
ADOConnection連接數據庫,ADOQuery查詢數據庫,DataSource查詢後的數據源
SQL查詢界面,Memo接收SQL語句,查詢按鈕觸發事件進行查詢,表輸出結果。
設計代碼如下:
分組查詢,設置查詢條件,按人、地點、時間進行查詢。
給ComboBox設置選項,即查詢列下的所有數據對象,代碼如下圖:
按鈕觸發,進行查詢,代碼如下:
實驗測試結果如下:
啓動主界面;
點擊SQL查詢按鈕,輸入SQL語句,點擊查詢。
點擊employee表,進行對該表的增刪改,增是“+”,刪是“-”,改直接在表中改,然後點擊“√”
增加數據的效果,SQL Sever數據庫中增加了這麼一行,如下圖:
刪除數據的效果,選中某行數據,點擊“-”按鈕,刪除數據。
改,直接在表中改就行,然後點擊“√”按鈕。
點擊統計按鈕,進行分組查詢,從下拉框中選出查詢的對象,點擊查詢就可以進行條件查詢。
四、總結
通過本次數據庫大作業實驗,進一步鞏固了我對數據庫的基本操作,同時鍛鍊了對數據的分析能力,以及初步認識和學習數據庫開發,掌握了一些數據庫開發的基本操作。對於語言,無論是SQL語言、數據庫開發語言,還是C、Java,都有其固定的結構,和類似的語法,函數調用、參數傳遞,可能一看就知道它在做什麼,還有網上視頻教程資源很多,對於語言、開發的學習有很大幫助,希望在今後學習中能提升更多。