Python实战项目
高血压项目详解(下)
四、爬虫
数据来源 ⇒ 有关高血压文章、文献、论文——外国网站
爬取翻译 ⇒ 爬取文章(高血压——Hypertension)+ 英文翻译成中文
软件模块 ⇒ selenium(模拟自动化测试)+ lxml模块
版本说明 ⇒ selenium == 3.141.0 + lxml == 4.5.0 translate == 3.5.0
步骤
(1)利用selenium中的webdrier
(2)用get使浏览器进入到对应的网址
(3)调用WebDriverWait页面等待,until方法等到某个元素被加载时再进行,until里面可以用elementtobeclickable被占击的方法,在方法里有元组,元组By.CSSSELECTOR ,By.XPath去定位元素.
(4)获取页面 driver.page_source
(5)用lxml里面的etree进行解析,利用xpath进行元素的定位.
(6)抓取到的英文转换成中文——translate模块(只翻译500个字符,250个汉字)
注:程序中对500个字符,250个汉字的应对方法是:正常说话很少能一次性说出250个汉字的,用","把句子分隔,每句话就不足250个汉字,可以进行英译汉了。
(建议,一天内可爬网站有多少个记录,就是你面试平均日爬量)
'''
导包
'''
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from lxml import html
from myhyper.settings import BASE_DIR
import os
import translate
if name=="main":
'''
定义一个driver,模拟启动浏览器
'''
driver=webdriver.Firefox()
url="https://pubmed.ncbi.nlm.nih.gov/?term=hypertension"
driver.get(url)
'''
等待时间 WebDriverWait
实例化WebDriverWait
用until方法去找等待时间
untile后面是对元素的控制,当元素加载完成才能进行操作
1、5年选项是被点击的
2、齿轮图标被点击的
3、齿轮点击后200被选中
保证页面有200个数据
'''
wait=WebDriverWait(driver,5)
'''
EC.element_to_be_clikable()内部的参数是元组,表示定位一个元素
当某个元素能够被点击时
'''
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".ds1>ul>li:nth-child(1)"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".dropdown-block>button"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".per-page-container>select>option:nth-child(5)"))).click()
'''
定义etree
'''
etree=html.etree
html=driver.page_source
doc=etree.HTML(html)
articls=doc.xpath("//article//a[@class='labs-docsum-title']/@href")
base_url="https://pubmed.ncbi.nlm.nih.gov"
for arties in articls:
new_url=base_url+arties
driver.get(new_url)
html2=driver.page_source
doc2=etree.HTML(html2)
titles=doc2.xpath("//h1[@class='heading-title']/text()")[0]
if doc2.xpath("//div[@class='abstract']/div/p"):
abstract=doc2.xpath("//div[@class='abstract']/div/p/text()")[0]
abstract = abstract.strip()
'''
指示翻译的语言,to_lang就是翻译成什么样的语言
'''
trans=translate.Translator(to_lang="chinese")
'''
语言的翻译, 只翻译了500个字符
中国人不会167汉字一句话, 把句子用“,”分隔,逐句翻译
'''
abstracts=abstract.split(",")
graph=""
for sub_abstract in abstracts:
'''
实现了翻译的是子句,连子句成段落,用逗号分隔
'''
comment=trans.translate(sub_abstract)
graph+=comment+","
titles=titles.strip()
'''
连子句成段落的句子,结尾加上"。",把最后的","去掉
'''
graph=graph[:-1]+"。"
with open(os.path.join(BASE_DIR,"files/"+titles+".txt"),'w',encoding="utf8") as f:
f.write(graph)
五、数据分析
数据来源 ⇒ csv文件 + excel 文件 + spss文件
版本说明 ⇒ pandas == 0.25.3 + pyecharts == 1.1.1 + savReaderWriter == 3.4.2
被测人群 ⇒ 1182人
维度说明:
ID ⇒被测人群序号
Age⇒年龄
Sex ⇒性别
FHBP⇒家族遗传
Smoke⇒抽烟
Drink⇒喝酒
BMI⇒身体质量指数
注: Age年龄,只有1,2,3,4.数字很容易分析
1——45岁以下
2——45-55岁
3——55-65岁
4——65岁以上
提示:对于某些分析问题的年龄,定义区间去做
1、分析方向
(1)被测人群的高血压病得病率有多少?
(2)男的女的高血压病的比例是多少?
(3)抽烟人群犯病比率是多少?
(4)喝酒的人群中犯病比率是多少?
2、分析思路
(1)求出总人群与高血压病人群
(2)结果——测试报告:Matplotlib、Pyehcarts画图。
(3)Pycharts画图放到网页中,跟开发结合
(4)前端Echarts展示内容,后端Pyecharts直接展示到前端
(5)两个数据用饼图
(6)跟Django结合一下,形成数据分析前端展示报告
3、分析报告
(1)pyecharts可以结合echarts对数据分析报告可以实现无缝对接
(2)数据分析前端报告:可以结合pyecharts的报告.
(3)读csv文件,读完以后做数据方面的分析,分析报告返回前端
(4)python可以读sav数据文件
①调用模块savReaderWriter里面SavReader类,读取文件
②读取的结果可以用for循环来展示
(5)条件式:数据[条件 & |]找到合乎条件的数据
(6)进行比率的计算,最后pyecharts来画图
注:基本的数据分析给营销、运营、产品等部门提供参考
实现高血压患病率分析图,代码如下。
'''
用pyecharts画高血压患病率和未患病率的对比图
两个维度之间的对比,用饼图
先求样本总人数
'''
all=datas['Hypertension'].count()
'''
先求患病人的人数
'''
ill=datas[datas["Hypertension"]==1]["Hypertension"].count()
'''
未患病人的人数
'''
no_ill=datas[datas["Hypertension"]==0]["Hypertension"].count()
'''
求患病人和未患病人占的百分比,把结果保留2位小数
'''
rate=round(ill/all,2)
unrate=1-rate
'''
用pyecharts画饼图
'''
from pyecharts.charts import Pie
x=["高血压患病率","高血压未患病率"]
y=[rate,unrate]
'''
pyecharts1.0变成化成pie赋值给元组
'''
pie=(
Pie()
.add("高血压患病率分析",[list(z) for z in zip(x,y)])
)
pie.render("高血压患病率分析.html")
词汇拓展
leukemia ⇒白血病
hypertension ⇒高血压
cancer ⇒癌症
anemia ⇒贫血
gastritis ⇒胃炎
tuberculosis ⇒肺结核
代码的github地址:https://github.com/wawacode/high_blood_testing
项目对应的视频地址:
高血压检测5-爬虫爬取pubmed专业信息
https://www.bilibili.com/video/BV1zr4y1P7Jr/
高血压检测6-高血压患病率数据分析报告前端展示
https://www.bilibili.com/video/BV19y4y1E7f2/
高血压检测7-男女高血压患病率思路分析
https://www.bilibili.com/video/BV1s54y1W7sX/
高血压检测8-高血压患病率数据挖掘预测准确率
https://www.bilibili.com/video/BV1xX4y1N7i9/