<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用Pandas分析全國城市房價

          共 8611字,需瀏覽 18分鐘

           ·

          2021-08-20 01:32


          導讀:Pandas靈活好用,能夠完成復雜的、重復的、批量的數據處理。本文教你利用Pandas爬取房價,以及分析全國城市的房價。


          作者:李慶輝
          來源:數倉寶貝庫(ID:DataBaby_Family)





          01 利用爬蟲獲取房價


          Pandas在配合做網絡數據采集爬蟲時,也能發(fā)揮其優(yōu)勢,可承擔數據調用、數據存儲的工作。將數據存入DataFrame后,可直接進入下一步分析。本例以獲取某房產網站中房價為目標,來體驗一下Pandas的便捷之處。


          首先利用requests(需要安裝)庫獲取單個小區(qū)的平均價格:


          import requests # 安裝:pip install requests
          # 創(chuàng)建一個Session
          s = requests.Session()
          # 訪問小區(qū)頁面
          xq = s.get('https://bj.lianjia.com/xiaoqu/1111027382589/')
          # 查看頁面源碼
          xq.text
          # 找到價格位置附近的源碼為:
          # <span class="xiaoquUnitPrice">95137</span>
          # 切分與解析
          xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]
          # '93754'


          最終得到這個小區(qū)的平均房價。這里使用了將目標信息兩邊的信息進行切片、形成列表再讀取的方法。也可以用第三方庫Beautiful Soup 4來解析。Beautiful Soup是一個可以從HTML或XML文件中提取數據的Python庫,它能夠通過解析源碼來方便地獲取指定信息。


          我們構建獲取小區(qū)名稱和平均房價的函數:


          # 獲取小區(qū)名稱的函數
          def pa_name(x):
              xq = s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
              name = xq.text.split('detailTitle">')[1].split('</h1>')[0]
              return name

          # 獲取平均房價的函數
          def pa_price(x):
              xq = s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
              price = xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]
              return price


          接下來利用Pandas執(zhí)行爬蟲獲取信息:


          # 小區(qū)列表
          xqs = [11110273775951111027382589,
                 11110273786111111027374569,
                 11110273780691111027374228,
                 116964627385853]

          # 構造數據
          df = pd.DataFrame(xqs, columns=['小區(qū)'])

          # 爬取小區(qū)名
          df['小區(qū)名'] = df.小區(qū).apply(lambda x: pa_name(x))
          # 爬取房價
          df['房價'] = df.小區(qū).apply(lambda x: pa_price(x))

          # 查看結果
          df
          '''
                          小區(qū)      小區(qū)名      房價
          0    1111027377595     瞰都國際   73361
          1    1111027382589  棕櫚泉國際公寓   93754
          2    1111027378611     南十里居   56459
          3    1111027374569     觀湖國際   88661
          4    1111027378069     麗水嘉園   76827
          5    1111027374228  泛海國際碧海園   97061
          6  116964627385853  東山condo  145965
          '''


          可以先用Python的類改造函數,再用鏈式方法調用:


          # 爬蟲類
          class PaChong(object):
              def __init__(self, x):
                  self.s = requests.session()
                  self.xq = self.s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
                  self.name = self.xq.text.split('detailTitle">')[1].split('</h1>')[0]
                  self.price = self.xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]

          # 爬取數據
          (
              df
              .assign(小區(qū)名=df.小區(qū).apply(lambda x: PaChong(x).name))
              .assign(房價=df.小區(qū).apply(lambda x: PaChong(x).price))
          )


          以上網站可能會改版,代碼不適用時需要調整爬蟲代碼。



          02 全國城市房價分析


          中國主要城市的房價可以從以下網址獲?。?/span>

          https://www.creprice.cn/rank/index.html


          該網頁中會顯示上一個月的房價排行情況,先復制前20個城市的數據,然后使用pd.read_clipboard()讀取。我們來分析一下該月的數據(下例中用的是2020年10月數據)。


          import pandas as pd
          import matplotlib.pyplot as plt

          plt.rcParams['figure.figsize'] = (8.05.0# 固定顯示大小
          plt.rcParams['font.family'] = ['sans-serif'# 設置中文字體
          plt.rcParams['font.sans-serif'] = ['SimHei'# 設置中文字體
          plt.rcParams['axes.unicode_minus'] = False # 顯示負號
          dfr = pd.read_clipboard()

          # 取源數據
          dfr.head()
          '''
             序號 城市名稱 平均單價(元/㎡)  環(huán)比 同比
          0   1   深圳    78,722  +2.61%  +20.44%
          1   2   北京    63,554  -0.82%    -1.2%
          2   3   上海    58,831   +0.4%    +9.7%
          3   4   廈門    48,169  -0.61%   +9.52%
          4   5   廣州    38,351  -1.64%  +13.79%
          '''


          查看數據類型:


          dfr.dtypes
          '''
          序號            int64
          城市名稱         object
          平均單價(元/㎡)    object
          環(huán)比           object
          同比           object
          dtype: object
          '''


          數據都是object類型,需要對數據進行提取和類型轉換:


          df = (
              # 去掉千分位符并轉為整型
              dfr.assign(平均單價=dfr['平均單價(元/㎡)'].str.replace(',','').astype(int))
              .assign(同比=dfr.同比.str[:-1].astype(float)) # 去百分號并轉為浮點型
              .assign(環(huán)比=dfr.環(huán)比.str[:-1].astype(float)) # 去百分號并轉為浮點型
              .loc[:,['城市名稱','平均單價','同比','環(huán)比']] # 重命名列
          )


          df.head()
          '''
            城市名稱  平均單價 同比  環(huán)比
          0   深圳  78722  20.44  2.61
          1   北京  63554  -1.20 -0.82
          2   上海  58831   9.70  0.40
          3   廈門  48169   9.52 -0.61
          4   廣州  38351  13.79 -1.64
          '''


          接下來就可以對整理好的數據進行分析了。首先看一下各城市的均價差異,數據順序無須再調整,代碼執(zhí)行效果如圖1所示。


          (
              df.set_index('城市名稱')
              .平均單價
              .plot
              .bar()
          )


          ▲圖1 各城市平均房價


          各城市平均房價同比與環(huán)比情況如圖2所示。


          (
              df.set_index('城市名稱')
              .loc[:, '同比':'環(huán)比']
              .plot
              .bar()
          )


          ▲圖2 各城市平均房價同比和環(huán)比


          將同比與環(huán)比的極值用樣式標注,可見東莞異常突出,房價同比、環(huán)比均大幅上升,如圖3所示。


          (
              df.style
              .highlight_max(color='red', subset=['同比''環(huán)比'])
              .highlight_min(subset=['同比''環(huán)比'])
              .format({'平均單價':"{:,.0f}"})
              .format({'同比':"{:2}%"'環(huán)比':"{:2}%"})
          )


          ▲圖3 各城市平均房價變化樣式圖


          繪制各城市平均單價條形圖,如圖4所示。


          # 條形圖
          (
              df.style
              .bar(subset=['平均單價'], color='yellow')
          )


          ▲圖4 各城市平均單價樣式圖


          將數據樣式進行綜合可視化:將平均單價背景色設為漸變,并指定色系BuGn;同比、環(huán)比條形圖使用不同色系,且以0為中點,體現正負;為比值加百分號。最終效果如圖5所示。


          (
              df.style
              .background_gradient(subset=['平均單價'], cmap='BuGn')
              .format({'同比':"{:2}%"'環(huán)比':"{:2}%"})
              .bar(subset=['同比'], 
                  color=['#ffe4e4','#bbf9ce'], # 上漲、下降的顏色
                  vmin=0, vmax=15# 范圍定為以0為基準的上下15
                  align='zero'
                  )
              .bar(subset=['環(huán)比'], 
                  color=['red','green'], # 上漲、下降的顏色
                  vmin=0, vmax=11# 范圍定為以0為基準的上下11
                  align='zero'
                  )
          )


          ▲圖5 各城市平均房價綜合樣式圖


          關于作者:李慶輝,數據產品專家,某電商公司數據產品團隊負責人,擅長通過數據治理、數據分析、數據化運營提升公司的數據應用水平。


          本文摘編自《深入淺出Pandas:利用Python進行數據處理與分析》,經出版方授權發(fā)布。


          延伸閱讀深入淺出Pandas


          推薦語:這是一本全面覆蓋了Pandas使用者的普遍需求和痛點的著作,基于實用、易學的原則,從功能、使用、原理等多個維度對Pandas做了全方位的詳細講解,既是初學者系統(tǒng)學習Pandas難得的入門書,又是有經驗的Python工程師案頭必不可少的查詢手冊。


          干貨直達??


          更多精彩??

          在公眾號對話框輸入以下關鍵詞
          查看更多優(yōu)質內容!

          PPT | 讀書 | 書單 | 硬核 | 干貨 | 講明白 | 神操作
          大數據 | 云計算 | 數據庫 | Python | 爬蟲 | 可視化
          AI | 人工智能 | 機器學習 | 深度學習 | NLP
          5G | 中臺 | 用戶畫像 1024 | 數學 | 算法 數字孿生

          據統(tǒng)計,99%的大咖都關注了這個公眾號
          ??
          瀏覽 12
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  这里只有精品视频在线 | 黄色激情网站 | 一级片免费播放 | 九一视频网址 | 欧美三级片中文字幕在线观看 |