常州房價分析
5 人贊了文章
前段時間學習了爬蟲,在網上爬了常州二手房的信息,今天在這邊把爬下來的數據,簡單的整理和數據分析,分析常州二手房市場情況:
首先是要用到的python庫
#conding=utf-8import pandas as pdimport numpy as npimport matplotlib.pyplot as pltplt.rc(font, family=SimHei, size=15)import refrom wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
一、查看數據
data = pd.read_csv(file_.csv,encoding=utf-8)print data.head()
數據已經簡單整理過了,不過還是不怎麼完善,沒有表頭數據里有單位不是數值型,第一個欄位文字信息較大,當然還有缺失的信息。
二、整理清洗數據
①、添加表頭,欄位名還是用英文吧,python處理中文字元還是有些小問題。把價格和面積的單位替換了
data.columns = [title,rooms,area,toward,floors,xiaoqu,diqu,road,price,price_m]def sreplace(df,s): for i in range(len(df)): df[i] = df[i].replace(s,) return dfdata[price] = sreplace(data[price],u萬)data[area] = sreplace(data[area],u㎡)data[price_m] = sreplace(data[price_m],u元/㎡)
②、轉換類型,替換好的價格和面積信息轉換成數據型
data[price] = data[price].astype(float64)data[area] = data[area].astype(float64)data[price_m] = data[price_m].astype(float64)
看看數據怎樣了
data.head()
數據整齊多了,下面開始查看缺失數據
③、缺失數據
data[data.road== Na].count()
data[data.road == Na]
之前在爬取數據的時候,由於部分有缺失,把有缺失的數據一起放在了xiaoqu這個欄位里,下面需要把 這些數據,作拆分,拆分到diqu和road里
data.groupby(diqu).count()[title]
缺失的不少,要正則表達式配對先把地區信息拆分錯了,通過正則配對把區信息取出來,
diquname = re.compile(ur天寧|戚墅堰|新北|武進|鐘樓)for i in data[data.road == Na].index: #正則替換 name = diquname.search(data.loc[i,xiaoqu]) if name is not None: data.loc[i,diqu] = name.group()data.groupby(diqu).count()[title]
有35個數據沒有diqu信息,全部用常州代替:
data.groupby(diqu).count()[title]for i in data[data.diqu == Na].index: data.loc[i,diqu] = u常州
查看缺失數據清洗的怎樣:
data[data.road == Na].head()
road就不管了,中文的路名處理起來非常複雜,本文分析涉及不到路名,下面還整理小區名稱:
觀察小區名稱規律,很少有缺失小區名稱的,且之間是 『』|『』隔開的,直接拆分就可以了
for i in data[data.road == Na].index: s = data.loc[i,xiaoqu].split(|) data.loc[i,xiaoqu] = s[0]
看最後的效果:
data[data.road == Na]
④、刪除重複數據
datan = data.drop_duplicates(title)datan.count()
好了基本這個數據集就整理好了,當然還可以繼續清理,小區名裡面還有部分錯誤信息,這個小區名可以從title裡面來提取,不過這個有點複雜,鑒於小區名錯誤的不多,就忽略不較真了,還有就是road信息也是可以填充的(同小區名,同地區,當然就同路名了)。
三、分析數據
1、分析title信息
f = open(titlelist_text.txt, a,encoding=utf-8)for i in range(len(datan[title])): word = datan[title].iloc[i] f.write(str(word )+ u,)f.close() text = open(titlelist_text.txt,r,encoding=utf-8).read()backgroud_Image = plt.imread(house.jpg)wcd = WordCloud(font_path=msyh.ttc, background_color=white, mask = backgroud_Image, max_font_size=100, random_state = 30).generate(text)image_colors = ImageColorGenerator(backgroud_Image)wcd.recolor(color_func = image_colors)fig = plt.figure(figsize=(12,10))plt.imshow(wcd)plt.axis("off") #去邊框plt.show()
運行結果:
看來常州人比較看重的是,南北通透、採光好、中間戶型、3室2廳。
2、問題1,常州各區二手房房價市場,交易價格,和交易數量?
問題2,某個小區的房價怎樣?
問題1:
先取出各區的房屋數據
datan = datan[datan.diqu != 常州]data_princ_d = datan.groupby(diqu).mean()[price_m].reset_index()data_princ_d
整體的價格
data_princ_d.price_m.mean()
均價10659萬,好像沒外面傳的高
來繪個圖
def autolabel(rects): #添加圖例 for rect in rects: height = rect.get_height() plt.text(rect.get_x()+ rect.get_width()/3, height*1.01,%s % int(height))%pylab inlinedata_by_d = datan.groupby(diqu).count()[title].reset_index()fig = plt.figure(figsize(10,6))ax1 = fig.add_subplot(111)x = np.arange(len(data_princ_d.diqu))bar1 = ax1.bar(x,data_princ_d.price_m)plt.ylabel(單價)plt.xticks(x,data_princ_d.diqu)autolabel(bar1)ax1.set_title(各區房價)ax2 = ax1.twinx()ylim(ymax = 1000)ax2.set_ylabel(數量)ax2.plot(data_by_d.diqu,data_by_d.title,r)plt.show()
總結:整體來說戚墅堰的房價低些,掛牌的房屋數量也少,天寧區和鐘樓區的單位價格更高些(市區主要在這兩個區),新北、武進掛牌待售的房屋較多。
問題2:
查看小區 金地格林郡房價情況 (新北區),取出與金地相關的字元
par = r金地s = pd.Series(datan.xiaoqu.values)c = s[s.str.contains(par)].valuesprint(c)
整理下存儲在set里:
s1 = set()for i in c: s1.add(i)print(s1)
查看均價:
data_j = datan[datan.xiaoqu == 金地格林郡]data_j.price_m.mean()
查看金地格林郡數據情況:
data_j.describe()
總結:這個小區的均價高於常州市均價,最低價與最低價相差快有一半,可能性不大,最低價可能是錯誤數據。
推薦閱讀:
※Python筆記--Matplotlib及seaborn繪圖基礎
※《利用Python進行數據分析》第13章(上) 建模庫介紹
※ch4 概率
※kaggle | talkingdata廣告反欺詐 top 4% 總結
※EXCEL——數據分析師崗位分析