版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
目錄
1引言1
1.1項目背景1
1.2開發(fā)環(huán)境與工具1
1.2.1Python簡介1
1.2.2Pandas簡介2
1.2.3pyecharts簡介2
2需求分析2
2.1可行性需求分析2
2.2采集目標(biāo)功能分析3
2.3關(guān)鍵技術(shù)分析3
2.3.1網(wǎng)絡(luò)爬蟲技術(shù)3
2.3.2文件存取技術(shù)3
2.3.3可視化技術(shù)3
3數(shù)據(jù)采集4
3.1采集頁面分析4
3.2數(shù)據(jù)解析策略5
3.3翻頁策略分析6
3.4多線程爬蟲策略8
3.5Main方法9
4數(shù)據(jù)清洗與處理11
4.1數(shù)據(jù)清洗的意義11
4.2數(shù)據(jù)清洗需求11
4.3數(shù)據(jù)清洗操作12
4.4數(shù)據(jù)清洗結(jié)果13
5數(shù)據(jù)統(tǒng)計與分析13
5.1數(shù)據(jù)分析13
5.2數(shù)據(jù)分析與展示14
I
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
5.2.1統(tǒng)計各個品牌的汽車數(shù)量和價格14
5.2.2分析行駛里程與價格的關(guān)系15
5.2.3統(tǒng)計燃油與驅(qū)動方式的數(shù)量15
5.2.4統(tǒng)計每年上牌的汽車的數(shù)量和價格17
5.3綜述18
6設(shè)計小結(jié)18
參考資料19
II
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
基于Python的澳康達二手車網(wǎng)數(shù)據(jù)采集與分析
1引言
二手車市場是一個龐大的市場,數(shù)據(jù)采集和分析對于了解市場動態(tài)、分析
市場趨勢和制定決策非常重要。本文選取了澳康達網(wǎng)站的二手車數(shù)據(jù)進行采集
和分析,旨在探索二手車市場的情況和趨勢。數(shù)據(jù)采集使用Python編寫爬蟲程
序,通過HTTP請求獲取澳康達網(wǎng)站的數(shù)據(jù),并將數(shù)據(jù)存儲在本地CSV文件中。
數(shù)據(jù)分析主要使用Pandas等Python數(shù)據(jù)處理庫進行數(shù)據(jù)清洗和分析,同時使
用pyecharts等可視化庫繪制圖表進行數(shù)據(jù)展示和分析。通過數(shù)據(jù)采集和分析,
我們可以了解二手車市場的整體情況和趨勢,比如不同品牌的銷量和平均售價、
不同上牌年份車輛的分布、不同車型的價格分布等。這些信息對于二手車市場
從業(yè)者和消費者都具有參考價值。
1.1項目背景
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,越來越多的消費者開始通過互聯(lián)網(wǎng)平臺購買二手
車。澳康達是中國領(lǐng)先的二手車電商平臺之一,為消費者提供高質(zhì)量的二手車
交易服務(wù)。在這個背景下,對于澳康達網(wǎng)站的二手車數(shù)據(jù)進行采集和分析可以
幫助消費者更好地了解二手車市場的行情和趨勢,為他們做出更明智的購車決
策提供參考。同時,對于澳康達來說,通過分析二手車市場數(shù)據(jù),他們可以更
好地了解市場需求和消費者需求的變化,并根據(jù)分析結(jié)果做出更好的戰(zhàn)略決策,
提高企業(yè)的市場競爭力。因此,對于澳康達網(wǎng)站的二手車數(shù)據(jù)進行采集和分析
具有重要意義。
1.2開發(fā)環(huán)境與工具
1.2.1Python簡介
Python提供了高效的高級數(shù)據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊獭ython
語法和動態(tài)類型,以及解釋型語言的本質(zhì),使它成為多數(shù)平臺上寫腳本和快速
開發(fā)應(yīng)用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用于
獨立的、大型項目的開發(fā)。
Python解釋器易于擴展,可以使用C語言或C++(或者其他可以通過C調(diào)
用的語言)擴展新的功能和數(shù)據(jù)類型。Python也可用于可定制化軟件中的擴展
1
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
程序語言。Python豐富的標(biāo)準(zhǔn)庫,提供了適用于各個主要系統(tǒng)平臺的源碼或機
器碼。
1.2.2Pandas簡介
pandas是基于NumPy的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。
Pandas納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所
需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你
很快就會發(fā)現(xiàn),它是使Python成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。
1.2.3pyecharts簡介
Pyecharts是一款將python與echarts結(jié)合的強大的數(shù)據(jù)可視化工具。使用pyecharts可
以生成獨立的網(wǎng)頁,也可以在flask,Django中集成使用。
echarts是百度開源的一個數(shù)據(jù)可視化JS庫,主要用于數(shù)據(jù)可視化。pyecharts是一個
用于生成Echarts圖表的類庫,實際上就是Echarts與Python的對接。
2需求分析
2.1可行性需求分析
在進行澳康達網(wǎng)站二手車數(shù)據(jù)采集與分析之前,需要進行可行性需求分析。
主要包括以下幾個方面:
數(shù)據(jù)獲取可行性:澳康達網(wǎng)站二手車數(shù)據(jù)是否可以被獲取,獲取的方式是
否合法。
數(shù)據(jù)存儲可行性:采集到的數(shù)據(jù)需要存儲到數(shù)據(jù)庫中,需要評估數(shù)據(jù)庫的
存儲容量和性能是否滿足需求。
數(shù)據(jù)清洗可行性:采集到的數(shù)據(jù)可能存在重復(fù)、缺失或錯誤等問題,需要
進行清洗和處理,評估數(shù)據(jù)清洗的難度和可行性。
數(shù)據(jù)分析可行性:分析二手車數(shù)據(jù)的目的是為了了解市場行情、車型價格、
銷售趨勢等信息,需要評估數(shù)據(jù)分析的可行性和可靠性。
技術(shù)可行性:進行數(shù)據(jù)采集和分析需要使用相應(yīng)的技術(shù)和工具,需要評估
技術(shù)的可行性和適用性,是否需要進行技術(shù)儲備和培訓(xùn)。
經(jīng)過可行性需求分析:我們可以初步確定澳康達網(wǎng)站二手車數(shù)據(jù)采集與分
析的可行性,并在此基礎(chǔ)上進行后續(xù)的技術(shù)方案和實施計劃的制定。
2
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
2.2采集目標(biāo)功能分析
澳康達網(wǎng)站二手車數(shù)據(jù)采集與分析的采集目標(biāo)功能分析如下:
采集二手車的基本信息:品牌、車系、上牌時間、里程、價格等信息。
采集車輛的詳細(xì)信息:車輛顏色、排量、變速箱、車型等詳細(xì)信息。
采集車輛圖片和描述信息。
對采集到的數(shù)據(jù)進行清洗和整合,使其符合分析要求。
將采集到的數(shù)據(jù)存儲在本地數(shù)據(jù)庫或云端數(shù)據(jù)庫中,方便后續(xù)數(shù)據(jù)處理和
分析。
實現(xiàn)數(shù)據(jù)可視化界面,對采集到的數(shù)據(jù)進行展示和分析,包括價格分布、
里程分布、品牌占比等分析。
通過以上采集目標(biāo)功能,我們可以獲取到全面且詳細(xì)的二手車信息,同時
也可以方便地進行數(shù)據(jù)分析和可視化,為后續(xù)的決策提供支持和參考。
2.3關(guān)鍵技術(shù)分析
2.3.1網(wǎng)絡(luò)爬蟲技術(shù)
網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機器人,在FOAF社區(qū)中間,更經(jīng)常的稱
為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者
腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。
2.3.2文件存取技術(shù)
JSON是一種輕量級的數(shù)據(jù)交換格式。歐洲計算機協(xié)會制定的js規(guī)范的一個
子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的
層次結(jié)構(gòu)使得JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易
于機器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
2.3.3可視化技術(shù)
可視化是利用計算機圖形學(xué)和圖像處理技術(shù),將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在
屏幕上顯示出來,再進行交互處理的理論、方法和技術(shù)。可視化是利用計算機
圖形學(xué)和圖像處理技術(shù),將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在屏幕上顯示出來,并進行
交互處理的理論、方法和技術(shù)。
3
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
3數(shù)據(jù)采集
3.1采集頁面分析
進入澳康達官網(wǎng),點擊頁面上方選項欄,選擇”我要買車”進入二手汽車搜
索結(jié)果頁,其中選擇欄中列舉了很多熱門品牌,價格等選項,為了能夠爬取全
量的數(shù)據(jù),這里選擇全部品牌和全部城市,如圖3-1所示:
圖3-1澳康達二手汽車
通過初步瀏覽汽車搜索結(jié)果頁,頁面中包含汽車的基本信息,比如:汽車名
稱、新舊、行駛里程、售價、原價、城市;這些字段都需要進行采集。如圖3-2
所示:
4
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖3-2汽車關(guān)鍵字段
通過瀏覽器自帶的開發(fā)者工具分析頁面的html文檔,可以看到大部分字段
在html都有顯示,如圖3-3所示:
圖3-3html分析
a標(biāo)簽中的href屬性代表該汽車的詳情頁url,進入詳情頁后對汽車的詳細(xì)
字段進行采集,如圖3-4所示:
圖3-4汽車詳情頁
在詳情頁中有汽車詳細(xì)字段的描述,如車輛顏色、驅(qū)動形式、座位數(shù)等。此
時已經(jīng)基本明確了頁面跳轉(zhuǎn)流程,首先請求搜索結(jié)果頁,獲取到每一頁中所有
的汽車詳情頁url,并對詳情頁url進行請求。將搜索結(jié)果頁和詳情頁采集到的
字段進行匯總,并使用json格式保存。
3.2數(shù)據(jù)解析策略
在前面的小結(jié)中已經(jīng)提到,汽車的有關(guān)字段都保存在html文檔中,使用
etree庫的xpath方法即可獲取到每個字段。編寫AkdSpider類,該類用于解析
并保存字段。該類包含以下三個方法:(詳細(xì)代碼參考AkdSpider.py)
clean方法,該方法用于清洗數(shù)據(jù),將文本中的空格和換行符等無用字符去
掉。它接受一個列表作為參數(shù),將列表中的元素連接起來,并通過replace方
法替換掉無用字符。最后返回處理后的字符串。如下圖3-5所示:
5
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
圖3-5字段中的無效字符
get_car_detail方法,該方法用于從汽車詳細(xì)頁面的HTML中提取車輛詳細(xì)
信息。它接受一個response對象作為參數(shù),這個對象是requests庫返回的HTTP
響應(yīng)對象。使用etree.HTML將HTML字符串轉(zhuǎn)換為可解析的HTML對象,然后通
過XPath表達式從HTML中提取數(shù)據(jù)。最后,將提取的數(shù)據(jù)存儲到一個字典對
象detail_dict中,并返回這個字典。
get_car_info方法,這個方法用于從汽車列表頁面的HTML中提取汽車的基
本信息和鏈接,然后調(diào)用get_car_detail方法獲取車輛的詳細(xì)信息,并將基本
信息和詳細(xì)信息合并到一個字典中,最后將這個字典存儲到JSON文件中。它接
受一個response對象作為參數(shù),這個對象是requests庫返回的HTTP響應(yīng)對象。
它首先使用etree.HTML將HTML字符串轉(zhuǎn)換為可解析的HTML對象,然后通過
XPath表達式從HTML中提取基本信息。接著,從每個汽車的鏈接中獲取汽車詳
細(xì)信息,并調(diào)用get_car_detail方法獲取詳細(xì)信息。最后,將基本信息和詳細(xì)
信息合并到一個字典中,并將這個字典存儲到JSON文件中。
3.3翻頁策略分析
為了能夠采集到全量數(shù)據(jù),還需要進行翻頁處理。前面已經(jīng)提到,每一頁中
有32條記錄,如果該頁面是最后一頁,那么該頁中最多只有32條記錄,大多
數(shù)情況下最后一頁中的記錄數(shù)都會小于32。根據(jù)這個規(guī)律可以判斷當(dāng)前頁是否
為最后一頁。
在每一頁的最下方有頁數(shù)的選擇欄,點擊對應(yīng)的數(shù)字可以跳轉(zhuǎn)到相應(yīng)的頁面,
跳轉(zhuǎn)之后可以觀察url參數(shù)的變化。如圖3-6所示:
圖3-6下一頁url
其中pg后的數(shù)字代表當(dāng)前的頁數(shù),改變該參數(shù)即可輕松的構(gòu)造出下一頁的
url,然后再根據(jù)最后一頁的判定方式即可結(jié)束翻頁。
在工具類Helper中實現(xiàn)翻頁,代碼如下所示:
classHelper:
queue=Queue()
6
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
@staticmethod
defrequest_car_url(url:str):
headers={
"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36
(KHTML,likeGecko)Chrome/Safari/537.36"
}
response=requests.get(url,headers=headers)
returnresponse
@staticmethod
defstorage_res(response):
cur_url=response.url
Helper.queue.put(response)
re_li=re.findall('pg(\d+)',cur_url)
next_page=cur_page=int(re_li[0]ifre_lielse0)
print(f"保存第{cur_page}頁response對象")
html=etree.HTML(response.text)
field_list=html.xpath('//div[@class="CarList_main"]/a')
print(cur_url)
print(len(field_list))
iffield_list:
next_page=next_page+1
next_url=re.sub('pg\d+','pg'+str(next_page),cur_url)
Helper.storage_res(Helper.request_car_url(next_url))
Helper類的靜態(tài)成員queue是一個Queue對象,表示一個隊列。這個隊列
被用于存儲從網(wǎng)站中抓取到的HTML響應(yīng)對象,以便后續(xù)的數(shù)據(jù)采集線程可以從
隊列中獲取響應(yīng)對象進行數(shù)據(jù)處理。
Helper類中的第一個靜態(tài)方法request_car_url接收一個URL字符串作為
參數(shù),使用Python的requests庫向該URL發(fā)送HTTP請求,并返回響應(yīng)對
象response。這里使用了一個user-agen來模擬瀏覽器訪問,避免被服務(wù)器拒
絕訪問。
Helper類中的第二個靜態(tài)方法storage_res接收一個響應(yīng)對象response作
7
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
為參數(shù)。它首先使用XPath解析器etree將響應(yīng)對象的HTML文本解析成一個
Element對象html,然后使用XPath表達式獲取HTML中的車輛信息列表
field_list,并將其打印出來。如果列表非空,則解析出下一頁的URL,并遞歸
調(diào)用Helper類的request_car_url方法,將下一頁的響應(yīng)對象存入隊列queue
中,并繼續(xù)遞歸調(diào)用storage_res方法。這樣,就可以遞歸地獲取所有頁面的
響應(yīng)對象并存入隊列中。
3.4多線程爬蟲策略
由于該網(wǎng)站采集頁面較多,為了達到最高的數(shù)據(jù)采集效率,考慮使用多線程
爬蟲策略。在主線程中進行翻頁處理,并將搜索結(jié)果頁的response對象保存到
隊列中,翻頁處理完畢之后,再開啟多個子線程,并行處理每一頁response。
定義數(shù)據(jù)采集線程類CrawlerThread,繼承Thread類。詳細(xì)代碼如下所示:
#數(shù)據(jù)采集線程
classCrawlerThread(threading.Thread):
def__init__(self,thread_id,response_list,akdSpider:AkdSpider):
threading.Thread.__init__(self)
self.thread_id=thread_id
self.response_list=response_list
self.akdSpider=akdSpider
defrun(self):
whilenotself.response_list.empty():
try:
response=self.response_list.get()
exceptIndexError:
break
else:
self.akdSpider.get_car_info(response)
采集線程中包含一個response_list隊列,主線程負(fù)責(zé)將待采集的URL加入
到該隊列中。采集線程使用while循環(huán),不斷從response_list隊列中獲取URL
并進行采集。如果隊列為空,則該線程退出。在獲取到URL后,采集線程調(diào)用
爬蟲類中的get_car_info方法,將response作為參數(shù)傳入,獲取并保存數(shù)據(jù)。
8
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
由于線程之間共享response_list隊列,需要使用線程安全的隊列,以避免多
個線程同時操作隊列引起的異常。
該多線程爬蟲使用Python的threading庫實現(xiàn)。在創(chuàng)建采集線程時,傳入
線程ID、response_list隊列和爬蟲類實例作為參數(shù),并重寫run方法。在run
方法中,調(diào)用get_car_info方法進行數(shù)據(jù)采集。
使用多線程可以提高爬蟲的效率,因為可以同時采集多個URL的數(shù)據(jù),而不
是一個一個地進行采集。同時,由于采集和解析是分開進行的,所以可以避免
解析過程阻塞采集過程的問題。
最后,整個程序的控制流程可以在__main__函數(shù)中找到。這個函數(shù)首先調(diào)
用Helper類的request_car_url方法獲取第一頁的響應(yīng)對象,并將其傳入
Helper類的storage_res方法中。在storage_res方法中,遞歸地調(diào)用
request_car_url方法獲取其他頁面的響應(yīng)對象,并將它們存入隊列中。在所有
頁面的響應(yīng)對象都被存入隊列后,__main__函數(shù)創(chuàng)建多個數(shù)據(jù)采集線程并啟動
它們。這些線程從隊列中獲取響應(yīng)對象,并調(diào)用akdSpider對象的get_car_info
方法進行數(shù)據(jù)處理。如下圖3-7所示:
圖3-7保存response對象
3.5Main方法
在main方法編寫相關(guān)代碼啟動多線程爬蟲。如下所示:
if__name__=='__main__':
spider=AkdSpider()
queue=Helper.queue
start_response=Helper.request_car_url('/carlist/ar0pg1/')
Helper.storage_res(start_response)
num_crawler_threads=8
crawler_threads=[]
#啟動數(shù)據(jù)采集線程
foriinrange(num_crawler_threads):
9
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
print(f"啟動線程{str(i)}")
thread=CrawlerThread(i,queue,spider)
crawler_threads.append(thread)
thread.start()
#等待所有數(shù)據(jù)采集線程完成
forthreadincrawler_threads:
thread.join()
程序開始時,創(chuàng)建了spider的對象,該對象的類是AkdSpider。接著,從
Helper類中獲取queue的隊列,并請求了start_response的網(wǎng)頁響應(yīng),該響應(yīng)
是通過Helper.request_car_url方法獲取的,并將響應(yīng)存儲在Helper類中。
然后,定義num_crawler_threads變量,該變量表示要啟動的線程數(shù)量。之后,
啟動了多個CrawlerThread線程來執(zhí)行數(shù)據(jù)采集操作,并將它們存儲在
crawler_threads列表中。最后,等待所有線程完成執(zhí)行。如圖3-8所示
圖3-8啟動子線程
程序運行結(jié)束之后會在當(dāng)前文件夾生成akdData.json文件,文件內(nèi)容如圖
3-9所示:
圖3-9數(shù)據(jù)采集結(jié)果展示
10
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
4數(shù)據(jù)清洗與處理
4.1數(shù)據(jù)清洗的意義
數(shù)據(jù)采集下來之后還需要對數(shù)據(jù)進行清洗和處理,比如date_and_mileage
字段,從“2017年06月上牌/10876公里“提取出上牌時間和行駛里程數(shù);
new_car_price字段,從”40.00萬為您節(jié)省8.70萬“提取出新車價和節(jié)省金
額;將價格字段轉(zhuǎn)換成浮點類型等。數(shù)據(jù)清洗是數(shù)據(jù)預(yù)處理的重要步驟之一,
數(shù)據(jù)清洗可以提高數(shù)據(jù)質(zhì)量,減少數(shù)據(jù)分析中的誤差和偏差,增加數(shù)據(jù)可靠性
和有效性,從而提高數(shù)據(jù)分析和決策的準(zhǔn)確性和可信度。此外,數(shù)據(jù)清洗也可
以節(jié)省數(shù)據(jù)存儲空間,加速數(shù)據(jù)分析和處理的速度。
4.2數(shù)據(jù)清洗需求
爬蟲采集的數(shù)據(jù)以json格式進行保存,如下圖所示:
圖4-1json數(shù)據(jù)格式
1)使用pandas讀取文件
2)由于photo字段沒有數(shù)據(jù)分析價值,將其刪除
3)從date_and_mileage字段和new_car_price字段中提取出有效字段,并剔
除掉單位字符,最后刪除原有字段。
4)剔除price字段中的單位。
5)從name字段中提取出汽車的上市時間。
11
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
4.3數(shù)據(jù)清洗操作
使用python讀取akdData.json文件,從中提取出便于分析的字段,比如品
牌、上牌時間、售價、新車價、城市等。如下圖所示:
圖4-2讀取akdData.json文件
使用pandas從date_and_mileage字段和new_car_price字段中提取出有
效字段。如下圖所示:
圖4-3切分復(fù)合字段
將date_and_mileage列按照"日期上牌/公里數(shù)"的格式進行切分,并將新
的兩列分別命名為date和mileage。切分時使用了正則表達式(.+)上牌/(.+)
公里,其中.表示匹配任意字符,+表示匹配前面的字符一次或多次,括號內(nèi)
的表達式表示將匹配到的內(nèi)容提取出來。new_car_price列也按照相同的方式進
行處理。
為了便于數(shù)據(jù)分析,將price字段中的”萬”字刪除,如下圖所示:
圖4-4處理price字段
12
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
從name字段中提取出汽車上市時間,如下圖所示:
圖4-5從name字段中提取上市時間
4.4數(shù)據(jù)清洗結(jié)果
通過數(shù)據(jù)清洗使得數(shù)據(jù)更加準(zhǔn)確、一致、完整、可靠、可用,從而提高數(shù)據(jù)
的質(zhì)量和價值。清洗之后的數(shù)據(jù)結(jié)果如下所示:
圖4-6數(shù)據(jù)清洗結(jié)果
后續(xù)可以直接使用pandas對數(shù)據(jù)進行統(tǒng)計和分析。Pandas提供了強大的數(shù)
據(jù)結(jié)構(gòu),如Series和DataFrame,以及豐富的數(shù)據(jù)操作和轉(zhuǎn)換函數(shù)。為數(shù)據(jù)分
析提供了強有力的支持。
5數(shù)據(jù)統(tǒng)計與分析
5.1數(shù)據(jù)分析
二手汽車數(shù)據(jù)是包含了各種汽車信息的數(shù)據(jù),例如品牌、型號、年份、里
程、價格等等。利用pandas對二手汽車數(shù)據(jù)進行數(shù)據(jù)分析,可以發(fā)現(xiàn)很多有趣
的信息。
首先,我們可以通過對二手汽車價格的分析,發(fā)現(xiàn)二手汽車價格的分布情
況以及各個品牌、排量的平均價格。此外,我們還可以比較不同品牌、排量之
間的價格差異以及價格與年份、里程等因素之間的關(guān)系。
其次,我們還可以通過對二手汽車?yán)锍痰姆治?,了解不同品牌、型號的?/p>
均里程以及不同年份、價格區(qū)間的車輛平均里程等等。此外,我們還可以通過
13
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
繪制里程和價格之間的散點圖,發(fā)現(xiàn)二手車價格和里程之間的關(guān)系。
最后,我們還可以通過對二手汽車的品牌、型號、車齡、里程等信息進行
匯總統(tǒng)計,發(fā)現(xiàn)二手汽車市場上最受歡迎的品牌、型號、車齡等等。這些信息
可以對二手汽車買賣市場的發(fā)展趨勢進行分析,并對二手車市場上的交易價格
提供參考。
5.2數(shù)據(jù)分析與展示
5.2.1統(tǒng)計各個品牌的汽車數(shù)量和價格
在pandas中,首先使用pd.to_numeric()函數(shù)將data中price列轉(zhuǎn)換為浮
點數(shù)類型,同時通過errors='coerce'參數(shù)將無法轉(zhuǎn)換的值替換為NaN。然后使
用了dropna()函數(shù)刪除price列中包含NaN的行。最后,使用groupby()函數(shù)
對Brand列進行分組,統(tǒng)計每個品牌的汽車數(shù)量和價格的平均值,其中agg()函
數(shù)用于對每個分組進行聚合操作。{'Brand':'count','price':'mean'}指定
了需要聚合的列及聚合方式,其中'Brand':'count'表示統(tǒng)計每個品牌的汽車數(shù)
量,'price':'mean'表示計算每個品牌的汽車價格的平均值。最終得到的結(jié)果
是一個DataFrame,包含兩列:Brand和price,其中Brand列為品牌名,price
列為對應(yīng)品牌的汽車價格平均值。
將品牌數(shù)量和平均價格傳入pyecharts中bar方法中繪制柱狀圖,如下圖
5-1所示:
圖5-1統(tǒng)計各個品牌的汽車數(shù)量和價格
14
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
保時捷、奔馳、寶馬、雷克薩斯等豪華車品牌的二手車均價較高,分別為
73.78、45.55、39.36、47.05萬元。勞斯萊斯、蘭博基尼等豪華車品牌的二手
車均價更高,但是數(shù)量較少。豐田品牌的二手車數(shù)量最多,達到32輛,但是均
價并不高,為48.16萬元。有一些品牌的二手車數(shù)量較少,且均價較高,如阿
斯頓馬丁、法拉利等。
據(jù)此,購買二手車時應(yīng)該根據(jù)自己的需求和經(jīng)濟實力進行選擇。如果追求豪
華車品牌,應(yīng)該選擇保時捷、奔馳、寶馬、雷克薩斯等品牌,但需要承受較高
的價格。如果追求性價比,可以考慮豐田等品牌的二手車。
5.2.2分析行駛里程與價格的關(guān)系
完成該需求首先需要使用to_numeric方法將行駛里程數(shù)和價格轉(zhuǎn)換成數(shù)值
類型,再利用sort_values方法對價格升序排序,將價格作為橫坐標(biāo),將行駛
里程數(shù)作為縱坐標(biāo),再通過pyecharts中的Scatter方法繪制散點圖。如下圖
5-2所示:
圖5-2分析行駛里程與價格的關(guān)系
價格在7萬元到23萬元之前的車型的行駛里程都比較長,也說明性價比的
車型多用于代步和出行;25萬元以上的車型行駛里程數(shù)在3萬公里以下,也說
明了豪華車型的使用頻率較少。在考慮購買二手車時可以對照里程數(shù)與價格的
關(guān)系圖,從而購買最適合自己的二手車。
5.2.3統(tǒng)計燃油與驅(qū)動方式的數(shù)量
按燃油類型和驅(qū)動方式分組,統(tǒng)計數(shù)量和平均價格,結(jié)果保存為兩個pandas
15
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
DataFrame對象(ret1和ret2)。將結(jié)果轉(zhuǎn)換為pyecharts所需的數(shù)據(jù)格式,
包括餅圖的標(biāo)簽和數(shù)據(jù)。利用pyecharts的Pie類繪制兩個餅圖,并分別保存
為html文件。
代碼的執(zhí)行過程中,利用pandas庫的groupby方法按燃油類型和驅(qū)動方式
對數(shù)據(jù)進行分組,再用agg方法對分組后的數(shù)據(jù)進行聚合操作,統(tǒng)計每組的數(shù)
量和平均價格。然后利用pyecharts庫的Pie類繪制餅圖,并分別設(shè)置了標(biāo)題
和標(biāo)簽的樣式,最后分別保存為html文件。如下圖5-3和5-4所示
圖5-3驅(qū)動方式分布
圖5-4燃油類型分布
16
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
從驅(qū)動方式上看,4驅(qū)驅(qū)動形式的車型數(shù)量最多,價格也最高,為61.66萬
元;后驅(qū)驅(qū)動形式的車型數(shù)量位于中間,價格也較高,為58.38萬元;前驅(qū)驅(qū)
動形式的車型數(shù)量最少,價格也最低,為24.95萬元;
從燃油類型上看,汽油是最為常見的能源類型,有著高達793個數(shù)據(jù)點,平
均價格為55.44。其次是(汽油)48V輕混系統(tǒng)和插電式(汽油)混合動力,分
別擁有69和31個數(shù)據(jù)點,平均價格分別為70.10和39.55。值得注意的是,雖
然插電式(汽油)混合動力只有31個數(shù)據(jù)點,但其平均價格仍然比汽油低很多,
表明其有著相對較高的性價比。柴油的數(shù)據(jù)點最少,僅有1個,而平均價格為
33.80,相對來說價格較低。
5.2.4統(tǒng)計每年上牌的汽車的數(shù)量和價格
按照年份分組,統(tǒng)計數(shù)量和平均價格,并將結(jié)果按照年份升序排序。同樣的,
需要對價格字段轉(zhuǎn)換成數(shù)值類型,也需要對年份字段進行統(tǒng)一格式化處理。最
后,使用Pyecharts繪制折線圖,展示上牌時間的分布情況。圖中包含了數(shù)量
和平均價格兩個指標(biāo),橫軸為年份,縱軸為數(shù)量和平均價格。折線圖中間的兩
條橫線代表數(shù)量和價格的平均數(shù)。如下圖所示:
圖5-5統(tǒng)計每年上牌的汽車數(shù)量和價格
根據(jù)上牌年份劃分,2019年的車型數(shù)量最多,有144輛,平均售價也相對
較高,為68.30萬元。從2014年到2018年,車型數(shù)量有所增加,平均售價也
有所波動,但總體趨勢呈現(xiàn)穩(wěn)定的上漲。2020年和2021年的車型數(shù)量最多,但
17
湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計
平均售價相對較低,分別為56.34萬元和52.30萬元。
5.3綜述
從“品牌”分析報告可以看出,價格排名前三的品牌依次為奧迪、寶馬和
奔馳,它們的平均價格分別為56.28萬元、57.75萬元和63.63萬元。此外,在
品牌分布中,國產(chǎn)品牌數(shù)量較多,而豪華進口品牌數(shù)量較少。
從“能源類型”分析報告可以看出,插電式(汽油)混合動力和柴油車的
平均價格較低,分別為39.55萬元和33.80萬元;而(汽油)48V輕混系統(tǒng)和
(汽油)輕混系統(tǒng)的平均價格較高,分別為70.10萬元和56.75萬元。
從“驅(qū)動形式”分析報告可以看出,四驅(qū)車的平均價格最高,為61.66萬
元,后驅(qū)車的平均價格為58.38萬元,前驅(qū)車的平均價格最低,為24.95萬元。
從“上牌年份”分析報告可以看出,從
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版家用空調(diào)銷售安裝與綠色環(huán)保認(rèn)證合同3篇
- 2025年度海洋工程建設(shè)項目施工合同管理細(xì)則3篇
- 2024年電子商務(wù)平臺數(shù)據(jù)采集合作協(xié)議3篇
- 2025至2030年中國自行式鋁合金升降機行業(yè)投資前景及策略咨詢研究報告
- 2024年版權(quán)許可使用合同補充協(xié)議
- 經(jīng)濟金融系統(tǒng)課程設(shè)計
- 2025至2030年中國電器鎖鎖芯行業(yè)投資前景及策略咨詢研究報告
- 懸疑小說的課程設(shè)計原則
- 2025版礦山勘探施工資源回收與綜合利用合同3篇
- 2025至2030年中國摩托車油箱油漆烘干線行業(yè)投資前景及策略咨詢研究報告
- 2024年時事政治試題【有答案】
- 全套教學(xué)課件《工程倫理學(xué)》
- 人音版六年級上冊全冊音樂教案(新教材)
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識
- 機械原理課程設(shè)計鎖梁自動成型機床切削機構(gòu)
- MT 285-1992縫管錨桿
- 四川省煤礦探放水基準(zhǔn)線“兩把鎖”管理規(guī)定
- CRAC無線電技術(shù)觀摩交流大會業(yè)余無線電應(yīng)急通信演練基本規(guī)則
- 消防安全重點單位檔案(參考)
- 35KV降壓變電所一次系統(tǒng)電氣設(shè)計(可編輯)
- TL494組成的200W逆變器電路圖
評論
0/150
提交評論