美文网首页
Python 编程从入门到实践6

Python 编程从入门到实践6

作者: 蜘蛛的梦呓 | 来源:发表于2018-04-04 00:10 被阅读0次

    终于把项目二看完了,只差项目三了就结束了,马上到清明,可能会不稳定更新。

    16.2 制作世界人口地图: JSON 格式

    world_pouplatation.py

    import json
    from Population_Map.country_codes import get_country_code
    
    # 将数据加载到一个列表中
    filename = 'population_data.json'
    with open(filename) as f:
        pop_data = json.load(f)
    
    # 打印每个国家 2010 年的人口数量
    for pop_dict in pop_data:
        if pop_dict['Year'] == '2010':
            country_name = pop_dict['Country Name']
            # 16.2.3 将字符串转换为数字值
            population = int(float(pop_dict['Value']))
            # print(country_name + ': ' + str(population))
            code = get_country_code(country_name)
            # 如果返回了国别码,就打印国别码和人口数量,如果没有,就显示一条错误信息
            if code:
                print(code + ': ' + str(population))
            else:
                print('ERROR - ' + country_name)
    

    16.2.4获取国别码

    #countries.py
    #Pygal 中的地图制作工具要求数据为特定的格式 : 用国码表示国家,以及用数字表示人口数量
    from pygal_maps_world.i18n import COUNTRIES
    
    for country_code in sorted(COUNTRIES.keys()):
        print(country_code,COUNTRIES[country_code])
    

    16.2.5 制作世界地图

    # americas.py
    import pygal
    import pygal.maps.world
    
    wm = pygal.maps.world.World()
    wm.title = 'North,Central,and South America'
    
    wm.add('North America', ['ca', 'mx', 'us'])
    wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
    wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf', 'gy', 'pe', 'py', 'sr', 'uy', 've'])
    wm.render_to_file('americas.svg')
    我们使用了 add() 方法,它接受一个标签和一个列表,其中厚着包含我们要突出的国家的国别码。
    每次调用 add() 都将为指定的国家选择一种新颜色,并在图表左边显示该颜色和指定的标签
    

    我们使用了 add() 方法,它接受一个标签和一个列表,其中厚着包含我们要突出的国家的国别码。

    每次调用 add() 都将为指定的国家选择一种新颜色,并在图表左边显示该颜色和指定的标签。

    16.2.6 在世界地图上呈现数字数据

    import pygal.maps.world
    
    # 显示三个北美国家的人口数量
    wm = pygal.maps.world.World()
    wm.title = 'Population of Countries in North America'
    # Pygal 根据数字自动给不同国家着以深浅不一的颜色
    wm.add('North America', {'ca': 34126000, 'us': 309349000, 'mx': 113423000})
    wm.render_to_file('na_populations.svg')
    

    16.2.7 绘制完整的世界人口地图

    import pygal
    
    from Population_Map.country_codes import get_country_code
    from pygal.style import RotateStyle, LightColorizedStyle
    
    filename = 'population_data.json'
    with open(filename) as f:
        pop_data = json.load(f)
    
    # 创建一个包含人口数量的字典
    cc_populations = {}
    for pop_dict in pop_data:
        if pop_dict['Year'] == '2010':
            country_name = pop_dict['Country Name']
            # 将字符串转换为数字值
            population = int(float(pop_dict['Value']))
            # print(country_name + ': ' + str(population))
            code = get_country_code(country_name)
            if code:
                cc_populations[code] = population
    
    # 根据人口数量将所有的国家分成三组
    cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
    for cc, pop in cc_populations.items():
        if pop < 10_000_000:
            cc_pops_1[cc] = pop
        elif pop < 1000_000_000:
            cc_pops_2[cc] = pop
        else:
            cc_pops_3[cc] = pop
    
    print(len(cc_pops_1), len(cc_pops_2), len(cc_pops_3))
    
    # 16.2.9 使用Pygal设置世界地图的样式
    # RotateStyle(),实参:十六进制的 RGB 颜色
    # 使用RotateStyle设置颜色,并让 LightColorizedStyle 作为基本样式
    wm_style = RotateStyle('#336699', base_style=LightColorizedStyle)
    wm = pygal.maps.world.World(style=wm_style)
    wm.title = 'World Population in 2010,by Country'
    # Pygal 根据数字自动给不同国家着以深浅不一的颜色
    wm.add('0-10m', cc_pops_1)
    wm.add('10m-1bn', cc_pops_2)
    wm.add('>1bn', cc_pops_3)
    wm.render_to_file('world_population.svg')
    

    17.1 使用 Web API

    import requests
    import pygal
    from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
    
    # 我们将编写一个程序,自动下载 Github 上星级最高的 Python 项目的信息
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    r = requests.get(url)
    print('Status code:', r.status_code)
    
    # 17.1.5 处理响应结果
    # 将 API 响应到存储到一个变量中
    # json(): 返回json编码
    response_dict = r.json()
    # help(requests.models.Response.json)
    print('Total repositories:', response_dict['total_count'])
    
    # 17,2 使用 Pygal可视化仓库
    # 探索有关仓库的信息
    repo_dicts = response_dict['items']
    print('Numner of item :', len(repo_dicts))
    # 17.2.3 根据数据绘图
    names, plot_dicts = [], []
    for repo_dict in repo_dicts:
        names.append(repo_dict['name'])
        plot_dict = {
            'value': repo_dict['stargazers_count'],
            'label': str(repo_dict['description']),
            #在图表中添加可单击的链接
            'xlink':repo_dict['html_url']
        }
        plot_dicts.append(plot_dict)
    
    # print('Repositories returned:', len(repo_dicts))
    # print('Total repositories:', response_dict['total_count'])
    # names, stars = [], []
    #
    # for repo_dict in repo_dicts:
    #     names.append(repo_dict['name'])
    #     stars.append(repo_dict['stargazers_count'])
    
    # 可视化
    # 17.2.1 改进 Pygal 图表
    my_style = LS('#333366', base_style=LCS)
    
    # 创建 Config 的实例并命名为 my_config,通过修改 my_config的属性,定制图表的外观
    my_config = pygal.Config()
    
    my_style = LS('#333366', base_style=LCS)
    my_style.title_font_size = 24
    my_style.label_font_size = 14
    my_style.major_label_font_size = 18
    
    my_config = pygal.Config()
    my_config.x_label_rotation = 45
    my_config.show_legend = False
    my_config.truncate_label = 15
    my_config.show_y_guides = False
    my_config.width = 1000
    
    chart = pygal.Bar(my_config, style=my_style)
    chart.title = 'Most - Starred Python Projects on GitHub'
    chart.x_labels = names
    
    # 将标签设置为空字符串
    # chart.add('', stars)
    chart.add('', plot_dicts)
    chart.render_to_file('python_rope.svg')
    
    # 我们首先导入了 pygal 以及要应用于图标的 Pygal 样式,接下来,打印 API 调用响应的状态以及找到的仓库总数,
    # 以便获悉 API 调用是否出现了问题,然后通过可视化来呈现这些信息。
    
    # 生成图表,以便分析数据
    
    # 研究第一个仓库
    # repo_dict = repo_dicts[0]
    # print('\nKeys:', len(repo_dict))
    # for key in sorted(repo_dict.keys()):
    #     print(key)
    
    # 处理结果
    # print(response_dict.keys())
    # 研究有关仓库的信息
    # print('\nSelected information about first repository:')
    # for repo_dict in repo_dicts:
    #     print('\nName:', repo_dict['name'])
    #     print('Owner:', repo_dict['owner']['login'])
    #     print('Stars:', repo_dict['stargazers_count'])
    #     print('Repository:', repo_dict['html_url'])
    #     print('Description:', repo_dict['descrpition'])
    # 我们遍历 repo_dicts 中的所有字典。在这个循环中,我们打印每个项目的名称、所有者、星级、在 GitHub 上的 URL 以及描述
    

    17.7.2 添加自定义工具提示

    import pygal
    from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
    
    
    my_style = LS('#333366', base_style=LCS)
    chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)
    
    chart.title = 'Python Projects'
    chart.x_labels = ['httpie', 'django', 'flask']
    
    plot_dicts = [
        {'value': 16101, 'label': 'Description of httpie.'},
        {'value': 15028, 'label': 'Description of django.'},
        {'value': 14798, 'label': 'Description of flask.'},
        ]
    
    chart.add('', plot_dicts)
    chart.render_to_file('bar_descriptions.svg')
    

    总的来说,就是利用爬虫知识爬取数据,以字典类型返回爬取的数据,然后把这些数据可视化,再根据自己的需求,配置可视化的格式,最后展现出来。

    相关文章

      网友评论

          本文标题:Python 编程从入门到实践6

          本文链接:https://www.haomeiwen.com/subject/tgshhftx.html