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()
  • 作用
    • 使用 groupbyBldgType(住宅类型)对数据分组。
    • 计算每种住宅类型对应的 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 中的所有售价值并逐一格式化。
  • 结果
    • 返回一个列表,其中每个元素是经过格式化的字符串表示住宅的平均售价。

总结

这段代码实现了以下功能:

  1. 统计住宅类型的分布dwelling_types)。
  2. 计算每种住宅类型的平均销售价格dwelling_prices)。
  3. 将住宅类型的平均销售价格格式化为易读的货币字符串格式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_objectsgo 模块)创建一个柱状图,展示住宅类型的分布。
  • 通过直观的可视化反映每种住宅类型的数量。

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)。
      • y = dwelling_types.values
        • 设置柱状图的 y 轴值,对应每种住宅类型的数量。
      • marker_color = 'rgb(76, 175, 80)'
        • 设置柱的颜色为绿色(RGB 值为 76, 175, 80)。
      • 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)。
      • paper_bgcolor='rgba(34, 34, 34, 1)'
        • 设置整个画布背景颜色为深灰色。
      • font=dict(color='white')
        • 设置字体颜色为白色。

展示图表
fig1.show()
  • fig1.show()
    • 在图形界面中渲染并展示生成的柱状图。

3. 总结

这段代码生成了一个高度自定义的柱状图,主要特点包括:

  1. 绿色柱子代表住宅类型的数量。
  2. 黑色边框使柱子更突出。
  3. 每个柱子顶部显示具体数量。
  4. 图表背景为深灰色,字体为白色,适合深色主题风格。

最终图表能够直观展示每种住宅类型的分布,适合在报告或仪表盘中展示。

在这里插入图片描述

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_objectsgo 模块)创建一个柱状图,展示不同建筑类型的平均售价
  • 通过可视化使用户能够直观地对比不同建筑类型的平均售价。

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)。
      • 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)。
      • paper_bgcolor='rgba(34, 34, 34, 1)'
        • 设置整个画布的背景颜色为深灰色。
      • font=dict(color='white')
        • 设置字体颜色为白色,使文本在深色背景下更清晰。

显示图表
fig2.show()
  • fig2.show()
    • 渲染并显示生成的柱状图。

3. 图表功能

  • x 轴:显示建筑类型(BldgType)。
  • y 轴:显示每种建筑类型的平均售价。
  • 每个柱子顶部显示格式化的平均售价值,增加可读性。
  • 使用深色背景和白色字体,使图表更美观且适合暗色主题的展示。

4. 总结

这段代码生成了一个对比不同建筑类型平均售价的柱状图:

  1. 通过柱子高度展示不同建筑类型的平均售价。
  2. 文本标签显示精确的平均售价数值(格式为 $xx,xxx.xx)。
  3. 颜色搭配和样式设计适合深色主题,增强了图表的可视化效果。

这种图表适合用来分析住宅类型与售价的关系,帮助用户快速发现售价的分布规律和显著差异。

在这里插入图片描述

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'
)
  1. px.bar():

    • 用于生成柱状图。
    • 输入的 xy 是柱状图的横轴和纵轴数据。
  2. 参数解析:

    • 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'
)
  1. update_traces():

    • 用于修改图表的柱子和标签样式。
  2. 参数解析:

    • texttemplate='$%{text:,.0f}':
      • 格式化柱子上的文本:
        • $:在金额前添加美元符号。
        • ,.0f:金额显示为千分位格式,且无小数位。
      • 示例:350000 会显示为 $350,000
    • textposition='outside':
      • 将文本显示在柱子外部。

调整纵轴
fig3.update_yaxes(title='Sale Price',tickprefix='$',tickformat=','
)
  1. update_yaxes():

    • 用于修改纵轴的样式。
  2. 参数解析:

    • 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'
)
  1. update_layout():

    • 用于修改图表的整体布局。
  2. 参数解析:

    • 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:数据源,包含 PropertyAgeSalePrice 两列。
  • 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()
  • 显示生成的散点图,供交互式观察数据。

代码的主要功能

  1. 展示房产年龄与售价之间的关系:每个点表示一套房产,横坐标为房产年龄,纵坐标为售价。
  2. 使用颜色编码房产年龄:通过颜色的渐变(浅紫到深紫),进一步可视化年龄数据的分布。
  3. 可视化趋势:图表帮助观察是否存在房产年龄与售价之间的趋势,比如:
    • 年龄大的房产售价是否更高或更低。
    • 不同年龄段的售价分布是否具有明显的模式。

可能的分析结果

  1. 如果点在低 PropertyAge 值附近聚集且售价较高:说明较新的房产更贵。
  2. 如果点在高 PropertyAge 值附近分布且售价较低:说明房产随着年龄增长,售价降低。
  3. 如果点分布均匀:说明房产年龄与售价的关系不显著。

在这里插入图片描述

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:数据集,包含 GrLivAreaSalePrice 的数据。
    • 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():渲染并显示图表。

总结功能

  1. 展示目标:图表可视化了房屋的地上居住面积(GrLivArea)与售价(SalePrice)之间的关系。
  2. 数据特点
    • 散点的分布模式可以反映面积和售价的关系。
    • 如果点大致沿一条向上的趋势排列,说明面积和售价呈正相关(面积越大,售价越高)。
  3. 颜色编码:通过渐变色来增强视觉效果,直观区分不同居住面积的房屋。
  4. 深色主题:自定义背景和字体颜色,创建简洁且美观的深色风格图表。

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()
  • 展示最终的组合图表。

总结功能

  1. 目标:展示房屋售价的年度趋势,包括房价的分布和平均值。
  2. 箱线图:显示每年的房价分布、波动情况(例如最低价、最高价、中位数)。
  3. 折线图:直观展示每年的平均房价趋势。
  4. 标注:对每年的平均房价进行强调,方便阅读。
  5. 样式:深色主题、高对比度折线和标注,使图表更易于解读。

通过这段代码,你可以更清晰地分析不同年份房价的变化趋势及其分布特性。

下一篇继续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎&#xff0c;它擅长进行事务处理&#xff0c;具有崩溃恢复的特性&#xff0c;在日常开发中使用非常广泛&#xff0c;其逻辑存储结构图如下所示&#xff0c; 下面是InnoDB架构图&#xf…

Redis高阶5-布隆过滤器

Redis布隆过滤器 ​ 由一个初始值都为零的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素 目的减少内存占用方式不保存数据信息&#xff0c;只是在内存中做一个是否存在的标记flag 布隆过滤器&#xff08;英语&#xff1a;Bloom Filter&#xff0…

DeepSeek学术题目选择效果怎么样?

论文选题 一篇出色的论文背后&#xff0c;必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊&#xff1b;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节&#xff0c;把大量时间花在写作上&#xff0c;选题时却像抓阄一样随便挑一…

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进&#xff0c;Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程&#xff0c;大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具&#xff0c;与 Docker 的结合进一步增强了开发…

Qt 5.14.2 学习记录 —— 이십 QFile和多线程

文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系&#xff0c;不过Qt也可以使用C&#xff0c;C&#xff0c;Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…

多版本并发控制:MVCC的作用和基本原理

多版本并发控制&#xff1a;MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前…

神经网络|(二)sigmoid神经元函数

【1】引言 在前序学习进程中&#xff0c;我们已经了解了基本的二元分类器和神经元的构成&#xff0c;文章学习链接为&#xff1a; 神经网络|(一)加权平均法&#xff0c;感知机和神经元-CSDN博客 在此基础上&#xff0c;我们认识到神经元本身在做二元分类&#xff0c;是一种非…

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法&#xff1a;通过type函数返回数值的类型&#xff0c;然后通过setValue来构造一个QVariant类型的返回值。 函数&#xff1a; QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化&#xff0c;而另一个BAHD酰基转移酶则仅催化紫草素的对映…

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为E:\Tools\…

【学术会议-第五届机械设计与仿真国际学术会议(MDS 2025) 】前端开发:技术与艺术的完美融合

重要信息 大会官网&#xff1a;www.icmds.net 大会时间&#xff1a;2025年02月28日-03月02日 大会地点&#xff1a;中国-大连 会议简介 2025年第五届机械设计与仿真国际学术会议&#xff08;MDS 2025) 将于2025年02月28-3月02日在中国大连召开。MDS 2025将围绕“机械设计”…

84,【8】BUUCTF WEB [羊城杯 2020]Blackcat

进入靶场 音乐硬控我3分钟 回去看源码 <?php // 检查 POST 请求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一个字段为空&#xff0c;则输出错误信息并终止脚本执行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(请提供 Black-C…

人工智能:从基础到前沿

目录 目录 1. 引言 2. 人工智能基础 2.1 什么是人工智能&#xff1f; 2.2 人工智能的历史 2.3 人工智能的分类 3. 机器学习 3.1 机器学习概述 3.2 监督学习 3.3 无监督学习 3.4 强化学习 4. 深度学习 4.1 深度学习概述 4.2 神经网络基础 4.3 卷积神经网络&#…

漏洞情报:为什么、要什么和怎么做

漏洞一直是网络攻防的焦点所在&#xff0c;因为漏洞直接或间接影响安全性的核心方面——权限。攻击者挖掘和利用漏洞&#xff0c;获取非授权的权限&#xff1b;防御方定位和消除漏洞&#xff0c;监测和阻断漏洞的利用&#xff0c;使攻击者无法利用漏洞达到其目的。漏洞信息本质…

leetcode——删除链表的倒数第N个节点(java)

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xf…

正则表达式以及Qt中的使用

目录 一、正则表达式 1、基本匹配&#xff1a; 2、元字符&#xff1a; 2.1 .运算符&#xff1a; 2.2 字符集&#xff1a; 2.3 重复次数&#xff1a; 2.4 量词{} 2.5 特征标群() 2.6 或运算符 2.7 \反斜线转码特殊字符 2.8 锚点 3、简写字符 4、零宽度断言 4.1 正…

流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理

概述 背景 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长&#xff0c;企业需要具备强大的数据集成能力来高效地处理和分析数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业快速实现多源数据的采集、…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅&#xff08;Pub/Sub&#xff09;消息系统&#xff0c;最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点&#xff0c;提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力&#xff0c;适用于大规模分布式系…