Day01-图像处理原理与深度学习入门

文章目录

  • Day01-图像处理原理与深度学习入门
    • 作业说明
    • 一、数据准备
    • 二、疫情地图
    • 完成作业
      • paddle的本地安装
      • 绘制疫情饼图

作业说明

今天的实战项目是“新冠疫情可视化”。

  • 作业1:飞桨本地安装并提交安装成功的截图
  • 作业2:请根据课上所学内容,爬取3月31日当天丁香园公开的统计数据,根据累计确诊数,使用pyecharts绘制疫情分布图(饼图),如下图所示,提交截图。

Pycharts api可参考:https://pyecharts.org/#/zh-cn/

一、数据准备

上网的全过程:

  • 普通用户

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

爬虫的过程:

  1. 发送请求(requests模块)
  2. 获取响应数据(服务器返回)
  3. 解析并提取数据(re正则)
  4. 保存数据

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

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

爬虫整体如下:

import json
import re
import requests
import datetimetoday = datetime.date.today().strftime('%Y%m%d')   #20200315def 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()

这里因为我们的作业是使用的累计确诊数,所以其实爬虫程序只需要一半就够了,即我们只需要 crawl_dxy_data()函数。至于历史统计数据,也一起生成了,但暂时还用不到。

通过反序列化实现文件的存储,我们绘制疫情图时需要的就是 20200331.json文件的数据。

二、疫情地图

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

使用 options 配置项,在 pyecharts 中,一切皆 Options。主要分为全局配置组件和系列配置组件。
(1)系列配置项 set_series_opts(),可配置图元样式、文字样式、标签样式、点线样式等;
(2)全局配置项 set_global_opts(),可配置标题、动画、坐标轴、图例等

使用Pyecharts描绘全国疫情地图

import json
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts# 读原始数据文件
# 这里也可以直接读取我们已经爬取的202003331.json文件
today = datetime.date.today().strftime('%Y%m%d')   #20200331
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='output/全国实时确诊数据.html')

打开html文件即可看到绘制的疫情地图

完成作业

paddle的本地安装

AIStudio平台上已经帮我们装好了 PaddlePaddle,我们现在需要在本地安装上Paddle。

本地安装 Python的过程我就不赘述了,直接去官网下载即可。这里我安装的是 Python3.6。

使用 pip安装 Paddle时遇到了问题,无法直接安装上 Paddle。

pip install paddle

安装过程中伴随着一堆报错,比如我的pip版本是9.0.1,安装别的包像 numpy这些是一点问题没有,安装 Paddle时系统一直提示我要更新版本。于是我就通过命令更新了pip版本。

更新完之后再尝试安装 Paddle,结果提示当前 pip版本和 Python版本不匹配,无法执行操作,真是让人吐血。在网上搜索了不少博客,尝试了不少方法都不行,我又把 pip版本回退到了9.0.3,最后是在官方链接的方法中得到解决。

官方链接 百度官方-飞桨快速安装,对于新手,CUDA 版本选择为 CPU版本,跟着提示一步一步装就行了。

这个错误和 pip并没有任何关系,只是在安装 Paddle时必须进行换源,官方推荐使用百度源或者清华源。我使用百度源之后就安装成功了。

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安装完成之后,我们可以通过命令行进行检查,看看paddle是否安装成功

我们可以看到,“Your Paddle is installed successfully!”,本地安装 paddle已经成功。

绘制疫情饼图

我先是仔细阅读了老师给的 pyecharts绘图的全国疫情地图实例,一步一步地推导了这个图是怎么画出来的,大致上是清楚我们需要怎么绘制。

然后仿照着老师的全国疫情地图的例子,照猫画虎绘制了一个全国各省确诊疫情的饼图

import json
from pyecharts.charts import Pie
from pyecharts import options as opts# 读取数据
datafile = 'data/20200331.json'
with open(datafile, 'r', encoding='utf-8') as f:json_array = json.loads(f.read())# 从json中取数据,分析json文件可以发现,provinceShortName是省份名称,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)# 自定义范围及样式
pieces = [{'min': 10000, 'color': '#A52A2A'},{'max': 9999, 'min': 1000, 'color': '#CD4F39'},{'max': 999, 'min': 500, 'color': '#CD6090'},{'max': 499, 'min': 100, 'color': '#CD853F'},{'max': 99, 'min': 10, 'color': '#C6E2FF'},{'max': 9, 'min': 0, 'color': '#C1FFC1'},
]# 将attr和value单独取出
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]p = Pie()
p.add("累计确诊", [list(z) for z in zip(labels, counts)], center=["40%", "62%"])
#系列配置项
p.set_series_opts(label_opts=opts.LabelOpts(font_size=10),is_show=False)
#全局配置项
p.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))
#生成本地文件
p.render(path='output/Pie.html')

这个饼图就是通过对疫情地图的模仿实现的,给人的视觉效果确实不如老师给的图片好。

于是乎,我又去官方文档中仔细学习了饼图的画法和使用技巧,重新绘制了一个饼图

这次绘制的更新在于

  • 更换了主题
  • 放缩了饼图的大小
  • 重新设置了Label格式
  • 去掉了VisualMap设置
import json
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType# 读取数据
datafile = 'data/20200331.json'
with open(datafile, 'r', encoding='utf-8') as f:json_array = json.loads(f.read())# 从json中取数据,分析json文件可以发现,provinceShortName是省份名称,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)
# print(china_data)# 将attr和value单独取出
provinceName = [data[0] for data in china_data]
confirmCounts = [data[1] for data in china_data]# 设置主题
p = Pie(init_opts=opts.InitOpts(theme=ThemeType.SHINE))
# 添加数据
p.add("累计确诊", [list(z) for z in zip(provinceName, confirmCounts)], radius='50%', center=["40%", "70%"])
#系列配置项
p.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),is_show=False)
#全局配置项
p.set_global_opts(title_opts=opts.TitleOpts(title='全国各省累计确诊数据',subtitle='数据来源:丁香园'),legend_opts=opts.LegendOpts(is_show=False))
#生成本地文件
p.render(path='output/ChinaPie.html')

不得不感叹 Pyechart,也就是 Echarts的强大,仅仅修改了几个配置组件,图表就大变样了,焕然一新。

OK,我们如法炮制,又可以绘制出湖北省各市确诊的饼图

import json
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeTypedatafile = 'data/20200331.json'
with open(datafile, 'r', encoding='utf-8') as f:json_array = json.loads(f.read())province_name = '湖北'
for province in json_array:if province['provinceName'] == province_name or province['provinceShortName'] == province_name:json_array_province = province['cities']hubei_data = [(city['cityName'], city['confirmedCount']) for city in json_array_province]hubei_data = sorted(hubei_data, key=lambda x: x[1], reverse=True)# print(hubei_data)cityNames = [data[0] for data in hubei_data]
confirmCounts = [data[1] for data in hubei_data]p = Pie(init_opts=opts.InitOpts(ThemeType.SHINE))
p.add("累计确诊", [list(z) for z in zip(cityNames, confirmCounts)], radius="50%", center=["20%", "50%"])
p.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),is_show=False)
p.set_global_opts(title_opts=opts.TitleOpts(title='湖北省各地级市累计确诊数据',subtitle="数据来源:丁香园"),legend_opts=opts.LegendOpts(is_show=False))
p.render(path='output/HubeiPie.html')

到这里我们已经学会了绘制饼图的方法和一些设置技巧,如果说想绘制疑似病例数据之类的饼图,也可以自己进行操作了。

Day01-图像处理原理与深度学习入门相关推荐

  1. 转g代码教程_图深度学习入门教程(九)——图滤波神经网络模型

    本教程是一个系列免费教程,争取每月更新2到4篇.(由于精力有限,近期停止了一段时间,在此向大家道个歉). 主要是基于图深度学习的入门内容.讲述最基本的基础知识,其中包括深度学习.数学.图神经网络等相关 ...

  2. 深度学习入门笔记(八):深层网络的原理

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  3. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  4. 模块一:深度学习入门算法

    模块一:深度学习入门算法 1.深度学习必备知识 1.1深度学习要解决的问题 机器学习流程: 数据获取 -----> 特征工程 -----> 建立模型 ------> 评估与应用 特征 ...

  5. 深度学习入门笔记(十二):深度学习数据读取

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  6. 深度学习入门笔记(七):深层神经网络

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. 深度学习入门笔记(一):机器学习基础

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  8. 【深度学习入门-1】透彻理解卷积的三层含义:从“卷积”、到“图像卷积操作”、再到“卷积神经网络”的含义(学习笔记)

    一.写在前面 笔者在进行卷积神经网络入门的时候花了很多功夫,理解的也不够透彻,基础不牢,地动山摇.在查阅了很多资料后,发现了大佬up"王木头学科学"讲的卷积神经网络的理解,茅塞顿开 ...

  9. 计算机视觉研究院出品:深度学习入门基础全库(附链接下载)

    关注并星标 从此不迷路 计算机视觉研究院 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 今天我们"计算机视觉研究院"主要分享深度学习入门的基础书籍集 ...

最新文章

  1. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块[ZT]
  2. [Python图像识别] 四十八.Pytorch构建Faster-RCNN模型实现小麦目标检测
  3. JD商家后台管理的细节
  4. SQLServer 生成当前日期备份
  5. Excel里,vlookup函数各种应用-匹配多列、多条件匹配
  6. html作业本,小鹅通作业本使用教程
  7. Memory Management Concepts overview(内存管理基本概念)
  8. ECshop生态全面开放,城市合伙人招募火热启动
  9. 排序算法专题-基数排序
  10. 如何深入学习Android系统
  11. python创意小作品代码-超全代码详解 Python 制作精美炫酷图表教程
  12. taro 的项目结构_自定义 Taro UI 组件的边框样式(hairline mixin)《 电商小程序案例:页面结构 》...
  13. unity3d 词典访问_正确的词典访问方式
  14. ORacle查询时显示同义词转换不再有效
  15. 全网搜索一个人的痕迹,爬取百度搜索结果
  16. 无法加载SQLite.Interop.dll:找不到指定模块
  17. 【HTML】07-表单
  18. 中国参与MOOC 建设的大学有多少所?
  19. LCR TC1 测试仪
  20. 微星MPG Z490 GAMING PLUS i7-10700K电脑 Hackintosh 黑苹果efi引导文件

热门文章

  1. GOPATH与工作空间
  2. Hibernate反向生成映射文件点击Hibernate reserve Engineering的时候没反应的解决方法
  3. matlab bs2rv.m,Matlab智能算法之遗传算法(一)
  4. 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
  5. c 多语言切换dll,【图片】老C教学之——给你的程序添加多语言支持【dll】【vb吧】_百度贴吧...
  6. java svn安装地址_SVN的安装和配置
  7. win10一直卡在自动修复_Win10今年最重磅更新!低CPU占用率+16大新特性,系统快如闪电!...
  8. 吉林电子计算机学校学费多少,收费标准_吉林工商学院学费介绍_高考院校库
  9. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
  10. ML之xgboost:绘制xgboost的二叉树graphviz的两种方法代码实现