訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析_第1頁
訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析_第2頁
訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析_第3頁
訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析_第4頁
訂經(jīng)濟型酒店網(wǎng)站數(shù)據(jù)采集與分析_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論