Python——全國瓜子二手車數據分析

繼瓜子二手車數據爬去以後,在此進行處理分析spa

Pycharm代碼code

# 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()
相關文章
相關標籤/搜索