99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數據時代分析數萬旅游評論,告訴你國慶景點背后的秘密!
分析數萬旅游評論,告訴你國慶景點背后的秘密!
2020-10-10
收藏

作者:劉早起

來源:早起Python

大家好,這個國慶,你出去旅游了嗎?每次假期后網友總愛去微博、知乎吐槽國慶旅游的坑爹景點,相關話題也頻上熱榜,在國慶期間也有相關文章[1]通過整理對應話題統計出最坑爹城市前五名分別為杭州、西安、廈門、北京、南京,而最坑爹景點則有西湖、兵馬俑、鼓浪嶼、故宮、夫子廟、黃鶴樓[2]。

本文通過Python爬取旅游網站評論數據,分析這些城市和景點在國慶期間到底表現如何,是否真的像網友吐槽的那樣坑爹。

01、數據來源與說明

本文使用的數據均來源于攜程旅行官網對應景點評論,采集時間段為2020-09-30至2020-10-08。因其所有數據均來自于具體訂單完成后評價,使用該的數據相比社交平臺討論數據而言將更加真實。下面將以故宮為例簡單說明如何使用Python爬取數據,首先打開對應頁面

https://you.ctrip.com/sight/beijing1/229.html

如上圖所示,按下F12之后在評論區(qū)域點擊最新即可找到存儲打分、評價等數據的包,之后只需查看headers等相關信息,使用Requests構造請求即可取下數據,要注意的是該請求為post形式,所以需要傳入對應參數才可以,此處不做過多講解。

但由于我們只需要國慶期間的數據,最多的景點也不過100多頁評論,所以另外一種方法是使用Selenium模擬瀏覽器操作也可以輕松成功拿下數據,之后使用pandas清洗即可。

最終本文選取的字段為:

  • 時間
  • 總評分
  • 景色評分
  • 趣味性評分
  • 性價比評分
  • 評價內容

02、不同城市旅游熱度分析

本節(jié)我們將國慶期間各省份排名前三的景點評論數量進行匯總,整理后數據的視為該省份的旅游熱度,計算得到不同省份旅游熱度,最熱門的城市為北京,其次是江浙滬以及湖北、四川、廣東、福建等省份。而這個熱度排名也基本與前文提到的社交平臺吐槽排名符合。

現在我們對網友評出最坑爹城市前五名的杭州、西安、廈門、北京、南京的旅游景點熱度單獨分析。

從評論數量來看,熱度排行前列的景點基本在北京和西安,最受歡迎的景點為西安的兵馬俑,而備受吐槽的西湖、鼓浪嶼、夫子廟等地在網站并沒有太多的評論,可能與這些景點無需門票而無法產生訂單有關。

03、“坑爹”景點分析

——好評度分析

本節(jié)我們進一步對上述五個城市的景點進一步分析其坑爹程度,我們對不同景點的網友好評度進行分析。

根據該網站數據,兵馬俑和故宮分別斬獲近9成網友的好評,而西湖和鼓浪嶼的好評度僅在80%左右,黃鶴樓也有近85%的網友給出好評,當然這里的好評僅為網友給出的總分,可以視為整體評價,接下來將對具體的評論內容進行分析。

——評論情感分析 

現在我們將每一個評論的具體內容進行情感分析

可以看到,雖然上一節(jié)的好評度分析中,每個景點都有超過8成的網友給出好評,但是從評價內容來看,給出正向的評價網友除了故宮之外,均不足8成,而整體評價較好的兵馬俑,卻有24.79%的網友給出負向評價。

——其他指標分析

在我們采集到的數據字段中除了總得分(好評)之外,還有景色、趣味、性價比三個指標,現在看一下不同總分的各項指標得分對比

不難看出在高分評價中,性價比指標的得分高于趣味性,而低分評價中則恰好相反,說明性價比不足更容易更容易讓網友反感。研究該部分評論發(fā)現大多是在吐槽景區(qū)的(額外)消費高。 

04、“坑爹”景點說什么

最后讓我們來看看上述五個景點的詞云分析,看看網友到底在吐槽什么。

北京—故宮

今天恰逢紫禁城600周年,故宮也有很多的特別展出,大多數網友都在贊嘆故宮的宏偉磅礴,而由于疫情原因,故宮限流,也有小部分人在吐槽門票難搶。

廈門—鼓浪嶼

下面是鼓浪嶼的評論詞云,除了景色不錯之外,體驗一般也很突出,其次就是上面說過的性價比不足,景點消費貴。

杭州—西湖

西湖詞云同樣是景色不錯,但是不夠好玩,性價比不足,其次就是排隊時間太久

其實西湖景區(qū)并不大,國慶期間難免會人人人人人

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數1:配置參數 // 參數2:回調,回調的第一個參數驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產品形式,包括:float,popup width: "280px", https: true // 更多配置參數說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }