




摘" 要:快速、精確地清洗和分析規模龐大的原始數據,提取有效信息并形成科學、簡潔的可視化圖表是提升大數據分析工作效率的關鍵環節。文章基于Python編程語言,以百萬級以上氣象大數據為例,對其進行數據清洗、分析和可視化處理及實現,旨在提高氣象數據的處理效率和可視化效果,同時給所有其他行業百萬級別以上大數據的高效清洗、分析及可視化工作提供思路和借鑒。利用Python及其第三方庫可對海量結構化大數據進行快速、準確地清洗和分析,以及呈現豐富、可定制的數據可視化圖表。
關鍵詞:Python;氣象大數據;數據清洗;數據分析;數據可視化
中圖分類號:TP391" 文獻標識碼:A" " 文章編號:2096-4706(2025)01-0100-05
Cleaning and Visualization of Meteorological Big Data above Millions Based on Python
Abstract: Quickly and accurately cleaning and analyzing large-scale raw data, extracting effective information, and forming scientific and concise visualization charts are the key links to improve the efficiency of Big Data analysis work. Based on Python programming language, this paper takes meteorological Big Data above millions as an example to carry out data cleaning, analysis and visualization processing and implementation, aiming at improving the processing efficiency and visualization effect of meteorological data. At the same time, it provides ideas and references for the high efficiency cleaning, analysis, and visualization work of Big Data above millions in all other industries. Python and its third-party libraries can be used to quickly and accurately clean and analyze massive structured Big Data, and present rich and customizable data visualization charts.
Keywords: Python; meteorological Big Data; data cleaning; data analysis; data visualization
0" 引" 言
隨著氣象觀測技術的不斷發展和氣象數據的不斷積累,氣象數據已經成為各個領域研究的重要數據源。然而,氣象數據的規模龐大、復雜多樣,給數據的處理和分析帶來了很大的挑戰[1]。同時,隨著數據可視化技術的不斷發展,對氣象數據進行可視化分析已經成為研究的重要手段。因此,如何高效地處理和分析氣象數據,并將分析結果直觀地展示給用戶,成為氣象研究領域亟待解決的問題。Python作為一種高效、易學易用的編程語言,已經成為數據處理和可視化的重要工具。本文旨在利用Python編程語言,對百萬級以上氣象大數據進行清洗、分析和可視化處理[2-3],提高氣象數據的處理效率和可視化效果,為百萬級以上規模數據的清洗、分析和可視化研究提供新的思路和方法。
1" 技術概述
1.1" Python編程語言
Python是一種面向對象、解釋型的腳本語言,同時也是一種功能強大而完善的通用型語言,其最大的優勢之一是擁有豐富的第三方擴展庫,使其能夠廣泛用于數據分析、科學計算、網絡爬蟲、自動化運維和人工智能等各個領域[4]。
1.2" 數據清洗和數據分析
在數據清洗和數據分析這兩個關鍵環節中,Python憑借其強大的庫和工具集,為數據科學家和數據分析師提供了極大的便利[5]。數據清洗是數據處理的第一步,旨在消除數據中的噪聲、異常值和重復項,使數據更加規范、準確和一致。Python提供了多種工具和庫,如Pandas、Numpy和Scikit-Learn等,用于高效地進行數據清洗。數據分析是數據科學的核心環節,旨在從原始數據中提取有價值的信息和洞察。Python提供了豐富的數據分析工具和庫,如Pandas、Matplotlib和Seaborn等。
1.3" 數據可視化
數據可視化是數據分析過程中不可或缺的一環,它能夠將數據以直觀、易于理解的方式呈現出來,從而幫助用戶更好地洞察數據的內在規律和趨勢。Python作為一種強大的編程語言,擁有眾多優秀的數據可視化庫和工具,使得數據可視化變得簡單而高效[6]。在Python中,Matplotlib是最基本且常用的數據可視化庫之一,它提供了豐富的繪圖功能,包括線圖、散點圖、柱狀圖、餅圖等多種圖形類型,可以靈活地滿足各種數據展示需求。Matplotlib的API設計得非常強大且靈活,用戶可以通過調整各種參數來定制圖形的樣式和細節,從而實現個性化的數據可視化。除此之外,Python常用的數據可視化第三方庫還有Seaborn、PyEcharts等[7]。
2" 編碼實現過程
2.1" 環境及模塊
本文的主要開發環境為Python 3.12、PyCharm 2024.1社區版、Chrome瀏覽器和Windows 11,使用到的Python模塊有Numpy、Pandas、PyEcharts、Matplotlib等第三方庫。
2.2" 數據讀取及概況分析
本實驗的原始數據是通過爬取天氣網的數據獲得,存放在day.csv表格文件中,通過Windows 11的辦公軟件對該文件進行初步觀察,可知該文件是由
1 048 575行未經清洗的數據組成,文件總大小為96.3 MB。由于文件過大,一般的辦公軟件不能正常加載數據,會彈出“將丟失未加載的數據”錯誤信息。所以,百萬級別以上的數據清洗和數據分析需要借助專用的處理工具,打開PyCharm軟件,接下來的全部編碼實現過程都基于此軟件完成。使用day_df = pd.read_csv(./day.csv)命令將百萬級別數據量的csv格式的數據讀取出來并保存到day_df變量中。使用print(day_df)和print(day_df.info())語句分別查看該原始數據的部分行信息和該數據結構的總體概要信息,如圖1所示。
通過觀察和分析,初步形成針對此百萬級別數據文件的清洗思路:
1)數據預處理。處理序號、時間星期、溫度、風向風力等字段,其目的之一是使之轉換為能被計算機處理的數據類型,其次是剔除原始數據中的異常值和重復值,保證數據的唯一性和準確性。
2)填充缺失值。將預處理完成的數據進行缺失值填充,保證數據連續、非空、完整。
3)數據分析和完善。觀察填充缺失值后的數據,處理此階段的異常值,完善數據關鍵信息。
4)數據驗證和保存。再次通過觀察數據及概要信息,查看是否還有異常值或缺失值,確認無誤后將清洗好的數據保存到新的csv文件中,給數據可視化提供準確數據。
下面將詳細介紹數據清洗各階段的具體分析和編碼實現。
2.3" 數據預處理
此步驟是數據清洗的關鍵,將原始數據進行必要的預處理,會提高后續工作的效率和準確性。本數據源需要處理的字段分別如下:
1)序號(id)。將原始數據的序號(id)設為索引,并保持索引從1開始一直自增不間斷,其實現代碼為:day_df = day_df.set_index('id'),意為將id字段設置為表格的列索引,覆蓋原day_df結構。
2)時間星期(date_week)。由于該字段是由時間和星期組成,且星期數據表述不一致(如存在“星期一”和“周一”兩種不同的表述),不利于后續數據的處理。所以此處把“星期”數據刪除,待后續處理完填充值后再根據系統函數補全,這樣能保證它的連續性和正確性。其實現代碼為:day_df['date_week'] = day_df['date_week'].apply(lambda x: x[:10]),意為將date_week字段以切片的方式只保留第0~9個字符,即日期部分,刪除星期部分。
3)最高溫和最低溫(hightest_tem和lowest_tem)。由于原始數據的溫度為帶有單位的字符串格式,不便于后續處理。所以此處要把“℃”單位去掉,且統一將這兩列的數據類型轉換為浮點型。其實現代碼為(以處理最高溫為例,最低溫同理):
df['hightest_tem'] = df['hightest_tem'].apply(lambda x: x[:-1] if x is not np.nan else x)
df['hightest_tem'] = df['hightest_tem'].replace('', np.nan).astype(float)
上述兩行代碼先判斷要處理的溫度字段是否為非空才進行處理,處理完后若有空串則替換為np.nan,以保證空數據類型的一致性,給數填充打好基礎。最后將溫度的數據類型轉換為浮點型。
4)風向風力(wind)。將該列拆分為風向和風力兩列,并將原風向風力列刪掉。
5)數據去重。如何判斷多行數據是否存在重復,則要找出能夠精確定義一行數據的記錄是否重復的字段或字段組合。根據常識,這里應該選用“城市+時間”組合。其實現代碼為:day_df = day_df.drop_duplicates(subset=['city', 'date_week']),意為將城市和時間兩個字段都相同的字段定義為重復行,刪掉多余的重復行只保留一行。
至此,數據的預處理工作基本完成。我們將所有后續工作要應用到的數據都進行了類型轉換或格式轉換、刪除重復值等操作。
2.4" 填充缺失值
填充缺失值是指在數據預處理步驟結束后,尋找某些記錄中日期不連續或某些數值為空的情況,根據一定的邏輯判斷,將最合適的值填充進去的操作。這里要分以下三種情況討論:
1)日期缺失。經觀察,數據預處理后的日期數據雖然已經符合了格式要求,但仍存在不連續的情況。為此,考慮到Python中的pandas模塊可以自動生成完整連續的日期,我們利用如下代碼:full_day = pd.date_range(start='2011-01-01', end='2022-04-30').to_frame(name='date').astype({\"date\": \"str\"})生成從2011年1月1日到2022年4月30日的完整日期,并將其轉換為字符串類型。這樣通過系統生成的日期就不會有缺失或重復的情況。
2)溫度缺失。溫度是氣象表格中的重要數據,如果缺失,我們力求找到最接近準確的值進行填充。比較簡單、常用的辦法是利用缺失值前后的數值平均數填充。本文給出一種較復雜的方法,但是這種方法在邏輯上更為準確:即找到該缺失值對應城市和日期在歷年當天溫度的平均值進行填充。
3)風力、風向缺失。和溫度缺失值的處理類似,但由于風力、風向屬于字符串類型,無法求平均值。這里利用該缺失值對應城市和日期在歷年當天風力、風向的眾數進行填充。
溫度、風力、風向的缺失值實現邏輯類似,可一并實現。由于要找到某個城市去除年份后的歷年當天日期的平均值或眾數,則需要創建按照城市和月日劃分的分組,該分組對數值型數據求平均值,對字符串型數據求眾數。其實現代碼如下:
full_df['month_day'] = full_df['date'].apply(lambda x: x[5:])# 生成一列“月日”
month_day_g = full_df.groupby(by=['city', 'month_day']).agg({\"hightest_tem\": 'mean', 'lowest_tem': 'mean', \"weather\": get_mode, 'wind_direct': get_mode, 'wind_level': get_mode})#按城市和月日分組
接下來,判斷要填充的數據中是否有空值,如果有,則查詢分組表month_day_g中對應城市和日期的數據,用查找到的值替換空值。同理,最低溫、天氣、風力、風向缺失值都是按照本思路進行,只需要將對應的列名替換即可。
2.5" 數據驗證和保存
在進行完所有數據清洗操作后,再次使用print(full_df)和print(full_df.info())語句分別查看該清洗后數據的部分行信息和該數據結構的總體概要信息,以驗證異常值和缺失值。由圖2可知,各列的非空值個數均為1 332 436,且數據格式和類型無異常。
確認無誤后,要輸出到本地文件保存供后續操作使用。此處將清洗好的氣象大數據表格以.csv后綴保存到當前目錄下,文件名為clean_day.csv。其實現代碼如下:full_df.to_csv('./clean_day.csv', index=False)
2.6" 數據可視化
有了已經進行數據清洗的“干凈數據”,我們就可以基于此繪制出風格多樣的圖表。本文以折線圖、直方圖、餅圖為例,展示基于Python第三方繪圖庫PyEcharts的幾種類型圖表的關鍵代碼和呈現結果[3,8-10]:
1)繪制南寧2011—2022年最高溫和最低溫折線圖(可拉伸,默認顯示5%)。部分關鍵代碼為:
line = (Line(init_opts=opts.InitOpts(#此處為初始化參數#))
.add_xaxis(dates).add_yaxis(#此處為y軸最高溫參數#)
.add_yaxis(#此處為y軸最低溫參數#)
.set_global_opts(#此處為標題設置#),
legend_opts=opts.LegendOpts(#此處為圖例設置#),
yaxis_opts=opts.AxisOpts(#此處為y軸參數設置#),
xaxis_opts=opts.AxisOpts(#此處為x軸參數設置#),
datazoom_opts=opts.DataZoomOpts(#此處為區域縮放配置#),
tooltip_opts=opts.TooltipOpts(#此處為提示框組件配置#)).render('line.html')
由于篇幅限制,本文涉及的三類數據可視化代碼只列出主要函數的鏈式調用。具體參數可根據用戶的喜好設置形成不同呈現效果(以下不再贅述)。圖3為最終的效果呈現圖。
2)繪制南寧2011—2022年最高溫和最低溫頻數統計直方圖(可拉伸,默認顯示100%),部分關鍵代碼為:
bar1 = (Bar(init_opts=opts.InitOpts(#初始配置#))
.add_xaxis(#x軸高溫數據列表#)
.add_yaxis(#y軸高溫參數設置#)
.set_global_opts(#全局設置),
legend_opts=opts.LegendOpts(#此處為圖例設置#),
datazoom_opts=[opts.DataZoomOpts(#此處為區域縮放配置#)])
.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(#圖元樣式設置#))
).render('bar1.html')
圖4為南寧2011—2022年每日最高溫頻數統計直方圖的最終呈現效果。
3)繪制南寧2011—2022年天氣和風力頻數統計餅圖(取各類型前十名),部分關鍵代碼為:
pie1 = (Pie(init_opts=opts.InitOpts(#初始配置#))
.add(#餅圖各參數設置:包括數據、圓心、半徑、標簽、富文本配置#)
.set_global_opts(
legend_opts=opts.LegendOpts(#圖例設置#),
title_opts=opts.TitleOpts(#標題設置#))).render('pie1.html')
圖5為南寧2011—2022年每日天氣和風力頻數統計餅圖的最終呈現效果。
3" 結" 論
本文詳細探討了如何利用Python對百萬級以上的氣象大數據進行清洗和可視化的過程。在數據清洗方面,我們采用了多種方法和技術,包括異常值檢測與處理、重復值去除、缺失值填充等,有效地提高了數據的準確性和完整性。在數據可視化方面,我們利用Python的豐富第三方庫資源,主要通過PyEcharts模塊繪制了折線圖、直方圖和餅圖,實現了氣象數據的可視化展示,使得數據更加直觀易懂,有助于研究人員和決策者更好地理解氣象現象和趨勢。
然而,我們也意識到,大數據的處理和分析仍面臨著諸多挑戰。隨著數據規模的進一步增大和數據類型的多樣化,我們需要不斷探索更加高效、準確的數據處理和分析方法。此外,如何將特定領域的大數據與其他領域的數據進行融合,以挖掘出更多有價值的信息,也是未來研究的重要方向。
參考文獻:
[1] 陳超,顧青峰.面向混合負載的分布式氣象數據管理系統設計 [J].計算機與現代化,2023(12):118-122.
[2] 鄧慈云,馬孝杰.Python電影數據采集和可視化系統研究 [J].網絡安全技術與應用,2022(11):46-48.
[3] 呂善行,景坤.基于Python+PyEcharts的“天元”平臺維修單可視化系統 [J].現代電子技術,2023,46(18):147-151.
[4] 郭瑾.基于Python的招聘數據爬取與數據可視化分析研究 [J].輕工科技,2024,40(2):94-96+99.
[5] 梁琛,馬天鳴.Python數據分析在商業領域的應用 [J].現代信息科技,2024,8(3):99-102.
[6] 徐圣方,王金陽.Python爬蟲獲取豆瓣觀眾影評數據及可視化分析 [J].網絡安全技術與應用,2024(4):59-62.
[7] 王添男,李新慶,王艷萍,等.基于Python的氣象數據可視化方法應用研究 [J].信息技術與信息化,2023(7):32-35.
[8] 羅小芬,肖鳴喜.基于Python的大數據人才需求可視化分析 [J].山西電子技術,2024(2):85-87+100.
[9] 李雨謙,范進進,王美月.氣象數據可視化應用傳播 [J].科技與創新,2023(22):179-181.
[10] 孟文靜.Python在圖書情報學的應用與擴散研究 [D].南京:東南大學,2022.