您想对web上的可用数据进行更多操作吗?有意义的数据探索需要计算,而Wolfram语言非常适合于获取和组织数据的任务。我将介绍将信息从网页导入Wolfram笔记本并提取特定部分用于基本计算的过程。在这篇文章中,我将提到这一点网站由美国国家气象局主办,该机构为美国西部地区提供7天的天气预报:
正在导入
虽然Wolfram语言具有广泛的功能web操作,此示例只需要最基本的:导入。默认情况下,导入将获取页面的整个明文:
✕
url=“http://www.wrh.noaa.gov/fecast/wxtables/index.php?lat=38.02&\lon=122.13英寸;
|
有时纯文本抓取是一个好的开始(例如,对于文本分析工作流)。但重要的是要记住,有一层结构化HTML告诉您的浏览器如何显示所有内容。我们用作视觉线索的元素也可以帮助计算机组织数据,在许多情况下,这些元素比我们的眼睛更快更好。
在这种情况下,我们试图从表中获取数据。以表格格式显示的信息通常存储在列表和表HTML元素中。您可以使用导入:
现在你有了一个元素列表,你可以筛选出你需要的信息。为了直观地检查这样的列表,语法高亮可以节省大量时间(和眼睛疲劳!)。在Wolfram语言中,将光标直接放在任何分组符号内,即括号、括号或在本例中,花括号将高亮显示该符号及其开头/结尾对应项。检查这些子列表是了解整个列表结构的简单方法。在导入数据的第一个内大括号内单击,会显示第一个元素是导航栏中的链接列表:
这意味着实际天气信息(降雨量、温度、湿度、风等)的列表位于第二个元素中。通过连续单击大括号内的内容,您可以找到包含所有天气数据的最小列表——不出所料,它是以“自定义天气预测表”开头的列表:
现在使用第一个位置要获得正确的列表索引:
✕
FirstPosition[数据,“自定义天气预报表”]
|
删除最后一个索引以提升一个级别,下面是完整的表:
基本结构和口译员
既然你有了数据,你就可以做一些分析了。在原始网页上,表中的某些行每天只有一个值,而其他行有四个值。在导入的数据中,这意味着不同的行长度——七项或28项,可选行标题:
因此,如果你想知道明天的温度,你可以找到带有适当标题的行,并在标题后输入前四项:
方便的是,温度数据被识别为数字,因此很容易直接传递给函数。这里是平均值一周内所有温度(我使用休息忽略每个列表开头的行标签):
这里有一个列表线条图本周所有温度中:
口译员可用于分析其他数据类型。举一个简单的例子,以报告为百分比的各种天气要素为例:
这些值当前表示为字符串,对数值计算不友好。应用解释器[“Percent”]自动将每个值转换为数字数量以百分比为单位:
✕
{precip,云,湿度}=口译员[“百分比”]/@(休息/@percents)
|
现在它们被识别为百分比,您可以将它们绘制在一起:
✕
ListLinePlot[{悬崖,云层,湿度},PlotLabels->标签]
|
通过提取附加到这些值的日期和时间信息,并用日期对象,可以将数据转换为时间序列对象:
✕
dates=日期对象/@扁平@桌子[表[[2,j]]<>“”<>i,{j,长度@表[[2]]}、{i,表[[9,2;;5]]}];
|
✕
ts=时间序列/@(Transpose[{dates,#}]&/@{precip,clouds,湿度});
|
这非常适合日期列表图,它标记x个带日期的轴:
✕
DateListPlot[ts,PlotLabels->labels]
|
超越刮擦
使用Wolfram语言很容易获得您需要的数据,但这只是故事的开始!有了我们的集成数据框架,您可以做得更多:自动化导入过程,简化数据访问,甚至创建自己的永久数据资源。
在我的下一个帖子,我将探索一些高级的结构化和清理技术,演示如何从刮取的数据创建结构化数据集。
有关您在此处阅读的函数的更多详细信息,请参阅“从网站中删除数据”工作流.