使用 Python 抓取闷盔、分析弯洗、可視化—萬家醫(yī)療診所信息

本篇文章是使用 Python 抓取萬家醫(yī)療上面的診所信息,并且對關(guān)鍵信息進行分析逢勾,實現(xiàn)數(shù)據(jù)可視化牡整。由于時間和能力的問題,能抓取的數(shù)據(jù)類型較少敏沉,分析的維度也不足果正。但是嘗試去剖析在國家倡導(dǎo)分級診療的大環(huán)境下炎码,移動醫(yī)療在社區(qū)診所上的發(fā)展情況盟迟。所以抓取了萬家醫(yī)療網(wǎng)站里面的診所數(shù)據(jù),并從診所區(qū)域分布潦闲、科室類型以及是否支持醫(yī)保上進行了數(shù)據(jù)分析和可視化攒菠。

<strong>準備工作</strong>
首先是開始抓取前準備工作,導(dǎo)入需要使用的庫文件歉闰,爬蟲主要使用的是requests和BeautifulSoup兩個庫辖众,數(shù)據(jù)分析主要使用 Numpy 和 Pandas 兩個庫,外加 matplotlib 庫實現(xiàn)數(shù)據(jù)可視化和敬。

<pre>import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
</pre>

<strong>抓取診所列表信息</strong>
在抓取前需要先觀察下萬家醫(yī)療診所列表頁面的的結(jié)構(gòu)凹炸,URL為“"https://www.pinganwj.com/clinic/pa1”,其中 ”pg1”為頁面數(shù)昼弟,共有846個頁面啤它,預(yù)計診所有8460家左右,可以使用循環(huán)遍歷所有的頁面舱痘,獲取信息变骡。

<pre>#設(shè)置 url 的前面部分
url = "https://www.pinganwj.com/clinic/"
</pre>

確定了 URL 鏈接之后,還需要設(shè)置瀏覽器頭部(headers)信息芭逝,否則系統(tǒng)會識別爬蟲程序塌碌,從而阻止訪問頁面。

<pre>#設(shè)置url的前面部分
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Accept':'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, /; q=0.01',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding':'utf-8',
'Connection':'keep-alive',
'Referer':'http://www.baidu.com/link?url=_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7d00006bd600000003582bfd1f'
}
</pre>

使用 for 循環(huán)生成 1-847 的數(shù)字旬盯,轉(zhuǎn)化格式后與前面的 URL 固定部分拼成要抓取的 URL台妆。這里我們設(shè)置每兩個頁面間隔 0.5 秒。抓取到的頁面保存在 html 中胖翰。

<pre>#循環(huán)抓取列表頁信息
for i in range(1,847):
if i == 1:
i=str(i)
a=(url+'pg'+i)
r=requests.get(url=a,headers=headers)
html=r.text
else:
i=str(i)
a=(url+'pg'+i)
r=requests.get(url=a,headers=headers)
html2=r.text
html = html + html2
#每次間隔0.5秒
time.sleep(0.5)
#在頁面打印爬取進度
print ('正在爬取第'+i+"頁")
</pre>

@爬取進度頁面|center

<strong>解析頁面并提取信息</strong>
頁面爬取下來之后接剩,需要使用 BeautifulSoup 對頁面進行解析,變成我們在瀏覽器查看源代碼中看到的樣子泡态,這樣我們才能提取關(guān)鍵信息搂漠。

<pre>#使用 BeautifulSoup 解析抓取的頁面內(nèi)容
wj = BeautifulSoup(html,'html.parser')
</pre>

到目前為止,我們已經(jīng) 800+ 多個頁面的信息爬取下來某弦,并且通過 BeautifulSoup 解釋為我們常見的源代碼方式桐汤。下面就是通過分析爬取字段中 <code>Div</code>的 id 或者 class 提取關(guān)鍵信息而克。

<pre>#將診所列表中的信息保存在 hospital 中,其中 find_all 獲取的是一個 list,就是每個診所就是list上的一個對應(yīng)元素怔毛。
hospital = wj.find_all('div',attrs = {"class":"cli-list left"})
</pre>

繼續(xù)在<code>hospital</code>中提取診所名稱员萍、醫(yī)保信息、科室和地區(qū)信息拣度,將各項信息存儲到各自的<code>list</code>中碎绎。使用到的方法基本一樣,需要自行調(diào)整一下定位就好抗果。

<pre>#獲取診所名稱
hn = []
for a in hospital:
hospital_name = a.h1.get_text()
hn.append(hosptal_name)

獲取診所醫(yī)保信息

yb = []
for c in hospital:
yibao_info = c.find_all('span', attrs = {'class':'medicare'})
yibao = yibao_info
yb.append(yibao)

獲取診所科室

ks = []
for b in hospital:
keshi = b.p.get_text()
ks.append(keshi)

獲取診所地址

address = []
for d in hospital:
address_info = d.find_all('script')
address.append(address_info)
</pre>

<strong>數(shù)據(jù)分析和數(shù)據(jù)可視化</strong>
將拿到的數(shù)據(jù)使用 Pandas 庫生成數(shù)據(jù)表筋帖,方便后面分析。

<pre>#將診所名稱冤馏、醫(yī)保信息日麸、科室和地區(qū)等信息生成數(shù)據(jù)表
hospital_list=pd.DataFrame({'hospital_name':hn,'hospital_keshi':ks,'hospital_yibao':yb,'hospital_address':address})
</pre>

<strong>診所分布的省份分析:</strong>
通過使用 groupby 對診所所在省份進行匯總,通過條形圖展示每個省份的診所數(shù)量逮光。

<pre>#對每個省份的診所數(shù)量進行匯總
prov = wj.groupby('hospital_address')['hospital_address'].agg('count')

對省份數(shù)據(jù)進行排序

prov.sort_values(inplace=True)

生成省份名稱列表代箭,下面用作坐標值

prov_name=prov.index

定義圖表比例

plt.figure(figsize=(16,9))

定義圖表類型并且傳入?yún)?shù)

plt.barh(range(len(prov)),prov,tick_label=prov_name)

標注X軸的標簽

plt.xlabel(u'診所數(shù)量',fontsize ="14")

用來正常顯示中文標簽

plt.rcParams['font.sans-serif']=['SimHei']
plt.show()
</pre>

@診所省份分布圖

有上面的圖片可以看出,河南涕刚、河北嗡综、黑龍江三個省份的診所數(shù)量最多《拍可能的原因是萬家醫(yī)療在不同省份推廣資源的分配導(dǎo)致的极景。但是跟深層次的去考慮:為什么不是北京上海廣東這些大城市呢?其實很好理解碑幅,北京戴陡、上海、廣東可以說是中國醫(yī)療資源最密集的地方沟涨,但是這些地方都被大型三甲醫(yī)院占據(jù)恤批,民營的、小型的社區(qū)診所要發(fā)展就比較困難裹赴。

<strong>診所分布的科室類型分析:</strong>
使用相同的方式喜庞,對不同診所的科室類型進行分析,分析方法和展示形式基本一樣棋返。但是需要強調(diào)的是延都,因為有的診所擁有多個科室,所以對于這類診所睛竣,我將它們定義為綜合類型診所晰房。

<pre>#對各種科室的診所數(shù)量進行匯總
keshi = wj.groupby("hospital_keshi")["hospital_keshi"].agg("count")

對科室類型數(shù)據(jù)進行排序

keshi.sort_values(inplace=True)

生成科室名稱列表,下面用作坐標值

keshi_name=keshi.index

定義圖表比例

plt.figure(figsize=(9,6))

定義圖表類型并且傳入?yún)?shù)

plt.barh(range(len(keshi)),keshi,tick_label=keshi_name)

標注X軸的標簽

plt.xlabel(u'診所數(shù)量',fontsize ="14")

用來正常顯示中文標簽

plt.rcParams['font.sans-serif']=['SimHei']

展示圖表

plt.show()
</pre>

@診所科室分布

從上面的圖表可以看出,占比最大的診所類型是口腔科類型的診所殊者,這些診所大多是民營的与境,并且傾向私人經(jīng)營較多。還有中醫(yī)科主要就是一些私人開辦的中醫(yī)館猖吴。

<strong>診所是否支持醫(yī)保:</strong>
對于社區(qū)診所來說摔刁,患者還是比較看重是否支持醫(yī)保支付的,所以醫(yī)保信息也是相當關(guān)鍵海蔽。獲取得到的醫(yī)保數(shù)據(jù)中共屈,支持醫(yī)保的顯示“是”,不支持醫(yī)保的為空党窜。統(tǒng)計醫(yī)保支付的占比拗引,并且制作稱餅圖。

<pre>#統(tǒng)計匯總醫(yī)保數(shù)量
yibaoinfo = wj.groupby("hospital_yibao")["hospital_yibao"].agg("count")

計算支持醫(yī)保和非醫(yī)保數(shù)量

yibaoinfo = np.array([yibaoinfo.values,8460-yibaoinfo.values])

定義圖表大小

plt.figure(figsize=(9,6))

定義標簽值

labels = ['有醫(yī)保', '無醫(yī)保']

定義數(shù)據(jù)值的大小刑然,獲取上面的列表信息

size = [yibaoinfo[0],yibaoinfo[1]]
定義圖表類型為餅圖
plt.pie(size, labels=labels)
plt.axis('equal')
plt.show()
</pre>

@是否支持醫(yī)保分布|center

從上圖可以看到寺擂,不到一半的診所支持醫(yī)保暇务,也可能是網(wǎng)站信息更新不全泼掠,看來醫(yī)保的路還要繼續(xù)走呢。

以上就是萬家醫(yī)療診所信息爬取和分析的總過程垦细,因為能力的原因择镇,所以爬取數(shù)據(jù)的維度較少,代碼質(zhì)量和圖表也是沒有經(jīng)過美化括改,顯得稍微簡陋了一些腻豌。如果后面有時間,還會分享更多關(guān)于移動醫(yī)療+爬蟲+數(shù)據(jù)科學(xué)+數(shù)據(jù)可視化的文章嘱能,感謝大家多多關(guān)注吝梅。

本文為原創(chuàng)文章,如需轉(zhuǎn)載請注明原文出處:<a >http://wp.me/p86ISR-gO</a>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惹骂,一起剝皮案震驚了整個濱河市苏携,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌对粪,老刑警劉巖右冻,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異著拭,居然都是意外死亡纱扭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門儡遮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乳蛾,“玉大人,你說我怎么就攤上這事∷嘁叮” “怎么了忆首?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長被环。 經(jīng)常有香客問我糙及,道長,這世上最難降的妖魔是什么筛欢? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任浸锨,我火速辦了婚禮,結(jié)果婚禮上版姑,老公的妹妹穿的比我還像新娘柱搜。我一直安慰自己,他們只是感情好剥险,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布聪蘸。 她就那樣靜靜地躺著,像睡著了一般表制。 火紅的嫁衣襯著肌膚如雪健爬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天么介,我揣著相機與錄音娜遵,去河邊找鬼。 笑死壤短,一個胖子當著我的面吹牛设拟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播久脯,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼纳胧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帘撰?” 一聲冷哼從身側(cè)響起跑慕,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骡和,沒想到半個月后相赁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡慰于,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年钮科,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婆赠。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡绵脯,死狀恐怖佳励,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛆挫,我是刑警寧澤赃承,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站悴侵,受9級特大地震影響瞧剖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜可免,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一抓于、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浇借,春花似錦捉撮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闯估,卻和暖如春灼舍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睬愤。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工片仿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尤辱。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像厢岂,于是被迫代替她去往敵國和親光督。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 北方的雪人含著一把南方的鹽 于是顯得愈發(fā)潔白塔粒,高貴 她從北極或者乞力馬扎羅來 一只北極熊或者風干了的豹尸 尾隨她结借,...
    素覆以往閱讀 312評論 5 8
  • #一級標題 1.內(nèi)容1 >這是我的引用1 [百度](http://www.baidu.com) **這段是粗體 *...
    linxiaoziruo閱讀 126評論 0 0
  • 本周六日正值元宵佳節(jié),我和媽媽以及小姨一家來到延慶卒茬,周六去了龍慶峽船老,欣賞了擁有濃郁冬奧會氛圍的冰燈,周日去了石京龍...
    偏離軌道之路閱讀 614評論 3 2
  • 秋訊 也許圃酵!你早應(yīng)該相信 大地上布滿了 明亮的波紋—— 它們像回聲一樣湮開 吞沒了濕濕的 苦顏色草葉 大口大口喘氣...
    愛亦如詩閱讀 306評論 0 1