原文:KDNuggets
如何发现机器学习模型中的弱点
原文:
www.kdnuggets.com/2021/09/weaknesses-machine-learning-models.html
评论
由 Michael Berk, Tubi 数据科学家
每当你使用总结统计来简化数据时,你都会丢失信息。模型准确性也不例外。当简化模型的拟合到总结统计时,你失去了确定性能最低/最高以及原因的能力。
图 1:模型表现差的数据区域示例。图片由作者提供。
为了解决这个问题,IBM 的研究人员最近开发了一种名为 FreaAI 的方法,它识别出模型准确率较差的可解释数据切片。工程师可以根据这些切片采取必要措施,以确保模型按预期运行。
FreaAI 不幸的是不是开源的,但许多概念可以很容易地在你喜欢的技术栈中实现。让我们深入了解一下……
技术总结
FreaAI 在测试数据中找到统计上显著低性能的切片。它们被返回给工程师进行检查。方法步骤如下:
-
使用最高先验密度 (HPD) 方法找到准确率低的单变量数据切片。 这些单变量数据切片减少了搜索空间,显示了数据中更可能存在问题的地方。
-
使用决策树找到准确率低的双变量数据切片。 这些双变量数据切片减少了分类预测变量和二阶交互的搜索空间,显示了数据中更可能存在问题的地方。
-
移除所有不符合特定启发式规则的数据切片。 主要的两个规则是测试集的最小支持度和统计上显著的误差增加。
但是,实际上发生了什么?
那些都是术语,我们来慢慢了解一下实际情况……
1. 问题
在开发模型时,我们经常使用“准确性”指标来判断模型的拟合度。例如均方误差,这在图 2 中定义并用于线性回归。
图 2:均方误差公式。图片由作者提供 — 源。
但是,这个平均误差只告诉我们 平均 来说表现如何。我们不知道模型在数据的某些区域表现很好还是在其他区域表现很差。
这是一个长期存在的预测建模问题,最近引起了很多关注。
2. 解决方案
一个解决方案是 FreaAI。该方法在 IBM 开发,旨在确定我们数据中模型表现不佳的地方。
主要有两个步骤。第一步是创建数据切片,第二步是确定模型在这些数据切片中的表现是否不佳。FreaAI 的输出是一组“位置”,这些位置的数据中模型表现不佳。
2.1. 数据切片
组合测试 (CT) 是一个框架,它依次查看所有预测变量组合以找到表现不佳的区域。例如,如果我们有两个类别预测变量,颜色和形状,我们会查看所有可能的组合,并查看准确性下降的地方。
然而,利用组合测试在大型数据集上是计算上不可行的 — 每增加一列,我们会看到所需组合数量的指数增长。因此,我们需要定义一种方法来帮助我们搜索特征,以找到潜在的不准确区域。
图 3:50% 最高密度区域 (HDR) 的蓝色示例。图像由作者提供 — 源。
FreaAI 使用的第一种方法利用了叫做 最高密度区域 (HDR) 的技术(见图 3)。简而言之,HDR 找出数值特征中数据占比最高的最小区域,即高密度区域。在图 3 中,区域由水平蓝色虚线区分 — 我们的数据中有 50% 在该线之上。
从那里我们通过一个 ε 值(默认 0.05)逐步减少这个范围,并观察准确性的提高。如果准确性在给定的迭代中提高,我们知道模型在前一次迭代和当前迭代之间的区域表现不佳。
要确定数值预测变量的不良拟合区域,我们会对测试集中的所有预测变量迭代运行 HDR 方法。
相当酷,对吧?
第二种方法利用决策树来处理所有非数值预测变量以及两个特征的组合。简而言之,我们拟合一个决策树,并寻找使准确性最小化的特征切分。
图 4:关于连续单变量预测变量“年龄”的决策树示例。图像由作者提供。
在图 4 中,每个决策节点(蓝色)是对特征的拆分,每个终端节点(数字)是该拆分的准确度。通过拟合这些树,我们可以真正缩小搜索空间,更快地找到表现不佳的区域。此外,由于树对许多不同类型的数据都非常强健,我们可以在分类预测变量或多个预测变量上运行,以捕捉交互效应。
这种决策树方法会重复用于所有特征组合,以及那些不是数字的单一特征。
2.2. 数据切片的启发式方法
到目前为止,我们只关注了通过准确度开发数据切片,但还有其他启发式方法可以帮助我们找到有用的数据切片:
-
统计显著性:为了确保我们只关注准确度有显著下降的数据切片,我们仅保留性能低于误差置信区间下界 4% 的切片。通过这样做,我们可以以α 的概率断言我们的数据切片具有更高的误差。
-
可解释性:我们还希望确保发现的问题区域可以付诸行动,因此我们在创建组合时仅查看两个或三个特征。通过限制低阶交互作用,我们的工程师更有可能开发解决方案。
-
最小支持:最后,数据切片必须有足够的误差值得调查。我们要求至少有 2 次分类错误,或覆盖 5% 的测试误差 — 取较大的值作为标准。
还值得注意的是,你可以根据业务需求调整其他启发式方法。错误分类某些用户比其他用户更严重,因此你可以将其纳入数据切片标准中 — 参考 精确度/召回率权衡。
3. 总结和要点
所以,你看到了 — FreaAI 的全部荣耀。
再次说明,FreaAI 不是开源的,但希望将来能向公众发布。在此期间,你可以将我们讨论的框架应用到你自己的预测模型中,确定系统性表现不佳的地方。
3.1. 总结
总结一下,FreeAI 使用 HDR 和决策树来缩小我们预测变量的搜索空间。然后,它迭代地查看单个特征及其组合,以确定性能较低的地方。这些低性能区域具有一些额外的启发式方法,以确保发现具有可操作性。
3.2. 你为什么要关心?
首先,这个框架帮助工程师识别模型的弱点。当这些弱点被发现时,它们可以(希望)得到纠正,从而改善预测。对于黑箱模型(如神经网络),这种改进尤其诱人,因为没有模型系数。
通过隔离表现不佳的数据区域,我们可以窥视黑箱。
FreaAI 还具有其他应用的有趣潜力。一个例子是识别模型漂移,即训练后的模型随着时间推移变得越来越无效。IBM 刚刚发布了一个 用于确定模型漂移的假设检验框架。
另一个有趣的应用是确定模型偏差。在这种情况下,偏差是指不公平的概念,例如基于性别拒绝向某人提供贷款。通过查看模型性能较低的不同数据拆分,你可以发现偏差的领域。
感谢阅读!我将撰写 37 篇帖子,将学术研究引入数据科学行业。请查看我的评论,获取本文主要来源的链接以及一些有用的资源。
简介: 迈克尔·伯克 (michaeldberk.com/
) 是 Tubi 的数据科学家。
原文。经许可转载。
相关:
-
反脆弱性与机器学习
-
与 Github Actions、Iterative.ai、Label Studio 和 NBDEV 的 MLOps 探险
-
数学 2.0:机器学习的基础重要性
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业轨道。
2. Google 数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持你所在组织的 IT
更多相关话题
数据集整理的网页抓取,第一部分:收集手工啤酒数据
原文:
www.kdnuggets.com/2017/02/web-scraping-dataset-curation-part-1.html
作者:Jean-Nicholas Hould,JeanNicholasHould.com。
如果你读过我过去的一些文章,你现在知道我喜欢好的手工啤酒。我决定将工作与乐趣结合起来,编写一个关于如何用 Python 从网站抓取手工啤酒数据集的教程。
我们的前三名课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你组织的 IT 工作
本文分为两个部分:抓取和整理数据。在第一部分中,我们将规划和编写代码以从网站收集数据集。在第二部分中,我们将把“整洁数据”原则应用于这个新抓取的数据集。文章末尾,我们将拥有一个干净的手工啤酒数据集。
网页抓取
网页抓取器是一段代码,它会自动加载网页并提取特定数据。网页抓取器会执行一个重复的任务,这个任务如果由你手动完成会非常耗时。
例如,我们可以编写一个网络抓取器,从一个电子商务网站提取产品名称及其评分,并将其写入 CSV 文件中。
抓取网站是获取原本无法获得的新数据集的好方法。
几条关于抓取的规则
正如 Greg Reda 几年前在他的出色的网页抓取教程中指出的那样,关于抓取你需要知道一些规则:
-
尊重网站的条款和条件。
-
不要给服务器带来压力。一个抓取器可以在一秒钟内发出成千上万次网页请求。确保你不会给服务器施加过多压力。
-
你的抓取器代码将会失效。网页经常变化。你的抓取器代码很快就会过时。
规划
构建抓取器的第一步是规划阶段。显然,你需要决定你想要提取什么数据以及从哪个网站提取。
在我们的案例中,我们想要从一个名为CraftCans的网站提取数据。这个网站列出了 2692 种手工罐装啤酒。对于这个特定的数据集,我们不需要构建一个抓取器来提取数据。按照它的布局,我们可以很容易地将数据复制粘贴到 Excel 表格中。
对于每种啤酒,网站提供了一些详细信息:
-
名称
-
风格
-
尺寸
-
酒精浓度(ABV)
-
IBU(国际苦味单位)
-
酿造商名称
-
酿造商位置
检查 HTML
我们希望我们的抓取器为我们提取所有这些信息。为了给我们的抓取器提供具体指令,我们需要查看 CraftCans 网站的 HTML 代码。大多数现代浏览器提供了一种通过右键单击页面来检查网页 HTML 源代码的方法。
在 Google Chrome 上,你可以右键单击网页上的元素,然后点击“检查”以查看 HTML 代码。
识别模式
从主页面上的 HTML 代码来看,你可以看到这个大列表实际上是一个 HTML 表格。每种啤酒代表表格中的一行。通常,像 HTML 表格这样的重复模式非常适合网页抓取,因为逻辑简单明了。
使用的库
对于这个项目,我们将导入四个库。
urlopen
第一个urlopen
将用于请求网页上的 HTML 页面并返回其内容。就这么简单。
BeautifulSoup4
第二个,BeautifulSoup4
,是一个使在 HTML 文档中导航变得简单的库。例如,使用这个库你可以轻松选择 HTML 文档中的一个表格并遍历其行。
pandas
第三个是pandas
。我们不会在抓取部分使用这个库。我们将使用它来整理数据。pandas
是一个旨在简化数据操作和分析的库。
用于正则表达式的 re
最后,我们将使用re
,它是 Python 标准库的一部分。这个库提供了正则表达式匹配操作。正则表达式是操纵字符串的方式。例如,我们可以使用正则表达式列出字符串中的所有数字。
编写代码
HTML 的挑战
在对 CraftCans 网页进行一些调查后,我意识到没有干净的方法来抓取 CraftCans 网站。
CraftCans 的 HTML 结构有些老派。整个页面布局都在表格中。这曾经是常见做法,但现在布局通常使用 CSS 设置。
此外,HTML 表格或包含啤酒条目的行上没有类或标识符。没有干净的 HTML 结构或标识符,定位到我们想要的特定表格是具有挑战性的。
解决方案:列出所有表格行
我找到的抓取网站的解决方案可能不是最干净的,但它有效。
由于包含数据的表格上没有标识符,我使用BeautifulSoup4
的findAll
函数加载 CraftCans 页面上所有的表格行tr
。此函数返回一个全面的表格行列表,无论它们是否来自我们要抓取的表格。
对于每一行,我运行测试以确定它是否包含啤酒条目或其他内容。判断一行是否为啤酒数据条目的启发式方法很简单:该行需要包含八个单元格,并且第一个单元格必须包含有效的数字 ID。
现在我们已经有了判断一行是否确实为啤酒条目的函数,我们可以抓取整个网页。我们需要决定以何种格式存储从网站收集的数据。我希望每个 CraftCans 的啤酒条目都像这样的 JSON 文档。
示例啤酒 JSON 条目
我喜欢将数据存储在 JSON 文档中的原因是,我可以轻松地将其转换为 pandas DataFrame
。
运行抓取器
函数编写完成后,我们可以使用 urlopen
请求 CraftCans 网页,并让代码处理其余部分。
有了 get_all_beers
返回的啤酒列表,我们可以轻松创建一个新的 pandas
DataFrame 来方便地可视化和操作数据。
简介:Jean-Nicholas Hould 是来自 加拿大蒙特利尔的数据科学家。JeanNicholasHould.com 的作者。
原文。经许可转载。
相关:
-
在 Python 中整理数据
-
使用 SQL 进行统计分析
-
数据科学统计 101
更多相关主题
使用 Python 进行网络爬取:以 CIA 世界概况为例
原文:
www.kdnuggets.com/2018/03/web-scraping-python-cia-world-factbook.html
评论
在数据科学项目中,几乎总是最耗时且最麻烦的部分是数据收集和清洗。每个人都喜欢构建一个炫酷的深度神经网络(或 XGboost)模型,并展示自己用炫酷的 3D 交互式图表的技能。但这些模型需要原始数据作为起点,而这些数据并不容易获得且不干净。
毕竟,生活不是 Kaggle,那里一个装满数据的 zip 文件等着你去解压和建模 😃
那么,为什么要收集数据或建立模型呢?根本的动机是为了回答一个商业、科学或社会问题。是否有趋势?这个东西与那个东西有关吗?测量这个实体是否能预测那个现象的结果?这是因为回答这个问题将验证你作为科学家/从业者的假设。你只是使用数据(与化学家用试管或物理学家用磁铁不同)来测试你的假设并从科学上证明或证伪它。这就是数据科学中的‘科学’部分。没有更多,也没有更少……
相信我,提出一个需要稍微应用数据科学技术来回答的高质量问题并不那么难。每一个这样的问提都会成为你的小项目,你可以将其编写成代码并在像 Github 这样的开源平台上展示给朋友。即使你不是职业数据科学家,没有人可以阻止你编写炫酷的程序来回答一个好的数据问题。这展示了你作为一个对数据熟悉并能够讲述数据故事的人的形象。
今天让我们处理这样一个问题……
一个国家的 GDP(按购买力平价计算)与其互联网用户百分比之间是否存在关系?这种趋势在低收入/中等收入/高收入国家中是否相似?
现在,你可以想到任何数量的来源来收集数据以回答这个问题。我发现来自 CIA 的一个网站(是的,就是那个‘机构’),提供有关全球所有国家的基本事实信息,是抓取数据的好地方。
因此,我们将使用以下 Python 模块来构建我们的数据库和可视化,
-
Pandas,Numpy, matplotlib/seaborn
-
Python urllib(用于发送 HTTP 请求)
-
BeautifulSoup(用于 HTML 解析)
-
正则表达式模块(用于查找精确匹配的文本)
让我们讨论一下程序结构,以回答这个数据科学问题。我的 Github 仓库 中提供了 完整的代码模板。如果你喜欢,可以随意 fork 和 star。
读取前 HTML 页面并传递给 BeautifulSoup
这是 CIA 世界概况书前页 的样子,
图:CIA 世界概况书前页
我们使用带有 SSL 错误忽略上下文的简单 urllib 请求来检索该页面,然后将其传递给神奇的 BeautifulSoup,它为我们解析 HTML 并生成漂亮的文本转储。对于那些不熟悉 BeautifulSoup 库的人,他们可以观看以下视频或阅读这篇 很棒的 Medium 文章。
这里是读取前页 HTML 的代码片段,
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
# Read the HTML from the URL and pass on to BeautifulSoup
url = 'https://www.cia.gov/library/publications/the-world-factbook/'
print("Opening the file connection...")
uh= urllib.request.urlopen(url, context=ctx)
print("HTTP status",uh.getcode())
html =uh.read().decode()
print(f"Reading done. Total {len(html)} characters read.")
这里是我们如何将数据传递给 BeautifulSoup,并使用 find_all
方法查找 HTML 中嵌入的所有国家名称和代码。基本思想是 查找名为‘option’的 HTML 标签。该标签中的文本是国家名称,而标签值的第 5 和第 6 个字符代表 2 字符的国家代码。
现在,你可能会问,如何知道只需要提取第 5 和第 6 个字符?简单的答案是 你必须检查 soup 文本,即解析后的 HTML 文本,并确定这些索引。没有通用的方法来确定这一点。每个 HTML 页面及其底层结构都是独一无二的。
soup = BeautifulSoup(html, 'html.parser')
country_codes=[]
country_names=[]
for tag in soup.find_all('option'):
country_codes.append(tag.get('value')[5:7])
country_names.append(tag.text)
temp=country_codes.pop(0) # *To remove the first entry 'World'*
temp=country_names.pop(0) # *To remove the first entry 'World'*
抓取:通过单独抓取每一页,将所有国家的文本数据下载到字典中
这个步骤是所谓的基本抓取或爬取。要做到这一点,关键是要确定每个国家信息页面的 URL 是如何结构化的。一般情况下,这可能很难获取。在这个特定的案例中,快速检查显示了一个非常简单且规律的结构可以遵循。以下是澳大利亚的截图,
这意味着有一个固定的 URL,你需要将 2 字符的国家代码附加到这个 URL 上,就能到达该国家页面的 URL。因此,我们可以遍历国家代码列表,使用 BeautifulSoup 提取所有文本并存储在本地字典中。以下是代码片段,
# Base URL
urlbase = 'https://www.cia.gov/library/publications/the-world-factbook/geos/'
# Empty data dictionary
text_data=dict()
# Iterate over every country
for i in range(1,len(country_names)-1):
country_html=country_codes[i]+'.html'
url_to_get=urlbase+country_html
# Read the HTML from the URL and pass on to BeautifulSoup
html = urllib.request.urlopen(url_to_get, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
txt=soup.get_text()
text_data[country_names[i]]=txt
print(f"Finished loading data for {country_names[i]}")
print ("\n**Finished downloading all text data!**")
如果你喜欢,可以存储在 Pickle 转储中
为了更好地处理,我喜欢将这些数据序列化并 存储在一个 Python pickle 对象 中。这样,下次打开 Jupyter notebook 时,我可以直接读取数据,而无需重复网络爬取步骤。
import pickle
pickle.dump(text_data,open("text_data_CIA_Factobook.p", "wb"))
# Unpickle and read the data from local storage next time
text_data = pickle.load(open("text_data_CIA_Factobook.p", "rb"))
使用正则表达式从文本转储中提取 GDP/人数据
这是程序的核心文本分析部分,我们借助 正则表达式 模块 来查找在庞大的文本字符串中寻找我们需要的信息,并提取相关的数字数据。正则表达式是 Python(或几乎所有高级编程语言)中的丰富资源。它允许在大文本语料库中搜索/匹配特定模式的字符串。在这里,我们使用非常简单的正则表达式方法来匹配如“GDP — per capita (PPP):”这样的确切词汇,然后读取其后的几个字符,提取某些符号如$和括号的位置,最终提取 GDP/人均的数值。这里用一个图示例说明了这个想法。
图:文本分析的示意图
在这个笔记本中使用了其他正则表达式技巧,例如提取总 GDP,无论数字是以十亿还是万亿表示。
# 'b' to catch 'billions', 't' to catch 'trillions'
start = re.search('\$',string)
end = re.search('[b,t]',string)
if (start!=None and end!=None):
start=start.start()
end=end.start()
a=string[start+1:start+end-1]
a = convert_float(a)
if (string[end]=='t'):
# If the GDP was in trillions, multiply it by 1000
a=1000*a
这是示例代码片段。注意代码中放置的多个错误处理检查。这是必要的,因为 HTML 页面的不可预测性极高。不是所有国家都有 GDP 数据,页面上的数据表述可能不完全相同,数字的形式也可能不同,字符串中的$和()也可能放置得不同。可能会发生各种错误。
准备和编写所有场景的代码几乎是不可能的,但至少你需要有代码来处理异常,以防出现异常,这样你的程序不会中断,并可以优雅地继续处理下一个页面。
# Initialize dictionary for holding the data
GDP_PPP = {}
# Iterate over every country
for i in range(1,len(country_names)-1):
country= country_names[i]
txt=text_data[country]
pos = txt.find('GDP - per capita (PPP):')
if pos!=-1: #If the wording/phrase is not present
pos= pos+len('GDP - per capita (PPP):')
string = txt[pos+1:pos+11]
start = re.search('\$',string)
end = re.search('\S',string)
if (start!=None and end!=None): #If search fails somehow
start=start.start()
end=end.start()
a=string[start+1:start+end-1]
#print(a)
a = convert_float(a)
if (a!=-1.0): #If the float conversion fails somehow
print(f"GDP/capita (PPP) of {country}: {a} dollars")
# Insert the data in the dictionary
GDP_PPP[country]=a
else:
print("**Could not find GDP/capita data!**")
else:
print("**Could not find GDP/capita data!**")
else:
print("**Could not find GDP/capita data!**")
print ("\nFinished finding all GDP/capita data")
不要忘记使用 pandas 的内连接/左连接方法
需要记住的一点是,这些文本分析将生成具有略微不同国家集的数据框,因为不同类型的数据可能在不同国家不可用。可以使用 Pandas 左连接 来创建一个包含所有公共国家交集的数据框,这些国家的数据是可用的或可以提取的。
df_combined = df_demo.join(df_GDP, how='left')
df_combined.dropna(inplace=True)
现在进入有趣的部分,建模……但等等!先做过滤吧!
在完成 HTML 解析、页面抓取和文本挖掘的所有艰苦工作后,现在你已经准备好获得成果——迫不及待地运行回归算法和酷炫的可视化脚本!但等等,通常你需要在生成这些图表之前对数据进行更多的清理(特别是对于这类社会经济问题)。基本上,你想要过滤掉离群值,例如非常小的国家(如岛国),这些国家的参数值可能极度偏斜,但不符合你想要调查的主要动态。几行代码足以完成这些过滤。虽然可能有更Pythonic的实现方式,但我尽量保持简单易懂。以下代码例如创建了过滤器,以排除总 GDP 小于 500 亿以及收入边界低于 5000 美元和高于 25000 美元的国家(人均 GDP)。
# Create a filtered data frame and x and y arrays
filter_gdp = df_combined['Total GDP (PPP)'] > 50
filter_low_income=df_combined['GDP (PPP)']>5000
filter_high_income=df_combined['GDP (PPP)']<25000
df_filtered = df_combined[filter_gdp][filter_low_income][filter_high_income]
最后,数据可视化
我们使用了seaborn regplot 函数来创建散点图(互联网用户比例 vs. 人均 GDP),并显示线性回归拟合和 95%的置信区间带。它们看起来如下。可以将结果解释为
国家互联网用户比例与人均 GDP 之间存在强正相关关系。此外,低收入/低 GDP 国家的相关性强度显著高于高 GDP 发达国家。这可能意味着互联网访问帮助低收入国家更快地发展,并且在改善公民平均状况方面比发达国家更有效。
总结
本文介绍了一个演示 Python 笔记本,说明如何通过使用 BeautifulSoup 进行 HTML 解析来抓取网页以下载原始信息。随后,它还说明了使用正则表达式模块来搜索和提取用户所需的重要信息。
总而言之,这展示了在挖掘混乱的 HTML 解析文本时,为什么没有简单、普遍的规则或程序结构。必须检查文本结构,并设置适当的错误处理检查,以优雅地处理所有情况,确保程序流程顺畅(不会崩溃),即使不能提取所有场景的数据。
希望读者能从提供的 Notebook 文件中受益,并根据自己的需求和想象进行扩展。有关更多网络数据分析的笔记本,请查看我的代码库。
如果你有任何问题或想法,请通过 tirthajyoti[AT]gmail.com 联系作者。你也可以查看作者的 GitHub 仓库 以获取其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样,对机器学习/数据科学充满热情,请随时 在 LinkedIn 上添加我 或 在 Twitter 上关注我。
简介: Tirthajyoti Sarkar 是一位半导体技术专家,机器学习/数据科学爱好者,电气工程博士,博客作者和作家。
原文。经允许转载。
相关:
-
使用 Python 的网页抓取教程:技巧与窍门
-
为什么你应该忘记数据科学代码中的‘for-loop’,而接受矢量化
-
IT 工程师需要学习多少数学才能进入数据科学领域
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织的 IT
更多相关内容
使用 Python 进行网页抓取教程:技巧和窍门
原文:
www.kdnuggets.com/2018/02/web-scraping-tutorial-python.html
评论
我在寻找机票时注意到票价在一天内会波动。我试图找出买票的最佳时间,但在网上找不到有用的信息。我编写了一个小程序来自动收集网页数据——一个所谓的抓取器。它提取了我指定日期和航班目的地的信息,并在价格降低时通知我。
网页抓取是一种通过自动化过程从网站提取数据的技术。
我从这次网页抓取的经历中学到了很多东西,并且我想分享一下。
本文旨在介绍与网页抓取相关的常见设计模式、陷阱和规则。文章呈现了几个用例和一系列典型的问题,例如如何避免被检测、注意事项和禁忌事项,以及如何**加速(并行化)**你的抓取器。
一切都将配有 Python 代码片段,以便你可以立即开始。本文档还将介绍几个有用的 Python 包。
用例
有很多原因和用例说明为什么你可能想要抓取数据。让我列举一些:
-
抓取电子零售商的页面,以查看你想购买的某些衣物是否有折扣
-
通过抓取页面比较多个服装品牌的价格
-
机票价格在一天内可能会有所变化。可以爬取旅行网站,并在价格降低时收到警报。
-
分析拍卖网站以回答启动竞标价应该低还是高,以吸引更多竞标者,或更长的拍卖是否与更高的最终竞标价相关
教程
教程结构:
-
可用的包
-
基本代码
-
陷阱
-
注意事项
-
加速——并行化
在我们开始之前:对服务器要友好;你不想让网站崩溃。
1. 可用的包和工具
因为每个网站上的数据存储方式通常是特定于该站点的,所以没有一种通用的网页抓取解决方案。事实上,如果你想抓取数据,你需要了解网站的结构,并自行构建解决方案或使用高度可定制的解决方案。
但是,你不需要重新发明轮子:有许多包可以为你完成大部分工作。根据你的编程技能和预期用途,你可能会发现不同的包有不同的适用性。
1.1 检查选项
大多数时候,你会发现自己在检查网站的 HTML。你可以通过浏览器的“检查” 选项 来轻松做到这一点。
网站上包含我的名字、头像和描述的部分被称为 hero hero--profile u-flexTOP
(有趣的是 Medium 称其作者为‘英雄’ 😃)。包含我名字的
类被称为 ui-h2 hero-title
,而描述则包含在
类 ui-body hero-description
中。
你可以在 这里 阅读更多关于 HTML 标签,以及 类 和 id 之间的区别。
1.2 Scrapy
有一个独立的即用型数据提取框架叫做 Scrapy。除了提取 HTML 外,该包还提供了许多功能,如数据导出格式、日志记录等。它也高度可定制:在不同进程上运行不同的蜘蛛,禁用 cookies¹ 和设置下载延迟²。它也可以用于通过 API 提取数据。然而,对新程序员来说,学习曲线并不平滑:你需要阅读教程和示例才能入门。
¹ 一些网站使用 cookies 来识别机器人。
² 网站可能因为大量的爬虫请求而过载。
对我来说,这“开箱即用”的程度太高了:我只想从所有页面提取链接,访问每个链接并提取信息。
1.3 BeautifulSoup 与 Requests
BeautifulSoup 是一个可以以优美的方式解析 HTML 源代码的库。你还需要一个 Request 库来获取 URL 的内容。然而,你需要处理其他所有事务,比如错误处理、数据导出、如何并行化网络爬虫等。
我选择了 BeautifulSoup,因为它迫使我去弄清楚很多 Scrapy 自行处理的事情,并且希望通过错误学习得更快。
2. 基本代码
开始抓取网站是非常直接的。大多数时候,你会发现自己在检查 HTML 以访问所需的类和 ID。假设我们有以下 HTML 结构,我们想要提取 main_price
元素。注意:discounted_price
元素是可选的。
基本代码是导入库,进行请求,解析 HTML,然后找到 class main_price
。
class main_price
可能出现在网站的其他部分。为了避免从网页的其他部分提取不必要的class main_price
,我们可以先处理id listings_prices
,然后再找到所有具有class main_price
的元素。
3. 陷阱
3.1 检查 robots.txt
网站的抓取规则可以在robots.txt文件中找到。你可以通过在主域名后面添加 robots.txt 来找到它,例如www.website_to_scrape.com/robots.txt。这些规则标识了哪些网站部分不允许被自动提取或一个机器人请求页面的频率。大多数人对此不太在意,但即使你不打算遵守规则,也要尊重并至少查看一下这些规则。
3.2 HTML 可能是恶意的
HTML 标签可以包含id
、class
或两者。HTML id 指定一个唯一的 id,而 HTML class 是非唯一的。类名或元素的更改可能会破坏你的代码或导致错误的结果。
有两种方法可以避免或者至少对其有所警觉:
-
使用特定的
id
而不是class
,因为id
更不容易更改 -
检查元素是否返回
None
price = page_content.find(id='listings_prices')
# check if the element with such id exists or not
if price is None:
# NOTIFY! LOG IT, COUNT IT
else:
# do something
然而,由于某些字段可能是可选的(如我们 HTML 示例中的discounted_price
),相应的元素可能不会出现在每个列表中。在这种情况下,你可以计算这个特定元素返回 None 的次数占总列表的百分比。如果是 100%,你可能需要检查元素名称是否被更改了。
3.3 用户代理伪装
每次你访问一个网站时,它会通过用户代理获取你的浏览器信息。有些网站不会显示任何内容,除非你提供一个用户代理。此外,一些网站会向不同的浏览器提供不同的内容。网站不想封锁真实用户,但如果你使用相同的用户代理每秒发送 200 个请求,你会显得很可疑。一种解决办法是生成(几乎)随机的用户代理,或者自己设置一个。
# library to generate user agent
from user_agent import generate_user_agent
# generate a user agent
headers = {'User-Agent': generate_user_agent(device_type="desktop", os=('mac', 'linux'))}
#headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.63 Safari/537.36'}
page_response = requests.get(page_link, timeout=5, headers=headers)
3.4 超时请求
默认情况下,Request将无限期等待响应。因此,建议设置超时参数。
# timeout is set to 5 seconds
page_response = requests.get(page_link, timeout=5, headers=headers)
3.5 我被封锁了吗?
频繁出现状态码如 404(未找到)、403(禁止访问)、408(请求超时)可能表明你被封锁了。你可能需要检查这些错误代码并相应地采取行动。此外,要准备好处理请求中的异常。
try:
page_response = requests.get(page_link, timeout=5)
if page_response.status_code == 200:
# extract
else:
print(page_response.status_code)
# notify, try again
except requests.Timeout as e:
print("It is time to timeout")
print(str(e))
except # other exception
3.6 IP 轮换
即使你随机化了用户代理,你的所有请求仍将来自同一个 IP 地址。这并不显得异常,因为图书馆、大学以及公司只有少数几个 IP 地址。然而,如果单个 IP 地址有异常多的请求,服务器可能会检测到。
使用共享代理、VPN 或 TOR可以帮助你成为隐形人;)。
proxies = {'http' : 'http://10.10.0.0:0000',
'https': 'http://120.10.0.0:0000'}
page_response = requests.get(page_link, proxies=proxies, timeout=5)
通过使用共享代理,网站将看到代理服务器的 IP 地址,而不是你的 IP 地址。VPN 将你连接到另一个网络,VPN 提供商的 IP 地址将发送给网站。
3.7 蜜罐
蜜罐是用来检测爬虫或抓取器的手段。
这些可能是“隐藏的”链接,用户无法看到,但可以被爬虫/蜘蛛提取。这些链接的 CSS 样式可能设置为 display:none
,它们可能与背景颜色融合在一起,或者甚至被移到页面的不可见区域。一旦你的爬虫访问了这样的链接,你的 IP 地址可能会被标记以便进一步调查,甚至可能会立即被封锁。
另一种识别爬虫的方法是添加具有无限深度目录树的链接。这样需要限制检索的页面数量或限制遍历深度。
4. 应做与不应做的事项
-
在抓取之前,检查是否有公开 API 可用。公开 API 提供比网页抓取更简单、更快捷(且合法)的数据检索。查看Twitter API,它提供了用于不同目的的 API。
-
如果你抓取了大量数据,你可能需要考虑使用数据库,以便能够快速分析或检索数据。查看这个教程了解如何使用 Python 创建本地数据库。
-
要礼貌。如这个答案所建议,建议让人们知道你正在抓取他们的网站,以便他们可以更好地应对你的爬虫可能引发的问题。
再次提醒,不要通过每秒发送数百个请求来过载网站。
5. 加速——并行化
如果你决定将程序并行化,要小心你的实现,以免对服务器造成冲击。并确保阅读应做与不应做的事项部分。查看这里和这里了解并行化与并发、处理器和线程的定义。
如果你从页面上提取了大量信息并在抓取时进行了数据预处理,你发送到页面的每秒请求数可能会相对较低。
对于我另一个项目,即抓取公寓租赁价格时,我在抓取过程中进行了大量的数据预处理,这导致每秒发出 1 个请求。为了抓取 4K 条广告,我的程序大约运行了一个小时。
为了并行发送请求,你可能需要使用 multiprocessing 包。
假设我们有 100 页内容,我们希望将每个处理器分配相等数量的页面。如果 n
是 CPU 的数量,你可以将所有页面均匀分块成 n
个区域,并将每个区域分配给一个处理器。每个进程将拥有自己的名称、目标函数和处理的参数。进程的名称可以用于后续的数据写入特定文件。
我将每 1K 页分配给 4 个 CPU,这样得到了每秒 4 个请求,并将抓取时间减少到约 17 分钟。
import numpy as np
import multiprocessing as multi
def chunks(n, page_list):
"""Splits the list into n chunks"""
return np.array_split(page_list,n)
cpus = multi.cpu_count()
workers = []
page_list = ['www.website.com/page1.html', 'www.website.com/page2.html'
'www.website.com/page3.html', 'www.website.com/page4.html']
page_bins = chunks(cpus, page_list)
for cpu in range(cpus):
sys.stdout.write("CPU " + str(cpu) + "\n")
# Process that will send corresponding list of pages
# to the function perform_extraction
worker = multi.Process(name=str(cpu),
target=perform_extraction,
args=(page_bins[cpu],))
worker.start()
workers.append(worker)
for worker in workers:
worker.join()
def perform_extraction(page_ranges):
"""Extracts data, does preprocessing, writes the data"""
# do requests and BeautifulSoup
# preprocess the data
file_name = multi.current_process().name+'.txt'
# write into current process file
祝抓取愉快!
简介:耶卡特琳娜·科卡特朱哈 是一位热衷于生物信息学的研究员,对机器学习和数据科学充满兴趣。
原文。经许可转载。
相关内容
我们的前 3 个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 部门
更多相关内容
Web LLM:将 LLM 聊天机器人带到浏览器
原文:
www.kdnuggets.com/2023/05/webllm-bring-llm-chatbots-browser.html
图片由作者提供
基于 LLM 的聊天机器人通过前端访问,并涉及大量昂贵的 API 调用到服务器端。但是,如果我们能让 LLM 完全在浏览器中运行——利用底层系统的计算能力,那将会怎样呢?
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT
这样,LLM 的全部功能都可以在客户端实现——无需担心服务器的可用性、基础设施等问题。Web LLM 是一个旨在实现这一目标的项目。
让我们进一步了解 Web LLM 的驱动因素以及构建这样一个项目的挑战。我们还将查看 Web LLM 的优点和局限性。
什么是 Web LLM?
Web LLM 是一个使用 WebGPU 和 WebAssembly 等技术,使 LLM 和 LLM 应用程序能够完全在浏览器中运行的项目。通过 Web LLM,你可以利用 WebGPU 通过底层系统的 GPU 在浏览器中运行 LLM 聊天机器人。
它使用 Apache TVM 项目的编译器栈,并使用最近发布的 WebGPU。除了 3D 图形渲染等功能,WebGPU API 还支持通用 GPU 计算(GPGPU 计算)。
构建 Web LLM 的挑战
由于 Web LLM 完全在客户端运行,没有任何推理服务器,因此项目面临以下挑战:
-
大型语言模型使用 Python 框架进行深度学习,这些框架原生支持利用 GPU 进行张量操作。
-
在构建 Web LLM 以便完全在浏览器中运行时,我们将无法使用相同的 Python 框架。因此,必须探索其他技术栈,这些技术栈能够在网页上运行 LLM,同时仍使用 Python 进行开发。
-
运行 LLM 应用程序通常需要大型推理服务器,但当一切都在客户端——即浏览器中运行时,我们将无法再使用大型推理服务器。
-
需要对模型权重进行智能压缩,以使其适合可用的内存。
Web LLM 如何工作?
Web LLM 项目利用底层系统的 GPU 和硬件能力在浏览器中运行大型语言模型。机器学习编译 的过程通过利用 TVM Unity 和一系列优化,将 LLM 的功能集成到浏览器端。
Web LLM 的工作原理 | 图片来源
系统使用 Python 开发,并通过 TVM 运行时在网页上运行。这一移植到网页浏览器的过程是通过一系列优化实现的。
LLM 的功能首先被集成到 TVM 中的 IRModule 中。在 IRModule 中对函数进行多个转换,以获取优化后的可运行代码。TensorIR 是一种用于优化张量计算程序的编译器抽象。此外,INT-4 量化用于压缩模型的权重。TVM 运行时则通过 TypeScript 和 emscripten 实现,后者是一个将 C 和 C++ 代码转换为 WebAssembly 的 LLVM 编译器。
作者提供的图片
你需要最新版本的 Chrome 或 Chrome Canary 才能尝试 Web LLM。撰写本文时,Web LLM 支持 Vicuna 和 LLaMa LLM。
第一次运行模型时需要一些时间来加载模型。因为第一次运行后缓存完成,后续运行速度会明显加快,并且开销最小。
Web LLM 的优缺点
让我们通过列举 Web LLM 的优点和限制来总结我们的讨论。
优点
除了探索 Python、WebAssembly 和其他技术栈的协同效应外,Web LLM 还具有以下优点:
-
在浏览器中运行 LLM 的主要优势是 隐私。因为这种隐私优先的设计完全消除了服务器端,我们不再需要担心数据的使用。由于 Web LLM 利用底层系统的 GPU 计算能力,我们也无需担心数据被恶意实体获取。
-
我们可以为日常活动构建个人 AI 助手。因此,Web LLM 项目提供了高度的 个性化。
-
Web LLM 的另一个优点是 成本降低。我们不再需要昂贵的 API 调用和推理服务器,Web LLM 使用底层系统的 GPU 和处理能力。因此,运行 Web LLM 的成本大大降低。
限制
以下是 Web LLM 的一些限制:
-
尽管 Web LLM 减轻了输入敏感信息的担忧,但它仍然容易受到浏览器攻击。
-
通过增加对多种语言模型和浏览器的支持,还有进一步改进的空间。目前,此功能仅在 Chrome Canary 和最新版本的 Chrome 中可用。扩展到更多支持的浏览器将非常有帮助。
-
由于浏览器运行的稳健性检查,使用 WebGPU 的 Web LLM 不具备 GPU 运行时的本地性能。您可以选择禁用运行稳健性检查的标志以提高性能。
结论
我们尝试了解 Web LLM 的工作原理。您可以尝试在浏览器中运行它,甚至可以 在本地部署。考虑在浏览器中尝试该模型,并检查它在您日常工作流程中的集成效果。如果您感兴趣,还可以查看 MLC-LLM 项目,它允许您在包括笔记本电脑和 iPhone 在内的任何设备上原生运行 LLM。
参考文献和进一步阅读
[1] WebGPU API,MDN Web Docs
[3] MLC-LLM
Bala Priya C 是来自印度的开发者和技术作家。她喜欢在数学、编程、数据科学和内容创作的交汇点工作。她的兴趣和专长包括 DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编程和喝咖啡!目前,她正在通过撰写教程、操作指南、观点文章等,学习并与开发者社区分享她的知识。
了解更多相关内容
数据科学家做什么?
原文:
www.kdnuggets.com/2021/12/what-does-a-data-scientist-do.html
评论
我们的三大课程推荐
1. Google 网络安全证书 - 快速开启网络安全职业生涯
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织 IT
你真的无法避免它,对吗?无论你看向哪里,它都会出现。你的 LinkedIn 动态、招聘市场、新闻推送、教育项目都在试图吸引你的注意(以及你的学费)。但数据科学到底是什么?它通常被描述得非常模糊,令人不甚满意。这个指南将尽量避免这些模糊之处,为你提供最直接、最清晰的答案,“数据科学是什么?”和“数据科学家做什么?”。
所以,数据科学家做什么?为回答这个问题,我们将带你了解在数据科学工作中的各个方面。
数据科学家的角色和责任
数据科学的作用是利用每家公司现在收集的大量数据,将其转化为可理解和有用的信息。这一数据转化过程是通过使用诸如机器学习(ML)、人工智能(AI)和统计分析等技术来实现的。所有这些都旨在解决现实世界的问题。现实世界通常指的是商业问题。这意味着公司使用数据科学来做出更合理的商业决策并获得更多的利润。
既然我们已经介绍了数据科学家的角色,现在是时候询问这在实践中意味着什么了。数据科学家做什么?一个直接的问题需要直接的回答。
数据科学家:
-
确定商业问题
-
收集数据
-
通过处理和清理数据来为分析做准备
-
存储数据
-
分析数据以发现趋势和模式
-
构建、训练和验证模型
-
提供洞察
数据科学职位名称
数据科学领域中包含所有技能的最一般的职位名称就是数据科学家。成为数据科学家包括所有上述的责任。然而,这并不是你在数据科学领域能拥有的唯一职位名称。
还有许多其他职位名称,这些职位依赖于资历、公司组织结构、规模等。最重要的是,这些职位名称取决于它们关注的数据科学领域。你可以将数据科学家视为数据科学的原始汤,所有其他职位名称都源自于此。
通常,数据科学中的职位可以分为两类:
-
数据提供者
-
数据用户
我们博客中有非常详细的信息,关于每个数据科学职位名称的帖子。使用该帖子查找每个职位的详细描述和所需技能。
数据提供者
当我们谈论数据提供者时,我们讨论的是专注于原始数据、数据基础设施、数据加载和数据库的工作。
本类别中的数据科学职位包括数据建模师、数据工程师、数据库管理员、数据架构师和软件工程师。他们以某种方式确保数据科学中另一类别的工作(数据用户)能够不间断地访问数据,这为数据用户构建的基础提供了支撑。
当然,所有这些数据提供者职位之间的目的各不相同。
数据建模师
例如,数据建模师创建概念性、逻辑性和物理性的数据库模型,并参与数据库实施。
数据工程师
数据工程师更关注数据基础设施、其开发和维护,包括数据仓储和数据的提取、转换和加载(ETL/ELT)。
查看我们关于数据工程师与数据科学家的帖子,了解数据科学家和数据工程师的相似之处和不同之处。
数据库管理员
数据库管理员在数据基础设施的基础上,确保数据和数据库的完整性和安全性。这包括授予和撤销对数据的访问权限、备份数据库、恢复数据等。
软件工程师
在上述职位提供的数据基础设施之上,是软件工程师。他们设计、开发、测试和维护软件,作为数据用户与底层数据和数据基础设施交互的接口。
数据架构师
数据架构师提供全局视角,并协调所有这些数据提供者。他们的工作是理解公司的流程,以便他们可以规划、实施和改进公司数据处理基础设施的架构。这意味着提供解决方案,说明数据如何在不同的入口点进入公司。数据以什么格式进入,使用何种软件进行处理(如果有的话),以及数据如何转换和加载到数据库或数据仓库中。数据如何被公司使用,直到数据成为公司的输出。
数据用户
数据用户利用现有数据和数据基础设施向各个股东提供信息。他们是数据提供者与决策者之间的桥梁,后者通常技术背景较少。
数据科学中的数据用户,除了数据科学家之外,还包括数据分析师、统计学家、BI 开发人员、业务分析师、量化分析师、市场科学家、机器学习工程师、研究科学家等。他们在公司中的目的各不相同。
数据分析师
例如,数据分析师专注于报告、常规分析和临时分析。他们使用数据并将其总结成报告格式。这使得技术水平较低的用户能够利用这些数据,了解公司业务的各个方面。数据分析师主要使用历史数据。
统计学家
统计学家与数据分析师类似,他们也分析数据。然而,他们更关注预测未来,而非解释过去。他们使用数据来预测将会发生什么,而不是已经发生的事情。为此,他们应用统计方法,如假设检验和概率。因此,统计学家与数据科学家也类似。区别在于,他们不像数据科学家那样构建模型,仅专注于数据科学中的统计部分。
BI 开发人员
BI 开发人员负责开发(设计、构建和维护)BI 工具中的仪表板,用于数据可视化和报告。他们在制作报告方面类似于数据分析师。然而,他们还具备一些工程技能,用于 ETL 数据和构建用户界面,就像数据工程师和软件工程师分别做的那样。
业务分析师
业务分析师专注于报告,类似于数据分析师。然而,他们通常专注于内部报告,而这并非数据分析师总是如此,以检测公司业务流程中的弱点并加以改进。
量化分析师
量化分析师通常是专注于金融数据的数据科学家。他们会分析这些数据并构建涉及各种金融市场的模型,如贷款、股票、债券、外汇等。他们的分析将用于决定交易策略、可行的投资和风险管理。
市场科学家
市场科学家是专注于一种数据类型的数据科学家。在这种情况下,是市场数据。像任何数据科学家一样,他们会分析这些数据,尝试寻找模式和趋势,以解释和预测客户行为,从而帮助解决市场营销和销售问题。
机器学习科学家
机器学习科学家是数据科学家的某种延伸。虽然数据科学家更关注模型的理论部分,数据工程师则将这些模型付诸实践。他们将原型模型部署到生产中。这涉及工程化的 AI 软件和算法,使机器学习模型在实践中发挥作用。
研究科学家
虽然机器学习工程师是这类数据科学家的实践者,但研究科学家则是理论家。研究科学家的工作是理解计算原理及由此产生的问题。为了破解这些难题,他们会改进或创造全新的算法和编程语言。
数据科学职业路径
在下图中,有一个关于你可能的data scientist career path的示例。这并不意味着这是一个单向的过程(它完全可以不是一个过程!)或者这些职位名称不能以不同的方式互换和移动。这只是一个概述,先看看它,然后我们将附上详细的解释。
教育作为起点
数据科学处于统计学、数学和计算机科学的交汇点,也涉及其他学科。因此,至少在这些领域接受过教育是一个良好的起点。
然而,我们不能编写适用于每个候选人和职位广告的指南。一般的经验法则是:获得至少一个本科(BS)学位,以便在数据科学就业市场中拥有一个良好的起点。然后结合工作经验。良好的教育和经验平衡始终是成功的配方。当然,获得更多教育和更多经验总能让你处于更好的位置,这一点并不令人惊讶。让我们看看教育/学位要求是什么:
-
本科/硕士学位
-
博士学位
-
训练营
本科/硕士学位
如果你想在数据科学领域建立职业,最好拥有至少一个学士学位。拥有本科或硕士学位对于获得数据科学中的任何工作是有益的,大多数职位广告中都要求这种教育水平。你的学位应在相关的定量领域,如统计学、数学、计算机科学、工程、信息技术、经济学、编程等。当然,这取决于职位名称和资历水平。
此外,根据工作,拥有不同领域的学位可能会带来好处。也许是人文学科,如哲学、社会学、心理学。如果你想成为一个试图理解和预测人类行为的市场营销科学家,这些学科可能会很有用(有时甚至是必需的!)。研究科学家有时可以在计算原理方面工作,这些原理可能与伦理和人类行为有很深的联系。
根据工作描述和职位 seniority,拥有金融、商业或类似学位也是有益的。也许你处理的是金融数据,并且你在层级结构中处于较高的位置,那么除了技术技能外,领导力、商业智慧和教育背景也变得很重要。
虽然学士学位往往是招聘广告中要求的最低教育水平,但有时它并不是唯一的要求。
博士学位
拥有博士学位不会影响你获得上述任何职位的机会。更多的教育总是更好的。
然而,有时候这个水平不仅是有利的,而是必需的。例如,如果你想从事机器学习工程师或其他数学密集型工作,获得博士学位是个好主意。
此外,研究科学家需要在计算机科学理论、原理和研究方法上有扎实的基础。这就是为什么这个职位通常需要博士学位的原因。
训练营
尽管招聘广告中通常要求正式教育背景,但这并不意味着它总是必要的。如果你在数据科学的某些方面有经验,但没有正式的教育背景,这并不意味着你不能作为数据科学家工作。一般来说,职位越高,你的教育背景就越不重要。重要的是你在之前的工作中做了什么,你如何做到的,以及你可以带到新工作的技能。
这里有一个进退两难的问题。你需要工作来获得经验和提升技能。如果你没有经验和技术技能,你就无法找到工作。幸运的是,有一个解决方案:训练营。
这些是获得数据科学相关技能的良好起点。它们不要求技术类的学士或硕士学位。这对任何没有正规教育背景但想要开始数据科学职业的人来说是很好的选择。它们也适合那些通过实践进入数据科学领域的人。这样,他们可以获得一个更加结构化和理论化的背景,来补充他们已经在实践中所做的工作或提升他们已经存在的技能。
数据科学家的工作经验
说到工作经验,开始获得工作经验总是最难的。一旦你开始工作并在工作中学习,换工作和拓宽专业领域就变得更容易了。建立一个坚实的基础是很重要的。在数据科学领域,人们通常从数据分析师做起。
从那时起,他们可以选择我们之前讨论过的两个方向:作为数据提供者或数据用户。关于上图的一个重要事项是,随着你从左到右移动,职位的资历水平上升,你的薪水也会上升。稍后我们会讨论薪资问题。首先,让我们举几个例子看看你的职业生涯可能是什么样的。
假设你从数据分析师开始。经过几年处理数据并找到自己关于数据库的解决方法后,你理解了数据库原理,因此你决定转型成为数据建模师或数据库管理员。在这些职位中的工作能让你获得更多经验,你参与了几个关于数据基础设施的项目。然后你获得晋升,例如成为一名数据架构师。
或者,也许你从统计师开始。经过几年在公司工作后,你决定是时候改变一下了。但你非常喜欢你现在所在的公司。而且你去年参与的几个市场营销项目也让你非常喜欢。于是,你转到市场营销部门,只处理市场营销数据,成为一名市场营销科学家。然后,又到了改变的时候;你对机器学习产生了兴趣,成为了一名数据科学家。几年后,你希望回到学校获得博士学位。你辞去了工作,专注于攻读博士学位。这与你丰富的工作经验相结合,让你意识到你想以不同的、也许是理论的方式为数据科学做贡献。于是,你成为了一名研究科学家。
这些只是你职业生涯可能的几种例子。任何与实际人物及其职业生涯的相似之处纯属巧合。你的职业生涯将取决于你的背景、能力、兴趣、你在(或其他)公司的机会、公司的规模、组织结构、灵活性,以及,没错,还有一点运气。
你选择的任何方式从长远来看都可能对你有利。记住,这些工作都是数据科学的一部分,因此在数据科学的某个领域拥有更多的经验,只会对你有利,尤其是当你想在数据科学领域中尝试一些新的事物时。
当然,要获得经验,你首先需要一份工作。要获得工作,你必须经历常常乏味的面试过程。为了使这个过程尽可能无痛,你需要做好准备。虽然没有什么能比得上实际面试的经验,但通过我们的 编码 和 非编码 面试问题,你将会有一个良好的开始。
数据科学所需的技术技能
在数据科学领域,以下技能是必不可少的:
-
编码使用 SQL、R、Python、Java、C 系列等语言
-
处理数据,包括收集、清洗和分析数据
-
数据库设计用于了解如何获取和存储数据
-
统计分析用于从数据中获取洞察
-
数学在数据分析和指标计算中使用
-
建模用于设计和构建模型
-
机器学习与人工智能用于部署模型
查看我们关于最受欢迎的数据科学技能的文章,了解作为数据科学家必须具备的最受欢迎的数据科学技术技能和业务技能。
数据科学薪资
在选择职业时,除了兴趣和个人情况,薪资也是一个重要因素。
根据 Jobted 引用的美国劳工统计局(BLS)的数据,美国的年平均薪资约为 53.5k。
那么数据科学领域的职位与这些相比如何呢?例如,Glassdoor 数据显示数据分析师的平均年薪为 $70k。即使这是数据科学中(平均而言)薪资最低的职位,它的薪资仍比美国平均水平高出 $15k。这高出 30%!
作为数据科学家,这是一份薪资最高的职位之一,平均年薪可达 $139k,是平均薪资的 1.5 倍以上。即使是最低报告薪资也为美国平均水平的两倍,而薪资最高可达 $171k。而这还不是数据科学中薪资最高的职位。
教育、知识和技能确实能带来回报,如果你在考虑是否投资于职业发展或转行。以下是职位概况和以美元计的平均薪资。
数据分析师 | $70k |
---|---|
数据库管理员 | $84k |
数据建模师 | $94k |
软件工程师 | $108k |
数据工程师 | $113k |
数据架构师 | $119k |
统计学家 | $89k |
商业智能(BI)开发者 | $92k |
营销科学家 | $94k |
商业分析师 | $77k |
定量分析师 | $112k |
数据科学家 | $139k |
研究科学家 | $142k |
机器学习工程师 | $189k |
根据你工作的公司,你可以期待这些基本薪资会通过现金和股票奖金、健康和人寿保险等不同的福利增加。
你可以在我们的博客文章之一中找到有关数据科学薪资的更详细信息 - 数据科学家赚多少钱?。
数据科学的工作时间
通常,需求量高并获得相当可观的薪资是有代价的。数据科学并不是一帆风顺的。虽然数据科学家通常每周工作 40 小时,但有时也需要加班。再说了,这取决于公司、组织、行业以及其他众多因素。但大多数情况下,这与工作描述及其周期性特征有关,这意味着你会在完全放松和轻松的时期与需要每周工作 50-60 小时的高峰期之间进行平衡。
这是因为数据科学任务通常涉及项目,这意味着在严格的截止日期内解决问题。随着截止日期的临近,工作量通常会增加,这时数据科学家不得不加班。
什么造就了一个伟大的数据科学家?
拥有相关的教育和技术技能当然是成为数据科学家的前提。要完成这第一步,请参考我们在讨论如何从零开始成为数据科学家时提供的有用建议。但这是否能让你成为一个出色的数据科学家呢?未必。
数据科学的关键在于解决现实生活中的问题。你可以拥有世界上所有的技术技能,但如果你不能运用这些出色的技能来提出解决方案,那又有什么意义呢?或者你提出了一个解决方案,但没有人理解和使用它。你真的解决了问题吗?没有,你并没有。
技术技能用于解决问题,而磨练这些技能的最佳方法之一是创建自己的数据分析项目。然而,你还需要软技能。提出解决方案有点像夹在数据科学家工作中的其他两个重要阶段之间。
-
理解问题
-
提出解决方案(通过技术技能)
-
提出解决方案
要成为一名出色的数据科学家,你需要:
-
要幼稚
-
沟通良好
-
擅长团队合作
-
对跨学科性感到自如
保持幼稚
我们不是说要你成为一个被宠坏的孩子。保持幼稚意味着保持好奇心、提问、渴望学习和富有玩心。
你需要保持好奇心,接受自己并不理解所有事物的事实,并愿意学习。为了做到这一点,你必须像孩子一样:不断提问直到得到满意的答案。你需要成为那个“为什么的人”。只有这样,你才能理解业务问题、不同人的需求、部门的需求以及客户的需求。一旦你理解了这些,运用你的技术技能就会变成一种技术性工作。
当你提出解决方案时,你需要富有创意和想象力地展示你的、可能非常复杂的解决方案,以便他人能够理解并使用它。
沟通
沟通是第一项技能的自然延伸。你需要高效沟通,提出正确的问题,以易于理解的方式呈现你的想法和解决方案。当人们感受到你愿意接受建议、倾听他们并尊重他们时,他们会更加投入项目。他们会愿意更详细地解释他们的(业务)需求和问题,这使你更容易理解你的职责要求。
当然,如果你无法解释解决方案的工作原理、如何使用户受益以及他们如何使用它,那么提出一个卓越的数据科学解决方案是没有意义的。因此,在展示你的解决方案时,沟通是必要的。
团队合作
不论幸运与否,你将会与真实的人一起工作,解决他们的实际问题。你不会仅仅在你的部门内部工作,也不会只和你部门的人合作。你会与来自不同背景、拥有不同技术技能、专业领域和经验的人合作。要成为一名成功的数据科学家,你必须理解他人,对他们有耐心,具备灵活性,并适应不同的情况和方法。
创造良好的工作氛围对公司、团队以及你自己都大有裨益。可靠、负责任,并愿意帮助同事的态度总是受到欢迎的。
跨学科能力
与(不同)团队中的人员合作意味着你将与不同水平和领域的专家一起工作。这是一个学习的机会。这时候跨学科能力就派上用场了。
一位对数据科学严格范围之外一无所知的数据科学家无法成为优秀的数据科学家。跨学科能力会让你更快地理解和解决问题。你会更清晰地呈现解决方案。了解业务、营销、报告、法律或你所在行业的任何其他方面,都会使你成为非常受欢迎的雇员。能够在技术部门和非技术部门之间架起桥梁的专家是稀缺且非常有价值的。
结论
数据科学是当今就业市场上最热门的领域之一。对数据科学家的需求很高,但竞争也非常激烈。
这意味着成为一名数据科学家并不容易。然而,这也并非不可能。本指南是帮助你决定数据科学是否适合你的其中一个工具。总的来说,以下是获取数据科学工作并取得成功的步骤:
-
获得计算机科学或其他定量领域的教育背景。
-
提升你的技术技能,例如编程、数据分析、数据库设计和模型构建。
-
认真准备工作面试,这意味着回答尽可能多的技术和非技术问题,研究公司及你申请的职位。
-
提升你的软技能。
相关:
主题扩展
我从使用 ChatGPT 进行数据科学中学到的
原文:
www.kdnuggets.com/what-i-learned-from-using-chatgpt-for-data-science
图片由作者提供
我从使用 ChatGPT 中学到的唯一一课是,它在数据科学中非常有帮助,但你必须仔细审查它输出的所有内容。它在某些任务中表现得非常出色,可以快速准确地完成这些任务。而在其他一些任务中,它表现得足够好,但你需要多次提示。而我发现 ChatGPT 对某些任务确实很糟糕。
我们的前 3 名课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的 IT 组织
很棒:自动化数据探索
你可以将数据集附加到 ChatGPT 消息中,通过给出几个简单的指令,ChatGPT 可以为你探索数据。
例如,我可以从 这个数据项目 获取数据集。我给出的指令是:
“使用附加数据进行描述性统计分析。包括以下内容:
-
总结基本统计数据(均值、中位数、标准差等)。
-
识别缺失值并建议处理策略。”
它返回的总结看起来是这样的。它对每个变量进行相同的计算。
年龄:
-
平均值:28.79 年
-
标准差:6.94 年
-
范围:18 到 50 年
它还识别出了数据集中没有缺失值。
如果你还需要这些计算的 Python 代码,你可以提示它编写这些代码。
要加载数据集,使用这段代码。
aerofit_data = pd.read_csv(file_path)
对于基本统计数据,它提供了这个。
basic_stats = aerofit_data.describe()
你可以用这段代码检查缺失值。
missing_values = aerofit_data.isnull().sum()
很棒:创建可视化
此外,我可以要求 ChatGPT 可视化关键变量的分布,并检测潜在的异常值和异常情况。
它为关键变量创建了直方图和箱线图:年龄、收入和里程。它检测到收入和里程分布中的潜在异常值。
创建者:作者/ChatGPT
创建者:作者/ChatGPT
它还解释了这些可视化。因此,它注意到收入分布是右偏的,这表明大多数客户的收入处于较低的范围,而较少的客户收入显著较高。箱形图显示高端有一些离群值。
由作者/ChatGPT 创建
由作者/ChatGPT 创建
相同的解释适用于 Miles 分布:右偏和高端的离群值。
考虑到数据的性质,它建议这些离群值不一定是错误的,而是代表了特定的客户群体。对于偏斜的分布,它建议使用变换(例如,对数变换)来规范化数据。
当然,你也可以让它为这些可视化创建 Python 代码。
很好:验证数据是否适用于特定的统计测试
我可以使用相同的数据,并询问 ChatGPT 它是否适用于逻辑回归。如果不适用,我该如何转换它以使其合适?
它回复说我的数据主要适用于连续数据的描述性和推断性分析。
这些是对数据进行转换以适应逻辑回归的建议方法。
创建二元结果: 通过根据“使用”变量的中位数将客户分类为“高使用”或“低使用”来创建二元结果。此外,二元结果还可以是“跑步机购买”与“未购买跑步机”。
检查多重共线性: 使用相关矩阵或方差膨胀因子(VIF)检查多重共线性。如果存在多重共线性,可以删除或合并相关变量。
特征缩放: 尽管逻辑回归模型拟合不需要特征缩放,但对于收敛来说,特征缩放可能是有益的。这尤其适用于具有显著不同尺度的特征。
解决非线性问题: 对于不符合线性假设的变量,可以使用变换,如对数或平方根。
样本大小: 数据集必须足够大,以匹配预测变量的数量。
数据预处理: 处理离群值和分类变量(通过 独热编码或标签编码)是建议的。此外,还建议处理缺失值,但这对我的数据不适用,因为没有缺失值。
好:自动化部分或整个数据科学项目
ChatGPT 实际上在数据科学项目的每个阶段都可以提供帮助。你可以提示它编写网页抓取代码。你可以指示它探索和准备数据,以便用于机器学习算法。它还可以为选择合适的算法、数据集拆分、A/B 测试和性能提升算法提供代码。最后,你还可以让 ChatGPT 为模型部署编写代码。
尽管 ChatGPT 可以做到这些,但你可能不会立即得到一个完全符合你需求的代码。所以,你必须理解你想要实现什么,并检查代码。可能需要提示 ChatGPT 进行代码修正,并提供更多更改说明。
好:代码转换和学习
ChatGPT 可以帮助那些仍在学习新编程语言的用户。假设你是一个 SQL 高手,解决 这个面试问题 对你来说没问题。然而,你希望将 Python 添加到你的技能中。ChatGPT 可以帮助你。你可以复制 SQL 代码并要求 ChatGPT 将其转换为 Python。
所以,SQL 代码是这样的。
SELECT
company,
profit
FROM
(
SELECT
*,
rank() OVER (
ORDER BY
profit DESC
) as rank
FROM
(
SELECT
company,
sum(profits) AS profit
FROM
forbes_global_2010_2014
GROUP BY
company
) sq
) sq2
WHERE
rank <= 3;
ChatGPT 根据上述 SQL 代码编写了 Python 代码,但它运行不正确。所以我对 ChatGPT 编写错误的代码进行批评。我要求它重试,因为输出与 SQL 代码不一样。它重试后返回了正确的结果。
import pandas as pd
# Assuming 'forbes_global_2010_2014' is a pandas DataFrame with columns 'company' and 'profits'
# Since we don't have the actual data, this code assumes that the DataFrame is already loaded
# Step 1: Group by company and sum the profits
company_profits_sum = forbes_global_2010_2014.groupby('company')['profits'].sum().reset_index()
# Step 2: Rank the companies by profit in descending order
company_profits_sum['rank'] = company_profits_sum['profits'].rank(ascending=False, method='max')
# Step 3: Filter the top 3 companies
top_companies = company_profits_sum[company_profits_sum['rank'] <= 3]
# Final selection of columns
result = top_companies[['company', 'profits']].sort_values('profits', ascending=False)
result # This will display the top 3 companies by profit
如你所见,你得到了一段带有每个代码块注释的漂亮代码。为了提高你的学习,你可以要求它解释这些代码。这样,你将更深入地了解每行代码的作用及其原理。
糟糕:统计和数学计算
当我说糟糕时,我是指真的很糟糕!它到了那种使用正确的公式并插入正确的值但却搞砸了不那么复杂的计算的程度。
看这个。我让它解决这个问题:“假设你掷一个公平的六面骰子 10 次。掷出两个 1、三个 2、一个 3、零个 4、三个 5 和一个 6 的概率是多少?”
它以这种方式计算概率。
它在计算阶乘时搞砸了。而且它很有风格地搞砸了!完全错误地说 2! = 12。其实不对,2! = 2。怎么会搞砸这样一个简单的计算,例如 2x1 = 2?这真的很可笑!
更搞笑的是,有一次 3! = 36,而第二次 3! = 6。值得称赞的是,它至少有一次是正确的。
当我要求它纠正计算而不做进一步解释时,它重新计算并得出了 0.0001389 的概率。我简直不敢相信自己的眼睛!它可以使用完全相同的公式和数值,却得出一个不同的且仍然错误的结果!
我再次要求它纠正计算,最终返回了正确的结果:0.0008336。三次是幸运的!
不可否认,这些错误是 ChatGPT 3.5 造成的。我问了 ChatGPT 4 同样的问题,它第一次尝试时就给出了正确的计算结果。你也可以使用一些数学插件以确保安全。
结论
从这一切中得到的主要教训是,ChatGPT 是一个糟糕的主宰但非常好的仆人。它在编写代码、调试、分析和可视化数据方面很有帮助。然而,永远不要完全信任它,也不要不加审查地采纳它写的内容。
检查它写的代码,检查计算。毕竟你是数据科学家,而 ChatGPT 不是!你可能第一次尝试时无法获得理想的结果。但给它更精确的指示并尝试几次,可能会让你达到预期的结果。
内特·罗西迪 是一名数据科学家及产品策略专家。他还是一名兼职教授,教授分析学,并且是 StrataScratch 的创始人,该平台帮助数据科学家通过顶级公司的真实面试问题为面试做准备。内特撰写有关职业市场最新趋势的文章,提供面试建议,分享数据科学项目,并涵盖所有 SQL 内容。
了解更多相关话题
什么是数据库?你需要了解的一切
原文:
www.kdnuggets.com/what-is-a-database-everything-you-need-to-know
彼得·桑德加德曾说,信息是 21 世纪的石油,分析是内燃机。如今,很难不同意他的观点。
就像储存油的大容量罐一样,你需要数据库来存储信息。由于信息量的增加,数据库自首次出现以来已经发展了很多。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持你所在的组织进行 IT 工作
在这篇文章中,我们将通过回答一些基本问题来探索数据库。然后,我们将通过将其分为有意义的类别来发现当前流行的数据库。系好安全带,我们开始吧!
所有数据库的列表
让我们从对各种数据库环境的总体概述开始。在这一部分,我们将概述适用于不同目的和情况的许多数据库,分为五个不同的类别:
-
轻量级数据库
-
企业级关系数据库
-
NoSQL 数据库
-
NewSQL 和分布式数据库
-
专业化和利基数据库
让我们开始了解轻量级数据库。
轻量级数据库
作者提供的图片
在这一部分,我们将探讨轻量级数据库,它们是小规模应用程序的关键元素。
它们以高效和简单著称。这些数据库非常适合那些不需要复杂、高级数据库系统的任务。
MySQL
MySQL 在网站中尤其流行。它快速且功能强大,拥有一个庞大的社区支持,帮助非常多。然而,当你的应用程序变大时,让 MySQL 处理所有额外的工作可能会很具挑战性。在复杂的数据分析方面,它可能不如其他选择。
SQLite
这种简单且小型的数据库非常适合小程序或应用。由于它只是一个文件,移动起来很方便。然而,如果很多人同时使用应用,SQLite 可能会面临困难。对于真正大型或复杂的应用,有更好的选择。
PostgreSQL
PostgreSQL是免费的,并且有许多不错的功能。它非常适合处理复杂数据并对这些数据进行复杂操作。然而,如果你的应用程序需要持续写入大量数据,PostgreSQL 可能会变慢。
MariaDB
MariaDB提高了MySQL的性能和安全性。由于 MariaDB 具有与 MySQL 相似的特性,如果你了解 MySQL,你可以快速过渡。然而,它的普及程度稍逊于 MySQL。
企业级关系数据库
图片来源:作者
企业级关系数据库适合大型和复杂的应用程序。它们提供了增强的安全性和广泛的数据管理,这是企业的业务需求。
Microsoft SQL Server
如果你使用其他微软产品(如.NET)构建应用程序,Microsoft SQL Server是一个不错的选择。它以极高的安全性和可靠性而闻名。缺点是它主要与 Windows 兼容,并且可能很昂贵。
Oracle 数据库
Oracle以极高的可靠性和稳健性而闻名。它是大型公司的首选。它具有先进的安全性,并能很好地处理大量数据。然而,Oracle 价格昂贵,使用复杂规则多且学习曲线陡峭。
IBM Db2
IBM DB2是为大型企业设计的。它擅长数据分析和从数据中学习。它可靠且能处理大量工作。但它的管理很棘手,通常更适合大型组织或特殊的业务需求。
NoSQL 数据库
图片来源:作者
NoSQL 数据库提供了灵活性和可扩展性。这个领域涵盖了适应当前动态数据需求的非结构化和半结构化数据数据库。
MongoDB
这个灵活的数据库不需要固定结构,非常适合管理多种数据类型。它可以扩展以处理更多工作,并具有强大的数据查找功能。
但对于需要复杂数据连接的任务,它可能不如某些传统数据库。
Cassandra
Cassandra被设计为处理大量数据分布在多台计算机上。它非常可扩展且可靠。但规划如何在 Cassandra 中存储数据可能很棘手,如果你习惯了传统数据库,它学习起来更困难。
CouchDB
CouchDB适用于需要简单、可扩展的数据库的 Web 应用程序,该数据库使用流行的数据格式 JSON。它具有出色的 Web 界面,并能很好地在不同地点复制数据。然而,它可能不如其他数据库适合非常复杂的搜索或大量数据。
DynamoDB
DynamoDB是亚马逊云服务的一部分。它擅长调整变化的工作负载,并能处理大量流量。但它的数据搜索和组织选项有限,因此可能会很昂贵。
Neo4j
Neo4j 非常适合处理连接数据,如社交网络或推荐系统。它的特别之处在于可以很好地处理数据之间的复杂关系。但它的应用较为小众,设置起来可能较为困难。
NewSQL 和分布式数据库
图片由作者提供
它们结合了传统数据库的稳定性与 NoSQL 系统的可扩展性;让我们开始探索它们吧。
HIVE/Hadoop
Hive,作为 Hadoop 生态系统的一部分,非常适合使用简单查询处理大数据集。它设计用于处理大数据,并且在复杂数据分析中表现良好。然而,Hive 在处理实时问题时可能会较慢,并且可能不是快速互动应用的最佳选择。
Apache Kafka
Apache Kafka 主要是一个流处理平台,非常适合处理和分析实时数据流。它具有很高的可扩展性和可靠性,适合管理大量数据流。然而,Kafka 更像是数据处理工具,而不是传统数据库,因此设置复杂,需要特定的专业知识来有效管理。
Greenplum
Greenplum 非常适合大数据分析。它可以扩展以处理更多数据,并且与机器学习工具配合良好。然而,设置和管理起来可能较为复杂,并且需要大量计算资源。
CockroachDB
它在多台计算机上也能保持强大和一致。它可以轻松扩展,处理类似传统数据库的事务。然而,其设计复杂,可能对较小的应用来说过于庞大。
Amazon Aurora
Amazon Aurora 是亚马逊云的一部分。它运行快速,并且兼容 MySQL 和 PostgreSQL。它为云设计,可靠且能够处理大量工作。然而,随着使用增多可能会变得昂贵,并且主要仅限于亚马逊云。
Amazon Aurora 是亚马逊云的一部分。它运行快速,并且兼容 MySQL 和 PostgreSQL。它为云设计,可靠且能够处理大量工作。然而,随着使用增多可能会变得昂贵,并且主要仅限于亚马逊云。
专门化和小众数据库
图片由作者提供
最后,我们探讨专门化和小众数据库。这些数据库针对特定数据类型进行定制,并提供常规数据库可能没有的功能。从实时分析到复杂数据建模,本节涵盖了定制化技术。
Elasticsearch
Elasticsearch 非常适合文本搜索和分析。它可以处理大量数据并且具有良好的扩展性。然而,在大型设置中可能会难以管理,通常也不是主要数据库。
RethinkDB
RethinkDB 设计用于实时 Web 应用。它允许灵活的数据组织和简单的更新。然而,它的发展速度减缓,因此相比其他数据库较为落后,支持也可能有限。
ArangoDB
ArangoDB 支持不同类型的数据,如文档和图形,并且在各种需求下表现良好。它性能优越,但知名度可能较低,这可能意味着学习过程较为困难,社区支持也较少。
InfluxDB
InfluxDB 针对随时间变化的数据(如 IoT 数据)进行了优化。它非常适合实时分析和监控。然而,它专门用于时间序列数据,因此并不适合所有数据库需求。
Redis
Redis 由于将数据存储在内存中,因此非常快速,这使其在快速数据访问和实时应用程序中表现出色。然而,数据量受限于内存大小,并且确保数据长期安全可能会很棘手。
如果你想发现有关数据库的面试问题,请查看这个 数据库面试问题。
结论
我们刚刚通过展示它们的优缺点,并将它们分成类别,深入探索了数据库世界的每一个角落。
Zig Ziglar 曾说过:“重复是学习之母。”他的这句话对于这些知识也适用。因此,如果你想巩固理解,请记得进行重复练习。
Nate Rosidi 是一名数据科学家和产品战略专家。他还是一名兼职教授,教授分析学,并且是 StrataScratch 的创始人,这是一个帮助数据科学家准备顶级公司真实面试问题的平台。Nate 关注职业市场的最新趋势,提供面试建议,分享数据科学项目,并涵盖 SQL 的所有内容。
更多相关话题
什么是数据血统,为什么重要?
原文:
www.kdnuggets.com/what-is-data-lineage-and-why-does-it-matter
图片由 storyset 提供,来自 Freepik
在任何数据管道中,从源头获取的数据通常会经历多次转化,以至于从目的地获得的数据与实际从源头获取的数据差异很大。数据血统提供了一种全面的方法来绘制数据在系统中的流动路径——从源头到目的地——以及其在过程中经历的转化。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升您的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您的组织的 IT
在这篇文章中,我们将了解数据血统及其重要性。我们还将看到数据血统如何促进更好的数据管理,并介绍一些您可以用来处理数据血统的工具和平台。
让我们开始吧!
什么是数据血统?
数据血统是指跟踪和可视化数据在数据管道或系统中经过各个阶段的流动和转化。它提供了对数据在组织数据管道中起源、移动和转化的详细理解,使数据专业人员能够追踪数据从源头到目的地的路径。
对数据生命周期的这种全面理解对于那些旨在提升数据质量、确保合规性等的组织非常有帮助。
数据血统的关键组成部分
现在让我们探讨数据血统中需要考虑的关键组成部分:
图片由作者提供
-
源系统:该组件关注数据的初始来源,如数据库、日志文件、传感器、应用程序和其他外部来源。
-
元数据:捕捉与数据相关的元数据非常重要,因为它包括数据类型、格式以及对数据应用的任何业务规则或约束的详细信息。
-
数据移动和转换:跟踪 ETL 过程有助于理解数据如何从源系统提取、经历多样的转换并加载到目标系统。
-
目的地:数据血缘还应跟踪数据的各种中间和最终目的地,包括数据库、数据仓库、数据湖等。它还包括参与信息处理和存储的其他存储系统。最终目的地通常是存储处理数据以供分析或报告的地方。
本质上,数据血缘提供了数据流的清晰全面视图,帮助组织理解依赖关系和联系。因为数据血缘不仅仅提供数据流的快照,它还使组织能够对数据管理和利用做出明智的决策。
数据血缘的重要性
现在我们知道了数据血缘是什么,让我们继续学习它的重要性和原因。
数据质量和完整性
数据血缘通过提供数据旅程的透明视图,有助于保持数据质量。这种透明度确保数据保持准确、可信,并与业务目标一致。
此外,数据血缘还通过血缘追踪来帮助缓解数据质量问题。通过跟踪数据(及其相关元数据)的流动,组织可以快速识别并解决数据质量问题。
监管合规
数据血缘通过提供数据移动、转换和存储的全面记录,帮助组织满足监管要求。清晰地了解数据从源头到目的地的整个旅程及其转换过程,数据血缘作为确保遵守法律和行业特定规定的强有力机制。
故障排除和调试
数据血缘还帮助高效识别和解决数据问题。它通过提供识别故障点或不一致性的指南,简化了故障排除过程。这加速了数据相关问题的解决,减少了停机时间和操作中断。
数据血缘的应用
数据血缘还便于更容易的治理和提高整体效率等其他优势。
影响分析
数据血缘通过提供对数据源、结构或流程变更如何影响整个系统的清晰视图,有助于影响分析。这种理解在实施任何修改之前非常有帮助,以避免意外后果。
数据血缘还在做出明智决策和管理风险方面发挥作用:对数据如何被转换和使用有全面了解,决策者可以对变更、更新或实施做出明智的选择。这也确保潜在风险在对组织产生不利影响之前被识别和缓解。
审计和治理
数据治理依赖于透明度和问责制。数据血缘作为实施治理政策的基础工具,确保数据按照既定标准、安全协议和合规要求进行处理。
在审计过程中,监管者和内部审计员常常寻求对数据处理实践的洞察。数据血缘提供了数据移动、变换和存储的详细记录,促进了顺利审计,并证明了遵守监管要求。
更高效的运营
通过可视化数据流,组织可以识别数据工作流程中的冗余过程、瓶颈或低效之处。因此,数据血缘有助于消除不必要的步骤,优化数据管理的整体效率。
因为数据血缘提供了对数据流的全面而更好的理解:从数据提取到消费,它还指导工作流程优化,以减少处理时间,优化资源利用等。
总之,数据血缘的应用超越了其作为跟踪机制的角色。它作为组织评估变化影响、维持治理标准和优化运营效率的战略工具。
数据血缘工具和平台
正如你可能猜到的,数据血缘可以从一定程度的自动化中受益。由于自动化工具可以持续监控数据流动和变换,提供数据血缘的实时更新,它确保信息始终是最新的,并反映最新的变化。
数据血缘领域的一些显著工具包括:
-
Collibra:包括强大的数据血缘功能,用于可视化和理解数据的端到端旅程。
-
Informatica Axon:作为 Informatica 平台的一部分,Axon 提供数据治理和元数据管理。
-
IBM InfoSphere Information Governance Catalog:一个管理元数据并在复杂企业环境中提供端到端数据血缘跟踪的工具。
-
Apache Atlas:一个开源工具,提供全面的元数据管理和数据血缘能力,常用于大数据生态系统中。
-
Erwin Data Intelligence (DI):提供对数据资产的全面视图,包括数据血缘,以支持数据治理和合规工作。
总结
在这篇文章中,我们回顾了数据血缘及其在确保数据质量、合规要求等方面的重要性。此外,我们讨论了追踪数据血缘如何帮助进行影响分析和优化系统效率。
最后,我们介绍了一些可以用来跟踪数据血缘的工具。希望你觉得这篇文章对你有帮助!
Bala Priya C**** 是一位来自印度的开发者和技术作家。她喜欢在数学、编程、数据科学和内容创作的交汇点上工作。她的兴趣和专长包括 DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编码和喝咖啡!目前,她正在学习并与开发者社区分享她的知识,通过撰写教程、操作指南、观点文章等方式。Bala 还制作了引人入胜的资源概述和编码教程。
更多相关主题
数据科学到底是什么?
评论
请看我最简洁的尝试:
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持您组织的 IT 需求
数据科学是使数据变得有用的学科。
随时可以离开,或者留下来了解它的三个子领域。
这个术语没有人真正定义
如果你探索一下数据科学这一术语的早期历史,你会发现两个主题正在汇聚。让我为你稍作改述,供你娱乐:
-
大数据(更大的数据)意味着更多的计算机调整。
-
统计学家 无法从纸袋中脱身。
就这样,数据科学诞生了。我第一次听到的工作定义是“数据科学家是一个统计学家,但能编码。”对此我有很多看法,稍后会详细讲述,但首先,我们不妨看看数据科学本身?
Twitter 定义 约 2014 年。
我喜欢 2003 年数据科学杂志的发布方式,它直接聚焦于最狭窄的范围:“我们所说的‘数据科学’几乎指的是与数据有关的所有事物。” 所以……一切都包括在内?很难想到什么是不涉及信息的。(我应该停止思考这个问题,以免我的脑袋爆炸。)
从那时起,我们见证了无数的意见,从康威广为流传的维恩图(见下)到梅森和威金斯的经典帖子。
Drew Conway 对数据科学的定义。我的个人喜好更倾向于 Wikipedia 上的定义。
Wikipedia 有一个非常接近我教给学生的定义:
数据科学是一个‘统一统计学、数据分析、机器学习及其相关方法’的概念,目的是‘通过数据理解和分析实际现象’。
这有点复杂,所以让我看看是否可以简短明了:
“数据科学是使数据有用的学科。”
你现在可能在想,“不错的尝试,Cassie。很可爱,但这是一种极其有损的简化。‘有用’这个词如何能涵盖所有那些行话呢?”
好吧,我们用图片来争论一下吧。
这是为你准备的数据科学地图,完全忠于 Wikipedia 的定义。
这些东西是什么,你如何知道自己在地图上的位置?
如果你打算按 标准工具包 来划分,慢点。统计学家和机器学习工程师之间的区别并不是一个使用 R 另一个使用 Python。SQL 与 R 与 Python 的分类方法是有诸多不便之处的,其中之一就是软件会不断进化。(最近,你甚至可以在 SQL 中进行 ML)。你难道不希望有一个能持续有效的分类吗?事实上,干脆不看这一整段话。
也许更糟糕的是初学者最喜欢的空间划分方式。没错,你猜对了:按 算法 划分(惊讶吧!这就是大学课程的结构方式)。拜托,不要通过直方图与 t 检验与神经网络来进行分类。坦率地说,如果你聪明并且有一个观点,你可以用相同的算法处理数据科学的任何部分。它可能看起来像弗兰肯斯坦的怪物,但我向你保证,它可以被迫按你的要求行事。
剧情发展够多了!这是我提出的分类法:
无-一-多
这到底是什么?当然是决策!(在 不完全信息 下。当所有你需要的事实都对你可见时,你可以使用描述性分析来做出尽可能多的决策。只需查看事实,你就完成了。)
正是通过我们的行动——我们的决策——我们影响了周围的世界。
我曾承诺过我们将讨论如何使数据有用。对我来说,有用的概念与影响现实世界的行动紧密相关。如果我相信圣诞老人,这并不特别重要,除非它可能以某种方式影响我的行为。然后,根据这种行为的潜在后果,它可能会变得非常重要。正是通过我们的行动——我们的决策——我们影响了周围的世界(并邀请它反过来影响我们)。
所以这是为你准备的新决策导向图,包含了三种主要的方法来使你的数据有用。
数据挖掘
如果你还不知道你想做出什么决策,你能做的最好事情就是去寻找灵感。这被称为数据挖掘、分析、描述性分析、探索性数据分析(EDA)或知识发现(KD),具体取决于你在易受影响的时期与哪个圈子交往。
分析的黄金法则:只对你能看到的内容得出结论。
除非你知道如何框定你的决策,否则从这里开始。好消息是,这个比较简单。把你的数据集看作是在暗房里找到的一堆底片。数据挖掘就是快速操作设备,尽可能快地显现所有图像,以便查看是否有任何启发性的内容。就像处理照片一样,记住不要过于认真地对待你所看到的东西。你没有拍这些照片,所以你不了解屏幕外的内容。数据挖掘的黄金法则是:坚持在这里存在的内容。 只对你能看到的内容得出结论,绝不要对你看不到的内容得出结论(对于那你需要统计学和更多专业知识)。
除此之外,你没有做错的余地。速度是关键,所以开始练习吧。
数据挖掘的专业性取决于你检查数据的速度。保持警觉,不要错过有趣的细节。
暗房起初可能会让人感到害怕,但其实没那么复杂。只需学会操作设备即可。这里有一个R教程,另一个在Python中可以帮助你入门。你可以在开始享受乐趣时称自己为数据分析师,当你能够以闪电般的速度揭示照片(以及其他类型的数据集)时,你可以称自己为专家分析师。
统计推断
灵感便宜,但严谨却昂贵。如果你想超越数据,你需要专业的培训。作为一个拥有本科和研究生统计学专业背景的人,我可能有些偏见,但在我看来,统计推断(简称统计学)是三大领域中最困难且充满哲学性的。掌握它需要花费最多的时间。
灵感便宜,但严谨却昂贵。
如果你打算做出高质量、风险控制的重大决策,这些决策依赖于对超出你可用数据的世界的结论,你将需要将统计技能带入你的团队。一个很好的例子是,当你的手指悬停在 AI 系统的启动按钮上时,你突然想到需要在发布之前检查它是否有效(始终是个好主意,认真说)。离开按钮,叫上统计学家。
统计学是改变你思维的科学(在不确定性中)。
如果你想了解更多,我写了这篇 8 分钟的统计学超级总结供你欣赏。
机器学习
机器学习本质上是使用示例而不是说明制作事物标记的配方。 我写了一些相关文章,包括它是否不同于 AI,如何入门,企业为何在此失败,以及一系列通俗语言解析术语细节的前几篇文章(从这里开始)。哦,如果你想与不懂英语的朋友分享,其中一些文章已经翻译在这里。
数据工程
那么关于数据工程,即将数据提供给数据科学团队的工作呢?由于这是一个复杂的领域,我更愿意将其从数据科学的霸权野心中保护起来。此外,它与软件工程的关系更密切,而非统计学。
数据工程和数据科学之间的差异是前后之分。
你可以把数据工程与数据科学的区别视为前后之分。大多数技术工作(在数据诞生之前)可以舒适地称为“数据工程”,而一旦数据到达后(之后)我们所做的一切就是“数据科学”。
决策智能
决策智能完全围绕决策,包括使用数据进行大规模决策,这使得它成为一种工程学科。它通过引入社会科学和管理科学的观点来增强数据科学的应用方面。
决策智能添加了来自社会和管理科学的组件。
换句话说,它是数据科学中不涉及创建通用方法论等研究性内容的一个超集。
还想要更多?这是数据科学项目中的角色分析,可以在我继续敲击键盘的时候娱乐一下。
原文。已获转载许可。
相关:
了解更多关于此主题的信息
初级 ML 工程师实际需要知道什么才能获得聘用?
原文:
www.kdnuggets.com/what-junior-ml-engineers-actually-need-to-know-to-get-hired
照片由Mikhail Nilov提供
作为一名经验丰富的 ML 开发者,我曾在不同项目中聘用过许多初级工程师,我意识到有些技能对于初级开发者来说是必不可少的,这些技能会因项目和公司而异,但有一些基本技能是普遍要求的。
我们的前三课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升您的数据分析能力
3. Google IT 支持专业证书 - 支持您的组织的 IT
在本文中,我们将讨论初级 ML 开发者在求职过程中应具备的关键技能。通过本文,您将更好地了解初级 ML 开发者获得第一份工作的必要技能。
大多数申请工作的初级开发者具备哪些技能?
寻找第一份工作的初级开发者通常来自其他领域,完成了一些 ML 课程。他们学会了基本的 ML 但没有深入的工程、计算机科学或数学背景。虽然成为程序员不需要数学学位,但在 ML 领域,强烈建议拥有数学知识。机器学习和数据科学是需要实验和微调现有算法或甚至创建自己算法的领域。没有一些数学知识,很难做到这一点。
拥有良好学位的大学生在这里具有优势。然而,虽然他们可能比没有专业教育的普通初级工程师具备更深的技术知识,但他们通常缺乏工作所需的实际技能和经验。大学教育旨在提供基础知识,往往很少关注市场需求技能。
大多数申请初级 ML 工程师职位的候选人对 SQL、向量嵌入和一些基本的时间序列分析算法没有问题。我也使用了像 Scikit-learn 这样的基本 Python 库,并应用了基本的问题解决和算法(聚类、回归、随机森林)。但这还不够。
受欢迎的课程缺乏哪些技能?
如你现在所理解的,大多数教育项目无法提供实际经验和对主题的深入理解。如果你决心在机器学习领域建立职业生涯,你需要自己学习一些内容,以提高你的市场竞争力。因为如果你不愿意学习,我这样说是出于关心,不要浪费时间——任何人都能进入 IT 行业的时代已经过去了。今天这是一个相当有竞争力的市场。
流行课程可能没有深入理解的一个关键技能是随机森林,包括剪枝、如何选择树的数量/特征等。虽然课程可能会覆盖随机森林的基本工作原理和实现方法,但它们可能不会深入探讨重要细节,或甚至讨论一些更高级的集成方法。这些细节对于构建有效模型和优化性能至关重要。
另一个常被忽视的技能是网页数据抓取。从网上收集数据是许多机器学习项目中的常见任务,但这需要掌握从网站抓取数据的工具和技术。流行课程可能会简要提到这个话题,但它们可能没有提供足够的实际经验来真正掌握这一技能。
除了技术技能外,初级机器学习开发人员还需要知道如何有效地展示他们的解决方案。这包括创建用户友好的界面和将模型部署到生产环境。例如,Flask 配合 NGrok 为创建机器学习模型的网页界面提供了强大的工具,但许多课程完全没有涉及这些内容。
另一个常被忽视的重要技能是 Docker。Docker 是一种容器化工具,允许开发人员轻松打包和部署应用程序。理解如何使用 Docker 对于将机器学习模型部署到生产环境和扩展应用程序非常有价值。
虚拟环境是管理依赖关系和隔离项目的另一个重要工具。虽然许多课程可能简要介绍了虚拟环境,但它们可能没有提供足够的实际经验,以便初级开发人员真正理解其重要性。
GitHub 是软件开发中版本控制和协作的关键工具,包括机器学习项目。然而,许多初级开发人员可能仅对 GitHub 有表面的了解,可能不知道如何有效地使用它来管理机器学习项目。
最后,像 Weights and Biases 或 MLFlow 这样的机器学习追踪系统可以帮助开发人员跟踪模型性能和实验结果。这些系统对于优化模型和提高性能非常有价值,但它们可能在许多课程中没有深入覆盖。
通过掌握这些技能,初级开发人员可以从竞争中脱颖而出,成为任何机器学习团队的宝贵资产。
要获得机器学习工程职位,你需要什么?
年轻的专业人士经常面临一个问题:要找工作,他们需要经验。但如果没有人愿意雇用他们,他们怎么能获得经验呢?幸运的是,在机器学习和编程领域,你可以通过创建个人项目来解决这个问题。这些项目允许你展示编程技能、机器学习知识以及对潜在雇主的动机。
这里有一些个人项目的想法,坦率说,我希望在申请我部门工作的人员中看到更多:
网页抓取项目
本项目的目标是从特定网站抓取数据并存储到数据库中。这些数据可以用于各种目的,如分析或机器学习。项目可能涉及使用像 BeautifulSoup 或 Scrapy 这样的库进行网页抓取,以及使用 SQLite 或 MySQL 进行数据库存储。此外,项目还可以包括与 Google Drive 或其他云服务的集成,以便备份和方便访问数据。
NLP 项目
在这里,你需要构建一个能够理解和回应自然语言查询的聊天机器人。聊天机器人可以集成附加功能,如地图集成,以提供更有用的回应。你还可以使用像 NLTK 或 spaCy 这样的库进行自然语言处理,以及使用 TensorFlow 或 PyTorch 构建模型。
CV 项目
本项目的目标是构建一个计算机视觉模型,能够检测图像中的物体。无需使用最复杂的模型,只需使用一些能够展示你在深度学习基础方面技能的模型,如 U-net 或 YOLO。项目可以包括使用 ngrok 或类似工具将图像上传到网站,然后返回检测到物体并用方框标记的图像。
声音项目
你可以构建一个文本转语音模型,将录制的音频转换为文本。该模型可以使用深度学习算法如 LSTM 或 GRU 进行训练。项目可以涉及使用像 PyDub 或 librosa 这样的库进行音频处理,以及使用 TensorFlow 或 PyTorch 构建模型。
时间序列预测项目
本项目的目标是构建一个能够根据过去的数据预测未来值的模型。项目可以涉及使用像 Pandas 或 NumPy 这样的库进行数据处理,以及使用 scikit-learn 或 TensorFlow 构建模型。数据可以来自各种地方,如股票市场数据或天气数据,并可以与网页抓取工具集成以自动化数据收集。
还有其他什么?
拥有一个能够展示你技能的良好作品集与来自知名大学的学位同样宝贵(甚至可能更宝贵)。然而,如今还有其他重要的技能:软技能。
发展软技能对机器学习工程师来说很重要,因为它帮助他们将复杂的技术概念传达给非技术利益相关者,有效地与团队成员协作,并与客户和顾客建立牢固的关系。发展软技能的一些方法包括:
-
创建博客。 尽管写作是一种孤独的实践,但它可以非常有效地帮助你提高沟通能力。以清晰简洁的方式写作技术概念可以帮助你更好地结构化思维,并掌握如何向不同观众解释复杂任务。
-
在会议和聚会中演讲。 在会议上演讲可以帮助机器学习工程师提高公众演讲技巧,并学习如何根据不同的观众调整信息传达方式。
-
训练向你的奶奶解释概念。 练习用简单的术语解释技术概念可以帮助机器学习工程师提高与非技术利益相关者沟通的能力。
总的来说,发展技术技能和沟通技能可以帮助你获得机器学习领域的第一份工作。
伊万·斯梅塔尼科夫**是 Serokell 的数据科学团队负责人。
更多相关话题
数据科学的“什么、在哪里和如何”
原文:
www.kdnuggets.com/2018/06/what-where-how-data-science.html
评论
数据科学是一个难以用单一完整定义来概括的术语,这使得其使用变得困难,尤其是当目标是正确使用它时。大多数文章和出版物随意使用这一术语,假设它是普遍理解的。然而,数据科学——其方法、目标和应用——随着时间和技术的发展而不断演变。25 年前的数据科学指的是收集和清理数据集,然后应用统计方法。在 2018 年,数据科学已发展成为一个涵盖数据分析、预测分析、数据挖掘、商业智能、机器学习等更多领域的领域。
实际上,由于没有一个定义可以完全适用,因此由从事数据科学的人来定义它。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能。
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求。
认识到需要对数据科学进行明确的解释,365 数据科学团队设计了什么-哪里-谁信息图。我们定义了数据科学的关键过程并传播该领域。以下是我们对数据科学的解读(点击信息图查看更大图像)。
当然,这看起来可能是大量的信息,但其实并不是如此。在这篇文章中,我们将拆解数据科学,并将其重新构建成一个连贯且易于管理的概念。请耐心等待!
数据科学,“在一分钟内解释”,如下所示。
你有数据。要利用这些数据来指导你的决策,它需要相关、组织良好,并且最好是数字化的。一旦数据连贯,你就可以开始分析数据,创建仪表板和报告,以更好地了解业务表现。然后,你会把目光投向未来,开始生成预测分析。通过预测分析,你评估潜在的未来场景,并以创新的方式预测消费者行为。
但让我们从头开始。
数据科学中的数据
在任何其他事情之前,总是要有数据。数据是数据科学的基础;它是所有分析的依据。在数据科学的背景下,有两种类型的数据:传统数据和大数据。
传统数据是结构化存储在数据库中的数据,分析师可以从一台计算机上进行管理;它是表格格式的,包含数字或文本值。实际上,"传统"这个术语是为了清晰起见引入的。它有助于强调大数据与其他类型数据之间的区别。
另一方面,大数据则比传统数据“大”得多,而且不是简单的意义上的大。从种类(数字、文本,甚至图像、音频、移动数据等),到速度(实时检索和计算),到体积(以太字节、拍字节、艾字节计量),大数据通常分布在计算机网络上。
也就是说,让我们定义一下数据科学中的 What-Where-and-Who 的特点。
在数据科学中你对数据做什么?
数据科学中的传统数据
传统数据存储在关系数据库管理系统中。
也就是说,在准备处理之前,所有数据都需要经过预处理。这是一组必要的操作,将原始数据转换为更易于理解的格式,从而对进一步处理有用。常见的过程包括:
- 收集原始数据并存储在服务器上
这是未经处理的数据,科学家无法直接分析。这些数据可以来自调查,或通过更常见的自动数据收集方式,如网站上的 cookies。
- 给观察值打上类别标签
这包括按类别排列数据或将数据点标记为正确的数据类型。例如,数字型或分类型。
- 数据清洗 / 数据擦洗
处理不一致的数据,如拼写错误的类别和缺失值。
- 数据平衡
如果数据不平衡,使得类别包含的观察数不均等且不具代表性,则应用数据平衡方法,如为每个类别提取相等数量的观察,并准备好进行处理,可以解决这个问题。
- 数据洗牌
重新排列数据点以消除不必要的模式,并进一步提高预测性能。例如,当数据中的前 100 个观察值来自使用网站的前 100 个人时;数据并未随机化,因此会出现由于抽样而产生的模式。
数据科学中的大数据
当涉及到大数据和数据科学时,虽然与传统数据处理方法有一些重叠,但也存在许多差异。
首先,大数据存储在许多服务器上,其复杂程度要高得多。
为了用大数据进行数据科学,预处理尤为关键,因为数据的复杂性大大增加。你会发现,从概念上讲,一些步骤与传统数据预处理类似,但这是处理数据时的固有特性。
-
收集数据
-
对数据进行分类标记
请记住,大数据极其多样,因此标签不是“数字”与“分类”之分,而是“文本”、“数字图像数据”、“数字视频数据”、“数字音频数据”等。
- 数据清洗
这里的方法也极其多样;例如,你可以验证数字图像观察是否准备好进行处理;或者数字视频,等等。
- 数据掩码
在大规模收集数据时,目的是确保数据中的任何机密信息保持私密,而不影响分析和洞察提取。该过程涉及用随机和虚假的数据掩盖原始数据,使科学家能够进行分析而不泄露私人细节。当然,科学家也可以对传统数据进行这种处理,有时也是这样做,但在大数据中,信息可能更为敏感,因此掩盖更为紧迫。
数据来自哪里?
传统数据可能来自基本的客户记录或历史股票价格信息。
然而,大数据无处不在。越来越多的公司和行业在使用和生成大数据。例如,在线社区,如 Facebook、Google 和 LinkedIn;或金融交易数据。各种地理位置的温度测量网格也构成了大数据,以及来自工业设备传感器的机器数据。当然,还有可穿戴技术。
谁处理数据?
处理原始数据和预处理、创建数据库并维护数据库的数据专家可能有不同的名称。尽管他们的职位名称相似,但他们所承担的角色存在明显差异。考虑以下几点。
数据架构师和数据工程师(以及大数据架构师和大数据工程师)在数据科学市场中至关重要。前者从零开始创建数据库;他们设计数据的检索、处理和使用方式。因此,数据工程师利用数据架构师的工作作为基础,并处理(预处理)可用的数据。他们确保数据的清洁和组织,使其准备好供分析师使用。
另一方面,数据库管理员是控制数据流入和流出数据库的人。当然,随着大数据的发展,这一过程几乎完全自动化,因此实际上不需要人工管理员。数据库管理员主要处理传统数据。
也就是说,一旦数据处理完成,数据库清洁和组织好,真正的数据科学才开始。
数据科学
还有两种看待数据的方式:一种是解释已经发生的行为,并为此收集了数据;另一种是利用已有数据预测尚未发生的未来行为。
数据科学解释过去
商业智能
在数据科学进入预测分析之前,它必须查看过去提供的行为模式,分析这些模式以提取洞察,并为预测提供路径。商业智能正是专注于此:提供数据驱动的答案,例如:销售了多少单位?哪个地区销售最多?哪种类型的商品销售在哪里?电子邮件营销在上个季度的点击率和产生的收入如何?与去年同季度的表现相比如何?
尽管商业智能在其标题中没有“数据科学”这个词,但它是数据科学的一部分,而且不是任何微不足道的部分。
商业智能做什么?
当然,商业智能分析师可以应用数据科学来衡量业务表现。但是,为了使商业智能分析师实现这一目标,他们必须使用特定的数据处理技术。
所有数据科学的起点是数据。一旦相关数据掌握在商业智能分析师手中(月度收入、客户、销售量等),他们必须量化观察结果,计算关键绩效指标(KPI),并检查度量,以从数据中提取洞察。
数据科学就是讲述一个故事
除了处理严格的数值信息外,数据科学,尤其是商业智能,还涉及可视化发现,并创建仅由最相关数字支持的易于理解的图像。毕竟,各级管理层应能够理解数据中的洞察,并以此指导决策。
商业智能分析师创建仪表板和报告,并配以图表、图解、地图和其他类似的可视化效果,以展示与当前业务目标相关的发现。
商业智能在哪里被使用?
价格优化与数据科学
值得注意的是,分析师应用数据科学来指导如价格优化技术等事务。他们实时提取相关信息,与历史数据进行比较,并采取相应措施。以酒店管理行为为例:管理层在许多人想要访问酒店的时期提高房价,而在低需求时期则降低房价,以吸引游客。
库存管理和数据科学
数据科学和商业智能对于处理过剩和短缺问题是不可或缺的。对过去销售交易的深入分析可以识别季节性模式和销售最高的时间段,从而实施有效的库存管理技术,以最低成本满足需求。
谁负责数据科学的 BI 分支?
BI 分析师主要集中于对过去历史数据的分析和报告。
BI 顾问通常只是‘外部 BI 分析师’。许多公司外包他们的数据科学部门,因为他们不需要或不想维持一个。BI 顾问如果被聘用,实际上就是 BI 分析师,不过,他们的工作更为多样化,因为他们会参与不同的项目。角色的动态特性为 BI 顾问提供了不同的视角,而 BI 分析师拥有高度专业化的知识(即深度),BI 顾问则贡献于数据科学的广度。
BI 开发人员是处理更高级编程工具(如 Python 和 SQL)以创建专门为公司设计的分析的人员。这是 BI 团队中第三频繁出现的职位。
那么,这就是数据科学的全部内容吗?
数据科学是一个模糊的术语,涵盖了从处理数据——传统数据或大数据——到解释模式和预测行为的所有内容。
数据科学可以通过传统方法如回归分析和聚类分析完成,也可以通过非传统的机器学习技术完成。
我们在这篇文章的第二部分讨论了数据科学预测方法。希望当你阅读完这部分内容后,数据科学的所有拼图都能拼凑完整!
简历: Iliya Valchanov 是 365 Data Science 的联合创始人。
本博客的一部分内容已发布在 365 Data Science Blog。经授权转载。
相关:
更多相关话题
今年数据世界将会发生什么
原文:
www.kdnuggets.com/2019/05/whats-going-happen-this-year-data-world.html
评论
引言
如果你沉浸在数据世界中,你很可能见过许多关于未来几年将会发生什么的文章、博客帖子和新闻,关于趋势和期望的内容。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业的快车道。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求
我读了很多这样的文章,如果你想查看完整内容,可以到文章的末尾找到。但是在这里,我想快速概述一下目前的情况,并分析人们谈论的不同趋势,以了解哪些可能性更大。
最常见的趋势
如果你搜索“数据科学”这个术语,你会发现大约有 5400 万条结果,这非常多。对这个领域的兴趣多年来一直在增长。
但数据科学现在非常重要,对于不同的人来说意义各异。如果你查看文章和新闻,最大的趋势有:
还有更多,但这些是最大的几个。同时每一个都有很多可以讨论的内容,但我现在想专注于两个(2)方面。自动化和图形。
自动化和图形(数据结构)
towardsdatascience.com/the-data-fabric-for-machine-learning-part-1-2c558b7035d7
如果你一直在关注我的研究,目前我最感兴趣的之一是数据结构。请记住,我对数据结构的定义是:
数据结构是支持公司所有数据的平台。它如何被管理、描述、组合和普遍访问。这个平台由企业知识图谱构成,以创建一个统一和统一的数据环境。
我想在这里强调两个重要点,数据架构由企业知识图谱构成,应该尽可能实现自动化。
其中一篇非常清楚地提到这一点的文章是来自 Gartner 的:
Gartner 识别 2019 年数据和分析技术的前 10 大趋势
增强分析、持续智能和可解释的人工智能(AI)是… www.gartner.com
他们说:
图处理和图数据库管理系统(DBMS)的应用将每年增长 100%,以持续加速数据准备并支持更复杂和适应性的 数据科学。
还有:
到 2022 年,定制的数据架构设计将主要以静态基础设施形式部署,这迫使组织进入一个新的成本浪潮,完全重新设计以适应更动态的数据网格方法。
很明显,图形概念和数据架构每年在数据公司中会变得更加普遍。但自动化呢?
在机器学习、深度学习和部署方面有许多进展。但正如我之前所说,数据是现在公司最重要的资产(也许是最重要的资产)。因此,在你可以应用机器学习或深度学习之前,你需要拥有数据,知道你拥有什么,理解它,治理它,清理它,分析它,标准化它(可能更多),然后你才能考虑如何使用它。
我们需要自动化来处理数据存储、数据清洗、数据探索、数据清理以及我们实际花费大量时间做的所有事情。你可以说像 DataRobot 这样的工具可以提供这些功能,但根据我的经验,这个领域还有很多工作要做。
这就是为什么我认为语义技术是解决此问题的途径。通过它们(如 Anzo),你可以实现自动查询生成(是的,这是一个功能),并使用它们处理复杂的图形,使提取特征变得简单,并最终实现完全自动化。
在我关于这个主题的最初几篇文章中,我提出了这样的架构:
towardsdatascience.com/deep-learning-for-the-masses-and-the-semantic-layer-f1db5e3ab94b
在你能随处见到自动化的地方。并且可以轻松地实时添加更多功能,比如可解释的 AI、持续智能等。在同一篇文章中,Gartner 提到:
持续智能是一种设计模式,其中实时分析被集成到业务操作中,处理当前和历史数据以建议应对事件的行动。它提供决策自动化或决策支持。
这个词并不新鲜,如果我们考虑流式分析,但我喜欢这个名字。实际上,发生的事情可以分为两部分:语义技术和自动化。
这里是过去 5 年语义技术的兴趣情况:
如我们所见,数据织物的高度并不高,但我认为这很快会改变。
结论
如果你想保持最新状态,最好开始考虑如何将你的数据湖升级为智能数据湖,同时自动化你的过程,从数据摄取到模型部署和监控,并利用图形技术。
再次重申,如果:
-
你有高度相关的数据。
-
你需要一个灵活的模式。
-
你需要一个结构化的方案,并构建更符合人们思维方式的查询。
如果你有高度结构化的数据,想要进行大量分组计算且表之间的关系不多,那么使用关系数据库可能更合适。
剑桥语义学的团队创建了这张很棒的信息图,让你更了解数据织物的宇宙:
感谢阅读,希望这篇文章能给你在个人业务和生活中作为数据科学家的工作提供一些建议。
参考文献:
*增强分析、持续智能和可解释的人工智能(AI)是…*www.gartner.com](https://www.gartner.com/en/newsroom/press-releases/2019-02-18-gartner-identifies-top-10-data-and-analytics-technolo)
*今年可以被视为人工智能(AI)的繁荣之年。看看初创公司数量…*towardsdatascience.com](https://towardsdatascience.com/data-science-trends-for-2019-11b2397bd16b)
*谈到 2019 年值得关注的主要数据科学趋势,去年的主要趋势从 2017 年延续下来,增长…*www.dataversity.net](https://www.dataversity.net/data-science-trends-in-2019/#)
2018 年人工智能、数据科学、分析的主要发展和 2019 年的关键趋势
*与以往一样,我们带来了一些专家的预测和分析总结。我们询问了主要…*www.kdnuggets.com](/2018/12/predictions-data-science-analytics-2019.html)
*我们寻求更多数据是有充分理由的:数据是推动数字创新的商品。然而,要将这些巨大的…*www.datanami.com](https://www.datanami.com/2019/01/21/10-big-data-trends-to-watch-in-2019/)
*新的一年,新的日历页。如果 2019 年与 2018 年类似,你可以确定数据、分析、机器学习……*www.informationweek.com](https://www.informationweek.com/strategic-cio/5-data-and-ai-trends-for-2019/d/d-id/1333581)
[图形数据库。有什么大不了的?
*继续对语义和数据科学的分析,是时候谈谈图形数据库及其有什么…*towardsdatascience.com](https://towardsdatascience.com/graph-databases-whats-the-big-deal-ec310b1bc0ed)
[Anzo®
*迄今为止,没有任何技术能够在企业规模上提供语义层——具有安全性、治理和……*www.cambridgesemantics.com](https://www.cambridgesemantics.com/product/)
简介: Favio Vazquez 是一名物理学家和计算机工程师,从事数据科学和计算宇宙学工作。他热爱科学、哲学、编程和音乐。他是西班牙语数据科学出版物 Ciencia y Datos 的创始人。他喜欢接受新挑战,与优秀团队合作,并解决有趣的问题。他参与了 Apache Spark 的协作,帮助 MLlib、Core 和文档的工作。他热衷于将自己的科学、数据分析、可视化和自动学习知识应用于使世界变得更美好。
原文. 经许可转载。
相关:
-
解释性 AI 简介及其必要性
-
克服对生产性分析的信任障碍
-
哪个深度学习框架增长最快?
相关话题
数据科学的方法有什么问题?
原文:
www.kdnuggets.com/2019/07/whats-wrong-with-data-science.html
评论
来源: https://www.data-mania.com/blog/real-vs-fake-data-scientists-what-you-really-need-to-know/
数据科学是将统计学、编程和领域知识应用于生成对需要解决的问题的洞察。《哈佛商业评论》称 数据科学家是 21 世纪最性感的职业。那篇文章被引用的频率有多高?
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 方面
职业“数据科学家”已经存在了几十年,只是以前没有称为“数据科学家”。统计学家们已经使用机器学习技术,如逻辑回归和随机森林进行预测和洞察。那些统计学家也通常在线性代数和微积分方面非常有知识。统计学家们甚至为数据科学贡献了最伟大的礼物之一——R。罗斯·伊哈卡和罗伯特·绅士是两位统计学家,他们为我们提供了 R 语言,使我们能够用几行代码进行复杂的分析。参见这篇论文:R: A Language for Data Analysis and Graphics by Ross Ihaka and Robert Gentleman。
近年来,分析师推测我们将在未来几年看到数百万数据科学家的短缺,大学正在推出新课程,潜在学生正在争相成为填补这一空缺的下一届数据科学家,获得$100,000 的薪水和美国№1 的工作(这并不是现实,尤其是对于初学者,尽管可能会有例外)。虽然大学教育在大多数情况下是足够的,但许多人选择了 MOOC 来支持他们的数据科学职业道路。Coursera、edX、Data Camp 和 Data Quest 是一些人们转向并信任的著名 MOOC。问题在于,参加这些课程的人可能在统计学基础方面不够合格,无法理解所教授的内容。
有些人忘记了数据科学或任何名称的工作都基于多年的辛勤工作、学习和对工作的热情。过去的统计学家并不像今天的“数据科学家”那样受到追捧。这个职业面临被贬值的风险,可能变成一个人可以花不到$100 就能在线开始的工作。我支持更多的教育和在线学习机会,但这个职业不应被贬值。
数据科学家在机器学习项目中需要考虑哪些因素?
来源:http://blog.bidmotion.com/2016/06/23/good-morning-have-you-used-machine-learning/supervised-workflow-machine-learning/
这是一个人可以使用自动化技术构建模型的地方,但如果没有人类的直觉来指导,深入探讨问题的所在,模型仍然会失败。
数据预处理
处理异常值、缺失值、编码类别变量、分箱、类型转换、拼写错误、重复行、类别不平衡等,不能仅依靠自动化技术完成。根据媒体和当前数据科学家的说法,数据预处理占据了数据科学家工作量的 80%。虽然自动化可以在一定程度上提供帮助,但从探索性数据分析中得出的结论应该由具有行业知识或具备足够统计学知识的人做出。
超参数调优
机器学习包提供了具有默认超参数设置的模型用于训练和测试。可以简单地更改参数来调整模型。然而,仅仅更改参数而不探索这些更改的结果是浪费时间。更改超参数可能会导致模型过拟合、欠拟合、偏倚等。不同的模型也会有不同的探索方式。例如,在调整决策树时,最好绘制树形图以查看调整的结果,因为通过更改复杂性参数,你可能会修剪树到一个程度,以至于你的模型过拟合/欠拟合。
不平衡数据
这是所有现实世界数据面临的问题。类别不平衡并不是异常现象,而是需要在建模和评估阶段加以适应/考虑的东西。他们要么需要重新采样数据,要么改变每个类别的阈值概率(即,降低预测少数类别的阈值概率)。
结论
虽然有很多人成功完成了转型,但许多人并不如此积极地转型为医生、工程师或律师。数据科学的职业不应被稀释到我们说任何人都可以成为数据科学家的程度。每个人都应有机会选择任何职业,但说任何人都能做到这一点只会将这一职业稀释成不需要本科生、研究生或博士候选人所投入的工作量。
相关:
-
为什么你还不是一个具备就业准备的数据科学家
-
如果你是一名正在转型为数据科学家的开发者,这里是你最好的资源
-
学习数据科学硕士是否值得?