日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

综合案例 -- 北京租房数据统计分析

發布時間:2024/3/12 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 综合案例 -- 北京租房数据统计分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Table of Contents

  • 1??獲取數據
  • 2??數據基本處理
    • 2.1??重復值和空值處理
    • 2.2??數據轉換類型
      • 2.2.1??面積數據類型轉換
      • 2.2.2??戶型表達方式轉換
  • 3??圖標分析
    • 3.1??房源數量、 位置分布分析
    • 3.2??戶型數量分析
    • 3.3??平均租金分析

前言

原始數據請點擊
原始數據

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 設置中文字體 from pylab import mpl mpl.rcParams["font.sans-serif"] = ["SimHei"]

獲取數據

file_data = pd.read_csv("./data/鏈家北京租房數據.csv") file_data 區域小區名稱戶型面積(㎡)價格(元/月)01234...82188219822082218222
東城萬國城MOMA1室0廳59.11平米10000
東城北官廳胡同2號院3室0廳56.92平米6000
東城和平里三區1室1廳40.57平米6900
東城菊兒胡同2室1廳57.09平米8000
東城交道口北二條35號院1室1廳42.67平米5500
...............
順義怡馨家園3室1廳114.03平米5500
順義旭輝26街區4房間2衛59平米5000
順義前進花園玉蘭苑3室1廳92.41平米5800
順義雙裕小區2室1廳71.81平米4200
順義櫻花園二區1室1廳35.43平米2700

8223 rows × 5 columns

# 看一看數據的大概情況 file_data.describe() 價格(元/月)countmeanstdmin25%50%75%max
8223.000000
9512.297823
9186.752612
566.000000
4800.000000
6800.000000
10000.000000
150000.000000

數據基本處理

重復值和空值處理

# 重復值 # file_data.duplicated() #通過觀察dataframe的shape來觀測結果file_data = file_data.drop_duplicates() file_data.shape (5773, 5) # 空值處理 file_data = file_data.dropna() file_data.shape (5773, 5)

數據轉換類型

面積數據類型轉換

file_data.head() 區域小區名稱戶型面積(㎡)價格(元/月)01234
東城萬國城MOMA1室0廳59.11平米10000
東城北官廳胡同2號院3室0廳56.92平米6000
東城和平里三區1室1廳40.57平米6900
東城菊兒胡同2室1廳57.09平米8000
東城交道口北二條35號院1室1廳42.67平米5500
# 單個值實現 # 切片取值, 去掉字符串后兩位file_data["面積(㎡)"].values[0][:-2] '59.11' # 創建一個空的數組 data_new = np.array([])data_area = file_data["面積(㎡)"].valuesfor i in data_area:data_new = np.append(data_new, np.array(i[:-2]))# 轉換data_new中的數據類型 data_new = data_new.astype(np.float64) # 替換 file_data.loc[:, "面積(㎡)"] = data_new file_data.head() 區域小區名稱戶型面積(㎡)價格(元/月)01234
東城萬國城MOMA1室0廳59.1110000
東城北官廳胡同2號院3室0廳56.926000
東城和平里三區1室1廳40.576900
東城菊兒胡同2室1廳57.098000
東城交道口北二條35號院1室1廳42.675500

戶型表達方式轉換

# 取出需要修改的列 house_data = file_data["戶型"]# 創建一個新數組 temp_list = []# 用repalce方法更改, 并放入新的數組中 for i in house_data:# print(i)new_info = i.replace("房間", "室")temp_list.append(new_info)# 替換數據表中原來的數據 file_data.loc[:, "戶型"] = temp_list file_data 區域小區名稱戶型面積(㎡)價格(元/月)01234...82188219822082218222
東城萬國城MOMA1室0廳59.1110000
東城北官廳胡同2號院3室0廳56.926000
東城和平里三區1室1廳40.576900
東城菊兒胡同2室1廳57.098000
東城交道口北二條35號院1室1廳42.675500
...............
順義怡馨家園3室1廳114.035500
順義旭輝26街區4室2衛59.005000
順義前進花園玉蘭苑3室1廳92.415800
順義雙裕小區2室1廳71.814200
順義櫻花園二區1室1廳35.432700

5773 rows × 5 columns

圖標分析

房源數量、 位置分布分析

# unique()方法去重 file_data["區域"].unique() array(['東城', '豐臺', '亦莊開發區', '大興', '房山', '昌平', '朝陽', '海淀', '石景山', '西城','通州', '門頭溝', '順義'], dtype=object) new_df = pd.DataFrame({"區域":file_data["區域"].unique(),"數量":[0]*13}) new_df 區域數量0123456789101112
東城0
豐臺0
亦莊開發區0
大興0
房山0
昌平0
朝陽0
海淀0
石景山0
西城0
通州0
門頭溝0
順義0
# 獲取每個區域房源數量 # 分組聚合: 按照區域進行分組 # count()聚合, 統計每個區域房源數量 area_count = file_data.groupby(by="區域").count()# 將上面的dataframe的取值 賦值數量列 new_df["數量"] = area_count.values

戶型數量分析

house_data = file_data["戶型"] house_data.head() 0 1室0廳 1 3室0廳 2 1室1廳 3 2室1廳 4 1室1廳 Name: 戶型, dtype: object def all_house(arr):"""統計戶型的數量"""# 去重, 轉化為了numpy字符串數組key = np.unique(arr)# 創建新字典儲存數據result = {}for k in key:# 判斷arr中的每一個值是否與 key中的第一個值相同# 并返回bool類型的seriesmask = (arr == k)# true就保留, false就去除arr_new = arr[mask]# 獲取mask中true的個數v = arr_new.size# 使用k作為索引, arr_new的size作為值result[k] = vreturn resulthouse_info = all_house(house_data) house_info {'0室0廳': 1,'1室0衛': 10,'1室0廳': 244,'1室1衛': 126,'1室1廳': 844,'1室2廳': 13,'2室0衛': 1,'2室0廳': 23,'2室1衛': 120,'2室1廳': 2249,'2室2衛': 22,'2室2廳': 265,'2室3廳': 1,'3室0衛': 3,'3室0廳': 12,'3室1衛': 92,'3室1廳': 766,'3室2衛': 48,'3室2廳': 489,'3室3衛': 1,'3室3廳': 10,'4室1衛': 15,'4室1廳': 58,'4室2衛': 24,'4室2廳': 191,'4室3衛': 5,'4室3廳': 9,'4室5廳': 2,'5室0衛': 1,'5室0廳': 1,'5室1衛': 3,'5室1廳': 7,'5室2衛': 7,'5室2廳': 49,'5室3衛': 3,'5室3廳': 24,'5室4廳': 1,'5室5廳': 1,'6室0廳': 1,'6室1衛': 1,'6室1廳': 1,'6室2廳': 5,'6室3衛': 2,'6室3廳': 6,'6室4衛': 2,'7室1廳': 1,'7室2廳': 2,'7室3廳': 3,'7室4廳': 1,'8室4廳': 2,'9室1廳': 2,'9室2廳': 1,'9室5廳': 2} # 去掉統計數量較少的值 house_data = dict((key, value) for key, value in house_info.items() if value > 50) show_houses = pd.DataFrame({"戶型": [x for x in house_data.keys()],"數量": [x for x in house_data.values()]}) show_houses 戶型數量012345678910
1室0廳244
1室1衛126
1室1廳844
2室1衛120
2室1廳2249
2室2廳265
3室1衛92
3室1廳766
3室2廳489
4室1廳58
4室2廳191
# 圖形展示房屋類型house_type = show_houses["戶型"] house_type_num = show_houses["數量"]plt.barh(range(11), house_type_num)plt.yticks(range(11), house_type) plt.xlim(0, 2500)plt.title("北京市各區域租房數量統計") plt.xlabel("數量") plt.ylabel("房屋類型")# 給每個條上面添加具體數字 for x, y in enumerate(house_type_num):# print(x, y)plt.text(y+0.5, x-0.2, "%s" %y)plt.show()

平均租金分析

df_all = pd.DataFrame({"區域": file_data["區域"].unique(),"房租總金額": [0]*13,"總面積": [0]*13}) df_all.head() 區域房租總金額總面積01234
東城00
豐臺00
亦莊開發區00
大興00
房山00
# series方式按區域分組價格, 疊加聚合 sum_price = file_data["價格(元/月)"].groupby(file_data["區域"]).sum()# series方式按區域分組面積, 疊加聚合 sum_area = file_data["面積(㎡)"].groupby(file_data["區域"]).sum()# 賦值 df_all["房租總金額"] = sum_price.values df_all["總面積"] = sum_area.values df_all 區域房租總金額總面積0123456789101112
東城394555027353.99
豐臺440489350922.79
亦莊開發區131840015995.53
大興228695035884.15
房山72675015275.41
昌平252151535972.92
朝陽20281396166921.72
海淀727935057210.39
石景山115650013956.67
西城563697537141.64
通州271960046625.23
門頭溝104830020258.20
順義219090033668.97
# 計算各個區域每平方米的房租 # round 四舍五入到小數后兩位 df_all["每平米租金(元)"] = round(df_all["房租總金額"] / df_all["總面積"], 2) df_all 區域房租總金額總面積每平米租金(元)0123456789101112
東城394555027353.99144.24
豐臺440489350922.7986.50
亦莊開發區131840015995.5382.42
大興228695035884.1563.73
房山72675015275.4147.58
昌平252151535972.9270.09
朝陽20281396166921.72121.50
海淀727935057210.39127.24
石景山115650013956.6782.86
西城563697537141.64151.77
通州271960046625.2358.33
門頭溝104830020258.2051.75
順義219090033668.9765.07
# 合并兩個表格, 默認內拼接模式 df_merge = pd.merge(new_df, df_all) # 降序排列 df_merge.sort_values(by="每平米租金(元)", ascending=False) 區域數量房租總金額總面積每平米租金(元)9076182512310114
西城442563697537141.64151.77
東城282394555027353.99144.24
海淀605727935057210.39127.24
朝陽159720281396166921.72121.50
豐臺577440489350922.7986.50
石景山175115650013956.6782.86
亦莊開發區147131840015995.5382.42
昌平347252151535972.9270.09
順義297219090033668.9765.07
大興362228695035884.1563.73
通州477271960046625.2358.33
門頭溝285104830020258.2051.75
房山18072675015275.4147.58
# 圖形可視化num = df_merge["數量"] price = df_merge["每平米租金(元)"] lx = df_merge["區域"] l = [i for i in range(13)]# 創建畫布, 承接對象 fig = plt.figure(figsize=(10, 8), dpi=100)# 顯示折線圖 ax1 = fig.add_subplot(111) # 把畫布分為1*1,放在位置1 ax1.plot(l, price, "or-", label="價格")# 在for循環里enumerate()函數是一個枚舉函數, # 可用于將一個可遍歷的數據對象(如列表、元組或字符串) # 組合為一個索引序列,同時列出數據和數據下標。# zip()將可遍歷的倆數據結構對應元素打包成一個個元組返回 for i, (_x, _y) in enumerate(zip(l, price)):# 傳入x, y的坐標(數據值), 以及需要標注的值plt.text(_x+0.2, _y, price[i]) ax1.set_ylim([0, 160]) ax1.set_ylabel("價格") plt.legend(loc="upper right")# 顯示條形圖 ax2 = ax1.twinx() plt.bar(l, num, label="數量", alpha=0.2, color="green") ax2.set_ylabel("數量") plt.legend(loc="upper left") plt.xticks(l, lx)plt.show()

# 查看房屋的最大面積和最小面積 print('房屋最大面積是%d平米'%(file_data['面積(㎡)'].max())) print('房屋最小面積是%d平米'%(file_data['面積(㎡)'].min()))# 查看房租的最高值和最小值 print('房租最高價格為每月%d元'%(file_data['價格(元/月)'].max())) print('房屋最低價格為每月%d元'%(file_data['價格(元/月)'].min())) 房屋最大面積是1133平米 房屋最小面積是11平米 房租最高價格為每月150000元 房屋最低價格為每月566元 # 面積劃分 area_divide = [1, 30, 50, 70, 90, 120, 140, 160, 1200] area_cut = pd.cut(list(file_data["面積(㎡)"]), area_divide) area_cut_num = area_cut.describe() area_cut_num countsfreqscategories(1, 30](30, 50](50, 70](70, 90](90, 120](120, 140](140, 160](160, 1200]
410.007102
7100.122986
15660.271263
10940.189503
10820.187424
3810.065997
2740.047462
6250.108263
# 圖像可視化 area_per = (area_cut_num["freqs"].values)*100labels = ['30平米以下', '30-50平米', '50-70平米', '70-90平米', '90-120平米','120-140平米','140-160平米','160平米以上']plt.figure(figsize=(15, 8), dpi=100)plt.pie(x=area_per, labels=labels, autopct="%.2f %%")plt.legend() plt.show()

#!/usr/bin/env python # coding: utf-8# <h1>Table of Contents<span class="tocSkip"></span></h1> # <div class="toc"><ul class="toc-item"><li><span><a href="#獲取數據" data-toc-modified-id="獲取數據-1"><span class="toc-item-num">1&nbsp;&nbsp;</span>獲取數據</a></span></li><li><span><a href="#數據基本處理" data-toc-modified-id="數據基本處理-2"><span class="toc-item-num">2&nbsp;&nbsp;</span>數據基本處理</a></span><ul class="toc-item"><li><span><a href="#重復值和空值處理" data-toc-modified-id="重復值和空值處理-2.1"><span class="toc-item-num">2.1&nbsp;&nbsp;</span>重復值和空值處理</a></span></li><li><span><a href="#數據轉換類型" data-toc-modified-id="數據轉換類型-2.2"><span class="toc-item-num">2.2&nbsp;&nbsp;</span>數據轉換類型</a></span><ul class="toc-item"><li><span><a href="#面積數據類型轉換" data-toc-modified-id="面積數據類型轉換-2.2.1"><span class="toc-item-num">2.2.1&nbsp;&nbsp;</span>面積數據類型轉換</a></span></li><li><span><a href="#戶型表達方式轉換" data-toc-modified-id="戶型表達方式轉換-2.2.2"><span class="toc-item-num">2.2.2&nbsp;&nbsp;</span>戶型表達方式轉換</a></span></li></ul></li></ul></li><li><span><a href="#圖標分析" data-toc-modified-id="圖標分析-3"><span class="toc-item-num">3&nbsp;&nbsp;</span>圖標分析</a></span><ul class="toc-item"><li><span><a href="#房源數量、-位置分布分析" data-toc-modified-id="房源數量、-位置分布分析-3.1"><span class="toc-item-num">3.1&nbsp;&nbsp;</span>房源數量、 位置分布分析</a></span></li><li><span><a href="#戶型數量分析" data-toc-modified-id="戶型數量分析-3.2"><span class="toc-item-num">3.2&nbsp;&nbsp;</span>戶型數量分析</a></span></li><li><span><a href="#平均租金分析" data-toc-modified-id="平均租金分析-3.3"><span class="toc-item-num">3.3&nbsp;&nbsp;</span>平均租金分析</a></span></li></ul></li></ul></div># In[576]:import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 設置中文字體 from pylab import mpl mpl.rcParams["font.sans-serif"] = ["SimHei"]# # 獲取數據# In[577]:file_data = pd.read_csv("") file_data# In[578]:# 看一看數據的大概情況 file_data.describe()# # 數據基本處理# ## 重復值和空值處理# In[579]:# 重復值 # file_data.duplicated() #通過觀察dataframe的shape來觀測結果file_data = file_data.drop_duplicates() file_data.shape# In[580]:# 空值處理 file_data = file_data.dropna() file_data.shape# ## 數據轉換類型# ### 面積數據類型轉換# In[581]:file_data.head()# In[582]:# 單個值實現 # 切片取值, 去掉字符串后兩位file_data["面積(㎡)"].values[0][:-2]# In[583]:# 創建一個空的數組 data_new = np.array([])data_area = file_data["面積(㎡)"].valuesfor i in data_area:data_new = np.append(data_new, np.array(i[:-2]))# 轉換data_new中的數據類型 data_new = data_new.astype(np.float64) # 替換 file_data.loc[:, "面積(㎡)"] = data_new file_data.head() # ### 戶型表達方式轉換# In[584]:# 取出需要修改的列 house_data = file_data["戶型"]# 創建一個新數組 temp_list = []# 用repalce方法更改, 并放入新的數組中 for i in house_data:# print(i)new_info = i.replace("房間", "室")temp_list.append(new_info)# 替換數據表中原來的數據 file_data.loc[:, "戶型"] = temp_list file_data# # 圖標分析# ## 房源數量、 位置分布分析# In[585]:# unique()方法去重 file_data["區域"].unique()# In[586]:new_df = pd.DataFrame({"區域":file_data["區域"].unique(),"數量":[0]*13}) new_df# In[587]:# 獲取每個區域房源數量 # 分組聚合: 按照區域進行分組 # count()聚合, 統計每個區域房源數量 area_count = file_data.groupby(by="區域").count()# 將上面的dataframe的取值 賦值數量列 new_df["數量"] = area_count.values# ## 戶型數量分析# In[588]:house_data = file_data["戶型"] house_data.head()# In[589]:def all_house(arr):"""統計戶型的數量"""# 去重, 轉化為了numpy字符串數組key = np.unique(arr)# 創建新字典儲存數據result = {}for k in key:# 判斷arr中的每一個值是否與 key中的第一個值相同# 并返回bool類型的seriesmask = (arr == k)# true就保留, false就去除arr_new = arr[mask]# 獲取mask中true的個數v = arr_new.size# 使用k作為索引, arr_new的size作為值result[k] = vreturn resulthouse_info = all_house(house_data) house_info# In[590]:# 去掉統計數量較少的值 house_data = dict((key, value) for key, value in house_info.items() if value > 50)# In[591]:show_houses = pd.DataFrame({"戶型": [x for x in house_data.keys()],"數量": [x for x in house_data.values()]}) show_houses# In[592]:# 圖形展示房屋類型house_type = show_houses["戶型"] house_type_num = show_houses["數量"]plt.barh(range(11), house_type_num)plt.yticks(range(11), house_type) plt.xlim(0, 2500)plt.title("北京市各區域租房數量統計") plt.xlabel("數量") plt.ylabel("房屋類型")# 給每個條上面添加具體數字 for x, y in enumerate(house_type_num):# print(x, y)plt.text(y+0.5, x-0.2, "%s" %y)plt.show()# ## 平均租金分析# In[593]:df_all = pd.DataFrame({"區域": file_data["區域"].unique(),"房租總金額": [0]*13,"總面積": [0]*13}) df_all.head()# In[594]:# series方式按區域分組價格, 疊加聚合 sum_price = file_data["價格(元/月)"].groupby(file_data["區域"]).sum()# series方式按區域分組面積, 疊加聚合 sum_area = file_data["面積(㎡)"].groupby(file_data["區域"]).sum()# 賦值 df_all["房租總金額"] = sum_price.values df_all["總面積"] = sum_area.values df_all# In[595]:# 計算各個區域每平方米的房租 # round 四舍五入到小數后兩位 df_all["每平米租金(元)"] = round(df_all["房租總金額"] / df_all["總面積"], 2) df_all# In[596]:# 合并兩個表格, 默認內拼接模式 df_merge = pd.merge(new_df, df_all) # 降序排列 df_merge.sort_values(by="每平米租金(元)", ascending=False)# In[597]:# 圖形可視化num = df_merge["數量"] price = df_merge["每平米租金(元)"] lx = df_merge["區域"] l = [i for i in range(13)]# 創建畫布, 承接對象 fig = plt.figure(figsize=(10, 8), dpi=100)# 顯示折線圖 ax1 = fig.add_subplot(111) # 把畫布分為1*1,放在位置1 ax1.plot(l, price, "or-", label="價格")# 在for循環里enumerate()函數是一個枚舉函數, # 可用于將一個可遍歷的數據對象(如列表、元組或字符串) # 組合為一個索引序列,同時列出數據和數據下標。# zip()將可遍歷的倆數據結構對應元素打包成一個個元組返回 for i, (_x, _y) in enumerate(zip(l, price)):# 傳入x, y的坐標(數據值), 以及需要標注的值plt.text(_x+0.2, _y, price[i]) ax1.set_ylim([0, 160]) ax1.set_ylabel("價格") plt.legend(loc="upper right")# 顯示條形圖 ax2 = ax1.twinx() plt.bar(l, num, label="數量", alpha=0.2, color="green") ax2.set_ylabel("數量") plt.legend(loc="upper left") plt.xticks(l, lx)plt.show()# In[598]:# 查看房屋的最大面積和最小面積 print('房屋最大面積是%d平米'%(file_data['面積(㎡)'].max())) print('房屋最小面積是%d平米'%(file_data['面積(㎡)'].min()))# 查看房租的最高值和最小值 print('房租最高價格為每月%d元'%(file_data['價格(元/月)'].max())) print('房屋最低價格為每月%d元'%(file_data['價格(元/月)'].min()))# In[599]:# 面積劃分 area_divide = [1, 30, 50, 70, 90, 120, 140, 160, 1200] area_cut = pd.cut(list(file_data["面積(㎡)"]), area_divide) area_cut_num = area_cut.describe() area_cut_num# In[600]:# 圖像可視化 area_per = (area_cut_num["freqs"].values)*100labels = ['30平米以下', '30-50平米', '50-70平米', '70-90平米', '90-120平米','120-140平米','140-160平米','160平米以上']plt.figure(figsize=(15, 8), dpi=100)plt.pie(x=area_per, labels=labels, autopct="%.2f %%")plt.legend() plt.show()

總結

以上是生活随笔為你收集整理的综合案例 -- 北京租房数据统计分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。