-
-
1 題目:租房信息數據分析
-
-
導入數據
-
-
-
各行政區房源分布
-
-
-
小區房源數量TOP10
-
-
-
戶型TOP10分布
-
-
-
租金分布
-
-
數據源:在百度網盤喏,自行下載。 鏈接:
1 題目:租房信息數據分析
“data”文件夾中有一文件“house_info.csv”保存了租房信息數據,以該文件作為數據源,按以下要求進行分析:
-
導入數據並對數據進行預處理;
-
分析各行政區的房源分布情況,選擇合適的圖表對各行政區的房源分布情況進行可視化,並總結分析結果;
-
以小區為單位,分析各小區的房源數量,選擇合適的圖表對小區房源數量TOP10進行可視化,並總結分析結果;
-
對整個租房數據的戶型進行分析,統計戶型TOP10,並選擇合適的圖表進行可視化,並總結分析結果;
-
分析租房數據的租金分布情況,選擇合適的圖表進行可視化,並總結分析結果。
2. 導入數據
import pandas as pd
import numpy as np
detail = pd.read_csv(r".\house_info.csv", encoding="utf-8")
# print(detail.head())
print("清洗前缺失值的數目:\n",detail.isnull().sum())
# 刪除detail的缺失值
d1 = detail.dropna(axis=0, how="any") # 以d1 為數據源
# print(d1)
print("清洗后缺失值的數目:\n",d1.isnull().sum())
# 從前向后查找和判斷是否有重復值
print("重復值:",d1.duplicated().sum())
3. 各行政區房源分布
選用合適的圖表,以行政區為單位,對比分析各行政區房源數量分布情況,並對可視化結果進行簡單的總結。
area = set(d1["位置1"]) # 統計多少個行政區
print(area)
# 創建一個DataFrame 對象,篩選需要數據{行政區,房源數量}
d2 = pd.DataFrame({'行政區':d1["位置1"].unique(),'房源數量':[0]*len(area)})
print(d2)
print('-'*20)
# groupby統計房源數量,並從小到大排序
groupby_area = d1.groupby(by="位置1").count()
print(groupby_area)
d2["房源數量"] = groupby_area.values
d2 = d2.sort_values(by=["房源數量"],ascending=True)
print(d2)
# 繪圖
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
X = d2["行政區"]
print(X)
Y = d2["房源數量"]
print(Y)
plt.figure(figsize=(8,6),dpi=300)
plt.bar(X, Y, width=0.5, linewidth=2)
for i,j in zip(X, Y):
plt.text(i, j, "%d" % j, fontsize=16)
plt.xlabel("行政區")
plt.ylabel("房源數量")
plt.title("各行政區房源分布圖")
plt.show()
從數據可以看出:從行政區的福田區到龍崗區,房源的數量是逐漸增加的。
4. 小區房源數量TOP10
選用合適的圖表,以居住小區為單位,對比分析各小區房源數量分布情況,並對TOP10進行可視化,對分析結果進行簡單的總結。
area_small = set(d1["小區"]) # 統計多少個小區
# print(area_small)
# 創建一個DataFrame 對象,篩選需要數據{小區,小區房源數量}
d_samll = pd.DataFrame({"小區":d1["小區"].unique(),"小區房源數量":[0]*len(area_small) })
print(d_samll)
print('-'*40)
# groupby統計小區房源數量,並從大到小排序
groupby_area = d1.groupby(by="小區").count()
# print(groupby_area)
d_samll["小區房源數量"] = groupby_area.values
d_samll = d_samll.sort_values(by=["小區房源數量"],ascending=False)
print(d_samll)
d_top10 = d_samll.head(10) # 取前十
print("小區房源數量TOP10是:\n",d_top10)
# 繪圖
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
X = d_top10["小區"]
print(X)
Y = d_top10["小區房源數量"]
print(Y)
plt.figure(figsize=(8,6),dpi=300)
plt.bar(X, Y, width=0.5, linewidth=2)
for i,j in zip(X, Y):
plt.text(i, j, "%d" % j, fontsize=12)
plt.xlabel("小區")
plt.ylabel("小區房源數量")
plt.title("小區房源數量TOP10")
plt.xticks(rotation=335)
plt.savefig(r"C:\Users\錦樽\Desktop\小區房源數量TOP10.png",dpi=400)
plt.show()
從圖可知,小區的房源數量從 豐湖花園到 名仕閣逐漸遞減,而且豐湖花園小區房源是其他小區的兩倍左右,豐湖花園的房源很多,在該競爭領域很大優勢。
5. 戶型TOP10分布
選用合適的圖表,分析戶型分布情況,並對TOP10進行可視化,對分析結果進行簡單的總結。
house_type = set(d1["戶型"]) # 統計多少個戶型
print(house_type)
# 創建一個DataFrame 對象,篩選需要數據{戶型,戶型數量}
d_house = pd.DataFrame({"戶型":d1["戶型"].unique(),"戶型數量":[0]*len(house_type) })
print(d_house)
print('-'*40)
# groupby統計戶型數量,並從大到小排序
groupby_area = d1.groupby(by="戶型").count()
print(groupby_area)
d_house["戶型數量"] = groupby_area.values
d_house = d_house.sort_values(by=["戶型數量"],ascending=False)
print(d_house)
d_top10 = d_house.head(10) # 取前十
print("戶型數量TOP10是:\n",d_top10)
# 繪圖
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
X = d_top10["戶型"]
# print(X)
Y = d_top10["戶型數量"]
# print(Y)
plt.figure(figsize=(12,8),dpi=300)
# plt.bar(X, Y, width=0.5, linewidth=2)
b = plt.barh(X, Y, height=0.6, linewidth=1)
for i in b:
plt.text(i.get_width(),i.get_y()+0.2,i.get_width() )
plt.ylabel("戶型")
plt.xlabel("戶型數量")
plt.title("戶型數量TOP10")
plt.savefig(r"C:\Users\錦樽\Desktop\戶型數量TOP10.png",dpi=400)
plt.show()
從圖可知,眾多戶型中 5室1衛戶型數量遠遠超過其他戶型,可以看出這個戶型是很多購買者喜歡的。
6. 租金分布
選用合適的圖表,分析租金的分布情況,對分析結果進行簡單的總結。
house_rent = set(d1["價格"]) # 統計多少個價格
# print(house_rent)
# 創建一個DataFrame 對象,篩選需要數據{價格,價格數量}
d_rent = pd.DataFrame({"租金":d1["價格"].unique(),"價格數量":[0]*len(house_rent) })
print(d_rent)
print('-'*40)
# groupby統計價格數量,並從大到小排序
groupby_area = d1.groupby(by="價格").count()
print(groupby_area)
d_rent["價格數量"] = groupby_area.values
d_rent = d_rent.sort_values(by=["價格數量"],ascending=False)
print(d_rent)
d_top10 = d_rent.head(10) # 取前十
print("價格數量TOP10是:\n",d_top10)
# 對每個行政區,進行租金價格平均分析 # 新建一個DataFrame對象,設置房租總金額和總面積初始值為0 print(area) avg_rent = pd.DataFrame({'行政區':d1["位置1"].unique(),'房租總金額':[0]*len(area),'總面積':[0]*len(area) }) print(avg_rent) print('-'*40) # 求總金額和總面積 sum_price = d1["價格"].groupby(d1["位置1"]).sum() sum_area = d1["面積"].groupby(d1["位置1"]).sum() avg_rent["房租總金額"] = sum_price.values avg_rent["總面積"] = sum_area.values print(avg_rent) # 計算各區域每平方米房租價格,並保留2位小數 avg_rent['每平方米租金(元)'] = round(avg_rent['房租總金額']/avg_rent['總面積'],2) print(avg_rent) print("*-"*25) # 合並需要的數據 rent_merge = pd.merge(d2,avg_rent) rent_merge # print(rent_merge)
import matplotlib import matplotlib.pyplot as plt import matplotlib.ticker as mtick from matplotlib.font_manager import FontProperties matplotlib.rcParams['font.sans-serif']=['SimHei'] matplotlib.rcParams['axes.unicode_minus']=False num = rent_merge['房源數量'] # 數量 price = rent_merge['每平方米租金(元)'] # 價格 X = rent_merge["行政區"] print(X) # Y = rent_merge["房源數量"] # print(Y) fig = plt.figure(figsize=(8,6)) axl = fig.add_subplot(111) axl.plot(X, price,'or-',label = '價格') axl.set_ylim([0,210]) axl.set_ylabel('價格') for i,j in zip(X, price): plt.text(i, j, "%d" % j, fontsize=16) plt.title("租金分布情況") ax2 = axl.twinx() plt.bar(X,num,width=0.4,color = 'green',label = '數量', linewidth=2) ax2.set_ylabel('數量') ax2.set_ylim([0,2000]) for i,j in zip(X, num): plt.text(i, j, "%d" % j, fontsize=16) plt.title("租金分布情況") plt.savefig(r"C:\Users\錦樽\Desktop\租金分布情況圖.png",dpi=400) plt.show()
從折線圖可以看出,羅湖區與南山區 房源數量比較多,但是租金價格平均是高的,龍崗區的房源數量多而且租金相比其他行政區是價廉的,適合畢業生、求職者去租房。