商业澳洲 文章 优信二手车数据可视化

优信二手车数据可视化


 

 

 

之前使用scrapy抓取了优信二手车的数据,经过这几天的努力,终于把这些数据进行了清洗,并用echarts进行了可视化处理

1.观察数据

可以看到由于抓取的时候没有进行处理,所以整个标题都拿了下来,并且价格也包含了文字,所以需要对这些进行处理

优信二手车

2.修改数据

通过观察发现,可以通过以空格为分隔符,进行截取,这里只取出前面的第一部分,即:‘宝马’二字,并通过MongoDBupdate方法进行修改

for car in car_item.find(): title = car['title'].split()[0] car_item.update({'_id':car['_id']}, {'$set': {'title': title}}) 

同样,价格,可以通过正则表达式取出数值部分

for car in car_item.find(): price= re.findall(r'\d+.\d+',car['price']) car_item.update({'_id':car['_id']}, {'$set': {'price': price}}) 

如果MongoDB不是很了解的可以去 菜鸟教程 看看
修改之后,可以看到数据库的数据已经变成我们想要的样子了
数据库
PS:由于抓取的时候没有改善方法,所以这里的get_car_time(提车天数)出现了小误差,这里就不管了

3.进入jupyter
  1. 引入相应的模块
    这里写图片描述
    如果出现

    Server running in the folder D:\JupyterNotebook\PythonProject at 127.0.0.1:51316

    说明可以进行下面的步骤了,如果不行,可以参考我之前的文章,传送门

  2. 使用管道aggregate
    首先,定义一个函数输出想要的数据,这里先处理displacement(排量)信息,统计相应的排量,并归类
def getpipe(): pipeline= [ {'$group':{'_id':'$displacement','count':{'$sum':1}}} ] for i in car_item.aggregate(pipeline): yield [i['_id'],i['count']]  option={ 'chart':{'zoomType':'xy'}, 'title':{'text':'优信二手车排量比例'}, 'subtitle':{'text':'数据来源:优信二手车'}, 'plotOptions':{'pie':{'dataLabels':{'enabled':True}}},  } series = [{ 'type' :'pie', 'name':'数量', 'data':[i for i in getpipe()] }] charts.plot(series,options = option,show ='inline') 

执行之后可以看到
这里写图片描述
从这里可以看出,市面上的二手车以 2.0L 为主,当然数据可能有偏差,毕竟数据量不是很大
3. 统计车辆品牌
同样运用管道的方法

def get_name(): pipeline= [ {'$group':{'_id':'$title', 'count':{'$sum':1}, } }, {'$sort':{'count':-1}} ] for i in car_item.aggregate(pipeline): yield [i['_id'], i['count'] ]  option={ 'chart':{'zoomType':'xy'}, 'title':{'text':'优信二手品牌比例'}, 'subtitle':{'text':'数据来源:优信二手车'}, 'plotOptions':{'column':{'dataLabels':{'enabled':True}}},  } series = [{ 'type' :'pie', 'name':'数量', 'data':[i for i in get_name()] }] charts.plot(series,options = option,show ='inline') 

执行后出现下图,可以看出市面上常见的品牌有哪些
品牌比例
4. 统计价格
在统计价格这里有个小坑,那就是使用$avg的时候会出现很长的小数位,所以这里使用了round()来限制小数位数

pipeline_car_name =[ {"$group":{"_id":"$title","avg_price":{"$avg":'$price'}}},  ] car_list=list(car_item.aggregate(pipeline_car_name)) for i in car_list:  i['avg_price']=round(i['avg_price'],2) 
def get_name_and_avgprice (types): length = 0 if length < len(car_list): for car in car_list: data ={ 'name':[car['_id']], 'data':[car['avg_price']], 'type':types, 'barWidth':70 } yield data length += 1
name_list = [] for i in car_list: name_list.append(i['_id']) 
option={ 'chart':{'zoomType':'xy'}, 'title':{'text':'优信二手价格表'}, 'subtitle':{'text':'数据来源:优信二手车'}, 'xAxis ' { 'type ': 'category', 'data' : name_list, 'show': 'false', }, 'axisLabel': { 'interval':20,'rotate': 30}, 'yAxis' : {'title':{'text':'平均价格:/万元'}}, 'plotOptions':{'column':{'dataLabels':{'enabled':True}}},  } series =[data for data in get_name_and_avgprice('column')] charts.plot(series,show ='inline', options=option)

这里写图片描述 这里的信息排版,有点乱,是因为我使用echarts的功力不够的原因,以后会加强学习,如果你有好的方法,可以留言

ps:还是玛莎拉蒂牛批,均价65万,像我这样的人,还是开低调奢华的五菱好点,虽然倒数第一,5万起步

4.总结

做完这些工作,感觉还是图像牛批呀,毕竟谁都不想面对一大堆的文字.虽然这个小栗子有点简单,但是在过程中,发现了自身的很多小问题.希望对大家能够有所帮助吧

ps:源码已经放上GitHub,有兴趣的可以看一下,如果还有什么想法请留言


 

 

 

原文链接:https://blog.csdn.net/stormdony/article/details/80129898?ops_request_misc=&request_id=2d52581443084ffaaa58ab06150268a5&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-4-80129898-null-null.268%5Ev1%5Econtrol&utm_term=%E6%BE%B3%E6%B4%B2%E4%BA%8C%E6%89%8B%E9%97%B2%E7%BD%AE

作者: 知澳头条

知澳资深作者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

1300766331

邮箱: info@getau.com.au

澳洲本地网站设计开发团队 超20人团队,悉尼设计开发14年 联系电话:1300766331 微信: XtechnologyAU
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部