当前位置: 首页 > wzjs >正文

苏州建网站的公司一站式服务公司广州seo排名收费

苏州建网站的公司一站式服务公司,广州seo排名收费,网上做预算有哪些网站,珠海响应式网站建设为了完成学校布置的课程任务并分享深度学习知识,写下了这篇文章,重点来分享一些建模任务中常用的技巧以及pytorch构建NN(神经网络)的基本方法,本次模型建立的数据源是加州房价数据集,这是一个较为经典的数据集: 一、数…

       

        为了完成学校布置的课程任务并分享深度学习知识,写下了这篇文章,重点来分享一些建模任务中常用的技巧以及pytorch构建NN(神经网络)的基本方法,本次模型建立的数据源是加州房价数据集,这是一个较为经典的数据集:

一、数据预处理

数据读取

#依赖库和数据导入
import polars as pl#pl是一个基于Rust的数据处理库,速度比pandas快很多
import pandas as pd
def read_large_csv(file_path:str):"""使用polars读取大型csv文件Args:file_path:文件路径Returns:pandas类型的DataFrame"""reader = pl.read_csv(file_path)return reader.to_pandas()
data=read_large_csv(r'./housing/housing/housing.csv')
real_types=['NEAR BAY','INLAND','NEAR OCEAN']
print(f'ocean_proximity类型:{list(set(data["ocean_proximity"]))}')
print(f'其中为异常值的为{set(data["ocean_proximity"])-set(real_types)}')
print('\n')
print('数据预处理前:')
print(f'----------------------------------------------------------------------------')
print(f'数据大小:{data.shape}')
print(f'特征名称:{data.columns.tolist()}')

Housing.csv中共有以下特征:

longitude

经度

latitude

纬度

housing_median_age

住房平均年龄

total_rooms

房间总数

total_bedrooms

卧室总数

population

人口总数

households

住房户数

median_income

家庭收入中位数

median_house_value

房价中位数

ocean_proximity

临海类型

其中,数值类型的特征有housing_median_age,total_rooms,total_bedrooms,population

Households,median_income,median_house_value

异常值处理

           在所给数据ocean_proximity中,存在着一些异常数据,上方代码的输出结果中有:

        数据未处理前Ocean_proximity:共有以下类型['NEAR OCEAN', 'NEAR BAY', 'INLAND', 'ISLAND', '<1H OCEAN']

        显然,ISLAND和1HOCEAN是错误的分类!我们需要将其剔除掉,剔除的方法很简单,

        就是通过dataframe内置的isin()函数来筛选ocean_proximity的取值在['NEAR OCEAN', 'NEAR BAY', 'INLAND']内的行,即:

real_types=['NEAR BAY','INLAND','NEAR OCEAN']
data=data[data['ocean_proximity'].isin(real_types)]#通过isin()来判断是否在real_types中

然后,我们分别输出剔除异常值前后的数据shape,其分别为(20640, 10) ,(11394, 10),异常值竟然有9246行! 

one-hot编码

        考虑到ocean_proximity这一特征的数据类型与其他类型格格不入,我们对其进行one-hot编码,这个使用pandas内置的get_dummies()函数即可实现,即:

data=pd.get_dummies(data,columns=['ocean_proximity'],prefix='ocean')#onehot编码

        Columns是指需要onehot编码的列名,data是原始数据,prefix是指经过one-hot编码后,新的三个特征的前缀,前缀是用来加在column列拆分后,新增的columns内取值种类个新特征的名称前。

        这里,ocean_proximity共有INLAND,NEAR BAY,NEAR OCEAN三类,那么经过get_dummies函数后,新的数据中ocean_proxiimity这一列消失,那么取而代之的是

 ocean_INLAND,ocean_NEAR BAY,ocean_NEAR OCEAN

这里的prefix就是指每个新特征前的ocean,倘若不加,那么这三个特征名称还是沿用原来取值

    新的三个特征都是bool型(0 or 1)取值为1还是0取决于其在原来特征中出现的位置,比如,原来ocean_proximity所有为INLAND的行,在ocean_INLAND这列特征中为1,其余位置全为0。

使用value_counts()函数来看一下新增的这几个特征的取值统计:

        正如我们前边所言,每一个特征的取值只有01,这里体现为True与False类型是int64,是为了与其他数值型数据类型对其,方便运算。

数据预处理完整代码及结果

#依赖库和数据导入
import polars as pl#pl是一个基于Rust的数据处理库,速度比pandas快很多
import pandas as pd
def read_large_csv(file_path:str):"""使用polars读取大型csv文件Args:file_path:文件路径Returns:pandas类型的DataFrame"""reader = pl.read_csv(file_path)return reader.to_pandas()
data=read_large_csv(r'./housing/housing/housing.csv')
real_types=['NEAR BAY','INLAND','NEAR OCEAN']
print(f'ocean_proximity类型:{list(set(data["ocean_proximity"]))}')
print(f'其中为异常值的为{set(data["ocean_proximity"])-set(real_types)}')
print('\n')
print('数据预处理前:')
print(f'----------------------------------------------------------------------------')
print(f'数据大小:{data.shape}')
print(f'特征名称:{data.columns.tolist()}')
print(f'----------------------------------------------------------------------------\n')
print('数据预处理后(剔除异常值,one-hot编码):')
print(f'----------------------------------------------------------------------------')
#数据预处理
data=data.dropna()#去掉缺失值
data['median_house_value']=data['median_house_value']/10000#房价除以10000,单位变化为万美元,画图方便
#ISLAND,<1H OCEAN都是异常值,需要去掉这些行
real_types=['NEAR BAY','INLAND','NEAR OCEAN']
data=data[data['ocean_proximity'].isin(real_types)]#通过isin()来判断是否在real_types中
data=pd.get_dummies(data,columns=['ocean_proximity'],prefix='ocean')#onehot编码
print(f'数据大小:{data.shape}')
print(f'特征名称:{data.columns.tolist()}')
print(f'----------------------------------------------------------------------------')

结果: 

二、数据可视化

分析

 图1数值类型数据分布直方图与箱型图

        观察图1不难发现,所有数值数据的分布直方图均表现为右偏趋势,且箱型图中也存在许多极端高值,特别是median_house_value(房价中位数)这一特征(最后一行),其右偏趋势尤为明显。这种形态分布说明均值大于中位数,数据中大部分值都低于均值,只有少数几个极高值拉高了整体的平均水平,这意味着加州房价的分布不均,多数地区房价相对较低,而少数地区房价极高。

 图2加州房价地理分布

        图2所展示的加州房价分布散点图佐证了我们的这一猜想,价位较高的房屋抱团集中在NEAT BAY和NEAR OCEAN区域,而大部分内陆或偏远地区的房价则相对较低。 

图3 Inland,NearBay,NearOcean(从左至右)三区域房价分布箱型图 

        就图3而言,不难发现即使是Inland区域,也存在着不少房子价格水平与NearBay和NearOcean区域最高房价持平的地方,这些点在图3中的蓝色箱型图中体现为黑色离群点。 

        结合图1中所有区域的median_house_value的直方图与箱型图,可以得出结论:图三箱型图中的这些离群点正是导致直方图呈现极端右偏形态的罪魁祸首。

        这里我们并不把它们当做异常点,这是因为房价与身高年龄这些特征不一样,倘若这个箱型图描述的是人的身高分布,且黑色离群点的人的平均身高>2.5米,这就需要考虑剔除掉这些值了。

        但是房价是没有天花板的,房子的价格是取决于多种因素的,即使是地理区域不好的地方出现很高的房价也不难理解,当然,地理环境一定是这些因素中所占比重较大的那一个。

 结合网络查询,我找出了一些虽然深居内陆,但是房屋价格与海滨地区不相上下的区域如图4所示:

        总而言之,就房价均值来说,存在着明显的NearBay>=NearOcean>Inland的关系,这也很好理解,毕竟谁不想面朝大海,春暖花开呢? 

可视化完整代码

数值型数据分布直方图与箱型图

#数据可视化
longitude=data['longitude']
latitude=data['latitude']
housing_median_age=data['housing_median_age']
total_rooms=data['total_rooms']
total_bedrooms=data['total_bedrooms']
population=data['population']
households=data['households']
median_income=data['median_income']
median_house_value=data['median_house_value']
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.suptitle('数据可视化')
plt.figure(figsize=(5,5),dpi=100)
plt.subplot(6,2,1),sns.histplot(total_rooms,kde=True),plt.xlabel('total_rooms')
plt.subplot(6,2,2),sns.boxplot(total_rooms,color='red'),plt.xlabel('total_rooms')
plt.subplot(6,2,3),sns.histplot(total_bedrooms,kde=True),plt.xlabel('total_bedrooms')
plt.subplot(6,2,4),sns.boxplot(total_bedrooms,color='red'),plt.xlabel('total_bedrooms')
plt.subplot(6,2,5),sns.histplot(population,kde=True),plt.xlabel('population')
plt.subplot(6,2,6),sns.boxplot(population,color='red'),plt.xlabel('population')
plt.subplot(6,2,7),sns.histplot(median_income,kde=True),plt.xlabel('median_income')
plt.subplot(6,2,8),sns.boxplot(median_income,color='red'),plt.xlabel('median_income')
plt.subplot(6,2,9),sns.histplot(households,kde=True),plt.xlabel('households')
plt.subplot(6,2,10),sns.boxplot(households,color='red'),plt.xlabel('households')
plt.subplot(6,2,11),sns.histplot(median_house_value,kde=True),plt.xlabel('median_house_value')
plt.subplot(6,2,12),sns.boxplot(median_house_value,color='red'),plt.xlabel('median_house_value')
plt.show()

 注意:data是运行完数据预处理完整代码后的结果。

INLAND NearBay NearOcean三区域房价箱型图:

#分别对编码后的不同ocean_proximity特征进行箱线图绘制
NearBay=data[data['ocean_NEAR BAY']==True]
Inland=data[data['ocean_INLAND']==True]
NearOcean=data[data['ocean_NEAR OCEAN']==True]
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(15,10))
plt.subplot(1,3,1),sns.boxplot(Inland['median_house_value'],color='blue')
plt.subplot(1,3,2),sns.boxplot(NearBay['median_house_value'],color='red')
plt.subplot(1,3,3),sns.boxplot(NearOcean['median_house_value'],color='green')
plt.show()

  注意:data是运行完数据预处理完整代码后的结果

加州房价分布地图:

nearbay=data[data['ocean_NEAR BAY']==True]#
inland=data[data['ocean_INLAND']==True]
nearocean=data[data['ocean_NEAR OCEAN']==True]
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
map_data=pd.concat([nearbay,inland,nearocean],axis=0,ignore_index=True)
#使用pyecharts绘制加州地图
mapping_data= [(str(i)+'号小区',map_data['longitude'][i], map_data['latitude'][i], map_data['median_house_value'][i]) for i in range(map_data.shape[0])]
geo = Geo()
geo.add_schema(maptype="美国",  zoom=5,center=[-119.4179, 36.7783], #加利福尼亚的中心位置is_roam=True ,selected_mode=True,label_opts=opts.LabelOpts(font_size=10),itemstyle_opts=opts.ItemStyleOpts(color="#008f7a", border_color="#4b4453") #背景绿色,边界黑色
)
for name,lontitude,latitude,price in mapping_data:geo.add_coordinate(name,lontitude,latitude) #添加坐标geo.add("",[(name,price)],#房价单位转换成万type_=ChartType.EFFECT_SCATTER,symbol_size=price//6, #根据房价设置点的大小color="red"  #点的颜色)#设置地图配置
geo.set_global_opts(legend_opts=opts.LegendOpts(is_show=True),title_opts=opts.TitleOpts(title="加州房价分布图",pos_left=50),  # 标题visualmap_opts=opts.VisualMapOpts(is_piecewise=True,range_color=["blue", "green", "yellow", "red"],range_text=['价格:万美元'],min_=round(min(map_data["median_house_value"]),1),#最小房价max_=round(max(map_data["median_house_value"]),1)#最大房价)
)geo.render('加州房价分布图.html')

        注意:data是运行完数据预处理完整代码后的结果,运行上述代码后将会在当前工作文件夹下生成一个html文件,在浏览器中打开就可以得到我们前边图2所示的加州房价分布图了。

三、特征提取构建

center_proximity

        在所给数据中,纬度与经度是两个地理参数,根据这两组参数来直接预测房价太过于勉强,解释意义不大,因此这里我们使用这两个原始特征构建一个新的特征,名为center_proximity

其计算公式如下:

cp_{i}=\sqrt{(lo_{i}-lo_{max(prive)})^2+(la_{i}-la_{max(price)^2})}

        其中cp为center_proximity缩写,i表示第i个小区 ,lo_{i},la_{i}分别表示该小区的经纬度,

lo_{max(price)},la_{max(price)}则是指在InLand,NearBay,NearOcean这三个区域房价最高的小区的经纬度。那么cp_{i}实际上就是三个区域内每个小区距离其自身区域房价最高的小区的欧氏距离。

        所谓近朱者赤,近墨者黑,使用上述特征能够很好的衡量这一句话对房屋价格的影响。当然,这里我的地理水平有限。利用经纬度计算距离只是简单的将其当做坐标点计算欧式距离。如有更好的方法欢迎大佬指点。

http://www.dtcms.com/wzjs/27148.html

相关文章:

  • 保定自助建站网站seo优化建议
  • 贵州做网站怎么推广网络推广公司主要做什么
  • 网站建设对客户的优势青岛网站建设微动力
  • 服务器 网站 app北京网络营销推广培训哪家好
  • 内蒙建设工程信息网站大数据下的精准营销
  • 国外最新创意产品网站竞价广告代运营
  • p2p网站策划性价比高seo排名
  • 大连网站网站建设重庆网站网络推广
  • 宿迁专业网站三合一建设湖南百度seo
  • 中国疫情三年花了多少钱网页seo搜索引擎优化
  • 网店网络营销与推广策划书南宁排名seo公司
  • 网站维护正常要多久网络营销课程大概学什么内容
  • 网站建设服务器维护内容百度应用商店app
  • 移动网站建设解决方案美国搜索引擎浏览器
  • 网站域名攻击关键词优化公司
  • 网站标题 关键字怎么设置代码北京网站开发
  • 室内设计方案介绍广州中小企业seo推广运营
  • 电商网站建设流程网站优化排名优化
  • 网站建设汇报方案ppt模板站长统计在线观看
  • 用bootstrap做网站管理系统中国推广网
  • 学会了vue 能搭建一个网站平台java培训机构十强
  • 做犯法任务的网站百度快照是什么意思?
  • app平台需要多少钱南通百度网站快速优化
  • 平阳做网站百度手机助手下载安卓
  • 网站开发 asp.net php百度指数可以用来干什么
  • 家庭宽带 做网站企业网络推广计划书
  • wordpress app弊端roseonly企业网站优化
  • 无锡网站制作公司排名郑州关键词排名顾问
  • 三网合一网站源码下载小红书seo排名帝搜软件
  • 广告型网站怎么做的网络营销和传统营销的关系