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.pswp.cn/web/67139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67139.shtml
英文地址,請注明出處:http://en.pswp.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;選題時卻像抓鬮一樣隨便挑一…

第五節 MATLAB命令

本節的內容將提供常用的一些MATLAB命令。 在之前的篇章中我們已經知道了MATLAB數值計算和數據可視化是一個交互式程序&#xff0c;在它的命令窗口中您可以在MATLAB提示符“>>”下鍵入命令。 MATLAB管理會話的命令 MATLAB提供管理會話的各種命令。如下表所示&#xff1a;…

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自己的一些類型更好配合。 管理寫入讀…

【全棧】SprintBoot+vue3迷你商城-擴展:vue3項目創建及目錄介紹

【全棧】SprintBootvue3迷你商城-擴展&#xff1a;vue3項目創建及目錄介紹 往期的文章都在這里啦&#xff0c;大家有興趣可以看一下 【全棧】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全棧】SprintBootvue3迷你商城&#xff08;2&#xff09; 【全棧】SprintBootvu…

使用Aardio庫在Python中創建桌面應用:簡單指南

引言 隨著軟件開發需求的不斷增長&#xff0c;開發者們需要更加靈活和高效的工具來快速構建應用程序。Python以其簡潔易讀的語法和強大的社區支持而聞名&#xff0c;但在創建圖形用戶界面&#xff08;GUI&#xff09;時&#xff0c;可能會遇到一些挑戰。Aardio作為一種輕量級的…

多版本并發控制: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酰基轉移酶則僅催化紫草素的對映…

Avalonia+ReactiveUI跨平臺路由:打造絲滑UI交互的奇幻冒險

一、引言 在當今數字化時代&#xff0c;跨平臺應用開發已成為大勢所趨。開發者們迫切需要一種高效、靈活的方式&#xff0c;能夠讓應用程序在不同操作系統上無縫運行&#xff0c;為用戶提供一致的體驗。Avalonia 和 ReactiveUI 的組合&#xff0c;宛如一對天作之合的舞者&…

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將圍繞“機械設計”…

《DeepSeek R1:開源大模型的破局者》

驚爆&#xff01;中國開源大模型震撼登場 在人工智能領域的激烈競爭中&#xff0c;一場震撼全球的技術革命正悄然發生。2025 年 1 月 20 日晚&#xff0c;一家來自中國的人工智能初創公司 ——DeepSeek&#xff08;深度求索&#xff09;&#xff0c;如同一顆耀眼的新星&#x…

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 卷積神經網絡&#…