当前位置:   article > 正文

汽车销售数据可视化分析实战_基于hadoop汽车销售数据分析

基于hadoop汽车销售数据分析

1、任务

市场需求:各年度汽车总销量及环比,各车类、级别车辆销量及环比

消费能力/价位认知:车辆销售规模及环比、不同价位车销量及环比

企业/品牌竞争:各车系、厂商、品牌车销量及环比,市占率及变化趋势

热销车型:品牌、车类、车型、级别的各top销量

2、数据预处理

1、数据的读取
  1. import pandas as pd
  2. data = pd.read_csv("数据/car_selling_fact.csv",encoding="gbk")
2、数据探索
  1. #查看数据形状
  2. data.shape #(7122, 13)
  3. #查看是否有重复值
  4. data.duplicated().sum() # 0
  5. #整体查看
  6. data.info()
  7. """
  8. <class 'pandas.core.frame.DataFrame'>
  9. RangeIndex: 7122 entries, 0 to 7121
  10. Data columns (total 13 columns):
  11. # Column Non-Null Count Dtype
  12. --- ------ -------------- -----
  13. 0 Unnamed: 0 7122 non-null object
  14. 1 车系 7122 non-null object
  15. 2 厂商 7122 non-null object
  16. 3 车类 7122 non-null object
  17. 4 品牌 7122 non-null object
  18. 5 车型 7122 non-null object
  19. 6 级别 7122 non-null object
  20. 7 价格 7122 non-null int64
  21. 8 时间 7122 non-null object
  22. 9 销量 7122 non-null int64
  23. 10 销售规模(亿) 7122 non-null float64
  24. 11 省份 7122 non-null object
  25. 12 城市 7122 non-null object
  26. dtypes: float64(1), int64(2), object(10)
  27. memory usage: 723.5+ KB
  28. """
  29. #查看数据前5行
  30. data.head()
3、进行数据预处理

将时间列转化为 datetime 格式

增加 年份这一列

将价格离散化成5个区间:低档、中档、中高档、高档、豪华

  1. data["时间"] = pd.to_datetime(data["时间"],errors="coerce")
  2. data["年份"] = data["时间"].apply(lambda x:x.year)
  3. data["价位"] = pd.cut(data["价格"],bins=5,labels=['低档', '中档', '中高档', '高档', '豪华'])
  4. data.iloc[0,:] #查看第一行全部列数据
  5. """
  6. Unnamed: 0 I8a8a4ca2016dfb9ffb9f77ba016e1155772543c7
  7. 车系 韩系
  8. 厂商 东风悦达起亚
  9. 车类 SUV
  10. 品牌 起亚
  11. 车型 智跑
  12. 级别 紧凑
  13. 价格 17
  14. 时间 2019-06-30 00:00:00
  15. 销量 2955
  16. 销售规模(亿) 5.0235
  17. 省份 江苏
  18. 城市 盐城
  19. 年份 2019
  20. 价位 中档
  21. Name: 0, dtype: object
  22. """
4、计算各年度总销量及环比增长率

环比增长率=(本期数-上期数)/上期数×100%

  1. #取出年份与销量两列数据,并根据年份进行分组求和
  2. diff_year= data[["年份","销量"]].groupby("年份").sum().reset_index()
  3. #计算列上下相邻的差值
  4. diff = diff_year.diff()
  5. diff_year["diff"] = list(diff["销量"])
  6. #计算环比
  7. diff_year["rate"] = [None] + list(diff_year["diff"].values[1:] / diff_year["销量"].values[:-1]*100)
  8. diff_year
  9. """
  10. 年份 销量 diff rate
  11. 0 2015 14594487 NaN NaN
  12. 1 2016 16952990 2358503.0 16.160232
  13. 2 2017 17576436 623446.0 3.677499
  14. 3 2018 17568751 -7685.0 -0.043723
  15. 4 2019 7464071 -10104680.0 -57.515073
  16. """
5、绘制各年度总销量柱状图及环比增长率折线图
  1. plt.rcParams["font.sans-serif"] = "Microsoft YaHei" #设置显示中文,微软雅黑字体支持负号
  2. fig = plt.figure(figsize=(12,8)) #设置画布
  3. ax1 = plt.subplot(1,1,1) #设置子图
  4. plt.xlabel("年份",fontsize=15)
  5. plt.ylabel("总销量(亿)",fontsize=15)
  6. plt.title("各年度总销量柱状图及环比增长率折线图",fontsize=20)
  7. ax1.bar(diff_year["年份"],diff_year["销量"],color=['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F'])
  8. ax2 = ax1.twinx() # 使 ax1 与 ax2 同 x 轴,不同 y 轴
  9. ax2.plot(diff_year["年份"],diff_year["rate"],c="green")
  10. plt.ylabel("环比增长率(%)")
  11. plt.xticks(diff_year["年份"],diff_year["年份"], fontsize=10)
  12. plt.show()

 6、各年度总各车类销量及环比增长率

  1. year_chelei =data.pivot_table(index="年份",columns="车类",values="销量",aggfunc="sum",fill_value=0)
  2. year_chelei["diff_MPV"] = year_chelei["MPV"].diff()
  3. year_chelei["diff_SUV"] = year_chelei["SUV"].diff()
  4. year_chelei["diff_轿车"] = year_chelei["轿车"].diff()
  5. year_chelei["rate_MPV"] = [None]+list(year_chelei["diff_MPV"].values[1:] / year_chelei["MPV"].values[:-1]*100)
  6. year_chelei["rate_SUV"] = [None] + list(year_chelei["diff_SUV"].values[1:] / year_chelei["SUV"].values[:-1]*100)
  7. year_chelei["rate_轿车"] = [None] + list(year_chelei["diff_轿车"].values[1:] / year_chelei["轿车"].values[:-1]*100)
  8. year_chelei = year_chelei[["MPV","SUV","轿车","rate_MPV","rate_SUV","rate_轿车"]]
  9. """
  10. 车类 MPV SUV 轿车 rate_MPV rate_SUV rate_轿车
  11. 年份
  12. 2015 409042 4821500 9363945 NaN NaN NaN
  13. 2016 474380 6058928 10419682 15.973421 25.664793 11.274490
  14. 2017 442669 6871876 10261891 -6.684725 13.417357 -1.514355
  15. 2018 561307 7111774 9895670 26.800612 3.491012 -3.568748
  16. 2019 215394 3094016 4154661 -61.626347 -56.494456 -58.015364
  17. """

画图方法与 5 类似

7、不同车类的年度销量分析柱状图(将年份列重新命名为 year)
  1. tmp = pd.pivot_table(data=data, index='车类', columns='year', values='销量', aggfunc='sum', fill_value=0)
  2. def bar_plot(tmp=None, bar_width=0.3, x=np.array([0, 2, 4]), title='汽车车类销量情况可视化'):
  3. years = tmp.columns
  4. cols = ['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F'] # 各年份柱子的颜色
  5. a, b = tmp.values.min(), tmp.values.max() # 取出数据的最大最小值,供设定坐标轴范围
  6. for i, year in enumerate(years): # 绘图
  7. plt.bar(x+i*bar_width, tmp[year], bar_width, color=cols[i])
  8. plt.ylim(0, 1.1*b) # 设置y轴取值范围
  9. plt.legend(['{}年'.format(year) for year in years]) # 添加图例
  10. plt.xticks(x+bar_width*2, labels=tmp.index, color='#228B22', fontsize=15) # 设置x轴刻度值
  11. # 添加文字描述
  12. plt.text(max(x)/2 + 0.4, b, title, fontsize=20, color='#006400', alpha=0.7, ha='center')
  13. plt.show()
  14. bar_plot(tmp=tmp, bar_width=0.3, x=np.array([0, 2, 4]), title='汽车车类销量情况可视化')

 

8、各年度 品牌销量前五
  1. year_pinpai = data[["年份","品牌","销量"]].pivot_table(index="年份",columns="品牌",values="销量",aggfunc="sum")
  2. #2015年
  3. five= year_pinpai.iloc[0,:].sort_values(ascending=False)[:5].reset_index()
  4. five = five.sort_values(by=2015)
  5. five
  6. """
  7. 品牌 2015
  8. 4 别克 952201.0
  9. 3 现代 1028391.0
  10. 2 本田 1058246.0
  11. 1 丰田 1444765.0
  12. 0 大众 2618420.0
  13. """
  14. #2016年
  15. six = year_pinpai.iloc[1,:].sort_values(ascending=False)[:5].reset_index()
  16. six = six.sort_values(by=2016)
  17. #2017年
  18. seven = year_pinpai.iloc[2,:].sort_values(ascending=False)[:5].reset_index()
  19. seven
  20. #2018年
  21. eig = year_pinpai.iloc[3,:].sort_values(ascending=False)[:5].reset_index()
  22. eig
  23. #2019年
  24. nine= year_pinpai.iloc[4,:].sort_values(ascending=False)[:5].reset_index()
  25. nine
9、绘制2015年品牌销量 Top5
  1. plt.rcParams["font.sans-serif"] = "Microsoft YaHei"
  2. fig = plt.figure(figsize=(12,8))
  3. plt.ylabel("品牌",fontsize=15)
  4. plt.xlabel("销量",fontsize=15)
  5. plt.title("2015年品牌销量 Top5",fontsize=20)
  6. plt.barh(five["品牌"],five[2015])
  7. plt.show()

 其它top绘制类似

10、分析各车系销量及环比,市占率
  1. year_chexi = data[["年份","车系","销量"]].pivot_table(index="年份",columns="车系",values="销量",aggfunc="sum").reset_index()
  2. year_chexi["diff_德系"] = year_chexi["德系"].diff()
  3. year_chexi["diff_日系"] = year_chexi["日系"].diff()
  4. year_chexi["diff_法系"] = year_chexi["法系"].diff()
  5. year_chexi["diff_美系"] = year_chexi["美系"].diff()
  6. year_chexi["diff_自主"] = year_chexi["自主"].diff()
  7. year_chexi["diff_韩系"] = year_chexi["韩系"].diff()
  8. year_chexi["rate_德系"] = [None] + list(year_chexi["diff_德系"].values[1:] / year_chexi["德系"].values[:-1]*100)
  9. year_chexi["rate_日系"] = [None] + list(year_chexi["diff_日系"].values[1:] / year_chexi["日系"].values[:-1]*100)
  10. year_chexi["rate_法系"] = [None] + list(year_chexi["diff_法系"].values[1:] / year_chexi["法系"].values[:-1]*100)
  11. year_chexi["rate_美系"] = [None] + list(year_chexi["diff_美系"].values[1:] / year_chexi["美系"].values[:-1]*100)
  12. year_chexi["rate_自主"] = [None] + list(year_chexi["diff_自主"].values[1:] / year_chexi["自主"].values[:-1]*100)
  13. year_chexi["rate_韩系"] = [None] + list(year_chexi["diff_韩系"].values[1:] / year_chexi["韩系"].values[:-1]*100)
  14. rate_chexi = year_chexi[["年份","德系","日系","法系","美系","自主","韩系","rate_德系","rate_日系","rate_法系","rate_自主","rate_韩系"]]
  15. rate_chexi
  16. """
  17. 车系 年份 德系 日系 法系 美系 自主 韩系 rate_德系 rate_日系 rate_法系 rate_自主 rate_韩系
  18. 0 2015 3749142 3550863 546730 2673435 2502912 1571405 NaN NaN NaN NaN NaN
  19. 1 2016 4400123 3366714 520709 2676442 4263125 1725877 17.363466 -5.186035 -4.759388 70.326604 9.830184
  20. 2 2017 4705727 3848282 246358 2613015 5198111 964943 6.945351 14.303799 -52.687970 21.931940 -44.089700
  21. 3 2018 4911413 4012052 95855 2059249 5470155 1020027 4.370972 4.255665 -61.091176 5.233517 5.708524
  22. 4 2019 2251150 1954618 14688 790426 2095425 357764 -54.164922 -51.281339 -84.676856 -61.693499 -64.926026
  23. """
11、绘制2015年各车系市占率市占率
  1. import matplotlib.pyplot as plt
  2. plt.rcParams["font.sans-serif"] = "Microsoft YaHei"
  3. fig = plt.figure(figsize=(8,8))
  4. plt.title("2015年各车系市占率市占率")
  5. plt.pie(rate_chexi.iloc[0,1:7], labels=["德系","日系","法系","美系","自主","韩系"], autopct='%.2f %%', explode=[0.01, 0.01, 0.1, 0.01, 0.01,0.01],
  6. colors=['#E0FFFF', '#76EEC6', '#66d88e', '#66CDAA', '#8FBC8F', '#006400'])
  7. plt.show()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/585142
推荐阅读
相关标签
  

闽ICP备14008679号