他起身匆匆去了。李庆安又陷入了沉思之中,为什么李林甫要自己插手庆王的事情,他的用意何在?

悟空不禁暗笑,道:“他那须寝食难安,只需每过几万年来看你一眼,若有异常,便发动会元之厄,教你从头再来,你这么说,岂不是自欺欺人?”

斗牛作弊器如何安装

小丑皇的必杀技本来是很强大的,但可惜黑暗古代暴龙兽进化之后刚好有能力克制这一招,导致皇牌飞刀没有什么显著性的作用。
毒驼子眉头一皱,胸口一热,喉咙一咸,一口鲜血喷出,对方掌力惊人,幸亏后背上带有毒囊,平日里用来存放毒物之用。

“世外高人。”王小民呵呵一笑,突然凑过去在安雅轩的脸蛋上亲吻了一下,而后道:“美丽的小姐,现在可以告诉我你的名字了吗?”

Python 项目实践二(下载数据)第三篇


接着上节继续学习,在本章中,你将从网上下载数据,并对这些数据进行可视化。网上的数据多得难以置信,且大多未经过仔细检查。如果能够对这些数据进行分析,你就能发现别人没有发现的规律和关联。我们将访问并可视化以两种常见格式存储的数据:CSV和JSON。我们将使用Python模块csv来处理以CSV(逗号分隔的值)格式存储的天气数据,找出两个不同地区在一段时间内的最高温度和最低温度。然后,我们将使用matplotlib根据下载的数据创建一个图表,展示两个不同地区的气温变化:阿拉斯加锡特卡和加利福尼亚死亡谷。在本章的后面,我们将使用模块json来访问以JSON格式存储的人口数据,并使用Pygal绘制一幅按国别划分的人口地图。

一 CSV格式

要在文本文件中存储数据,最简单的方式是将数据作为一系列以逗号分隔的值(CSV)写入文件。这样的文件称为CSV文件。例如,下面是一行CSV格式的天气数据:
2014-1-5,61,44,26,18,7,-1,56,30,9,30.34,30.27,30.15,,,,10,4,,0.00,0,,195

二 分析CSV文件头

csv模块包含在Python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴趣的值。下面先来查看这个文件的第一行,其中包含一系列有关数据的描述:

import csv

filename = "sitka_weather_07-2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

(1)调用csv.reader(),并将前面存储的文件对象作为实参传递给它,从而创建一个与该文件相关联的阅读器(reader)对象。我们将这个阅读器对象存储在reader中。

(2)模块csv包含函数next(),调用它并将阅读器对象传递给它时,它将返回文件中的下一行。在前面的代码中,我们只调用了next()一次,因此得到的是文件的第一行,

结果如下:["AKDT", "Max TemperatureF", "Mean TemperatureF", "Min TemperatureF", "Max Dew PointF", "MeanDew PointF", "Min DewpointF", "Max Humidity", " Mean Humidity", " Min Humidity", " Max Sea Level PressureIn", " Mean Sea Level PressureIn", " Min Sea Level PressureIn", " Max VisibilityMiles", " Mean VisibilityMiles", " Min VisibilityMiles", " Max Wind SpeedMPH", " Mean Wind SpeedMPH", " Max Gust SpeedMPH", "PrecipitationIn", " CloudCover", " Events", " WindDirDegrees"]

这个csv文件时这样的。

三 打印头文件以及其位置

为让文件头数据更容易理解,将列表中的每个文件头及其位置打印出来:

import csv

filename = "sitka_weather_07-2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)

    for index,column_header in enumerate(header_row):
        print(index,column_header)

结果如下:

四 提取并读取数据

知道需要哪些列中的数据后,我们来读取一些数据。首先读取每天的最高气温:

import csv

filename = "sitka_weather_07-2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)

    #for index,column_header in enumerate(header_row):
     #   print(index,column_header) 



    highs=[]
    for row in reader :
        high = int(row[1])
        highs.append(high)

    print(highs)

结果如下图:

[64, 71, 64, 59, 69, 62, 61, 55, 57, 61, 57, 59, 57, 61, 64, 61, 59, 63, 60, 57, 69, 63, 62, 59, 57, 57, 61, 59, 61, 61, 66]

五 绘制气温图标

import csv
from matplotlib import pyplot as plt

filename = "sitka_weather_07-2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)

    #for index,column_header in enumerate(header_row):
     #   print(index,column_header) 



    highs=[]
    for row in reader :
        high = int(row[1])
        highs.append(high)

    print(highs)

    fig = plt.figure(dpi=128,figsize=(10,6))
    plt.plot(highs,c="red")

    #设置图形的格式
    plt.title("Daily high temperatures,July 2014,", fontsize=24)
    plt.xlabel("",fontsize=16)
    plt.ylabel("Temperature(F)",fontsize=16)
    plt.tick_params(axis="both",which ="major",labelsize=16)

    plt.show()

结果如下图:

 

 六 模块datetime

首先导入了模块datetime中的datetime类,然后调用方法strptime(),并将包含所需日期的字符串作为第一个实参。第二个实参告诉Python如何设置日期的格式。在这个示例中,"%Y-"让Python将字符串中第一个连字符前面的部分视为四位的年份;"%m-"让Python将第二个连字符前面的部分视为表示月份的数字;而"%d"让Python将字符串的最后一部分视为月份中的一天(1~31)。

方法strptime()可接受各种实参,并根据它们来决定如何解读日期。一下列出了其中一些这样的实参:

七 在图表中添加日期

 知道如何处理CSV文件中的日期后,就可对气温图形进行改进了,即提取日期和最高气温,并将它们传递给plot(),如下所示:

import csv
from matplotlib import pyplot as plt
from datetime import datetime

filename = "sitka_weather_07-2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)

    #for index,column_header in enumerate(header_row):
     #   print(index,column_header) 


    #从文件中获取日期和最高气温
     
    dates,highs=[],[]
    for row in reader :
        current_date = datetime.strptime(row[0],"%m/%d/%Y")
        dates.append(current_date)
        high = int(row[1])
        highs.append(high)

    print(highs)

    fig = plt.figure(dpi=128,figsize=(10,6))
    plt.plot(dates,highs,c="red")

    #设置图形的格式
    plt.title("Daily high temperatures,July 2014,", fontsize=24)
    plt.xlabel("",fontsize=16)
    fig.autofmt_xdate()
    plt.ylabel("Temperature(F)",fontsize=16)
    plt.tick_params(axis="both",which ="major",labelsize=16)

    plt.show()

 我们创建了两个空列表,用于存储从文件中提取的日期和最高气温(见)。然后,我们将包含日期信息的数据(row[0])转换为datetime对象,并将其附加到列表dates末尾。我们将日期和最高气温值传递给plot()。我们调用了fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠。下图显示了改进后的图表。

八 再绘制一个数据系列

改进后的图表显示了大量意义深远的数据,但我们可以在其中再添加最低气温数据,使其更有用。为此需要从数据文件中提取最低气温,并将它们添加到图表中,如下所示:

import csv
from matplotlib import pyplot as plt
from datetime import datetime

filename = "sitka_weather_2014.csv"
with open(filename) as f :
    reader = csv.reader(f)
    header_row = next(reader)

    #for index,column_header in enumerate(header_row):
     #   print(index,column_header) 


    #从文件中获取日期和最高气温,最低气温
     
    dates,highs,lows=[],[],[]
    for row in reader :
        current_date = datetime.strptime(row[0],"%Y-%m-%d")
        dates.append(current_date)

        low=int(row[3])
        lows.append(low)
        high = int(row[1])
        highs.append(high)

   # print(highs)

    fig = plt.figure(dpi=128,figsize=(10,6))
    plt.plot(dates,highs,c="red")

    plt.plot(dates,lows,c="blue")

    #设置图形的格式
    plt.title("Daily high temperatures - 2014,", fontsize=24)
    plt.xlabel("",fontsize=16)
    fig.autofmt_xdate()
    plt.ylabel("Temperature(F)",fontsize=16)
    plt.tick_params(axis="both",which ="major",labelsize=16)

    plt.show()

效果图如下:

九 给图标区域着色

添加两个数据系列后,我们就可以了解每天的气温范围了。下面来给这个图表做最后的修饰,通过着色来呈现每天的气温范围。为此,我们将使用方法fill_between(),它接受一个x值系列和两个y值系列,并填充两个y值系列之间的空间:

plt.plot(dates,highs,c="red",alpha=0.5)
plt.plot(dates,lows,c="blue",alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor="blue",alpha=0.1)

(1)实参alpha指定颜色的透明度。Alpha值为0表示完全透明,1(默认设置)表示完全不透明。通过将alpha设置为0.5,可让红色和蓝色折线的颜色看起来更浅。

(2)我们向fill_between()传递了一个x值系列:列表dates,还传递了两个y值系列:highs和lows。

(3)实参facecolor指定了填充区域的颜色,我们还将alpha设置成了较小的值0.1,让填充区域将两个数据系列连接起来的同时不分散观察者的注意力。

(4)显示了最高气温和最低气温之间的区域被填充的图表如下:

未完待续!元旦三天小长假已经来了,祝大家元旦快乐!

 

当前文章:http://hnhdqp.com/html_75202.html

发布时间:2019-03-22 00:57:28

欢乐斗牛修改器安卓版 手机欢乐斗牛官网 吉祥游戏账号注册方法 连环夺宝注册送分可提现 棋牌炸金花官网 斗牛牛游戏下载免费 一分钟教你空手变牌 合肥棋牌游戏制作

编辑:开石

相关新闻

新一轮小米2周五开放购买 力拼iPhone5

2019-03-22 00:57:37

信阳源抗文化传媒有限公司

《星球大战:侠盗一号》开拍 姜文甄子丹任主演

2019-03-22 00:57:55

青岛载是稳企业管理有限公司

巴西模特Bruna否认与陈伟霆恋情:只是朋友

2019-03-22 00:31:56

大连嘲澳工贸有限公司

慕尼黑再保险常青:巨灾风险资本要求需上调

2019-03-22 00:50:08

西北镀埠就科技股份有限公司

热门推荐

  • 你能戒掉微信吗?59%美国用户表示能戒掉各种社交软件
  • “春运模式”结束:国内快递行业已经全面恢复运营
  • 四川丹棱:一元钱换来美丽乡村
  • 历史一刻:《绝地求生》网吧占有率超越《英雄联盟》
  • 【IT之家评测室】360 N6 Lite手机体验评测:平民级的续航神器
  • 水悦城门口抢小孩?5岁女孩学校附近被拐走?宜昌朋友圈的谣言,你中招了吗?!
  • 星战红?一加5T星球大战定制版曝光
  • 盘点成都小升初小摇号的十所赢家学校!98%的学生上四七九?!
  • 中国留学生帮熟人转个账竟面临牢狱之灾?有偿带物被判死刑?
  • 福州一市民银行卡遭伪造被盗刷4万元 法院判银行全赔
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:长方形中点连接 血拼三张透视
  • 宣城麻将血战到底规则 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 一木棋牌好吗 元气棋牌手机版官网 泊众棋牌怎么样 战鱼德州圈怎么了