美文网首页
Pythone入门到实践-学习笔记-Day7

Pythone入门到实践-学习笔记-Day7

作者: DKJImmy | 来源:发表于2018-03-29 14:11 被阅读0次

    第十六章 下载数据

    一、CSV

    模块datetime中strptime()设置日期和时间格式的实参

    实参 含义
    %A 星期的名称,如Monday
    %B 月份名,如January
    %m 用数字表的月份(01-12)
    %d 用数字表示月份中的一天(01-31)
    %Y 四位年份,如2015
    %y 两位年份,如15
    %H 24小时制的小时数(00-23)
    %I 12小时制的小时数(01-12)
    %p am或pm
    %M 分钟数(00-59)
    %S 秒数(00-61)

    读取文件并显示

    import csv
    from matplotlib import pyplot as plt
    from datetime import datetime
    
    filename = 'sitka_weather_2014.csv'
    #打开读取文件
    with open(filename) as f:
        #reader():创建与文件相关联的阅读器
        reader = csv.reader(f)
        #next():读取下一行数据,并以列表形式存储到header_row
        header_row = next(reader)
        #print(header_row)    
    
        #打印文件头及位置
        #enumerate():获取每个元素的索引及值
        #for index,col in enumerate(header_row):
        #    print(index,col)
    
        #读取数据,读取日期、最低和最高气温
        dates,lows,highs = [],[],[]
        for row in reader:
            #异常处理:空值,转换错处理
            try:
                date = datetime.strptime(row[0],'%Y-%m-%d')
                low = int(row[3])
                high = int(row[1])
            except ValueError:
                print(date,'missing data')
            else:
                dates.append(date)
                lows.append(low)
                highs.append(high)
    
    fig = plt.figure(dpi = 128, figsize=(10,6))
    #alpha:指定颜色的透明度,0表示完全透明,1表示不透明
    plt.plot(dates,highs,c='red',alpha = 0.5)
    plt.plot(dates,lows,c='green',alpha = 0.5)
    #fill_between():用facecolor来填充两个列表间区域
    plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
    
    plt.title('Daily high temperatures,2014',fontsize = 24)
    plt.xlabel('',fontsize=16)
    #autofmt_xdate():绘制斜的日期标签,避免重复
    fig.autofmt_xdate()
    plt.ylabel('Temperature(F)',fontsize=16)
    plt.tick_params(axis='both',which='major',labelsize=16)
    plt.show()
    
    运行结果

    二、读取JSON格式,制作世界人口地图

    import json
    #pygam 2.0.0以后版本
    from pygal.maps.world import World
    from pygal.maps.world import COUNTRIES
    from pygal.style import RotateStyle as RS, LightColorizedStyle as LCS
    
    #依据图家名称获取国别代码
    def get_country_code(country_name):
        for code,name in COUNTRIES.items():
            if name == country_name:
                return code
        return None
    
    filename = 'population_data.json'
    with open(filename) as f:
        pop_data = json.load(f)
    
    cc_data = {}
    for pop_dict in pop_data:
        if pop_dict['Year'] == '2010':
            country = pop_dict['Country Name']
            population = int(float(pop_dict['Value']))
            code = get_country_code(country)
            if code:
                cc_data[code] = population
    
    #按人口数量分组
    cc_pop_1,cc_pop_2,cc_pop_3 = {},{},{}
    for cc,pop in cc_data.items():
        if pop < 10000000:
            cc_pop_1[cc] = pop
        elif pop < 1000000000:
            cc_pop_2[cc] = pop
        else:
            cc_pop_3[cc] = pop
            
    #创建世界地图
    #设置基色和主题
    wm_style = RS('#336699',base_style=LCS)
    wm = World(style=wm_style)
    wm.title = 'World Population in 2010,by Country'
    #wm.add('2010',cc_data)
    
    wm.add('0-10m',cc_pop_1)
    wm.add('10m-1bn',cc_pop_2)
    wm.add('>1bn',cc_pop_3)
    
    wm.render_to_file('World.svg')
    
    运行结果

    相关文章

      网友评论

          本文标题:Pythone入门到实践-学习笔记-Day7

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