Wolfram公司 计算符合知识

使用Wolfram语言的Web Scraping,第1部分:导入和解释

您想对web上的可用数据进行更多操作吗?有意义的数据探索需要计算,而Wolfram语言非常适合于获取和组织数据的任务。我将介绍将信息从网页导入Wolfram笔记本并提取特定部分用于基本计算的过程。在这篇文章中,我将提到这一点网站由美国国家气象局主办,该机构为美国西部地区提供7天的天气预报:

NOAA网站图片

正在导入

虽然Wolfram语言具有广泛的功能web操作,此示例只需要最基本的:导入。默认情况下,导入将获取页面的整个明文:

Web报废InOutImg1

url=“http://www.wrh.noaa.gov/fecast/wxtables/index.php?lat=38.02&\lon=122.13英寸;

Web Scraping InOutImg2

导入[url]

有时纯文本抓取是一个好的开始(例如,对于文本分析工作流)。但重要的是要记住,有一层结构化HTML告诉您的浏览器如何显示所有内容。我们用作视觉线索的元素也可以帮助计算机组织数据,在许多情况下,这些元素比我们的眼睛更快更好。

在这种情况下,我们试图从表中获取数据。以表格格式显示的信息通常存储在列表和表HTML元素中。您可以使用导入:

Web Scraping InOutImg3

data=导入[url,“数据”]

现在你有了一个元素列表,你可以筛选出你需要的信息。为了直观地检查这样的列表,语法高亮可以节省大量时间(和眼睛疲劳!)。在Wolfram语言中,将光标直接放在任何分组符号内,即括号、括号或在本例中,花括号将高亮显示该符号及其开头/结尾对应项。检查这些子列表是了解整个列表结构的简单方法。在导入数据的第一个内大括号内单击,会显示第一个元素是导航栏中的链接列表:

Web Scraping InOutImg3

这意味着实际天气信息(降雨量、温度、湿度、风等)的列表位于第二个元素中。通过连续单击大括号内的内容,您可以找到包含所有天气数据的最小列表——不出所料,它是以“自定义天气预测表”开头的列表:

Web Scraping InOutImg5

数据[2]

现在使用第一个位置要获得正确的列表索引:

Web Scraping InOutImg6

FirstPosition[数据,“自定义天气预报表”]

删除最后一个索引以提升一个级别,下面是完整的表:

Web Scraping InOutImg7

表=数据[[2,2,1,2]

基本结构和口译员

既然你有了数据,你就可以做一些分析了。在原始网页上,表中的某些行每天只有一个值,而其他行有四个值。在导入的数据中,这意味着不同的行长度——七项或28项,可选行标题:

Web Scraping InOutImg8

长度/@表

因此,如果你想知道明天的温度,你可以找到带有适当标题的行,并在标题后输入前四项:

Web Scraping InOutImg9

第一位置[表格,“Temp”]

Web Scraping InOutImg10

表[[10,2;;5]]

方便的是,温度数据被识别为数字,因此很容易直接传递给函数。这里是平均值一周内所有温度(我使用休息忽略每个列表开头的行标签):

Web Scraping InOutImg11

N个@平均值@休息@表[[10]]

这里有一个列表线条图本周所有温度中:

Web Scraping InOutImg12

列表线条图[休息@桌子[[10]]]

口译员可用于分析其他数据类型。举一个简单的例子,以报告为百分比的各种天气要素为例:

Web Scraping InOutImg13

百分比=表格[[{5,11,13}]]

这些值当前表示为字符串,对数值计算不友好。应用解释器[“Percent”]自动将每个值转换为数字数量以百分比为单位:

Web报废InOutImg14

{precip,云,湿度}=口译员[“百分比”]/@(休息/@percents)

现在它们被识别为百分比,您可以将它们绘制在一起:

Web Scraping InOutImg15

labels=第一个/@百分比

Web Scraping InOutImg16

ListLinePlot[{悬崖,云层,湿度},PlotLabels->标签]

通过提取附加到这些值的日期和时间信息,并用日期对象,可以将数据转换为时间序列对象:

Web Scraping InOutImg17

dates=日期对象/@扁平@桌子[表[[2,j]]<>“”<>i,{j,长度@表[[2]]}、{i,表[[9,2;;5]]}];

Web Scraping InOutImg18

ts=时间序列/@(Transpose[{dates,#}]&/@{precip,clouds,湿度});

这非常适合日期列表图,它标记x个带日期的轴:

DateListPlot[ts,PlotLabels->labels]

超越刮擦

使用Wolfram语言很容易获得您需要的数据,但这只是故事的开始!有了我们的集成数据框架,您可以做得更多:自动化导入过程,简化数据访问,甚至创建自己的永久数据资源。

在我的下一个帖子,我将探索一些高级的结构化和清理技术,演示如何从刮取的数据创建结构化数据集。


有关您在此处阅读的函数的更多详细信息,请参阅“从网站中删除数据”工作流.

评论

加入讨论

!请输入您的评论(至少5个字符)。

!请输入您的姓名。

!请输入有效的电子邮件地址。

2条评论