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

电商系统网站建设网站客户端制作教程

电商系统网站建设,网站客户端制作教程,在线做图表的网站,wordpress分类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/a/565896.html

相关文章:

  • 只会后端不会前端如何做网站免费wordpress页面编辑器
  • BIRGMA验厂要求
  • 铝电解电容器用阳极箔:市场格局、技术演进与未来趋势
  • linux服务-vsftpd搭建
  • SAP PP生产报废单功能分享
  • 汇川H5U+HMI仿真运行追飞剪程序
  • 服装设计网站免费临桂住房和城乡建设局网站
  • 原子性与原子操作
  • Java使用okhttp发送get、post请求
  • 两种上传图片的方式——91张先生
  • web3品牌RWA资产自主发行设计方案
  • 网站公司是做什么的长沙做网站备案
  • 【k8s】Kubernetes 资源限制设置规范手册 MB与MiB的概念混淆问题
  • 网站开发需要多长时间互联网有限公司
  • 撰写网站规划书网络服务示范区创建情况
  • 汇川高压变频故障码解析F134 F149 F150 F151 F154 F155 F157 F159 F160
  • 从 C 到 C++20 协程编写方法的演变。第一部分:函数 + 宏 = 协程
  • 采购管理软件选型避坑指南
  • 广州网站搭建多少钱网站的pv uv
  • ubuntu上安装交叉编译工具链说明
  • 【博资考5】网安2025
  • 怎样在别人网站做加强链接宁波网站推广专业服务
  • 做网站申请域名中国定制家具网
  • 合肥网站建设司图石家庄建设局网站怎么打不开
  • 开启学习具身智能之路
  • 使用husky+ commitlint检查提交描述是否符合规范要求
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析3
  • 达梦删除表空间的内部执行过程
  • 外贸建设网站合优做网站需要多少钱
  • 利用DeepSeek采用hugeint转字符串函数完善luadbi-duckdb的decimal处理