您的位置首页生活百科

有没有用python做数据分析的项目或案例可以用来练习?

有没有用python做数据分析的项目或案例可以用来练习?

的有关信息介绍如下:

有没有用python做数据分析的项目或案例可以用来练习?

好久没做这种机器学习全流程的案例了,毕竟我是靠这个起家的,最近重温一下吧。很多新手或者是刚入门的同学可以凭借这个案例学一下机器学习。

本次案例是一个价格预测,它是一个连续型的变量,因此它是一个回归问题。所以这是一篇回归问题的全流程的代码。从数据清洗到特征工程到分析可视化,再到模型选择,模型训练,交叉验证,超参数搜索,有效性评估,非常多的流程和套路。

本次做汽车价格的预测呢主要就是一些汽车的一些特征,牌子,年份什么的。主要变量有下面这些。

46022条数据,数据量挺大的作,作为一般的机器学习模型来说,这种数据量已经能够训练出较为准确的模型了。

目标就是做到输入这些特征,然后就能输出这个汽车的价格,保证准确率很高。

变量不是很多,因此进行学习和作业是一个很不错的案例。

当然需要所有的代码文件和本次案例数据的同学还是可以参考:汽车价格预测。

还是先导入数据科学常用的包

读取数据查看信息

查看数据基础信息

观察变量缺失值情况

没有缺失值,直接开始特征工程

Price作为响应变量y,Model Year转为车龄age,其他变量不用处理

#查看非数值型数据

查看一下这些类别变量的取值类别数量都有多少

其中,

进行颜色的映射

### 等同下面这个方法

颜色类别减少为12,下面对汽车品牌处理

Suzuki,Toyota,Honda,Daihatsu四个品牌已经大概包含了大部分车辆,其他的剩下面的车辆可以归为一类, 但是有些牌子可能是奢侈品豪车,均价超级贵,所以我们把下面的Price均价分为三个区间,0-100w的作为普通其他类,100w-500w作为中档其他类,500w以上为高档其他类。

映射处理

也可以下面这样做

处理完成之后,我们再来检查一下特征类别的数量。

再把响应变量从x里面排除

画图!

数值型变量画图

车龄存在一些极大异常值,有一些车车龄很大。Mileage ,engine capacity 也有很多极大值。

型号年份(Model Year):大部分车辆的型号年份集中在2005年到2015年之间,中位数大约在2010年左右。这表明大多数车辆相对较新。箱线图下方的长尾表明也有少量较旧的车辆,但这些较老的车辆相对不多。

里程(Mileage):大多数车辆的里程较低,中位数接近0,但范围广泛,上至100万公里。这说明有些车辆使用非常频繁,但大多数车辆保持较低的里程数。长尾分布表明有些车辆的里程异常高,这可能反映了部分车辆经受了长期的使用。

引擎容量(Engine Capacity):大部分车辆的引擎容量在0到2000cc之间,中位数在1000cc到1500cc左右。这表明大多数车辆装配的是中小型引擎。存在一些异常点,表明有少量车辆装配了非常小或非常大的引擎。车龄(Age):车龄的分布显示,大多数车辆的年龄集中在5到15年之间,中位数约为10年。这意味着大多数车辆都不是很新,但也未达到极老的状态。和型号年份的分析相符,说明市场上流通的车辆大多数都有一定的使用历史。

和上面结论一致,age , Mileage ,engine capacity ,典型的右偏分布 存在很多极大值。

分类型变量画图

画柱状图

公司名称:图表显示Toyota和Suzuki是数量最多的品牌,其次是Honda。这可能表明在相关市场中,Toyota和Suzuki更受欢迎,可能因为它们的可靠性、品牌认知度或性价比。Premium(可能代表高端品牌)和General(可能代表普通或非专门品牌)的数量明显少于前三者,这表明市场可能更倾向于具有中等价格和质量的车辆。

地点:该图展示了汽车的地理分布情况。伊斯兰堡(Islamabad)的数量最多,其次是旁遮普省(Punjab)。这可能反映了这些区域的高车辆需求或更高的购买力。

引擎类型:绝大多数车辆使用的是汽油(Petrol)引擎,而柴油(Diesel)和混合动力(Hybrid)引擎的车辆数量相对较少。这可能是由于汽油车的普及度高,以及在某些地区对于柴油和混合动力车的支持不足。

颜色:银色(Silver)和白色(White)车辆在数量上占据优势,这可能因为这些颜色的车辆更受欢迎,也可能与热量反射能力或经典美观有关。未上市(Unlisted)颜色的数量相对较少,可能包含特殊或定制的颜色。

装配类型:本地装配(Local)的车辆远多于进口车辆(Imported)。这可能反映了本地制造车辆的成本优势或进口税的影响。

车身类型:轿车(Sedan)和掀背车(Hatchback)是最常见的车身类型,而SUV的数量相对较少。这可能反映了市场上对于日常使用和经济型车辆的高需求。

变速器类型:自动档(Automatic)车辆数量少于手动档(Manual)车辆,这可能与成本、驾驶习惯或车辆类型有关。

注册状态:已注册(Registered)的车辆数量远超未注册(Un-Registered)的车辆,这显示了大多数车辆在使用前已完成了注册流程。

响应变量y的分布

有些车的价格异常值太夸张,处理一下

可以看到极端异常值被我们塞掉了,将处理的变量的样本索引给x

为了统一展示x的分布,我们将其进行一个标准化。注意,我们这里对x进行了一个独立热编码,也就是把类别变量都拆成了很多列,一个类别都拆成一条变量。

然后画图查看

蓝色的线是10倍的方差,可以看到很多x他们居然都在均值10倍方差之外,这种异常值肯定是得进行剔除的,不然会影响模型的性能。

样本个体数据方大于整体数据10倍的标准差之外就筛掉。

#取值唯一的独热变量删除

现在我们还剩下4.49万的样本。

相关系数矩阵

我们可以画出变量两两之间的相关性热力图但是变量独热之后有点多,就不把颜色和车身类型等变量放上去了。

画图

明显的负相关关系:一些变量对显示为深紫色,表示它们之间存在较强的负相关。例如,“Mileage”和“Engine Capacity”之间似乎有一定的负相关性,这可能意味着发动机容量越大,车辆的里程数越少,这是有意义的,因为大发动机通常消耗更多的燃料。

明显的正相关关系:一些变量对显示为深红色,指示它们之间存在强烈的正相关。例如,“Engine Type_Petrol”和“Company Name_General”可能有较高的正相关,这可能意味着某个特定的汽车制造商更倾向于生产汽油发动机车型。

弱相关或无相关关系:很多变量对显示为接近黑色,表示它们之间几乎没有或没有明显的相关性。这表明很多车辆特征之间可能没有直接的或显著的影响关系。

特定地区或特征的相关性:可以注意到某些特定区域(如Location_JK, Location_Punjab等)和其他变量之间存在不同程度的相关性。这可能表明地区因素对车辆的某些属性有影响,例如某一地区可能更倾向于特定类型的车辆或发动机类型。

然后标准化

可以看到还有三十九个变量,训练集大概有3.5w条,测试机大概有9k条

模型选择

又到了常见的对比套路环节了,基本上我都是10种机器学习模型做对比。

实例化

定义评价指标

训练拟合对比

查看评价指标

看表格可能不直观,我们进行可视化

支持向量机太差劲了.去掉画图

集成模型方法都是最好的,也就是XGB,LGBM,RF等。下面我们对这三个模型进行交叉验证,进一步评价他们的效果。

自定义交叉验证函数

首先对lgbm模型进行交叉验证

这里可能是版本问题,lgbm在给我报一些警告,也不知道是啥。

然后对xgboost进行交叉验证

这次就能很清楚的看到每次交叉验证的一个效果以及整体的效果。

还剩下随机森林的交叉验证:

四个评价指标的均值图

四个评价指标的方差图

随机森林的效果最好,我们选择他作为最终的模型,下面对随机森林搜索超参数。

设置

将最好的参数给他传进去

进行拟合和评价

我们在全部数据上进行训练。

可以看到前面很多变量的贡献程度比较高,后面那些很多变量都没有啥用,所以我们截一下尾,免得图不太好看。

只选前15个画图

这样我们就能清楚的看到影响汽车价格的是哪些变量了,排名第一的是汽车的引擎容量大小,这个应该代表汽车的性能。排名第二的是汽车的年龄,第三的是它出厂的年限,这两个是一样的。后面还有变量车的类型是不是SUV,可能SUV的价格会高一点,诸如此类.......

这样我们的模型就保存到本地了,下次就不用重新训练,可以直接使用了。

但是由于我们上面做了一些特征工程,所以说原始数据是不方便放进去的,我们得按照上面的特征工程的流程再去把我们的模型进行预测。可能就得自己写个处理脚本才能实现放入几个出来一个y的一个效果。

既然本文说是要做一个系统,那么只是做出模型来肯定还是不够的,得做具体应用。我最近发现有一个Streamlit这个包特别好用。它可以把我们的模型嵌入到一个网页端里面,就可以把模型做成一个web可视化开发,然后我们只需要拖动滑块儿输入数值就可以得到预测结果,当然这个应用目前我还没有完成,后面持续更新会把这个应用尝试加上去。感兴趣的擅长做网页开发的同学可以自己先研究使用一下这个包试试。

之后就相当于是一个可应用的程序,输入几个汽车的特征,就可以预测一下这个汽车的价格。也就是标题所谓的系统了。

需要这代码演示数据的同学可以参考:汽车价格数据

以前的数据分析案例文章可以参考:python数据分析案例

创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制类似的代码可私信)