陳瑞志 王培錦 胡瑞鑫 鄭浩榮 林文麒 劉永鵬



摘 ?要: 針對農(nóng)村旅游市場需求,研究了基于MUI框架的農(nóng)村旅游應用程序的設計與實現(xiàn)。重點介紹了基于用戶的旅游信息過濾算法,以推薦用戶感興趣的旅游信息,并通過python編程實現(xiàn)。最后,描述了軟件實現(xiàn)的全過程。
關鍵詞:?MUI框架;旅游APP;推薦算法
中圖分類號: TP311.52????文獻標識碼:?A????DOI:10.3969/j.issn.1003-6970.2019.09.005
本文著錄格式:陳瑞志,王培錦,胡瑞鑫,等. 基于MUI框架鄉(xiāng)村旅游APP的設計與實現(xiàn)[J]. 軟件,2019,40(9):23-26
Design and Implementation of App For Rural Tourism Based on MUI Framework
CHEN Rui-zhi, WANG Pei-jin, HU Rui-xin, ZHENG Hao-rong, LIN Wen-qi, LIU Yong-peng
(Cunjin college of Guangdong ocean university,?Zhanjiang Guangdong 524094)
【Abstract】: Aiming at the market demand of rural tourism, this paper studies the design and implementation of rural tourism App based on MUI framework. Emphasis is laid on the user-based filtering algorithm to recommend tourism information that may be of interest to users, which is implemented by Python programming. Finally, the whole process of software implementation is described.
【Key words】: MUI frameworv; Tourism APP; Recommendation algorithm
“互聯(lián)網(wǎng)+”時代的到來,各種功能各異,內(nèi)容豐富的手機APP得到開發(fā)和應用,正在滿足人們對工作、學習、生活、娛樂等各方面的需求。近年來我國推行一系列發(fā)展鄉(xiāng)村旅游的政策,積極開發(fā)農(nóng)漁林產(chǎn)業(yè)的旅游功能,把鄉(xiāng)野生態(tài)休閑、自然旅游觀光、傳統(tǒng)民俗民樂文化、民族特色、紅色革命歷史背景、鄉(xiāng)村勞作體驗等,打造形式多樣、特色鮮明的鄉(xiāng)村旅休閑項目[1]。據(jù)相關統(tǒng)計2017年中國鄉(xiāng)村旅游達25億人次,鄉(xiāng)村旅游已成為新時代鄉(xiāng)村經(jīng)濟發(fā)展新的增長點[2]。鄉(xiāng)村旅游高速信息化和隨時隨地獲取旅游相關資訊等,已經(jīng)成為自助游者的迫切需求,所以基于Android平臺的鄉(xiāng)村旅游APP的開發(fā)有了日益廣泛的使用環(huán)境[4],智慧旅游成為研究熱點[5-12]。比如文獻[5]從智能醫(yī)療管理方面,研究基于Android軟件設計方案;文獻[6]中描述了利用Android移動設備管理系統(tǒng),實現(xiàn)對相機、藍牙、WIFI、惡意應用等可能造成敏感數(shù)據(jù)泄露的設備功能的管控;文獻[9]中描述了構建基于三層架構模式的智慧旅游系統(tǒng)設計體系;王艷軍等[12]研究面向服務架構的智慧旅游系統(tǒng)建設方法。
當前的出行旅游APP的服務范圍都是局限于出名的景點,對于一些不太出名,但是景色秀麗、空氣清新、人流量少的鄉(xiāng)村卻是鮮無人知。本文主要針對鄉(xiāng)村旅游景點,開發(fā)一款鄉(xiāng)村旅游APP,讓驢友們能夠通過該平臺,得到更及時的鄉(xiāng)村旅游資訊,感受當?shù)氐娘L土人情;也讓更多的鄉(xiāng)村景點呈現(xiàn)在大家的視野;幫助當?shù)厝罕姼玫乩米陨淼乩韮?yōu)勢脫貧,該APP地圖將景點和周邊的資源進行關聯(lián),方便游客全身心的體驗度假的樂趣;還能夠對景點旅游人數(shù)進行統(tǒng)計分析,對旅游人數(shù)過多的景點預警提醒,保護旅游體驗和生態(tài)環(huán)境,做到循環(huán)生態(tài)旅游。
通過調(diào)研分析發(fā)現(xiàn)人們旅游費用成本,時間精力消耗,景點環(huán)境、舒適性、便利性等,是旅行者重要考慮的影響因素。通過城市周邊的鄉(xiāng)村旅游為用戶提供價廉、優(yōu)質(zhì)的郊區(qū)農(nóng)村旅游項目,讓旅游者悠閑享受優(yōu)美的田園風光的同時,可以參加采摘園、爬山、釣魚、民宿、農(nóng)家樂、年例等鄉(xiāng)村生活體驗。
另外,鄉(xiāng)村旅游應注重保護、傳承和弘揚鄉(xiāng)村文化、民俗、非物質(zhì)文化遺產(chǎn)、特色美食等,以更加豐富的鄉(xiāng)村旅游產(chǎn)品和更加優(yōu)美的旅游環(huán)境,讓旅游者體驗鄉(xiāng)村文化,瀏覽山川等自然美景,體驗鄉(xiāng)村生活。
因此,設計實現(xiàn)一款城市周邊旅游觀光,體驗農(nóng)漁林自然風光、減少城市生活壓力的返樸歸真的鄉(xiāng)野生活的APP,既能導航、預定住宿、飲食、景點推薦等,又能預定當?shù)鼐G色有機農(nóng)產(chǎn)品,享受綠色健康、價格低廉的當?shù)爻浴⒆ ⑿小⑼妗返燃谝惑w的良好服務。
根據(jù)前面需求分析,設計了一款相應的應用軟件,下面主要從功能設計、UI設計、數(shù)據(jù)庫設計等方面來描述其設計的過程。
2.1主要功能設計
用戶提供購買特產(chǎn),查看旅游攻略,瀏覽商品,民宿預定,購物車和在線訂票等功能。用戶操作功能包括以下內(nèi)容:修改自身信息、查看訂單、購買、訂單管理、留言反饋等功能。具體功能如下:
個人中心:包括用戶注冊、登錄、查看訂單、個人信息維護、聯(lián)系客服等功能。
特色購物:當?shù)靥禺a(chǎn)信息瀏覽、查詢、購買等,包括特色農(nóng)產(chǎn)品采購、新鮮蔬果采摘等信息的推薦及提交訂單等。
當?shù)孛朗常好朗惩扑]、名店推薦、美食攻略、美食點評等相關功能。
景點游玩:景點查詢及推薦、門票信息查詢及購買、旅行攻略信息分享等功能。
民宿客棧:民宿信息瀏覽、查詢、旅游信息推薦、點評等功能。
主題游:旅游線路規(guī)劃、制定、推薦以及百度地圖關聯(lián)等功能。推薦旅游景點信息使用景點推薦算法實現(xiàn)。
2.2基于用戶的協(xié)同旅游信息過濾算法
數(shù)據(jù)源來自Scrapy框架爬蟲,從網(wǎng)絡上爬取鄉(xiāng)村旅游信息保存到MySql數(shù)據(jù)庫中,以Django搭建的網(wǎng)站作為載體,利用REST fromwork開發(fā)API接口,通過ORM映射獲取數(shù)據(jù)庫數(shù)據(jù)對象,應用基于用戶的協(xié)同過濾算法,分析推薦用戶與其他用戶的興趣愛好,過濾不相關的用戶,篩選出與推薦用戶相似度較高的用戶集合,分別計算集合中推薦用戶沒旅游過的景點的期望評分,最后通過對評分排序進行個性化推薦。
共同興趣愛好的旅游者,可以理解為用戶之間喜好的相似度,事實上在用戶基數(shù)比較大的情況下,要給某個用戶推薦[5],可以先用余弦相似度、歐氏距離或皮爾遜相關系數(shù)去量化該相似度,然后篩選出相似度大于闕值的集合,對集合的每個相似度與評分等參數(shù)做期望計算,取平均期望最高的前n個物品推薦給該用戶,如計算公式(1)所示。
皮爾遜相關系數(shù)公式:
皮爾遜系數(shù)主要用于度量兩個變量之間的相關(線性),根據(jù)統(tǒng)計學的定義,皮爾遜相關系數(shù)等于協(xié)方差和標準差的商,取值在[-1,1]之間,等于零表示不相關,一般認為大于0.1具有線性相關性,采用皮爾遜相關系數(shù)來衡量用戶的相似度。算法流程如圖1所示。
2.2.1??推薦模塊設計
功能描述:推薦模塊主要由排行榜和推薦功能兩個部分組成,排行榜解決推薦系統(tǒng)啟動之初的冷啟動問題,為推薦功能做鋪墊,推薦則是最終達到的目標,向用戶提供個性化推薦。
運行流程:在排行榜頁面或首頁顯示評分靠前的旅游景點,引導用戶進入詳細頁面進行收藏和評分。通過分析與被推薦用戶有關聯(lián)的用戶收藏和評分數(shù)據(jù),向用戶進行個性化推薦,流程如圖2所示。
2.2.2??推薦模塊實現(xiàn)
推薦功能算法依賴收藏、景點的位置、特色、美食、交通等以及評分、排行榜等因素[9],排行榜是通過從旅游評價信息中評分最高的前n個旅游景點,進行倒序排序。推薦部分使用基于用戶的協(xié)同過濾算法,篩選出評分大于某個分數(shù),并且收藏過的旅游信息記錄,生成透視表,再用皮爾遜相關系數(shù)公式去計算其相似度,把相似度高的用戶數(shù)據(jù)進行旅游景點評分的期望計算,最后按降序推薦給用戶。
算法實現(xiàn)過程和關鍵代碼:
第一步,獲取用戶評分數(shù)據(jù),轉換成相應的數(shù)據(jù)結構。
data = Score.objects.values('s_uid','s_bid','score')?#獲取數(shù)據(jù)
list = []
#篩選出評分>6.0并收藏的記錄
for obj in data:
length=len(Bmark.objects.filter(m_uid=obj.get?('s_uid'), ??m_bid=obj.get('s_bid')))
if length > 0 and obj.get('score') > 6.0:
list.append(obj)
ratings = pd.DataFrame(list) #轉成dataframe
ratings_pivot = ratings.pivot(index='s_uid',?columns='s_bid',values='score') ?#形成一個
第二步,對數(shù)據(jù)進行求相關性系數(shù)計算,過濾行列都為空的數(shù)據(jù),即過濾不相關的數(shù)據(jù)。
corr = ratings_pivot.T.corr(min_periods=max/2)
corr_clean = corr.dropna(how='all') #過濾行,全為NaN的數(shù)據(jù)。
corr_clean = corr_clean.dropna(axis=1, how='all') #過濾列
第三步,篩選出與推薦用戶有關聯(lián)的用戶(系數(shù)大于0.1)。
gift = ratings_pivot.ix[uid]
gift = gift[gift.isnull()] ?# 現(xiàn)在?gift 是一個全空的序列
corr_uid = corr_clean[str(uid)].drop(str(uid)) ?# 推薦用戶與其他用戶的相關系數(shù)?Series,不包含自身
corr_uid = corr_uid[corr_uid > 0.1].dropna() ?# 篩選相關系數(shù)大于0.1的用戶
第四步,從這些用戶中篩選出推薦用戶沒瀏覽過旅游景點,用它們的相關系數(shù)對每個旅游景點評分進行計算,得出平均期望分數(shù),將這些分數(shù)按降序排列推薦給用戶。
for jd in gift.index: ?# 遍歷所有沒瀏覽過的旅游信息
pre = []
for other in corr_uid.index.astype(np.int64): # 遍歷相關系數(shù)大于?0.1 的用戶
if not np.isnan(ratings_pivot.ix[other, jd]):
pre.append((ratings_pivot.ix[other,jd], corr_clean[str(uid)][str(other)]))
if pre:
gift[jd] = sum([value * weight for value, weight in pre]) / sum([pair[1] for pair in pre])
bids =gift.dropna().sort_values(ascending=False)?[:10]#將gift 非空元素按降序排列[4]
2.3手機APP端UI設計
手機APP分六大模塊:個人中心、特色購物、當?shù)孛朗场⒕包c游玩、民宿客棧和主題游。將鄉(xiāng)村旅游景點及其服務資源做成一條龍的服務:吃、住、行、游、購、娛等旅游行業(yè)的六個核心。基于MUI前端框架,最接近原生APP的高性能框架,界面風格也接近安卓原生APP,人機交互強,運行起來比較流暢。
首頁使用幻燈片加六宮格的樣式,每一個宮格對應一個功能,幻燈片一張圖片包含一個商品信息,如圖3所示,根據(jù)用戶權限,使用的功能會有所不同,顯示內(nèi)容也會有所不同,比如普通游客不能下訂單,旅行項目查詢和訂單頁面如圖4-5所示。每個功能以卡片的形式展現(xiàn)出來,再加入相應的UI控件,點擊按鈕觸發(fā)事件,執(zhí)行事件代碼比如跳轉至對應子頁面或修改當前信息。使用Ajax技術讓前臺與后臺信息交互,向服務器發(fā)送請求并且響應操
作信息,而且Ajax可以跨平臺使用,方便開發(fā)者開發(fā),減少開發(fā)消耗的時間,降低代碼模塊間的耦合度,提高代碼的復用性。
2.4數(shù)據(jù)庫設計
使用MySql數(shù)據(jù)庫,結合jsp和servlet開發(fā)后臺系統(tǒng),后臺同時處理多個用戶請求,數(shù)據(jù)量較大,查詢內(nèi)容多,對數(shù)據(jù)庫壓力較大,通過使用地址池緩沖,限制線程數(shù)量,有效控制數(shù)據(jù)庫過載壓力,性能可以得到保證,可以及時響應信息。
本文設計的鄉(xiāng)村旅游app,基于MUI前端框架的旅游app的設計與實現(xiàn)過程,讓用戶在使用軟件時可以體驗到原生APP的感覺,而且開發(fā)員也可以一套源碼在多個終端運行,開發(fā)成本低,APP開發(fā)周期時間短,更新便捷,跨平臺,兼容性強等優(yōu)勢可以讓本APP在各平臺廣泛的應用。
參考文獻