1、任務(wù)
市場(chǎng)需求:各年度汽車總銷量及環(huán)比,各車類、級(jí)別車輛銷量及環(huán)比
消費(fèi)能力/價(jià)位認(rèn)知:車輛銷售規(guī)模及環(huán)比、不同價(jià)位車銷量及環(huán)比
企業(yè)/品牌競(jìng)爭(zhēng):各車系、廠商、品牌車銷量及環(huán)比,市占率及變化趨勢(shì)
熱銷車型:品牌、車類、車型、級(jí)別的各top銷量
2、數(shù)據(jù)預(yù)處理
1、數(shù)據(jù)的讀取
import pandas as pd
data = pd.read_csv("數(shù)據(jù)/car_selling_fact.csv",encoding="gbk")
2、數(shù)據(jù)探索
#查看數(shù)據(jù)形狀
data.shape #(7122, 13)
#查看是否有重復(fù)值
data.duplicated().sum() # 0
#整體查看
data.info()
"""
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7122 entries, 0 to 7121
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 7122 non-null object
1 車系 7122 non-null object
2 廠商 7122 non-null object
3 車類 7122 non-null object
4 品牌 7122 non-null object
5 車型 7122 non-null object
6 級(jí)別 7122 non-null object
7 價(jià)格 7122 non-null int64
8 時(shí)間 7122 non-null object
9 銷量 7122 non-null int64
10 銷售規(guī)模(億) 7122 non-null float64
11 省份 7122 non-null object
12 城市 7122 non-null object
dtypes: float64(1), int64(2), object(10)
memory usage: 723.5+ KB
"""
#查看數(shù)據(jù)前5行
data.head()
3、進(jìn)行數(shù)據(jù)預(yù)處理
將時(shí)間列轉(zhuǎn)化為 datetime 格式
增加 年份這一列
將價(jià)格離散化成5個(gè)區(qū)間:低檔、中檔、中高檔、高檔、豪華
data["時(shí)間"] = pd.to_datetime(data["時(shí)間"],errors="coerce")
data["年份"] = data["時(shí)間"].apply(lambda x:x.year)
data["價(jià)位"] = pd.cut(data["價(jià)格"],bins=5,labels=['低檔', '中檔', '中高檔', '高檔', '豪華'])
data.iloc[0,:] #查看第一行全部列數(shù)據(jù)
"""
Unnamed: 0 I8a8a4ca2016dfb9ffb9f77ba016e1155772543c7
車系 韓系
廠商 東風(fēng)悅達(dá)起亞
車類 SUV
品牌 起亞
車型 智跑
級(jí)別 緊湊
價(jià)格 17
時(shí)間 2019-06-30 00:00:00
銷量 2955
銷售規(guī)模(億) 5.0235
省份 江蘇
城市 鹽城
年份 2019
價(jià)位 中檔
Name: 0, dtype: object
"""
4、計(jì)算各年度總銷量及環(huán)比增長(zhǎng)率
環(huán)比增長(zhǎng)率=(本期數(shù)-上期數(shù))/上期數(shù)×100%
#取出年份與銷量?jī)闪袛?shù)據(jù),并根據(jù)年份進(jìn)行分組求和
diff_year= data[["年份","銷量"]].groupby("年份").sum().reset_index()
#計(jì)算列上下相鄰的差值
diff = diff_year.diff()
diff_year["diff"] = list(diff["銷量"])
#計(jì)算環(huán)比
diff_year["rate"] = [None] + list(diff_year["diff"].values[1:] / diff_year["銷量"].values[:-1]*100)
diff_year
"""
年份 銷量 diff rate
0 2015 14594487 NaN NaN
1 2016 16952990 2358503.0 16.160232
2 2017 17576436 623446.0 3.677499
3 2018 17568751 -7685.0 -0.043723
4 2019 7464071 -10104680.0 -57.515073
"""
5、繪制各年度總銷量柱狀圖及環(huán)比增長(zhǎng)率折線圖
plt.rcParams["font.sans-serif"] = "Microsoft YaHei" #設(shè)置顯示中文,微軟雅黑字體支持負(fù)號(hào)
fig = plt.figure(figsize=(12,8)) #設(shè)置畫布
ax1 = plt.subplot(1,1,1) #設(shè)置子圖
plt.xlabel("年份",fontsize=15)
plt.ylabel("總銷量(億)",fontsize=15)
plt.title("各年度總銷量柱狀圖及環(huán)比增長(zhǎng)率折線圖",fontsize=20)
ax1.bar(diff_year["年份"],diff_year["銷量"],color=['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F'])
ax2 = ax1.twinx() # 使 ax1 與 ax2 同 x 軸,不同 y 軸
ax2.plot(diff_year["年份"],diff_year["rate"],c="green")
plt.ylabel("環(huán)比增長(zhǎng)率(%)")
plt.xticks(diff_year["年份"],diff_year["年份"], fontsize=10)
plt.show()
?6、各年度總各車類銷量及環(huán)比增長(zhǎng)率
year_chelei =data.pivot_table(index="年份",columns="車類",values="銷量",aggfunc="sum",fill_value=0)
year_chelei["diff_MPV"] = year_chelei["MPV"].diff()
year_chelei["diff_SUV"] = year_chelei["SUV"].diff()
year_chelei["diff_轎車"] = year_chelei["轎車"].diff()
year_chelei["rate_MPV"] = [None]+list(year_chelei["diff_MPV"].values[1:] / year_chelei["MPV"].values[:-1]*100)
year_chelei["rate_SUV"] = [None] + list(year_chelei["diff_SUV"].values[1:] / year_chelei["SUV"].values[:-1]*100)
year_chelei["rate_轎車"] = [None] + list(year_chelei["diff_轎車"].values[1:] / year_chelei["轎車"].values[:-1]*100)
year_chelei = year_chelei[["MPV","SUV","轎車","rate_MPV","rate_SUV","rate_轎車"]]
"""
車類 MPV SUV 轎車 rate_MPV rate_SUV rate_轎車
年份
2015 409042 4821500 9363945 NaN NaN NaN
2016 474380 6058928 10419682 15.973421 25.664793 11.274490
2017 442669 6871876 10261891 -6.684725 13.417357 -1.514355
2018 561307 7111774 9895670 26.800612 3.491012 -3.568748
2019 215394 3094016 4154661 -61.626347 -56.494456 -58.015364
"""
畫圖方法與 5 類似
7、不同車類的年度銷量分析柱狀圖(將年份列重新命名為 year)
tmp = pd.pivot_table(data=data, index='車類', columns='year', values='銷量', aggfunc='sum', fill_value=0)
def bar_plot(tmp=None, bar_width=0.3, x=np.array([0, 2, 4]), title='汽車車類銷量情況可視化'):
years = tmp.columns
cols = ['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F'] # 各年份柱子的顏色
a, b = tmp.values.min(), tmp.values.max() # 取出數(shù)據(jù)的最大最小值,供設(shè)定坐標(biāo)軸范圍
for i, year in enumerate(years): # 繪圖
plt.bar(x+i*bar_width, tmp[year], bar_width, color=cols[i])
plt.ylim(0, 1.1*b) # 設(shè)置y軸取值范圍
plt.legend(['{}年'.format(year) for year in years]) # 添加圖例
plt.xticks(x+bar_width*2, labels=tmp.index, color='#228B22', fontsize=15) # 設(shè)置x軸刻度值
# 添加文字描述
plt.text(max(x)/2 + 0.4, b, title, fontsize=20, color='#006400', alpha=0.7, ha='center')
plt.show()
bar_plot(tmp=tmp, bar_width=0.3, x=np.array([0, 2, 4]), title='汽車車類銷量情況可視化')
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-574420.html
8、各年度 品牌銷量前五
year_pinpai = data[["年份","品牌","銷量"]].pivot_table(index="年份",columns="品牌",values="銷量",aggfunc="sum")
#2015年
five= year_pinpai.iloc[0,:].sort_values(ascending=False)[:5].reset_index()
five = five.sort_values(by=2015)
five
"""
品牌 2015
4 別克 952201.0
3 現(xiàn)代 1028391.0
2 本田 1058246.0
1 豐田 1444765.0
0 大眾 2618420.0
"""
#2016年
six = year_pinpai.iloc[1,:].sort_values(ascending=False)[:5].reset_index()
six = six.sort_values(by=2016)
#2017年
seven = year_pinpai.iloc[2,:].sort_values(ascending=False)[:5].reset_index()
seven
#2018年
eig = year_pinpai.iloc[3,:].sort_values(ascending=False)[:5].reset_index()
eig
#2019年
nine= year_pinpai.iloc[4,:].sort_values(ascending=False)[:5].reset_index()
nine
9、繪制2015年品牌銷量 Top5
plt.rcParams["font.sans-serif"] = "Microsoft YaHei"
fig = plt.figure(figsize=(12,8))
plt.ylabel("品牌",fontsize=15)
plt.xlabel("銷量",fontsize=15)
plt.title("2015年品牌銷量 Top5",fontsize=20)
plt.barh(five["品牌"],five[2015])
plt.show()
?其它top繪制類似
10、分析各車系銷量及環(huán)比,市占率
year_chexi = data[["年份","車系","銷量"]].pivot_table(index="年份",columns="車系",values="銷量",aggfunc="sum").reset_index()
year_chexi["diff_德系"] = year_chexi["德系"].diff()
year_chexi["diff_日系"] = year_chexi["日系"].diff()
year_chexi["diff_法系"] = year_chexi["法系"].diff()
year_chexi["diff_美系"] = year_chexi["美系"].diff()
year_chexi["diff_自主"] = year_chexi["自主"].diff()
year_chexi["diff_韓系"] = year_chexi["韓系"].diff()
year_chexi["rate_德系"] = [None] + list(year_chexi["diff_德系"].values[1:] / year_chexi["德系"].values[:-1]*100)
year_chexi["rate_日系"] = [None] + list(year_chexi["diff_日系"].values[1:] / year_chexi["日系"].values[:-1]*100)
year_chexi["rate_法系"] = [None] + list(year_chexi["diff_法系"].values[1:] / year_chexi["法系"].values[:-1]*100)
year_chexi["rate_美系"] = [None] + list(year_chexi["diff_美系"].values[1:] / year_chexi["美系"].values[:-1]*100)
year_chexi["rate_自主"] = [None] + list(year_chexi["diff_自主"].values[1:] / year_chexi["自主"].values[:-1]*100)
year_chexi["rate_韓系"] = [None] + list(year_chexi["diff_韓系"].values[1:] / year_chexi["韓系"].values[:-1]*100)
rate_chexi = year_chexi[["年份","德系","日系","法系","美系","自主","韓系","rate_德系","rate_日系","rate_法系","rate_自主","rate_韓系"]]
rate_chexi
"""
車系 年份 德系 日系 法系 美系 自主 韓系 rate_德系 rate_日系 rate_法系 rate_自主 rate_韓系
0 2015 3749142 3550863 546730 2673435 2502912 1571405 NaN NaN NaN NaN NaN
1 2016 4400123 3366714 520709 2676442 4263125 1725877 17.363466 -5.186035 -4.759388 70.326604 9.830184
2 2017 4705727 3848282 246358 2613015 5198111 964943 6.945351 14.303799 -52.687970 21.931940 -44.089700
3 2018 4911413 4012052 95855 2059249 5470155 1020027 4.370972 4.255665 -61.091176 5.233517 5.708524
4 2019 2251150 1954618 14688 790426 2095425 357764 -54.164922 -51.281339 -84.676856 -61.693499 -64.926026
"""
11、繪制2015年各車系市占率市占率
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "Microsoft YaHei"
fig = plt.figure(figsize=(8,8))
plt.title("2015年各車系市占率市占率")
plt.pie(rate_chexi.iloc[0,1:7], labels=["德系","日系","法系","美系","自主","韓系"], autopct='%.2f %%', explode=[0.01, 0.01, 0.1, 0.01, 0.01,0.01],
colors=['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F', '#006400'])
plt.show()
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-574420.html
?
到了這里,關(guān)于汽車銷售數(shù)據(jù)可視化分析實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!