手機市場銷售數據分析報告
手機市場銷售數據分析報告
作者:吳倩華Jonathan
分析數據來源:淘寶網
文章可以轉載,但必須註明作者和出處。
項目背景
從今年過完春節回到深圳以後,就開始學習數據分析的課程,到現在持續學了3個月,累計投入了100多個小時,也算學了不少內容,接下來打算著手開始投簡歷找數據分析的工作了。在這之前,要花點時間把自己學習的知識複習回顧一遍,也要做一些實戰項目多多練習,以增加對數據分析崗位知識的熟練度。本項目計劃主要用於複習Tiger老師數據分析課程的知識以及《用python 進行數據分析》的相關的知識,主要包括 numpy, pandas 和 matplotlib 這幾個庫的使用。
項目簡介
本項目主要利用爬蟲爬取淘寶商城手機這一產品的銷售數據信息,以此為數據分析的基礎,然後進行一些手機銷售市場的探索和分析。
數據來源和數據集
本項目所使用的數據集全部來自淘寶網,是通過Python編寫代碼,調用requests庫來爬取採集的。利用python語言編寫代碼,調用requests庫,是網路爬蟲比較簡單的入門。
之所以選擇淘寶網作為本項目的數據來源,主要是因為相對於其他網購平台,淘寶網上的手機銷售數據信息易於爬取,且爬取的結果數據更完整、整潔,極少存在信息的缺漏,並且幾乎所有展現出來的信息都是非常規範化的,極大的減少了前期數據預處理(數據清理和數據整理)的工作量。
本次爬取信息的時候,主要獲得了以下信息:
手機銷售價格price、手機品牌brand、手機品牌及型號title、月銷量month_sales、每款手機淘寶網的售賣商家數num、手機主打功能亮點特點tag_info。
目 的
主要是希望通過淘寶商城實際的手機銷售數據來分析各類手機品牌目前在市場的一個銷售現狀。具體來說,主要針對以下幾個問題:
1、手機市場的價格分布;2、手機市場的月銷量分布;3、不同品牌手機總體的月銷量數據是怎麼樣的(從消費者角度出發考慮);4、熱賣手機品牌(從售賣商家數的角度出發考慮);5、手機銷售市場主打功能賣點亮點分析(詞頻分析)。
技術和工具
本項目主要分為兩大部分,第一部分是數據爬取,採用的是使用python編寫代碼,調用requests庫,使用正則表達式進行數據匹配和信息提取。第二部分是數據清洗、數據分析,以 python 編程語言為基礎,以及最後本報告的生成。
數據分析部分主要使用pandas作為數據整理和統計分析的工具,matplotlib用於圖形的可視化。在進行技能需求分析的時候,使用了jieba作為分詞工具包,並使用wordcloud包製作詞雲。
閑話不多說,下面切入正題。
第一部分:淘寶商城手機銷售數據採集
爬蟲代碼
#PhoneTaobaoData.py#淘寶商城手機數據的採集爬蟲codeimport requestsimport reimport numpy as npdef getHTMLText(url): try: r = requests.get(url, timeout=50) r.status_code r.encoding = r.apparent_encoding return r.text except: return "" def parsePage(ilt, html): try: plt = re.findall(r""price":"[d.]*"", html ) #售價 tlt = re.findall(r""title":".*?"", html ) #品牌型號 sal = re.findall(r""month_sales":"[d.]*"", html ) #月銷量 num = re.findall(r""num":"[d.]*"", html ) #某一手機型號售賣商家數 taginfo = re.findall(r""tag_info":[.*?]", html ) #手機賣點亮點 for i in range(len(plt)): price = eval(plt[i].split(":")[1]) title = eval(tlt[i].split(":")[1]) sales = eval(sal[i].split(":")[1]) numbers = eval(num[i].split(":")[1]) points = taginfo[i].split("[")[1] ilt.append([price , title , sales , numbers , points]) except: print("")def printGoodsList(ilt): tplt = "{:4} {:8} {:24} {:8} {:8} {:16}" print(tplt.format("number", "price", "title" , "month_sales" , "num" , "tag_info")) #number:序號 #price:價格 #title:品牌及型號 #month_sales:月銷量 #num:該型號手機的淘寶售賣商家數(同一款手機有多少個淘寶商家在售賣) #tag_info:手機賣點(該款新手機有什麼特點) count = 0 for g in ilt: count = count + 1 print(tplt.format(count, g[0], g[1],g[2] , g[3] , g[4])) def main(): goods = "手機" depth = 100 start_url = "https://s.taobao.com/search?q=" + goods infoList = [] for i in range(depth): try: url = start_url + "&s=" + str(48*i) html = getHTMLText(url) parsePage(infoList, html) np.save("E:/PhoneTaobaoData.npy" , infoList) except: continue printGoodsList(infoList) main()
爬取成功後的代碼截圖
代碼爬取開始:
代碼爬取結束:
一共爬取了淘寶商城100頁數據,共3542條手機銷售數據記錄。
第二部分:數據分析
淘寶商城手機數據清洗(數據預處理)
數據缺失值處理
import numpy as npimport pandas as pdfrom pandas import Series , DataFrameimport matplotlib.pyplot as plt#導入數據,數據清洗data = pd.read_csv("E:/PhoneProject/PhoneTaobaoData.csv" , names = ["number","price","brand","title","month_sales","num","tag_info"]encoding ="gbk")print(data.info())>>> <class "pandas.core.frame.DataFrame">RangeIndex: 3542 entries, 0 to 3541Data columns (total 7 columns):number 3542 non-null int64price 3542 non-null int64brand 3542 non-null objecttitle 3542 non-null objectmonth_sales 3542 non-null int64num 3542 non-null int64tag_info 3542 non-null objectdtypes: int64(4), object(3)memory usage: 193.8+ KBNone>>>
可以觀察到,爬取的數據整體非常的不錯。經過初步清理後,數據集中有效變數為6個,數據記錄3542條。各欄位的數據完整度非常好,沒有任何的缺失值。這對於後面的分析來說是個大大的好消息。
異常值處理
匯總統計
>>> Phone_data.describe() number price month_sales numcount 3542.000000 3542.000000 3542.000000 3542.000000mean 1770.500000 1133.550254 733.944382 18.547431std 1022.631654 21858.312868 5218.825616 59.737989min 0.000000 0.000000 0.000000 1.00000025% 885.250000 119.000000 1.000000 1.00000050% 1770.500000 239.000000 9.000000 3.00000075% 2655.750000 534.250000 93.000000 11.000000max 3541.000000 999099.000000 116869.000000 1020.000000
#查找異常值
#畫散點圖(橫軸:價格,縱軸:月銷量)
fig = plt.figure()ax = fig.add_subplot(1,1,1)prices = PhoneData["price"] #價格sales = PhoneData["month_sales"] #月銷量ax.set_title("價格-月銷量 散點圖")ax.set_xlabel("Price")ax.set_ylabel("month_Sales")plt.plot(prices , sales , "o" )plt.show()
從上圖價格-月銷量散點圖可以看到,不同型號的手機的月銷量主要集中在0-6萬部之間,手機銷售的最高價格在100萬元左右,手機月銷量最高的接近12萬。從圖中可以看出,顯然80萬元/部以及100萬元/部這兩條數據屬於異常數據。接下來對這些異常數據進行處理。
#處理異常數據
#把價格>10000,或者價格<100元的數據都處理掉line = len(PhoneData)for i in range(1,line): if(PhoneData["price"][i] >10000 or PhoneData["price"][i] <100 ): PhoneData["price"][i] = 1130 #¥1130元是淘寶網上所有手機的均價 #if(data["month_sales"][i]>1000): #data["month_sales"][i] = 712 #712是淘寶網上所有手機的平均月銷量Clean_PhoneData = PhoneDataprint(Clean_PhoneData)fig = plt.figure()ax0 = fig.add_subplot(1,1,1)prices = PhoneData["price"] #價格sales = PhoneData["month_sales"] #月銷量#ax0.set_title("Preconditioning price-month_sales ScatterDiagram")ax0.set_title("異常數據處理 價格-月銷量 散點圖")ax0.set_xlabel("Price")ax0.set_ylabel("month_Sales")plt.plot ( prices , sales , "o" )plt.show()
把異常價格>10000,或者價格<100元的數據都處理掉後得到的價格-月銷量 散點圖。
通過對價格>1萬元以及價格<100元的價格異常點的數據處理後得到的數據比較清晰明了。從上圖可以看到,超過80%的手機銷售價格主要集中在4000元以下,月銷量集中在10000台以下。
數據分布分析
#數據分布分析"""求最值計算極差組距:極差/組數繪製直方圖"""#求最大、最小值pricemax=Clean_PhoneData["price"].max()pricemin = Clean_PhoneData["price"].min()month_salesmax=Clean_PhoneData["month_sales"].max()month_salesmin=Clean_PhoneData["month_sales"].min()#極差pricerg=pricemax-priceminmonth_salesrg=month_salesmax-month_salesmin#組距pricedst=pricerg/30month_salesdst=month_salesrg/35#繪製價格直方圖#npy.arrange(最小,最大,組距)pricesty=np.arange(pricemin,pricemax,pricedst)plt.hist( Clean_PhoneData["price"] , pricesty )plt.title("價格直方圖")plt.show()#繪製月銷量數直方圖month_salessty=np.arange(month_salesmin,month_salesmax,month_salesdst)plt.hist(Clean_PhoneData["month_sales"],month_salessty)plt.title("月銷量直方圖")plt.show()
數據可視化
從上麵價格直方圖以及月銷量直方圖可以看到,從總體範圍上來看,價格直方圖以及月銷量直方圖均服從長尾分布模型。
哪些品牌的手機最受商家追捧?
import numpy as npimport pandas as pdfrom pandas import Series , DataFrameimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfrom pylab import *mpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = Falsedata = pd.read_csv("E:/PhoneProject/PhoneTaobaoData.csv" , names = ["number","price","brand","title","month_sales","num","tag_info"] , index_col = "number" , encoding ="gbk")datagrouped = data.groupby(["brand"])["num"].sum().sort_values(ascending = False )datagrouped[:10].plot(kind = "barh" , title = "哪些品牌的手機最受商家追捧青睞")plt.show()
從上圖我們可以看到,淘寶商家最喜歡賣的手機品牌依次是:華為、蘋果、小米排前三,魅族、三星、中興、諾基亞、OPPO、vivo以及酷派。諾基亞排在了第7位,這是讓我感到意外的。
哪些品牌的手機最受消費者青睞,進入月銷量排行榜的前10名?
import numpy as npimport pandas as pdfrom pandas import Series , DataFrameimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfrom pylab import *mpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = Falsedata = pd.read_csv("E:/PhoneProject/PhoneTaobaoData.csv" , names = ["number","price","brand","title","month_sales","num","tag_info"] , index_col = "number" , encoding ="gbk")datagrouped = data.groupby(["brand"])["month_sales"].sum().sort_values(ascending = False )datagrouped[:10].plot(kind = "barh" , title = "月銷量排行榜前10名手機品牌柱狀圖")plt.show()
從上圖月銷量排行榜前10名的手機品牌柱狀圖可以看到,月銷量排名前三的是小米、華為、蘋果,其後依次是:魅族、中興、三星、vivo、OPPO、尼凱恩、紐曼。現在使用三星品牌手機的消費者仍然很多,月銷量第9、第10的尼凱恩、紐曼讓我感到了意外。這兩款手機品牌均和阿里有關係,都搭載了阿里巴巴的操作系統的智能手機產品。
哪個品牌的手機最喜歡頻出新款,款式最多?
import numpy as npimport pandas as pdfrom pandas import Series , DataFrameimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfrom pylab import *mpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = Falsedata = pd.read_csv("E:/PhoneProject/PhoneTaobaoData.csv" , names = ["number","price","brand","title","month_sales","num","tag_info"] , index_col = "number" , encoding ="gbk")datagrouped = data.groupby(["brand"])["brand"].count().sort_values(ascending = False )datagrouped[:10].plot(kind = "barh" , title = "手機型號數量排行榜前10名手機品牌柱狀圖")plt.show()
從這個圖的數據我們可以看到,諾基亞居然排在了最喜歡頻出新款的排行榜第1名,手機款式數量最多,超過300款,這數據實在讓我懷疑。同時,我們也可以看到,三星、中興、酷派、聯想的月銷量雖然不居前三,但是這幾個品牌的手機賣的款式特別多。
手機生產商新款手機主打的手機功能是哪些?
import jiebafrom wordcloud import WordCloudfrom matplotlib import pyplot as plttext = open("E:/PhoneProject/tag_info.txt" , "r").read()wcd = WordCloud(font_path = "C:/Windows/Fonts/msyh.ttf",width = 800 , height = 400 ,max_font_size=120 , max_words = 85, background_color = "white").generate(text)fig = plt.figure(figsize = ( 8 , 4 ))plt.imshow(wcd.recolor( random_state = 3))plt.axis("off")plt.show()
詞雲關鍵詞顯示:
通過詞雲顯示,淘寶手機售賣最喜歡主打的手機功能依次是雙卡雙待、超長待機、觸屏操作、高清大屏、學生機、老人機等關鍵詞。
分析結論
通過上面的分析,我們可以得到的結論有這些:
1、淘寶商城超過80%的手機銷售價格price主要集中在4000元以下,月銷量month_sales集中在10000台以下。
2、華為、小米以及蘋果三個手機品牌不管是從淘寶商家的角度還是從通過月銷量看消費者購買數量的角度,這三個品牌的手機都博得了商家和消費者的喜好榜的前3名。3、從月銷量排行榜前10名的直方圖我們可以看到,尼凱恩、紐曼兩個黑馬品牌分別排在月銷量的第9和第10名,且這兩個品牌都和阿里有關係。4、諾基亞居然是售賣手機款式最多的品牌,三星、中興、酷派分別排在第二、三四名,其中三星和中興的月銷量還不錯,但是酷派雖然銷售的手機款式很多,但是整體銷量不是特別的好。5、雙卡雙待、超長待機、觸屏操作、高清大屏、學生機、老人機是淘寶商家最喜歡主打的手機功能賣點亮點。
思考和總結(商業洞見)
淘寶商家端:假如我有朋友想在淘寶上開一個手機店,為了保證能有一個不錯的銷量,用數據說話,我會給到他以下幾點個人建議:
1、推薦的品牌有:小米、華為、蘋果。除這三個之外,魅族也是一個不錯的可以選擇的品牌。2、價格方面,國產手機品牌,售價在0-4000元之間的款式最為合適。3、主打功能除了日常所常見的雙卡雙待、超長待機、觸屏操作、高清大屏、學生機、老人機等等功能之外,可以打造或者包裝一些新的亮點或賣點,更有個性和特性。
特別說明
本次數據分析的局限性:
本次數據源全部採集於淘寶網,供參考,但不具有權威的參考性。
推薦閱讀: