摘" 要:針對天氣尤其是南方天氣的變化,人們需要掌握出行時段內的具體天氣,包括日常出行(上班、上學等)、出差、旅游等,并做好相應的出行安排。所設計的系統(tǒng)從中國新聞網等數(shù)據(jù)源爬取各地天氣數(shù)據(jù),利用Spark技術進行數(shù)據(jù)處理和調取,通過ECharts庫繪制各種圖表和圖形,用以展示不同城市的天氣數(shù)據(jù)變化趨勢,并采用線性回歸算法對天氣數(shù)據(jù)進行預測分析。該系統(tǒng)能夠實現(xiàn)對304個城市的實時天氣搜索,預測未來3天的氣溫,以及對實時溫度、降水、風力、氣壓、濕度等進行分析,為人們查詢天氣提供了高效、便捷的方法。
關鍵詞:天氣預測;線性回歸;Python;爬蟲;可視化
中圖分類號:TP311" 文獻標識碼:A" 文章編號:2096-4706(2024)23-0133-06
Design and Implementation of Meteorological Data Prediction and Visualization System Based on Linear Regression
XIONG Jianfang1, FENG Wen1, GAO Ji2, PENG Zengyan1
(1.School of Computer Science and Intelligence Education, Lingnan Normal University, Zhanjian" 524048, China;
2.The 704 Research Institute of CSSC, Shanghai" 200031, China)
Abstract: In view of the changes of the weather, especially the weather in the south, people need to master the specific weather during the travel periods, including daily travel (going work or school), business trips, tourism, and so on, and make corresponding travel arrangements. This designed system crawls weather data everywhere from data sources such as China News Network, uses Spark technology for data processing and retrieval, and draws various charts and graphs through ECharts library, to show the change trend of weather data in different cities. And the Linear Regression algorithm is used to predict and analyze the weather data. The system can realize the real-time weather search in 304 cities, predict the temperature in the next 3 days, and analyze the real-time temperature, precipitation, wind force, air pressure, humidity, and so on, providing an efficient and convenient method for people to check the weather.
Keywords: weather prediction; Linear Regression; Python; crawler; visualization
0" 引" 言
氣象預報直接影響著人類活動的各個方面,是現(xiàn)代社會不可或缺的一部分。及時獲取氣象資料能夠預警各種自然災害,比如暴雨、大風、冰雹等,減輕災害給人類帶來的影響[1]。隨著信息技術的迅速發(fā)展,網絡爬蟲技術受到越來越多重視。通過利用網絡爬蟲技術,可以更高效地收集和利用天氣信息數(shù)據(jù),從而節(jié)省人力和物力成本。在氣象預測方面,有研究使用Scrapy框架編寫天氣爬蟲,利用Python字符切割和Split技術獲取目標數(shù)據(jù),并借助Spark進行服務器端編程,清洗后的數(shù)據(jù)存儲到MySQL數(shù)據(jù)庫,最終通過ECharts在網頁上呈現(xiàn)天氣數(shù)據(jù)的可視化圖表。
1" 整體設計
1.1" 開發(fā)技術
1.1.1" 爬蟲技術
Python作為一種強大的編程語言,在網絡爬蟲領域發(fā)揮了重要作用[2]。它提供了豐富的第三方庫和標準庫,簡化了網絡爬蟲編程的復雜性,使得進行網絡爬蟲編程更加方便[3-4]。同時,Python提供了用于訪問前端頁面的API,這使得使用Python進行網頁文檔接口的抓取變得更加輕松和高效。此外,Python還提供了網絡請求庫Requests和正則工具RE,它們是爬蟲編程中常用的工具之一[5]。Requests對Python內置的網絡請求模塊進行了高度封裝,能夠完全滿足HTTP測試需求,使得對網頁的爬取和解析變得更加快捷。由于氣象數(shù)據(jù)的高時效性,爬蟲程序必須定期檢查目標網站,以確定哪些頁面需要更新,從而確保及時獲取最新的數(shù)據(jù)。
1.1.2" Spark技術
Apache Spark作為一個快速通用的計算引擎,其靈活性和高效性使得它成了許多大規(guī)模數(shù)據(jù)處理任務的首選技術。Spark強大的API和豐富的工具生態(tài)系統(tǒng),讓開發(fā)人員能夠輕松構建復雜的數(shù)據(jù)處理和分析應用,并快速迭代和調試代碼。在數(shù)據(jù)挖掘、機器學習、實時分析等領域,Spark都表現(xiàn)出色,為業(yè)界帶來了許多創(chuàng)新和進步。隨著大數(shù)據(jù)技術的不斷發(fā)展和普及,Spark將繼續(xù)發(fā)揮其重要作用,推動大數(shù)據(jù)處理領域的進一步發(fā)展,并為構建智能、高效的數(shù)據(jù)處理系統(tǒng)提供支持[6]。
1.1.3" 線性回歸算法
在機器學習中,線性回歸是最簡單、最基本的一種有監(jiān)督學習預測算法,其主要原理是建立輸入特征和目標值之間的線性關系模型,以預測新樣本的目標值[7]。在此模型中,假設目標值與輸入特征之間呈線性關系,即目標值可由輸入特征的線性組合加上一個偏置項表示。線性回歸模型的數(shù)學計算式為:
其中,y為目標值,X1,X2,…,Xn為輸入特征,β0,β1,…,βn為模型的參數(shù)(也稱為權重),∈為誤差項。模型的目標是通過調整參數(shù)的數(shù)值,從而使預測值y盡可能接近真實值。線性回歸通常采用最小化平方誤差的損失函數(shù)來進行參數(shù)估計。
1.2nbsp; 可視化系統(tǒng)的架構設計
在前端獲取到統(tǒng)計和預測的數(shù)據(jù)后,利用ECharts庫繪制各種圖表和圖形包括柱狀圖、折線圖、餅圖等,用以展示不同城市的天氣數(shù)據(jù)變化趨勢[8]。
在前端獲取到統(tǒng)計和預測的數(shù)據(jù)后,這些數(shù)據(jù)可以動態(tài)地傳遞給對應的可視化組件,例如柱狀圖用于展示城市的溫度和降水情況、折線圖用于展示氣溫的變化趨勢、餅圖用于展示城市的風力和濕度情況。通過將數(shù)據(jù)與可視化組件進行綁定,可以確保圖表能夠實時更新,并以直觀的方式呈現(xiàn)天氣信息,使用戶能夠輕松地獲取氣象信息。
通過前端的Vue.js框架[9]和可視化庫ECharts的應用,該系統(tǒng)可以為用戶提供直觀、清晰的天氣信息展示,進一步提升用戶體驗和數(shù)據(jù)的可解釋性。同時,通過動態(tài)加入統(tǒng)計數(shù)據(jù)和預測到可視化內容中,用戶可以更全面地了解天氣情況,并做出相應的決策和規(guī)劃。技術機構圖如圖1所示。
2" 系統(tǒng)設計與實現(xiàn)
2.1" 數(shù)據(jù)采集模塊設計
2.1.1" 數(shù)據(jù)采集
本系統(tǒng)涉及的數(shù)據(jù)(全國各省市縣的天氣信息、當日實時天氣和未來24小時的天氣預報)均來源于騰訊天氣API,通過訪問API接口獲取各地區(qū)的天氣數(shù)據(jù)。數(shù)據(jù)采集頻率設置為每小時一次,以保證天氣信息的及時性和準確性。
使用requests庫爬取http://wis.qq.com/weather/common網站的信息進行數(shù)據(jù)分析。首先根據(jù)各個城市、時間等參數(shù)構建爬取地址,導入Requests模塊代替瀏覽器做HTTP請求,訪問相關信息網站,對整個頁面進行下載。然后使用RE正則工具對請求到的HTTP界面進行正則篩選,檢查字符串是否與某種模式匹配,來獲取所需要的數(shù)據(jù)。發(fā)送HTTP請求以獲取天氣API接口返回的JSON格式數(shù)據(jù),然后進行解析和處理。
獲取到的天氣數(shù)據(jù)經過處理后存儲到MySQL數(shù)據(jù)庫中,以便后續(xù)的數(shù)據(jù)分析和可視化展示,同時處理過程包括解析數(shù)據(jù)、提取所需信息,如溫度、濕度、風速、氣壓等[10]。
2.1.2" 數(shù)據(jù)清洗與統(tǒng)計
首先,使用SQLContext的read().jdbc()方法從數(shù)據(jù)庫中讀取數(shù)據(jù),然后根據(jù)指定的條件進行篩選。其次,將讀取到的數(shù)據(jù)轉換為JavaRDD,并通過collect()方法獲取所有數(shù)據(jù)行。最后,通過調用size()方法獲取數(shù)據(jù)行的數(shù)量,并將其作為統(tǒng)計結果返回。以上操作保證了數(shù)據(jù)的高效處理和準確統(tǒng)計,為后續(xù)的數(shù)據(jù)分析和可視化提供了有力支持。在數(shù)據(jù)處理的最后階段,將數(shù)據(jù)經過精心加工后重新寫入MySQL數(shù)據(jù)庫中。此外,在數(shù)據(jù)處理模塊中,需要確保能夠輕松地獲取MySQL數(shù)據(jù)庫的連接信息,這樣才能保證與數(shù)據(jù)庫的順暢交互。通過以上設計,數(shù)據(jù)處理模塊能夠高效地與MySQL數(shù)據(jù)庫進行交互。以上流程不僅保證了數(shù)據(jù)的完整性和一致性,還提高了系統(tǒng)的可擴展性和可維護性。同時,將數(shù)據(jù)存儲在數(shù)據(jù)庫中也為多個模塊之間的數(shù)據(jù)共享提供了便利,使得整個系統(tǒng)更加協(xié)同和高效。爬蟲后的存儲后的數(shù)據(jù)如圖2所示,將爬蟲后的數(shù)據(jù)整理到數(shù)據(jù)庫中,如圖3所示。
數(shù)據(jù)處理主要代碼如下:
datetime.date.today().strftime(\"%Y%m%d\"), province, city, county)
# 構造SQL語句并執(zhí)行
sql = \"REPLACE INTO tb_forecast( max_degree, min_degree, weather, wind_direction,\" \
\"wind_power, time1," night_weather, night_wind_direction,\" \
\"night_wind_power,update_time,\" \
\"province, city, county) \
VALUES ( %d,%d,'%s','%s',%d,'%s','%s','%s',%d,'%s','%s','%s','%s') \" % \
(int(_forecast['max_degree']), int(_forecast['min_degree']), _forecast['day_weather'],
_forecast['day_wind_direction'], day_wind_power, _forecast['time'],
_forecast['night_weather'], _forecast['night_wind_direction'], night_wind_power,
2.1.3" 線性回歸預測模型
本系統(tǒng)采用大數(shù)據(jù)技術進行天氣預測,借助大似然估計進行線性回歸分析,旨在提高對未來3天天氣情況的準確性。為實現(xiàn)這一目標,深入探索了以下幾個方面:
1)數(shù)據(jù)預處理與特征工程。在建立預測模型之前,進行數(shù)據(jù)預處理和特征工程。這包括數(shù)據(jù)清洗、缺失值處理、異常值檢測等步驟,以確保數(shù)據(jù)的質量和完整性。同時,在原始數(shù)據(jù)中建立了因果關系,并利用前7天的數(shù)據(jù)集提取關鍵特征,如溫度、濕度、氣壓等,作為模型的輸入變量。
2)模型選擇與優(yōu)化。在選擇預測模型時,我們比較了多種算法,如線性回歸、決策樹、隨機森林等。在探索線性回歸過程中需處理的問題時:給定一組輸入樣本,和每個樣本對應的目標值,需要在某一損失準則下,找到(學習到)目標值和輸入值的函數(shù)關系,這樣,當有一個新的樣本到達時,可以預測其對應的目標值是多少。選擇線性回歸作為主要的預測模型時,對模型進行了參數(shù)調優(yōu),以提高預測準確性。通過交叉驗證的方式,調整線性回歸模型中的正則化參數(shù)(如L1正則化的懲罰項系數(shù)α或L2正則化的懲罰項系數(shù)λ),以控制模型的復雜度,避免過擬合或欠擬合。
3)預測模型構建。調用生成JSON函數(shù),提取前7天的數(shù)據(jù)集,并設置自變量和因變量。其中,x為天數(shù),w為前7天的天氣訓練結果。通過對前7天數(shù)據(jù)集中w的排序,得到不同效果的w2、w3、w4,并結合自變量x進行未來3天天氣的預測。將預處理后的歷史氣溫數(shù)據(jù)輸入已經建立好的線性回歸模型中。模型會利用歷史數(shù)據(jù)中的特征與目標值之間的關系,來學習并建立一個線性回歸方程[11]。
4)統(tǒng)計分析和個性化效果提取。利用Spark調取數(shù)據(jù)集進行信息提取,用線性回歸方法進行統(tǒng)計分析,繪制柱狀圖、餅圖等,進行樣式表的分析。根據(jù)不同城市的效果進行數(shù)據(jù)提取和分析,以滿足不同城市的需求和特點。
模型的目標是通過調整參數(shù)的數(shù)值,從而使預測值y盡可能接近真實值。線性回歸通常采用最小化平方誤差的損失函數(shù)來進行參數(shù)估計。這樣不僅實現(xiàn)了對未來3天天氣的準確預測,還為天氣預測系統(tǒng)的性能提升和用戶體驗改善提供了重要技術支持,對模型預測的結果進行解釋和分析??梢员容^預測值與實際觀測值的差異,評估模型的準確性和穩(wěn)定性。線性回歸模型的主要代碼如下:
def fitSLR (x , y) :
n = len(x)
dim = 0
mune = 0
for i in range(0,len(x)):
mune += (x[i] - np.mean(x))*(y[i] - np.mean(y))
dim += (x[i] - np.mean(x))**2
print(\"numerator:\" , mune , \"\n\" , \"dinominator:\",dim)
b1 = mune/float(dim)
b0 = np.mean(y)/float(np.mean(x))
return(b0,b1)
def predict(x , b0 ,b1):
return(b0 + x*b1)
def linaer_regression_predict(p1, p2, n):
print(p1)
print(p2)
b0, b1 = fitSLR(p1, p2)
print(\"intercept:\", b0, \"\n\", \"slope\", b1)
x_t = float(n)
y_t = predict(x_t, b0, b1)
return y_t
sql = \"select" degree" from" tb_weather where city='%s' \" \
\"and update_time in" (select" *" from" "\" \
\"(select" distinct update_time from tb_weather \" \
\"where" "city ='%s' order by update_time desc limit 7 ) as t)\" % (city, city)
w = []
tt = session.execute(text(sql))
for c in cur:
w.append(c[0])
print(w)
x = [1, 2, 3, 4, 5, 6, 7]
w2 = linaer_regression_predict(x, w, 7)
w3 = linaer_regression_predict(x, w, 8)
w4 = linaer_regression_predict(x, w, 9)
2.2" 系統(tǒng)實現(xiàn)
2.2.1" 主要城市氣溫展示圖
圖4是主要城市氣溫圖,以柱狀圖的形式展現(xiàn)了廣州、上海、深圳三個主要城市的氣溫情況。通過色彩的深淺變化,直觀地呈現(xiàn)了不同城市的氣溫高低分布,用戶可以一目了然地比較各城市的氣溫差異。這種圖不僅展示了當前的氣溫情況,還反映了氣溫的季節(jié)性變化和日間夜間溫差,為用戶提供了重要的氣象信息。
2.2.2" 城市溫度圖
圖5中展示了特定城市過去一段時間的歷史溫度情況,通過圖的形式直觀地展示了每天的溫度變化趨勢。這種圖表不僅可以幫助用戶了解過去一周內城市溫度的變化情況,還可以分析溫度的波動情況,揭示溫度的季節(jié)性和周期性變化。用戶可以通過觀察溫度圖快速了解城市的氣候特點和變化規(guī)律。
2.2.3" 氣溫預測
氣溫預測圖天氣預報系統(tǒng)中的重要組成部分,它基于歷史數(shù)據(jù)進行分析和預測,為用戶提供未來3天的氣溫趨勢展示。通過分析過去一段時間的氣溫數(shù)據(jù),系統(tǒng)可以識別出氣溫的周期性變化和趨勢,進而預測未來的氣溫變化情況,如圖6所示。
2.2.4" 切換城市頁面
圖7中展示了切換到鄭州天氣的情況。在該模塊的設計中,本系統(tǒng)主要運用Python語言進行樣式表的切換,同時利用Spark技術調取數(shù)據(jù)庫中的信息。通過線性回歸算法進行自動分析,系統(tǒng)設計更加直觀,而且代碼結構簡潔明了,易于執(zhí)行。同時,這一設計實現(xiàn)了大屏幕的效果,使得用戶可以在一個界面上輕松切換不同城市的天氣信息,提高了用戶體驗和系統(tǒng)的可用性。這種簡潔而高效的設計,使得用戶可以快速獲取所需的天氣預報,為其日常生活和出行提供了便利。通過這樣的設計,用戶不僅可以方便地查看當前城市的天氣情況,還能快速切換到其他城市,滿足不同用戶的需求。這種用戶友好的設計,有助于提升系統(tǒng)的實用性和用戶滿意度,進而促進系統(tǒng)的廣泛應用。
2.2.5" 實時更新
圖8展示的是溫度變化后的效果,當前溫度為12 ℃,并且該數(shù)值是實時更新的。這種實時變化是通過數(shù)據(jù)庫的遞增效果實現(xiàn)的,數(shù)據(jù)庫會不斷地接收最新的數(shù)據(jù),因此天氣情況也會相應地實時變更。實時更新的功能使得系統(tǒng)及時呈現(xiàn)當前的氣溫,用戶可以隨時了解到天氣的最新狀態(tài)。例如,在溫度發(fā)生突然變化時,用戶可以立即得知,從而做出相應的活動調整。這種及時性和準確性為用戶提供了便利,增強了系統(tǒng)的實用性和用戶滿意度。同時,實時更新也表明了系統(tǒng)的高度自動化和智能化,為用戶提供了更加便捷的天氣信息查詢體驗。
3" 結" 論
本系統(tǒng)能夠實現(xiàn)對國內304個城市的實時天氣搜索,并利用線性回歸算法預測未來3天的天氣溫度情況,同時實現(xiàn)對實時溫度、降水、風力、氣壓、濕度等方面的分析。系通過大屏可視化效果,用戶可以直觀地了解各地天氣情況,為出行和生產生活提供便利。
參考文獻:
[1] 李璐,郭淇汶,陸宇,等.基于Python的天氣預測系統(tǒng)研究 [J].信息技術與信息化,2020(10):18-20.
[2] 張一恒,王芹,刁煒卿,等.基于Scrapy爬蟲技術和圖神經網絡的生態(tài)旅游推薦技術 [J].自動化與儀器儀表,2024(2):6-10.
[3] 馮艷茹.基于Python的網絡爬蟲系統(tǒng)的設計與實現(xiàn) [J].電腦與信息技術,2021,29(6):47-50.
[4] 周瑋.基于網絡爬蟲技術的財務大數(shù)據(jù)采集系統(tǒng)設計 [J].中國新技術新產品,2024(3):37-40.
[5] 沈承放,莫達隆.Python語言中re庫的使用技巧與目標網絡數(shù)據(jù)的抓取 [J].賀州學院學報,2019,35(3):151-156.
[6] 馮超,蘭唱,周冬雪.基于大數(shù)據(jù)分析的氣象信息網絡數(shù)據(jù)監(jiān)控系統(tǒng)設計與實現(xiàn) [J].長江信息通信,2023,36(12):125-127.
[7] 王靜怡,甄翠敏.工商銀行不良貸款影響因素分析——基于多元線性回歸模型 [J].河北企業(yè),2024(5):84-86.
[8] 萬騰.基于Echarts的跨平臺教學資源數(shù)字化展現(xiàn)解決方案 [J].辦公自動化,2024,29(3):47-50.
[9] 羅光武,陳典燦,吳荷,等.應用Springboot+Vue框架的時間管理軟件的設計與實現(xiàn) [J].工業(yè)控制計算機,2024,37(4):64-66.
[10] 鄭博培,李媛.基于物聯(lián)網的智能天氣識別系統(tǒng)設計 [J].物聯(lián)網技術,2020,10(12):7-9.
[11] 張涵夏.適用于線性回歸和邏輯回歸的場景分析 [J].自動化與儀器儀表,2022(10):1-4+8.
作者簡介:熊建芳(1980—),女,漢族,江西樟樹人,講師,碩士,主要研究方向:人工智能算法、數(shù)據(jù)分析。