Python——全国瓜子二手车数据分析

时间:2024-04-16 14:15:43

继瓜子二手车数据爬去之后,在此进行处理分析

Pycharm代码

# coding:utf8
# author:Jery
# datetime:2019/5/3 17:35
# software:PyCharm
# function:对爬取的瓜子二手车信息进行分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

""" 原始数据 """
data = pd.read_csv(r\'C:\Users\Jery\Desktop\guazi1.csv\')
# print(data.head(3))

def init():
    """准备"""


    # 解决中文问题
    plt.rcParams[\'font.sans-serif\'] = [\'SimHei\']
    # 解决负号显示
    plt.rcParams[\'axes.unicode_minus\'] = False


def data_handle():
    """数据清洗"""


    # 删除奇数行,不包括表头
    global data
    nums = [i for i in range(4659) if i%2 != 0]
    data.drop(nums,inplace=True)
    # data.dropna(subset=[\'城市\',\'车型\',\'上牌时间\',\'上牌地\',\'表显里程\',\'排量\',\'变速箱\',\'价格\'],inplace=True)
    # 去表显里程单位——万公里
    data[\'表显里程\']=data.表显里程.map(lambda x:float(x.replace(\'万公里\',\'\')))
    # 时间处理
    data[\'上牌时间\']=data.上牌时间.map(lambda x:x.split(\'/\')[0])
    # 转换成车龄
    data[\'上牌时间\']=data.上牌时间.map(lambda x:int(x))
    data[\'车龄\'] = (2019-data.上牌时间)
    # 里程从大到小排序
    data.sort_values(\'表显里程\',ascending=False)
    # 重新排序index,并删除原索引
    data = data.reset_index(drop=True)
    return data

def paint(data):
    """数据分析"""


    # 描述性数据
    # print(data.describe())

    # 行驶距离分析
    sub = [0,3,6,9,12,20]
    # pd.cut(data.表显里程,sub).value_counts().plot.bar(rot=0,title=\'行驶距离分析\')
    # rot是X轴进行旋转
    data[\'表显里程\'].plot(kind=\'hist\', bins=60, figsize=(8,6),xlim=[0,20],title=\'行驶里程直方图\')
    plt.show()

    # 行驶里程箱线图
    plt.figure(figsize=(5,7))
    plt.boxplot(x=data[\'表显里程\'], showmeans=True, meanline=True)
    plt.title(\'行驶里程箱线图\')
    plt.ylabel(\'行驶里程/万公里\')
    plt.show()
    # 箱线图上,均值和中位数比较靠近在5万公里附近。还有1辆开了15万公里以上的老车。上外栏 1.5*IQR 约等于13万公里

    # 价格分析图一
    sub = [0,3,6,9,12,15,18,21,24,27,30,33,36]
    pd.cut(data.价格,sub).value_counts().plot.bar(rot=30,title=\'价格分析\')
    plt.show()

    # 价格分析图二
    data[\'价格\'].plot(kind=\'hist\', bins=60, figsize=(5,8),subplots=True,sharex=False, xlim=[0,20],title=\'二手车各价格区间在销数量图\')
    plt.show()

    # 品牌分析
    data[\'品牌\'] = data.车型.map(lambda x:x.split(\' \')[0])
    # 品牌排名前20
    data.品牌.value_counts()[:20].plot.barh(title=\'品牌排名分析\')
    plt.show()

    # 按品牌聚合分析 平均里程,最大里程,中位数,数量
    d = data[\'表显里程\'].groupby(data[\'品牌\']).agg([\'mean\', \'max\',\'median\',\'count\']).loc[[\'大众\',\'福特\',\'别克\']]
    print("品牌聚合分析 \n        平均里程,最大里程,中位数,数量\n{}".format(d))


    data[\'表显里程\'].groupby(data[\'品牌\']).agg([\'mean\',\'median\']).loc[[\'大众\',\'福特\',\'别克\']].plot(kind=\'bar\',rot=30)
    plt.show()

    # 地区 品牌 数量
    # print(data.groupby([\'城市\',\'品牌\'])[\'品牌\'].count())

    top10 = [\'大众\',\'福特\',\'别克\',\'雪佛兰\',\'吉利\',\'现代\',\'日产\',\'丰田\',\'哈弗H6\',\'本田\']
    data_top10 = data[data[\'品牌\'].isin(top10)]
    print("\n\n\n排名前十品牌汽车总数:".format(data_top10.shape))
    print(\'Top10二手汽车占总二手车比例:%.2f %%\' % ((data_top10.shape[0]/data.shape[0])*100))

    # 饼图
    # 横纵轴标准化处理,保证饼图是正圆,默认为椭圆
    plt.axes(aspect=\'equal\')
    plt.pie(data_top10[\'品牌\'].value_counts(),explode=[0.2,0.2,0.2,0,0,0,0,0,0,0],startangle=30,labels=top10,autopct=\'%.2f%%\',radius=2)
    plt.show()

    # 车龄分析
    data[\'品牌\'].groupby(data[\'车龄\']).count().plot(kind=\'bar\',rot=0,title=\'二手车已使用年数\')
    plt.show()


def main():
    init()
    data = data_handle()
    paint(data)

if __name__ == \'__main__\':
    main()