kaggle比赛入门 - House Prices - Advanced Regression Techniques(第二部分)
本文承接上一篇
1. 分析住宅类型(BldgType)的分布以及它们与销售价格(SalePrice)的关系
# 1. distribution of dwelling types and their relation to sale prices
# BldgType: Type of dwellingdwelling_types = df['BldgType'].value_counts()
dwelling_prices = df.groupby('BldgType')['SalePrice'].mean()# format labels for the second graph
formatted_dwelling_prices = ['$' + f'{value:,.2f}' for value in dwelling_prices.values]
代码解析
dwelling_types = df['BldgType'].value_counts()
- 作用:
- 统计
BldgType列中每种住宅类型的数量。 BldgType表示住宅的类型(如独栋住宅、联排住宅等)。
- 统计
- 结果:
- 返回一个 Pandas Series,其中索引是住宅类型,值是每种住宅类型的出现次数。
dwelling_prices = df.groupby('BldgType')['SalePrice'].mean()
- 作用:
- 使用
groupby按BldgType(住宅类型)对数据分组。 - 计算每种住宅类型对应的
SalePrice平均值。
- 使用
- 结果:
- 返回一个 Pandas Series,其中索引是住宅类型,值是该类型住宅的平均销售价格。
formatted_dwelling_prices = ['$' + f'{value:,.2f}' for value in dwelling_prices.values]
- 作用:
- 将住宅平均售价格式化为货币格式,便于图表或报告中展示。
- 每个价格值被格式化为带美元符号和千位分隔符的小数格式(保留两位小数)。
- 解释:
f'{value:,.2f}':value是住宅平均售价。:,.2f将数字格式化为包含千位分隔符(,)和两位小数的浮点数。
'$' + ...:- 给格式化后的字符串加上美元符号(
$)。
- 给格式化后的字符串加上美元符号(
for value in dwelling_prices.values:- 遍历
dwelling_prices中的所有售价值并逐一格式化。
- 遍历
- 结果:
- 返回一个列表,其中每个元素是经过格式化的字符串表示住宅的平均售价。
总结
这段代码实现了以下功能:
- 统计住宅类型的分布(
dwelling_types)。 - 计算每种住宅类型的平均销售价格(
dwelling_prices)。 - 将住宅类型的平均销售价格格式化为易读的货币字符串格式(
formatted_dwelling_prices)。
这些数据可以用于进一步的可视化或报告生成。例如,可以绘制柱状图展示住宅类型的数量分布,以及每种类型住宅的平均销售价格。
dwelling_types
BldgType
1Fam 1220
TwnhsE 114
Duplex 52
Twnhs 43
2fmCon 31
Name: count, dtype: int64
# create bar charts
fig1 = go.Figure(data=[go.Bar(x = dwelling_types.index,y = dwelling_types.values,marker_color = 'rgb(76, 175, 80)',text = dwelling_types.values,textposition='outside',width=0.4,marker=dict(line=dict(width=2, color='rgba(0,0,0,1)'), opacity=1)
)])fig1.update_layout(title='Distribution of Building Types',xaxis_title='Building Type',yaxis_title='Count',plot_bgcolor='rgba(34, 34, 34, 1)',paper_bgcolor='rgba(34, 34, 34, 1)',font=dict(color='white')
)fig1.show()
以下是这段代码的解析和解释:
1. 代码目的
- 使用
plotly.graph_objects(go模块)创建一个柱状图,展示住宅类型的分布。 - 通过直观的可视化反映每种住宅类型的数量。
2. 代码解析
创建柱状图对象
fig1 = go.Figure(data=[go.Bar(x = dwelling_types.index,y = dwelling_types.values,marker_color = 'rgb(76, 175, 80)',text = dwelling_types.values,textposition='outside',width=0.4,marker=dict(line=dict(width=2, color='rgba(0,0,0,1)'), opacity=1)
)])
-
go.Figure(data=[...]):- 创建一个
Figure对象,包含图表数据和样式设置。 - 图表的数据部分由一个
go.Bar对象定义,这是一个柱状图。
- 创建一个
-
go.Bar:- 用于定义柱状图的属性。
- 参数解析:
x = dwelling_types.index:- 设置柱状图的 x 轴值,对应住宅类型(
BldgType)。
- 设置柱状图的 x 轴值,对应住宅类型(
y = dwelling_types.values:- 设置柱状图的 y 轴值,对应每种住宅类型的数量。
marker_color = 'rgb(76, 175, 80)':- 设置柱的颜色为绿色(RGB 值为
76, 175, 80)。
- 设置柱的颜色为绿色(RGB 值为
text = dwelling_types.values:- 在每根柱子上显示对应的数量值。
textposition='outside':- 将柱子顶部的文本位置设置为“柱子外部”。
width=0.4:- 设置柱子的宽度为 0.4。
marker=dict(...):- 设置柱子的样式,包括:
line=dict(width=2, color='rgba(0,0,0,1'):- 给柱子外边框添加宽度为 2 的黑色边框。
opacity=1:- 设置柱子的透明度(
1表示完全不透明)。
- 设置柱子的透明度(
- 设置柱子的样式,包括:
设置图表布局
fig1.update_layout(title='Distribution of Building Types',xaxis_title='Building Type',yaxis_title='Count',plot_bgcolor='rgba(34, 34, 34, 1)',paper_bgcolor='rgba(34, 34, 34, 1)',font=dict(color='white')
)
update_layout(...):- 更新图表的布局和外观。
- 参数解析:
title='Distribution of Building Types':- 设置图表的标题。
xaxis_title='Building Type':- 设置 x 轴的标题为“Building Type”(建筑类型)。
yaxis_title='Count':- 设置 y 轴的标题为“Count”(数量)。
plot_bgcolor='rgba(34, 34, 34, 1)':- 设置图表背景颜色为深灰色(RGBA 值为
34, 34, 34, 1)。
- 设置图表背景颜色为深灰色(RGBA 值为
paper_bgcolor='rgba(34, 34, 34, 1)':- 设置整个画布背景颜色为深灰色。
font=dict(color='white'):- 设置字体颜色为白色。
展示图表
fig1.show()
fig1.show():- 在图形界面中渲染并展示生成的柱状图。
3. 总结
这段代码生成了一个高度自定义的柱状图,主要特点包括:
- 绿色柱子代表住宅类型的数量。
- 黑色边框使柱子更突出。
- 每个柱子顶部显示具体数量。
- 图表背景为深灰色,字体为白色,适合深色主题风格。
最终图表能够直观展示每种住宅类型的分布,适合在报告或仪表盘中展示。

fig2 = go.Figure(data=[go.Bar(x=dwelling_prices.index,y=dwelling_prices.values,marker_color = 'rgb(156, 39, 176)',text=formatted_dwelling_prices,textposition='outside',width=0.4,marker=dict(line=dict(width=2, color='rgba(0,0,0,1)'), opacity=1))])fig2.update_layout(title='Average Sale Price by Building Type',xaxis_title='Building Type',yaxis_title='Price',plot_bgcolor='rgba(34, 34, 34, 1)',paper_bgcolor='rgba(34, 34, 34, 1)',font=dict(color='white')
)fig2.show()
1. 代码目的
- 使用
plotly.graph_objects(go模块)创建一个柱状图,展示不同建筑类型的平均售价。 - 通过可视化使用户能够直观地对比不同建筑类型的平均售价。
2. 代码解析
创建柱状图对象
fig2 = go.Figure(data=[go.Bar(x=dwelling_prices.index,y=dwelling_prices.values,marker_color = 'rgb(156, 39, 176)',text=formatted_dwelling_prices,textposition='outside',width=0.4,marker=dict(line=dict(width=2, color='rgba(0,0,0,1)'), opacity=1)
)])
-
go.Figure(data=[...]):- 创建一个
Figure对象,用于存放图表的数据和样式。 data参数包含一个go.Bar对象,定义柱状图的具体样式。
- 创建一个
-
go.Bar:- 定义了柱状图的属性。
- 参数解析:
x=dwelling_prices.index:x轴的值,对应建筑类型(BldgType)。
y=dwelling_prices.values:y轴的值,对应每种建筑类型的平均售价。
marker_color='rgb(156, 39, 176)':- 柱子的颜色为紫色(RGB 值为
156, 39, 176)。
- 柱子的颜色为紫色(RGB 值为
text=formatted_dwelling_prices:- 设置柱子顶部的文本显示内容,即每种建筑类型的平均售价,格式化为类似
$123,456.78的形式。
- 设置柱子顶部的文本显示内容,即每种建筑类型的平均售价,格式化为类似
textposition='outside':- 将柱子顶部的文本放置在柱子的外部位置。
width=0.4:- 设置柱子的宽度为
0.4。
- 设置柱子的宽度为
marker=dict(...):- 设置柱子的样式,包括:
line=dict(width=2, color='rgba(0,0,0,1'):- 为柱子设置宽度为
2的黑色边框。
- 为柱子设置宽度为
opacity=1:- 设置柱子的透明度为
1(完全不透明)。
- 设置柱子的透明度为
- 设置柱子的样式,包括:
设置图表布局
fig2.update_layout(title='Average Sale Price by Building Type',xaxis_title='Building Type',yaxis_title='Price',plot_bgcolor='rgba(34, 34, 34, 1)',paper_bgcolor='rgba(34, 34, 34, 1)',font=dict(color='white')
)
update_layout(...):- 配置图表的整体布局和外观。
- 参数解析:
title='Average Sale Price by Building Type':- 设置图表的标题为“Average Sale Price by Building Type”(按建筑类型划分的平均售价)。
xaxis_title='Building Type':- 设置 x 轴标题为“Building Type”(建筑类型)。
yaxis_title='Price':- 设置 y 轴标题为“Price”(售价)。
plot_bgcolor='rgba(34, 34, 34, 1)':- 设置图表区域的背景颜色为深灰色(RGBA 值为
34, 34, 34, 1)。
- 设置图表区域的背景颜色为深灰色(RGBA 值为
paper_bgcolor='rgba(34, 34, 34, 1)':- 设置整个画布的背景颜色为深灰色。
font=dict(color='white'):- 设置字体颜色为白色,使文本在深色背景下更清晰。
显示图表
fig2.show()
fig2.show():- 渲染并显示生成的柱状图。
3. 图表功能
- x 轴:显示建筑类型(
BldgType)。 - y 轴:显示每种建筑类型的平均售价。
- 每个柱子顶部显示格式化的平均售价值,增加可读性。
- 使用深色背景和白色字体,使图表更美观且适合暗色主题的展示。
4. 总结
这段代码生成了一个对比不同建筑类型平均售价的柱状图:
- 通过柱子高度展示不同建筑类型的平均售价。
- 文本标签显示精确的平均售价数值(格式为
$xx,xxx.xx)。 - 颜色搭配和样式设计适合深色主题,增强了图表的可视化效果。
这种图表适合用来分析住宅类型与售价的关系,帮助用户快速发现售价的分布规律和显著差异。

2. 分析不同区域分类(MSZoning)对房屋销售价格(SalePrice)的影响。
# 2. Zoning impact on sale price
zoning_prices = df.groupby('MSZoning')['SalePrice'].mean()
zoning_prices
1. 代码目的
- 分析不同区域分类(
MSZoning)对房屋销售价格(SalePrice)的影响。 - 计算每种区域分类的平均销售价格,并输出结果。
2. 代码解析
第一行:计算分组平均值
zoning_prices = df.groupby('MSZoning')['SalePrice'].mean()
-
df.groupby('MSZoning'):- 按照数据框
df中的MSZoning列对数据进行分组。 MSZoning表示“区域分类”字段,通常表示房产所处的用途区域,如住宅、商业、农业等。- 结果是一个按
MSZoning分组的对象,每组包含所有该类别的房产数据。
- 按照数据框
-
['SalePrice']:- 从每个分组中提取
SalePrice列(即房屋售价),用于后续计算。
- 从每个分组中提取
-
.mean():- 对每个分组的
SalePrice列计算均值。 - 结果是每个
MSZoning区域类别的平均售价。
- 对每个分组的
-
赋值给变量
zoning_prices:- 将结果存储为
zoning_prices,这是一个带有索引的 Pandas Series,索引是MSZoning的类别,值是对应的平均售价。
- 将结果存储为
第二行:输出结果
zoning_prices
- 直接输出
zoning_prices:- 显示每种
MSZoning区域的名称及其对应的平均售价。
- 显示每种
3. 输出结果格式
假设 MSZoning 列包含以下类别:
- RL: Residential Low Density(低密度住宅)
- RM: Residential Medium Density(中密度住宅)
- C: Commercial(商业)
- FV: Floating Village Residential(漂浮村庄住宅)
4. 代码用途
- 评估区域影响:
- 通过计算每种区域分类的平均售价,可以分析不同区域的房产价格差异。
- 房产市场研究:
- 帮助房地产投资者了解不同区域的房产价值,从而制定投资策略。
- 数据可视化的基础:
- 这段代码可以作为后续绘制区域分类与销售价格关系图表的数据基础。
5. 总结
- 核心逻辑:将房屋数据按照区域分类进行分组,计算每个区域的平均售价。
- 结果展示:输出每种区域分类的名称和其对应的平均售价。
- 潜在价值:提供有关区域对房价影响的洞察,为进一步的分析或可视化奠定基础。
MSZoning
C (all) 74528.000000
FV 214014.061538
RH 131558.375000
RL 191004.994787
RM 126316.830275
Name: SalePrice, dtype: float64
fig3 = px.bar(x = zoning_prices.index,y = zoning_prices.values,title='Average Sale Price by Zoning',color_discrete_sequence=['purple', 'green'],text=zoning_prices.values,template='plotly_dark')fig3.update_traces(texttemplate='$%{text:,.0f}',textposition='outside')
fig3.update_yaxes(title='Sale Price', tickprefix='$',tickformat=',')
fig3.update_xaxes(title='Zoning')
fig3.update_layout(uniformtext_minsize = 8,uniformtext_mode = 'hide')fig3.show()
这段代码使用 Plotly Express 创建了一个柱状图(bar chart),用于可视化不同区域分类(MSZoning)的平均房屋售价(SalePrice)。以下是详细解析:
1. 代码目的
- 创建一个带有美观样式的柱状图,显示区域分类与平均房价的关系。
- 图表的设计重点:
- 使用深色主题(
plotly_dark)背景。 - 在柱子上显示房价金额。
- 美化坐标轴和文本样式。
- 使用深色主题(
2. 代码解析
创建柱状图
fig3 = px.bar(x=zoning_prices.index,y=zoning_prices.values,title='Average Sale Price by Zoning',color_discrete_sequence=['purple', 'green'],text=zoning_prices.values,template='plotly_dark'
)
-
px.bar():- 用于生成柱状图。
- 输入的
x和y是柱状图的横轴和纵轴数据。
-
参数解析:
x=zoning_prices.index:- 设置横轴为
zoning_prices的索引(即区域分类MSZoning)。
- 设置横轴为
y=zoning_prices.values:- 设置纵轴为
zoning_prices的值(即每个区域分类的平均房价)。
- 设置纵轴为
title='Average Sale Price by Zoning':- 设置图表标题。
color_discrete_sequence=['purple', 'green']:- 设置柱状图颜色序列(柱子会依次使用紫色和绿色)。
text=zoning_prices.values:- 在柱子上显示房价值。
template='plotly_dark':- 应用深色主题(背景为深色,文字为浅色)。
调整柱状图的文本
fig3.update_traces(texttemplate='$%{text:,.0f}',textposition='outside'
)
-
update_traces():- 用于修改图表的柱子和标签样式。
-
参数解析:
texttemplate='$%{text:,.0f}':- 格式化柱子上的文本:
$:在金额前添加美元符号。,.0f:金额显示为千分位格式,且无小数位。
- 示例:
350000会显示为$350,000。
- 格式化柱子上的文本:
textposition='outside':- 将文本显示在柱子外部。
调整纵轴
fig3.update_yaxes(title='Sale Price',tickprefix='$',tickformat=','
)
-
update_yaxes():- 用于修改纵轴的样式。
-
参数解析:
title='Sale Price':- 为纵轴设置标题为“Sale Price”。
tickprefix='$':- 在纵轴刻度值前加上美元符号。
tickformat=',':- 将纵轴刻度值设置为千分位格式。
- 示例:
350000会显示为$350,000。
调整横轴
fig3.update_xaxes(title='Zoning')
update_xaxes():- 用于修改横轴的样式。
title='Zoning':- 为横轴设置标题为“Zoning”。
设置统一文本样式
fig3.update_layout(uniformtext_minsize=8,uniformtext_mode='hide'
)
-
update_layout():- 用于修改图表的整体布局。
-
参数解析:
uniformtext_minsize=8:- 设置文本的最小字体大小为 8 像素。
uniformtext_mode='hide':- 如果文本超出柱子或空间,则隐藏超出部分。
显示图表
fig3.show()
- 使用
show()方法展示图表。
3. 图表的预期外观
- 标题:
Average Sale Price by Zoning - 横轴:显示不同的区域分类(如
RL,RM,FV等)。 - 纵轴:显示平均售价,带有美元符号和千分位格式。
- 柱子颜色:交替使用紫色和绿色。
- 文本标签:金额在柱子外部显示,格式如
$350,000。 - 背景主题:深色(
plotly_dark)。
4. 代码用途
- 直观展示区域房价差异:
- 帮助了解不同区域分类对房价的影响。
- 易于解释的可视化:
- 深色主题和格式化文本使得图表更易于理解且视觉效果更好。
- 适用于报告或数据展示:
- 可以用于房地产市场分析报告或决策展示。
总结
这段代码使用 Plotly Express 创建了一个高质量的柱状图,全面展示了不同区域分类与房价的关系,并通过格式化文本、颜色和主题增强了图表的可读性和美观性。

3. 分析房屋所在街道类型(Street)和小巷类型(Alley)对房屋售价(SalePrice)的影响
# 3. street and alley access types effect on sale pricestreet_prices = df.groupby('Street')['SalePrice'].mean()
alley_prices = df.groupby('Alley')['SalePrice'].mean()street_prices
Street
Grvl 130190.500000
Pave 181130.538514
Name: SalePrice, dtype: float64
# street prices
fig5 = px.bar(x=street_prices.index,y=street_prices.values,title='Average Sale Price by Street Type',template='plotly_dark',text=street_prices.values,color=street_prices.index, # 直接用索引作为颜色依据color_discrete_map={'Pave': 'purple', 'Grvl': 'green'} # 手动映射)fig5.update_traces(texttemplate='$%{text:,.0f}',textposition='outside')
fig5.update_yaxes(title='Sale Price',tickprefix='$',tickformat=',')
fig5.update_xaxes(title='Street Type')
fig5.update_layout(showlegend=False)fig5.show()
这段代码用于可视化街道类型对房屋平均售价的影响,并生成一个柱状图(bar chart)。以下是详细解释:
代码功能解析
创建柱状图
fig5 = px.bar(x=street_prices.index,y=street_prices.values,title='Average Sale Price by Street Type',template='plotly_dark',text=street_prices.values,color=street_prices.index, # 直接用索引作为颜色依据color_discrete_map={'Pave': 'purple', 'Grvl': 'green'} # 手动映射
)
px.bar(): 使用 Plotly Express 创建柱状图。x=street_prices.index: 横轴显示街道类型('Pave'和'Grvl')。y=street_prices.values: 纵轴显示每种街道类型的房屋平均售价。title: 设置图表标题为'Average Sale Price by Street Type'。template='plotly_dark': 设置图表为暗色主题。text=street_prices.values: 在柱子顶部显示对应的平均售价值。
自定义柱状图的文本显示
fig5.update_traces(texttemplate='$%{text:,.0f}',textposition='outside'
)
texttemplate='$%{text:,.0f}':- 设置文本格式为美元金额,例如
$200,000。
- 设置文本格式为美元金额,例如
textposition='outside':- 将柱子顶部的文本显示在柱子外部。
设置坐标轴标签
fig5.update_yaxes(title='Sale Price',tickprefix='$',tickformat=','
)
fig5.update_xaxes(title='Street Type')
- Y轴(纵轴):
title='Sale Price': 设置纵轴标题为'Sale Price'。tickprefix='$': 为刻度值添加美元符号前缀($)。tickformat=',': 使用千位分隔符格式化刻度值。
- X轴(横轴):
title='Street Type': 设置横轴标题为'Street Type'。
去除图例
fig5.update_layout(showlegend=False)
showlegend=False:- 隐藏图例,因为柱子的颜色已经用来区分
'Pave'和'Grvl'。
- 隐藏图例,因为柱子的颜色已经用来区分
显示图表
fig5.show()
- 使用
.show()方法在交互式环境中显示生成的柱状图。
代码生成的图表效果
- 图表标题:
Average Sale Price by Street Type - 横轴:街道类型(例如
'Pave'和'Grvl')。 - 纵轴:平均售价(以美元为单位)。
- 柱子颜色:
'Pave'-> 紫色'Grvl'-> 绿色
- 每个柱子顶部显示其具体的平均售价金额(格式为美元)。
总结
这段代码通过柱状图直观地展示了街道类型(铺设路面或碎石路)对房屋平均售价的影响,柱子的颜色和顶部金额的展示增强了图表的可读性和直观性。

# alley prices
fig6 = px.bar(x=alley_prices.index,y=alley_prices.values,title='Average Sale Price by Alley Type',template='plotly_dark',text=alley_prices.values,color=street_prices.index, # 直接用索引作为颜色依据color_discrete_map={'Pave': 'purple', 'Grvl': 'green'} # 手动映射)fig6.update_traces(texttemplate='$%{text:,.0f}',textposition='outside')
fig6.update_yaxes(title='Sale Price',tickprefix='$',tickformat=',')
fig6.update_xaxes(title='Alley Type')
fig6.update_layout(showlegend=False)fig6.show()

4. 分析地块形状和地形轮廓对房价的影响
colors = px.colors.qualitative.Plotly shape_prices = df.groupby('LotShape')['SalePrice'].mean()
contour_prices = df.groupby('LandContour')['SalePrice'].mean()
px.colors.qualitative.Plotly 是 Plotly 提供的一个离散颜色序列,它包含一组预定义的颜色,用于可视化分类数据。
# shape prices
fig7 = px.bar(x = shape_prices.index,y = shape_prices.values,title = 'Average Sale Price by Property Shape',template = 'plotly_dark',text = shape_prices.values)fig7.update_traces(marker_color = colors,texttemplate='$%{text:,.0f}',textposition='outside')
fig7.update_yaxes(title='Sale Price',tickprefix='$',tickformat=',')
fig7.update_xaxes(title='Property Shape')
fig7.update_layout(showlegend=False)fig7.show()
这段代码是用 Plotly 创建一个柱状图,展示按 “地块形状” (LotShape) 分类的平均房价 (SalePrice)。
逐行解释
1. 创建柱状图
fig7 = px.bar(x=shape_prices.index,y=shape_prices.values,title='Average Sale Price by Property Shape',template='plotly_dark',text=shape_prices.values
)
px.bar:使用 Plotly Express 创建柱状图。x=shape_prices.index:横轴显示LotShape的分类名称。y=shape_prices.values:纵轴显示每种地块形状的平均房价。title='Average Sale Price by Property Shape':设置图表标题。template='plotly_dark':使用暗色主题,使背景为深色,文字和线条为浅色。text=shape_prices.values:将每个柱子顶部显示其具体值(即对应类别的平均房价)。
2. 更新柱子的颜色和文本样式
fig7.update_traces(marker_color=colors,texttemplate='$%{text:,.0f}',textposition='outside'
)
marker_color=colors:设置柱子的颜色,colors是之前定义的颜色序列(可能是 Plotly 默认的一组颜色)。每个柱子对应一个颜色。texttemplate='$%{text:,.0f}':设置文本格式。$%{text:,.0f}将显示为货币格式(如$120,000),其中:$表示货币符号。%,表示加逗号分隔千位。.0f表示保留 0 位小数(即四舍五入为整数)。
textposition='outside':将柱子顶部的文本位置设置为 “外部”,即显示在柱子的外侧。
3. 更新纵轴设置
fig7.update_yaxes(title='Sale Price',tickprefix='$',tickformat=','
)
title='Sale Price':设置纵轴的标题为 “Sale Price”。tickprefix='$':为纵轴的刻度值添加美元符号$。tickformat=',':为纵轴的刻度值添加千位分隔符。
4. 更新横轴设置
fig7.update_xaxes(title='Property Shape')
title='Property Shape':设置横轴的标题为 “Property Shape”(地块形状)。
5. 更新布局
fig7.update_layout(showlegend=False)
showlegend=False:隐藏图例(因为这里没有分类需要显示图例)。
6. 显示图表
fig7.show()
- 显示生成的柱状图。
代码整体作用
这段代码生成了一张按地块形状 (LotShape) 分类的房价平均值柱状图:
- 横轴显示各个地块形状类别。
- 纵轴显示对应类别的平均房价。
- 每个柱子的颜色来自之前定义的
colors列表。 - 柱子顶部显示格式化的平均房价(如
$200,000)。 - 图表使用暗色主题,整体美观且易于解读。

# contour prices
fig8 = px.bar(x=contour_prices.index,y=contour_prices.values,title='Average Sale Price by Property Contour',template = 'plotly_dark',text=contour_prices.values)fig8.update_traces(marker_color = colors,texttemplate='$%{text:,.0f}',textposition='outside')fig8.update_yaxes(title='Sale Price', tickprefix='$',tickformat=',')
fig8.update_xaxes(title='Property Contour')
fig8.update_layout(showlegend=False)fig8.show()

5. 计算房产年龄与房产售价之间的相关性
df['PropertyAge'] = df['YrSold'] - df['YearBuilt']# Calculate correlation between property age and sale price
age_price_corr = df['PropertyAge'].corr(df['SalePrice'])
print(f'Correlation between Property Age and Sale Price: {age_price_corr}')
Correlation between Property Age and Sale Price: -0.5233504175468159
- YrSold - YearBuilt:计算房产售出时的年龄(PropertyAge),即从建造完成到售出的时间间隔。
- .corr():计算两列之间的皮尔逊相关系数(Pearson Correlation Coefficient),用来衡量两个变量的线性关系。
- 正相关 (0 < corr ≤ 1):当房产年龄增加时,售价也趋向于增加。
- 负相关 (-1 ≤ corr < 0):当房产年龄增加时,售价趋向于减少。
- 零相关 (corr ≈ 0):房产年龄与售价之间没有明显的线性关系。
# create a scatter plot to visualize the relationship between Property Age and Sale Price
fig9 = px.scatter(df, x='PropertyAge', y='SalePrice',title='Property Age vs Sale Price',color='PropertyAge',color_continuous_scale=px.colors.sequential.Purp)fig9.update_layout(plot_bgcolor='rgb(30, 30, 30)',paper_bgcolor='rgb(30, 30, 30)',font=dict(color='white'))fig9.show()
这段代码用于创建一个散点图,可视化房产年龄(PropertyAge)与房产售价(SalePrice)之间的关系。以下是代码的详细解释:
1. 创建散点图
fig9 = px.scatter(df, x='PropertyAge', y='SalePrice',title='Property Age vs Sale Price',color='PropertyAge',color_continuous_scale=px.colors.sequential.Purp)
px.scatter:使用 Plotly Express 创建一个散点图。df:数据源,包含PropertyAge和SalePrice两列。x='PropertyAge':x 轴表示房产年龄(PropertyAge)。y='SalePrice':y 轴表示房产售价(SalePrice)。title='Property Age vs Sale Price':设置图表的标题。color='PropertyAge':根据PropertyAge的值设置点的颜色,帮助观察不同年龄的房产售价分布。color_continuous_scale=px.colors.sequential.Purp:设置颜色渐变使用紫色(Purp)连续颜色序列,从浅到深表示PropertyAge的变化。
图表特点:通过颜色和位置同时呈现房产年龄与售价的关系,便于发现潜在趋势或模式。
2. 更新图表布局
fig9.update_layout(plot_bgcolor='rgb(30, 30, 30)',paper_bgcolor='rgb(30, 30, 30)',font=dict(color='white'))
plot_bgcolor='rgb(30, 30, 30)':设置绘图区域的背景颜色为深灰色(接近黑色)。paper_bgcolor='rgb(30, 30, 30)':设置整个图表背景颜色为深灰色,与绘图区域颜色保持一致。font=dict(color='white'):将图表中字体的颜色设置为白色,确保在深色背景下清晰可见。
深色主题:使图表更加美观,符合深色风格(dark theme)。
3. 显示图表
fig9.show()
- 显示生成的散点图,供交互式观察数据。
代码的主要功能
- 展示房产年龄与售价之间的关系:每个点表示一套房产,横坐标为房产年龄,纵坐标为售价。
- 使用颜色编码房产年龄:通过颜色的渐变(浅紫到深紫),进一步可视化年龄数据的分布。
- 可视化趋势:图表帮助观察是否存在房产年龄与售价之间的趋势,比如:
- 年龄大的房产售价是否更高或更低。
- 不同年龄段的售价分布是否具有明显的模式。
可能的分析结果
- 如果点在低
PropertyAge值附近聚集且售价较高:说明较新的房产更贵。 - 如果点在高
PropertyAge值附近分布且售价较低:说明房产随着年龄增长,售价降低。 - 如果点分布均匀:说明房产年龄与售价的关系不显著。

6. 计算“房屋居住面积”(Living Area)与“房屋售价”(Sale Price)之间的相关性
living_area_price_corr = df['GrLivArea'].corr(df['SalePrice'])
print(f'Correlation between Living Area (above grade) and Sale Price: {living_area_price_corr}')
Correlation between Living Area (above grade) and Sale Price: 0.7086244776126521
df[‘GrLivArea’]:表示房屋的地上居住面积(Living Area Above Grade),是数据集中一列,通常以平方英尺为单位。
+1:完全正相关,说明居住面积越大,售价越高。
0:无相关性,说明两者之间没有线性关系。
-1:完全负相关,说明居住面积越大,售价越低。
# create a scatter plot to visualize the relationship between Living Area and Sale Price
fig10 = px.scatter(df, x='GrLivArea', y='SalePrice',title='Living Area (above grade) vs Sale Price',color='GrLivArea',color_continuous_scale=px.colors.sequential.Purp)fig10.update_layout(plot_bgcolor='rgb(30, 30, 30)',paper_bgcolor='rgb(30, 30, 30)',font=dict(color='white'))fig10.show()

这段代码的作用是创建一个散点图来可视化“地上居住面积”(Living Area Above Grade,GrLivArea)与“房屋售价”(Sale Price)之间的关系。以下是代码的详细解释:
1. 创建散点图
fig10 = px.scatter(df, x='GrLivArea', y='SalePrice',title='Living Area (above grade) vs Sale Price',color='GrLivArea',color_continuous_scale=px.colors.sequential.Purp)
px.scatter:Plotly Express 提供的函数,用于生成散点图。- 参数解析:
df:数据集,包含GrLivArea和SalePrice的数据。x='GrLivArea':X轴代表房屋的地上居住面积。y='SalePrice':Y轴代表房屋的售价。title='Living Area (above grade) vs Sale Price':设置图表的标题,描述图表的内容。color='GrLivArea':将地上居住面积用于点的颜色标记,颜色深浅表示不同面积大小。color_continuous_scale=px.colors.sequential.Purp:使用连续颜色渐变“Purp”进行着色,颜色从浅到深表示面积的差异。
2. 更新图表布局
fig10.update_layout(plot_bgcolor='rgb(30, 30, 30)',paper_bgcolor='rgb(30, 30, 30)',font=dict(color='white'))
update_layout:自定义图表的布局。plot_bgcolor='rgb(30, 30, 30)':设置绘图区背景为深灰色(RGB 值)。paper_bgcolor='rgb(30, 30, 30)':设置整张图表背景为深灰色,与绘图区保持一致。font=dict(color='white'):将字体颜色设置为白色,适合深色背景,增强可读性。
3. 显示图表
fig10.show()
fig10.show():渲染并显示图表。
总结功能
- 展示目标:图表可视化了房屋的地上居住面积(
GrLivArea)与售价(SalePrice)之间的关系。 - 数据特点:
- 散点的分布模式可以反映面积和售价的关系。
- 如果点大致沿一条向上的趋势排列,说明面积和售价呈正相关(面积越大,售价越高)。
- 颜色编码:通过渐变色来增强视觉效果,直观区分不同居住面积的房屋。
- 深色主题:自定义背景和字体颜色,创建简洁且美观的深色风格图表。
7. 展示不同年份的房屋售价趋势以及每年的平均房价
yearly_avg_sale_price = df.groupby('YrSold')['SalePrice'].mean()yearly_avg_sale_price
YrSold
2006 182549.458599
2007 186063.151976
2008 177360.838816
2009 179432.103550
2010 177393.674286
Name: SalePrice, dtype: float64
按 YrSold 列(房屋售出年份)对数据集进行分组。
fig13 = px.box(df, x='YrSold', y='SalePrice',title='Sale Price Trends Over the Years',points=False,color_discrete_sequence=['green'])fig13.add_trace(px.line(x = yearly_avg_sale_price.index,y = yearly_avg_sale_price.values).data[0])fig13.update_traces(line=dict(color='purple', width=4),selector=dict(type='scatter', mode='lines'))for year, avg_price in yearly_avg_sale_price.items():fig13.add_annotation(x=year,y=avg_price,text=f"{avg_price:,.0f}",font=dict(color='white'),showarrow=False,bgcolor='rgba(128, 0, 128, 0.6)')fig13.update_layout(plot_bgcolor = 'rgb(30, 30, 30)',paper_bgcolor = 'rgb(30, 30, 30)',font = dict(color='white'),xaxis_title = 'Year Sold',yaxis_title = 'Sale Price'
)fig13.show()

这段代码创建了一个结合箱线图和折线图的可视化图表,用于展示不同年份的房屋售价趋势以及每年的平均房价。以下是逐步解释:
1. 绘制箱线图
fig13 = px.box(df, x='YrSold', y='SalePrice',title='Sale Price Trends Over the Years',points=False,color_discrete_sequence=['green'])
-
px.box:- 绘制一个箱线图,展示数据的分布、离散点和主要统计指标(如四分位数、中位数等)。
-
参数:
x='YrSold':将售出年份(YrSold)作为横轴。y='SalePrice':将房屋售价(SalePrice)作为纵轴。title='Sale Price Trends Over the Years':设置图表标题。points=False:隐藏散点(默认情况下,箱线图可以显示离群点)。color_discrete_sequence=['green']:将箱线图的颜色设置为绿色。
2. 添加折线图(每年的平均房价)
fig13.add_trace(px.line(x=yearly_avg_sale_price.index,y=yearly_avg_sale_price.values).data[0])
-
使用
px.line绘制每年平均房价的折线图。x=yearly_avg_sale_price.index:年份(YrSold)。y=yearly_avg_sale_price.values:每年的平均房价。.data[0]:从px.line图表中提取第一条数据(折线)。
-
add_trace:- 将折线图添加到箱线图中,形成组合图表。
3. 设置折线样式
fig13.update_traces(line=dict(color='purple', width=4),selector=dict(type='scatter', mode='lines'))
update_traces:- 更新折线样式。
line=dict(color='purple', width=4):将折线的颜色设置为紫色,宽度设为 4。selector=dict(type='scatter', mode='lines'):只选择类型为折线的图元进行更新。
4. 添加每年平均房价的标注
for year, avg_price in yearly_avg_sale_price.items():fig13.add_annotation(x=year,y=avg_price,text=f"{avg_price:,.0f}",font=dict(color='white'),showarrow=False,bgcolor='rgba(128, 0, 128, 0.6)')
-
add_annotation:- 在每年的折线上添加平均房价的标注。
-
参数:
x=year:标注对应的年份。y=avg_price:标注对应的平均房价。text=f"{avg_price:,.0f}":显示格式化后的房价(逗号分隔,保留整数)。font=dict(color='white'):设置文字颜色为白色。showarrow=False:隐藏箭头,只显示文字。bgcolor='rgba(128, 0, 128, 0.6)':设置标注背景为半透明紫色。
5. 更新图表布局
fig13.update_layout(plot_bgcolor='rgb(30, 30, 30)',paper_bgcolor='rgb(30, 30, 30)',font=dict(color='white'),xaxis_title='Year Sold',yaxis_title='Sale Price'
)
- 布局设置:
plot_bgcolor='rgb(30, 30, 30)':设置绘图区域背景为深灰色。paper_bgcolor='rgb(30, 30, 30)':设置图表背景为深灰色。font=dict(color='white'):设置所有文字颜色为白色。xaxis_title='Year Sold':设置横轴标题为“Year Sold”。yaxis_title='Sale Price':设置纵轴标题为“Sale Price”。
6. 显示图表
fig13.show()
- 展示最终的组合图表。
总结功能
- 目标:展示房屋售价的年度趋势,包括房价的分布和平均值。
- 箱线图:显示每年的房价分布、波动情况(例如最低价、最高价、中位数)。
- 折线图:直观展示每年的平均房价趋势。
- 标注:对每年的平均房价进行强调,方便阅读。
- 样式:深色主题、高对比度折线和标注,使图表更易于解读。
通过这段代码,你可以更清晰地分析不同年份房价的变化趋势及其分布特性。
下一篇继续
相关文章:
kaggle比赛入门 - House Prices - Advanced Regression Techniques(第二部分)
本文承接上一篇 1. 分析住宅类型(BldgType)的分布以及它们与销售价格(SalePrice)的关系 # 1. distribution of dwelling types and their relation to sale prices # BldgType: Type of dwellingdwelling_types df[BldgType].v…...
数字图像处理:实验六
uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵…...
C++——list的了解和使用
目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…...
移动光猫怎么自己改桥接模式?
环境: 型号H3-8s 问题描述: 家里宽带用的是H3-8s 光猫,想改桥接模式。 解决方案: 1.默认管理员账号和密码: 账号:CMCCAdmin 密码:aDm8H%MdAWEB页面我试了登陆不了,显示错误 …...
jupyter配置说明
使用以下命令修改jupyter的配置文件参数: vim /root/.jupyter/jupyter_lab_config.py #这里填写远程访问的IP名,填*则默认是主机IP名 c.ServerApp.ip * # 这里的密码填写上面生成的密钥 c.ServerApp.password ************************************…...
MiniMax-01中Lightning Attention的由来(线性注意力进化史)
目录 引言原始注意力线性注意力因果模型存在的问题累加求和操作的限制Lightning AttentionLightning Attention-1Lightning Attention-2 备注 引言 MiniMax-01: Scaling Foundation Models with Lightning Attention表明自己是第一个将线性注意力应用到如此大规模的模型&#…...
Vue中的动态组件是什么?如何动态切换组件?
什么是动态组件? 动态组件是 Vue.js 中的一项强大功能,它允许开发者根据程序的状态或用户的操作,动态地切换组件。动态组件的优势在于,开发者可以根据具体需求灵活地渲染不同的组件,从而提高应用的通用性和可维护性。…...
Day33:字符串的切片
在 Python 中,**切片(Slicing)**是对字符串(以及其他序列类型,如列表、元组等)进行提取部分内容的强大工具。通过切片,你可以非常方便地提取字符串的子字符串、倒序字符串,甚至进行步…...
汽车网络信息安全-ISO/SAE 21434解析(中)
目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…...
rust feature h和 workspace相关知识 (十一)
feature 相关作用和描述 在 Rust 中,features(特性) 是一种控制可选功能和依赖的机制。它允许你在编译时根据不同的需求启用或禁用某些功能,优化构建,甚至改变代码的行为。Rust 的特性使得你可以轻松地为库提供不同的…...
从规则到神经网络:机器翻译技术的演进与未来展望
从规则到神经网络:机器翻译技术的演进与未来展望 引言 还记得早些年用翻译软件翻译一句简单的英文句子,却发现翻译结果让人啼笑皆非的日子吗?从“我喜欢吃苹果”被翻译成“我喜欢吃苹果电脑”,到今天的神经网络机器翻译(Neural Machine Translation, NMT)能够生成语义流…...
LLaMA-Factory 微调LLaMA3
LoRA介绍 LoRA(Low-Rank Adaptation)是一种用于大模型微调的技术, 通过引入低秩矩阵来减少微调时的参数量。在预训练的模型中, LoRA通过添加两个小矩阵B和A来近似原始的大矩阵ΔW,从而减 少需要更新的参数数量。具体来…...
Debian或Ubuntu系统中重置MySQL的root密码
你提供的步骤是针对在Debian或Ubuntu系统中重置MySQL的root密码的过程。以下是对你提供的步骤的详细说明和补充: 步骤 1.1 - 1.3:进入MySQL配置目录并使用debian-sys-maint账户登录MySQL # 进入MySQL配置目录 cd /etc/mysql/ # 使用vim编辑器打开debia…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.17 时间魔法:处理千万级时间序列的秘籍
1.17 时间魔法:处理千万级时间序列的秘籍 目录 #mermaid-svg-fa6SvjKCpmJ6C2BY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fa6SvjKCpmJ6C2BY .error-icon{fill:#552222;}#mermaid-svg-fa6SvjKCpmJ6…...
WPS数据分析000009
一、函数与数据透视表统计数据时效率差异 函数 F4绝对引用 数据透视表 二、数据透视表基础操作 数据透视表:一个快速的生成报表的工具 显示详细信息 方式一; 方式二: 移动数据透视表 删除数据透视表 复制粘贴数据透视表 留足空间,否则拖动字…...
Ansible自动化运维实战--script、unarchive和shell模块(6/8)
文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件,其提供了一…...
K8S 快速实战
K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…...
用Python和PyQt5打造一个股票涨幅统计工具
在当今的金融市场中,股票数据的实时获取和分析是投资者和金融从业者的核心需求之一。无论是个人投资者还是专业机构,都需要一个高效的工具来帮助他们快速获取股票数据并进行分析。本文将带你一步步用Python和PyQt5打造一个股票涨幅统计工具,不…...
linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...
猿人学第一题 js混淆源码乱码
首先检查刷新网络可知,m参数被加密,这是一个ajax请求 那么我们直接去定位该路径 定位成功 观察堆栈之后可以分析出来这应该是一个混淆,我们放到解码平台去还原一下 window["url"] "/api/match/1";request function…...
【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)
能源、电力与先进热力系统设计是指结合物理理论、工程技术和计算机模拟,对能源转换、利用和传输过程进行设计的学科领域。它涵盖了从能源的生产到最终的利用整个流程,旨在提高能源利用效率,减少能源消耗和环境污染。 重要信息 官网…...
对神经网络基础的理解
目录 一、《python神经网络编程》 二、一些粗浅的认识 1) 神经网络也是一种拟合 2)神经网络不是真的大脑 3)网络构建需要反复迭代 三、数字图像识别的实现思路 1)建立一个神经网络类 2)权重更新的具体实现 3&am…...
.strip()用法
.strip("") 是 Python 字符串方法 strip() 的一个用法,它会去除字符串两端指定字符集中的字符。 基本语法: string.strip([chars])string: 这是你要操作的字符串。chars: 可选参数,表示你想要去除的字符集(默认为空格…...
redis的分片集群模式
redis的分片集群模式 1 主从哨兵集群的问题和分片集群特点 主从哨兵集群可应对高并发写和高可用性,但是还有2个问题没有解决: (1)海量数据存储 (2)高并发写的问题 使用分片集群可解决,分片集群…...
【29】Word:李楠-学术期刊❗
目录 题目 NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…...
基于 AI Coding 「RTC + STT」 Web Demo
文章目录 1. 写在最前面1.1 旧测试流程1.2 新测试流程 2. Cursor 编程 vs Copilot 编程2.1 coding 速度2.2 coding 正确性 3. 碎碎念 1. 写在最前面 为了 Fix 语音转文字(STT)产品在 Json 协议支持上的问题,笔者需要将推送到 RTC 的数据按照…...
doris:Parquet导入数据
本文介绍如何在 Doris 中导入 Parquet 格式的数据文件。 支持的导入方式 以下导入方式支持 Parquet 格式的数据导入: Stream LoadBroker LoadINSERT INTO FROM S3 TVFINSERT INTO FROM HDFS TVF 使用示例 本节展示了不同导入方式下的 Parquet 格式使用方法…...
L2TP使用举例
下面是一个使用C和POSIX套接字API实现L2TP协议的简单示例。这个示例展示了如何创建一个L2TP客户端,连接到L2TP服务器并发送数据。请注意,这只是一个基本的示例,实际的L2TP实现会更复杂,通常需要处理更多的协议细节和错误处理。 L…...
dup2 + fgets + printf 实现文件拷贝
思路 将源文件的内容读取到内存中,然后将这些内容写入到目标文件。 1: 打开源文件、目标文件 fopen() 以读模式打开源文件。 open ()以写模式打开目标文件。 2: 读取源文件、写入目标文件 fgets ()从源文件中读取内容。 printf ()将内容写入目标文件。 printf…...
实验六 带函数查询和综合查询(1)
实验六 带函数查询和综合查询(1) 一、实验目的 1.掌握Management Studio的使用。 2.掌握带函数查询和综合查询的使用。 二、实验内容及要求 1统计年龄大于30岁的学生的人数。 select count(*) from student where year(getdate…...
