Python实战项目:高血压项目详解(下)

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     ⇒肺结核

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页