我的Paddle入门--Baidu AIStuio 7天训练营 Day1

学的东西及时总结一下,也为了算力卡冲啊!

Day 1 -数据可视化

详细内容、项目,以及为了CPU和GPU计算资源可访问百度AI studio
作业要求,根据爬取的丁香园的实时疫情数据,用pyecharts实现饼图可视化。
1、安装pyecharts模块到externel-libraries,重启它的notebook后还能使用

`!mkdir /home/aistudio/external-libraries
!pip install pyecharts -t /home/aistudio/external-libraries

import sys
sys.path.append('/home/aistudio/external-libraries') #将路径导入才能正常import pyecharts

2、爬取数据

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.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(' 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()

3、Pie图

import numpy as np
import json
import datetime
from pyecharts.charts import 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]
date = datetime.date.today().strftime('%Y-%m-%d') #设置年-月-日格式

pie = Pie(init_opts=opts.InitOpts(width='1500px',height='920px')) #指定画布大小
pie.add("累计确诊", [list(z) for z in zip(labels, counts)],radius=['0',"60%"],center=["30%", "70%"]) # 指定内外半径,圆心位置

#系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}\n",font_size=13), #换行实现标签较均匀分布
                  is_show=False)
#全局配置项,可配置标题、动画、坐标轴、图例等
pie.set_global_opts(title_opts=opts.TitleOpts(title=date+' 全国实时确诊数据',
                                            subtitle='数据来源:丁香园',pos_top="35%",pos_left="60%"), # 距离画布顶部的距离为画布大小的35%
                  legend_opts=opts.LegendOpts(is_show=True,pos_top="40%",pos_left="60%" , orient="vertical") 
                  )
                  
                 

pie.render(path='/home/aistudio/data/新增确诊各省分布饼图.html')

我的Paddle入门--Baidu AIStuio 7天训练营 Day1_第1张图片
其中LegendOpts参数解释可以参考这篇博客pyecharts修改legend icon样式
更多全局配置和系列配置,以及更过好看好玩的图参考pyechats官网

参考:https://aistudio.baidu.com/aistudio/course/introduce/1149

你可能感兴趣的:(python,Paddle)