【 專案:深圳市二手房房價分析及預測

helaoshi發表於2020-06-26

以下為本專案分析思維導圖:】

Image Name

In [ ]:
# coding:utf-8# 【 專案:深圳市二手房房價分析及預測 】# --------------------------------【 資料理解 】--------------------------------------# (一) 匯入資料 並進行初步的資料觀察# 1.改變工作目錄到 資料集所在資料夾import osimport pandas as pdpd.set_option('display.max_columns',None)data_path = r'D:\Data_Sets_of_Analysis\Project_2_House_Price_of_ShenZhen\Data_of_House_Price_ShenZhen'save_path = r'D:\Data_Sets_of_Analysis\Project_2_House_Price_of_ShenZhen'os.chdir(data_path)loadfile = os.listdir() # 讀取目錄下所有檔案df = pd.DataFrame()for i in loadfile:   # 將多個xls檔案進行合併
    locals()[i.split('.')[0]] = pd.read_excel(i)
    df = pd.concat([df,locals()[i.split('.')[0]]])df = df.rename(columns={'Unnamed: 0':'houseid'})print('深圳各區二手房房價資訊合併完成')print('='*100)  # 劃分割線,方便檢視
In [ ]:
# 2.檢視資料情況# # 1) 資料總體情況print('資料集中的樣本量共有%d個' % df.shape[0])    # 檢視資料量(行數)print('-'*100)print(df.duplicated())   # 判斷是否有重複項print('-'*100)print(df.head())    # 檢視前五行print('-'*100)print(df.describe(include='all').T)     # 檢視描述基本資訊print('-'*100)del df['houseid']   # 刪去之後不用的行del df['floor_num']'''資料無缺失、無重複'''
In [ ]:
# # 2) 檢視分類變數的取值import sqlite3con = sqlite3.connect(':memory:')df.to_sql('df',con)print(list(df))print('檢視分類變數的取值')for i in list(df[['district','roomnum','hall','C_floor','school','subway']]):
    s = pd.read_sql_query('SELECT DISTINCT %s from df' % i,con)
    print(s)
    print('-'*12)print('='*100)  # 劃分割線,方便檢視
In [ ]:
# # 3) 將城區名由中文改成拼音,方便之後作圖時檢視dist_dict = {'longgang':'龍崗','longhua':'龍華','baoan':'寶安','nanshan':'南山','futian':'福田','luohu':'羅湖','pingshan':'坪山','guangming':'光明','yantian':'鹽田','dapengxinqu':'大鵬新區'}df['district'] = df['district'].apply(lambda x:dist_dict[x])print(df.head())print('='*100)  # 劃分割線,方便檢視
In [ ]:
# # 4) 生成一個excel表格用於分析列名含義table_columns = pd.DataFrame(columns=['表名','表說明','列名','列名含義','備註'])table_columns['列名'] = list(df)table_columns.to_excel(save_path + r'\列名含義分析表(請另存).xls')print('列名含義分析表 已生成')print('='*100)  # 劃分割線,方便檢視

Image Name

In [ ]:
# --------------------------------【 目標拆解分析 】--------------------------------------# (二) 因變數分析# # 1. 單位面積房價分析# # # 設定負號顯示及字型from matplotlib import pylabpylab.rcParams['font.sans-serif'] = ['SimHei']pylab.rcParams['axes.unicode_minus'] = False# # # 1) 作因變數直方圖import matplotlib.pyplot as pltdf.per_price.hist(grid=False,bins=20,color='lightblue')plt.title('單位面積房價頻數圖')plt.xlabel('單位面積房價(萬元/平方米)')plt.ylabel('頻數')plt.show()'''透過直方圖可發現資料是偏態分佈的(右偏 → 那麼之後可能會取對數)'''

Image Name

In [ ]:
# # # 2) 檢視 均值、中位數、標準差、四分位數print(df.per_price.agg(['mean','median','std']))print(df.per_price.quantile([0.25,0.5,0.75]))print('='*100)'''價格的平均數mean: 6.118192價格的中位數:5.246300價格的標準差std:3.050218四分位數情況:    0.25    4.0526    0.50    5.2463    0.75    7.3574'''
In [ ]:
# # # 3) 檢視房價的 最大值 和 最小值print('房價最大值為%s萬元/㎡' % max(df.per_price))print('房價最小值為%s萬元/㎡' % min(df.per_price))print('='*100)'''房價最大值為26.3968萬元/㎡房價最小值為1.0101萬元/㎡'''
In [ ]:
# (三) 自變數# # 1. 整體來看# # # 1) 分類變數 看 各個取值 的 數量統計 情況for i in range(len(list(df))):
    if i != list(df).index('AREA') and i != list(df).index('per_price'):
        print(df.columns.values[i],':')
        print(df[df.columns.values[i]].value_counts())
        print('-'*100)
    else:
        continueprint('='*100)'''dist列中 每個區的樣本量均在500以上;roomnum列中 最多的型別是3房,6~9房的佔比很少;halls列中 最普遍的是2個;floor列中 middle的數量多一些,high和low基本持平;subway列中 基本持平;school列中 學區房更多一些'''
In [ ]:
# # # 2) 連續變數 看 最小、最大值、平均數、中位數、標準差print('AREA:')print(df.AREA.agg(['min','mean','median','max','std']).T)print('='*100)'''AREA:min        15.000000mean       95.224924median     88.000000max       697.200000std        48.570130資料情況相對還是比較正常的'''
In [ ]:
# # 2. 分開各個量 → district列# # # 各個區的房屋資訊數量情況比較colors = ['#71ae46','#96b744','#c4cc38','#ebe12a','#eab026','#e3852b','#d85d2a','#ce2626','#ac2026','#71ae46']df.district.value_counts().sort_values().plot(kind='pie',autopct="%1.1f%%",colors=colors)plt.title('各個區的房屋資訊數量情況比較')plt.show()print(df.district.value_counts().sort_values(ascending=False))print('='*100)

Image Name

In [ ]:
# # # 各個區房價均值比較colors = ['#71ae46','#71ae46','#96b744','#c4cc38','#ebe12a','#eab026','#e3852b','#d85d2a','#ce2626','#ac2026']df.per_price.groupby(df.district).mean().sort_values().plot(kind='barh',color=colors)plt.xlabel('各個區房價均值(萬元/平方米)')plt.ylabel('區名')plt.title('各個區的房價均值情況表')A = df.per_price.groupby(df.district).mean().sort_values()for i in range(len(list(df.district.value_counts()))): # 為圖表加數字標籤
    plt.text(A[i],i,round(A[i],4),fontsize=10,verticalalignment="top",horizontalalignment="right")  # round(A[i],4)保留四位小數plt.show()

Image Name

In [ ]:
# # # 不同城區的單位面積房價(盒須圖)import seaborn as snsdf_temp1 = df[['district','per_price']].sort_values(by=['district'])df_temp1['district'] = df_temp1['district'].astype('category')  # 標籤排序df_temp1['district'] = df_temp1['district'].cat.set_categories(['大鵬新區','坪山','龍崗','光明','鹽田','龍華','羅湖','寶安','福田','南山'])plt.figure(figsize=(12,6))  # 設定畫布大小sns.boxplot(x='district',y='per_price',data=df_temp1,linewidth=0.5,palette=sns.cubehelix_palette(16,start=2, rot=2, dark=0, light=.95))plt.ylabel('單位面積房價(萬元/平方米)')plt.xlabel('城區')plt.title('不同城區的單位面積房價的分組箱線圖')plt.show()'''由盒須圖可知,隨著x值的不同,中心水平是有變化的,故可初步判斷二者是有關係的'''

Image Name

In [ ]:
# # 3. 分開各個量 → roomnum列# # # 不同臥室數的單位面積房價df.per_price.groupby(df.roomnum).mean().plot(kind='bar',color=colors)plt.xticks(rotation=360)plt.title('不同臥室數的單位面積房價')plt.show()df_temp2 = df[['roomnum','per_price']]# df_temp2.boxplot(by='roomnum',patch_artist=True)   # patch_artist上下四分位框內是否填充,True為填充plt.figure(figsize=(12,6))sns.boxplot(x=df_temp2['roomnum'],y=df_temp2['per_price'],palette=sns.cubehelix_palette(16,start=2, rot=0, dark=0, light=.95))plt.title('不同臥室數的單位面積房價')plt.show()

Image Name

Image Name

In [ ]:
# # 4. 分開各個量 → hall列# # # 不同廳數的單位面積房價df.per_price.groupby(df.hall).mean().plot(kind='bar',color=colors)plt.xticks(rotation=360)plt.title('不同廳數的單位面積房價')plt.show()df_temp3 = df[['hall','per_price']]plt.figure(figsize=(10,6))sns.boxplot(x=df_temp3['hall'],y=df_temp3['per_price'],palette=sns.cubehelix_palette(10,start=2, rot=0, dark=0, light=.95))plt.title('不同廳數的單位面積房價')plt.show()

Image Name

Image Name

In [ ]:
# # 5. 分開各個量 → C_floor列df_temp4 = df[['C_floor','per_price']]sns.boxplot(x=df['C_floor'],y=df_temp4['per_price'],palette=sns.cubehelix_palette(6,start=2, rot=0, dark=0, light=.95))plt.title('不同樓層的單位面積房價')plt.show()'''不同臥室數的單位面積房價差異不大;不同廳數的單位面積房價有一定影響;不同樓層的單位面積房價差異不明顯'''

Image Name

In [ ]:
# 6.分開各個量 → subway# # # 是否臨近地鐵對單位面積房價的影響df_temp5 = df[['subway','per_price']]sns.boxplot(x=df_temp5['subway'],y=df_temp5['per_price'],palette=sns.cubehelix_palette(4,start=2, rot=0, dark=0, light=.95))plt.title('是否臨近地鐵對單位面積房價的影響')plt.show()

Image Name

In [ ]:
# # 7.分開各個量 → school# # # 是否是學區房對房價的影響df_temp6 = df[['school','per_price']]sns.boxplot(x=df_temp6['school'],y=df_temp5['per_price'],palette=sns.cubehelix_palette(4,start=2,rot=0,dark=0,light=.95))plt.title('是否是學區房對房價的影響')plt.show()

Image Name

  • 【 這裡補充下接下來所引用的stack2dim包的程式碼:
In [ ]:
def stack2dim(raw, i, j, rotation=0, location='upper left'):
    '''    此函式是為了畫兩個維度標準化的堆積柱狀圖    要求是目標變數j是二分類的    raw為pandas的DataFrame資料框    i、j為兩個分類變數的變數名稱,要求帶引號,比如"school"    rotation:水平標籤旋轉角度,預設水平方向,如標籤過長,可設定一定角度,比如設定rotation = 40    location:分類標籤的位置,如果被主體圖形擋住,可更改為'upper left'    '''
    import math
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    data_raw = pd.crosstab(raw[i], raw[j])
    data = data_raw.div(data_raw.sum(1), axis=0)  # 交叉錶轉換成比率,為得到標準化堆積柱狀圖
    # 計算x座標,及bar寬度
    createVar = locals()
    x = [0]  # 每個bar的中心x軸座標
    width = []  # bar的寬度
    k = 0
    for n in range(len(data)):
        # 根據頻數計算每一列bar的寬度
        createVar['width' + str(n)] = data_raw.sum(axis=1)[n] / sum(data_raw.sum(axis=1))
        width.append(createVar['width' + str(n)])
        if n == 0:
            continue
        else:
            k += createVar['width' + str(n - 1)] / 2 + createVar['width' + str(n)] / 2 + 0.05
            x.append(k)
            # 以下是透過頻率交叉表矩陣生成一列對應堆積圖每一塊位置資料的陣列,再把陣列轉化為矩陣
    y_mat = []
    n = 0
    for p in range(data.shape[0]):
        for q in range(data.shape[1]):
            n += 1
            y_mat.append(data.iloc[p, q])
            if n == data.shape[0] * 2:
                break
            elif n % 2 == 1:
                y_mat.extend([0] * (len(data) - 1))
            elif n % 2 == 0:
                y_mat.extend([0] * len(data))
    y_mat = np.array(y_mat).reshape(len(data) * 2, len(data))
    y_mat = pd.DataFrame(y_mat)  # bar圖中的y變數矩陣,每一行是一個y變數
    # 透過x,y_mat中的每一行y,依次繪製每一塊堆積圖中的每一塊圖
    createVar = locals()
    for row in range(len(y_mat)):
        createVar['a' + str(row)] = y_mat.iloc[row, :]
        if row % 2 == 0:
            if math.floor(row / 2) == 0:
                label = data.columns.name + ': ' + str(data.columns[row])
                plt.bar(x, createVar['a' + str(row)],
                        width=width[math.floor(row / 2)], label='0', color='#5F9EA0')
            else:
                plt.bar(x, createVar['a' + str(row)],
                        width=width[math.floor(row / 2)], color='#5F9EA0')
        elif row % 2 == 1:
            if math.floor(row / 2) == 0:
                label = data.columns.name + ': ' + str(data.columns[row])
                plt.bar(x, createVar['a' + str(row)], bottom=createVar['a' + str(row - 1)],
                        width=width[math.floor(row / 2)], label='1', color='#8FBC8F')
            else:
                plt.bar(x, createVar['a' + str(row)], bottom=createVar['a' + str(row - 1)],
                        width=width[math.floor(row / 2)], color='#8FBC8F')
    plt.title(j + ' vs ' + i)
    group_labels = [data.index.name + ': ' + str(name) for name in data.index]
    plt.xticks(x, group_labels, rotation=rotation)
    plt.ylabel(j)
    plt.legend(shadow=True, loc=location)
    plt.show()
  • 補充結束 】
In [ ]:
# # # subway+school 地鐵 + 學區print(pd.crosstab(df.subway,df.school))sub_shc = pd.crosstab(df.subway,df.school)sub_shc = sub_shc.div(sub_shc.sum(1),axis=0)print(sub_shc)print('='*100)# # # subway+school 的 兩維度分組堆積圖from stack2dim import *stack2dim(df,i='subway',j='school')'''是否臨近地鐵和是否時學區房對房價有一定影響;地鐵房中的學區房比重 比 非地鐵房中的學區比重更大'''

Image Name

In [ ]:
# # 8.面積 AREA x,y均為連續變數,畫散點圖df_temp7 = df[['AREA','per_price']]plt.scatter(df_temp7.AREA,df_temp7.per_price,marker='.',color='#00686b')plt.title('面積AREA 和 單位面積房價per_price 的 散點圖')plt.ylabel("單位面積房價")plt.xlabel("面積(平方米)")plt.show()

Image Name

In [ ]:
# # # 求AREA和per_price的相關關係矩陣import numpy as npdf_temp_A = np.array(df_temp7['per_price'])df_temp_B = np.array(df_temp7['AREA'])df_temp_AB = np.array([df_temp_A,df_temp_B])print(np.corrcoef(df_temp_AB))print('-'*50)'''1. 從散點圖可看出,點由左向右逐漸稀疏,考慮對y取對數後再作散點圖2.corrcoef:    [[1.         0.31332208] [0.31332208 1.        ]]'''
In [ ]:
# # # 面積AREA 和 單位面積房價per_price(取對數後) 的 散點圖A = df_temp7.copy()# A.loc[:,'per_price_ln'] = A.loc[:,'per_price'].apply(lambda x:np.log(x))A['per_price_ln'] = A['per_price'].apply(lambda x:np.log(x))plt.scatter(A.AREA,A.per_price_ln,marker='.',color='#00686b')plt.title('面積AREA 和 單位面積房價per_price(取對數後) 的 散點圖')plt.ylabel("單位面積房價(取對數後)")plt.xlabel("面積(平方米)")plt.show()

Image Name

In [ ]:
df_temp_C = np.array(A['per_price_ln'])df_temp_D = np.array(A['AREA'])df_temp_CD = np.array([df_temp_C,df_temp_D])print(np.corrcoef(df_temp_CD))print('-'*50)'''[[1.         0.26030901] [0.26030901 1.        ]]依然呈現明顯的右邊集中特點,考慮對x變數也取對數'''
In [ ]:
# # # 面積AREA(取對數後) 和 單位面積房價per_price(取對數後) 的 散點圖B = df_temp7.copy()B['per_price_ln'] = np.log(B['per_price'])B['AREA_ln'] = np.log(B['AREA'])plt.scatter(B.per_price_ln,B.AREA_ln,marker='.',color='#00686b')plt.title('面積AREA(取對數後) 和 單位面積房價per_price(取對數後) 的 散點圖')plt.ylabel("單位面積房價(取對數後)")plt.xlabel("面積(平方米)(取對數後)")plt.show()

Image Name

In [ ]:
# # # AREA_ln 和 per_price_ln 的相關係數矩陣df_temp_E = np.array(B['per_price_ln'])df_temp_F = np.array(B['AREA_ln'])df_temp_EF = np.array([df_temp_E,df_temp_F])print(np.corrcoef(df_temp_EF))print('-'*50)'''[[1.         0.18715179] [0.18715179 1.        ]] 兩者都取對數後,分佈正態了,故之後建模時,應該二者都取對數 '''
In [ ]:
# --------------------------------【 建立房價預測模型 】--------------------------------------# (一) 檢驗變數 → 每個解釋變數是否和被解釋變數獨立# # 1.進行抽樣'''原始樣本量太大,若要使用基於P值的模型構建,需進行抽樣,考慮本資料分十個不同的區,選擇分層抽樣'''from get_sample import *  # 已經另外編寫好的抽樣函式data = get_sample(df,sampling='stratified',k=250,stratified_col=['district'])# # 2.檢驗各個變數的解釋力度'''前面分析得到的結論是:不同臥室數的單位面積房價差異不大;不同廳數的單位面積房價有一定影響;不同樓層的單位面積房價差異不明顯;是否臨近地鐵和是否時學區房對房價有一定影響;'''import statsmodels.api as smfrom statsmodels.formula.api import olsl = ['district', 'roomnum', 'hall',  'school', 'subway']for i in l:
    print('%s的P值為:%.4f' % (i,sm.stats.anova_lm(ols('per_price~C(%s)' % i,data=data).fit())._values[0][4]))'''以上P值均為零'''
In [ ]:
# # # 對於hall列,由之前的柱狀圖可知,廳數為3的要明顯和其他數量的有較大的區別,對此將其轉換為{“廳數為3”:1}和“{廳數不為3”:0}的二分類變數data['hall_judge'] = data['hall'].apply(lambda x:'廳數為3' if x==3 else '廳數不為3')print(data.head())
In [ ]:
# # # 對於對分類變數,生成啞變數data1 = pd.get_dummies(data[['district','C_floor']]) # get_dummies特徵提取one-hot encodingprint(data1.head())data1.drop(['district_大鵬新區','C_floor_high'],axis=1,inplace=True) # 這兩個是參照組
In [ ]:
# # # 生成的啞變數與其他所需變數合併成新的資料表data2 = pd.concat([data1,data[['school','subway','hall_judge','roomnum','AREA','per_price']]],axis=1)print(data2.head())
In [ ]:
# (二) 迴歸模型# # 1.線性迴歸模型lm1 = ols('per_price ~ district_羅湖+district_坪山+district_南山+district_光明+district_龍華+district_鹽田+district_龍崗+district_福田+district_寶安+school+subway+C_floor_middle+C_floor_low+AREA',data=data2).fit()lm1_summary = lm1.summary()print(lm1_summary)  # 迴歸結果展示data1['predict1'] = lm1.predict(data2)data1['resid1'] = lm1.residdata1.plot('predict1','resid1',kind='scatter',color='#00686b')plt.show()'''作散點圖 → 模型診斷圖:從左往右圖形發散,即:存在異方差現象,對因變數取對數'''

Image Name

In [ ]:
# # 2.對數線性模型data2['per_price_ln'] = np.log(data2['per_price'])data2['AREA_ln'] = np.log(data2['AREA'])# # # 1) 只對y取對數lm2 = ols('per_price_ln ~ district_羅湖+district_坪山+district_南山+district_光明+district_龍華+district_鹽田+district_龍崗+district_福田+district_寶安+school+subway+C_floor_middle+C_floor_low+AREA',data=data2).fit()lm2_summary = lm2.summary()print(lm2_summary)data2['predict2'] = lm2.predict(data2)data2['resid2'] = lm2.residdata2.plot('predict2','resid2',kind='scatter',color='#00686b')plt.show()

Image Name

In [ ]:
# # # 2) 對y和x都取對數lm3 = ols('per_price_ln ~ district_羅湖+district_坪山+district_南山+district_光明+district_龍華+district_鹽田+district_龍崗+district_福田+district_寶安+school+subway+C_floor_middle+C_floor_low+AREA_ln',data=data2).fit()lm3_summary = lm3.summary()print(lm3_summary)data2['predict3'] = lm3.predict(data2)data2['resid3'] = lm3.residdata2.plot('predict3','resid3',kind='scatter',color='#00686b')plt.show()

Image Name

In [ ]:
# # 3.有互動項的對數線性模型,城區和學區之間的互動作用schools=['坪山','龍崗','光明','鹽田','龍華','羅湖','寶安','福田','南山']print('大鵬新區非學區房\t',round(data[(data['district']=='大鵬新區')&(data['school']==0)]['per_price'].mean(),2),'萬元/平方米\t',
     '大鵬新區學區房\t',round(data[(data['district']=='大鵬新區')&(data['school']==1)]['per_price'].mean(),2),'萬元/平方米')print('-------------------------------------------------------------------------')for i in schools:
    print(i+'非學區房\t',round(data2[(data2['district_'+i]==1)&(data2['school']==0)]['per_price'].mean(),2),'萬元/平方米\t',i+'學區房\t',round(data2[(data2['district_'+i]==1)&(data2['school']==1)]['per_price'].mean(),2),'萬元/平方米')
In [ ]:
# # # 圖形描述d = pd.DataFrame()dist = ['大鵬新區','坪山','龍崗','光明','鹽田','龍華','羅湖','寶安','福田','南山']Noschool = []school = []for i in dist:
    Noschool.append(data[(data['district'] == i) & (data['school'] == 0)]['per_price'].mean())
    school.append(data[(data['district'] == i) & (data['school'] == 1)]['per_price'].mean())d['district']=pd.Series(dist)d['Noschool']=pd.Series(Noschool)d['school']=pd.Series(school)print(d)d1=d['Noschool'].T.valuesd2=d['school'].T.valuesplt.figure(figsize=(10,6))x1=range(0,len(d))x2=[i+0.3 for i in x1]plt.bar(x1,d1,color='#00686b',width=0.3,alpha=0.6,label='非學區房')plt.bar(x2,d2,color='#c82d31',width=0.3,alpha=0.6,label='學區房')plt.xlabel('城區')plt.ylabel('單位面積價格')plt.title('分城區、是否學區的房屋價格')plt.legend(loc='upper left')plt.xticks(range(0,10),dist)plt.show()'''除了 南山 之外,其他區的 學區房價格 均比 非學區房 高'''

Image Name

In [ ]:
# # # 探索 南山 和 鹽田 學區房價格比較低的原因,是否是樣本量的問題num_noschool_ns = data[(data['district']=='南山')&(data['school']==0)].shape[0]num_school_ns = data[(data['district']=='南山')&(data['school']==1)].shape[0]print('南山非學區房\t',num_noschool_ns,'\t',
     '南山學區房\t',num_school_ns,'\t',
      '南山學區房佔南山所有二手房的{}'.format(int(num_school_ns)/int(int(num_school_ns)+int(num_noschool_ns))))
In [ ]:
# # # 分城區的學區房分組箱線圖school =['大鵬新區','坪山','龍崗','光明','鹽田','龍華','羅湖','寶安','福田','南山']for i in school:
    # sns.boxplot(x=df_temp6['school'], y=df_temp5['per_price'],
    #             palette=sns.cubehelix_palette(4, start=2, rot=0, dark=0, light=.95))
    sns.boxplot(x=data[data.district==i]['school'],y=data[data.district==i]['per_price'],palette=sns.cubehelix_palette(4, start=2, rot=0, dark=0, light=.95))
    # data[data.district==i][['school','per_price']].boxplot(by='school',patch_artist=True,color='#b6b51f')
    plt.xlabel(i+'學區房')
    plt.show()

Image Name

Image Name

Image Name

Image Name

Image Name

In [ ]:
# (三) 假想情形,做預測,x_new是新的自變數'''預測要找一個條件為:1.南山區2.有3個房間3.面積大概再80㎡左右4.有地鐵5.學區房的房子的大概花費'''x_new1=data2.head(1).copy()print(x_new1)x_new1['dist_南山']=1x_new1['roomnum']=3x_new1['AREA_ln']=np.log(80)x_new1['subway']=1x_new1['school']=1#預測值import mathprint("單位面積房價:",round(math.exp(lm3.predict(x_new1)),2),"萬元/平方米")print("總價:",round(math.exp(lm3.predict(x_new1))*80,2),"萬元")'''輸出預測的 單位面積房價 和 總價(如 → 單位面積房價: 5.63 萬元/平方米 總價: 450.31 萬元)'''


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977871/viewspace-2700672/,如需轉載,請註明出處,否則將追究法律責任。

相關文章