版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
目錄
1引言1
1.1項目背景1
1.2開發(fā)環(huán)境與工具1
1.2.1Python簡介1
1.2.2Requests簡介2
2需求分析2
2.1可行性需求分析2
2.2采集目標(biāo)功能分析2
2.3關(guān)鍵技術(shù)分析3
2.3.1網(wǎng)絡(luò)爬蟲技術(shù)3
2.3.2文件存取技術(shù)3
2.3.3可視化技術(shù)3
3數(shù)據(jù)采集3
3.1采集頁面分析3
3.2字段分析7
3.3編程實現(xiàn)9
4數(shù)據(jù)清洗與處理10
4.1數(shù)據(jù)清洗說明10
4.2數(shù)據(jù)清洗10
4.3編程實現(xiàn)12
5數(shù)據(jù)統(tǒng)計與分析13
5.1數(shù)據(jù)準(zhǔn)備13
5.2數(shù)據(jù)展示14
5.2.1統(tǒng)計每個省份的酒店數(shù)量和平均價格14
5.2.2統(tǒng)計各星級的酒店數(shù)量15
5.2.3統(tǒng)計各星級的酒店平均價格17
5.2.4統(tǒng)計各星級酒店的評價數(shù)18
I
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
5.2.5統(tǒng)計每個城市的酒店平均價格19
5.3綜述21
6小結(jié)21
參考資料22
II
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析
1引言
隨著信息技術(shù)的迅猛發(fā)展和應(yīng)用,數(shù)據(jù)分析在各個行業(yè)中發(fā)揮著越來越重
要的作用,酒店業(yè)也不例外。酒店作為旅游業(yè)的重要組成部分,在面臨越來越
激烈的市場競爭的同時,也需要借助數(shù)據(jù)分析技術(shù)來提高其競爭力。
酒店數(shù)據(jù)分析是通過對酒店各個方面的數(shù)據(jù)進行收集、整理、分析和利用,
來獲取有效信息、提高經(jīng)營效率、優(yōu)化服務(wù)質(zhì)量和增強競爭力的一種手段。通
過數(shù)據(jù)分析,酒店可以了解客戶需求、習(xí)慣和行為,優(yōu)化客房管理和資源利用,
降低成本費用,增加客戶滿意度和忠誠度,提高市場競爭力和經(jīng)營效率。
1.1項目背景
隨著全球經(jīng)濟的發(fā)展和人民生活水平的提高,旅游業(yè)成為了一個快速增長
的行業(yè)。酒店作為旅游業(yè)中不可或缺的組成部分,面臨著越來越激烈的市場競
爭。為了更好地滿足客戶需求、提高服務(wù)質(zhì)量、優(yōu)化經(jīng)營管理等方面的需要,
酒店需要利用數(shù)據(jù)分析技術(shù)來提高其競爭力。
在數(shù)據(jù)分析的過程中,酒店需要借助各種技術(shù)工具,如數(shù)據(jù)挖掘、數(shù)據(jù)可視
化、機器學(xué)習(xí)、人工智能等,來對數(shù)據(jù)進行處理和分析,從而得出有價值的信
息和結(jié)論。同時,數(shù)據(jù)分析也需要借助專業(yè)人員的知識和經(jīng)驗,進行數(shù)據(jù)解讀、
指導(dǎo)決策和實踐應(yīng)用。
總之,酒店數(shù)據(jù)分析是酒店業(yè)提高經(jīng)營效率、優(yōu)化服務(wù)質(zhì)量、降低成本費用
和增強競爭力的重要手段,也是未來酒店業(yè)發(fā)展的趨勢之一。
1.2開發(fā)環(huán)境與工具
數(shù)據(jù)采集:python、selenium、etree、Xpath、re
數(shù)據(jù)清洗與分析:Hadoop、Mapreduce、yarn、hive、SQL
數(shù)據(jù)可視化:matplotlib
1.2.1Python簡介
Python由荷蘭數(shù)學(xué)和計算機科學(xué)研究學(xué)會的吉多·范羅蘇姆1990年代初
設(shè)計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數(shù)據(jù)結(jié)構(gòu),
還能簡單有效地面向?qū)ο缶幊?。Python語法和動態(tài)類型,以及解釋型語言的本
1
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
質(zhì),使它成為多數(shù)平臺上寫腳本和快速開發(fā)應(yīng)用的編程語言,隨著版本的不斷
更新和語言新功能的添加,逐漸被用于獨立的、大型項目的開發(fā)。Python解釋
器易于擴展,擴展新的功能和數(shù)據(jù)類型。Python也可用于可定制化軟件中的擴
展程序語言。Python豐富的標(biāo)準(zhǔn)庫,提供了適用于各個主要系統(tǒng)平臺的源碼或
機器碼。
1.2.2Requests簡介
Requests是一個很實用的PythonHTTP客戶端庫,編寫爬蟲和測試服務(wù)器響
應(yīng)數(shù)據(jù)時經(jīng)常會用到,Requests是Python語言的第三方的庫,專門用于發(fā)送
HTTP請求Requests響應(yīng)。
2需求分析
2.1可行性需求分析
從技術(shù)角度來看,酒店數(shù)據(jù)采集與分析的項目技術(shù)可行性非常高。以下是一
些技術(shù)分析:Requests:通過使用requests庫進行數(shù)據(jù)采集,可以非常方便地
獲取網(wǎng)站上的信息,實現(xiàn)自動化爬蟲程序。requests庫使用方便,功能強大,
是進行網(wǎng)頁數(shù)據(jù)采集的重要工具。Hadoop:通過使用Hadoop技術(shù),可以快速高
效地對大規(guī)模數(shù)據(jù)進行處理,使得數(shù)據(jù)分析更加快捷、準(zhǔn)確。Hadoop在分布式
存儲、分布式計算、MapReduce等方面表現(xiàn)突出,具有高可擴展性、高可靠性等
優(yōu)點。Matplotlib:Matplotlib是Python的一個繪圖庫,可以實現(xiàn)各種類型的
圖表繪制。通過使用Matplotlib,可以對數(shù)據(jù)進行可視化展示,幫助用戶更加
直觀地理解數(shù)據(jù),方便數(shù)據(jù)分析與決策。
成本和效益分析:對于采集和分析所需的成本進行分析,以及對分析結(jié)果
帶來的效益進行評估,以確定項目的可行性。合規(guī)要求:考慮數(shù)據(jù)采集和分析
過程中的法律法規(guī)和隱私保護等合規(guī)要求,以確保項目的合法合規(guī)性。
2.2采集目標(biāo)功能分析
本次項目的數(shù)據(jù)集的來源是經(jīng)濟型酒店網(wǎng)站,是通過python爬取該網(wǎng)站所
有的酒店的信息。數(shù)據(jù)采集到了16萬多條記錄,爬取完成后盡可能的檢查數(shù)據(jù)
的準(zhǔn)確性,確定爬取出來的數(shù)據(jù)無誤并且是屬于經(jīng)濟型酒店網(wǎng)站中的酒店信息。
分析網(wǎng)站結(jié)構(gòu)確定需要采集的字段有城市名稱、酒店類型、酒店名稱、酒
店地址、酒店價格、酒店評價數(shù)、酒店簡介等字段。后續(xù)根據(jù)采集到的字段進
2
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
行多維度的數(shù)據(jù)分析。
2.3關(guān)鍵技術(shù)分析
2.3.1網(wǎng)絡(luò)爬蟲技術(shù)
網(wǎng)絡(luò)爬蟲(Webcrawler)是一種自動化程序,能夠從互聯(lián)網(wǎng)上收集信息。
它通過訪問網(wǎng)頁并分析網(wǎng)頁內(nèi)容,從中抓取有用的數(shù)據(jù),并將這些數(shù)據(jù)存儲在
本地或遠程服務(wù)器上。這些數(shù)據(jù)可以包括文本、圖像、視頻、音頻、鏈接等等。
爬蟲可以用于各種用途,如搜索引擎、數(shù)據(jù)挖掘、網(wǎng)站監(jiān)控、機器學(xué)習(xí)等領(lǐng)域。
爬蟲技術(shù)涉及到多個方面的知識和技能,包括編程語言、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)
結(jié)構(gòu)和算法等。常用的編程語言有Python、Java、JavaScript等,常見的網(wǎng)絡(luò)
協(xié)議有HTTP、HTTPS、FTP等。爬蟲可以使用多種方式來抓取網(wǎng)頁,如基于正則
表達式的文本匹配、XPath、CSS選擇器等方式。
為了避免爬蟲被網(wǎng)站攔截或者出現(xiàn)其他問題,爬蟲需要遵守一些規(guī)則和原
則,如合法使用robots.txt協(xié)議、設(shè)置爬蟲頭、設(shè)置訪問間隔時間等。此外,
還需要注意爬取數(shù)據(jù)的合法性和隱私保護等問題。
2.3.2文件存取技術(shù)
文件存儲主要使用json文件完成,json具有簡單、易于閱讀、利于網(wǎng)絡(luò)傳
輸?shù)葍?yōu)點,在大數(shù)據(jù)文件傳輸中應(yīng)用非常廣泛。
2.3.3可視化技術(shù)
Matplotlib是Python中最受歡迎的數(shù)據(jù)可視化軟件包之一,支持跨平臺運
行,它是Python常用的2D繪圖庫,同時它也提供了一部分3D繪圖接口。
3數(shù)據(jù)采集
3.1采集頁面分析
本次數(shù)據(jù)采集的目標(biāo)網(wǎng)站是“訂經(jīng)濟型酒店”網(wǎng)站,該網(wǎng)站包含
了全國各個城市所有的酒店信息,包括酒店所在城市、酒店地址、酒店類型、
房間價格等信息。該網(wǎng)站的首頁如下圖3-1所示:
3
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖3-1網(wǎng)站首頁
點擊下方酒店簡略信息模塊的更多按鈕,即可跳轉(zhuǎn)到全國各個城市的選擇頁
面,城市按照首字母順序進行排序,如下圖3-2所示:
圖3-2城市列表頁
4
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
隨機點擊其中的某個城市,即可跳轉(zhuǎn)到酒店信息列表頁,在酒店信息列表頁
中可以根據(jù)酒店的價格、類型等字段進行篩選。每一頁最多有20行條記錄,可
以點擊下方的“下一頁”按鈕進行翻頁。如下圖3-3所示:
圖3-3酒店信息列表頁
根據(jù)初略的網(wǎng)站頁面瀏覽,已經(jīng)基本清晰了網(wǎng)站的結(jié)構(gòu),后續(xù)在采集每個城
市每一個酒店信息時,還需要考慮城市切換、翻頁等細節(jié)問題,在后面的小結(jié)
中會有詳細的介紹。
通過前一小結(jié)的采集頁面分析,已經(jīng)大致了解了網(wǎng)站頁面的切換順序,那么
只需要逐個對不同頁面url發(fā)起請求即可,請求的方式有post和get請求,通
過抓包工具分析得出,頁面的數(shù)據(jù)都是以get請求返回,如下圖3-4所示:
圖3-4抓包分析
首先對城市列表頁url發(fā)起get請求,通過etree庫解析html文檔,逐個
獲取每個城市酒店列表頁的href,在根據(jù)href拼接出完整的url,再逐個對酒
店列表頁url發(fā)起get請求,獲取其中的酒店字段。
對目標(biāo)url發(fā)起get請求,通過抓包工具可以看出響應(yīng)的html內(nèi)容,從中可以
發(fā)現(xiàn)所有城市href屬性和城市名稱都在class屬性為index_wrap的div標(biāo)簽
5
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
中,使用etree庫的HTML方法解析response響應(yīng),通過循環(huán)的方式逐一取出
城市href屬性和城市名稱,代碼如下圖3-5所:
圖3-5get_city_list方法
由于在酒店詳情頁中沒有所在城市的字段,所以需要將將城市href屬性和
城市名稱使用管道符號進行拼接成組合串,這樣可以更好的將城市名稱字段傳
輸?shù)较掠纬绦蛑?,保證了數(shù)據(jù)的完整性。最后將組合串存儲到列表中,以供后
續(xù)代碼處理。
使用loop_city_list方法遍歷每個城市的組合串,解析其中的城市href屬
性,并拼接成完整的url串,最后調(diào)用get_hotel_star方法做后續(xù)的處理。詳
細代碼如下圖3-6所示:
圖3-6get_hotel_star方法
在酒店列表信息頁的選擇欄中有酒店星級的選項,由于在酒店詳情頁中沒有
酒店星級字段,所以需要對選擇欄的各個星級url分別處理,以保存酒店的星
級字段。打開抓包分析工具,查看對應(yīng)的html文檔,找到酒店星級對應(yīng)的url,
如下圖3-7所示:
圖3-7酒店星級html文檔分析
利用xpath方法獲取div標(biāo)簽,獲取其中的a標(biāo)簽中的屬性和內(nèi)容。由于
“不限”級別包含了所有的星級,在采集過程中如果不加以處理,會和后面的
6
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
各個星級重復(fù),所以”不限”級別需要剔除。使用get_hotel_star方法處理,
詳細代碼如下圖3-8所示:
圖3-8get_hotel_star方法
由于“不限”級別在列表中處理第一個位置,所以使用python的列表截取
方法即可剔除該級別。獲取到各個星級的href屬性之后,將其拼接成完整的url
串,并傳入到turn_page方法做后續(xù)處理。
3.2字段分析
每個酒店星級可能會有多個頁面,此時需要翻頁。在前面的采集頁面分析中
已經(jīng)知道,每個頁面最多只有20條記錄,如果頁面中的記錄少于20條,那么
該頁面是最后一頁,否則它不是最后一頁。根據(jù)這個規(guī)則可以制定出翻頁策略。
如果頁面有20條記錄那么它可能會有下一頁,此時需要構(gòu)造出下一個的url,
如果不足20條記錄那么它是最后一頁,則不需要翻頁。
使用turn_page方法進行翻頁處理。詳細代碼如下圖3-9所示:
圖3-9turn_page方法
使用xpath方法獲取頁面記錄數(shù),判斷是否需要翻頁。在構(gòu)造翻頁url時有
兩種情況,第一種是從第1頁翻到下一頁,由于酒店信息列表頁的初始url不
包含翻頁參數(shù)p,所以在第一次翻頁時需要使用字符串方法添加參數(shù)p并傳入頁
7
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
數(shù);第二種情況時從非第1頁翻到下一頁,此時url中就已經(jīng)存在了p參數(shù),
在構(gòu)造下一頁url時則只需要修改p參數(shù)的值即可。如下圖3-10和3-11所示:
圖3-10第1頁url
圖3-11后續(xù)頁面url
從上面的圖片可以清晰的看到,圖3-8中的url比圖3-7中的url多了一個
p參數(shù)。在程序中通過調(diào)整p參數(shù)的值實現(xiàn)翻頁。
將獲取到的response響應(yīng)傳入到get_hotel_page方法中做酒店詳情字段
的獲取,以避免對相同頁面的重復(fù)請求,造成內(nèi)存資源浪費。
通過對酒店詳情頁html文檔分析找到各個字段所在的標(biāo)簽:
圖3-12酒店字段html分析
使用get_hotel_page方法處理。詳細代碼如下圖3-13所示:
圖3-13get_hotel_page方法
Xpath方法的返回值是列表類型,需要使用join方法將列表轉(zhuǎn)換成字符串,
以方便后續(xù)字段的存儲。將所有字段傳入到save_hotel_fields方法中,對字
段進行整理并落盤。
將所有字段保存到字典中,這里城市和酒店星級字段比較特殊,因為是從最
初的采集程序中逐級傳遞過來的,在save_hotel_fields方法中和其他字段統(tǒng)
一整理。
在save_hotel_info方法中將數(shù)據(jù)保存成json格式,json格式有輕量、易
解析和便于網(wǎng)絡(luò)傳輸?shù)忍攸c,能夠提高數(shù)據(jù)清洗與分析的效率。
save_hotel_info詳細代碼如下圖3-14所示
8
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖3-14save_hotel_info方法
調(diào)用json庫的dumps方法,指定忽略ascii碼參數(shù),將數(shù)據(jù)以utf-8編碼
保存到gckzw.json文件中。
3.3編程實現(xiàn)
到此為止,所有的數(shù)據(jù)處理方法已經(jīng)全部編寫完成。在main方法中調(diào)用
get_city_list方法獲取城市信息列表,并傳入loop_city_list方法中即可啟
動爬蟲程序。Main方法詳細如下圖3-15所示:
圖3-15main方法
數(shù)據(jù)采集程序所需要的python第三方庫如下所示:
importrequests
fromlxmlimportetree
importjson,re
運行程序如下圖3-16所示:
圖3-16運行main爬蟲程序
程序運行結(jié)束之后會在當(dāng)前文件夾中生成gckzw.json,打開文件可以看到
采集了16萬多行記錄。其龐大的數(shù)據(jù)量為數(shù)據(jù)的多維度多角度分析帶來了正確
性,可以保證數(shù)據(jù)分析的客觀性和真實性。在后續(xù)的數(shù)據(jù)處理中將該文件上傳
到HDFS分布式文件系統(tǒng)做數(shù)據(jù)清洗和數(shù)據(jù)分析等處理。如下圖3-17所示:
9
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖3-17gckzw.json文件
4數(shù)據(jù)清洗與處理
4.1數(shù)據(jù)清洗說明
在實際的數(shù)據(jù)分析業(yè)務(wù)中,數(shù)據(jù)往往來自于不同業(yè)務(wù)系統(tǒng)或爬蟲系統(tǒng),這
樣會造成數(shù)據(jù)格式可能不統(tǒng)一。所以在獲得龐大的數(shù)據(jù)集之后需要對數(shù)據(jù)進行
清洗和預(yù)處理,統(tǒng)一數(shù)據(jù)格式和剔除無效或有缺失數(shù)據(jù),這是大數(shù)據(jù)開發(fā)中不
可或缺的部分,保證了數(shù)據(jù)的一致性和正確性。這個對于信息質(zhì)量的評估是一
項很重要的任務(wù)。不僅如此,還需要將數(shù)據(jù)進行有理化和有序化,這樣子能夠在
數(shù)據(jù)調(diào)用共享過程中方便很多開發(fā)人員對數(shù)據(jù)信息的使用。
本次項目數(shù)據(jù)清洗和分析使用Hadoop框架來完成。將爬取下來的數(shù)據(jù)存儲到分
布式文件系統(tǒng)HDFS中,通過分析和觀察原始數(shù)據(jù),制定合理的數(shù)據(jù)清洗規(guī)則,
并利用分布式計算引擎mapreduce讀取和處理數(shù)據(jù)。
4.2數(shù)據(jù)清洗
創(chuàng)建JSONObject對象,解析json串根據(jù)key值獲取對應(yīng)的value值;處理
hotel_price字段,剔除價格單位符號‘¥’。比如‘¥416.00’處理之后為
‘416.00‘,這樣做的目的是便于后續(xù)對價格字段的計算和分析;處理
hotel_intro字段,剔除其中的‘簡介’和特殊符號等信息。比如‘簡介:
\u3000\u3000柞水恒隆旅社位于下梁鎮(zhèn)街道東側(cè),交通十分便利?!幚碇?/p>
10
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
為‘柞水恒隆旅社位于下梁鎮(zhèn)街道東側(cè),交通十分便利。’,這樣可以在精簡
內(nèi)容時保證了數(shù)據(jù)的完整性,可以增加磁盤的存儲利用率。
根據(jù)city_name字段,查詢中國省份編碼表,找到城市對應(yīng)的省份和省份編
碼,以便于后續(xù)繪制省份酒店數(shù)量分布圖。
編寫cleanPrice方法處理清洗價格字段,使用字符串方法replace方法剔
除人民幣符號,使加個字段規(guī)整化。詳細代碼如下圖4-1所示:
圖4-1cleanPrice方法
簡介字段有兩種情況需要處理,第一種是剔除“簡介”和“:”等字符串,
第二種是剔除其中的特殊符號,如“\u3000\u3000”和“\n”,其中換行符的
處理尤為重要,否則會導(dǎo)致結(jié)果文件出現(xiàn)大量的無效行。編寫cleanIntro方法
完成清洗操作,主要使用字符串的replace方法將無效字符替換成空串。詳細
代碼如下圖4-2所示:
圖4-2cleanIntro方法
為了便于后續(xù)繪制省份酒店數(shù)量地圖,需要添加省份編碼字段。具體方法為,
查詢中國省份編碼表,將其緩存到內(nèi)存中,再根據(jù)城市名稱查詢對應(yīng)的省份和
省份編碼。在mapreduce程序中,setup在程序啟動時執(zhí)行一次,所以緩存省份
編碼的操作需要放在該方法中,在map方法中對每一行的城市名稱字段查詢都
需要查詢一次省份編碼。
在setup方法中創(chuàng)建BufferedReader對象讀取目標(biāo)文件,將內(nèi)容緩存到
hashmap中。由于省份編碼表中的城市字段包含了”市、地區(qū)”等字符,而原始
數(shù)據(jù)文件中的該字段沒有”市、地區(qū)”等字符,為了保證在hashmap中能夠準(zhǔn)
確的查詢到對應(yīng)的省份和編碼,需要對”市、地區(qū)”等字符剔除,保證數(shù)據(jù)的
一致性。
在map方法中調(diào)用getProvinceAndCode查詢省份編碼hashmap表,并將省
份編碼格式化為標(biāo)準(zhǔn)編碼。詳細代碼如下圖4-3所示:
11
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖4-3getProvinceAndCode方法
數(shù)據(jù)清洗完畢之后,將所有字段按照逗號進行拼接,以方便后續(xù)將數(shù)據(jù)導(dǎo)入
hive表進行數(shù)據(jù)分析。字段拼接操作主要通過connect方法來實現(xiàn)。詳細代碼
如下圖4-4所示:
圖4-4connect方法
主要思想:使用可變參數(shù),將所有的字段統(tǒng)一的傳入,使用for循環(huán)遍歷,
逐個添加到stringBuilder對象后,拼接完成之后,在每一行的最后會多出一
個逗號,所以在返回的時候要將這個多余的逗號剔除。這里不使用String類的
原因是因為String對象不可變,在拼接過程中會產(chǎn)生大量無用字符串,消耗大
量內(nèi)存,所以這里使用StringBuilder對象。
4.3編程實現(xiàn)
所有的處理邏輯編寫完成之后,就需要在main方法中調(diào)用這些處理邏輯類
了。main方法詳細代碼如下圖4-5所示:
12
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖4-5main方法
在main方法中創(chuàng)建Configuration對象,設(shè)置輸入輸出目錄、輸入輸出數(shù)
據(jù)類型等參數(shù)。最后即可運行mapreduce程序。運行關(guān)鍵日志如下圖4-6所示:
圖4-6mapreduce運行日志
mapreduce程序運行結(jié)束后,會在指定的目錄下生成output文件夾,其中
part-r-00000就是數(shù)據(jù)清洗的結(jié)果。如下圖4-7所示:
圖4-7output文件夾
5數(shù)據(jù)統(tǒng)計與分析
5.1數(shù)據(jù)準(zhǔn)備
獲取到統(tǒng)一規(guī)整的數(shù)據(jù)后就可以進行數(shù)據(jù)分析了。數(shù)據(jù)分析基于mapreduce
分布式計算引擎有兩次方式,第一種是直接編寫mapreduce程序進行數(shù)據(jù)分析,
這種方式比較靈活,但是比較復(fù)雜繁瑣;第二種是將數(shù)據(jù)導(dǎo)入到hive中,并利
13
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
用其類SQL語言進行數(shù)據(jù)分析,hiveSQL的底層實際上也是mapreduce程序,
hive可以將SQL翻譯成mapreduce程序并運行,這種方式比較簡單,并且也可
以進行復(fù)雜的數(shù)據(jù)分析。
根據(jù)原始數(shù)據(jù)創(chuàng)建對應(yīng)的hive表,表結(jié)構(gòu)如下圖所示:
圖5-1查看數(shù)據(jù)導(dǎo)入情況
使用hive提供的load語句將數(shù)據(jù)導(dǎo)入,后續(xù)根據(jù)SQL語句進行數(shù)據(jù)分析。
導(dǎo)入命令運行結(jié)果如下圖所示:
圖5-2load數(shù)據(jù)導(dǎo)入
5.2數(shù)據(jù)展示
5.2.1統(tǒng)計每個省份的酒店數(shù)量和平均價格
統(tǒng)計每個省份的酒店數(shù)量和平均價格,需要根據(jù)省份編碼字段和省份名稱字
段進行分組,對每個省份的酒店數(shù)量求和,并計算酒店平均價格,為了保證數(shù)
據(jù)的可讀性,這里將平均價格保留兩位小數(shù)。Sql代碼如下所示:
selectcode,province,count(city),round(avg(hotel_price),2)
fromhotel_info
wherecodelike'CN%'
groupbycode,province
orderbyround(avg(hotel_price),2)desc
運行結(jié)果如下圖5-3所示:
14
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖5-3統(tǒng)計每個省份的酒店數(shù)量和平均價格
根據(jù)數(shù)據(jù)分析結(jié)果繪制地圖,將數(shù)據(jù)分析結(jié)果通過hive導(dǎo)出成文件,使用
python的pyecharts庫繪制中國省份地圖。詳細代碼如下所示:
importpandasaspd
frompyechartsimportoptionsasopts
frompyecharts.chartsimportMap
df=pd.read_csv(r'D:\酒店數(shù)據(jù)采集與分析\可視化文件\result1.txt',sep='\t',header=None)
df.columns=['code','name','data','price']
map_chart=Map()map_chart.add('',[list(z)forzinzip(df['name'],df['data'])],'china')
map_chart.set_global_opts(title_opts=opts.TitleOpts(title='酒店數(shù)據(jù)地圖'),
visualmap_opts=opts.VisualMapOpts(max_=max(df['data'])))map_chart.render('map.html')
程序運行結(jié)果如下所示:
圖5-4中國各省份酒店數(shù)據(jù)地圖
5.2.2統(tǒng)計各星級的酒店數(shù)量
統(tǒng)計各星級的酒店數(shù)量,對酒店星級字段分組,并使用count函數(shù)求和。Sql
代碼如下所示:
selecthotel_star_name,count(1)
fromhotel_info
wherehotel_star_namein('經(jīng)濟型','二星級','三星級','四星級','五星級')
groupbyhotel_star_name
15
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
運行結(jié)果如下圖5-5所示:
圖5-5統(tǒng)計各星級的酒店數(shù)量
在代碼中,從指定的文本文件中讀取數(shù)據(jù),并將其分別存儲在labels和
sizes列表中。接著,使用plt.pie函數(shù)繪制餅圖,并傳遞labels和sizes作
為參數(shù)。其中,autopct='%1.1f%%'表示顯示百分比的格式為保留一位小數(shù)。
shadow=False表示不顯示陰影,startangle=150表示旋轉(zhuǎn)餅圖的起始角度為
150度。最后,使用plt.title函數(shù)添加標(biāo)題,并使用plt.show函數(shù)顯示餅圖。
圖5-6統(tǒng)計各星級的酒店數(shù)量
將每個酒店星級進行分組聚合統(tǒng)計出每個星級酒店的數(shù)量,如上圖可以看出
經(jīng)濟型酒店的占比要遠遠高于其他星級的酒店,其次是二星級酒店,從餅圖中
可以清晰的看出星級越高其酒店數(shù)量就會越少。說明了經(jīng)濟型酒店更受大眾歡
迎,雖然價格相對來說比較低,但是龐大的數(shù)量的數(shù)量帶來的經(jīng)濟效益也是不
可估量的,有著薄利多銷的特點;星級酒店的數(shù)量較少,符合了經(jīng)濟學(xué)的特點,
主要的訂購對象一般都是商務(wù)人群。
16
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
5.2.3統(tǒng)計各星級的酒店平均價格
統(tǒng)計各星級的酒店的平均價格,對酒店星級字段分組,使用avg函數(shù)求平均
數(shù)并用round函數(shù)保留兩位小數(shù)。Sql代碼如下所示:
selecthotel_star_name,round(avg(hotel_price))
fromhotel_info
wherehotel_star_namein('經(jīng)濟型','二星級','三星級','四星級','五星級')
groupbyhotel_star_name
運行結(jié)果如下圖5-7所示:
圖5-7統(tǒng)計各星級的酒店平均價格
通過讀取指定文件的數(shù)據(jù)進行繪圖。首先,使用plt.rcParams來設(shè)置字體,
然后從指定文件中讀取數(shù)據(jù),使用readlines()函數(shù)讀取每一行數(shù)據(jù),然后通過
split()函數(shù)來分割每一行數(shù)據(jù),獲取標(biāo)簽和數(shù)據(jù)的值。接下來,使用plt.bar()
函數(shù)將數(shù)據(jù)繪制成條形圖,其中tick_label參數(shù)指定標(biāo)簽的位置,rotation參
數(shù)設(shè)置標(biāo)簽的旋轉(zhuǎn)角度,title函數(shù)設(shè)置圖表的標(biāo)題,最后使用plt.show()函
數(shù)展示圖表。這段代碼的目的是繪制各星級酒店的平均價格的條形圖,方便比
較各星級酒店的價格水平。
運行結(jié)果展示如下:
17
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖5-8統(tǒng)計各星級的酒店平均價格
該柱狀圖展示了各星級酒店的平均價格,其中五星級酒店的價格最高,經(jīng)濟
型酒店的價格最低,一般來說,價值是價格的基礎(chǔ),價格是價值的貨幣表現(xiàn),
價值應(yīng)等同于價格。但在實際市場交換中,單個商品的價格與價值很少趨于一
致,價格與價值總是相互背離的,而這種背離又總是以價值為中心,進行上下
波動的。從較長時期和總的趨勢來看,這種背離不會太久,由于價格總是圍繞
價值上下波動,所以產(chǎn)品的總價格仍與總價值相等。因此企業(yè)在制定和調(diào)整價
格時應(yīng)以產(chǎn)品的價值為基礎(chǔ),使價格大體上符合價值,而不能背離太遠,這樣
才符合價值規(guī)律的要求。商品價格的高低,主要由商品中包含的價值量的大小
決定。但從市場營銷的角度看,商品的價格除了受價值量的影響之外,還要受
其他諸多因素的影響。
5.2.4統(tǒng)計各星級酒店的評價數(shù)
統(tǒng)計各星級酒店的評價數(shù),對酒店星級字段分組,使用sum函數(shù)對評價數(shù)進
行匯總,Sql代碼如下所示:
selecthotel_star_name,sum(comment)
fromhotel_info
wherehotel_star_namein('經(jīng)濟型','二星級','三星級','四星級','五星級')
groupbyhotel_star_name
運行結(jié)果如下圖5-9所示:
圖5-9統(tǒng)計各星級酒店的評價數(shù)
通過柱狀圖展示每年各星級酒店的評價數(shù)。代碼中首先使用了numpy和
matplotlib庫進行導(dǎo)入,并且設(shè)置了中文字體為SimHei。接著使用withopen
打開txt文件,將文件中的數(shù)據(jù)讀入到列表x和y中,x為年份,y為對應(yīng)的評
價數(shù)。然后使用plt.bar()函數(shù)繪制柱狀圖,設(shè)置alpha參數(shù)控制柱子的透明度,
width參數(shù)設(shè)置柱子的寬度,color和edgecolor參數(shù)分別控制柱子和邊框的顏
色。同時使用label參數(shù)設(shè)置圖例的標(biāo)簽,lw參數(shù)設(shè)置線寬。接著使用
plt.legend()設(shè)置圖例的位置,并使用plt.title()設(shè)置圖表的標(biāo)題。最后使用
plt.xticks()函數(shù)設(shè)置x軸的刻度和標(biāo)簽,并通過rotation參數(shù)設(shè)置標(biāo)簽的傾
斜角度。最后使用plt.show()展示圖表。
18
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
運行結(jié)果展示如下:
圖5-10統(tǒng)計各星級酒店的評價數(shù)
從上圖可以發(fā)現(xiàn)經(jīng)濟型酒店的平均數(shù)最高,從側(cè)面反映了經(jīng)濟型酒店的入住
率較高,由于經(jīng)濟型酒店比一般星級酒店費用低、服務(wù)標(biāo)準(zhǔn)統(tǒng)一,所以經(jīng)濟型
酒店的入住率一般可以達到90%以上。實惠的價格享受到更加高品質(zhì)的服務(wù)適
合眾多商旅人士,自然成為消費者入住之地。
5.2.5統(tǒng)計每個城市的酒店平均價格
統(tǒng)計每個城市的酒店平均價格,需要對城市名稱字段進行分組,使用avg函
數(shù)對價格求平均數(shù),并取平均價格最高的10個城市。Sql代碼如下所示:
selectcity,round(avg(hotel_price))
fromhotel_info
wherecityisnotnull
groupbycity
orderbyround(avg(hotel_price))desc
limit10
運行結(jié)果如下圖5-11所示:
19
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖5-11統(tǒng)計每個城市的酒店平均價格
首先通過open()函數(shù)以只讀方式打開指定路徑下的文件,讀取其中的內(nèi)容,
并將其賦值給變量lines。然后,使用for循環(huán)遍歷每一行數(shù)據(jù),通過split()方法
將每一行數(shù)據(jù)按照指定的分隔符切分成多個子字符串,并將其存儲到labels和
sizes兩個列表中。
接下來,使用plt.bar()函數(shù)繪制柱狀圖,其中第一個參數(shù)為柱子的位置,使
用ran
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年方矩管項目立項申請報告模板
- 2024-2025學(xué)年延安市志丹縣三年級數(shù)學(xué)第一學(xué)期期末調(diào)研模擬試題含解析
- 2024-2025學(xué)年咸寧市崇陽縣數(shù)學(xué)三年級第一學(xué)期期末監(jiān)測試題含解析
- 2024-2025學(xué)年西藏山南地區(qū)曲松縣三年級數(shù)學(xué)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 畢業(yè)生個人自我鑒定400字10篇
- 股權(quán)無償轉(zhuǎn)讓協(xié)議書七篇
- 大學(xué)專業(yè)實習(xí)日志【5篇】
- 員工個人辭職申請書三篇
- 第6課《阿西莫夫短文兩篇:恐龍無處不有》教學(xué)實錄 2023-2024學(xué)年統(tǒng)編版語文八年級下冊
- 初中英語教研組工作計劃(15篇)
- 維吾爾族介紹
- 《安裝規(guī)范全》課件
- 居家服侍老人協(xié)議書
- 跌倒或墜床相關(guān)知識培訓(xùn)課件
- 2024年-(多附件條款版)個人汽車租賃給公司合同電子版
- 建工意外險培訓(xùn)課件
- 廣東省深圳市寶安區(qū)2023-2024學(xué)年高一年級上冊調(diào)研測試物理試卷
- 冰雪旅游安全知識假期旅行安全攻略
- 城市軌道交通售檢票系統(tǒng) 課件 項目四 自動售票機
- 虛實結(jié)合(上課改)課件
- 2024年山東能源集團魯西礦業(yè)有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論