鏈家數據分析一--數據離散化處理

關於
學習日月光華老師的《Python數據分析從入門到機器學習》,通過寫該文來鞏固數據分析中使用的知識點。
主要是針對鏈家的數據進行各個不同方向的分析,本文是第一篇,針對數據中各個房源成交單價的分析。
準備
工具 :Anaconda、juyter notebook
類庫:numpy、pandas、matplotlib
分析及代碼實現
想要進行數據分析,首先肯定是要讀入整個的數據,由於整個數據有有個.csv文件,如下圖

data_list = []
for i in range(1, 8):
    try:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i), encoding='gbk')
    except:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i))
    finally:
        data_list.append(data)

由於有7個文件,通過一個循環來讀入,然後放到定義的data_list中去,由於每個文件夾的編碼方式不一致,我們通過try...except...finally來實現讀取,代碼如上面。
    涉及知識點:pandas.read_csv()讀取csv文件的數據
把所有的數據放到list中後,下面就就行多表合併,取出list中的數據合併成一個DataFrame中去,並且賦值給data如下:

data = pd.concat(data_list)

查看合併後的表格式,如下:

    涉及知識點:
   concat多表合併
      pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None,     levels=None, names=None, verify_integrity=False)
      1.objs: series,dataframe或者是panel構成的序列lsit
      2.axis: 需要合併鏈接的軸,0是行,1是列
      3.join:連接的方式 inner,或者outer

然後取出cjdanjia一列的數據,並且對其進行數據清洗

dj = data.cjdanjia.dropna() #取出cjdanjia一列的數據,並且清洗掉數據中NaN值
dj = dj.map(lambda x: round(float(x.split('元')[0])/10000, 1)) #清洗掉單價後面的元/平,得到以萬元爲單位的float類型的Series 
dj = dj[dj > 0] #清洗掉數據中爲0的數據

結果如下圖:

    涉及知識點:
     a.DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
      1.how值爲any或者all.all僅在切片元素全爲NA時才拋棄該行(列),默認爲any
      2.thresh=3 那麼一行當中至少有三個非NA值時纔將其保留
     b.map() 是一個Series的函數,DataFrame結構中沒有map()。map()將一個自定義函數應用於Series結構中的每個元素(elements)。

經過數據清洗後,得到了單價的有效Series,下面對該Series離散處理

bins = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16] #定義數據離散的區間
pd.cut(dj, bins).value_counts() #得出每個區間的數量

處理後的結果如下:


    涉及知識點:
     pandas快速定義分類
      pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
      x:必須是一維數組
      bins: 即不同的面元(就是不同的範圍)接受三種類型的輸入 整數,序列(比如數組)和IntervalIndex---輸入整數,進行平均分成整數等份
      right:最後一個bins是否包含最右邊的數據,默認爲True(爲左開右閉)
     value_counts()
      計算數據出現的頻率

數據進行離散化,通過pandas的繪圖函數plot()進行直方圖繪圖

zongjia.plot.barh(figsize = (10, 8)) #進行直方圖繪圖

    涉及知識點:
     Series.plot方法的函數:
      label:用於圖例的標籤
      ax:要在其上進行繪製的matplotlib subplot對象。如果沒有設置,則使用當前matplotlib subplot
      style:將要傳給matplotlib的風格字符串(for example: ‘ko–’)
      alpha:圖表的填充不透明(0-1)
      kind:可以是’line’, ‘bar’, ‘barh’, ‘kde’
      logy:在Y軸上使用對數標尺
      use_index:將對象的索引用作刻度標籤
      rot:旋轉刻度標籤(0-360)
      xticks:用作X軸刻度的值
      yticks:用作Y軸刻度的值
      xlim:X軸的界限
      ylim:Y軸的界限
      grid:顯示軸網格線
      figsize:表示圖像大小的元組
直方圖展示如下:

總結
到目前爲止,對單價的分析到此爲止,通過直方圖能夠直觀的展示北京地區各板塊的成交房源單價區間。
未完,後面陸續寫會針對其他的方向對鏈家數據進行分析。

    如果對您有點幫助的話,麻煩您給點個贊,謝謝。

鏈家數據分析二-數據分組處理:鏈家數據分析二-數據分組處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章