摘" 要:在現(xiàn)代城市交通中,共享單車(chē)的普及帶來(lái)了大量騎行數(shù)據(jù),蘊(yùn)含豐富的用戶(hù)行為信息。文章旨在通過(guò)對(duì)Kaggle共享單車(chē)數(shù)據(jù)集的深入分析,探討影響共享單車(chē)使用模式的主要因素。采用Python的Pandas庫(kù)進(jìn)行數(shù)據(jù)處理,并利用Seaborn和Matplotlib進(jìn)行可視化分析,以直觀展示數(shù)據(jù)特征和用戶(hù)行為模式。研究發(fā)現(xiàn),租賃數(shù)量與溫度、濕度及風(fēng)速等氣象因素密切相關(guān),且在特定時(shí)段內(nèi)租賃活動(dòng)更為頻繁。這一研究不僅展示了Pandas、Seaborn及Matplotlib在數(shù)據(jù)可視化中的優(yōu)越性,還為城市交通管理和共享單車(chē)運(yùn)營(yíng)提供了數(shù)據(jù)支撐,從而優(yōu)化交通管理、提升用戶(hù)體驗(yàn)。
關(guān)鍵詞:大數(shù)據(jù)分析;可視化;共享單車(chē)數(shù)據(jù);Python
中圖分類(lèi)號(hào):TP391.4" 文獻(xiàn)標(biāo)識(shí)碼:A" 文章編號(hào):2096-4706(2024)23-0058-06
Visualization of Urban Sharing Bicycle Rental Analysis Based on Pandas+Seaborn+Matplotlib
XU Hao1, LIU Wanyue2, ZHANG Zihao1
(1.School of Artificial Intelligence and Big Data, Henan University of Technology, Zhengzhou" 450001, China;
2.iFLYTEK Co., Ltd., Hefei" 230088, China)
Abstract: The widespread adoption of sharing bicycles in modern urban transportation has brought a vast amount of riding data which contains rich information about user behavior. This paper aims to conduct an in-depth analysis of the Kaggle sharing bicycle dataset to explore the main factors influencing sharing bicycle usage patterns. It utilizes Pandas library of Python for data processing and employs Seaborn and Matplotlib for visual analysis, providing an intuitive display of data characteristics and user behavior patterns. The study finds that rental quantities are closely related to meteorological factors such as temperature, humidity, and wind speed, with rental activities being more frequent during specific time periods. This research not only demonstrates the superiority of Pandas, Seaborn, and Matplotlib in data visualization, but also provides data support for urban traffic management and sharing bicycle operation, thereby optimizing traffic management and enhancing user experience.
Keywords: Big Data analysis; visualization; sharing bicycle data; Python
0" 引" 言
自行車(chē)共享系統(tǒng)作為傳統(tǒng)自行車(chē)租賃的新一代,從注冊(cè)會(huì)員到租賃再到歸還整個(gè)過(guò)程實(shí)現(xiàn)自動(dòng)化。用戶(hù)可輕松在特定位置租用自行車(chē)并在另一位置歸還,目前全球約有500多個(gè)共享單車(chē)項(xiàng)目,由50多萬(wàn)輛自行車(chē)組成。因其在交通、環(huán)境和健康問(wèn)題上發(fā)揮重要作用,人們對(duì)其產(chǎn)生極大興趣。與此同時(shí),眾多研究者也對(duì)這些系統(tǒng)所產(chǎn)生的數(shù)據(jù)興致盎然。與公共汽車(chē)或地鐵等其他運(yùn)輸服務(wù)不同,共享自行車(chē)使用的持續(xù)時(shí)間、出發(fā)時(shí)間和到達(dá)位置都明確記錄在系統(tǒng)中。所以,對(duì)今天共享單車(chē)數(shù)據(jù)的分析,不管是針對(duì)商業(yè)價(jià)值或是學(xué)術(shù)研究,對(duì)共享單車(chē)數(shù)據(jù)的分析也尤為重要。
而在“互聯(lián)網(wǎng)+”與大數(shù)據(jù)快速發(fā)展的當(dāng)下,高效處理并展示大量數(shù)據(jù)成為亟待解決的問(wèn)題之一[1]。而數(shù)據(jù)分析可視化能提升數(shù)據(jù)呈現(xiàn)效果,讓用戶(hù)更迅速、直觀地理解復(fù)雜數(shù)據(jù)。通過(guò)Python對(duì)共享單車(chē)使用數(shù)據(jù)進(jìn)行深入挖掘[2],既能為城市交通規(guī)劃者和共享單車(chē)運(yùn)營(yíng)商提供數(shù)據(jù)支撐,進(jìn)而優(yōu)化交通管理、提高用戶(hù)體驗(yàn),又能進(jìn)一步拓展自行車(chē)共享系統(tǒng)的價(jià)值。
1" 利用Python進(jìn)行數(shù)據(jù)可視化
要實(shí)現(xiàn)更高效的數(shù)據(jù)分析,采用具有強(qiáng)大繪圖功能的Python語(yǔ)言處理數(shù)據(jù)至關(guān)重要。Python作為解釋性編程語(yǔ)言,在人工智能、網(wǎng)絡(luò)爬蟲(chóng)、科學(xué)計(jì)算與統(tǒng)計(jì)等諸多方面廣泛應(yīng)用,其數(shù)據(jù)分析功能強(qiáng)大,可顯著提高數(shù)據(jù)分析效率[3]。
之所以運(yùn)用Python語(yǔ)言處理,是因?yàn)槠鋼碛斜姸噙m用于數(shù)據(jù)分析和數(shù)據(jù)可視化的工具庫(kù),如Seaborn、Pandas、Numpy和Matplotlib。Matplotlib是Python的一個(gè)2D繪圖庫(kù),用于生成圖形和圖表。它在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)中廣泛應(yīng)用于數(shù)據(jù)可視化[4]。在本實(shí)驗(yàn)中,Matplotlib用于繪制模型訓(xùn)練和驗(yàn)證過(guò)程中的損失曲線(xiàn)和準(zhǔn)確率曲線(xiàn),幫助直觀分析模型的性能。Pandas是一個(gè)強(qiáng)大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集,它的使用基礎(chǔ)是Numpy(提供高性能的矩陣運(yùn)算),用于數(shù)據(jù)挖掘和數(shù)據(jù)分析,同時(shí)也提供數(shù)據(jù)清洗功能。Seaborn則是一個(gè)建立在Matplotlib基礎(chǔ)之上的Python數(shù)據(jù)可視化庫(kù),專(zhuān)注于繪制各種統(tǒng)計(jì)圖形,以便更輕松地呈現(xiàn)和理解數(shù)據(jù)[5]。
因此,利用具有強(qiáng)大繪圖功能的Python語(yǔ)言處理數(shù)據(jù)對(duì)于更有效地開(kāi)展數(shù)據(jù)分析十分必要[6]。
2" 數(shù)據(jù)簡(jiǎn)介
城市共享單車(chē)的租賃分析針對(duì)的是共享單車(chē)在某一特定時(shí)段的租賃數(shù)量。本文的數(shù)據(jù)集是來(lái)自Kaggle競(jìng)賽的美國(guó)華盛頓共享單車(chē)租賃數(shù)據(jù),數(shù)據(jù)的特征主要包含季節(jié)、節(jié)假日、工作日、天氣、日期、溫度、濕度、未注冊(cè)人員數(shù)量、注冊(cè)人員數(shù)量以及共享單車(chē)使用量等各種方面的信息,共享單車(chē)的租賃數(shù)據(jù)如表1所示。
3" 共享單車(chē)租賃數(shù)據(jù)集的預(yù)處理
3.1" 數(shù)據(jù)集的導(dǎo)入分析
首先導(dǎo)入數(shù)據(jù)集并使用info函數(shù)查看具體數(shù)據(jù),程序運(yùn)行結(jié)果如圖1所示。
首先大致觀察數(shù)據(jù)和列標(biāo)簽的形態(tài),接著運(yùn)用函數(shù)查看數(shù)據(jù)的基本信息。由此可知,該數(shù)據(jù)一共有10 886行、12列。每一列都對(duì)應(yīng)著共享單車(chē)租賃的不同特性。其中,三列數(shù)據(jù)為浮點(diǎn)型,“datetime”列的數(shù)據(jù)為字符串類(lèi)型,其余數(shù)據(jù)為整型?!癲atetime”列的數(shù)據(jù)展示了單車(chē)租賃的具體時(shí)間和日期,“holiday”與“workingday”分別用“1”和“0”表示“是”和“否”,“season”則用“1”“2”“3”“4”來(lái)代表春、夏、秋、冬四個(gè)季節(jié)。
3.2" 缺失值的處理
查看本次數(shù)據(jù)中是否含有缺失值,使用missingno庫(kù)中的matrix函數(shù)Pandas DataFrame類(lèi)型創(chuàng)建一個(gè)矩陣熱圖,顯示數(shù)據(jù)中缺失值的分布情況,運(yùn)行結(jié)果如圖2所示。
缺失值矩陣圖展示了數(shù)據(jù)集中每列的缺失值情況。圖中的每一列代表數(shù)據(jù)集的一列,行代表每個(gè)數(shù)據(jù)樣本。白色的條代表缺失值,深色的條代表存在的數(shù)據(jù)。通過(guò)這種可視化,可以直觀地看到數(shù)據(jù)集中缺失值的分布和模式。所以由圖2可知本次數(shù)據(jù)沒(méi)有缺失值,不需要進(jìn)行缺失值處理。
3.3" 重復(fù)值分析
通過(guò)data.drop_duplicates () 函數(shù)對(duì)重復(fù)數(shù)據(jù)進(jìn)行清除操作。具體代碼如下:
duplicate_rows = data.duplicated()
num_duplicates = duplicate_rows.sum()
print(f\"Number of duplicate rows: {num_duplicates}\")
if num_duplicates gt; 0:
print(\"Duplicate rows:\")
print(data[duplicate_rows].head())
data_cleaned = data.drop_duplicates()
data_cleaned.info()
清除重復(fù)數(shù)據(jù)前,數(shù)據(jù)集的尺寸為10 886行×12列;清除后,數(shù)據(jù)集的大小仍為10 886行×12列,這表明本數(shù)據(jù)集沒(méi)有重復(fù)的數(shù)據(jù)值。
3.4" 共享單車(chē)租賃的特征相關(guān)性分析
為了了解各個(gè)變量與count(單車(chē)租賃數(shù)量)的相關(guān)性,筆者做了各變量與count的相關(guān)矩陣熱力圖,因?yàn)閐atetime列數(shù)據(jù)的類(lèi)型不屬于數(shù)值型類(lèi)型,在之前將數(shù)據(jù)集中的datetime的year、month、day(具體日期)、hour以及weekday部分轉(zhuǎn)化為數(shù)值型數(shù)據(jù)。但熱力圖需要數(shù)值型數(shù)據(jù)運(yùn)算,所以重建int_df刪去其中非數(shù)值的列。以熱力圖可視化顯示了各變量間的相關(guān)性,可以找出和共享單車(chē)租賃相聯(lián)系的特征,結(jié)果如圖3所示。
從圖3當(dāng)中可以得知,count與registered、casual呈現(xiàn)出高度正相關(guān)關(guān)系,相關(guān)系數(shù)分別為0.7和0.97。鑒于count等于casual與registered之和,這種正相關(guān)符合預(yù)期。count與temp呈正相關(guān),相關(guān)系數(shù)是0.39。通常來(lái)講,氣溫過(guò)低時(shí)人們往往不太樂(lè)意騎車(chē)出行。count和humidity(濕度)為負(fù)相關(guān),濕度過(guò)大的天氣確實(shí)不適合騎車(chē)。在考量濕度的時(shí)候,也需要同時(shí)考慮溫度。windspeed對(duì)租車(chē)人數(shù)的影響似乎不大,相關(guān)系數(shù)為0.1,這可能是因?yàn)闃O端大風(fēng)天氣的出現(xiàn)頻率較低。在風(fēng)速處于正常范圍內(nèi)波動(dòng)時(shí),對(duì)人們租車(chē)的影響比較小。所以由此可以總結(jié)出,不同特征值對(duì)租賃數(shù)量的影響力度排序?yàn)椋簳r(shí)段的影響最大,其次是溫度、濕度、年份、月份、季節(jié)、天氣等級(jí)、風(fēng)速、星期幾、是否工作日以及是否假日。
3.5" 數(shù)據(jù)的重新處理
對(duì)數(shù)據(jù)集進(jìn)行一定的分析,可知沒(méi)有缺失值和異常值。但datetime的數(shù)據(jù)類(lèi)型是object,為了之后的數(shù)據(jù)分析更方便,需要把它轉(zhuǎn)化為時(shí)間類(lèi)型,并拆分為year、month、week、day、hour、weekday,即日期的處理轉(zhuǎn)換,為接下來(lái)的數(shù)據(jù)分析做準(zhǔn)備。替換后的部分?jǐn)?shù)據(jù)如圖4所示。
4" 共享單車(chē)租賃的可視化分析
按照影響共享單車(chē)租賃數(shù)據(jù)的各類(lèi)要素,查看各要素?cái)?shù)據(jù)的分布情況,便可以得到各要素對(duì)共享單車(chē)租賃產(chǎn)生的影響[7]。
4.1" 時(shí)段對(duì)租賃數(shù)量的影響
使用Seaborn和Matplotlib庫(kù)來(lái)按時(shí)段分組并計(jì)算平均租賃數(shù)量,然后將這些結(jié)果可視化為折線(xiàn)圖,結(jié)果如圖5所示。
由圖5能夠得知,在工作日,會(huì)員用戶(hù)的用車(chē)高峰出現(xiàn)在上下班時(shí)間,此外中午還有一個(gè)小高峰,猜測(cè)可能是外出吃午餐的人在用車(chē);而對(duì)臨時(shí)用戶(hù)起伏比較平緩,高峰期在17點(diǎn)左右。對(duì)于非工作日而言,租賃數(shù)量隨時(shí)間呈現(xiàn)為正態(tài)分布,14點(diǎn)左右為高峰,4點(diǎn)左右為低谷,且分布較為均勻。并且會(huì)員用戶(hù)的用車(chē)數(shù)量遠(yuǎn)超過(guò)臨時(shí)用戶(hù)。
4.2" 溫度對(duì)租賃數(shù)量的影響
使用Seaborn和Matplotlib庫(kù)來(lái)按溫度大小分組并計(jì)算平均租賃數(shù)量,然后將這些結(jié)果可視化為折線(xiàn)圖,結(jié)果如圖6所示。
由圖6可觀察到隨氣溫上升租車(chē)數(shù)量總體呈現(xiàn)上升趨勢(shì),但在氣溫超過(guò)35時(shí)開(kāi)始下降,在氣溫4度時(shí)達(dá)到最低點(diǎn)。
4.3" 濕度對(duì)租賃數(shù)量的影響
通過(guò)Pandas對(duì)共享單車(chē)數(shù)據(jù)進(jìn)行按濕度(humidity)分組,并計(jì)算每個(gè)濕度區(qū)間內(nèi)的casual、registered和count的平均租賃數(shù)量,生成折線(xiàn)圖,折線(xiàn)圖如圖7所示。
從圖7得出,在濕度20%左右租賃數(shù)量迅速達(dá)到高峰值,此后緩慢遞減。
4.4" 季節(jié)對(duì)出行人數(shù)的影響
使用Seaborn、Pandas和Matplotlib庫(kù)來(lái)按季節(jié)分組并計(jì)算平均租賃數(shù)量,然后將這些結(jié)果可視化為小提琴圖,結(jié)果如圖8所示。
圖8展示了不同季節(jié)租賃數(shù)量的分布情況,有效地顯示使用需求在秋季迎來(lái)高峰,而春季租賃數(shù)量最低。
4.5" 風(fēng)速對(duì)出行人數(shù)的影響
使用Seaborn和Matplotlib庫(kù)來(lái)按風(fēng)速大小分組并計(jì)算平均租賃數(shù)量,然后將這些結(jié)果可視化為折線(xiàn)圖[8]。具體代碼如下:
plt.plot(windspeed_rentals.index,windspeed_rentals['casual'],label='casual', color='black', linestyle='-')
plt.plot(windspeed_rentals.index,windspeed_rentals['registered'],label='registered',color='black', linestyle='--')
plt.plot(windspeed_rentals.index, windspeed_rentals['count'],color='black', linestyle=':', label='count')
plt.title('不同風(fēng)速下每小時(shí)最大租賃數(shù)量折線(xiàn)圖')
plt.xlabel('風(fēng)速(米/秒)')
plt.ylabel('最大租賃數(shù)量/人次')
plt.legend()
結(jié)果如圖9所示。
圖9展示了處于不同風(fēng)速條件下,各類(lèi)租賃的最大租賃數(shù)量的分布狀況。可以發(fā)現(xiàn)租賃數(shù)量與風(fēng)速呈負(fù)相關(guān),即風(fēng)速越大租賃數(shù)量越少,當(dāng)風(fēng)速超過(guò)30米/秒時(shí)明顯減少,然而在風(fēng)速約為40米/秒時(shí)卻出現(xiàn)了一次回升[9]。
4.6" 天氣情況對(duì)出行情況的影響
通過(guò)Pandas對(duì)共享單車(chē)數(shù)據(jù)按天氣(weather)分組,計(jì)算每種天氣條件下casual和registered的平均租賃數(shù)量,生成weather_df數(shù)據(jù)框。接著,使用Matplotlib繪制堆疊柱狀圖,結(jié)果如圖10所示。
由圖10可知在不同天氣條件下每小時(shí)發(fā)起的平均租賃數(shù)量,由圖10可以看出晴天少時(shí)使用人數(shù)最多,小雪小雨時(shí)使用人數(shù)最少。
4.7" 工作日對(duì)出行情況的影響
將日期分為周末和工作日兩個(gè)方面進(jìn)行對(duì)比探討,對(duì)比工作日和非工作日的自行車(chē)租賃數(shù)量,并通過(guò)柱狀圖和餅圖進(jìn)行可視化[10]。首先計(jì)算工作日和非工作日的平均租賃數(shù)量,然后繪制柱狀圖和餅圖,具體操作如下:
通過(guò)Pandas將共享單車(chē)數(shù)據(jù)依據(jù)工作日(workingday)進(jìn)行分組操作,并計(jì)算casual與registered的平均租賃數(shù)量,進(jìn)而生成workingday_df數(shù)據(jù)框。把工作日的數(shù)據(jù)存儲(chǔ)在workingday_df_1中,非工作日的數(shù)據(jù)存儲(chǔ)在workingday_df_0里。利用Matplotlib創(chuàng)建子圖繪制堆疊條形圖以展示工作日和非工作日的平均租賃數(shù)量,將這兩種情形下casual和registered的比例繪制出來(lái),結(jié)果如圖11所示。
從圖11中可知工作日會(huì)員用戶(hù)出行數(shù)量較多,臨時(shí)用戶(hù)出行數(shù)量較少。
5" 結(jié)" 論
用Python分析共享單車(chē)租賃交易數(shù)據(jù)集,把數(shù)據(jù)集中的不同屬性用圖展示出來(lái)并進(jìn)行簡(jiǎn)單剖析,會(huì)員常于工作日出行頻繁,而在節(jié)假日卻出行較少;臨時(shí)用戶(hù)恰與之相反。一季度,出行之人總體為數(shù)不多。租賃數(shù)量隨天氣等級(jí)攀升而漸次減少。小時(shí)數(shù)對(duì)租賃狀況影響昭然,會(huì)員出行現(xiàn)雙高峰之態(tài),非會(huì)員則呈正態(tài)分布之姿。溫度與濕度,對(duì)非會(huì)員影響頗深,于會(huì)員卻影響甚微。租賃數(shù)量隨風(fēng)速增大而逐步遞減。工作日,會(huì)員用戶(hù)出行數(shù)量可觀,臨時(shí)用戶(hù)則甚少;周末之際,會(huì)員用戶(hù)租賃數(shù)量下滑,臨時(shí)用戶(hù)租賃數(shù)量卻上揚(yáng)。
在對(duì)共享單車(chē)數(shù)據(jù)的分析中,Python充分展現(xiàn)出其在數(shù)據(jù)整理和分析領(lǐng)域的強(qiáng)大優(yōu)勢(shì)。通過(guò)對(duì)大量的共享單車(chē)數(shù)據(jù)進(jìn)行處理,Python可以快速地按照特定需求進(jìn)行分組、聚合等操作,如根據(jù)工作日與非工作日對(duì)數(shù)據(jù)分組分析。同時(shí),利用Python能夠從海量復(fù)雜的數(shù)據(jù)中提取關(guān)鍵信息,繪制出如不同特征下租賃數(shù)量變化的圖表,使人們對(duì)共享單車(chē)的使用情況有更全面的認(rèn)識(shí),切實(shí)適應(yīng)了大數(shù)據(jù)時(shí)代的要求,實(shí)用性遠(yuǎn)超其他編程語(yǔ)言。
參考文獻(xiàn):
[1] 郭鵬,林祥枝,黃藝,等.共享單車(chē):互聯(lián)網(wǎng)技術(shù)與公共服務(wù)中的協(xié)同治理 [J].公共管理學(xué)報(bào),2017,14(3):1-10+154.
[2] 錢(qián)蕾,周瑋騰,韓寶明.城市軌道交通運(yùn)營(yíng)突發(fā)事件數(shù)據(jù)可視化分析 [J].鐵道科學(xué)與工程學(xué)報(bào),2020,17(4):1025-1035.
[3] 康顥,沈瑤,王博文,等.基于Python的線(xiàn)性動(dòng)態(tài)電路可視化分析軟件設(shè)計(jì)與實(shí)現(xiàn) [J].實(shí)驗(yàn)室研究與探索,2022,41(2):116-120.
[4] 王越,陳國(guó)兵,李軍.基于數(shù)據(jù)挖掘的故障模式、影響及危害性分析改進(jìn)方法 [J].科學(xué)技術(shù)與工程,2021,21(24):10536-10542.
[5] 王彩玲,許欣黎.基于Python語(yǔ)言的計(jì)算機(jī)專(zhuān)業(yè)招聘信息的爬取及分析 [J].現(xiàn)代信息科技,2024,8(16):88-92+97.
[6] 王晨.基于Python爬蟲(chóng)的豆瓣TOP250電影數(shù)據(jù)分析與可視化研究 [J].現(xiàn)代信息科技,2024,8(16):93-97.
[7] 李天輝.基于python的數(shù)據(jù)分析可視化研究與實(shí)現(xiàn) [J].電子測(cè)試,2020(20):78-79.
[8] 趙志凡,鄧一哲,張思源,等.基于Python的城市天氣數(shù)據(jù)可視化分析 [J].軟件,2024,45(4):37-39.
[9] 傅哲,辛泓潤(rùn),余力,等.基于使用行為分析的共享單車(chē)管理優(yōu)化研究 [J].信息系統(tǒng)學(xué)報(bào),2018(2):81-94.
[10] 柳鍵,張晉莉.共享電單車(chē)投放策略的演化分析 [J].江西師范大學(xué)學(xué)報(bào):自然科學(xué)版,2023,47(5):506-512.
作者簡(jiǎn)介:徐豪(2005—),男,漢族,河南鶴壁人,本科在讀,研究方向:人工智能;劉婉月(1994—),女,漢族,河南鄭州人,高級(jí)工程師,碩士,研究方向:自然語(yǔ)言處理、機(jī)器翻譯、計(jì)算機(jī)視覺(jué);張自豪(1988—),男,漢族,河南商丘人,講師,碩士生導(dǎo)師,博士,研究方向:計(jì)算機(jī)視覺(jué)。