原标题:使用Python探索二手车市场(含代码)
前言
上一期中,我们已经手把手的分享了如何使用Python实现某二手车平台数据的抓取,并成功的完成11,281条二手车数据的搜集。基于此,我们需要对获取的数据进行探索性分析,这里就采用我们之前学习的pandas模块和matplotlib模块的知识点做一个小小的数据分析项目。
数据清洗
我们再来看一下爬虫后获取数据的前几行,便于读者清楚的了解数据结构,各变量分别代表汽车品牌、汽车款式、上牌时间、行驶里程数、排放标准、二手价格和同款新车的参考价格:
从数据的前6行我们可以发现数据的一些问题,包括二手车的上牌时间,有的样本记录为“未上牌”,需要特殊处理、行驶里程数为字符串,需要类型的转化、新车原价也是字符串,也需要处理、上牌时间为字符串,如何计算上牌时间与当前10月份的时间差(月数)。而这些问题的解决,就需要我们进行数据清洗工作。
上牌时间字段的处理
由于上牌时间字段存在“未上牌”的值,我们需要看看这样的值占多大比例,如果比例不大,可以考虑将其删除。
# 导入第三方模块
importpandas aspd
importnumpy asnp
importmatplotlib.pyplot asplt
fromsklearn.linear_model importLinearRegression
# 可视化的中文处理
plt.rcParams[ 'font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams[ 'axes.unicode_minus'] = False
# 设置类似R语言中的ggplot2风格
plt.style.use( 'ggplot')
# 读取数据(记得需要将csv文件先另存为UTF-8的编码,否则会报编码错误)
cars = pd.read_csv( 'second_cars_info.csv')
# “未上牌”的二手车占比
N = np.sum(cars.Boarding_time == '未上牌')Ratio = N/cars.shape[ 0]Ratio
# 由于未上牌的汽车数量占比极少,仅千分之八,这里不妨考虑将其删除
cars = cars.loc[cars.Boarding_time != '未上牌',:]
由于上面的清洗步骤,导致一些观测被删除,此时的行索引就不再是一个连续的自然数了,故需要重新设置索引,以免产生不必要的错误(因为pandas模块中数据结构的行索引会自动对齐)。
# 重新设置行索引
cars.index = range( 0,cars.shape[ 0])
# 取出上牌时间变量中的年和月
cars[ 'year'] = cars.Boarding_time.str[: 4].astype( 'int')month = cars.Boarding_time.str.findall( '年(.*?)月')
print(month.head(10))
# 由于month是列表构成的序列,所以需要非列表化,再序列化
month = pd.Series([i[ 0] fori inmonth]).astype( 'int')cars[ 'month'] = month
# print(month.head(10))
# 计算上牌日期距离2017年10月份的月数
cars[ 'diff_months'] = ( 2017-cars.year)* 12+ ( 10-cars.month) + 1
# 显示数据的前5行
cars.head()
行驶里程数字段的处理
<