張 樂,孫怡芳
(運(yùn)城學(xué)院數(shù)學(xué)與信息技術(shù)學(xué)院,山西 運(yùn)城 044000)
運(yùn)城地區(qū),自古就有“河?xùn)|”的稱號(hào),位于黃河的中游,與陜西省渭南市、河南省三門峽市隔黃河相望。運(yùn)城地區(qū)的名勝古跡不勝枚舉,文物旅游景點(diǎn)高達(dá)1600余處,其中市級(jí)以上重點(diǎn)文物保護(hù)單位170余處,全國(guó)重點(diǎn)文物保護(hù)單位90處,是全國(guó)重點(diǎn)文物保護(hù)單位數(shù)量最多的地級(jí)市。但網(wǎng)絡(luò)上有關(guān)運(yùn)城旅游的數(shù)據(jù)復(fù)雜繁瑣,如何快速的通過網(wǎng)絡(luò)數(shù)據(jù)來了解運(yùn)城的旅游的發(fā)展?fàn)顩r,是本文的主要研究意義。
本文主要使用Python 語言實(shí)現(xiàn),主要包括數(shù)據(jù)的爬取和可視化兩部分。首先通過網(wǎng)絡(luò)爬蟲采集數(shù)據(jù),使用requests提取網(wǎng)頁(yè)源碼,利用xpath、re和Beautiul-Soup提取源碼中目標(biāo)數(shù)據(jù),以csv文件進(jìn)行存儲(chǔ);其次對(duì)爬取的數(shù)據(jù)進(jìn)行清洗處理并進(jìn)行可視化分析,使用Matplotlib 庫(kù)將數(shù)據(jù)呈現(xiàn)為柱狀圖、餅圖和詞云等,使用wordcloud庫(kù)進(jìn)行詞云的制作。
網(wǎng)絡(luò)爬蟲,是按照一定的規(guī)則和策略自動(dòng)爬取網(wǎng)站某些數(shù)據(jù)信息的程序。網(wǎng)絡(luò)爬蟲是模擬瀏覽器的過程,通過模擬瀏覽器進(jìn)行網(wǎng)站的訪問,訪問到瀏覽器后將網(wǎng)頁(yè)進(jìn)行下載爬取,從下載的網(wǎng)頁(yè)中提取目標(biāo)數(shù)據(jù),然后進(jìn)行解析,從而達(dá)到自動(dòng)爬取的目的。Python語言是網(wǎng)絡(luò)爬蟲中使用最為廣泛的語言。
可視化技術(shù)是數(shù)據(jù)分析的一種,是將復(fù)雜且繁瑣的大量數(shù)據(jù)經(jīng)過可視化處理,形成直觀、高效、容易理解的圖表,分析得出數(shù)據(jù)中有價(jià)值的信息,然后更深層次的理解數(shù)據(jù)。
Matplotlib屬于Python中的一個(gè)可視化繪圖庫(kù),其功能強(qiáng)大且具有豐富的擴(kuò)展,夠?qū)崿F(xiàn)柱狀圖、餅圖、散點(diǎn)圖、折線圖等的繪制,從而實(shí)現(xiàn)快捷的可視化。
詞云通過Python 中的第三方庫(kù)使用wordcloud 庫(kù)實(shí)現(xiàn),是對(duì)文本中高頻關(guān)鍵詞進(jìn)行可視化的展現(xiàn),將多數(shù)低頻、質(zhì)量低、與主題無關(guān)的詞語過濾,將質(zhì)量高且頻次高的篩選出進(jìn)行展示,方便使用者對(duì)長(zhǎng)文本的主旨快速掌握。
運(yùn)城旅游數(shù)據(jù)可視化分析的數(shù)據(jù)采集模塊主要是對(duì)旅游網(wǎng)站中有關(guān)運(yùn)城的旅游數(shù)據(jù)進(jìn)行爬取、解析和數(shù)據(jù)的存儲(chǔ)功能。數(shù)據(jù)的采集分網(wǎng)頁(yè)分析和數(shù)據(jù)爬取兩部分,流程圖如圖1所示。
圖1 數(shù)據(jù)的采取流程圖
國(guó)內(nèi)各大旅游網(wǎng)站中,其中途牛、驢媽媽、同程旅游網(wǎng)站在有關(guān)行程路線、游記、點(diǎn)評(píng)等有不同程度的缺失,有關(guān)運(yùn)城的旅游信息較少。相對(duì)而言,“馬蜂窩”和“去哪兒”旅游網(wǎng)站各方面信息比較完整,有關(guān)運(yùn)城市的旅游數(shù)據(jù)很豐富,保證了數(shù)據(jù)的相對(duì)完整性、真實(shí)性。
首先查看網(wǎng)頁(yè)源代碼,以“去哪兒旅游”網(wǎng)為例,使用Edge 瀏覽器打開“去哪兒旅游”網(wǎng)站運(yùn)城地區(qū)的主頁(yè),然后按F12鍵或者鼠標(biāo)右鍵點(diǎn)擊選擇“檢查”,可打開調(diào)試窗口查看到網(wǎng)頁(yè)源代碼。
在后續(xù)爬蟲過程中要進(jìn)行反爬蟲機(jī)制,要進(jìn)行請(qǐng)求頭的模擬,通過調(diào)試窗口查找瀏覽器的請(qǐng)求頭,如圖2所示。
圖2 請(qǐng)求頭頁(yè)面
網(wǎng)頁(yè)爬取,是利用requests 對(duì)網(wǎng)頁(yè)的源代碼進(jìn)行爬取下載。
礦物成分簡(jiǎn)單,礦石礦物主要有閃鋅礦,次為方鉛礦、黃鐵礦;脈石礦物主要有方解石,見白云石、重晶石等。閃鋅礦自形—半自形粒狀,結(jié)晶較粗,一般粒徑為0.25~2 mm,約占80~90%,多為淡黃色~米黃色,肉眼清晰易辨,少量高角度細(xì)脈中閃鋅礦為棕褐色—黑褐色;方鉛礦以自形晶為主,粒徑一般1~4 mm;黃鐵礦自形—半自形晶粒狀產(chǎn)出,以粒徑0.2~0. 5 mm為主。方解石很普遍,存在于各種礦石類型,白云石、重晶石主要分布于細(xì)脈中。
首先確定網(wǎng)頁(yè)的初始鏈接,使用requests 庫(kù)中的get 方法進(jìn)行HTTP 請(qǐng)求,但如果以此方法直接對(duì)網(wǎng)站進(jìn)行訪問,會(huì)有錯(cuò)誤產(chǎn)生,因?yàn)榫W(wǎng)站服務(wù)器檢測(cè)到并非瀏覽器訪問,拒絕訪問。所以要制定相應(yīng)的反爬蟲策略,反爬蟲的方法主要是爬蟲時(shí)進(jìn)行偽裝,來模擬瀏覽器的訪問。通過創(chuàng)建請(qǐng)求頭來進(jìn)行模擬,在URL鏈接插入的同時(shí)將已經(jīng)準(zhǔn)備好的瀏覽器請(qǐng)求頭填入,來避免爬蟲被攔截。
在使用requests 獲取到網(wǎng)站源代碼后,得到的HTML 文檔,其含有關(guān)于網(wǎng)站所的HTML 標(biāo)簽,目標(biāo)數(shù)據(jù)包含在這些標(biāo)簽中,因此要對(duì)這些標(biāo)簽進(jìn)行解析來獲取想要的信息。在對(duì)HTML 文檔進(jìn)行解析時(shí),主要使用BeautifulSoup 庫(kù)來進(jìn)行解析,同時(shí)也可以使用re正則或者Xpath對(duì)進(jìn)行解析提取目標(biāo)信息。
在對(duì)網(wǎng)頁(yè)進(jìn)行分析后發(fā)現(xiàn),每頁(yè)中各個(gè)景點(diǎn)的信息都在<ulclass=”list_itemclrfix”></ul>模塊下,如圖3所示。然后調(diào)用BeaytifulSoup 中的方法find_all,傳入?yún)?shù)name 得到列表,通過遍歷列表,獲取每個(gè)li 標(biāo)簽中的值,得到每個(gè)景點(diǎn)的相應(yīng)信息。
圖3 景點(diǎn)的信息所在模塊
將爬取到的數(shù)據(jù)存儲(chǔ)到一個(gè)csv 文件中,包括用戶的ID、景點(diǎn)的po(i景點(diǎn)的編號(hào))、用戶的評(píng)論分?jǐn)?shù)、評(píng)論時(shí)間以及評(píng)論等內(nèi)容。
數(shù)據(jù)分析過程主要是對(duì)運(yùn)城旅游數(shù)據(jù)中的用戶評(píng)論進(jìn)行處理,這部分主要處理非結(jié)構(gòu)化數(shù)據(jù),對(duì)于用戶評(píng)論這些非結(jié)構(gòu)化數(shù)據(jù),需要用Jieba庫(kù)進(jìn)行分詞以及去掉停用詞處理。
在使用Jieba 分詞時(shí),首先進(jìn)行初始化字典,然后切分短語,利用正則將文本切分成一個(gè)個(gè)語句,通過字符串匹配,構(gòu)建所有可能分詞情況的又向無環(huán)圖(DAG)。然后構(gòu)建節(jié)點(diǎn)最大路徑概率,以及結(jié)束位置。計(jì)算每個(gè)漢字節(jié)點(diǎn)到語句結(jié)尾的所有路徑的最大概率,并記下最大概率時(shí)再DAG中對(duì)應(yīng)的該字詞的結(jié)束位置。根據(jù)節(jié)點(diǎn)的路徑進(jìn)行字詞切割分組的結(jié)果就是分詞結(jié)果,Jieba 通過yield 將分好的詞存儲(chǔ)在列表中逐個(gè)返回。
分詞結(jié)束后,會(huì)發(fā)現(xiàn)很多對(duì)于分析結(jié)果無意義的詞,將這些詞稱為停用詞。例如“的”,“就”,“有”,“可以”,“也”,“都”,“很”等字詞。所以需要將這些詞過濾掉從而減少數(shù)據(jù)噪聲,提高分析效率。過濾詞使用ordcloud 中的方法stopwords,直接將停用的詞編輯到stopwords即可。
數(shù)據(jù)可視化主要包括Matplotlib 圖表的生成和wordcloud詞云制作。
⑴評(píng)論量分析
通過Pandas 從csv 文件中將需要的數(shù)據(jù)進(jìn)行提取切片然后傳入Matplotlib 中進(jìn)行圖表繪制,將2017 年之后的每年的評(píng)論量繪制成條形圖,如圖4所示。
圖4 每年的評(píng)論量
由圖4可看出,近些年來,運(yùn)城的旅游人數(shù)在逐年增加,2020 年和2021 年上半年因受國(guó)內(nèi)外疫情影響,旅游人數(shù)減少,但是也有較多的旅游人次,可見運(yùn)城的旅游發(fā)展逐年受到關(guān)注,知名度越來越高。
⑵評(píng)分結(jié)果分析
通過matplotlib 庫(kù)對(duì)網(wǎng)頁(yè)中有關(guān)運(yùn)城旅游評(píng)分結(jié)果進(jìn)行分析,并繪制為餅狀圖,如圖5所示。
圖5 評(píng)分結(jié)果
由圖5可看出,游客對(duì)運(yùn)城景區(qū)的評(píng)價(jià)分?jǐn)?shù),超過一半的游客對(duì)運(yùn)城的景區(qū)給予滿分評(píng)價(jià),百分之九十的游客給予比較滿意的評(píng)價(jià),百分之十五左右的游客不太滿意,可見游客對(duì)運(yùn)城旅游大部分評(píng)價(jià)很高。
⑶景點(diǎn)數(shù)量分析
通過對(duì)運(yùn)城各個(gè)縣區(qū)的景點(diǎn)數(shù)量進(jìn)行爬取分析,繪制出條形圖,如圖6所示。
由圖6可看出,運(yùn)城的旅游資源十分豐富,并且運(yùn)城的旅游分布廣泛,每個(gè)縣區(qū)都有一定數(shù)量的旅游景點(diǎn)。其中運(yùn)城鹽湖區(qū)和永濟(jì)市、芮城縣的旅游景點(diǎn)數(shù)量最多,聞喜、絳縣的旅游景點(diǎn)數(shù)量最少。
圖6 各個(gè)縣區(qū)的景點(diǎn)數(shù)量
⑷評(píng)論文本分析
通過Jieba 分詞將有關(guān)運(yùn)城旅游的評(píng)論文本進(jìn)行分詞,同時(shí)篩選出停用詞,然后傳入wordcloud 進(jìn)行詞云的生成,如圖7所示。
圖7 景點(diǎn)評(píng)論文本
由圖7 可看出,運(yùn)城的旅游景點(diǎn)的吸引游客之處主要在于景點(diǎn)的歷史、建筑風(fēng)格、風(fēng)景特色、壁畫以及黃河文化,運(yùn)城比較受歡迎的景點(diǎn)有鸛雀樓、黃河大鐵牛、永樂宮、普救寺以及解州關(guān)帝廟。詞云中的“值得”一詞說明游客對(duì)運(yùn)城景點(diǎn)反饋很好。
本文通過Python 網(wǎng)絡(luò)爬蟲技術(shù)對(duì)運(yùn)城旅游數(shù)據(jù)進(jìn)行可視化分析,快速了解到運(yùn)城旅游發(fā)展現(xiàn)狀:①在2017年以來運(yùn)城旅游人數(shù)在逐年上升,運(yùn)城旅游的知名度提高;②游客對(duì)運(yùn)城的評(píng)價(jià)很高,游客對(duì)運(yùn)城的旅游給予肯定的態(tài)度;③運(yùn)城的旅游資源十分豐富,并且分布范圍廣;④運(yùn)城旅游主要受歡迎的景點(diǎn)有黃河大鐵牛、永樂宮、普救寺等景點(diǎn)。
由此可知,運(yùn)城的建筑文物十分豐富,應(yīng)該加強(qiáng)文物的修復(fù)與保護(hù)力度,重視其中的歷史文化與藝術(shù)價(jià)值,保護(hù)好運(yùn)城的文物旅游資源;同時(shí)有關(guān)黃河文化的旅游也要大力發(fā)展,可以打造獨(dú)有的黃河文化旅游路線。
本文數(shù)據(jù)可視化的呈現(xiàn),對(duì)運(yùn)城未來旅游業(yè)的發(fā)展可以提供一定的參考價(jià)值,但是還有很多不足之處需要改進(jìn),例如數(shù)據(jù)的獲取量并不是十分充足,還有諸多有關(guān)運(yùn)城旅游的特色之處沒有體現(xiàn)出來,可以根據(jù)旅游網(wǎng)站不斷增加的數(shù)據(jù)來彌補(bǔ)現(xiàn)有的不足之處,從而實(shí)現(xiàn)更全面、更深入的分析。