本文承接上一篇
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()
- 展示最终的组合图表。
总结功能
- 目标:展示房屋售价的年度趋势,包括房价的分布和平均值。
- 箱线图:显示每年的房价分布、波动情况(例如最低价、最高价、中位数)。
- 折线图:直观展示每年的平均房价趋势。
- 标注:对每年的平均房价进行强调,方便阅读。
- 样式:深色主题、高对比度折线和标注,使图表更易于解读。
通过这段代码,你可以更清晰地分析不同年份房价的变化趋势及其分布特性。