searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于BeautifulSoup和pandas的二手车数据分析

2023-03-01 06:08:39
31
0

1 概述
目前,随着经济的飞速发展,人民生活水平不断提高,老百姓对汽车的需求也越来越大,其中,二手车是汽车交易行业的重要支柱。从老百姓角度来讲,二手车价格是影响人们生活的重要因素,对二手车价格进行数据分析具有极大的应用价值。

2 数据描述
(1)数据来源
数据来源于二车之家的web网站,如下图所示为爬取目标网站的截图。采用urllib和BeautifulSoup完成数据爬取,首先通过urllib.request发起请求,采用BeautifulSoup解析页面,完成数据提取。数据爬取核心代码如下:
for page in range(2, 100):
    url = 'http://www.che168.com/china/a0_0msdgscncgpi1lto8csp' + str(page) + 'exx0/?pvareaid=102179#currengpostion'
    f = urllib.request.urlopen(url)
    resp = f.read()
    html = BeautifulSoup(resp, 'html.parser', from_encoding='gbk')
    lis = html.findAll(class_='cards-bottom')
    for li in lis:
        carType = li.h4.text
        carInfo = li.p.text
        carPrice = li.s.text
        print(carType)
        print(carInfo)
        print(carPrice)
        oneCar = [carType, carInfo, carPrice]
        writer.writerow(oneCar)
csvfile.close()

数据处理
数据处理包括缺失值处理、价格处理以及重复值处理。其中,缺失值处理基于dropna方法实现,重复值处理采用drop_duplicates实现,对价格的处理为删除单位万,缺失值和重复值处理后的数据量为4358。数据处理核心代码如下:
data=pd.read_csv(r'data.csv',encoding='gb18030')
#删除原价为 NaN 缺失值的数据
data.dropna(subset=['价格'],inplace=True)
#删除价格为 已涨价xx元  已降价xx元的数据
data=data[ ~data['价格'].str.contains('已')]  #删除某列包含特殊字符的行
#缺失值  检测当前的数据有没有缺失值
data.isnull()
print('当前缺失值为')
print(data.isnull().sum())
#重复值的检测
print('当前重复值为')
print(data.duplicated().sum())
#删除重复值
data.drop_duplicates(inplace=True)
print('缺失值和重复值处理后的数据量为',len(data))
# 去除单位万
data['价格']=data.价格.map(lambda x:float(x.replace('万','')))
data = data.reset_index(drop=True)

3 数据分析内容
(1)区间数据分析
为了分析不同价格区间的二手车情况,首先定义分区列表,然后采用cut方法与plto.bar相结合的方式绘制柱状图,具体实现代码如下:
def qujianCount():
    bins = [0, 30, 60, 90, 120, 150, 180]
    # 画成直方图   rot 把x轴的数据进行旋转 ,如旋转水平角度为0度
    pd.cut(data.价格, bins).value_counts().plot.bar(rot=0, title='区间分析')
    plt.show()
(2)车型分析
为了分析主要在售车型的分布情况,基于value_counts方法和plot.barh方法分析车型情况,并绘制图表,具体实现代码如下:
data.车型.value_counts()[:10].plot.barh(title='车型分析')
plt.show()
(3)车型价格分析
为了探究车型的价格,对不同车型求均价,选取前10进行图表展示,具体实现代码如下:
data.groupby(['车型'])['价格'].mean().sort_values()[-10:].plot.barh(title='均价前10的车型')
plt.show()
(4)车型饼图分析
前面的车型分析中,包含了配置不同的车型,存在局限性,本次分析首先将车型统一,即删除车型的配置,如奔驰S级 2020款 S 350 L 商务型 臻藏版处理为1奔驰S级,具体实现代码如下:
for i in range(len(data)):
    data.at[i,'车型'] = data.at[i,'车型'].split(' ')[0]
top10 = data.车型.value_counts()[:10]
print(top10)
top10 = ['宝马5系', '宝马3系', '奔驰E级', '奔驰C级', '奥迪A4L', 'Model', '奥迪A6L', 'MINI', '高尔夫', '天籁']
data_top10 = data[data['车型'].isin(top10)]
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=0, labels=top10,
        autopct='%.2f%%', radius=2)
# radus半径
plt.show()

4 数据分析图表

5 数据分析结果
经过数据分析后,可以发现,在不同车型中,幻影、库里南等豪车价格较高,主流的车型为宝马、奔驰、奥迪等,更符合市场需求,其中宝马系车辆,在前10的车型中,数量占比高达30%,具有较高的市场份额。在价格分析中,0-30万的二手车是主流,为市场的主要需求。

0条评论
0 / 1000
嘎嘎嘎嘎
15文章数
0粉丝数
嘎嘎嘎嘎
15 文章 | 0 粉丝
原创

基于BeautifulSoup和pandas的二手车数据分析

2023-03-01 06:08:39
31
0

1 概述
目前,随着经济的飞速发展,人民生活水平不断提高,老百姓对汽车的需求也越来越大,其中,二手车是汽车交易行业的重要支柱。从老百姓角度来讲,二手车价格是影响人们生活的重要因素,对二手车价格进行数据分析具有极大的应用价值。

2 数据描述
(1)数据来源
数据来源于二车之家的web网站,如下图所示为爬取目标网站的截图。采用urllib和BeautifulSoup完成数据爬取,首先通过urllib.request发起请求,采用BeautifulSoup解析页面,完成数据提取。数据爬取核心代码如下:
for page in range(2, 100):
    url = 'http://www.che168.com/china/a0_0msdgscncgpi1lto8csp' + str(page) + 'exx0/?pvareaid=102179#currengpostion'
    f = urllib.request.urlopen(url)
    resp = f.read()
    html = BeautifulSoup(resp, 'html.parser', from_encoding='gbk')
    lis = html.findAll(class_='cards-bottom')
    for li in lis:
        carType = li.h4.text
        carInfo = li.p.text
        carPrice = li.s.text
        print(carType)
        print(carInfo)
        print(carPrice)
        oneCar = [carType, carInfo, carPrice]
        writer.writerow(oneCar)
csvfile.close()

数据处理
数据处理包括缺失值处理、价格处理以及重复值处理。其中,缺失值处理基于dropna方法实现,重复值处理采用drop_duplicates实现,对价格的处理为删除单位万,缺失值和重复值处理后的数据量为4358。数据处理核心代码如下:
data=pd.read_csv(r'data.csv',encoding='gb18030')
#删除原价为 NaN 缺失值的数据
data.dropna(subset=['价格'],inplace=True)
#删除价格为 已涨价xx元  已降价xx元的数据
data=data[ ~data['价格'].str.contains('已')]  #删除某列包含特殊字符的行
#缺失值  检测当前的数据有没有缺失值
data.isnull()
print('当前缺失值为')
print(data.isnull().sum())
#重复值的检测
print('当前重复值为')
print(data.duplicated().sum())
#删除重复值
data.drop_duplicates(inplace=True)
print('缺失值和重复值处理后的数据量为',len(data))
# 去除单位万
data['价格']=data.价格.map(lambda x:float(x.replace('万','')))
data = data.reset_index(drop=True)

3 数据分析内容
(1)区间数据分析
为了分析不同价格区间的二手车情况,首先定义分区列表,然后采用cut方法与plto.bar相结合的方式绘制柱状图,具体实现代码如下:
def qujianCount():
    bins = [0, 30, 60, 90, 120, 150, 180]
    # 画成直方图   rot 把x轴的数据进行旋转 ,如旋转水平角度为0度
    pd.cut(data.价格, bins).value_counts().plot.bar(rot=0, title='区间分析')
    plt.show()
(2)车型分析
为了分析主要在售车型的分布情况,基于value_counts方法和plot.barh方法分析车型情况,并绘制图表,具体实现代码如下:
data.车型.value_counts()[:10].plot.barh(title='车型分析')
plt.show()
(3)车型价格分析
为了探究车型的价格,对不同车型求均价,选取前10进行图表展示,具体实现代码如下:
data.groupby(['车型'])['价格'].mean().sort_values()[-10:].plot.barh(title='均价前10的车型')
plt.show()
(4)车型饼图分析
前面的车型分析中,包含了配置不同的车型,存在局限性,本次分析首先将车型统一,即删除车型的配置,如奔驰S级 2020款 S 350 L 商务型 臻藏版处理为1奔驰S级,具体实现代码如下:
for i in range(len(data)):
    data.at[i,'车型'] = data.at[i,'车型'].split(' ')[0]
top10 = data.车型.value_counts()[:10]
print(top10)
top10 = ['宝马5系', '宝马3系', '奔驰E级', '奔驰C级', '奥迪A4L', 'Model', '奥迪A6L', 'MINI', '高尔夫', '天籁']
data_top10 = data[data['车型'].isin(top10)]
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=0, labels=top10,
        autopct='%.2f%%', radius=2)
# radus半径
plt.show()

4 数据分析图表

5 数据分析结果
经过数据分析后,可以发现,在不同车型中,幻影、库里南等豪车价格较高,主流的车型为宝马、奔驰、奥迪等,更符合市场需求,其中宝马系车辆,在前10的车型中,数量占比高达30%,具有较高的市场份额。在价格分析中,0-30万的二手车是主流,为市场的主要需求。

文章来自个人专栏
深度学习-lsm
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1