基于聚类与相关性分析对马来西亚房价数据进行分析
碎碎念:由于最近太忙了,更新的比较慢,提前祝大家新春快乐,万事如意!本数据集的下载地址,读者可以自行下载。
1.项目背景
本项目旨在对马来西亚房地产市场进行初步的数据分析,探索各州的房产市场特征。通过对房产中位数价格、每平方英尺价格和交易数量等指标的可视化,结合聚类分析和点二列相关性分析,试图揭示不同房产类型与市场趋势之间的关系。该分析可以帮助更好地理解市场的基本情况,并为后续研究或决策提供数据支持。
2.数据说明
字段 | 说明 |
---|---|
Township | 房产所在的市镇名称 |
Area | 房产所在的地区名称 |
State | 房产所在的州 |
Tenure | 土地所有权性质(如 Freehold 或 Leasehold) |
Type | 房产类型(如 Terrace House, Cluster House 等) |
Median_Price | 房产的中位数价格(单位:马币) |
Median_PSF | 每平方英尺的中位数价格(单位:马币) |
Transactions | 该地区的房产交易数量 |
3.Python库导入及数据读取
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.decomposition import PCA
from scipy.stats import pointbiserialr
data = pd.read_csv("/home/mw/input/01209371/malaysia_house_price_data_2025.csv")
4.数据预览及数据清洗
data.head()
Township | Area | State | Tenure | Type | Median_Price | Median_PSF | Transactions | |
---|---|---|---|---|---|---|---|---|
0 | SCIENTEX SUNGAI DUA | Tasek Gelugor | Penang | Freehold | Terrace House | 331800.0 | 304.0 | 593 |
1 | BANDAR PUTRA | Kulai | Johor | Freehold | Cluster House, Terrace House | 590900.0 | 322.0 | 519 |
2 | TAMAN LAGENDA TROPIKA TAPAH | Chenderiang | Perak | Freehold | Terrace House | 229954.0 | 130.0 | 414 |
3 | SCIENTEX JASIN MUTIARA | Bemban | Melaka | Freehold | Terrace House | 255600.0 | 218.0 | 391 |
4 | TAMAN LAGENDA AMAN | Tapah | Perak | Leasehold | Terrace House | 219300.0 | 168.0 | 363 |
print('查看数据信息:')
data.info()
查看数据信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2000 entries, 0 to 1999
Data columns (total 8 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 Township 2000 non-null object 1 Area 2000 non-null object 2 State 2000 non-null object 3 Tenure 2000 non-null object 4 Type 2000 non-null object 5 Median_Price 2000 non-null float646 Median_PSF 2000 non-null float647 Transactions 2000 non-null int64
dtypes: float64(2), int64(1), object(5)
memory usage: 125.1+ KB
characteristic = data.select_dtypes(include=['object']).columns
print('数据中分类变量的唯一值情况:')
for i in characteristic:print(f'{i}:')print(f'共有:{len(data[i].unique())}条唯一值')print(data[i].unique())print('-'*50)
数据中分类变量的唯一值情况:
Township:
共有:1946条唯一值
['SCIENTEX SUNGAI DUA' 'BANDAR PUTRA' 'TAMAN LAGENDA TROPIKA TAPAH' ...'TAMAN PUNCAK JELAPANG MAJU' 'TAMAN TIONG UNG SIEW''TAMAN DESA RISHAH INDAH']
--------------------------------------------------
Area:
共有:303条唯一值
['Tasek Gelugor' 'Kulai' 'Chenderiang' 'Bemban' 'Tapah' 'Tebrau''Pasir Gudang' 'Teluk Intan' 'Jasin' 'Kapar' 'Iskandar Puteri (Nusajaya)''Nilai' 'Skudai' 'Johor Bahru' 'Batu Pahat' 'Kluang' 'Ulu Tiram''Permas Jaya' 'Serendah' 'Chemor' 'Pagoh' 'Lenggeng' 'Perling' 'Penaga''Klang' 'Sungei Petai' 'Shah Alam' 'Padang Serai' 'Sitiawan' 'Ijok''Bukit Katil' 'Masai' 'Tampoi' 'Setia Alam' 'Kota Tinggi' 'Banting''Cheras' 'Tanjong Duabelas' 'Jalan Klang Lama (Old Klang Road)''Bukit Bintang' 'Rawang' 'Bandar Utama' 'Seri Iskandar' 'Ipoh' 'Senai''Tanjong Minyak' 'Labu' 'Jimah' 'Sungai Bakap' 'Batu Caves''Damansara Perdana' 'Kuantan' 'Kampar' 'Seremban 2' 'Pasir Panjang''Kijal' 'Segamat' 'Seri Kembangan' 'Rantau' 'Gurun' 'Dengkil''Subang Jaya' 'Sungai Petani' 'Puchong' 'Kajang' 'Lunas' 'Gopeng''Kepala Batas' 'Bandar Puncak Alam' 'Bangi' 'Bandar Sri Damansara''Kuala Pilah' 'Linggi' 'Bandar Sunway' 'Telok Panglima Garang' 'Beranang''Taman Tun Dr Ismail' 'Kamunting' 'Bandar Sungai Long' 'Sri Petaling''Pengerang' 'Jalan Kuching' 'Batu Arang' 'Kota Samarahan' 'Miri''Semenyih' 'Petaling Jaya' 'Simpang Ampat' 'Krubong' 'Taiping''Kota Damansara' 'Nibong Tebal' 'Bukit Mertajam' 'Wangsa Maju' 'Papar''Telok Kemang' 'Hulu Terengganu' 'Lumut' 'Merlimau' 'Ulu Klang''Damansara Heights' 'Seremban' 'Sabak Bernam' 'Parit Buntar''Seberang Jaya' 'Kepong' 'Bandar Kinrara' 'Gerisek' 'Tampin' 'Ayer Itam''Bahau' 'KLCC' 'Lukut' 'Batang Kali' 'Sungai Jawi' 'Selayang''Simpang Pulai' 'Batu Gajah' 'Sepang' 'Kuching' 'Kulim' 'Kerteh' 'Ampang''Ayer Molek' 'Bidor' 'Bayan Baru' 'Senggarang' 'Ampangan' 'Gelang Patah''Sungai Siput' 'Kota Kinabalu' 'Penampang' 'Ara Damansara' 'Segambut''Tawau' 'Bukit Rambai' 'Rasa' 'Simpang Rengam' 'Duyong' 'Mont Kiara''Durian Tunggal' 'Sibu' 'Alor Setar' 'Bachang' 'Balai Panjang''Hulu Lepar' 'Saujana Utama' 'Bukit Jalil' 'Georgetown' 'Juasseh''Sungai Rambai' 'Arau' 'Jelutong' 'Perai' 'Sungai Karang' 'Ulu Bernam''Paya Rumput' 'Sandakan' 'Tronoh' 'Kuala Terengganu' 'Setapak' 'Rasah''Kuala Selangor' 'Tanjong Tualang' 'Raub' 'Cyberjaya' 'Butterworth''Port Klang' 'Menglembu' 'Cheng' 'Sungai Buloh' 'Kuala Ibai''Bandar Sri Sendayan' 'Bayan Lepas' 'Bandar Tasik Selatan' 'Labuan''Senawang' 'Bukit Baru' 'Tanjong Tokong''Kampung Kerinchi (Bangsar South)' 'Kuala Kubu Baru' 'Bandar Enstek''Batu Berendam' 'Alor Gajah' 'Pandamaran' 'Sungai Ara' 'Dutamas''Sikamat' 'Tambun' 'Glenmarie' 'Muar' 'Mentakab' 'Pusing' 'Jenjarom''Pontian' 'Sungai Dua' 'Kuala Lipis' 'Batu Kawan' 'Lahat' 'Besut''Bukit Kepayang' 'Kuala Kedah' 'Port Dickson' 'KL Sentral' 'Sentul''Kuala Kangsar' 'Tangkak' 'Klebang' 'Kuchai Lama' 'Seri Manjong''Melaka City' 'Gelugor' 'Mantin' 'Bintulu' 'Hutan Melintang' 'Bangsar''Bagan Serai' 'Masjid Tanah' 'Balakong' 'Tuaran' 'Batu Ferringhi''Rompin' 'Tropicana' 'Bandar Menjalara' 'Bakri' 'Putrajaya' 'Taman Desa''Bukit Jambul' 'Desa Petaling' 'Kemaman' 'Kuala Ketil' 'Merbok''Sungai Lalang' 'Sungai Besi' 'Relau' 'Tanjung Bungah' 'Damansara Damai''Bedong' 'Jitra' 'Bentong' 'Teloi Kiri' 'Jementah' 'Paloh' 'Setiawangsa''Kubang Semang' 'Pantai' 'Genting Highlands' 'Jalan Ipoh' 'Bukit Minyak''Padang Enggang' 'Teras' 'Salak Selatan' 'Lahad Datu' 'Dungun''Sungai Udang' 'Triang' 'Desa ParkCity' 'KL City' 'Hulu Langat' 'Gurney''Kelana Jaya' 'Pengkalan Hulu' 'Kuah' 'Kota Marudu' 'Padang Rengas''Yong Peng' 'Tanjong Kling' 'Permatang Pauh' 'Jinjang' 'Labis' 'Umbai''Cherang Ruku' 'Saujana' 'Pekan' 'Simpang Pertang' 'Limbang' 'Paroi''Hulu Selangor' 'Brickfields' 'Balik Pulau' 'Bertam' 'Batu Kurau''Chenor' 'Ulu Langat' 'Simpang' 'Mersing' 'Juru' 'Pokok Sena' 'Rembau''Mutiara Damansara' 'Sungei Baru Tengah' 'Ampang Hilir' 'City Centre''Sri Hartamas' 'Kota Sarang Semut' 'Teluk Kumbar' 'Bandar Baharu' 'Gemas''Sungai Besar' 'Gerik' 'Sri Aman' 'Kuala Sungai Baru' 'Machang']
--------------------------------------------------
State:
共有:16条唯一值
['Penang' 'Johor' 'Perak' 'Melaka' 'Selangor' 'Negeri Sembilan' 'Kedah''Kuala Lumpur' 'Pahang' 'Terengganu' 'Sarawak' 'Sabah' 'Perlis' 'Labuan''Putrajaya' 'Kelantan']
--------------------------------------------------
Tenure:
共有:4条唯一值
['Freehold' 'Leasehold' 'Freehold, Leasehold' 'Leasehold, Freehold']
--------------------------------------------------
Type:
共有:46条唯一值
['Terrace House' 'Cluster House, Terrace House' 'Terrace House, Semi D''Terrace House, Cluster House' 'Cluster House' 'Bungalow, Terrace House''Service Residence' 'Semi D, Terrace House' 'Flat''Cluster House, Semi D' 'Terrace House, Semi D, Town House''Semi D, Cluster House' 'Apartment' 'Semi D, Terrace House, Bungalow''Semi D' 'Terrace House, Town House' 'Semi D, Town House, Terrace House''Condominium' 'Semi D, Bungalow' 'Bungalow, Semi D' 'Bungalow''Town House, Terrace House, Semi D' 'Terrace House, Semi D, Bungalow''Bungalow, Terrace House, Semi D' 'Terrace House, Bungalow''Cluster House, Terrace House, Semi D''Semi D, Terrace House, Cluster House' 'Semi D, Cluster House, Bungalow''Bungalow, Town House' 'Town House, Terrace House' 'Town House, Semi D''Terrace House, Bungalow, Semi D' 'Town House' 'Flat, Condominium''Town House, Bungalow, Terrace House' 'Apartment, Flat''Semi D, Bungalow, Terrace House' 'Town House, Semi D, Terrace House''Town House, Bungalow' 'Condominium, Service Residence''Cluster House, Bungalow' 'Flat, Apartment''Bungalow, Semi D, Terrace House' 'Semi D, Terrace House, Town House''Cluster House, Town House, Terrace House' 'Semi D, Town House']
--------------------------------------------------
由于Township、Area的唯一值特别多,对后续的分析意义不大,考虑删除,只保留State作为地理信息,而Type里存在大量组合的数据,比如’Semi D, Terrace House’这种,这里考虑拆分看看,究竟真正涉及的Type有多少种类型。
# 提取所有的房产类型,并将其拆分为单独的词
all_types = []# 按照 ", " 来拆分每个类型中的词汇
for property_type in data['Type']:types = property_type.split(", ") # 根据逗号加空格拆分all_types.extend(types)# 统计每个词的出现频次
unique_types = set(all_types) # 获取唯一类型# 显示所有唯一的房产类型
unique_types
{'Apartment','Bungalow','Cluster House','Condominium','Flat','Semi D','Service Residence','Terrace House','Town House'}
可以看到,真正的Type并不多,这里考虑把这些转为0-1二值变量,表示该样本数据是否有某个类型,这样也不会导致维度爆炸,同样的针对Tenure特征也是一样的处理。
# 创建每个房产类型的 0-1 二值变量
for property_type in unique_types:data[property_type] = data['Type'].apply(lambda x: 1 if property_type in x else 0)
# 提取所有的产权类型,并将其拆分为单独的词
all_tenure = []# 按照 ", " 来拆分每个类型中的词汇
for property_tenure in data['Tenure']:tenure = property_tenure.split(", ") # 根据逗号加空格拆分all_tenure.extend(tenure)# 统计每个词的出现频次
unique_tenure = set(all_tenure) # 获取唯一类型# 显示所有唯一的产权类型
unique_tenure
{'Freehold', 'Leasehold'}
# 创建每个房产类型的 0-1 二值变量
for property_tenure in unique_tenure:data[property_tenure] = data['Tenure'].apply(lambda x: 1 if property_tenure in x else 0)
# 删除 'Township', 'Area', 'Type' 列
data.drop(columns=['Township', 'Area', 'Type','Tenure'], inplace=True)data.head()
State | Median_Price | Median_PSF | Transactions | Terrace House | Bungalow | Service Residence | Town House | Cluster House | Flat | Semi D | Condominium | Apartment | Leasehold | Freehold | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Penang | 331800.0 | 304.0 | 593 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | Johor | 590900.0 | 322.0 | 519 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | Perak | 229954.0 | 130.0 | 414 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
3 | Melaka | 255600.0 | 218.0 | 391 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
4 | Perak | 219300.0 | 168.0 | 363 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
5.描述性分析
data.describe(include='all')
State | Median_Price | Median_PSF | Transactions | Terrace House | Bungalow | Service Residence | Town House | Cluster House | Flat | Semi D | Condominium | Apartment | Leasehold | Freehold | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 2000 | 2.000000e+03 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.00000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 | 2000.000000 |
unique | 16 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
top | Selangor | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
freq | 545 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
mean | NaN | 4.906854e+05 | 328.862500 | 28.091500 | 0.639500 | 0.048500 | 0.048500 | 0.018000 | 0.04800 | 0.067500 | 0.142000 | 0.084500 | 0.100000 | 0.341000 | 0.688000 |
std | NaN | 4.686322e+05 | 193.281739 | 37.702385 | 0.480266 | 0.214874 | 0.214874 | 0.132984 | 0.21382 | 0.250949 | 0.349137 | 0.278206 | 0.300075 | 0.474164 | 0.463426 |
min | NaN | 2.704900e+04 | 38.000000 | 10.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | NaN | 2.699500e+05 | 201.000000 | 12.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
50% | NaN | 3.900000e+05 | 293.000000 | 16.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
75% | NaN | 5.735000e+05 | 412.000000 | 28.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.00000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 1.000000 |
max | NaN | 1.142050e+07 | 3017.000000 | 593.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
state_counts = data['State'].value_counts()
plt.figure(figsize=(10, 6))plt.bar(state_counts.index, state_counts.values, edgecolor='black')
# 添加标题和标签
plt.title('各州房产分布', fontsize=16)
plt.xlabel('州', fontsize=12)
plt.ylabel('数量', fontsize=12)# 在柱子上方标注数量
for p in plt.gca().patches:plt.gca().annotate(f'{int(p.get_height())}', (p.get_x() + p.get_width() / 2., p.get_height()),ha='center', va='center', fontsize=11, color='black', xytext=(0, 5),textcoords='offset points')plt.xticks(rotation=45) # 让x轴标签倾斜,防止重叠
plt.tight_layout() # 优化图像布局
plt.show()

# 提取房屋类型
type_columns = data.iloc[:, 4:13]# 统计每种类型的数量
type_counts = type_columns.sum().sort_values(ascending=False)plt.figure(figsize=(10, 6))ax = sns.barplot(x=type_counts.index, y=type_counts.values)
plt.title('房产类型数量分布', fontsize=16)
plt.xlabel('房产类型', fontsize=12)
plt.ylabel('数量', fontsize=12)# 添加标签
for p in ax.patches:ax.annotate(f'{int(p.get_height())}',(p.get_x() + p.get_width() / 2., p.get_height()),ha='center', va='center', fontsize=11, color='black', xytext=(0, 5),textcoords='offset points')plt.tight_layout()
plt.show()

tenure_counts = data[['Leasehold', 'Freehold']].sum()plt.figure(figsize=(8, 8))
plt.pie(tenure_counts,labels=tenure_counts.index,autopct='%1.1f%%',startangle=90,colors=plt.cm.Paired.colors[:len(tenure_counts)],pctdistance=0.85, # 将百分比的标签放得更近圆心labeldistance=1.1, # 增加标签与饼图的距离
)# 添加标题并保证饼图是圆形
plt.title('房产所有权类型分布', fontsize=14)
plt.axis('equal') # 保证饼图是圆形plt.show()

# 设置画布大小
plt.figure(figsize=(15, 5))# 绘制 Median_Price 的直方图和核密度曲线
plt.subplot(1, 3, 1)
sns.histplot(data['Median_Price'], kde=True, color='skyblue', bins=30)
plt.title('房产中位数价格分布', fontsize=14)
plt.xlabel('中位数价格(马币)', fontsize=12)
plt.ylabel('频数', fontsize=12)# 绘制 Median_PSF 的直方图和核密度曲线
plt.subplot(1, 3, 2)
sns.histplot(data['Median_PSF'], kde=True, color='lightcoral', bins=30)
plt.title('每平方英尺价格分布', fontsize=14)
plt.xlabel('每平方英尺价格(马币)', fontsize=12)
plt.ylabel('频数', fontsize=12)# 绘制 Transactions 的直方图和核密度曲线
plt.subplot(1, 3, 3)
sns.histplot(data['Transactions'], kde=True, color='lightgreen', bins=30)
plt.title('交易数量分布', fontsize=14)
plt.xlabel('交易数量', fontsize=12)
plt.ylabel('频数', fontsize=12)# 调整布局
plt.tight_layout()
plt.show()

- Selangor(雪兰莪州) 和 Johor(柔佛州) 是房产数量最多的地区,合计达到45%以上,占据明显优势。
- 房产分布存在较大的区域差异,例如 Labuan(纳闽) 和 Perlis(玻璃市) 等州的房产数量极少,仅为1个。
- 房产类型以 Terrace House(排屋) 为主,数量高达1279,占主导地位。相比之下, Semi D(半独立别墅) 和 Apartment(公寓) 数量分别为284和200。
- 大多数房产为 Freehold(永久产权),占66.9%,而 Leasehold(租赁产权) 占比为33.1%。这表明永久产权房产更受购房者青睐。
- 房产中位数价格:价格集中在较低的区间,大多数房产价格低于 2,000,000 马币,但右侧存在少数极高价格的房产,表现出右偏态,可能与高端市场有关。
- 每平方英尺价格:大多数房产的每平方英尺价格集中在 200-600 马币 范围内,表明市场主要集中在相对中低端。
- 交易数量:交易数量大多数集中在 50以下,但少数地区的交易数量较高,可能与特定地区或房产类型的高市场需求有关。
state_mean = data.groupby('State')[['Median_Price', 'Median_PSF', 'Transactions']].mean()
normalized_means = state_mean.apply(lambda x: (x - x.min()) / (x.max() - x.min()))
# 绘制热力图
plt.figure(figsize=(12, 8))
sns.heatmap(normalized_means, cmap='coolwarm',center=0.5, vmin=0, vmax=1,annot=state_mean.round(2), # 显示原始值而不是归一化后的值fmt='.2f',cbar_kws={'label': '标准化得分'})
plt.title('各州房产中位数价格、每平方英尺价格和交易数量的热力图')
plt.xlabel('指标')
plt.ylabel('州')
plt.tight_layout()
plt.show()

binary_columns = data.columns[4:] # 根据实际数据修改起始列state_percentage = data.groupby('State')[binary_columns].mean() * 100 # 计算占比,转换为百分比# 绘制热力图
plt.figure(figsize=(15, 10))
sns.heatmap(state_percentage, annot=True, cmap='coolwarm', fmt='.2f', cbar=True)
plt.title('各州0-1变量占比的热力图')
plt.xlabel('房产特征')
plt.ylabel('州')
plt.tight_layout()
plt.show()

1. 高房价和高交易量
- Kuala Lumpur(吉隆坡) 在房产中位数价格(Median_Price)和每平方英尺价格(Median_PSF)上均居首位,显示出其作为马来西亚高端房地产市场的主导地位。同时,吉隆坡的交易量也在较高水平,表明其房产市场非常活跃。
- Selangor(雪兰莪) 和 Johor(柔佛) 的房产中位数价格和每平方英尺价格也较高,且两地的交易数量均较大,显示出它们作为马来西亚主要的房地产市场之一,且在多项指标上表现出强劲的市场需求。
2. 低房价和低交易量
- Labuan(纳闽) 和 Terengganu(登嘉楼) 的房产中位数价格和每平方英尺价格都在较低水平,且交易数量也较低,这可能是由于这些地区房地产市场需求较少,房价较低且交易不活跃。
- Kedah(吉打) 和 Kelantan(吉兰丹) 在房价和交易量上也较低,表明这些地区的房地产市场相对较为冷清,可能需要政策支持或其他市场刺激措施。
3. 房产特征的区域差异
- Service Residence(服务公寓) 和 Condominium(公寓) 在像 Kuala Lumpur(吉隆坡) 这样的高房价城市中占据主导地位,且占比较高。特别是在吉隆坡,服务公寓的占比接近 100%,说明它们在这些高端市场中非常受欢迎。
- Terrace House(排屋) 和 Cluster House(集体别墅) 在柔佛州和槟城等地的占比也较高,这些地区可能偏向于中低价房产市场,且交易量较大。
- Leasehold(租赁产权) 在一些州,如 Perak(霹雳) 和 Sarawak(砂拉越) 中占比较大,可能表明这些地区的土地使用权更多以租赁为主。
4. 市场的稳定性与差异
- Perlis(玻璃市) 和 Putrajaya(布城) 显示出较高的 Freehold(永久产权) 占比,尤其是 Putrajaya(布城),显示出这些地区的高端市场可能依赖于永久产权的吸引力。
- Bungalow(独立别墅) 和 Semi D(半独立别墅) 在一些州,如 Johor(柔佛) 和 Penang(槟城) 中占比较高,这表明这些类型的房产在这些州较为常见,且市场需求较强。
6.聚类分析
data_scaled = data[['Median_Price', 'Median_PSF','Transactions']]
# 对数据进行标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data_scaled)
# 使用肘部法则来确定最佳聚类数
inertia = []
silhouette_scores = []
k_range = range(2, 11)
for k in k_range:kmeans = KMeans(n_clusters=k, random_state=15).fit(data_scaled)inertia.append(kmeans.inertia_)silhouette_scores.append(silhouette_score(data_scaled, kmeans.labels_))
plt.figure(figsize=(15,5))plt.subplot(1, 2, 1)
plt.plot(k_range, inertia, marker='o')
plt.xlabel('聚类中心数目')
plt.ylabel('惯性')
plt.title('肘部法则图')plt.subplot(1, 2, 2)
plt.plot(k_range, silhouette_scores, marker='o')
plt.xlabel('聚类中心数目')
plt.ylabel('轮廓系数')
plt.title('轮廓系数图')plt.tight_layout()
plt.show()

这里选择分成3类。
kmeans = KMeans(n_clusters=3, random_state=15)
kmeans.fit(data_scaled)
# 获取聚类标签
cluster_labels = kmeans.labels_
# 将聚类标签添加到原始数据中以进行分析
data['Cluster'] = cluster_labels
# 使用 PCA 将数据降维到 2 维
pca = PCA(n_components=2)
data_pca = pca.fit_transform(data_scaled)# 将 PCA 结果转为 DataFrame,并添加聚类标签
data_pca_df = pd.DataFrame(data_pca, columns=['PCA1', 'PCA2'])
data_pca_df['Cluster'] = cluster_labels# 绘制 PCA 降维后的聚类结果
plt.figure(figsize=(12, 8))
sns.scatterplot(x=data_pca_df['PCA1'], y=data_pca_df['PCA2'], hue=data_pca_df['Cluster'], palette='viridis', legend='full')
plt.title(f'K-Means聚类结果 - PCA 降维展示')
plt.xlabel('主成分 1 (PCA1)')
plt.ylabel('主成分 2 (PCA2)')
plt.legend(title='Cluster', loc='upper left')
plt.grid(True)
plt.show()

感觉分成3类是比较合理的选择,各类之间边界明显。
# 对每个特征进行归一化处理(每个特征单独归一化)
cluster_means = data.groupby('Cluster')[['Median_Price', 'Median_PSF','Transactions']].mean()
# 对每个特征进行归一化处理(每个特征单独归一化)
normalized_means = cluster_means.apply(lambda x: (x - x.min()) / (x.max() - x.min()))plt.figure(figsize=(10, 6))
sns.heatmap(normalized_means.T, cmap='coolwarm',center=0.5, vmin=0, vmax=1,annot=cluster_means.T.round(2), # 显示原始值而不是归一化后的值fmt='.2f',cbar_kws={'label': '标准化得分'})plt.xlabel('聚类')
plt.title('各聚类特征分布热力图(颜色深浅表示在该特征中的相对大小)')
plt.tight_layout()
plt.show()

聚类 0
- Median_Price:价格中等(69,164.22),属于中等价房产类别。
- Median_PSF:每平方英尺价格中等(463.20),表明单位面积价格接近平均水平。
- Transactions:交易数量最高(48.09),反映该类房产可能位于活跃的市场区域。
聚类 1
- Median_Price:价格非常低(33,088.74),为房产中价格最低的一类。
- Median_PSF:单位面积价格最低(246.14),可能是面积较大的房产。
- Transactions:交易数量最低(20.07),表明这类房产市场需求较低。
聚类 2
- Median_Price:价格非常高(2,237,694.95),属于高端房产类别。
- Median_PSF:每平方英尺价格最高(963.17),表明这类房产单位面积的价格较高,可能是高端物业。
- Transactions:交易数量中等(23.98),表明高端房产市场需求适中,但不如低价房产活跃。
7.相关性分析
target_variable = 'Median_Price'
binary_variables = data.columns[4:-1]correlation_results = []# 对每个 0-1 变量计算点二列相关性
for binary_var in binary_variables:correlation, p_value = pointbiserialr(data[binary_var], data[target_variable])correlation_results.append({'Variable': binary_var,'Correlation': correlation,'P-Value': p_value})correlation_results_df = pd.DataFrame(correlation_results)
print('房产的中位数价格与其他0-1变量之间点二列相关性分析结果:')
correlation_results_df
房产的中位数价格与其他0-1变量之间点二列相关性分析结果:
Variable | Correlation | P-Value | |
---|---|---|---|
0 | Terrace House | -0.006469 | 7.724725e-01 |
1 | Bungalow | 0.200630 | 1.315120e-19 |
2 | Service Residence | 0.151892 | 8.597954e-12 |
3 | Town House | 0.012986 | 5.616265e-01 |
4 | Cluster House | 0.046554 | 3.736301e-02 |
5 | Flat | -0.190715 | 7.782496e-18 |
6 | Semi D | 0.099457 | 8.345519e-06 |
7 | Condominium | 0.108958 | 1.038324e-06 |
8 | Apartment | -0.145906 | 5.520686e-11 |
9 | Leasehold | -0.133536 | 2.034471e-09 |
10 | Freehold | 0.138288 | 5.284742e-10 |
根据房产中位数价格与其他 0-1 变量之间点二列相关性分析结果发现:
-
正相关影响:
- Bungalow(独立别墅)、Service Residence(服务公寓)、Freehold(永久产权) 对房产中位数价格有正相关影响,表明这些类型房产通常价格较高,是高端房产的代表。
-
负相关影响:
- Flat(廉租房/公寓式房产)、Apartment(公寓)、Leasehold(租赁产权) 对房产中位数价格有负相关影响,表明这些类型房产通常价格较低,属于中低价市场。
-
无显著相关影响:
- Terrace House(排屋)、Condominium(公寓楼)、Semi D(半独立别墅)、Town House(联排别墅)、Cluster House(集体别墅) 对房产中位数价格无显著相关影响,说明这些类型房产价格变化较为稳定。
target_variable = 'Median_PSF'
correlation_results = []# 对每个 0-1 变量计算点二列相关性
for binary_var in binary_variables:correlation, p_value = pointbiserialr(data[binary_var], data[target_variable])correlation_results.append({'Variable': binary_var,'Correlation': correlation,'P-Value': p_value})correlation_results_df = pd.DataFrame(correlation_results)
print('每平方英尺的中位数价格与其他0-1变量之间点二列相关性分析结果:')
correlation_results_df
每平方英尺的中位数价格与其他0-1变量之间点二列相关性分析结果:
Variable | Correlation | P-Value | |
---|---|---|---|
0 | Terrace House | -0.219735 | 2.720014e-23 |
1 | Bungalow | -0.020702 | 3.547983e-01 |
2 | Service Residence | 0.404071 | 2.018608e-79 |
3 | Town House | -0.005334 | 8.115854e-01 |
4 | Cluster House | -0.034023 | 1.282435e-01 |
5 | Flat | -0.117332 | 1.423677e-07 |
6 | Semi D | -0.116074 | 1.936375e-07 |
7 | Condominium | 0.236312 | 8.781923e-27 |
8 | Apartment | 0.014348 | 5.213337e-01 |
9 | Leasehold | -0.139131 | 4.139900e-10 |
10 | Freehold | 0.124567 | 2.282456e-08 |
根据每平方英尺的中位价格与其他 0-1 变量之间点二列相关性分析结果发现:
-
正相关影响:
- Service Residence(服务公寓)、Condominium(公寓楼)、Freehold(永久产权) 对每平方英尺的中位价格有正相关影响,表明这些房产类型的单位面积价格更高,通常为高端房产。
-
负相关影响:
- Terrace House(排屋)、Flat(廉租房/公寓式房产)、Semi D(半独立别墅)、Leasehold(租赁产权) 对每平方英尺的中位价格有负相关影响,表明这些房产类型的单位面积价格更低,更适合中低价市场。
-
无显著相关影响:
- Transactions(交易数量)、Bungalow(独立别墅)、Apartment(公寓)、Town House(联排别墅)、Cluster House(集体别墅) 对每平方英尺的中位价格无显著相关影响,说明这些类型房产的单位面积价格较为稳定。
target_variable = 'Transactions'
correlation_results = []# 对每个 0-1 变量计算点二列相关性
for binary_var in binary_variables:correlation, p_value = pointbiserialr(data[binary_var], data[target_variable])correlation_results.append({'Variable': binary_var,'Correlation': correlation,'P-Value': p_value})correlation_results_df = pd.DataFrame(correlation_results)
print('房产交易数量与其他0-1变量之间点二列相关性分析结果:')
correlation_results_df
房产交易数量与其他0-1变量之间点二列相关性分析结果:
Variable | Correlation | P-Value | |
---|---|---|---|
0 | Terrace House | 0.172586 | 7.734399e-15 |
1 | Bungalow | -0.017406 | 4.365811e-01 |
2 | Service Residence | -0.028212 | 2.072595e-01 |
3 | Town House | -0.013100 | 5.582136e-01 |
4 | Cluster House | 0.131754 | 3.331929e-09 |
5 | Flat | -0.066956 | 2.736866e-03 |
6 | Semi D | -0.000760 | 9.729200e-01 |
7 | Condominium | -0.090734 | 4.832550e-05 |
8 | Apartment | -0.094240 | 2.429166e-05 |
9 | Leasehold | -0.070528 | 1.599190e-03 |
10 | Freehold | 0.068660 | 2.124288e-03 |
根据房产交易数量与其他 0-1 变量之间点二列相关性分析结果发现:
-
正相关影响:
- Terrace House(排屋)、Cluster House(集体别墅)、Freehold(永久产权) 对交易数量有正相关影响,表明这些类型的房产交易较为频繁,市场活跃度较高。
-
负相关影响:
- Condominium(公寓楼)、Apartment(公寓)、Flat(廉租房/公寓式房产)、Leasehold(租赁产权) 对交易数量有负相关影响,表明这些类型房产的交易频率较低,市场需求相对较小。
-
无显著相关影响:
- Service Residence(服务公寓)、Bungalow(独立别墅)、Semi D(半独立别墅)、Town House(联排别墅) 对交易数量无显著相关影响,说明这些房产类型对市场活跃度的贡献较小,交易较为稳定。
8.结论
基于对2000条房产数据的全面分析,本项目得出了以下主要结论:
1.描述性分析:
- Selangor(雪兰莪州) 和 Johor(柔佛州) 是房产数量最多的地区,合计达到45%以上,占据明显优势。
- 房产分布存在较大的区域差异,例如 Labuan(纳闽) 和 Perlis(玻璃市) 等州的房产数量极少,仅为1个。
- 房产类型以 Terrace House(排屋) 为主,数量高达1279,占主导地位。相比之下, Semi D(半独立别墅) 和 Apartment(公寓) 数量分别为284和200。
- 大多数房产为 Freehold(永久产权),占66.9%,而 Leasehold(租赁产权) 占比为33.1%。这表明永久产权房产更受购房者青睐。
- 房产中位数价格:价格集中在较低的区间,大多数房产价格低于 2,000,000 马币,但右侧存在少数极高价格的房产,表现出右偏态,可能与高端市场有关。
- 每平方英尺价格:大多数房产的每平方英尺价格集中在 200-600 马币 范围内,表明市场主要集中在相对中低端。
- 交易数量:交易数量大多数集中在 50以下,但少数地区的交易数量较高,可能与特定地区或房产类型的高市场需求有关。
- Kuala Lumpur(吉隆坡) 在房产中位数价格(Median_Price)和每平方英尺价格(Median_PSF)上均居首位,显示出其作为马来西亚高端房地产市场的主导地位。同时,吉隆坡的交易量也在较高水平,表明其房产市场非常活跃。
- Selangor(雪兰莪) 和 Johor(柔佛) 的房产中位数价格和每平方英尺价格也较高,且两地的交易数量均较大,显示出它们作为马来西亚主要的房地产市场之一,且在多项指标上表现出强劲的市场需求。
- Labuan(纳闽) 和 Terengganu(登嘉楼) 的房产中位数价格和每平方英尺价格都在较低水平,且交易数量也较低,这可能是由于这些地区房地产市场需求较少,房价较低且交易不活跃。
- Kedah(吉打) 和 Kelantan(吉兰丹) 在房价和交易量上也较低,表明这些地区的房地产市场相对较为冷清,可能需要政策支持或其他市场刺激措施。
- Service Residence(服务公寓) 和 Condominium(公寓) 在像 Kuala Lumpur(吉隆坡) 这样的高房价城市中占据主导地位,且占比较高。特别是在吉隆坡,服务公寓的占比接近 100%,说明它们在这些高端市场中非常受欢迎。
- Terrace House(排屋) 和 Cluster House(集体别墅) 在柔佛州和槟城等地的占比也较高,这些地区可能偏向于中低价房产市场,且交易量较大。
- Leasehold(租赁产权) 在一些州,如 Perak(霹雳) 和 Sarawak(砂拉越) 中占比较大,可能表明这些地区的土地使用权更多以租赁为主。
- Perlis(玻璃市) 和 Putrajaya(布城) 显示出较高的 Freehold(永久产权) 占比,尤其是 Putrajaya(布城),显示出这些地区的高端市场可能依赖于永久产权的吸引力。
- Bungalow(独立别墅) 和 Semi D(半独立别墅) 在一些州,如 Johor(柔佛) 和 Penang(槟城) 中占比较高,这表明这些类型的房产在这些州较为常见,且市场需求较强。
2.聚类分析:
将数据分为3类,其中:
-
聚类 0:中低价位房产:
- 价格较低,单位面积价格适中,交易数量最高。
- 适合普通购房者,市场需求较高,房产交易较为频繁。
-
聚类 1:低价房产:
- 总价和单位面积价格均最低,交易数量也最低。
- 可能是郊区或市场冷门地区的房产,市场需求较低。
-
聚类 2:高端房产:
- 总价和单位面积价格均非常高,交易数量适中。
- 适合高收入购房者,市场相对小众但稳定。
3.相关性分析:
- 根据房产中位数价格与其他 0-1 变量之间点二列相关性分析结果,发现:Bungalow(独立别墅)、Service Residence(服务公寓)、Freehold(永久产权) 对房产中位数价格有正相关影响,表明这些房产通常价格较高,属于高端市场;Flat(廉租房)、Apartment(公寓)、Leasehold(租赁产权) 对房产中位数价格有负相关影响,通常价格较低,适合中低价市场;Terrace House(排屋)、Condominium(公寓楼)、Semi D(半独立别墅)、Town House(联排别墅)、Cluster House(集体别墅) 对房产中位数价格影响较小,价格变化较稳定。
- 根据每平方英尺的中位价格与其他 0-1 变量之间点二列相关性分析结果,发现:Service Residence(服务公寓)、Condominium(公寓楼)、Freehold(永久产权) 对每平方英尺的价格有正相关影响,通常为高端房产;Terrace House(排屋)、Flat(廉租房)、Semi D(半独立别墅)、Leasehold(租赁产权) 对每平方英尺的价格有负相关影响,更适合中低价市场;Transactions(交易数量)、Bungalow(独立别墅)、Apartment(公寓)、Town House(联排别墅)、Cluster House(集体别墅) 对每平方英尺价格无显著相关影响,单位面积价格较为稳定。
- 根据房产交易数量与其他 0-1 变量之间点二列相关性分析结果,发现:Terrace House(排屋)、Cluster House(集体别墅)、Freehold(永久产权) 对交易数量有正相关影响,说明这些类型房产市场活跃,交易频繁;Condominium(公寓楼)、Apartment(公寓)、Flat(廉租房)、Leasehold(租赁产权) 对交易数量有负相关影响,说明市场需求较小,交易较少;Service Residence(服务公寓)、Bungalow(独立别墅)、Semi D(半独立别墅)、Town House(联排别墅) 对交易数量无显著影响,市场相对稳定。
相关文章:

基于聚类与相关性分析对马来西亚房价数据进行分析
碎碎念:由于最近太忙了,更新的比较慢,提前祝大家新春快乐,万事如意!本数据集的下载地址,读者可以自行下载。 1.项目背景 本项目旨在对马来西亚房地产市场进行初步的数据分析,探索各州的房产市…...
Java—工具类类使用
工具类的调用:工具类名.方法名 工具类的书写: 示例: 写一个遍历数组的工具类 import java.util.Arrays;public class ArrayUtil {private ArrayUtil() {} //用私有化构造方法不让外界创建关于它的对象//定义static静态方法,因…...
游戏开发领域 - 游戏引擎 UE 与 Unity
游戏引擎 游戏引擎是用于开发电子游戏的软件框架,它提供图形渲染、物理模拟、音频处理、动画系统、脚本编写等功能,帮助开发者高效创建电子游戏 但是,游戏引擎也不仅限于游戏开发,还广泛应用于其他领域,例如ÿ…...
[NVME] PMRCAP-Persistent Memory Region Capabilities
This register indicates capabilities of the Persistent Memory Region(持久内存区域) If the controller does not support the Persistent Memory Region feature, then this register shall be cleared to 0h BitsTypeResetDescription31:25RO 0hReserved24ROImpl Spec…...

Ollama windows安装
Ollama 是一个开源项目,专注于帮助用户本地化运行大型语言模型(LLMs)。它提供了一个简单易用的框架,让开发者和个人用户能够在自己的设备上部署和运行 LLMs,而无需依赖云服务或外部 API。这对于需要数据隐私、离线使用…...
vim操作简要记录
操作容易忘记,记录一下基本使用的 :wq保存退出 :w :q :q! :wq! i I a A 方向键 h左 j下 k上 l右 dd删除方行(这其实是剪切行操作,不过一般用作删除,长按可删除,不过按.执行上一次操作删除更快) .执行上…...

车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...

汇编基础语法及其示例
1.汇编指令 1.1汇编指令的基本格式 <opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand> <功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数> 注:第一操作寄存器…...

android获取EditText内容,TextWatcher按条件触发
android获取EditText内容,TextWatcher按条件触发 背景:解决方案:效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中涉及到EditText组件内容的动态校验,初步实现功能后&#…...

Blazor-Blazor Web App项目结构
让我们还是从创建项目开始,来一起了解下Blazor Web App的项目情况 创建项目 呈现方式 这里我们可以看到需要选择项目的呈现方式,有以上四种呈现方式 ● WebAssembly ● Server ● Auto(Server and WebAssembly) ● None 纯静态界面静态SSR呈现方式 WebAs…...
【线上问题定位处理】及【性能优化】系列文章
目录 性能优化 性能优化 九大服务架构性能优化方式 如何进行GC调优 如何排查线上系统出现的Full GC MySQL - 性能优化 MySQL - 分库分表 大数据查询的处理方案 MySQL优化手段有哪些 服务CPU100%问题如何快速定位? 服务内存OOM问题如何快速定位? JVM调优6大步骤 线…...

现代 linux 里一个进程允许打开几个文件:答案是 1024 或者更多
(1) 测试一下: (2) 谢谢...

【仓颉】仓颉编程语言Windows安装指南 配置环境变量 最简单解决中文乱码问题和其他解决方案大全
适用于版本: 0.53.13 | 发布日期: 2024-10-24 (以后的可能也适用) 本机windows版本:24H2 内部版本号windows 10.0.26100 因为仓颉的官方文档一直没更新,所以在这里写一下如何在windows上完成这些…...

dm8在Linux环境安装精简步骤说明(2024年12月更新版dm8)
dm8在Linux环境安装详细步骤 - - 2025年1月之后dm8 环境介绍1 修改操作系统资源限制2 操作系统创建用户3 操作系统配置4 数据库安装5 初始化数据库6 实例参数优化7 登录数据库配置归档与备份8 配置审计9 创建用户10 屏蔽关键字与数据库兼容模式11 jdbc连接串配置12 更多达梦数据…...

学技术学英语:elasticsearch查询的两阶段queryingfetching
To understand Elasticsearch’s distributed search, let’s take a moment to understand how querying and fetching work. Unlike simple CRUD tasks, distributed search is like navigating through a maze of shards spread across the cluster. In Elasticsearch, CRU…...

Linux_线程互斥
互斥的相关概念 共享资源:指多个进程或线程可以共同访问和操作的资源临界资源:被保护的共享资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有…...
基于 NodeJs 一个后端接口的创建过程及其规范 -- 【elpis全栈项目】
基于 NodeJs 一个后端接口的创建过程及其规范 一个接口的诞生: #mermaid-svg-46HXZKI3fdnO0rKV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46HXZKI3fdnO0rKV .error-icon{fill:#552222;}#mermaid-sv…...

企业知识库提升企业核心竞争力促进团队协作和知识分享
内容概要 在快速发展的数字化时代,企业知识库的构建与运用变得愈发重要。其重要性不仅体现在信息的集中管理上,更在于推动企业整体竞争力的提升。一个高效的知识库可以作为团队合作的重要平台,促进不同部门之间的信息交流与协作,…...

C++ unordered_map和unordered_set的使用,哈希表的实现
文章目录 unordered_map,unorder_set和map ,set的差异哈希表的实现概念直接定址法哈希冲突哈希冲突举个例子 负载因子将关键字转为整数哈希函数除法散列法/除留余数法 哈希冲突的解决方法开放定址法线性探测二次探测 开放定址法代码实现 哈希表的代码 un…...

games101-作业3
由于此次试验需要加载模型,涉及到本地环节,如果是windows系统,需要对main函数中的路径稍作改变: 这么写需要: #include "windows.h" 该段代码: #include "windows.h" int main(int ar…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...