本文承接上一篇
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()
- 展示最終的組合圖表。
總結功能
- 目標:展示房屋售價的年度趨勢,包括房價的分布和平均值。
- 箱線圖:顯示每年的房價分布、波動情況(例如最低價、最高價、中位數)。
- 折線圖:直觀展示每年的平均房價趨勢。
- 標注:對每年的平均房價進行強調,方便閱讀。
- 樣式:深色主題、高對比度折線和標注,使圖表更易于解讀。
通過這段代碼,你可以更清晰地分析不同年份房價的變化趨勢及其分布特性。