📜  使用 Unix 进行数据分析 - 第 2 部分

📅  最后修改于: 2022-05-13 01:57:29.776000             🧑  作者: Mango

使用 Unix 进行数据分析 - 第 2 部分

使用 UNIX
那么现在我们将使用 Unix 找出数据集中记录的最高全球温度(每年)?
处理面向行的数据的经典工具是awk

在 NCDC 数据中查找每年最高温度的小脚本

#!/user / bin / env bash
for year in all/*
do
    # using each year data file
    echo -ne `basename $year .gz`"\t"
    # substring to search in
    gunzip -c $year | \
        awk '{ temp = substr($0, 88, 5) + 0;
                q = substr($0, 93, 1);
                if (temp != 9999 && q ~ /[01459]/ && temp > max) max = temp }
            END { print max }'
done

内容遍历打包的年份记录,首先打印年份,然后使用 awk 准备每条记录。 awk 内容集中了信息中的两个字段:气温和质量代码。将空气温度值通过包括 0 转换为整数。 接下来,连接测试以查看温度是否合法(值 9999 表示在 NCDC 数据集中缺少激励)以及质量代码是否表明仔细阅读不是推测或不正确。如果阅读没问题,则对比价值,直到此时看到最大价值,如果发现另一个最极端,则刷新。 END 块在记录中的每一行都准备好后执行,并打印最大的值。

运行输出:[开始输出]

% ./max_temperature.sh
1901    317
1902    244
1903    289
1904    256

源记录中的温度值按 10 倍缩放,因此得出的结果是 1901 年的最极端温度为 31.7°C(本世纪初没有太多读数,因此这是可以想象的)。在一个单独的 EC2 高 CPU 超大实例上的单个保持运行中,本世纪的总保持运行时间为 42 分钟。
为了加速准备,我们必须并行运行程序的各个部分。原则上,这很清楚:我们可以在不同的程序中处理不同的年份,利用机器上所有可访问的设备字符串。

问题 -

  • 首先,将作品分成同等大小的作品并不是在所有情况下都是简单的或不言而喻的。对于这种情况,各个年份的记录估计通常会发生变化,因此一些程序会比其他程序提前完成很多。
    不管他们是否得到进一步的工作,整个运行由最长的记录统治。一种优越的方法,尽管需要更多的工作,是将固定测量部分的贡献分开,并将每个块归为一个程序。
  • 其次,巩固免费程序的结果可能需要进一步准备。对于这种情况,每年的结果是不同年份的独立的,可以通过将每个结果连接起来并按年份排列来合并它们。如果使用固定估计的整体方法,则组合会逐渐变得脆弱。对于这个模型,特定年份的信息通常会分成几部分,每个部分都独立处理。我们最终会得到每个团块的最高温度,所以最后一步是寻找每年这些最大值中最值得注意的。
  • 第三,您还受到单独机器的处理限制的限制。如果使用您拥有的处理器数量,您可以在 20 分钟内完成最佳时间的可能性很小,那就是它。你不能让它走得更快。同样,一些数据集的发展超出了单独机器的限制。当我们开始使用不同的机器时,整个主机的不同组件成为一个不可或缺的因素,其中大部分属于协调性和可靠性的分类。