




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