您的位置:首页 > 其它

数据可视化以及paddlepaddle安装 百度深度学习7日—Day01

2020-04-21 19:05 495 查看

百度深度学习7日—Day01数据可视化以及框架安装

  • 疫情数据可视化
  • 快速安装paddlepaddle

    7日的学习,我们将从学习paddlepaddle深度学习框架开始,一步一步接触到神经网络的训练,评估,部署。
    所以,我们需要先从安装paddlepaddle框架开始
    所幸,paddlepaddle的安装十分的简单

    开始安装paddle

    paddlepaddle中提供了快速安装的帮助教程
    我们可以访问https://www.paddlepaddle.org.cn/install/quick
    大家可以根据自己的环境选择不同的安装方式
    这里,我选择的是Windows环境下conda的安装
    我的具体环境是python3.6.10+CUDA10.1+cudnn7.3+
    *注意!*我们安装的是gpu的版本,接下来的教程只针对想要安装gpu版本且拥有CUDA环境的人
    (关于CUDA的安装可以通过搜索很容易得到,因为篇幅,这里不过多叙述)
    (使用cpu版本的安装方法同样可以在这个页面找到,而且会简单很多)


    这里,我们需要先给anaconda添加国内源

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
    conda config --set show_channel_urls yes

    最好的话,我们可以新建一个conda的虚拟环境,专门给paddle用
    这里name是随意的

    conda create --name paddle python=3.7
    activate paddle

    我们可以通过输入命令来验证一下python环境
    输入以下指令确认python位置

    where python3

    检查 Python 3 的版本,确认是 3.5.1+/3.6/3.7

    python3 --version

    然后,我们通过命令安装(使用的国内源)

    conda install paddlepaddle-gpu cudatoolkit=10.0

    验证paddlepaddle环境

    我们进入刚刚的虚拟环境
    输入python进入python解释器
    输入

    import paddle.fluid
    paddle.fluid.install_check.run_check()

    如果出现Your Paddle Fluid is installed successfully!
    说明我们已经成功安装了

    疫情数据可视化

    神经网络训练中最重要的几件事,其中无非就有训练集的一个收集和预处理
    那么第一天
    就让我们来看看通过爬虫得到数据并且通过pyecharts进行可视化

    爬取丁香园公开的统计数据

    上网的全过程:

    普通用户
    打开浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 渲染到页面上。

    爬虫程序
    模拟浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 提取有用的数据 --> 保存到本地/数据库。

    爬虫的过程:

    1.发送请求(requests模块)

    2.获取响应数据(服务器返回)

    3.解析并提取数据(re正则)

    4.保存数据

    我们用到了:
    request模块

    requests是python实现的简单易用的HTTP库,官网地址:http://cn.python-requests.org/zh_CN/latest/

    re模块

    re模块是python用于匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,

    import json
    import re
    import requests
    import datetime
    
    today = datetime.date.today().strftime('%Y%m%d')   #20200315
    
    def crawl_dxy_data():
    """
    爬取丁香园实时统计数据,保存到data目录下,以当前日期作为文件名,存JSON文件
    """
    response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia') #request.get()用于请求目标网站
    print(response.status_code)                                          # 打印状态码
    
    try:
    url_text = response.content.decode()                             #更推荐使用response.content.deocde()的方式获取响应的html页面
    #print(url_text)
    url_content = re.search(r'window.getAreaStat = (.*?)}]}catch',   #re.search():扫描字符串以查找正则表达式模式产生匹配项的第一个位置 ,然后返回相应的match对象。
    url_text, re.S)                          #在字符串a中,包含换行符\n,在这种情况下:如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始;
    #而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。
    texts = url_content.group()                                      #获取匹配正则表达式的整体结果
    content = texts.replace('window.getAreaStat = ', '').replace('}catch', '') #去除多余的字符
    json_data = json.loads(content)
    with open('data/' + today + '.json', 'w', encoding='UTF-8') as f:
    json.dump(json_data, f, ensure_ascii=False)
    except:
    print('<Response [%s]>' % response.status_code)
    
    def crawl_statistics_data():
    """
    获取各个省份历史统计数据,保存到data目录下,存JSON文件
    """
    with open('data/'+ today + '.json', 'r', encoding='UTF-8') as file:
    json_array = json.loads(file.read())
    
    statistics_data = {}
    for province in json_array:
    response = requests.get(province['statisticsData'])
    try:
    statistics_data[province['provinceShortName']] = json.loads(response.content.decode())['data']
    except:
    print('<Response [%s]> for url: [%s]' % (response.status_code, province['statisticsData']))
    
    with open("data/statistics_data.json", "w", encoding='UTF-8') as f:
    json.dump(statistics_data, f, ensure_ascii=False)
    
    if __name__ == '__main__':
    crawl_dxy_data()
    crawl_statistics_data()

    运行以上代码,我们需要在代码同目录下创建data文件夹
    运行成功后,在data文件夹下能够得到两个文件
    分别是:
    statistics_data.json
    和一个今天日期的json

    安装第三方库pyecharts

    Echarts 是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。
    而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。pyecharts api可以参考:

    https://pyecharts.org/#/zh-cn/chart_api

    使用 options 配置项,在 pyecharts 中,一切皆 Options。

    主要分为全局配置组件和系列配置组件。

    (1)系列配置项 set_series_opts(),可配置图元样式、文字样式、标签样式、点线样式等;

    (2)全局配置项 set_global_opts(),可配置标题、动画、坐标轴、图例等;

    pyecharts非常好用!!!
    我们通过pip安装

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

    如果下载时出现断线和速度过慢的问题导致下载失败,可以尝试使用其他国内源
    当出现Successfully installed pyecharts-1.7.1 simplejson-3.17.0时
    我们就安装成功了

    数据可视化地图

    全国地图

    import json
    import datetime
    from pyecharts.charts import Map
    from pyecharts import options as opts
    
    # 读原始数据文件
    today = datetime.date.today().strftime('%Y%m%d')   #20200315
    datafile = 'data/'+ today + '.json'
    with open(datafile, 'r', encoding='UTF-8') as file:
    json_array = json.loads(file.read())
    
    # 分析全国实时确诊数据:'confirmedCount'字段
    china_data = []
    for province in json_array:
    china_data.append((province['provinceShortName'], province['confirmedCount']))
    china_data = sorted(china_data, key=lambda x: x[1], reverse=True)                 #reverse=True,表示降序,反之升序
    
    print(china_data)
    # 全国疫情地图
    # 自定义的每一段的范围,以及每一段的特别的样式。
    pieces = [
    {'min': 10000, 'color': '#540d0d'},
    {'max': 9999, 'min': 1000, 'color': '#9c1414'},
    {'max': 999, 'min': 500, 'color': '#d92727'},
    {'max': 499, 'min': 100, 'color': '#ed3232'},
    {'max': 99, 'min': 10, 'color': '#f27777'},
    {'max': 9, 'min': 1, 'color': '#f7adad'},
    {'max': 0, 'color': '#f7e4e4'},
    ]
    labels = [data[0] for data in china_data]
    counts = [data[1] for data in china_data]
    
    m = Map()
    m.add("累计确诊", [list(z) for z in zip(labels, counts)], 'china')
    
    #系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
    m.set_series_opts(label_opts=opts.LabelOpts(font_size=12),
    is_show=False)
    #全局配置项,可配置标题、动画、坐标轴、图例等
    m.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据',
    subtitle='数据来源:丁香园'),
    legend_opts=opts.LegendOpts(is_show=False),
    visualmap_opts=opts.VisualMapOpts(pieces=pieces,
    is_piecewise=True,   #是否为分段型
    is_show=True))       #是否显示视觉映射配置
    #render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
    m.render(path='./data/数据.html')
    
    这里代码都有完善的注释,就不拆解来讲了
    
    ### 数据可视化湖北省地图
    
    ```python
    import json
    import datetime
    from pyecharts.charts import Map
    from pyecharts import options as opts
    
    # 读原始数据文件
    today = datetime.date.today().strftime('%Y%m%d')   #20200315
    datafile = 'data/'+ today + '.json'
    with open(datafile, 'r', encoding='UTF-8') as file:
    json_array = json.loads(file.read())
    
    # 分析湖北省实时确诊数据
    # 读入规范化的城市名称,用于规范化丁香园数据中的城市简称
    with open('/home/aistudio/data/data24815/pycharts_city.txt', 'r', encoding='UTF-8') as f:
    defined_cities = [line.strip() for line in f.readlines()]
    
    def format_city_name(name, defined_cities):
    for defined_city in defined_cities:
    if len((set(defined_city) & set(name))) == len(name):
    name = defined_city
    if name.endswith('市') or name.endswith('区') or name.endswith('县') or name.endswith('自治州'):
    return name
    return name + '市'
    return None
    
    province_name = '湖北'
    for province in json_array:
    if province['provinceName'] == province_name or province['provinceShortName'] == province_name:
    json_array_province = province['cities']
    hubei_data = [(format_city_name(city['cityName'], defined_cities), city['confirmedCount']) for city in
    json_array_province]
    hubei_data = sorted(hubei_data, key=lambda x: x[1], reverse=True)
    
    print(hubei_data)
    
    labels = [data[0] for data in hubei_data]
    counts = [data[1] for data in hubei_data]
    pieces = [
    {'min': 10000, 'color': '#540d0d'},
    {'max': 9999, 'min': 1000, 'color': '#9c1414'},
    {'max': 999, 'min': 500, 'color': '#d92727'},
    {'max': 499, 'min': 100, 'color': '#ed3232'},
    {'max': 99, 'min': 10, 'color': '#f27777'},
    {'max': 9, 'min': 1, 'color': '#f7adad'},
    {'max': 0, 'color': '#f7e4e4'},
    ]
    
    m = Map()
    m.add("累计确诊", [list(z) for z in zip(labels, counts)], '湖北')
    m.set_series_opts(label_opts=opts.LabelOpts(font_size=12),
    is_show=False)
    m.set_global_opts(title_opts=opts.TitleOpts(title='湖北省实时确诊数据',
    subtitle='数据来源:丁香园'),
    legend_opts=opts.LegendOpts(is_show=False),
    visualmap_opts=opts.VisualMapOpts(pieces=pieces,
    is_piecewise=True,
    is_show=True))
    m.render(path='./data/湖北省数据.html')

    增长趋势图

    import numpy as np
    import json
    from pyecharts.charts import Line
    from pyecharts import options as opts
    
    # 读原始数据文件
    datafile = 'data/statistics_data.json'
    with open(datafile, 'r', encoding='UTF-8') as file:
    json_dict = json.loads(file.read())
    
    # 分析各省份2月1日至今的新增确诊数据:'confirmedIncr'
    statistics__data = {}
    for province in json_dict:
    statistics__data[province] = []
    for da in json_dict[province]:
    if da['dateId'] >= 20200201:
    statistics__data[province].append(da['confirmedIncr'])
    
    # 获取日期列表
    dateId = [str(da['dateId'])[4:6] + '-' + str(da['dateId'])[6:8] for da in json_dict['湖北'] if
    da['dateId'] >= 20200201]
    
    # 全国新增趋势
    all_statis = np.array([0] * len(dateId))
    for province in statistics__data:
    all_statis = all_statis + np.array(statistics__data[province])
    
    all_statis = all_statis.tolist()
    # 湖北新增趋势
    hubei_statis = statistics__data['湖北']
    # 湖北以外的新增趋势
    other_statis = [all_statis[i] - hubei_statis[i] for i in range(len(dateId))]
    
    line = Line()
    line.add_xaxis(dateId)
    line.add_yaxis("全国新增确诊病例",   #图例
    all_statis,       #数据
    is_smooth=True,   #是否平滑曲线
    linestyle_opts=opts.LineStyleOpts(width=4, color='#B44038'),#线样式配置项
    itemstyle_opts=opts.ItemStyleOpts(color='#B44038',          #图元样式配置项
    border_color="#B44038",   #颜色
    border_width=10))         #图元的大小
    line.add_yaxis("湖北新增确诊病例", hubei_statis, is_smooth=True,
    linestyle_opts=opts.LineStyleOpts(width=2, color='#4E87ED'),
    label_opts=opts.LabelOpts(position='bottom'),              #标签在折线的底部
    itemstyle_opts=opts.ItemStyleOpts(color='#4E87ED',
    border_color="#4E87ED",
    border_width=3))
    line.add_yaxis("其他省份新增病例", other_statis, is_smooth=True,
    linestyle_opts=opts.LineStyleOpts(width=2, color='#F1A846'),
    label_opts=opts.LabelOpts(position='bottom'),              #标签在折线的底部
    itemstyle_opts=opts.ItemStyleOpts(color='#F1A846',
    border_color="#F1A846",
    border_width=3))
    line.set_global_opts(title_opts=opts.TitleOpts(title="新增确诊病例", subtitle='数据来源:丁香园'),
    yaxis_opts=opts.AxisOpts(max_=16000, min_=1, type_="log",    #坐标轴配置项
    splitline_opts=opts.SplitLineOpts(is_show=True),#分割线配置项
    axisline_opts=opts.AxisLineOpts(is_show=True)))#坐标轴刻度线配置项
    line.render(path='./data/趋势图.html')

    以及我们的饼状图

    import json
    import datetime
    from pyecharts.charts import Map, Pie
    from pyecharts import options as opts
    
    # 读原始数据文件
    today = datetime.date.today().strftime('%Y%m%d')   #20200315
    datafile = 'data/'+ today + '.json'
    with open(datafile, 'r', encoding='UTF-8') as file:
    json_array = json.loads(file.read())
    
    # 分析全国实时确诊数据:'confirmedCount'字段
    china_data = []
    for province in json_array:
    china_data.append((province['provinceShortName'], province['confirmedCount']))
    china_data = sorted(china_data, key=lambda x: x[1], reverse=True)                 #reverse=True,表示降序,反之升序
    
    print(china_data)
    labels = [data[0] for data in china_data]
    counts = [data[1] for data in china_data]
    
    m = Pie(init_opts=opts.InitOpts(height='900px'))
    m.add("累计确诊", [list(z) for z in zip(labels, counts)], center=["50%", "60%"], radius=['0%', '40%']) #,)center=[100,50]
    
    m.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}", font_size=12),
    is_show=False)
    
    #全局配置项,可配置标题、动画、坐标轴、图例等
    m.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据',
    subtitle='数据来源:丁香园'),
    legend_opts=opts.LegendOpts(is_show=False, type_="scroll", pos_left="80%", orient="vertical"),
    )
    
    #render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
    m.render(path='./data/饼状图.html')

    可以看到,pyecharts使用非常的方便
    结果图放不出来,大家可以自行运行查看

    • 点赞 9
    • 收藏
    • 分享
    • 文章举报
    Nullius 发布了4 篇原创文章 · 获赞 14 · 访问量 1861 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐