先来看第一问。首先我们要明确,这种数据分析类的题目,无非就是分类、回归、聚类、异常检测这几种,这题很明显属于回归。接下来我们就要确定回归模型的输入和输出,输入就是我们说的自变量,输出就是因变量。
我们来观察一下附件,注意附件有两个子表,对应两种类型的帆船,也就是说我们要建立至少两个模型。为什么说是至少两个,因为你也可以针对每个地区各建一个模型。当然这些模型的原理都是一样的。像品牌、型号、长度、年份、地区这些特征,就属于模型输入,价格就是模型输出。要是你觉得附件提供的特征不够,题干也说了,可以自己去找其他的特征。
接下来说说建模具体需要做哪些工作。我们已经确定了这一问是一个回归问题,回归问题的基本步骤是很明确的:
编码->降维->回归
无非就是这三步。可能有同学问怎么没说数据清理,这里我们不分那么细,像归一化、数据清理这些所谓的预处理过程,都算在编码里面,这些是你在编码的时候要考虑的事情。
编码具体怎么做呢?也很简单,对品牌型号这种离散特征我们就用one-hot编码,对长度、年份这些连续特征我们做个归一化就行。像地区这样的特征,既可以当作离散特征做one-hot编码,也可以将其转化为经纬度,转化为经纬度就相当于是连续特征,这题必须用多个连续特征来表示地区,不然后面第三问没法做。
下一步就是降维,这里没啥好说的,直接主成分分析。
最后是做回归。常见的回归模型,无非就是多项式模型和树模型,这里建议用多项式模型,因为树模型相当于一个黑盒,你没法知道每项特征的具体权重。第一问的题干要求我们explains the listing price,你用树模型就没法explain了。
下面看第二问。第二问分为两部分,首先是讨论地区是否对价格有影响,这一问直接用第一问的结果就行,我们根据地区这一特征的权重就知道是够对价格有影响,以及有怎样的影响。
接下来要讨论对于不同型号的帆船,地区的的影响是否相同。这里我们针对不同型号的帆船分别建回归模型,再观察在这些回归模型中,地区的权重是否相同。
当然,这里帆船型号太多了,我们不用对每种型号进行建模,只要对样本多的几种帆船建模就行。
再说下第三问。第三问首先要找数据,因为题目是没给香港地区的价格数据的,我们要自己找。找到价格后套用第一问得到的回归模型,地区特征带入香港,来看看用回归模型预测的价格与实际的价格是否一致,一致就说明我们给出用来表达地区的特征是useful的。
第三问后半段问的是香港对双体船和单体船价格的区域效应是否一致,这题本质上问的是地区对双体船和单体船价格的影响是否一致。我们观察针对双体船和单体船的回归模型中地区特征的权重是否相同就可以。
四五两问是开放性问题,我们针对一些特征的权重做些说明就可以了。
代码如下:
import xlrd
class Data:
“”"
数据类
“”"
def init(self):
workbook = xlrd.open_workbook(‘y_data.xlsx’) # 打开excel文件
self.worksheet = workbook.sheet_by_index(0) # 读第一个sheet
self.rows = self.worksheet.nrows - 1 # 数据行数
self.year_list = [] # 年份列表
self.beam_list = [] # 船宽列表
self.draft_list = [] # 吃水深度列表
self.displacement_list = [] # 排水量列表
self.sailarea_list = [] # 帆面积列表
self.length_list = [] # 船长列表
self.gdp_list = [] # GDP列表
self.pergdp_list = [] # 人均GDP列表
self.price_list = [] # 价格列表
def get_year(self):
“”"
获取年份列表
“”"
self.year_list = self.worksheet.col_values(1, 1,)
def get_beam(self):
“”"
获取船宽列表
“”"
self.beam_list = self.worksheet.col_values(2, 1,)
def get_draft(self):
“”"
获取吃水深度列表
“”"
self.draft_list = self.worksheet.col_values(3, 1,)
def get_displacement(self):
“”"
获取排水量列表
“”"
self.displacement_list = self.worksheet.col_values(4, 1,)
def get_sailarea(self):
“”"
获取帆面积列表
“”"
self.sailarea_list = self.worksheet.col_values(5, 1,)
def get_length(self):
“”"
获取船长列表
“”"
self.length_list = self.worksheet.col_values(6, 1,)
def get_gdp(self):
“”"
获取gdp列表
“”"
self.gdp_list = self.worksheet.col_values(7, 1,)
def get_pergdp(self):
“”"
获取人均gdp列表
“”"
self.pergdp_list = self.worksheet.col_values(8, 1,)
def get_price(self):
“”"
获取价格列表
“”"
self.price_list = self.worksheet.col_values(9, 1,)
def get_all(self):
“”"
获取所有数据
“”"
self.get_year()
self.get_beam()
self.get_draft()
self.get_displacement()
self.get_sailarea()
self.get_length()
self.get_gdp()
self.get_pergdp()
self.get_price()
正在为您运送作品详情
mbd.pub/o/bread/ZJeUmplx