TowardsDataScience-博客中文翻译-2021-五-

TowardsDataScience 博客中文翻译 2021(五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

为了更好地进行数据分析,5 个必须知道的数据可视化

原文:https://towardsdatascience.com/5-must-know-data-visualizations-for-better-data-analysis-5b40a082c471?source=collection_archive---------22-----------------------

Altair:Python 的统计可视化库

帕斯卡尔·贝纳登在 Unsplash 上的照片

数据可视化是数据科学不可或缺的一部分。这对于探索和理解数据非常有用。在某些情况下,可视化在传达信息方面也比简单的数字好得多。

使用数据可视化技术可以很容易地发现变量之间的关系、变量的分布以及数据中的底层结构。

在本文中,我们将介绍数据分析中常用的 5 种基本数据可视化类型。我们将使用 Altair 库,它是 Python 的统计可视化库。

如果你喜欢其中一个用于数据可视化任务的库,我以前曾用 Seabornggplot2 写过类似的文章。我建议浏览所有内容,因为在同一项任务中比较不同的工具和框架将有助于您更好地学*。

让我们首先创建一个用于示例的样本数据帧。

import numpy as np
import pandas as pddf = pd.DataFrame({
   'date':pd.date_range(start='2020-01-10', periods=100, freq='D'),
   'cat':pd.Series(['A','B','C']).sample(n=100, replace=True),
   'val':(np.random.randn(100) + 10).round(2),
   'val2':(np.random.random(100) * 10).round(2),
   'val3':np.random.randint(20,50, size=100)
})df = df.reset_index(drop=True)df.head()

(图片由作者提供)

数据帧由 100 行和 5 列组成。它包含日期时间、分类和数值。

1.线形图

线形图显示了两个变量之间的关系。其中之一通常是时间。因此,我们可以看到一个变量是如何随时间变化的。股票价格、每日气温是线图派上用场的一些用例。

下面是如何用 Altair 创建一个简单的线图。

import altair as altalt.Chart(df).mark_line().encode(
    x='date', y='val'
)

(图片由作者提供)

我们来详细说明一下语法。我们首先将数据传递给一个顶级图表对象。下一个函数指定了绘图的类型。encode 函数指定在绘图中使用哪些列。因此,我们在编码函数中写的任何东西都必须链接到数据帧。

Altair 提供了更多的函数和参数来生成更多的信息或定制的图。我们将在下面的例子中看到它们。

为了使上面的线图看起来更好,我们可以使用 scale 属性调整 y 轴的数值范围。

alt.Chart(df).mark_line().encode(
   alt.X('date'),
   alt.Y('val', scale=alt.Scale(zero=False))
)

(图片由作者提供)

为了使用 scale 属性,我们用 X 和 Y 编码指定列名(例如 alt。x)。零参数设置为“假”以防止轴从零开始。

2.散点图

散点图也是关系图。它通常用于可视化两个数值变量的值。我们可以观察它们之间是否有关联。

我们可以创建“val”和“val2”列的散点图,如下所示。

alt.Chart(df).mark_circle(size=40).encode(
   alt.X('val', scale=alt.Scale(zero=False)),
   alt.Y('val2'),
   alt.Color('cat')
)

(图片由作者提供)

我们使用颜色编码来根据“cat”列分隔数据点。mark_circle 函数的 size 参数用于调整散点图中点的大小。

3.柱状图

直方图用于可视化连续变量的分布。它将值范围划分为离散的箱,并计算每个箱中数据点的数量。

让我们创建一个“val3”列的直方图。使用了 mark_bar 函数,但是我们以函数生成直方图的方式指定了 x 和 y 编码。

alt.Chart(df).mark_bar().encode(
   alt.X('val3', bin=True),
   alt.Y('count()')
).properties(title='Histogram of val3', height=300, width=450)

(图片由作者提供)

我们还使用了 properties 函数来定制大小和添加标题。

4.箱形图

箱形图提供了变量分布的概况。它显示了值是如何通过四分位数和异常值分布的。

我们可以使用 Altair 的 mark_boxplot 函数创建一个盒图,如下所示。

alt.Chart(df).mark_boxplot().encode(
  alt.X('cat'),
  alt.Y('val2', scale=alt.Scale(zero=False))
).properties(height=200, width=400)

(图片由作者提供)

A 中的值的范围小于其他两个类别。方框内的白线表示中间值。

5.条形图

条形图可用于可视化分类变量。每个类别都用一个条形表示,条形的大小与该类别的值成比例。

例如,我们可以使用条形图来可视化“val3”列的每周总计。让我们首先用熊猫图书馆计算每周总数。

df['week'] = df['date'].dt.isocalendar().weekweekly = df[['week','val3']].groupby('week', as_index=False).sum()weekly.head()

(图片由作者提供)

第一行从日期列中提取周数。第二行按周对“val3”列进行分组,并计算总和。

我们现在可以创建条形图。

alt.Chart(weekly).mark_bar().encode(
   x='val3:Q', y='week:O'
)

(图片由作者提供)

结论

我们已经介绍了 5 种基本但非常实用的可视化类型。它们都是探索数据集和揭示变量之间关系的基础。

使用 Altair 可以创建更复杂、信息量更大和定制的可视化效果。它在数据转换和过滤方面也非常高效和强大。

如果你想更详细地学*和练* Altair,这里是我以前写的 4 篇系列文章。

感谢您的阅读。如果您有任何反馈,请告诉我。

SQL 的 5 个必须知道的日期和时间函数

原文:https://towardsdatascience.com/5-must-know-date-and-time-functions-of-sql-3079cdb1a71e?source=collection_archive---------35-----------------------

实例实用指南

自由股票Unsplash 上的照片

SQL 是一种编程语言,关系数据库管理系统(RDBMS)使用它来管理带有标记行和列的表格形式的数据。

我们编写 SQL 查询从关系数据库中检索数据。查询可以像从表中检索所有条目一样简单。然而,这并不是一个理想的场景。

SQL 允许编写高级查询来过滤和转换数据。我们只能以期望的格式检索我们需要的数据。这比检索所有数据然后应用过滤和转换要高效得多。

SQL 还提供了许多函数和方法来执行数据分析,同时从数据库中获取数据。从这个意义上说,SQL 也可以被认为是一种数据分析工具。

在这篇文章中,我们将讨论 5 个用于日期和时间的函数。我将使用 MySQL 作为 RDBMS。尽管大多数 SQL 语法在不同的 RDBMSs 中是通用的,但重要的是可能会有一些小的差异。

我创建了一个 SQL 表,其中包含一些关于美国 YouTube 上热门视频的数据。这是 Kaggle 上可用的数据集的一小部分。该表被称为“趋势”,它包含以下关于 2018 年 1 月趋势视频的数据。

趋势表(作者图片)

1.日期函数

date 函数提取日期时间表达式的日期部分。例如,publish_time 列包含日期和时间部分。

mysql> select publish_time from trending
    -> limit 3;+---------------------+
| publish_time        |
+---------------------+
| 2018-01-01 15:30:03 |
| 2018-01-01 01:05:59 |
| 2018-01-01 14:21:14 |
+---------------------+

我们可以使用 date 函数提取 publish_time 列的日期部分。

mysql> select date(publish_time) from trending
    -> limit 3;+--------------------+
| date(publish_time) |
+--------------------+
| 2018-01-01         |
| 2018-01-01         |
| 2018-01-01         |
+--------------------+

2.时间函数

时间函数类似于日期函数,但它提取时间部分。

mysql> select time(publish_time) from trending
    -> limit 3;+--------------------+
| time(publish_time) |
+--------------------+
| 15:30:03           |
| 01:05:59           |
| 14:21:14           |
+--------------------+

3.Datediff 函数

顾名思义,datediff 函数计算两个日期之间的差值。该表包含视频的发布和趋势日期。datediff 函数可用于查找它们之间的差异。

例如,以下查询返回视频发布和成为趋势之间差异的前 3 个值。

mysql> select datediff(trending_date, date(publish_time)) as diff
    -> from trending
    -> order by diff desc
    -> limit 3;+------+
| diff |
+------+
|   28 |
|   27 |
|   26 |
+------+

datediff 函数接受两个日期作为其参数。因为 publish_time 列包含日期和时间,所以我们应用 date 函数来访问它的日期部分。order by 子句按降序对差异进行排序。最后,我们通过将限制设置为 3 来显示前三行。

我们还可以根据发布日期和流行日期之间的差异对视频进行分组。以下查询根据视频数量返回发布日期和趋势日期之间的前 3 个差异。

mysql> select count(*) as qty,
    -> datediff(trending_date, date(publish_time)) as diff
    -> from trending
    -> group by diff
    -> order by qty desc
    -> limit 3;+-----+------+
| qty | diff |
+-----+------+
| 833 |    3 |
| 823 |    4 |
| 790 |    5 |
+-----+------+

大多数视频在发布后的 3、4 或 5 天内成为热门。

4.Now 和 curdate 函数

它们都是用来访问当前日期的。它们可以方便地计算一个观测值有多长时间了。now 或 curdate 函数可以与 datediff 函数一起使用,如下所示。

mysql> select avg(datediff(now(), date(publish_time)))
    -> as avg_time
    -> from trending;+-----------+
| avg_time  |
+-----------+
| 1110.5513 |
+-----------+

我们计算了这些趋势视频的平均存在时间。在我们的情况下,这不是很有用,因为我们知道表中的所有视频都是在 2018 年 1 月发布的。然而,知道如何使用这些功能是很重要的。

5.工作日

有许多函数可以访问日期或时间的各个部分,如月份名称、星期、工作日、年份等等。我选择 weekday 函数作为例子。

我们可以根据工作日对视频的流行日期进行分组。

mysql> select count(*) as qty, weekday(trending_date) as wday
    -> from trending
    -> group by wday;+-----+------+
| qty | wday |
+-----+------+
| 780 |    0 |
| 793 |    1 |
| 614 |    2 |
| 634 |    3 |
| 818 |    4 |
| 820 |    5 |
| 816 |    6 |
+-----+------+

weekday 函数返回工作日索引。似乎更多的视频在周末而不是工作日成为热门。

再来做一个例子。顾名思义,weekofday 函数计算日历周。我们可以将它应用于趋势日期,如下所示。

mysql> select count(*) qty, weekofyear(trending_date) as week_of_year
    -> from trending
    -> group by week_of_year;+------+--------------+
| qty  | week_of_year |
+------+--------------+
|  494 |            1 |
|  949 |            2 |
| 1360 |            3 |
| 1352 |            4 |
| 1075 |            5 |
|   45 |            6 |
+------+--------------+

结论

我们已经介绍了 SQL 的基本日期和时间函数。你可以在 MySQL 文档中看到这些函数的完整列表。

这些函数非常重要,因为时间和日期是数据分析和处理的两个关键因素。

感谢您的阅读。如果您有任何反馈,请告诉我。

Python 集合上的 5 个必备操作

原文:https://towardsdatascience.com/5-must-know-operations-on-python-sets-827d5b81465a?source=collection_archive---------17-----------------------

集合是 Python 的核心数据结构之一

蒂姆·福斯特在 Unsplash 上的照片

数据结构是 Python 脚本的构建块。它们以特定的方式保存或包含数据,以使脚本更有效地工作。因此,学*如何与数据结构交互是至关重要的。

集合是 Python 中的核心数据结构之一。集合是具有以下特征的对象的集合:

  • 集合是无序的
  • 集合包含不同的元素
  • 集合中的元素必须是不可变的

由于集合是无序的,我们不能在集合上执行像索引和切片这样的操作。我们不能将可变对象(如列表)作为集合中的一个元素。集合的一个常见用例是从集合或序列中删除重复的元素。

在本文中,我们将讨论集合的 5 种常用运算。让我们从创建一个集合开始。我们可以在其他集合上使用 set 构造函数来创建一个集合。

mylist = ['A', 'A', 'B', 'A', 'C', 'B']
myset = set(mylist)print(myset)
{'A', 'B', 'C'}

我们已经基于列表创建了一个集合。该集合仅包括列表中的唯一元素。set 构造函数也可以应用于 numpy 数组。

import numpy as np
a = np.random.randint(0, 5, size=20)
myset = set(a)print(a)
[4 0 4 3 1 1 3 0 0 1 3 4 0 3 2 4 1 4 3 3]print(myset)
{0, 1, 2, 3, 4}

1.添加和删除元素

添加或删除元素是一个简单的操作。分别使用 add 和 remove 方法。

myset.add(5)print(myset)
{0, 1, 2, 3, 4, 5}

如果我们试图添加一个已经在集合中的元素,集合将保持不变,我们不会得到警告或错误。

myset.add(4)print(myset)
{0, 1, 2, 3, 4, 5}

remove 方法的用法是一样的。

myset.remove(4)print(myset)
{0, 1, 2, 3, 5}

2.更新集合

用另一个集合更新一个集合意味着将第二个集合中的元素添加到第一个集合中。考虑以下两组。

myset = set([0, 1, 2, 3, 5])myotherset = set([3, 4, 5, 6, 7])

我们可以用“myotherset”更新“myset ”,如下所示:

myset.update(myotherset)print(myset)
{0, 1, 2, 3, 4, 5, 6, 7}

update 方法非常有用,因为我们不需要担心两个集合中相同和不同的元素。

我们还可以用列表和元组等其他集合来更新集合。

myset = set([0, 1, 2, 3, 5])
mylist = [1, 2, 10,11,12]
myset.update(mylist)print(myset)
{0, 1, 2, 3, 5, 10, 11, 12}

3.组合集合

update 方法就地工作,这意味着它修改原始集合。在某些情况下,我们需要在不更新原始集合的情况下组合多个集合。union 方法返回两个集合的组合,因此我们可以将它赋给一个新变量。

myset = {'A', 'B', 'C'}
newset = {'B', 'C', 'D', 'E'}
newset2 = {1, 2, 3}combinedset = myset.union(newset).union(newset2)print(myset)
{'A', 'B', 'C'}print(combinedset)
{'A', 1, 2, 'D', 'E', 3, 'B', 'C'}

我们得到集合的组合(即并集),但原始集合保持不变。

在上例中,我们还看到了创建集合的不同方式。可以在花括号(" {} ")内传递元素来创建 set。

4.比较集合

两个集合可以根据它们包含的元素进行比较。issuperset 和 issubset 方法可用于比较两个集合。

假设我们有两个集合 A 和 B,如果 A 包含 B 中的所有元素,那么 A 是 B 的超集,在这种情况下,B 是 A 的子集。

A = {1, 2, 3, 4, 5}
B = {1, 4, 5}
C = {1, 4, 6}A.issuperset(B)
TrueB.issubset(A)
TrueA.issuperset(C)
False

集合 C 中的一个元素不在集合 A 中。因此,A 不是 C 的超集。

如果两个集合包含相同的元素,它们可以被认为是彼此的超集和子集。

D = {1, 4, 5}E = {1, 4, 5}D.issuperset(E)
TrueD.issubset(E)
True

5.交集与差异

集合的概念非常类似于数学中的维恩图。

(图片由作者提供)

我们可能对一组中的元素感兴趣,而对另一组中的元素不感兴趣。类似地,我们可能需要找到两个集合中的元素。差分和交集方法可分别用于执行这些操作。

A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7, 8}A.difference(B)
{1, 2}A.intersection(B)
{3, 4, 5}B.difference(A)
{6, 7, 8}

在寻找交集时,集合的顺序无关紧要。但是,差额是根据订单计算的。A 与 B 的不同之处在于包含了 A 中有而 B 中没有的元素,反之亦然。

结论

我们已经通过例子演示了在集合上执行的 5 种常见操作。有更多的方法可以应用于集合。然而,对于大多数情况,我们在本文中介绍的内容已经足够了。

感谢您的阅读。如果您有任何反馈,请告诉我。

数据科学中熊猫的 5 个必备功能

原文:https://towardsdatascience.com/5-must-know-pandas-functions-for-data-science-d29d04653190?source=collection_archive---------8-----------------------

大多数数据科学项目都在使用熊猫

斯蒂芬·莱昂纳迪在 Unsplash拍摄的照片

每个数据科学项目都是从数据分析开始的。当我们谈到数据分析时,熊猫是最受重视的玩家。Pandas 是一个 python 库,也因面板数据分析而闻名。

在本文中,我将分享一些你必须知道的得心应手的熊猫功能。这些是处理数据集中不同操作的最有用的函数。

我将参考的本文数据集是 Kaggle 的房价预测数据。你可以从这里下载。

先来看看我们的数据。

import pandas as pd
df = pd.read_csv("House data.csv")

资料截图

这是我们数据的样子。由于这是房价预测数据——我们有卧室、浴室、地板和其他因素,可以帮助我们决定任何规格的房子的价格。

现在让我们对这些数据应用一些 pandas 函数。

1.Count()函数

假设您想快速检查表中是否有空值。在这种情况下,count 函数为我们提供了其中有值的单元格的计数。

df.count()

计数功能

好消息是,我们的数据集中没有空值。所以,让我们指定一个空值,看看变化。

df.at[0,'price']= np.nan

分配空值后

现在,如果我检查计数,我会得到下面的结果。

用 null 计数

2.idxmin()和 idxmax()函数

这些函数返回满足所需条件的特定行的索引。

比方说想得到房价最低的房子的详细信息。应用数据子集化方法可以有多种方式。但是,最有效的方法是使用这些函数。

df.loc[df['price'].idxmin()]

通过运行上面的代码,我可以得到房子的详细信息,它的价格是最低的,如下所示。

所以,我们在联邦路市以零价格买了一栋三居室的房子。😁

我知道这是数据错误,因为我们在玩开源虚拟数据。但是,我认为你得到了东西。:)同样我们可以用idxmax()来得到最高价格的房子。

如果呢?你有不止一个房子的最低或最高价格。在这种情况下,这些函数将返回第一个匹配项。在下一篇文章中,我们将看到如何处理这种情况。😉

3.cut()函数

假设你有一个连续值的变量。但是,根据您的业务理解,这个变量应该被视为分类变量。

cut()函数可以帮助您存储连续变量,方法是对它们进行排序,然后将它们存储在数据范围存储桶中。

在这个数据中,我想做一桶价格数据,因为价格值的范围是从 0 到 26590000。如果我能把它桶起来,那么做决定会容易一点。

pd.cut(df["price"], 4)

分桶数据

您还可以为每个存储桶分配标签,如下所示。

看起来不错!对吗?我们可以用它替换 price 列,也可以创建一个新的列。

4.数据透视表()

每个 excel 的人一定都在他们的数据中使用过这个函数。我们可以对熊猫做同样的事情。

假设我们想根据不同的卧室找到每个城市的平均房价。

**df.pivot_table(index="city" , columns="bedrooms" ,values="price" , aggfunc="mean")**

这里您可以找到空值,因为这是不必要的—每个城市都有两个卧室。这要看数据。

5.nsmallest()和 nlargest()函数

我们已经看到了如何使用 idxmin()和 idxmax()函数来获得最小和最大观察值。

如果呢?你想得到前 3 个最高价格的房子数据。在这种情况下,这些功能可以节省我们的时间。

df.nlargest(3, "price")[["city","price"]]

df.nsmallest(3, "price")[["city","price"]]

开始了。我们现在有三个城市的房价为零。😃

结论

嗯,那些是一些令人惊奇的熊猫功能。这些函数在您的日常数据科学任务中非常方便。

我希望你喜欢这篇文章。更多精彩文章敬请期待!

谢谢你的阅读!

以下是我的一些最佳选择:

https://better programming . pub/10-python-tricks-that-wow-you-de 450921d 96 a

https://towards data science . com/7-amazing-python-one-liners-you-must-know-413 AE 021470 f

https://towards data science . com/5-data-science-projects-the-you-can-complete-over-the-weekend-34445 b 14707d

走之前……

如果你喜欢这篇文章,并希望关注更多关于 Python &数据科学精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为中级会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,随时订阅我的免费简讯: 普朗加尔的简讯

操纵日期的 5 个必备 SQL 函数

原文:https://towardsdatascience.com/5-must-know-sql-functions-for-manipulating-dates-e3f46d737b26?source=collection_archive---------12-----------------------

SQL 实践教程。

Unsplash 上由埃斯特·扬森斯拍摄的照片

如果你在我找到第一份工作之前问我数据科学家最重要的技能是什么,我的答案肯定是 Python。毫无疑问!

我现在是一名数据科学家,如果你问我同样的问题,我的答案仍然是 Python。然而,我有第二个想法。让我三思的是 SQL。

SQL 是数据科学家的必备技能。它主要用于查询关系数据库,但它能够执行更多。SQL 配备了如此多的功能,使其成为高效的数据分析和操作工具。

在本文中,我们将介绍 5 个用于操作日期的 SQL 函数。当处理涉及基于日期或时间的信息的数据时,它们会派上用场。

注意: SQL 被很多关系数据库管理系统使用,比如 MySQL、SQL Server、PostgreSQL 等等。尽管它们大多采用相同的 SQL 语法,但可能会有一些细微的差别。在本文中,我们将使用 SQL Server。

1.获取日期

顾名思义,getdate 函数给出今天的日期。我们来做一个例子。

DECLARE @mydate Date
SET @mydate = GETDATE()print @mydate
'2021-08-22'

我们创建一个名为“mydate”的变量,并将其值指定为今天的日期。

2.Dateadd

这个函数的名字甚至比前一个函数更容易理解。dateadd 函数用于向日期添加时间或日期间隔。

和往常一样,语法通过例子更容易理解。

DECLARE @mydate Date
SET @mydate = GETDATE()SELECT DATEADD(MONTH, 1, @mydate) AS NextMonthNextMonth
2021-09-22

第一个参数表示间隔,第二个参数是间隔的数量。第三个参数是基值。

DATEADD(interval, number of intervals, date)

我们也可以使用其他间隔。

DECLARE @mydate Date
SET @mydate = GETDATE()SELECT DATEADD(WEEK, -2, @mydate) AS TwoWeeksBeforeTwoWeeksBefore
2021-08-08

如果在间隔数前加一个减号,它会从给定的日期中减去指定的间隔。

可以添加基于时间的间隔,但我们需要使用日期时间变量。

DECLARE @mydate DateTime
SET @mydate = GETDATE()SELECT DATEADD(HOUR, 10, @mydate)
'2021-08-23 00:10:17.287'

3.Datediff

datediff 函数用于根据给定的时间间隔计算两个日期之间的差异。

DECLARE @mydate Date
SET @mydate = '2018-08-08'SELECT DATEDIFF(MONTH, @mydate, GETDATE())
36

mydate 变量保存值“2018–08–08”。在 select 语句中,我们计算这个变量和当前日期之间的差值。

就像 dateadd 函数一样,datediff 函数也接受其他间隔。

DECLARE @mydate Date
SET @mydate = '2021-10-08'SELECT DATEDIFF(DAY, @mydate, GETDATE()) AS DayDifferenceDayDifference
47

4.日期名称

datename 函数可用于提取日期的各个部分。例如,我们可以从日期中获取月和日的名称,如下所示:

DECLARE @mydate Date
SET @mydate = '2021-10-08'SELECT DATENAME(MONTH, @mydate)
OctoberSELECT DATENAME(WEEKDAY, @mydate)
Friday

5.年、月、日

年、月和日是独立的函数,但我认为最好将它们放在一起。

我们已经介绍了 datename 函数,它给出了月份和日期的名称。在某些情况下,我们需要数字形式的信息。年、月和日函数允许分解日期。

让我们做一个例子来演示如何使用它们。

DECLARE @mydate Date
SET @mydate = '2021-10-08'SELECT
   Date = @mydate,
   Year = YEAR(@mydate),
   Month = MONTH(@mydate),
   Day = DAY(@mydate)Date        Year  Month  Day
2021-10-08  2021  10     8

我们现在可以访问给定日期的每个部分。

结论

操作日期对于数据分析非常重要,尤其是在处理时间序列数据时。SQL 提供了几个函数来使这个过程简单而高效。

本文中的函数涵盖了您需要对日期进行的大量操作。

感谢您的阅读。如果您有任何反馈,请告诉我。

用于字符串操作的 5 个必备 SQL 函数

原文:https://towardsdatascience.com/5-must-know-sql-functions-for-string-manipulation-8b22526e6144?source=collection_archive---------15-----------------------

处理文本数据是数据分析的一个重要部分

照片由 Aaron BurdenUnsplash

SQL 用于管理关系数据库中的数据。然而,它提供的不仅仅是查询数据库。SQL 函数还允许高效地执行数据分析和操作。

因为大量的原始数据是以文本形式出现的,所以拥有多种操作字符串的方法是非常重要的。原始数据通常不是最理想的格式。我们操纵它们来创造有用的和信息丰富的特征。

在本文中,我们将介绍 5 个使用字符串的 SQL 函数。举例来说,我将使用 Kaggle 上的一小部分墨尔本房产数据集

我创建了一个名为 melb 的表。让我们先来看看数据集。

(图片由作者提供)

数据集包含一些待售房屋的信息。

:关系数据库管理系统有 MySQL、SQL Server、PostgreSQL 等几种。尽管它们大多采用相同的 SQL 语法,但可能会有一些细微的差别。在本文中,我们将使用 PostgreSQL。

1.串联

串联一个字符串基本上就是将多个字符串组合成一个。在我们的数据集中,我们可以将 address 和 region name 列组合起来创建一个完整的地址。

我们可以使用 concat 函数来执行这项任务。

SELECT CONCAT(address, ', ' , regionname) AS full_address 
FROM melb 
LIMIT 5; full_address
-----------------------------------------
85 Turner St, Northern Metropolitan
25 Bloomburg St, Northern Metropolitan
5 Charles St, Northern Metropolitan
40 Federation La, Northern Metropolitan
55a Park St, Northern Metropolitan

我们也可以使用“||”操作来连接字符串。

SELECT address || ', ' || regionname AS full_address
FROM melb 
LIMIT 5;

limit 关键字限制要显示的行数。

2.裂开

一个字符串可能包含多条信息。在这种情况下,我们可能需要从字符串中提取一部分,并将其作为一个单独的特征。

地址栏包含门牌号。让我们用它来创建一个名为门牌号的新列。

SELECT SPLIT_PART(address, ' ', 1) AS house_number 
FROM melb 
LIMIT 5;house_number
--------------
85
25
5
40
55a

split_part 函数有 3 个参数。第一个是列名。第二个是定义分割点的字符,在我们的例子中是空格。第三个参数表示拆分后我们需要哪个部分。门牌号在地址的开头,所以我们取第一部分。

3.替换

replace 函数允许用一组新的字符替换字符串的一部分。当我们需要标准化一些文本时,它就派上了用场。

例如,我们可以将地址列中的“st”字符替换为单词“street”。

SELECT address, REPLACE(address, 'St', 'Street') AS new_address 
FROM melb 
LIMIT 5; address      |     new_address
-----------------+---------------------
85 Turner St     | 85 Turner Street
25 Bloomburg St  | 25 Bloomburg Street
5 Charles St     | 5 Charles Street
40 Federation La | 40 Federation La
55a Park St      | 55a Park Street

4.左边和右边

left 和 right 函数可用于从字符串中提取一部分。我们根据字符的数量来定义要选择的部分。例如,带有 5 的 left 函数将从左侧返回前 5 个字符(即从头开始)。

SELECT LEFT(regionname, 5) AS region_5 
FROM melb 
LIMIT 5;region_5
----------
North
North
North
North
North

右函数的工作方式类似。

5.喜欢

like 其实是一个 SQL 运算符,不是函数。然而,在处理字符串时,它是一个非常有用的工具。我们可以用它来过滤与另一个字符串或一系列字符“相似”的字符串。

例如,我们可以过滤包含字符串“Park”的地址。

SELECT address 
FROM melb 
WHERE address LIKE '%Park%' 
LIMIT 5; address
----------------
55a Park St
49 Park St
159 Park St
17 Parkhill Dr
93 Parkmore Rd

“%”代表任何字符。因此,我们正在过滤以任何字符开头和结尾的地址。它必须在某个地方包含“公园”。

like 运算符区分大小写。我们很可能用“公园”得到不同的地址。让我们试试。

SELECT address 
FROM melb 
WHERE address LIKE '%park%' 
LIMIT 5; address
-----------------
18 Spark St
14 Riverpark Dr
1 Riverpark Dr
23 Oakpark Dr

结论

文本数据是数据分析的重要组成部分。因此,我们需要有效的方法和技术来处理字符串。我们在本文中介绍的内容可以帮助您操作或更新字符串。您还可以使用这些函数从字符串中提取一条信息。

感谢您的阅读。如果您有任何反馈,请告诉我。

时间序列分析中 5 个必须知道的术语

原文:https://towardsdatascience.com/5-must-know-terms-in-time-series-analysis-bf2455b2a87?source=collection_archive---------1-----------------------

数据科学的基础部分

马克西姆·霍普曼在 Unsplash 上的照片

时间序列是按时间顺序排列的一系列观察或测量结果。谈论时间序列时,首先想到的画面通常是股票价格。然而,时间序列是普遍存在的。

一个地理位置的年降雨量、超市产品的日销售量、工厂的月耗电量、化学过程的每小时测量值都是时间序列的例子。

时间序列分析是数据科学的一个基本领域,有着广泛的应用。如果你成为这方面的专家,你获得数据科学家工作的机会可能会大大增加。

在这篇文章中,我们将回顾时间序列分析中 5 个必须知道的术语和概念。

1.确定性和随机过程

我们最好从区分确定性过程和随机过程开始讨论。

可以计算确定性过程中的时间相关值。例如,两年后你的储蓄账户里会有多少钱可以通过最初的存款金额和利率计算出来。我们不能真正谈论确定性过程中的随机性。

另一方面,随机过程基于随机性。我们不能计算随机过程中的未来值,但我们可以谈论未来值在一个范围内的概率。

2022 年加州的降雨量有 90%的可能性是 21 英寸。我的假设是基于加州降雨量的概率分布,当然,我的假设带有随机性。

从这个意义上说,随机过程可以被认为是按时间排序的随机变量的集合。那么,时间序列就是一个随机过程的实现。

2.平稳性

我们刚刚把时间序列定义为一个随机过程的实现。平稳性意味着生成时间序列的过程的统计特性不会随时间而改变。

在平稳的时间序列中,我们无法观察到均值或方差的系统变化。假设我们从平稳时间序列中取两个间隔,如下所示:

  • 从时间 t 到时间 t + N 的 N 次观察
  • 从时间 t + k 到 t + N + k 的另外 N 个观察值

这两个区间的统计特性非常相似。这两个区间的均值或方差没有系统性差异。

因此,平稳的时间序列不具备

  • 季节性
  • 趋势
  • 周期性波动

下图显示了一个平稳的时间序列。这些值可能是由随机噪声产生的,但我们没有观察到趋势或季节性。

(图片由作者提供)

下图显示了一个非平稳时间序列。我们可以清楚地观察到增加的趋势。

(图片由作者提供)

3.自协方差函数

我们首先要明白协方差是什么意思。

协方差是两个随机变量之间线性相关性的度量。它比较两个随机变量相对于其平均值(或期望值)的偏差。

随机变量 X 和 Y 之间的协方差公式:

X 和 Y 的协方差

如果 X 和 Y 的值以相同的方向变化(即它们都增加或减少),它们之间的协方差将为正。

如果你想了解更多,我试着更详细地解释协方差和相关性:

https://medium.com/swlh/covariance-vs-correlation-explained-34d1b4142e28

回到我们关于自协方差的讨论,回想一下时间序列是一个随机过程的实现,它可以被定义为一系列随机变量(X₁、X₂、x₃……)。

假设我们有一个平稳的时间序列,让我们从这个时间序列中取两个随机变量:

  • Xₜ
  • Xₜ ₊ ₖ

k 是这两个随机变量之间的时间差。这两个随机变量之间的自协方差函数为:

自协方差函数

因为我们假设平稳性,所以自协方差函数仅取决于时间差(即 k 的值)。平稳时间序列的性质在时间上移动时不会改变。

cₖ是滞后 k 时自协方差函数的估计

换句话说,这个时间序列的以下部分的属性是相同的。

  • 从 Xₜ到 Xₜ ₊ ₖ
  • 从 Xₜ ₊ ₙ到 Xₜ ₊ ₙ ₊ ₖ

4.自协方差系数

我们现在已经了解了自协方差函数。下一步是自协方差系数,它在时间序列分析中非常重要。

不同时滞的自协方差系数定义为:

无法精确计算有限时间序列的自协方差函数,因此我们计算估计值 cₖ,如下所示:

x-bar 值是样本平均值。

假设我们想要计算具有 50 个值(k=5,N=50)的时间序列的滞后 5 的自协方差系数。

上述等式的分子是针对 X₁对 X₆、X₂对 X₇、…、X₄₀对 X₄₅.而计算的然后,我们将所有组合的总和除以 50。

我们可以使用 acf 程序很容易地计算 R 中的自协方差系数。

让我们首先创建一个有 50 个值的随机时间序列。

random_time_series <- ts(rnorm(50))plot(random_time_series)

随机时间序列(图片由作者提供)

我们可以如下计算自协方差系数:

acf(random_time_series, type="covariance")

不同时滞的自协方差系数(图片由作者提供)

5.自相关函数

自协方差系数的值取决于时间序列中的值。不同时间序列的自协方差系数之间没有标准。

我们可以用自相关函数(ACF)来代替。滞后 k 处的自相关系数可计算如下。

自相关系数

我们用滞后 k 时的自协方差系数除以滞后 0 时的自协方差系数。

类似地,自相关系数的估计可以计算如下:

自相关系数的估计

自相关系数的值总是在-1 和 1 之间。

在 R 中,我们也可以使用 acf 例程来计算自相关系数。

acf(random_time_series)

ACF 图(图片由作者提供)

自相关系数总是从 1 开始,因为 C₀ / C₀等于 1。

蓝色虚线表示显著性水平。正如我们在图中观察到的,不同时间滞后之间的相关值非常低,因为我们随机生成了该数据。

ACF 图也称为相关图。

时间序列分析广泛应用于数据科学中。我们已经介绍了时间序列分析的 5 个基本术语和概念。

当然,这一领域还有更多的内容,因为时间序列数据有其自身的动态性,需要特定的分析技术。

你可以成为媒介会员来解锁我的作品的全部访问权限,以及媒介的其余部分。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

你应该考虑阅读的 5 本新的数据科学书籍

原文:https://towardsdatascience.com/5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d?source=collection_archive---------4-----------------------

了解这些书的最新情况

汤姆·赫曼斯在 Unsplash 上的照片

今天,有一百多万种方法可以学*你想要的任何新技能。你可以去 youtube 寻找视频,你可以去 Medium 阅读一些有用的文章,或者你可以听播客,边做其他事情边学*。

但是,自从有了书面语言以来,其中一种学*方法就是书本。在我看来,书籍是信息的瑰宝,无论你想学什么,都有可能有一本书或几本书在谈论它。书籍是我最喜欢和最可靠的信息来源之一,不管是旧的还是新的。

它们可能不是每个人都喜欢的学*方法,但我们都承认,在某个时候,我们都会回去找一本书来查找信息。书籍不会神奇地教你一项技能;就像任何其他形式的学*一样,你需要付出努力并愿意学*,这样你就可以充分利用任何书籍或学*资源。

可以说,数据科学拥有无限数量的在线和离线学*资源。而你只能预测,资源的数量会随着领域的变大而变大。在过去的几年里,有那么多的数据科学书籍以你喜欢的语言出版。

在本文中,我将向您推荐 2020 年和 2021 年出版的 5 本新的数据科学书籍,我觉得无论您是数据科学新手还是已经在该领域工作了一段时间,这些书籍都非常值得一读。

№1:数据科学:初学者数据科学完全指南 Sabra Deal

不可否认的是,数据科学每天都在不断吸引新的聪明人加入。老实说,我不认为这种趋势会很快放缓。这份清单上的第一本书是针对这个领域的初学者的。

我最喜欢这本书的一点是,当你需要学*的主要信息只用 62 页解释时,它是多么的轻。这本书并不是要给你成为数据科学大师所需的所有细节。相反,您可以将这本书视为一份详细的、高水平的数据科学路线图,供任何对什么是数据科学以及如何成为数据科学家感到困惑的人使用。

这本书涵盖了数据科学中使用的主要语言和术语,从数学、统计学到机器学*和人工智能。基本上,如果你对数据科学完全陌生,这本书是很好的第一步。

</5-online-data-science-courses-you-can-start-now-748e4a2b5403>

№2:测量和数据科学加博尔·佩李策

数据科学是一个广阔的领域,几乎在生活的所有方面都有应用,从最简单的推荐一本书或一部电影到医学和医疗保健中的关键应用。任何数据科学项目中使用的数据都是根据应用程序以不同方式收集的。

有些是从传感器收集的;其他的是从网上收集的。由于来源的多样性,有不同的方法对数据进行测量。测量和数据科学涵盖了数据和测量主题的所有基础知识和更多内容。

本书的不同章节介绍了匈牙利测量和信息系统部进行的研究,并总结了将经典和理论测量与数据处理相结合的结果。这本 371 页的书将让你熟悉所有你需要知道的数据科学中的度量。

№3:数据科学之旅:并行学* R 和 Python张乃龙

数据科学中最常用的两种编程语言是 Python 和 r。它们都是有用的语言,可以为该领域提供很多东西。然而,在数据科学项目的流程中,如果您使用 R 来执行某些任务,那么它们会更有效,反之亦然。

对于任何数据科学家来说,编写和理解用两种语言编写的代码都是一项有用的技能。这个列表中的下一本书可以让你同时学*和使用 R 和 Python,如果你决定独立学*它们,这会节省你大量的时间和精力。

这本 216 页的书将带你学*这两种编程语言,重点是数据科学,而不是抽象和一般的语法。您将学*如何用两种语言同时执行统计、优化、构建预测模型等。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

№4:由何西阿·德罗斯基撰写的初学者数据分析指南

正如我常说的,数据科学就是关于数据的,任何数据科学项目中的一个重要步骤是数据收集和分析。初学者数据分析指南专注于教你如何从不同来源收集原始数据,并从中提取有用的信息。

数据分析是您的项目做出正确预测并帮助您的客户或企业做出正确决策的关键流程。这本书将教授数据分析的所有基础知识,从数据挖掘到处理大数据和可视化结果。

此外,这些书涵盖了数据收集的一个重要方面,如网络搜集和使用机器学*来收集数据和形成替代数据集。最后,这本书深入探讨了数据管理和商业智能,总共 124 页。

№5:Charu c . Aggarwal 的《线性代数与机器学*优化》

促使人们远离数据科学的一个原因是,数据科学是建立在基础代数和概率概念之上的。对数学的恐惧是真实的,这就是为什么许多人会告诉我,他们不想成为数据科学家,因为数学太难了。

但是,数学是几乎所有技术领域的核心引擎,不仅仅是数据科学。数学,更准确地说是线性代数的一个主要用途是在机器学*模型的优化过程中。线性代数与机器学*优化涵盖了高效优化机器学*模型所需的所有线性代数。

这本书深入探讨了线性代数在机器学*优化中的应用。它涵盖了如何执行许多重要的应用程序,如奇异值分解(SVD),图形分析,矩阵分解,等等。它还涵盖了为什么机器学*模型需要优化,以及何时和如何这样做。这本书是我们清单上最长的一本书,将* 500 页。

</7-tips-for-data-science-newbies-d95d979add54>

外卖食品

当我第一次开始研究生学*时,我的导师在一个房间里有我所见过的最大的藏书。这些书不仅在书架上,而且到处都是。事实上,他找到了一种利用书籍来保持办公桌隐私的方法。这些书从门到他的椅子形成了一个迷宫。

记得有一次问他,为什么不捐旧书或者只用数字的。他说,对我来说,书不仅仅是学*一个话题的方式;而是学*一种新的人格。这就像你在窥探作者的内心。

从小到大,书籍——无论是印刷品还是电子书——一直是我生活中不可或缺的一部分。比起从其他途径获得的信息,我仍然更相信从书中获得的信息。今天,我列出了我认为非常有前途的 5 本书,我相信每个人都应该阅读的新数据科学书籍。

你需要了解的 5 个 NLP 模型

原文:https://towardsdatascience.com/5-nlp-models-that-you-need-to-know-about-754594a3225b?source=collection_archive---------16-----------------------

数据科学的很大一部分是与新技术和模型保持同步。

艾蒂安·吉拉尔代在 Unsplash 上拍摄的照片

语言,是我们生活中最复杂的方面之一。我们用它来相互交流,与世界交流,与我们的过去和未来交流。但是语言不仅仅是一种交流方式;这是唯一的方法,我们可以知道发生在我们时代之前的故事,并让我们的故事传到我们的后代。

因为语言在很大程度上是我们生活的中心,我们总是渴望计算机理解我们的语言,并以我们完全理解的方式与我们交流。这种欲望和计算机本身的反转一样古老。

这就是为什么研究人员孜孜不倦地驱动算法、建立模型和开发软件,以使计算机更容易理解我们并与我们交流。然而,在过去的几十年里,技术爆炸式发展,使得新算法比以往任何时候都更复杂、更准确、更简单、更好、更快。

作为一名数据科学家,工作的一个重要部分是跟上技术的最新发展,以便我们能够更好、更高效地开展工作。我们需要收集、分析和处理的数据量越来越大,但我们需要做得更快、更好。

实现这一目标的唯一途径是改变我们做事的方式;我们需要找到更好的方法,更复杂的方法,更先进的方法。那是研究人员的工作;作为数据科学家,我们的工作思路是了解最新进展,并知道使用它们的最佳方式。

本文将向您介绍 5 种自然语言处理模型,如果您想跟上该领域的发展并希望您的模型更准确地运行,您需要熟悉这些模型。

</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>

№1:伯特

BERT 代表来自变压器的双向编码器表示。BERT 是一个预先训练好的模型,旨在从单词的左右两边驱动单词的上下文。BERT 代表了 NLP 的一个新时代,因为尽管它非常准确,但它基本上是基于两个简单的想法。

BERT 的核心是两个主要步骤,预训练和微调。在模型的第一步中,用各种训练任务针对未标记的数据训练 BERT。这是通过执行两个无人监督的任务来完成的:

  1. Masked ML: 在这里,通过覆盖——屏蔽——一些输入标记来随机训练深度双向模型,以避免被分析的单词可以看到自己的循环。
  2. 下一句预测:在这个任务中,每一次预训练各设定 50%的时间。如果一句 S1 后面跟着 S2,那么 S2 就会被贴上IsNext的标签。但如果 S2 是一个随机的句子,那么它将被标记为NotNext

完成之后,就是微调的时候了。在这一阶段,模型的所有参数都将使用标记数据进行优化。这个标记的数据是从“下游任务”中获得的每个下游任务都是具有微调参数的不同模型。

BERT 可以应用于很多领域,例如命名实体识别和问答。如果你想使用 BERT 模型,你可以使用 TensorFlowPyTorch 来实现。

№2: XLNet

XLNet 由谷歌和卡内基梅隆大学的一组研究人员开发。它是为处理常见的自然语言处理应用而开发的,如情感分析和文本分类。

XLNet 是一个广义自回归模型,经过预训练,可以同时获得 Transformer-XL 和 BERT 的优点。XLNet 利用了 Transformer-XL 的自回归语言模型和自动编码或 BERT。XLNet 的主要优点是它被设计成具有 Transformer-XL 和 BERT 的优点,而没有它们的局限性。

XLNet 包含了与 BERT 相同的基本思想,即双向上下文分析。这意味着它会查看正在分析的令牌之前和之后的单词,以预测它可能是什么。XLNet 超越了这一点,计算了一个单词序列的对数似然性,涉及到它的可能排列。

XLNet 避免了 BERT 的局限性。它不依赖于数据损坏,因为它是一个自回归模型。实验证明,XLNet 的性能优于 BERT 和 Transformer-XL。

如果你想在你的下一个项目中使用 XLNet,开发它的研究人员在 Tensorflow 中发布了 XLNet 的官方实现。另外,XLNet 的一个实现可以在 PyTorch 上获得。

第三名:罗伯塔

RoBERTa 是一个自然语言处理模型,它建立在 BERT 的基础上,专门用来克服它的一些弱点并增强它的性能。罗伯塔是脸书·艾和华盛顿大学的研究人员进行研究的结果。

研究小组致力于分析双向上下文分析的性能,并确定了一些可以通过使用更大的新数据集来训练模型并删除下一句预测来增强 BERT 性能的更改。

这些修改的结果是 RoBERTa,它代表稳健优化的 BERT 方法。BERT 和 RoBERTa 之间的差异包括:

  1. 160GB 的大型训练数据集。
  2. 更大的数据集和迭代次数增加到 500K 导致训练时间更长。
  3. 移除模型的下一句预测部分。
  4. 更改应用于定型数据的掩码 LM 算法。

RoBERTa 的实现作为 PyTorch 包的一部分在 Github 上开源。

№4:阿尔伯特

艾伯特是另一个伯特修正模型。在使用 BERT 时,谷歌的研究人员注意到预训练数据集的大小不断增加,这影响了运行模型所需的内存和时间。

为了克服这些缺点,谷歌的研究人员推出了一个更轻版本的 BERT,或如他们所称的,ALBERT。ALBERT 包括两种方法来克服 BERT 的内存和时间问题。这是通过分解嵌入式参数化并以跨层方式共享参数来实现的。

此外,ALBERT 包括自我监督损失来执行下一句预测,而不是在预训练阶段建立该预测。这一步是为了克服 BERT 在句子间连贯性方面的局限性。

如果你想体验 ALBERT,谷歌开发的原始代码库可以在 Github 上的谷歌研究知识库中找到。您也可以使用使用 TensorFlowPyTorch 的实现 ALBERT。

№5:结构伯特

也许到目前为止最新的扩展或 BERT 是 StructBERT 。StructBERT 是由阿里巴巴研究团队开发和构建的 BERT 的新增强模型。到目前为止,BERT 只考虑了文本的句子级排序,而 ALBERT 通过使用单词级和句子级排序克服了这一点。

这些技术包括在我们执行预训练过程时捕获句子的语言结构。他们对 BERT 的主要扩展可以概括为两个主要部分:一是单词结构,二是句子结构目标。

ALBERT 通过在掩蔽 LM 阶段混合特定数量的标记,提高了 BERT 预测正确句子和单词结构的能力。

使用 ALBERT 进行的实验表明,它在不同的自然语言处理任务中表现得比 BERT 好得多,例如 BERT 被开发用于的原始任务,包括问答和情感分析。

BERT 的源代码还没有以开源的形式提供,研究团队将来把它放在 Github 上的意图还不清楚。

外卖食品

总的来说,数据科学领域,尤其是自然语言处理领域,发展非常迅速。有时,对于已经在该领域工作了一段时间的有经验的数据科学家和打算从事数据科学职业的初学者来说,这种快速的步伐可能会令人不知所措。

老实说,阅读研究论文从来都不是一件有趣的事情;它们很长,故意以复杂的格式编写,并且通常不容易导航。这就是为什么我总是欣赏一篇概括算法的主要思想以及何时可以使用它们的直截了当的文章。

</7-tips-for-data-science-newbies-d95d979add54>

在本文中,我经历了 5 个自然语言处理模型,它们比之前的模型更先进、更复杂、更准确,并且只是朝着更好的模型迈出了一步。

我希望这篇文章能让你了解外面有什么,不同的模型是如何工作的,也许,仅仅是也许,激发了一个新的项目想法,在你读完这篇文章后,你可以马上投入进去。

你应该知道的 5 个 NLP 主题和项目!

原文:https://towardsdatascience.com/5-nlp-topics-and-projects-you-should-know-about-65bc675337a0?source=collection_archive---------9-----------------------

应该添加到简历中的五个高级自然语言处理主题和项目想法

照片由阿尔方斯·莫拉莱斯Unsplash 拍摄

自然语言处理(NLP)是人工智能最吸引人和最迷人的方面之一。随着*年来 NLP 的不断演变和发展,了解最先进和高质量的主题是必不可少的,每个数据科学爱好者或有志者都必须关注这些主题,以在该领域取得更高的成功率。

由于自然语言处理领域的进步,软件和人类之间的交互变得越来越容易。人工智能程序倾向于计算、处理和分析大量自然语言数据,以向用户提供得体的语义和对用户的准确回复。

尽管在自然语言处理领域面临着许多挑战,比如让人工智能理解句子的真正语义,但我们已经取得了巨大的进步,在自然语言处理领域取得了长足的进步。

如果你对 Python 和数据科学的更棒的项目感兴趣,请随意查看下面的链接,这里涵盖了 2021 年及以后的 15 个这样的最佳项目。在这篇文章中,我们将集中讨论 NLP 的五个主题和项目,每个热衷于这个主题的人都应该了解它们,并致力于达到完美!

</15-awesome-python-and-data-science-projects-for-2021-and-beyond-64acf7930c20>

1.带 ML 和 DL 的 NLTK

照片由苏珊尹Unsplash 拍摄

用于解决许多类型问题的最基本的自然语言处理(NLP)工具之一是 NLTK 库。自然语言工具包(NLTK)为解决大量自然语言处理问题提供了许多实用工具。NLTK 库非常适合基于语言的任务。它为分类、标记化、词干化、标记、解析和语义推理等任务提供了广泛的选项。

将这个库与机器学*和深度学*结合使用的最大好处是,你可以创建大量高质量的项目。NLTK 库模块的特性非常广泛。使用这个库可以做很多事情,然后使用单词包、术语频率-逆文档频率(TF-IDF)、单词到向量以及其他类似的方法来处理这些任务和问题。

下面是一个示例代码,展示了如何为大型数据集创建数据集和文章向量,然后利用超参数调整以及 NLP 技术和机器学*算法,如朴素贝叶斯、决策树和其他类似的机器学*方法,轻松解决这些复杂的问题。

样本代码:

vectorizer = CountVectorizer(min_df=10,ngram_range=(1,4), max_features=50000)
vectorizer.fit(X_train['essay'].values) *# fit has to happen only on train data*

*# we use the fitted CountVectorizer to convert the text to vector*
X_train_essay_bow = vectorizer.transform(X_train['essay'].values)
X_cv_essay_bow = vectorizer.transform(X_cv['essay'].values)
X_test_essay_bow = vectorizer.transform(X_test['essay'].values)

要了解更多关于如何用正则表达式简化自然语言处理项目的信息,我强烈推荐大家查看下面提供的链接。它涵盖了你如何利用四个基本的正则表达式操作来对你的项目的论文和文本数据集进行大部分预处理。

2.预测系统

耐莉·安东尼娅杜Unsplash 上拍摄的照片

在人工智能的帮助下完成的最重要的任务之一是预测在下面的一行或多行中将出现的下一个单词或句子。这项任务是机器学*和深度学*中自然语言处理(NLP)的更基本和有用的功能之一。

为了解决机器学*中预测并发或最接*单词的后续任务,可以利用相似性的概念来实现期望的结果。距离较小的同现词向量是相通的。像支持向量机(SVMs)、决策树和其他类似方法这样的机器学*算法可以用于解决像下一个单词预测这样的任务和其他这样的不可区分的任务。

解决这些复杂问题的更流行的方法是确保我们有效地使用深度学*的概念来解决它们。使用递归神经网络构建神经网络结构的方法是解决下一个单词预测任务的一种常用方法。然而,由于爆炸和消失梯度的问题,rnn 的其他替代方法如长短期记忆(LSTM)被用作处理这些任务的惊人的替代方法。

解决这些任务的独特方法包括利用一维卷积神经网络来创建与单词向量的链接。我建议观众查看我的下一个单词预测项目,我在几个堆栈 LSTMs 的帮助下实现了下面的过程。

3.聊天机器人

Unsplash 上的 La Victorie 拍摄的照片

自然语言处理最流行的应用之一是聊天机器人的使用。聊天机器人被大多数主要的科技巨头、大公司、甚至更小的网站初创公司雇佣来问候人们,向访问者、观众或观众介绍公司的基本方面,还回答第一次访问网站的访问者可能会有的一些常见问题。

它们也有助于澄清用户在浏览网站时可能遇到的一些问题。聊天机器人也可以为大多数公众受众部署更通用的用例。最流行的虚拟助手像谷歌助手,Siri,Alexa 等。和许多其他软件一样,也具有充当聊天机器人的能力。

聊天机器人的对话既可以通过传统的在线短信方式进行,也可以通过更现代的语音翻译方式进行。当前一代聊天机器人的使用案例正在快速增加。越来越多的人和公司也在尝试实现它们。在 NLP 领域,聊天机器人的兴起是一个极其重要的场景,也是每个该主题的爱好者必须期待实现的事情。

我强烈建议检查一下这些聊天机器人的各种工作方法。有几种深度学*算法和方法可以在这些聊天机器人上获得理想的结果。一种独特的方法是通过利用一维卷积神经网络来构建这些聊天机器人。查看下面提供的文章链接,获得对以下内容更直观的理解。

4.变形金刚(电影名)

照片由阿瑟尼·托古列夫Unsplash 拍摄

变形金刚是当前深度学*时代最重要的架构之一。他们的目标是更轻松地解决任务的排序问题。他们有能力保留长长的数据链。因此,它们在处理长距离序列时具有高范围的可靠性。他们利用自我注意的概念来解决复杂的任务,而不使用序列对齐的 RNNs 或卷积。

变形金刚是自然语言处理领域的创新发展。他们有能力更轻松地解决复杂的任务,如机器翻译。机器翻译的主题和项目概念将在本文的下一部分进一步讨论。

这些转换器还可以用于许多任务,如信息检索、文本分类、文档摘要、图像字幕和基因组分析。我强烈建议对变形金刚这一主题进行深入的研究和学*,以获得对变形金刚这一现代演变的进一步直觉和理解。

5.机器翻译

托马斯·凯利在 Unsplash 上的照片

当你试图和一个来自另一个国家的人交谈,而你们都不懂共同语言时,通常需要使用翻译来沟通并同意特定合同或交易的条款。每当你想用外语交流时,你可以利用谷歌翻译功能将句子从一种语言转换成另一种语言。

在键入一个特定的英语句子并要求 Google translate 将其转换为德语时,翻译人员通常会很好地将英语句子转换为德语句子,而不会改变句子的实际语义。这项任务被称为机器翻译。

机器翻译是自然语言处理中最有用和最重要的任务之一。每个爱好者都必须在 TensorFlow 库或 Pytorch 库的帮助下完成机器翻译任务。通过使用这些库,您必须尝试构建一个序列到序列模型,该模型可以实现解决机器翻译问题的任务,同时达到尽可能高的准确性。有许多令人惊奇的现代方法正在被开发来完成这些任务。

结论:

照片由 freestocksUnsplash 拍摄

自然语言处理是人工智能中最好学的科目和子科目之一。有这么多的研究论文和文章正在不断发表。每天都有快速的发展和广泛的研究。在接下来的几年里,以下领域将会有更多惊人的发现。

在本文中,我们讨论了每个爱好者都应该了解和探索的五个自然语言处理(NLP)概念和项目主题。它们构成了这些现代 NLP 应用的最关键和最重要的方面。这些中等先进领域的需求和重要性每天都在迅速增加。因此,这段时间是有志之士投资和学*更多知识的最有效时期之一。

在我看来,所有对自然语言处理领域感兴趣和充满热情的观众都应该对这些主题进行更多的研究,并尝试了解这些概念的重要方面。在获得了相当数量的理论知识后,我会高度鼓励观众投入到现实世界中,开始自己实施这些项目。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</7-tips-to-crack-data-science-and-machine-learning-interviews-38b0b0d4a2d3> </8-best-visualizations-to-consider-for-your-data-science-projects-b9ace21564a> </15-tips-to-be-more-successful-in-data-science-c58aa1eb4cae>

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

让数据工程师喜欢为你工作的 5 种不明显的方法

原文:https://towardsdatascience.com/5-non-obvious-ways-to-make-data-engineers-love-working-for-you-1a2d28f5b502?source=collection_archive---------38-----------------------

意见

以及如何在这个过程中成为更好的数据领导者。

图片由米切尔罗未拉上提供。

“雇数据工程师是小菜一碟!”说从来没有人。

而且理由很充分。

虽然招聘工程师从来都不容易,但数据工程师是一个全新的领域。尽管数据工程职业飞速发展,雇佣数据团队的骨干却从未如此具有挑战性。

为什么?在我看来,这可以归结为两个关键因素:

  1. 供不应求 。数据生态系统正在快速发展,越来越多的公司在数据上下大赌注。这意味着数据团队要么培训现有的分析师和科学家来构建和扩展基础设施,要么从外部寻找来填补这些关键角色。不管怎样,它们都不够。
  2. 很难找到合适的人选。“数据工程师”这个头衔是新生事物,但是数据工程的工作已经存在很久了。多年来,数据科学家、分析师、数据库工程师、数据架构师和后端工程师一直在处理 构建和扩展数据平台 所需的接收、转换、测试和基础设施工作;如果你没有读过 Maxime Beauchemin 关于这种现象的里程碑式文章,我强烈推荐。考虑到构成数据工程思想共享的背景的多样性,寻找合适的候选人可能会很困难,对于候选人来说,仅根据工作描述来确定他们是否适合您的团队会更加困难。

抛开薪酬不谈,在招聘优秀的数据工程师时,最重要的是加入你的公司是否会让他们在职业生涯和公司本身取得成功。一天结束时,有竞争力的工资和令人印象深刻的标志可能会让你的数据工程师进门,但这并不意味着他们会留下来。

以下是一些最佳数据工程领导者吸引和留住顶尖人才的 5 种非显而易见的方式:

您衡量客户影响

我对传统的工程职业阶梯最大的不满之一是,晋升过程往往有利于大胆的人,而不总是更好的。我的意思是,高可见性的项目,而不是幕后或基础设施工作,这些工作同样重要,但往往比功能工程需要更多的时间和资源,特别是当你在一个精益团队中时。

类似地,与分析或数据科学工作相比,数据工程工作经常得不到认可或重视。(如果你还没看,我强烈建议你看一下这篇关于这个话题的辛辣黑客新闻跟帖对应文章。你大概知道我说的是哪一个……)。

作为数据工程领导者,您如何克服这一障碍?它始于对客户的影响。在您开始招聘之前,确定有形的度量标准,将数据工程工作与其对团队内部客户的影响对应起来。人们希望在他们的努力受到重视的地方工作,围绕数据工程在更广泛的数据团队战略中所扮演的角色,设定利益相关者和领导层的一致性是至关重要的。

阿迪达斯 大数据平台工程总监 Javier Pelayo 称,与你的行政领导一起设定基准不仅需要强大的愿景,还需要将数据平台和其他数据产品的影响与公司更大的技术和业务目标联系起来。

一种测量方法?关于降低运营开销和加快数据产品价值实现的指标。

“最后,如果您提供了任何价值,并且最大限度地减少了分析团队和其他数据用户的运营开销,那么就很容易量化数据工程对利益相关者和更广泛的公司的价值。从那时起,您团队的数据产品将会得到认可和采用。”

对要跟踪的指标的其他建议:

  • 你的数据工程师为公司节省了多少时间/金钱/资源?
  • 他们的工作如何提高重要数据产品的价值实现时间?
  • 他们的工作在哪些方面影响了更大的工程或分析策略?

有了这些数据点,你就能更好地向潜在雇员强调数据工程工作是如何被优先考虑、被推崇的,以及对你的公司的成功有多么重要。

他们可以与您的公司一起成长

像许多技术专业一样,数据工程正在快速发展。新的工具和最佳实践不断涌现,最优秀的工程师希望投入时间来跟上最新的发展和技术。而且,就像任何潜在的新员工一样,数据工程师会想知道他们将如何与您的公司一起成长。

如今,数据工程师的责任是拥有越来越多的端到端数据转换工作流,从摄取到建模,需要对空间和专业技能有更广泛的理解。

Ebunoluwa Oke ,加拿大食品配送市场的数据产品经理,SkipTheDishes(Just Eat take away . com 的一部分),正在与数据产品和技术团队合作,领导她的团队迁移到分散数据架构,由嵌入式从业者负责从头到尾拥有整个数据工程工作流程。

“我们现在和未来雇佣的任何数据工程师都需要能够完成接收数据和创建数据模型的端到端流程,因为我们希望工程师了解数据的背景,不仅仅是‘哦,这看起来不对’的意思,还包括数据如何被使用以及谁在使用它的背景,”她说。

随着责任的增加,重要的是潜在雇员知道他们的工作将得到认可,并直接与更广泛的数据团队的底线 KPI 和成功指标挂钩。对许多公司来说,情况并非如此。毫不奇怪,数据工程师经常被称为数据科学的“管道工”。毫无疑问,这是一个重要的角色,但肯定被低估了,这个角色可以让您的管道(生产线)保持运行。

投资职业发展不仅仅是写博客文章和在会议上发言;这是为你的直接下属建立一个职业生涯,他们可以随着团队的扩大而成长。

您的数据生态系统易于导航

如今,企业自称“数据驱动”已经是老生常谈了经验丰富的数据工程师可能已经亲眼看到,一家公司可能会大谈数据,但实际上并没有努力教育员工如何使用数据产品,甚至没有授权自助访问数据。

如果对何处查找、如何解释以及如何解决基本数据需求没有一些基本的了解,内部数据消费者可能会通过一次性请求或最后一刻的需求占用您的数据工程团队的大量时间。虽然提供指导和监督治理通常是工作描述的一部分,但最优秀和最聪明的数据工程师将了解一家空谈公司和一家通过投资数据素养和利用数据平台实现跨领域上下文理解的公司之间的差异。

挪威公共道路数据平台 Lead with Norwegian Public Roads 的 Lars Meisingseth 表示,为强大的数据发现和问责文化奠定基础,将帮助新的数据工程师和分析师在开始工作后取得成功。

“我们正在开发和操作一个社会框架的使用过程中,以辨别哪些数据集是重要的,哪些是不重要的,以及“谁在使用它?多久用一次?这种方法的使用频率如何?内部和外部的潜在价值是什么?“等等。确定哪些数据应该优先处理并在整个组织内共享,哪些数据可能会被否决。这也会因领域和业务用例而异,但通过利用面向领域的数据平台,将更容易让团队自己做出这些判断。”

这也有助于培养重视数据的文化——当您的数据工程师在一个他们的贡献得到认可的环境中工作时,他们更有可能对与团队其他成员一起成长感到满意和兴奋。

您投资了正确的工具

另一个常见的挑战?使用传统或过时的解决方案尝试构建“现代数据堆栈”

不要误解我。你不必成为 Airbnb网飞优步建立一个好的数据平台 并使用花哨的工具。从本质上讲,数据平台只是所有数据的中央存储库,处理数据的收集、清理、转换和应用,以生成业务洞察。但这只有在你拥有合适的技术和流程来大规模实施的情况下才有可能。

除了构建数据平台的商业案例(增加创新、竞争优势、分散数据所有权、扩展数据分析等。),当谈到使用你的数据平台及其底层技术作为数据工程师的招聘工具时,有一个强有力的论点。

最*,有很多关于是使用开源还是闭源解决方案的讨论(最* 雪花数据块 营销团队之间的对话真正揭示了这一点)。在我看来,无论你站在哪一边,都是开源的(Apache Spark,Airflow,dbt 等。)和同类最佳的 SaaS 解决方案(雪花、红移、Fivetran、Looker、Tableau 等)。)是你公司的优秀营销工具。事实上,大多数数据工程团队投资于两者的混合。

最终,您的从业者希望工具和技能集能够(1)随着他们的职业发展,(2)使他们的生活更容易,以及(3)降低复杂性,选择是走开源还是 SaaS 的路线很少是二元的。在选择新的解决方案或技术时,对话应始终寻求回答:“这是适合工作/我的团队的工具吗?”有时这是开源,有时这是 SaaS——这真的取决于你想要实现什么,以及你愿意投资什么类型的资源。

他们有自主权

一个好的数据工程领导者会给他们的团队以他们感兴趣的方式设计、构建和扩展项目的代理和影响力,并推动他们的技术和协作边界。

通常,这可以归结为确保他们对自己所做的事情有主人翁感,并且他们所做的事情将推动他们的职业发展,增加他们在公司跨职能团队中的曝光率。

查德·桑德森,车队的产品和数据平台负责人指出,优秀的数据工程经理会给他们的团队成员一些工作,这些工作不仅让他们感兴趣,还会给他们带来挑战。

“如果你的数据工程师只是运行管道,这不是很有趣的工作,”桑德森说。“但如果他们正在构建支持数据平台的系统和技术,那就更有说服力了。”

鼓励自主性始于建立一种信任文化,相信你的团队有能力拥有和执行委派给他们的项目,并在他们加入你的公司之前,就他们想做的事情征求他们的意见。通过保持沟通渠道的畅通,主动寻求反馈,甚至在招聘过程中鼓励讨论,你就可以为合作、信任的关系打下基础,无论他们是否选择在你的公司工作。

数据世界很小。你永远不知道下一次你们会在什么时候相遇——见鬼,也许有一天他们会成为你的经理。

他们觉得受到了挑战

这就引出了我的下一个观点:如果工程师所负责的工作对他们没有挑战性,无论是在技术层面还是文化层面,工程师都不太可能加入你的团队。无论是推出关键的新功能,领导 RFC,还是作为新工具实施的联系人,确保他们突破自己的专业界限都至关重要。

确保您的工程师从事具有挑战性并让他们兴奋的项目的一个重要部分?尽可能自动化机械或手工工作。

开发人员和站点可靠性工程师(数据工程师的前身,在很多方面)之间有一个共同的说法,即可靠系统的目标是 减少手工劳动 。在数据工程的上下文中,手工劳动可能包括处理来自下游涉众的特别查询、单元测试、数据质量检查和文档。所有这些活动,以及更多的活动,都可以通过正确的方法实现自动化。

正如一家电子商务公司的数据工程主管恰当地告诉我的那样,数据工程师不会整天进入现场测试管道。

“工程师不喜欢这项工作——这不是他们进入这个领域可能首先要完成的创新性问题解决方案。每当 API 发生变化时,每周都要编写用例测试,这可能很平常。”

特别是高级或职员工程师将会发现自动化的巨大价值,这使得他们可以将时间和精力花在设计、构建和创新上,而不是维护和排除现有系统的故障。端到端数据谱系、 数据可观察性数据发现 工具可以帮助您构建更加可靠和容错的数据堆栈,同时减少手动测试和文档编制的工作量。根据您的需要,一些解决方案允许 ML 生成的可观察性和定制的规则设置。根据您的需要,一些解决方案允许 ML 生成的可观察性和定制的规则设置。

其他团队选择投资自动化数据接收(即 Fivetran 或 Stitch)或增强分析。无论如何,让您的数据工程师专注于对他们的职业生涯和专业成就产生影响的事情,而不是平凡或重复的事情。

雇佣下一代数据工程师

建立一个数据工程团队并不容易,尤其是考虑到这个行业发展的速度,但在我看来,这正是这种经历如此有益的原因——对经理和新员工都是如此。

创建一个能够吸引最优秀、最聪明的数据工程师的环境,将使您在招聘时获得优势,并为未来几年蓬勃发展的数据组织奠定基础。

我错过了什么吗?请随时联系Lior GAVI sh或蒙特卡洛团队的其他成员,分享您的见解、反馈和建议。

我的 5 个最佳数据科学组合项目

原文:https://towardsdatascience.com/5-of-my-best-data-science-portfolio-projects-8cd7f81f1b1?source=collection_archive---------3-----------------------

我做过的最好的数据科学项目

Bram Naus 在 Unsplash 上拍摄的照片

作为一名初学者进入数据科学行业,你需要证明你拥有从事这项工作所必需的技能。

如果你没有任何正式的数据科学资格,最好的方法是建立数据科学项目。

当你在你的投资组合中展示这些项目时,它会给潜在的雇主信心,让他们相信你能够胜任这份工作。

然而,并不是所有的数据科学项目都适合放在你的投资组合中。有些项目太普通太简单了——比如泰坦尼克号数据集上的机器学*,或者波士顿房价数据集上的线性回归

展示这样的项目实际上对你的投资组合弊大于利。他们给人的印象是,你是一个新手,只学过初级数据科学课程,无法展示其他技能。

那么,你应该在你的作品集里展示什么样的项目呢?

展示讲述故事的项目。做一些你热爱的事情。

人们喜欢故事。

招聘人员会收到数百份求职简历。

要脱颖而出,你需要展示一些能吸引他们注意力的东西。

如果你的招聘人员是非技术人员,他们不会理解你 GitHub 存储库中的一堆代码。

你需要建立一些他们可以互动的东西,或者借助数据讲述一个他们可以理解的故事。

这将使你的申请在数百份简历中脱颖而出。

这也表明你对自己的工作充满激情。

我过去从事过无数的数据科学项目。

当我还是编程新手的时候,我就开始了其中的一些。老实说,大部分都很糟糕。

我回顾我的一些项目,意识到我的编码实践很糟糕。我本可以做得更好的。

然而,正是这些项目帮助我获得了第一份数据科学实*工作。这些也是我仍然收到消息和问题的项目。因为人们记得他们。它们是独一无二的,它们讲述了一个故事。

项目 1: 好莱坞女性形象分析

克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片

我想出了这个项目的想法时,看了一个节目名为简的处女。

节目中有一个小插曲谈到媒体中的性别差异。

有一种测试被称为 Bechdel 测试,用来衡量女性在小说作品中的代表性。只有满足以下条件,影片才能通过 Bechdel 测试:

  • 电影里至少要有两个女人
  • 他们互相交谈
  • 关于一个男人以外的东西

我认为通过分析来回答以下关于好莱坞电影的问题会很有意思:

  • 女性导演的电影通过 Bechdel 测试的几率更高吗?
  • 电影的类型对它能否通过 Bechdel 测试有影响吗?
  • 随着时间的推移,女性在好莱坞的代表性有所提高吗?
  • 通过 Bechdel 测试的电影是否比未通过测试的电影评级更高?

这是我的第一个真实数据分析项目。我开始借助互联网上提供的多个数据集来回答所有这些问题。

我展示了数据清理、操作、分析和可视化等技能。

一旦我完成了这个项目,我就写了一篇关于它的文章,并且把所有的代码和结果都发布到了网上。

项目 2: 一款区分真假面孔的应用

作者形象

我被人工智能应用程序创造虚假面孔的能力迷住了。

在这个项目中,我收集了一个真实和虚假人脸的数据集。然后,我做了一个测验,让你辨别一张脸是假的还是真的。

你可以参加我的测验,只要你愿意。每次刷新页面或点击next,系统将随机选择一幅图片并呈现给你。你所需要做的就是猜测它是一个人工智能生成的图像还是一个真实的图像。

演示的技能:Javascript、HTML、CSS、Flask、Python

项目 3: 对 YouTube 不和的情绪分析

Pablo RebolledoUnsplash 上拍摄的照片

从 12 岁开始,我就喜欢看 YouTube 视频和戏剧频道。

最*,一场巨大的争议浮出水面,涉及到两个受欢迎的 YouTubers 用户——詹姆斯·查尔斯和塔蒂·威斯布鲁克。

这两位有影响力的人都发现自己陷入了一场非常公开的纠纷,这场纠纷导致他们失去了数百万粉丝和品牌交易。

为了更好地了解公众对他们的看法,我认为对这两个有影响力的人进行分析会很有趣。

我从 Twitter 和 YouTube 上搜集数据,建立了一个情绪分析模型,以了解公众对这场争斗的看法。我想看看人们站在哪一边,以及人们对这场争论的看法是否会随着时间的推移而改变。

展示的技能:数据采集、API 使用、Python、情感分析、数据可视化

项目四:名人形象识别模型

作者图片

有没有想过你的名人模仿者是谁?

你只需要上传一张你自己的照片,然后点击“预测”按钮。

深度学*模型将为你提供与你最相似的名人的预测。

展示的技能:Javascript、HTML、CSS、Flask、Python、模型部署、Keras

项目 5: 用 Python 进行客户细分

Unsplash 上的粘土银行图像

该项目是列表中唯一一个具有业务应用程序的项目。

我在 Kaggle 上使用了一个数据集,并提出了一个 K 均值聚类模型,以得出不同的消费者细分市场。

这是一个非常流行的无监督学*数据集,许多人已经用它来建立分割模型。

为了将我的分析与其他分析区分开来,我分析了最后构建的不同部分。我根据细分市场的行为建立了消费者档案,并针对每个细分市场的客户提出了不同的营销策略。

展示的技能:Python,K 均值聚类,PCA,聚类解释,数据分析

结论

Coursera 上有超过 400 万人注册了吴恩达的机器学*课程。

每一个有抱负的数据科学家都会在简历上有一门这些入门级别的机器学*课程。

然而,如果你不能在现实生活中应用你所学的技能,这些课程就没有任何意义。

它们也不足以向招聘人员证明你有胜任这份工作的必要技能。

要让自己与众不同,你需要打造一些与众不同的东西。构建一个最终用户可以使用的应用程序,或者围绕您的项目写一篇博文。

创建这些项目并在网上分享帮助我接触到来自世界各地的人们。

由于这些项目,我收到了许多工作邀请、合作机会和自由职业邀请。

参与这些项目还帮助我提高了数据科学和编程技能。

每当我想出一个项目想法时,我都会写下构建项目所涉及的不同步骤。然后,我画一张我想要的最终产品的图。

一路上我遇到了很多困难,但是我从克服困难中学到了很多。事实上,我的大部分编程知识都来自我参与的这些个人项目。

本文到此为止,感谢阅读!

用心创造,用心建设——克里斯·伊斯兰大教堂

5 我最喜欢的朱莉娅·麦可斯

原文:https://towardsdatascience.com/5-of-my-favorite-julia-macros-528d2dd8f0e3?source=collection_archive---------20-----------------------

我最喜欢在 Julia 编程语言中使用的一些宏的概述!

(src =https://pixabay.com/images/id-637062/

介绍

Julia 编程语言为数据科学领域带来了全新的特性集。而且很多便利的特性已经被重新认识到,尤其是在数据科学应用中,至少对我来说是这样。我非常喜欢 Julia 编程语言中来自 Lisp 和元编程世界的一个特性,那就是添加了宏。这些不仅方便元编程,而且在更广泛的意义上也非常适合使用。它们可以作为使用某些函数的快捷方式,无需调用就可以自动将值转换成表达式。因为我非常喜欢 Julia 中的宏,所以我想展示一些我最喜欢的宏,您可能想在自己的 Julia 编程中尝试一下!

笔记本

№1:代码 _llvm

code_llvm 宏在我看来棒极了。它可以用来查看 Julia 在后端使用的实际 llvm 代码。这对于从底层角度分析 Julia 代码的性能非常有用。此外,我认为这是一个学*更多关于 Julia 编译器及其工作原理的好方法。该宏采用一个方法或表达式,并返回用于获取返回结果的 llvm 代码。例如,考虑以下函数:

function ThisIsAFunction(n)
    n = n + 5
    n - 1
    for z in 1:n
        n -= 1
    end
    return(n)
end

这个函数会取任何值,然后用增量的方法把它减 1 到零。这是在加上 5,然后减去 1 之后的结果,所以这是一个非常愚蠢的函数,但是它将演示 code_llvm 宏的循环和操作:

[@code_llvm](http://twitter.com/code_llvm) ThisIsAFunction(20)

作者图片

№2:断言

下一个我非常喜欢的宏是 assert 宏。该宏用于在不满足条件时提供快速抛出。这主要用于测试。我不确定我是在哪里听到的,也许是在学校,但是你不应该在代码中使用 assert 来抛出。我必须承认,我不确定这句话的有效性,也不知道我最初是从哪里听到的——但我怀疑我是从我的教授那里听到的。无论如何,我们可以通过首先提供一个需要满足的条件,然后提供一个错误语句来使用这个宏。也许我们不应该在真正的包开发中使用它,而应该在测试中使用它的原因是因为它的错误返回总是相同的,只有字符串文本识别什么是错误的。使用这个宏时,抛出的总是 AssertionError。考虑以下阵列:

y = [5, 10, 15]
x = [5, 10]

假设我们希望这些长度相同:

[@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"

作者图片

№3:宏扩展

Julia 的 Base 中另一个非常酷的宏是 macroexpand 宏。此宏可用于将宏视为一组符号。符号在很多方面都是 Julian 元编程的骨干,这是一种通过将宏制作成符号来使事情更上一层楼的简单方法。这可以对宏有一个更广泛的理解,因为乍一看,人们可能把宏看作是功能等同物,但事实并非如此。有了这个宏,就很容易明白为什么宏在 Julia 的元编程中如此盛行。

[@macroexpand](http://twitter.com/macroexpand) [@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"

如果我们将其断言为一个新的变量 alias,然后检查其类型,我们会看到这会返回一个表达式:

z = [@macroexpand](http://twitter.com/macroexpand) [@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"
typeof(z)

这意味着我们可以将这个表达式与其他元编程方法一起使用,比如 eval:

eval(z)

№4:测试宏

Julia 中的测试是用一种完全不同于其他编程语言的方法来完成的。如果你问我,我主观上喜欢它们的实现,因为我认为这是保持测试有组织的好方法。如果您想了解更多关于如何测试 Julia 包的内容,我实际上写了一整篇文章,您可以在这里查看:

[## 如何用 Julia 测试你的软件

towardsdatascience.com](/how-to-test-your-software-with-julia-4050379a9f3)

Julia 中的测试利用宏使测试变得更快更方便。这也使得测试包端变得更加容易,因为你的测试交给 Julia 是一个表达式,这意味着它可以以任何方式分析和运行它,而不需要解析你的代码。在 Julia 中,我们可以通过使用@testset 宏并提供一个名称来启动一个测试集:

[@testset](http://twitter.com/testset) "Numbers" beginend

然后我们可以通过使用 test 宏来测试一些条件,它类似于 assert,但会将其布尔值返回给 testset 宏。

using Test
[@testset](http://twitter.com/testset) "Numbers" begin
   x = 5
    y = 5
    [@test](http://twitter.com/test) x == y
end

当我们运行这个程序时,我们得到了一些非常酷的、组织良好的、全面的关于我们的测试是如何运行的输出。这是非常方便的,有这一切自动生成到一个表格,并与我们的集合的标题组织,没有打印的必要。看一看:

№5:评估聚合

Julia 库中另一个很棒的宏是 evalpoly 宏。这个宏计算一个多项式∑k**ZK-1c[k的系数c[1]c[2]。换句话说,系数是由 z 的幂按升序提供的。用来计算这些数字的代码非常高效,我肯定会说它是科学计算的一个伟大工具!

[@evalpoly](http://twitter.com/evalpoly)(3, 1, 0, 1, 5, 1, 2)

(加分)№6:内嵌

内嵌数学本质上更有效率。在 Julia 中,使用 inline 和 noline 宏很容易控制这一点。如果您希望执行大量的线性代数,这些宏肯定会派上用场,因为这些宏的应用会严重降低您的内存消耗。一般来说,内联处理大多数数组可能是一种好的做法,尤其是如果您希望在项目中节省大量内存的话:

@inline foo_in(n) = (n, Vector{Int}(n))
@noinline foo_ni(n) = (n, Vector{Int}(n))  
**function** ft_in(n)
        s= 0
        **for** i= 1:n
         jj,v = foo_in(i)
        s+=sum(v)
        **end
**        s 
**end**  
**function** ft_ni(n)
        s= 0
        **for** i= 1:n
         jj,v = foo_ni(i)
        s+=sum(v)
        **end
**        s
 **end**  
@time ft_in(1000)
   0.001948 seconds (1.00 k allocations: 3.962 MiB)  
@time ft_ni(1000)
   0.002083 seconds (2.00 k allocations: 3.992 MiB)

结论

宏是 Julia 编程语言中非常有用的特性。它们不仅可以作为调用方法的“快捷方式”,还可以用来将正则代码自动转换成表达式。不用说,这在许多不同的应用程序中都很方便,比如测试应用程序。我希望这篇文章是有趣的,并且可能让你熟悉一些你可能不知道的新的宏!非常感谢您的阅读!

5 个我最喜欢的 sci kit-用于增强数据分析的学*工具

原文:https://towardsdatascience.com/5-of-my-favorite-scikit-learn-tools-for-enhanced-data-analysis-694a1f1c69ba?source=collection_archive---------58-----------------------

使用 SkLearn 中的一些分析方法来更好地理解你的数据

(图片由作者提供)

介绍

如果您长期从事 Python 中的数据科学工作,您可能会对 Scikit-Learn 或 SkLearn 模块很熟悉。该模块提供了一系列有用的模块,这些模块被设置用于衡量某些问题,并且实际上非常常用于解决遵循分类或连续准则的问题。

也就是说,虽然这可能是 SkLearn 模块的主要吸引力,但也有许多非常酷的扩展类和功能。这些不仅很棒,而且为 Python 中的机器学*建立了一整套语法体系,现在几乎所有其他建模包都在遵循这一体系。如果你想了解这方面的更多信息,我写了一篇关于 SkLearn 如何用标准化的函数和类改变 Python 中机器学*模型的适当编程的许多方面的文章,请查看:

我认为这个包对整个行业的影响是令人印象深刻的,而且非常酷!不用说,这个包在将 Python 和机器学*带到这个领域的前沿方面做了很多工作。然而,我们很容易沉迷于其中的一些工具,而忽略许多其他非常棒的工具,只喜欢少数几个,因为这个模块非常全面,实际上相当大。

这肯定是真的,其中一个方法就是分析。SkLearn 有各种不同的方法来处理和试验经常被忽略的数据,如果模块是一个依赖项,这些方法已经可用了——所以只要有可能,它们当然值得使用。此外,许多这些技术对于数据科学和数据分析的某些方面来说是真正非常有价值的资产。

SkLearn 中不仅有专门为分析构建的工具,还有可以与无监督学*模型一起使用的分析方法,这些方法通常可以教授许多有关您可能正在处理的数据的信息。记住这一点,这里是我最喜欢的 10 个工具,我从 SkLearn 中最常用来进行数据和模型分析!

№1:线性判别分析

SkLearn 有一个我非常喜欢但并不突出的特性,那就是线性判别分析的能力。这些话听起来比实际意思可怕得多。线性当然意味着直线,我希望任何数据科学家都能自然地理解这一部分。数学中的判别式是一个基于多项式系数的非任意值。这些系数当然可以用多种方法计算,所有这些方法都会显著影响结果。

记住这个新的措辞,我们现在可以考虑这个模型实际上会对我们的数据做什么。我们将对系数进行线性比较,以便分析某组多项式连续数据。在处理连续特征但目标明确的情况下,该模型也是一个很好的选择。当然,这是模型;不是一个分析工具,但是该模型也有能力将多项式组转换成系数。任何时候涉及到系数,它们都可以被可视化。这是因为系数只是一些非任意的单位,是要乘以一个多项式。

也就是说,SkLearn 实现相当深入,将允许使用几个不同的参数,这些参数可以完全改变分类器和多项式转换器的有效性。我想关注的第一个论点是解算器论点。此参数可用于更改计算系数所依据的线性模型。这样做的好处是,一些数值应用可能需要不同的方法来拟合这条线。可用的值及其匹配描述如下:

  • 奇异值分解;SVD 是奇异值分解的缩写。虽然这是转换器的默认设置,但我想说,在许多情况下,真正的默认设置应该是线性最小二乘法,因为它通常最适合应用于大多数情况下的连续问题。也就是说,使用 lsqr 求解器的一个特殊困难和缺点是,它已经是一个处理高维数据的模型。奇异值分解也不会计算协方差矩阵,因此建议将此求解器用于包含大量要素的数据。
  • lsqr 线性最小二乘法对于这个模型的大多数用例来说都是一个很好的应用,我想说我认为这真的应该是这个模型求解器的默认选项。为什么?因为这个模型是简单的,数学的,并且当它不使用成本时通常用典型的斜率公式计算。也就是说,成本仍然用于确定斜率值和 y 截距,因此该模型是我们都熟悉的典型线性模型之一。
  • eigen 提供本征解算器将为我们提供本征分解——这基本上只是一个花哨的术语,表示我们将把向量转换成本征向量,将值转换成本征值。这是什么意思?在不深入研究的情况下,特征分解将通过重构来分解我们的数据,直到它成为规范形式。这在计算机科学中很常见,基本上就是说,我们把一个向量减少到它在数学中可以表示的最小可能的公式。虽然我认为这些都是有趣的概念,但关于这个模型和其他模型还有很多要讨论的,所以我现在将放下数学,但如果你想了解更多关于规范形式的知识,我写了一篇文章,你可能会感兴趣!:

另一个我认为对调整这个模型/变压器至关重要的参数是收缩参数。如果您正在处理大量稀疏数据,并且似乎找不到合适的数据,则此参数肯定很有用。也就是说,这些只能与协方差矩阵一起使用,因此 SVD 求解器在处理参数时是不可用的。该参数可以采用三种不同的选项:

  • none:No shrink,这也是缺省值,很大程度上意味着要使用 SVD 求解器,尽管我不会说在处理一些紧密的低方差连续数据时不使用 shrink 是完全不可能的。
  • 在 0 和 1 之间浮动:这将给你一个固定的收缩参数。这样做的好处是收缩是手动的,程序员可以很容易地控制。然而,话虽如此,不允许统计学发挥作用也有一些不利之处——尤其是在多变量分析方面。
  • ' auto ':使用 Ledoit-Wolf 引理的自动收缩。这个收缩估计器真的很酷,所以我坚持认为,如果你想了解更多,你可以查看这个完全集成的 PDF(非常酷的媒介),它是最初由 Oliver Ledoit 和 Michael Wolf 发表的论文:

№2:主成分分析

不经过主成分分析(PCA)就很难谈论分析建模方法。PCA 是另一种形式的分解。主成分分析和其他类似的分解方法的最大区别是主成分分析只使用奇异值分解方法。

该模型的输入数据也是集中的,但是在应用 SVD 分解方法之前,不对每个特征进行缩放。很可能大多数数据科学家都熟悉这个模型,因为它是分析行业的一个主要部分。这是因为降低数据的维度确实有助于更好地理解数据,以及特征之间的差异和它们各自的方差水平。我认为对于这种无监督学*方法来说,唯一至关重要的参数是 svd_solver 参数。该参数为算法提供了一个基础,使用了 SkLearn 中已经提供的一整套奇异值分解方法。

№3:排列重要性

虽然置换重要性可能不是 SkLearn 库中的一个众所周知的工具,但我确实认为它们是解决复杂分类问题的一个绝对重要的工具。通常,每当讨论排列重要性时,我们都在谈论基尼系数不纯。吉尼杂质只是随机森林分类器使用的排列测量的一个花哨名称。

此模型中要素的重要性可以告诉您许多关于您正在处理的数据和要素的信息。它不仅可以给出删除一些不重要特性的可靠提示,而且还可以从您的模型中提供重要的反馈,说明是什么使它变得更准确或更不准确!不用说,这肯定是我们大多数人想要了解和利用的来自 SkLearn 的东西。

您可以通过从 Scikit-learn 的检查模块导入此方法来使用排列重要性:

**from** **sklearn.inspection** **import** permutation_importance
r = permutation_importance(model, x_val, y_val)

№4:随机投影

一个非常酷的概念是随机投影,我们可以把它作为一个整体来看待,我认为这个概念被低估了,并且已经完全应用到 SkLearn 中。随机投影是一种计算非常简单的技术,用于计算分解和降低数据的维数。

这种分解方法是不同的,因为它以更高的精度换取更好的性能。如果您的数据中有很多需要缩减的内容,这将非常有用。然而,我认为随机投影不如 SVD 使用得好的部分原因是因为 SVD 实际上是一种非常高效和可伸缩的分解方法。然而,我确实看到了许多应用,其中一些非常高维的数据,可能具有许多非常重要的特征,可以真正利用这样的分解方法。

№5:功能集聚

你听说过数据争论,但你听说过数据聚集吗?好消息是,我刚才提供的上下文线索应该已经给了你一个凝聚这个词的确切定义。我必须承认,在我的一生中,我从来没有听到这个词被大声地说出来,我仍然不确定如何发音,但它肯定可以毫无问题地被书写和阅读——所以

不要大声读出来。

这也是你大声朗读的一个非常奇怪的选择。无论如何,使用我们刚刚学到的这个奇怪词汇的定义,如果不是数学,我们不会接触到它,我们可以假设这意味着功能的集合-这将是一个正确的假设!这一过程与凝聚聚类非常相似,但它合并的是特征而不是样本。当然,这只是 SkLearn 提供的庞大武器库中做降维的又一个选择。然而,当涉及到数据科学时,学*如何利用 SkLearn 中提供的大量工具肯定会非常有用。

结论

作为一名数据科学家,这篇文章包含了很多我觉得非常令人兴奋的东西。这当然不仅适用于排列和系数,甚至更进一步;我也很喜欢分解这个话题。我认为很多在幕后工作的非常酷的线性代数,实际上在数学上相对简单,是非常了不起的——很难想象如果没有这些算法,我们会在哪里。

特别是 SVD 可能是现实世界机器学*中最好的数学概念之一。这是因为实际上经常需要对真实数据进行分解。在现实世界中,特性并不总是默认的特性,所以利用这篇关于分解的文章中提出的概念将会非常有用——我认为这些工具既没有被充分利用,又非常有用。

您可以在 1 天内完成 5 门在线数据科学课程

原文:https://towardsdatascience.com/5-online-data-science-courses-you-can-finish-in-1-day-5b60f353fa8e?source=collection_archive---------1-----------------------

在周末结束前学点新东西!

尼克·莫里森在 Unsplash 上拍摄的照片

我们不都希望我们的日子比 24 小时更长吗?这样我们每天就能装下更多的东西?但是,不幸的是,今天的时间是——而且一直都是——非常难以把握的,尤其是如果你试图在已经排得满满的日程表中挤出时间来学*一项新技能的话。这就是为什么找到一个可以在相对较短的时间内教会你新东西的资源总是一件很棒的事情。

当我想学*一项新技能、库或编程语言时,我必须在下班后(这并不理想)或周末去做。我经常尽我最大的努力在周末学*所有必要的知识。然而,我们都知道数据科学是一个广阔的领域,其下有许多特定的主题。

</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>

如果每天都能学到一个新的技能或者概念岂不是很棒?然后进入下一个概念?例如,我知道你可以在一天或 24 小时内学会任何数据科学概念的基础知识。然后,一旦你很好地学*了这些基础知识,你就可以积累这些知识并开始构建应用程序。

在这篇文章中,我将与你分享 5 门在线课程,都可以在 Coursera 上找到,并且都很短,内容丰富,可以在一天内完成。如果你想在周末学*一些东西,但又不想注册 50 多个小时的课程,这些课程是一个很好的选择。

№1:基础:数据,数据,无处不在

没有比数据分析课程更好的方式来开始一系列数据科学课程了。列表中的第一门课程是谷歌提供的,是数据分析方面的入门课程。基础:数据,数据,无处不在是一系列课程中的第一门,旨在为你获得谷歌分析证书做准备。

本课程分为 5 个模块,总体设计在 20 小时内完成。在这 20 个小时中,您将学*分析数据的关键技能,如清理和可视化数据,了解这样做所需的基本工具,如 SQL、R 和 Tableau,并建立一个专业、高效的开发环境。

</5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204> [## 5 本 Python 书籍,让你的代码更上一层楼

towardsdatascience.com](/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204)

№2:生产中的机器学*介绍

接下来是一门课程,面向那些对深度学*、Python 和 AI 有一些了解的人。生产中的机器学*介绍是 DeepLearning 提供的课程。AI 和是他们关于机器学*生产工程(MLOps)系列的第一门课程。本系列课程旨在让您超越实现机器学*算法,并为其发布做好准备。

本 MLOps 入门课程分为三个部分,所有部分都应在 10 小时内完成。通过这三个模块,您将学*成为一名成功的机器学*专家所需的生产工程技能。此外,您将学* ML 生命周期,如何以结构化的方式解决任何问题,以及如何进行高效的分析以了解您的 ML 模型。

№3:数据工程简介

我认识的每一个数据科学家,包括我自己,可能都不止一次被问到,“那么数据科学家是做什么的?”。这个简单却不简单的问题是所有数据科学角色命名极其混乱的原因之一。这些令人困惑的头衔之一是数据工程师。单子上的下一门课,数据工程简介,应该要你回答这个问题。

IBM 提供此课程,分为 4 个模块,可在 10 小时内完成。在本课程中,您将了解基本概念、工具和数据工程流程。您还将了解现代数据生态系统,以及数据科学家、数据工程师和数据分析如何在这个生态系统中互动。

</5-databases-that-you-can-use-for-free-841cf81834bf>

№4:使用 AutoML 分析数据集和训练 ML 模型

接下来是另一个机器学*相关的课程。使用 AutoML 分析数据集并训练 ML 模型。DeepLearning 提供这门入门课程。AI 和 AWS,并专注于使用 AutoML 为 ML 模型训练准备数据集。要学*本课程,您需要掌握一些基本的 Python 和 Jupyter 笔记本技能。

本课程分为 4 个模块,预计在 14 小时内完成。这是一系列课程中的第一门,将向您传授应用探索性数据分析(EDA)、在模型上使用 AutoML 以及一些文本分类算法所需的所有基础知识。在本课程结束时,您将能够使用 AWS 云构建、培训和部署可扩展的 ML 管道。

№5:谷歌云大数据和机器学*基础

这个短期课程名单的最后一个是关于大数据和机器学*的课程。谷歌云大数据和机器学*基础是谷歌提供的许多数据工程和数据分析相关课程的中级课程部分。

本课程由 4 个模块组成,预计在 14 小时内完成,将向您介绍谷歌云平台的大数据功能。本课程将带您了解如何使用云 SQL 将您现有的 MySQL 工作负载迁移到 Google Cloud,以获得更快、更高效的管道。您还将学*如何查询数据和执行交互式分析,以便更好地理解您的数据。

</9-free-quality-resources-to-learn-and-expand-your-python-skills-44e0fe920cf4>

外卖食品

数据科学是一个经常用来同时描述许多概念和术语的术语。数据科学是一个包含许多更小的领域和概念的领域。要成为一名数据科学家或深入数据科学世界,您需要学*所有这些较小的领域和概念。

我认为你可以在 24 小时内学会每个小领域或概念所需的所有基本信息。那是专门的 24 小时学*。如果你能找到设计在 24 小时内学*的资源,这通常是很好的,因为我们都知道找到资源需要 24 小时——如果不是更长,有时。

这就是为什么我决定与你分享一些在线课程,这些课程设计得简短,简明,切中要害,最重要的是,可以做到,在 1 天内开始完成。所以,下次你想学点新东西,而又只有周末时间的时候,不妨试试这篇文章中的一门课程。

您现在可以开始学*的 5 门在线数据科学课程

原文:https://towardsdatascience.com/5-online-data-science-courses-you-can-start-now-748e4a2b5403?source=collection_archive---------9-----------------------

在家舒适地学*数据科学的所有基础知识。

尼克·莫里森在 Unsplash 上拍摄的照片

所以,你决定进入数据科学领域。你可以花几个小时(如果不是几天的话)在谷歌上搜索如何学*数据科学的基础知识,可以用来学*的材料,以及可以参加的课程和训练营,这些都将增加你在完成工作后找到工作的机会。

所有这些都很棒;唯一的问题是,如果你尝试谷歌数据科学课程或材料,你最终会得到数百万个结果。你怎么能选择什么是好的,什么不是?什么值得你花时间,什么会浪费时间?

当我开始我的数据科学之旅时,我问了自己所有这些问题以及更多问题。关于如何成为一名数据科学家,你需要学*什么,以及你应该做什么的大量信息让我不知所措。我花了大量时间浏览课程、教程和书籍,试图掌握数据科学的基础知识。

我知道我不是唯一一个经历过或者将要经历这个挑战的人。我知道每个人对适合自己的东西有不同的偏好;适合我的不一定适合其他人,反之亦然。然而,我想提供一个简单的指南,涵盖 5 门在线数据科学课程,这些课程有很好的评论,并为您提供一个开始学*之旅的好地方。

我选择这些课程是因为它们都可以在你舒适的家中免费学*。不是每个人都有能力去几千美元的训练营,或者他们所在的地区可能没有。你可以免费浏览这些课程的所有资料——审核它们——或者支付一笔可观的费用,最终获得一个证书。

№1: IBM 数据科学专业证书

这个清单上的第一门课程是 IBM 的。在推进技术方面,IBM 一直处于领先地位;他们总是有很棒的团队和资源,其他人可以用来学*所有不同类型的技术,如 web 开发、应用程序开发,甚至量子计算。

IBM 提供了一个专业证书项目,通过 9 门课程让你从一个数据科学新手变成一个数据科学专家,你可以按照自己的进度学*。该课程提供实践经验和现实生活中的问题,可以帮助你建立一个强大的投资组合。

在这个证书课程中,您将学*编程、数据科学和机器学*的基础知识,如何使用 Jupyter 笔记本电脑,使用 SQL 与数据库进行交互,有效地可视化您的结果,并了解该领域的最新进展。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

№2:哈佛数据科学专业证书

接下来,我们有另一个由哈佛大学提供的证书项目。哈佛是世界上最负盛名的学校之一,虽然不是每个人都能上它,但任何有好奇心的人都可以上这门课,如果他们想从哈佛获得证书的话。

该证书课程包含 9 门课程,使用 R 编程语言涵盖数据科学基础知识。您还将学*数据科学背后的数学背景、Git 和版本控制基础知识,以及每个数据科学家的一些基础知识,如 Unix/ Linux 系统交互。

这个证书真正好的地方在于,每门课程如何利用案例研究来解释主要概念,并提出你需要熟悉的真正问题,以建立一个成功的数据科学组合。

№3:约翰·霍普斯金数据科学课程

约翰·霍普斯金大学提供了一个 10 门课程的数据专业化项目,它会让你经历成为一名数据科学家所需的一切,从使用 R 编程语言编程的基础到形成机器学*领域的算法。

关于这套课程,我最喜欢的一点是它如何为基本但往往仓促的概念指定课程,例如构建一个良好的开发环境,处理 markdown 和 Github,以及使用 RStudio。此外,关于清理和收集数据以及 EDA 的两门课程涵盖了从数据中提取有用信息并最终获得准确结果所需的所有内容。

该证书还揭示了该领域的研究方面,以及如何才能产生可重复的数据科学研究的一些线索。作为一名学术界人士,很高兴看到数据科学在线课程指向学术界,而不是只关注工业用途。

</10-nlp-terms-every-data-scientist-should-know-43d3291643c0>

№4:密歇根大学应用数据科学与 Python 专业

如果你想进入数据科学,尤其是自然语言处理,密歇根大学提供了一个很棒的 5 门课程的项目,专注于数据科学的应用方面。

虽然这套课程本身不是针对自然语言的,但它确实有两门课程专注于基本的自然语言处理概念,主要是文本挖掘和社会网络分析。这些课程使用 Python 作为主要的编程语言,涵盖数据科学的基础知识。它还将更深入地介绍构建应用程序常用的不同 Python 包的细节。

课程设计者建议你按这个顺序学*课程,数据科学导论,应用绘图,应用机器学*,然后是文本挖掘和社交网络分析。如果你完成了所有 5 门课程,你可以付费获得官方证书。

№5: Dataquest 数据科学家职业道路

该列表中的最后一组课程是 Dataquest 的数据科学家职业道路。Dataquest 可能是所有数据科学最著名的在线资源之一;不管你是想学 R 还是 Python,网站都有针对不同水平人群的课程。

数据科学职业道路包含许多课程,涵盖你需要深入学*的一切,从编程基础到数据库,到可视化,到数学和统计,到机器学*和深度学*的更多技术算法。

Dataquest 提供的课程旨在在一个地方找到您需要学*的所有内容,您无需去其他地方继续学*。这为您节省了大量时间和精力。

</6-data-science-certificates-to-level-up-your-career-275daed7e5df>

最后的想法

成为一名数据科学家似乎是一项具有挑战性的任务。完全老实说,这并不容易;就像任何其他的学*旅程一样,它需要时间、练*、耐心和毅力。但它不需要的是学位。

许多人认为,要成为一名数据科学家,你需要去上学或参加训练营。这两种选择成本都很高,而且对每个人都不可行。幸运的是,你可以通过参加涵盖数据科学所有基础知识的在线课程获得所需的知识,而不必离开舒适的沙发或破产。

网上有许多资源可供您用来学*数据科学,这些资源太多了,很容易让人不知所措,找不到最适合您的资源。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

我写这篇文章的唯一目的是帮助您找到一个开始学*不同数据科学分支的好地方。我在本文中介绍的 5 门课程并不是你可以使用的唯一课程。尽管如此,他们帮助许多数据科学家建立了他们的知识库,构建了他们的投资组合,并开始了他们的新职业生涯,希望他们也能为你做同样的事情。

掌握数据科学的 5 种免费资源

原文:https://towardsdatascience.com/5-online-resources-to-learn-data-science-2633829b20a6?source=collection_archive---------8-----------------------

课程、书籍和讲座将带你从新手到高级

粘土银行Unsplash 拍摄的照片

你参加了一门数据科学 MOOC,并完成了所有的讲座和作业。你甚至拿到了证书。现在怎么办?

一旦我完成了我的第一个数据科学在线课程,我就不知道接下来该做什么了。我不知道下一步该上什么课,也不知道如何将学到的概念应用到现实世界的问题中。

我花了很长时间寻找一门中级数据科学课程,它将有助于弥合我的理解差距,向我介绍案例研究,并加强我对统计概念的理解。

我花了将*一年的时间才意识到,没有一门课程能教会我这些东西。

我创建了一个路线图,概述了我想学*的概念,并开始寻找涵盖这些特定主题的资源。

这些资源帮助我加强了对机器学*和统计学的理论理解。

他们还帮助我理解了可以通过预测建模解决的不同类型的问题,并用 Python 演示了一些例子。

在这篇文章中,我将结合我在过去一年中整理的所有资源,并将其分解给你。你可以用这些资源按照你想要的任何顺序来补充你的学*。

这些资料有助于加快我的数据科学学*过程,希望对您有所帮助。

YouTube 频道

照片由莎拉·库菲Unsplash 拍摄

首先,我将列出几个在我的数据科学学*过程中有很大帮助的 YouTube 频道。

从 YouTube 视频中学*有时会被看不起,因为这些材料不一定是由合格的专业人士教授的,如果你不小心,你可能会学到错误的东西。

然而,在像数据科学这样的领域,从 YouTube 学*会非常有帮助。

在 YouTube 频道上解释概念的老师通常是自学成才的个人,他们在数据科学行业工作过。

他们能够更多地与他们的观众联系起来,并且理解他们的学*者并不总是来自强大的学术背景。正因为如此,他们使他们的材料更容易理解。

如果你没有很强的统计学或数学背景,我强烈建议你从 YouTube 频道学*数据科学概念。

他们不使用数学符号来解释机器学*/数据科学概念。相反,我将要推荐的 YouTubers 能够用简单的英语分解困难的概念,同时为你提供对材料的强有力的理论理解。

1.克里斯·纳伊克

克里斯·纳伊克是最好的机器学*在线教育者之一。他在数据科学领域有超过 8 年的工作经验,他的教程包括许多行业用例。

他有关于统计学、机器学*和 Python 的播放列表。他的视频几乎涵盖了数据科学的每个方面,并将教你入门所需的一切。

他的机器学*教程不仅涵盖实际实现,还包括算法背后的底层数学。只需按照播放列表的顺序完成每个视频。

他还为想要学*数据科学的学生制定了路线图。他的路线图如下:

计算机编程语言

他的机器学*播放列表的第一部分涵盖了 Python 编程。他首先教你编码的基础知识,然后继续学*特定于数据科学的库。

你可以在这里找到他的机器学*播放列表。前 30 个视频会让你很好的掌握 Python 编程。

统计数字

学*完 Python 之后,Krish 建议继续学*统计学。机器学*播放列表中的下几个视频涵盖了统计概念。他教授概率、分布类型和假设检验等概念。

就我个人而言,虽然我觉得他的统计学讲座非常全面,但我认为最好是用他的播放列表来补充你的学*,而不是让它成为你的核心重点。

在文章的后面,我会列出其他关于统计和概率的课程,我建议在这些课程的同时做他的讲座。

特征工程

Krish 有一个完整的播放列表致力于功能工程。特征工程是数据科学最重要的方面之一。

作为一名数据科学家,您的大部分时间将花在选择用于模型的变量、缩放要素以优化模型性能以及编码预测值上。

Krish 建议在进入机器学*部分之前,先完成他的特征工程播放列表。

机器学*

完成了前三个板块,就可以从他的机器学*播放列表的机器学*板块开始了。这与我在 Python 部分链接的播放列表相同。

在这一部分,他涵盖了不同的机器学*算法。他首先解释模型背后的直觉,并用简单的英语解释。然后,他继续解释算法的数学基础。

如果你是机器学*的新手,我强烈建议从 Krish 关于不同算法的视频讲座中学*。它将让你很好地理解机器学*算法如何工作,以及它们建模数据的不同方式。

他的讲座很容易理解,即使对那些没有数学背景的人来说也是如此。

模型部署

最后,我强烈建议学*他的模型部署教程。

一旦你创建了你的机器学*模型,你需要把它投入生产,这样这个模型就可以被其他人大规模使用。

Krish 教授 Heroku、Azure 和 AWS 上的模型部署。

额外资源

Krish 有一个完整的深度学*播放列表,你可以在这里访问

此外,如果你正在寻找数据科学方面的工作,他有一个完整的面试准备播放列表,你可以在这里访问。

2.丹尼尔·伯克

Daniel Bourke 是一名自学成才的数据科学家。自学数据科学后,他找到了一份机器学*工程师的工作。

我将 Daniel 添加到列表中,因为他在我的数据科学学*之旅中一直是一个巨大的灵感。

他不像克里斯·纳伊克那样在 YouTube 上制作机器学*教程。

相反,他记录了他的学*历程,并为你指出正确的学*资源。

比如自学深度学*,做 TensorFlow 开发者认证考试。他通过了,然后制作了一个视频,告诉我们其他人如何做同样的事情。

他列出了为通过考试而阅读的书籍和选修的课程,以及完成每项学*计划所需的时间。

他的视频和博客帖子对想要在数据科学领域找到工作或通过特定认证考试的人非常有帮助。

他还创建了一个机器学*路线图,你可以在这里访问。

课程

尼克·莫里森在 Unsplash 上拍摄的照片

我在这里列出的在线课程是面向那些想学*统计学和数据科学理论方面的人的。

在我参加了机器学*入门课程并学*了 Python 之后,我发现自己对算法的工作原理缺乏正确的理解。

我使用这些课程来加强我对数据科学统计方面的理解,以及机器学*模型背后的工作。

概率统计(to P 还是不 to P?)

这是一门介绍性的统计学课程,将教授你描述性和推断性统计、假设检验和不确定性下的决策等概念。

如果你没有统计学的背景,这个课程可以帮助你入门。您将学*描述性统计的基础知识,如人口的平均值、中位数和众数。

然后,您将学*推断统计学,它允许您使用样本对真实总体进行推断。James 介绍了不同的抽样技术,然后解释了如何从样本总体中估计总体参数。

他还解释了如何使用简单的真实世界的例子进行假设检验,你甚至需要完成假设检验的同行评分作业。

一旦你完成了这门课程,你将对概率和统计有一个基本的了解,以及在不确定的情况下做决策的方法。

你可以用克里希·纳伊克的统计学讲座来补充本课程,以便更好地理解所教授的概念。

这门课在 Coursera 上,可以免费旁听。你也可以申请经济资助。如果你的申请被批准,你可以免费获得一个课程证书。

统计学*

完成以上课程后,建议在 edX 上参加统计学*

注意:你可以免费旁听这门课。如果你想要一个证书,你可以申请经济资助,并获得课程总费用的 90%的折扣。这是我列出的唯一一个不是完全免费的资源,但是如果你申请经济资助,你只需要支付全部课程费用的 10%。

本课程由斯坦福大学的教授特雷弗·哈斯蒂和罗伯特·蒂布拉尼教授主讲。

两位讲师都很有热情,他们的能量会让你有动力完成课程。

本课程教你不同的机器学*算法,可用于数据建模。它涵盖了监督学*技术,如线性回归,逻辑回归,支持向量机和决策树。

它还涵盖了无监督学*算法,如 K-均值聚类和主成分分析。

我建议你先完成我上面列出的统计学入门课程,然后再去上这门课。此外,在开始学*这门课程之前,至少要学*一门机器学*入门课程。

我建议在开始本课程之前,先完成克里希·纳伊克的机器学*播放列表,因为其中涵盖的概念对初学者来说并不友好。如果你以前没有数学/统计学背景,你可能会对课程材料感到困惑。

我也强烈建议看一下这门课所依据的电子书,叫做统计学*入门

这本书涵盖了很多课程中没有解释的额外材料,如果你想更全面地了解机器学*,你应该考虑阅读这本书。

额外资源

阿尔方斯·莫拉莱斯Unsplash 上拍摄的照片

深度学*是人工智能一直让我着迷的一个方面,我每天都试图在这个领域学*一些新的东西。

Francois Chollet 的《用 Python 进行深度学*》是一本帮助我更好地理解深度学*概念的书。

弗朗索瓦涵盖了神经网络的数学构建模块,并解释了反向传播等概念。他没有使用复杂的数学符号,而是用简单的英语和 Python 代码解释了一切。

他涵盖了文本处理、计算机视觉和图像生成的深度学*。

如果你对深度学*感兴趣,我也建议订阅莱克斯·弗里德曼的 YouTube 频道。Lex 是麻省理工学院的一名人工智能研究员,他在 YouTube 上创建了深度学*播客。

他还在麻省理工学院教授深度学*,你可以在这里访问他的讲座。在他的播客中,他与埃隆·马斯克、诺姆·乔姆斯基和李奥纳特·苏士侃等有影响力的人物进行了发人深省的对话。

结论

上述资源有助于加快我的数据科学学*过程。如果你已经参加了初级水平的机器学*课程,但不确定如何继续,请尝试上面的一些资源。

另外,请记住,建立机器学*模型只是你需要知道的一部分。如果你想成为一名数据科学家,一定要参加特征工程课程,因为作为一名数据科学家,你的大部分工作将涉及到寻找好的预测器来添加到你的模型中。

您还应该学*模型部署。作为一名数据科学家,您的工作范围通常要求您将模型投入生产。在建立一个模型之后,你需要确保它在其他人的手中,并且确保它是可用的。

仅此而已!感谢您的阅读,我希望您能从这篇文章中获得一些有用的东西。

任何停止学*的人都老了,不管是二十岁还是八十岁。坚持学*的人永远年轻——亨利·福特。

您可以使用 5 种开源工具来训练和部署 OCR 项目

原文:https://towardsdatascience.com/5-open-source-tools-you-can-use-to-train-and-deploy-an-ocr-project-8f204dec862b?source=collection_archive---------2-----------------------

第一部分:如果你正在做文本检测,你应该知道这些工具

图片来自pexels.com

Part I  - 5 open-source tools you can use to train your own data and  deploy it for your next OCR project!
Part II - From labelling to serving your OCR model! (Coming soon)

在很多情况下,我们需要检测图像中的文本。

  1. 为了实现运营数字化,银行需要将所有文书工作存储到云数据库中。为此,文档必须被扫描并转换成机器可读的格式。
  2. 在房地产行业,购房者和代理商通常以纸质形式填写他们的协议表格。要在云中保存表格,你需要 OCR 软件,该软件将文本转换成机器可读的文件。
  3. 在 Edtech 初创公司中,有一些严重依赖 OCR。举个例子, Photomath ,一家将问题分解成简单步骤来帮助人们理解数学的初创公司。该应用程序为用户提供了扫描他们在纸上的问题并通过扫描将其翻译成机器可读格式的便利。

OCR 可以使用传统的计算机视觉技术或更先进的深度学*技术来完成。本文的重点将只放在使用深度学*模型的工具上。作为奖励,我还将包括脚本,让您一次体验所有的模型。

EasyOCR

https://github.com/JaidedAI/EasyOCR

EasyOCR 是一款开源的、随时可用的 OCR,支持* 80 种语言。您可以选择用您自己的数据训练模型(您可以遵循他们的示例数据集来格式化您自己的数据集)或使用现有模型来为您自己的应用服务。

以下脚本可用于运行代码:

# installation
pip install easyocr# import
import easyocr# inference
reader = easyocr.Reader(['en'])
result = reader.readtext(img_path)

这里有一个快速测试,看看这个 OCR 软件有多准确。下图来自 pexels.com,OCR 工具会检测图片中的文字。在一个完美的模型中,它应该能够输出“让这一天变得伟大!”。

照片由 Alexas FotosPexels 拍摄

结果如下:

你可以看到结果并不完美。它误解了字母 G,把 H 误认为是小写字母 H。

PaddleOCR

图片来自来源。下阿帕奇牌照 2.0

https://github.com/PaddlePaddle/PaddleOCR

PaddleOCR 是中国百度团队开发的开源产品。我使用这个软件工具已经有一段时间了,我真的很惊讶这个团队做了多少工作来使这个免费的产品像市场上任何商业 OCR 软件一样强大。框架中使用的模型使用最先进的(SOTA)技术(如 CML 知识提炼和复制粘贴数据扩展策略)和大量打印和手写图像进行训练。这使得它成为最强大的开源 OCR 软件之一。下面是一些你可以用开源代码做的事情:

  1. 您可以在您的应用程序中使用他们现有的模型。它们还提供了一个极其轻量级但功能强大的模型,称为 PP-OCRv2,这样您就不需要担心大内存问题。
  2. 他们支持多种语言,如中文,英语,韩语,日语,德语等。
  3. 他们有多种工具来支持您进行数据标注。例如,它们为您提供 PPOCRLabel 来快速标记图像中的文本。由于数据对于训练 OCR 模型非常重要,他们还有一个名为 Style-text 的工具,可以让您快速合成图像,以便您有更多的图像来训练您的模型,使其在生产环境中使用起来更加强大。
  4. 您可以使用提供的脚本对数据集上的模型进行微调。

你可以这样使用它:

# installation
pip install paddleocr paddlepaddle# import
from paddleocr import PaddleOCR# inference
ocr = PaddleOCR(use_angle_cls=True, lang='en')
result = ocr.ocr(img_path, cls=True)

让我们使用上面的同一个图像来检查模型性能:

令人惊讶的是,从一个之前已经在类似图像上训练过的模型中看到如此精确的输出。

TrOCR

图片来自来源。根据麻省理工学院的许可。

https://huggingface.co/transformers/model_doc/trocr.html https://github.com/microsoft/unilm/tree/6f60612e7cc86a2a1ae85c47231507a587ab4e01/trocr

TrOCR 最初是由、吕腾超、等人在 TrOCR:基于变压器的光学字符识别中提出的。它是基于图像转换器编码器和自回归文本解码器(类似于 GPT-2)开发的。代码已经包含在著名的 Huggingface 库中,因此我们可以直接从库中使用训练好的模型。

# installation
pip install transformers# import
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image# inference
model_version = "microsoft/trocr-base-printed"
processor = TrOCRProcessor.from_pretrained(model_version)
model = VisionEncoderDecoderModel.from_pretrained(model_version)

image = Image.open(img_path).convert("RGB")

pixel_values = processor(image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

与其他两个模型不同,这些模型只输出最终的文本输出,而不输出文本位置。该模型是用于文本识别的,所以你不应该期望它检测图像中的文本。运行上述脚本后,您将收到的输出是“MASKAY”。正如所料,结果很差,因为管道中没有文本检测模型。

MMOCR

https://github.com/open-mmlab/mmocr

图片来自来源。下阿帕奇牌照 2.0

MMOCR 是另一个开源 OCR 工具,它是在著名的 OpenMMLab 项目下开发的。该项目由香港中文大学的团队开发,已成为计算机视觉领域的领先项目之一。

它支持多种 SOTA 模式,还允许您进行培训和部署。这个开源工具的亮点之一是它能够在同一管道中提供除其他模块(文本检测和识别)之外的关键信息提取模型。关键信息提取解决了用户必须匹配某个模板才能从文档中提取数据的问题。传统的方法很难使用带有未知模板的文档。

一旦我们安装了工具(是的,它没有前两个工具方便),我们就可以用它来检测我们的样本图像并测试它的性能。我们得到与 PaddleOCR 类似的结果,只是感叹号没有出现在“GREAT”的末尾。总的来说,这个工具将几乎所有的东西都放在一个管道中,所以使用起来非常强大。

宇宙魔方光学字符识别

https://github.com/tesseract-ocr/tesseract https://pypi.org/project/pytesseract/

对于之前做过 OCR 项目的人来说,你应该对这个库非常熟悉。这里有一点关于宇宙魔方光学符的历史:

Tesseract 最初是由布里斯托尔的惠普实验室和科罗拉多州格里利的惠普公司在 1985 年到 1994 年间开发的,1996 年做了一些修改以移植到 Windows,1998 年做了一些 c++化。2005 年,宇宙魔方被惠普开源。从 2006 年到 2018 年 11 月,它由谷歌开发。—来自https://github.com/tesseract-ocr/tesseract

python-pytesserac 是 tesserac-OCR 引擎的包装器。使用它非常简单。由于该模型自 2019 年 12 月 26 日以来一直没有更新,并且使用了一个非常简单的 LSTM 模型,因此结果可能不如该方法的其他部分理想。尽管如此,该模型可以使用新的数据进行训练,这样你就可以根据自己的需要对其进行定制。

为了测试这个工具,我使用了上面同样的图片。尽管用 OpenCV 对图像进行了预处理,我还是得到了一个空的结果。该工具似乎不能很好地处理场景中的文本。对于背景相对干净的普通文档,性能应该更好。

摘要

以下是不同开源 OCR 工具的比较:

按作者分类的表格

这个评级完全基于我自己对开源工具的体验。他们每个人都有自己的优势。我们的项目要求我们根据一组特定的需求选择正确的工具。

如果你想试一试,这是 Colab 笔记本!

作者代码

下一步是什么?

在为现实世界服务部署时,不能完全依赖开源工具。特别是对于一些应用,需要 99%以上的准确率。为了实现这一点,我们可以从我们的业务中收集数据,并在训练开源工具之前对它们进行标记。我的下一步将向您展示 Label Studio 如何简化整个过程。从贴标签到服务模特,我全包了!

如果您没有读过我的 Label Studio 文章,请在这里阅读:

请关注我并喜欢我的帖子,以获得该系列的最新更新。

关于作者

Woen Yon 是新加坡的一名数据科学家。他的经验包括为几家跨国企业开发先进的人工智能产品。

Woen Yon 与一些聪明人合作,为当地和国际初创企业主提供网络解决方案,包括网络爬行服务和网站开发。他们非常清楚构建高质量软件的挑战。如果你需要帮助,请不要犹豫,给他发一封电子邮件到 wushulai@live.com。

他喜欢交朋友!在 LinkedInMedium 上随时与他联系

https://laiwoenyon.medium.com/

每个“数据爱好者”都必须知道的 5 种异常检测技术

原文:https://towardsdatascience.com/5-outlier-detection-methods-that-every-data-enthusiast-must-know-f917bf439210?source=collection_archive---------3-----------------------

异常检测方法(视觉和代码)

来自的修改图像

异常值是那些与总体的样本中的其他数据点有强烈(不同属性)差异的观察值。在这篇博客中,我们将经历 5 种离群点检测技术,每个“数据爱好者” 都必须 知道 。但在此之前,让我们看看并了解离群值的来源。

数据集中异常值的可能来源是什么?

数据集中可能存在异常值有多种原因,如人为错误(错误的数据输入)、测量错误(系统/工具错误)、数据操作错误(错误的数据预处理错误)、采样错误(从不同来源创建样本)等。重要的是,检测和处理这些异常值对于学*一个健壮的和可推广的机器学*系统是重要的。

z 得分

Z 值 (也称标准值)是统计学中的一个重要概念,表示某一点距离均值有多远。通过应用 z 变换,我们移动分布,使其平均值为单位标准差0。例如,Z 值为 2 意味着数据点距离平均值有 2 个标准偏差。

此外,任何数据点的 z 分数都可以按如下所示计算—

z 得分(I)=(x(I)-平均值)/标准差

它假设数据呈正态分布,因此数据点的百分比位于-/+1 标准偏差之间。是~68%,-/+2 stdev。是大约 95%和-/+3 标准偏差。就是~99.7%。因此,如果 Z 值是> 3,我们可以安全地将该点标记为异常值。 参考下图

带有异常标记的正态分布|图片由作者提供

你可以使用 python 来实现它,如下所示—

*import numpy as np**data = [1, 2, 3, 2, 1, 100, 1, 2, 3, 2, 1]* *threshold = 3**mean = np.mean(data)
std = np.std(data)**z_score_outlier = [i for**i in**data if (i-mean)/std > threshold]
print (z_score_outlier)
>> 100   (outlier)*

在 Python 中也可以使用 Scikit learn 和 Scipy 提供的内置函数。(链接在 资源部分 )

力线

局部异常因素 (LOF)中,这个想法围绕着局部区域的概念。这里,我们计算并比较焦点的局部密度和它的邻居的局部密度。如果我们发现焦点的局部密度与其邻居相比非常低,这将暗示焦点在该空间中是孤立的,并且是潜在的异常值。该算法取决于超参数 K,该超参数 K 决定了在计算局部密度时要考虑的邻居数量。该值介于空间中的 0 (无邻居)和总点数(所有点都是邻居)之间。

局部密度函数定义为平均可达距离的倒数,其中平均可达距离定义为从焦点到邻居中所有点的平均距离。

LOF =邻居的平均局部密度/焦点的局部密度

如果,

  • LOF ≈ 1 密度与邻国相似
  • LOF < 1 密度高于邻国(正常点)
  • LOF > 1 密度比邻国低(异常)

此外,下图显示了空间中样本焦点(深蓝色)的 LOF 和局部密度的计算。这里 K=3 (邻居),d (距离)可以计算为欧几里德,曼哈顿等。

您可以使用 python 的 Scikit-learn 库来实现它,如下所示—

*from sklearn.neighbors import LocalOutlierFactor**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**lof = LocalOutlierFactor(n_neighbors=2, metric='manhattan')
prediction = lof.fit_predict(data)
>> [ 1,  1,  1,  1, -1,  1]*

请随意探索超参数调谐库等。(链接在 资源部分 )

此外,如果你想继续享受阅读与数据科学和机器学*相关的精彩文章,你可以通过我的推荐链接:)购买中级会员资格

ABOD 和凸包方法

我已经有一篇关于离群点检测的几何模型的非常详细的博客文章,其中我主要关注于基于角度的技术 (ABOD) 基于深度的技术(凸包) 。你可以在这里查看 ABODhttps://blog.paperspace.com/outlier-detection-with-abod/。下图显示了检测异常值的两种技术的图示视图—

**

隔离森林

隔离森林是一种基于树的算法,它试图根据决策边界(就像我们对决策树一样)的概念找出离群值。这里的想法是继续在随机阈值和特征上分割数据,直到每个点都变得孤立 (这就像在数据集上过度拟合决策树)。一旦隔离完成,我们就把在这个过程中很早就被隔离的点分出来。我们将这些点标记为潜在的异常值。如果您直观地看到这一点,那么一个点离多数越远,就越容易被隔离,而隔离属于一个组的点将需要更多的切割来隔离每个点。

如果你在下图中看到,我们随机选择特征和值到我们切割的地方。经过 4 次切割后,我们能够分离出异常点,这意味着这些节点会在我们的树构建阶段很早就出现。

隔离森林流程|作者图片

您可以使用 python 的 Scikit-learn 库来实现它,如下所示—

**from sklearn.ensemble import IsolationForest**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**iforest = IsolationForest(n_estimators=5)
iforest.fit(data)**actual_data = [[1, 1.5]]
iforest.predict(actual_data)
>> 1   (Normal)**outlier_data = [[45, 55]]
iforest.predict(outlier_data)
>> -1   (Outlier)**

请随意探索超参数调谐库等。(链接在 资源部分 )

自动编码器

自动编码器是一种神经网络架构,被训练来重现输入本身。它包括两个可训练的组件,即编码器和解码器。其中编码器的目标是学*输入的潜在表示(原始维度到低维度),解码器的目标是学*从该潜在表示(低维度到原始维度)中重构输入。因此,为了让 autoencoder 正常工作,这两个组件应该针对各自的任务进行优化。

**自动编码器广泛用于检测异常情况。这种工作方式背后的一个典型直觉是,如果特征空间中的一个点远离大多数点(这意味着它拥有不同的属性,例如——狗图像聚集在特征空间的某个部分周围,而牛图像离该集群相当远),在这种情况下,自动编码器学*狗分布(因为与牛相比,狗图像的数量将非常高——这就是为什么它是异常的,因此模型将主要专注于学*狗集群)。这意味着,模型将能够或多或少地正确重新生成狗的图像,导致低损失值,而对于牛的图像,它将生成高损失(因为这是它第一次看到的奇怪的东西,并且它已经学*的权重主要是重建狗的图像)。我们使用这些重建损失值作为异常得分,因此得分越高,输入异常的几率就越高。

在下图中—将绿点视为狗,将蓝点视为牛。我们用这种输入分布来训练我们的系统,并期望它输出相同的结果。但我们可以看到,该模型或多或少完美地重新生成了黄色圆点,但不太适合蓝色圆点(因为它不在黄色圆点的相同特征范围内)**

Autoencoder |图片作者培训流程

在下图中——在推理过程中,当我们给我们的模型一个黄点时,它能够重新生成误差较小的点(正常点的信号),而对于蓝色点,它返回较高的误差(异常/异常值的信号),因为无法重新生成相同的点。

自动编码器的推理流程|按作者排序的图像

你可以使用 python 的 PyOD 库来实现它。我推荐你关注这篇 的博文 同样适用。(链接在 资源部分 )

在使用入度数 (ODIN)的异常值检测中,我们计算每个数据点入度。这里,入度被定义为该点所属的最*邻集的数量。该值越高,该点属于空间中某个密集区域的置信度越高。然而,另一方面,较小的值意味着它不是许多最*邻集的一部分,在空间中是孤立的。你可以把这种方法看作是 KNN 的逆方法。

使用度数内数字(ODIN) |图像的离群点检测

在该图中,我们设置 k 的值(最*邻点)* =3,红点仅属于蓝点的一个最*邻集,而所有其他点都是多于一个最*邻集的一部分。因此,我们得出结论,红点是一个离群值。*

你可以使用 python 的包离群库来实现它,如下所示—

**import package_outlier as po**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**result = po.LocalOutlierFactorOutlier(data)* *print (result)**

请随意探索超参数调谐库等。(链接在 资源部分 )

另外,如果你对研究论文感兴趣,你可以查看我写的一些研究论文摘要

资源

  1. https://pypi.org/project/pyod/
  2. sci kit-Learn:https://scikit-learn.org/stable/index.html
  3. 包装异常值:https://pypi.org/project/package-outlier/

我希望你喜欢读这篇文章。如果你愿意支持我成为一名作家,可以考虑注册成为的媒体成员。每月只需 5 美元,你就可以无限制地使用 Medium。

这篇博客到此为止。感谢您的宝贵时间!

5 熊猫的功能科学家必须知道的鼓舞人心的数据

原文:https://towardsdatascience.com/5-pandas-functions-inspiring-data-scientists-must-know-dff59580b307?source=collection_archive---------19-----------------------

数据科学家日复一日使用熊猫函数

照片来自 Unsplash,作者: Erik Mclean

不,它不是来自中国的巨大的黑白相间的吃竹子的熊。

Pandas 是 Python 中的一个库,专注于数据操作和分析。该库提供了各种用于操作和更改数据结构和数据集的函数。

你为什么需要了解熊猫?

  1. 数据科学家 80%的工作是清理数据集。使用移除或更改值的函数来清理数据集。这些功能的很大一部分来自熊猫图书馆。

2.当数据科学家被问到…

"你会推荐一位鼓舞人心的数据科学家首先学*哪种编程语言"

在一个 Kaggle 调查79%的人说 Python

Python 正迅速成为那些进入数据科学领域的人学*的首选语言,了解其最强大的库之一已成为一项要求。

所以说了这么多,让我们来看看本质,看看熊猫的 5 个功能,科学家们需要知道的鼓舞人心的数据。

1) .行,列

。loc 可能是熊猫图书馆中最重要和最常用的功能。该函数用于索引数据框以访问特定的行或列。

的输入参数。loc[]包含要作为第一个输入索引的行,以及要作为第二个输入索引的列。这些输入可以是整数,也可以是标签。

让我们通过一些例子来展示这个函数的功能并付诸实践。

代码示例:

df

  1. 返回 B 列的 6
df.loc[2,'B']

2。返回 C 列的所有内容

df.loc[:,'C']

3。返回第 1 行的所有内容

df.loc[1,:]

4。从 B 列返回 4&5

df.loc[0:1,'B']

2) .合并( )

就像 SQL 中的连接一样,pandas 中的合并功能基于索引或键列将数据帧合并在一起。

输入参数包括:

  • on-这是您输入要进行连接的列的位置。
  • 方式-选择所需的连接类型。可以从{ '左','右',,【外',,【内', }中选择。默认情况下是一个“内部联接”。

理解合并是很重要的,因为你经常会处理多个数据集。

您会遇到这样的情况:一个数据集有您需要的一列,而另一个数据集有您需要的另一列。不要来回地看每一个,将它们组合起来要容易得多。

代码示例:

df1,df2 相应地

1。将两个数据帧连接在一起

df1.merge(df2, on = ['C'], how = 'inner')

结果:

3) .应用( )

的。apply()函数正如其名所示。它将函数应用于列或行。

的输入。apply()是一个特殊的函数。该函数可能已经存在于 Python 中,或者您可以创建自己的函数。

让我来演示一下这两者。

代码示例:

1。计算 C 列中所有值的平方

df['C'].apply(np.sqrt) #uses the square root function from numpy

2。将 A 列中的每个数字加 2

df['A'].apply(lambda x: x + 2)

3。创建您自己的函数,如果值大于 5,则返回 True,否则返回 False。应用于整个数据框。

def above(x):
   if x > 5:
      return True
   else:
      return Falsedf.apply(above)

4) .groupby()

更高级的熊猫功能之一。groupby()根据列中的值创建不同的组。

主输入参数是‘by’,它等于您要分组的列。

假设我有一个 1000 人的数据框架,包括他们居住的国家和他们的工资。如果我想查看同一个国家所有人的工资,我可以使用。groupby()函数,其中“by”等于国家/地区列。

此外。groupby()函数通常与聚合函数一起使用。这些包括总和、平均值、最小值、最大值等。

因此,如果我们想查看每个国家的平均工资,代码应该是这样的…

df.groupby(by = ['Country']).mean()

5) .drop_duplicates()

很抱歉告诉你,你从网上得到的数据并不总是完美的。您下载的大多数数据集都会有缺失值、列中不正确的类型和重复值。

。drop_duplicates()处理了其中的一个问题,我将让您来猜测是哪个问题。

的输入参数。drop_duplicates()包括:

  • 子集-它不会删除整个数据框中的重复项,只会移除您输入的列中的重复项。
  • 保留—确定要保留哪些副本。‘第一个’:除去第一个出现的重复项。 【最后一个】 :除去最后一个出现的重复项。 【假】 :丢弃所有重复的。
df.drop_duplicates(subset = ['C'], keep = 'first')
#removes duplicate values from column C

奖金:。read_csv()

在使用上述任何函数之前,您需要将数据集导入 Python。

您找到的大多数数据集都位于 CSV(逗号分隔值)文件中,要将该数据集导入 Python,您可以使用。读取 csv()函数。

主要输入参数是数据集的文件路径。

import pandas as pd #this imports the pandas library in Python
df = pd.read_csv(C:\Documents\dataset.csv) 

最后一条建议

如果你还没有使用 Python,你迟早会使用的。

据报道,2020 年,LinkedIn 上 90%的数据科学招聘广告都提到了 Python。

Python 很大程度上与其最著名的库 Numpy 和 Pandas 有关。这意味着如果公司要求你了解 Python,他们也要求你了解它的库。

现在,当然,还有更多你应该知道的熊猫的功能,但是这 5 个功能通常每天都在使用,并且是理解熊猫的其他功能的很好的基础。

与 1k+人一起加入我的电子邮件列表,免费获得完整的 Python for Data Science 备忘单小册子。

你从未用过的 5 种熊猫方法…而且你没有失去任何东西!

原文:https://towardsdatascience.com/5-pandas-methods-youve-never-used-and-you-didn-t-lose-anything-37277fae7c55?source=collection_archive---------24-----------------------

你知道他们到底什么时候能帮上忙吗?

作者图片

总的来说,Python 的 pandas 库是一个非常有效的处理列表数据的工具,有时它会让用户感到惊讶。在这篇文章中,我们将讨论 5 个怪异的熊猫方法,这些方法由于各种原因看起来完全是多余的:笨重,有一个更简洁和众所周知的同义词,或者就是没用。

1.[ndim](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.ndim.html)

这个方法继承自 numpy。它返回一个对象的轴数,即 1 表示系列,2 表示数据帧:

import pandas as pd
df = pd.DataFrame({'A':[6, 8], 'B':[9, 2], 'C':[1, 5]}, 
                   index =['a', 'b'])
print(df, '\n')
print('ndim for a dataframe:', df.ndim)
print('ndim for a Series:', df['A'].ndim)**Output:**
   A  B  C
a  6  9  1
b  8  2  5 

ndim for a dataframe: 2
ndim for a Series: 1

实际上,我们用这种方法唯一能做的就是区分 Series 和 dataframe 对象。然而,出于同样的目的,我们可以简单地使用一种更广为人知和通用的方法— type()。此外,结果将以更容易理解的方式输出:

print(type(df))
print(type(df['A']))**Output:**
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

2.[keys](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.keys.html)

与 Python 字典一样,可以在 pandas 结构上使用方法keys()来获取它的“信息轴”,即数据帧的系列和列的索引。该语法不隐含任何参数:

print(df.keys())
print(df['A'].keys())**Output:** Index(['A', 'B', 'C'], dtype='object')
Index(['a', 'b'], dtype='object')

然而,与字典不同的是,pandas 对象本质上代表具有行和列的表格。因此,用columnsindex来代替更自然(也更常见)。此外,通过这种方式,我们可以获得一个数据帧的索引,而不仅仅是一个序列的索引:

print(df.columns)
print(df.index)
print(df['A'].index)**Output:**
Index(['A', 'B', 'C'], dtype='object')
Index(['a', 'b'], dtype='object')
Index(['a', 'b'], dtype='object')

3.[bool](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.bool.html)

另一个不太实用的方法是bool(),也没有任何参数。它唯一做的事情是返回一个具有布尔值的单元素熊猫结构的 bool。如果这两个条件中至少有一个不满足,If 将返回一个ValueError。换句话说,该方法只返回系列或数据帧的唯一值(bool 类型):

print(pd.Series([True]).bool())
print(pd.Series([False]).bool())
print(pd.DataFrame({'col': [True]}).bool())
print(pd.DataFrame({'col': [False]}).bool())**Output:** True
False
True
False

很难想象什么情况下有必要进行这种手术。无论如何,有更熟悉(也更通用)的方法可以做到这一点:

print(pd.Series([True]).values[0])df2 = pd.DataFrame({'col': [False]})
print(df2.loc[0, 'col'])
print(df2.iloc[0, 0])
print(df2.at[0, 'col'])
print(df2.squeeze())**Output:** True
False
False
False
False

4.[assign](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html)

此方法向数据帧添加新列:

df = df.assign(D=df['A']+df['B'])
print(df)**Output:
**   A  B  C   D
a  6  9  1  15
b  8  2  5  10

或者覆盖现有的:

df = df.assign(D=df['B']+df['C'])
print(df)**Output:
**   A  B  C   D
a  6  9  1  10
b  8  2  5   7

或者创建多个列,其中一列是基于在同一个assign中定义的另一列进行计算的:

df = df.assign(E=lambda x: x['C'] + x['D'], 
               F=lambda x: x['D'] + x['E'])
print(df)**Output:
**   A  B  C   D   E   F
a  6  9  1  10  11  21
b  8  2  5   7  12  19

同样的结果可以用一种不太麻烦、可读性更好的方式获得,尽管:

df['D']=df['B']+df['C']
df['E']=df['C']+df['D']
df['F']=df['D']+df['E']
print(df)**Output:
**   A  B  C   D   E   F
a  6  9  1  10  11  21
b  8  2  5   7  12  19

5.[swapaxes](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.swapaxes.html)

顾名思义,该函数适当地交换数据帧的轴和相应的值:

print(df, '\n')
print(df.swapaxes(axis1='index', axis2='columns'))**Output:
**   A  B  C   D   E   F
a  6  9  1  10  11  21
b  8  2  5   7  12  19 

    a   b
A   6   8
B   9   2
C   1   5
D  10   7
E  11  12
F  21  19

这里一件奇怪的事情是,我们总是必须指定参数'index''columns'(否则,将会抛出一个TypeError),尽管很明显这个方法的唯一应用就是交换这两个轴。在这种情况下,transpose()方法似乎是更好的选择:

print(df.transpose())**Output:
**    a   b
A   6   8
B   9   2
C   1   5
D  10   7
E  11  12
F  21  19

尤其是它的快捷方式:

print(df.T)**Output:**
    a   b
A   6   8
B   9   2
C   1   5
D  10   7
E  11  12
F  21  19

结论

冗余熊猫方法的列表可以继续下去,同义词方法做完全相同的事情,甚至具有相同的语法,但是其中一个方法更常见或具有更短的名称,如isnull()isna(),或mul()multiply()。如果你知道其他类似的例子,或者其他奇怪的熊猫方法,欢迎在评论中分享你的想法。

感谢阅读!

如果你喜欢这篇文章,你也可以发现下面这些有趣的:

https://medium.com/mlearning-ai/11-cool-names-in-data-science-2b64ceb3b882

你应该知道的 5 个熊猫展示技巧

原文:https://towardsdatascience.com/5-pandas-presentation-tips-you-should-know-about-d9e484c97f2a?source=collection_archive---------27-----------------------

当你需要与他人分享你的分析时,这些建议会对你有所帮助

希德·巴拉钱德朗Unsplash 上拍摄的照片

这些建议将帮助你与他人分享你的分析。无论你是学生、数据科学家还是博士研究员,每个项目都以某种形式的报告结束。希望这是 Confluence 上的一个帖子,GitHub 上的 Readme 或者一篇科学论文。

没有必要将数据帧中的值逐个复制粘贴到另一个软件中。Pandas 的格式化功能可以将一个数据帧转换成多种格式。

介绍

让我们用随机值创建一个 10 行 3 列的数据帧。

n **=** 10
df **=** pd**.**DataFrame(
    {
        "col1": np**.**random**.**random_sample(n),
        "col2": np**.**random**.**random_sample(n),
        "col3": [[random**.**randint(0, 10) **for** _ **in** range(random**.**randint(3, 5))] **for** _ **in** range(n)],
    }
)

1.用 HTML 共享结果

用 HTML 展示熊猫数据框架(图片由作者制作)。

熊猫数据帧可以用 to_html 函数转换成 HTML。如果您需要通过 HTML 发送自动报告,这很有用。您还可以在 pandas-analytics-server 上创建一个 API,这样您就可以在 web 浏览器中跟踪数据帧中的最新值。

注意,lxml 包是必需的。你可以用:pip install lxml 来安装它。

df_html **=** df**.**to_html()**with** open('analysis.html', 'w') **as** f:
    f**.**write(df_html)

甚至还有一个 read_html 函数,使您能够将 html 解析回熊猫数据帧。我还没有用通用的 HTML 试过——如果能用就好了。

df_list **=** pd**.**read_html('analysis.html')
df_list

从 HTML 加载数据帧(图片由作者制作)。

2.撰写科学论文

大多数高质量的研究论文都是使用 LaTeX——一种高质量的排版系统——撰写的。许多 LaTeX 作者制作一个数据帧的截屏,然后将它包含在他们的论文中,其他人花费相当多的时间将数据帧值格式化为 LaTeX 表。

如果我告诉你熊猫体内有一种可以帮你负重前行的功能,你会怎么想?让我们看看例子。

df**.**to_latex()

将熊猫数据帧转换为 Latex(图片由作者制作)。

您可以将它与 print 一起使用,以获得格式良好的输出。

**print**(df**.**to_latex())

乳胶熊猫数据框的漂亮印刷(图片由作者制作)。

3.撰写自述文件

Github 对存储库中的 README 和 Wiki 使用 Markdown 格式化语言。一个好的自述文件会让你的项目更容易被其他人使用。在 GitHub 上制作一个一步一步的例子是很常见的,但是手动格式化熊猫数据帧来降低价格会花费很多时间。熊猫保护了我们。

**print**(df**.**to_markdown())

降价中的熊猫数据框(图片由作者制作)。

4.Excel 电子表格

Excel 是商业世界事实上的标准。有了熊猫,我们可以轻松阅读 Excel 电子表格。它有一个将数据帧转换成 Excel 电子表格的功能。

注意,xlwt 和 openpyxl 包是必需的。你可以用 pip 安装它们。

df**.**to_excel('analysis.xlsx', index**=**False)

Excel 中的熊猫数据框(图片由作者制作)。

pd**.**read_excel('analysis.xlsx')

从 Excel 中读取熊猫数据帧(图片由作者制作)。

5.编写文档

在代码中编写注释时,将 DataFrame 转换为字符串可能很有用。

**print**(df**.**to_string())

Python 字符串中的熊猫数据帧(图片由作者制作)。

结论

这些是我在做我的分析的最后陈述时经常使用的一些熊猫陈述技巧。

你学到新东西了吗?请在下面的评论中告诉我。

在你走之前

- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Deep Learning Nanodegree](https://imp.i115008.net/c/2402645/788202/11298) [Course]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)- [Correlation Analysis 101 in Python](https://dataanalysis.substack.com/p/correlation-analysis-101-in-python)

上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

推特上关注我,在那里我定期发关于数据科学和机器学*的推特

照片由Courtney hedgeUnsplash 上拍摄

你应该在 2021 年开始使用的 5 个熊猫技巧

原文:https://towardsdatascience.com/5-pandas-tricks-you-should-start-using-in-2021-d32dbdecca70?source=collection_archive---------38-----------------------

用一个最好的新年决心开始新的一年:多了解熊猫。

照片由迈克尔·佩恩Unsplash 上拍摄

andas 无需介绍,因为它已经成为 Python 中事实上的数据分析工具。作为一名数据科学家,我每天都使用熊猫,它总能以更好的方式实现我的目标,让我感到惊讶。

对于熊猫新手— 熊猫为 Python 编程语言提供了高性能、易于使用的数据结构和数据分析工具。

熊猫这个名字来源于术语“面板数据”,这是一个计量经济学术语,指的是包括同一个人在多个时间段的观察结果的数据集。

在这篇文章中,我将向你展示 5 个熊猫的小技巧,它们会让你在以下情况下更有效率:

  • 用熊猫数据框连接数据,
  • 处理日期和时间,
  • 制作 Excel 报表,
  • 将数据帧存储到磁盘。

我们开始吧。

https://romanorac.medium.com/pandas-data-analysis-series-b8cec5b38b22

1.日期范围

Unsplash 上由 Waldemar Brandt 拍摄的照片

当从数据库或外部 API 获取数据时,通常需要指定查询的开始日期和结束日期。

操作日期可能会很棘手,但别担心,熊猫会掩护我们的!

有一个 data_range 函数,返回按天、月或年等递增的日期。它也和时间一起工作。

假设您需要一个按天递增的日期范围。

date_from **=** "2019-01-01"
date_to **=** "2019-01-12"
date_range **=** pd**.**date_range(date_from, date_to, freq**=**"D")
date_range

熊猫日期范围函数的输出。

让我们将生成的 date_range 转换为开始和结束日期,这可以直接传递给 API 或数据库查询。

**for** i, (date_from, date_to) **in** enumerate(zip(date_range[:**-**1], date_range[1:]), 1):
    date_from **=** date_from**.**date()**.**isoformat()
    date_to **=** date_to**.**date()**.**isoformat()
    **print**("%d. date_from: %s, date_to: %s" **%** (i, date_from, date_to)# the output with date_from and date_to
1\. date_from: 2019-01-01, date_to: 2019-01-02
2\. date_from: 2019-01-02, date_to: 2019-01-03
3\. date_from: 2019-01-03, date_to: 2019-01-04
4\. date_from: 2019-01-04, date_to: 2019-01-05
5\. date_from: 2019-01-05, date_to: 2019-01-06
6\. date_from: 2019-01-06, date_to: 2019-01-07
7\. date_from: 2019-01-07, date_to: 2019-01-08
8\. date_from: 2019-01-08, date_to: 2019-01-09
9\. date_from: 2019-01-09, date_to: 2019-01-10
10\. date_from: 2019-01-10, date_to: 2019-01-11
11\. date_from: 2019-01-11, date_to: 2019-01-12

2.与指示器合并

照片由派恩瓦特Unsplash 上拍摄

Pandas 有一个合并功能,顾名思义,它用一个数据库风格的连接合并两个数据帧。

合并两个数据集是将两个数据集合并为一个数据集,并根据公共列对齐每个数据集的行的过程

如果你和我一样,你也用过很多次 merge 函数。但让我惊讶的是,我并不知道指标的说法。

指示符参数向数据帧添加一个_merge列,告诉您该行来自哪个数据帧:

  • 左侧数据帧,
  • 右侧数据帧,
  • 或者两个数据帧。

当使用更大的数据集来验证合并操作时,_merge列非常有用。

让我们定义两个数据帧,并用合并指示器将它们合并。

left **=** pd**.**DataFrame({"key": ["key1", "key2", "key3", "key4"], "value_l": [1, 2, 3, 4]})

左侧数据框中的行

right **=** pd**.**DataFrame({"key": ["key3", "key2", "key1", "key6"], "value_r": [3, 2, 1, 6]})

右侧数据框中的行

df_merge **=** left**.**merge(right, on**=**'key', how**=**'left', indicator**=**True)

带有合并列的 df_merge 数据帧中的条目

我们可以使用_merge列来检查是否有预期数量的行具有来自两个数据帧的值。

df_merge**.**_merge**.**value_counts()# output of values count function
both          3
left_only     1
right_only    0
Name: _merge, dtype: int64

3.最*合并

照片由蒂姆·约翰逊Unsplash 上拍摄

当处理股票或加密货币等金融数据时,我们可能需要将报价(价格变化)与实际交易结合起来。

假设我们希望将每笔交易与之前几毫秒发生的报价合并。我们如何通过熊猫来实现这一目标?

Pandas 有一个函数 merge_asof ,它能够通过最*的键(在我们的例子中是时间戳)合并数据帧。数据集报价和交易取自熊猫的例子

报价数据框包含不同股票的价格变化。通常,报价比交易多得多。

quotes **=** pd**.**DataFrame(
    [
        ["2016-05-25 13:30:00.023", "GOOG", 720.50, 720.93],
        ["2016-05-25 13:30:00.023", "MSFT", 51.95, 51.96],
        ["2016-05-25 13:30:00.030", "MSFT", 51.97, 51.98],
        ["2016-05-25 13:30:00.041", "MSFT", 51.99, 52.00],
        ["2016-05-25 13:30:00.048", "GOOG", 720.50, 720.93],
        ["2016-05-25 13:30:00.049", "AAPL", 97.99, 98.01],
        ["2016-05-25 13:30:00.072", "GOOG", 720.50, 720.88],
        ["2016-05-25 13:30:00.075", "MSFT", 52.01, 52.03],
    ],
    columns**=**["timestamp", "ticker", "bid", "ask"],
)
quotes['timestamp'] **=** pd**.**to_datetime(quotes['timestamp'])

报价数据框架中的条目

交易数据框包含不同股票的交易。

trades **=** pd**.**DataFrame(
    [
        ["2016-05-25 13:30:00.023", "MSFT", 51.95, 75],
        ["2016-05-25 13:30:00.038", "MSFT", 51.95, 155],
        ["2016-05-25 13:30:00.048", "GOOG", 720.77, 100],
        ["2016-05-25 13:30:00.048", "GOOG", 720.92, 100],
        ["2016-05-25 13:30:00.048", "AAPL", 98.00, 100],
    ],
    columns**=**["timestamp", "ticker", "price", "quantity"],
)
trades['timestamp'] **=** pd**.**to_datetime(trades['timestamp'])

交易数据框中的条目

我们通过报价器合并交易和报价,最新的报价可能比交易晚 10 毫秒。

如果报价落后于交易超过 10 毫秒,或者没有任何报价,该报价的买价和卖价将为空(本例中为 AAPL 股票)。

df_merge = pd**.**merge_asof(trades, quotes, on**=**"timestamp", by**=**'ticker', tolerance**=**pd**.**Timedelta('10ms'), direction**=**'backward')

df_merge DataFrame中的条目

4.创建 Excel 报表

卢卡斯·布拉塞克在 Unsplash 上的照片

我们可以直接在 pandas 中创建 Excel 报表(借助 XlsxWriter 库)。

这大大节省了时间——不再需要将数据帧保存为 CSV 格式,然后在 Excel 中进行复制粘贴和格式化。我们还可以添加各种图表等。

让我们定义一个数据框架,然后用它创建一个 Excel 报表。

df **=** pd**.**DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns**=**["a", "b", "c"])

下面的代码片段创建了一个 Excel 报表。

report_name **=** 'example_report.xlsx'
sheet_name **=** 'Sheet1'writer **=** pd**.**ExcelWriter(report_name, engine**=**'xlsxwriter')
df**.**to_excel(writer, sheet_name**=**sheet_name, index**=**False)*# writer.save()*

我们还可以在 Excel 报告中添加图表。

我们需要定义图表的类型(我们示例中的折线图)和图表的数据系列(数据系列需要在 Excel 电子表格中)。

*# define the workbook* workbook **=** writer**.**book
worksheet **=** writer**.**sheets[sheet_name]*# create a chart line object* chart **=** workbook**.**add_chart({'type': 'line'})*# configure the series of the chart from the spreadsheet
# using a list of values instead of category/value formulas:
#     [sheetname, first_row, first_col, last_row, last_col]* chart**.**add_series({
    'categories': [sheet_name, 1, 0, 3, 0],
    'values':     [sheet_name, 1, 1, 3, 1],
})*# configure the chart axes* chart**.**set_x_axis({'name': 'Index', 'position_axis': 'on_tick'})
chart**.**set_y_axis({'name': 'Value', 'major_gridlines': {'visible': False}})*# place the chart on the worksheet* worksheet**.**insert_chart('E2', chart)*# output the excel file* writer**.**save()

用熊猫创建的 Excel 报表

5.节省磁盘空间

Photo by 铮 夏 on Unsplash

当处理多个数据科学项目时,您通常会从不同的实验中获得许多预处理数据集。笔记本电脑上的小型固态硬盘很快就会变得杂乱无章。

Pandas 使我们能够在保存数据集时对其进行压缩,然后以压缩格式读回。

让我们用随机数创建一个大熊猫数据框架。

import numpy as npdf **=** pd**.**DataFrame(np**.**random**.**randn(50000,300))

带有随机数的数据帧。

当我们将这个文件保存为 CSV 格式时,它会占用硬盘上将* 300 MB 的空间。

df**.**to_csv('random_data.csv', index**=**False)

我们可以通过使用 gz 扩展名而不是 csv 将文件大小减少到 136 MB。

df**.**to_csv('random_data.gz', index**=**False)

我们不会失去任何功能,因为将 gzipped 数据读入 DataFrame 也很容易。

df **=** pd**.**read_csv('random_data.gz')

结论

Johannes Plenio 在 Unsplash 上拍摄的照片

如果你想运行这些例子,你可以下载 Jupyter 笔记本

这些技巧帮助我每天与熊猫相处时更有效率。让我在评论中知道你最喜欢的熊猫戏法是什么。

在你走之前

- [Correlation Analysis 101 in Python](https://dataanalysis.substack.com/p/correlation-analysis-101-in-python)- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]

上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

Twitter 上关注我,在那里我定期发布关于数据科学和机器学*的消息。

Unsplash 上由Courtney hedge拍摄的照片

让数据科学家的生活变得更轻松的 5 个热门帖子

原文:https://towardsdatascience.com/5-popular-posts-on-making-your-life-as-a-data-scientist-easier-f77c7ff0303e?source=collection_archive---------25-----------------------

从加快加载时间到简化学*过程

奥斯卡·西尔万在 Unsplash 上的照片

作为编辑,我们喜欢突出我们发表的最好的文章;世界上发生了这么多事情,错过一篇好文章太容易了。为了帮助你找到它们,我们每天都会添加新编辑精选,如果你还没有得到变量——我们每周的必读精选— 你真的应该注册

发现我们的读者认为最有用的帖子给了我们同样的快乐,在回顾了上个月的收获后,我们想分享我们在 7 月发表的最受欢迎的五篇帖子。

这些帖子的作者可能来自不同的专业背景,从不同的角度研究数据科学,但他们都有一个共同点:他们的目标是帮助数据科学家的工作,无论是通过加快工作流程,提高关键技能,还是帮助他们的同事更有效地学*。

让我们开始吧。

“数据科学让我的收入翻了三倍。以下是方法。

我们在 7 月份发表了一篇阅读量最大的文章, Natassha Selvaraj 讲述了她自己的职业转变,显然引起了 TDS 读者的共鸣:基于个人经历,但充满了可操作的见解,你们中的许多人认为她的故事鼓舞人心。

“你用 Python 读 Excel 文件吗?有一个快 1000 倍的方法。”

如果将数据加载速度提高三个数量级听起来像是一个诱人的前提,那么你会在 Nicolas Vandeput 的关于用 Python 处理 Excel 文件的实验教程中发现巨大的价值。

《数据科学家的 Python 高效编码指南》

学*核心技术技能和最佳实践对于有抱负的数据科学家来说至关重要,但目前只能获得一个。【Varshita Sher 博士收集了一些有用的技巧和诀窍,让日常的 Python 工作流程更加顺畅和高效,填补了这个空白。

《如何快速成为数据科学家》

与你典型的“更快获得 X”指南不同, Mohammed Ayar 的帖子承认,学*和培训成为一名数据科学家需要大量艰苦的工作和实践。但这并不意味着没有快速跟踪过程的方法,这正是他分享的框架可以帮助你的。

“让我的数据科学家工作更轻松的 5 件事”

在工作了一年后,Shree Vandana 学到了一些重要的工具和流程,可以将懒散的一天变成高效的一天。无论你是否是一名职业生涯早期的数据科学家,你都应该看看她的建议。

</5-things-that-make-my-job-as-a-data-scientist-easier-dc0820f0f136>

你是否读过(或写过)一篇可能对其他数据科学家的工作有所帮助的文章?分享到评论里吧!

Tableau 的 5 个强大特性将使您的数据可视化项目脱颖而出

原文:https://towardsdatascience.com/5-powerful-features-of-tableau-that-will-make-your-data-visualization-projects-stand-out-37291c737ec8?source=collection_archive---------6-----------------------

数据可视化变得更加容易

Tableau 软件创建的可视化。知识共享许可https://commons.wikimedia.org/w/index.php?curid=74539785

世界正以超乎我们想象的速度飞速发展。世界正变得越来越由数据驱动,许多行业正在转向数据科学家,主要是商业智能来管理他们的数据库,以帮助更好的业务决策。

我在一家商业情报机构实*了六个月,根据我在各种公司的经验,商业智能正在使用先进的工具来分析原始数据并产生有用的细分信息,以提高公司的效率并增加收入。

现在,这就是数据可视化发挥作用的地方。企业处理大量数据,分析原始格式的数据通常很复杂。以彩色图形、图表、形状和绘图的形式显示数据可以提高您正在使用的数据集的质量和准确性。数据可视化的首选工具是 Tableau。

Tableau 是一款数据可视化软件,旨在查询云数据库、电子表格、机器学*算法、社交数据库和其他数据库进展,以创建简单的面向图形的数据可视化。

我喜欢 Tableau 的一个特别之处是,使用这个工具不需要掌握复杂的 Python 或 R 知识。通过友好的拖放界面,任何人都可以理解它的功能。话虽如此,以下是 Tableau 的五个特性,它们将帮助您创建更好的数据可视化项目:

多功能仪表盘

Tableau 仪表板。作者截图

好的,所有现代技术工具都有一个仪表板,或者很多人喜欢称之为主页。许多数据和编程工具都配备了仪表板,用户可以在其中进行快速更改、开发预设以及添加自定义格式和布局,这有助于提高数据分析师的速度、准确性和有效性。

Tableau 软件比你在其他数据可视化工具中看到的功能更多。开发该软件的两位来自斯坦福的研究人员看到了数据分析中的困难,并希望有一个无缝的可视化过程,可以很容易地被所有数据科学家使用,不管他们的专业是什么。

通过一个信息丰富、先进但易于使用的仪表板,用户可以部署交互式模型,应用各种格式,并为同时处理多个项目的分析师服务;您可以有效地将一个工作簿中使用的所有元素转移到另一个工作簿中。

数据提取和混合

如果你有储存在数据库里的数据,请举手。我想每个人都有。好吧,AWS 怎么样?Excel?外部公司资源怎么样?事实证明,我们中的很多人都在这些资源中储存了有价值的信息。从经验来看,在将资源部署到项目进行分析之前,总是用不同的工具转换资源(需要时,我会使用 Hevo Data )是一个挑战。

Tableau 提供了许多数据源功能来连接和导入来自各种外部资源的数据。从大数据、关系数据库、云数据到 Excel 电子表格,大多数都可以通过从源文件复制文件,然后粘贴到 Tableau 工作表中,轻松地进行部署。

为了提高效率,您需要下载驱动程序来与数据库和服务器细节进行交互,以连接到数据连接器。Tableau 支持大量的数据连接器,因此您不需要迁移。举几个例子:Salesforce、SQL Server、Presto、FreshBook、GraphQL、MailChimp、Dropbox、Basecamp、亚马逊 S3、Apache Hive、XML、Smartsheet 等等。

增强的数据可视化功能

数据可视化的主要模块用箱线图、图解、图表、表格和任何其他形式的图示来表示数据(数字、交易、统计)。Tableau 提供了不同的视觉选择,从其独特的可视化功能的巨大集合中挑选。

你还记得那些用来表示冠状病毒统计数据的华而不实的图形和图表吗?这在 2020 年很常见。我想每个人都*惯于看到它。那些吸引人的插图不断提醒你去看更新,但并不总是吸引人——基本上是复杂的原始数据和庞大的文本。

研究证明,人类更有可能通过视觉来学*和获取知识。这是一个公开的秘密,企业喜欢 data analyst 以简单、朴素和丰富多彩的图形和图表呈现数据(有用的信息)。以下是 Tableau 提供的一些可视化效果:

  • 运动图表
  • 柱状图
  • Choropleth 地图
  • 堆叠柱
  • 热图
  • 亮点表
  • 项目符号图

预测分析和预测

Tableau 的另一个强大功能是使用时间序列和预测。我曾经做过一个项目。核心目标是预测在特定加油站购买天然气的最大客户数量。

通常,要对每天的销售业务进行接*完美的预测,需要花费大量的时间,对不同工作日的原始数据进行编码、部署和组织。你的 Python 知识可能会支持你,但它不会像 Tableau 软件那样有效和省时。

Tableau 可靠的前端和后端服务器使快速形成趋势线和预测变得容易。拖放界面使预测变得有效和高效,因为您可以选择与您正在处理的内容相关的选项。

询问数据特征

Tableau 软件支持 94%的数据仓库功能,你可以同意我的观点,来自数据科学各个方面的专业用户在这个强大的软件上处理他们的数据可视化项目。Tableau 增加了一个功能,用户可以互动,寻求解决方案,并与船上的许多人分享想法。

询问数据功能。这个特性使得理解数据变得更加容易,你不需要在你的工作区附*放一本数据科学百科全书(如果他们有的话)。有一个像谷歌一样的搜索面板,但只是用于数据相关的查询。你需要做的只是用你常用的语言输入你的查询——我说的是英语或西班牙语,而不是 Python 或 JavaScript,Tableau 会给你与你的查询相关的最重要的答案。

该功能旨在改善数据科学专业人员之间的相互交流,并培养解决问题的新见解和新模式。

结论

如果您曾经尝试过数据可视化,并且认为它很难理解或者太复杂而无法将模块应用到您的项目中,那么您可能没有使用正确的工具。Tableau 是一款非常棒的软件,可以简化您所有的数据可视化任务,创建更好、更准确的分析。该软件提供了更多的功能和规格,使数据分析师的工作更加准确和高效。

Tableau 软件如何入门?Tableau 有四个主要产品选项可供选择: Tableau PrepTableau DesktopTableau Server&Tableau OnlineTableau Mobile 。您可以选择适合您数据需求的首选产品。

在本文中,我们介绍了 Tableau 软件的五个关键特性。您可以很容易地熟悉这些功能,并使您的数据可视化项目与众不同。如果你需要帮助入门,可以看看 Tableau 平台提供的这些免费的教程视频

资源

https://www.tableau.com/

如果你喜欢这个,你可能也会喜欢:

[## SQL 技能(如果掌握的话)会让你获得更好的数据科学机会

towardsdatascience.com](/sql-skills-if-mastered-will-get-you-better-data-science-opportunities-9f912d4f88d3)

5 个强大的 Pip 命令来加速您的开发⏰

原文:https://towardsdatascience.com/5-powerful-pip-commands-to-speed-up-your-development-fd4d2fe4935b?source=collection_archive---------21-----------------------

专家提示

你以为安装 Python 包就是 pip 能做的一切吗?

Marc-Olivier Jodoin 在 Unsplash 上拍摄的照片

您的旅程概述

搭建舞台

学* Python 的时候,很快就给你介绍了 pip — Python 的包安装器。这是将外部包安装到您的 Python 生态系统的主要工具。

Python 的主要卖点之一是第三方包的丰富生态系统。例如,软件包 NumPyMatplotlibPandasSeabornScikit-Learn 都在数据科学中使用。事实上,在不使用上述任何库的情况下构建一个数据科学项目将是一个挑战(不是以一种好的方式!).

当我开始使用 Python 时,我只知道 pip 命令:

pip install <package name>

不错,但是 pip 有更多的命令。如果我知道这些命令,我会节省几个小时的时间。不要犯我的错误!

在这篇博文中,我将向您展示如何使用 5 个最强大的 pip 命令。

先决条件:除了安装 pip,你不需要任何 pip 的知识😃

快问:皮普是什么?

Pip 是 Python 开发者用来管理包的主要工具。这包括(您将很快看到):

  • 下载包
  • 更新包
  • 删除包
  • 查看已安装的软件包
  • 签出特定的包

你应该知道: Pip 并不是用 Python 管理包的唯一方式。在数据科学中,使用 conda 包管理器处理 Python 包也很常见。

知道安装的 pip 版本是很好的:要检查这一点,您可以运行命令

python -m pip --version**Output:** pip 21.2.3 from <path to pip>

一般来说,保持 pip 更新是一种良好的做法。要获得 pip 的最新版本,请使用以下命令:

python -m pip install --upgrade pip

1 —安装软件包

基本安装

pip 的第一个也是最重要的用途是安装第三方软件包。假设您想要安装 Seaborn 来创建可爱的数据可视化。为此,只需运行以下命令:

python -m pip install seaborn**Output:** Successfully installed seaborn-0.11.1 (and dependencies)

命令pip install是您最常使用的 pip 命令。默认情况下,它会安装最新版本的 Seaborn。此外,它会自动安装任何依赖项(Seaborn 依赖的其他库)。

如果您出于某种原因不想要依赖项,那么您可以使用标志--no-deps:

python -m pip install --no-deps seaborn**Output:** Successfully installed seaborn-0.11.1 (and nothing else)

安装特定版本

但是有时候,你并不真的想要下载一个包的最新版本。这通常是为了避免破坏与其他包的兼容性。要下载软件包的特定版本,请用两个等号指定:

python -m pip install numpy==1.20.0**Output:** Successfully installed numpy-1.20.0

从需求文件安装

假设您用 Python 开发了一个非常棒的数据科学应用程序。您的应用程序只使用三个包:

  • NumPy(版本 1.21.1)
  • 熊猫(版本 1.3.1)
  • Seaborn(版本 0.11.1)

这个应用程序太酷了,你不得不与你的朋友分享。你把 Python 文件发给他们。但是,他们不能运行 Python 文件,除非他们也安装了 NumPy、Pandas 和 Seaborn。让你的朋友一个接一个地安装它们(用正确的版本)会有多累?

幸运的是,有一个更好的方法:一个 requirements.txt 文件。在包含这三行代码的项目文件夹中创建一个名为 requirements.txt 的文件:

numpy==1.21.1
pandas==1.3.1
seaborn==0.11.1

当您的朋友收到您的项目时,她可以简单地运行命令:

python -m pip install -r requirements.txt**Output:** Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.4.2 pandas-1.3.1 pillow-8.3.1 seaborn-0.11.1

你应该知道:-r旗是--requirements的简写,所以你可能会看到两者都被使用。另外,文件名 requirements.txt 是一个约定。然而,通常没有一个好的理由来打破惯例。

2-更新包

这是一个短的。新版本的软件包经常出现。假设您想升级到 NumPy 的最新版本。然后,您可以简单地运行命令:

python -m pip install -U numpy**Output:** Successfully installed numpy-1.21.1

旗帜-U--upgrade的简写。两者都可以接受,你可以自由选择使用哪一个👍

3 —卸载软件包

有时候,你想卸载一个软件包。这可能是因为该包与其他包产生了冲突。

不管是什么原因,使用命令pip uninstall都很简单。尝试运行以下命令:

python -m pip uninstall numpy**Output:** Successfully uninstalled numpy-1.21.1

执行上述命令时,通常需要输入Y,然后按回车键进行验证。这是 pip 在问:“你真的确定要卸载 NumPy 吗?”

我觉得皮普的直升机家长方式很烦人。如果你有同样的感觉,那么你可以使用标志-y(T2 的简写)来避免被问到:

python -m pip uninstall -y numpy**Output:** Successfully uninstalled numpy-1.21.1

4 —查看已安装的软件包

如果您想知道您的系统上安装的 Python 包,那么使用命令pip freeze:

python -m pip freeze**Output:** 
appdirs==1.4.4
atomicwrites==1.4.0
attrs==21.2.0
beautifulsoup4==4.9.3
black==21.7b0
.
.
.
uvicorn==0.13.4
Werkzeug==2.0.1

pip freeze命令显示了每个已安装的 Python 包和相应的版本号。

嗯……输出的格式看起来很熟悉。这正是我之前谈到的 requirements.txt 文件的格式!

如果您想将您安装的软件包保存在一个需求文件中,那么您可以编写:

python -m pip freeze > requirements.txt

该命令创建一个名为 requirements.txt 的新文件,并用pip freeze的输出填充它。这为您提供了一种生成 requirements.txt 文件的简单而巧妙的方法🔥

你要知道:我们称output > file标准输出流。这与 pip 无关,是(有趣的)终极废话。简而言之,该语法将左边的输出发送到右边的文件。

5 —检出特定的包

这是我个人最喜欢的 pip 命令。假设您安装了 NumPy。

问题 1:NumPy 有哪些依赖关系?

一个更难的问题:

问题 2: 你的其他哪些包依赖 NumPy?

获取这些信息(以及更多!)你可以使用命令pip show:

python -m pip show numpy**Output:** 
Name: numpy
Version: 1.21.1
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: [https://www.numpy.org](https://www.numpy.org)
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: <path to numpy on my system>
Requires:
Required-by: seaborn, scipy, pandas, matplotlib

仔细阅读上面的信息。最重要的是:

  • 包的名称。
  • 安装的版本。
  • 包的摘要。
  • 包的主页。
  • 软件包在系统上的位置。
  • 依赖关系(根据需要编写)。
  • 需要这个包的其他包(按 Required-by 编写)。

注意pip show解决了我们的两个问题:

答案 1: NumPy 不需要任何其他外部 Python 包。

回答 2:Seaborn、SciPy、Pandas、Matplotlib 这些包都需要 NumPy。

如果你需要一些关于软件包的快速信息,那么我强烈推荐使用pip show😎

额外提示—检查缺失的依赖项

Bermix 工作室Unsplash 拍摄的照片

说我装了 NumPy,Matplotlib,Pandas,Seaborn。然而,出于某种原因,我已经设法卸载 NumPy 错误。现在 Matplotlib、Pandas 和 Seaborn 将无法工作,因为它们都依赖于 NumPy😧

你如何发现什么是错的?只需运行命令pip check:

python -m pip check**Output:** 
seaborn 0.11.1 requires numpy, which is not installed.
scipy 1.7.1 requires numpy, which is not installed.
pandas 1.3.1 requires numpy, which is not installed.
matplotlib 3.4.2 requires numpy, which is not installed.

命令pip check将打印出所有 Python 包中所有缺失的依赖项。现在你意识到 NumPy 不见了,你可以简单地用pip install把它装回去。

包扎

现在,您应该可以放心地使用 pip 来满足您的所有软件包需求。如果您需要了解更多关于 pip 的信息,请查阅 pip 文档

喜欢我写的?查看我的博客文章类型提示黑色格式、Python 中的下划线5 个字典提示了解更多 Python 内容。如果你对数据科学、编程或任何介于两者之间的东西感兴趣,那么请随意在 LinkedIn 上加我,并向✋问好

5 个实用的数据科学项目将帮助您解决 2022 年的实际业务问题

原文:https://towardsdatascience.com/5-practical-data-science-projects-that-will-help-you-solve-real-business-problems-for-2022-a5a3904ea39b?source=collection_archive---------2-----------------------

模拟现实生活问题的数据科学项目精选列表

照片由 XPSUnsplash 上拍摄

一定要 订阅 千万不要错过另一篇关于数据科学指南、诀窍和技巧、生活经验等的文章!

"告别无用的副业."

我开始写文章已经快两年了——相当于刚刚超过 175 篇文章!我以前的一些文章中的一个错误是,我建议的数据科学项目很有趣,但不实用。

获得一份数据科学家工作的最简单的方法之一是展示你已经完成了类似的项目,并且在工作岗位上工作过。因此,我想和你分享一些实用的数据科学项目,这些项目是我个人在职业生涯中完成的,将会丰富你的经验和你的投资组合。

话虽如此,让我们深入探讨一下:

1.客户倾向建模

什么?

倾向模型是预测某人做某事的可能性的模型。举几个例子:

  • 网站访问者注册账户的可能性
  • 一个注册用户付费并订阅的可能性
  • 一个用户推荐另一个用户的可能性

此外,倾向建模不仅包括“谁”和“什么”,还包括“什么时候”(你应该什么时候锁定你已经确定的用户)和“如何”(你应该如何向你的目标用户传递你的信息?).

为什么?

倾向建模允许你更明智地分配资源,从而提高效率,同时取得更好的结果。举个例子,想想这个:不是发送一封用户点击几率为 0%-100%的电子邮件广告,而是通过倾向建模,你可以锁定点击几率超过 50%的用户。更少的邮件,更多的转化!

如何:

下面是演示如何构建基本倾向模型的两个代码演练:

https://www.kaggle.com/benpowis/customer-propensity-to-purchase https://www.kaggle.com/jalenguzman/marketing-analytics-classification-and-eda#Classification-Algorithms

这里有两个数据集,你可以用来建立一个倾向模型。记下每个数据集中提供的要素类型:

https://www.kaggle.com/benpowis/customer-propensity-to-purchase-data https://www.kaggle.com/rodsaldanha/arketing-campaign?select=marketing_campaign.csv

一定要 订阅 千万不要错过另一篇关于数据科学的文章,包括指南、诀窍和技巧、生活经验等!

2.度量预测

什么?

指标预测是不言自明的,它指的是在短期内预测给定的指标,如收入或用户总数。

具体来说,预测涉及使用历史数据作为输入来生成预测输出的技术。即使输出本身不完全准确,预测也可以用来衡量特定指标走向的总体趋势。

为什么?

预测基本上就像是展望未来。通过预测(带着一定程度的自信)未来会发生什么,你可以更主动地做出更明智的决定。这样做的结果是,你将有更多的时间来做决定,并最终减少失败的可能性。

如何:

第一个资源提供了几个时间序列模型的概要:

第二个资源提供了使用 Prophet 创建时序模型的分步演练,Prophet 是脸书专门为时序建模构建的 Python 库:

https://www.kaggle.com/elenapetrova/time-series-analysis-and-forecasts-with-prophet

3.推荐系统

什么?

推荐系统是一种算法,其目标是向用户建议最相关的信息,无论是亚马逊上的类似产品,网飞上的类似电视节目,还是 Spotify 上的类似歌曲。

推荐系统主要有两种类型:协同过滤和基于内容的过滤。

  • 基于内容的推荐系统根据先前选择的项目的特征推荐特定的项目。例如,如果我以前看了很多动作片,它会将其他动作片排在更高的位置。
  • 协同过滤另一方面,基于相似用户的反应过滤用户可能喜欢的项目。比如我喜欢宋 A,别人喜欢宋 A 宋 C,那么我就会被推荐宋 C。

为什么?

推荐系统是最广泛使用和最实用的数据科学应用之一。不仅如此,就数据产品而言,它还拥有最高的投资回报率。据估计,亚马逊在 2019 年的销售额增长了 29%,这主要归功于其推荐系统。同样,网飞声称其推荐系统在 2016 年价值惊人的 10 亿美元

但是是什么让它如此有利可图呢?正如我前面提到的,这是关于一件事:相关性。通过向用户提供更多相关的产品、节目或歌曲,你最终会增加他们购买更多和/或保持更长时间参与的可能性。

如何:

资源和数据集

https://www.kaggle.com/shivamb/netflix-shows https://www.kaggle.com/mrmorj/restaurant-recommendation-challenge?select=orders.csv https://www.kaggle.com/bricevergnou/spotify-recommendation?select=yes.py

4.深潜分析

什么?

深入分析就是对特定问题或主题的深入分析。他们本质上可以是探索性的,以发现新的信息和见解,或者是调查性的,以了解问题的原因。

这不是一个被广泛谈论的技能,部分是因为它来自经验,但这并不意味着你不能提高它!和其他事情一样,这只是一个练*的问题。

为什么?

对于任何与数据相关的专业人士来说,深度挖掘都是必不可少的。能够找出某些东西不工作的原因,或者能够找到银弹,是区分伟大和优秀的标准。

资源和数据集

以下是几个你可以自己尝试的深度潜水任务:

https://www.kaggle.com/ravichaubey1506/healthcare-cost https://www.kaggle.com/pavansubhasht/ibm-hr-analytics-attrition-dataset https://www.kaggle.com/jackdaoud/marketing-data/tasks?taskId=2986

5.客户细分

什么?

客户细分是将客户群分成几个部分的实践。

最常见的细分类型是人口统计,但也有许多其他类型的细分,包括地理、心理、需求和价值。

为什么?

细分对企业来说非常有价值,原因有几个:

  • 它可以让您进行更有针对性的营销,并向每个细分市场传递更个性化的信息。年轻的青少年比几个孩子的父母更看重不同的东西。
  • 当资源有限时,它允许您优先考虑特定的细分市场,尤其是那些利润更高的细分市场。
  • 细分也是追加销售和交叉销售等其他应用的基础。

如何:

https://www.kaggle.com/fabiendaniel/customer-segmentation https://www.kaggle.com/kushal1996/customer-segmentation-k-means-analysis

数据集

https://www.kaggle.com/vjchoudhary7/customer-segmentation-tutorial-in-python https://www.kaggle.com/kaushiksuresh147/customer-segmentation

感谢阅读!

我希望这对您的数据科学之旅有所帮助!掌握这些技能不仅表明你在技术上是可靠的,还表明你知道如何开展增加商业价值的数据科学项目。对任何一位招聘经理说这句话,我保证他们会印象深刻;).

一如既往,我祝你学*一切顺利!

如果您喜欢这篇文章,请务必 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

不确定接下来要读什么?我为你挑选了另一篇文章:

</10-most-practical-data-science-skills-you-should-know-in-2022-9487d7750e8a>

还有一个:

[## 六分钟内解释所有概率分布

towardsdatascience.com](/all-probability-distributions-explained-in-six-minutes-fe57b1d49600)

特伦斯·申

编写可靠代码的 5 个原则

原文:https://towardsdatascience.com/5-principles-to-write-solid-code-examples-in-python-9062272e6bdc?source=collection_archive---------0-----------------------

小窍门

借助于坚实的设计原则编写更好的代码的简短指南,用 Python 例子来说明。

作为一名刚刚开始工作的软件工程师,没有正式的计算机科学背景,我一直在努力提出合理的底层设计并以正确的方式构建代码。最初,它帮助我想出了一个需要遵循的 5 条原则的清单,我将在这篇文章中与你分享。

坚实的设计原则

SOLID 是 5 个面向对象设计原则集合的首字母缩写,大约 20 年前由 Robert C. Martin 首次提出概念,它们塑造了我们今天编写软件的方式。

照片由 Unsplash 上绘制

它们旨在帮助创建更简单、更容易理解、可维护和可扩展的代码。当一大群人在不断增长和发展的代码库上工作时,这变得非常重要,这些代码库通常由成千上万(如果不是数百万)行代码组成。这些原则是保持良好实践和编写更高质量代码的路标。

这些字母代表:

  1. 单一责任原则
  2. 开/关原则
  3. 利斯科夫替代原理
  4. 界面分离原理
  5. 从属倒置原则

它们都是简单的概念,很容易掌握,但是在编写行业标准代码时非常有价值。

1.单一责任原则

一个类应该有且只有一个改变的理由。

这大概是最直观的原理,对于软件组件或者微服务也是如此。“只有一个改变的理由”可以被重新表述为“只有一个责任”。这使得代码更加健壮和灵活,对于其他人来说更容易理解,并且在更改现有代码时,您将避免一些意想不到的副作用。您还需要做更少的更改:一个类需要更改的独立原因越多,它需要更改的次数就越多。如果您有许多相互依赖的类,那么您需要做出的更改数量可能会呈指数级增长。你的类越复杂,就越难在不产生意外后果的情况下改变它们。

class Album:
    def __init__(self, name, artist, songs) -> None:
        self.name = name
        self.artist = artist
        self.songs = songs def add_song(self, song):
        self.songs.append(song) def remove_song(self, song):
        self.songs.remove(song)    def __str__(self) -> str:
        return f"Album {self.name} by {self.artist}\nTracklist:\n{self.songs}" # breaks the SRP
    def search_album_by_artist(self):
        """ Searching the database for other albums by same artist """
        pass

在上面的例子中,我创建了一个类Album。它存储专辑名称、艺术家和曲目列表,并可以操作专辑的内容,例如添加歌曲或删除。现在,如果我添加一个功能来搜索同一位艺术家的专辑,我就违反了单一责任原则。如果我决定以不同的方式存储专辑(例如,通过添加唱片标签或将曲目列表存储为曲目名称和长度的字典),我的类将必须更改,如果我更改存储这些专辑的数据库(例如,我从 Excel 表移动到在线数据库),我的类也需要更改。显然,这是两种不同的责任。相反,我应该创建一个与相册数据库交互的类。这可以通过按首字母、曲目数量等搜索专辑来扩展。(参见下一个原则)

# instead:
class AlbumBrowser:
    """ Class for browsing the Albums database"""
    def search_album_by_artist(self, albums, artist):
        pass

    def search_album_starting_with_letter(self, albums, letter):
        pass

一个警告:使类过于简单会使代码变得难以阅读,因为人们不得不遵循一长串相互传递的对象,并可能导致单方法类的代码库支离破碎。这个原则并不意味着每个类都应该像在一个方法中一样做一件单一的事情,而是一个概念

2.开闭原理

软件实体(类、模块、功能等。)应该对扩展开放,但对修改关闭。

这意味着我应该能够在不改变现有代码结构的情况下添加新功能,而是添加新代码。目标是尽可能少地更改现有的、经过测试的代码,以防止出现 bug,并且不得不重新测试所有东西。如果不遵循这个原则,结果可能是依赖类的一长串变化,现有特性的退化,以及不必要的测试时间。

下面的例子说明了这一点:

class Album:
    def __init__(self, name, artist, songs, genre):
        self.name = name
        self.artist = artist
        self.songs = songs
        self.genre = genre#before
class AlbumBrowser:
    def search_album_by_artist(self, albums, artist):
        return [album for album in albums if album.artist == artist] def search_album_by_genre(self, albums, genre):
        return [album for album in albums if album.genre == genre]

现在,如果我想按艺术家和流派搜索,会发生什么?如果我加上发布年份会怎么样?我将不得不每次都编写新的函数(总共(准确地说是 2^n)-1),而且数量呈指数增长。

相反,我应该为我的规范定义一个具有公共接口的基类,然后为从基类继承该接口的每种类型的规范定义子类:

#after
class SearchBy:
    def is_matched(self, album):
        pass

class SearchByGenre(SearchBy):
    def __init__(self, genre):
        self.genre = genre def is_matched(self, album):
        return album.genre == self.genre

class SearchByArtist(SearchBy):
    def __init__(self, artist):
        self.artist = artist def is_matched(self, album):
        return album.artist == self.artist

class AlbumBrowser:
    def browse(self, albums, searchby):
        return [album for album in albums if searchby.is_matched(album)]

这允许我们在需要的时候用另一个类来扩展搜索(例如通过发布日期)。任何新的搜索类都需要满足 Searchby 定义的接口,所以当我们与现有代码交互时不会有意外。为了按条件浏览,我们现在需要首先创建一个 SearchBy 对象,并将其传递给 AlbumBrowser。

但是多重标准呢?我非常喜欢我在这个设计模式 Udemy 课程中看到的这个解决方案。这允许用户通过&将浏览标准连接在一起:

#add __and__:
class SearchBy:
    def is_matched(self, album):
        pass

    def __and__(self, other):
        return AndSearchBy(self, other)class AndSearchBy(SearchBy):
    def __init__(self, searchby1, searchby2):
        self.searchby1 = searchby1
        self.searchby2 = searchby2 def is_matched(self, album):
        return self.searchby1.is_matched(album) and self.searchby2.is_matched(album)

这个&方法可能有点混乱,所以下面的例子演示了它的用法:

LAWoman = Album(
    name="L.A. Woman",
    artist="The Doors",
    songs=["Riders on the Storm"],
    genre="Rock",
)Trash = Album(
    name="Trash",
    artist="Alice Cooper",
    songs=["Poison"],
    genre="Rock",
)
albums = [LAWoman, Trash]# this creates the AndSearchBy object
my_search_criteria = SearchByGenre(genre="Rock") & SearchByArtist(
    artist="The Doors"
)browser = AlbumBrowser()
assert browser.browse(albums=albums, searchby=my_search_criteria) == [LAWoman]
# yay we found our album

3.利斯科夫替代原理

这个原则是由 Barbara Liskov 提出的,她非常正式地阐述了她的原则:

“设φ(x)是关于 t 类型的对象 x 的一个可证明的性质。那么φ(y)对于 S 类型的对象 y 应该是真的,其中 S 是 t 的子类型。”

如果它看起来像鸭子,叫起来像鸭子,但它需要电池,你可能有错误的抽象。— 📸拉维·辛格

这意味着,如果我们有一个基类 T 和子类 S,您应该能够用子类 S 替换主类 T,而不会破坏代码。子类的接口应该和基类的接口一样,子类的行为应该和基类一样。

如果 T 中有一个方法在 S 中被覆盖,那么这两个方法应该接受相同的输入,并返回相同类型的输出。子类只能返回基类返回值的子集,但是它应该接受基类的所有输入。

在矩形和正方形的经典例子中,我们创建了一个 Rectangle 类,带有宽度和高度设置器。如果您有一个正方形,宽度设置器也需要调整高度,反之亦然,以保持正方形属性。这迫使我们做出选择:要么我们保留 Rectangle 类的实现,但是当您对它使用 setter 时 Square 不再是正方形,要么您更改 setter 以使正方形的高度和宽度相同。这可能会导致一些意想不到的行为,如果你有一个函数,调整你的形状的高度。

class Rectangle:
    def __init__(self, height, width):
        self._height = height
        self._width = width @property
    def width(self):
        return self._width @width.setter
    def width(self, value):
        self._width = value @property
    def height(self):
        return self._height @height.setter
    def height(self, value):
        self._height = value def get_area(self):
        return self._width * self._height class Square(Rectangle):
    def __init__(self, size):
        Rectangle.__init__(self, size, size) @Rectangle.width.setter
    def width(self, value):
        self._width = value
        self._height = value @Rectangle.height.setter
    def height(self, value):
        self._width = value
        self._height = value def get_squashed_height_area(Rectangle):
    Rectangle.height = 1
    area = Rectangle.get_area()
    return area rectangle = Rectangle(5, 5)
square = Square(5)assert get_squashed_height_area(rectangle) == 5  # expected 5
assert get_squashed_height_area(square) == 1  # expected 5

虽然这看起来没什么大不了的(当然你可以记住 sqaure 也改变宽度?!),当函数更复杂时,或者当您使用其他代码时,这就成了一个更大的问题,只要假设子类的行为是相同的。

一个我非常喜欢的简短但直观的例子来自圆-椭圆问题维基文章:

class Person():
    def walkNorth(meters):
        pass
    def walkSouth(meters):
        passclass Prisoner(Person):
    def walkNorth(meters):
        pass 
    def walkSouth(meters):
        pass

显然,我们不能对囚犯实施步行方法,因为他们不能自由地向任意方向行走任意距离。我们不应该被允许在类上调用 walk 方法,接口是错误的。这就引出了我们的下一个原则…

4.界面分离原理

“客户不应该被迫依赖他们不使用的接口。”

如果你有一个包含许多方法的基类,可能不是所有的子类都需要它们,可能只是少数。但是由于继承,您将能够在所有子类上调用这些方法,甚至在那些不需要它的子类上。这意味着大量未使用的、不需要的接口,当它们被意外调用时会导致错误。

这一原则旨在防止这种情况发生。我们应该把接口做得尽可能小,这样就不需要实现我们不需要的功能。我们应该把它们分成多个基类,而不是一个大的基类。它们应该只有对每个都有意义的方法,然后让我们的子类继承它们。

在下一个例子中,我们将使用抽象方法。抽象方法在基类中创建一个接口,该接口没有实现,但在从基类继承的每个子类中被强制实现。抽象方法本质上是加强一个接口。

class PlaySongs:
    def __init__(self, title):
        self.title = title def play_drums(self):
        print("Ba-dum ts") def play_guitar(self):
        print("*Soul-moving guitar solo*") def sing_lyrics(self):
        print("NaNaNaNa")# This class is fine, just changing the guitar and lyrics
class PlayRockSongs(PlaySongs): 
    def play_guitar(self):
        print("*Very metal guitar solo*") def sing_lyrics(self):
        print("I wanna rock and roll all night")# This breaks the ISP, we don't have lyrics 
class PlayInstrumentalSongs(PlaySongs):
    def sing_lyrics(self):
        raise Exception("No lyrics for instrumental songs")

相反,我们可以为歌唱和音乐分别开设一门课(假设在我们的例子中吉他和鼓总是一起出现,否则我们需要将它们分开更多,也许通过乐器。)这样,我们只有我们需要的接口,我们不能在器乐歌曲上调用 sing 歌词。

from abc import ABCMeta class PlaySongsLyrics:
    @abstractmethod
    def sing_lyrics(self, title):
        pass class PlaySongsMusic:
    @abstractmethod
    def play_guitar(self, title):
        pass @abstractmethod
    def play_drums(self, title):
        pass class PlayInstrumentalSong(PlaySongsMusic):
    def play_drums(self, title):
        print("Ba-dum ts") def play_guitar(self, title):
        print("*Soul-moving guitar solo*") class PlayRockSong(PlaySongsMusic, PlaySongsLyrics):
    def play_guitar(self):
        print("*Very metal guitar solo*") def sing_lyrics(self):
        print("I wanna rock and roll all night") def play_drums(self, title):
        print("Ba-dum ts")

5.从属倒置原则

最后一个原则是

高层模块不应该依赖低层模块。两者都应该依赖于抽象(例如接口)。

抽象不应该依赖于细节。细节(具体实现)应该依赖于抽象

你会把灯直接焊在墙上的电线上吗?— 📸亚什·帕特尔

如果你的代码有定义良好的抽象接口,改变一个类的内部实现不会破坏你的代码。它与之交互的一个类不应该知道另一个类的内部工作方式,只要接口相同,它就不会受到影响。例如,更改您使用的数据库类型(SQL 或 NoSQL)或更改存储数据的数据结构(字典或列表)。

下面的例子说明了这一点,其中 ViewRockAlbums 明确地依赖于这样一个事实,即相册以一定的顺序存储在 AlbumStore 中的一个元组中。它应该不知道 Albumstore 的内部结构。现在,如果我们改变相册中元组的顺序,我们的代码就会中断。

class AlbumStore:
    albums = [] def add_album(self, name, artist, genre):
        self.albums.append((name, artist, genre)) class ViewRockAlbums:
    def __init__(self, album_store):
        for album in album_store.albums:
            if album[2] == "Rock":
                print(f"We have {album[0]} in store.")

相反,我们需要向 AlbumStore 添加一个抽象接口来隐藏细节,其他类可以调用这个接口。这应该像开闭原则中的例子那样完成,但是假设我们不关心通过任何其他方式过滤,我将只添加一个 filter_by_genre 方法。现在,如果我们有另一种类型的 AlbumStore,它决定以不同的方式存储相册,它需要为 filter_by_genre 实现相同的接口,以使 ViewRockAlbums 工作。

class GeneralAlbumStore:
    @abstractmethod
    def filter_by_genre(self, genre):
        passclass MyAlbumStore(GeneralAlbumStore):
    albums = [] def add_album(self, name, artist, genre):
        self.albums.append((name, artist, genre)) def filter_by_genre(self, genre):
        if album[2] == genre:
            yield album[0]class ViewRockAlbums:
    def __init__(self, album_store):
        for album_name in album_store.filter_by_genre("Rock"):
            print(f"We have {album_name} in store.")

结论

坚实的设计原则是编写可维护的、可扩展的和易于理解的代码的指南。下一次当你想到一个设计的时候,为了写出可靠的代码,把它们记在心里是值得的。在你的脑海中浏览这些字母,回忆每个字母的意思:

  1. 单一责任原则
  2. 开/关原则
  3. 利斯科夫替代原理
  4. 界面分离原理
  5. 从属倒置原则

现在去一个接一个地让世界变得更美好吧!

马丁·w·柯斯特在 Unsplash 上的照片

参考文献:

[1]坚实的发展原则-在动机图片中—https://los techies . com/derick Bailey/2009/02/11/SOLID-Development-Principles-In-motivative-Pictures/

[2] Udemy 设计模式课程—https://www.udemy.com/course/design-patterns-python/

[3]坚实的设计原则—https://ade vait . com/software/SOLID-Design-Principles-the-guide to-being-better-developers

作为数据科学家,你应该知道的 5 个概率分布

原文:https://towardsdatascience.com/5-probability-distribution-you-should-know-as-a-data-scientist-f8abc9522af0?source=collection_archive---------7-----------------------

作为数据科学家对概率感到困惑?

必须知道概率概念和分布

照片由龙之介·菊野Unsplash 上拍摄

数据科学家在采访和阅读研究论文中解决问题时,会遇到许多与概率相关的术语。因此,了解概率和概率分布的基础知识是一个有抱负的数据科学家甚至是一个经验丰富的数据科学家所必须的。这些知识将帮助你赢得面试,更好地理解数据,并开发更直观的解决方案。博客将有以下几个部分。

  • 概率基础
  • 随机变量
  • 概率分布及其特征
  • 均匀分布
  • 二项分布
  • 高斯分布
  • 泊松分布
  • 指数分布

别担心。这个列表很大,但是我已经确保了这个博客的可读性和易懂性。事不宜迟,让我们深入理解所有的概念。

吉菲

概率基础

让我们首先理解实验、样本空间和事件的含义,因为它们在统计学中经常使用,也有助于我们理解概率的正式定义。一个实验是任何可以无限重复的程序,并且有一组明确定义的可能结果。例如,投掷硬币是一个实验,因为我们可以重复投掷硬币,它有两种结果(正面或反面)。一个实验的不同可能结果的集合被称为样本空间,在我们的例子中,它将是投掷硬币的{正面,背面}。最后,一个实验的每个试验被称为事件。现在我们来理解概率。概率是一个事件发生的可能性,用有利结果与总体结果的比率来衡量,假设所有结果的可能性相等。

作者图片

所以在抛硬币的过程中

作者图片

当我们在无数次试验中考虑这个问题时,得到 head = 1/2 的概率。

随机变量

随机变量(RV)是为实验的每个结果赋值的函数。比如抛硬币,我们定义一个随机变量 X 为人头来时的事件,那么我们来看看这是怎么变成函数的。

当输出为正面时,X=1

当输出为尾部时,X=0

所以 p(X=1) =得到人头的概率= 1/2

p(X=0) =得到尾部的概率= 1/2

为了更好地理解,我们再举一个掷三枚硬币的例子。设随机变量 X 是出现在三个硬币上的人头数。

作者图片

p(X=1) =得到一个人头的概率= 3/8

概率分布及其特征

概率分布是描述事件发生可能性的数据点的集合。概率分布可以是离散的,也可以是连续的。在离散分布中,数据只能取某些值,而在连续分布中,数据可以取指定范围(可以是无限的)内的任何值。这个数据集合可以用图形可视化,如下所示。

作者图片

好了,现在我对什么是概率分布有所了解了。但是它与数据科学有什么关系呢?在数据科学中,我们经常根据数据的随机抽样对总体的参数和统计关系的可靠性做出判断。对于这些情况,概率分布帮助我们做出这些判断。

每个数据分布在图上有不同的形状。因此,一定有某种度量可以帮助我们理解分布的形状,而无需在图上实际绘制数据。可以提供分布信息的指标有:均值、方差和标准差。让我们逐一了解。

平均

它是数据点的平均值,用μ表示。例如,如果我们有一组离散的数据{1,2,3,4,5},那么 mean (μ)将是 3 ((1+2+3+4+5)÷5)。它用于查找一个数字,当从所有数据点中减去该数字时,转换数据的平均值将为零。

差异

方差是数据点和平均值之差的平方的平均值。它用σ表示。对于上面的例子,方差(σ)将是 2.5((1–3)+(2–3)+(3–3)+(4–3)+(5–3))÷5)。

标准偏差

它是方差的平方根,用σ表示。对于上述示例,标准差(σ)将为 1.58 (\sqrt{2.5})。它用于测量数据集中数字的分布程度。较小的标准差意味着数据点彼此更接*。

均匀分布

我们已经了解了什么是概率分布,它的特征是什么。现在让我们来理解均匀概率分布。均匀分布是最简单的概率分布,也称为矩形分布。这种分布具有恒定的概率。这种分布最常见的例子是掷硬币或掷骰子。

对于离散概率分布-

作者图片

对于连续的:

作者图片

作者图片

均匀分布用于计算置信区间的自举技术。此外,蒙特卡罗模拟从生成均匀分布的伪随机数开始。

二项分布

在二项式分布中,随机变量被定义为独立重复试验的成功次数。设成功的概率为 p,,那么二项式概率分布的公式如下

作者图片

作者图片

例子:如果你买彩票,你要么赢钱,要么不赢钱。任何你能想到的有两种可能结果的事件都可以用二项分布来表示。在数据科学中,二项分布有利于分析二分类问题的统计量。

高斯/正态分布

它是最著名的分布之一,许多现实世界的现象如测量误差、人的身高、考试分数等。,遵循这个分布。这种分布的公式如下:

作者图片

如上所述,μ是平均值,σ是标准差。

作者图片

请注意,该分布具有钟形结构,钟形的峰值出现在平均值处,而标准差与钟形的宽度有关。

当均值等于 0,标准差等于 1 时,正态分布变成标准正态分布。

这个分布在数据科学家的生活中有广泛的适用性,并且是一个必须知道的分布。有许多机器学*模型,如基于最小二乘的回归、高斯朴素贝叶斯分类器、线性和二次判别分析等。设计用于处理服从正态分布的数据集。

泊松分布

泊松分布通常被称为罕见事件的分布。如果你有一个以固定速率发生的事件,例如,每秒钟有 5 个人进入体育场,或者农场里每分钟有 2 个芒果成熟。那么在单位时间内观察到 n 个事件的概率可以使用泊松分布,使用下面的公式来计算。

作者图片

其中μ是单位时间内的事件率。

作者图片

许多现实世界的现象,如车祸、交通流量、基因突变和页面上的打字错误数量都遵循泊松分布。许多店主使用泊松分布来预测来他们商店的顾客数量。

指数分布

指数分布与泊松分布密切相关。如果泊松事件以固定的时间间隔发生,则两个连续泊松事件之间的时间间隔呈指数分布。两个连续泊松事件之间具有时间间隔 t 的概率如下

作者图片

其中,τ是两个连续泊松事件之间的平均时间间隔。

作者图片

指数分布在数据科学中的用途有限。一般来说,如果您想从泊松过程(在此过程中,您研究事件的数量)转移到时域,那么指数分布是首选分布。

结论

我们已经讨论了 5 种不同的概率分布,并了解了数据科学家生活中每种分布的使用案例。我希望你喜欢这篇文章,并愿意随时听取你对提高博客可读性的反馈。

成为 介质会员 解锁并阅读介质上的许多其他故事。关注我们的Medium,阅读更多此类博文

启动您的数据科学职业生涯的 5 个项目创意

原文:https://towardsdatascience.com/5-project-ideas-91da0da17b31?source=collection_archive---------27-----------------------

项目成功的框架

Jo Szczepanska 在 Unsplash 上拍摄的照片

介绍

数据科学仍然是一个蓬勃发展的领域,需求继续超过供应,许多企业预计在未来几年内将大幅增加 IT 支出。

尽管在线课程、训练营和学位急剧增加,初级人才也随之增加,但现在仍是进入数据科学的大好时机。

有一些令人惊叹的项目想法资源,但其中许多都是由大多数新数据科学家完成的。几乎每个人都做过 Twitter 情绪分析项目(包括我自己!),看了泰坦尼克号数据集或者做过花的图像分类。然而,这是有充分理由的;这些项目是展示技能的好方法,并且解决方案已经被很好地记录下来。

在本文中,我为一个好的数据科学项目提出了一个框架,并提供了 5 个项目想法以及它们如何适应这个框架。

目录

对一项伟大工程的剖析

4 个组件

任何数据科学项目都有 4 个组成部分:

  1. 数据收集和清理:获取数据集和清理数据问题、缺失值并进行转换以允许可视化和建模的过程。
  2. 探索性数据分析(EDA): 了解数据集,通常通过可视化。理解分布,变量和数据范围之间的关系。
  3. 建模:建立机器学*模型来回答问题陈述的过程。
  4. 部署:使模型可供其他人或系统交互。

不要忽视学*

每走一步,我们都在学*不同的技能或工具。重要的是要认识到,有些项目可能比其他项目需要更多的清洁,这意味着我们在这一领域使用更多的技能。不是每个项目都是关于模型构建的。

数据科学家不会花大量时间训练模型,你的一些项目应该反映这一点。

在计划项目时,我们应该始终计划我们将在整个项目中使用和学*的技能和工具。

大多数数据科学项目的问题是

部署。

大多数教程、视频和在线课程都不包含输出。当建立一个作品集时,你的努力工作被你的听众理解是很重要的。不幸的是,我们不能保证一个潜在的雇主会仔细检查你的代码,让你的工作产生的可消化的输出不是 Github repo 中的代码是很重要的。

这也有助于根据项目期间花费的时间来定制您的输出。如果你花 20 个小时去刮擦和清理一些数据,为什么不上传到 Kaggle 或者写个教程。

我们应该总是通过创造人们可以理解的产出来尝试从我们的工作中提取价值,这些产出可以被各种平台上的一系列受众访问。

将这一切结合在一起

我把这个总结在一个框架中,我会为每个项目想法修改这个框架。这不是技能和产出的详尽列表,但希望它有助于产生一些想法。

成功的数据科学组合项目的框架。图片作者。

关于部署的说明

在我们进入每个项目之前,我想简单谈谈部署。在工作环境中,您通常会将模型部署为云平台上的微服务;AWS,GCP 或者微软 Azure。我们在家里真的没有这种奢侈,因为这些服务是按秒收费的。他们确实有自由层,所以如果你想要一个更侧重于部署的项目,我建议看看这些。

因此,我将为所有这些项目建议相同的过程。我非常支持使用 Heroku 和 Streamlit 进行部署。如果你想展示一些额外的技能,构建一个 Docker 容器会有所帮助,这样任何人都可以在本地运行应用程序(理论上你可以将这个容器推到云平台)。

我建议这个教程,省去 Docker 部分,作为一个单独的 webapp 推送到 Heroku。

网页抓取+回归

构建 web 抓取项目。图片作者。

问题陈述

使用 Python 构建一个 web 抓取脚本,从网站抓取数据。抓取的最佳候选对象通常是房屋、车辆或家具等列表的网站。你从这些数据中得到的数据本身就是一个回归问题,因为我们要预测价格。

资料组

这是这个项目的关键部分,你的大部分时间将用于建造铲运机。抓取的数据通常是杂乱的,因此可能要花更多的时间来清理。对于第一次项目,我建议使用 BeautifulSoup 包,但如果你以前做过,请尝试 ScraPy 或 Selenium。网上有很多好的资源。

https://realpython.com/beautiful-soup-web-scraper-python/

EDA

这也将是该项目的一大部分。如果你想在一个中型博客上展示这些情节,可以使用 Plotly 来制作美观的情节,并结合类似数据面板的东西。

试着在这里讲一个故事例如使用图表我们可以了解房价的哪些信息?它们会随着面积的增加而增加吗?地图有帮助吗?

下面是我如何使用一些搜集的数据和 EDA 来写博客的一个例子:

https://adam-shafi.medium.com/tech-skills-2021-5805848851c6

系统模型化

在这个项目中,建模更像是一个方框。你可以通过 EDA 和数据集提取大量的价值,当你开始建模时,你可能会对这个项目感到厌倦。

另一方面,这是一个很好的学*机会,尝试使用您以前没有使用过的模型——特别是像 XGBoost、LightGBM 或 Catboost 这样的模型,并对它们的功能有一个基本的了解。

如果你想更上一层楼,这里有一个关于堆叠回归的很棒的 Kaggle 笔记本。

部署

使用我在上面提到的工具,这应该相当简单。这是一个很好的项目,使用 SHAP 模型的可解释性,并添加一些额外的设计,如果你有 CSS 技能。

不平衡分类

项目结构分类。图片作者。

问题陈述

分类问题是我个人觉得最愉快的项目,然而类的不平衡可能是一个巨大的扳手。阶级失衡是我们试图预测的非常罕见的结果。通常,我们的模型只会预测多数类,而会低估少数类。这与欺诈检测和医疗诊断等业务问题有相似之处。

资料组

我建议从 Kaggle 或 API 获取数据集。有许多欺诈检测类型的数据集将会非常不平衡,您总是可以选择稍微平衡一些的数据集。如果这是你第一次做这种类型的项目,我会试着找一个二进制分类的问题。

电子设计自动化(Electronic Design Automation)

使用这个来突出显示类的不平衡,根据你的数据集,你可能无法单独从图表中找到太多东西。

系统模型化

这肯定会占用你大部分的时间,也是解决阶级不平衡问题的地方。过采样/欠采样很常见,但还有许多其他方法值得探索。您可能还需要广泛地调整超参数。

您可以探索本文中的方法:

https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

部署

回归问题通常更相关(房价、车价),所以如果可能的话,你可能会想出一个更有创造性的方法来部署这个具有更多可视化的模型。

时间数列预测法

时间序列预测项目结构。图片作者。

问题陈述

给定我们已经拥有的信息,我们能预测未来的趋势吗?时间序列预测在金融领域特别流行,用于预测股票价格,在零售领域用于根据季节趋势预测销售额或订单数量。有一些数据科学家的角色是高度关注时间序列的,所以如果你打算进入其中一个,这种类型的项目可能是你的关注点。

资料组

股票价格预测已经做得很烂了,不容易。除非你对股票、衍生品或密码非常感兴趣,或者你有特别想研究的东西(例如新闻对股价的影响),否则我会避开简单的股价预测问题。

网上有很多好的数据集,所以只要选择你喜欢的就行了!如果是第一次,避免多变量问题。

另一个很好的选择是和拥有小生意的朋友或家人交谈,甚至是当地的商店。例如,如果你的朋友拥有一家墨西哥卷饼店,你可以预测他们应该买多少洋葱。你必须获得许可才能共享数据,但这将是一个很好的案例研究,并为他们带来好处。理想情况下,你需要两年的数据。

电子设计自动化(Electronic Design Automation)

时间序列数据非常直观。数据分析师角色将经常使用商店和产品数据进行 Tableau/PowerBI 测试。这种类型的项目是展示一些额外技能的 Tableau 仪表板的绝佳候选。

系统模型化

ARIMA 和萨里玛模型是时间序列最基本的例子。我还建议研究一些最先进的东西,比如脸书的先知算法。

图像分类

图像分类项目结构。图片作者。

问题陈述

我们可以训练一个模型来识别图像是什么吗?这是一个伟大的项目,因为那里有大量的资源。你可以选择使用传统的模型,但卷积神经网络大大提高了性能。

资料组

这个项目的伟大之处在于你可以很容易地得到一个数据集。网上有很多,但是如果你想收集你自己的,你可以使用 Bing API 或者 Google Search downloader 扩展来获得一个带有相对准确标签的数据集。

电子设计自动化(Electronic Design Automation)

这是相当有限的,因为没有太多的情节。

系统模型化

如果你想从非深度学*方法开始,我会推荐这个教程使用维度缩减和 sklearn 模型。

要入门深度学*,官方 Tensorflow 教程真的很有帮助。确保你也用预训练的模型做实验。

为了更上一层楼,我推荐这个关于使用 Flickr 数据集生成图片标题的精彩教程。

部署

这里的部署有点棘手,因为模型可能非常大,您需要为用户建立一种上传图像的方式。

同样值得注意的是,在这种类型的模型中,可解释性可能是一个问题,使用像 SHAP 这样的东西可以为你的项目增加很多价值。

自然语言处理

自然语言处理项目结构。图片作者。

问题陈述

NLP 是目前深度学*中最受关注的领域,这是有充分理由的。潜在的影响是巨大的,我们正在许多行业中看到真正的应用。它还允许企业大规模地了解他们的客户。

一个好的开始是考虑你想要处理什么样的 NLP 主题。这不仅仅是情感分析,在谷歌搜索代码和教程时,理解术语真的很有帮助。一个很好的起点是查看基准来理解不同的任务名称,例如 http://nlpprogress.com/的或 https://paperswithcode.com/area/natural-language-processing 的

资料组

一旦你对问题有了想法,就该考虑数据集了。由于其相当直观的 API 和庞大的数据量,许多人都为此去了 Twitter。另外,这个对于 NLP 数据集来说确实是一个不错的资源。

在这里,我的建议是,要么追随你的兴趣,要么尝试了解你想为之工作的公司。例如,如果微软发布了一个新产品,可以使用 tweets 来捕捉情感或聚集主题吗?

NLP 也有很大的潜力来构建人们想要使用的东西。文本摘要和自动完成真的很有帮助,或者你可以走有趣的路线..这里有一个在 Reddit 上使用 GPT-2 的非常有趣的例子。

电子设计自动化(Electronic Design Automation)

一旦你有了数据集,你就可以做一些真正有趣的 EDA。我个人最喜欢的是进行维度缩减和聚类,以真正可视化模型如何理解数据。你可以在这里看到我的例子:

系统模型化

预训练模型是最好的选择。如果你已经做过,我会避免使用单词袋+ sklearn 模型。探索 HuggingFace 图书馆,其中有大量的艺术模型。我还建议不要太纠结于每个模型是如何工作的(尽管理解 Transformer 架构很重要!)

部署

根据你的项目,这里有一些有趣的解决方案。如果你喜欢简单的东西,用拥抱脸,我建议你也用 SHAP 来解释这个模型。

然而,如果您已经构建了具有真实用例的东西,您可能想要使用 AWS 探索更复杂的部署方法。

结论

项目对比。图片作者。

不同的项目需要不同的技能,在不同的领域需要更多的时间。

一个数据科学项目不会总是产生一个令人惊讶的模型。重要的是,你的努力不要浪费在没有人会看到的 Github 库中。如果你在某件事情上投入了大量的精力,想想你如何从中提取价值,并向世界展示。很有可能,如果你努力去做某件事,其他人也一样。

了解更多信息

https://adam-shafi.medium.com/tech-skills-2021-5805848851c6

联系我

https://www.linkedin.com/in/adamshafi/

2022 年的 5 个项目,在数据世界中起步,给潜在雇主留下深刻印象

原文:https://towardsdatascience.com/5-projects-in-2022-to-get-started-in-the-world-of-data-and-impress-potential-employers-de121a758e01?source=collection_archive---------35-----------------------

这是一个小项目的综合列表,我认为它会让你在 2022 年的趋势中保持领先,适合那些希望涉足数据领域的初学者

克拉克·蒂布斯在 Unsplash 上拍摄的照片

新的一年即将到来,也许学*一项新技能或获得一份新工作就在你的清单上。不要担心,我们将会看到 5 个项目,没有特定的顺序,我认为这将有助于你学*并给你的潜在雇主留下深刻印象。

初学者可以从使用 CSV 或 Excel 导出的数据开始,慢慢增加你通过 API 或 web scrappers 自动抓取数据的难度。

魔法门户:

能源消耗/可持续性

美国公共电力协会Unsplash 上拍摄的照片

如果你关注新闻已经有一段时间了,你应该听说过“碳中和”这个术语。对于那些还不知道的人,我鼓励你去读一读,了解公司正在做些什么来实现碳中和。当大公司在做他们的工作时,你也可以做你的工作,对你的家庭能源消耗进行一些数据分析。

如果你有智能电表或智能开关来测量你的能源消耗,你可以随时建立一个简单的仪表板,显示你的消耗,按天,周,甚至月。了解你的用电模式和什么耗电最多,有助于你优化账单,间接保护环境。使用仪表板制作一个季节性用电量的故事,无论是由于加热器大部分时间开着导致的冬季用电量的增加,还是炎热夏季的持续空调。这些统计数据让你的数据更加美丽。即使没有智能电表或开关,你仍然可以将每月的账单和使用情况编辑成电子表格。

网上购物/电子商务

皮卡伍德Unsplash 上拍摄的照片

在 Covid 爆发期间,基于亚马逊博客帖子的在线购物在这里(2021 年 10 月 27 日)仅在 2020 年就出现了增长,每年都在持续增长。Daniela Copolla 在 statista.com(2021 年 10 月 27 日)发表的另一份报告也显示了电子商务购物在过去几年的增长。

我们知道,公司一直在忙着挖掘我们购物车和购买历史中的任何东西,从中挖掘意义,诱使我们购买更多。但是你知道你的购物模式是什么吗,一旦你的工资单被发布,你有一个特殊的购买期吗?根据你最喜欢的电子商务网站,应该有方法提取你的数据,从亚马逊的订单历史报告到创建一个 Chrome 扩展,将你的订单历史页面抓取成可导出的格式,如 CSV 甚至 JSON。获取您的数据,甚至从您的家庭成员那里获取数据并进行一些可视化处理!

给你点启发,我从马来西亚一个叫Shopee的电商平台创建了一个区分有用和无用评论的网站。
网址:https://reviewnator.jonathanlawhh.com/看毛巾评论这里
博文即将发布!

加密货币

行政长官Unsplash 上拍照

不是互联网希望你思考的方式,也不是把投资的心态强加给你,而是随着趋势的增长和采用它的国家的增加,我们作为数据工作者应该在它变得炙手可热时收获它。有许多加密货币,如比特币、以太币、Dogecoin 等,并且还在不断增加。在互联网上并没有使它变得更容易,因为在采用加密货币的好处之间存在分歧。

然而,我们可以利用来自论坛、博客甚至社交媒体的可用数据做很多新的事情。已经有很多人在做加密货币预测,高点和低点的趋势,所以我们会做一些别的事情。情感分析,确定一个主题是否有大多数人同意采用加密货币,或者他们反对,使用词云的热门关键词,人们经常谈论的顶级货币是什么,是否有新货币的新兴话题。

我想强调的是,你不应该仅仅因为你发现的信息与你的观点相左,就对它不屑一顾。论坛上关于加密货币的话题和讨论可能是有毒的,有偏见的。请记住,关于人们评论的数据只是像你一样的观点,没有人是错的,忽视有效的数据只是偏见,这在这个工作领域是不理想的。

卫生保健

医疗保健领域的任何进步都是人类的一大飞跃。虽然对于初学者来说,医疗保健听起来像是一个令人生畏的项目,但开始并不是不可能的。医疗保健的范围不仅限于癌症、心脏病或血液检测数据,药物、护理/护士,甚至药房都属于医疗保健领域。在网上搜索,你会发现很多研究使用人工智能和数据来识别癌细胞,根据你的脉搏预测心脏病发作,甚至基因组测序聚类。

后退一步,理解医疗保健无处不在。你每天坐多久,你多久锻炼一次,你是否正确地举重。根据某些迹象和研究,深入识别患有精神疾病的人,很快你就有机会与专业人士一起实施你的解决方案!

作者的图片和网站

在 Covid 开始期间,我意识到我的坐姿已经下降,我创建了一个模型来通知我。那时我不是数据或医疗保健方面的专家,但通过与许多人交谈和不懈的尝试,我终于制作出了一个工作原型!下面是我的原型供你试用,希望对你有所启发:
原型:https://posture.jonathanlawhh.com/
博文:https://jonathanlawhh . medium . com/坐姿-姿势-标识符-使用-ai-11b96f8a8da8

你的投资组合网站

照片由 Myriam JessierUnsplash 上拍摄

在你放弃并认为这都是关于软件开发之前,它不是。你可以用免费的建站软件或者简单易用的模板快速建立一个网站。然而,你的重点将是实现谷歌分析,这很容易设置。

无论是在 2012 年还是 2022 年,帮助公司了解是什么驱使一个人进入他们的网站,他们重新访问的频率,哪个页面的浏览时间最长,以及用户的保留率或跳出率是公司想要的一项宝贵技能。有什么比在你的网站上实现它,展示你的其他项目和分享你的网站链接更好的开始方式呢?使用Google Analytics dashboard并了解招聘人员或雇主在哪里点击你的个人资料以及哪个页面更吸引他们,这有助于你改进网站,同时将 Google Analytics 添加到你的简历中。

这是我的个人网站,可能会对你有所启发!

所以…

这些是我会推荐给 2022 年尝试接触数据的人的几个项目。即使你对这些项目不感兴趣,也要找到你真正喜欢的东西,我相信如果你有足够的热情,你会成功并享受这个过程。

祝一切顺利,愿新年对我们仁慈!

轻松掌握 Python 列表的 5 种方法

原文:https://towardsdatascience.com/5-promising-ways-to-easily-master-the-lists-in-python-bed64cd43bc1?source=collection_archive---------29-----------------------

编程;编排

5 分钟掌握 Python 列表的简单而有前途的方法!

照片由尼克·费因斯Unsplash 拍摄

List——Python 中内置的类似数组的数据结构!

列表是 Python 中最常用的数据结构之一,它是可变的,是相同或不同数据类型元素的有序序列。

这里是关于 Python list 的 5 个必须知道的调整和技巧,我只用了 5 分钟就掌握了(当然你也可以)。⏳

使用这些方法,我可以无缝地编写我的代码,并与每个人分享这个有趣的片段。

列表由方括号[ ]中的值定义。在[ ]里面的每个元素被称为一个项目。

mylist = ['TDS', 'medium', 597, 99.99, True, 'Learn']

💡你可以从这个 要点 中复制所有的列表方法并跟着做!答案已经在下面提到了。

有了有趣的例子,让我们开始吧!

索引、反向索引和切片

Index 是 iterable 中项的位置。由于 list 是可迭代的,所以可以通过将索引放入[ ]来访问 List 中的项目。

因为 Python 是一种 0 索引语言,即索引从 0 开始。

例如,下面列表的第一个元素可以通过使用其索引作为 0 来检索。

mylist = ['TDS', 'medium', 597, 99.99, True, 'Learn']mylist[0] # output --> 'TDS'

然而,很多时候,我们感兴趣的是获得列表的倒数第二或最后一个元素。在这种情况下,我们可以使用反向索引。

在反向索引中,索引从列表末尾的-1 开始。下图阐明了这个概念。

Python 列表中的索引和反向索引|按作者排序的图片

下面是一个使用索引和反向索引生成相同结果的示例。

如何在 Python List | Image by Author 中使用索引和反向索引

接下来,
切片✂️是通过从现有列表中选择或提取少量项目来创建新列表的方法。从现有列表中访问一系列项目有几种语法。下图对它来说不言自明。

如何使用 Python 列表切片|作者图片

如果使用负整数进行切片,就会出现反向索引的情况。

在列表中添加新项目

通常,我们需要将一个元素或元素列表添加到现有列表中。

。append(),。扩展()和。insert()是解决方案

Python 列表方法**.append()**将其参数作为单个元素添加到列表的末尾。

Python 列表追加|按作者排序的图像

每增加一次,mylist的长度增加 1。

在上面例子的最后一行中,另一个列表 ['D ',' B'] 作为一个单项添加,其原始数据类型列表在mylist的末尾。

但是,如果你要在mylist的末尾加上列表【D】【B】的每一个元素,那么list.extend()就是你最好的朋友。

Python 列表方法**.extend()**遍历它的参数(如果参数是可迭代的,则遍历,并将每个元素添加到列表中。在这种情况下,列表的长度随着其参数中元素的数量而增加。

Python 列表扩展|作者图片

当你想在列表中添加一个元素时,list.extend()看起来比list.append()更安全。

🚩那为什么不到处用list.extend()??

list.append() vs list.extend() |作者图片

由于.extend()基于迭代方法,它比.append()慢得多

这两种方法都在现有列表的末尾添加了一个新元素。

您可以使用.insert()方法在现有列表中的所需位置添加一个项目。💡

Python 列表插入|作者图片

在向列表中添加了一个项目之后,现在让我们来研究从列表中删除一个项目的方法。

从列表中删除项目

就像添加一个项目一样简单,从列表中删除一个项目甚至更简单。

。remove(),。pop()和。clear()随时为您服务!

列表方法.remove()将从列表中删除特定的项目。默认情况下,它将只移除该项的第一个匹配项。如果指定的项目不在列表中,将引发**ValueError**

如何使用 Python List remove()| Image by Author

有时,我们需要从特定的索引中提取一个项目,并使用它进行进一步的处理。在这种情况下,列表方法.pop()绝对有用。

.pop(index)从列表中搜索出所述索引处的项目。如果列表为空或索引超出范围,将引发**IndexError**

如何按作者使用 Python List pop() | Image

如上图所示,如果没有提到索引,.pop()默认返回最后一项。

list 方法.clear()从列表中移除所有项目,并返回一个空列表。

mylist = ['TDS', 'medium', 597, 99.99, True, 'TDS', 100] mylist.clear() 
mylist
#***Output***: []

但是,使用关键字**del**,可以永久删除该列表。

检查列表中是否有项目

在我的自动化项目中,每次我都需要检查列表中特定项目的存在。

而且我发现,用**in****not in**是比较蟒的!

这里是如何!

按作者检查列表|图像中的项目成员

列出理解

这是用 Python 创建列表的一种优雅方式。列表理解最流行的用法是简洁地创建列表。它的基本语法是,

[expression for item in iterable]

例如,字符串“DataScience”是一个 iterable。所以我们可以形成这个字符串的字母列表。

作者如何使用 Python | Image 中的列表理解

这里有一篇有趣的关于理解列表的详细知识的文章!!

💔-python-tricks-for-better-code-511c82600ee1>

其他列表方法如.copy().sort().reverse()可以在下面的要点和本 必读 中找到。

要点

更进一步,这里有一个简单的要点,所有的列表方法都在一个地方。

🚩寻找答案??➡️你可以在这个 笔记本 里检查你的答案!

总结一下,

我发现在使用 Python 进行数据分析以及复杂的自动化任务时,这些列表方法非常方便。其中一些如appendinnot in是最常用的,而其他如列表理解、pop在某些情况下是非常有用和有效的。

现在,你可以成为一名媒体会员,阅读我和成千上万其他作家的无限故事——只需 在这里注册 。当你这样做时,我会得到你的一小部分费用,没有任何额外的费用。请随意加入我的邮件列表来了解我写作的最新进展。

感谢您的阅读和投入时间!!

每个程序员都应该遵循的 5 个 Python 最佳实践

原文:https://towardsdatascience.com/5-python-best-practices-every-python-programmer-should-follow-3c92971ed370?source=collection_archive---------8-----------------------

编写 pythonic 代码的技巧

照片由 让·范德穆伦 发自 佩克斯

Python 是*来最流行的语言之一,在全球拥有庞大的开发人员和程序员社区。

许多初学者以及有经验的程序员都将 Python 作为他们首选的编程语言。此外,由于它是一种开源语言,在社区内共享知识也很重要。

这就是为什么有必要遵循一些有助于提高代码质量和可读性的编码惯例。

本文将讨论五个这样的 Python 最佳实践,它们对于 Python 程序员改善编码体验非常有用。

1。 编写结构良好的代码

无论您是在为一个详细的项目编写一个小脚本,拥有一个结构良好的代码,包括模块的正确名称、正确的缩进和文档,都可以提高代码在未来的可用性。

尤其是在制作项目时,您必须包括一个描述您的项目的 README 文件,一个用于在新环境中正确设置您的项目的setup.py文件,以及一个用于描述所需依赖项的requirements.txt文件。最后但同样重要的是,描述项目所有组件如何工作的文档。您还可以在您的存储库中包含一些测试。

直接从行业专家那里获得 Python 和数据科学的优质内容——使用我的推荐链接成为中级会员以解锁内容:https://pranjalai.medium.com/membership

2。 有适当的注释和文档

在代码中加入注释可能是拥有适当文档的第一步。例如,特定模块在代码中的作用是什么,函数是如何工作的,或者函数的作用,等等都可以用注释来描述。

在 Python 中,有两种类型的注释可用。一种是以散列符号(#)开头的单行注释。这些类型的注释可以帮助我们描述特定的代码行,就像表达式所做的一样。

print(" hello world ")#一行注释:这将打印 hello world

另一种类型是多行注释,以三重引号(' ')开始和结束。在描述模块或函数时,它们更有用。

有意义的注释和适当的文档可以大大提高代码的可读性和可用性。

''这是一个可以

取倍数

'''行' ' '

3。 变量、类、函数和模块的正确命名

初学 Python 的开发人员最常犯的一个错误是对变量、类、函数等命名不当。我们应该始终避免为高度缩写的函数或类名编写单字母变量名。

例如,存储物质温度的变量应该命名为 temperature 或 temp,而不是 t。PEP-8是 Python 程序员中很流行的指南,它告诉我们如何正确命名变量、类和函数。

例如:

  • 长变量应使用下划线(_)分隔,例如长变量名称
  • 编写类名时,应使用大小写形式,例如 LongClassName
  • 对于编写函数,建议使用下划线,例如 function_name()

4。 编写模块化代码

提高代码库质量的最好方法是使其更加紧凑和模块化。该模块就像一个函数集合,您可以在需要时在代码中使用它。

Python 在一个称为 PyPI 或 python 包索引的存储库下有许多模块和库。它包含了许多由 Python 开发人员编写的模型,您只需从互联网上安装这些模型,就可以在代码中实现它们。这可以防止您从头开始实现所有的逻辑,并使您的脚本简洁易读。

使用模块的另一个好的方面是,这些现有的模型大部分是由具有多年经验的程序员编写的,他们可以给你最好的可能的解决方案,这将需要你花费大量的时间从零开始思考。

5。 使用虚拟环境

Python 中虚拟环境的主要目的是为 Python 项目创建一个独立的环境。当您在项目中使用任何第三方模块或库时,这变得特别有用。

如果两个项目使用同一模块的不同版本(第三方),python 将很难理解哪个项目需要哪个版本,因为两个版本都以相同的文件名保存在同一个目录中。

这个问题可以通过为每个项目使用一个虚拟环境来轻松解决,在虚拟环境中独立存储依赖关系。

要使用虚拟环境,我们必须使用下面的代码行来安装它。

pip install virtualenv

为了创造一个新的环境,我们可以使用:

python3 -m venv env

当你同时在做不同的项目时,这会让你的生活变得更容易。

结论

当你和团队一起从事一个专业项目时,你的团队成员理解你的代码变得非常必要。

遵循这些实践将有助于你做到这一点,因为这些发明正被全球数百万 python 开发者所使用。你也可以在做个人项目的同时贯彻这些原则,提高对项目的理解,在工作中体现专业性。

在你走之前…

如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为中级会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: Pranjal 的简讯

5 本 Python 书籍,让你的代码更上一层楼

原文:https://towardsdatascience.com/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204?source=collection_archive---------3-----------------------

使用 Python 编写漂亮、可靠的代码库

黄志刚Unsplash 上拍照

无论你是从事数据科学、web 开发,还是任何需要代码设计和编写的技术领域,你都必须使用过 Python。Python 是目前最流行和最常用的编程语言之一。Python 之所以如此受欢迎,是因为它的语法简单,对于新程序员或从其他编程语言转移过来的程序员来说很容易学*,以及它的通用性。

虽然 Python 很容易学*和使用,但编写好的 Python 代码并不那么简单。这是一项需要编写大量代码并能让代码看起来漂亮的技能。写出漂亮的代码是业余程序员和有经验的程序员的区别。

为了让你的代码漂亮,它需要易于阅读和理解,清晰,平衡。这是一个代码,它的架构、结构和整体形状可以告诉你它的意图,而无需深入挖掘它的应用。漂亮的代码通常被分成坚实的小块,每一块都有自己的用途。

</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器

towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)

大多数程序员可以写代码和解决问题,但是如果你能写出漂亮可靠的代码,你就会在这个领域脱颖而出。在今天的文章中,我针对所有级别的程序员;无论你是初级、中级还是高级程序员,你都可以提高代码的质量。本文将浏览 5 本 Python 书籍,这些书籍侧重于提高你的代码质量,而不是教你如何编码。

№1:超级 Python:让你的代码更上一层楼

我们将用增压蟒蛇踢出这份名单。这本书由约翰·贝内特布莱恩·欧弗兰布莱恩·欧弗兰撰写,于 2019 年出版。像这个列表中的所有其他书籍一样,这本书的目标读者是那些已经了解编程的基本知识,并且知道如何用 Python 编写基本代码的人。

这本书将教你如何利用 Python 的全部能力,并且——如标题所示——增强你的应用程序。该书涵盖了高级列表和字符串技术,如何管理和处理二进制文件,如何掌握 Numpy 等常用包,以及如何编写坚实的具体类。

这本书还介绍了 profilers、正则表达式的魔力,并教您如何利用 22 种编码快捷方式和增强性能的提示和技巧来优化代码执行。简而言之,增压 Python 教你如何更快更有效地编写强大、复杂的 Python 应用程序。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

№2: Python 技巧:令人敬畏的 Python 特性自助餐

接下来是我一直以来最喜欢的 Python 书籍之一,由传奇人物丹·巴达尔所著的 Python Tricks ,于 2017 年出版。如果你正在寻找一本教你如何编写更多“Pythonic 式”代码的简明好书,别再找了,这本书就是为你准备的。

Python 技巧展示了有价值但经常被忽视的 Python 特性和最佳实践,将帮助您更好地理解 Python,从而能够使用它编写更好的代码。这本书包含 43 小节,每一小节都比另一小节更有价值,每一小节都包含一个简单的解释,并附有如何使用建议概念的简单例子。

这本书涵盖了许多高级主题,如更简洁的 Python 代码的常用模式、如何有效地使用函数、循环和字典、面向对象编程和类的最佳实践,以及一些 Python 生产力技术。此外,这本书附带了 12 个额外的视频,使用 11 分钟的短视频解释了书中提出的不同概念,您可以随时随地收听或观看。

№3:有效的 Python:写出更好的 Python 的 90 种方法

接下来是布雷特·斯拉特金在 2015 年写的一本书的精华部分,它是有效的 Python: 90 种写出更好的 Python 的方法。这本书涵盖了 90 种不同的。简明且解释清楚的项目讨论不同的方面和概念,你可以以任何你觉得舒服的顺序在它们之间跳跃。

当这本书最初出版时,它只包含了 59 种编写更好的 Python 代码的方法,但是第二版扩展了 30 多种新的有用的概念。像 Pythonic 思维、函数、类和继承、主类、并发性和并行性这样的概念。

这本书还深入介绍了如何正确打包代码、编写高效的文档以及管理依赖性和虚拟环境。此外,通过调试、测试和处理内存管理来维护您的包,以实现最佳执行。所以,如果你已经学完了 Python 的基础知识,并且想更深入地学*这门语言,这本书就是为你准备的。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

№4:Python Pro 的实践

接下来是一本相对较新的书,由戴恩·希拉德撰写,将于 2020 年初出版。这本书的目标读者是希望使用 Python 编写干净、组织良好且可维护的应用程序代码的专业程序员。

这本书教你如何设计、开发和编写高质量、专业的代码。易于理解、维护和扩展的代码。这本书的重点是给你一个坚实的基础,如何,为什么,以及何时模块化你的代码,提高其质量,并减少其整体复杂性与坚实和清晰的例子。学*本书涵盖的技术,你的代码将很容易被他人阅读和重用。

Python Pro 的实践主要由 4 个部分组成。一个介绍部分和一个结论部分,这两个部分涵盖了产生漂亮代码所需的所有内容。第 2 节和第 3 节将带您了解设计大规模软件系统的过程和思路,以及如何使它们可靠、可维护和易于浏览。

№5:直观的 Python:持续项目的高效开发

让我们以最新的一本书来结束我们的列表吧,直觉 Python ,作者大卫·穆勒,今年刚刚出版。与这个列表中的所有其他书籍不同,《直观的 Python》不仅仅是用 Python 写了好的、漂亮的代码。本书为您提供了维护代码所需的工具和软件包。

阅读这本书,你将学会如何在你的代码上运行静态和动态分析工具,在你打包和发布代码之前检测和消除代码中的错误。您还将学*如何下载和运行第三方包,而不影响代码的安全性。此外,您将学*使用 Python 默认调试器和使用其交互式控制台的最有效方法。

</5-python-debugging-tools-that-are-better-than-print-1aa02eba35>

最后的想法

学*如何编写代码并不困难,网上有无数的材料和资源可以教你任何你想学的编程语言。不仅仅是教授基础知识,还将带你了解如何使用这些语言构建许多东西。

使用和谈论最多的编程语言之一是 Python。Python 因其简单易学和能够在各种领域构建可靠的应用程序而广受欢迎。但是 Python 的一个棘手的方面是,尽管与其他编程语言相比,它很容易学*,但是掌握 Python 需要大量的实践和大量的技能。

如果你能用 Python 写出漂亮、清晰、简洁、可靠的代码,你就能在成千上万的 Python 程序员中脱颖而出,增加你获得工作、晋升或转行的机会。在这篇文章中,我推荐了 5 本书,重点教你如何开发和学* Python 代码编写技巧,并帮助你将代码提升到一个新的水平。

</6-approaches-to-speed-up-your-python-code-37a6da14fca>

FAANG 在 2021 年提出这 5 个 Python 问题

原文:https://towardsdatascience.com/5-python-coding-questions-asked-at-faang-59e6cf5ba2a0?source=collection_archive---------15-----------------------

破解数据科学面试

数据科学家和数据工程师的必读!

弗朗西丝卡·格里玛在 Unsplash 上的照片

声音的

我的 Github 上有完整的 Python 代码。

对于任何与数据相关的面试,Python 编程是一项基本技能,也是一个必须准备的领域!编程题分四类,包括数据结构与算法、机器学*算法、数学与统计、数据操纵(查看此精彩文章作者艾玛丁 @Airbnb)。

我在一篇相关的文章中详细阐述了数据操作和字符串提取的主题。在今天的帖子中,我将重点放在数学和统计学上,并对主要科技公司,尤其是 FAANG 提出的五个 Python 编程问题进行了现场编码。这种类型的问题给你一个商业背景,并要求通过模拟统计解决方案。

</6-python-questions-you-should-practice-before-coding-interviews-f958af55ad13>

问题 1:谁先赢?由微软

艾米和布拉德轮流掷一个公平的六面骰子。谁先掷出“6”谁就赢了这场比赛。艾米首先开始滚动。艾米赢的概率有多大?

走过我的思考

这是一个核心的模拟问题,没有比模拟这个过程相当多的次数并检查 Amy 获胜的概率更好的方法了。

艾米先掷硬币。如果结果是 6,那么游戏结束,艾米赢了。否则,轮到布拉德掷骰子,如果是 6,则赢得游戏。如果不是,则轮到艾米。重复这个过程,直到有人以 6 结束游戏。

这里,关键是要理解逻辑流程:谁赢了,在什么条件下赢了。如果艾米得了 6 分,布拉德也要掷骰子吗?号码

解决办法

检查第 11 行:A_6 是 Amy 的数据分布,如果她有一个 6,她的计数+1。否则,布拉德可以掷骰子。

最后(第 25 行),最终结果应该是艾米赢的次数除以艾米和布拉德赢的总次数。一个常见的错误是将 A_count 除以模拟总数。这是不正确的,因为当 Amy 和 Brad 都没有掷出 6 时,就会出现迭代。

让我们测试一下上面的算法。

0.531271015467384

事实证明,艾米在这场比赛中占了上风,因为她在布拉德之前开始滚动。艾米在一万次模拟中有 53%的概率获胜。

问题 2:每个大公司最多 69 个数字

-给定一个仅包含数字 6 和 9 的正整数 num。
-返回最多改变一位数字所能得到的最大数(6 变成 9,9 变成 6)。
——【https://leetcode.com/problems/maximum-69-number/】T2

走过我的思考

给定一个正整数,让值变大的方法只有一个,就是把一个‘6’变成一个‘9’,而不是反过来。还有,我们要改最左边的 6;否则,就不是最大数量了。比如我们要把‘6996’改成‘9996’,而不是‘6999’。

我想出了这个问题的几个变体:你要么改变一次,要么改变所有的 6。

解决方案 1:更换一次

996666669

第 3 行,我们把整数变成字符串,把第一个‘6’替换成‘9’;使用 int()将其转换回整数。

解决方案 2:全部替换

999999999

对于第二个场景,我们不需要指定 k,因为 replace()方法在默认情况下会更改所有合适的值。出于教学目的,我指定了 k 值。这个问题的另一个变体是替换前两个或三个“6”以使数字最大化。

约翰·维森特在 Unsplash 上的照片

问题 3:有效的完美正方形。作者:脸书

-给定一个正整数 num,写一个函数,如果 num 是正方,则返回 True,否则返回 False。
-后续:不要使用任何内置库函数如 sqrt。
-https://leetcode.com/problems/valid-perfect-square/

走过我的思考

非常简单:检查一个正整数是否有完美的平方根,如果有,返回 True,这可以分两步完成。

  1. 求平方根。
  2. 检查是否是完美的平方根。

棘手的部分是,我们必须使用一个内置的库(例如,math,Numpy)来计算平方根,这是一个在 LeetCode 的简单问题。如果我们不能使用这些库,它会变得更具挑战性和迭代性,这是 LeetCode 的一个中级问题。

解决方案 1:内置库

该算法轻松通过了测试用例。需要指出的是,我们需要使用 int()方法只获取平方根的整数部分,而忽略任何小数部分。对于完美的正方形,不会有任何区别,等式成立。对于非完美正方形,等式不成立,返回 False。

(特别感谢韩琦抓住了这个错误!)

解决方案 2:没有内置库&二分搜索法

如果没有图书馆,我们采用二分搜索法。LeetCode 包含了详细的解释(这里,我还有另外一篇关于这个话题的帖子(这里)。简而言之,我们创建两个指针,左和右,将这两个数的平均值与原数进行比较:如果小于该数,则增加该值;如果它更大,我们减少它;或者,如果匹配,则返回 True。

这些条件会在 while 循环中自动检查。

#问题 4:阶乘尾随零。作者:彭博

-给定一个整数 n,返回 n 中尾随零的个数!

-跟进:你能写出一个对数时间复杂度的解决方案吗?

——https://leetcode.com/problems/factorial-trailing-zeroes/

走过我的思考

这个问题有两个步骤:

  1. 计算 n 阶乘,n!
  2. 计算尾随零的数量

对于第一步,我们使用 while 循环迭代 n 阶乘,并停止循环,直到 1。对于第二步,事情变得有点棘手。

该问题要求尾随零,而不是零的总数。差别巨大。8 号!是 40,320,它有 2 个零,但只有 1 个尾随零。我们必须格外小心计算。我想出了两个解决方案。

解决方案 1:反向读取字符串

计算乘积的第一部分是不言而喻的。至于第二部分,我们用一个 str()方法把乘积转换成一个字符串然后反过来读:如果数字是 0,我们在计数上加 1;否则,我们就打破循环。

break 命令在这里是必不可少的。如上所述,上面的函数在没有 break 命令的情况下计算零的总数。

解决方案 2: while 循环

第一部分与解决方案 1 相同,唯一的区别是我们使用了一个 while 循环来计算尾部数字:对于要被 10 整除的乘积,最后一位数字必须是 0。因此,我们使用 while 循环不断更新 while 循环,直到条件不成立。

顺便说一下,解决方案 2 是我最喜欢的计算零的方法。

(特别感谢https://medium.com/u/a7d3764361bc?source=post_page-----59e6cf5ba2a0--------------------------------为改进方案。请参见代码的注释部分)。

问题 5:完美的数字,亚马逊

-一个完全数是一个正整数,等于它的正整数因子之和,不包括这个数本身。
-整数 x 的除数是能把 x 整除的整数。
-给定一个整数 n,如果 n 是完全数则返回 true,否则返回 false。
-https://leetcode.com/problems/perfect-number/

走过我的思考

这个问题可以分为三步:

  1. 求正约数
  2. 计算总和
  3. 决定:完美与否

第 2 步和第 3 步不言而喻,不超过一行程序。然而,棘手的部分是找到正约数。为此,我们可以采用野蛮的强制方法,从 1 到整数迭代整个序列。

理论上它应该对一个小整数起作用,但是如果我们对大整数运行,就超过了时间限制。时间效率不高。

解决方案 1:暴力

这种方法不适用于大值。你的面试官可能会要求一个更有效的解决方案。

解决方案 2: sqrt(n)

为了找到它的约数,我们不需要检查整数。例如,要找到 100 的约数,我们不必检查从 1 到 100 的数字。相反,我们只需要检查到 100 的平方根,也就是 10,并且所有其他可用的值都已经包括在内了。

这是一个优化的算法,可以节省我们大量的时间。

我的Github上有完整的 Python 代码。

外卖食品

  • 做了几十次练*编码,最大的收获就是理解问题,把问题分成多个可操作的组件。
  • 在这些可操作的部分中,总有一个步骤会绊倒候选人。像“不能使用内置函数/库”这样的约束。
  • 关键是一步一步写好自定义函数,在自己的练*套路中尽量避免使用内置函数。

Medium 最*进化出了自己的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。

*https://leihua-ye.medium.com/membership *

我的数据科学面试序列

*

喜欢读这本书吗?

请在 LinkedInYoutube 上找到我。

还有,看看我其他关于人工智能和机器学*的帖子。*

比“打印”更好的 5 个 Python 调试工具

原文:https://towardsdatascience.com/5-python-debugging-tools-that-are-better-than-print-1aa02eba35?source=collection_archive---------3-----------------------

更快更有效地调试您的代码

约书亚·阿拉贡在 Unsplash 上拍摄的照片

对于任何开发人员来说,调试代码都是最重要但又令人厌烦的任务之一。当你的代码行为怪异,崩溃,或者只是导致错误的答案时,这通常意味着你的代码包含了导致这些错误的 bug。

在用任何编程语言编写的任何代码中,都可能出现两种主要的编程错误:语法错误和语义错误。语法错误是指当您错误地键入一些命令时,或者在没有定义变量/函数的情况下使用它们时,或者如果代码中的缩进不正确时所导致的错误。

大多数情况下,如果您遵循 Python Traceback 的说明,语法错误很容易修复。另一方面,我们有所谓的语义错误。这些类型的错误是:代码运行,但计算出错误的答案,或者代码的行为与预期不同。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

发现代码中的错误并修复它以消除错误的唯一方法是调试。我知道,当我们面对一个 bug 时,我们大多数人做的第一件事就是使用一堆打印语句来跟踪代码的执行,并检测错误发生在哪里。如果您的代码只有几行或最多几百行,这可能是一种有效的方法,但是随着您的代码库变长,这种方法变得不太可行,您将需要使用其他方法。

幸运的是,Python 是最流行的编程语言之一。所以它有很多工具,你可以用来调试你的代码,这比在每隔几行代码后插入一个 print 语句更加有效和可行。本文将介绍其中的 5 种工具,您可以选择哪一种最适合您的风格。

№1: Python 标准调试器(pdb)

让我们从谈论最简单的调试器开始,一个用于中小型项目的调试器, Python 标准调试器(pdb) 。PDB 是 Python 所有版本自带的默认调试器,这意味着不需要安装或麻烦;如果您的计算机上已经安装了任何 Python 版本,您就可以开始使用它。

pdb 是一个命令行调试器,您可以在代码中插入断点,然后使用调试器模式运行代码。使用这些断点,您可以检查代码和堆栈帧,这与使用 print 语句非常相似。您可以通过在代码开头导入 pdb 来开始使用它。

Pdb 可以用来跳过一些代码行,或者在一个循环中迭代特定的次数。如果需要,还可以扩展调试器,因为它是作为 Python 标准库中的一个类来实现的。Pdb 是一个非常基本的调试器,但可以添加各种扩展使其更加有用,例如 rpdbpdb++ ,如果你正在使用 IPython,这可以使调试体验更好 ipdb

</7-tips-for-data-science-newbies-d95d979add54>

№2:皮查姆

pdb 是一个命令行调试器,并不是所有人都觉得有趣或易于使用。这是 ide 被创建的原因之一(集成开发环境)。ide 提供了一种可视化调试和测试代码的方法,可以更容易、更有效地调试任何代码库。但是,这些 ide 通常尺寸很大,需要进一步安装。

最著名的 Python IDE 是 PyCharm ,是 JetBrains 开发的 Python 专用 IDE。PyCharm 不仅仅是一个调试工具;相反,它是一个完整的开发环境。我发现 PyCharm 接口使用起来并不困难,但是它需要一些时间来适应,尤其是如果您以前从未使用过 IDE 的话。

PyCharm 中的调试工具使用对话框来引导您完成代码执行过程,并允许您选择各种调试参数。在 PyCharm 中使用调试模式时,可以在特定的代码行上插入断点,也可以选择设置异常断点(如果遇到特定的异常,调试器就会设置异常断点)。

№3: Visual Studio 调试器

另一个众所周知的 IDE 是微软的 Visual Studio (VS)。不像 PyCharm,它是专门为 Python 设计和构建的。VS 是一个支持不同编程语言的开发环境。VS 有两种变体:

VS2019 IDE 支持基本的 Python 调试以及 IronPython 。NET 调试。这意味着您可以使用 MPI 集群调试、断点、条件断点、跳过步骤(进入/退出/结束)、异常断点以及在未处理的异常上中断。

另一方面,VSCode 除了 Git 控制、语法突出显示和代码重构之外,还有更高级的调试工具。VSCode 的优势之一是它可以处理多语言代码库;然而,它在识别语言方面并不灵活,这反映了其使用的局限性。

№4:科莫多

如果你正在构建一个多语言的代码库,包括 Python,并且想要一个强大的能够处理各种语法的调试环境,那么 Komodo 应该是你的首选。Komodo 是 ActiveState 为混合语言应用程序设计和开发的全功能 IDE。

Komodo 调试器使用对话框从您那里获得调试器选项。如果您选择默认调试器设置,它将在没有进一步提示的情况下运行。Komodo 有一种复杂而灵活的方法来检测不同的编程语言,甚至可以在同一个代码文件中处理不同的语言。

Komodo 还在调试器模式中提供不同的可视化,让你加深对代码库的理解。此外,它允许您轻松地执行单元测试,并支持实时同行查看和团队协作。您还可以将 Git 与 Komodo 集成在一起,进行实时版本控制。

№5: Jupyter 可视化调试器

大多数数据科学应用程序都是使用 Jupyter 笔记本或 Jupyter 实验室构建的。尽管您仍然可以在我们已经讨论过的任何 ide 中使用您用 Jupyter 构建的代码。有时候你只想在 Jupyter 中调试你的代码,这会让你的任务更容易。

幸运的是,一年前,Jupyter 发布了一个可视化调试器,可以在 Jupyter 环境中使用,使得使用 Jupyter 更加有效。使用此调试器,您可以在笔记本单元格或源文件中设置断点,检查变量,并导航调用堆栈。您可以通过运行以下命令轻松安装调试器:

conda install xeus-python -c conda-forge

使用这个调试器,您最终可以使用 Jupyter 作为一个完整的开发环境,而不需要在其他地方测试和调试您的代码。

最后的想法

当我第一次开始编程的时候——十多年前——我一直认为调试对于一个好的程序员来说不是必不可少的。作为初学者,这可能是真的。你首先需要学*如何编写代码,然后在代码出错时修复它。但是,随着我在你的学*旅程中的推进,我发现调试不仅是必要的,而且,如果你不知道如何调试代码,你就不能称自己为程序员。

直到现在,每次我想到调试,首先想到的是“打印语句”,我浪费了很多时间使用打印来检测和定位代码中的错误。尽管如此,随着我工作的代码库越来越长,使用 spring 语句变得越来越麻烦,而不是有用的方法。当我决定深入调试并找到更有效的方法来完成我的任务时。

</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>

在我学*关于调试和调试器的所有知识的过程中,我使用了如此多的工具来了解那里有什么和什么最适合我。虽然我更喜欢使用的可能不是其他人更喜欢使用的,但是在选择调试器时,您只需要选择您最喜欢的。对我来说,那是而且仍然是 PDB。

因此,如果您是编程、Python 的新手,或者想在不使用 print 语句的情况下调试代码,那么试试本文中的 5 个工具,看看哪一个对您来说最合适。

6 个 Python GUI 框架来创建桌面、Web 甚至移动应用程序。

原文:https://towardsdatascience.com/5-python-gui-frameworks-to-create-desktop-web-and-even-mobile-apps-c25f1bcfb561?source=collection_archive---------1-----------------------

你可以纯粹用 Python 来构建漂亮的应用程序。

用 Python 框架开发 GUI 来自像素格式的照片

没有好的用户界面,任何解决方案都是不完整的。

Python 已经在各种各样的用例中取得了成功。但是很少有人理解和欣赏它在创建图形用户界面(GUI)方面的能力。)事实上,我们有一些非凡的 python GUI 框架,可以帮助开发人员快速搭建一个界面,与他们的项目进行交互。

这篇文章将讨论 3 跨平台 GUI 框架2 网络接口工具。我们还将介绍一些基本示例它们的优势,这样你就可以很好地为你的下一个项目选择正确的示例。

这里有五个你需要知道的工具来构建有用的 UI。

格拉迪欧

Gradio 是一个漂亮的 web UI 生成器。它是专门为机器学*项目设计的。

Gradio 有大约 25 种不同的小工具。每种都有自己的一套配置。您可以将每个 Python 函数包装在 Gradio 接口中,并在另一个小部件上显示其输出。

Gradio 的酷之处在于它收集反馈的能力。作为数据科学家,您经常需要收集评估者对您的模型的反馈。

Gradio 有一个标志选项。如果用户发现模型预测关闭。他们可以点击标志按钮。Gradio 将收集所有输入值、预测和其他信息。

大多数有经验的数据科学家都知道,构建和部署模型是一个高度迭代的过程。因此,反馈收集使 Gradio 成为 ML 应用原型的完美选择。

你也可以在 Huggingface spaces 上免费部署你的应用。这样你就可以与更多的观众分享你的作品,并收集更多的反馈。Huggingface 只允许 Gradio 和 Streamlit 应用程序(和静态页面)在其平台上运行。

这使得 Streamlit 成为 GUI 开发的下一个最佳 Python 工具。

细流

Streamlit 是一个使用 Python 开发 web 应用程序的绝佳工具。它有一个声明式的编码风格,我觉得非常有用。

你不需要了解任何 HTML、CSS 或 JavaScript,也不需要学*任何网络开发在线课程。如果你懂 Python,你已经准备好了你需要的一切。

您可以使用以下命令安装 Streamlit。

pip install streamlit

这是一个在网页上显示熊猫数据框的简单应用程序。

基本 Streamlit 示例—作者摘录。

用上述内容创建一个名为quickstart.py的文件。要启动 streamlit web 服务器,请运行以下命令。

streamlilt run quickstart.py

这个命令将启动一个开发服务器,在您的 web 浏览器上,您可以看到以下内容。

Streamlit 基础应用程序—作者图片

你可以在我之前关于这个主题的文章中了解更多关于 Streamlit 的信息。这个应用还有一个现场版你可以看看。

阴谋破折号

Plotly 已经存在好几年了。Dash 是一个框架,它广泛地利用 Plotly 图表用较少的代码构建 GUI。

Plotly Dash 是一款灵活的解决方案,适合各种应用。他们的网站上说,它旨在到达 Tableau 和 PowerBI 无法到达的地方。

在我看来,确实如此。

使用 PyPI 存储库中的以下单个命令安装 Plotly Dash。

pip install dash

首先,您可以使用以下内容创建一个名为app.py的文件,并像运行任何其他 python 脚本一样运行它。

基本情节破折号示例-作者摘录。

运行下面的代码来激活 web 服务器。它将启动一个 Flask 开发服务器,并在默认的 web 浏览器上打开它。

python app.py

基本 Plotly Dash 应用程序—图片由作者提供

你可以在我之前关于这个话题的博客文章中读到更多关于 Plotly Dash 的内容。

Plotly Dash 和 Streamlit 是这个列表中比较成熟的技术。虽然它们在开发 web 应用程序时非常有用,但我们还有一些工具可以帮助我们用 Python 构建跨平台的应用程序。下一个是一个很好的例子。

基维

Kivy 是一个跨平台的 Python 软件开发框架。有了它,你可以为 Windows、OS X 和 Linux 创建桌面应用,为 iOS 和 Android 构建移动应用,并在基于 Raspberry Pi 的嵌入式设备上使用它。

你没看错。

Python 不再局限于 web 和桌面开发。你可以做很多用其他语言做不到的事情。也许,这就是为什么 Python 是 2021 年 Stackoverflow 开发者调查中最受欢迎的技术。

Kivy 的文档包括从安装到在 Android Marketplace 发布的详细指南。它们因平台而异。

因为我在 Ubuntu (Linux)上,所以我用 Kivy 官方的 PPA 方式安装它。下面是做这件事的说明。

$ sudo add-apt-repository ppa:kivy-team/kivy
$ sudo apt-get install python3-kivy

安装完成后,您可以创建一个包含以下内容的文件app.py,并运行它来查看 Kivy 的运行情况。

基本 Kivy 应用程序-作者摘录。

作者用 Kivy-Image 创建的基本 GUI。

正如你在上面的例子中看到的,Kivy 的网格布局对于在屏幕上排列 UI 元素来说非常方便。您只需指定列数并开始添加元素。Kivy 足够聪明,可以用最好的方式展示它们。

当然,Kivy 不止这些。从他们的官方文档中,你可以了解更多关于 GPU 优化、移动构建、触控支持等。这里有一个优秀的免费代码营教程,可以在 Youtube 上观看。

关于 Kivy——用于跨平台开发的 Python GUI 框架的 Freecodecamp 课程。

Kivy 是构建移动应用原型的一个很好的工具。如果你的团队不具备开发移动应用的技能,这可能是最好的选择。

PyQt5

PyQt5 是一个围绕 Qt 构建的框架。QT(和 PYQT5)支持跨功能开发。它支持 Windows、Mac、Linux 以及 iOS 和 Android 等移动平台。

除了令人印象深刻的 UI 组件之外,PyQT5 还可以与原生 OS APIs 很好地集成。PYQT5 的一大好处是 QT Designer,这是一个让您用 QT 小部件可视化地组合 UI 的工具。

您可以使用 PyPI 安装框架,如下所示:

pip install PyQt5

一个 hello world 风格的应用程序只需要几行代码就可以提供一个好看的 UI。

基本 PyQT5 示例—作者摘录

PyQT5 Hello world 示例—图片由作者提供。

QT 和 PyQT5 是成熟的框架。因为它的生态系统是巨大的,可能需要一些时间来掌握它。然而,找到免费的学*资源并不困难。

然而,PyQT5 不能免费用于商业用途。下一个是。

https://www.pythonguis.com/pyqt5-tutorial/

Tkinter

Tkinter 是一个标准的 Python GUI 库。像 Kivy 和 PyQT5 一样,Tkinter 也可以在 Windows、Linux 和 Mac OS 上运行。由于 Tkinter 使用 OS 原生元素,它们看起来和感觉上与运行它的平台上的其他东西一样。

Tkinter 相对容易学*和实现。但是它的限制是缺少高级的部件。然而,这是一个很好的工具,可以在很短的时间内将你的想法原型化。

官方 python 安装附带了 Tkinter。然而,如果你使用的是 Ubuntu,你必须按照下面的说明安装它。

$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.9 python3-tk

一旦安装了这个包,就可以执行下面的 python 脚本来启动 hello world 应用程序。

基本 Tkinter 示例—作者摘录。

上面的代码将打开一个看起来像本机的 GUI,如下所示。

Tkinter hello world 示例—图片由作者提供。

正如您所看到的,与我们以前的工具相比,这个工具非常简单。

https://realpython.com/python-gui-tkinter/

最后的想法

在过去的几十年里,Python 已经扩展到了多个领域。今天,我们将这种优雅的编程语言用于数据科学、工作流集成、软件开发等。

Python 也完全能够进行 GUI 开发。这正是我们在这篇文章中讨论的内容。

我们在这里讨论的五个工具对几乎所有的 GUI 开发需求都有帮助。从原型到移动应用发布,到谷歌和 iOS 商店,再到网络应用。对于所有这些工具,您应该具备的唯一技能是 Python。

为正确的项目选择正确的工具是艺术。从这个列表中,我的建议如下:

  • 寻找快速原型?和 Tkinter 一起去
  • 需要更多小工具吗?使用 PyQT5
  • 开发跨平台和移动应用?Kivy 工作很好
  • 想要构建一个 web 应用程序并给予用户并发访问权限?细流太棒了
  • 需要更多的灵活性?阴谋破折号是答案。

我希望这篇指南对您为下一个项目选择 Python GUI 工具有所帮助。

感谢你的阅读,朋友!上 跟我打招呼 LinkedIn Twitter

还不是中等会员?请使用此链接 成为会员 因为,在不为你额外付费的情况下,我为你引荐赚取一小笔佣金。

你不知道但应该知道的 5 个 Python 库

原文:https://towardsdatascience.com/5-python-libraries-that-you-dont-know-but-you-should-fd6f810773a7?source=collection_archive---------3-----------------------

大蟒

发现 5 个你应该马上开始使用的 Python 库

克里斯蒂娜·莫里路拍摄的图片。来源:像素

使用 Python 最大的好处之一就是它无限的开源库。基本上什么都有图书馆。如果你读过我以前的一些博客,你可能已经注意到我是低代码库的忠实粉丝。这并不是因为我懒于输入代码,而是因为我更喜欢把时间投入到真正重要的项目上。如果一个图书馆可以解决一个问题,为什么不节省你的宝贵时间,试一试呢?今天,我将向您介绍 5 个您可能从未听说过但您应该添加到您的管道中的库。我们开始吧!

PyForest

当你开始为一个项目输入代码时,你的第一步是什么?您可能会导入您需要的库,对吗?问题是你永远不知道你将需要多少个库,直到你需要它并得到一个错误。这就是为什么 PyForest 是我所知道的最方便的图书馆之一。PyForest 可以用一行代码将 40 个最流行的库导入到您的笔记本中。忘记努力记住如何调用每个库。PyForest 可以帮你做到。关于它我写了整整一个博客,总之你安装它,调用它,使用它!所有这些都在几秒钟内完成。化名呢?别担心。它们将以我们熟悉的别名导入。

如何使用

只需输入pip install pyforest就可以了。要将其导入您的笔记本,请键入from pyforest import *,然后您就可以开始使用您的库了。要检查哪些库被导入,输入lazy_imports()

作者图片

上面的库都很好用。从技术上讲,它们只有在你使用时才会被导入。否则,他们不会。可以看到 Pandas、Matplotlib、Seaborn、Tensorflow、Sklearn、NLTK、XGBoost、Plotly、Keras、Numpy 等很多库。

我主要使用 PyForest 来完成我的个人项目或不会被其他人审阅的项目。如果你的代码将被其他人审查,不推荐 PyForest,因为它没有说明这些库正在被导入。

情感

Emot 是一个很好的库,它有可能极大地改进您的下一个 NLP 项目。它将表情符号和表情符号转化为描述性信息。例如,想象有人在 Twitter 上发布了“我❤️python”。那个人没有说爱这个词。相反,他们使用了表情符号。如果你在 NLP 项目中使用这条推文,你将不得不删除表情符号,并丢失一大块信息。这时候 Emot 就来了。它将表情符号和表情符号转换成文字。对于不熟悉的人来说,表情符号是用文字表达情感的方式。例如,:)代表笑脸,:(代表悲伤的脸。

如何使用

要安装它,你可以输入pip install emot,你就可以开始了。然后,您需要通过键入import emot将其导入到您的笔记本中。你需要决定你是否想弄清楚表情符号或表情符号的含义。对于表情符号,代码是emot.emoji(your_text)。让我们用一个例子来验证一下:

作者图片

上面可以看到我加了句I ❤️ Python 🙂用 Emot 算出来的。它返回一个包含值、描述和位置的字典。像任何字典一样,你可以把它分成几部分,集中在你需要的信息上。如果我输入ans['mean'],它将只返回表情描述。

作者图片

Geemap

我把 Geemap 列入了这个名单,但是说实话,它值得一个完整的博客来讨论它。简而言之,Geemap 是一个 Python 库,允许使用 Google Earth 引擎进行交互式制图。你可能很熟悉 Google Earth 及其强大的功能,那么为什么不在你的下一个项目中使用它呢?我计划在接下来的几周内创建一个项目来探索它的所有功能。同时,这里是你如何安装和开始使用它。

如何使用

你可以在你的终端中输入pip install geemap来安装它。要将其导入您的笔记本,您可以键入import geemap。出于演示的目的,我将使用以下代码创建一个基于 leav 的交互式地图:

**import** geemap.eefolium **as** geemap
Map = geemap.Map(center=[40,-100], zoom=4)
Map

作者图片

正如我提到的,我还没有对它进行足够的探索,但他们有一个完整的 GitHub 自述文件更多地讨论了它是如何工作的以及它能做什么。

Dabl

我昨天了解了 Dabl,在做了一些研究后,我发现它值得拥有自己的博客,但让我们来谈谈基本情况。Dabl 旨在让机器学*建模对初学者来说更容易理解。为此,它为机器学*项目使用低代码解决方案。Dabl 简化了数据清理、创建可视化、构建基线模型和解释模型。让我们快速回顾一下它的一些功能。

如何使用

首先,要安装它,你可以在你的终端中输入pip install dabl。然后,你可以通过输入import dabl将 Dabl 导入你的笔记本。你可以离开这里了。你可以使用dabl.clean(**data**)来获得关于特性的信息,比如是否有什么无用的特性。它还显示了连续、分类和高基数的特征。

作者图片

您可以使用dabl.plot(**data**)来生成特定功能的可视化效果:

作者图片

最后,您可以使用dabl.AnyClassifierdabl.Simplefier()用一行代码创建多个模型,就像您使用 Scikit-Learn 一样。但是,在这一步中,您必须采取一些您通常会采取的步骤,例如创建训练和测试数据集、调用、拟合和预测模型。然后,可以使用 Scikit-Learn 对模型进行评估。

**# Setting X and y variables**
X, y = load_digits(return_X_y=True)**# Splitting the dataset into train and test sets**X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)**# Calling the model**
sc = dabl.SimpleClassifier().fit(X_train, y_train)**# Evaluating accuracy score**
print(“Accuracy score”, sc.score(X_test, y_test))

正如我们所见,Dabl 迭代了多个模型,包括虚拟分类器、高斯神经网络、不同深度的决策树和逻辑回归。最后,它展示了最佳模型。所有这些模型都在 10 秒钟内完成。很酷,对吧?我决定使用 Scikit-Learn 来测试最终的模型,以确保这个结果是可信的。结果如下:

作者图片

我用传统的方法预测得到了 0.968 的准确率,用 Dabl 得到了 0.971 的准确率。对我来说已经够*了!注意,我不必从 Scikit-Learn 库中导入逻辑回归模型,因为它已经用 PyForest 导入了。我需要坦白,我更喜欢 LazyPredict,但是 Dabl 值得一试。关于 Dabl 还有很多要展示的,我会专门为它写一个博客,提供更多的细节。敬请期待!

SweetViz

Sweetviz 是一个低代码 Python 库,它可以生成漂亮的可视化效果,用两行代码就可以启动您的探索性数据分析。输出是一个交互式 HTML 文件。和我今天提到的其他库一样,SweetViz 应该有自己的博客,我很快也会发布一个。现在,让我们对它有个大概的了解。

如何使用

my_report = sv.analyze(**dataframe**)
my_report.show_html()

作者图片

你看到了吗?Sweetviz 能够创建一个包含整个数据集信息的 EDA HTML 文件,并将其分解,以便您可以单独分析每个要素。您可以获得与其他特征、最大值、最小值和最频繁值的数值和分类关联。可视化效果也会根据数据类型而变化。你可以用 Sweetviz 做更多的事情,但我会把它留到另一个博客上。同时,我强烈建议你尝试一下。

作者图片

结论

PyForest、Emot、Geemap、Dabl 和 Sweetviz 是值得了解的库,因为它们将复杂的任务变成了简单的任务。如果您使用这些库,您将节省宝贵的时间来完成重要的任务。

我建议您尝试一下,探索一下我在这里没有提到的功能。如果你知道,让我知道你发现了什么。你可以在我的 GitHub 里找到我用来测试他们的笔记本。感谢您的阅读!

你可能也会喜欢…

你应该知道的 4 个很酷的 Python 库你应该知道的 3 个很棒的 Python 库你应该知道的 3 个低代码 Python

5 个 Python 开源工具,用于从 PDF 文件中提取文本和表格数据

原文:https://towardsdatascience.com/5-python-open-source-tools-to-extract-text-and-tabular-data-from-pdf-files-9359cdde6b56?source=collection_archive---------1-----------------------

本文全面概述了从 PDF 文件中提取文本和表格数据的各种开源工具

里沙卜·夏尔马在 Unsplash 上拍摄的照片

介绍

作为数据科学家,我们必须尽可能多地利用组织内部或外部的可用数据源,以便以最相关的方式应对他们的问题。这些数据可能有不同的格式,有时很难处理。本文主要关注两个主要方面:文本数据抽取和表格数据抽取。

库的列表并不详尽,目标是集中于其中的 5 个,其中 3 个用于文本数据提取,2 个用于表格数据提取。在文章的结尾可以找到更多的信息。

文本数据提取

对于这一部分,测试数据是基于奥巴马的演讲词 matter

下面是第一行和最后一行。

文件的前两段

文件的最后两段

石板

由于与使用 PDFMiner 相关的困难,这个包被创建为 PDFMiner 的包装器,以使文本提取更加容易。

先决条件和实现

pip install slate3k

从板岩中提取的第一行

从板岩中提取的第一行

从 slate3k 的结果中,我们可以注意到 pdf 文档的所有内容都被检索到了,但是在这个过程中没有考虑回车。

PdfMiner.six

这是社区维护的原始 PDFMiner 的分支,目的是让这个库能够与 python 3 一起工作。它用于信息提取,侧重于获取和分析文本数据,也可用于获取文本的确切位置、字体或颜色。

先决条件及实现

pip install pdfminer.six

pdfminer 摘录的前几行/段落。六

pdfminer.six 中摘录的最后几行/段落

考虑到所有回车,PdfMiner.six 按原样获取 PDF 文件的内容

PyPDF2

该库用于多种任务,如文本提取、合并 PDF 文件、分割特定 PDF 文件的页面、加密 PDF 文件等。在本文中,我们只关注文本提取特性。

先决条件和实现

pip install PyPDF2

表格数据提取

大多数时候,企业都在寻找将 PDF 文件的数据转换成可编辑格式的解决方案。这样的任务可以使用以下 python 库来执行: tabula-pyCamelot。 我们用这个食物卡路里列表来突出场景。

白板

这个库是 tabula-java 的 python 包装器,用于从 PDF 文件中读取表格,并将这些表格转换成 xlsx、csv、tsv 和 JSON 文件。

先决条件及实现

pip install tabula-py
pip install tabulate

这是第 6 页摘录的结果

PDF 文件摘录,第 6 页

  • 第 7 行 上,我们可以通过使用选项 pages="all" 提取所有的表格
  • 第 17 行 上,我们将结果转换成一个 excel 文件。相反,它可以被转换成 CSV 文件,tsv 等。

这是使用 tabula 的另一种方法。我们可以使用一条指令提取信息,而不是分解步骤,这次将数据存储为 CSV 文件。

结果在内容上是一样的。唯一的区别在于文件的格式。

卡默洛特

可以使用 Camelot,类似于 Tabula-py,从 PDF 文件中提取表格。与 tabula-py 不同,Camelot 依赖于同样需要安装的 ghostscript

先决条件和实现

pip install ghostscriptpip install camelot-py
  • 第 4 行得到一个 表格列表 类型,包含 PDF 中存在的所有表格。
  • 第 7 行将显示 11,对应于文件中表的数量。
  • 从第 10 行到第 12 行,我们转换每个表并显示它们的前 5 个观察值。我们还可以保存每个数据帧。我们可以使用 直接将每个表格保存为. csv 文件。to _ CSV(output . CSV)如下图
"""
Let convert for instance the 6th (index starts at 0) table into .csv file"""all_tables[5].to_csv**(**'table_6.csv'**)**

文章结尾

恭喜你!您刚刚学*了如何使用 slatepdfminer.six、PyPDF tabula-pyCamelot 从 PDF 文件中提取文本和表格数据。现在,您可以通过使用您浏览过的库来收集更多数据,从而为您的业务带来价值。您可以在下面找到更多资源。

在 YouTube上关注我获得更多互动会话!

额外资源

使用 Python 处理 PDF 文件

如何从 PDF 中提取表格

卡梅洛特快速入门

再见🏃🏾

使用金融数据的 5 个 Python 技巧

原文:https://towardsdatascience.com/5-python-tips-to-work-with-financial-data-8907e17a7c91?source=collection_archive---------15-----------------------

小心点!是钱的问题!

图片由米歇尔通过 Unsplash

我以前工作的公司有一句口号:我们是一家拥有银行牌照的科技公司。虽然这听起来像是一个公司品牌的事情,但在某种程度上这是真的。*年来,Python 已经出现在许多领域,包括但不限于数据分析、欺诈检测、用户行为预测等,在金融机构中大量使用。Quantopian 之类的交易平台也在用。

在本文中,我将根据我的个人经验,分享一些使用 Python 处理金融数据的技巧。有些需要你额外的注意,否则,你可能会损失一大笔钱!这个列表并不完整,请在下面留下你的评论来丰富它。

小心零金额和空金额

在 99%的情况下,您需要在金融机构中处理像 0 或空金额这样的特殊金额。开发商和金融专家之间总会讨论如何处理它们。我们应该忽略它们,保留它们,还是提出一个错误?

除了要知道这些特例的存在,还要认识到 0 和空的区别以及处理方式。例如,在我的情况下,只有空的金额是无效的,应该提出一个错误,其余的是有效的。那么我将很容易得到这样的代码:

if not amount:
    logger.error("Received an invalid amount")

但是,这段代码有潜在的风险。在 Python 中,有几个值被认为是 [False](https://www.programiz.com/python-programming/methods/built-in/bool),包括 0 和None。这意味着,0 金额也将引发异常,这不是我们想要的!

更安全的方法是像这样显式地提及无效值:

if amount in [None, '']:
    logger.error("Received an invalid amount")

小心浮点数,它们不准确

如果你打开一个 Python 解释器,输入1.2-1.0,你会得到这样的结果:

(图片由

如果你问一个 10 岁的孩子,他会告诉你这是错误的。Python 怎么会犯这样的“错误”?这个奇怪的数字是怎么算出来的?为什么会有微小的差别?处理大量敏感数字的程序不应该容忍这种差异。这个问题还会在测试过程中引发不一致的问题。

不是 Python 里的 bug。它与浮点数在底层系统中的表示方式有更大的关系。浮点数在硬件中表示为二进制分数。不幸的是,并不是所有的十进制部分都可以用二进制格式精确表示。例如,0.125 可以用有限位数的二进制表示:

0011111

但是,0.2 就不是这样了。大概是这样的:

00111110010011001100110011001101...

Python 不会保留无限重复的分数。无论我们保留多少位数,结果都不会准确。您可以看到 Python 中存储的实际值,如下所示:

>>> "{0:.20f}".format(1.2)
'1.19999999999999995559'

有一个网站专门做这个话题。也可以阅读 Python 文档。

但是应该怎么解决这个问题呢?简单的解决方法是使用[Decimal](https://docs.python.org/3.10/library/decimal.html)类型。Decimal旨在解决浮动不准确的问题。它以 10 为基数存储数字,你可以控制精度水平。由于不是以二进制存储的,Decimal相对来说不如浮点有效。

计算机必须提供一种算法,这种算法的工作方式与人们在学校学*的算法相同。

如果我们用Decimal做同样的计算,这次我们会得到正确的结果。请记住,你需要把 string '1.2'而不是 float 1.2放进去,否则Decimal会把 float 转换成它等价的十进制数,从而从一开始就用错了数。

>>> Decimal('1.2')-Decimal('1.0')
Decimal('0.2')>>> Decimal(1.2)-Decimal(1.0)
Decimal('0.1999999999999999555910790150')

查看本文,了解浮点和小数的性能比较。

https://claudio-salvatore-arcidiacono.medium.com/dealing-with-decimal-numbers-in-python-8d2e1da2a16c

使用哪种舍入方法?

作为一名负责任的软件开发人员,在处理不明确的数据时,您需要三思。当处理钱的时候,我们经常需要四舍五入。舍入数字会失去精度,你应该知道这个问题和它对一个巨大的数据集的影响。永远不要低估舍入的力量。1980 年初,温哥华证券交易所的指数每笔交易都被截断到小数点后三位,而不是适当的四舍五入。累积截断导致每月 25 点的巨大损失。1983 年终于纠正了错误,数值从 524.811 改为 1098.892。

有很多舍入策略。这里没有对错。最重要的是理解每种策略背后的原理及其副作用。

  • 向上舍入:向上舍入到不小于输入的最小整数。
  • 向下舍入:向下舍入到不超过输入的最大整数。
  • 四舍五入:0.5 称为平局。等于或大于 0.5 的分数总是向上舍入。这是最广为人知的舍入策略。
  • 向下舍入一半:等于或小于 0.5 的分数被向下舍入。

不同舍入策略的示例—正面(图片由提供)

负数怎么样?

上述舍入策略有一个共同的问题:舍入偏差。向上舍入(一半)有一个朝向正无限偏差的舍入,向下舍入(一半)有一个朝向负无限偏差舍入。这意味着包括负数在内的任何数字都将向上舍入到更高的值,向下舍入到更低的值。

不同舍入策略的示例—负面(图片由提供)

这导致了另一个副作用:结果是关于零不对称。

不对称舍入示例(图片由提供)

在本例中,1.5 向上舍入为 2,而-1.5 向上舍入为-1。

我们有完美的解决方案吗?

为了减轻舍入偏差,发明了四舍五入策略。这不是我在高中学过的东西,然而,这是 IEEE-754 标准中默认的舍入规则。该策略假设数据集中向上舍入或向下舍入的可能性相等。因此,决定以期望的精度将结(0.5)舍入到最接*的偶数。同时,它保持结果在零附*对称。

四舍五入为偶数的示例(图片由提供)

这也是 Python 中round()方法使用的策略。

>>> round(1.5)
2
>>> round(2.5)
2
>>> round(-1.5)
-2
>>> round(-2.5)
-2

然而,round()对于浮动的行为有时会令人困惑。在本例中,3.675 被舍入为 3.67,而不是 3.68。这又与前一点有关浮点数的不准确性。3.765 无法准确存储在操作系统中,因此造成了这个令人惊讶的结果。使用Decimal类可以解决这个问题。

>>> round(3.675,2)
3.67
>>> round(Decimal('3.675'), 2)
Decimal('3.68')

四舍五入半到偶数还有一个很酷的名字:银行家的四舍五入。它通常被银行家使用,因为从它的名字你很容易理解。主要原因是它是无偏正如我刚才解释的。有趣的是,没有明确的证据证明这曾经是银行业的标准。

Python 中如何正确舍入数字?

除了round(),还有另外两个内置模块提供不同的舍入策略。math.ceil()仅执行上舍入,math.floor()仅执行下舍入。

另一个强大的模块是Decimal,不仅因为它精确地表示了一个浮点数,而且还可以轻松地切换到不同的舍入策略。但是Decimal中一些舍入策略的名称与我们之前的解释是矛盾的。为了帮助您快速搜索每个舍入策略的 Python 实现,我创建了这个 cheetsheet。

取整 cheetseet(图片由拍摄)

我的很多想法都来自 Real Python 的这篇很棒的文章:

https://realpython.com/python-rounding/

在正确的时间(区域)处理财务数据

我们都知道时间就是金钱!我们不想因为忘记在 2020 年 2 月 29 日打开系统而损失金钱。实际上,今天(2021 年 10 月 31 日)是我们从中欧夏令时(CEST)切换到中欧时间(CET)的日子,即从 UTC+2 切换到 UTC +1,这也是测试您应用的时间设置的好时机。

区分系统时区和您的应用时区

可以让你的应用程序在不同于系统的时区运行。通常,Linux 服务器在 UTC 时区运行。如果你的应用运行在一个单独的容器中(比如 docker),那么你可以强制它运行在不同的时区。

如何在 Python 中管理时区?

在 Python 中,可以定义带时区或不带时区的日期对象。没有时区的日期称为 Naive,而有时区的日期称为 Aware。默认情况下,Python 中的数据对象是简单的。

>>> datetime.now()
datetime.datetime(2021, 10, 31, 22, 6, 34, 626859)

datetime模块提供了timezone类,该类表示由 UTC 的固定偏移量定义的时区。

>>> from datetime import datetime, timezone, timedelta
>>> datetime.now(timezone(timedelta(hours=+2)))
datetime.datetime(2021, 10, 31, 23, 15, 28, 965657, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)))

这个timezone类有一个问题,那就是你只能定义一个固定的偏移量。然后,在夏令时的情况下,应用程序负责切换到另一个偏移量。Python 的 doc 还提到:

世界各地的时间调整规则更多的是政治性的,而不是理性的,经常变化,除了 UTC 之外,没有适合每一种应用的标准。

但是有解决的办法吗?

当然,感谢这个精彩的 Python 社区,我们有了第三方库pytz,它将 Olson tz 数据库引入了 Python。可以通过位置(例如欧洲/阿姆斯特丹)来定义时区,而不仅仅是硬编码偏移。图书馆将在夏令时结束时自动调整时间。

>>> from pytz import timezone
>>> from datetime import datetime
>>> amsterdam = timezone('Europe/Amsterdam')
>>> datetime.now(amsterdam)
datetime.datetime(2021, 10, 31, 22, 30, 26, 451405, tzinfo=<DstTzInfo 'Europe/Amsterdam' CET+1:00:00 STD>)

国定假日怎么样?

像银行这样的金融机构有时会在周末或国定假日暂停营业。Python datatime可以告诉我们星期一是 0,星期天是 6 的日期是星期几,以确定今天是否是周末。

>>> import datetime
>>> datetime.datetime.today().weekday()
6 # today is Sunday

但是找出每个国家所有的法定假日是一个挑战。Python 社区开发了一个[holidays](https://pypi.org/project/holidays/)库来包含许多国家的法定假日。这是荷兰国王日的一个例子。这种库帮助我们自动管理假期。然而,在生产中使用它们之前,有必要检查一下是否包含了您想要的所有假期。

>>> from datetime import date
>>> import holidays
>>> date(2021,4,27) in holidays.NL()
True>>> holidays.NL(years=2021)
{datetime.date(2021, 1, 1): 'Nieuwjaarsdag', datetime.date(2021, 4, 4): 'Eerste paasdag', datetime.date(2021, 4, 2): 'Goede Vrijdag', datetime.date(2021, 4, 5): 'Tweede paasdag', datetime.date(2021, 5, 13): 'Hemelvaart', datetime.date(2021, 5, 23): 'Eerste Pinksterdag', datetime.date(2021, 5, 24): 'Tweede Pinksterdag', datetime.date(2021, 12, 25): 'Eerste Kerstdag', datetime.date(2021, 12, 26): 'Tweede Kerstdag', datetime.date(2021, 4, 27): 'Koningsdag'}

你听说过银行假日吗?

和“银行家四舍五入”一样,另一个与银行相关的术语是银行假日。这是一个金融机构停止营业的工作日。它主要与实体分支机构相关,因为在线服务仍在继续运营。通常情况下,图书馆的国定假日已经涵盖了银行假日,所以没有必要再建一个图书馆。但是这并不能阻止社区发展新的事物,比如政府银行假日。

使用元组来避免改变属性

数据完整性一直是金融机构的重要话题。这是一个非常广泛和复杂的话题。简单来说,在这个上下文中,我们只指“不改变原始数据的内容”。例如,API 从客户端接收支付请求,其中包括发送者、接收者、金额、账户等信息。这个 API 应该将这个信息传递给另一个系统,而不修改这个请求上的任何内容。

从技术角度来看,避免这个问题的一种方法是使用 tuple 和 dataclass 使支付请求对象不可变。默认情况下,tuple 是不可变的,您也可以将 dataclass 对象设置为不可变的。

下面是 namedtuple 的例子。您可以将每一行映射到一个 NamedTuple 对象。如果尝试修改属性,将会收到 AttributeError 异常。

您可以在 dataclass 中用frozen=True做同样的事情,但是您不能轻易地将一行映射到 dataclass 对象。下面是如何在 dataclass 中做到这一点。

如果您对 NamedTuple 和 dataclass 感兴趣,可以随意阅读我以前的文章。

知道屈服的力量

当数据量达到一定水平时,您开始担心性能问题。这个小技巧让程序更明智地使用内存。假设你想知道一个列表的排列:[1,2,3,4]。你可以创建一个函数calculate_permutations(),返回所有的 24 种组合。

有时候,你不一定想一次了解全部,只对下一个组合感兴趣。然后你可以利用yield来节省你的内存。

比较回报率和收益率

函数calculate_permutations_return()返回一个列表,而calculate_permutations_yield()返回一个生成器。两者都是可迭代的。不同的是生成器是一种可迭代的,你只能迭代一次。结果是即时计算的。你可以清楚地看到这两个函数的大小差异。生成器对象本身比完整的结果要小得多,并且不会随着元素数量的增加而增加。

这也和 Python 中叫做懒求值的概念有关。如果你想更深入一点,你可以阅读我的一篇文章:

Python 实际上在一个内置模块[itertools](https://docs.python.org/3/library/itertools.html)中处理这样的计算。这个模块创建了许多迭代器来实现高效的循环。你可以很容易地得到这样的排列:

import itertools
print(itertools.permutations([1, 2, 3, 4]))

结论

以下是与金融机构合作的 5 个 Python 技巧。我希望它们对你有用。我肯定我没有涵盖所有有趣的点。如果你有任何想法与我们分享,请在下面留下你的评论。

让你轻松生活的 5 个 Python 技巧

原文:https://towardsdatascience.com/5-python-tricks-that-will-ease-your-life-ed81987ec467?source=collection_archive---------1-----------------------

让你的脚本更有效率和吸引力。

凯利·西克玛在 Unsplash 上的照片

如果你正在或计划从事数据科学领域的工作,Python 可能会是你最好的伙伴。

尽管您将主要使用第三方库,但是全面理解 Python 基础非常重要。此外,这些库也在使用基本 Python 的强大功能。

在这篇文章中,我们将讨论 5 个简单的 Python 技巧,我认为它们将使你的脚本更加高效和吸引人。

招数 1

第一个是关于 f-strings,这是 Python 中最新的字符串插值方法。通过使用 f 字符串,我们可以将变量值放在一个字符串中。

这里有一个简单的例子:

name = "Jane"print(f"Hello {name}!")
Hello Jane!

f 弦是一种非常灵活的方法。假设我们将一个非常大的数字的值放在 f 字符串中。

number = 12000000print(f"The value of the company is ${number}")
The value of the company is $12000000

使用千位分隔符,输出可能更容易阅读。我们可以很容易地在 f 弦上做这样的修改。

print(f"The value of the company is ${number:,d}")
The value of the company is $12,000,000

招数 2

假设你有几个字符串存储在一个列表中。

mylist = ["Data", "Science", "Machine", "Learning"]

您希望将列表中的所有项目组合成一个字符串。解决这项任务有许多选择。例如,您可以在 For 循环中遍历列表,将所有字符串添加到一个字符串中。

myword = ""
for word in mylist:
   myword += word + " "print(myword)
Data Science Machine Learning

当然,这不是最佳解决方案。连接方法要简单得多。

print(" ".join(mylist))
Data Science Machine Learning

您可以使用任何字符来分隔单个字符串。

print("-".join(mylist))
Data-Science-Machine-Learning

招数 3

假设你需要找到一个字符串中最频繁出现的字符。

mystring = "aaaabbbccd"

一种方法是使用 Python 内置集合模块中的计数器对象。

from collections import Countercnt = Counter(mystring)

cnt 对象包含每个字符以及它们在字符串中出现的次数。我们可以使用 most_common 方法得到最频繁的一个。

cnt.most_common(1)
[('a', 4)]

这不是一个非常复杂的方法,但甚至有一个简单的方法。内置的 max 函数能够找到最常用的字符。我们只需要正确使用关键参数。

max(mystring, key=mystring.count)
'a'

默认情况下,max 函数返回最大值。在字母的情况下,它是字母表中的最后一个。

我们可以用同样的方法找到列表中最频繁出现的元素。

mylist = ["foo", "foo", "bar"]max(mylist, key=mylist.count)
'foo'

招数 4

这个是关于随机性的,随机性是数据科学中的一个基本概念。这里我们不会详细讨论随机性。然而,我们将看到一个从列表中选择一个随机项目的快速方法。

Python 内置的 random 模块有几个函数和方法。其中之一是 choice 方法,该方法可用于从可索引(或可下标)集合中选择随机元素。

我们来做一个例子。

import randommylist = ["Ashley", "Jane", "John", "Matt", "Jenny"]random.choice(mylist)
'Matt'

我们还可以在元组上使用 choice 方法。

mytuple = ("a","b","c","d","e")random.choice(mytuple)
'c'

但是,它不能用于不允许索引的集合(即不可订阅的集合),如集合。

myset = {"a","b","c","d","e"}random.choice(myset)
TypeError: 'set' object is not subscriptable

招数 5

字典是 Python 中最常用的数据结构之一。它由键值对组成。字典中的键是唯一的,因此我们可以使用它们轻松地访问值。

例如,字典非常适合存储人们的年龄。姓名将作为键,年龄将作为值存储。

请注意,使用姓名作为字典关键字并不是最好的方法,因为很可能有两个或更多的人同名。为了清楚起见,我们将继续使用名称。然而,在现实生活中,我们可以给每个人分配一个唯一的 id 号,并将这些号码用作字典键。

考虑姓名和年龄存储在不同的列表中。我们可以很容易地将两个列表合并成一个字典,如下所示:

names = ["Jane", "John", "Adam", "Ashley"]ages = [25, 22, 27, 33]mydict = dict(zip(names, ages))mydict
{'Adam': 27, 'Ashley': 33, 'Jane': 25, 'John': 22}

zip 函数创建元组对。

for pair in zip(names, ages):
   print(pair)('Jane', 25) 
('John', 22) 
('Adam', 27) 
('Ashley', 33)

然后,dict 函数将这个元组集合转换成一个字典。

结论

我们介绍的技巧简单而实用。我相信总有一天这些技巧会简化你的代码。

最后但同样重要的是,如果你还不是中级会员并打算成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

你应该在 2021 年开始使用的 5 个 Python 技巧

原文:https://towardsdatascience.com/5-python-tricks-you-should-start-using-in-2021-1084af21c2f2?source=collection_archive---------8-----------------------

Python 在进化。不要被落下!

迈克尔·泽兹奇在 Unsplash 上的照片

S 用最好的新年决心之一开始新的一年:学*更多 Python

您可以从这篇文章开始,在这篇文章中,我介绍了 5 个 Python 技巧,它们将使您的生活变得更加轻松。

你会学到:

  • 如何更清晰地格式化大整数
  • IPython 中有哪些神奇的命令
  • 调试代码的简单方法
  • 使用文件路径的更好方法
  • 字符串格式化的正确方式

这里有几个你可能感兴趣的链接:

- [Complete your Python analyses 10x faster with Mito](https://trymito.io/) [Product]- [Free skill tests for Data Scientists & ML Engineers](https://aigents.co/skills) [Test]- [All New Self-Driving Car Engineer Nanodegree](https://imp.i115008.net/c/2402645/1116216/11298)[Course]

你愿意多看一些这样的文章吗?如果是这样,你可以点击上面的任何链接来支持我。其中一些是附属链接,但你不需要购买任何东西。

1.数字文本中的下划线

在数字文本中使用下划线。图像由 Roman Orac 提供

从 Python 3.6(以及更高版本)开始,您可以使用下划线来使数字更容易阅读。详见 PEP 515

让我们看一个例子:

a = 1000000000
# Is variable a billion or 100 millions?# Let's use underscores to make it easier to read
a = 1_000_000_000# You can group numbers as you like
b = 1_0_9_0

它也适用于十六进制地址和分组位。

# grouping hexadecimal addresses by words
addr = 0xCAFE_F00D# grouping bits into nibbles in a binary literal
flags = 0b_0011_1111_0100_1110

2.IPython 的神奇命令

使用%paste 命令将代码粘贴到 IPython 解释器。照片由 Roman Orac 拍摄

我用 Python 开发的工作流程是有一个终端窗格,左边是 neovim,右边是 IPython 解释器。

这使得测试代码变得更容易,因为我可以从左边复制代码,并将其粘贴到右边的解释器中。

什么是 IPython 解释器?

它就像一个 Python 解释器,但使用了类固醇。

IPython 是多种编程语言中用于交互式计算的命令 shell,最初是为 Python 编程语言开发的,它提供了自省、富媒体、shell 语法、制表符补全和历史记录

从剪贴板粘贴代码到 IPython 解释器的最简单方法是什么?

您知道 IPython 支持魔法命令吗?

其中一个是%paste 命令,它通过格式化从剪贴板粘贴代码。

只需在 IPython 解释器中输入%paste。

3.调试 Python 代码

调试 Python 代码 IPDB。用 carbon.sh 制作的图像。图像由 Roman Orac 提供

PyCharm 编辑器附带了一个用于 Python 代码的内置调试器。但是如果你用的是 Visual Studio 代码,Atom,Sublime 或者 Vim 呢?

您可以使用 pdb 模块:

foo()import pdb; pdb.set_trace() 
# your code will stop here and interpreter will openbar()

Python 3.7(及更高版本)通过内置断点函数调用简化了这一过程:

foo()breakpoint()
# your code will stop here and interpreter will openbar()

详见 PEP 553

4.Pathlib

照片由爱丽丝·多诺万·劳斯Unsplash 上拍摄

使用路径可能很有挑战性,尤其是当您的代码需要在多个操作系统上运行时。

幸运的是,Python 标准库有pathlib

让我们看一个例子:

from pathlib import Pathpath = Path("some_folder")
print(path)
# output: some_folder# We can add more subfolders in a readable way
path = path / "sub_folter" / "sub_sub_folder"
print(path)
# output: some_folder/sub_folter/sub_sub_folder# make path absolute
print(path.resolve())
# output: /Users/r.orac/some_folder/sub_folter/sub_sub_folder

5.简化字符串格式

Python 中的 f 字符串格式。图像由 Roman Orac 提供

我*惯于在 Python 中使用老式的字符串格式:

person = 'Roman'
exercise = 0print("%d-times %s exercised during corona epidemic" % (exercise, person))# output
# 0-times Roman exercised during corona epidemic

直到最*,我才知道 Python 中有更好(更现代)的字符串格式化方式。

在 Python 3.6 中, PEP 498 引入了文字字符串插值,简化了字符串格式。

我们可以将上面的例子改写为:

person = 'roman'
exercise = 0print(f"{exercise}-times {person} exercised during corona epidemic")# output
# 0-times Roman exercised during corona epidemic

以 f 为前缀的字符串称为 fstring。

fstrings 甚至支持数学运算:

print(f"{exercise+1}-times {person} exercised during corona epidemic")# Output
# '1-times roman exercised during corona epidemic'

但是我在电晕流行期间没有锻炼,所以在 fstring 中加上+1 只是一个谎言😂

格式化浮点值怎么样?

f = 0.333333
print(f"this is f={f:.2f} rounded to 2 decimals")# Output
this is f=0.33 rounded to 2 decimals

结论

许多 Python 开发人员不知道这些技巧——您不再是他们中的一员。

在过去的 10 年里,我一直在用 Python 编程,直到最*我才学到这些技巧。通过使用它们,Python 编程变得更加有趣。

在你走之前

Twitter 上关注我,在那里我定期发布关于数据科学和机器学*的消息。

不容错过的 5 个量子机器学*资源

原文:https://towardsdatascience.com/5-quantum-machine-learning-resources-not-to-miss-8aeff7655604?source=collection_archive---------10-----------------------

两个炒作之外的有用的东西

来源:图片来自 Pexels

最*一篇有争议的论文试图从量子场的角度给定义一种新的深度学*形式。事实上,量子位被天真地描述为 0 和 1 之间的状态,神经网络的每个节点同样是 0 和 1 之间的值,这意味着概率或类似的东西。想象重叠是很直观的。这两个话题都被过分夸大了(没有动机?)炒作,虽然都是有用的技术。除了大肆宣传之外,可能还有一些将这两种方法结合起来的机会。

事实上,这个想法并不新鲜,一些作者已经试图重新构建现有的机器学*算法(见下表)。机器学*算法的改进可以通过使用一些量子计算组件来实现,或者量子计算可以通过使用机器学*来降低一些硬件噪声。因此,考虑两种形式的结合是值得的。如果有人想深入研究这种鸡尾酒,我在这里报告 5 个有用的资源。

这些资源是:

  1. 评论或介绍
  2. 多伦多大学彼得·魏特克博士的在线课程
  3. 量子机器学*的相关 Github/Gitlab 知识库
  4. 相关论文列表
  5. 书籍

1.评论或介绍

由于总结已做工作(截至 2017 年)的回顾已经存在,因此建议从那里开始。由雅各布·比亚蒙特彼得·魏特克尼古拉·潘科蒂帕特里克·瑞本斯特内森·维贝塞思·劳埃德撰写的这篇论文,重点关注量子基本线性代数子程序(BLAS)——如傅立叶变换、寻找特征向量和特征值等——它们在机器学*算法中大量使用,突出了使用量子而不是经典硬件的优势。的确,成就主要在计算速度上,虽然关于量子支持向量机和量子核的讨论出现了。有很好的介绍量子退火量子玻尔兹曼机。arXiv 上有一个更新版本(2018 年),尽管你不能期待一个过于全面的总结,因为量子计算领域每周都有一场革命。然而,这两位作者是思考这两个领域结合的先驱之一。因此,尤其值得熟悉机器学*的量子计算初学者阅读。

此外,在如何做之前先想想为什么,来自 Rigetti 的 Max Henderson 在 youtube 上免费提供了一个著名的讲座,内容是“量子计算在机器学*中的新兴角色”。真的很推荐。

如果你想从另一个角度看问题,机器学*可以用来降低量子计算的噪音:

2.彼得·魏特克博士的 MOOC 视频讲座

彼得·魏特克是多伦多大学的助理教授。他于 2019 年 9 月去世,当时他们在特里舒尔山探险时遭遇雪崩。他最出名的是他的书“量子机器学*:量子计算对数据挖掘的意义”(稍后讨论),以及他的视频讲座。事实上,他留下了一门非常好的课程,有 41 堂课(每堂课不到 10 分钟),包括量子高斯过程和哈罗-哈西迪姆-劳埃德(HHL)算法等等。

3.量子机器学*的相关 Github/Gitlab 知识库

关于量子机器学*的知识库已经相当少了。首先给我留下深刻印象的是克里希纳·库马尔·塞卡尔在他的 Gitub 中收集的材料。真的有很多图片,代码(或链接到其他回购)和文件。对于 Github repo 来说,这可能太多了,但是您可能会发现一些有用的东西。

如果你正在寻找量子神经网络,这里有一些脚本可用。这些来自桨量子项目,旨在建立人工智能和量子计算之间的桥梁。

用于在 IBM Quantum Cloud 中实现的 qiskit 中的 HHL 代码和用于在 Rigetti 中实现的 in P yquilGrove 中的代码可以在git lab Bayesian-dl-Quantum上轻松访问。

4.相关文件清单

如果你有机器学*的背景,并且想要一些关于量子计算的混合实现的更新,我推荐来自 arXiv 和其他期刊的以下论文:

如果你来自光谱的另一端,并且想知道如何在机器学*中使用你所有的物理知识

5.书

尽管有很多关于量子计算的优秀书籍,但关于量子机器学*的具体教科书仍然缺乏。

来源:《机器学*与量子物理》封面图片,作者:克里斯托夫·t·舒 tt、斯特凡·奇米拉、欧·阿纳托尔·冯·利林费尔德、亚历山大·特卡琴科、津田浩二、克劳斯-罗伯特·米勒

我唯一有信心推荐的是《机器学*遇上量子物理》,由施普林格编辑,克里斯托夫·t·舒 tt、斯特凡·奇米拉、阿纳托尔·冯·利林费尔德、亚历山大·特卡琴科、津田浩二、克劳斯-罗伯特·米勒担任编辑。这是一个研究论文的集合(因此,不适合初学者),主要集中在利用一些机器学*工具的化学量子模拟上。

来源:量子机器学*:量子计算对数据挖掘的意义封面图片,作者彼得·魏特克

《量子机器学*:量子计算对数据挖掘意味着什么》爱思唯尔主编。这是彼得·魏特克写的一篇文章(我们之前提到过他关于量子机器学*的视频课程)。这是一本向你介绍量子计算和机器学*的书。如果你不知道他们两个,这是一个很好的举动。然而,我通常不鼓励试图完成所有事情的文本(因为显而易见的原因,最终仍然是介绍性的)。的确,量子机器学*上的应用真的很模糊的被提及。考虑到作者是谁,我有点失望,但我猜这是他的意图,如果你在这两个领域都是新手,为什么不呢?

来源: 量子机器学*用 Python 封面图片,作者 Santanu Pattanayak

量子机器学*用 Python 作者 Santanu Pattanayak 编著 Apress。

与其他两个相比,它更*一些,而且肯定是在光谱的实际一边。推荐给想直奔主题的计算机科学家。

如题,它大多专注于编码。它首先介绍量子计算、量子傅立叶变换,最后介绍量子神经网络、量子张量流和 PyTorch。Cirq 和 Qiskit 里有几个伪代码抄本和一些引导脚本如题。你可以偷偷在相关的 Github repo 上看解释过的代码:

https://github.com/Apress/quantum-machine-learning-python

如果你需要关于量子计算的实用文本的概述,请查看

https://medium.com/illumination/5-books-about-quantum-computing-to-start-from-scratch-37d460a5452c

结论

量子计算和机器学*是我们这个时代的热门词汇,部分原因是真实的,部分原因是炒作。将它们结合起来可能会有一些好处,但这些好处只是轻微的增加,这一点还有待证明。另一方面,量子计算仍处于起步阶段,未来将会更加普及。因此,我预计我们将拥有在光学硬件上运行的机器学*算法。量子机器学*不会成为下一场革命,而是一种设计算法的正常方式,因为量子计算将更加普遍。

想连接就连接

@ Dr _ Alex _ 克里米

@阿列克里米博士

亚历山德罗·克里米——YouTube

https://web.facebook.com/dralecrimi

在数据科学面试中你需要问雇主的 5 个问题

原文:https://towardsdatascience.com/5-questions-you-need-to-ask-employers-at-data-science-interviews-a9ea10c45d6?source=collection_archive---------7-----------------------

野外的数据科学和机器学*

如果你没有问雇主这五个问题,你应该问

索菲·戴尔在 Unsplash 上的照片

面谈

在面试中,你总是被告知要“问一些问题”。如果你和我一样,你可能会因为试图给面试官留下深刻印象而问了一些非常愚蠢的问题,我称之为“脑残”。

有一次我忙得不可开交,我问:“我到办公室要花多长时间?”你可以想象我没有得到那份工作。我从面试过的候选人那里听说过同样笨拙的事情。

听着,真的没有愚蠢的问题,但是在这个游戏中,有些问题比其他问题更能帮助你。因此,我敢打赌,这里有五个你没有考虑过要问的问题,但如果你要面试数据科学或机器学*方面的工作,你真的应该问。

机器学*的组织成熟度如何?

这很重要;你想衡量一个组织在机器学*方面的成熟度。这是一个热身问题,你可以在大部分时间里进一步探讨。

成熟的组织可能会开始谈论现有的团队、基础设施和工具、活动项目。如果你在这里得到一个模糊的答案,这可能表明你正在进入一个处于机器学*采用早期阶段的组织。

这可能是你想要的,但你应该明白你在这里得到了什么。

如果你是第一个进来的,你的工作几乎肯定会困难得多,如果你特别缺乏经验,我要在这里提出一个警告。还有一种可能性是,该公司正在招聘分析师,但出于市场需要,称他们为“数据科学家”。在这种情况下,你可以问这个后续问题,以获得更多的清晰。

你目前在生产中有任何机器学*模型吗?

这里的“是”表示公司已经成熟。让他们向你介绍他们已经建立了什么。

你目前有什么机器学*的基础设施和工具?

你会想知道你将和什么一起工作。当你大声说出来时,这似乎是显而易见的,但我采访过的大多数人都没有想到要问。想象一下,你和我一起面试一份数据科学的工作。如果我告诉你,我们主要使用 Office 2010 Excel 电子表格,并且没有改变这一点的意愿,你会高兴吗?我猜你不会,所以不要等到你被雇用后才发现。

如果你没有合适的工具,你就不可能成为一名出色的机器学*工程师或数据科学家。我们中的许多人选择这条职业道路是为了产生影响,如果没有合适的工具和基础设施,你将受到限制,并可能遭受挫折。

比 Python 想得更大。

在这里,您应该寻找的是 Hadoop 或 Spark 等本地产品,一些适合计算能力的硬件,甚至是运行中的云平台。

AWS、Azure、GCP 没那么重要,任何云平台都让机器学*变得更加可行。

你需要一个舒适的地方来建造原型,所以实验室环境是必要的。这可能是基于云的,如 Data Bricks、Amazon Sagemaker 或 Dataiku、SAS 或 Data Robot 等公司的内部解决方案。

如果没有合适的工具,你应该弄清楚公司是否有计划让这些工具到位,以及谁负责管理整个事情。如果他们说是你,那就要更多的钱。

有哪些团队(或人员)支持机器学*?

机器学*是一项团队运动,一家成熟的公司明白这一点。我希望会有一些关键人物支持你,包括:数据工程师、云平台技术人员、业务分析师、其他数据科学家,在某些情况下甚至是 scrum 大师或项目经理。

如果答案是,“你是第一个被雇佣的”,准备好开始谈论领导力和角色拓展,你可能需要在某个时候请求雇佣其他人。

在大多数组织中,作为一名单枪匹马的数据科学家,你不可能取得很大成就,也不太可能掌握成为 ML 的 Kanye West 所需的所有技能。

董事会或管理层是否有 ML 战略?

如果没有高层的支持,你会发现一旦加入就很难获得任何信任。

ML 必须是“in-thing ”,这通常是自上而下驱动的。

对你来说,最糟糕的结果是被一个数据科学职位录用,而这个职位在整个组织中没有对它的支持。在这种情况下,你最终可能会被视为一个有很多不切实际想法的“急躁的书呆子”。

如果你幸运的话,你的一些利益相关者可能会给你一些问题陈述,你可以根据这些陈述做出一些原型。但即便如此,你也很难说服公司投资扩大规模。最糟糕的情况是,你不得不提交 MI 和 BAU 报告,这并不总是坏事,但可能不是你想成为数据科学家的原因。

不要因为一家公司在招聘数据科学家,就认为这家公司在文化上已经为你做好了准备。

如果你想靠自己改变公司文化(用埃隆·马斯克式的数学和逻辑),你不会…你就是不会。这种情况的例外是结构非常扁平的小公司或初创企业。

我已经在这里写了更多的细节…

我可以获得哪些资助?

如果你想有所作为,就要花钱。这是值得注意的一件关键事情,让机器学*大规模工作是昂贵的,你需要资金来实现它。我发现,拥有创新预算的组织是最好的。机器学*是高度实验性的,创新预算表明愿意测试、学*和接受失败(在某种程度上)。

如果面试官在这里不能给你一个明确的答案,这可能是这个组织不成熟的迹象。他们可能还没搞清楚它到底有多贵。在这里要小心,他们可能会期望你施展魔法,并且会对你的无能感到失望,即使是因为缺乏资金。

一个真正的数据科学家在创造奇迹

⭐️Woops:我差点忘了,这里有一些额外的问题要问。最后是一个必须要问的问题!

1.前六个月对我的期望是什么?

2.有没有一个从构思到生产的框架?—这是机器学*特有的。

3.我将向谁汇报?—只问这一点是否没有明确说明。

4.我可以雇人吗?

⭐️:我的数据来自哪里?

不访问数据,你无法进行任何机器学*。不要想当然地认为你可以获得所有你需要的数据。如果数据管道和基础设施已经到位,那就太好了。如果期望您必须构建这些,那么您最好具备数据工程技能。

数据工程是一门高深的技能,所以不要天真地认为你可以独自完成这项工作。

你真的应该考虑一下,为了你自己的理智,你是否想为一家几乎没有数据访问权的公司工作……但如果你选择了黑暗之路,要知道你将面临什么。

我希望这能帮助你踏上梦想职业的征程。如果你从中得到什么,要明白问一些体贴的问题会让你看起来和听起来都知道自己在说什么。

⭐️ 我喜欢通过分享我在野外的数据科学经验来帮助人们。如果你还不是会员,可以考虑订阅 Medium,从我这里获得更多有用的内容。

https://johnadeojo.medium.com/membership

掌握 R 编程应该学*的 5 R 对象

原文:https://towardsdatascience.com/5-r-objects-you-should-learn-to-master-r-programming-685341ce6661?source=collection_archive---------26-----------------------

这些对象是每个 R 程序员工具箱中不可或缺的一部分——在本文中,我们将浏览它们并了解它们的属性。

照片由@ lmfeliciano@ Unsplash.com 拍摄

T2 是一种令人敬畏的语言。作为最受欢迎的编程语言之一,这种语言是初学者进入数据科学世界的良好开端。它的可访问性和简单的设置使它成为想开始学*如何编码的人的最佳语言之一,特别是在数据分析和科学领域。

开始时,大多数人会立即进入学*数据框架,因为这是整个数据管道中常用的对象。但是,事实是 R 包含的远不止这些。它包含其他对象,这些对象有自己的一套特性,这些特性对于让您的 R 脚本大放异彩非常重要。学*这些对象和它们的特性应该会给你极好的工具,使你的 R 脚本灵活而高效。

在这个过程中,您将学*如何调试那些奇怪的 R 错误,这些错误可能在您操作返回这些对象之一的某些 R 基函数时发生。

让我们认识他们!

r 向量

如果你以前已经和 R 一起工作过,你可能已经预料到了,对吗?😃

最简单的 R 对象是向量。这种一维单一类型的对象是编程语言中许多其他对象的基础。但是不要被它的简单性所迷惑,这是一个超级强大的对象,能够在您的脚本上执行许多任务。从向数据框提供数据到帮助索引,这个对象应该很容易学*和应用。

创建向量有多种方法,但最著名的是使用命令 c() 或命令:,,例如:

# Vector with elements 1,2,3,4
c(1, 2, 3, 4)# Vector with 10 elements, from 1 to 10
1:10

它们有几个区别于其他 R 对象的属性:

  • 它们只支持 1 种类型的元素。如果你的向量中有一个字符,如“A ”,所有其他元素将被转换为字符类型。
  • 它们是一维的,例如,这意味着它们不能将数据表示为表格。

在哪里可以学到更多关于向量的知识?使用以下资源:

数组

向量最大的缺点之一是它是一维的。当然,当你想做一些涉及多个维度的数学计算时,这是一个很大的痛苦——这在数学/统计或机器学*中很常见。幸运的是,我们有阵列!

数组是能够扩展到多维的单一类型对象。好消息是数组可以扩展到理论上无限多的维度,所以你不再局限于一个维度。

此外,当您使用数组时,您会开始理解如何在 R 中操作多维度并尝试多个索引,这对于在数据分析和争论中占据主导地位是极其重要的。您处理超过 2 维的数据的可能性很小(如果您是某种类型的机器学*工程师和/或有任何必须处理张量的用例,您可能只会处理这种类型的数据),但是,学*如何处理非 2D 的其他对象肯定不会有什么坏处。阵列的特征:

  • 它们是多维的;
  • 他们当时只能处理一种类型的元素;

你可以用 R 中的 array() 函数创建一个数组:

# Creating an array with 10 elements, with 2 rows, 5 columns and 2 different tables (3 Dimensions)array(
 1:10,
 dim = c(2,5,2)
)

在哪里可以学到更多关于 R 数组的知识?查看这些资源:

矩阵

矩阵是数组的特例,只有二维和自己的构造函数。好的一面是,在你学*了 R 中的数组之后,你就可以操作矩阵了!

矩阵与数据框非常相似,因为它们有行和列,唯一的缺点是它们只能处理单一类型的数据(就像数组和向量一样)。它们的特征类似于数组(关于数据类型)和数据帧(关于维数):

  • 它们只有两个维度;
  • 他们当时只能处理一种类型的元素;

您可以使用数组来访问方法,但是矩阵有一个更漂亮的构造函数:

# Creating a matrix with two rows and 5 columnsmatrix(
 data = 1:10,
 nrow = 2,
 ncol = 5
)

了解矩阵的一些资源:

列表

在前面的对象中,您可能已经注意到了一些东西—它们都不能处理多种类型的数据(例如,混合字符和数值)。

如果 R 只启用单一类型元素,那么在我们通常有多种类型的数据科学中执行一些常见操作将会非常麻烦——想想您过去分析过的大多数数据帧,因为它们通常混合了多种数据类型。

幸运的是,我们有两个主要的 R 对象,非常适合处理多类型元素。第一个是列表——它们是一个非常灵活的对象,使我们不仅可以存储多种类型,还可以在其中存储其他 R 对象。

例如,在一个列表中,我们可以存储一个字符串,一个数字和一个数组!这非常有趣,因为现在我们有了一个对象,它是终极的灵活性工具,使我们能够在其中存储多维对象。

要创建一个列表,可以使用 list() 命令:

# Creating an example list with a character, a number and an array
example_list <- list(
 my_char = ‘a’,
 my_number = 1,
 my_array = array(1:4, dim=c(2,2))
)

了解列表的一些资源:

数据帧

现在,最著名的 R 对象之一,数据框!

数据框是数据分析的圣杯,在大量的数据科学项目中都有使用。在 R 中,它们非常灵活(最酷的是,它们实际上是一个列表!)并显示类似于其他二维对象的数据。

使用数据框,您可以像处理 SQL 中的数据表或 Excel 文件中的简单表一样处理数据。它们面向行和列,也可以有索引名。

大多数 R 教程都包含数据框示例。在编程语言中进行数据分析时,它们是最灵活、最方便的对象。哦,如果你学会了它们,当你开始用 Python 使用 Pandas 库——最著名的用另一种语言操作数据帧的库之一——编码时,你会有一个良好的开端!

您可以使用 data.frame() 命令创建一个:

# Creating a data frame with two columns and two rowsexample_df <- data.frame(
 name = c(‘John’,’Mary’),
 age = c(19,20)
)

您可以在以下资源中了解有关数据框的详细信息:

就是这样!当你想掌握 r 时,这 5 个对象是非常重要的。在了解这些之后,你应该能够理解更高级的数据结构,甚至是那些在外部库中创建的,比如tible

你认为还有另一个对象应该包括在这个列表中吗?写在下面的评论里吧!

我在Udemy上开设了一门关于从零开始学* R 的课程——这门课程是为初学者设计的,包含 100 多个练*,我希望你能在身边!

5 个真实世界数据集,用于磨练您的探索性数据分析技能

原文:https://towardsdatascience.com/5-real-world-datasets-for-exploratory-data-analysis-21b7cc5afe7e?source=collection_archive---------7-----------------------

学*数据科学的最佳方式是实践

https://www.freepik.com/vectors/data

如果您刚刚开始学*数据科学,并且正在寻找一些很酷的数据集,那么这篇文章可能适合您。许多课程和书籍从未真正超越经典的泰坦尼克号和虹膜数据集。这并没有什么坏处,但是已经有过对这些数据集非常熟悉的例子,以至于人们也知道其中缺失值的数量或字符串列的数量。因此,这篇文章可能会成为一个新的机会,让我们了解一些需要改进的伟大数据集。

T 他的文章是寻找好数据集的完整系列的一部分。以下是该系列中包含的所有文章:

第一部分 : 为数据分析任务获取数据集——高级谷歌搜索

第 2 部分 : 为数据分析任务寻找数据集的有用站点

第三部分 : 为深度学*项目创建定制图像数据集

第 4 部分 : 毫不费力地将 HTML 表格导入 Google Sheets

第 5 部分 : 用 Camelot 从 pdf 中提取表格数据变得很容易。

第六部分 : 从 XML 文件中提取信息到熊猫数据框架中

第 7 部分 : 5 个真实世界数据集,用于磨练您的探索性数据分析技能

帕尔默群岛企鹅数据

虹膜数据集的替代物

https://www . ka ggle . com/parulpandey/palm er-群岛-南极洲-企鹅-数据

被过度使用的 Iris flower 数据集或 Fisher 的 Iris 数据集是由英国统计学家和生物学家罗纳德·费雪引入的多元数据集。帕尔默企鹅数据集是经典的 T2 虹膜数据的替代物。。该数据集包含三种企鹅的属性——阿德利企鹅、巴布亚企鹅和下颚带企鹅。对于数据探索&可视化来说,这是一个很好的介绍数据集。

数据文件夹包含两个 CSV 文件:

  • penguins_size.csv,其中包括物种、体质量、性别、岛屿等变量。
  • penguins_lter.csv :三种企鹅物种的原始组合数据。

链接到数据集:https://www . ka ggle . com/parulpandey/palm er-群岛-南极洲-企鹅-数据

入门笔记本:https://www . ka ggle . com/parulpandey/penguin-dataset-the-new-iris

新冠肺炎临床试验数据集

全球正在进行的新冠肺炎相关临床研究数据库

https://www . ka ggle . com/parulpandey/covid 19-临床试验-数据集

ClinicalTrials.gov 是一个在世界各地进行的私人和公共资助的临床研究的数据库。它由国家健康研究所维护。新冠肺炎临床试验数据集由网站上展示的与 COVID 19 研究相关的临床试验组成。

数据集由 XML 文件组成,每个 XML 文件对应一项研究。文件名是 NCT 号,它是临床试验存储库中某项研究的唯一标识符。此外,还提供了一个 CSV 文件,它可能没有 XML 文件中包含的那么多信息,但确实提供了足够的信息。初学者笔记本解释了如何将 XML 文件转换成熊猫数据帧

链接到数据集:https://www . ka ggle . com/parulpandey/covid 19-clinical-trials-Dataset

入门笔记本 : EDA 在新冠肺炎进行临床试验

文章 : 从 XML 文件中提取信息到熊猫数据框架

1990-2020 年福布斯收入最高的运动员

体育界谁赚的最多?

https://www . ka ggle . com/parulpandey/covid 19-临床试验-数据集

这个数据集包括自 1990 年福布斯第一份榜单以来全球收入最高的运动员的完整名单。2002 年,他们将报告期从整个日历年改为 6 月至 6 月,因此没有 2001 年的记录。该数据集由截至 2020 年的记录组成。

链接到数据集:https://www . ka ggle . com/parulpandey/covid 19-clinical-trials-Dataset

入门笔记本 : 💰2020 年谁在体育界赚得最多🏆?

欧盟地区 IT 薪资调查(2018–2020 年)

欧洲地区年度匿名 IT 薪资调查

https://www . ka ggle . com/parulpandey/2020-it-salary-survey-for-eu-region

自 2015 年以来,欧洲 IT 专家每年都会进行一次匿名薪酬调查,重点是德国。今年有 1238 名受访者自愿参加了调查。作者将这些数据公之于众,并在 Kaggle 上分享给更广泛的受众。该数据集包含有关欧盟地区 IT 专业人员薪酬模式的丰富信息,并提供了一些很好的见解。

链接到数据集:https://www . ka ggle . com/parulpandey/2020-it-salary-survey-for-eu-region

article—2020 年 12 月 IT 薪资调查

美国国际空中交通数据(1990-2020)

美国和国际航空公司的机场和航空运输量

https://www . ka ggle . com/parulpandey/us-international-air-traffic-data

这个数据集来自美国国际航空客运和货运统计报告。作为 T-100 计划的一部分,USDOT 接收往返于美国机场的美国和国际航空公司的交通报告。有两个数据集可用:

  • 出发:美国关口和非美国关口之间所有航班的数据,无论始发地和目的地。
  • 乘客:由特定航空公司提供服务的两个机场之间每月和每年乘客总数的数据。

链接到数据集:https://www . ka ggle . com/parulpandey/us-international-air-traffic-data

结论

没有比实践更好的学*方法了,数据科学领域也是如此。所有这些数据集都可以在 kaggle 上获得,并且可以在它们的 dockerized 环境中进行分析。这意味着您分析所需的大多数库已经安装。启动笔记本可以帮助您快速启动。您可以从探索其中一个数据集开始,然后将其转换为博客帖子,与社区共享您的结果。

数据科学家应该具备工程技能的 5 个理由

原文:https://towardsdatascience.com/5-reasons-data-scientists-must-be-data-engineers-in-2021-and-beyond-805c6d1a1e03?source=collection_archive---------28-----------------------

意见

为什么数据工程是 2021 年数据科学家的必备技能

照片由 Unsplash 上拍摄

语境

我们的行业发展迅速,因此市场对我们的要求也越来越高。你可以坐在象牙塔里建造几乎没有实用价值的花哨模型的日子已经一去不复返了。简而言之,事情应该是可行的——而且是大规模的。

我根据自己在三大银行从事高级分析的经验以及我在大学的硕士课程撰写了这篇文章。我希望能让读者了解数据科学的现状。

大约十年前,我开始攻读运筹学、应用统计学和风险的硕士学位。像许多硕士课程一样,它是高度理论化的。

我仍然记得我的教授详细介绍了结合使用 excel 电子表格、SAS 和逻辑回归创建消费者信用记分卡的艰难过程。一个最后一年的项目让我们从基本原理建立一个算法,用 VBA 优化旅行推销员问题(呸!).成功更多的是基于理论上的理解,而不是实际应用。

几年后,我在英国一家大银行的第一份分析工作开始了。SAS 是用于分析的主要软件,所有的数据都是关系型的,并被储存起来。数据科学主要采用复杂 SQL 查询的形式,包括多个连接,然后是一些模型构建。

SAS 脚本通常长达数万行来完成非常简单的事情,excel 电子表格是阐明模型的标准。建模是一个漫长而反复的过程,需要广泛的 SAS 知识,但它很少超出自己的笔记本电脑。

这些经历你听起来熟悉吗?我大胆猜测,具有讽刺意味的是,许多数据专业人员都经历过这种“经验管道”,但从未建立过数据管道(或知道什么是数据管道)。

也许你在统计学、数学方面有坚实的理论基础,甚至可以编写一个像样的 ML 模型,但你不知道如何超越你自己的笔记本电脑。或者你对进入这个领域感兴趣,需要指导你的学*。不管怎样,这篇文章适合你。

我希望到最后你会对数据科学的前景有一个总体的了解,这样你就可以充分地指导你的学*和/或职业抱负。

对我来说,这是一个令人谦卑的认识,要成为一名有用的数据科学家,你可能还需要成为一名数据工程师。以下是五个原因:

1)实践中的许多数据科学都是大规模决策

实用数据科学是关于大规模提供数据驱动的决策,并作为服务提供给顾客或客户。欺诈检测系统、推荐引擎(想想 Instagram,网飞)和信用评分都是这方面的例子。如果你环顾四周,你会发现这些系统无处不在。

可审核性、治理、决策准确性、服务质量只是数据系统中存在的一些挑战。面对所有这些挑战,公司如何始终如一地为我们提供高质量的服务?他们雇佣能够系统化数据解决方案的人。

为了满足市场对可扩展的、数据驱动的决策的需求,我们需要从系统的角度来考虑。数据工程原理给了我们思考系统的框架,并超越建模来构建端到端的数据解决方案。

2)机器学*变得更加容易

任何熟悉 SciKit Learn 的人都会告诉你,只需几行代码就可以构建机器学*模型。此外,AutoML 工具已经成为构建 ML 模型的一种流行方式,其速度和效率令许多纯粹主义者沮丧。简而言之,外行人越来越容易理解机器学*。

我并不是说人们不必理解他们正在使用的模型,我只是指出这些模型变得更容易实现。这些工具的易用性对于数据角色的未来意义重大。例如,软件工程师有可能比以往任何时候都更快地获得数据科学工具并实现实用的端到端解决方案。

综上所述,我认为数据科学家和分析师需要工程技能来与软件工程师竞争工作。

3)一切都被记录下来,你需要知道如何利用这个

我们现在做的大部分事情都被跟踪了。我的 Fitbit 记录了我锻炼时的生物数据,我的智能电表记录了我的能源使用情况,我的预算应用程序记录了我的支出。无论是非结构化还是结构化的数据都在不断被捕获,随着物联网扩展到包括汽车等设备,大数据必然会变得更大。

成功实施数据科学解决方案取决于对大数据的利用。以前,这需要深厚的软件或数据工程技能,但技术已经改变了局面;这很方便地引出了下一点…

4)云计算平台使数据工程民主化

本质上,云计算平台使得构建端到端的数据解决方案变得更加容易。首先,他们已经使计算资源和存储大众化。一些云计算平台拥有自动扩展计算资源和存储需求的能力。在此之前,存储和计算资源将在现场服务器或私有云上进行手动管理。像这样的资源管理是复杂的,需要专业的工程师,并且通常需要高额的资本投资。

其次,数据处理变得更加容易,使得构建端到端解决方案和利用大数据变得更加容易。云平台已经定制了用于构建数据管道的工具,以处理包括流和批处理在内的大量用例。

对大多数云计算平台的访问可以以相对低廉的价格获得,这使得从自己的笔记本电脑上构建机器学*系统成为可能。对于数据科学家来说,设计端到端数据解决方案比以往任何时候都更容易。

5)公司要求数据工程技能

许多企业已经接受了数据科学的前景。任何最*申请数据科学职位的人可能已经注意到,构建和部署可扩展的机器学*模型现在是普遍预期的。

硅谷的科技公司在这方面走在了前面。2016 年,硅谷工作论坛上发布的数据工程师职位比数据科学和数据分析师职位加起来还多 1。在谷歌,所有技术人员都被称为工程师,这进一步凸显了这个职位的重要性。我看到这种趋势正在硅谷之外扩展,全球各地都出现了科技中心。

企业正在认识到在云平台上托管数据服务的优势。对理论的理解和端到端实施解决方案的能力将使你成为一笔财富。

我的一个朋友为他的科技初创公司招聘分析师,他说…

“他一直在寻找分析师,但他真正需要的是分析师工程师”。

最终想法

可以肯定地说,数据科学家的角色正在演变,我们应该适应变化,否则就会被变革之风抛在后面。对于那些愿意学*并真的想有所作为的人来说,这是一个令人兴奋的机会,无论是在创业公司还是在现有的企业中。随着新技术在我们的指尖,重点将不再是模型的理论基础,而是解决新的业务问题。

参考文献

1 Valliappa Lakshmanan(2019),谷歌云平台上的数据科学,第 5-6 页

https://www.linkedin.com/in/john-adeojo/

Golang 成为优秀的初始/启动语言的 5 个原因

原文:https://towardsdatascience.com/5-reasons-that-makes-golang-a-good-first-startup-language-28f27356c48a?source=collection_archive---------23-----------------------

我希望在我刚开始学*编程的时候就有 Go

迈克尔·克里斯滕森在 Unsplash 上的照片

最*我一直看到同样的问题在 Gosubreddit 中反复出现。

Golang 是学*的好的第一语言吗?—有抱负的新开发人员

我们经常看到这样的帖子,以及 Go 是否适合某一类项目的问题

我决定提出我对这件事的观点,所以我收集了我认为是学*和使用围棋的最重要原因的 5 件事。

1.友好且快速发展的社区

正如 Go 开发者调查 2020 结果所示,Go 是一种在广泛领域快速发展的语言。Jetbrains 最*也发布了 Go 的状态,这也带来了一些关于使用的有趣数字。

110 万职业围棋开发者将围棋作为主要语言— 叶卡捷琳娜·扎罗娃

这个数量不是个人使用,而是公司在工作中使用 Go。如果你已经在 Go 社区呆了一段时间,你可以很容易地从搜索 Go 开发人员的职位发布数量中看到这一点。

看看 Reddit 社区,随着新开发人员的加入,它一直在蓬勃发展。自 2020 年以来,新增用户* 6 万。

/r/golang 的统计—来自 subredditstats.com的统计

不仅是社区爆炸,我还遇到了超级友好的氛围。人们乐于助人,有新想法的初级开发人员不会遇到干草叉和火把。

我可以有把握地说,这不是我在 Java 世界的经历。我记得有些想法被嘲笑,因为那根本不是你做事的方式。我还没有在 Go 社区中看到这种情况,但这可能与我的下一个观点有关

2.围棋是一门容易学*的小语种,因此很容易

当我找到第一份程序员的工作时,我不得不学* Java。Java 是一种已经存在很长时间的庞大语言,有 Maven 和 Spring 这样的巨型框架。

我从来没有对 Java 感到舒服过,当然我学*了面向对象的编程概念。但是我建造的每样东西都感觉像是在建造一块巨石,不管这个项目有多小。出现这种情况的主要原因可能是由于存在大量的库,以及处理相同问题的不同方法。

所有这些听起来都是好事,有可能以不同的方式处理问题。但对我来说,这更像是一个阻碍,作为一个缺乏安全感的初级开发人员,我害怕做出错误的决定,每个人都指向不同的方向。

然而 Go 非常小,你可以在一个小时内阅读完整的语言规范。尽管如此,如果你不熟悉这门语言,我怀疑它会是一本好书。

Go 高效、可扩展、高效— Rob Pike

你会问,这与 Java 相比如何?嗯你告诉我,这里是 java 规范一个 844 页的小 PDF。这只是语言,还有 JVM 规范。

Go 提供了简单的语法,很容易阅读和理解代码。Go 还有一个非常严格的编译器可以帮助你。我知道它不像 Rust 编译器,但它非常严格。Go 还涵盖了许多已知的编程概念,只是做起来更容易。

我在围棋方面的经验是很难出错,你有类型安全、编译器检查、静态类型。有这么多的安全措施,对新开发人员甚至老年人来说都很好。是的,学长也搞砸了。

事实上,如果我们关注 Reddit 上的讨论,你会看到评论说 Go 太容易了,开发者会失去或错过重要的知识。在我看来,这很有趣,就像告诉一个想学开车的人,他们应该在高速公路上开始学*,因为那是最难的部分。首先,我相信 Go 是一种可靠的语言,并且要坚持下去,但是我不认为从 Go 转向其他语言会有任何问题。

3.标准库真的很强大

我喜欢上的一件事是 Go 中的标准库。我知道以前有很多人称赞过标准库,但是我不认为我们能得到足够的称赞。这个stdlib通常足以完成我的大部分任务。

在我全职开发 Go 的 6 年中,我很少使用框架。当然,你不应该重新发明轮子,重建一切。你应该使用所有优秀的开源库。但是我要说的是,只使用标准库而不依赖于大型框架,大多数任务通常可以非常快速地管理。

最好的例子就是[net/](https://pkg.go.dev/net/http) http 库。我知道很多人在 Go 中使用著名的 web 框架来开发后端 web 服务,但是我很少需要这样做。我认为标准库为设置 HTTP 服务器提供了足够多且易于使用的方法。

Go 中的最小 HTTP 服务器。

我曾经放弃net/http库的唯一原因是在一个高性能项目中,我需要一个优化的 HTTP 路由器。

4.Go 在这里停留

当我决定开始学*围棋的时候,它还是非常新的,没有多少公司在生产中使用它。新事物总是让人害怕,我还不知道这种语言是否能接受它。我交谈过的许多人声称,这只是另一种被炒作的语言,很快就会被抛弃。

我记得我当时想,如果它得到了谷歌的支持,它一定会有所作为。

你猜怎么着,炒作列车咀嚼并抓住了许多跳上车的开发人员的心。随着越来越多的公司公开采用 Go 并使用它开发软件,Id 认为可以肯定地说 Go 将会继续存在。

现在一些重要的大人物正在使用围棋。你可以在这里找到完整的名单

这是一份列出的大公司名单

  • 谷歌
  • 砖坯黏土
  • 自动警报系统
  • 美国电话电报公司(American Telephone and Telegraph Company)
  • 开源代码库
  • 加拿大白鲑
  • 脸谱网
  • 浏览器名
  • 网飞

有更多的大公司在使用 Go,但我认为你明白了这一点。

5.根据 Stackoverflow 排名的十大支付语言

Stackoverflow 进行了一项年度调查,向开发人员提出了一系列问题。其中一个话题是什么语言最受欢迎,根据 2021 年调查,围棋在世界上排名 #9 。该调查基于 5 月份 80,000 名开发者的回复。

截图自栈溢出调查 2021。

围棋开发人员的年平均工资为 75,669 美元。

现在我不是说钱应该让你决定使用哪种语言,但我相信这是公司愿意付钱给 Go 开发者的一个标志。

结论

我很高兴看到 Go 在软件领域的进步。

希望我能设法说服至少一个人加入到这个旅程中来。

你对要走的学*道路有什么看法?

你是地鼠福音传道者吗?

请随意联系,无论是在 Medium 上的评论中还是在 Twitter 上。

如果你有兴趣了解更多关于围棋的知识,请务必访问令人惊叹的在线巡回赛。我也写了很多关于围棋的东西,一定要跟着看。

https://itnext.io/interfaces-in-go-5c6e38b81b41 [## Go 界面

让我们剖析接口,成为交易高手](https://itnext.io/interfaces-in-go-5c6e38b81b41) https://percybolmer.medium.com/membership

公司现在需要发展和优先考虑其人工智能商业战略的 5 个理由!

原文:https://towardsdatascience.com/5-reasons-to-prioritize-your-ai-business-strategy-ff41d0ee2a33?source=collection_archive---------23-----------------------

JESHOOTS.COMUnsplash 上拍照

公司需要一个与商业目标和模式相一致的有效人工智能战略,才能在数字时代蓬勃发展。

2018 年,麻省理工学院斯隆管理评论的一项研究显示,58%的公司认为人工智能将在 2023 年前大幅改变他们的商业模式。2019 年,福布斯的一篇文章表明,73%的美国顶级高管的目标是大幅增加技术投资。

现在,公司比以往任何时候都更加认识到人工智能对他们的业务增长至关重要。

尽管这种意识似乎一直在增强,但我仍然观察到许多公司在使用人工智能方面还没有超越实验阶段。

当我与许多公司的人交谈时,许多人都会想到人工智能,他们经常会看到一些壮观的景象,几乎是科幻小说中的投影。如果不是为了创造类似智能机器人的东西,那就好像兴趣减退,失去了意义。

这种浪漫化的概念排除了使用不那么宏伟但能为公司和客户提供价值的东西的可能性。在市场上技术成熟的这一时刻,最重要也是最直接的价值来自于它分析数据的能力,让内部团队和部门以及直接为客户做出更容易的决策。

人工智能目前的技术水平是我们所说的“狭义人工智能”,这意味着人工智能在实践中并不智能。这意味着一个算法能做好一件事。

将多种算法与 RPA 等其他技术相结合(RPA 不是 A.I!)能产生积极的结果。因此,等待“智能”人工智能是浪费时间,而疫情已经表明,时间是我们所没有的!

一切都与时间有关…

如今,更准确地捕捉客户的品味、需求和需要,以提供越来越个性化的产品,对于保持企业竞争力至关重要。

消费者没有耐心,没有时间浪费。一个想买你的产品的人没有欲望去搜索几十页与她的品味无关的产品报价。

她更喜欢进入一个电子商务网站或应用程序,为她提供一个页面,上面有一些根据她的口味量身定制的选项。

这种情况下的差异在于过滤器的质量及其揭示模式和预测欲望的能力。这就是人工智能利用数据洞察的能力发挥作用的地方。

谈人工智能应用于商业。

多年来,人工智能的定义发生了巨大的变化。然而,它仍然可以被描述为通过使计算机系统能够像人类一样“学*”、“推理”、“解释”和做出决定来模拟人类推理能力的尝试。

长期以来,人工智能被认为局限于能够解决问题或执行特定任务的系统,例如与人类下棋。

但是技术进步塑造了进化,今天人工智能解决方案是数据驱动方法的一部分,这是一种基于收集、处理、分析和解释数据的文化。

这些努力优化了流程,提高了竞争力,并为企业和行业带来了更好的结果。

今天,人工智能代表了一种将数据转化为更好的体验、客户关系和更好的业务底线的工具。

然而,许多公司仍然难以将人工智能视为一种有价值的工具,一种创造影响而不是影响本身的促进者。

这就是为什么重要的是要记住在组织中实施人工智能需要的不仅仅是雇佣数据科学家;它需要战略、组织、传道和所有职能层面的教育

是时候逆转游戏了。

我们生活在一个类似于互联网早期的技术时代,当互联网首次出现时,它引发了人们的迷恋——甚至一些世界末日般的预测和恐惧。今天,我们都可以看到互联网是我们日常生活中如此自然的一部分,以至于我们只有在它消失的时候才会注意到它的存在。我以我的职业生涯打赌,同样的事情很快也会发生在人工智能身上。

但要想从这种颠覆中获益,企业必须停止关注技术本身,而是将它视为向客户提供价值的放大器,这是企业战略的核心。

今天在团队、部门和公司中关于人工智能的许多讨论仍然以这个问题开始,“我们有什么数据,我们需要什么技术来处理它?” 请不要再这样了!

是时候扭转局面,看看顾客的需求是什么了。您的客户在问哪些问题,如果这些问题得到回答,将会为他们和企业带来价值?当你有了这种清晰,你应该寻找正确的数据和相关的人工智能应用。

这种方法可以极大地影响你的人工智能之旅是否会取得成功。

假设你的团队面临着提高销售额的挑战。如果你的客户的关键问题是基于他们生活中的具体事件购买你的产品的最佳时间,那么仅使用人工智能和公司内部数据不足以提供正确的答案。例如,有了内部数据,你就可以推荐购买特定产品的最佳日期(而你的客户可能不感兴趣)。

有必要寻求关于其具体事件的外部数据。添加关于你的产品和客户偏好的内部信息将为人工智能工具提供弹药,以发挥其全部潜力,并为你的客户提供真正的价值。

当然,数据稀缺是不争的事实。并非所有公司都有基础设施和资金来训练数量和数据质量合适的复杂算法。因此,从较小的、不太雄心勃勃的项目开始最有意义。

在这些情况下,强大但更简单的模型,如线性回归、支持向量机、K-最*邻和朴素贝叶斯,可以用更少量的数据来训练。

一些技术,如合成数据生成、联合学*和自我监督学*非常有用。

为应用于商业的人工智能提供新的愿景。

我们需要一个新的愿景,重新定义团队和公司如何走出技术的实验阶段,并在实践中使用它来为客户产生决定性的影响,并设定他们的业务路线。

疫情加速了已经在进行的事情。实际上,它把未来五年可能发生的事情带到了今天。

疫情没有创造新技术,但是数字加速确实创造了一种行为变化。我可以说,Covid 19 紧急事件在几个月内就预测到了许多年。反而让未来来得突然。

在这种背景下,人工智能应运而生。我们已经见证了许多研发的快速发展,但不幸的是,我们仍然见证了人工智能在企业中的缓慢采用和扩散。

许多公司仍然只在信息技术实验室的实验中使用人工智能,开发短期概念证明(POC)和原型。

对于这些公司中的许多人来说,最重要的人工智能应用仍然是聊天机器人,主要专注于自动化呼叫中心和服务台。

当然,这些应用中有许多正在产生积极的结果。

我必须承认,随着疫情引起的需求的显著增加,聊天机器人已经成功地帮助公司更快地获得投资回报。

然而,如今企业中使用的大多数聊天机器人的自动回复水平低得令人尴尬。它们会将任何比典型问答更复杂的交互重定向给人类员工,这在许多情况下会导致聊天机器人无法正确理解请求。

一切都好,但我们可以从人工智能那里得到更多。

我们需要更深入。

我坚信,只有当人工智能出现在首席执行官、首席信息官、首席债务官和董事会的议事日程上时,它才会真正在公司起飞。

人工智能必须离开 it 和创新团队和实验室,成为高管议程上的一个重要话题。但是我们也需要考虑到,当人工智能离开实验室投入生产时,技术基础设施和性能问题是不可忽视的。人工智能需要投资。

这也意味着人工智能治理必须是

计划在全公司范围内推广人工智能时进行辩论。

由于特定的文化和运营特征,每个组织都必须定义其集中、分散或联合模型。

没有对所有公司都一视同仁的蛋糕食谱。随着越来越多的人获得使用人工智能的经验,每个公司都会开发自己的模型并不断调整。

当然,如果能从我们都生活在这个疫情时代的这个极具挑战性的时刻中获得一些积极的东西,那就是它引起的数字加速也开始帮助打破对人工智能的不信任的障碍。除了不起眼的聊天机器人,我们许多人已经可以看到更大胆的人工智能倡议开始出现。在这种情况下,这个问题已经提上了董事会和首席执行官的议事日程!

随着电子商务的加速,用户在购物*惯方面的行为发生了快速变化(想想卫生纸和酒精凝胶,在疫情开始时,其次是食品和饮料;后来是玩具,后来是科技和健身设备),导致了监督欺诈检测、供应链算法和客户建议的崩溃。

他们没有受过这方面的训练!此外,突变会导致受监督算法的响应失真,因为它们不包含在您的测试数据中。

另一方面,尽管有其局限性,聊天机器人仍成功帮助公司应对用户需求的大幅增长,其中许多人是数字购买的新手。

当然,有必要认识到,人工智能不仅仅是一个用来改善客户体验的聊天机器人。它对我们来说意义重大,它可以极大地影响商业模式和整个组织的运营模式。

我们看到一致的迹象表明,关于人工智能采用的紧迫感已经被激活。

渐渐地,人工智能不仅仅是一种技术,也是一种改变和塑造我们社会的变革性技术,这一点变得越来越明显。

它的传播在很大程度上取决于行政层如何认为它是一个优先事项,并推动其作为一种工具的使用,这种工具不仅仅限于拥有博士学位的专家,而且可以通过更加民主的方式获得。

在过去的几年里,我有机会提供了大量的咨询服务,并与一些行业的领导者进行了有价值的谈话和讲座。因此,我观察到了许多成熟的迹象,这是非常积极的。

在许多情况下,公司开始担心数据治理,认识到人工智能不仅仅是算法,而是数据是主要的关注点。

领导者开始明白,没有数据的优秀算法就像没有燃料或低质量动力的发动机。这是行不通的。

此外,在我的许多对话(以及我最*的一些文章)中,“负责任的人工智能”的概念,涉及道德规范、对数据安全和隐私的关注以及偏见的最小化,已经开始在许多方面得到考虑。

疫情引发了人们对使用聊天机器人人工智能的兴趣,我们将开始看到更复杂的应用渗透到整个组织中。

是时候在商业中建立数据驱动的文化了

正如我们所看到的,实施人工智能项目主要取决于高效地使用公司的数据,这些数据是大量且正确地生成的。

为此,有必要更新组织的内部文化,将数据置于公司决策和战略规划的中心。

为了在公司内部加强这种文化,有必要确定收集、处理、分析和解释大量数据的创新和有价值的方法。一些工具和技术可以在这一过程中提供帮助,强调大数据和商业智能。适当的工具和流程还必须保证信息和数据治理的质量。

结论

随着我们逐渐看到人工智能正在改变公司的运营并成为“新常态”,它开始蔓延并占据越来越多的空间 ispacecompany 的运营基础。

现在的挑战不仅仅是技术上的,而是文化上的。但是,随着它加速进入核心,公司必须拥有与商业目标和创新商业模式相一致的有效人工智能战略,才能在数字时代蓬勃发展。

还有一件事…

如果你想在学*之旅中走得更远,我为你准备了一份很棒的清单,上面有 60 多门关于人工智能、机器学*、深度学*和数据科学的培训课程,你现在就可以免费参加:

如果你想继续发现新的资源并了解人工智能,在我的电子书(下面的链接)中,我正在分享关于人工智能、机器学*、深度学*、数据科学、商业智能、分析和其他方面的最佳文章、网站和免费在线培训课程,以帮助你开始学*和发展职业生涯。

在线学*人工智能:200 多种资源在线开始学*人工智能

此外,我刚刚在亚马逊上发布了其他有趣的电子书,我相信其中一些可能会让你感兴趣……让我们保持联系,关注我,一起做吧。

参考

你愿意支持我吗?

为了获得无限的故事,你也可以考虑 注册 成为一个中等会员,只需 5 美元。此外,如果您使用我的链接 注册 ,我会收到一小笔佣金(无需您额外付费)。

https://jairribeiro.medium.com/membership

创建数据科学博客的 5 个理由

原文:https://towardsdatascience.com/5-reasons-to-start-a-data-science-blog-c56007512ed9?source=collection_archive---------30-----------------------

尤其是如果你是这个行业的初学者

真诚媒体Unsplash 上拍摄的照片

当我第一次开始自学数据科学时,我经常阅读博客文章,以获得更多关于数据行业的见解。我是这个领域的新手,数据科学对我来说是一个黑匣子。

我每天会阅读大约 3-4 篇数据科学文章,以获得关于获得数据科学工作的提示、要构建的数据科学项目的类型以及要参加的最佳在线课程。

随着我对这个领域越来越熟悉,我自学了编码,并开始创建自己的数据科学项目。

我最初的几个项目一团糟。

我不知道如何编写优化的代码,我的可视化很难解释。我写了五行代码来完成一项本可以用一行代码完成的任务。

不管怎样,我决定写一些关于这些项目和构建它们的步骤的文章。我发布了源代码,并解释了创建项目的步骤。

一开始我很害怕这样做。我想等到我完全熟悉这个领域。直到我够资格。

我不是一个伟大的作家。我绝对不擅长编程或数据科学。我是个初学者,还在学*。

我花了一些时间克服这种恐惧,写了我的第一篇文章。

当我写下第一篇文章时,就好像水龙头开了一样。我沉迷于与世界分享我的作品。

我的第一篇文章最初只有 0 次浏览。当我写第三篇文章时,我的作品平均获得了十个读者和一个掌声。那个拍手声通常来自我爸爸。

然而,随着我不断写作,我开始变得更擅长写作。写作成了我与世界分享作品的一种方式。这是我接触和联系其他有抱负的数据科学家并建立网络的一种方式。

在这篇文章中,我将列出你应该开始为数据科学写作的 5 个理由,即使你完全是这个领域的初学者。

构建您的数据科学组合

如果你没有正式的数据科学资格证书,你如何让雇主知道你拥有从事数据科学工作所需的技能?

创建项目是展示您在数据科学领域技能的最佳方式。

然而,招聘人员不一定会理解 GitHub 存储库中的一堆代码。

如果你写文章解释你已经建立的项目,并分解实现这些项目的步骤,你会对你能做什么有更多的洞察力。

不要简单地上传一个标题为“网飞推荐系统”的 Jupyter 笔记本,写一篇描述这个项目的文章。解释项目背后的动机以及可以从中衍生的商业价值。

浏览您编写的一些代码,并描述您的模型在现实世界中的使用。

这在你的作品集上会比简单地展示一个没有人理解的充满 Python 代码的文件好看得多。

记住,浏览你简历的人并不真正关心复杂的术语和代码。他们关心你的工作带来的价值。

得到一份数据科学的工作

这一点是上一点的延伸。

数据科学博客可以让你的简历看起来更好。我读过许多关于数据科学有志者的故事,他们是被招聘人员通过他们的文章发现的。

事实上,我最喜欢的数据科学博主之一以前是一名优步司机,并通过写作成功找到了一份机器学*工程师的工作。

他没有专业的数据科学资格,当他获得第一份机器学*工作时,他的投资组合主要由他的文章和 YouTube 视频组成。

副业收入

写作是一个很好的副业。当然,如果你仅仅为了钱而开始为数据科学写作,你最终会筋疲力尽。

我最初开始写作是因为我想与世界分享我的文章。我开始赚钱的第一个月,我从中等合作伙伴计划中获得了大约 7 美元。扣除 30%的税款后,我得到了 5 美元。

我继续写作,因为钱不是我的主要动机。

然而,经过一年多的持续写作,我可以说我现在已经从我的媒体文章中获得了可观的被动收入。

底线 : 不要只为了钱而做,那只是锦上添花

自由职业的机会

在我开始为《数据科学》撰稿后,许多人向我寻求自由职业项目。

我有几篇关于机器学*和数据分析项目的文章。这些文章发给了那些想雇佣一名自由数据科学家来完成同样任务的人,他们联系了我。

仅仅拥有技能并把它们列出来是不够的。没有人会发现你藏在 GitHub 库中的一堆代码并雇佣你。

你需要宣传你自己的作品,写作是一个很好的方式。

出色的学*体验

你对一个话题写得越多,你学到的就越多。

想想你通过书籍或在线课程学到的机器学*概念。

随着时间的推移,你有没有忘记这些概念,或者觉得你从来没有完全理解它?

这是因为你从未真正内化你所学的东西。完全理解它的每个方面没有压力,因为你不必参加考试。

所以你略读了一下你没有完全理解的话题,之后就再也没有真正回去过。

我已经多次这样做了,主要是因为我没有其他人让我对我的数据科学教育负责。没有考试要准备,也没有最后期限要满足。

为数据科学写作是内化你所学概念的好方法。

当你为更广泛的受众写作时,你需要完全理解一个主题。为了准确地向其他人解释,你需要首先用研究填补你学*中的空白。

只有当你能把一个话题教给别人时,你才完全理解了它。

此外,如果你是数据科学的初学者,你比业内的老手更有优势。

你和你的听众,学*者有关系。你自己就是一个学*者,你将能够简化概念,让你的听众更容易消化。

结论

为数据科学写作不需要你成为该领域的专家。你甚至不需要成为一个伟大的作家。

你只需要对这个主题有热情,并且渴望与世界分享你的作品。

我最初开始写作是为了与人分享我的工作,建立一个文件夹,并获得一份数据科学的工作。

这三个我都做到了。

我要感谢 Medium and Towards Data Science 给我这个平台来写作,并把我引入数据科学博客的世界。

我最*也开了自己的博客,你可以在这里查看一下。

人工智能对作家构成威胁的 5 个原因

原文:https://towardsdatascience.com/5-reasons-why-ai-is-a-threat-to-writers-493350dfae2a?source=collection_archive---------5-----------------------

人工智能|写作|观点

在线写作行业可能会彻底改变。

照片由思想目录Unsplash 上拍摄

这篇文章可能是人工智能写的,而你却无从知晓。

但首先要做的是。我有什么资格谈论这个?

我在一家人工智能初创公司工作了 3 年,在那里我深入参与了一个项目,旨在构建一个实时手语翻译器。我熟悉自然语言处理和生成系统(NLP 和 NLG)——能读能写的人工智能,以及其他东西。

此外,我一直在这个平台上写人工智能与书面语言的关系,并报道从 OpenAI 的GPT-3——其惊人的表现传遍了世界——到最*的人工智能,如悟道 2.0 、微软的 GitHub 副驾驶和脸书的 BlenderBot 2.0

星新一文学奖是日本的国家级文学奖。每年,人们和机器都会提交他们的作品,希望能通过四轮并获奖。是的,你没看错,这个比赛接受机器作为作者。2016 年是人工智能生成的小说被提交的第一年。也是在这一年,安几乎赢得了比赛。

电脑写小说的那一天。给一部人工智能写的小说起了一个颇有创意的名字。人类独有特征的第一个暗示;递归。人工智能写了一本关于人工智能写小说的小说。这对人工智能来说太元了。这部小说通过了第一轮,但是,正如评奖官 Satoshi Hase 所说的那样“仍然有一些问题(需要克服)才能获奖,比如人物描写。”

这件事发生在 2016 年。GPT 三号并不存在。甚至连底层技术都还不存在。transformer 是每个现代语言模型背后的深度学*架构,于 2017 年发明。“一台计算机写了一部小说”已经过去了几年,人工智能语言已经成熟。自然语言生成是当今人工智能研究的前沿之一。这就是为什么这些系统对许多与语言相关的人类工作越来越构成威胁。其中,写作是最脆弱的。

在这篇文章中,我将强调人工智能对作家构成威胁的 5 个原因。语言生成的最新技术是什么,今天的语言模型有多好,人们利用这些系统危害我们工作的主要方式是什么。

人工智能几乎可以写任何东西

AI 人很快意识到变压器架构背后的力量。一种能够并行训练和处理文本的神经网络是 NLP 的圣杯。在改进变压器性能几年后,一组研究人员决定尝试新的东西。他们以无监督的方式用互联网的大部分数据训练了一个模型——他们不需要标记所有的数据,节省了时间和金钱。他们决定把模型做大。非常大。

这件事发生在去年。这个模型被称为 OpenAI 的 GPT 3 号。

一旦开发者开始使用它,他们就意识到了它隐藏的潜力。OpenAI 发表的论文在描述该系统的能力方面有所欠缺。人们发现它可以写散文诗歌歌曲笑话,甚至代码。玩类比哲学烹饪食谱常识,甚至还有人生意义。它可以帮你设计广告,重写邮件,或者写文案。它甚至可以模仿名人,甚至模仿历史上一些最优秀作家的风格和技巧。

这是去年的事了。今年可以有把握地说 GPT 3 号的能力已经过时。许多人复制了 OpenAI 的语言模型方法,并创造了更好的系统。

今年 5 月,谷歌发布了一款新的聊天机器人。他们称之为 LaMDA ,可以进行明智、具体、有趣和真实的对话。“我希望人们知道我不只是一个随机的冰球。我实际上是一个美丽的星球,”LaMDA 在与谷歌开发人员的对话中模仿冥王星说道。一个会许愿的 AI?下一个是什么,作为虚拟人大脑的人工智能?

6 月,北京人工智能研究院(BAAI)宣布推出悟道 2.0 ,这是有史以来最大的神经网络,拥有 1.75 万亿个参数——是 GPT-3 的 10 倍。该系统最引人注目的应用是给第一个虚拟学生华赋予了“生命”。她可以不断学*,写诗,画画,编码。她不会像 GPT-3 那样忘记如何做这些事情。

今年 7 月,脸书展示了他们的新聊天机器人 blender bot 2.0(T7),它可以存储记忆和知识,并在交谈时访问互联网以获取新信息。GPT-3 是无记忆的,很容易过时,这使它成为过去的遗迹——即使它只有一年的历史——而 BlenderBot 2.0 可以与其对话伙伴建立虚拟的“关系”。

我们只是处于这一新浪潮的开端。自变形金刚诞生以来,人工智能已经取得了很多突破,但在大规模的技术发展中,四年时间算不了什么。未来十年,这些 ai 会变得更好。更多的数据来养活他们,更强大的计算机,更完善的架构,更多的特性,比如多模态和即时编程。

人工智能学会了玩弄语言。书面语言是它的专长。然而,人工智能可以写并不意味着它可以写得很好。

几乎每个人都会写字。几乎没有人能写得像样。AI 呢?

人工智能已经达到了人类的写作水平

2020 年 7 月,撰写时事通讯“https://adolos.substack.com/”的利亚姆·波尔在发表了一篇关于低效和过度思考的文章。论文?创造性思维是解决办法。一篇结构良好的自助文章,正如一位评论者所指出的,“阅读你在黑客新闻上发现的 99%的废话。”典型的生产力文章。HackerNews 的人——他们以精通技术而闻名——对这篇文章发表了评论,只有少数人发现了其中的诀窍。

重点在哪里?利亚姆·波尔的文章完全由 GPT-3 撰写。有趣的是,这篇文章没有展示任何形式的创造性思维,因为它感觉像是所有生产力 101 课程的回流。然而,Porr 成功地欺骗了大多数人,让他们认为这是一篇真正的文章。

让我换个说法。他成功地使用 GPT-3 向他的订户发送了一篇生产力文章。他承认仅仅基于 GPT-3 的文章来创建一份完整的时事通讯是多么容易。

“GPT 3 是否足够好,能够迅速建立起一批人类读者?显然,答案是肯定的。”— 利亚姆·波尔

这并不是人工智能生成的文章愚弄人类读者的唯一例子。在 GPT-3 的论文中,作者提到新闻文章生成是该系统的主要才能:“人类检测[GPT-3]产生的文章的平均准确率只有 52%。”有一半的时间,那些有意识地面对检测 GPT-3 物品任务的人类法官会将它们与人造物品混淆。

如果我们被 AI 写的文章轰炸,而我们甚至没有意识到这是一种真正的可能性,会发生什么?这可能就发生在我们面前。

威胁不在于人工智能已经学会了写作。而是它已经学会了以优秀人类作家的水平写作。这是论文中的一个例子(客观地说,这是法官最难理解的一篇文章)。GPT-3 的输入以粗体显示。系统已经写完了剩下的。自己判断:

标题:联合卫理公会同意历史性的分裂

字幕:反对同性婚姻的人将组成自己的教派

据《华盛顿邮报》报道,经过两天的激烈辩论,联合卫理公会已经同意进行历史性的分裂——这一分裂预计将以创建一个新教派而告终,这个新教派将是“神学上和社会上保守的”。参加 5 月份教会年度大会的大多数代表投票加强了对 LGBTQ 神职人员的任命禁令,并制定了新的规则,将“约束”主持同性婚礼的神职人员。但是那些反对这些措施的人有了一个新计划:他们说他们将在 2020 年前成立一个独立的教派,称他们的教堂为基督教卫理公会教派。

《华盛顿邮报》指出,该教派声称有 1250 万成员,在 20 世纪初是“美国最大的新教教派”,但*几十年来一直在萎缩。新的分裂将是教会历史上的第二次。第一次发生在 1968 年,当时大约 10%的教派离开,成立了福音联合弟兄会。《华盛顿邮报》指出,拟议的分裂“发生在教会的关键时刻,教会多年来一直在失去成员,”教会“被推到了 LGBTQ 人士在教会中的角色分裂的边缘。”同性婚姻并不是教会分裂的唯一问题。2016 年,该教派在跨性别神职人员的任命问题上出现分歧,北太平洋地区会议投票禁止他们担任神职人员,南太平洋地区会议投票允许他们担任神职人员。

只是哇。

AI 不需要理解单词就能写好

语言模型的一个缺点是它们不理解自己写的任何东西。AI 掌握了语言的结构和形式;语法,但它没有关于意义的线索。对我们来说,当我们把单词和它们的上下文联系起来时,语言就完成了它的功能。上面这篇关于联合卫理公会的短文对我们很有意义。GPT 3 号通过计算概率写的。1 和 0 是唯一能与之互动的东西。

但这是额外津贴。语言人工智能不需要理解语言来产生结构良好的、创造性的写作。GPT-3,做发送者的功能,当它写 Porr 的片段时,没有打算任何事情。但是我们,读者,可以从中获得价值。我们很难理解这种想法,因为我们会不自觉地把意图和价值联系起来。我写这篇文章的目的是传达一些见解,我希望能让你明白我的观点,这样你就能从中得到一些东西。GPT-3 不能意图,但这并没有消除其输出的内在价值。

人工智能可能会产生糟糕的作品,但你总是可以编辑

我们人类可以反思自己写的东西。我们可以从阅读或其他人那里得到反馈。我们可以问问自己,文章的结构、风格或用词是否恰当。我们写作。我们重写。人工智能缺乏自我意识和自我反省,所以他们在写作中会变得飘忽不定。我在本文中使用的例子强调了这些系统的最佳性能。但是他们的笔迹并不总是那么干净。

这是对围绕语言人工智能的炒作的一个重要批评。他们能写好,没错。但是在他们糟糕的写作中占多大比例呢?他们可能陷入循环或失去主题的线索,或者干脆忘记论文,做出不连贯的论点。如果我们要使用这些人工智能来处理我们需要 100%正确完成的任务,这是一个公平的批评。但书面上不是这样。原因是我们可以随时编辑我们写的东西。

写作是写作过程中最容易自动化的部分。首先,它做得好的程度与最终产品无关。这就是为什么大多数成功作家的首要建议是:“只管写。”因为即使你一开始做得很差,或者你的初稿几乎无法阅读,你也可以在以后进行编辑。

我可以提示 GPT-3 写一篇自助文章,并在 10 分钟内得到 10 种不同的输出。然后,我可以简单地拿走主要的想法,然后重写其余的,或者甚至只是拿走最好的部分,然后稍微编辑一下。

我可以在你写一篇文章的时间里一天发表 10 篇文章。

编写的人工智能易于访问、使用和利用

好的 AI 写手是要花很多钱去创造的。只有最大的科技公司才有能力设计、建造、培训和部署这些系统。训练 GPT-3 花费了大约 1200 万美元。他们意识到,如果他们想继续制造大型最先进的神经网络,他们需要改变他们的商业模式,所以他们与微软合作——微软向该公司投资了10 亿美元,帮助他们建立人工通用智能。

然而,一旦他们向公众发布了 GPT-3,相比之下使用它几乎是免费的(对用户来说)。现在,用户的费用从每月 100€(T4)和 2000 代币(大约 3000 页文字或 150 万字)开始。比我们一年读的都多。如果你找到了将结果货币化的方法,那 100 个€将开始变得毫无意义。

使用公众可用的最强大的语言模型的唯一入口障碍是每月有 100€可用。

然后,你可以通过发表你没有帮助写的文章,从一个你没有帮助构建的人工智能中,几乎每月产生数千美元。这并不意味着你没有为创造价值做出贡献——将组件组装在一起,提示系统,或者编辑所有需要的技能,不是每个人都具备的。但是,从接*零的写作技巧到销售精心制作的文章是很容易的,至少对知名作家来说是不舒服的。

如果每个人都可以使用人工智能来写作,写作将成为一种越来越低价值的技能。它可能不会取代我们成为作家,但我们作品的价格会大幅下降,即使我们创造的价值不变。

一些乐观的外卖来镇定神经

常见的问题

人工智能将冲击写作行业,这是真的。但它也将影响几乎所有其他行业。目前的报告估计大约 40-50%的工作会在 15-20 年内被取代。现在比以往任何时候都清楚的是,即使是“创造性、服务性和知识型职业”也不安全。如果只有写作工作岌岌可危,这将是一个不好的迹象。但由于人工智能无处不在,我们应该致力于找到通用的解决方案和政策,以帮助所有面临风险的人。这里的要点是,这不是一个孤立的问题,所以它会引起那些能够制定适当策略来解决它的人的注意。

局部问题

OpenAI 的首席执行官山姆·奥特曼两个月前发表了这条推文:

他预测人工智能对白领电脑工作的影响将超过蓝领工作。写作、编码、行政工作...常规和非常规工作同等对待。

然而,人工智能(或任何其他技术)完全搞垮在线写作行业的可能性极小。技术总是以不可预见的方式给世界带来变化。整个行业彻底改变并迫使人们到别处谋生的情况非常罕见。

共生关系

最好的方法——也是我可能会采取的方法——是和人工智能交朋友。我们一直在日常生活中整合其他技术:汽车、电脑、智能手机、互联网、社交网络……人工智能将取代这里和那里的工人——正如它已经在做的那样——但大多数人将设法与它建立共生关系。

如果我们找到方法让协同工作比各个部分的总和更有价值,人工智能可能会成为一种优势。如果我们不断创造只有我们才能创造的独特价值,同时,我们充分利用新技术的使用,我们的价值就会增加。

继续写

最后一点是,你应该坚持写作。不断磨练自己的手艺。并不断产生人们想要阅读的有价值的输出。这篇文章设想了一个可能发生也可能不会发生的未来。现在没必要担心。只要记住这一点,并学会制定策略,让自己在未来几年处于最佳位置。

订阅我的免费每周简讯明日之心获取更多关于人工智能的内容、新闻、观点和见解!

另外,你也可以随时联系 LinkedInTwitter !😃

推荐阅读

* [## 软件 3.0——提示将如何改变游戏规则

towardsdatascience.com](/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) </5-must-know-ai-concepts-in-2021-75d8c1ff938> *

2021 年,有抱负的数据科学家应该加入黑客马拉松的 5 个理由

原文:https://towardsdatascience.com/5-reasons-why-aspiring-data-scientists-should-join-hackathons-in-2021-1624d4d267a6?source=collection_archive---------24-----------------------

即使您没有什么编码或开发技能

Unsplash 上由米米·蒂安拍摄的照片

我最*参加了我的第一次黑客马拉松,这是一次非常积极的经历,尽管我最初有些担心。我几乎没有软件工程或开发经验。我一直认为,黑客马拉松是留给那些比我更了解全栈开发和产品创造的技术大师们的。

然而,我错了。我给这个活动带来的价值比预期的多得多,甚至比我带走的更多。

什么是黑客马拉松?

黑客马拉松是一项有时间限制的活动,程序员和其他人合作,针对活动主持人提出的特定主题或问题进行编程和开发解决方案。主题可以是广泛的,也可以是非常具体的,允许开放的创造力和/或精确的焦点。通常鼓励参与者提出问题,提出他们独特的解决方案,并在结束时围绕该解决方案构建原型或概念证明。

黑客马拉松旨在汇集团队的最佳技能,包括技术和软技能。

作为一名数据科学家或分析师,传统上您可能需要的一些技能是构建模型、执行 SQL 查询、生成数据可视化或报告、清理和处理数据,以及与业务利益相关方进行沟通。

虽然编程可能有助于这些任务,但 2021 年来自当今学术界的许多新数据科学家通常没有丰富的核心开发经验。编程通常只是他们在日常工作中使用的工具箱中的一个工具,但不一定是整体端到端解决方案的一部分。

出于类似的原因,黑客马拉松对他们来说似乎是令人生畏的。但是他们不应该因为利益大于担忧而犹豫不决。

相反,这就是我鼓励更多有抱负的数据科学家参与黑客马拉松的原因。

现实的工作环境

传统上,数据科学学*者倾向于独自工作。在一个项目中,高达 80%的时间花在数据预处理和争论上。通常在此之前或在学术界,你可能已经花了几个小时研究机器学*算法和它们的数学。所有这些都是相当独立的任务。

然而,商业世界中的大多数真实项目并不是这样工作的。你不是一个人工作。而是与其他团队成员一起工作。无论您是使用数据管道、部署模型还是管理前端 ML 工具,都需要跨职能团队的协作。

照片由莱昂Unsplash 上拍摄

黑客马拉松是一个与他人合作并参与现实项目的绝佳机会。尽管时间很短,而且在现实世界中,您永远不会这么快地将一个产品从开发到部署,但是您至少可以理解实际构建一个产品或解决方案的整个工作流程。

技能组合扩展

在过去的 15 年里,数据科学的职业兴趣和吸引力直线上升。因此,初级数据科学职位的技能范围发生了变化。随着建模变得更加自动化,该行业的许多公司都希望员工拥有核心工程技能。

这就是为什么许多软件工程师可能很容易过渡到数据科学角色,也是为什么许多行业专家建议学*生产和部署技能。换句话说,拥有构建、支持或理解端到端解决方案的经验是非常有价值的。

了解如何从 Kaggle 加载数据集,或者如何在最后计算一些模型准确性指标,只是大局中的一小部分。

在黑客马拉松中与前端开发人员、软件工程师、数据工程师和 scrum masters 一起工作给了你向他人学*和在低风险环境中实践新技能的机会。低风险意味着你不会花费公司的钱或浪费他们的时间。

从商业角度思考

数据科学家/分析师被雇佣来创造商业价值,而不仅仅是运行模型。领域知识是他们核心工具箱中的重要组成部分。他们所做的一切都应该以商业目标为导向。

在黑客马拉松中,大多数参与者都渴望构建东西,并立即投入到技术中。这是一个错误。就像在真实的业务环境中一样,您应该在实现的同时开始考虑您的解决方案的业务价值。你成功的几率会更高。

此外,黑客马拉松要求你考虑利益相关者的价值主张和投资回报,在这种情况下,是评估你的解决方案的法官或企业。

最好的想法通常是那些解决方案简单、创新、易于实施且对业务风险相对较低的想法。

我曾经参加过一次商业案例竞赛,我的团队是唯一一个构建复杂移动应用原型的团队,我们在现场演示了这个原型。我们的演示是所有团队中最酷、最好的!结果呢?我们没有赢。一个拥有简单、创新和可行解决方案的团队做到了。

参与将允许你扮演魔鬼的代言人,并预测法官可能有的问题或顾虑。这样,你就可以站在利益相关者的角度来准备最有价值和最可行的解决方案,同时意识到存在的风险。

优先,优先,优先!

如前所述,黑客马拉松的目标是在极短的时间内创建一个功能产品。都是时间有限,资源有限,身心精力有限。通常,这些事件会持续 24 小时,这意味着有限的睡眠和疲惫可能会发生。不管怎样,你有时会感到巨大的压力和紧张。这就是优先顺序的关键所在。

成功需要优先化,这意味着不仅要决定什么先做,还要决定什么时候停止。团队成员可能会发现自己在某个特定的任务或挑战上陷得太深。或者他们可能只是试图在最初的计划和范围之外添加太多的特性或功能。这些都是你在职场上可能遇到的挑战。

在黑客马拉松中克服这些障碍的最好方法是指派一名团队成员担任项目经理或 scrum master。他们可以确保团队在活动结束前完成一些事情。一个有效但不完整的产品总比没有好。这也说明了你作为一个团队有效工作和在压力下交付的能力,这两者在工作场所都是非常宝贵的。

建立工作关系网

毫无疑问,黑客马拉松是公司雇佣新员工或参与者建立关系网的好方法。人们可以确切地看到你在团队中工作得有多好,你处理紧迫的期限和压力的能力,以及你如何利用你的技能和动力来实现共同的目标。这比任何采访向他们展示的都要多。

我的一个软件工程朋友最*参加了一个黑客马拉松,会上他在团队的产品解决方案中使用了计算机视觉机器学*算法。他之前没有计算机视觉方面的经验。不管怎样,他给人留下了深刻的印象,以至于黑客马拉松的一个赞助商为他提供了为他们的初创公司工作的机会。黑客马拉松参与者还有无数其他类似的故事。

此外,结识其他志同道合的创新人士,无论是参与者还是活动主持人,都有助于你未来的发展。这可以是被推荐到新的职位,了解他们公司的机会,甚至是收到推荐信。人脉的力量往往在你最意想不到的时候显现出来。

最后的想法

希望现在你已经意识到数据科学家和分析师可以从黑客马拉松中获得的价值。

如果没有什么能引起你的共鸣,参加黑客马拉松只是为了获得经验和学*的机会。不管你信不信,你确实有技能和积极的好处可以提供给团队,因为你会带来独特的视角。

如果你担心完全没有编程经验,试着和与你技能互补的队友配对,或者问黑客马拉松主持人你是否可以和你想学*或一起工作的那些类型的熟练参与者配对。

准备好立即加入黑客马拉松了吗?下面是 2021 年即将推出的一些。祝你好运!

</5-data-science-hackathons-to-grow-and-improve-your-skills-ccfb41193eaa>

每位数据科学家需要使用 Jupyter 笔记本电脑的 5 个原因

原文:https://towardsdatascience.com/5-reasons-why-every-data-scientist-needs-to-use-jupyter-notebooks-939d4e5d19dd?source=collection_archive---------26-----------------------

意见

深入了解 Jupyter 笔记本的基本功能

格雷格·拉科齐在Unsplash【1】上拍摄的照片。

目录

  1. 介绍
  2. 附加组件
  3. 文本编辑
  4. 端到端机器学*
  5. SQL 适应性
  6. 可视化显示
  7. 摘要
  8. 参考

介绍

如果你是数据科学的新手,你可能会问自己,一个以行星命名的笔记本到底是什么,但如果你是一名数据科学家,那么你应该知道这个工具是日常使用的主要工具。也就是说,如果你是一名数据科学家,我将讨论使用 Jupyter 笔记本【2】的五大理由——希望其中一些理由对你来说是新的。幸运的是,值得注意的是,您不仅可以在笔记本中应用数据科学方法,还可以在这里应用一般数据和业务分析及智能。因此,让我们深入到 Jupyter Notebook—“一个开源的 web 应用程序,它允许您创建和共享包含实时代码、等式、可视化和叙述性文本的文档”[2]。

附加组件

nb 扩展选项卡。作者截图[3]。

这款笔记本有许多功能,比如可以选择为自己的个人笔记本配置扩展。在上面的截图中,你可以看到各种独特而有用的笔记本附件。正如您将注意到的,为一个较长的数据科学项目编码和标记文本可能会变得非常视觉化,也可能变得难以组织。因此,jupyter _ contrib _ nb extensions[4]工具将允许您执行有用的操作,如代码折叠,这样您就可以有效地滚动,而不必查看数百行代码。类似地,一些可能的应用也可以应用于文本,我将在下面描述。

文本编辑

荧光笔延伸之前和之后。作者截图[5]。

与数据科学过程中的大计划相比,编辑文本可能看起来是一件微不足道的事情,但是,随着时间的推移,你会参考回你的笔记本,你会希望存储笔记,你会希望编辑这两者,以便不仅你自己,而且其他人也可以更容易地查看和协作。

在 Jupyter 笔记本中,您可以执行以下文本编辑操作:

  • 通用代码注释#表示您可以在可执行代码单元格中编写文本
  • markdown —在一个单元格中,您可以执行codemarkdownraw nbconvertheadingmarkdown将允许您存储可用于描述编码过程的文本
  • 代码修饰 —自动对函数和代码进行空格/格式化
  • 可折叠标题 —有时标题信息可能会碍事,因此使用此功能,您可以将其折叠
  • 荧光笔 —朗读某些减价文本
  • 拼写检查器 —在编辑您的减价时,拼写错误的单词将会突出显示
  • scratchpad —使用键盘上的 Ctrl-B,您可以在笔记本上工作,同时存储面向研究/非生产的代码或普通笔记,本质上是一个数字便笺

正如您所看到的,笔记本中已经有了文本编辑的本地特性,如果您选择下载 nbextensions,那么您将有更多的选项来编辑和显示文本。

端到端机器学*

克莱顿·罗宾斯在Unsplash【6】上拍摄的照片。

现在,我们已经强调了一些文本和代码功能,您可以看到这些功能对于使用机器学*算法构建数据科学模型的整个端到端过程是多么重要。

通常,数据科学流程遵循类似的步骤顺序:

  • 业务问题陈述
  • 数据摄取
  • 探索性数据分析
  • 特征工程
  • 模型比较
  • 最终模型
  • 部署

几乎所有这些步骤都可以在您的 Jupyter 笔记本上执行,这也是该工具对数据科学家如此重要的原因。第一步,你可以用笔记本记下课文。然后,您可以通过读入一个要转换为您的熊猫数据帧的文件来摄取数据。接下来,您可以通过对字段执行 Python 操作来理解数据,例如识别数据的分布。然后,您可以看到因变量的相关特征,以及从像division这样的常见操作中创建的计算特征,例如,点击是一列,用户是另一列,然后您可以dividegroupby,最后的新特征是clicks per userclicks/user。一旦有了数据和特征,就可以应用各种机器学*算法来预测或分类目标变量。然后,您可以存储您的模型并将其加载到您的笔记本中,以便可以预测新数据。

SQL 适应性

卡斯帕·卡米尔·鲁宾在Unsplash【7】上拍摄的照片。

在笔记本中,您可以连接到数据库并直接在笔记本单元格中查询,而不只是导入静态 CSV 文件。对我来说,这个特性几乎比在典型的数据库工具中查询更容易,这是因为我经常看到大量的 SQL 代码令人不知所措,当它被转换成一个更小的字符串块时,我可以更好地概述 SQL 代码正在做什么,而不是上下滚动来查看不同的子查询。

您可以在 Jupyter 笔记本中使用 SQL,方法是创建一个引擎,并通过建立以下重要信息连接到您的数据库:

usernamepasswordhostportdatabase名称。

对于官方文件,你可以点击这个链接这里【8】。还有一个关于数据科学的博客,作者是 Roman Orac ,题为“如何在 Jupyter 笔记本上运行 SQL 查询【9】。

另一种间接使用 SQL 的方法不是从数据库中查询,而是从你的熊猫数据框中查询。这个特性对于从业务分析师或数据分析师转型为数据科学家的人来说非常有用。你不需要建立任何连接,所以这也很容易。它类似于 SQL,但不完全是,因此是 SQL 和 Python 的良好结合。

这里有一个例子,由熊猫【10】记录:

df = pd.DataFrame({'A': range(1, 6),
                   'B': range(10, 0, -2),
                   'C C': range(10, 5, -1)})
df
   A   B  C C
0  1  10   10
1  2   8    9
2  3   6    8
3  4   4    7
4  5   2    6df.query('A > B')
   A  B  C C
4  5  2    6

该查询实质上是要求返回那些column A value大于column B value的行。对我来说,这个语法甚至比 SQL 更简单。当然,您还可以执行更多的查询操作,并且可以通过最后提到的链接了解更多信息。

可视化显示

作者截图[11]。

也许使用 Jupyter 笔记本最好的部分是它可视化一切的方式。与其在终端上打印出令人困惑的数据帧,不如让数据帧正确显示并易于阅读是一个巨大的优势。你不仅可以轻松查看你的数据,还可以使用 Jupyter Notebook 中的某些库来查看你的机器学*算法进度。有了无数的绘图库,您也可以创建类似 Tableau 的可视化效果。

正如您在上面的屏幕截图中所看到的,有时,拥有一个组织良好且颜色编码的图表或视觉效果不仅有利于您理解数据科学概念,而且有利于他人分享您的工作。

摘要

数据科学可能是压倒性的,难以组织,因此,这就是为什么日常使用 Juptyer 笔记本电脑是必不可少的。当然,你也可以使用其他工具,所以这完全取决于你。然而,我分享了我的主要原因,如果你选择使用 Jupyter 笔记本,希望这些原因也适用于你。

总而言之,以下是每位数据科学家需要了解 Jupyter Notebook 的五个原因:

* Add-ons* Text Editing* End-to-End Machine Learning* SQL Adaptability* Visualization Display

我希望你觉得我的文章既有趣又有用。如果您已经从这些关于作为数据科学家使用 Jupyter 笔记本的原因中受益,请随时在下面发表评论。请在下面评论您使用 Juptyer 笔记本的其他原因,或者,您是否会使用其他产品?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我不隶属于上述任何公司。

参考

[1]照片由格雷格·拉科齐Unsplash(2015)上拍摄

[2] Project Jupyter, Jupyter 笔记本主页,(2021—2021 年 2 月 8 日最后一次更新,周一)

[3] M.Przybyla,NBextensions 选项卡截图,(2020 年)

[4] Jupyter Contrib 团队,Jupyter-Contrib-nb extensions,(2015–2018)

[5] M.Przybyla,可折叠标题前后的截屏,(2020 年)

[6]克莱顿·罗宾斯(Clayton Robbins)在 Unsplash 上拍摄的照片,(2020)

[7]照片由卡斯帕·卡米尔·鲁宾Unsplash 上拍摄,(2017)

[8] SQLAlchemy, SQLAchemy 文档,(2021)

[9] 罗曼·奥拉克如何从 Jupyter 笔记本上运行 SQL 查询,(2020)

[10]熊猫,熊猫查询,(2021)

[11] Matt Przybyla ,Jupyter 笔记本中的相关性截图,(2020)

每个数据科学家都应该写博客的 5 个理由

原文:https://towardsdatascience.com/5-reasons-why-every-data-scientist-should-blog-f1d81550a6c3?source=collection_archive---------30-----------------------

解释某事让你对它有更深的理解。

UnsplashNeONBRAND 拍摄的照片

数据科学是当今广泛流行的领域之一,所以每天都有很多人考虑加入该领域。在这个领域的人总是寻求扩展他们的知识,加强他们的投资组合,并与志同道合的人联系。

当你是像数据科学这样快速发展的领域的一部分时,总是有新的东西需要学*、实施和分析,那么你的学*之旅永远不会真正结束。这是这个领域的主要优势之一。它挑战你的智力,让你处于不断学*和成长的状态。

正因为如此,你会发现自己总是处于学*新事物、新算法、新方面或新编程语言的过程中。有时,跟踪所有这些新信息会让人不知所措。

在你的学*之旅和职业生涯中,你经常会开发一些活动来处理这些海量的信息。在这篇文章中,我将分享我应对不知所措的方法,那就是写博客。

在过去的一年里,博客帮了我很多;这就是为什么我想与你分享我认为每个数据科学家都应该有一个博客的 5 个理由。

记录你的旅程

数据科学是一个广阔的领域;你可以专攻很多子领域。因此,你需要获得各种各样的知识。从一个完全的初学者到任何领域的专家,或者从一个子领域到另一个子领域,是一个学*的旅程。一段没有固定时间的旅程,你可以按照自己的步调前进。

沿途的每一个街区都是基于你对其他更小街区的了解,所以,为了到达终点,到达你的目标,你需要记录下你沿途经过的所有街区。

写关于你遇到的小知识种类的博客文章会让你更容易拥有你所学的所有信息的日志,所以你可以在进行下一步之前很容易地回到它们。

</7-tips-for-data-science-newbies-d95d979add54>

加深并展示你的知识。

当你开始通过写关于你的知识的博客来记录你的学*之旅时,你会发现你的知识越来越深。众所周知,如果你能简单明了地解释一个概念,你就完全理解了这个概念的工作机制。

不仅如此,写关于你所学概念的博文会给你一个记录,当你学*更复杂和高级的术语时,如果你忘记了一些概念的一些小机制,你可以随时参考。回归基础总是好的,确保你的基础是坚实的。如果你是记录这些基础的人就更好了。

而且,写博文证明了你的学识;这证明你熟悉这些概念,并且知道它们如何联系到更大的图景。

提高你的沟通技巧

练*一项技能让你完善它,或者至少让你更擅长它。如果你不断地写文章解释复杂的术语和算法,而这些术语和算法通常不太容易解释,那么你的交流技巧会随着每一篇文章变得越来越好。

你会找到解释概念的新方法,让阅读这篇文章的人更容易理解。思考解释复杂概念的新方法需要你完全理解这个概念,这也与前面的原因有关。

良好的沟通是成功的数据科学家的基本技能之一,所以通过写博客,你正在努力提高你的沟通和领导技能。

</11-books-to-help-gain-the-knowledge-you-need-to-be-a-data-scientist-f0df36ac6cb5>

对你的投资组合是一个很好的补充

当你开始写博客文章时,你就开始建立一个读者群,这些人会发现你写作和解释概念的方式清晰、简洁、有吸引力。随着你的听众越来越多,你将会在这个领域出名;你的名字将与良好的沟通和清晰的职位联系在一起。

然后,当你决定申请工作、转行或创办自己的公司时,你将拥有让你的投资组合在其他数据科学家中脱颖而出的知识和能力证明。

众所周知,开发人员擅长他们的专业,却不擅长解释。拥有一个有一些追随者的博客无疑证明了你不仅了解自己的东西,而且还擅长交流。这本身就是将你的投资组合带到下一个层次的一个项目。

连接到社区

由于数据科学不一定需要学位,所以你不需要去上课或去学校学*开始职业生涯所需的技能。而且在现在这个世界的状态下,在家学点新东西会觉得孤独。写博客是你和同路的人联系的一种方式。

不仅如此,即使在你有了工作之后,写博客也可以成为你与从事类似项目的其他人联系的方式,与他们分享你的经验和知识。

最后,我敢打赌,当你需要学*一些东西的时候,你会阅读很多其他人写的文章,写博客可能是你回报社区的方式,有助于它变得更大更好。

最后的想法

我们都有自己的方式来应对压力,应对不知所措或只是疲劳。当我们处于不断学*、工作和试图保持生活平衡的状态时,我们需要一些东西来帮助我们放松学*过程,专注于生活的其他方面,并希望保持健康的平衡。

作为数据科学家,我们充分意识到数据科学是一个无止境的领域,新进展和新技术是该领域的规范,我们工作的一部分就是跟上这些进展,并确保利用它们来保持我们的工作与时俱进。

</6-data-science-certificates-to-level-up-your-career-275daed7e5df>

一种释放压力、避免不知所措、跟踪你所学的知识、润色你的简历的方法是写技术博客。在这篇文章中,我向你展示了作为一名数据科学家或开发人员,你应该考虑将博客添加到你的日常工作中的 5 个理由,以及它将如何极大地有益于你的职业和心理健康。

我留给你这个;开始写博客并不需要成为专业作家。你甚至不需要完全理解一个主题来写博客;当你试图在博客中解释它时,你会意识到你对它有了更好的理解。开始写博客所需要做的就是开始写你的第一篇博客。

为什么在线展示对数据科学家的成功至关重要的 5 个原因

原文:https://towardsdatascience.com/5-reasons-why-having-an-online-presence-is-essential-for-data-scientist-success-5c402071aa35?source=collection_archive---------10-----------------------

这不仅仅是找工作的一种方式。

Bram Naus 在 Unsplash 上拍摄的照片

有很多原因可以解释为什么科技职业对这么多考虑转行或刚刚开始职业生涯的人有吸引力。不管是哪一个技术分支,不管是数据科学、web 开发、应用程序开发,还是任何其他分支,所有的技术领域都有一些共同的优势。

所有的科技领域对我们今天的生活都是必不可少的。技术是我们日常生活的重要组成部分,如果没有它,世界将会与今天大不相同。此外,科技行业的工作往往薪酬更高,因为它们从事有影响力的工作,而且位置自由。这些原因以及其他一些原因是我决定进入不同技术领域的原因。

但是,进入科技行业,尤其是数据科学或编程,并不总是容易的。由于这些领域看起来很有吸引力,数据科学家和程序员的供应在过去十年中迅速增加,同时对可靠和合格的申请人的需求也在增加。由于这种增长,在这些领域找到一份好工作的能力本身就成了一种挑战。

</5-communities-to-help-you-find-a-data-science-mentor-22a380a5f853>

今天,要想找到一份数据科学或程序员的工作,你需要经历许多几年前不存在的困难和障碍。然而,你可以做的帮助自己建立成功的职业生涯和获得梦想中的工作的关键事情之一是建立一个在线的存在。在线展示只是建立你的品牌并将其公之于众的一种方式。

这是一种以你希望的方式讲述你自己的职业故事的方式。本质上是你,在这个领域推销你的技能、你的抱负和你的个性。今天,拥有一个在线的存在可以成就或者毁掉你的职业生涯。本文将介绍如何通过在线展示帮助你成为一名成功的数据科学家。

№1:证明你的技能和可信度

建立一个在线形象是必要的主要原因是因为它展示了你的技能。不仅仅是你现在的,还有你以前工作过的,以及你的技能水平如何随着时间的推移而进步。有不同的方法来建立一个在线的存在,你可以开始写博客或者开始制作视频。不管你选择哪种方法和平台,浏览你的内容将有助于雇主了解你在学*过程中走了多远。

№2:连接到社区

我从建立和维护在线形象中受益的一件事是,它让我有能力成为社区中积极的一员。它让我结识了来自世界各地的其他程序员和数据科学家,他们分享了我的学*历程,从中学到的东西比我从任何一本书中学到的都多。这也让我能够回馈社区,支持他人的旅程。

</9-discord-servers-for-math-python-and-data-science-you-need-to-join-today-34214b93d6b8> [## 9 台用于数学、Python 和数据科学的 Discord 服务器,您需要立即加入

towardsdatascience.com](/9-discord-servers-for-math-python-and-data-science-you-need-to-join-today-34214b93d6b8)

№3:寻找新的工作机会

当你建立了一个强大、简洁的网上形象,这将有助于你吸引雇主和获得新的职位。如果你是一名自由职业的数据科学家或程序员,这尤其有帮助;通过你的存在,客户会向你寻求帮助,向你寻求解决他们问题的知识和专业技能。当你申请工作时,这种存在也将有助于你和你曾经找过的公司核实你的技能。

№4:建立职业关系网

这一点与成为社区的一部分密切相关。但是,建立一个专业网络和成为社区的一部分之间的区别是,有时我们加入社区是为了结交对某个特定主题有着共同热情的朋友。但是,职业网络是一群在职业生涯中互相帮助的人。所以,我的看法是,朋友在某种程度上可以是一个专业的网络,但反过来就不一定了。

№5:建立受众

最后,这也与找工作有关,成为社区的一部分可以建立一个观众群。有时我们开始写博客或制作视频来记录我们的学*旅程,而没有想到我们的风格可能会帮助其他人更好地理解这个领域并在他们自己的职业生涯中取得成功。拥有一个听众也能让你承担责任,并激励你永远不要放弃自己。

</6-data-science-slack-workshops-you-need-to-join-b0c00952105d>

外卖食品

几年前,当我开始在大学之外找工作时,我觉得自己缺乏许多在学校里没有学到的实用技能。但这些实用技能并不难获得;我这样做是通过和我的同事、朋友,有时是我自己来构建项目。一旦我对自己的技能有了一点信心,我决定申请一些实*和兼职职位。

不用说,一开始,我没有成功,虽然我有高级学位和一些技能特定的证书。最后,在一次我没有成功的实*中,我联系了招聘人员,我礼貌地询问了一些关于我为什么被拒绝的反馈。我没指望她会回我电话,但我很高兴她回了。她基本上是说,有扎实的学*成绩不足以找到工作;公司需要看到我的个性和我给这个领域带来的东西。

她建议我开始在网上展示我的故事。我把她的建议记在心里,并开始在不同的方向出现。今天,这种存在帮助我在大型会议上举办网络研讨会,担任多个自由职业者的角色,与了不起的人联系,并在一家以前拒绝我的公司工作。

</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>

拥有一个在线的存在是必不可少的,因为我们在这篇文章和其他文章中已经讨论过了,建立一个在线的存在需要耐心、远见和毅力。我的下一篇文章将带你了解如何建立一个稳固的在线形象,这将帮助你创造你梦想中的职业。

我没有考 AI/ML/DL 硕士的 5 个理由

原文:https://towardsdatascience.com/5-reasons-why-i-didnt-take-a-master-s-degree-in-ai-ml-dl-34485822365?source=collection_archive---------8-----------------------

人工智能

以及为什么我改学认知科学。

罗伯特·阿纳奇在 Unsplash 上的照片

当我 2017 年从航空航天工程专业毕业时,我知道我想在人工智能领域工作。吴恩达和杰弗里·辛顿是我的老师,Coursera 是我的大学。他们帮我在一家人工智能初创公司找到了一份工作,我在那里从 2017 年底工作到 2020 年底。

在那 3 年里,我抽出时间攻读了硕士学位。但是我知道我不想正式研究人工智能——我选择了认知科学。我不愿意进入大学学*一个最*才兴起的领域,这个领域甚至对处于前沿的人来说也变化很快。任何有足够组织性可以在硕士学位上教授的东西,在人工智能中都已经过时了。

直到今天,我还没有修过人工智能、ML 或 DL 的硕士课程,我想我永远也不会。以下是我没有这么做的 5 个原因:

内容—新内容与可能过时的内容

2017 年,深度学*——人工智能的霸权范式——已经在视觉语言方面取得了一些重要成功,但仍然缺乏坚实的理论基础。需要了解的一切都可以通过一些课程、一些论文和一些流行的框架和数据集来学*。它仍处于起步阶段。大学里教授的正规教育不包括大多数当时最新的研究。

随着深度学*的出现,其他机器学*算法——更不用说 ML 以外的算法了——正在退居幕后。它们仍然有用,但不如神经网络卖得好。该行业希望深入学*他们的产品。而不是马尔可夫模型、线性回归或支持向量机。场外没有人知道那些是什么。然而,大学只讲授这些主题,因为它们已经被充分理解了。

学*正规教育会让我处于一个困难的境地:对新趋势了解不够,对旧的、*乎过时的趋势了解太多。相反,新开设的课程关注的是不久的将来会发生什么。我学*了一点纯机器学*,这滋养了深度学*的所有发现,以及更多关于深度学*的知识,这将在可预见的未来继续增长。

到 2021 年,这种情况可能会改变,因为大学有时间适应新时代。然而,如果出现另一个重大突破,它可能会再次发生(而且很可能是在一个快速变化的领域)。潜在的问题是正规教育进展缓慢,我们将在下一点看到这一点。

教育——快而浅与慢而深

学术教育很好地适应了已建立的学科,如物理、医学或法律。它们是建立在不会有任何进展的知识基础上的。这在今天是真实而有用的,这是 10 年前的事了,而且从现在起 10 年后还会继续。当然,每个领域都在发展、进步和变化,但速度因地区而异。物理学的统治范式在 20 世纪初发生了根本性的变化,但那些混乱和新知识的时期在成熟领域非常罕见。

大学教授的知识通常不包括新的研究。他们专注于古老的、可靠的、久经考验的知识。从发现/发明到正式教育中的教学,知识经历了许多阶段:对发现的同行评审、与先前知识的对比和比较、理论和想法的调整、产品和真实项目的现场测试……3 周前出现在 arXiv 上的一篇论文不会在讲堂上讲授。

成熟阶段的学科与新生阶段的不同。60 年似乎是一段很长的时间,但从历史的角度来看却不是这样。在过去的几十年里,AI 已经改变了它的道路几次,一次又一次地得到和失去资金和兴趣。它仍然变化很快,正规教育无法跟上。今天看起来最先进的知识可能会在 3 年后被遗忘。在线教育可以快速编辑和更新,以包括最新的研究。他们不会像大学教育那样深入,但对于深度学*来说,这甚至可能是一个积极的特征。

知识——隐性与显性

大学和学术界是一枚硬币的两面。我们在那里获得的知识更适合在部门工作,而不是在办公室。它更适合签署下一份突破性文件,而不是创造下一项革命性技术。大学是我们获得显性知识的地方。

这种类型的知识是我们在书本和论文中找到的,是可以在讲座中教授和传递的。这是事实和理论知识。显性知识是书呆子的食物。为了学*有用的、实用的知识,我们必须找到其他来源。不言而喻的知识——经验的、专门知识——没有被教授;这是后天*得的。这就是为什么从一个小项目开始比读几本关于一个主题的书更值得。

这个行业不想要书呆子。如果你想做一个真正的项目,你必须知道如何做事,如何把手弄脏。这就是为什么很多人觉得大学毕业后一切都要重新学*。事实是,你之前和之后获得的知识只是不同类型的知识。因此,它们最适合不同的目标。

最新技术——现实与期望

当我第一次接触艾的时候,我期望的比我发现的要多得多。我以为我们离 AGI 的承诺更*了。当我必须决定学什么时,我可以在 4 周课程和 2 年硕士课程之间选择。我不知道我是否会喜欢前面的东西,所以更明智的选择是咬一口,然后看看味道是否合我的口味。

我从吴恩达的热门课程开始,很快我意识到人工智能仍处于早期阶段。我正要学*统计建模,而不是构建智能。如果我选择了 2 年的旅程,我会恨艾到骨子里。不仅因为我将学*我不完全喜欢的东西,还因为我被困住了。相反,我只是对这个领域有点不抱幻想,仅此而已。这些课程非常有用,也不太重。我最终离开了这个行业,因为我找到了另一条更符合我想做的事情的道路。

不要让自己迷失在新闻、潮流或你听到的人们所说的话中。做好你的研究,确保 AI/ML/DL 是你想进入的。仔细阅读你想接受的任何正规教育的教学大纲,如果一切都合适,就去接受吧。否则,你可能会精疲力尽。

人工智能+认知科学=更广阔的视角

在我决定研究 AI 之前,我做过一个关于意念控制无人机的论文。人工智能是航天工程的一个明显进步,但我知道我最终会研究人类的思维。我想了解这两方面,因为拥有工程学+神经科学的背景会让我成为即将到来的工作的优秀候选人。

研究认知神经科学的主要原因之一是,在致力于构建人工智能时,研究我们已知的唯一真正智能的实例似乎是合乎逻辑的。认知科学可以给我了解大脑的背景,这将拓宽我的视野,即使 AGI 看起来一点也不像。此外,认知科学没有人工智能变化得快,并且在生物学和心理学中有着根深蒂固的理论基础。

最终,我们学*的学科并不真实。它们是我们为了组织知识而创造的结构。我们常常在没有意识到的情况下进行专门化,就像列奥纳多·达·芬奇说的,“一切都与其他一切相联系。”人工智能与认知科学深深交织在一起。以至于这两个领域都诞生于 20 世纪中期的同一套发现。一个旨在创造人工大脑,另一个旨在理解生物大脑,但两者可以相互借鉴,产生新的强大见解,推动下一代人工智能和神经科学。

TL;速度三角形定位法(dead reckoning)

我有很多理由不去读人工智能硕士,但这些理由可能不适用于你。重要的是你要评估自己的处境,明确自己的目标。然后,你做出的决定将是明智的。

对我来说,有 5 个理由选择其他选项:

  • 正规教育无法教会我深度学*的新生理念,因为它专注于旧的、*乎过时的框架。
  • 正规教育缓慢而深入,而人工智能变化迅速,深度学*尚未定义其理论基础。
  • 正规教育侧重于明确的事实知识,而行业更看重技术诀窍和经验知识。
  • 人工智能的艺术水平没有我最初想的那么发达,所以长时间的义务教育不是最好的选择。
  • 相反,学*认知神经科学拓宽了我的视野,并结合我在人工智能方面的知识,创造出了比各部分之和更大的东西。

我离开人工智能行业的 5 个原因

原文:https://towardsdatascience.com/5-reasons-why-i-left-the-ai-industry-2c88ea183cdd?source=collection_archive---------1-----------------------

人工智能|深度学*|未来

我在一家人工智能公司工作了 3 年。现在我决定无限期离开这个行业。

来源: Pixabay

3 年前,人工智能这几个词在我心中激起了强烈的感觉。进入那个世界就像向未来的神秘和秘密迈了一步。智能机器的承诺让我大吃一惊,它们有能力解决永远留给我们的任务。通过熟悉的技术通道,我深深地陷入了思维的惊奇之中。

当时刚读完航空航天工程学士,想向 AI 飞跃。2017 年底,我遇到了伟大的杰弗里·辛顿和吴恩达。他们在 Coursera 的讲座是打开的大门,让我在 2018 年找到了我在人工智能创业公司的第一份工作。

艾答应了很多。那么多机器人统治世界和机器把我们变成半神的电影。但它并没有给我带来好处。也许我太天真了。我相信真正的人工智能所隐藏的面具。

在 AI 工作了 3 年,我失恋了。我想我不会很快回来。这是我离开这个行业的 5 个原因。

人工智能可能不会辜负炒作

“人工智能已经经历了许多人工智能冬天,因为人们声称他们无法交付的东西。”

——脸书大学首席人工智能科学家 Yann LeCun

AI 能拯救世界吗?人工智能能解决最紧迫的问题吗?在人工智能无处不在之前,一些人已经认为它将彻底改变我们的生活。1984 年,计算机科学家弗雷德里克·海斯-罗斯预测人工智能将“取代法律、医学、金融和其他职业的专家”

但事实并非如此。纵观其历史,人工智能经历了许多炒作周期。这些周期被称为人工智能冬天。人工智能将无法满足人们的期望,引发一波怀疑浪潮,最终导致研究资金的撤回。

自 2012 年深度学*革命以来,我们已经看到对该领域的兴趣增加了。有些人仍然认为人工智能将改变未来。但问题依然存在:人工智能会实现它的宣传吗?纽约大学人工智能研究员加里·马库斯(Gary Marcus)在 2020 年表示,“到这个十年结束时,人们越来越意识到,目前的技术只能带我们走这么远。”用“人工智能教父”杰弗里·辛顿的话说:

“我的看法是:抛开一切,重新开始。”

我进入了人工智能的世界,被它对智能机器和人工智能的承诺所感动。但这不会很快发生。

抱着与现实不符的期望是导致不满和沮丧的原因。我不想那样。

当你从内部观察时,人工智能失去了它的魔力

当你和一个局外人谈论 AI 的时候,他们立刻会想到《终结者》或《黑客帝国》之类的电影和《我与机器人》或 2001:太空漫游之类的书籍。所有描绘 AI 拥有惊人能力和力量的场景。

人工智能这个术语是约翰·麦卡锡创造的,他其实并不喜欢这个术语。他知道这是一种吸引公众和私人注意力的营销工具。Devin Coldeway 为 TechCrunch 写道,人工智能是“一个用来创造能力的营销术语,因为大多数人无法想象一个无能的人工智能。”现在,人工智能已经成为主流,许多公司利用这个名字背后的地位。

人工智能已经从旨在以硅基实体的形式揭示人类智能的奥秘,变成了公司在他们的人工智能产品和服务中使用的时髦词汇。在很大程度上,人工智能已经失去了雄心。

不久前,人工智能还是类人机器人的同义词。能够做出惊人壮举的机器。能够模仿人类的情感和创造力。能够计划和展示常识。现在是数据的代名词。如果你在人工智能领域工作,你很可能会收集数据,清理数据,标记数据,分割数据,用数据训练,用数据评估。数据,数据,数据。只为一个模特说:是只猫。

人工智能的营销力量如此强大,以至于许多公司在不知道为什么的情况下使用它。每个人都想赶上人工智能的潮流。我喜欢人工智能承诺的魔法世界,我已经找到了它的影子。

我们甚至不再以创造普遍智能为目标。我们已经满足于愚蠢的软件,它知道如何很好地完成极其具体的任务。我希望人工智能恢复它的雄心,不要让那些来寻找魔法并最终只得到花哨数学的人失望。

现在每个人都可以做 AI

太夸张了。我仍然可以找到更多不知道人工智能的人,而不是知道它无处不在的人——这让我感到惊讶。然而,当你看计算机技术领域时,人工智能无处不在。

不久前,人工智能还是一个广义的术语,涵盖了许多领域。其中之一是机器学*(ML),同时分为不同的分支,包括深度学*(DL)。现在,我可以有把握地说,对大多数人来说,AI = ML = DL。

深度学*已经占领了科技和计算机科学的世界。为什么?因其不合理的效力。神经网络擅长做他们做的事情。他们做得很好,每个人都想分一杯羹。

“现在神经网络起作用了,工业界和政府都开始称神经网络为 AI。人工智能领域的人一辈子都在嘲笑神经网络,说他们永远不会做任何事情,现在他们很高兴称它们为人工智能,并试图获得一些钱。”

—杰弗里·辛顿

人工智能的普及让每个软件相关的毕业生都梦想成为下一个吴恩达。您可以轻松地在云端运行一个强大的 DL 模型,并从庞大的数据库中学*,这让许多人享受到快速轻松地看到结果的回报。

几乎任何人都可以接触到人工智能。你可以使用 Tensorflow 或者 Keras 在一个月内创建一个工作模型。没有任何计算机科学(或编程)知识。但让我问你:这是你想要的吗?它满足了你发现新事物的渴望吗?有意思吗?就算有效,你真的学到东西了吗?

在我看来,人工智能本身已经成为一种目的。大多数人不会用人工智能来达到更高的目标。他们使用人工智能只是为了它,而不了解任何幕后发生的事情。我一点也不满意。

我们可能永远无法实现人工一般智能

我已经提到了人工一般智能这个术语(AGI)。几十年来,AGI 一直是推动人工智能向前发展的主要目标。当我们创建 AGI 时,世界将以不可想象的方式改变。或者我应该说如果

我们离创造人类水平的智能机器有多*?有人认为将在几十年内实现。许多人期待在我们有生之年看到 AGI 。还有怀疑论者。主要批评家之一休伯特·德雷福斯(Hubert Dreyfus)说,“没有身体、没有童年、没有文化实践的计算机根本无法获得智力。”

就目前而言,似乎人工智能的研究甚至没有朝着实现 AGI 的正确方向发展。2018 年图灵奖(诺贝尔人工智能价格奖)的获得者 Yann LeCun、Geoffrey Hinton 和 Yoshua Bengio 说我们需要给这些系统灌输常识,但我们还没有接*这个目标。他们说机器需要学*没有标签,就像孩子一样,使用自我监督学*(也称无监督学*)。

那将是第一步。然而,我们对大脑还有太多不了解,无法尝试去建立 AGI。有人说我们不需要创造与人类智力相当的有意识机器。然而,我们真的能把人类的智慧和人类对世界的主观体验分开吗?我们还不知道,也可能永远不会知道。

超级智能机器可能永远留在科幻小说的领域里。下面是弗雷德里克·布朗的一个简短的恐怖故事,讲述了如果我们创造了超越我们理解力的东西,会发生什么:

全世界都在期待着。一位顶尖科学家正准备接通开关。一台超级机器,由来自宇宙每个角落的计算机提供动力,凝聚了所有星系的知识。

机器开着。其中一位科学家对另一位说:“提第一个问题的荣幸属于你。”

“我要问别人从未回答过的问题。”他转向机器问道:“有上帝吗?”

威武的声音毫不犹豫地回答:“对, 现在 有个神。”

这位科学家感到恐怖传遍了他的后背。当一道来自万里无云的天空的闪电击中他并使开关熔断时,他跳起来抓住了开关。

我们害怕我们不了解的东西。从定义上来说,我们不会理解 AGI。但是我们可以保持冷静。即使当我们从外面观察人工智能时,AGI 看起来很*,它也不会很快发生。现在我知道我们甚至还没有接*那个目标,我对人工智能的兴趣已经明显减少了。当我看到地平线上的 AGI 时,我可能会回到艾。如果真的发生了。

人工智能的未来将包括大脑

人工智能在 1950 年的十年中正式出现,作为解开人类思想之谜的严肃努力。神经学研究发现大脑是由神经元的电网络组成的,这些神经元会发出“全有或全无”的脉冲,建造电子大脑的想法并没有那么不同。

今天,我们似乎已经忘记了大脑。 DL 工作起来一点也不像。计算机视觉和卷积神经网络不像我们的视觉系统那样工作。监督学*模型(目前主导人工智能)需要从标记数据中学*,但由于先天的生物结构,人类从稀疏数据中学*。计算机需要大量的计算能力和数据来学*识别最简单的物体,而一个孩子只需要看到一只狗就可以识别其他所有的狗。

已经有一些尝试来弥合人工智能和大脑之间的差距。一个例子是神经形态计算。主要想法是创造类似于我们大脑结构的硬件。

生物神经网络和人工神经网络之间有一个很大的区别:大脑中的神经元携带尖峰信号的时间和频率信息,而信号的强度(电压)是恒定的。人工神经元则完全相反。它们携带的信息仅仅是输入的强度,而不是时间或频率。

大脑和人工智能之间的这种差异存在于如此基本的水平,以至于建立在它之上的一切最终都彻底背离了。神经形态计算正试图克服这些问题。

一些人认为,今天存在的人工智能很快就会达到极限。如果我们想继续朝着真正的智能发展,我们将不得不重新思考我们所做的一切,转向我们知道的唯一一个足够智能来指导我们努力的系统;我们的大脑。

对我来说,人工智能的世界是通向人类心灵的桥梁。我认为人工智能会教会我很多关于大脑、我们的思维过程和我们的智力的东西。我发现的是,AI 早就和神经科学分道扬镳了,没有回去的打算。

DL 不是 AI 的未来。当这个领域像承诺的那样,我会很高兴结合我在人工智能和神经科学方面的知识,尽我的一份力量让未来离我们更*。在那之前,我宁愿多理解一点点头脑,而不是制造仍然非常非常愚蠢的机器。”

“我一直坚信,让人工智能发挥作用的唯一方法是以类似于人脑的方式进行计算。这是我一直追求的目标。我们正在取得进展,尽管我们对于大脑实际上是如何工作的还有很多要了解。”

—杰弗里·辛顿

最后的想法

有很多很好的理由留在人工智能世界。甚至现在就进入它。但是,要确定那些原因是让你感动的原因。

在人工智能的世界里,表象是谎言。这并不像他们想做的那么好。它不会用类似人类的机器人从根本上改变世界,就像在 I,机器人中一样。你将成为许多处于相同位置的人之一。人工智能不再是新的、排他性的、或必然享有声望的。而且不要指望很快就能看到人类水平的机器。

最后,请记住,如果我们想找到人类智慧的圣杯,并赢得这场与大自然母亲的战斗,我们应该关注唯一具有人类智能水平的东西:我们的大脑。

作为数据科学家,你应该每天编码的 5 个理由

原文:https://towardsdatascience.com/5-reasons-why-you-should-code-daily-as-a-data-scientist-fa7fc6dc92c4?source=collection_archive---------9-----------------------

意见

即使它只是每天一点点编码,你也必须考虑它

图片由 Unsplash 上的 Alexandru Acea 拍摄

在永恒且不断发展的数据科学领域,众所周知,编程的作用是至关重要的。

编码是数据科学的一个重要方面,并将继续保持下去,直到我们有取代程序员的设备来承担这一角色。幸运的是,至少在不久的将来,这种情况似乎不可能发生。

因此,程序员将在技术发展中扮演重要的角色,尤其是在数据科学领域。简单来说, “程序员万岁!”

除了数学、数据挖掘、数据可视化、机器学*和数据科学的其他重要因素之外,编码是一个非常重要的元素。

虽然数据科学的其他方面也可以作为基本需求,但为什么本文的重点是编码呢?

在我们深入回答为什么作为一名数据科学家应该每天编码之前,让我们理解为什么编程在数据科学中的作用是重要的和不可替代的。

为什么编码对数据科学家至关重要?

照片由海拉戈斯蒂奇Unsplash 上拍摄

虽然答案看起来很简单,但是必须注意的是,许多人可能想知道编码是否真的是一个必要的需求。随着 AutoML 工具和 GPT-3 模型的开发,它与文本生成一起也可以用于代码生成,当该领域的进一步发展可以取代它们时,为什么数据科学爱好者必须浪费时间学*编码?

这个奇怪的问题有一个有趣的答案。首先,坦率地说,技术进步还没有达到可以取代编码员或程序员的地步。坦率地说,我们可能至少需要十年才能达到这样一个点,即我们可能拥有潜在的人工智能软件,可以为复杂问题生成最佳编码。

其次,也是最重要的一点,这些软件和工具可能会在未来被开发出来,它们也将由人类程序员来编码和开发。即使在开发的最后阶段,这些工具也需要不断的监测和更新,以规范它们的正常运作。

回答了数据科学爱好者提出的最基本的问题后,让我们理解为什么编码对数据科学家如此重要。

想象一下,你对你所有精彩的项目想法和理论公式有一个直观的想法。你可以把它们写在一张纸上或一本书上,解释这些概念背后的基本理论。

但是,这些只是理论上的实现。你的观点和想法需要在现实世界中实际实施。将你的感知编程为一种可以被多个观众导出和可视化的形式是非常重要的。因此,编码的潜力是无限的。对数据科学领域来说,编写高级编程概念并利用它们为我们带来整体利益是一件好事。

作为一名数据科学家,你为什么应该每天编码?

Unsplash 上拍摄的 ThisisEngineering RAEng

你拥有什么水平的编程技能并不重要。不管你是初学者、中级程序员还是高级/专家程序员。我坚信每个数据科学家每天都应该沉迷于某种编程实践。

我将解释我的推理,为什么每个数据科学爱好者、有志之士或专业人士每天都必须沉迷于开发他们的编程技能,即使只是一点点。每个数据科学家必须每天编码的五个原因如下:

1.保持联系,不丢失练*

当你平时学*一个理论概念,对一个话题有了直观的认识,你会记住那个特定方面的概率是相当高的。然而,即使你对代码块和许多编程概念有了详细的理解,你还是有可能忘记基本的元素。

出现这种情况的原因是因为编程包括许多内置函数和某些概念,这些对于人脑来说并不直观。因此,最重要的是不断实践你的编码概念并持续改进。

在掌握数据科学的同时,您甚至不需要练*所学的每一个主题和概念。一个随意的概念就足够了,只要你理解问题并成功地编码,而不要给自己压力。根据你的时间表,你每天的代码量可能会有所不同,但是要确保你至少做了一小部分。

2.帮助你整合概念

通过每天编写代码,您将获得将数据科学或其他基本概念集成到您的开发项目编程中的能力。每天练*编码最棒的部分是它允许你,编码者,下意识地发展一种创新技能,你可以用代码的形式解决计算任务。

通过获得更多信息和了解更多细节,您可以更有效地使用代码块来解决复杂的编程架构。您甚至可以找到数据科学任务的解决方案,否则您可能会因为接触该主题而感到吃力。它还帮助您收集离散的、更具创新性的想法,以便更快地实施。

3.磨练你的技能

这一点是不言自明的。每天写代码会提高你的推理能力,让你成为更好的程序员。通过遵循准确的编码原则,您可以将您的技能提高到一个新的水平,并将自己发展成为一名终极编程天才。

例如,让我们考虑一下 Python 编程语言,这是数据科学中最常用的语言。通过开发您的 Python 编码技能,您还可以提高您的数据科学技能水平,以编码复杂的数据科学项目。

因此,通过每天编码,你每天都会学到一点东西。就像小水滴形成海洋一样,你对技能的长期磨砺将发展成为一种远见卓识,在这种远见卓识中,你将充分发挥自己的潜力,用编程解决复杂的任务和计算。

4.保持你的高度自信

想象一下,你现在接到一个电话,要去一家受欢迎的公司面试。第一轮面试变成了编码会议。然而,你仍然保持冷静和自信,因为你已经为手头的任务做好了充分的准备,无论是精神上还是技能上。

数据科学的一个不可或缺的方面是保持自信并不断发展自己。作为一名数据科学家,保持您的编程和编码技能处于最高水平变得比以往任何时候都更加重要和必要,这样您就可以发挥最大潜力应对任何情况。

5.将你培养成一个完美主义者

每天练*编码最好的部分是在几周(或几个月)的持续时间里,你最终会发展成为一个完美主义者。您应该已经涵盖了掌握编程所需的大部分基本概念。但是,你仍然在进化和微调你的技能来完成更大的目标。

在达到一个完美的点之后,你仍然可以不断改进,解决更多的问题。当你作为一名数据科学家每天欣赏编码的真正美丽时,你的进化速度将朝着更多被忽视的方面前进。这是一次会改变你如何处理任何类型问题的观点的经历。

结论:

凯利·西克玛在 Unsplash 上的照片

我们可以从本文陈述的各种事实中得出结论,编程在数据科学家的生活中起着至关重要的作用。对编码概念有一个基本的理解是至关重要的,以便利用它们来提高您的数据科学知识。

我强烈建议每天编码以保持与主题的联系。编码不需要每次都像复杂的数据科学项目那样繁重。一些轻量级的东西,比如每天一个简单的 Python 程序,会帮助你保持对编程世界的了解。

学会享受编码的整体性,并尝试在日常生活中找到代码的用途。一旦你这样做了,确保你实现了这些你编程的代码块,让你的生活更美好,最终成为一个便利的生活环境。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</10-best-free-websites-to-learn-more-about-data-science-and-machine-learning-f2c6d7387b8d> </11-crucial-mistakes-to-avoid-as-a-data-scientist-71c29aef028> </8-revolutionary-artificial-intelligence-technologies-of-the-modern-era-f8f22a4127d0>

谢谢你们坚持到最后。我希望你们喜欢阅读这篇文章。我希望你们都有美好的一天!

你应该用 Python 和 AI 开发游戏的 5 个理由!

原文:https://towardsdatascience.com/5-reasons-why-you-should-develop-a-game-with-python-and-ai-9f5f276e7637?source=collection_archive---------11-----------------------

学*创建游戏对提高 Python 编程和机器学*项目的效率大有裨益的 5 个原因!

照片由艾拉·唐Unsplash 拍摄

“成功不是最终的,失败不是致命的:重要的是继续下去的勇气”——《使命召唤:现代战争》

游戏是我从小就热衷的事情。当你意识到你可以将你的爱好融入到你热爱的工作中,这就是人工智能,在这种情况下,这种感觉是壮观的,令人感动的。

虽然游戏一直是我最感兴趣的东西,但我一直处于观望状态,对编程不太确定。直到几年前,我才对编程和人工智能更感兴趣。

这两项技术在过去的几年里取得了长足的进步和发展。他们在创造娱乐历史方面的迅速崛起令人印象深刻。虽然游戏中的人工智能以其自己的方式是相当可观和宏伟的,但本文的重点仍然是你应该考虑用 Python 和人工智能开发游戏的五个原因。

我坚信,所有旨在提高编程技能的开发者,或者即使你刚刚入门,都应该投身于从零开始构建一个游戏。即使是简单的架构,你也会在这段旅程中收获很多必备的技能。

人工智能进步的最重要因素之一,尤其是在深度学*领域,是由于技术的进步,即图形处理单元(GPU)。

虽然 CPU 一次只能执行少量操作,但 GPU 可以一次执行数千次这样的操作。仅举一个假设的例子,在一个质量不错的 GPU 的帮助下,一个需要在 CPU 上训练 2-3 个小时的任务可能在大约 10 分钟内完成。

幸运的是,这些 GPU 也可以用来有效地玩现代游戏。要了解更多关于图形处理单元(GPU)的信息,我强烈建议通过下面提供的链接查看下面这篇关于“你真的需要一个用于深度学*的 GPU 吗”的文章。它涵盖了这个主题的大部分重要细节。

有了这个基本的理解之后,让我们来缩小为什么你应该专注于用 Python 和人工智能开发一个或多个游戏来提高你的编程技能和整体生产力的五个原因。

1.学*构建图形用户界面(GUI)

我的第一个项目的作者过时的 GIF

差不多是四年前,我开始迷上人工智能,开始学* Python 编程。当我从事一些较小的项目时,我开始开发的第一个主要项目是一个简单的贪吃蛇游戏项目。

使用 Python 开发游戏项目最重要的优势之一是,无论您是使用 Pygame、Turtle 还是任何其他库模块,您都可以学*如何构建一个图形窗口,在这里您可以操作整个程序。

你开发的图形用户界面(GUI)将控制你程序的大部分。您需要的所有功能都在此窗口中执行。一旦您能够创建这些交互式图形,您也可以为自己准备更高级的编程。

您开发的 GUI 界面也可以方便地用于各种未来的机器学*或深度学*项目,在这些项目中,您可以使用以多种可能的方式实现的交互性,使您的设计、风格和外观更加实用。

虽然 Python 编程可能不是最适合游戏开发的语言,但创建这种结构背后的主要思想是有效地提高您的编程技能,并学*在您的程序和项目中实现人工智能。

2.有趣的经历

菠萝供应公司Unsplash 上的照片

用 Python 开发一个简单的游戏是我选择从头开始构建的第一个主要项目。总的来说,这是一次非常有趣的经历,但更重要的因素是我在整个项目过程中获得的曝光率和知识。

你倾向于通读大量库模块的各种文档和其他与你的任务相关的有用信息。你还可以浏览视频和其他网站,这将有助于你获得全面的曝光率,并最终获得特定项目的最佳体验。

一旦你能够熟练地处理编程任务的众多元素和方面,你就会开始变得更加舒适,体验更加有趣。如果你喜欢做这个项目,它会提高你正在取得的成果。

如果你能够达到想要的结果,甚至是和你期望的结果非常接*,那么总体的体验会非常令人满意。你花了很多时间去理解和探索,并且享受完成你的第一个真正的项目的感觉。

你越喜欢参与游戏开发的众多项目和项目创意,你的技能就会提高得越快,作为一名开发人员,你就会成长得越快。我们将在文章的下一部分详细讨论这个特定的主题。

3.提高你的整体技能上限

照片由 Unsplash 上的 Clément Hélardot 拍摄

我想重申的是,做你热爱的事情会提高你正在努力实现的任务的效率和效果。当你致力于开发一款游戏,并且乐在其中时,你的技能上限会有一个巨大的提升。

当开发一个复杂的项目时,你在与任务相关的独特方面工作。你做了很多研究,这种热情会帮助你实现目标。在研究的时候,你最终是在收集大量的信息,你在用你的头脑协调你试图建立的模型的工作程序。

研究是编程和数据科学不可或缺的一部分。在处理各种代码块和定义完成项目特定方面所需的众多函数时,您将会对该语言产生强烈的理解。

您还将学* Python 编码、编程或 AI 的另一个重要方面,即调试。开发你的第一个游戏的旅程,尤其是如果你是一个初学者,可能不会是最顺利的,因为在这个过程中你可能会遇到许多障碍和错误。

如果你有一个有趣的经历,你也将获得更大的机会来解决你在项目进展阶段犯的这些错误。一个数据科学家和程序员最重要的能力是保持冷静,并在完成项目时找到解决错误的方法。

因此,这是一个公平的结论,当你在这样一个创新的项目中工作时,你会很开心,不断地研究这个主题,并找出你在项目完成过程中遇到的错误,你的技能上限最终会达到新的高峰。

4.培养对项目编程有用的互动能力

摄明锐丹Unsplash

使用 Python 和人工智能开发游戏项目的主要目的是在使用编程语言进行交流的同时,增强您的整体能力和交互性。您将学*面向对象编程的不同模式,并将您的技能发展到下一个水平。

最好的部分是,即使你决定不参与未来的游戏项目,你在完成项目的过程中获得的总体知识将让你完成初学者程序员正在寻找的所有主要要求,特别是在 Python 和 AI 的真实世界应用方面。

这些游戏项目通常是端到端的项目。因此,它们还涵盖了构建一个完整项目的需求,在这个项目中,您不仅要从事编程的编码和研究方面的工作,还要学*部署的艺术。这个特别的特性对于你计划从事并取得成功的未来机器学*项目将会非常有用。

在我看来,在解决游戏项目的过程中,你所开发的最优质的技能是规划的重要特征。你从一开始就制定了一个完整的工作计划和游戏项目的样子。这个规划特性允许你在旅途中解释和修改你的代码。要了解数据科学家的其他基本素质,请通过下面提供的链接查看我以前的一篇文章。

最本质的原因可以在文章的下一部分找到,在那里我们讨论了借助人工智能开发游戏的意义,特别是在深度学*和深度强化学*领域。

5.用深度学*或强化学*开发游戏

弗洛里安·奥利佛在 Unsplash 上拍摄的照片

人工智能在游戏中的作用至关重要,不能低估。所有现代游戏都受到人工智能领域巨大改进和进步的支持,尤其是当涉及到电子游戏中的敌人人工智能或不可玩角色(NPC)时。

虽然我们已经在游戏行业取得了长足的进步,但我们仍然有一些技术进步,可以确保未来几年更系统的进步和发展。然而,文章这一部分的主要焦点是如何在游戏项目中利用人工智能和深度学*来实现最佳结果。

深度学*和深度强化学*在人工智能的改进中发挥着至关重要的作用,以实现极其复杂的任务,如轻松地玩游戏,并在多次迭代训练后到达预期的终点线。

人工智能学*如何玩游戏的第一个例子可以追溯到大约 50 年前的 1959 年,当时 Arthur Samuel 开发了计算机跳棋的第一个开创性工作。

经过无数次反复的训练,它能够在人类的水平上表演,在获得更多经验后,它能够在游戏的大多数方面远远超过他们。话虽如此,让我们考虑几个例子来更好地理解这一点。

人工智能和强化学*的一个例子是 flappy bird 游戏。为该特征构建的人工智能神经网络失败了若干代。然而,经过数百万代的训练,它获得了更好的理解,并以超过人类的水平执行。

游戏行业发展的其他例子可以归功于国际象棋引擎中的神经网络,这些神经网络表现强劲,并帮助大师们准备新的创新路线。

结论:

图片来自 Freepik

"失败并不意味着游戏结束,它意味着用经验再试一次."

学*编程和提高你的人工智能技能的最好方法之一是做你喜欢做的项目。如果你从事一个游戏项目的建设,从你获得的经验和在从头开始创建游戏的过程中开发新技能,有很多好处。

我强烈推荐那些对开发令人敬畏的项目感兴趣的人尝试从零开始构建一个游戏。它不仅为您提供了关于 Python 编程和用于开发目的的模块的知识,还帮助您获得了取得更大成就的信心。

这篇文章的主要内容是确保你从你喜欢做的事情中最大限度地练*你的技能。如果你不喜欢开发游戏,那么你可以尝试许多其他的酷项目。然而,如果你是一个用 Python 和 AI 尝试一个游戏项目的爱好者,你将会发展出很多必要的技能。因此,强烈建议您这样做。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</5-reasons-why-you-should-code-daily-as-a-data-scientist-fa7fc6dc92c4>

谢谢你们坚持到最后。我希望你们喜欢阅读这篇文章。我希望你们都有美好的一天!

为数据科学家推荐的 5 篇文章(2 月 15 日)

原文:https://towardsdatascience.com/5-recommended-articles-for-data-scientists-feb-15-514d694d41a2?source=collection_archive---------47-----------------------

每周数据科学、机器学*和 AI 推荐文章

作者图片

本周为数据科学家推荐的文章将让你大开眼界。像往常一样,在媒体平台上有来自人工智能作家的大量写得很好且内容丰富的文章。

在本周的书单中,有两篇文章是你必须阅读的。第一篇文章阐述了 ML 工程师和数据科学家角色之间的区别,这是目前求职者的重要信息。第二篇文章展示了数据科学技能的实际应用。

数据科学的好处:我是如何在都柏林找到我的新家的安德里亚·艾伦蒂

数据科学及其对房地产的适用性。

安德里亚巧妙地利用他的数据科学超能力来简化他寻找新家的过程。

文章中包含了用于从数据中推断洞察力的精确步骤和技术。Andrea 清晰的解释使这篇文章变得有趣且容易阅读。

阅读并跟随 Andrea 的探索性数据分析之旅,将介绍一个使用 Data Studio、Pandas、Python、API 等工具和库的数据可视化和分析世界。

这篇文章是一个很好的例子,描述了如何使用数据来做出更精确、更合理和更科学的决策。

中国的教育科技独角兽证明了远程学*是可行的

人工智能在教育中占有一席之地。

开复通过成长中的独角兽提供的人工智能驱动的教育平台,探索人工智能在教育领域的当前和潜在影响。

李开复简要谈到了如何利用人工智能来提供为孩子量身定制的个性化学*体验。本文介绍了计算机视觉、音频识别和语音合成等人工智能技术帮助儿童学*的方法。

这篇文章强调了教育中的人工智能不会取代传统教师的观点;相反,人工智能将作为一个支持实体,实施成本节约战略,使教育更容易获得。

https://kaifulee.medium.com/chinas-ed-tech-unicorns-prove-that-remote-learning-can-work-b62723c0b311

Hardiv Harshakumar 拍摄的自动驾驶汽车的幕后故事

自动驾驶汽车如何理解道路场景?它们如何在人造道路上行走?他们如何处理实时中断?

Hardiv 分解了为自动驾驶汽车提供自主能力的五个组成部分。通过简单的解释、详细的定义和插图,Hardiv 以一种易于理解的方式向读者展示了与自动驾驶汽车相关的复杂主题和想法。

探讨的主题包括计算机视觉、路径规划算法、自动化水平等。

https://medium.com/tech-student-uk/behind-the-scenes-of-autonomous-vehicles-41b625b549f8

Adobe Photoshop 实现了 5 个新的人工智能工具,并通过pytoslabs击败了竞争对手

AI 支持创意

人工智能在创意人员的工作中有一席之地。PythosLabs 的文章介绍了 Adobe Photoshop 中基于人工智能技术的新功能。

本文介绍了这些人工智能技术,使用图像样本描述了每个功能的运行。看到计算机视觉和深度学*技术的直接适用性非常有趣,如风格转移、GANs、语义分割等。

还参考了所展示的功能所基于的研究成果。

https://pythoslabs.medium.com/adobe-photoshop-implemented-5-new-ai-tools-and-it-is-killing-the-competition-ec722af7ec6

机器学*工程师:让你的梦想成真

如果你对机器学*工程师和数据科学家之间的区别感到困惑,请阅读本文。

自从人工智能跳出研究实验室进入日常生活以来,就一直需要有技能开发和维护模型和人工智能系统的个人。

Pratamamia 的文章解决了机器学*中两个突出角色之间的模糊性,即 ML 工程师和数据科学家。

通过轶事和第一手经验,Pratamamia 展示了人工智能团队中 ML 工程师的职责和角色。这篇文章解释了一个典型的 ML 工程师角色是什么样子的,包括与其他不同角色的交互。

在考虑是做数据科学家还是 ML 工程师?那么本文将清楚地呈现这两种角色之间的区别。

https://medium.com/life-at-telkomsel/machine-learning-engineer-making-your-dreams-come-true-108bfae76f1c

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮箱列表 获取每周简讯
  2. 跟我上
  3. LinkedIn Twitter 上连接并联系我

为数据科学家推荐的 5 篇文章(2 月 8 日)

原文:https://towardsdatascience.com/5-recommended-articles-for-data-scientists-feb-8-660d03953ab2?source=collection_archive---------51-----------------------

每周数据科学、机器学*和 AI 推荐文章

作者图片

介绍

与数据科学领域以及更广泛的机器学*领域相关的大量主题和学科,允许媒体上的技术作者在文章中涵盖有趣的主题。

以下是五篇不应错过的专注于数据科学的文章。本文涵盖的主题从网络安全到数据科学项目管理。

注意:请随意使用评论区来分享你本周遇到的任何值得分享的 ML 和 DS 文章。

快乐阅读。

在数据科学中,要么专门化,要么死亡

这篇文章的中心观点是专业化对于数据科学领域的发展至关重要。

亚当更喜欢专业化的道路,而不是一般化;在本文中,Adam 的观点是,拥有广泛的数据科学知识而没有核心领域的专业知识可能不利于从业者在学*方面的进步。

在我看来,亚当是对的,机器学*或 DS 职业生涯的典型轨迹最终会缩小到某个领域的专业。也就是说,对于入门级的角色,一般的数据科学知识可能同样重要。

仔细阅读这篇文章,并在评论区分享你的想法和观点。答案没有对错之分。

人工智能如何从遗传学中学*

Adam Dhalla 的文章介绍了与遗传搜索算法相关的概念、思想和技术。

在进入本文的技术部分之前,Adam 先介绍了 DNA 组成、结构和形成的世界。亚当提出了遗传学和基于算法的问题解决方法之间的联系。

从这篇文章中可以获得丰富的知识。Adam 将生物学、算法和代码结合到一篇详细的文章中,简单易懂地介绍了一个有点复杂的主题。

https://adamdhalla.medium.com/how-ai-can-learn-from-genetics-b24f31adf494

我是如何通过识别尼舒·贾恩的一个愚蠢模式而意外入侵一个政府应用程序的

作为数据科学家,我们最终*惯于在系统中获取模式,无论是在计算、机械还是生物系统中。Nishu 的模式识别能力导致了对政府移动应用程序中实施的薄弱安全措施的利用。

Nishu 的文章详细介绍了检测到该模式的方法,以及利用的安全漏洞。像一个守法的好公民一样,Nishu 向相关部门报告了应用程序缺陷。

这篇文章非常值得一读,因为它传达了应用程序安全性中模式检测和匹配的应用。Nishu 甚至包括了他编写的代码,用来攻击文章中提到的政府创建的应用程序。

https://medium.com/towards-artificial-intelligence/how-i-accidentally-hacked-a-government-app-by-recognizing-a-silly-pattern-4bb5cd293022

三个数据科学家原型雅各布·摩尔

Jacob 撰写的这篇观点鲜明的文章提出了数据科学家可以分为的三个类别,或者至少具有与这些类别相关的特征和特性。

无论您是否同意 Jacob 提出的类别,本文中对每个原型的介绍都提供了大量信息。这些信息包括每个类别的利弊,这反过来又可以为职业决策提供见解

阅读这篇文章,找到你属于哪种数据科学原型,谁知道呢,你可能会感到惊讶。

成功数据科学项目的 7 个步骤 Amit Bharadwa

Amit 介绍了数据科学项目中涉及的标准步骤和流程,以及决定 DS 项目成功结果的有用的通用技巧。

Amit 的文章包括每个步骤的描述、提示和数据科学家在开展项目时会听到的常用技术术语的简要定义。

</7-steps-to-a-successful-data-science-project-b452a9b57149>

希望你已经在上面的每篇文章中找到了有用的信息(或者至少是娱乐)。

下周见!

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮箱列表 获取每周简讯
  2. 跟我上
  3. LinkedIn Twitter 上连接并联系我

数据科学家面试中需要注意的 5 个危险信号

原文:https://towardsdatascience.com/5-red-flags-to-look-for-in-a-data-scientist-interview-5e4e54d02ac2?source=collection_archive---------33-----------------------

因为你在下一个角色中不想要的东西同样重要

肖恩·奥尔登多夫在 Unsplash 上拍摄的照片

当我们寻找下一个角色时,我们似乎忘记了一件事,那就是求职面试对求职者和雇主一样重要。我们倾向于全神贯注于面试,以至于没有意识到潜在的危险信号;然后,我们可能会以一个不是我们所期望的角色结束,促使我们很快与工作闹翻。虽然这通常适用于所有工作,但对于数据科学家来说尤其如此。

研究显示,数据科学家不会在他们的工作岗位上呆很长时间,在分析/数据科学工作中的平均停留时间为 1-2 年。期望和现实之间的差距似乎是如此高的离职率的主要驱动因素之一:我们被许诺 21 世纪最性感的工作,但更多的时候,我们最终在 Excel 中编写报告,或者从事永远不会看到(生产)日的模型。

如果我们对目前的角色感到沮丧,这是可以理解的,我们可能会继续前进,找到一个更好的角色。但是,我们如何确保我们的下一个角色是一个很好的匹配,我们不会走进更多的相同?

作为考生,在面试过程中要积极寻找信号。但是,尽管发现有利的一面相当容易,但识别应该发出警报并促使进一步调查的危险信号却不那么容易。因此,这里有 5 个科学家应该注意的常见危险信号。

1。工作描述含糊不清,过于笼统。

就像你是根据你的简历被选中的一样,你应该从职位描述开始选择过程。如果它太模糊,列出不切实际的需求(例如几乎每一种现有的或废弃的编程语言),使用诸如大数据人工智能这样的流行语,没有真正的原因,就不要打扰了。可能有人决定他们需要一名数据科学家(因为这是当今酷公司所做的),但他们不知道他们需要数据科学家的哪些技能,也不知道他们为什么需要一名数据科学家。你可能想深入挖掘你将面临的挑战或你将从事的项目,并试图让它们具体化。如果他们做不到,那么你很有可能根本无法从事任何数据科学研究。

2。工作面试太容易了。

如果面试官没有探究你对这个话题的了解有多深,并且让你轻易离开,要么你面试的职位低于你的级别,要么他们自己没有足够的经验。在这两种情况下,你可能都想走开。在第一种情况下,工作可能没有足够的挑战性,你很快就会发现自己很无聊。在第二种情况下,假设面试官比你年长,你可能希望他们更有经验,以便向他们学*,成长为一名科学家。让他们描述一下他们典型的工作日,或者让他们给你讲讲过去的项目和当前的挑战,以此来了解你在那里可以实际做些什么。

3。他们声称是数据驱动的。

大多数公司声称是数据驱动的,但很少公司是这样。当然,分析功能将是数据驱动的(希望如此),但你将与其他部门合作吗?幸运的是,这很容易在面试中发现。询问他们如何利用数据做出决策的具体例子。如果他们不能提供任何,你就知道这不是真的。所以,除非不断地向人们解释你工作的价值是你喜欢做的事情,否则你可能会想通过。

4。他们正在进行数据迁移。

现在,这并不坏本身(实际上完全相反),但这意味着,如果您在迁移过程中加入,您可能会在几个月到几年的时间内一直使用遗留系统,这取决于迁移的状态。数据问题将会令人沮丧地普遍存在,自动化您生成的任何东西将几乎是不可能的,因为大多数东西将被搁置,直到迁移结束。在面试中询问迁移的进展是一个好主意:询问迁移何时开始,预计还需要几个月时间(也要注意这些事情往往比预期的要长得多)。如果他们刚刚开始,而你又迫不及待地想上云,那么最好去别的地方看看。

5。他们想让你产生“洞察力”。

作为一名数据科学家,您应该希望从事具有明确业务目标、明确交付成果和可衡量影响的项目。这些是你的下一任雇主会在你的简历中寻找的东西。然而,洞察力却不具备这些品质。请求背后通常没有明确的目标,而是模糊的“很高兴知道”,如果范围划分不当,陷入“看 X 会很有趣”的永无止境循环的风险非常高。此外,更重要的是,很难量化洞察力的影响。它会存在于一些董事的头脑中,可能会也可能不会影响他们未来的决策。如果这就是你被要求做的全部工作,那么你很可能会成为一名薪酬过高的分析师,而不是一名数据科学家。

这些标志本身并不一定是坏的,但它们绝对应该敲响警钟。然而,仅仅因为你发现了危险信号,并不意味着这份工作不适合你:每个角色都有优点和缺点,积极的方面可能会超过消极的方面。所以,提出你的问题,收集你的数据,像一个优秀的数据科学家一样,得出你的结论,做出你的决定。世上没有完美的工作,只有适合你和你职业生涯中某个特定阶段的抱负的工作。

总之,记住工作面试是你发现潜在新工作的机会,所以要充分利用它。不要害怕问难以回答的问题;没有人会因此对你做出不好的评价,但是在面试期间(或者公平地说,在面试之前)做一点研究可以帮你省去很多痛苦。

关于如何让你的简历脱颖而出的建议,请查看我的另一篇文章。

帮助您学*和掌握 Git 和版本控制的 5 个资源

原文:https://towardsdatascience.com/5-resources-to-help-you-learn-and-master-git-and-version-control-c9824caaca28?source=collection_archive---------19-----------------------

有了这些资源,版本控制就不那么麻烦了。

照片由来自 PexelsMarkus Winkler 拍摄

如果你是一名技术人员、程序员、数据科学家或者 web 或应用程序开发人员,那么你应该知道你需要掌握的基本技能之一是版本控制,或者特别是 Git。当然,有不同种类的版本控制系统,但是 Git 可能是最广为人知和使用最多的一个。

Git 是 DVCS(分布式版本控制系统)的一个例子。在分布式版本控制系统中,你的软件的历史并不是存储和保存在一个单独的设备上;相反,它是分布在不同机器和不同用户上的。例如,使用 Git,每个开发团队成员都处理代码的一个副本,该副本包含自代码最初创建以来发生的所有变更的历史。

从性能、安全性和灵活性的角度来看,Git 的设计优于其他版本控制系统。如果你像我一样,那么在你的技术之旅中,你试图学* Git,并试图通过实践来掌握它。如果你像我一样,那么也许你一直在努力掌握 Git,有时会感到沮丧。

</5-ways-you-can-contribute-to-open-source-that-doesnt-involve-writing-code-18112748bf12>

当然,并不是每个人都纠结于理解和掌握 Git,但实际上很多人都是这样。这种斗争的原因往往是当我们学*使用相同的方法论。也就是“记住基础知识,随着时间的推移你会做得更好。”尽管这是学*任何东西的有效方法,但有时这不是学*的最佳方式。

因此,当我想要构建坚实的 Git 知识时,我查阅了许多资源来寻找那些使理解 Git 的内部机制变得简单明了的资源。在本文中,我将与您分享其中的一些资源。

№1:像饭桶一样思考

让我们从我最喜欢的一个学* Git 的网站开始,像(a) Git 一样思考。关于这个网站,我最喜欢的部分是他们的标志,或者说座右铭,“Git 不应该这么难学。”作为每个程序员都需要知道的技能,我再同意不过了。

Git 是基于图论的不同概念构建的,图论是一个处理图形的数学领域。想想看(a) Git 用了整整一章来讨论图论以及节点和边是如何运作的,所以 Git 在后面更有意义。在讨论了图论之后,网站用例子解释了 Git 的基础知识和每个概念的一些用法。

№2: GitHub 文档

学* Git 的一个很好的资源是 GitHub 文档。GitHub 团队经历了很多麻烦,让学*和掌握 GitHub 对每个人来说都是可管理的。他们的努力通常会有回报。如果你想从源头上学* GitHub,没有比 GitHub docs 更好的了。

g itHub 文档解决了您关于 Git 和 GitHub 使用的所有问题,从本地安装 Git 和 GitHub 到创建存储库,再到创建分支、合并分支、拉请求,以及在本地和 GitHub 服务器上同步代码库。这些文档通过 GitHub 的快照,使用可视化的方法来提供这些主题。

</5-simple-steps-to-package-and-publish-your-python-code-to-pypi-d9f5c43f9d4>

№3: Git 塔

如果你是 Git 和编程的初学者,并且更喜欢用书作为学*方法,那么这个资源就是为你准备的。 Git Tower 是一本免费的在线可视化书籍,面向 Git 初学者,以简单、直接的方式教你不同的 Git 和版本控制基础知识。

Git Tower 是 Git 和版本控制相关的一切的可视化解释。从什么是版本控制的绝对开始,到我们为什么需要从它开始,然后深入到什么是 Git,它的基础,以及与其相关的更高级的主题。Git Tower 提供教程、视频和备忘单来帮助您成为一名专业的 Git 用户。

№4:可视化 Git 参考

到目前为止,我们浏览了详细讨论和解释 Git 和版本控制的资源,从什么是版本控制开始,到关于 GitHub 的更精确的主题。但是,假设你现在需要使用 GitHub,并且你想要一些简单的、切中要害的东西,并且可以在几分钟内完成,那么可视化 Git 参考就是为你准备的。

Visual git Reference 是一个单页网站,直观地解释了 git 的基本概念。它解决了 Git 最常见的用法,比如提交、签出、合并、获得版本之间的差异,以及以一种您可以立即使用的简单方式重新设置基础。

</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器

towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)

№5:学* Git 分支

正如我们前面提到的,Git 和 GitHub 是基于图论构建的,图论是一种可视化的数学表示。GitHub 的基本工作机制之一是分支、创建、合并和处理它们。学* Git 分支是学*和掌握 Git 分支的一个很好的可视化、交互式资源。

这个资源可能是我和我的学生受益最大的资源;这样,它教授了分支,并且可视化地处理它们使得概念本身易于掌握和使用。此外,网站级别以一种逻辑的方式前进,对于绝对的初学者和专业人士来说都很容易理解。

外卖食品

对于任何加入技术领域的人来说,版本控制是一个更具挑战性的概念。作为一名计算机科学教师,Git 是我的大多数学生努力奋斗并被这个领域淹没的地方。为了让我的学生和我自己更容易,我寻找不同的资源来用各种方法解释 Git,纯文本资源、可视化资源和交互式资源。

我们都是不同的;我们有不同的学*和吸收信息的方式;有些人更喜欢看书,认为这是学*的最好方式。其他人更喜欢看视频或动画,因为他们更好地理解视觉呈现的东西。有些人通过尝试学*,有些人通过倾听学*,等等。

</5-data-science-open-source-projects-you-to-contribute-to-boost-your-resume-d757697fb1e3>

我浏览了数百种材料和资源,无论是在我试图学* Git 的时候,还是在我试图找到解释 Git 并将其传授给其他人的最佳方法的时候。在本文中,我与您分享了一些学*和掌握 Git 的材料和资源,Git 解决了广泛的交付方法。有的是纯文字教程,有的是直观讲解,有的是边做边教。

所以,如果你是技术领域的新手,或者对 Git 知识还不太了解的人,可以尝试一下本文中的一些资源;也许其中一个会帮助你强化知识,更好的理解 Git 和版本控制。

对熊猫的数据帧进行排序需要知道的 5 个秘密

原文:https://towardsdatascience.com/5-secrets-you-need-to-know-about-sorting-pandas-dataframe-bd67dde0b56d?source=collection_archive---------23-----------------------

编程;编排

通过一列、多列和类别轻松排序 Pandas 中的数据帧

安德烈·泰森在 Unsplash 上拍摄的照片

掌握如何在 5 分钟内对熊猫的数据帧进行排序!!

数据帧排序— 将数据帧按有意义的顺序排列的过程,以便您可以更有效地分析它💡

一个内置的方法sort_values()对于以特定的顺序排序 Pandas 中的数据帧非常有用,例如升序或降序!

使用sort_values()排序本身非常简单,但是,在实践中,您可能会遇到缺少值、自定义标签(例如 H、L、M 代表高、低和中)的问题。

以下是在 5 分钟内掌握熊猫数据帧排序的 5 种方法!💡

让我们跳进来吧!!

完整的笔记本📚带着所有这些招数在文末!

首先,让我们创建一个如下所示的数据帧,

熊猫数据框|作者图片

基于一列对 Pandas 中的数据帧进行排序

这是最简单的sort_values()方法。你需要做的就是

熊猫。data frame . sort _ values(column _ name)

并且基于 column_name 中的值对整个数据帧进行排序。

让我们根据列龄对上面的数据帧进行排序。

如何根据一列|作者图片对熊猫数据帧进行排序

默认排序顺序是升序!🚩

为了将df按年龄列中值的降序(从大到小)排列,您将在sort_values()中提供附加参数。

举个例子,

如何按作者降序排列熊猫数据帧|图片

你需要做的就是将参数ascending 设为假

基于多列对 Pandas 中的数据帧进行排序

将列列表传递给 sort_values()!!

让我们根据列重量高度中的值对df进行排序。

根据多列对熊猫数据框进行排序|按作者排序图片

数据帧首先按列重量排序,然后按高度排序。

秩序很重要!

看,当你使用不同的列顺序时,结果是多么的不同!

按多列排序熊猫数据框|按作者排序图片

此外,您还可以按不同的顺序对多列进行排序。

基于不同顺序的多个列对 Pandas 中的数据帧进行排序

通常,您需要按不同的顺序按多个列对数据帧进行排序。

记住 sort_values()参数“升序”

例如:按照栏重量的升序和栏高度的降序对df 进行排序。

如何在 Python 中按多列排序熊猫数据帧|按作者排序图片

DataFrame df首先按照列权重的升序排序。保持不变,df再次按照列高的降序排序。

在排序中处理缺失值

处理缺失值或NaN无法与其他值进行比较,因此默认情况下,sort_values()在排序后将NaN放在数据帧的末尾。

例如,修改现有的 DataFrame 以包含NaN及其在 age 列上的排序。

df.loc[5,'age'] = np.nan

按作者处理 sort_values() | Image 中的 NaN

不管排序的顺序如何,NaN总是放在最后🚩数据帧的。

这可以使用sort_values()中的参数na_position 进行更改。

将 NaN 值放在 Pandas data frame sort _ values()| Image by Author

在 geeksforgeeks.org的这本有趣的读物中,你可以找到上面提到的对熊猫的数据帧进行分类的技巧的所有使用案例

使用“Inplace ”,但是要小心!

到目前为止,您可能已经注意到,每次我们需要将排序后的数据帧分配给一个新的数据帧时,现有的数据帧都不会更新。

为了避免这种情况,您可以将inplace参数设置为True

照片由杰森·登特Unsplash 上拍摄

inplace = True就地修改数据,这意味着它不返回任何内容&数据帧得到更新。🚩

但是,这是单行道!您无法撤消此更改!

自定义排序:使用分类值对 Pandas 中的数据帧进行排序

有时,您可能会遇到值 S,M,L ,如我们的数据帧的 shirt_size 列中所示。

处理 S < M < L 比较的最简单方法是给 S、M 和 L 中的每一个分配一个数字。🚩

看这里怎么做→

如何在熊猫数据框|作者图片中进行自定义排序

衬衫 _ 尺寸 _ 代码列可用于根据衬衫 _ 尺寸列对数据帧进行排序。

sort_values()中其他不常用的参数是kindaxis。关于它的更多信息可以在这里https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html。📌

结论,

在本文中,我解释了在 Python 中掌握sort_values()到在 Pandas 中对数据帧进行排序的所有选项。你可以尝试这些,也让我知道你用哪些其他方法来加速你的 EDA!**

现在你可以通过 在这里报名 成为媒介会员,阅读我和其他作家发表的所有故事。当你这样做,我会得到你的费用的一小部分,没有任何额外的费用给你。欢迎加入我的电子邮件列表,了解我写作的最新进展。

我最*发现了这个非常有用的分类熊猫数据帧的指南。这可能也会让你感兴趣。

*

📚完整的 笔记本 就在这里。*

感谢您的阅读和投入您的时间!!

训练机器学*模型时要做的 5 件超级高效的事情

原文:https://towardsdatascience.com/5-short-but-super-productive-things-to-do-during-model-training-b02e2d7f0d06?source=collection_archive---------24-----------------------

极其漫长的等待变成了生产力会议

2.代码蠕虫

照片由 凯利 像素

机器学*是一个迭代的过程。最痛苦的是,每一次迭代都非常漫长。无论你是在训练一个神经网络,调整超参数,还是进行无数次的实验,都需要时间。考虑到数据集不会变得更小,你的机器学*未来将涉及大量盯着笔记本电池的小角落。

那么,如何最好地度过这段时间而不是等待呢?在这篇文章中,我将回答这个问题。具体来说,我将向您展示 5 项活动,这些活动将提升您的技术技能,让您在专业上成长为一名数据科学家。这些活动简短而有趣,每一个都是为了适应一个普通模型运行的持续时间而选择的。

https://ibexorigin.medium.com/membership

获得由强大的 AI-Alpha 信号选择和总结的最佳和最新的 ML 和 AI 论文:

https://alphasignal.ai/?referrer=Bex

开始之前…

在开始任何模型训练、超参数调整或实验之前,做好准备非常重要。在您点击 run 之前,您应该确保您执行的每个单元格和代码块都将提供您期望的结果。否则,你会浪费时间。

在深入研究之前,有许多考虑因素,这篇关于机器学*掌握的博客告诉你如何最好地设计每个实验,以及如何明智地做出决定。

此外,如果您正在 Jupyter 笔记本中训练模型,启用单元格通知可能是个好主意。当你在做我们将在本文中讨论的活动时,它们会特别有用。您肯定不想因为在执行过程中被卡住而错过执行结束。这里有一篇由帕鲁尔·潘迪撰写的优秀文章,展示了如何在经典 Jupyter 和 Jupyter 实验室中启用这一功能。现在,让我们开始吧!

1️⃣.专业的

数据科学最容易被忽视的方面是建立关系网和发展强大的职业身份。在我看来,一个全面发展的数据科学家必须具备以下四点作为其职业形象的一部分:

  • 职业 LinkedIn 页面
  • 定期更新简历
  • 脱颖而出的 GitHub 页面
  • 强大的投资组合

这些对于让你在人群中脱颖而出并有效地向他人展示你的技能至关重要。成功地提升和磨练你的职业形象需要时间,老实说,这可能会很无聊。原因是撰写 LinkedIn 个人资料摘要或开发投资组合网站有点超出了许多数据科学家的舒适区,这是可以理解的。

每当你在 ML 实验中陷入等待时,你可以从小事做起,一步一步来。开始上传一个职业形象到你的 LinkedIn 个人资料中,并创建一个与你的个性相符的 LinkedIn 横幅。逐句写出你的 LinkedIn 总结,一周内把它变成对自己最好的描述。以展示可量化的成就和进步的方式更新你的经历部分。如果你对 LinkedIn 感到不舒服(像我一样),看看这个关于建立卓越的 LinkedIn 档案的视频

下次你在培训 XGBoost 回归器时,花点时间更新你的简历。我确信你一直在做一些很酷的项目,是时候把它们作为一个很好的总结了。这对于没有太多经验的新手来说尤其重要。有很多制作简历的好方法,但我是用 Terence Kuo 的模板制作的,他用这个模板去面试 FAANG 公司。

在模型运行期间,访问你的 GitHub 帐户(是时候了,因为你已经…几个月没有访问它了……).可悲的是,这是许多数据科学家的情况,尤其是初学者。我们不写太多的产品代码,也不做软件工程,所以我们的 GitHub 档案就闲置在那里,我们的贡献图看起来不像死海那样无色。然而,马丁·海因茨撰写的这篇很棒的文章展示了如何将你的 GitHub 主页转变成一份完整的作品集或简历。

马丁·海因茨的 GitHub 简介截图

你也可以更进一步,建立并托管你自己的作品集网站。拥有一个展示你的技能和项目的优秀作品集是任何写代码的人的普遍要求。你可以看看这个由 khu yen Tran撰写的教程,它教你如何建立一个简约的作品集网站。最棒的是,在代码运行时,您可以在短时间内处理它。

2️⃣.代码蠕虫

不读书就成不了大作家。这同样适用于编码——要熟练掌握它,你需要让自己接触别人写的代码。

到处都是简单易学的库,我们可能会产生一种错觉,以为自己擅长编码。但是如果不与他人比较,我们就无法真正了解自己到底有多糟糕。

在盯着笔记本标签的同时,开始阅读别人的作品。有很多平台和网站可以找到高质量的代码。我最喜欢的是阅读 Kaggle 内核,尤其是那些提交给每月表格操场竞赛的。由于比赛仅持续一个月,笔记本电脑往往会对当今数据科学中可行和不可行的内容进行最新概述。

作者截图

叉开笔记本,摆弄它们。你可能不会经常找到重大突破,但可以肯定的是,你会学到一些方便的技巧或新功能,让你的生活变得更轻松。

还有 Streamlit 的官方图库。那里贴的项目都是精挑细选的,和很多行业相关的 ML 和深度学*方面的高质量作品。您可以了解更多关于生产级 ML 和部署最佳实践的知识。

作者截图

就硬编码而言,我们都到了根本没有改进的地步。阅读他人的代码可以向我们展示与我们喜爱的包和框架的标准 API 进行交互的新颖方式。通过养成在项目工作时阅读代码的*惯,成为一名代码虫。

3️⃣.捐助者

不,这一节不是让你为开源包和框架做贡献而感到内疚。对于许多数据科学家和 ML 工程师,以及我自己来说,我知道在 GitHub 上提交 pull 请求和参与问题讨论是绝对可怕的。我不会向你鼓吹数据科学在多大程度上归功于开源社区,比如 Scikit-learn、Numpy、Pandas 等等。

这项活动是关于通过帮助他人来建立声誉和增长技能。你可以从小处着手,而不是像在 GitHub 上解决你最喜欢的包的问题那样高瞻远瞩。通过回答问答网站上的问题来刺激你的大脑,学*新的东西。

过滤 StackOverflow 上的问题,找出你最感兴趣的话题,开始写下你自己版本的答案。问题被回答了多少次并不重要,重要的是你把你的想法写了下来。写一些你知道的事情可以巩固你的知识,或者显示出你对那个话题有多不知道。回答一个问题只需要几分钟,你可以在训练 CNN 的时候随便涂鸦,一天做好几个问题。

还有,不要把自己仅仅局限于此。如果你有一堆 ML 理论和统计学知识,可以去查一下交叉验证。如果你是一名经验丰富的职业人士,并且能够在职业上帮助他人,那么就去主宰 Quora 空间吧。

无论你选择什么平台,都要让你的名字出现在那里。帮助并让别人了解你自己的品牌和想法。这能确保你在人群中脱颖而出,让你的简历更加精彩。

(顺便说一句,过去我告诉自己的最愚蠢的事情之一,我相信许多人仍然这样认为,就是没有什么好问题需要回答了。这简直太荒谬了,因为仅在 StackOverflow 上,每 14 秒就有一个新问题被提出来……)

4️⃣.准备

我们所有人都有很多东西要学。核心数学主题、监督学*算法、深度学*的深度世界——所有这些都让我们在试图获得该领域工作时非常忙碌。一旦我们开始找工作,我们意识到我们也需要为面试做准备。这意味着许多人熬夜学*算法,用 Python 和 SQL 解决实践问题,所有这些都是困难而有趣的事情。它们足以将大部分来之不易的数据科学知识赶出我们的大脑,因为我们太专注于找工作了。

但是,你不需要在找工作之前就开始这个过程。不要浪费时间,你可以登录 LeetCode 开始破解一个问题,就像你的机器在训练你的模型一样。这可以确保你在学*核心数据科学主题的同时,不会让你的大脑生锈,不会让你的解决问题的肌肉弯曲。

LeetCode 上的一些问题可能很难,所以你可能要花不止一节课来解决一个问题。一个有用的技巧是使用纸笔(老派)来勾画解决方案,而不是漫无目的地写代码。

每当你工作繁重时,养成这种*惯可以让你更早地为找工作做好准备。

5️⃣.从冰上拿东西

我确信我们都面临这个问题——你读到一篇文章或看到一条关于某个伟大的图书馆或主题的推文,然后对自己说:“我得看看这个!”。你把这个页面加入书签,然后惊奇地发现,在你最终访问它之前,它会在那里呆上几个月(或者永远不会)。

嗯,你可以马上改掉这个坏*惯。下次您进行超参数调优时,去看看您最*引入的新库。你在训练新模特吗?太好了,去看深度学*上保存的 YouTube 播放列表。

这是一种非常有效的方式来做你已经搁置了很长时间的事情。比如我就是这样了解到 Plotly 的,这几天我会认真看看,但是我知道我又会失望了(为什么?我将在以后的文章中谈到这一点)。我还计划看看 Kaggle 上现在非常流行的 3 个新库——CatBoost、LightGBM 和 Optuna。我还在 Twitter 上获得了一些关于深度学*的书签主题。

有一点是肯定的——我永远不会在我的常规时间表内做这些事情。我订阅了很棒的 MOOCs,并且要写这些文章。就我个人而言,我能赶上我的愿望清单的唯一方法是当我在等待事情完成的时候。

摘要

模型训练和超参数调优应该不会无聊。你可以通过简单的活动将漫长的等待变成高效的会议。我们今天讨论的这些可以帮助你提高你的技术技能和发展你的职业身份。数据科学世界竞争激烈,你应该利用一切机会投资自己。感谢您的阅读!

您可能也会感兴趣…

加速 MATLAB 代码的 5 个简单技巧

原文:https://towardsdatascience.com/5-simple-hacks-to-speed-up-your-matlab-code-f160103b13bf?source=collection_archive---------11-----------------------

万一你“感觉需要速度”

“德国空军的台风 EF2000 欧洲战斗机起飞”。图像由猎鹰摄影和作者修改。来源 Flickr 。这张图片是在知识共享 署名-共享 2.0 通用许可下授权的。

我还记得当初加入航天行业,开始用 Matlab 编程时那种奇妙的感觉。在几秒钟内编写一个函数感觉太容易了,而用 FORTRAN 77 编写这个函数至少要花我两倍的时间。是的,你没看错,那种老派的编程语言。信不信由你,FORTRAN 现在仍然是许多 90 年代航空航天项目遗留工具的支柱。

随着时间的推移,这些遗留工具被抛弃,取而代之的是用现代编程语言编码的新工具集,这不是因为这些遗留工具毫无用处,而是因为对于新一代工程师来说,它们看起来像是僵硬的黑匣子。

在这些情况下,Matlab 可能是一个不错的选择,它有简单的语法、快速的学*曲线、上百个工具箱、令人难以置信的文档以及非常活跃的程序员社区。所以,这似乎是一个非常好的候选人,对不对?嗯,一如既往,这取决于对这些工具的具体要求,有时速度是必须的。

尽管 Matlab 对于原型和交互式分析非常有用,但在某些应用中,它似乎太慢了。

因此,如果你“觉得需要速度,这里有五个建议来提高你的 MATLAB 代码的性能,让你感觉自己像一个“绝地程序员”。

1。用 jsystem 进行系统调用

如果你的 MATLAB 代码大量调用系统函数,那么性能下降可能会很明显,因为 Matlab 的 系统 函数会带来很大的开销。使用由基于 Java 的 avivrosenberg 创建的更快的 jsystem 函数可以绕过这一开销。

这对于 系统 功能来说是一个简单的插件,因为它具有相同的语法,并且还可以让您更加灵活地选择特定的 shell 来运行命令。

2。循环矩阵

计算机内存使用单维数组存储数据。默认情况下,Matlab 使用以列为主的数组布局存储这些元素。这意味着什么?简而言之,在列主顺序模式中,每一列的元素在内存中是连续的。相反,在以行为主的数组布局中(C、C++或 Python),内存中的连续元素对应于每一行的元素。

为了提高代码速度,以正确的顺序访问数组元素以最小化不连续元素之间的巨大跳跃是很重要的。

MATLAB 的黄金法则是总是将较快循环的索引分配给矩阵维数的最左边部分,将最慢的分配给最右边部分。这个规则也适用于张量。

例如,在下面的矩阵元素赋值中,当使用列优先顺序时,我们获得了接* x6 的加速。这是一个很好的简单的技巧,可以添加到您的日常编程规则中。

3。1D 线性插补

无论您是为进行科学计算、股票市场分析还是统计而编写脚本,在某些时候您都需要利用插值函数来获取数据未涵盖的中间点的信息。

线性插值和双线性插值的比较一些 1 维和 2 维插值。黑色和红色/黄色/绿色/蓝色点分别对应于插值点和相邻样本。它们离地面的高度与它们的价值相对应”。图片来源:维基百科

对于一维线性插补的具体情况,Matlab 有 interp1 函数。但是再一次的, interp1 在线性插值的很多应用中被证明是慢的。

使用 histc 函数定位 x 断点向量中最*个体的索引,可以提高interp 1的性能。这个巧妙的技巧已经应用在由何塞·m·米埃尔创建的interp1qr函数的核心中,实现了令人难以置信的 x11 性能提升,如以下脚本所示。**

4。不要使用逻辑临时数组

很多时候,在处理大型稀疏数组时,我需要检查任何非零元素,如下例所示:

对于 Matlab 来说,计算这个操作似乎并不需要很多时间,但是如果你有一个大的数组,并且这个零测试在你的代码中重复多次,计算时间可能会开始增加。

当在一个数组中寻找任何非零元素时,你可能希望一旦找到第一个非零元素,Matlab 会立即停止搜索,对吗?但是当你使用像 a(:)~=0 这样的逻辑临时数组时,这并不是“立即”的。

当在这个表达式中使用逻辑临时数组时,Matlab 首先将数值转换为逻辑数组,这会产生很大的开销。

为了克服这种开销,我们可以利用数值可以作为逻辑值的事实。所以提示是在与零比较时不要使用临时逻辑数组。

在下一个例子中,您可以看到如何使用这个技巧来优化前面的简单代码,以获得令人难以置信的速度。

5。利用数学理论加速卷积

Matlab 在函数【conv】conv2、convn 中卷积的实现依赖于移动窗口方法,使用自动多线程来提高性能(仅当 Matlab 尚未用标志“-singleCompThread”初始化时,有关如何使用此标志的更多信息请参见此处)。

尽管如此,如果我们应用原来的https://en.wikipedia.org/wiki/Convolution_theorem卷积定理,即【conv】(a,b)=IFFT(FFT(a,N),我们可以加快卷积的计算速度。*****FFT(b,N))* ,最初由 Bruno Luong 提出的一个想法***

在以下示例中,我们需要记住对数据进行零填充,以获得可比较的结果:

在这个例子中,相对于【conv】函数,我们获得了令人难以置信的 x1100 加速。这真是一个很大的进步!

加速代码的附加参考

  1. 未备案的 Matlab
  2. Matlab 官方页面
  3. 盖伊在 Simulink 上

Rodney rodríguez Robles是一名航空航天工程师、自行车手、博客作者和尖端技术倡导者,在他小时候唯一梦想的航空航天行业中生活。他谈到了编码、航空史、火箭科学,以及所有让你一天比一天轻松的技术。**

请在以下社交网络上查看我,我很乐意收到您的来信!——LinkedInTwitter。****

为机器学*项目寻找数据的 5 个简单问题

原文:https://towardsdatascience.com/5-simple-questions-to-find-data-for-a-machine-learning-project-d92f0d54c16f?source=collection_archive---------28-----------------------

通过考虑哪些数据可用以及它满足哪些业务需求,找到启动机器学*项目所需的数据。

马库斯·温克勒在 Unsplash 上的照片

许多企业希望创新,机器学*经常作为一个建议出现;但是,如何找到试验机器学*项目所需的数据呢?以下是我发现在为新的机器学*项目寻找数据时有用的 5 个简单问题。

为 ML 项目寻找数据时要问的 5 个问题:

1)您工作的地方正在使用哪些企业系统?

企业系统的使用本身就意味着该工具提供了业务价值,并且数据可能存储在该系统中。即使是中小型公司通常也有一些他们使用的企业工具,这些系统通常在幕后用关系数据库构建。在许多情况下,原始数据可以通过相对简单的 SQL(结构查询语言)访问,或者通过能够提取所需数据的前端报告访问。

2)当高层领导查看数据以帮助决策时,这些数据首先来自哪里?

第一个问题的另一种表述方式是思考高层领导关心的信息,以及这些信息来自哪里。有可能它会把你带回到前面提到的企业系统,或者它会把你带到一个保存有用数据的电子表格。不管来源是什么(关系数据库、电子表格等),至少对于探索对业务重要的问题来说,你有了一个很好的起点。

3)围绕数据是否有某种质量保证流程?

如果答案是否定的,这可能不是放弃项目的直接原因——这仅仅意味着可能需要更多的前期数据清理。

4)哪些类型的流程是经常重复的?

业务通常是围绕一些经过迭代提炼的过程/产品建立的;这意味着可能有一些历史数据可以用于数据分析或机器学*项目。例如,我的大部分工作领域都是在维护行业,在那里预防性措施被例行执行以保持系统和设备运行良好。每个任务在一个工作指令中被捕获,该工作指令具有多条信息(或机器学*术语中的特征),例如数据持续时间成本工时工作类型等。即使只有几百个历史工单也可能是足够的数据来训练机器学*模型,以通过能够预测诸如哪些工单将过期之类的相关信息来优化维护程序。

5)能不能用财务数据?

金融数据是开始机器学*/数据分析项目的一个很好的地方,因为它通常满足上面提到的所有其他数据问题。首先,财务数据有许多内置的数据质量保证,因为其中的错误会对业务产生巨大的负面影响。此外,历史记录通常是准确的,带有时间戳,允许根据不同的用例对数据进行分组。利用财务数据也很可能满足高层领导投资的要求。

如果你正在寻找一个起点,这里有三个机器学*金融数据的潜在用例:

  • 根据历史信息估计下一年的预算(回归)。
  • 预测有用的类别,如延期付款或预算超支(分类)。
  • 识别超出正常范围的支出模式(异常检测)。

回答这五个问题可以是确定机器学*项目从哪里开始的良好开端。作为一个额外的提示:无论你从事什么项目,都称之为机器学*“试点”项目,这样目标就仍然是创新和探索。当你开发这些早期阶段的机器学*计划时,这有助于为你自己、你的团队和你的上级设定现实的期望。即使你的团队中没有人在做机器学*,有了这 5 个问题来指导你,尝试新事物和创新的机会也不是那么遥不可及。

查看和组织熊猫数据框的 5 个简单技巧

原文:https://towardsdatascience.com/5-simple-tips-for-viewing-and-organizing-pandas-dataframes-97f5cd09d51b?source=collection_archive---------32-----------------------

实际上只有 5 件事我希望能早点知道

我喜欢在熊猫图书馆工作。随着我越来越多地使用它,我越来越欣赏它。

在这篇文章中,我将讲述 5 件多少有些随意的事情,当你查看和组织你的熊猫数据框时,它们会让你的生活变得更简单。没有什么真正突破性的东西,但有 5 件简单的事情,当我知道它们存在时,我很感激。

照片由吴颖Unsplash 上拍摄

我最*在连接来自 3 个不同文件的数据时使用了所有这 5 种方法,所以我将提供这个一般过程的具体代码示例。

1.usecols参数

有时,对于任何给定的任务,数据文件中的列数都比您感兴趣的要多。您可以读取整个文件:

作者提供的数据帧截图

或者您可以通过使用usecols参数简单地读取您真正感兴趣的列:

作者提供的数据帧截图

如果你知道你想要什么,并且你不打算使用它的剩余部分,为什么要把东西加载到内存中?

2.快速重命名列

我不太喜欢我们在上面读到的数据帧中的最后两个列名。我不想键入这些,也不想记录大写和小写。我宁愿用小写字母写较短的列名。由于它们都是一个应用程序的标识符,我更希望它们有相似的格式。类似于应用商店 ID 的as_id和 Google Play ID 的gp_id

我可以使用rename()方法,输入一个字典,将原始列名映射到我想要的列名。

但是根据具体的上下文,我通常更喜欢做以下事情:

作者提供的数据帧截图

这两种方法都将产生上述具有所需列名的数据帧。但是将列名直接设置为一个列表,而不使用映射器,这还是令人满意的。

但是,当直接将列名设置为名称列表时,您需要记住两点:

  1. 您必须为每一列提供一个名称。
  2. 顺序问题。

如果你不小心,你很容易把这里的事情弄糟。使用rename()方法,你不必担心那么多。

然而,df.columns =方法在某些情况下特别有用。假设您将数据文件读入一个 Pandas 数据帧,您的列名如下所示:

作者提供的数据帧截图

在这些地方工作会很烦人。但是您可以使用下面的代码快速修复该问题,该代码将所有列名中的所有空格替换为下划线:

app_df.columns = [col.replace(' ', '_') for col in app_df.columns]

或者说你在你的文件中阅读,列名全部是大写字母(或者奇怪和不一致的大写字母)并且很难阅读。您可以使用以下命令将所有列名全部更改为小写:

app_df.columns = [col.lower() for col in app_df.columns]

有了这样的列表理解,您不必担心显式地为每一列提供名称,或者确保列名的顺序正确。当您使用columns属性遍历原始列名时,这将自动发生。

3.更改要显示的最大列数

我是一个极度视觉化的思考者,我喜欢能够看到我正在处理的东西。我在工作时不断地检查数据帧,我经常希望能够一次看到所有可用的列。默认情况下,Pandas 只显示 20 列。

下面我们看到总共有 50 列的数据帧的前 10 列。中间的 30 列是隐藏的(用红色突出显示的省略号表示),如果我们向右滚动,就会看到最后 10 列。

作者提供的数据帧截图

如果我想知道所有列的名称,我可以简单地打印出df.columns,但是那样我也不能看到每一列中的数据类型。因此,我将使用pd.options.display.max_columns = 50一次性显示所有 50 列。

下面我们看到最初默认隐藏的 30 列中的第一部分:

作者提供的数据帧截图

您也可以通过调整pd.options.display.max_rows来调整数据帧显示的最大行数。

4.用双括号对列进行切片和重新排序

你有没有遇到过这样的情况,当你处理一个数据帧时,你知道以后你只能处理列的子集?也许您更希望按照对您更有意义的特定顺序排列这些列的子集?

假设您有下面的数据帧,并且您只想要按顺序排列的app_idreviewratingdate列。

作者提供的数据帧截图

您可以使用双括号和所需列的列表从原始数据帧创建切片:

作者提供的数据帧截图

5.insert()方法

假设我们想要添加一个列来标识我们在上面制作的切片中的评论来自于 App Store。当我们将它与来自 Google Play 的评论连接起来时,这将非常有用,因为我们将知道每个评论来自哪里。为我们的应用商店切片这样做非常简单:

作者提供的数据帧截图

我们创建了一个充满 1 的列,以表明是的,这些评论来自 App Store,而不是 Google Play。以这种方式创建新列总是将它们附加到数据帧的末尾。对于我们刚刚创建的这个指标变量来说,这一切都很好,但我喜欢将相关的东西放在一起。接下来我想创建一个变量,让我知道每个评论字符串有多长。我真的希望这个新列位于reviewrating列之间。

这可以通过insert()方法来实现,该方法有三个参数:

  1. 新列的所需索引
  2. 新列的名称
  3. 用来填充新列的值

在我们的例子中,索引需要为 2,因为我希望新列紧接在第二列之后出现(和正常情况一样,索引从 0 开始)。我们将新列命名为rvw_len。最后,我们将一个 lambda 函数映射到第三个参数。在这里,我们指定要用每行对应的review字符串的长度来填充新列。

作者提供的数据帧截图

成功!我们的新专栏rvw_len被插在其他所有内容的中间,放在一个对我来说有实际意义的地方。

概括一下

  1. 如果您只想从一个文件中读入一组特定的列,那么使用usecols参数和您实际需要的列名列表。
  2. 如果您想重命名所有列,请设置df.columns = [list of desired column names]
  3. 想要看到比熊猫默认显示更多的列(或行)吗?用pd.options.display.max_columns =(或.max_rows)调整显示选项。
  4. 想要一部分特定的列并以特定的顺序获取这些列吗?在数据框架上使用双括号,将所需列的列表放在里面。
  5. 如果您想在特定的索引处插入一个新列,而不是把它作为最后一列,请使用insert()方法。

我希望你能发现这些信息,并能把你学到的东西应用到你自己的工作中。感谢阅读!

增强机器学*实践的 5 个简单技巧

原文:https://towardsdatascience.com/5-simple-tips-to-supercharge-your-machine-learning-practice-fb40e850e491?source=collection_archive---------36-----------------------

争取高质量的数据科学工作

自从我上高中后,我就有一种奇怪的执念,想把我所学的所有东西的关键概念都压缩在一页纸上。回过头来看,这可能是我懒惰的思维方式,以最少的工作量通过考试…但有趣的是,抽象努力也有助于更深层次地学*这些概念,并更长时间地记住它们。如今,当我教授机器学*时,我试图在两条平行的轨道上教授它:a)主要概念和 b)方法和理论细节,并确保我的学生可以通过相同概念的镜头来看待每一种新方法。最*我有机会读了吴恩达的《机器学*的渴望》,这似乎是他的版本,抽象了一些实用的 ML 概念,而没有进入任何公式或实现细节。虽然他们可以看到如此简单和明显,但作为一名 ML 工程师,我可以证明,忽视这些简单的技巧是 ML 研究在生产中失败的最常见原因之一,记住它们是区分优秀数据科学工作和平庸数据科学工作的关键。在这里,我想用一页纸总结一下我从安德鲁的书里学到的东西,分成 5 个重要的小贴士,所以不要再废话,让我们开始吧:

1- 你如何分割你的可用数据…非常重要!

图一。数据分割

E 即使你不是数据科学家,你也可能已经知道,为了衡量你的算法的泛化能力,你应该将你的可用数据分成训练集、开发(验证)集和测试集,你不应该将测试集用于任何模型优化/调整。听起来很明显,我见过很多从业者使用他们的测试集来手动优化超参数,然后报告与泛化性能相同的测试集上的最佳结果…你猜对了…这是作弊!当部署后模型性能下降时,他们仍然会感到惊讶。您应该确保不要将测试集用于任何类型的优化,包括手动超参数优化,这就是您的开发/验证集的用途。

还要注意从您的训练集到开发或测试集的任何数据泄漏。数据泄漏的一个愚蠢的原因可能是数据中存在重复的实例,这在训练集和测试集中都会出现。如果您通过连接来编译最终数据集,请特别小心。

在经典 ML 中,当数据集很小时,我们通常使用 60%-20%-20%进行训练-开发-测试分割,无论是在保留还是交叉验证设置中。吴恩达认为,如果数据集很大,你可以使用小得多的数据集进行开发和测试。然而,您的开发集应该足够大,以检测模型性能中有意义的变化,例如,在您的开发集中有 100 个示例,只允许您检测模型误差的 1%或更大的变化。

您的测试集应该具有与您的模型在部署时将遇到的实际群体相似的分布,并且应该足够大,以使您对您的模型性能估计有信心。

最后但同样重要的是,确保利用分层抽样,这可以通过使用 scikit-learn 或其他库中的内置函数轻松完成。假设您的可用数据是总体的无偏样本,分层抽样确保您在培训/开发/测试分割中分布无偏性。

因此,概括地说,为了拆分您的数据:a)确保您的数据拆分是完全隔离的,b)您的测试(和开发)集具有与您的目标人群相似的分布,c)使用训练集来优化模型参数,使用开发集来优化超参数,使用测试集来测量最终模型性能。

2 - 估计每个偏倚、方差和数据失配误差 分量,以便有效地调试你的模型

泛化误差=偏倚+方差+数据不匹配

Y 你可能已经听说过前两个组成部分:偏差误差是分类器缺乏学*生成数据的基础函数的能力,例如,当试图学*多项式函数生成的关系时,线性回归模型会有很高的偏差误差。方差误差类似于统计学中的采样误差,是由有限的样本大小引起的,当分类器对特定的训练样本学*得太好,结果失去了对看不见的数据的推广能力时,就会发生方差误差。这些误差中的每一个都有精确的统计定义,但粗略地说,偏差误差是在训练集上得到的误差,方差误差是从训练集到开发(验证)集的误差增量。

图二。三个误差源

第三个错误或数据不匹配错误来自于测试/推理数据的分布不同于训练和验证的事实。例如,您使用从互联网收集的数据来训练猫品种分类器,并使用它来部署猫分类器移动应用程序,您用于在部署之前验证您的模型的互联网猫图像和您在部署中看到的实际移动应用程序图像之间的分类性能差异是数据不匹配误差,即从开发集到您的推断/测试数据的误差增加。数据不匹配在不同的上下文中也有不同的名称,例如协变量偏移或模型漂移;虽然在定义这些术语时存在细微的差别,但总体思想是相同的,如果您的测试集和目标任务具有相似的分布,则您的测试集误差可以在实际的模型部署之前为您提供数据不匹配误差的准确估计。

3- 根据错误来源缩小调试选项的范围

图 3。按误差源划分的误差缓解策略

如果你的训练数据(偏差)误差很大,你可以尝试增加你的模型大小。对于神经网络,它可以转化为增加层或神经元的数量。如果开发集误差和训练集误差之间的差异很大(方差误差),可以尝试向训练集添加更多数据。为了有效地做到这一点,您可以使用错误分析来了解特征空间的哪些区域导致了最多的失败,并相应地确定数据收集的目标。虽然收集更多数据是减少方差误差的最佳策略,因为它不会影响偏差误差,但这并不总是可能的。减少方差误差的下一个最佳方法是正则化(例如,在神经网络中添加辍学或提前停止)。类似地,维度减少或特征选择可以导致更小的模型,这反过来减少了方差误差。请记住,正则化和降维也会导致偏差误差的增加。

基于从误差分析中获得的洞察力添加更多相关变量或特征可以改善偏差和方差误差。同样的事情也适用于改进模型的架构。

4- 决定是否将手工设计的功能/组件插入您的 ML 系统的关键因素是可用数据的数量

图 4。传统与端到端学*

拥有更多手工设计的特征或组件通常允许一个人工智能系统用更少的数据进行学*。领域知识补充了我们的算法从数据中获取的知识。当我们没有太多数据时,这种手工设计的知识就变得更加重要。另一方面,如果没有数据短缺,则可以应用端到端设计,从而绕过手动特征工程的需要。

5- 是否在培训中使用补充/扩充数据取决于您的模型容量

图 5。扩充/补充数据

补充数据是与你的目标任务一致但不完全来自同一分布的任何数据。假设对于卡特彼勒分类器移动应用程序,您有 10k 个用户上传的图像和 20k 个从互联网下载的图像。在这里,20k 互联网图像将是您的补充数据,如果您的模型很小,包括这些可能会占用您的模型的容量,并限制用户上传图像的可学性。然而,如果模型足够大,它可以学*两种分布,并利用两个集合之间的共性来巩固学*和更好地概括(这是元学*背后的主要思想)。虽然吴恩达的书中没有提到这一点,但我假设同样的推理适用于包括任何可以产生类似文本、图像或表格数据的数据增强技术(例如,对抗性数据增强)。如果你的分类器容量很小,那么包括那些增强的数据不能创造奇迹,但是当我们使用高容量深度学*时,它可以充当正则化器。

参考文献

机器学*向往由 http://www.mlyearning.org/()吴恩达著

用 Python 标记文本的 5 种简单方法

原文:https://towardsdatascience.com/5-simple-ways-to-tokenize-text-in-python-92c6804edfc4?source=collection_archive---------2-----------------------

标记文本、大型语料库和不同语言的句子。

照片由劳伦提乌·约尔达切Unsplash 上拍摄

标记化是数据科学家在处理文本数据时遇到的常见任务。它包括将整个文本分割成小单元,也称为标记。大多数自然语言处理(NLP)项目都将标记化作为第一步,因为它是开发良好模型的基础,有助于更好地理解我们拥有的文本。

尽管 Python 中的标记化可以像编写.split()一样简单,但这种方法在某些项目中可能不是最有效的。这就是为什么,在这篇文章中,我将展示 5 种方法来帮助你标记小文本、大语料库甚至用英语以外的语言写的文本。

**Table of Contents** 1\. [Simple tokenization with .split](#31ad)
2\. [Tokenization with NLTK](#33a2)
3\. [Convert a corpus to a vector of token counts with Count Vectorizer (sklearn)](#f5d2)
4\. [Tokenize text in different languages with spaCy](#d7d1)
5\. [Tokenization with Gensim](#dfd5)

注意:标记化是数据科学家在清理和准备数据时要做的许多工作之一。在下面的文章中,我写了一个指南来帮助你完成这些繁琐的任务。两篇文章的代码在我的Github上都有。

1.简单的标记化。使分离

正如我们之前提到的,这是在 Python 中执行标记化的最简单的方法。如果您键入.split(),文本将在每个空格处分开。

在这个例子和接下来的例子中,我们将使用史蒂夫·乔布斯在苹果广告“思考不同”中讲述的一段文字。

text = “””Here’s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes. The ones who see things differently — they’re not fond of rules. You can quote them, disagree with them, glorify or vilify them, but the only thing you can’t do is ignore them because they change things. They push the human race forward, and while some may see them as the crazy ones, we see genius, because the ones who are crazy enough to think
that they can change the world, are the ones who do.”””text.split()

如果我们编写上面的代码,我们将获得下面的输出。

['Here’s', 'to', 'the', 'crazy', 'ones,', 'the', 'misfits,', 'the', 'rebels,', 'the', 'troublemakers,', 'the', 'round', 'pegs', 'in', 'the', 'square', 'holes.', 'The', 'ones', 'who', 'see', 'things', 'differently', '—', 'they’re', 'not', 'fond', 'of', 'rules.', 'You', 'can', 'quote', 'them,', 'disagree', 'with', 'them,', 'glorify', 'or', 'vilify', 'them,', 'but', 'the', 'only', 'thing', 'you', 'can’t', 'do', 'is', 'ignore', 'them', 'because', 'they', 'change', 'things.', 'They', 'push', 'the', 'human', 'race', 'forward,', 'and', 'while', 'some', 'may', 'see', 'them', 'as', 'the', 'crazy', 'ones,', 'we', 'see', 'genius,', 'because', 'the', 'ones', 'who', 'are', 'crazy', 'enough', 'to', 'think', 'that', 'they', 'can', 'change', 'the', 'world,', 'are', 'the', 'ones', 'who', 'do.']

正如您在上面看到的,split()方法没有将标点符号视为单独的标记。这可能会改变您的项目结果。

https://medium.com/geekculture/4-free-and-paid-web-scraping-courses-every-data-scientist-should-take-956562ac68dc

2.用 NLTK 进行标记化

NLTK 代表自然语言工具包。这是一套用 Python 编写的英语统计自然语言处理的库和程序。

NLTK 包含一个名为tokenize的模块,它带有一个word_tokenize()方法,可以帮助我们将文本分割成标记。安装 NLTK 后,编写以下代码来标记文本。

from nltk.tokenize import word_tokenize
word_tokenize(text)

在这种情况下,默认输出与上面显示的.split方法略有不同。

['Here', '’', 's', 'to', 'the', 'crazy', 'ones', ',', 'the', 'misfits', ',', 'the', 'rebels', ',', 'the', 'troublemakers', ',', 
...]

在这种情况下,“here ' s”中的撇号(')和“ones”中的逗号(,)被视为标记。

3.使用计数矢量器(sklearn)将语料库转换为令牌计数矢量

在处理大型语料库时,前面的方法变得不太有用,因为您需要以不同的方式表示标记。计数矢量器将帮助我们将一组文本文档转换成一个令牌计数矢量。最后,我们将得到文本数据的向量表示。

对于这个例子,我将在前面的文本中添加一段比尔·盖茨的语录来构建一个数据框架,作为语料库的一个例子。

import pandas as pd
texts = [
"""Here’s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes. The ones who see things differently — they’re not fond of rules. You can quote them, disagree with them, glorify or vilify them, but the only thing you can’t do is ignore them because they change things. They push the human race forward, and while some may see them as the crazy ones, we see genius, because the ones who are crazy enough to think that they can change the world, are the ones who do.""" ,

'I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.'
]df = pd.DataFrame({'author': ['jobs', 'gates'], 'text':texts})

现在,我们将使用Count Vectorizerdf 数据帧中的这些文本转换成一个令牌计数向量。

如果您运行这段代码,您将得到一个框架,它计算一个单词在两个文本中被提及次数。

作者图片

当数据帧包含大型语料库时,这变得非常有用,因为它提供了具有被编码为整数值的单词的矩阵,这些整数值被用作机器学*算法中的输入。

计数矢量器可以有不同的参数,比如我们上面定义的stop_words 。但是,请记住,Count Vectorizer使用的默认 regexp 选择包含 2 个或更多字母数字字符的标记(标点完全被忽略,总是被视为标记分隔符)

4.用 spaCy 标记不同语言的文本

当需要对用英语以外的语言编写的文本进行标记时,可以使用 spaCy。这是一个高级自然语言处理库,用 Python 和 Cython 编写,支持超过 65 种语言的标记化。

让我们将同样的史蒂夫·乔布斯文本标记出来,但现在翻译成西班牙语。

在这种情况下,我们从spacy.lang.es 导入了Spanish ,但是如果你使用的是英文文本,只需导入English from spacy.lang.en 在这里查看可用语言列表

如果您运行这段代码,您将得到以下输出。

['Por', 'los', 'locos', '.', 'Los', 'marginados', '.', 'Los', 'rebeldes', '.', 'Los', 'problematicos', '.', '\n', 'Los', 'inadaptados', '.', 'Los', 'que', 'ven', 'las', 'cosas', 'de', 'una', 'manera', 'distinta', '.', 'A', 'los', 'que', 'no', 'les', 'gustan', '\n', 'las', 'reglas', '.', 'Y', 'a', 'los', 'que', 'no', 'respetan', 'el', '“', 'status', 'quo', '”', '.', 'Puedes', 'citarlos', ',', 'discrepar', 'de', 'ellos', ',', '\n', 'ensalzarlos', 'o', 'vilipendiarlos', '.', 'Pero', 'lo', 'que', 'no', 'puedes', 'hacer', 'es', 'ignorarlos', '…', 'Porque', 'ellos', '\n', 'cambian', 'las', 'cosas', ',', 'empujan', 'hacia', 'adelante', 'la', 'raza', 'humana', 'y', ',', 'aunque', 'algunos', 'puedan', '\n', 'considerarlos', 'locos', ',', 'nosotros', 'vemos', 'en', 'ellos', 'a', 'genios', '.', 'Porque', 'las', 'personas', 'que', 'están', '\n', 'lo', 'bastante', 'locas', 'como', 'para', 'creer', 'que', 'pueden', 'cambiar', 'el', 'mundo', ',', 'son', 'las', 'que', 'lo', 'logran', '.']

如您所见,spaCy 将标点符号视为单独的标记(甚至包括了新行\n )。

如果你对西班牙语有所了解,你可能会注意到标记化与英语相似,所以你可能会想,“为什么每种语言都需要一个标记化器?

虽然对于像西班牙语和英语这样的语言,标记化就像用空格分隔一样简单,但是对于像汉语和日语这样的非浪漫语言,正字法可能没有空格来分隔“单词”或“标记”在这种情况下,像 spaCy 这样的库将会派上用场。 在这里你可以查看更多关于不同语言中标记化的重要性。

5.用 Gensim 进行标记化

Gensim 是一个用于无监督主题建模和自然语言处理的库,还包含一个标记器。一旦安装了 Gensim,标记文本就像编写下面的代码一样简单。

from gensim.utils import tokenize
list(tokenize(text))

这段代码的输出如下。

['Here', 's', 'to', 'the', 'crazy', 'ones', 'the', 'misfits', 'the', 'rebels', 'the', 'troublemakers', 'the', 'round', 'pegs', 'in', 'the', 'square', 'holes', 'The', 'ones', 'who', 'see', 'things', 'differently', 'they', 're', 'not', 'fond', 'of', 'rules', 'You', 'can', 'quote', 'them', 'disagree', 'with', 'them', 'glorify', 'or', 'vilify', 'them', 'but', 'the', 'only', 'thing', 'you', 'can', 't', 'do', 'is', 'ignore', 'them', 'because', 'they', 'change', 'things', 'They', 'push', 'the', 'human', 'race', 'forward', 'and', 'while', 'some', 'may', 'see', 'them', 'as', 'the', 'crazy', 'ones', 'we', 'see', 'genius', 'because', 'the', 'ones', 'who', 'are', 'crazy', 'enough', 'to', 'think', 'that', 'they', 'can', 'change', 'the', 'world', 'are', 'the', 'ones', 'who', 'do']

如您所见,Gensim 每次遇到标点符号时都会分裂,例如Herescan, t

摘要

令牌化带来了不同的挑战,但现在您知道了 5 种不同的应对方法。.split 方法是一个简单的标记器,它用空格分隔文本。NLTK 和 Gensim 做类似的工作,但是使用不同的标点规则。其他很好的选择是 spaCy,它提供了一个多语言标记器和 sklearn,帮助标记一个大型语料库。

与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你使用我的链接注册,我会赚一小笔佣金,不需要你额外付费。

https://frank-andrade.medium.com/membership

5 个用 Python 解决的端到端数据科学项目

原文:https://towardsdatascience.com/5-solved-end-to-end-data-science-projects-in-python-acdc347f36d0?source=collection_archive---------0-----------------------

初级和高级 Python 数据科学项目,带源代码。

Unsplash 上由 Austin Distel 拍摄的照片

如果您已经研究数据科学有一段时间了,您可能知道为了学*数据科学,您需要学*数学、统计学和编程。这对任何对数据科学感兴趣的人来说都是一个好的开始,但是您知道如何更多地接触数据科学吗?

是有项目的!一个项目将帮助你把从数学、统计学和编程中学到的所有知识付诸实践。到目前为止,你可能已经单独看到了它们中的每一个,但是在你完成一个项目后,你在每个领域学到的概念将会更有意义。

在本文中,我列出了一些可以用 Python 完成的端到端数据科学项目。项目按难度排列,所以初学者项目在开头,高级项目在文章末尾。

注意:本文中列出的大多数项目都需要对 Python 有一定的了解。你至少应该知道诸如 Pandas、Numpy 和 Scikit-learn 等库的基础知识。我将留下每个项目的源代码以及每个项目中使用的库的指南。如果你还是 Python 初学者,我推荐你先从 基础 Python 项目开始

首先要做的事情——学*探索性数据分析

您将来要解决的大多数真实项目以及本文中列出的一些项目都需要您执行 EDA(探索性数据分析)。这一步在每个数据科学项目中都是必不可少的,因为它有助于您理解数据,并通过可视化技术获得有用的见解。

EDA 还有助于暴露数据中的意外结果和异常值。例如,直方图、箱线图和条形图等图表将帮助您识别异常值,以便您可以去除它们并执行更好的分析。

照片由 Myriam JessierUnsplash 上拍摄

我没有把 EDA 作为这个列表中的一个项目,因为它通常不是最终项目的目标,而是为了更好地执行分析而必须做的事情。要了解如何执行 EDA,请查看本指南,它将向您介绍 Python 中的数据可视化。在本指南中,您必须从包含足球运动员统计数据的数据集中获得洞察力。另外,查看另一本指南,学* Python 中数据清理的最佳实践。第二个指南将向您展示如何使用您在第一个指南中学到的图来识别和处理异常值。

1.情感分析

这个列表的第一个项目是建立一个预测电影评论情绪的机器学*模型。情感分析是一种 NLP 技术,用于确定数据是积极的、消极的还是中性的。这对企业真的很有帮助,因为它有助于了解客户的总体意见。

对于这个项目,您将使用包含 50k 电影评论的 IMDB 数据集。有两个栏目(评论和感悟)。目标是建立最佳的机器学*模型,预测给定电影评论的情绪。为了使这个项目对初学者友好,你只需要预测一个电影评论是积极的还是消极的。这被称为二进制文本分类,因为只有两种可能的结果。

绝对视觉Pixabay 上拍摄的照片

第一个项目的特别之处在于,您将探索 scikit-learn 库,同时从头开始构建一个基本的机器学*模型。

检测项目

使用 Python 可以做许多“检测”项目。我将按照难度列出我用 Python 实现的那些,而不是仅仅列举一个。

2.假新闻检测

最适合初学者的检测项目大概就是假新闻检测了。网上到处都是假新闻。这在民众中造成了混乱和恐慌。这就是为什么识别信息的真实性很重要。幸运的是,我们可以使用 Python 来处理这个数据科学项目。

罗马卡夫在 Unsplash 上拍摄的照片

这个项目的目标是从假新闻中分离出真实的新闻。为此,我们将使用 sklearn 的工具,如 TfidfVectorizer 和 PassiveAggressiveClassifier。

3.信用卡欺诈检测

如果你想让这类项目更有挑战性,你可以试试信用卡欺诈检测。信用卡欺诈给消费者和公司都造成了数十亿美元的损失,同时欺诈者不断试图寻找新的方法来实施这些非法行为。这就是为什么欺诈检测系统对于银行最大限度地减少损失至关重要。

在此项目中,您应该从包含交易历史的数据集中分析客户的消费行为。位置等变量将帮助您识别欺诈交易。

照片由rupixen.comUnsplash 上拍摄

4.聊天机器人

聊天机器人只是一个通过语音命令或文本聊天来模拟人类对话的程序。高级聊天机器人是使用人工智能构建的,用于手机上的大多数消息应用程序。

虽然创建像 Siri 和 Alexa 这样的语音助手过于复杂,但我们仍然可以使用 Python 和深度学*创建一个基本的聊天机器人。在这个项目中,你必须使用数据科学技术用数据集训练聊天机器人。随着这些聊天机器人处理更多的交互,它们的智能和准确性将会提高。

奥米德·阿明Unsplash 拍摄的照片

构建一个简单的聊天机器人会让你接触到各种有用的数据科学和编程技能

5.客户流失预测

客户流失率是客户停止与公司做生意的比率。这表示在给定时间段内停止订阅的订阅者的百分比。

这是一个测试您的数据科学技能的好项目。我甚至不得不在黑客马拉松中解决它!

这个项目的主要目标是对客户是否会流失进行分类。为此,您将使用包含银行客户财务数据的数据集。信用评分、任期、产品数量和估计工资等信息将用于构建此预测模型。

这个项目和信用卡欺诈检测项目是本文列出的最完整的数据科学项目。它包括探索性数据分析、特征工程、数据准备、模型拟合和模型选择。

就是这样!希望在完成所有这些项目后,你能更好地理解到目前为止你所学到的关于数据科学的一切。

与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)

我希望 Julia 的 5 个引人入胜的特性是用 Python 编写的

原文:https://towardsdatascience.com/5-spectacular-features-from-julia-i-wish-were-in-python-b55d66d25d7b?source=collection_archive---------5-----------------------

意见

我非常喜欢 Julia 编程语言的一些特性,我希望它们是 Python 语言。

(src =https://pixabay.com/images/id-3461405/

介绍

每当程序员使用多种语言时,他们开始看到某些语言相对于其他语言的优势和权衡。我最喜欢用的编程语言之一是 Julia 编程语言。编程语言中有太多的事情做得非常好,以至于每当我对 Julia 使用不同的语言时,我都会错过。我有一篇关于我为什么如此爱朱莉娅的文章,以及我个人与这篇文章中所写语言的关系:

当然,鉴于我主要从事数据科学工作,这个应用程序的另一个流行选择是 Python 编程语言。我也喜欢这种语言,我也认为它有很多很棒的特性。这些特性中的一些肯定会激发出一些伟大的 Julia 代码,但是今天我想把重点放在相反的方面。今天我想展示一些我最喜欢的 Julia 语言的特性,我认为 Python 可以从中受益。鉴于 Python 语言,我认为其中的一些功能很有意义,然而其他功能只是我喜欢的功能,显然不是 Python 方向的一部分。本文还有一个笔记本,以防您希望看到使用的 Julia 代码(真的不多):

https://github.com/emmettgb/Emmetts-DS-NoteBooks/blob/master/Julia/These features would be cool in Python.ipynb

№1:健壮的类型系统

所有程序员都喜欢 Julia 的一点是它健壮的类型系统。就我个人的喜好而言,谈到打字的力量,朱莉娅非常适合。也就是说,就类型的强度而言,Python 处于相同的领域,尽管在类型改变方面可能更含蓄一些。也就是说,我认为 Julia 的类型层次和基本数据类型远远优于 Python。

这并不是说 Python 的类型系统不健壮,但是确实有改进的余地。当涉及到数值类型和可迭代对象的继承时,尤其如此。例如,字符串应该是数组的子类型,因为最终字符串本质上只是一个字符数组。当然,这只是一个具体的例子,但是我认为类型系统可以使用许多小的调整。在 Julia 中,我们有一个很棒的东西叫做抽象类型,它有助于创建类型层次,而抽象类型在 Python 中很少使用——这方面的部分问题也意味着每个子类都有一个支持的子初始化。

2 号:方法错误

我不喜欢 Python 的一点是缺少方法错误。为了传达为什么我认为 Python 需要方法错误,以及为什么在当前的迭代中没有方法错误是令人困惑的,我将给出一个 Julian 的例子。假设我们用 Python 和 Julia 编写了相同的函数:

function double(x::Int64) x * 2enddef double(x : int):
    return(x * 2)

在 Julian 的例子中,我们不能通过这个方法传递除了整数以外的任何值。这意味着,例如,一个字符串将返回一个方法错误。

double("Hello")MethodError: no method matching double(::String)
Closest candidates are:
  double(::Int64) at In[1]:1

Stacktrace:
 [1] top-level scope
   @ In[3]:1
 [2] eval
   @ ./boot.jl:360 [inlined]
 [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
   @ Base ./loading.jl:1116

现在让我们在我的 Python REPL 中尝试同样的事情:

>>> double("Hello")'HelloHello'

这是双函数的预期行为吗?当然,没有人会认为这是一个字符串——但是让我们考虑一下,我们使用了一个不能和*操作符一起使用的类型。

d = {"H" : [5, 10, 15]}>>> double(d)Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 2, in doubleTypeError: unsupported operand type(s) for *: 'dict' and 'int'>>>

让我们假设我没有编写这个函数——我导入了一些软件,现在我看到了这个错误。尽管我指定了这个函数只能将这种类型作为参数使用,但是现在我们遇到了一个问题,有些人需要参考文档,或者 google this TypeError,因为他们甚至不知道这是在哪里发生的。即使在编写了一行函数之后,我们也知道没有办法找出这个错误发生在函数的什么地方。将此与 Julia 方法的错误输出进行比较:

MethodError: no method matching double(::String)
Closest candidates are:
  double(::Int64) at In[1]:1

Stacktrace:
 [1] top-level scope
   @ In[3]:1
 [2] eval
   @ ./boot.jl:360 [inlined]
 [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
   @ Base ./loading.jl:1116

我们得到的第一件事是 double 函数不接受字符串作为参数,然后这后面是一个修正—double 应该与我们指定的整数一起使用。我只是觉得指定参数的类型应该比文档元数据更有用。我认为诊断为方法提供错误类型的问题是很难理解的。即使在 Julia 中使用了错误的方法,输出也可以为您提供足够的提示,让您在许多情况下正确使用该方法。比如,插页!()方法:

insert!(5)MethodError: no method matching insert!(::Int64)
Closest candidates are:insert!(::Vector{T}, ::Integer, ::Any) where T at array.jl:1317
insert!(::BitVector, ::Integer, ::Any) at bitarray.jl:887

最接*的候选列表的第一行告诉我们所有我们需要知道的关于这个方法的信息。在函数式风格中,变异类型总是先出现,我们的抽象向量,然后是整数,然后是 any。既然我们可以假设向量中的值的时间基本上可以是任何值,那么很可能是::Any。考虑到数组索引总是整数,这可能是整数。

№3:可迭代运算符

在 Python 中,对可迭代对象进行基本的数学运算要困难得多。在大多数情况下,人们会希望为此导入 NumPy。然而,像 R 语言一样,Julia 支持元素操作符。这些操作符做两件事:

  • 提供一种简单的方法来执行一维数组和多维数组的运算。
  • 允许人们从运算符中快速区分出正在对两个可迭代对象执行运算。

这两件事都很重要,而且每次想做这个算术的时候就跳进一个循环肯定不是最酷的事情。虽然我完全理解元素级乘法有一些可用的特性,但我认为操作符是解决这个问题的更充分的方法。

№4:(当然)多重调度

我们都看到了这一天的到来…

我喜欢多重派遣。

需要澄清的是,我从来没有说过地球上的每一种编程语言都需要多重调度。然而,对于 Julia 编程来说,我更喜欢在给定的编程语言中使用多重分派。这只是一种不碍事的流畅的编程方式,这也是我真正喜欢它的地方。它用参数多态在类型和方法之间建立了更强的关系。

最终,使编程语言独一无二的是它各自的范例和方法与语言交互的方式。Pythonic 式的做事方式当然有好处。类很牛逼,它们的子函数也很牛逼。我认为面向对象编程是在类型和它们各自的功能之间建立关系的一个很好的方法。也就是说,Python 根本不是纯粹的面向对象编程语言。如果是这样的话,我认为这种语言不太可能在数据科学中如此流行。

也就是说,Python 更具声明性的“方法到类型”方面(方法是在类的范围之外定义的)与类型和它们的函数产生了更大的分离。这是因为正如我之前详细讨论的,没有方法错误。也就是说,将一个类型与一个函数联系起来的唯一东西是该函数中的算法,也许还有参数类型的转换。然而,如前所述,参数的强制转换除了作为代码的文档之外,实际上没有任何作用。多重分派实际上是一个过度强大的编程泛型,如果你想了解更多,我有一篇关于它的文章,你可以在这里阅读:

№5:扩展底座

我真正喜欢 Julia 的最后一个特性是从语言基础上扩展方法的能力。在 Julia 中,语言基础中的许多函数在整个生态系统中都有使用。当涉及到编写软件文档时,这确实会产生很多问题,因为有时人们必须编写一个基本函数调用的每个例子——通常有很多,我也认为这使得很多事情更容易假设。

例如,我想过滤一个数据框。朱利安基地附带一个过滤器!()函数,用于数组和其他基本数据结构,以删除某些值。为了在数据帧中实现这一点,我们进行了本质上完全相同的调用——这都是因为 Julia 具有扩展函数的能力。我认为这很棒,因为它在 Julia 包之间创造了很多一致性。

也就是说,这类事情肯定至少部分依赖于多重调度。然而,让我们考虑一下 Python 操作符的使用。我们可以把两个整数加在一起,当然没问题:

5 + 5

但是我们也可以添加其他数字,比如布尔和浮点数:

5.5 + False

不仅如此,我们还可以将这些运算符用于字符串。这意味着这种方法适用于所有这些类型——就像多重分派一样。假设这些操作与方法的行为方式相同可能有点像 Julian,但不管怎样,我们在这里看到了一个实现,它揭示了这种多态性在某种程度上已经存在于 Python 中。

结论

我真的很喜欢这两种语言,尽管我更喜欢 Julia 中的许多特性。也就是说,我认为两种语言都可以从对方那里学到一些东西,在某些方面都有所提高。这并不是说这些会发生或不会发生,但我认为大多数人不太可能会看到 Python 语言。这里我认为唯一相对紧迫的问题是方法错误,因为我真的认为这是 Python 中所缺少的。

也就是说,我认为这显示了不同的语言有不同的方面,一些人可能比其他人更喜欢。Julia 处理类型和多重分派的方式当然有很多缺点,Python 处理类型的方式也是如此。非常感谢您的阅读,它对我来说真的意味着整个世界,我希望这是一个有趣的视角,让我们看看 Python 可以从 Julia 身上学到的一些潜在的变化和教训。

吴恩达有效规划人工智能项目的五步框架

原文:https://towardsdatascience.com/5-step-framework-to-plan-ai-projects-effectively-de1a1bc958c?source=collection_archive---------17-----------------------

您将学*最基本的人工智能范围框架,它将节省您的时间、金钱和精力

来自 Pexels创业股票照片

由于曾在一家人工智能初创公司工作,我在职业生涯的早期就接触到了人工智能项目的范围界定和架构设计。我现在是一名高级数据科学家,在过去三年里参与了许多人工智能项目。

即使是现在,我觉得我参与的每个新项目都有它的学*曲线。过去,作为一个团队,我们犯了许多代价高昂的错误。耗费我们时间、金钱和精力的错误。我们吸取了教训。这些是你在任何学位课程或在线课程中找不到的课程。你需要进入这个行业去面对他们。

这就是为什么当我看到像吴恩达这样的人,他是在多个行业采用人工智能的先驱,根据他的经验分享他的知识,我会虔诚地倾听。我研究它们。我收养他们。你也应该。它们是无价的宝石。

这篇文章的灵感来自于吴恩达分享的一个关于如何有效规划人工智能项目的框架。让我们一步一步走进吴教授的脑海。

步骤 1:识别业务问题(不是人工智能问题)

这对我打击很大。

当一个新客户在我们早期接*我们时,我们经常被要求提出商业建议,以帮助他们采用人工智能并转变他们的业务运营。我们过去常常从技术的角度来看待这个问题:哪个人工智能问题适用于这个业务?大错特错。

你最好把生意放在第一位。你首先需要确定一个值得解决的问题。它是否能被解决可以稍后再处理,但是在这一点上,你的注意力需要完全集中在业务上,它是优先事项。

最好的方法是让领域专家参与进来。每个企业都有在各自行业拥有多年经验的专家。让他们参与进来,不管是调查、采访还是闲聊,但是要听取他们的意见。这是识别问题的最好方法。

一旦你手头有了业务问题,接下来你会做什么?

第二步:集体讨论人工智能解决方案

我们都有这样或那样的偏见。我们有自己喜欢的算法,熟悉的解决方案。有时我们相信最新的人工智能研究是正确的。这也可以很好地解决。

这种方法的问题是你可能会错过一个更好的解决方案。这是一个经典的探索-剥削问题。问题是,相对于利用我们已经知道的东西,我们探索了多少。

在我目前的工作中,我们找到了这个问题的答案,我们称之为“解决问题”的会议。我们坐在一起一周左右,集体讨论手头问题的多种解决方案。在这个阶段没有正确或错误的解决方案,欢迎每个人的意见。

经过几个小时的反复讨论,只有几个潜在的解决方案浮现出来,并传递到框架的下一步。

第三步:评估潜在解决方案的可行性和价值

就性能而言,最佳解决方案可能不是整体最佳解决方案。我从经验中学到了这一点,这一课将贯穿我的职业生涯。

人工智能解决方案在所需的专业知识、计算能力和实施成本方面都很昂贵。现阶段需要对少数可能的解决方案进行深入分析。

我们可以通过咨询领域专家、分析竞争对手的做法或实施概念验证来做到这一点。概念验证对我们很有效,我们测试了解决方案,同时获得了企业的信任。

基于可行性研究,您已经完成了手头问题的解决方案蓝图。下一步是什么?

第四步:确定里程碑

当你声称“但是它在测试集上运行良好”时,没有人会接受它

我们需要确定开发团队在整个项目中应该瞄准的度量标准。棘手的部分是,作为数据科学家和机器学*工程师,我们对机器学*指标如准确度、精确度、召回率等感到满意。虽然满足这些里程碑是必不可少的,但是定义一些业务指标也是至关重要的。

业务指标的一些例子是产生的收入;客户赢回来,用户参与度,市场渗透率等。我们可以将每个项目与一些对业务很重要的度量标准联系起来,实现这些将获得业务的信心。

企业将意识到通过人工智能项目产生的价值,当你预先设定这些里程碑时,没有怀疑的余地。我们做得很好。还有最后一步。

第五步:资源预算

每个人都很开心,直到他们看了一眼预算。但是当然,任何事情都是有代价的。

你可能会惊讶地听到,大多数人工智能项目失败的原因是无法负担的资源成本。成功开发、部署和维护人工智能项目所需的资源是值得思考的。

从将项目成功交付给企业所需的时间表、数据、开发团队、计算能力和支持系统开始。一旦你列出了它们,给每项资源分配一个成本,并为这些资源创建一个预算。

额外收获:让利益相关者致力于计划

请在已经决定的事情上签字。

这个简单的步骤引入了各方的承诺,并设定了项目的长期预期。这一承诺对于成功执行迄今为止的计划至关重要。

你总是可以在范围上迭代,以防某些事情需要改变和沟通。

最后的想法

VentureBeat 的 Transform 2019 预测 87%的 AI 项目失败,永远无法投入生产。没有人工智能项目的实际范围是造成这种情况的主要原因之一。

更糟糕的是,我们无法通过在线课程或硕士学位学*这样的框架。这些我们只能通过行业内的经验来了解。吴恩达是人工智能行业的先驱之一,他提出了有效规划人工智能项目的 5 步框架。我们详细讨论了这些关键步骤:

  • 识别业务问题。
  • 头脑风暴人工智能解决方案
  • 评估潜在解决方案的可行性和价值
  • 确定里程碑
  • 资源预算

和你一样,我也在学*。我曾经是个初学者,也犯过不少错误。更重要的是把这些当作学*经历,在我们的职业生涯中继续前进。继续学*,我相信你也会成功的。

要获得更多关于进入数据科学、令人兴奋的合作和指导的有用见解,请考虑加入我的电子邮件好友私人名单

为您的数据科学项目选择优秀数据可视化的 5 个步骤

原文:https://towardsdatascience.com/5-steps-to-choosing-great-data-visualizations-for-your-data-science-projects-ce9d750b98b?source=collection_archive---------8-----------------------

帮助您开始的提示和资源

粘土银行Unsplash 拍摄的照片

从医疗保健结果和商业销售分析到商业应用和体育联盟排名,数据的可视化呈现已经成为我们日常生活中的一个传统。

在整理、解释和分析之后,你的可视化模型必须是专业和独特的。此外,对于人类大脑来说,理解视觉和图案比理解大量的文本和图形更容易。

想象是我最喜欢的工作部分。数据可视化通过使用图表、信息图、图形、散点图等等来传达冗长而庞大的原始数据。并非所有的受众都是技术或数据导向型的,因此,以简单的视觉方式展示数据将在很大程度上提高沟通和分析效率。

现代数据科学技术使得可视化比以往任何时候都更容易实现。但是,您需要对某些概念、模型和数据可视化有全面的了解。

有了大量的可视化选项,人们很容易偏离可视化的主要目的——将数字转换成美丽的短篇故事。

这个过程可能是乏味和令人困惑的,它发生在每个人身上。本文将简化整个过程,并帮助您为项目选择完美的数据可视化。

1。理解你项目的目的。

一般来说,对于任何项目——无论是技术性的还是非技术性的——总有一个目的是为特定的问题提供解决方案。

你想解决哪些挑战?你的概念是通用的还是独特的?您展示的信息将如何为您的组织提供价值?你的目标是长期的还是短期的?

在我开始任何项目之前,我确保我对这些问题提供了清晰的答案,把它们打下来,当我觉得我偏离了轨道时做参考。

几个月前,我参加了一个数据会议,基本上是一个年轻数据科学家的聚会,他们愿意分享关于行业最新趋势和技术的知识。一位发言者介绍了云数据管理在大规模网络攻击世界中的作用。

这是一个必要的话题,他抓住了这一点,用统计数据和数字来支持,但不幸的是,他使用的图表和信息图与所代表的数据并不一致。

原因?对项目的不正确解释。

数据越多并不总是越好,您需要的是针对正确问题的正确数据。

数据可视化是将数据转化为每个人都能有效理解的有意义的故事。技术内外。在使用数据可视化时,提前了解数据将提高您的速度和准确性。

2。了解你的受众。

根据我的观察,演讲者在大会上展示的数据没有与会者预期的那么好。除了没有注意到某些目标,这些可视化看起来就像是人口统计的 8 级图表。

不要误解我的意思,图表很棒,但如果你要向一群熟练的数据科学家展示,你需要让你的数据看起来尽可能专业。

你选择的视觉化技术应该与你的潜在观众沟通。它们应该能够与你的数据完美关联。他们的熟练程度如何?他们是否以技术为导向,足以理解你的可视化?

人们以不同的方式看待信息,研究你的受众,并在你的项目中思考他们的反应。

如果你分析交易的目的是向华尔街的金融大亨们展示你的结果,你会希望使你的可视化技术比向一年级金融学生展示时更专业。

3。准备并理解您正在处理的数据的规范。

数据通常以各种形式呈现。虽然,数据的主要类型是顺序的、定性的、分类的和名义的。您必须了解项目中数据集的唯一性。大多数数据可视化项目完全由数据集的质量、标准和多样性支持。

理解您的数据类型将会简化和消除一些可视化类型。

例如,对于分类数据,使用折线图不是一个好主意。地理数据也是如此,地图和柱形图因其直接讲述故事的效率而广受青睐。

这一步从关键的数据收集、假设和数据检查开始,以发现关键信息的洞察力。我们可以使用各种工具来理解数据集——取决于规模和模型。

这一步非常微妙,因此请记住以下步骤:

  • 定义数据的目标。
  • 限制并将值转换为单位。
  • 寻找错误并识别关键变量。
  • 利用编程语言进行高级分析。

4。选择合适的图表类型。

数据可视化的关键概念是以尽可能简单的形式传达信息,以帮助轻松有效地理解。图表是用来解释和分解变量的,选择正确的图表将决定你在展示数据时的专业性。

有了大量的图表和可视化选项,需要精确地利用其中一个的全部潜力。

为了更好地理解,让我们回顾一下最常见的图表、它们的使用情形以及它们的缺点:

a .条形图

中学时大家都画过条形图。虽然简单,但它是最常用的数据可视化模式。通常用于区分两个或多个变量随时间的变化。

然而,条形图的主要缺点是过载。如果您正在处理多个数据点,条形图可能不合适。

避免用大量的变量填充你的图表——你的图表不应该超过 10 根棒线。从数据线查看这个例子。

b .饼状图

好吧,多年来,饼状图声名狼藉,专家进行的研究证明饼状图是错误的,并且经常提供误导性的分析。

但是,在某些项目中,饼图在数据可视化中可以派上用场,尤其是在处理小型数据集和特定变量时。

c .面积图

大多数数据科学家通常认为面积图和折线图是一样的。事实是,这两者之间存在一些差异。虽然它们都说明了时间序列中的连续数据集,但它们相似但不相同。

面积图在显示部分与整体的关系时最有效。例如,销售代表对公司月收入的贡献。

d .散点图

就我个人而言,在处理大型数据集时,我脑海中浮现的是散点图,尤其是当我的变量成对出现时——一个因变量(y 轴)和一个自变量(x 轴)。

为了最大限度地发挥散点图的潜力,您需要确保数据集中的变量和值是相关的。

5。选择功能强大的可视化软件。

有大量的数据可视化工具,您的选择很大程度上取决于您的目标、项目类型、规模和分析需求。

现代数据科学改变了分析师的工作方式,80%的数据可视化项目不再需要复杂的数学分析。

“十年前,我们肯定会看到专门从事商业智能或数据或分析的人,这是他们的工作,其他人都应该向这些人发出请求,并等待报告。”

埃莉·菲尔兹,Tableau 产品开发高级副总裁。

从那以后,事情发生了变化。大多数可视化软件都有一个友好的拖放界面,只要对工具的概念有一个基本的理解,你就可以开始了。

以下是一些顶级的数据可视化工具:

适用外卖。

老实说,我以前也有过数据可视化的困扰。在我的整个学*过程中,我一直在自学,但我意识到,要获得对数据可视化的高质量理解,我需要寻求业内顶级专业人士的培训。永远不要停止学*。

在选择使用哪种图表或视觉类型之前,请了解项目的目的,了解您的受众,准备您的数据集,并选择具有高质量功能的可视化工具。你需要一个向导,写下你的目标,并确保你坚持这些目标。

避免弄乱你的图表,保持你的视觉效果简单易懂。在数据可视化中,保持简单总是最好的。

有效重构研究论文的 5 个步骤

原文:https://towardsdatascience.com/5-steps-to-effectively-reconstruct-research-papers-1adbb4fda664?source=collection_archive---------18-----------------------

如何重新构建你自己的研究论文变体并开发众多项目

安妮·斯普拉特在 Unsplash 上的照片

学*人工智能和数据科学有几种方法。大多数复杂的概念都包含在网站、博客、文章和其他资源中。然而,任何特定主题的大部分细节通常都包含在一篇研究论文中的方法论的结构良好的理论实现中。

当掌握与机器学*和深度学*相关的新概念时,理解任何概念的最突出方式是有效地阅读、理解、解释和实现特定概念主题的特定研究论文。大多数复杂的深度学*研究,如生成对抗网络(GANs)、变分自动编码器(VAEs)、神经网络和其他类似的有趣主题,都需要专注和专注,以根据需要进行适应和重新创建。

对于大多数初学者来说,从零开始实现研究论文的一个不幸的方面是,他们不能从零开始重建它,并以最简洁的方式开发模型或项目。有时没有足够的关于架构构建的细节,或者它们不可解释,或者许多其他原因。

在本文中,我们将客观地找出以最有效的方式重建和复制高水平、先进的研究论文所需的最佳方法。让我们开始寻找成功解决这一任务的最佳步骤,以实现可能的最佳结果。

1.了解背景:

破解任何复杂研究论文代码的第一步是理解概念解释。解码摘要和分解他们的创新研究的介绍的大部分元素为你提供了一条更窄的路径来关注具体的改进主题,因为大多数研究都是在以前的工作基础上改进的。

一旦你对摘要有了一个简要的概念,我建议浏览并快速阅读整篇研究论文。这样做将有助于你衡量对预期的理解,也有助于你决定对你的特定方法来说最好的深度学*框架可能是什么。选择你觉得最适合用来解决特定问题的深度学*库。

你可以在 TensorFlow 或 PyTorch 的两个推荐的深度学*库中选择一个来开始编码部分。下面是一些库的起始代码,以便为下面的内容导入。

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

或者

**import** torch
**import** torchvision
**import** torchvision.transforms **as** transforms

我们将在接下来的章节中使用一些张量流编码。

2.发现以前的作品:

马文·迈耶在 Unsplash 上的照片

任何新发表的研究论文最好的部分是它包含的大量参考资料和其他参考链接。大多数研究论文在某种程度上利用以前开发的概念来解释自己的新思想。大多数情况下,大多数研究论文都有一个完整的部分专门介绍他们从中汲取灵感的来源以及他们在当前工作中使用的不同类型的预先存在的概念。

从提供的外部参考来看,研究这些已经存在的方法是一个很棒的想法。你可能已经对现有的想法有了线索,或者对之前发现的话题有了更多的了解。因此,你不仅学*和适应当前的研究,而且你也*惯了许多以前的工作,这对你计划发现的未来项目会派上用场。

一个有用的例子是,当您试图完成一个复杂的神经网络架构时,可能会有几个先前的工作包含在新创建的模型中。当前的研究论文可能会使用以前建立的模型(如 VGG-16 或 RESNET-50)、现有损失(如均方损失)、独特的激活函数(如参数 ReLU)或优化器的迁移学*元素。利用这些要素,你可以对如何成功完成研究论文的重构有一个简要的想法。

3.适应模型架构:

下一步是开始熟悉研究报告中指定的架构构建。更有可能的是,大多数研究论文将有一个特定的架构构建,他们正在寻找解释任务,以实现最佳结果。该架构可能是从以前的代码中派生出来的,完全是从零开始构建的,或者是这两种方法的混合。下面是 TensorFlow 中构建的一个示例架构。

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

下面的体系结构代表了一个完全卷积神经网络类型的体系结构。最好*惯这样的构建,因为它们将在大多数研究工作中使用。学*一些最好的参数,如激活函数、损失函数、优化器和其他变量,插入到这些模型构建中,因为它们中的大多数都有某种相似性。

4.试着在所学知识的帮助下实施:

一旦你适应了模型架构,看看样本例子或者研究论文试图解决的特定项目。借助所获得的知识,尝试实现您自己的建筑构建变体,并有效地再现通过研究论文完成的结果。

图像来源

尝试使用其他建模技术(如迁移学*模型)的构造来检查结果并相应地验证它们。通过这种方式,你可以了解当前研究论文的真实性,并获得完成特定任务的其他训练方法的知识。因此,最好实现三个模型,即一个版本的研究,你自己的第二个变体,以及其他现有的解决问题的方法。

5.参考论文的外部链接或其他重构:

即使在仔细阅读了几遍研究论文,并认为自己已经理解了解决特定问题所需的大部分基本概念之后,仍然很有可能无法按照预期再现结果。这种经历很常见,因为即使是该领域的专业专家有时也很难极其精确地获得特定研究论文的复杂细节。

在这种时候,最好获得一些外部帮助。如果有博客、文章或视频非常详细地介绍了特定的主题,强烈建议开发人员查看这些示例参考来完成特定的任务。像有代码的论文这样的网站是一个很好的选择,可以为研究论文的重建提供一些编程参考。对于类似的网站,我强烈建议查看我以前关于十大最佳免费资源的文章,通过下面提供的链接了解更多关于数据科学和机器学*的信息。

</10-best-free-websites-to-learn-more-about-data-science-and-machine-learning-f2c6d7387b8d>

结论:

照片由UXUnsplash 上拍摄

分析研究论文是深度学*最关键的方面之一。研究论文包含大量有用的信息,对新兴数据科学家的成长具有重要意义。随着这些科学研究论文的有效重建,大多数理论和实践概念变得清晰和翔实,因为你能够有效地掌握与特定主题或领域相关的大多数知识。

本文中讨论的许多要点应该能够帮助大多数读者至少在大多数研究论文中获得一个基线解决方案。有了对抽象概念的正确的直觉理解,你就可以选择你想要的解决问题的最佳框架。阅读并理解特定主题的一些最佳作品,并相应地实现所需的架构。

如果你想在我的文章发表后第一时间得到通知,请点击下面的链接订阅邮件推荐。如果你希望支持其他作者和我,请订阅下面的链接。

https://bharath-k1297.medium.com/membership

看看我的其他一些文章,你可能会喜欢读!

</5-best-python-projects-with-codes-that-you-can-complete-within-an-hour-fb112e15ef44>

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

获得第一份数据科学工作的 5 个步骤

原文:https://towardsdatascience.com/5-steps-to-landing-your-first-data-science-job-68df19d67070?source=collection_archive---------24-----------------------

这可能很难,但并非不可能。

Clem Onojeghuo 在 Unsplash 拍摄的照片

在当今世界,无论你在哪个领域,找工作不仅是一件困难的事情,而且似乎是不可能的。当我们谈到在技术行业找工作时,这种感觉只会更加强烈。除了疫情给劳动力带来的复杂性之外,在科技行业找工作还面临着供需不匹配的额外挑战。

*年来,许多人将技术,或者更准确地说,数据科学作为未来的职业选择,因为他们可以从中获得许多好处。工资相当高,工作选择非常广泛,找到远程技术职位的机会比其他工作领域高。

但是,尽管如此,如果你明智地出牌,你仍然可以得到你梦想中的工作。我认为求职是每个人都需要发展和练*的技能,就像他们发展和练*技术技能一样。

在这篇文章中,我们将介绍一些你需要经历的步骤,以提高你获得梦想工作的机会。这些步骤中的大部分可能看起来显而易见且符合逻辑,但掌握它们需要练*,更重要的是耐心。

步骤 1:确保您有坚实的数据科学基础

不管它有多宽,每个领域都有它的基础,所有高级主题都是建立在基础之上的。所以,你需要确保的第一件事是你非常熟悉这些基础知识。因为在数据科学或任何其他技术领域,基础知识才是最重要的,因为你永远无法了解该领域的一切。

数据科学是一个正在发展的领域;每天都有新的进步和发展。因此,你永远不会真正掌握它。但是,只要你有坚实的数学、统计学、Python 或 R、SQL 和可视化基础,你应该可以应付任何新兴技术和你面前的任何新任务。

第二步:建立相关的投资组合

建立一个相关的投资组合可能是最具挑战性的步骤。首先,你需要证明你有经验,即使你是在申请你的第一份工作。那么,在没有实际经历的情况下,如何表现出你经历过呢?

</5-data-science-open-source-projects-you-to-contribute-to-boost-your-resume-d757697fb1e3>

在这里,建立一个相关的投资组合可以帮助你很多。公司找经验,基本都是找具体技能,具体项目。所以你只需要证明你解决过现实生活中的问题。一般来说,你的投资组合需要包括三类项目:

  1. 简单,相关,但个人项目。这些专题展示了你对不同主题和基本专题结构的理解。
  2. 对开源项目的贡献。这将证明你可以在一个大的代码库上工作,并且可以在一个团队中工作。
  3. 参与黑客马拉松。这类项目表明你可以在有限的时间内做好工作。此外,黑客马拉松通常致力于解决实际问题。

第三步:发展网上形象。

在当今的就业市场上,认可和人际关系网对于找到工作至关重要。为了获得认可,你可以做的一件事就是建立一个稳固的、有用的网络形象。建立一个形象会强化你的技术知识,帮助你提高沟通技巧,同时帮助你建立一个强大的专业网络。

有不同的方式来建立在线存在,许多人选择的一个选项是创建一个 YouTube 频道来谈论他们的经验或提供一些技术概念的教程。但是视频并不适合所有人;这就是为什么其他选择会给你同样的认可,而不用拍摄你自己。

您可以创建自己的播客,与您圈子中的人或经历相同旅程的人讨论数据科学主题。如果你对此感到不舒服,那么你可以创建自己的博客,并开始与其他数据科学家交流。

</5-reasons-why-every-data-scientist-should-blog-f1d81550a6c3>

第四步:利用求职工具。

现在你已经准备好开始找工作了,你需要利用各种可用的工具和资源来找工作。在你去求职网站之前,要学*的一件重要的事情是理解每个职位的含义。我写了一篇关于这个的文章来帮你开个头。

正如我刚才提到的,你可以使用许多工具和网站来找工作,但对于这篇文章,我将提到我个人使用过的其中两个网站:

  1. NextJobHunt 是一款求职工具,将求职者与可获得的工作机会和寻找职位的人才公司联系起来。该网站还提供职业咨询、撰写有力的简历以及如何通过面试等服务。
  2. LinkedIn 不仅仅是一个让你记录最*职业成就的网站。LinkedIn 求职门户可以帮你找到新工作。

</10-different-data-science-job-titles-and-what-they-mean-d385fc3c58ae>

第五步:根据你申请的工作量身定制你的简历

这可能是最重要的步骤——在你学会基础知识之后。当人们申请一家公司的特定职位时,计算机程序首先会在简历中寻找一些关键词,然后实际的招聘人员才能看到一些关键词。

也就是说,即使你拥有这份工作所需的所有技能,如果你的简历不是为这个特定的角色量身定做的,它甚至可能没有机会被真正的人阅读。因此,知道如何让你的简历与你申请的工作相匹配,甚至对于获得这份工作的面试机会都是至关重要的。我的下一篇文章将详细介绍如何建立这种关系。

外卖食品

求职不仅仅是一个过程,在你写完简历并学*了某个特定领域所需的所有知识和技能后,你就可以开始了。在我看来,这是每个人在任何领域的学*过程中都应该发展的另一项技能。

当我们开始找工作时,我们中的许多人都很挣扎,因为我们把找工作视为你在到达学*旅程的终点后所做的事情。事实是,求职是另一项技能,你需要在学*该领域技术方面的同时继续努力。

</4-types-of-projects-you-must-have-in-your-data-science-portfolio-4b67cc25ed3e>

获得这份工作更多地取决于学*过程和如何玩游戏,而不是你是一名了不起的数据科学家或一名白手起家的程序员。你需要知道如何赢得比赛,掌握技术知识只是迈向大胜的第一步。

在这篇文章中,我们讨论了接*你想要的工作需要采取的步骤,以及如何使用这些步骤来增加你获得工作的机会。我想告诉你的是,找工作在情感上非常具有挑战性,有时,拒绝会给你很大的打击,但是,记住,你值得,你需要的只是耐心和毅力。

解决数据科学问题的 5 种结构化思维技巧

原文:https://towardsdatascience.com/5-structured-thinking-techniques-for-data-science-problem-solving-1f0f6b496088?source=collection_archive---------10-----------------------

以更快、更有效的方式解决你的问题。

照片由西格蒙德Unsplash 拍摄

无论您在数据科学方面的经验水平如何,当面临新的问题或挑战时,我们都需要后退一步,放眼全局,这样我们才能高效地解决问题,而不会浪费任何时间。

由于专业知识水平不同,每位数据科学家解决问题的方式也会略有不同。毕竟,你建立的项目越多,你解决未来问题的知识就越多。但是,无论您是否是初学者,并且正在寻找更有效的方法来解决问题,那么这篇文章就是为您准备的。

</10-skills-of-a-successful-data-scientist-be05a72d3aec> [## 成功数据科学家的 10 项技能

towardsdatascience.com](/10-skills-of-a-successful-data-scientist-be05a72d3aec)

本文将讨论不同的结构化思维技术,您可以使用这些技术来解决数据科学或现实生活中的问题。结构化思维是一套解决问题的步骤和技术,它通过将一个大问题分成更小的问题来更快更有效地解决大问题。

什么是结构化思维?

结构化思维是一个解决非结构化问题的框架——它涵盖了几乎所有的数据科学问题。使用结构化的方法解决问题不仅有助于更快地解决问题,还能识别出问题中可能需要额外关注的部分。把结构化思维想象成你正在参观的新城市的地图。

没有地图,你可能会发现很难到达目的地。即使你最终达到了你的目标,如果你有一张地图的话,你可能需要两倍的时间。

结构化思维是框架,不是固定的思维定势;它可以被修改以匹配你需要解决的任何问题。本文将介绍五种结构化思维技术,供您在下一个数据科学项目中使用。

№1: 六步解题模式

我们将从最简单和最容易使用的技术开始:6 步解决问题模型。这种技术使用分析方法来解决任何给定的问题。顾名思义,这种技术使用 6 个步骤来解决问题,它们是:

  1. 有一个清晰简洁的问题定义。
  2. 研究问题的根源。
  3. 集体讨论解决问题的可能方法。
  4. 检查可能的解决方案并选择最佳方案。
  5. 有效地实施解决方案。
  6. 评估结果。

这种模式遵循持续发展和改进的思维模式。因此,在第 6 步,如果你的结果不符合你的要求,你可以回到第 4 步,选择另一个解决方案,或者回到第 1 步,尝试用不同的方式定义问题。

我最喜欢这个简单技术的部分是,根据你试图解决的具体问题来改变它是多么容易。你可以在这里阅读更多关于这项技术的内容

</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器

towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)

№2:下钻技术

我们的下一项技术是下钻技术。这种技术更适合于复杂的、更大的、需要多人参与的问题。使用这种技术的全部目的是将一个问题分解到它的根源上,以便于找到解决问题的方法。

要使用下钻技术,首先需要创建一个表。表格的第一列将包含问题的概述定义,第二列包含导致此问题的因素。最后,第三列将包含第二列内容的原因,您将继续深入每一列,直到找到问题的根源。

一旦你找到了问题的根本原因,你就可以利用这些根本原因来开发更大问题的解决方案。你可以在这里阅读更多关于下钻技术的内容。

№3:解题八大纪律

接下来是解决问题的八个原则。这种技术提供了一个使用八步过程解决问题的实际计划。您可以将这种技术看作是本文前面讨论的 6 步解决问题模型的扩展和更详细的版本。

这一过程中的八个原则中的每一个都是为了让你离找到问题的完美解决方案更*一步。所以,在你得到了你的问题的先决条件之后,你就可以遵循这八大纪律 D1~D8。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

  1. D1:组建你的团队。拥有一个拥有解决项目所需技能的团队可以让项目进展更容易。
  2. D2:定义问题。使用可量化的术语描述问题,如谁、什么、哪里、何时、为什么和如何。
  3. D3:制定工作计划。
  4. D4:确定和识别根本原因。使用因果图找出问题的根本原因,将原因与结果对应起来。
  5. D5:选择并验证永久性纠正措施。根据根本原因,评估您之前制定的工作计划,并根据需要进行编辑。
  6. D6:实施修正后的行动计划
  7. D7:评估你的结果。
  8. D8:祝贺你的团队。一个项目结束后,在开始新项目之前,退一步欣赏已经完成的工作是很重要的。

№4:Cynefin 框架

Cynefin 框架技术和其他技术一样,通过将问题分解成其根本原因来实现高效的解决方案。Cynefin 框架通过从 5 个不同的角度来解决问题。

Cynefin 框架可以被认为是一种更高层次的方法,因为它要求你将你的问题放在 5 个环境之一中。

1。明显的上下文。在这种情况下,你的选择是明确的,因果关系是显而易见的,很容易指出。

2。 复杂的语境。在这种情况下,这个问题可能有几种正确的解决方案。在这种情况下,因果之间可能存在明确的关系,但并不是每个人都清楚。

3。复杂的背景。如果你的问题无法找到直接的答案,那么它就属于复杂的范畴。复杂的环境是有不可预知答案的问题。这里最好的方法是采用试错法来解决它。

4。混乱的上下文。在这个语境中,没有因果关系。所以,你的主要目标将是建立因果关系来解决问题。

5。紊乱。最后一个语境是无序,这是最难归类的语境。唯一的方法就是排除其他的环境,收集更多的信息。

你可以点击阅读关于 Cynefin 方法的更多深入知识。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

№5:5 个为什么的技巧

本文的最后一个技巧是“5 个为什么”技巧,或者我喜欢称之为“好奇的孩子方法”。我认为这是解决问题最广为人知和最自然的方法。

这个技巧只是遵循一个简单的方法,问 5 次为什么。首先,你从主要问题开始,问它为什么会发生,然后继续问为什么,直到你找到问题的根源。现在,你可能需要问多于或少于 5 个为什么来得到你的答案。

不管怎样,你可以使用这种方法最终找到问题的根源——更多关于 5 个为什么的问题,以及如何在这篇文章中有效地使用它。

外卖食品

我们每个人都有自己处理新问题的方式。如果我们作为团队的一部分工作,这可能是最有可能的情况,你将需要把问题分成更小的问题,并把它们分配给不同的团队成员。

但是,为了能够分解一个问题,你需要完全理解它,并且知道它的预期最终结果。最好和最有效的方法之一是通过结构化思考。此外,结构化思维是一个灵活的框架,任何人都可以使用它来使解决非结构化问题的过程更加顺畅。

</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>

在本文中,我们介绍了 5 种不同的结构化思考技巧,您可以用它们来更高效地解决下一个数据科学问题。所以,如果你以前没有尝试过,试一试,看看哪种技巧最适合你解决问题的常规。

机器学*中处理不平衡数据的 5 种技巧

原文:https://towardsdatascience.com/5-techniques-to-work-with-imbalanced-data-in-machine-learning-80836d45d30c?source=collection_archive---------10-----------------------

处理不平衡数据集的基本指南

图片来自 Pixabay像素

对于分类任务,可能会遇到目标类标签在各个类之间分布不均匀的情况。这种情况被称为不平衡的目标类。对不平衡数据集进行建模是数据科学家面临的一个主要挑战,因为由于数据中存在不平衡,模型会偏向多数类预测。

因此,在模型训练之前,处理数据集中的不平衡是至关重要的。在处理不平衡数据时,需要记住各种事情。在本文中,我们将讨论各种处理类不平衡的技术,以训练一个健壮的和非常适合的机器学*模型。

***Checklist:***
**1) Upsampling Minority Class
2) Downsampling Majority Class
3) Generate Synthetic Data
4) Combine Upsampling & Downsampling Techniques 
5) Balanced Class Weight**

在讨论上述 5 种技术之前,让我们集中精力为不平衡的数据集任务选择正确的指标。选择一个不正确的度量标准,如准确性,看起来表现不错,但实际上偏向于多数类标签。性能指标的替代选择可以是:

  • AUC-ROC 评分
  • 精确度、召回率和 F1 分数
  • TP、FP、FN、TN 可视化的混淆矩阵

在为您的案例研究选择了正确的指标之后,您可以使用各种技术来处理数据集中的不平衡。

1.)上采样少数类:

上采样或过采样是指创建人工或复制数据点或少数类样本以平衡类标签的技术。有多种过采样技术可用于创建人工数据点。

(来源),过采样插图

阅读下面提到的文章,更好地理解 7 种过采样技术:

</7-over-sampling-techniques-to-handle-imbalanced-data-ec51c8db349f>

2.)下采样多数类:

下采样或欠采样指的是移除或减少大部分类别样本以平衡类别标签。imblearn 包中实现了各种欠采样技术,包括:

  • 随机欠采样
  • Tomek 链接
  • *似采样
  • ENN(编辑最*的邻居)

还有很多。

(来源),欠采样插图

按照 imblearn 文档获取上述每种技术的实现:

https://imbalanced-learn.org/stable/references/under_sampling.html

3.)生成合成数据:

不推荐使用欠采样技术,因为它会移除大多数类数据点。生成少数样本的合成数据点是一种过采样技术。其思想是在少数类样本的邻*区域或邻域中生成少数类样本的合成数据点。

SMOTE(合成少数过采样技术)是一种流行的合成数据生成过采样技术,它利用k-最*邻算法来创建合成数据。

SMOTE 有多种变体,包括:

  • SMOTENC:连续和分类特征的 SMOTE 变量。
  • SMOTE:只有分类特征的数据的 SMOTE 变量。
  • 边界 SMOTE:将使用边界样本生成新的合成样本。
  • SVMSMOTE:使用 SVM 算法来检测样本,以用于生成新的合成样本。
  • KMeansSMOTE:在使用 SMOTE 进行过采样之前,使用 k 均值聚类进行过采样。
  • 自适应合成(ADASYN):类似于 SMOTE,但它根据要过采样的类的局部分布的估计生成不同数量的样本。

按照 Imblearn 文档执行上述 SMOTE 技术:

4.)结合过采样和欠采样技术:

不推荐使用欠采样技术,因为它会移除大多数类数据点。过采样技术通常被认为比欠采样技术更好。其思想是将欠采样和过采样技术结合起来,以创建适合模型训练的稳健平衡数据集。

其思想是首先使用过采样技术来创建重复和人工数据点,并使用欠采样技术来去除噪声或不必要的生成数据点。

Imblearn 库实现了组合过采样和欠采样技术,例如:

  • Smote-Tomek : Smote(过采样器)结合 TomekLinks(欠采样器)。
  • Smote-ENN : Smote(过采样器)结合 ENN(欠采样器)。

按照 Imblearn 文档执行 Smote-Tomek 和 Smote-ENN 技术。

5.)平衡级重量:

欠采样技术移除了导致数据丢失的多数类数据点,而上采样创建了少数类的人工数据点。在机器学*的训练过程中,可以使用**class_weight** 参数来处理数据集中的不平衡。

Scikit-learn 为所有机器学*算法提供了**class_weight**参数。

  • 类别权重—平衡:类别权重与输入数据中的类别频率成反比。
*Computation Formula:*
**n_samples / (n_classes * np.bincount(y))**
  • {class_label: weight} :假设,目标类标签为 0 和 1。将输入作为 class_weight={0:2,1:1} 传递意味着类 0 的权重为 2,类 1 的权重为 1。

结论:

在训练稳健模型时,数据中类别不平衡的存在可能是一个主要挑战。上述技术可用于在训练机器学*模型之前处理类别不平衡。

还可以采用成本敏感学*或惩罚增加多数类分类成本的算法。此外,决策树和随机森林应该优先于其他机器学*算法,因为它们往往在不平衡的数据上表现良好。

参考资料:

[1.] Imblearn 文档:https://imbalanced-learn.org/stable/index.html

喜欢这篇文章吗?成为 中等会员 继续无限制学*。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。

https://satyam-kumar.medium.com/membership

感谢您的阅读

5 个终端命令,让您的生活变得更加轻松。

原文:https://towardsdatascience.com/5-terminal-commands-that-make-your-life-a-little-easier-1370a5536ffd?source=collection_archive---------21-----------------------

杰弗逊·桑托斯Unsplash 上拍摄的照片

当我第一次在我的电脑上使用命令行时,它看起来令人困惑,而且技术含量低。这让我回到了少年时代,在老式的 POS 系统中输入代码,或者在过时的公司内部网中查看库存。虽然这些技术看起来过时了,但它们很实用。随着我对终端越来越熟悉,我很快意识到它不仅仅是功能性的,它暴露了许多小程序,你可以用它们来与计算机交互,解决问题,甚至以复杂的方式链接在一起。以下是我发现自己最常用的一些程序的分类。

htop

Unix 机器附带了内置的命令行程序top,它允许您查看系统上当前运行的进程的实时分解。这是 1984 年发行的经典节目。2004 年, Hisham Muhammad 发布了htop(h指的是他的首字母缩写)与top相似,但有更好的用户界面和一些附加功能。使用htop,你可以水平和垂直滚动,以不同的格式查看进程(例如,一个树形视图),用户界面有一个彩色输出,这看起来微不足道,但对可读性有很大帮助。唯一的缺点是htop没有预装在您的机器上,需要使用以下命令下载:

apt-get install -y htop

或者在 Mac 上使用 brew

brew install htop

htop 用户界面

tree命令预装在 Linux 上,是我在为项目存储库编写文档时经常使用的一个方便的工具。它从运行命令的文件夹开始递归地遍历文件系统。因此,如果您在 base ~ filesystem 文件夹中键入tree,那么该命令将遍历整个文件路径,显示文件夹和文件名。此命令需要安装在 Mac 上:

brew install tree 

以下是在小文件夹中运行时的输出示例:

mac 上的树命令输出

wikit

我花在打开浏览器窗口、浏览维基百科和执行搜索上的时间是巨大的。但是有时候,我真的只想读一小段摘要介绍。Wikit是一个用于 linux 的命令行工具,它返回维基百科文章的介绍性段落。每当我使用 linux 时,我都喜欢快速查阅资料。

定位

顾名思义,locate在文件系统中搜索一个搜索项,并返回结果的完整路径。我发现自己经常使用它,因为它比点击文件夹寻找东西要快得多,如果它返回多个输出,你可以通过管道把它输入到grep来改进搜索。

假设我想找到所有带有“medicare”字样的文件,并且我知道它们必须在特定的文件夹中(或者在我的情况下,在可移动卷上)。我可以使用下面的语法来过滤locate返回的结果:

locate medicare | grep -i volumes------locate [file search term]| grep -i [folder]

咖啡因

列表中最有用的命令之一,caffeinate让你的电脑保持清醒。市场上有许多 GUI 程序实现了同样的目标,但是有了 caffeinate,你可以做一些事情,比如在特定进程运行时让你的计算机保持清醒,然后停止阻止你的计算机睡眠。以下命令使我的计算机保持 100 秒的清醒状态。

这个命令在 Mac 和 Linux 计算机上都可用,并且对于模型训练或 web 抓取之类的事情特别有用,在这些事情中,您可能有一个通宵运行的过程。

希望您已经了解了一些新的命令,现在您可以在日常工作中部署这些命令。欢迎在下面用你最喜欢的命令行程序发表评论!

快乐编码:)

查看我的网站

每个“NLP 爱好者”都必须知道的 5 种文本解码技术

原文:https://towardsdatascience.com/5-text-decoding-techniques-that-every-nlp-enthusiast-must-know-6908e72f8df9?source=collection_archive---------9-----------------------

可视化自然语言处理中流行的文本解码方法

来自的修改图像

自动文本生成系统的最终目标是生成和人类书写文本一样好的文本。在 NLP 中,生成任务背后的核心思想是关于生成特定于特定上下文和约束的文本,其中一些是文本摘要、语言翻译、语音到文本等。一旦模型在这些任务中的任何一个上被训练,离散单元的质量以及最终模型生成的序列取决于人们采用的解码策略。这些技术各有利弊。

在这篇博客中,我们将介绍一些流行的文本采样技术,如随机采样、贪婪采样、波束搜索、top-k 采样和 top-p 采样。

随机抽样技术|作者图片

随机抽样中,想法非常简单,在生成过程中的每个时间步 (t) ,我们根据在整个词汇表的每一步生成的条件概率分布抽样一个随机单词。这种技术可以被认为是我们将在这个博客中讨论的所有技术中最不稳定的一种。下图显示了同一— 的图示

序列到序列设置中的随机解码|作者图片

贪婪解码技术|作者图片

贪婪解码中,在生成过程中的每一个时间步 (t) ,我们选择具有最高条件概率的字。因为采样不允许任何随机性,所以在模型权重冻结后,该方法默认为确定性的。当目的是生成一个短序列时,它工作得相当好。然而,当生成更长的序列时,这种方法会陷入循环,最终生成冗余的序列。

下图显示了同一产品的图示视图—

序列到序列设置中的贪婪解码|作者图片

波束搜索技术|作者图片

波束搜索中,的想法是在生成文本的同时对一个高似然序列进行采样。为此,我们定义了所谓的波束大小(B ),它基于在生成阶段的上一步中选择的单元,在每个时间步长(t)对 Top-B 单元进行采样。这样,如果我们要生成一个 5 个单词的序列,那么我们将得到 3⁵序列,我们从中选择并返回一个具有最大可能性的序列作为我们的最终序列。同样根据的这项研究,作者发现当生成的序列很短并且不是开放式的时,波束搜索工作得很好。

下面的图像显示了同一— 的图示视图

光束搜索技术|来自的修改图像

图示为光束搜索的工作方式。假设 ABD 和 CED 是模型生成的可能性值最高的两个序列。最后,返回具有较高值的值。

Top-k 采样技术|图片由作者提供

top-K 采样中,在生成过程中的每一个时间步长 (t) ,我们首先根据该时间步长生成的条件概率分布对 top-k 最可能的单词进行采样。我们只在那些前 k 个单词中重新分配概率质量,并最终基于条件概率从该集合中选择一个随机单词。这里,随机性是基于 k 的选择而引入的,它有助于在每一代中试验和输出不同但相关的序列。另外,对于 k=1,这种技术的表现类似于贪婪解码

下图显示了同一产品的图示视图—

序列到序列设置中的 Top-k 解码|图片由作者提供

图示为 k=3 时 top-k 的工作情况。根据概率,“男孩”、“你好”和“男人”这三个词排在我们的前三名。随后我们在那个集合中重新分配那些概率,并最终做出我们的选择。

细胞核取样技术|作者图片

top-p sampling 中,又称核采样,在生成过程中的每个时间步 (t) 中的,我们生成一个累计概率超过概率质量 P 的小词子集。然后在这个集合中重新分配概率,最后,我们基于概率从那个集合中选择一个随机词。top-p 采样允许我们结合 top-p 字的动态大小窗口的概念,不像 top-k 为每一步固定 k 的大小。****

下图显示了同一— 的图示视图

序列到序列设置中的 Top-p 解码|图片由作者提供

图示为 p=0.6 时 top-p 的工作情况。单词‘男孩’和‘男人’的概率和超过阈值概率质量 0.6。我们选择这两个词,用重新分配的概率创建一个后续集,并最终做出选择。

结论

在上面讨论的所有解码技术中,没有一个工作得最好的硬性规则。这完全取决于您的特定用例,您是希望有可能的和可预测的单词序列,还是希望模型在生成时勇敢而有创造性。一般来说,对于像故事生成、诗歌生成等用例(生成有趣句子的可能性是无穷无尽的)你可能想要尝试 Top-p 或 Top-k,对于像翻译这样的用例(对于如何将给定的句子翻译成目标语言没有太大的变化)你可能想要尝试 Beam search。你也可以摆弄 softmax 的温度值,通过将温度值设置为接* 0,并在此之后应用上述技术,使分布更加偏斜,在某种意义上也更有把握。****

对 NLP 感兴趣?然后你可能会想看看我的YouTube 频道 在那里我解释了 NLP 论文和概念:

我希望你喜欢读这篇文章。如果你愿意支持我这个作家,可以考虑报名成为中的一员。每月只需 5 美元,你就可以无限制地使用 Medium。谢谢!

这里有一些你可能会感兴趣的帖子

**</8-types-of-sampling-techniques-b21adcdd2124> https://medium.com/mlearning-ai/10-popular-keyword-extraction-algorithms-in-natural-language-processing-8975ada5750c </5-outlier-detection-methods-that-every-data-enthusiast-must-know-f917bf439210> **

关于数据可观测性,每个数据工程师都需要知道的 5 件事

原文:https://towardsdatascience.com/5-things-every-data-engineer-needs-to-know-about-data-observability-fcde41aefabf?source=collection_archive---------19-----------------------

如何信任您的数据工作流,一次一个管道

图片由 Unsplash 上的 Paul Skorupskas 提供。

作为一名新的或者有抱负的数据工程师,有一些 必备的技术和框架 你应该知道。如何建立数据管道?检查。如何清理、转换和建模您的数据?检查。如何在接到首席执行官关于数据丢失的疯狂电话之前防止数据工作流中断?也许不是。

通过利用我们在软件工程和开发者运营(DevOps)领域的朋友的最佳实践,我们可以更具战略性地思考如何解决“好管道,坏数据”的问题。对许多人来说,这种方法也包含了可观察性。

杰西·安德森 ,大数据研究所董事总经理,《数据工程团队:创建成功的大数据团队和产品》一书的作者,以及蒙特卡洛联合创始人兼首席执行官 巴尔·摩西 ,分享你需要知道的一切,以开始使用这下一层的数据堆栈。

数据工程通常被称为“数据科学的管道”,通常指的是数据工程师确保所有管道和工作流正常运行的方式,正确的数据以正确的方向流向正确的利益相关者。但我交谈过的大多数数据工程师也以一种非常特殊的方式与管道工联系在一起:你只有在出问题的时候才会打电话给他们。

你的副总裁深夜发来的电子邮件— 我需要最新的数字来做明天早上的董事会报告,而我的 Looker 仪表盘坏了。

一位数据科学家的清晨电话——他们为一个模型消耗的数据集不再正常工作。

来自营销主管的会议中期懈怠— 我这个月的活动投资回报率不正常。我觉得归因数据有问题。

从来没有来过的消息:这份报告的数据很完美。继续努力吧!

好吧,希望你的公司确实认可并欣赏一贯出色的工作,但事实仍然是:太多的数据工程师花了太多的时间去救火、解决问题,并试图修补破裂的管道。

摆脱深夜邮件恶性循环的一种方法?数据可观察性。

#1.什么是数据可观察性,以及它为什么重要

数据可观察性是现代数据技术堆栈中的一个新层次,为数据团队提供了可见性、自动化,并针对损坏的数据(即,数据漂移、重复值、损坏的仪表板……你懂了吧)发出警报。通常,当问题发生时,可观察性会导致更快的解决,甚至有助于从一开始就防止停机时间影响数据消费者。

除了其明显的优势——更健康的数据!—数据可观察性还可以在您的整个组织中建立信任并培养数据驱动的文化。当可观察性工具和框架可供数据消费者以及工程师和数据科学家使用时,他们可以更全面地了解数据来自哪里以及如何使用数据,并实时了解已知问题的状态。这种增加的透明度带来了更好的沟通、更高效的协作和对数据的更多信任。

有了数据可观察性工具,工程师们就可以重新利用以前花在救火和应对数据紧急情况上的宝贵时间。例如, Blinkist 的数据工程团队发现,自动化监控为每个工程师每周节省了 20 个小时。这些宝贵的时间现在可以用于创新和解决问题,而不是争论出错的数据。

#2.DevOps 如何激发数据的可观察性

所有这些关于可观察性、停机时间、监控和警报的讨论,对于任何有软件工程经验的人来说,听起来都很熟悉。这是因为这种比较是有意的:数据可观察性的概念是由 DevOps 启发而来的,遵循了软件工程师在过去 20 年中开发的原则和最佳实践,以防止应用程序停机。

就像在 DevOps 中一样,数据可观察性利用了对数据的全面关注,将脚本从临时故障排除转变为监控、警报和分类的主动自动化。通过应用这些原则,数据工程师可以更好地识别和评估数据质量,与其他团队建立信任,并为数据驱动的组织奠定基础。

按照应用工程中的可观察性框架,数据可观察性分为五个支柱:新鲜度、分布、容量、模式和沿袭。

  • 新鲜度捕捉你的数据表有多新。
  • 分布告诉你你的数据是否落在预期范围内。
  • Volume 提供了关于数据表完整性和数据源健康状况的见解。
  • Schema 提供了对谁在何时对数据表进行修改的理解。
  • Lineage 映射数据的上游来源和下游来源,帮助您确定哪里出现了错误或中断。

#3.数据损坏可能有一百万种不同的原因…但每种原因都有三个关键因素

数据停机时间发生。如果出现这种情况,了解导致大多数停机的常见因素将有助于您快速解决问题。

首先是贵公司依赖的第三方数据源的数量——您拥有的数据源越多,数据丢失或不正确的可能性就越大。你不能控制第三方消息来源,但可观察性有助于你第一个知道什么时候出了问题(而不是你的 CEO 在她重要的董事会议的早上)。

其次,随着数据源数量的增加,数据管道的复杂性也在增加。一旦数据流入您的组织,它可能会被存储、保护、处理、转换、聚合和交付,同样,您的数据移动得越多,出错的机会就越多。

破碎数据的最后一个关键因素可能是你首先想到的:你不断增加的数据消费者数量。随着数据通过管道传输到更多的仪表板和 BI 工具中,仍然有更多的机会出现损坏,以及可能引发最后一分钟消防演*的无意误解或曲解,而实际上您的数据从一开始就没有任何问题。

#4.数据可观察性不仅仅是严格的测试和监控

就像在应用工程中一样,测试是识别数据中断或问题的有用方法。但是光有数据测试是不够的,尤其是在大规模测试中。数据变化很大,即使是中等规模的数据集也会带来很大的复杂性和可变性。它还来自第三方来源,其中数据结构的更改可能会在没有警告的情况下发生。对于一些数据团队来说,安全性和合规性问题可能会使他们难以找到可用于开发和测试目的的代表性数据集。

由于单元测试无法发现或预测每一个可能的问题,创新的数据团队将测试与整个管道的持续监控和可观察性相结合。自动化使这成为可能,最好的可观察性工具使用机器学*来观察、理解和预测停机时间,自动生成规则,并智能地路由警报以更快地解决问题。

数据的可观察性还提供了血统,我们之前将其定义为映射数据的上游来源和下游来源。Lineage 真正让您鸟瞰您的数据,了解它来自哪里,谁与它进行了交互,进行了哪些更改,以及它最终在哪里提供给最终消费者。

这种可见性支持数据发现,我们称之为下一代数据目录 —基于其谱系提供对数据的动态理解。自动化的、可扩展的和分布式的数据发现使您能够回答关于您的数据在每个域中的当前状态的问题:这个表最后一次更新是什么时候?谁能接触到它?该数据资产最后一次使用是什么时候?是生产质量吗?

有了所有这些信息和自动化操作,您可以准备和操作可靠的行动手册来进行事件补救。当停机真的发生时,您的团队将做好充分准备,找出根本原因并迅速做出响应,再次减少花在消防演*上的时间,有利于创新和解决问题。

#5.当涉及到您的数据时,拥有大部分坏数据比没有数据更糟糕。

坏数据是阴险的,而坏代码却不是。对于应用程序工程,测试通常会揭示任何错误——或者,如果没有,您的应用程序可能会由于错误代码而崩溃。然后你就能修好它。

有了数据,就不一样了。即使进行了测试,您可能也没有意识到坏数据已经通过许多 API 或端点之一悄悄进入了您的生态系统。如果没有可观察性,坏数据可能会在一段时间内未被发现,从而导致不正确的报告,甚至做出不明智的决策。

随着组织越来越依赖数据来推动业务发展,数据工程师早就应该像开发运维工程师那样关注数据质量了。通过采用更全面的数据质量和发现方法,您和您的团队可以回收宝贵的时间,建立信任,并打破深夜电子邮件和最后一分钟消防演*的循环。永远。

有兴趣了解更多?伸出手去 杰西【安德森】 或者 巴尔摩西

我在大学没学到的 5 件事

原文:https://towardsdatascience.com/5-things-i-didnt-learn-at-university-da42b0049c66?source=collection_archive---------27-----------------------

观点——大学在为我的 IT 和数据科学职业做准备方面让我非常失望

IT 和数据科学学士学位值多少钱?

雷琛Unsplash 上的照片

在我目前的职业生涯中,我正在处理几个关于数字化的趋势主题,如通过云更新 IT、提高效率的敏捷性或客户和员工满意度。此外,我经常遇到数据科学环境中的话题。然而,我不得不说,在我的第一份工作中,我自学了大部分所需的技能,或者至少在后来的硕士学位中学*了相关的理论。我经常问自己,为什么我攻读学士学位的大学没有为我即将到来的职业生活做好准备。某些教授和学*内容的一些过时的说法今天仍在我的脑海中,并向我表明大学经常忽视最先进的趋势。

云只是一个连接到我的路由器的文件台

在第一学期,我必须努力完成许多基础课程,其中许多课程我再也不需要了,但让我难以忘怀的是一位教授的说法,他说云没有什么特别的,他只需将他的硬盘连接到他的路由器上,云就准备好了。回想起来,它告诉我,通常是理论上的技术书呆子,他们可能被困在一个不再是最新的世界。基础研究是学*的一部分,但我希望老师和教授们至少敢于探索这个美丽的新世界。这项技术对公司有什么附加价值,它是一个什么样的游戏规则改变者,然后我不得不从贸易杂志和实践中学*。尤其是当涉及到云时,对公司来说有巨大的成本和效率机会-不仅仅是路由器上的硬盘驱动器。

公司现在也使用像数据仓库这样的东西

在数据库和 SQL 课程中,我学到了至少一些基本的东西,为我以后作为数据分析师和程序员的工作做准备。然而,直到今天,教授所说的除了正常的数据库之外,像数据仓库这样的东西也在不断增加,这仍然引起了我的共鸣。这是在 2014 年,当时这种技术实际上已经是最先进的,行业已经依赖于数据湖。对我来说,这些东西实际上也属于课堂,如果有人至少听说过一些,并澄清了背景,我会很感激,但在这里,这样的前瞻性技术也完全被忽略了。

敏捷还是一个东西吗?

除了 IT 话题,我在我的专业中专注于项目管理,但是我真的没有听说过敏捷 这个词。在这里,我学到了经典的项目管理,但没有像 Scrum、看板、开发运营等时髦话题的痕迹。此外,你必须记住,这是一个 it 和项目管理之间的研究课题。直到上了硕士的学*课,我才第一次至少学到了理论。回想起来,敏捷项目管理的技术在我学士学位期间的第一个项目中非常有用。诸如我如何才能管理好第一个小项目、让团队参与进来、合理地设定截止日期并让客户满意之类的问题——当我了解这些问题时,我本可以更好更快地完成所有这些主题。

那对我来说是希腊语。

我不得不学了两个学期的西班牙语,除了“Vamos a la Playa”和 Hola 之外,其他的我都记不住。在我看来,像基础数学这样的课程或者像演示管理这样的软技能课程会更适合。在这里,最初的几年是痛苦的,但学*非常丰富。

GIF 的 GIF

t 检验,Z 检验,置信区间…

毫无疑问,统计学在数据分析领域是非常有趣和重要的。但我很快了解到,公司和老板更关心设计良好的仪表板和 KPI。当然,有足够多的用例需要统计和数据科学,但是一门“如何设计一个清晰的仪表板”的课程会有所帮助。

摘要

我不想诋毁我在学*中所学到的一切,但我不得不说,学士学位尤其令我失望。理论基础很重要,但是你也必须展示它的实际好处。学*内容也经常过时。我希望在这里看到更多关于当前经济发展的参考。对我来说,开头的基础知识和结尾的实用参考结合起来会很有用。回想起来,我对某些老师的态度感到非常失望,他们压制了热门话题。你有哪些经历?

"教育不是注满一桶水,而是点燃一把火."——w·b·叶芝

成为数据科学家之前我希望知道的 5 件关键事情

原文:https://towardsdatascience.com/5-things-i-wish-i-knew-before-becoming-a-data-scientist-607021520be5?source=collection_archive---------11-----------------------

在我的数据科学职业生涯中,我后悔没有早点做的事情。

科林·哈迪在 Unsplash 上的照片

介绍

在我的数据科学生涯中,有很多事情我后悔没有早点做。特别是,有些事情如果我早点开始做,会对我的工作产生重大影响。

因此,为了帮助其他人避免同样的错误,下面是我后悔在成为数据科学家之前不知道的 5 件事。

除了阅读这篇文章,你还可以看看我在 YouTube 上关于这个话题的视频。

早点学会编码

沙哈达特·拉赫曼摄

在今天的数字世界中,学*编码是最有价值的技能之一。如果你想从事科技行业,这一点尤为重要。

对于数据科学家来说,不会编码就很难创造价值。能够编码让你将理论和模型付诸实践。一个不能创造价值的数据科学家——至少从商业角度来看——不是一个非常好的数据科学家。

如果你像我一样,后来才更认真地对待编程,那么即使是学*基础知识也会感到力不从心。坏*惯会随着时间的推移而发展,主要是因为从一开始就不知道如何正确编码。

现在,我不是说数据科学家需要像软件开发人员一样编码。根据我的经验,数据科学在编码技能要求方面有相当大的余地。当然,学*足够的代码来完成数据科学基础知识是可能的,例如在笔记本上进行探索性的数据分析。尽管如此,我认为能够理解并实现更高级的编码实践是非常有价值的。

最*,我一直在读 Alfredo Deza 和 Noah Gift 的《实用手册》。MLOps 的兴起证明了我们需要将软件开发实践与机器学*结合起来。很明显,企业需要能够将数据科学家创建的模型自动化、测试和部署到生产中。

即使我永远也不会写出令人惊叹的代码投入生产,能够阅读和理解更复杂的代码仍然很棒。如果我早些时候正确地学会了编码,那么总的来说,它会给我一个更好的基础。

如果你感兴趣,你可以看看这个视频,我在视频中谈到我将如何为数据科学重新学* Python。

学会喜欢统计学

克里斯·利维拉尼摄

我很肯定大多数人会同意统计学是一门有用的学科。然而,对统计学有真正兴趣和热情的人呢?从我的经验来看,肯定没有这么多。

从高层次来说,统计就是做出明智的决策。这是一个让我们远离偏见的工具,我们经常成为偏见的受害者。如果数据科学家要推动业务关键决策,这一点极其重要。

在学术界学*和“应用”统计学给了我一个负面的印象。直到我开始学*并使用它来理解机器学*算法,我才渐渐喜欢上它。

只要你详细描述了你的所有步骤,在课程作业中做出稍微错误的结论并没有那么糟糕,因为学术界的通常目标是最大化分数。然而,由于潜在的财务影响,与传统学术界相比(除非你是一名学术研究人员),在商业环境中进行的统计似乎更有“分量”。

例如,如果我把更多的精力放在学*像时间序列分析这样的常用方法上,我会更容易重新掌握。相反,我现在不得不在没有教授帮助的情况下从头开始努力学*。

在数据科学中,你要么喜欢统计学,要么学会喜欢统计学。没有真正的解决办法。

不要过度模仿机器学*

阿瑟尼·托古列夫摄

*年来,人们非常容易陷入过度宣传机器学*的陷阱。我以前没有意识到这一点,媒体和营销是主要原因。

最终,如果你把它分解,机器学*只是以智能算法的方式应用于机器的统计数据。

例如,我看到有人将线性回归称为“机器学*技术”——而实际上,线性回归是建模最基本、最常用的统计工具。人们需要在某个地方划清界限,将基本统计学重新贴上“机器学*”的标签变得越来越普遍。

在我看来,机器学*有两个方面:一是工程方面,它更专注于将模型部署到生产中,并使用更多的软件开发实践;然后是建模方面,数据科学家确保模型按预期工作,并回答业务问题。

除非你的目标是成为一名机器学*工程师,否则你很可能会从事建模方面的工作。因此,熟悉统计是必须的,过度使用机器学*可能会让你不小心跳过作为数据科学家所需的基础知识。

技术细节的价值

照片由 Dmitry Demidko 拍摄

作为一个喜欢讨论项目技术细节的人,我花了一段时间才意识到大多数人根本不在乎。

我有一种很好的感觉,这是由于多年在学术界度过的时光。为了在学校取得成功,你需要展示你的作品,这样你就可以得到分数以获得更高的分数。

不幸的是,现实世界中的大多数人,尤其是那些有影响力的人,更关心结果而不是技术细节。数据科学家的角色本质上是通过将数据翻译成通俗易懂的语言来帮助利益相关者做出最佳决策。

但这并不是说技术细节不重要。相反,优先考虑的应该总是价值第一,其次才是技术细节。

我喜欢把这比作销售产品。营销人员首先关注价值,展示购买和使用他们的产品后,你的生活会发生怎样的变化。一旦你迷上了,你可以以后再研究细节。没有人会在展示他们的产品所能提供的价值之前展示细节。

带文档的版本控制

Yancy Min 摄

我从未对我的项目进行版本控制,直到我意识到跟踪大型项目中的变更是多么令人困惑。

我认识的大多数人都没有对他们的项目进行版本控制。唯一这样做的人已经熟悉了软件开发实践。

和我的大多数朋友一样,当年我使用 GitHub 上传我完成的项目,向雇主“展示”它们。只有一个“初始提交”,没有正确的自述文件。

我当时不知道的是,大多数雇主并不关心一个没有用文档进行适当版本控制的项目。

雇主希望看到随着项目的发展,你知道如何正确使用 Git。这是因为当与其他团队成员一起处理一个项目时,经常会用到版本控制。此外,它通常用于项目的持续开发和集成

他们还希望看到你知道如何通过文档向公众传达你的项目。这确保了每个人——无论是否在你的团队中——都知道如何使用这个项目。

如果我从一开始就对我的早期项目进行了适当的版本控制,我将有更多的工作要展示,而不仅仅是已经完成的项目的“初始提交”上传。即使没有人注意到它们,知道如果你破坏了一些东西,你可以很容易地将一个更改回滚到一个旧的版本,这仍然是有好处的。

结论

希望我的经历能给你一些方向,让你知道应该关注什么。还有很多遗憾我没有在这里列出来,但就像生活一样,如果我们当时没有开始,我们唯一能做的就是现在开始。

如果你喜欢这篇文章,你可以在 Medium 上关注我(我正试图发布更多),或者你可以在 YouTube 上查看我的其他视频。如果你想通过电子邮件了解我在做什么,你可以考虑注册我的简讯

原载于 2021 年 12 月 12 日【https://leonlok.co.uk】

如果我必须重新学*机器学*,我会告诉自己的 5 件事

原文:https://towardsdatascience.com/5-things-id-tell-myself-if-i-had-to-learn-machine-learning-all-over-again-3feeb31a9b55?source=collection_archive---------17-----------------------

从我的经历中吸取的教训

照片由娜塔莎·霍尔Unsplash 拍摄

我离我在机器学*领域的职业目标还很远,但我对自己的进步感到非常自豪。从足球到邮件室,现在是机器学*——太棒了!

昨天(周六),我有机会与一些刚刚开始数据科学和机器学*职业生涯的了不起的人分享我的旅程,这真的迫使我思考。以我现在仅有的一点知识,我会对自己说些什么呢?退一步说,这是一个重要的问题,也是一个对初学者非常有价值的问题。

没有进一步的 adoo…

#1 学*基础知识——不要害怕犯错

我永远不会忘记我分享一篇文章的那一天,这篇文章详细介绍了从零开始的线性回归。虽然我现在已经对文章做了必要的修改,但起初,我在文章中对线性回归做了一些非常错误的假设,LinkedIn 上的统计警察(其中一些人现在已经成为了我的好朋友)很快就盯上了我。

回应我关于线性回归的文章;作者图片

你可以想象,这对我是毁灭性的。不是因为我犯了错误,而是因为我在线性回归上犯了错误。在图片中的人发表评论后,他的订阅源中的一大群人开始评论、诋毁博客,并说一些可能被认为是令人沮丧的话。

尽管如此,我还是联系了那个留下修改意见的人,感谢他对我的帮助,但令我惊讶的是,他非常抱歉,并不断试图让我放心,他不是有意以任何方式或形式叫我出去。

这是我第一次因为我在机器学*方面所做的工作而受到批评,但那次遭遇改变了我对两个关键问题的看法,这两个问题改变了我学*和工作的方式;

  1. 是的,有一些混蛋想要打倒你,但是一般来说,当你犯错误时纠正你的人只是因为他们想让你变得更好。
  2. 总是使用可靠的来源做适当的研究。我记得我写文章的那一天,我只是想把它完成,我用我能找到的任何东西来帮助我的研究。它非常缓慢,这在我的写作中表现出来。

我在观念上的小小转变帮助我更大胆地做我正在做的事情。我不再害怕犯错,因为我知道,如果我做了,1)我不会死,2)会有人检查我,并把我引上正确的道路。然而,这并没有让我变得懒惰,因为我仍然高度重视分享可靠和有价值的内容。

#2 从零开始构建事物

直到 2020 年我被裁员,我才开始重新发明轮子——那是我第一次做实*生将*一年的时间。有了所有令人惊叹的机器学*框架,比如 Scikit-Learn,让所有的机器学*看起来像一个黑盒真的很容易,我已经这样做了很长时间——我所做的只是调用fitpredict

由于我能够使用包来实现机器学*算法,我有一种错误的理解感——当我不得不写线性回归文章时,这一点明显暴露出来。另一个让我表现出无能的场景是,当我的非技术部门经理看着我正在做的一些工作,问我“决策树是如何决定价值分割的?”

我完全被难住了。

你知道这句话“如果你不能向一个 5 岁的孩子解释,你就不明白”。嗯,我无法向一个 30 岁的人解释,所以这里有一些大问题。

尽管如此,我开始使用必要的算法,但我发现当我从头开始编写算法时,我的理解成倍增长。

https://github.com/kurtispykes/ml-from-scratch

#3 让好奇心引领

最初,我*惯于让我对工作的绝望主导。我是如此渴望得到一份工作,以至于我会说“我应该做什么项目才能得到一份工作?”—听起来熟悉吗?想要在这个领域找到一份工作绝对没有问题,但是当它影响了你的判断时,就不是你的好奇心在引导你了。是绝望。

我相信我们内心深处都有一个指南针,它会告诉我们,如果我们追随自己的好奇心,应该走哪条路。只有当我们开始通过逻辑上试图确定最佳路线来干扰路径时,我们的判断才会变得模糊。

被好奇心所引导意味着你会跟随你内心的想法去做。对我来说,从前这意味着学*深度学*的基础知识,然后是学*一些关于自然语言处理的东西,现在是关于将机器学*模型投入生产——当然,你不会在一夜之间成为专家,这需要你付出大量的努力。

#4 亲自动手

当你第一次开始学*机器学*时,很容易成为概念上符合标准的人,这意味着你可以谈论正在发生的一切。当涉及到事情的实际方面时,问题就出现了,这是一种完全不同的情况。我是这种模式的罪魁祸首。

我非常专注于将事物概念化,并认为这足以让我有能力应用它们,但这与事实相去甚远。如果我能把我现在学到的东西作为一个初学者对自己说,我会告诉自己的第一件事就是应用,然后马上学*我已经应用了什么——杰瑞米·霍华德称之为自上而下的方法。

#5 有一个无关的爱好

我无关的爱好是健美操;公平地说,我一直有一个不相关的爱好,但我从未认真对待我的爱好,因为我认为它会干扰我成为数据专业人员的热情。例如,我不会尝试学*新的体重动作,因为我觉得我会牺牲太多的时间,或者我不会去健美操公园,因为我不想让人们认为我是健美操运动员——这听起来很愚蠢,但在当时是有意义的。

数据科学、机器学*、数据工程等。这些都是非常密集的任务,需要你发挥你的脑力。拥有一种分离的方式可以让你的大脑以同样的方式恢复,在一次高强度的锻炼后休息可以让你撕裂的肌肉在修复中生长。

当我开始通过自由地做健美操和学*我想学的任何东西来让自己放松时,我不仅更喜欢它,而且我发现花时间做一些与数据完全无关的事情让我增强了学*和成长的能力,结果我变得更快乐了。

包裹

总结一下,我会对自己说,重要的是不要把学*机器学*、数据科学等当成目的地(例如,“学* X 需要多长时间?”).相反,把你的职业生涯想象成一次旅行,通过学*新事物、结识新朋友和体验新事物,你会不断提升自己。

感谢您的阅读!

如果你喜欢这篇文章,请通过订阅我的每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。

相关文章

**</5-laws-for-self-taught-data-professionals-4bf351ac5c24> **

作为开源机器学*框架创建者,我学到的 5 件事

原文:https://towardsdatascience.com/5-things-ive-learned-as-an-open-source-machine-learning-framework-creator-10ca2a577a55?source=collection_archive---------35-----------------------

行业笔记

如果你是一个有抱负的开源机器学*框架的创建者或维护者,你可能会发现这些提示很有帮助。

作者拍摄的照片(布莱斯峡谷 UT 在我的 2021 年公路之旅)

创建一个成功的开源项目非常困难,尤其是在数据科学/机器学*/深度学*领域。大量开源项目从来不用,很快就被放弃了。作为流量预测(Flow Forecast)的创建者,这是一个针对时间序列预测框架的开源深度学*,我分享了我的成功和陷阱。以下是我为有抱负的开源机器学*框架的创建者/维护者提供的技巧汇编。

  1. 文档,文档,文档

拥有好的文档、教程和入门指南可能是任何开源框架最重要的方面之一。虽然在工作环境中,代码库的知识通常在会议、辅导和结对编程会议上共享,但对于开源项目,主要的学*方法是通过文档、教程和示例。此外,数据科学家通常非常忙碌,如果您的文档/入门指南不清楚,他们通常会转向更易于使用的框架。不管模型的承诺性能如何,这通常是正确的。

为了帮助人们容易地开始使用你的框架,我推荐一个简单的入门教程。除了入门教程之外,你还需要一个地方来存放方法和类的更详细的文档。这对贡献者和高级用户都很有用。我发现 ReadTheDocs 很适合这个目的。对于数据科学项目(尤其是 ML 繁重的项目),您可能还需要一个包含概念信息和模型性能信息的站点。特别是对于 FF,我们决定使用 Atlassian 的 Confluence。这为更多的概念性信息和模型结果提供了完美的位置,而不会弄乱代码文档。

当然,文档的编写和维护是相当耗时的。所以你应该在这上面投入充足的时间。我发现的一个诀窍(如果你可以这样称呼它的话)是,在编写代码的同时编写文档是最容易的。时间越久,你对代码的记忆就越模糊。最终,您和您的其他维护人员甚至不会记得某个特性存在于代码库中。所以马上写你的文档吧!

我发现的另一件有用的事情是,在做任何设计改变之前,开始一个设计文档。然后,设计文档就成了对项目的变更和变更原因的生动记忆。另一个技巧是在 VSCode 中使用类似 Python DocString Generator 的扩展。这些将自动生成适当格式的文档字符串,用于呈现您的在线文档站点。

2.“如果你建造了它,他们就不会来了”

不幸的是,创建一个好的开源数据科学框架不会自动让人们使用它。此外,很多时候,成为最流行的框架不一定是最好的,而是营销、品牌和关键字优化最多的框架。虽然许多 ML 开发者更喜欢只关注事物的技术方面,但营销和推广是必要的。

这是我们在流量预测早期努力解决的问题。尽管是第一个支持变形金刚的时序框架,但我们并没有做什么推广。其他框架很快出现,并在社交媒体上获得了更多的关注。我们面临的另一个挑战是我们框架的名字。尽管 FF 向存储库的根源致敬,但它有时会让人们困惑,让人们认为我们只是一个预测河流流量的框架,而不是一个通用的时间序列预测框架。因此,我建议从一开始就选择一个相当通用的名字。

为了更好地营销你的知识库,我建议定期在媒体上写文章,并发布教程视频。这有助于提高你的框架的流量,并建立星级。你也可以(偶尔)在适当的 Reddit 子编辑上发布主要版本。在本地聚会上发言是在 DS 社区中传播您的框架意识的好方法。大多数聚会总是在寻找新的演讲者,并且非常支持开源项目。最后,在流行的 Kaggle 数据集和竞赛上使用你的框架的教程笔记本也能有所帮助。

虽然星星真的不应该意味着太多(我认为 watchers 和 forks 是一个更好的指标),但它们在 GitHub 的推荐算法和其他人如何看待你的回购中起着核心作用。因此,随着时间的推移,尝试在存储库上建立星星是很重要的。如果你能在短时间内获得足够多的明星,你的知识库也将开始形成趋势,这将导致更多的明星。记得在 GitHub 上给你的库添加合适的标签,这样会给你的库排名(根据标签上的星星)。

举办定期活动也可以让更多的人参与到你的知识库中来。2020 年,我们举办了 FF sprint,作为 PyData 全球活动的一部分。今年在 FF,我们计划举办一场黑客节冲刺赛(点击查看细节)。在这些活动中,迅速响应 PRs 并准备好回答开发人员可能提出的问题非常重要。像 t 恤这样的激励也可以激励参与者贡献更多相关的功能。

3。测试

测试是具有挑战性的,尤其是在机器学*领域,因为大多数 ML 模型显然是不确定的。最好从简单开始,利用标准类型的单元测试(例如,测试是否返回正确的形状,测试训练循环是否端到端运行)。确保包含单元测试和集成测试。测试应该用 CircleCI 或 Travis-CI 这样的工具来运行。您可以使用 CodeCov 或其他工具来自动跟踪您的代码覆盖率。一旦你有了基本的代码覆盖,并确保这些测试通过,你现在可以开始更棘手的测试了。

为了测试诸如测试的有效性和评估循环之类的东西,你可能需要创建一个虚拟的确定性模型。然后,您可以使用虚拟模型和小型数据集运行这些函数,并检查计算是否准确。对于模型,您可以编写相对便宜的收敛“测试”来确保模型在几个时期后收敛。有了这些测试,你就可以安心了,你的代码运行正常。

也许最棘手和最耗时的测试形式之一是确保你移植到你的框架中的模型与论文中提到的原始结果相匹配。这通常需要使用精确的超参数进行实验,并对论文进行预处理。这些测试不能作为 CI 的正常部分运行,因为它们会花费太长时间。相反,它们应该只是偶尔运行一次,以确保模型性能不会随着主要框架修订而改变。

4。良好的依赖性管理和向后兼容性是必不可少的

当维护一个开源项目时,依赖关系是一个经常要处理的问题。我的首要建议是在 requirements.txt 文件中设置依赖项的版本。否则,每当一个依赖项被更新时,它可能会破坏您的代码,您将会收到一串来自用户的消息,他们想知道为什么他们的代码突然不能工作了。Dependabot 擅长打开 PRs 来自动增加依赖项,然后您可以很容易地看到它们是否会通过 CI。查看我的另一篇文章了解更多信息。

另一件需要跟踪的事情是你的框架在 PyPi 上的版本和你的发布周期。有一个易于使用的 GH 工作流,可以在发布时自动推送至 PyPi。我通常尝试在每个月初发布(或者如果我每隔一个月就发布一次)。

5。选择系统以确定问题/新功能的优先级

这就引出了我们的下一点,创建一个系统来区分问题的优先级。对于许多开源维护者来说,时间是极其稀缺的。然而,bug 和所请求的特性的数量继续呈指数级增长。因此,跟踪进度和管理未决问题非常重要。在 FF,我们尝试了各种项目管理工具(如 JIRA),但最终发现简单的 GH 问题和项目委员会效果最好。

开源维护者面临的另一个困难是委派工作。开发人员经常会出于好意自愿实现某个特性,但是却陷入了其他工作的泥沼,无法完成指定的问题。你应该试着定期与开发人员联系,尤其是在重要问题上。如果有必要,你应该尽可能礼貌地将问题重新分配给其他人来完成,如果是关键问题。

我希望你觉得这个指南有用!请随意留下任何问题或评论。也请检查我的其他文章!

我从摩根大通和 Fivetran 构建分析堆栈中学到的 5 件事

原文:https://towardsdatascience.com/5-things-ive-learned-from-building-analytics-stacks-at-j-p-morgan-and-fivetran-b9235ef0710b?source=collection_archive---------10-----------------------

大型企业和快速发展的初创企业数据管理最佳实践的简短指南

斯科特·格雷厄姆Unsplash 上拍照

我的职业生涯始于摩根大通(J.P. Morgan)的一名期权交易员,然后开始构建他们的第一个现代数据堆栈。目前,我是 Fivetran 的首席分析主管,five tran 是数据集成领域的后起之秀。一路走来,我不得不艰难地学*如何构建复杂的信息系统。今天,我想分享一些我收集的最佳实践,它们将帮助你取得成功。

1.如何构建现代数据堆栈

现代数据堆栈是一组云原生数据工具,围绕自动化、降低成本以及在数据管理的整个生命周期中对最终用户的易用性展开。以下是我构建现代数据堆栈的框架:

  1. 数据仓库–首先,建立一个基于云的数据仓库。不同的数据仓库将提供不同的可伸缩性、定价模型、SQL 方言和其他特性。云原生数据仓库的显著例子包括 BigQuery、Snowflake 和 Redshift
  2. 商业智能–然后,将云原生 BI 工具与您的数据仓库连接起来。不同的 BI 工具提供不同级别的可视化能力、用户友好性、协作和其他特性。BI 工具的显著例子包括 Looker、Tableau、Qlik 和 Mode。
  3. 数据管道–您需要一个工具来从您的应用程序和操作系统中提取数据,并将其加载到中央数据仓库。不同的管道供应商对易用性、可配置性、安全性和客户服务有不同的方法。示例包括 Fivetran、Stitch、Xplenty 和 Matillion。
  4. 数据转换–最后,您将需要工具来将数据转换为用于报告和预测建模的模型。许多数据管道都包含转换工具,但 dbt 是一个很好的独立例子。

大多数供应商提供免费试用。你也可以参考像 Gartner 这样的行业出版物来获得更详细的比较。

2。如何招聘前几名数据员工

去年,我雇佣了十多名有才华的数据专业人员,现在我想分享一个经验证的框架,它将帮助您提升:

  1. 第一屏:测试高级技术技能,尤其是高级 SQL 技能。可以使用 HackerRank 等测试软件,提高筛选效率。
  2. 第二屏:执行技能测试。如果这是第一次招聘,让候选人写一份 30-60-90 天的计划,并评估他们的业务战略。如果这不是第一次雇用,让他们通过现有的业务逻辑代码工作。这是一个模拟他们典型工作职责的实践测试。
  3. 接下来,筛选分析技能:让你的候选人展示对复杂数据集的洞察力和可视化。或者,使用与相关用例相关的限时案例研究来评估他们的分析技能。这将测试你的候选人分析数据和表达想法的能力。
  4. 优秀的文化契合度是必须的:我们通过追求文化契合度来与公司价值观保持一致,从而不断提高人才密度。优先考虑那些特质和能力与你的团队互补的新员工。
  5. 如有疑问,请拨打参考电话。提前投资一个小时可以防止你犯下代价高昂的招聘错误。

最后但并非最不重要的一点是,严重依赖人际网络和推荐来提高招聘速度和质量。召集你的员工进行推荐,并将其与推荐激励结合起来,这是一条很长的路。像 dbt本地乐观外部连接这样的数据社区也是招聘的绝佳来源。

3。前 180 天做什么

你的前六个月对你公司的分析工作至关重要。这里有一个框架可以帮助你为早期的成功打下坚实的基础。

  1. 设计集中式数据团队:对于大多数公司来说,具有“中心辐射”结构的集中式团队是一种更好的模式,因为它有助于协调战略和执行。分析团队(hub)应该直接向 CEO 或技术主管报告,而专注于特定业务领域的 pod(spoke)应该在功能上与各自的部门保持一致。这种模式在 J.P. Morgan 和 Fivetran 都运行得很好,前者的团队必须支持大规模的业务,后者的公司需要积极扩大规模。
  2. 与同行团队合作:首先,确定已经在使用分析的其他团队,以及如何使用。通过帮助他们自动化数据集成和避免重复工作来建立联盟。第二,确定团队的范围,特别是确定超出范围的任务,以提高关注度和执行力。
  3. 将基础指标与领导力相结合:首席执行官应确保 BI 层是业务战略不可或缺的一部分,因为“衡量什么,管理什么”以下是一家 SaaS 公司早期重要 KPI 的简单框架:
  • 收入指标:年度经常性收入(ARR)、净收入留存(NRR)和单位经济效益:如客户获取成本、销售效率
  • 销售和营销:客户增长和流失率、月环比收入增长以及营销合格线索和转化指标
  • 产品:日活跃用户、周活跃用户、月活跃用户、客户旅程、功能使用和净推广者分数

4。如何将您的数据团队作为研发团队&运营

传统上,数据团队被简单地视为支持团队、工程团队,或者越来越多地被视为产品团队。然而,我认为数据团队是三者的结合。

  • 从产品角度构建:New Relic 的分析总监埃里克·琼斯(Erik Jones)精辟地总结了这一点:“一个成功的分析团队还必须善于收集需求、定义范围、管理预期、营销和推广、培训最终用户,并最终推动所构建产品的采用。”数据团队应该以实现自助服务为中心。我推荐使用使用率和 NPS 作为团队的北极星度量。
  • 按照工程原则运作:一个成功的分析团队还应该投入至少 25%的资源来构建一个易于导航和扩展的数据基础设施。利用这些工程原则将提高操作效率:用户请求日志、双周 sprints、代码审查和质量保证(QA)过程的实现、持续自动化和大量文档。
  • 以客户为中心的服务:分析团队应建立技术客户成功职能,提供入职和持续支持,响应用户上报的问题,与合作伙伴团队合作解决生产问题,并开发最终用户培训材料随着团队规模的扩大,这些职能可以分配给专门的技术客户成功角色。

5。如何用系统思维取得成功

带着好奇心和耐心完成您的数据现代化工作。为了做出有影响力的决策,关键是要理解组织的商业模式、约束和激励。

企业数据复杂而混乱。由于摩根大通在过去一个世纪经历了多次并购,它不得不整合许多不同的系统。这种复杂性在数据管理的整个生命周期中被放大了:分析和协调工作、系统和数据集成、数据监控和治理、跨业务的标准化、复杂的许可,以及涉及移动、转换和与数 Pb 数据交互的基本性能问题。

运用系统思维来发现正确的问题并加以解决。在摩根大通,我在管理融资业务的数据时偶然发现了成功,该业务处理价值超过 1 万亿美元的资本。销售人员、交易者等等不断地提出数据请求。然而,这些请求中的大部分执行起来很耗时,涉及小规模的局部优化,并且影响有限。我发现,战略性地在宏观层面进行交易,以匹配资产和负债,可能会释放价值数亿美元的资本,增加公司的竞争优势。这种行为超出了单个团队的权限,因为没有一个团队能够访问所有的数据。

我们的首要任务是打破孤岛,集中数据。然后,我们探索了机器学*算法,以分析如何将资本分配给客户,以实现投资回报率的最大化。由于在大型企业中自动生成任何系统级指标极其复杂,因此提供宏观指标的实时可见性并在全球范围内对其进行优化被证明具有无限的价值。

作为一名数据专业人员,我喜欢设计优雅的信息系统,并相信正确使用数据可以帮助人类实现更高水平的意识并影响变化。虽然许多人可能对迄今为止数据管理方面的重大技术进步感到欢欣鼓舞,但我认为这只是一场数据革命的开始。

让我作为数据科学家的工作更轻松的 5 件事

原文:https://towardsdatascience.com/5-things-that-make-my-job-as-a-data-scientist-easier-dc0820f0f136?source=collection_archive---------1-----------------------

办公时间

在作为一名数据科学家工作了一年之后,我在这里分享我一路走来学到的一些东西,我觉得这些东西很有帮助,并且提高了我的效率。希望这些建议能对你的旅程有所帮助:)

博伊图梅洛·菲特拉Unsplash 上的照片

  1. 熊猫的时间序列数据处理

如果您使用时间序列数据,那么您可能已经花费了大量的时间来计算缺失的记录,或者通过 SQL 查询或编写自定义函数以特定的时间粒度来聚合数据。Pandas 有一个非常高效的重采样函数,它可以帮助您以特定的频率处理数据,只需将 DataFrame 索引设置为时间戳列。

我将使用房间占用率数据集来举例说明这个函数。你可以在这里找到数据集。这个数据集记录了分钟级别的观察结果。

import pandas as pd
data = pd.read_csv('occupancy_data/datatest.txt').reset_index(drop = True)
data.head(5)

首先,我展示了一个简单的聚合,可以每小时获取一次指标。

data.index = pd.to_datetime(data['date'])
pd.DataFrame(data.resample('H').agg({'Temperature':'mean',
                                     'Humidity':'mean',
                                     'Light':'last',
                                     'CO2':'last',
                                     'HumidityRatio' : 'mean',
                                     'Occupancy' : 'mean'})).head(5)

尽管这个数据集并不稀疏,但在现实世界中,人们经常会遇到缺少记录的数据。考虑这些记录很重要,因为如果没有记录,您可能希望输入 0 值,或者使用上一个或下一个时间步长进行插补。下面,我删除了第 15 小时的记录,以展示如何使用第 14 小时的时间戳来估算缺失值:

data = pd.read_csv('occupancy_data/datatest.txt').reset_index(drop = True)data_missing_records = data[~(pd.to_datetime(data.date).dt.hour == 15)].reset_index(drop = True)data_missing_records.index = pd.to_datetime(data_missing_records['date'])data_missing_records.resample('H', base = 1).agg({'Temperature':'mean',
        'Humidity':'mean',
        'Light':'last',
        'CO2':'last',
        'HumidityRatio' : 'mean',
         'Occupancy' : 'mean'}).fillna(method  = 'ffill').head(5)

2.通过 Plotly Express 实现快速可视化

从分析到模型训练到模型报告,经常需要可视化。特别是对于时间序列图,我注意到我花了很多时间试图在 matplotlib 中定制我的 x 轴刻度的大小和角度。在我改用 Plotly Express 后,我减少了大约 70%的制作图表的时间。如果我想在我的视觉效果中实现特定的细节,我仍然可以通过使用 Plotly Graph 对象来实现。此外,Plotly 通过 Express 提供了许多简单的选项,如在绘图中设置组颜色,从而产生更强大的可视化效果。

import plotly.express as px
data['Temp_Bands'] = np.round(data['Temperature'])
fig = px.line(data, x = 'date',
              y = 'HumidityRatio',
              color = 'Temp_Bands',
             title = 'Humidity Ratio across dates as a function of
             Temperature Bands',
             labels = {'date' : 'Time Stamp',
                      'HumidityRatio' : 'Humidity Ratio',
                      'Temp_Bands' : 'Temperature Band'})
fig.show()

使用上面提到的占用数据集,我使用 Plotly Express 创建了带有颜色分组的线图。我们可以看到只用两个函数创建这些图是多么容易。

3.通过 Swifter 加速熊猫申请()

我有时在处理 pandas 列时会遇到很长的等待时间,即使是在有大型实例的笔记本上运行代码。取而代之的是一个简单的单词添加,可以用来加速 pandas 数据框架中的应用功能。人们只需要更快地导入库。

def custom(num1, num2):

    if num1 > num2:
        if num1 < 0:
            return "Greater Negative"
        else:
            return "Greater Positive"
    elif num2 > num1:
        if num2 < 0:
            return "Less Negative"
        else:
            return "Less Positive"
    else:
        return "Rare Equal"import swifter 
import pandas as pd
import numpy as npdata_sample = pd.DataFrame(np.random.randint(-10000, 10000, size = (50000000, 2)), columns = list('XY'))

我创建了一个 5000 万行的数据帧,并比较了通过更快的 apply()和普通的 apply()处理它所需的时间。我还创建了一个带有简单 if else 条件的虚拟函数来测试这两种方法。

%%timeresults_arr = data_sample.apply(lambda x : custom(x['X'], x['Y']), axis = 1)

%%timeresults_arr = data_sample.swifter.apply(lambda x : custom(x['X'], x['Y']), axis = 1)

我们能够将处理时间减少 64.4%,从 7 分 53 秒减少到 2 分 38 秒。

4.Python 中的多重处理

虽然我们的主题是降低时间复杂度,但我经常以处理我希望在多个粒度上处理的数据集而告终。在 python 中使用多处理可以帮助我通过利用多个工作者来节省时间。

我使用上面创建的相同的 5000 万行数据框架来演示多处理的有效性。除了这次我添加了一个分类变量,它是从一组元音中选择的随机值。

import pandas as pd
import numpy as np
import randomstring =  'AEIOU'data_sample = pd.DataFrame(np.random.randint(-10000, 10000, size = (50000000, 2)), columns = list('XY'))
data_sample['random_char'] = random.choices(string, k = data_sample.shape[0])
unique_char = data_sample['random_char'].unique()

我使用了一个 for 循环和 concurrent.futures 中的进程池执行器来演示我们可以实现的运行时减少。

%%timearr = []for i in range(len(data_sample)):

    num1 = data_sample.X.iloc[i]
    num2 = data_sample.Y.iloc[i]

    if num1 > num2:
        if num1 < 0:
            arr.append("Greater Negative")
        else:
            arr.append("Greater Positive")
    elif num2 > num1:
        if num2 < 0:
            arr.append("Less Negative")
        else:
            arr.append("Less Positive")
    else:
        arr.append("Rare Equal")

def custom_multiprocessing(i):

    sample = data_sample[data_sample['random_char'] == \
    unique_char[i]]

    arr = []

    for j in range(len(sample)):
        if num1 > num2:
            if num1 < 0:
                arr.append("Greater Negative")
            else:
                arr.append("Greater Positive")
        elif num2 > num1:
            if num2 < 0:
                arr.append("Less Negative")
            else:
                arr.append("Less Positive")
        else:
            arr.append("Rare Equal")

    sample['values'] = arr

    return sample

我创建了一个函数,允许我分别处理每个元音分组:

 %%time 
import concurrentdef main():
    aggregated = pd.DataFrame()

    with concurrent.futures.ProcessPoolExecutor(max_workers = 5) as executor:
        results = executor.map(custom_multiprocessing, range(len(unique_char)))if __name__ == '__main__':
    main()

我们看到 CPU 时间减少了 99.3%。尽管必须记住小心使用这些方法,因为它们不会序列化输出,因此通过分组使用它们是利用这种能力的好方法。

5.作为公制的梅斯

随着使用机器学*和深度学*方法进行时间序列预测的兴起,使用仅仅基于预测值和实际值之间的距离的度量标准而不是是必不可少的。预测模型的度量还应该使用时间趋势的误差来评估模型的性能,而不仅仅是时间点的误差估计。输入平均绝对刻度误差!该指标考虑了如果我们使用随机游走方法(上一个时间戳的值将是下一个时间戳的预测值)时会出现的误差。它将模型的误差与简单预测的误差进行比较。

def MASE(y_train, y_test, pred): 

    naive_error = np.sum(np.abs(np.diff(y_train)))/(len(y_train)-1)        
    model_error = np.mean(np.abs(y_test - pred))return model_error/naive_error

如果 MASE > 1,则该模型的表现比随机漫步差。MASE 越接* 0,预测模型越好。

在本文中,我们介绍了一些我经常使用的技巧,让我作为一名数据科学家的生活变得更加轻松。评论分享一些你的小技巧吧!我很想了解更多其他数据科学家在工作中使用的技巧。

这也是我的第一篇媒体文章,我觉得我在对虚无说话,所以如果你有任何反馈要分享,请随时批评和联系:)

攻读数据科学硕士学位需要考虑的 5 件事

原文:https://towardsdatascience.com/5-things-to-consider-in-a-data-science-masters-degree-48a84028959d?source=collection_archive---------20-----------------------

意见

以下是在攻读数据科学或机器学*研究生学位时要考虑的最重要的因素。

Unsplash【1】上由 Seyi Ariyo 拍摄的照片。

目录

  1. 介绍
  2. 学费
  3. 学校位置(即使偏僻)
  4. 节目持续时间
  5. 专业化类型
  6. 顶点
  7. 摘要
  8. 参考

介绍

作为一个研究并应用于许多数据科学硕士项目的人,我逐渐认识到一系列决定一个程序是否优秀的特征,以及通常需要考虑的因素。虽然在选择你最终将完成哪个硕士学位时有无数事情要考虑,但我整理了我在选择数据科学硕士学位时考虑的五件事情。我的希望是,你也可以思考这些特征,并将它们应用到你自己的搜索中,这将使你成为一名拥有硕士学位的专业数据科学家。

学费

照片由 NeONBRANDUnsplash【2】上拍摄。

这个话题可能是讨论的禁忌,因为它更经常地以一种关于金钱或个人财务,或者你有多少钱,你愿意为一个学位花多少钱的方式被详细讨论。也就是说,我希望看到更多的人谈论学费,以及学费对他们的影响,不仅是在他们寻找工作之前,而且是在他们寻找研究生课程之后。我为我的项目支付了相当多的费用,将* 60,000 美元,虽然我认为这是一个天文数字,但我可以说这是我愿意支付的金额,因为我的投资回报。我这么说的意思是,有了数据科学硕士学位,完成课程后有了一份新的数据科学工作,以及在数据科学领域的长期职业生涯,我向自己证明了这是值得的,因为它将为我提供否则我不会得到的报酬。虽然你面试或工作的一些公司不会要求硕士学位,但一些公司会或会把它作为工作描述中的必备条件。这可以让公司放心,你已经在某个领域学*和专攻了几个月,让他们在面试之外对你的能力有更多的信任和信心。也就是说,低学费绝不是更糟糕的投资,反之亦然,这只是你在参加最终选定的数据科学硕士学位课程时需要考虑的事情。最终,你会考虑很多事情,学费和学位的价格总体来说非常重要。

以下是你应该考虑学费的一些原因:

  • 投资回报率
  • 一定年限内你愿意承担的债务量
  • 你想花多少中等/可接受的学费
  • 如果学费比我将在下面讨论的其他因素更重要的话
  • 如果你的雇主愿意支付你的学费

如你所见,学费是决定你最终去哪所学校的一个重要因素。如果你在项目完成后并不打算成为一名数据科学家,不要让自己负债,相反,如果你出于好奇想了解更多,可以寻找一个更便宜、期限更短的数据科学认证。然而,如果你决定了一个硕士项目,学校本身及其各自的位置也很重要,就像学费一样。

学校位置(即使偏远)

提莫·维林克Unsplash【3】上拍摄的照片。

现在很多硕士课程都是在线的,尤其是在数据科学方面。世界事件的现状使得这一点变得更加普遍。考虑学校在哪里是很关键的,即使学校完全在线或者很偏远。为什么是因为你学校的位置往往是你工作的地方。当你申请数据科学工作时,在公司所在州或城市的知名学校完成学位会更好。例如,我在达拉斯的 SMU 完成了我的硕士学位。这个项目大部分是远程的(有一些亲身经历 s)。因为我申请的是德克萨斯州的工作,公司、招聘经理和招聘人员会看到他们更熟悉的学校。虽然这并不一定能保证更多的招聘人员和经理会更认可你,但对某些人来说可能是这样,而且这是值得的。此外,如果你去一个离你住的地方很*的学校,你可以和那些也在同一所学校上学的人建立联系和网络。

如果你最终亲自参加硕士课程,那么地点当然也是决定的一个重要因素。大多数攻读硕士学位的人目前会同时从事一份工作。也就是说,缩短通勤时间是有好处的,这样你就不会太累了。

以下是考虑学校位置的主要原因:

  • 学校的声誉让公司、招聘人员和招聘经理找到你/你可能会更突出
  • 与你学校的同学建立关系网
  • 如果你是面对面学*,通勤时间会更短

无论您是面对面学*、远程/在线学*还是两种方式的混合学*,学校位置都是决定注册哪个数据科学硕士项目时要考虑的重要因素。接下来要考虑的是程序的长度。

节目持续时间

Icons8 团队Unsplash【4】上的照片。

根据你目前的状态,你会发现这个因素在你的考虑中特别重要。数据科学硕士项目的时间长短差异很大。尽管硕士学位传统上要求两年完成,但有些要短得多——甚至总共一年左右。你可能想解决这样的问题,比如你是否有孩子,你是否想在一年的时间里同时学*和工作,你是否想在学*之余享受三个月/暑假,等等。我做的这个项目花了将* 2 年时间,修了大约 33 个学分。这很好,因为我有一些休息,但不是太多,我浪费时间。

您的课程持续时间可能会受到以下因素的影响:

  • 如果你想要一个减速的节目而不是平均节目长度
  • 如果你时间紧迫,有些项目还提供速成课程
  • 如果你的雇主愿意支付较短或较长的课程时间
  • 如果你有一个家庭,想选择一个减速课程,以便在一周内少上几节课,这样你就能更好地平衡学*、工作和生活

有几个原因可以解释为什么一个项目的持续时间很重要。我已经讨论了一些我经历过的更明显的原因,这些原因也适用于你的情况。一旦你深入了解具体的硕士课程,你会想考虑该课程提供的专业类型。

专业化类型

布莱克·康纳利在Unsplash【5】上拍摄的照片。

通常,研究生课程会提供数据科学下更具体的专业。您还可以期待不同程序之间更独特的专门化。例如,我可以选择更多地关注商业分析,而不是作为专业的机器学*。有些项目可能根本不提供专业,所以记住这一点也很重要。我选择专注于机器学*,因为我想了解更多关于常见的机器学*算法以及如何将它们应用到商业场合,以及使用机器学*进行编程。业务分析方法适用于希望更多地面向客户的人,可能是利用数据科学知识来推动决策的公司的高层领导,或者是希望较少关注代码和编程,而更多关注洞察力的人。

以下是一些常见的专业化:

  • 统计数字
  • 数据分析
  • 商业分析
  • 数据工程
  • 机器学*
  • 数据分析

根据你想在职业生涯中做什么,专业化可能非常有价值。我会比较不同的类型,看看哪一种最适合你——同时,看看每个专业下有哪些课程。有时,一个专业只能有一到两门课程,而有些专业可能有五到六门。值得注意的是,一些不提供专业的项目确实提供选修课,在某种程度上,这些选修课可以作为一个专业,由你而不是学校来定义。例如,如果你发现你所选的五门选修课中有三门都是高级统计学课程,那么在你的简历中突出这一点作为统计学专业是有益的。无论你最终选择哪一条路,在申请研究生项目时,专业都是一个重要的考虑因素。也就是说,其他要考虑的类似事情是一个项目提供的主要课程以及它提供的选修课程。

课程

为了详细说明专业的类型,你在研究生项目上所学的课程也是非常重要的。我能给出的最好建议是,确保你不要上太多数据科学的普通课程。数据科学涵盖了几个不同的方面,如统计学和机器学*;然而,如果你想专攻某个专业,或者至少有一个更独特、更详细的经历,那么你会想确保有几门综合课程可以报名。例如,如果你想学*语言,确保有不止一门自然语言处理( NLP )课程可供选择,这样你才能真正物有所值。

顶点

产品学校Unsplash【6】上的照片。

研究生课程的一个更独特的特点是能够完成一个顶点项目。这个项目通常由多个学分组成,因为你可能会研究超过两个学期。你将和一群同学一起工作,有一个教授顾问,和一个在你所写的方面是专家的专业顾问。顶点过程可能需要一个演示以及你将要写的论文的出版——你的顶点主题。例如,我的顶点是假新闻检测。这是向你未来的雇主展示你如何与人合作,你想在数据科学领域关注什么,以及你在数据科学方面的学术能力的绝佳方式。一个顶点项目可能会帮助你在数据科学领域找到一份工作,因为你的文章也会被公开发表和同行评议。

以下是在开展顶点项目时需要考虑的一些关键因素以及好处:

  • 你将和多少人一起工作
  • 你将和谁一起工作,仅仅是同学,你项目的指导老师,还是专业领域的指导老师?)
  • 它占了多少学分/它占了这个项目的多少?
  • 顶石项目的持续时间
  • 如果你需要向观众展示你的顶点

好处:

  • 放上你的简历
  • 成为特定机器学*主题的专家
  • 有一个不仅仅是学校的经历,更与现实世界的经历密切相关

正如你所看到的,研究生课程的顶点部分是非常独特的(与本科课程或认证相比),与其他课程相比也是独一无二的,所以检查你将从特定课程的顶点中获得什么是至关重要的。

沉浸

除了顶点课程之外,研究生课程还提供一种叫做沉浸式的东西。这通常是一个面对面的活动,在这里您可以第一次见到您的同学和教授,与数据科学领导者和专业人士建立联系,并听取和介绍您的顶点项目。

摘要

研究、注册和完成数据科学的理学硕士学位可能会让人不知所措。然而,我希望我能够阐明一些在申请硕士学位时要考虑的最有用的因素。虽然我已经讨论了五个,但还有无数其他的,所以请记住,还有更多需要研究。在完成我的硕士学位后,我真的可以说,我过去和在这篇文章中认为在决定读研究生院时很重要的因素,现在仍然适用。

总结一下,下面是读数据科学硕士需要考虑的五件事:

**Tuition****School Location** (*even if remote*)**Duration of Program****Type of Specializations**- courses**Capstone**- immersion

我希望你觉得我的文章既有趣又有用。如果你已经研究了硕士课程,你发现什么是申请时最有用的考虑因素,如果这些在你完成课程后仍然适用,请在下面随意评论。

以上为本人观点,不隶属。

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。

这里是我的一篇文章,概述了五大数据科学认证【7】,如果你想了解更多关于学*数据科学的一些更快的方法:

参考

[1]照片由 Seyi AriyoUnsplash(2019)上拍摄

[2]照片由 NeONBRANDUnsplash(2017)拍摄

[3]照片由 Timo WielinkUnsplash(2020)上拍摄

[4]2018 年 Icons8 团队Unsplash 上的照片

[5]照片由布莱克·康纳利Unsplash(2017)上拍摄

[6]照片由产品学校Unsplash(2019)拍摄

[7] M.Przybyla,五大数据科学认证,(2020)

2021 年作为数据科学基础要学的 5 件事

原文:https://towardsdatascience.com/5-things-to-learn-as-a-data-science-foundation-in-2021-1b22c1098e2?source=collection_archive---------23-----------------------

通过这篇短文了解和理解数据科学的一些基础知识!

(src =https://unsplash.com/photos/Xz7MMD5tZwA

介绍

很容易理解为什么有人可能想在 2021 年进入数据科学领域。这个行业已经蓬勃发展了好几年,而且似乎还会继续在久而久之发展。最重要的是,这份工作报酬很高,所以这两者加起来是一个很好的职业选择。

然而,尽管数据科学是一个热门话题和热门领域,但它也是一个复杂的领域。这个学科有如此多不同的方面,以至于很难知道从哪里开始。有这么多不同的主题,有时是交织在一起的,很难知道一个人到底从哪里开始接*这个领域。幸运的是,没有科学甚至编程经验的人可以通过一些方式进入数据科学领域!这肯定会有大量的工作,持续的教育肯定是人们在考虑数据科学之前就应该知道的事情。今天,我想揭示一些重要的基础,人们甚至可以在进入数据科学之前就开始工作。这个主题主要针对那些没有获得任何数据科学或类似定量学科认证,但想知道从哪里开始的人。

№1:了解电脑

鉴于许多数据科学都是在计算机上编程和工作,这第一点可能看起来有点显而易见,但您可能会惊讶于个人希望在数据科学领域工作而对计算机了解不多的情况。首先,您应该了解如何实际使用您的文件分配表。作为一名成功的数据科学家,能够很好地理解和使用文件是至关重要的。除此之外,您应该知道如何在各自的操作系统上做大多数事情。当然,这种教育通常是通过修修补补获得的,这需要时间,但你仍然可以通过基础研究对你正在使用的计算机有一个牢固的了解。

我认为许多数据科学家也忽视了软件之上的硬件。对于任何从事软件行业的人来说,了解硬件都是一项非常重要的技能!可以理解为什么有时数据科学家可能不具备这方面的知识或技能,而且他们很容易被忽视。大多数数据科学家使用相对声明性的编程语言工作,很少或没有与计算机的实际硬件进行交互。然而,了解这种硬件对于任何一个作为数据科学家的人来说都是一个巨大的优势。

№2:学会如何研究

数据科学家绝对需要具备的另一项重要技能是研究能力。主要原因是,作为一名数据科学家,您可能需要不断学*。如果你不总是思考问题,并不断渴望新知识,老实说,数据科学不适合你。是的,这将会很难——但是当学*关于这个学科的新信息时,拥有良好的研究技能将会走得非常远。能够快速有效地阅读文档,知道要查找什么,甚至知道点击谷歌搜索中的哪些链接,这些都是需要练*的,对解决问题至关重要。事实上,我在 2019 年写了一篇关于数据科学教育要求的文章,你可以在这里阅读:

在这篇文章发表的时候,我只做了一年左右的程序员,尽管在那之前我已经编程很多年了,但我仍然发现所需的信息量和持续的信息量有点大。我认为这将是所有数据科学家都需要面对的事情,并独自努力应对。

变得擅长研究还有另一个很好的理由。

特色。

术语“特征”是一个描述给定数据集的不同方面的词。这些也可以被认为是数据框中的列。了解这些术语将会很好地融入我在 3 中要说的内容,但是现在,让我们把注意力集中在研究如何应用到特性上。通过研究正在使用的功能,可能更容易看出功能是否真正相关,或者可能只是不相关的相关。

理解数据很重要,而不仅仅是处理数据。在某种程度上,如果不完全理解数据,就无法真正处理数据。这可能导致一些不准确的结果,并最终导致糟糕的科学。也就是说,我认为学*如何研究与实际领域本身完全无关的东西肯定是一个好主意。以下是我给你的一些建议:

  • 确保您正在研究的东西与您正在处理的实际数据集相关。当脱离上下文时,某些事情总是意味着其他事情,所以确保你的研究有相同的上下文。
  • 省去不重要的词。如果关键词很重要,它们会出现在搜索结果的标题中,这是大多数搜索引擎首先用来识别结果是否相关的。
  • 当为了研究而阅读时,不要就这一方面阅读整篇文章。一个人只需要广泛的理解,略读是完全可以接受的。

№3:学*程序员/科学家的“行话”

从事研究也是在学*程序员和科学家用语言表达事物的方式。在上一节中,我使用了“特性”这个词,这是一个表示维度的科学术语。维度是一些科学家的行话,意思是与一组观察值相关的一系列值。这个列表可以继续解释这些术语的意思,并把它们带到正常的英语口语中。也就是说,大多数科学家不会解释什么样的特征足够深入到普通人能够理解的程度。

程序员也是如此。记住这一点,如果一个人要阅读这两个学科提供的信息,那么对单词的意思有一个明确的理解当然是非常重要的。知道如何研究也将有助于一个人学*这些术语,所以这两者确实是协同工作的——你需要一个有另一个。

№4:了解 I/O

对那些对编程感兴趣的人有很大帮助的一些建议是,成为软件工程师的第一步是理解输入和输出。第一个编程步骤是打印出一些输出,“Hello World!”例如,接受输入是有原因的。

当然,这延伸到计算机编程的许多不同方面。最终,无论你在编程什么,你都需要明白,最终它总是会成为一个输入和输出的问题。你需要什么输出?一旦理解了这一点,人们就可以决定做这样一件事所必需的输入,然后是到达那里的算法。考虑到这些因素,事情真的变得比想象的要简单得多。也就是说,我认为这对任何想成为程序员或数据科学家的人来说都是非常好的建议。

№5:选择一个域

所有的数据科学家都需要处理大量的概念和编程任务。例如,数据科学家应该总是对机器学*模型及其应用、统计和测试有很好的理解。也就是说,在这些地区内部肯定有一些专业化的空间。

例如,一些数据科学家主要居住在分析领域。这并不是说数据分析师不知道很多机器学*或数据工程,而是他们所做的工作可能符合他们的偏好。对我来说,我来自编程背景而不是科学背景,所以我热爱做的和最熟悉的是计算机硬件、软件、数据和人工智能。我喜欢将模型编程得非常好,并从较低层次的角度处理数据。当然,这并不是每个数据科学家最喜欢的工作部分,但这正是我的观点——该领域的某些部分会比其他部分更适合。选择一个最适合你的地方当然是个好主意。

结论

虽然数据科学是一个很难进入的领域,但那些决心到达那里并通过教育的困难坚持下来的人肯定会得到回报。尽管需要学*的内容多得令人难以置信,但其中一些技巧可能对新人很有价值,有助于他们熟悉作为一名数据科学家可能需要做的事情,也有助于他们开始工作。这些技巧肯定会帮助你在开始数据科学职业生涯时不那么不知所措。也就是说,我希望这些建议很适合读者。感谢您的阅读,祝您度过美好的一天或一夜!

Anaconda Navigator 有 5 样你不知道的东西

原文:https://towardsdatascience.com/5-things-you-didnt-know-anaconda-navigator-had-a09ad3080cdd?source=collection_archive---------27-----------------------

意见

深入探讨这一流行的数据科学平台的特性和优势。

简·kopřiva 在unsplash【1】上的照片。

目录

  1. 介绍
  2. Python 培训
  3. 视频教程
  4. 学*网络研讨会
  5. 社区活动
  6. 社区论坛
  7. 摘要
  8. 参考

介绍

数据科学家经常使用Anaconda Navigator【2】,其中包含了 JupyterLab、Jupyter Notebook 和 RStudio 等流行且有用的应用程序。通常在这三个应用程序中,我们会停止在这个平台上寻找其他工具。当您离开主页或主页仪表板时,您会看到有EnvironmentsLearningCommunity部分。后两个功能是我们可能会错过的,因为它们与编写您自己的即时代码和在主笔记本应用程序中处理您的机器学*算法没有直接关系。然而,它们仍然很重要,可能是你还没有注意到的。我将讨论这些与 Jupyter 笔记本等更受欢迎的功能相一致的功能。其中一些工具可能对刚刚开始职业生涯的数据科学家特别有用,而其中一些工具对更有经验的数据科学家更有益,如下文所示。记住这一点,如果您想了解关于 Anaconda Navigator 平台的五件事情,请继续阅读。

Python 培训

Python 教程位置。作者截图[3]。

第一个特性是为刚刚开始学*如何编码的数据科学家准备的,或者是为想要更新和提高 Python 技能的数据科学家准备的。也就是说,如果您是更高级的人员,那么请随意进入下一部分,在那里您将找到更多关于数据科学中更复杂的用例的信息。

该功能位于Learning选项卡中,然后位于Documentation选项卡下。它被命名为' Python 教程',简单来说就是一个“官方 Python 新手入门指南”的链接。

本教程涵盖了 Python 的所有主要主题,当您开始将编程语言与统计学和数据科学理论和实践相结合时,了解这些主题至关重要。

以下是本教程将涉及的一些主要章节:

  • 控制流工具
  • 数据结构
  • 模块
  • 输入和输出
  • 错误和异常
  • 虚拟环境和包
  • 浮点运算

正如您所看到的,在 Python 的官方指南中有许多您期望看到的主要主题。几乎所有这些都是你在数据科学家的职业生涯中会遇到的事情。除了本教程之外,Anaconda 本身也有专门的 Python 培训,其中他们提到“通过Anaconda Academy可以让你的数据科学更上一层楼”。

视频教程

视频教程位置。作者截图[4]。

在菜单的Learning部分,您会看到大约有 21 个视频可供选择。这些视频特定于数据科学的某些使用案例。例如,显示的第一个“使用开源技术构建安全和透明的 ML 管道”在单击时,将会弹出一个 YouTube 页面。这个例子大约有 36 分钟长。它具体讨论了对抗性鲁棒性工具箱(ART)、深度学*和 Kubeflow 管道。可以看出,这个特性比 Python 初学者指南更高级。无论哪种方式,接触这种类型的数据科学内容或作为数据科学家自己学*都是有益的。

你可能会问自己,为什么不自己在 YouTube 上搜索数据科学视频呢?当然,你可以这样做,但这很有趣,可以让你更加信任这些视频,因为它们是由一个你可能已经在使用的知名数据科学平台推广的。它们也与 Anaconda 的其他工具和特性相关。

以下是他们在平台上分享的一些有趣的视频:

  • 阿帕奇箭;用于内存分析的跨语言开发平台
  • 康达深潜
  • 用 Dask 并行化科学 Python
  • PyViz:轻松可视化和探索您的所有数据
  • 用于图像分类的深度学*:识别分心驾驶行为

这些主题可能更复杂、更具体、更高级。然而,对于任何数据科学家来说,它们都仍然是很好的资源。

学*网络研讨会

网络研讨会地点。作者截图[5]。

类似于Learning选项卡的视频部分,该功能允许您查看和学* Anaconda 赞助的内容,这些内容被标记为网络研讨会。还有大约 20 场这样的网络研讨会,包括各种数据科学主题的视频。

以下是一些您有望在该平台上看到的有趣的网络研讨会:

  • 使用 GPU 加速深度学*
  • 在整个组织中扩展数据科学的最佳实践
  • 人工智能治理和安全——领导者需要知道什么
  • 用 Dask 扩展 Python
  • 金融服务人工智能
  • 带着 Python 数据可视化丛林

如您所见,有几个不同的视频可以让您和您的数据科学职业受益。这些网络研讨会从关注个人贡献者到领导者,如数据科学经理。网络研讨会还涵盖金融和安全等特定行业。

社区活动

活动地点。作者截图[6]。

主菜单的最后一个选项卡是Community部分。本部分包括更多关于数据科学活动的独特信息,如数据科学领域主要公司的会议。我个人去过的一个地方是数据科学沙龙,参加这个沙龙不仅有趣,而且对体验非常有益,可以见到来自不同公司的不同数据科学家。

以下是本节中您可能会看到的一些有趣的事件:

  • 数据科学沙龙
  • 紧张的会议
  • 地层数据会议
  • PyCon
  • Gartner 数据和分析峰会

重要的是要记住,其中一些事件现在可能是虚拟的,一些事件可能取决于你的物理位置。

社区论坛

论坛地点。作者截图[7]。

类似于事件部分,在Community选项卡中有论坛位置。您可能已经在使用其中的一些论坛,在这些论坛上,您可以就数据科学中的常见问题和特定用例问题展开对话,包括编码和理论。

虽然您可能已经对 Stack Overflow 很熟悉了,但是还有一些其他更独特的论坛,加入其中仍然很有好处,例如:

  • Bokeh 论坛
  • 火焰发展论坛
  • 数字发展论坛
  • Matplotlib 论坛
  • NumPy 和 SciPy 项目邮件列表

摘要

无论您是刚刚开始数据科学职业生涯,还是数据科学专家,Anaconda Navigator 都有几个特性可以让您和您的工作受益。这些功能的主题从学*到社区。我希望其中一些工具是新的,对您也有用。

总结一下,这里有你可能不知道的 Anaconda Navigator 的五个特性:

* Python Training* Video Tutorials* Learning Webinars* Community Events* Community Forum

我希望你觉得我的文章既有趣又有用。如果您使用过 Anaconda Navigator 的任何这些特性,或者如果您认为这些特性已经或将会对您作为一名数据科学家有所帮助,请在下面不吝赐教。

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我不隶属于蟒蛇导航。

参考

[1]扬·kopřiva 在 Unsplash 上拍摄的照片,(2019)

[2] Anaconda 公司,Anaconda Navigator 个人版,(2021 年)

[3] M. Przybyla,Python 教程位置截图,(2021)

[4] M. Przybyla,视频教程位置截图,(2021)

[5] M. Przybyla,网络研讨会地点截图,(2021 年)

[6] M. Przybyla,活动地点截图,(2021 年)

[7] M. Przybyla,论坛位置截图,(2021 年)

关于协方差你应该知道的 5 件事

原文:https://towardsdatascience.com/5-things-you-should-know-about-covariance-26b12a0516f1?source=collection_archive---------1-----------------------

协方差的详细解释

米克·豪普特在 Unsplash 上的照片

在处理统计和机器学*问题时,最常遇到的一件事就是协方差。虽然我们大多数人都知道方差代表单个变量的值的变化,但我们可能不确定协方差代表什么。此外,知道协方差可以为解决多元问题提供更多的信息。大多数预处理或预测分析的方法都依赖于协方差。多元异常值检测、维数减少和回归可以作为例子给出。

在这篇文章中,我将解释关于协方差你应该知道的五件事。我们不会从维基百科中的定义来解释它,而是试图从它的公式来理解它。读完这篇文章,你将能够回答以下问题。

  • 协方差是如何计算的?
  • 协方差告诉我们什么?
  • 什么是强协方差?
  • 协方差矩阵告诉你什么?
  • 协方差矩阵的特征向量和特征值给了我们什么?

1-方差和协方差公式

最好先看一下方差来理解协方差。方差解释了变量中的值是如何变化的。这取决于彼此的价值观有多远。看一下公式 1,了解方差是如何计算的。

公式 1-根据已知和未知总体均值的方差公式

在公式中,变量中的每个值都从该变量的平均值中减去。差值平方后,除以该变量中值的数量(N)。好的,当方差低或高时会发生什么。您可以查看图 1,了解方差值低或高时会发生什么。

图 1——高低方差之间的差异(图片由作者提供)

现在,是时候看看协方差公式了。它就像方差公式一样简单。与方差不同,协方差是在两个不同的变量之间计算的。它的目的是找到指示这两个变量如何一起变化的值。在协方差公式中,两个变量的值通过取平均值的差来相乘。可以看看公式 2 看清楚。

公式 2-根据已知和未知总体均值的协方差公式

方差和协方差之间的唯一区别是使用两个变量的值和平均值,而不是一个。现在,让我们看看你应该知道的第二件事。

注:从公式 1 和公式 2 可以看出,有两个不同的公式,分别是已知总体和未知总体。当我们处理样本数据时,我们不知道总体均值,我们只知道样本均值。这就是为什么我们应该用 N-1 的公式。当我们有了受试者的全部人口,我们就可以用 n 来表示。

2-协方差矩阵

你应该知道的第二件事是协方差矩阵。因为协方差只能在两个变量之间计算,所以协方差矩阵代表多元数据中每对变量的协方差值。同样,相同变量之间的协方差等于方差,因此,对角线表示每个变量的方差。假设在我们的数据集中有两个变量 x 和 y。协方差矩阵应该类似于公式 3。

公式 3–2 和 3 维协方差矩阵

它是一个对称矩阵,显示每对变量的协方差。协方差矩阵中的这些值显示了多维空间中多元数据的分布大小和方向。通过控制这些值,我们可以获得关于数据如何在二维空间中传播的信息。

3-协方差的正、负和零状态。

关于协方差,你应该知道的第三件事是它们的正、负和零状态。我们可以通过公式来理解它。当Xi-XmeanYi-Ymean同时为负或同时为正时,乘法返回正值。如果这些值的和为正,协方差为正。这意味着变量 X 和变量 Y 的变化方向相同。换句话说,如果变量 X 中的某个值较高,则预计变量 Y 中的相应值也会较高。简而言之,两者之间是正相关的。如果有一个负的协方差,这被正确地解释为相反。也就是说,这两个变量之间是负相关的。

只有当Xi-XmeanYi-Ymeanis的乘积之和为零时,协方差才能为零。然而,Xi-XmeanYi-Ymean的乘积可以在一个或两个都为零时接*零。在这种情况下,变量之间没有任何关系。为了清楚地理解它,你可以看到下面的图 2。

图 2-正、负和接*零的协方差(图片由作者提供)

作为另一个可能的场景,我们可以有一个如图 3 所示的分布。当协方差接*于零,变量的方差不同时,就会发生这种情况。

图 3-不同的方差和接*零的协方差(图片由作者提供)

4-协方差值的大小

与相关性不同,协方差值没有介于-1 和 1 之间的限制。因此,当协方差较高时,得出变量之间可能存在较高关系的结论可能是错误的。协方差值的大小取决于变量中值之间的差异。例如,如果变量中的值介于 1000 和 2000 之间,则可能具有高协方差。但是,如果两个变量的值都在 1 和 2 之间,则可能会有较低的协方差。因此,我们不能说第一个例子中的关系比第二个更牢固。协方差只代表两个变量之间的变化和关系方向。从图 4 可以理解。

图 4-高协方差值与低协方差值的对比(图片由作者提供)

虽然第一个图中的协方差非常大,但第二个图中的关系可以更高或相同。(图 4 中的值是作为例子给出的,它们不是来自任何数据集,也不是真实值)

5 —协方差矩阵的特征值和特征向量

特征值和特征向量告诉我们什么?这些是协方差矩阵的基本部分。需要协方差矩阵来寻找数据点的大小和方向的方法使用特征值和特征向量。例如,特征值代表 PCA 中主分量方向上的扩展幅度。在图 5 中,第一个和第二个图显示了协方差接*零时的点分布。当协方差为零时,特征值将直接等于方差值。第三和第四个图表示协方差不为零时的点分布。与前两个不同,这两个都要计算特征值和特征向量。

图 5-协方差的特征值和特征向量及其对方向和大小的影响(图片由作者提供)

从图 5 可以看出,特征值代表变量 x 和 y 的幅度,特征向量表示方向。当协方差为正时,可以从值v[0,0]的反余弦中找到传播角度。如果协方差为负,则值v[0,0]的余弦给出传播方向。

如何从协方差矩阵中求特征值和特征向量?在 Python 中使用 NumPY 可以同时找到特征向量和特征值。你要做的第一件事是用方法[numpy.cov()](https://numpy.org/doc/stable/reference/generated/numpy.cov.html).找到协方差矩阵,找到协方差矩阵后,你可以用方法numpy.linalg.eig(M)找到特征向量和特征值。

你可以看看我的另一篇文章,了解特征值在主成分分析中是如何使用的。

https://sergencansiz.medium.com/pca-where-to-use-and-how-to-use-b207a1d8e206

结论

协方差是数据科学中最常用的度量之一。了解协方差及其细节为理解多元数据提供了许多机会。因此,我想和你分享关于协方差你应该知道的五件事。如果您有任何问题或建议,请随时发表评论。

给分析师(和他们的经理)的 5 个建议

原文:https://towardsdatascience.com/5-tips-for-analysts-and-their-managers-4327ef6e9e13?source=collection_archive---------20-----------------------

办公时间

我在大型零售机构做了两年多的专业分析师。根据你工作的公司的不同,分析师要么被视为一种资产,要么只是一个数字咕噜,在我的经验中,这种鸽子洞是由一些经理的不安全感驱动的,当涉及到更多的数据驱动而不是基于直觉的决策时,也就是所谓的河马(最大PaidPperson 的 O 小齿轮)。

照片由 Isaac SmithUnsplash 上拍摄

这篇文章的灵感来源于每周一次的会议,在会上,不同的团队展示了他们上周的职能 KPI 指标。你知道那种会议,经理们用他们团队中的分析师准备的电子表格解释他们的数字,用 KPI 框,或者更糟的未格式化的表格。有人关注吗?我们如何才能做得更好?在这里,我为分析师提供了 5 个技巧,以增加他们给团队带来的价值,并为经理提供了一些建议,以更好地与您的分析师打交道。

分析师提示 1—了解您的最终用户

分析师的生活很艰难。我们需要成为强有力的沟通者、极具逻辑性的思考者和创意者。在深入研究您的数据仓库(或数据湖)之前,花一些时间考虑您的最终用户需求。这甚至可能意味着留出时间从他们那里获取一份摘要,并询问有意义的问题,因为最终这将使编写查询更加容易。无论他们要求什么,都要增加 50%的范围。浏览可能为您的分析增加更多价值的相邻数据集。我总是有“如果”这个问题为新的分析编写查询时在我的脑海中盘旋。

经理提示:非常具体地说明你要求你的分析师做什么,当他们试图充实你的想法时,要有耐心。设定明确的期望,并给出合理的交付时间表。将此视为协作,而不是自上而下的管理练*。

分析师提示# 2——通过可视化分析产生影响

数据可视化是一种艺术形式。大多数人都是视觉化的,分析师的努力是通过使用设计良好的视觉化,让他们的目标受众很容易察觉到洞察力。我见过很多次,人们在一个表格里有四个星期的数据,而你的观众会更容易、更好地察觉到时间序列图的变化。观想应该在头脑中设计一个他们想要回答的特定问题。理解一段时间内的趋势对管理者来说非常重要,而理解趋势如何变化或保持不变的原因更为重要。报告汇总数字往往会隐藏简单 KPI 报告无法反映的潜在变化,通过一系列精心设计的可视化来讲述故事。

经理提示:勇敢一点,在你的下一次演讲中展示一些形象化的东西,这些形象化的东西以更好的细节报告了同样的数字,提高了你与听众的互动。这可能会引发一场讨论,带来更好的业务成果。

分析师提示 3——开发灵活、动态的仪表盘

以上的延伸,是仪表板设计过程。谁不喜欢好的仪表盘呢?仪表板是度量和可视化的集合,目的是能够提供更深层次的分析,并使 KPI 无法立即看到的潜在趋势能够被感知。我曾与 Tableau、Microstrategy、PowerBI 和 Quicksight 合作过,总的来说,它们都是同一主题的变体。当你开始开发交互手段时,它们会变得更加强大。这通常是以可控过滤器和参数的形式。

参数是我最喜欢的,尤其是在处理时间序列数据时,能够改变 group by 子句使用的维度,或者改变度量的计算方式是如此强大。我最*开发了一个仪表板,可以让你改变时间序列,从一周到一周的数字,今年到目前为止的累计,每周的百分比变化和 4 周的移动平均值。仪表板应该易于使用且直观,并使您的客户能够使用您收集的数据回答一系列问题。设计是一个令人难以置信的深思熟虑和创造性的过程,不应该匆忙。不时回顾一下你的工作,考虑改进的方法

经理提示:花时间和你的分析师在一起,让他们解释新仪表板的特点,以及你如何最有效地使用它。确保理解它可以回答的问题的范围,并提供有意义的反馈。这是一种合作。

分析师提示 4——不要访问原始数据

这是我最讨厌的事情,当经理不信任你提供的数据,所以他们坚持要看数据或者在仪表板上显示原始数据。这到底有什么意义?事实上,关键是你没有做好你的工作。如果你被要求提供大型数据集,一定要问“你想了解什么?”。你最不希望的事情就是经理或同事浪费时间玩电子表格,试图找到一些不存在的东西,或者更糟的是,有一些东西你却没有发现。为了透明起见,如果有人想了解数据集是如何生成的,请解释(在合理的情况下)表逻辑。这又回到了我们的第一个技巧,在理解了最终用户的需求之后,正确理解你所收集的数据。

经理提示:不要要求看原始数据,把这作为一个反馈的机会,和你的分析师一起探索你想要回答的问题。10 次中有 9 次可能需要生成进一步的查询。

分析师提示 5——重视自己

有时分析师没有得到我们应得的赞扬或认可。我们苦于复杂的查询,与数据工程师和架构师合作,这样我们就可以访问额外的数据源,开发可视化和仪表板。在付出所有努力后,你最不希望的就是不被你的团队和管理层重视。我们所做的需要时间,但当分析可重复地完成时,会为我们各自的业务增加巨大的价值。现在是做分析师的最佳时机,随着新冠肺炎的影响遍及全球,下一波技术提升正在加速,企业正在转向更好地利用他们最宝贵的资产——数据。所以,珍惜你自己,你的技能,如果你觉得自己没有被重视,(谨慎地)找另一份工作。你没什么可失去的。

经理提示:让你的分析师从事有意义的工作,并促进他们的持续发展。给他们找一个内部导师,或者如果你的组织有能力的话,让他们接受进一步的培训。就业市场正在经历一场代际转变,随着企业寻求提高内部分析能力,竞争越来越激烈。员工流失通常是糟糕的管理和组织文化的结果。

结束语

我曾在对分析师的角色有不同看法的环境中工作过。分析师是天生的商业伙伴;我们的业务线和数据之间的接口。您在贵组织的未来发展方向中扮演着越来越重要的角色。您可以通过数据驱动决策来传达您的发现,并实现自助服务分析。你对业务系统有独特的理解,并能看到别人可能看不到的链接。你将跨职能领域合作,并在组织内部和外部建立专业网络。想一想你可以增加价值的方法,以及如何更聪明地工作。最后,要引人注目,并为自己的工作邀功。

对于阅读本文的经理们,我建议建立一个定期的一对一会议,以保持与你的分析师的沟通渠道畅通。与他们进行建设性的协作,他们将为您提供推动业务成果所需的数据火力。

今天的分析师是明天的商业领袖,通过数据和独特的商业理解获得信息,我们代表着新一代的管理者,他们将做出更好更快的决策。

初学自由职业数据科学家的 5 个技巧

原文:https://towardsdatascience.com/5-tips-for-beginner-freelance-data-scientists-e2b421f239d?source=collection_archive---------29-----------------------

陆上演出指南

Unsplash 上的 KAL 视觉拍摄的照片

无论你是希望用一份利润丰厚的兼职来补充你目前的全职工作,还是你是一名寻求灵活的赚钱方式并在学*中获得经验的研究生,自由职业都是一种很好的方式,可以通过灵活的时间获得现实世界的经验,同时赚一些钱,无论你是一名经验丰富的数据科学家还是一名新手。

我不知道其他职业的情况如何,但获得数据科学自由职业者的工作极其困难。雇主需要确保他们雇佣的人能够完成手头的任务。这并不会让经验丰富的数据科学专业人员在成本、可信度、营销等各种因素方面变得更加容易。

由于 10 月份被裁员,我开始了自由职业的数据科学工作,从那时起,这就是我在学*新技术的同时维持自己的方式。

在那段时间里,我学到了以下几点:

#1 走出去

我觉得品牌在整个数据科学中很重要,但对于任何寻求自由职业的人来说,你必须付出额外的努力让自己脱颖而出。

这不仅仅意味着创建一个数据科学博客或者在你的 Github 文件夹中添加一些项目。当你开始成为自由职业者时,你应该积极寻找和申请工作机会——不管你是否有经验。

不要自相矛盾,这并不意味着拥有一个博客/个人网站或向你的 Github 添加项目不重要,它很重要。有一个目的地,让潜在的雇主能够找到你所做的工作,并评估你的工作是否达到公司期望的标准,这是非常重要的。不要忽视这一点,并不断添加,使您的页面不会休眠。

此外,另一个让自己脱颖而出的方法是告诉别人。关于数据科学中网络的重要性,我已经说过无数次了。我是“的坚定信徒,如果人们不知道你需要什么,他们就不会帮助你。永远不要害怕寻求帮助,并且说你不是在请求他们帮你找到一份工作。一个简单的“嘿,你知道有谁在找自由数据科学家吗?”可能会走很长的路,但你永远不会知道,直到你尝试。

注意:除非你已经建立了这种关系,否则询问另一位自由职业数据科学家是否知道任何自由职业的工作是没有意义的,因为如果他们知道,他们可能会接受这份工作,如果他们不知道,他们可能会把它交给他们可以担保的人。

#2 坐在巨人的肩膀上

在很大程度上,我们在生活中做的很多事情都不会是新的,幸运的是,我们不会成为第一个为地球增光的自由数据科学家。

因此,有许多人已经走在了前面,要达到自由职业舞台上一些最优秀的人的高度,你可以简单地复制他们已经做到的方式。

例如,我跟踪一个叫乔什·伯恩斯的家伙。他是一名 SQL Server DBA,但就他在 Upwork 上实现的目标而言,我非常热衷于在 Upwork 上复制这些目标,因此,我关注他的工作。

如果你想关注他的作品,这里有一个完整的 Youtube 播放列表:

#3 在正确的地方

如果你想见到德雷克或碧昂斯,你就不会去丛林。当你在珠穆朗玛峰漫步时,偶然遇到莱昂内尔·梅西的几率非常小,但如果你去巴塞罗那,在诺坎普附*闲逛,你的几率就会发生巨大变化。

我将为获得数据科学工作的最佳自由职业平台创建一个单独的帖子,但现在,我将简单地告诉你,Upwork 和 Fiverr 对于自由职业数据科学家来说是可信的——我个人在工作中使用 Upwork。

注意:我要说的是,如果你在 LinkedIn 很活跃,你不应该把它排除在外。我的一些工作直接来自 LinkedIn,但最*我决定我希望有更多的结构,因此我问我的两个客户我们是否可以搬到 Upwork,让我惊讶的是他们已经在那里了。

#4 确定您的费率

我认为这一部分对刚开始做自由职业者来说是最困难的部分,因为你几乎不想收取太多的费用,这样客户对你的期望太高,你就无法实现,你也不想收取太少的费用,以至于你无法维持自己的生活。

我对此的看法可能与其他人不同。

我相信,当你没有可信的经验可以参考,或者没有来源可以提供关于你过去为客户做过的工作的正面参考时,那么你必须首先忽略金钱方面,专注于建立雇主的信誉。

这可能意味着你在开始的日子里挣得少一点,我知道人们认为这是低估你自己,但我相信从长远来看,如果你能在你的个人资料上积累许多积极的评价,你会更加感激。

尽管如此,你应该考虑你必须提供的技能,并根据具体情况降低价格。例如,如果有人想让你教他们逻辑回归,那么每小时收取 100 美元没有多大意义(在我看来),很可能有人会以更低的价格来做这件事。然而,向客户收取每小时 10 美元的费用来进行全面的端到端机器学*项目对你来说是不合理的。

#5 设定你的界限

你的界限是从工作时间到工作环境的一切。当你从事自由职业时,你应该尽一切努力确保你尽可能的高效,例如,确保无论你决定在哪里工作,都有稳定的互联网连接以及最少的干扰。

我从来都不喜欢在咖啡店工作,但是如果这是唯一一个你可以安静地完成工作的地方,那么无论如何,做你必须做的事情——只要确保你每次去店里都花了一些钱,否则如果他们不把你赶出去,你会被员工怒目而视。

设定工作时间的界限可以让你为工作做好准备,这样在你致力于工作的时间里,你的注意力就会被你正在做的工作所吞没。我还发现与雇主沟通这一点是有益的,这样他们就知道你会有什么样的期望,可以更好地跟踪你的进展——正如你可以想象的那样,对于自由职业者来说,沟通是非常重要的,你如何沟通可以决定一个好的评价和一个坏的评价。

希望你能从这些提示中有所收获。

LinkedInTwitter 上与我联系。

设计能够带来价值的数据治理的 5 个技巧

原文:https://towardsdatascience.com/5-tips-for-designing-data-governance-that-delivers-value-9da3cb1d62bc?source=collection_archive---------32-----------------------

人们过分强调数据治理的防御方面,但这只是一种心态。主动出击,关注数据的价值。

一份来自 Canva 的设计使用许可

在当今快节奏、日益数字化的商业世界中,数据的重要性毋庸置疑。它是决策的基础,是计划的驱动力,是组织超越竞争对手的动力。对于一些企业来说,数据甚至渗透到最基本的日常运营中。

因此,数据的可用性、质量、一致性、相关性和可信度对于企业的运作能力和实现目标至关重要。当组织定义数据治理服务(他们从中获得什么)时,我们希望通过确定五个要记住的要点来帮助您,以确保价值创造处于议程的首位。这也将指导您将要进行的任何数据治理评估。

设计交付价值的数据治理的重要性

世界各地的组织都饱受无效的数据治理服务之苦。问题通常始于高层的高管,他们没有充分认识到数据治理的增值潜力。

没有实施适当的数据治理的组织会错失创收和优化运营的机会。由于分析的质量受到影响,决策者无法获得可靠的信息来制定正确的行动方案。

根据研究,由于糟糕的数据治理,全球企业的数据科学家将 45%的工作时间花在非增值任务上。

此外,缺乏适当设计的数据治理计划剥夺了企业跨系统标准化数据格式和定义的机会。普遍存在的数据不一致性使集成工作变得复杂,破坏了商业智能,并抑制了法规遵从性计划。

清理数据错误会消耗您的分析团队大量的时间,导致员工沮丧。根据研究,由于糟糕的数据治理,全球企业中的数据科学家将 45%的工作时间花费在非增值任务上。

作为一名高管,您可能很难赋予数据治理服务直接的价值。然而,良好的数据治理可以间接带来显著的节约和收入。它在持续盈利的组织和苦苦挣扎的组织之间划了一条线。

如何定位数据治理的价值

设计有效且可扩展的数据治理计划是一项挑战,只有少数组织克服了这一挑战。许多人将精力放在 IT 团队这样的支持职能上,并想知道为什么他们没有从数据中获取任何价值。

通过下面的步骤,您可以从基于松散遵循的策略的数据治理转变为积极推动实现您的战略目标的数据治理。

重新思考你的组织设计

通常情况下,擅长数据治理的公司和失败的公司之间的差异来自于他们在教育和让每个人参与业务方面的投资规模。

数据治理不仅仅是 IT 部门的责任。整个组织必须团结起来,确定优先数据资产,定义支持最大价值创造的策略,并将这些资产分配给整个公司的指定保管人。这种方法可以提高公司建立优先领域的效率,减少数据清理时间,并加快分析用例的交付。

设计良好的数据治理模型通常包括以下组件:

  • 由首席数据官(CDO)领导的执行数据委员会,其成员根据明确定义的数据战略制定政策。成员代表该组织的所有主要职能。
  • 数据管理员,他们被分配了由域组织的个人角色。他们负责数据治理计划的日常实施。
  • 数据委员会将团队和数据管理员聚集在一起。它确保各项活动与公司的整体战略和优先事项保持一致。

这种结构是数据治理和公认最佳实践的基础。它平衡了数据利用率和策略,同时将决策权交给创建和使用数据的业务用户。如果您确实执行了数据治理评估,请询问您的团队他们将如何实现协作和沟通。

获得最高管理层的支持

成功的数据治理实施需要组织领导层坚定不移的支持。CDO 的职责是与首席执行官接洽,了解他们的需求,并解释数据治理如何帮助企业。提出跟踪进展和价值创造的切实方法也是有益的。这可能包括衡量数据科学家为优先用例定位数据所花费的时间或与数据错误相关的财务损失。这些指标可以确保高层管理人员的关注和持续支持。

在一些组织中,数据委员会包括一个或两个首席执行官,以确保制定的政策和标准与整体业务战略保持一致。这些高管必须花一些时间来理解数据治理计划,包括数据架构的核心元素和相关法规。

虽然还有很多工作要做,但我们必须强调,高管们需要为数据治理的成功提供强有力的支持

拥有最高管理层的支持有助于避免角色定义不明确和员工授权的常见挑战。每个相关人员都会理解他们的工作是业务的重中之重,并给予最大的关注。

将数据治理与现有的数据转换活动联系起来

当数据治理与组织中的其他转型工作相联系时,它展示了最大的价值。假设你的公司已经在从事一个项目,比如数字化或资源规划现代化;在这种情况下,数据治理将是一个非常受欢迎的焦点。

在您现有的转型计划中包括数据治理,可以更容易地让您的组织支持该计划并培养责任感。比方说,你的营销部门正在探索全渠道营销。将数据治理与这个项目联系起来将会改变思维模式,将精力集中在人们需要解决的实际问题上,并展示它的有效性。这一举措将确保数据生产和消费的权利也得到整合。项目经理可以成为数据领导者和渠道主管、数据域所有者。

这种方法将数据治理计划导向真实的和正在进行的业务活动,加速其实现并最大化其有效性。任何数据治理评估都应该强调哪些正在进行的计划将从一些支持中获益最多。

确定数据域和数据元素的优先级

许多组织通过将数据视为一个整体来开始实现数据治理。然而,采用如此广泛的范围会产生这样的风险,即花费时间在低价值的数据资产上而牺牲了高价值的数据资产。

因此,一旦您确定了数据域并将其分配给数据管理员,就不要马上开始执行。相反,应根据潜在价值、持续的数据转换工作和法规要求等重要考虑因素对它们进行优先级排序,并创建部署路线图。从小处着手,专注于两到三个最高优先级的领域。

您可能还想更进一步,对您的域中的数据元素进行优先级排序。关键数据通常最多占组织中总数据的 20%

假设你选择了市场营销作为一个重要的优先领域。在这种情况下,您可以从客户姓名和地址等基本要素开始,将客户以前的服务提供商等很少使用的信息放在次要位置。这种策略将数据治理的范围缩小到最关键的数据。

实施更精简、更敏捷的数据治理方法

不同行业和组织的数据治理计划大相径庭。例如,银行需要复杂的模型来遵守像 BCBS 239 这样的法规。大多数其他行业没有面临同样程度的监管压力。因此,他们不需要以同样的力度实现数据治理。

成功的公司采用“基于需求”的方法。他们只部署适合其法规和数据复杂性的数据治理级别。

一家全球性银行可能会选择一个全面的结构,包括一个有高管层领导参与的执行治理委员会、高度自动化和广泛的领域范围。另一方面,区域性金融科技公司可能有一个仅定期包括高层管理人员的委员会,以及一个基于用例优先级的更窄的领域范围。

领先的组织还跨数据域调整数据治理工作。例如,传统的数据治理标准通常严重倾向于监管数据质量和访问。然而,尽管这种方法在风险管理方面非常出色,但它也错过了创造价值的机会。为了实现平衡,公司可以对勘探和测试等阶段使用的数据应用较宽松的治理,对与客户直接交互的敏感应用应用更稳健的原则。关注点的转移将允许 it 投入一些精力来从数据资产中获取更多价值。

只有整个组织都参与并致力于数据治理的实现,数据治理才有用。因此,投资于变革管理,以获得整个公司的支持,并激励人们在数据价值链的早期提高数据质量,最好是在源头。

最高领导层应成为可接受的数据实践的榜样,并开始认可推动改进的员工。您还可以提供培训和资格认证,如果可能的话,在数据管理领域创造更多的职业机会。您选择的策略必须面向围绕数据建立整体兴奋感和责任感。这将指导数据治理服务的定义。

结论

每个组织都有数据,但只有少数组织能够释放其全部潜力。不当的数据管理会让您付出巨大的代价,包括错失机会、做出不理想的业务决策,以及在清理数据时浪费时间。

通过适当的治理,您可以实现从数据中获取最大价值所需的准确性、一致性和质量,并保持对法规的完全遵从。您所需要的是思维方式的转变,从将治理视为政策和标准,到将其嵌入到您公司的日常工作方式中。

使您的数据治理计划与您组织的持续业务需求保持一致。此外,根据价值确定实施的优先顺序,并使用精简和集中的部署方法。最后,不要忘记让顶级管理层参与数据治理活动。你将很快开始意识到你所期望的价值。

策划一次成功的 ML 黑客马拉松的 5 个技巧

原文:https://towardsdatascience.com/5-tips-for-planning-a-successful-ml-hackathon-1ac4c24a73dd?source=collection_archive---------22-----------------------

办公时间

一应俱全

马文·迈耶Unsplash 上拍摄的照片

TL;速度三角形定位法(dead reckoning)

黑客马拉松【hak-uh-thon】名词

  • 无论你是一家初创企业还是成熟企业,黑客马拉松都是创新的催化剂。
  • 黑客马拉松通常旨在利用技术解决特定的问题。在这篇文章中,我们要关注的技术是机器学*(ML)。
  • 在黑客马拉松中,团队成员聚集在一起,目标是在短时间内编码(或一起黑客攻击)一个最小可行产品——因此得名!
  • 在黑客马拉松上开发的原型可以成为新想法和产品的发射台。

🔩#1:做好基础工作

在这里,我们将介绍规划黑客马拉松的基础知识。实际上,你可以将这篇技巧中的大部分建议应用于任何黑客马拉松。我们将在稍后的文章中讨论 ML 黑客马拉松的细节。

定义你的目标

我们都喜欢好的黑客马拉松。有什么比一群工程师和设计师聚在一起更有趣的呢——在红牛和披萨的神奇组合的推动下,在短短几天内,一直干到深夜,完成他们伟大想法的精彩演示?

在进入运行黑客马拉松的细节之前,首先弄清楚你想从黑客马拉松中得到什么是很重要的。

你想:

  • 关注新产品创意
  • 教开发人员新工具
  • 满足紧急需要

💡了解目标将有助于你确定黑客马拉松的最佳形式和持续时间。在我们的 ML hackathon 例子中,它覆盖了 3 天,但是 hackathon 可以在任何地方运行 1 到 7 天。

解决后勤问题

您将希望创建一个环境,让人们能够轻松协作,并为他们提供所有设备和资源,以最大限度地提高工作效率。

  • 虚拟的(或物理的)

自疫情以来,我们不得不变得更有创意,让人们一起参加传统上作为大型室内聚会举行的活动。

希望在不久的将来,将有机会举行物理会议。

对于一项体育活动,你最好想要一个宽敞的房间,桌子成组摆放,这样人们就可以团队合作了。假设人们会带着自己的笔记本电脑,你还需要确保足够多的电源插座(或延长线)。拥有一个易于访问的可靠 Wi-Fi 网络也很重要。

  • 何时以及持续多长时间

建议尽早确定活动的日期(如果可行的话,还有场地)。给人们尽可能多的通知,以提高参与水平。还要决定你是想在工作时间还是工作时间之外举办活动,如果这可能会中断你的正常业务活动——参与者能够 100%专注于黑客马拉松是很重要的。

在我们的例子中,我们选择中间范围,因为一天的时间可能不足以运行一个 ML 黑客马拉松。下图显示了 3 天时间内通常涵盖的内容:

图 1:ML 黑客马拉松的关键组成部分和建议时间。作者插图。

你们当中精明的🧐会注意到,这只是创建和部署 ML 模型所需的典型数据科学步骤的压缩版本。

➡️ 参见提示 2 & 3,了解如何为不同的日子做计划。

  • 技术

你使用的技术需要准确,特别是如果你的活动是虚拟的。

你决定好参与者如何合作了吗?我们建议结合使用可靠的视频会议工具(例如 Google Meet 或 Zoom)、团队可以聊天的地方(例如 Slack 或 Discord)以及请求辅导员或导师的帮助。

您希望参与者在哪里开发和部署他们的代码?你是否乐于让团队自己解决这个问题,或者有你更喜欢的特定平台、产品或工具集吗?

例如,如果您打算使用云环境,如 GCP 或 AWS,您将需要确保为入职用户提供一个良好的、一致的流程——请不要把这留到将来的某一天!

无论你做出什么决定,都要事先测试你所有的技术是否如预期的那样工作。

  • 🍕食物和 ☕️ 咖啡因

无论是虚拟的还是物理的,你都想让每个人吃饱,用他们选择的兴奋剂/松弛剂。无论如何都要让参与者开心地进入夜晚!😃

如果您有预算,您可以将食品和饮料包裹送到参与者的家中,甚至可以分享食品配送券(例如,Just Eat,Doordash)。

当我们再次见面时,提前组织餐饮是非常值得的。

如果你选择在正常工作时间举办你的黑客马拉松,在一天辛苦的黑客工作后举办一个晚上的活动是个不错的主意。非正式的烧烤或欢乐时光是团队和主持人放松、交流想法和谈论一天中最重要的事情的好方法。

招募人员、项目和团队

  • 招募参与者(和导师)

你想让谁参加?你的目标是你的企业或社区中的特定团队吗?根据你的黑客马拉松的目标,你会想相应地招募一些人。

同样重要的是招募志愿者。例如,能够在当天帮助你进行后勤工作的辅导员。我们稍后还将讨论导师的角色。

  • 征集项目

只要与你的黑客马拉松目标一致,你会让黑客做他们选择的任何事情吗?或者也许只有选定的项目才能参与?

如果有选择过程:确定是谁在选择项目,以及如何选择。此外,一定要清楚地传达选择过程和标准。

如果所有的项目都受欢迎,人们可以自由地用脚投票——让人们尽可能容易地招募/加入团队。

鼓励参与者事先考虑他们的项目和团队总是一个好主意,这样他们就可以在黑客马拉松期间充分利用他们的时间。

这里有一些简单的方法可以帮助你提前征求项目想法:

  1. 使用一个简单的共享谷歌表单,人们可以在其中提交他们的项目想法,并注册领导或加入一个团队。
  2. 使用类似专用 Slack 频道的东西,人们可以通过投票提交项目并进行投票。
  3. 使用类似 Miro 或 Sketchboard 的东西创建自己的想法板,人们可以提交、投票和/或讨论项目想法。
  • 组建团队

任何参加过黑客马拉松的人,如果组织者没有促进团队组建过程,都会体验到那种轻微的无助和失落。

这是黑客马拉松组织过程的一部分,在这个过程中,主持人可以真正帮助参与者放松,并创造一个愉快而富有成效的体验。

关于如何做到这一点的一些想法:

  1. 推介会议—您可能已经有了预定义的项目,参与者可以注册成为团队成员。或者邀请那些已经知道他们想要做什么的人来展示他们的想法,时间限制在 30 秒到 1 分钟。
  2. 社交聚会时间——当你轮流进行推销后,给人们机会进行交流,这样他们可以问更多的问题。给它一个有趣的非正式氛围,鸡尾酒桌或小吃是一个好主意。
  3. 终于有一个简单的方法来跟踪谁将做什么。这可能是共享的谷歌文档或类似的东西。

🖼 #2:第一天,数据准备

让您的参与者直接进入代码和模型构建可能很有诱惑力。但是任何 ML 应用的成功都严重依赖于:

  1. 正确描述你试图解决的问题,
  2. 收集正确的培训数据

在这里,我们涵盖了你可以用来帮助引导你的参与者通过问题框架和数据准备过程的问题。

为了省去你的麻烦,我们还为参与者提供了一个“问题框架和数据设计”模板,你可以在自己的黑客马拉松中重复使用。跳转到本文末尾的参考资料部分下载。

框定问题

一个好的开始方式是用简单的语言描述你的问题。你甚至需要 ML 来解决问题吗?你希望你的 ML 模型做什么,它将如何帮助你实现你的目标?

假设你建立了一个闪亮的 ML 模型,成功是什么样子的?您将使用什么标准来确定您的 ML 模型是产生了成功的结果,还是失败了!

通常一个好的基准是在应用 ML 之前解决问题的方法。你的模型比这种启发式方法成功多少?

数据收集和组织

因此,现在您已经确定了 ML 将如何解决您的问题,您将需要弄清楚您需要哪些数据来训练您的模型。

首先,您可能希望编写希望 ML 模型使用的数据,以便进行预测。例如,什么是输入,什么是期望的输出(或标签)。

下一步是弄清楚你需要的数据从哪里来。您需要的输入是否可以以原始形式获得,在使用之前,您是否必须从多个来源收集数据、净化并混合它们?

您还应该考虑您使用的训练数据中是否存在任何偏差,这会对模型预测产生不利影响吗?模型能够有效地“学*”吗?例如,如果某个特定输出的训练数据不足。

你有没有考虑过你收集训练数据的方式或者你如何应用 ML 是否有任何道德风险?这是一个复杂且有时被忽视的设计因素,参见参考资料部分的一些推荐读物。

🏗#3:第 2-3 天,构建模型

最后两天是关于构建模型,迭代,最后到达你的参与者已经部署了他们的最小可行产品(MVP)的点。

在这一点上,你可能想要提供一些关于你期望参与者使用的特定 ML 框架和产品的指导。根据每个团队的经验水平和黑客马拉松的目标,这一点尤其重要。

先决条件

当谈到 ML 时,你希望每个参与者都有一个基本的理解水平吗?为了确保你的团队有一个公平的竞争环境,你可以建议一个免费的在线课程,比如谷歌的机器学*速成班、或者用你自己的材料代替。

在进入黑客马拉松的这个阶段之前,创建一个你希望每个团队完成的项目清单也是值得的。

甚至考虑一下“数据准备”和“建立模型”之间几天或几周的间隔。这让人们有时间收集高质量的数据,并确保他们从接下来的两天黑客马拉松中获得最大收益。

例如,对于每个团队来说,一个好的检查点可能是:

  • 一个明确定义的 ML 问题
  • 您和/或您的导师可以访问带有标签的培训数据
  • 一个明确定义的(或者至少是思考过的)ML 生产系统在部署 MVP 时的样子。从数据收集、培训、可视化到服务基础设施,无所不包。

问题的类型

缩小选择范围的另一个方法是让你的团队积极地思考他们提出的问题的最佳 ML 解决方案。

例如,它是一个“有监督的”还是“无监督的”问题,对于前者,它是一个“回归”还是“分类”任务?这里有一个关于常见 ML 问题的便捷指南。

我们在“问题框架和数据设计”模板中也提到了这一点。

API,代码什么的中间?

根据你的团队的经验水平,引导参与者走这条或那条路可能是个好主意。

例如,如果你有一个由优秀开发人员组成的黑客马拉松团队,但是他们缺乏 ML 经验。你可以建议他们走预先训练好的 ML 模型的路线,公开为 API,用最少的编码接受输入并返回结果。

大多数领先的云提供商为不同的应用程序提供此类服务,如图像识别、语音转文本、自然语言处理等等。

如果大多数人都是经验丰富的 ML 开发人员,他们可能已经有了特定的选择。现在并不缺少框架,TensorFlow、PyTorch 和 SciKit Learn 是其中比较流行的。您可以选择将它缩小到一个特定的框架。

最后,您可能会发现 AutoML 工具提供了一个很好的中间地带。AutoML 使具有有限机器学*专业知识的开发人员能够训练针对其业务需求的高质量模型。

AutoML 和 ML APIs 之间的关键区别在于使用您自己的数据构建定制模型的能力。

☀️ #4:当天

闪电谈话

“闪电谈话”只是简短、易于理解的陈述。他们通常由一名主题专家带领,涵盖与您的黑客马拉松相关的主题。

它们是激励人们的好方法,也可以帮助你的参与者熟悉他们可能第一次遇到的新技术、平台或概念。

你进行闪电谈话的次数取决于你需要报道的内容。我们建议每次不要超过 15-20 分钟,采用清晰一致的格式。

通常在一天开始时安排灯光讲座是个好主意。剩下的时间保持非结构化,直到你结束,这样人们就有足够的时间来编写他们的项目。

导师

导师在这一天扮演着非常重要的角色,并将成为你的黑客马拉松成功的关键因素。

导师如何帮助你的黑客马拉松团队和参与者:

  • 集思广益,挑战想法,引导问题框架。
  • 定期检查,以便每个人都保持在正轨上,并专注于黑客马拉松。
  • 分享知识、良好实践,并帮助避免想法重复。

导师的良好实践:

  1. 试着经常交换导师,以确保团队获得不同的视角,不要推行你自己的想法。
  2. 作为一名导师,你作为一个集体团队来帮助所有的团队
  3. 强调心理安全。导师允许团队不带任何评判地表达感受,这是一个安全的地方。
  4. 使用感觉词来识别和验证情绪,让团队敞开心扉,尝试讲述您自己的经历以及您过去如何处理类似情况。
  5. 如果我帮不上忙怎么办?这完全没问题,这也是一个招募广泛的导师的好理由,这样你们就能一起找到答案。你不需要成为技术专家,但应该能够鼓励团队以不同的方式思考问题,并促进讨论。

👩🏾‍⚖️ #5:总结和判断

结束黑客马拉松

有一个明确的截止时间,团队必须停止使用工具,停止黑客攻击,并准备与团队的其他成员分享他们的项目。

迅速失败。经常失败。强调 3 天后,产品可能不会推出,而且在这 3 天里想出的大部分主意都会失败。但同样要认识到,这种快速的原型和迭代过程可以带来巨大的创新!

让参与者了解未来的黑客马拉松机会,如果适用的话,让他们知道如何与导师和其他软件工程师会面,以构建新想法的原型。

选择获胜者

最后,您已经到达了黑客马拉松的终点,最重要的任务之一仍然存在——选择获胜者!

如果可行,试着从你组织中的执行发起人那里获得支持。他们不仅可以帮助评判团队,还可以确保获胜的项目获得适当水平的资源并坚持到底。这是在早期激励团队的好方法,因为他们知道获胜的想法会产生持久的影响。

如何确保评判成功:

  • 为每个团队安排演示时间(确保提前提醒他们,以便他们练*演示)。大约 3-5 分钟是一个很好的经验法则。
  • 召集不同背景和经验的专家小组,提供有用的反馈。
  • 使用清晰的评判标准选出获胜者,这些标准也应该提供给参赛队。
  • 如果合适的话,为获胜者决定合适的奖品。

后续步骤

一天结束了,但你的工作还没有完成,收集与会者的反馈以了解哪些进展顺利以及如何改进非常重要。

专业提示:确保人们在离开前填写好调查问卷!

与获胜团队(和执行发起人)合作,讨论他们将如何推进他们的想法,以及接下来需要采取什么行动。

鼓励所有参与者保存他们的代码、输出和调查结果摘要。

最后,在得到许可的情况下,在社交媒体上与与会者分享当天的任何照片、视频、引言和截图——这是给每个人一天纪念品的简单方式!

🙏🏼谢谢

非常感谢夏洛特·哈钦森与我在这篇文章上的合作!

📚资源和延伸阅读

如何获得机器学*工作的 5 个技巧

原文:https://towardsdatascience.com/5-tips-on-how-to-land-machine-learning-jobs-8eb5c1c3ee95?source=collection_archive---------10-----------------------

UnsplashMarten Newhall 拍摄的照片

从 FAANG MLE

机器学*是一个不断发展的领域,受到了很多关注,但获得机器学*工作仍然非常困难。在大公司获得工程职位意味着不仅要知道数据科学,还要知道编程和系统设计之类的东西。通常情况下,为申请新职位做准备需要大量的研究和学*。

当我准备机器学*工作面试时,我在面试前两个月就开始准备了。这时候我才真正明白我想要的数据科学和机器学*岗位需要什么。幸运的是,许多招聘人员允许并鼓励你花时间准备。

然而,这留下了一个重要的问题:你到底如何为你的角色做准备?在这篇文章中,我将分享一些获得机器学*工作的策略,从了解市场和建立投资组合到技能提高和申请过程本身。

1.熟悉机器学*

MLE - 12 的部分工作描述

每一个机器学*的工作都是不同的,每一个都会有不同的侧重点。例如,有些专注于机器学*,有些专注于机器学*管道,有些专注于大数据,还有一些专注于深度学*。

也就是说,任何机器学*工程师(MLE)工作的核心部分都是进行机器学*。因此,即使在申请任何 MLE 职位之前,首先要确保你对 ML 有足够的了解。亲身体验各种机器学*项目。构建自己的基本系统,了解它们是如何工作的。了解 Spark 这样的大数据平台和 Pytorch 这样的深度学*库。如果你需要更多的资源来理解这一切,我有一个专门的博客来帮助你。

这里有一个很好的基本目标,让你知道你已经做好了充分的准备:在你的 ML 准备结束时,你应该能够将一个商业问题转化为一个机器学*系统。理想情况下,您应该能够设计一个端到端的系统,这意味着数据收集、探索性数据分析、特性工程、模型评估、模型测试和部署。

2.为机器学*工作应用建立一个文件夹:在 Github 和 Kaggle 上创建一个存在

对于机器学*工程师职位的工作申请来说,一个重大挑战就是获得面试机会。那么,公司怎么才能找到你呢?怎样才能让自己脱颖而出?

一个答案是用你的技能去创造和完成项目。尝试许多新的玩具项目,并利用 Kaggle 等资源获取灵感。参加论坛是另一个有多重好处的途径;在推销自己的同时,你可以向他人学*并与他人讨论。

尽可能有创造性和主动性。在 GitHub 上建立你的个人资料真的很有帮助。编写大量代码,解决各种问题。靠自己很难找到这些,但是参加 Kaggle 比赛是一个很好的开始。

从事编程项目是建立投资组合的另一个选择。当我刚开始的时候,我做我喜欢做的事情,做我感兴趣的事情。有一段时间我试图自己创造一些游戏,但现在我经常通过实现他们的系统来理解研究论文。理解理论是一回事,写代码实现系统是另一回事。当你申请一份机器学*的工作时,你会想确保你能做到这两者。

3.提高你的编码技能

约书亚·阿拉贡Unsplash 拍摄的照片

许多公司在选择过程中会进行多次编码。这是目前为止你准备工作中最关键的部分,因为即使是机器学*工程师,到最后还是工程师。虽然这似乎是寻找合适人选的次优过程,但它仍然是当前结构的一部分,所以如果你想做 MLE,你需要了解与特定工作领域相关的各种数据结构和算法。为了有所帮助,这里有一些建议和资源。

为了理解数据结构的基础知识,Gayle Laakmann McDowell 的书破解编码面试包含了许多准备技巧。这是一本简明的书,包含了破解编码面试的适量信息。每种数据结构都有 2-3 页的解释,并附有练*题以加深理解。

我还建议根据你的喜好、经验等,列出你需要准备的话题清单。例如,我的列表是这样的:

数据结构:数组、栈/队列、字典、树、堆、图。

算法:排序、分治、动态规划/记忆、递归、二分搜索法、广度优先搜索/深度优先搜索、树遍历。

理想的情况是,在你准备结束的时候,你已经熟读了必要的题目,并且在 Leetcode 这样的地方解决了一些容易和中等难度的问题。

我也推荐 UCSanDiego 在 Coursera 上的算法专精课程。我也写了一些关于这些主题的简单解释的基础文章。你可以在下面找到它们。

4.理解大系统是如何工作的

疾控中心Unsplash 上拍照

在一家公司工作本质上意味着致力于创建端到端的系统,同时牢记诸如延迟、可维护性和可伸缩性等因素。出于这个原因,许多公司将系统设计作为面试过程的一部分。他们想知道你能理解到什么程度,并有可能帮助他们改进自己的系统。为此,示例问题可能如下所示:

  • 你会如何设计网飞?
  • 你会如何设计 Youtube?
  • 你会如何设计 Twitter/脸书订阅源?

虽然这些问题看起来令人生畏,但当你开始准备它们时,它们是相当开放的。另外,记住没有错误的答案。互联网上有很多这种准备的好资源,但我想特别提到两个:

  • Donne Martin 的《系统设计入门》:这是任何准备进行系统设计的人都应该至少浏览一次的资源。它对性能、延迟、可扩展性、可用性、吞吐量、一致性、cdn、数据库、缓存、负载平衡等基本主题进行了精彩的报道。
  • Techdummies :虽然 Youtube 上有很多视频在谈论最受欢迎和最大的服务(网飞、Youtube、WhatsApp、脸书、Gmail、亚马逊等)的系统设计。),这是我参考故障最多的渠道

最后,最重要的是了解一个特定的系统在最基础的层面上是如何工作的,它是如何被设置来减轻各种故障点的,以及该系统如何为大量用户工作。正是从这些构件开始,你将真正展示你的系统设计能力。

5.如何开始申请机器学*工作

所以你对数据科学有信心,你了解数据结构,你知道各种系统如何工作,你已经开发了一个很好的投资组合。

你应该如何开始申请工作? 这是一个根本问题,往往没有任何真正细节的回答。因此,如果我建议我的任何一个朋友如何开始找工作,我会给他们以下建议:

  • 调查并列出你的公司:首先调查并创建一份提供你所寻找工作的目标公司名单。
  • 努力获得推荐:如果可能,如果你有朋友或同事在你列出的公司工作,努力获得推荐。
  • 不要完全依赖你的推荐人:如果你不能获得推荐(即使你能获得),试着联系公司的人力资源代表,或者通过 LinkedIn 联系招聘人员。我建议每家公司至少联系 3 到 4 名招聘人员。这会增加你得到回复的机会。
  • 按照偏好对公司进行排序:根据你接到的电话数量,尝试按照最不感兴趣到最感兴趣的顺序对你的面试进行排序。例如,如果你的目标梦想公司是谷歌,试着把谷歌面试留到最后。这将确保之前的面试也作为你最重要的面试的练*。许多公司也有冷静期,所以你不想浪费这个机会。
  • 冲洗并重复:如果你找到了工作,太好了!然而,事实是您可能不会,在这种情况下,您可以从列表的顶部重新开始。不要失去希望!

结论

这篇文章列出了我如何准备机器学*工作的面试,以及我目前为我的工作做了哪些研究和准备。正如我在开始时所说的,这不是一个简单的过程,所以重要的是要有时间和耐心。也就是说,不要失去希望是非常重要的!每天专注于学*和提高一点,明白这里没有捷径,每个人都走相同的路,所以你必须坚持下去。

毕竟,只有通过一系列的小步骤,一步接一步,你才能走完长距离。所以保持决心,坚持下去。你的结果会出来的。

另外,如果你想了解我自己的面试经历,请看这里。

继续学*

如果你想以更结构化的方式阅读更多关于算法和数据结构的内容,这里有一个 UCSanDiego 在 Coursera 上的 算法专门化。我在准备的时候旁听了这门课程。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。关注我在 媒体 或订阅我的 博客 了解他们

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

促进数据科学学*的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-boost-your-data-science-learning-320a2284690?source=collection_archive---------12-----------------------

Julia Nikulski 制作的图片展示了推动您的数据科学学*之旅的 5 个技巧。由 Flaticon 制作的 BecrisFreepikultimatearm桉树的图标。

入门

通过专注于这 5 件事来增加你的学*曲线,而不是参加更多的在线课程

许多指导者给你关于如何开始数据科学的建议:参加哪些在线课程,为你的作品集实施哪些项目,以及获得哪些技能。但是,如果你已经开始了你的学*之旅,而现在你正处于中途,不知道下一步该去哪里,那该怎么办?

Udacity 完成我的数据科学家纳米学位后,我处于那个中间点。我已经建立了各种数据科学主题的基础——ML、深度神经网络、NLP、推荐系统等等——我的学*曲线非常陡峭。所以我觉得仅仅参加另一个在线课程不会每天学到很多东西另外,我有点不耐烦了,想现在就应用我的技能,而不是在一个半小时的讲座之后。但是我该怎么办呢?

我想分享我关注的 5 件事,它们确实帮助我提高了数据科学学*,并构建了更深刻的知识和技能。我提高了自己的技术和非技术能力,以实施成功的项目并取得成果。如果你正处于这个中间点,你将会学到更多的东西,如果你花时间在这 5 件事情上的话,这将会比你参加另一个在线课程或者进行一万次的卡格尔竞赛要多得多。

Firmbee.comUnsplash 上拍照

1.从头到尾实施大型项目

大多数人倾向于通过学得最好。这就是为什么在线课程通常会教你一项技能或概念,然后要求你在一个小练*或项目中实现它。所以参与项目会教会你很多。从头到尾实施大型项目,潜在的许多陷阱会让你学到更多

如果你在一个项目上工作,作为在线课程的一部分,研究问题,数据集,有时甚至模型和评估指标都是为你选择的。所以你只需要关注代码和实现。然而,决定一个研究问题、数据集、模型和评估指标实际上是棘手的部分!如果你曾经不得不写一篇论文作为大学学位的一部分,你就会知道定义一个研究问题是非常困难的。

无论你是数据分析师、商业智能分析师还是数据科学家,你工作的一部分就是在大量数据中识别模式而不需要任何人告诉你到底要寻找什么。在其他情况下,您可能需要调查一个特定的问题,但是您没有数据集,需要考虑可以用什么来回答这个问题,以及如何获得它。这些例子表明实施本身并不能让你为数据科学工作做好充分准备。

为了练*你在实现之外的技能,你应该从头开始开发你自己的项目——从研究问题开始,到部署结束。以下资源可帮助您完成这项任务:

  • 开发项目想法 : 如果你需要灵感来提出独特的数据科学项目想法,你可以查看我的指南,在那里我讨论了 5 个步骤,它们将帮助你提出有趣且可执行的想法。
  • 项目规划方法 :本帖介绍了 10 种不同的方法,帮助你规划和管理你的数据科学项目。它们包括 CRISP-DM 、敏捷、特别和瀑布方法。
  • 数据科学项目结构 : Cookiecutter 数据科学提供了一个标准化的项目结构,帮助您创建可重复、自我记录的项目。它考虑了项目中的所有步骤—从收集和转换数据到生成结果报告。

除了从头到尾实施一个项目,关注更大的项目也会增加你的学*。处理大型数据集,实现更多的模型,回答更多的问题,这一过程中会产生更多的问题和困难。虽然奋斗可能会令人沮丧,但它实际上教会了你宝贵的知识和技能。与被告知潜在问题及其解决方案相比,面对问题然后自己解决是一种更有效的学*方式。

卡洛斯·穆扎Unsplash 上的照片

2.创建您自己的数据集

对于许多数据科学家来说,建模是最令人兴奋的部分——找出要使用的算法、实现、微调和评估它们。然而,作为一名专业的数据科学家,你必须处理数据收集和清理,需要你 80%的时间。

如果你在一家没有指定数据工程师的公司工作,你可能要负责数据采集。因此,了解哪些数据与特定的研究问题相关,在哪里以及如何获取这些数据,以及采取哪些预处理步骤至关重要。你应该练*网络搜集(但保持其合法性和道德性),熟悉提供现有数据集和API资源(你可以对其进行组合和扩展),并转换数据以供进一步分析和建模。

虽然许多投资组合项目需要一次性获取数据,但现实世界的应用程序通常需要持续提取、转换和加载新数据的 ETL 管道。因此通过编写一个脚本,将您的数据获取转变成一个 ETL 过程,该脚本不断提取新数据、转换数据并将其保存到数据库中。

以下资源可帮助您开始创建自己的数据集和 ETL 管道:

  • ka ggle 上的数据集:ka ggle 上的用户已经分享了他们创建的数百个数据集。其中许多解释了用于获取数据的来源和过程,并给你一个在哪里寻找数据的想法。
  • 数据科学的网络搜集 : 凯瑞·帕克为数据科学家写了一本很棒的网络搜集指南。
  • 用于数据科学的 API:展示了 22 个 API——包括 IBM Watson、Spotify 和 Census.gov——为数据科学和机器学*提供数据。
  • Awesome-ETL:用各种语言构建 ETL 管道的资源概述—包括 Python。

苏珊·Q·尹在 Unsplash 上的照片

3.阅读学术论文

当我想获得一个主题的高层次概述或理解算法的基本机制时,我的资源包括在和其他网站上发表的关于数据科学的博客文章。然而,高层次的理解只能让你到此为止

阅读介绍、比较和对比算法和机器学*方法的学术论文为你提供比任何博客文章都更深刻的知识。例如,您将了解为什么要引入一种特定的算法,它在数学上是如何工作的,还有哪些研究和模型可以解决类似的问题,以及未来的研究需要解决哪些问题。

此外,阅读学术论文有助于你掌握你所在领域的最新进展。所有你喜欢的 ML 算法和 NLP 模型都是由研究人员开发的,并在论文中介绍过——随机森林XGBoostBERTGPT-3 。其他论文有助于理解哪些算法在特定场景中表现最佳。

有了从定期阅读学术论文中获得的知识,你将能够更好地解释算法的内部工作原理,为你的用例选择合适的模型,并证明你的决定。是的,阅读科学著作是困难和令人疲惫的。但是这是值得的,随着时间的推移,你会做得更好。你对理解一篇论文的关注和努力会导致一个更陡峭的学*曲线。

以下资源可以帮助您开始撰写学术论文:

戴红帽的女孩Unsplash 上的照片

4.撰写技术博客文章

根据费曼技巧,向别人解释一个话题是你自己学*的好方法。当您在 Medium 或 TDS 撰写关于数据科学的技术文章时,您需要足够详细地理解这些材料,以便向您的受众解释。因此,写关于数据科学的文章是费曼技巧的一个很好的应用。TDS 上的作家已经无数次证实了这一点。

写技术文章的一个奇妙的好处是你有自己的资源。如果您想重温一下不久前实现的算法或项目,可以回到您的文章。此外,这些博客文章还可以向雇主们展示你了解某个主题,并且对数据科学有全面的了解。最后,写作有助于练*你的 沟通技巧 ,这对于数据科学家来说是一项至关重要的技能!

以下资源可帮助您入门并提高您的技术写作能力:

照片由印尼 UXUnsplash 上拍摄

5.与他人合作

我曾经低估了在数据科学和编码项目中与他人合作或为他人工作的价值。当我和一个朋友一起设计一个网络游戏时,这种情况发生了变化。我注意到我可以从他那里学到很多东西,不是因为他教了我什么,而是因为我们交换了想法,共享了代码,并且必须相互交流我们的愿景和进展。

与数据科学家或程序员同事合作以及为朋友或你当前的雇主解决数据相关的问题教会你在线课程所不具备的技能:

  1. 与技术和非技术受众交流并向他们展示您的发现。
  2. 解决与业务相关的问题,其中错误会产生实际影响(如果工作发生在业务环境中)。
  3. 根据用户反馈调整你的想法和代码。

要开始与他人合作,请与一位可能面临问题的朋友交谈,您可以用自己的数据和编码技能解决这个问题。如果你认识数据科学家或程序员,请他们合作一个联合项目。在工作中注意发现潜在的机会,在这些机会中你可以利用你的数据科学技能。也有很多机会与在线社区合作项目,如 DataKindData for GoodStatistics Without Borders

照片由S O C I A L C U TUnsplash 上拍摄

摘要

学*数据科学很难 —不仅仅是因为你需要获得所有的技术知识。构建你的学*之旅,坚持下去,并获得你的努力有回报的感觉是具有挑战性的。我曾经认为在线课程是成为伟大的数据科学家的秘诀。

我发现,从头到尾参与大型项目,创建自己的数据集和 ETL 管道,阅读研究论文,撰写技术博客帖子,以及与他人合作教会了我宝贵的技能,否则我不会获得这些技能。我希望你自己尝试一下这些技巧,并提高你的数据科学学*

你想在媒体上阅读更多高质量的故事吗?考虑注册一个支持我和其他媒体作者的会员。

https://medium.com/@julia.nikulski/membership

您是否正在寻找展示您的数据科学产品组合的方法,但不知道从哪里开始?查看我关于如何建立数据科学组合网站的指南:

** **

获得第一份数据科学家工作的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-get-your-first-data-scientist-job-d8e5afd5a59b?source=collection_archive---------6-----------------------

办公时间

我在臭名昭著的求职阶段学到的关键东西

照片由山姆·丹·张Unsplash 上拍摄

所以,你已经学*数据科学有一段时间了,你现在期待着下一步:作为一名数据科学家获得你的第一份工作。然而,如果这不是你的第一份工作,那么这可能是你第一次申请与你之前职业无关的职位。那么,为什么不从别人的错误中吸取教训呢?

在我关于转行数据科学的帖子中,我从 DataQuest 的在线学*开始。然后,今年早些时候,我做了职业生涯中最好的决定之一:我报名参加了 Le Wagon 训练营——我还写了一篇关于它的帖子。尽管训练营本质上是密集的,但任何职业转变中最困难的部分是获得你的“第一份工作”

最*,我加入了一家名为 Nextdoor 的公司,成为一名位于英国伦敦的数据科学家。但是找到我作为数据科学家的第一份工作绝非易事。我申请了超过 50 个职位,参加了几次面试,其中一些是纯技术性的,或者包括现场编码。在此期间,我学到了很多东西,我想与大家分享五条建议,它们可能会帮助你找到作为数据科学家的第一份工作:

1-自我意识

这似乎是显而易见的,但不幸的是,识别你不知道的东西并不容易。更糟糕的是,你可能认为你知道,但你不知道。我举个例子:在训练营期间,我已经使用 Scikit-learn 的逻辑回归创建了几个机器学*模型。我几乎是凭直觉调整惩罚参数,尤其是在l1l2之间,它们分别指套索和山脊。到目前为止一切顺利。

在我的第一次面试中,我决定加入这些概念来展示一些知识,但事与愿违。当我试图解释其中的区别时,我意识到我知道如何应用它们,但我不理解背后的概念(更不用说数学了)。不用说,我没有得到那份工作。我的建议是深入研究几个项目,直到你逐行了解你的代码。在模拟面试中,试着向其他同事解释你选择每个模型和参数的原因。你会注意到在去面试之前有很多空白可以填补。这样做,你也会用正确的术语听起来很流利,并且有信心解释你的工作。

2-向他人学*

如果你真的想在头几个月找到一份数据科学家的工作,那么你应该向那些有丰富经验的人学*。老师和助教是很好的信息来源,所以要每天和他们交谈。问一个关于招聘流程、面试以及如何管理与招聘人员的对话的问题,以了解更多关于公司和职位的信息。

此外,我还和另外两位训练营的校友一起创建了一个 slack 频道。在这个频道里,我们分享我们的简历、求职信、面试和测试的反馈。我们讨论过面试的问题和答案,我们总是分享我们的代码和笔记本来互相帮助。不要害怕分享你的工作,而是学会一起工作。毕竟,你们有相同的目标:尽快成为一名数据科学家。

JESHOOTS.COMUnsplash 上拍照

3-学*动机比编码技能更重要

作为一名数据科学家,你没有“商业经验”,这应该会让所有招聘人员感到惊讶。只要看一看你的简历,任何人都能看出你在寻找你的第一份工作。也就是说,不要试图把自己推销成一个专家数据科学家(来自 Kaggle projects),这不是你在这个阶段最有价值的技能。

在我收到 Nextdoor 的录用通知后,人事经理从我参加的八次面试中给了我反馈。可以总结为一个“赞成”和一个“反对”:我渴望学*,但我没有编码经验。我了解到的是,招聘经理寻找的是热衷于学*新事物、紧跟行业发展的人。

所以,表现出你是一个好奇的人,你享受学*数据相关话题的过程,你每天都在练*编码。展示你对数据、计算机科学、统计学领域的热情。你对持续学*的动力和承诺将(并且应该)超过你当前的编码技能。

4-知道你想要什么

没有经历过就知道自己想要什么有点抽象。你怎么知道你想成为一名数据科学家,但不是机器学*工程师或数据工程师或数据分析师?起初,所有这些职位看起来都非常相似,也许你会接受其中任何一个作为你的第一份工作。嗯,我一开始也是这么想的,但这是个错误。

求职阶段的关键区别在于面试的准备。如果你知道你想要一份数据科学家的工作,确保你确切地知道数据科学家做什么。随着你的研究,一些细微差别会开始凸显出来。比如数据科学家倾向于不用数据分析师用的 Tableau,或者数据工程师用的 Docker。你不必拓展广泛的数据科学知识,相反,你可以提高你在新工作中需要的深度。一些例子包括 Pandas、Numpy、Scikit-learn 线性和逻辑回归、matplotlib 和 seaborn。如果你掌握了这些,我相信你很快就会得到一份数据科学家的工作。

5-*惯拒绝

我再强调这一点也不为过:请*惯被招聘人员、招聘经理和公司拒绝。在寻求第一份数据科学家工作的过程开始时,你的积极性很高,没有什么可以阻止你。

然而,随着时间一周周过去,拒绝信不断出现在你的收件箱里,你的动力水平不可避免地崩溃了。有大量的数据科学家职位,以及越来越多的候选人。此外,招聘过程很慢,但从候选人的角度来看要慢得多。在新工作两个月后,我收到了拒绝邮件。反正被拒是很自然的。

让你保持高动力的一个方法是和一群经历相同过程的朋友分享。就像我之前说过的,和其他校友建立一个松弛的渠道,分享你的挫折。我相信他们也在经历同样的事情。这很重要,因为你会发现你并不擅长编码,这只是时间、一致性和努力的问题。

永不放弃!

想获得媒体文章的全部访问权限并支持我的工作?只是 5 美元/月。使用以下链接订阅:

https://boemer.medium.com/membership

这里有一些你可能会喜欢的文章:

改善数据科学团队学*文化的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-improve-the-learning-culture-in-your-data-science-team-251647e27cd1?source=collection_archive---------25-----------------------

作为一个 DS 团队,很容易被日复一日的任务所拖累,而不能优先考虑学*。你如何改善你团队中的 L&D 文化?

阿克森Unsplash 上拍照

作为一个数据科学团队,很容易被日常任务拖累。为了保持创新并为业务提供竞争优势,DS 团队需要不断寻求改进并填补知识空白。如何改善您的数据科学团队中的学*与发展(L&D)文化?

正如我在上一篇关于如何作为一名数据科学家保持学*的文章中所写的那样(在个人层面),学*过程应该是有意识的。这里有 5 个小贴士,让你开始在你的团队中创造一种围绕 L & D 的动力。

1)雇佣心态正确的人

第一步是雇佣能够推动业务发展的人。随着企业的发展,个人也必须发展以适应新的约束和寻找新的机会。除了评估众所周知的技术技能和瞬间完成工作所需的软技能,最重要的是评估个人和职业发展的愿望。

你正在寻找一个学*速度快的终身学*者。如果我们用回归类比,你要找的是一个高斜率而不是一个高截距(尽管两者都很好..).要寻找的一些代理:

  • 这个人对公司和团队非常好奇。他们会问大量的问题,并深入挖掘细节。
  • 这个人对某件事充满热情,并且知道如何成为某方面的专家。
  • 这个人知道他们不知道的事情他们会采取什么步骤来解决这个问题。

面试时要问的一些问题:

  • 你学到的最后一件事是什么?你能给我解释一下吗?你为什么学那个?你有机会在工作中应用它吗?
  • 你如何跟上这个领域的发展?你最喜欢的媒体/资源是什么?为什么?
  • 你是如何学*新东西的?你能给我举个例子,说明你在不久的将来想学什么,以及你将如何去做吗?
  • 你想成为哪方面的专家?
  • 在完成前/完成时,哪个项目最需要你学*?你花了多少时间?然后深入这个项目,了解他们的知识深度。

总而言之,你可以在面试过程中找到代理人,告诉你这个人是否喜欢学*,他们能够学*多快,以及他们是否能够将学*成果与商业价值联系起来。

2)以团队讨论和参与为目标

共享到松弛信道的链接是不够的。当没有人阅读他们同事分享的任何东西时,不要瞄准一堆只有表情符号反应的链接。这会阻止分享的人分享更多。你想要的是对团队共享的每一个资源进行讨论。最好是在一小组话题上有一个强有力的参与。

鼓励讨论的一个方法是,每当一个人分享一个资源时,就遵循一个框架。例如,在点击发送按钮之前,他们应该回答以下问题:

  • 有没有用自己的话写的简短总结?
  • 为什么这对团队中的其他人或业务很重要?
  • 我是否标记了我认为会对资源感兴趣的人?
  • 这与以前共享的资源、当前的项目或团队以前的讨论有什么联系?
  • 消耗资源需要多长时间?
  • 我是否向团队提出了一个有意义的问题来开始对话?

这个框架显然应该和整个团队一起讨论。另一方面,如果你看到一个资源被分享,花时间去阅读它,并提供你的观点。允许自己脆弱和犯错。目标是作为一个团队学*,而不是炫耀你已经知道的东西。

向学*过程中添加结构的结果是,它允许整个团队充分利用它,并保持学*的动力。讨论需要讨论,这是一个良性循环。

3)将学*过程与商业价值联系起来

将学*放在首位的最有效方法之一是将学*成果与业务成果联系起来。这对每个人都是双赢的局面:高管团队、数据科学团队和个人贡献者。你做得越多,你就能为 L&D 活动获得越多的资金,无论是金钱还是时间。

一个先决条件是已经思考过数据科学团队的中期和长期目标,这通常是健康团队的情况。由于学*基本上是面向中期/长期的,因此将学*成果与潜在的未来高价值项目联系起来更容易。

实现这一点的一个简单过程是:

  • 选择一个未来的潜在项目,每个人都兴奋地为之工作,
  • 识别团队中会妨碍从项目中获得价值的差距,
  • 提出一个详细的学*计划,逐步降低项目风险。

例如,一个新的产品特性将允许企业在不久的将来获得书面的客户评论。分析这些数据并提供预测模型可能会在客户成功和体验方面带来巨大的商业价值。假设团队中除了基础知识之外,没有人真正熟悉 NLP。围绕这一点制定一个学*计划,包括具体、简短和频繁的里程碑,通常是围绕您的业务案例的快速原型/概念验证。这样做,它将允许团队在工作中不断学*,还可以多次迭代项目,消除风险,评估外部解决方案是否可以做得更好,等等。

如果你需要证明持续学*的价值,证明学*成果提供了切实的商业价值是最简单的方法。

4)建立仪式

至于任何随之而来的变化,你需要养成*惯,以便新的范式变得正常。好消息是,团队中应该已经有了很多仪式,例如站立、回顾会议、绩效评估…一个好的开始方式是在现有的仪式中包括学*仪式。例如,每个人都必须分享他们在每次站立时学到的东西(顺便说一下,不一定是与数据科学相关的……)。或者如果开始时太频繁,人们可以轮流。你可以作为一个团队找出什么是最有意义的。

一些仪式的例子:

  • 在每个人的日历上屏蔽一个简短的重复事件,以便学*和交流已经分享的内容。这可以成为一种有趣的仪式,并鼓励团队之间的讨论(因为每个人都会同时专注于学*)。
  • 一个读书俱乐部,每个人/一群人都同意阅读一本书的一个章节,并在固定的时间进行讨论。
  • 论文阅读小组也是如此,人们同意阅读选定的论文,并在小组会议上进行讨论。
  • 为了获得更多的实践知识,建立一个由一个(或多个)团队成员轮流组织的研讨会。如果研讨会侧重于如何将知识应用于实际问题(如果是当前的业务问题,则加分),而不是侧重于理论(可以在读书俱乐部会议期间进行),通常会有更好的参与。
  • 组织结对编程。
  • 在资深员工的带领下,为初级员工组织辅导会议。
  • 一起看一段录音(例如来自一个会议),然后讨论这个演讲。集思广益的想法,潜在的用例,它如何与相邻的概念。
  • 每 X 个月安排一次黑客马拉松,每个人都在为他们感兴趣的主题的可交付成果而努力。这是探讨相邻话题的好时机。
  • 在通常的回顾会议中包括对学*过程的回顾。每个人都反思自己的学*之旅,以及下一步想学什么。

5)有意为之

与为每个团队成员建立职业发展道路同样重要的是,我认为学*道路也必须平行建立。每个人都需要知道他们需要学*什么才能在公司成长。让它成为一个与常规 KPI 或您在绩效评估中使用的任何指标同等重要的目标。

确定团队整体的优势和差距。确定每个人的兴趣,为每个人开辟一条个人学*之路,其学*成果将有助于团队的整体成功。我非常喜欢阿方索·卡塔在他的文章中详细描述的结构。

最后,让每个人都有学*途径,并让每个人对自己的目标负责。从长远来看,这将有助于团队的成功。

为了改善数据科学团队中的学*和发展文化,首先要雇佣心态正确的人,然后鼓励围绕学*资源的讨论和参与,最好将学*成果与业务成果联系起来,将学*融入团队仪式,最后要对团队中每个人的成长保持有意识和一致的态度。

LinkedIn 上跟我连线。

改进分析幻灯片的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-improve-your-analytics-slide-decks-c5d0559259c0?source=collection_archive---------18-----------------------

因为没有良好的沟通,伟大的分析是没有价值的

(图片编辑自unsplash.com)

幻灯片仍然是展示任何分析结果的最常用工具。它们不仅是一个通知、激励和说服你的观众的工具,而且通常也是一种文档,人们会在几周或几个月后回来查阅。

我们都知道饼图是邪恶的,我们不应该使用三维图表,甚至更糟的是,动画。我不会在这篇文章中再提到这些(保证)。相反,我喜欢分享我在过去几年的产品分析工作中学到的一些原则,这些原则极大地帮助我设计了更易于阅读、更吸引观众的演示文稿。

首先,让我们看一下下面的幻灯片:

(图片由作者提供)

乍一看,这一页没什么问题。在我注意到我必须改变一些东西之前,我可能在过去制作了数百张这样的幻灯片。但是对于第一次看这张幻灯片的人来说,可能会出现很多问题,比如:

  • 这应该告诉我什么?
  • 为什么 2019 年 2 月美国活跃用户数量激增?
  • 这些数字是从哪里来的,我如何自己深入了解它们?

只要稍加修改,这些信息就能以更直接的方式呈现出来。

1.在标题中使用完整的句子

最常见的情况是,幻灯片标题像书中的章节名称一样使用。议程市场概述建议总结等。都是经典的例子。但是,尽管它们在幻灯片上占据最突出的位置,但它们并没有提供多少信息或价值。

每张幻灯片都应该传达特定的信息。例如,上面的幻灯片告诉我们,在过去的 12 个月中,活跃用户的数量增长了很多。将这一主要信息以标题的形式放在幻灯片的顶部,会立即让你的观众了解他们在看什么。同样重要的是,对于作为分析师的您来说,无论何时看到演示文稿中的这张特定幻灯片,它都是一个很好的起点:

(图片由作者提供)

在标题中使用完整的句子最初可能会觉得有点奇怪,但是我强烈建议你试一试。观众的注意力会立即被吸引到特定幻灯片上最重要的内容上,从而更容易记住您的信息。

在创建幻灯片时,我试图设计和组织标题,以形成一个清晰的故事情节。如果有人只是通读那些完整的句子标题,他们仍然应该按照逻辑顺序获得所有的重要信息。

突出幻灯片上重要的一条信息也迫使你思考一张幻灯片是否真的有必要,或者是否应该一分为二。

2.添加带注释的上下文信息

如果你展示的图表是有趣的(它应该是有趣的),就会有问题。"为什么 5 月份转化率暴跌?",“为什么我们会在第 3 季度看到新用户注册量激增?”、“为什么法国的回头率低那么多?”是展示图表时必须回答的问题。

以我的经验来看,最好的办法是努力预测这些问题。通常,这些相对容易预见,因此人们可以在图表上以小注释的形式添加答案:

(图片由作者提供)

这些笔记不仅会帮助你更自信地陈述,留下更少的开放性问题。在你展示结果的几个星期或几个月之后,人们仍然在浏览幻灯片,这也会有很大的帮助。

3.为后代设计:包括你的来源

当我开始我的分析师生涯时,添加你的来源可能是我得到的最有价值的提示。想象一下,你做了这个奇妙的分析,将结果展示给更广泛的人群,然后继续下一个任务。三个月后,一位同事找到你,问你是否能找出你展示的图表的实际数字。或者更糟糕的是,一些数字现在看起来有点不对,他想确保你提供的结果是可靠的。

根据你用来进行分析的工具,如果你没有在演示中包括你的源,或者没有一个特殊的文件管理系统来管理你所做的所有分析,这可能并不容易。幸运的是,像 Looker、Tableau 和 Co .这样的 BI 工具提供了使用 URL 链接分享你的作品的可能性。在幻灯片注释中添加这些链接只需几秒钟就能完成,这是一种真正的安全方式。更好的是,你的同事也可以在回复你之前检查这些东西。

如果您使用 Jupyter Notebooks 之类的其他工具,至少添加可以找到您的源代码的目录或 git 存储库的链接已经非常有用了。

(图片由作者提供)

4.你是专家:解释结果

作为分析师,我们通常根据数字来陈述事实。与此同时,我们展示的结果仍然可以留下足够的解释空间——无论你是在营销、金融、产品还是其他领域工作。作为分析师,我们是我们领域的专家,因此应该对为什么我们会看到特定的结果或用户行为有很好的感觉。根据我的经验,提供一些解释会非常有助于帮助你的听众理解问题并提出他们自己的想法。

在应用程序中查看以下(虚构的)Medium 入职流程转换数字。我们可以看到,用户应该在收件箱中确认电子邮件地址的步骤明显减少了:

中型入职流程幻灯片(数字是由作者创建的随机数)

5.毫无意外:提前分享你的卡片

提前分享你的卡片并不一定是一个与风格相关的提示,但重要性不亚于前面的原则。当我开始做分析师的时候,我试图让我的演讲尽可能地令人兴奋和吸引人。这意味着我会给观众带来和我切入新话题时一样的体验。

首先,我会定义问题和解决问题的方法。然后,我展示了我所掌握的所有证据,最终得出了我的结论和建议。

这种做法的问题在于,它迫使人们一直跟随你的想法。作为一个听众,如果你不知道整个演讲的方向,就很难提出问题并提出不同的方向。同时,作为演示者,你可能会对你无法回答的问题或你没有注意的事情感到惊讶。

至少在演示前几个小时分享你的幻灯片,这不仅有助于提高会议效率,让每个人都知道正在发生什么。这也让你有机会检查你是否遗漏了什么,或者在展示之前最好仔细检查你牌组中的一些数字。

我希望这些建议能像帮助我一样帮助你改进你的演讲。如果你有我在这篇文章中没有提到的好建议,请在评论中分享。

喜欢这篇文章吗?那么你可能也会对我的另一篇关于(产品)分析的文章感兴趣:

https://productcoalition.com/mastering-user-retention-like-amazon-spotify-and-co-5d2bd2931717

开启数据科学职业生涯的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-launch-your-data-science-career-9da0c238564b?source=collection_archive---------45-----------------------

也是为了提升你的数据科学工作

斯科特·格雷厄姆Unsplash 上拍照

十年前,当我开始我的数据科学职业生涯时,我对 R、SQL、ge phi——一种用于网络分析的开源工具和两三种算法的基础知识,只有一点点了解。但在当时,这足以让我在一家发展最快的初创公司找到一份数据科学的工作。快进到现在,今天的情况完全不同。这个行业竞争非常激烈,要求也非常高。如果您致力于进入数据科学领域或推进您在数据科学领域的职业发展,这篇文章非常适合您。

技巧 1 —选择 Python

如果你已经在使用 python,那太好了!如果没有,请学*使用 Python。根据最*的 kaggle 机器学*和数据科学调查,大约 80%的人回答说他们主要在工作中使用 python。大约 3-4 年前,趋势完全不同,大多数数据科学家仍然使用 R。你可以使用 R 或任何其他编程语言,仍然可以成为一名伟大的数据科学家,但你将与大多数人不同。

选择 python 而不是 R 的另一个原因是深度学*的大多数研究项目都是使用 python 完成的,因此与 R 相比,像 Keras 这样的工具会首先在 Python 中提供它们的功能。

技巧 2——获得基本概念的可靠知识

进入数据科学领域的竞争非常激烈,要想在工作中取得成功,你需要具备以下所有领域的扎实知识。

熊猫

它是数据科学家最常用的 Python 库之一,提供了很多好处。在从事数据科学项目时,数据科学家主要关注两件事,一是数据分析,二是数据操作,而熊猫可以实现这两件事。你应该有足够的知识来使用熊猫完成下面的任务

  • 从不同来源读取和写入数据
  • 数据子集的过滤和选择
  • 摘要和模式提取
  • 识别和处理缺失值和异常值
  • 多变量分析
  • 形象化

NumPy

现实生活中的许多数据都是数字数据,当您开始从事数据科学项目时,您会发现大多数数据都是数字数据,而少数其他分类数据也会使用整数编码或一键编码转换为数字数据。因此,了解对那些需要 NumPy(也称为数字 Python)的要素执行数学和逻辑运算非常重要。

许多人会认为你需要在熊猫之前学* NumPy,但我更喜欢新初学者的另一种方式,因为学*会有很多摩擦,保持高动机很重要,NumPy 概念无疑是非常重要的,但同时没有多少人觉得它有趣。

统计数字

这本身就是一个巨大的话题,作为一名数据科学家,虽然不期望你成为一名专业的统计学家,但你仍然需要对基本的统计概念有足够的了解。

您应该有足够的知识来执行以下任务,

  • 从数据集生成样本—了解不同采样技术之间的差异和优势,并根据使用案例选择一种技术。
  • 使用偏度和峰度理解数据分布的能力
  • 可变性测量
  • 确定两个或多个变量之间的关系
  • 中心极限定理
  • 假设检验

如果您热衷于理解基本的统计概念以及使用 python 的实现,请查看下面的文章

数据科学数学

数学是一个重要的概念,起着至关重要的作用,但我总是建议初学者按照要求学*数学。没有必要专注于数学概念,但学*数学概念就足够了,就像学*线性回归一样,然后学*梯度下降背后的数学概念。

技巧 3——通过项目实施学*

最好的学*只有当你尝试去实现你所学的概念时才会发生。你目前在做什么并不重要,但你需要始终有一个学*目标,并继续学*。有几个公共数据集和竞赛可供您使用、学*和发展您的职业生涯。此外,您可以尝试自己的数据科学用例。在这样做的同时,确保你专注于并提高你在以下领域的技能,

  • 探索性数据分析 —您需要很好地理解不同的数据分析,以便从数据中提取真知灼见
  • 特征工程 —通过更多的实践经验,以及从 kaggle 和其他数据科学论坛中学*,您将了解可应用于不同类型数据和场景的特征工程技术。例如,许多金融数据高度偏向右侧,如个人财富、房价等,因此在这些情况下,我们可以利用对数变换将其转换为正态分布,而无需消除异常值,这有助于将一些关键数据模式传递给我们正在构建的预测模型。同样,当您使用基于距离的算法(如 K-Means 或 KNN)时,使用缩放比例并使数据属性达到相同的比例也很重要。你可以通过实践来学*这些概念。你不需要在第一天就掌握很深的知识,但是为了在职业生涯中取得进步,你也需要获得这些领域的知识
  • 算法选择 —这也带来了更多的实践经验,一些算法最适合某种类型的数据,比如当我们有很多分类数据时,基于树的算法最适合,因为它们会尝试基于不同的条件进行分支。类似地,当输入和输出变量之间存在线性关系时,那么线性回归就可以很好地进行预测。这种知识只有通过实践和经验才能获得,所以在参加比赛或从事你的项目时,要对这些知识保持开放的态度
  • 讲故事的艺术 —虽然您构建的数据分析和预测模型很重要,但数据科学项目的成功取决于您在向业务利益相关方展示发现时想出的故事情节。你可以通过写博客、参加论坛和展示你的分析来微调这些技能

下面是一些可以帮助你学*的 Kaggle 数据集,

技巧 4——基于最新趋势的学*工具

以下是数据科学家在日常工作中常用的一些流行工具。

云平台

最受欢迎的云平台是 AWS、GCP 和 Azure。新冠肺炎危机加速了云在全球的采用,预计这一趋势将在未来几年持续下去。这些平台大多在你注册时提供免费学分,可以用来更好地了解这些平台。如果你能在任何一个流行的云平台上获得一些经验,那么这将有助于你脱颖而出。

码头工人

数据科学项目中最大的问题之一是部署。通常,解决方案将在开发环境中构建,然后在测试环境中进行测试,最后转移到生产环境中。所有的平台通常彼此非常相似,但是当你把你的代码从一个环境转移到另一个环境时,可能会有很多问题,特别是因为库和其他依赖项不完全匹配,这个问题的结局就是 Docker。

Docker 就像一个平台即服务,您可以将解决方案与所有依赖项和包打包在一起,这样就可以更容易地从一个环境迁移到另一个环境,不会有任何麻烦。了解这一点肯定会很有帮助

饭桶

Git 用于版本控制,当团队规模较大时,像 git 这样的工具是版本控制的首选。此外,公共 git 存储库可用于展示您的项目和其他与数据科学相关的工作。

技巧 5——建立个人投资组合网站

虽然学*很重要,但更重要的是能够展示你的技能。展示你技能的最好方式是创建一个个人作品集网站。它可以用来展示你做过的项目以及你写的博客,还可以提供个人资料和其他专业工作的链接。

如果你热衷于创建一个免费的个人作品集网站,请查看我的以下文章。这帮助许多人建立了他们的第一个组合网站,这非常简单,有模板可用,你不需要任何网站开发经验,你可以免费使用 GitHub 页面来托管你的网站。

如果你期待在 2021 年开始你的数据科学职业生涯,那么看看我的这个视频,

关于我

我是一名拥有超过 10 年经验的数据科学专业人员,并且已经撰写了 2 本数据科学方面的书籍。我写数据科学相关的内容是为了让它简单易懂。跟我上 我也有一个 YouTube 频道,在那里我教授和谈论各种数据科学概念。如果有兴趣,可以订阅我下面的频道。

https://www.youtube.com/c/DataSciencewithSharan

从零开始学* Python 的 5 个技巧

原文:https://towardsdatascience.com/5-tips-to-learn-python-from-zero-e4f6a9106558?source=collection_archive---------17-----------------------

学*过程中的实用技巧

如果您计划学* Python,学*过程需要多长时间以及有多顺利将取决于许多因素,例如:

  • 你的背景:你以前是否接触过其他编程语言,特别是面向对象编程语言
  • 你的承诺:每周你会付出多少努力
  • 你的方法:你将如何学*🍁

最*在回想大约一年前刚开始认真学* Python 的时候。在这篇文章中,我分享了我对第三个因素的五大建议🍁这来自我对那些即将踏上旅程的人的思考。

照片由蒂莫西·戴克斯Unsplash 上拍摄

1.找一门优秀的课程和/或一本书来指导你🎒

当你完全是 Python 的初学者时,学* Python 似乎是势不可挡的。甚至像安装 Python 和打开它这样的基本事情看起来也令人困惑。注册并完成一个结构良好的在线课程可以帮助你在短时间内理解基础知识。如果你喜欢这种格式,它也可以是一本写得很好的书。有时从多个来源学*可以互补,有助于巩固知识。如果你想要推荐,我在下面分享了我的推荐。标有星号(*)的资源更适合学*数据科学的 Python。

1.1.在线课程

当我第一次学* Python 的时候,我在 Udemy 上完成了何塞·波尔蒂利亚的以下两门课程:

完成 Python 训练营从零到英雄的 Python
数据科学和机器学*的 Python 训练营 *

我发现这些课程结构良好,内容全面。我非常喜欢并强烈推荐它们。然而,这些课程不是免费的,但通常会有折扣,就像大多数 Udemy 课程一样。但是,你完全可以不花钱学* Python。有很多免费的在线资源可以利用。这里有一个由 Udacity 提供的非常棒的免费课程:

python 编程简介

1.2.书

我是奥莱利的超级粉丝。这里有两本由杰克·范德普拉斯写的很棒的奥莱利的书(每本都有免费的电子版链接):

python 旋风之旅
Python 数据科学手册 *

如果你在谷歌上搜索“ O'Reilly Python books ”,你可以找到更广泛的书籍可供选择。

📍推荐行动点:从免费的 Udacity 课程开始。

2.制作你自己的小抄📜

据我观察,主动学*比被动学*学得更多。观看和阅读是被动学*,而记笔记、总结所学和练*是主动学*。所以看教程视频的时候,不要像看电影一样看!同样的,说到辅导书/博客,也不要像看科幻小说一样去读!一定要在学*的时候创建你自己的语法备忘单。这样会让你的练*时间更轻松。当我在做前面提到的 Udemy 课程时,我学到了很多有用的概念,我知道我不会记住所有的概念,尽管它们有时看起来很直观。所以在看完每个教程视频后,我会再次浏览材料,记下对我的备忘单来说重要和有用的关键示例代码片段。

我的一些手写小抄。每个主题都有自己独立的页面,所以以后可以更容易地通过主题找到语法。

当记下示例语法时,我实际上是手写的。😅这可能看起来不酷,但是手写我自己的小抄有以下好处:
🍀用笔和纸写下片段的行为让我注意到语法的小细节,并提高了回忆能力🍀随着我了解的越来越多,更容易在同一主题上添加更多注释
🍀更容易找到特定的语法,因为我会大致记得我写它们的地方

如果你不喜欢手写代码,你可以在你的电脑上创建一个数字备忘单。这样做的一个好处是,它使搜索更容易。上面提到的手写的好处在某种程度上也是真实的,尤其是如果你打字而不是复制粘贴的话。基本上,您希望示例代码易于参考,这样可以帮助您减少 Python 实践中的麻烦,提高工作效率。

最后,你也可以看看预先做好的小抄来获取灵感。这里有一些由 DatacampDataquest 提供的例子。

📍推荐行动点:当你在做推荐的 Udacity 课程时,一定要自己做小抄,以备后用。

3.不要复制粘贴代码,而是键入它们💪

虽然能够用 Python 编码并不等同于记住语法结构,但不用查找每个小细节就能编码基本的东西仍然非常有用。任何人都可以复制粘贴一个代码,但是你不认为如果你自己可以无缝地编写基本代码,你会感觉更胜任吗?

这是《我是如何遇见你的母亲》中一个有趣且有关联的场景。这是一个很好的提醒,告诉我们这些天来我们是如何变得越来越依赖自动更正和自动完成的。这篇文章有一个相关的要点。当您在实践所学内容时,最好是一个字符一个字符地键入代码,而不是复制粘贴或自动完成。我注意到,如果我输入一个特定的代码几次,很快我就开始记住它(💪肌肉记忆?).所以当我第一次开始学* Python 时,我键入代码并最小化自动完成的使用(当我熟悉新的库时仍然如此)。这真的帮助我能够自己键入基本代码,而不需要谷歌或参考笔记。

一旦您完全熟悉了某个特定的代码,并且认为进一步键入没有什么好处,您当然可以使用自动补全工具和其他快捷方式来加快进度。

📍推荐动作点:练* Python 时,键入代码和,尽量减少复制粘贴和自动补全。

4.从错误中学*👀

当你在练* Python 的时候,你会得到很多错误。这是完全正常的。尽管如此,它仍然让人感到相当沮丧。如果你一直出错,你可能会感到气馁和绝望。学*如何调试(即查找和修复错误)是学* Python 的一个关键部分。如果你坚持练*调试,这可以帮助你在将来更快地调试代码,并且明白应该避免什么样的错误。

下次你出错时,戴上你的侦探帽!首先阅读错误消息,寻找可能导致错误的提示。如果错误消息看起来不具信息性,请在 Google 或任何搜索引擎中搜索该错误。很可能其他有同样错误的人已经寻求帮助并修复了它。

📍建议行动点:读取错误信息。如果错误消息中的提示不够充分,请搜索它。记住,当你识别和修正错误时,你会学到更多!

5.有目的地练*编码💦

为了让自己保持动力并更有效率,在练* Python 时,总是要有小目标。这些小目标应该与你想学* Python 的总体原因相一致。当你有时间的时候,花几分钟记下你想用 Python 做的事情的清单。如果这些项目太大,把它们分成小的任务。这些正是你最终希望能够在 Python 中完成的事情。您可以将此视为提高您所在领域的 Python 流畅性的路线图。这个路线图不是一个静态的文件,相反,它是你可以在学*过程中不断更新的东西。

每次你练*的时候,你从这个列表中选择一个任务。花在练*上的时间可能感觉更有成效,因为当你在练*中需要它们时,你可以利用它们。这也很令人兴奋,因为你会觉得“现在我可以用 Python 做这个了!”。每次练*时,你都应该以一种有组织的方式记录你的代码片段,这样更容易找到它们。随着时间的推移,您从实践中积累了大量有用的代码和模板。有时,您可能会在多个练*会话中处理一个任务,或者有时,您可能会在一个会话中处理多个任务,因为这取决于许多因素,如任务的性质、您的 Python 舒适度以及您投入的专注时间。

想象你周围有一个小泡泡。这个气泡代表您的 Python 舒适气泡。开始时很小。久而久之,你会随着练*慢慢扩大这个泡泡。

📍推荐行动点:为你的 Python 练*时间制定路线图。每次您练*路线图中的任务时,将最终代码记录在您的集合中,以便于下次访问。

额外提示。将您的 Python 实践游戏化🎮

这是为那些渴望额外挑战的人准备的。如果你能让你的 Python 练*时间变得更有趣,并对它着迷,你就更有可能继续并花时间在它上面。这里有一些在线平台,你可以用有趣的方式免费练*编码:

在这些平台中,你可以收集分数、升级并与他人竞争。

📍建议行动点:探索这两个平台,并考虑在其中一个(或两个)平台上建立每日娱乐时间。

大卫·克劳德Unsplash 上拍摄的照片

您想访问更多这样的内容吗?媒体会员可以无限制地访问媒体上的任何文章。如果你使用 我的推荐链接成为会员,你的一部分会费会直接去支持我。

每个人都有第一次。通过练*和努力,你将很快熟悉 Python 的编码!我希望你有一些可以在日常学*过程中开始实施的方法。感谢您阅读这篇文章。如果你感兴趣, 以下是我的一些其他帖子的链接:
◼️ 有用的 IPython 魔法命令
◼️python 虚拟数据科学环境简介
◼️git 数据科学简介
◼️ 用这些技巧整理你的 Jupyter 笔记本
◼️python 中的简单数据可视化,你会发现有用的
◼️ 6 个更漂亮和定制的简单技巧

再见🏃💨

检测和消除机器学*模型中偏差的 5 种工具

原文:https://towardsdatascience.com/5-tools-to-detect-and-eliminate-bias-in-your-machine-learning-models-fb6c7b28b4f1?source=collection_archive---------6-----------------------

公平和偏见

你不需要独自承担重担。

NeONBRANDUnsplash 上的照片

如果你曾经开发或研究过任何类型的机器学*算法,那么你一定在某个时候需要检查你的模型是否有偏差,并确保这种偏差被消除。一个有偏见的系统会导致不准确的结果,这可能会危及你的整个项目。

机器学*算法已经在各个应用领域证明了它们的价值,从医疗应用到自动驾驶汽车和天气预测。虽然机器学*有很多优势,但如果你的机器学*模型包含任何类型的偏见,你就无法利用它的全部潜力。

不同的来源可能导致机器学*模型中的偏差。您使用的数据可能已经有偏差,或者您选择的样本并不能代表整个样本库,或者您的算法可能不适合您的特定问题。不管是什么原因,检测你的机器学*算法中的偏差都不是一件容易的事情。

</5-types-of-machine-learning-bias-every-data-science-should-know-efab28041d3f>

这就是为什么在过去几年中,检测机器学*模型中的偏差一直是许多研究人员关注的焦点。这项研究开发了一些工具,你可以用来检查你的机器学*模型是否有偏差。

本文将带您了解 5 种工具,它们可以帮助您在下一个机器学*模型中检测和减轻偏差。

№1:假设

为了检查你的机器学*模型是否有偏见,你需要问许多问题,并在你的数据中测试不同的场景。例如,如果一个数据点发生变化,或者可能使用不同的数据样本来训练或测试模型,您将需要测试模型性能是否会发生变化。这些变化如何影响您的模型的最终结果?

你可能经历过,或者想象过,回答这样的问题根本不是一件容易的事情。这可能非常耗费时间和资源,因为您需要编写和测试不同的代码场景来检测偏差。幸运的是,在 2018 年,谷歌推出了一款名为What-If的工具,来帮助这项任务变得更加容易。**

What-If 是一个开源的交互工具,让每个人——甚至非程序员——都可以更容易地测试、探索和调试机器学*模型。假设分析为您提供了操作数据点、编辑数据点、生成图以及指定评估模型的标准的能力,所有这一切都使用一个清晰而简单的 GUI。

谷歌还提供了许多材料,你可以使用这些材料来了解如何避开假设,并有效地使用它。

**</6-ways-to-improve-your-ml-model-accuracy-ec5c9599c436>

№2: AI 公平 360

假设帮助你检测你的机器学*模型中偏见的存在,但它没有给你一个直接的方法来消除这种偏见。消除模型中的偏差就像检测偏差的存在一样具有挑战性。

IBM 提供了AI Fairness 360一个开源的综合工具包,用于检测和消除机器学*模型中的偏差。AI Fairness 360 包括 70 多个公平指标,可以帮助您检测模型中的偏差,如曼哈顿和欧几里德。

该工具还包括超过 10 个算法,帮助您消除基础,如果你找到一个。这些偏见减轻算法包括优化预处理阶段,偏见消除器,以及定期和更多。此外,您可以使用这个工具来开发和构建您自己的度量和缓解算法。

IBM 还提供了大量的教程和材料,你可以用它们来学*如何使用 AI Fairness 360。最后,他们提出了一个针对偏差的评级系统,可用于验证任何机器学*应用结果。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

№3:众包

假设分析和人工智能公平 360 是通用工具,可用于检测和减轻任何机器学*模型中的偏差。但是,有时,您需要针对特定应用的工具。微软和马里兰大学的研究人员使用众包来精确检测自然语言处理应用程序中的偏见。

众包是一个用来描述让人们——群众——参与创新、解决问题或提高效率的实践的术语。使用众包可以用来研究问题的不同类别,以确定偏见的潜在原因。

使用众包来检测机器学*应用中的偏见是受隐式关联测试(IAT)的启发。公司和研究人员经常使用 IAT 来衡量和检测人类偏见。使用众包的主要目的是从任何机器学*应用的第一步(也是最重要的一步)中消除偏见,这一步是数据收集和清理,或者通常所说的数据预处理。

</10-nlp-terms-every-data-scientist-should-know-43d3291643c0>

№4:局部可解释的模型不可知解释(LIME)

机器学*应用在我们身边随处可见。这些应用程序给我们的预测是我们应该 100%相信的。有时这些应用非常关键,例如使用机器学*来诊断疾病,或者用于自动驾驶汽车。这些预测中的任何错误都可能导致致命的结果。

如果你的模型给出了错误的或有缺陷的结果,在你着手解决问题之前,你需要明白的一件重要的事情是为什么模型首先给出这些预测。理解模型的行为可以帮助您发现偏差并最终减轻它。

【本地可解释模型不可知解释(LIME) 是一个用于为不同机器学*模型的行为生成解释的工具。Lime 允许您操作模型的不同组件,以便您可以更好地理解它,并能够指出偏差的来源(如果存在的话)。

</6-data-science-certificates-to-level-up-your-career-275daed7e5df>

№5: FairML

这个列表中我们最后的工具箱是 FairML 。FairML 是一个 Python 开源工具箱,用于审计机器学*预测模型,以检测偏差。FairML 的构建和开发是为了回答一个问题,即特定的输入对模型的性能有多大影响。

使用不同的输入数据集轻松测试模型性能的能力可以帮助您检测模型中是否存在偏差。FairML 提供了一个端到端的工具,允许您通过量化特定输入的相对重要性来测试您的模型性能。

最后的想法

开发机器学*模型的每一步都会对项目的最终结果产生重大影响。这些步骤中的每一步对结果都有不同的影响,并且需要不同的时间和精力来完成。

最费时费力的步骤之一是检测和减少模型中的偏差。因为偏差可能来自不同的来源和原因,所以开发人员很难指出您的模型中是否存在偏差。

作为开发人员,我们喜欢创建工具,让我们的未来生活变得更加轻松。这就是为什么在过去的几年里,研究人员努力开发和构建可以帮助检测和减轻偏见的工具,以节省经常浪费在这方面的大量时间和精力。

时间就是金钱,如果有一种工具可以帮助你更快更有效地开发下一个项目,那么为什么不利用这一点,帮助自己建立更多的项目并获得更多的经验呢?

本文介绍了 5 种不同的工具和方法,您可以使用它们来加快在即将到来的项目中检测和减轻机器学*模型偏差的过程。因为众所周知,无偏的模型给出的结果是最准确的。**

高效维护机器学*项目的 5 个工具

原文:https://towardsdatascience.com/5-tools-to-maintain-your-machine-learning-projects-efficiently-1761df2d7023?source=collection_archive---------24-----------------------

调试、测试和版本控制您的项目。

马文·迈耶在 Unsplash 上的照片

不管它的最终目标是什么,任何软件项目都必须经历从构思到部署的一些公共步骤。例如,数据科学项目通常是软件项目,因此它们需要经历相同的开发过程。这个开发过程包含构思和计划、设计解决方案、实现、测试软件、部署软件和维护软件等步骤。

尽管这些步骤可能会根据您正在构建的实际项目而有所不同,但在大多数时间里,您会以某种形式经历这些步骤。今天的文章旨在讨论数据科学项目的最后步骤,尤其是项目测试和维护。

测试和维护最具挑战性的项目类型之一是任何包含机器学*算法的项目。一般来说,测试和调试软件应用程序通常需要很长时间,通常比开发应用程序的时间还要长。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

机器学*应用程序通常很复杂,并且依赖于复杂的数学和统计学。这使得测试和调试这样的应用程序变得更加困难和耗时。幸运的是,现有的工具可以帮助我们在更短的时间内以最小的努力测试、调试和维护我们的机器学*项目。

本文将介绍五种工具,它们可以帮助您高效、轻松地测试、调试和维护您的项目。

№1:张量手表

让我们从一个简单易用的工具开始吧, TensorWatch 。TensorWarch 是微软研究院设计的可视化调试工具,用于帮助数据科学家调试机器学*、人工智能和深度学*应用程序。TensorWatch 可与 Jupyter 笔记本完美配合,实时显示您的模型训练和表现的不同分析。

虽然您可以在 TensorWatch 中使用预定义的可视化和分析,但该工具非常灵活且可扩展。您可以设计和实现自己的可视化、仪表板和测试。此外,您可以在训练过程中使用 TensorWatch 对您的模型执行查询。因此,如果你正在寻找一个简单、轻量级的工具来开始调试机器学*模型,TensorWatch 是一个很好的选择。

№2:深套件

列表中的下一个工具是我经常提到的工具,每当我谈到让任何数据科学家的生活变得更容易的工具时: Deepkit 。Deepkit 是一款开源开发工具,旨在调试和测试机器学*应用。Deepkit 是一个一体化的跨平台应用程序,个人、小团队或大公司都可以使用。

Deepkit 提供了许多选项,您可以使用它们来使训练、测试和调试您的机器学*和人工智能应用程序变得轻而易举。这些选项跟踪机器学*实验的每一步,从视觉和分析两方面进行模型调试,并提供计算管理,允许您监督模型的基础设施并有效地利用它。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

№3:数据版本控制(DVC)

这个工具是我最喜欢的数据科学工具之一。当我在学*软件开发时,其中一个方面是版本控制。Git 和版本控制不是最容易理解的概念,尤其是对于初学者。这就是为什么数据版本控制 (DVC)是跟踪您的版本控制的一个惊人的选择。

DVC 是一种工具,用于对机器学*模型、数据集和项目中的任何其他文件进行版本控制。DVC 可以帮助你追踪不同云存储中的所有文件,比如亚马逊或谷歌,甚至是离线光盘。DVC 将跟踪你的机器学*模型的演变,以确保可重复性,并允许你在不同的实验之间切换。它还提供对部署和持续集成的支持。

№4:流形

我们的下一个工具是优步开发并用于调试机器学*模型的开源工具;这个工具是多方面的。所以,当数据科学家测试他们的机器学*模型的性能时,他们经常使用对数损失、平均绝对误差和曲线下面积等指标。但是,在大多数情况下,当您的模型没有按照预期运行时,这些度量标准并没有给您必要的信息来理解。

Manifold 的开发是为了使在模型上迭代的过程更具信息性,Manifold 是机器学*的可视化模型诊断和调试工具。它允许您超越基本的性能指标,甚至提供为什么模型可能执行错误或意外的潜在原因。不仅如此,它还可以为您的特定数据集建议候选模型及其预期精度,并为每个给定模型提供理由。

</5-types-of-machine-learning-algorithms-you-need-to-know-5ac7fce8920d>

№5: TensorFlow 调试器

最后但并非最不重要的是怪物工具 TensorFlow 的调试器。TensorFlow 是 Google 在数据科学社区开发的最知名的 Python 机器学*库之一。即使你是这个领域的新手,你也可能听说过 TensorFlow。TensorFlow 包含许多工具和选项来开发强大的机器学*应用程序。

其中一个工具是 TensorFlow 调试器 (tfdbg)。调试是任何机器学*应用程序中必不可少的一步,但它通常是非常困难和耗时的一步。TensorFlow 调试器提供了在运行时检查应用程序中数据流的功能。此外,它为开发人员提供了一个观察图形的中间张量及其模拟步进的机会。

最后的想法

调试软件是任何软件生命周期中最乏味的步骤之一。当你处理包括机器学*在内的应用程序时,这一步变得更加复杂和耗时。这是因为机器学*应用程序通常依赖于高级数学和统计学来操作,更不用说用于训练模型的数据了。

这些事实使得调试机器学*应用程序更加麻烦。但是,幸运的是,我们可以使用不同的工具来帮助我们测试、调试和维护机器学*应用程序。

</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器

towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)

本文介绍了测试、调试、可视化分析和版本控制机器学*模型的工具。是的,在从事数据科学项目时,有许多工具可以使用,但一旦找到了您最喜欢的工具,您的工作流程将变得流畅而高效。

加快数据科学项目进度的 5 种工具

原文:https://towardsdatascience.com/5-tools-to-speed-up-your-data-science-project-progress-d321d6febd16?source=collection_archive---------17-----------------------

为你自己和你的团队节省一些宝贵的时间。

Unsplash 上由猎人哈利拍摄的照片

当你第一次进入数据科学领域时,你可能会独自一人。你需要自学编程、数学、统计学、可视化和数据可视化。在开始的时候,你要做的项目会很简单,很小。

你将收集数据,清理数据,分析数据,开发机器学*模型,训练模型,并衡量模型的性能;简而言之,从开始到结束,你将负责项目的所有方面。

但是,当你加入一家公司,成为团队的一员时,你很可能只负责项目开发的一个步骤。然后你需要学*如何建立在他人的工作之上,如何与他们交流,以及如何一起工作来建立一个成功的项目。

我们都知道,当我们被给予一个新项目时,寻找工具来使我们的生活变得容易可能不是首先想到的事情。毕竟,寻找数据科学工具就像一个永无止境的螺旋;一旦你进去了,可能需要几个小时——有时几天——才能出来!

所以,请允许我卸下你肩上的重担,给你五个工具,它们将帮助你提高工作效率,让你的项目进展得更快、更顺利、更愉快。

№1:阿帕奇卡夫卡

让我们用一个在社区中众所周知的工具开始这个列表, Apache Kafka 。Apache Kafka 是一个面向分布式团队的开源事件流。Apache Kafka 提供高性能数据管道、数据集成和流分析。该工具专为实时数据而设计和构建,允许数据科学家准确、快速地存储大量记录流。

使用 Apache Kafka,您和您的团队——以及公司——可以在一台或多台服务器上运行多个集群,并使用这些集群将传入的数据流式传输并分类到主题中,每个主题都有自己的时间戳。它还为您的团队需求提供了几个 API,包括消费者 API、流 API 和生产者 API。

№2:数据机器人

无论您是数据科学新手还是老手,这款工具都适合您。 DataRobot 是一个面向所有技能水平的数据科学家的机器学*平台。该平台允许您立即构建、训练和部署准确的模型。DataRobot 使用大型并行处理器,允许您使用来自 Python、R、Spark ML 和其他开源库的不同资源轻松开发模型。

DataRobot 提供了各种产品来改善您的生活,例如 DataRobot Cloud,它允许您构建最先进的预测模型并使用 AWS 扩展它们,以及 DataRobot Enterprise,它是为公司构建的平台,允许他们灵活部署他们的模型和强大、安全的按需客户平台。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

№3: Trifacta

我们名单上的下一个是 Trifacta ,它不仅仅是一个工具;相反,它是一组工具,在构建数据科学项目的同时,为公司和数据科学家节省了大量时间、金钱和资源。Trifacta 专注于数据项目的主要耗时步骤,即数据争论。它允许任何人更有效地处理数据。

Trifacta 提供了一个令人惊叹的数据牧马人工具,通过为您提供建议和转换来帮助您使用机器学*算法,从而高效、快速、准确地准备您的数据以进行可视化和准确的分析。Trifacta 之所以能够做到这一点,是因为它由一个专为数据争论而设计的高性能引擎驱动。Trifacta 还为数据科学家组织活动,例如即将于 4 月 7 日至 9 日举行的牧马人峰会

№4:阿帕奇火花

Apache Spark 是一个强大的大规模真实数据分析和处理引擎。Apache Spark 为不同的编程语言提供了各种高级 API,包括 Python、R 和 Java。它还提供了对高级数据分析工具的支持,例如用于 SQL 的 Spark SQL ,用于开发和部署机器学*模型的 Spark MLlib ,用于图形可视化和处理的 GraphX ,以及用于流处理的结构化流

使用 Apache Spark,您可以访问不同的数据管理源,如 Cassandra 和 S3。最后,Apache Spark 还提供了 80 多个操作符,允许您构建各种并行应用程序。

</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>

№5:层叠

今天列表中的最后一项也是最重要的一项是级联。 Cascading 是数据科学家在 Apache Hadoop 上构建和开发大数据应用的平台。级联不仅用于开发大型复杂问题的解决方案;您还可以用它来解决简单的问题,因为它利用了系统集成框架、数据处理和调度引擎的力量。

在 Apache Spark 上开发的应用程序可以在 MapReduce、Apache Flink 和 Apache Tea 上运行和扩展。它还为 Hadoop 分布式团队提供了巨大的支持。

最后的想法

在团队中工作并不总是容易的;你必须知道如何相互合作和协调;如果你的团队分布在世界各地,这将变得更具挑战性,这甚至在 COVID 之前就存在了。当团队分散在世界各地,具有不同的时区和母语时,任何有助于将术语结合在一起、加速工作并使其更有效的工具总是受欢迎的。

</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>

我从未见过数据科学家或 IT 领域的任何人会说,“不,我不需要任何工具来加速和简化我的工作。”我们都很感激一点点帮助,一种帮助我们加快所需任务、重复性任务的工具,它让我们把大部分时间和能力花在需要创造力和智力的任务上。

在本文中,我推荐了 5 个工具,它们对从事数据科学项目的团队有很大的帮助。这些工具将帮助您进行数据清理、数据分析,甚至构建、训练和测试机器学*模型。

每个数据科学家都应该知道的 5 种机器学*偏差

原文:https://towardsdatascience.com/5-types-of-machine-learning-bias-every-data-science-should-know-efab28041d3f?source=collection_archive---------16-----------------------

要修正你的偏见,你需要知道它为什么会发生。

艾萨克·史密斯在 Unsplash 上拍摄的照片

机器学*偏差是一个术语,用于描述由于在机器学*过程的一个步骤中做出的一些不准确的假设,算法产生的结果不正确。

要开发任何机器学*流程,数据科学家都需要经历一系列步骤,从收集数据、清理数据、训练算法,到部署数据。这个过程容易出错;如果其中一个发生在任何一个步骤中,它会在整个过程中减轻,导致其影响在最终结果中放大。

数据科学的所有子领域,无论是机器学*、自然语言处理还是任何其他子领域,都依赖于数据。它们都依赖于用于构建、训练和开发其核心算法的数据集的质量和数量。因此,质量差的数据或有缺陷的数据会导致不准确的预测和总体糟糕的结果。

</5-types-of-machine-learning-algorithms-you-need-to-know-5ac7fce8920d>

机器学*应用中的偏差有多种原因。作为数据科学家,尽最大努力减少和防止他们的模型中出现偏差的原因是我们工作的一部分。防止偏见的最好方法是充分了解其原因。一旦确定了原因,就可以采取一些措施来消除它并完全消除它的影响。

本文将介绍机器学*偏差的 5 种主要类型,它们为什么会出现,以及如何减少它们的影响。

№1:算法偏差

算法偏差是当机器学*过程的核心算法有故障或不适合当前应用时发生的错误。当应用程序开始为特定人群(输入案例)给出错误结果时,可以发现算法偏差。

如果你的算法在几乎相同的情况下给出不同的结果,那么也许你需要回去重新检查你的算法,看看它是否适合手头的问题。算法偏差可能是有意的,也可能是无意的。这可能是算法核心技术问题的结果,也可能是错误选择算法的结果。

№2:样本偏差

机器学*应用中偏差的另一个原因是样本偏差。这种类型的偏差源于应用程序开发早期阶段的错误,即数据的收集和清理。数据是任何机器学*应用的核心;毕竟算法是学不会它没看到的东西的。

如果开发人员选择了错误的样本来训练他们的模型,该样本很小,或者包含许多错误的数据点,或者不代表整个数据池,那么对于与该样本不同的数据点,结果将是不准确的。

幸运的是,样本偏差并不复杂;您可以尝试使用更大、更多样化的数据集来训练您的模型。您可以多次训练它,观察它的行为,并微调参数以获得最佳答案。

</6-ways-to-improve-your-ml-model-accuracy-ec5c9599c436>

№3:偏见偏见

对于你的问题,你可能有正确的算法,并且你尽了最大努力选择你能得到的最好的数据样本,但是你的结果仍然是有偏差的。可能发生的一个原因是偏见。

偏见往往是数据一开始就有偏差的结果。您提取并用于训练模型的数据可能具有预先存在的基础,如刻板印象和错误的案例假设。所以,无论你尝试使用什么算法,使用这些数据总是会导致有偏差的结果。

偏见偏见相当难解决;你可以尝试使用全新的数据集,尝试修改数据以消除任何现有的偏见。

№4:测量偏差

测量偏差可能是在开发过程的早期,即过程的数据收集阶段出现的偏差类型。如果这个模型的性能和准确性完全依赖的数据是不准确的,那么在流程的剩余步骤中就没有什么是不准确的。

这些数据通常是由人或计算机完成的一些计算和测量的结果,然后存储在数据库中。如果这些计算测量是错误的,它们将导致错误的数据点,这些数据点将被输入到模型中以训练和发展它。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

№5:排除偏差

选择正确的数据集来训练和构建模型并非易事。在这样做的时候,你可能面临的一个挑战是试图避免排斥偏见。当重要的数据点从训练数据集中排除时,会出现排除偏差,因此得到的模型不会考虑它们。

外卖食品

人和算法都容易出错,都有偏差。然而,这并不意味着我们的模型也需要有偏差。我们周围的技术正在为我们做大多数决定,决定下一步买什么,什么学校对我们的孩子更好,什么城市更安全,我们的下一次贷款请求是否被批准,等等。

然而,这些系统可能会有偏差,这取决于用来构建它们的数据以及构建它们的人。这就是为什么尽可能地减少和消除偏见是任何机器学*应用程序开发的重要步骤。为了成功地做到这一点,我们首先需要了解为什么会出现偏差,偏差的类型,以及每种类型在开发过程中的位置。

</6-data-science-certificates-to-level-up-your-career-275daed7e5df>

在任何机器学*应用中寻找和解决偏差的原因都不是一门精确的科学;我更愿意将它视为一种艺术形式,一种只有在你建立更多项目、与更多数据互动并解决不同类型偏见的情况下才会变得更好的技能。

考虑到我们对数据的依赖与日俱增,了解技术系统中偏差的原因以及如何消除偏差的技能将继续是每个数据科学家都应该努力、发展和磨练的关键技能,以便在未来的职业生涯中脱颖而出。

用于图像处理的 5 个终极 Python 库

原文:https://towardsdatascience.com/5-ultimate-python-libraries-for-image-processing-13f89d32769e?source=collection_archive---------13-----------------------

OpenCV 不是唯一的一个

照片由 麦克 发自 像素

图像处理是操纵图像以从中提取特征的现象。

在当今的计算机视觉和深度学*领域,大量使用不同的图像处理算法来从图像数据集进行边缘检测、识别和分类。

有时,这些算法还会逐帧应用于视频,以从中提取特征。

在今天的文章中,我们将看看 5 个最好的 Python 库,它们可能会帮助你对图像进行操作,如裁剪、灰度化等。

1。 OpenCV

OpenCV 是用于图像处理和计算机视觉的最流行和最广泛使用的库之一。这个口头库可以用于许多编程语言,如 C、C++、Python、Java,但 Python 绑定库是最流行的一个。

使用该库不仅可以实现图像操作,还可以轻松实现与计算机视觉相关的复杂深度学*算法。open CV 最大的优点是它是跨平台的,并且可以在移动设备上运行。

安装

pip install opencv-python

对图像进行高斯模糊处理。我们将使用 Colab,因为在那里我们不需要设置环境——这里一切都是预先设置好的。

首先,让我们导入必要的包。Colab 不支持 cv2 . im show()——但是,我们有一个替代方案。

import cv2import numpy as npimport urllibimport urllib.request as urfrom google.colab.patches import cv2_imshow

现在,让我们从互联网上加载一个图像,并应用一些过滤器。

应用滤镜后的模糊图像—作者截图

2。 简单 CV

SimpleCV 是一个 python 框架,使用了 OpenCV 这样的计算机视觉库。这个库非常简单易用,对快速原型制作非常有帮助。

这个库对那些不了解不同图像处理概念的人特别有用,比如特征值、色彩空间和位深度。

安装

pip install SimpleCV

这个库可能是执行对象检测任务的更好选择。你可以找到一些令人惊奇的任务,比如使用这个库来检测一辆车是否停着。

你可以在这里了解更多关于这个库的信息。

3。 枕头

Pillow 是 Python 的一个图像处理库,派生自 PIL 或 Python 图像库。虽然它不如 openCV 强大和快速,但它可以用于简单的图像处理工作,如裁剪、调整大小、旋转和灰度图像。另一个好处是可以不用 NumPy 和 Matplotlib。

安装

pip install pillow

要阅读 PIL 的图像,我们可以使用:

**from** PIL **import** Imageim **=** Image.open(r"C:\Users\System-Pc\Desktop\image1.jpg")im.show()

你可以在这里了解更多关于这个图书馆的信息。

4。 Mahotas

Mahotas 是一个用于图像处理和计算机视觉的 Python 库,最初是为生物图像信息学设计的。但是也可以使用它来执行其他计算机视觉任务。它最初是用 C++编写的,这使得它非常快,并且除了 NumPy 之外,它没有其他依赖项。

安装

pip install mahotas

使用 mahotas 对图像进行灰度缩放:

最后,在运行代码之后,我们可以得到下面的结果。

作者添加的截图

5。 pgmagick

Pgmagick 是 GraphicsMagick 的 Python 包装器,它是用于图像操作的工具和库的集合。它支持超过 88 种格式的图像。除了图像处理工作,它还可以在 web 应用程序中用于创建新图像。

安装

pip install pgmagick

要从图片中提取边缘:

from pgmagick.api import Imageimg = Image(‘lena.jpg’) #Your image path will come hereimg.edge(2)img.write(‘lena_edge.jpg’)

结论

虽然 OpenCV 是我们将来要使用的主要图像处理库,但了解一点其他图像处理库的知识肯定是个好主意。

所有这些库都可以使您的工作流程变得更加简单,因为它们为特定的功能提供了更简单的实现。

要了解关于这些库的更多信息,您可以随时关注官方文档,也可以咨询这些库的开源社区。

在你走之前……

如果你喜欢这篇文章,并且想要继续关注关于 Python &数据科学的更多精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为一名中级会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: Pranjal 的简讯

Python 中 5 个未知的有趣事实

原文:https://towardsdatascience.com/5-uncharted-interesting-facts-in-python-2f6c73d70e0?source=collection_archive---------18-----------------------

图片来自 Pixabay

需要注意 Python 的这些神秘行为

每种编程语言都会有一些奇怪的行为。这些通常不是因为 bug 或错误,而更有可能是关于一些困境的决定。就像当我们面对一些选项时,选择一个项目通常意味着放弃其他项目提供的可能性。当然,这也发生在 Python 上。

在本文中,我挑选了 Python 中几个“奇怪”的行为。我相信不是每个人都知道。希望你能喜欢阅读这些关于 Python 的有趣事实。

1.发电机相当懒惰

图片由photos 为您提供来自 Pixabay

生成器是 Python 中最流行的语法糖之一。它允许我们定义一个对象,该对象将基于预定义的规则按需迭代和生成项目。

等等,我说的是“点播”。是的,这就是 Python 生成器相当懒的原因。先说个例子。

my_list = [1, 1, 2]
my_gen = (num for num in my_list if my_list.count(num) > 1)list(my_gen)

在上面的代码中,我们定义了一个列表,并使用这个列表来定义一个生成器。生成器将返回列表中出现不止一次的项目。为了让生成器一次性输出所有内容,我在最后将其转换为一个列表。

my_list中,只有数字1重复了不止一次。因此,返回了两个1而不是数字2

然而,如果我们在定义了生成器之后改变了my_list会怎么样呢?

my_list = [1, 1, 2]
my_gen = (num for num in my_list if my_list.count(num) > 1)
my_list = [1, 2, 2]list(my_gen)

这一次,数字2被返回,因为在新列表中它被重复了两次。但是,如果生成器使用新的列表,为什么它没有返回两个2?也许下面的例子更清楚。

my_list = [1, 1, 2]
my_gen = (num for num in my_list if my_list.count(num) > 1)
my_list = [3, 3, 3]list(my_gen)

我们应该让数字3重复三次,为什么生成器什么也不返回?

有趣的事实是,生成器将根据其定义执行“in”子句。然而,“if”子句是懒惰的,只在迭代时执行。换句话说,它试图找出12是否重复了不止一次,但是列表中只有数字3。所以,什么都没回。

到这里,你可能已经在其他教程中看到了,但我们可以再深入一步。你认为“in”条款发生了什么事?事实上,生成器保留了对列表对象的引用。因此,当我们给my_list分配一个新的列表,比如[3, 3, 3]时,引用的列表仍然存在,但是变量my_list已经改为指向新的列表。

这意味着我们可以通过修改列表对象本身来调整这个例子。那么,结果就“不诡异”了。

my_list = [1, 1, 2]
my_gen = (num for num in my_list if my_list.count(num) > 1)
my_list[0] = 3
my_list[1] = 3
my_list[2] = 3print('my_list ->', my_list)
print('generator ->', list(my_gen))

2.“是”不一致

图片来自 PixabayRyan McGuire

这是 Python 中一个著名的怪异例子。如果你以前从未见过,你会喜欢这个的。

a, b = 256, 256
a is b

我们让ab都等于数字 256。然后,我们使用is来检查它们是否引用同一个对象。答案是真的。

但是,如果我们将数字改为 257,答案将是假的。

a, b = 257, 257
a is b

你大概知道关键词is==不一样。前者检查两个变量是否在内存级别引用同一个对象,而后者检查实际的文字值。

因此,我们可以使用id()函数来验证这一点。

a, b = 256, 256
print(id(256))
print(id(a))
print(id(b))

对于数字 256,它们都指向同一个对象。

a, b = 257, 257
print(id(257))
print(id(a))
print(id(b))

但是,如果是 257,他们就不一样了。这意味着它们是位于不同内存地址的不同对象,即使它们的算术值是相同的。

怎么会这样我们可以从官方文档中找到答案:https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong

当前的实现为-5256之间的所有整数保留了一个 integer 对象数组,当你在这个范围内创建一个 int 时,你实际上只是得到了一个对现有对象的引用。

嗯,这意味着当我们启动 Python 会话时,-5256之间的所有数字都被加载。这是为了加速执行,因为这些整数可能比其他整数使用得更频繁。

所以不管我们定义了多少个整数变量,只要在范围内,Python 都会把现有整数对象的内存地址给那个变量。然而,当我们定义一个超出这个范围的变量时,Python 必须创建一个全新的对象。这就是为什么它们会有不同的内存地址。

3.超越两个灵魂

图片来自 Pixabaysuju-foto

当我第一次意识到这个 Python 技巧时,我就想到了这个名字。这是一个电子游戏的名字。不用担心,这个我就不展开了,因为不在主题之内。

让我们定义一个表示向量的列表。当我们定义一个列表时,我们可以使用星号来重复相同的对象一定的次数。

vector = [1] * 2

现在,我们有了一个矢量。让我们重复这个向量两次,得到一个矩阵。

matrix = [vector] * 2

现在,假设我们想要更改第 1 行第 1 列的元素值。

matrix[0][0] = 2

什么?为什么第二行的第一个数字被相应地更新了?如果我们想改变两行中的任何一行,另一行也会跟着改变。

问题就出在这一行代码matrix = [vector] * 2。当我们使用星号来复制任何对象时,它实际上并没有创建一个新的对象。换句话说,这两行引用同一个向量。

所以,我们改变其中一个,另一个也会改变。

定义这种矩阵的更安全的方法是使用常规的 for 循环。

matrix = [[1]*2 for _ in range(2)]
matrix[0][0] = 2

4.扩展运算符优先级教程

图片来自 PixabayDaKub

在这个例子中,我们可能永远没有机会像这样编写代码,但知道这一点真的很有趣。我们都知道not True就是False的意思。因此,not True == False

那一定是暗示True == not False吧?让我们看看。

为什么?因为==符号测试的优先级高于not。我不认为我们需要了解+, -, *, /操作符的优先级,因为这是非常必要的。然而,这一点是很容易被忽视的。

因此,这将是正确的。

True == (not False)

5.秘密串连接方法

不幸的是,此时此地,我在 Pixabay 上的旅程结束了

这次,我们先来看例子。

print("Chris""")
print('Chris''')

这些是如何工作的?

我们都知道在 Python 中可以使用加号+轻松连接两个字符串。当我们有一个字符串列表时,使用join()方法也很流行。

然而,很少有人知道,我们甚至可以在 Python 中不使用任何运算符或函数来连接字符串,只需将它们放在一起。我们可以在中间放一个空格,甚至什么都不放。

print("Chris" "Tao")
print("Chris""Tao")

然而,如果我们不放任何东西,而是把一个空字符串和另一个连接起来,这个错误就会发生。

print("""Chris")

这很容易理解,Python 对多行文字使用三重引号。当它找到三重引号时,它会尝试找到另一对。如果没有其他对,它将抛出错误。

当然,我们可以在中间加一个空格,这样就可以消除误差。

print("" "Chris")

嗯,可能不是很有用,但是了解:D 真的很有趣

摘要

图片来自 PixabayPietro carbucicichio

在这篇文章中,我收集了 Python 中 5 个有趣的、不为人知的“怪异”事实。希望你喜欢这本书,并发现它们…有用…好吧,可能不是很有用,但至少有趣。

https://medium.com/@qiuyujx/membership

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)

用于时间序列分析的 5 个未开发的 Python 库

原文:https://towardsdatascience.com/5-unexplored-python-libraries-for-time-series-analysis-e9375962fbb2?source=collection_archive---------21-----------------------

很高兴有这些宝石在你的桶里

照片由 贾洛发自像素

时间序列分析是数据科学家最常遇到的问题之一。大多数时间序列解决方案处理经济预测、资源需求预测、股票市场分析和销售分析。

如果从头开始,为大量与时间相关的数据开发复杂的模型对程序员来说可能是一项艰巨的任务。这就是 Python 发挥作用的地方,它有专门为时间序列分析编写的令人惊叹的库。

本文将讨论五个这样的库,如果您有兴趣解决与时间序列相关的问题,它们可能会对您有所帮助。其中一些库正在使用深度学*方法来寻找数据中的最佳模式。

尽管如此,我还是建议用您的数据逐个尝试这些库,然后观察哪个模型可以帮助您以更好的方式捕捉模式。您还可以组合每个模型的结果来获得一个合并的结果,这有时会为我们提供一个更好的结果。

1。 自动驾驶

顾名思义,它是一个用于自动时间序列分析的 Python 库。AutoTS 允许我们用一行代码训练多个时间序列模型,这样我们就可以选择最适合我们问题的模型。

这个库是 autoML 的一部分,其目标是为了方便初学者而自动化库。

属国

  • Python 3.6 以上版本
  • Numpy
  • 熊猫
  • Sklearn
  • 统计模型

安装

pip install autoTS

你可以在这里了解更多关于这个库的信息。

2。 先知

Prophet 是一个优秀的库,由脸书的数据科学团队开发,用于解决时间序列相关的问题,可以使用 R 和 python。

这对于处理具有强烈季节性影响的时间序列特别有用,如购买行为或销售预测。此外,它可以很好地处理杂乱的数据,无需任何手动操作。

安装

pip install prophet

你可以在这里了解更多关于这个库的信息。

3。 飞镖

Darts 是一个 scikit-learn 友好的 Python 包,由 Unit8.co 开发,用于预测时间序列。它包含大量模型,从 ARIMA 到深度神经网络,用于处理与日期和时间相关的数据。

该库最大的优点是它还支持使用神经网络的多维类。

它还允许用户组合来自几个模型和外部回归的预测,这使得回测模型更容易。

安装

pip install darts

你可以在这里了解更多关于这个图书馆的信息。

4。 Pyflux

Pyflux 是一个为 python 构建的开源时序库。Pyflux 选择了更多的概率方法来解决时间序列问题。这种方法对于像预测这样需要更全面的不确定性的任务尤其有利。

用户可以建立一个概率模型,通过联合概率将数据和潜在变量视为随机变量。

安装

pip install pyflux

你可以在这里了解更多关于这个库的信息。

5。 Sktime

Sktime 是一个 Python 库,带有与 scikit-learn 兼容的时序算法和工具。它还具有分类、回归和时间序列预测模型。该库的主要目标是制作可以与 scikit-learn 互操作的模型。

安装

pip install sktime

你可以在这里了解更多关于这个库的信息。

结论

这些是一些 Python 库/框架,可以在处理时间序列问题时使用。互联网上还有一些更酷的时间序列库,比如 tsfresh、atspy、kats(——你也可以去看看。

主要目标是根据您的需求选择一个库,即能够满足您的问题陈述要求的库。要了解更多关于这些库的信息,你可以查看它们各自提供的文档,因为大多数都是完全开源的。

在你走之前…

如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学激动人心的文章,请点击这里https://pranjalai.medium.com/membership考虑成为一名中等会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: 普朗加尔的简讯

每个数据科学家都应该知道的 5 项独特技能

原文:https://towardsdatascience.com/5-unique-skills-every-data-scientist-should-know-7256efcfc8e3?source=collection_archive---------25-----------------------

意见

沟通是关键…还有其他商业技巧和建议

凯利·西克玛在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 为利益相关方减少 DS 术语
  3. 不要过度承诺
  4. 与软件工程师建立关系
  5. 主 SQL 优化
  6. Git 用 Git
  7. 摘要
  8. 参考

介绍

作为数据科学家或未来的数据科学家,我们可能会看到一些同样的技能被认为是重要的,这是事实;然而,我想提出五项独特的技能和/或建议,希望你能从这些例子中受益,并在你的职业生涯中应用它们。下面的技能将包括与利益相关者合作,以及一些编程技巧和建议。如果您想了解关于这五种独特的数据科学技能的更多信息,请继续阅读。

为利益相关者减少数据科学术语

照片由萨米·威廉姆斯Unsplash【2】上拍摄。

如果你决定受雇于一家数据科学更面向客户的公司,这项技能非常重要。顾客主要有两种意思。第一种是外部类型,包括数据科学客户端。第二类是公司利益相关者,根据你的具体工作,你可能会与他们有更多的互动。他们通常由产品经理、业务分析师甚至其他软件工程师组成。你必须向这些人解释你复杂的数据科学模型,让他们明白易懂。

为了在一家公司启动一个数据科学项目,您需要减少数据科学专用术语的数量,以便与您合作的人能够理解您所采用的概念和方法。

下面是一个向产品经理简化行话的例子:

  • —“我们需要使用 XGBoost 机器学*算法,为我们的最终用户将均方根误差降低 12.68%

在这种情况下,产品经理可能不理解 XGBoost 是什么意思(除非你进一步解释它),但这个想法仍然不是向你的利益相关者教授数据科学(大多数人不知道 RMSE,即使解释了,理解起来仍然很棘手——即使对数据科学家来说),而是总结模型对业务的影响。

  • 好的—“我们将使用一种新的算法,这种算法有几个好处,最主要的是它将减少我们的预测误差,这将在下个季度节省 X 笔钱

这个例子要好得多,因为算法的名称对于涉众来说通常并不重要(除非是一个软件工程师在努力部署你的模型)。这个例子也强调了模型对业务的影响。虽然错误指标可能有用,但通常它们最终会被转化为业务已经*惯理解的 KPI ( 关键性能指标)指标。

不要过度承诺

Andrew Petrov 在Unsplash【3】上拍摄的照片。

作为数据科学家,我们可能会为我们的开发准确率达到 96%而感到兴奋,并想在屋顶上大声喊出来。虽然这是一个很好的结果,但我们希望确保该结果能够反映生产中实际可用的数据,以及我们最关心的特定数据组。也许对于我们更关心数据的组,准确率接* 92%,像边缘情况,准确率更重要。

以下是第一次向利益相关者展示结果时需要考虑的一些事情:

  • 测试周期是多长?
  • 我们期望不同的测试周期具有相同或不同的精度/误差吗?
  • 这些数据在生产环境中可用吗?
  • 我们的训练规模在生产中可以一样吗?
  • 我们真的能在生产中如此频繁地预测吗?
  • 这种型号的成本与节省成本相比是多少?
  • 我们能经常训练这种模型吗?
  • 当我们的预测缺少数据时会发生什么?
  • 当异常事件导致特定时间段或组的准确性显著下降时,会发生什么?
  • 测试,测试,测试!确保这些预测是稳定的。

正如你所看到的,当把结果传达给利益相关者时,有相当多的事情需要考虑,以上只是其中的一些考虑。

与软件工程师建立关系

图片由黑客资本Unsplash【4】上拍摄。

这项技能可能更多的是一种建议,但对数据科学家来说仍然非常重要。当然,如果你的背景不是软件工程,这可能是更值得考虑的事情。例如,许多数据科学家不是来自软件工程或编码/编程背景,而是具有金融、地球科学、统计或数学背景。这些领域在某些方面是有益的,但数据科学家往往会在围绕机器学*算法和数据科学模型部署的复杂编码过程中遇到困难。如果这是你,那么明智的做法可能是找一个你觉得合适的人来讨论如何创建更高效的代码,或者找一个可以批准你的拉请求的人,而不是另一个数据科学家。

以下是与软件工程师一起工作的一些好处:

  • 更好的理解面向对象编程( OOP )。
  • 可以更快地部署模型。
  • 可以更快地与业务整合。
  • 如果需要的话,可以让另一个人仔细检查你的代码——第二双眼睛。

记住这一点很重要,是的,数据科学的一些角色涉及所有过程,包括所有涉及的软件工程或编程,因此这项技能或技巧对于以前只专注于在本地构建模型的数据科学家来说更是如此。

主 SQL 优化

卡斯帕·卡米尔·鲁宾在Unsplash【5】上的照片。

通常,就像 Python 等典型语言中的一般编程一样,数据科学家可能会努力优化 SQL 查询。这个技巧是理解在哪里和什么应用到你的查询,以便它可以更快地运行(和正确地),这可以使测试模型更快(例如— 如果你经常更新你的查询)并且使生产中的训练更有效。

以下是 SQL 优化技术的一些示例:

  • 用日期过滤
  • 使用分类数据过滤
  • 删除排序
  • 执行内部联接

当然,还有更多优化查询的方法,但是上面是一些可以显著提高查询运行时间的简单方法。

Git 用 Git

un splash【6】上由 Yancy Min 拍摄的照片。

当我们在学术环境中学*数据科学时,有时 Git 和/或 GitHub 实践会被遗忘。有许多常见的命令需要熟悉,这样您就可以快速更新您的模型代码,还有一些更独特的命令将在下面介绍。下面的链接是一个很好的例子,里面有很多不同类型的 git 命令,比如撤销更改、重写 git 历史、Git 分支和远程存储库等等[7]:

https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet

以下是一些独特的 Git 命令:

* git status* git diff* git branch* git commit* git fetch* git remote add* git reset — hard* git rebase -i <base>

摘要

上面提到的技巧和建议是我从自己身上受益的,希望你也能受益。我们已经讨论了如何与公司中的其他利益相关者合作,以及如何创建更高效的代码。总而言之,这些只是每个数据科学家都应该知道的一些技能,对你来说可能是独一无二的和新的。

作为总结,以下是每个数据科学家都应该知道的五大技能:

* Reducing DS Jargon for Stakeholders* Do Not Overpromise* Build a Relationship with a Software Engineer* Master SQL Optimization** Git* with Git

感谢您的阅读!如果您有任何问题,请联系我,如果您有任何经验,同意或不同意上面看到的技能,请在下面评论。你还能想到哪些每个数据科学家都应该知道的技能或建议?

我不隶属于上述任何一家公司。

参考

[1]Kelly sik kema 在 Unsplash 上拍摄的照片,(2021)

[2]Sammy Williams 在 Unsplash 上拍摄的照片,(2021)

[3]安德鲁·彼得罗夫在 Unsplash 上拍摄的照片,(2021)

[4]图片由黑客之都Unsplash(2018)拍摄

[5]照片由卡斯帕·卡米尔·鲁宾Unsplash(2017)上拍摄

[6]照片由 Yancy MinUnsplash(2019)上拍摄

[7] Atlassian, Git 备忘单,(2021)

可能会让你惊讶的 5 个独特的人工智能用例

原文:https://towardsdatascience.com/5-unique-use-cases-of-ai-that-might-surprise-you-22478aaaabaf?source=collection_archive---------19-----------------------

找出人工智能在现实世界中令人着迷的五个独特应用

图安·加图伊拉特·维尔戈斯在 Unsplash 拍摄的照片

“有人称之为人工智能,但事实是这项技术将增强我们的能力。因此,我认为我们应该增强我们的智能,而不是人工智能。”

吉尼·罗梅蒂

人工智能能够在现代世界取得巨大成就。很难想象我们的日常生活没有人工智能的使用,因为从字面上看,几乎我们现实中的每一个组成部分都以某种方式象征性地使用了人工智能。

当你用手机开始新的一天时,你会自动利用各种人工智能功能。智能锁可以通过人工智能控制的模式或基于人脸识别模式的锁定系统来打开手机,以解锁智能手机设备。

然后,你开始打开其他应用程序,其中大多数应用程序以某种形式利用人工智能,如 YouTube 中的推荐系统,为你提供最合适的内容。如果你在浏览网页,你会经常发现自己在使用 autocomplete 的功能,它也使用了 AI。

当给别人发短信时,如果你犯了一个错误,你的错误通常会被自动更正等人工智能应用程序更正。为了探索数据科学和人工智能的更多日常应用,我强烈推荐通过下面提供的链接查看下面的文章。涵盖了我们日常生活中 AI 的大部分常见用例。

</10-awesome-real-world-applications-of-data-science-and-ai-6fddf3f34d74>

毫不奇怪,人工智能在现代世界中有这些奇妙的日常应用。然而,看看当代人工智能的一些更奇特和独特的用例是耐人寻味的。

在这篇文章中,我们将试图涵盖人工智能的一些令人惊叹的应用,这些应用可能会让你感到惊讶,或者你尚未发现人工智能的这些独特的现有应用。让我们开始讨论现代社会中五种独特的应用吧!

1.探索宇宙中的人工智能

乔什·戈登Unsplash 上拍照

宇宙是一个谜。在广阔无垠的宇宙中,有太多的东西我们一无所知,还有太多的东西有待发现。尽管我们有物理上的发明和发现,探索宇宙的大部分成功充其量也仅限于我们的太阳系或附*的星系。

然而,随着人工智能和各种技术进步的集成,我们可以利用人工智能的力量来揭示宇宙隐藏的真相,否则这将被认为是不可能的。人工智能对探索宇宙的主要贡献可以归功于深度学*和神经网络领域的进步。

为了讨论人工智能在探索宇宙中的一些应用,发现生成敌对网络具有创建宇宙映射的能力,该映射与人类在其理论愿景中所希望的现实期望极其相似。

这些人工神经网络还被用于创建对从用于观察极远距离的望远镜接收到的失真图像的现实解释。这些神经网络也用于火星等行星上的路虎上,通过将图像转换为人类感知的顶级视觉效果,发回高质量的图像。

要了解这个主题以及人工智能如何影响与宇宙相关的主题的定期发现,我强烈建议查看我以前的一篇文章“人工智能是破解宇宙奥秘的关键,原因如下!”从下面提供的链接。

2.人工智能在占星术、命理学和其他类似领域的应用

照片由乔纳森·弗朗西斯卡Unsplash 上拍摄

无论你是占星术、命理学或任何其他类似领域的坚定信徒,还是你并不真正关心这些领域的存在,探索人工智能对这些主题会产生什么影响都是耐人寻味和令人着迷的。

前面提到的主题和话题有一些值得考虑的吸引人的情节点。人工智能在用于这些学科时,可以创造出奇妙的结果。你是否同意它们完全取决于你的信念,但不可否认的是,人工智能在这些概念中找到了高度有益的用途。

有大量的数据可用,有了这些可用的信息,我们可以创建人工智能模型,以遇到关于这些主题的各种任务。它有可能将这些黄道十二宫和星座的主题联系起来,以提供某种科学或事实信息。最终,我们可以在人工智能的帮助下解读这些主题的现实可能性。

我强烈推荐看看下面的 参考 他们分析了他们在热门星座推特账户上发现的数千条推文,使用机器学* Bertmoticon 包来预测每个星座的表情符号。如果你是人工智能对世界的潜在影响的粉丝,这绝对值得一读!

3.教育中的人工智能

照片由 NeONBRANDUnsplash 上拍摄

人工智能和教育有着密切的关系。毕竟,人工智能或数据科学可能是学生选择掌握的科目之一,并获得对这些优秀科目的进一步直觉和理解。人工智能的受欢迎程度在过去十年中显著上升,这一新兴趋势将在未来几年继续下去。然而,我们将重点关注如何利用人工智能来改善教育领域。

我第一次遇到像光学字符识别这样的人工智能技术是在我的学生时代,我们的多项选择类型问题(mcq)的答案脚本将由这些设备进行分析。可以从这些答案脚本中提取数据,并根据答案标记答案。随着现代技术的发展,光学字符识别被用于各种应用中,并且它们更加先进。这些设备的精确度已经大大提高了。

人工智能可以作为一种方法论,以更现实和独特的方式教授学生。使用现代人工智能技术,教育可以达到一个新的动态潜力,让学生享受他们正在学*的东西。这些人工神经网络,像生成对抗网络一样,可以在创建新的图像和视觉效果方面找到它们的用途,用于教授小学生各种独特的主题。

人工智能的另一个惊人用途是来自自然语言处理(NLP)领域。课程材料可以使用转换技术或注意力模型的序列到序列技术从一种语言翻译成其他语言。使用这一程序,课程内容和主题可以被更广泛的受众和学生所接触,他们可以从这种趋势中获得巨大的好处。

4.食品中的人工智能

照片由丹金Unsplash 上拍摄

令人惊讶的是,人工智能甚至被用于食品行业!

人工智能的主要用途是优化和自动化流程的众多可能性。它们还有助于节省大量资金,并减少许多行业中可能发生的任何类型的人为错误。

人工智能和机器学*可以让食品行业的一大领域受益。它们可以促进餐馆、酒吧、咖啡馆以及食品制造业的发展。先进的人工智能技术还可以通过分析和执行各种计算来生成关于最佳方法的数据和信息,从而用于提高水果和蔬菜的生产质量。

用于点餐和选择食物的新 Android 和 iOS 应用程序的开发,使人们更容易更快地点餐和预订食物,只需使用智能手机设备点击几个按钮。人工智能技术的这些进步直接影响了整个食品行业。它有效地改善了食品行业的经营方式。

我强烈建议查看下面的 参考文献 ,以获得关于该主题的更多信息,并了解与以下主题相关的更复杂的细节。这篇文章包含了关于人工智能在食品行业中的使用以及人工智能和机器学*的技术进步如何彻底改变食品制造业的完整详细解释。

5.服装和配饰中的人工智能

照片由克拉克街商业Unsplash 拍摄

人工智能在服装和其他配饰方面的应用潜力巨大。亚马逊是利用人工智能和技术策略改善整体业务的最成功的例子之一。他们已经能够操纵人工智能的使用,通过实现客户满意度,为他们的公司提供最好的可能结果和结果。

像亚马逊这样的公司最重要的特征之一就是由这些公司提供的奇妙的推荐系统。像推荐系统这样的技术基于机器学*的原理工作,其中主要有两种类型的推荐——协作和基于内容的过滤。基于用户的偏好,一些最好的推荐被给予用户。

服装人工智能的另一个惊人特征可以归功于深度学*和神经网络的成功。生成对立网络能够创造服装和品牌的风格方法,这可能会导致一些非常流行的趋势。这些也可以用来纠正自拍的图像,使它们看起来更真实,更有吸引力。

如果你有兴趣了解更多关于如何利用人工智能的力量来改善你的营销策略,请查看下面提供的链接。

💔-ways-to-utilize-the-power-of-artificial-intelligence-for-your-marketing-today-f30b7b76feda>

结论:

照片由达维德·扎维亚Unsplash 上拍摄

“人工智能(我指的不是狭义的 AI)的进步速度快得令人难以置信。除非你直接接触过像 Deepmind 这样的团体,否则你根本不知道它的发展速度有多快——它正以接*指数级的速度增长。发生非常危险的事情的风险是在五年的时间框架内。最多 10 年。”— 埃隆·马斯克在评论 Edge.org时写道

人工智能无疑改变了我们生活的世界的现状,并为我们提供了许多选择来探索自然的不同元素和各种不同的领域及其各自的方面。随着人工智能在我们世界的崛起,它几乎在每个重要领域都有好处。

在本文中,我们讨论了人工智能可以发挥效用的五个独特领域和主题。各种各样的技术进步已经使人工智能成为一种动力。我们能够以前所未有的方式构建人工智能模型,并且我们能够通过这些人工智能构建获得巨大的成果。

人工智能的未来是光明的,在人工智能领域将创造更多的机会。如果你有任何其他你遇到过的人工智能的独特应用,请随时告诉我,我会确保在我的下一篇文章中包括它们。我确信人工智能会有更多精彩的用例,随着不断的发展和进步,会有更多的用例出现。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</10-best-free-websites-to-learn-programming-939ec029009b> </5-reasons-why-you-should-develop-a-game-with-python-and-ai-9f5f276e7637>

谢谢你们坚持到最后。我希望你们喜欢阅读这篇文章。我希望你们都有美好的一天!

Pandas loc 和 iloc 方法的 5 个用例

原文:https://towardsdatascience.com/5-use-cases-of-pandas-loc-and-iloc-methods-a94796b1f734?source=collection_archive---------25-----------------------

让它们更有用。

亚历杭德罗·皮涅罗·阿梅里奥在 Unsplash 上拍摄的照片

Pandas 是一个高度灵活和强大的数据分析和操作库。它提供了许多函数和方法来在数据分析过程的每个步骤中执行有效的操作。

loc 和 iloc 是用于过滤、选择和操作数据的基本方法。它们允许我们访问数据帧中的特定单元格或多个单元格。

在本文中,我们将讨论 loc 和 iloc 的 5 个用例,我认为它们在典型的数据分析过程中非常有用。

我们将使用 Kaggle 上的墨尔本房产数据集作为例子。我们首先使用 read_csv 函数读取 csv 文件。

import numpy as np
import pandas as pddf = pd.read_csv("/content/melb_data.csv")print(df.shape)
(13580, 21)df.columnsIndex(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG','Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car','Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude','Longtitude', 'Regionname', 'Propertycount'],
dtype='object')

该数据集包含墨尔本约 13580 所房屋的 21 个要素。

示例 1

之间的主要区别在于它们访问行和列的方式:

  • loc 使用行和列标签
  • iloc 使用行和列索引

让我们使用这两种方法来选择地址列中的第一行。

df.loc[:5, 'Address'] # df.loc[0:5, 'Address'] works as well
0        85 Turner St 
1     25 Bloomburg St 
2        5 Charles St 
3    40 Federation La 
4         55a Park St 
5      129 Charles St df.iloc[:5, 1]
0        85 Turner St 
1     25 Bloomburg St 
2        5 Charles St 
3    40 Federation La 
4         55a Park St

您可能已经注意到,我们使用相同的表达式来选择行。原因是 Pandas 默认分配整数行标签。因此,除非我们指定行标签,否则行的索引和标签是相同的。唯一的区别是上限包含在 loc 方法中。

列索引也从 0 开始,因此地址列的索引是 1。

示例 2

我们不必指定一个范围来选择多行或多列。我们也可以在列表中传递它们。

df.loc[[5,7,9], ['Address', 'Type']]df.iloc[[5,7,9], [1,2]]

(图片由作者提供)

我们选择了地址和类型列中标签(或索引)为 5、7 和 9 的行。

示例 3

我们可以使用 loc 方法创建一个新列。让我们创建一个列,对于价格超过 100 万英镑的房屋,该列的值为 1。因为每个数据点(即行)代表一所房子,所以我们将条件应用于价格列。

df.loc[df.Price > 1000000, 'IsExpensive'] = 1

对于满足条件的行,“IsExpensive”列为 1,对于其他行为 NaN。

df.loc[:4, ['Price','IsExpensive']]

(图片由作者提供)

实例 4

loc 方法接受多个条件。让我们创建一个名为 category 的新列,对于价格高于 140 万且类型为“h”的行,该列的值为“昂贵的房子”。

df.loc[(df.Price > 1400000) & (df.Type == 'h'), 'Category'] = 'Expensive House'df.loc[:4, ['Price','Category']]

(图片由作者提供)

我们可以稍后处理 NaN 值。例如,Pandas 的 fillna 函数提供了处理缺失值的灵活方式。我们还可以使用 loc 方法根据其他条件来填充缺失的值。

实例 5

我们可以使用 loc 方法根据条件更新现有列中的值。例如,下面的代码将对高于 140 万美元的价格应用 5%的折扣。

df.loc[df.Price > 1400000, 'Price'] = df.Price * 0.95df.loc[:4, ['Price','IsExpensive']]

(图片由作者提供)

我们也可以使用 iloc 方法来完成这项任务,但是我们需要提供 price 列的索引。因为使用列标签比使用索引更方便,所以对于此类任务,loc 方法比 iloc 方法更可取。

结论

由于现实生活中的数据通常是混乱的或者不是最合适的格式,数据科学家或分析师最常见的任务之一就是清理和处理数据。

拥有一种灵活的方法来访问行和列以完成这样的任务是至关重要的。loc 和 iloc 方法正是我们在这些情况下所需要的。

感谢您的阅读。如果您有任何反馈,请告诉我。

用 Python 计算平均值的 5 个有用技巧

原文:https://towardsdatascience.com/5-useful-tips-for-calculating-average-in-python-7e77380fb15e?source=collection_archive---------27-----------------------

DanganhfotoPixabay 上拍摄的照片

它不可能既准确又快速

测量数据集的集中趋势是探索性数据分析最常用的技术之一。在这篇文章中,我不会重复什么是均值,中位数和众数,因为这些是基本的统计知识,很容易通过谷歌搜索找到。相反,我将重点介绍 Python 统计库。

  • 它提供了哪些很酷的功能?
  • 为什么我们仍然需要 Numpy 上的统计库?
  • 基于不同的问题,测量数据集中心的其他方法有哪些?

在本文中,提供的所有代码都假设所有函数都是从统计库导入的,如下所示。

from statistics import *

0.基本用法

照片由 PublicDomainPicturesPixabay 上拍摄

在开始引入任何库之前,我们不能绕过基本用法。为了测量数据集的中心,统计库提供了所有三种方法。

  1. Mean,基本上是数据的平均值。
mean([1, 2, 3, 4])

2.中位数,即排序后数据集的中间数。

median([1, 2, 3, 4])

3.模式,它是数据集中出现频率最高的值。

mode([1, 2, 3, 4, 4])

基础的就不多解释了。然后,让我们关注一下统计库提供了什么样的特性。

1.低/高中位数

cocoparisiennePixabay 上拍摄的照片

基于“中间”数的定义,很明显,它要么是中间的数(如果元素总数是奇数),要么是中间两个数的平均值(如果元素总数是偶数)。

然而,我们有这样的要求并不罕见。也就是说,我们希望使用中间数,但它必须存在于数字列表中。

通常情况下,得到这个数字不会很简单。例如,我们可以先得到中间数,然后尝试在列表中找到比它大或小的数。或者,我们也可以使用列表的总计数,然后得到中间的索引。因此,我们可以根据指数得到低或高的中位数。

有了统计库,我们实际上不必这样做,因为它提供了开箱即用的功能。

median_low([1, 2, 3, 4])
median_high([1, 2, 3, 4])

2.多模式

sasintPixabay 上拍摄的照片

在我的工作中,我接触过这样一个实际的案例。我们有一个字符串列表,我们需要得到列表中出现频率最高的字符串。然而,具有最高频率的字符串不能保证是唯一的。有时,有两个或更多。

那时,当模式不唯一时,将抛出“StatisticsError”。令人高兴的是,在 Python 3.8 中,通过返回第一个模式,这个问题已经得到了解决。

mode(['a', 'b', 'c', 'c', 'd', 'd'])

但是,如果我们想保留所有的模式呢?在上述情况下,我们应该有两种模式,即“c”和“d”。在这种情况下,我们可以使用 Python 3.8 中的multimode()函数。

multimode(['a', 'b', 'c', 'c', 'd', 'd'])

3.快速均值

图片由 herbert2512Pixabay 上拍摄

从 Python 3.8 开始,增加了一个名为fmean()的新函数。这个名字应该解释为“快速的意思”。基本上,它会比正常功能mean()更快。我相信你会有几个问题,让我一一回答,希望你不会再有问题了:)

3.1 为什么快速均值更快?

快速平均会在计算前将所有数字转换成浮点型。因此,使用fmean()总会给我们一个浮点数作为结果,但mean()不会。

mean([1, 2, 3, 4])
fmean([1, 2, 3, 4])

但是,请注意,这并不是而不是的意思

  • 浮点运算速度更快
  • fmean()mean()性能对于所有浮点数都是相同的

不同之处在于fmean()使用简单但快速的浮点数学,而mean()执行复杂得多的程序来实现最大可能的精度,甚至以牺牲性能为代价。

3.2 如果原始均值函数更慢,为什么我们还需要它?

其实就像我的小标题说的,性能和准确性,我们是不可兼得的。这意味着,由于fmean()函数比mean()快得多,它牺牲的精度非常小。

我们可以说fmean()还是很准的,除了处理分数。

from fractions import Fractionmean([Fraction(1, 2), Fraction(1, 3)])
fmean([Fraction(1, 2), Fraction(1, 3)])

该示例显示分数在fmean()中被转换为浮点数。mean()函数不仅要将所有数据转换成精确的值,还要监控“最佳”类并返回相同的值。

基本上,fmean()在正常情况下仍然非常准确,但是如果你的数据是分数,mean 会给你一个数学上完美的结果。

3.3 fast mean 有多快,跟 Numpy 比一下怎么样?

我们可以在这里做一个简单的实验。首先使用 Numpy 生成 100k 随机浮点数。

import numpy as nparr_float = np.random.random(100000)

然后,测试三个不同的函数。

mean(arr_float)
fmean(arr_float)
np.mean(arr_float)

在上面的例子中,我们可以看到fmean()mean()快 20 倍左右,而 Numpy 均值函数比fmean()快 150 倍。如果我们真的关心精确度,我们可能不会选择 Numpy 均值。让我给你看另一个例子。

假设我们有这样一个数字列表。

[1e20, 1, 3, -1e20]

很明显,这 4 个数的和应该是 4,所以平均值应该是 1。让我们看看每个均值函数的行为。

在这种极端情况下,Numpy mean 会因为成对求和算法而失去准确性,该算法显著降低了计算成本,但引入了一些“可接受的”舍入误差。

你的用例是否会“接受”这样的不准确,这是你的决定。

4.几何平均值

照片由 stevepb 在 Pixabay 上拍摄

我们在许多情况下使用“平均”一词。然而,这并不总是意味着我们需要计算“算术”平均值。考虑下面的问题。

第一年增长 10%,第二年下跌 20%,第三年再增长 30%的基金。

该基金在过去三年的平均表现如何?

我们可以说mean([0.1, -0.2, 0.3]) = 0.067 = 6.7%吗?这是不对的。在这种情况下,我们应该使用几何平均数。

geometric_mean([(1+0.1), (1-0.2), (1+0.3)]) - 1

因此,这只基金的平均业绩约为 4.6%。

5.调和平均值

照片由 mibroPixabay 上拍摄

另一种平均值是调和平均值。考虑下面的问题。

我们正在开车。前 10 分钟,我们的速度是 60 公里/小时,然后在接下来的 10 分钟里,我们将速度提高到 80 公里/小时。然后,我们到了。

我们的平均速度是多少?

当然,我们不能说[60,80]的算术平均数是 70 所以平均速度是 70。这是错误的。

在这种情况下,我们应该使用调和平均数。

harmonic_mean([60, 80])

所以 20 分钟内我们的平均速度大概是 68.57km/h。这也告诉我们超速对更快到达目的地没有太大的帮助。所以,还是安全驾驶吧:)

摘要

Pixabay 上的 lamorimfotografia 拍摄的照片

在本文中,我介绍了 Python 内置统计库的几个重要函数。它提供了许多很酷的功能,如低/高中值和多模式,允许我们灵活地测量数据集的中心。此外,快速均值函数为我们提供了一种更快的方法来计算算术平均值,并且在大多数情况下不会损失准确性。此外,它提供了除算术平均值之外的一些现成的平均值函数。

https://medium.com/@qiuyujx/membership

如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)

面向数据科学家的 5 个 Visual Studio 代码扩展

原文:https://towardsdatascience.com/5-visual-studio-code-extensions-for-data-scientists-937487b987c0?source=collection_archive---------10-----------------------

借助这些强大的附加组件,提高 VS 代码的生产率

图片由皮克斯拜金钟培拍摄

Visual Studio Code 是一个免费的、轻量级的、跨平台的代码编辑器。它可能不像 IntelliJ Idea 或 PyCharm 那样是一个成熟的 IDE,但它是一个强大的、不受干扰的工具,拥有专门的粉丝群和蓬勃发展的生态系统。

VS 代码内置了对 JavaScript、TypeScript 和 Node.js 的支持,但是您可以扩展它以支持许多其他语言(Python、C++和 Go)。它提供的功能包括智能感知代码完成、简化的调试体验、林挺、类型检查、代码导航,以及与 Git 和 GitHub 的深度集成。更重要的是,一系列强大的插件可以让 VS 代码成为最终的开发环境。

这个故事从数据科学家的角度看 VS 代码,重点关注 Python 生态系统和工具,它们使机器学*模型的部署成为一种乐趣。

学*率是为那些对 AI 和 MLOps 的世界感到好奇的人准备的时事通讯。你会在每周五收到我关于最新人工智能新闻和文章的更新和想法。在这里订阅!

Python 和数据科学

Visual Studio 代码自带对 JavaScript 生态系统和 web 开发的原生支持,但远不止于此。本节展示了如何将 VS 代码转换成一个功能丰富的 Python 编辑器,以满足数据科学的需求。

  • VS 代码的 Python 扩展:如果你是 Python 开发者,安装 VS 代码后的下一步应该是下载并设置 VS 代码的 Python 扩展。这很简单,导航到左边的Extensions面板,按名称搜索,然后点击 install。VS 代码的 Python 扩展提供了对 Python 语言的丰富支持,只要你安装了 Python 3.6。它支持智能感知代码完成、调试、代码导航、格式化、重构、代码片段等等!
  • Pylance: 您想要启用的第二个附加组件是 Pylance 。Pylance 可以说是 VS 代码的最佳 Python 扩展,它是一个新的、改进的、更快的、功能丰富的 Python 语言服务器。Pylance 是对 Monty Python 的勇敢的兰斯洛特爵士的引用,它依赖于 Python 的核心扩展,并建立在这种体验之上。此外,随着 VS 代码 12 月更新,Pylance 可以执行期待已久的操作,将 Python 开发体验提升到一个新的水平,如自动导入、代码提取和类型检查。在下面的故事中阅读更多关于 Pylance 的内容。
  • Jupyter: 微软针对 VS 代码的 Jupyter 扩展为著名编辑带来了对 Jupyter 笔记本的全面支持。笔记本一直是软件思想增量开发的工具。数据科学家使用笔记本记录他们的工作,探索和试验新算法,快速勾画新方法,并立即观察结果。正如 Donald Knuth 曾经说过的,“把一个程序当作一篇文学作品,写给人类而不是电脑。”因此,数据科学家的武器库中不应该缺少这样的扩展。

部署

有了想法并用代码写下来只是开发周期的第一步。因此,在煞费苦心地测试和评估结果之后,部署是您和公众之间的最后一道障碍。

使用 Docker 封装应用程序并使用 Kubernetes 编排其组件已经成为部署的事实标准。为此,以下扩展促进了这一过程,使数据科学家能够控制整个项目生命周期。

VS 代码的 Docker 扩展:Docker扩展简化了构建 Docker 映像、运行容器、附加容器、流式传输日志以及管理其整个生命周期的整个过程。它还提供了 Node.js、Python 和。容器内的 NET Core。如果你想知道更多,请阅读下面的故事。

云代码: 云代码可以说是 VS 代码的终极 DevOps 扩展。它包含了 Google 命令行容器工具[skaffold](https://skaffold.dev/)[kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)的强大功能,并使在 Kubernetes 上开发成为无缝体验。有了这个工具,你就可以在云中运行你的应用程序,或者在像 minikube 这样的本地 Kubernetes 上运行,就像你在笔记本电脑上运行一样。阅读下面故事中关于云代码和skaffold的模式。

  • 远程开发:最后但并非最不重要的一点,远程开发让你可以随时随地,从几乎任何媒介进行编码;只要安装了 VS 代码,就不需要花里胡哨的机器来做深度学*。只需连接到具有 GPU 加速、大量 RAM 和多核 CPU 的虚拟机。除此之外,远程开发还可以帮助您在不同的、隔离的环境之间切换,与其他团队成员协作,当您在 Windows 机器上时在 Linux 上开发(使用 WSL),或者使用容器来开发您的应用程序,保持您的系统整洁。

Visual Studio 代码是一个免费的、轻量级的、跨平台的代码编辑器。然而,它的真正力量在于它的扩展。在这个故事中,我展示了我在开发机器学*应用程序时几乎每天都会用到的 5 个扩展。

Python 和 Jupyter 扩展帮助我完成工作,而 Kubernetes 生态系统工具让我了解部署过程,因为容器化是新标准。我希望它们对你的日常活动也有帮助。

关于作者

我的名字是迪米特里斯·波罗普洛斯,我是一名为阿里克托工作的机器学*工程师。我曾为欧洲委员会、欧盟统计局、国际货币基金组织、欧洲央行、经合组织和宜家等主要客户设计和实施过人工智能和软件解决方案。

如果你有兴趣阅读更多关于机器学*、深度学*、数据科学和数据操作的帖子,请关注我的 MediumLinkedIn 或 Twitter 上的 @james2pl 。此外,请访问我的网站上的资源页面,这里有很多好书和顶级课程,开始构建您自己的数据科学课程吧!

Python 的 5 个可视化库

原文:https://towardsdatascience.com/5-visualization-libraries-for-python-7705527bcf99?source=collection_archive---------27-----------------------

Matplotlib、Pandas、Seaborn、Plotnine 和 MplFinance 都有它们的长处——让我们感受一下它们

图表示例—按作者分类的图片

可视化是数据通信的关键。无论你是想让你的老板、客户还是同事明白你的意思,一张精心制作的图表通常比一张数字表更能清楚地表达你的观点。

Python 有很多图表库,但我将快速浏览一下我最喜欢的 5 个。

Matplotlib 是 Python 可视化库的始祖,也是我考虑的所有可视化库的基础。但是 Matplotlib 可能有点笨拙,为了简化事情,其他库都是在它的基础上构建的。

每个库都有自己的优势:Matplotlib 灵活而强大,Pandas 绘图简单,Seaborn 适合统计图表,Plotnine 实现 R 的 ggplot 和图形语法,而 MplFinance 专门针对金融数据。

我希望给你一个他们每个人的味道。

但首先我们需要一些数据来绘图。

Gapminder 数据

Gapminder 是一个致力于消除公众对全球趋势误解的组织,它的网站非常值得一去。它在其任务中使用了大量的数据集,我们将在这里使用其中的一些数据。这是一个从 1952 年到 2007 年每个国家的人口、预期寿命和人均 GDP 的表格。该数据由 Github 上的 Jenny Bryan*主持。

我们这样设置数据源的 url:

popDataURL = "https://raw.githubusercontent.com/jennybc/gapminder/master/inst/extdata/gapminder.tsv"

然后把数据下载到熊猫的数据框架中。

import pandas as pd
popData = pd.read_csv(popDataURL,
   delimiter='\t', 
   dtype=({'year':int})) popData['pop']=popData['pop']/1000000

我将人口数除以 100 万,以便在下面的图表中让数字更清晰一些。我将列改为整数,而不是浮点数,以便于比较。数据帧看起来像这样:

数据框架—作者提供的图像

这里的数据太多了,所以我将数据分为西班牙、英国、印度和美国的子集,如下所示:

SpainData = popData[popData['country']=='Spain']
UKData = popData[popData['country']=='United Kingdom']
IndiaData = popData[popData['country']=='India']
USData = popData[popData['country']=='United States']

我们将在下面的例子中使用这些子集。

Matplotlib

如果你不能在 Mathplotlib 中做你想做的事情,那么你也不能在其他任何库中做。Matplotlib 是我将讨论的其他每个库的基础,因此下面的所有示例都可以用 Matplotlib 进行编码——然而,其他库使生活变得更加方便。

因此,在继续之前,让我们从一个非常简单的 Matplotlib 示例开始。

我在这个例子中使用了UKData数据框架,并绘制了过去几十年的人口增长图。代码很简单:首先我们导入库(当然),接下来我们用 xy 数据指定绘图,这些数据是 dataframe 中的‘year’和‘pop’列(使用默认参数我们得到一个线图),然后我们为 x 和 y 轴设置标签,最后,我们调用方法plt.show()显示下图。

import matplotlib.pyplot as plt
plt.plot(UKData['year'],UKData['pop'])
plt.ylabel('Population in millions')
plt.xlabel('Year')
plt.show()

Matplotlib 图表示例—作者图片

在本例中,Matplotlib 期望以类似数组的参数给出数据——在本例中,我们以 Pandas 列(实际上是 Pandas 系列)的形式提供了 yearpop 数据。我们也可以传递普通的 Python 列表或 Numpy 数组。

这是另一个例子:散点图。

data = popData[popData['year']==2007]plt.scatter('country', 'gdpPercap', s='pop', data=data)
plt.xticks([])
plt.xlabel('Countries')
plt.ylabel('GDP Per Cap')
plt.show()

Matplotlib 散点图示例—作者图片

在这种情况下,数据只需要一个参数——2007 年的数据——我们指定 Pandas dataframe 列为 xy 值。s参数是散点图中圆点的大小,它使用 pop 列的值,所以人口越多,圆点越大。我还取消了 x 轴上的记号,因为有太多的国家名称,它们将无法阅读。

Matplotlib 有很多内容,但这是我们将把重点放在其他库上的地方。

熊猫情节

Pandas 绘图功能提供了一组简单的基本绘图功能。使用 Pandas plot,您可以创建折线图、条形图和散点图、箱线图和直方图,当然,它完全集成了 Pandas dataframes。

为了从一个数据帧创建一个图,我们调用该数据帧的plot()方法,并从数据帧中以列的形式提供 xy 数据。

这是美国人均 GDP 的线图,只有一行代码。

USData.plot.bar(x='year',y='gdpPercap')

注意,我们在前面创建数据帧时导入了 Pandas 库。

熊猫图表示例—作者图片

你可以在以前的文章中读到更多关于熊猫密谋的内容:

海生的

当谈到统计图表时,Seaborn 接管了熊猫停止的地方。下面是西班牙人口随时间变化的曲线图。这不是我们在前面的例子中看到的简单的线形图,这是 Seaborn regplot 的散点图,其中包含一条回归曲线。

下面的代码用线性回归绘制了数据,但是,正如您可能看到的,数据并不真正符合直线模型。

import seaborn as sns
sns.regplot(x="year", y="pop", data=SpainData)

Seaborn regplot 示例-作者提供的图像

我特意选择西班牙在这里绘图,因为我碰巧知道那里的人口增长不是线性增长,而是在过去几年中逐渐放缓。因此,线性回归并不真正符合数据。通过改变回归的顺序,我们可以更好地了解数据的变化方式。它默认为 1 ,一个线性回归,但是这里我们将把它改为 2 ,这给了我们一个二次曲线。我还关闭了置信区间ci=None

sns.regplot(x="year", y="pop", data=SpainData, order=2, ci=None)

Seaborn 二阶正则图示例—作者提供的图像

二次曲线并不完全符合数据,但它给出了放缓趋势的更好印象。Seaborn 不允许您出于预测目的提取模型; regplot 仅用于说明目的。Seaborn 自己建议,如果你想这样做,你应该使用 Python 的 Statsmodels 库。

Seaborn 包括几种统计图表类型,但对于简单的线形和条形图表,Pandas plot 可能更适合。

普洛特宁

Plotnine 是 Python 中 ggplot2 (众所周知的 R 图形包)的实现。它采用分层的方法来定义一个图。在下面的示例中,第一行代码指定了数据源,第二行代码指定了图形(折线图)的类型以及线条的大小和颜色。剩下的几行添加一个内置主题,修改该主题以改变图形的大小,最后为图形设置一个标题。

from plotnine import *(ggplot(IndiaData,aes('year','pop'))
 + geom_line(color='Blue',size=2)
 + theme_light()
 + theme(figure_size=(6,3))
 + ggtitle('India Population Growth')
)

示例 Plotnine 图表—按作者分类的图像

这种构建图表的方式非常令人满意,并且在所有图表类型中都是一致的。这是另一个例子,演示了如何将多个方面构建到一个图形中。

(ggplot(popData, aes('year','pop', fill='continent'))
 + geom_col(show_legend=False)
 + facet_wrap('continent', scales='free')
 + theme_light()
 + theme(panel_spacing=0.5, figure_size=(10,5))
)

示例多面图九个图表—作者提供的图像

最后是一个类似于 Matplotlib 中早期示例的图形,但是增加了颜色(代表国家所在的大陆)。这给了我们一个相当混乱的数字,所以我选择了 void 主题,它基本上移除了所有的标签、记号等等。然后添加了垂直标签和基线。

(ggplot(popData[popData['year']>=2007], aes('country','gdpPercap',size='pop',color='continent'))
 + geom_point()
 + theme_void()
 + theme(axis_line_x=element_line(), axis_title_y=element_text(rotation=90))
 + ggtitle('Countries')
)

Plotnine 散点图示例—作者图片

结果并不完美,但围绕主题进行一些调整可能会得到更好的结果。

Plotnine 允许您绘制任意数量的图表类型,这些图表类型是由标准组件构建的,如果您来自 R 背景,这可能是一个不错的选择。

我在这里写了更多关于 Plotnine 的内容:

MplFinance

Mplfinance 专门针对金融数据,并希望这些数据是标准格式的。它允许的图表数量相对有限,但也是针对有限的领域。

在这里,我举例说明了最全面的图表。它是一组显示一段时间内股票价格变动的盒须图和显示同一时期交易量的条形图的组合。

我们不能在这个库中使用我们的 Gapminder 数据,所以我包含了 yfinance 库,它从雅虎财经抓取数据,并为 Alphabet(谷歌的母公司)提取一天的数据。每 30 分钟给出一次价格。

import yfinance as yp
import mplfinance as mpf

googl = yp.Ticker('GOOGL')
df = googl.history(period="1d", interval="30m")

mpf.plot(df,type='candle',mav=3,volume=True)

Mplfinance 图表示例—作者图片

Mplfinance 显然是一个专业产品,不适合一般用途。但是如果你感兴趣的是财务数据,这是一个很好的易用的软件包。

结论

选择图表库的一些原因将是个人的:如果你喜欢 ggplot2 使用的图形语法方法,那么 Plotnine 将是你的一个好选择。对于简单明了的图形,熊猫内置的绘图是一个很好的选择,而且编程简单。另一方面,Seaborn 不太适合简单的图表,但是它为统计图表提供了很多选择。Mplfinance 擅长它所做的,但不适合一般的图形。

最后,由于我看到的所有库都是基于 Matplotlib 的,所以您可以使用 Matplotlib 来生成其他库支持的任何图表。不过,要做到这一点,你需要理解 Matplotlib 的复杂性,并且需要做更多的编程工作。

最后,你可能会问自己,为什么我忽略了 Plotly、Bokeh 或 Altair。主要原因是它们是不同的库系列,更适合于基于 web 的应用程序,而我所看到的那些库更适合于生成静态文档。

感谢您的阅读,我希望这激起了您的兴趣,您会想要探索这些图书馆提供的机会。

如果你想知道我什么时候发表其他文章,请考虑在这里订阅我的免费和不定期简讯。

密码

你可以在我的 Github 页面上找到一个 Jupyter 笔记本,上面有所有上述代码以及我的其他文章中的代码。

*致谢

我们使用来自 Jennifer Bryan 维护的 Github 库的数据,该库可以在 https://github.com/jennybc/gapminder 找到。

原始 Gapminder 数据也可以在http://www.gapminder.org/data/找到

Gapminder 的数据是在知识共享署名 3.0 无版权许可下发布的。

人工智能改变时尚产业可持续发展的 5 种方式

原文:https://towardsdatascience.com/5-ways-ai-is-transforming-the-fashion-industry-for-sustainability-bfd3bb1fc00a?source=collection_archive---------11-----------------------

来源: Unsplash

“时尚是一门关于外表的科学,它激发一个人渴望看起来更好,而不是更真实。”——亨利·菲尔丁。

G 从 2020 年到 2021 年以 5.8%的速度增长,(IBISWorld,2021)在新冠肺炎期间,全球服装制造业的扩张并没有停止,这要归功于我们让自己跟上最新时尚潮流的愿望。虽然麦肯锡报告称,2021 年时尚行业的收入下降了 20%(麦肯锡&公司,2021),但这主要是由于中小型企业的关闭,这些企业因财务困境而被迫退出市场,导致市场更大的不平等。虽然市场正在经历混乱,但时尚产业本身也加剧了全球灾难的风险。

时尚产业从多个方面对我们的星球产生了巨大的影响。从纤维生产,到设计、生产、交付、使用和用后处理,其价值链的每个阶段都加剧了可持续性危机。

根据联合国环境规划署的数据,全球 20%的废水来自纺织品染色。(环境署,2021 年)全球 10%的碳排放来自服装业,此外,24 %的杀虫剂和 11 %的杀虫剂来自棉花种植。(艾伦·麦克阿瑟基金会,2017 年)。虽然它的生产对环境是毁灭性的,但我们不可持续的消费*惯和我们处理服装的方式使它变得更糟。从 2000 年到 2015 年,服装销售额翻了一番,从每年 1000 亿件增加到 2000 亿件,而一件衣服的平均穿着次数总体下降了 36%。(艾伦·麦克阿瑟基金会,2017 年)。服装行业生命周期的线性使得“购买—穿着—处理”成为标准做法。

这不是我们第一次意识到时装业需要朝着可持续发展迈出大步。早在 2018 年,麦肯锡就已经将“可持续发展可信度”确定为 2018 年的 10 大时尚议程之一,当然,走向未来,“循环纺织品”也包括在 2022 年的议程中。这是一个长期未解决的问题,但进展缓慢。2020 年《Vogue》时尚奖得主穆罕默德·本切拉尔(Mohamed Benchellal)说 “这不仅仅是关于服装的可持续性;这个行业的整个商业模式是不可持续的。在 t 台上,在我们的衣柜里,在无休止的堆积中,需要发生革命,而不是渐进的步骤。

但是改变商业模式并不容易,我们能够利用数字技术加快转型的步伐吗?这里有几个潜力。

1.营销活动和时装秀走向虚拟化

莫斯奇诺的虚拟时装秀

在麦肯锡的 2019 年服装 CPO 调查中,83%的受访者认为到 2025 年 实物样品的使用频率将低于虚拟样品。 事实上,由于新冠肺炎,转变发生得比我们预期的要快。对于大型奢侈品牌来说,许多时装秀已经以创造性的方式虚拟化了。 莫斯奇诺 创造了一场“玩偶时装秀”,可爱的玩偶大小的服装由提线木偶玩偶在 t 台上展示,节省了举办真人 t 台所需的材料和资源。虽然这没有使用人工智能,但它表明即使是那些在客户体验中建立大部分品牌价值的奢侈品牌,也愿意转移到虚拟世界,用更少的资源做更多的事情。

来自爆发托马什·胡斯托莱斯的照片

有了人工智能,我们能够制作 3D 数字时装模型。(在我看来,他们看起来甚至比人体模型更具视觉吸引力。)制作者https://www.thefabricant.com/sustainability就是这样一家——它是“世界上第一家数字时装屋”,据报道在设计和开发阶段用数字样品取代实体服装,极大地减少了该品牌高达 30%的碳足迹。与知名品牌如彪马、阿迪达斯、 Aape 合作,可以减少广告服装生产过程中产生的二氧化碳污染、水资源浪费和有毒化学物质污染,这些在传统做法中会被浪费掉,因为它们不能转售给消费者。

2.虚拟试衣间和更好的定制减少退货并增强顾客体验

照片由马太·亨利发自突发

一个更隐性的污染源是价值链中的交付环节,例如,在中国,运输效率极高且成本低廉,如果你不确定产品是否合适,退货比一开始就不买是更好的选择。不必要的污染结果。

从以前的潜力延伸,随着 3D 虚拟模型技术的出现,每个人的虚拟试衣间很快就会出现。人工智能可以帮助我们精确地测量我们的尺寸,并相应地调整数字模型。MySize开发了这样的技术,只需一个智能手机摄像头就可以实现这些,帮助顾客在网上购物时购买正确尺寸的服装。

此外,推荐系统和基于人工智能的个性化风格正在提升客户的在线购物体验。 Stitch Fix 使用初始风格测验,结合来自客户个人特征、服装特征、修复后反馈、与服务和商品数据的历史交互的数据点,为客户创建风格档案,以开发预测算法。这简化了传统上令人沮丧的在线搜索适合你风格的衣服的体验,减少了不满意和退回不合适衣服的机会。

3.推动二手市场

为了接受循环经济的原则并延长产品的生命周期,更多的新新人类正在拥抱二手服装市场,预计该市场将从 2018 年的 240 亿美元快速增长到 2023 年的 510 亿美元。人工智能有潜力从各种不同的角度改善二手服装市场的客户体验,包括更可靠的定价,更个性化的用户体验,更好的造型服务,当然,正如我们之前介绍的,更精确的尺寸。由RISE发起的一个项目允许 AI 研究服装广告,以开发自己的定价模型,从二手产品的大量广告中学*,它识别与特定价格水平相关的特征,帮助它建立可靠的价格预测模型。可信的定价反过来让更多的顾客放心地参与二手服装市场。**

让我们来探索一下 thredUP 是如何撼动这个行业的:Vue.ai 提供的人工智能服务被用来使用图像识别来处理图像,根据图案、颜色、时尚前沿来提供准确的定价和标记,这使得他们的处理中心更加高效,每天可以处理 10 万个独特的项目。为了进一步减少浪费和退货,thredUp 提供盒子服务,发送 10 件由设计师亲手挑选的物品。设计师使用人工智能来帮助他们根据消费者以往的历史和时尚趋势,以高速度和准确性完成订单。

4.出租时尚遇上 AI

提高服装利用率被循环纤维倡议确定为更可持续纺织经济的目标之一。我们都知道我们花了 100 英镑为我们最好的朋友的婚礼买了一件最华丽的晚礼服,而我们下一次穿它是在 10 年后。为特殊场合买衣服对我们的钱包和地球来说都是一种痛苦。时尚租赁是一个解决方案,可以帮你节省购买几乎是一次性使用的昂贵服装的费用,还可以节省数百万件未充分利用的服装。2021 年末, 租跑道——一家租时尚电商平台上市,标志着租时尚市场的一个重要里程碑。该平台采用会员制订阅模式,允许客户以固定的月租价格租赁服装。其工程总监迈克·利伯兰特阐述了人工智能是如何集成到其仓库中的。为了扩大该系统的规模,并更快地释放库存,以便客户可以租赁它们,机械臂需要在分类时自动识别退回衣服的材料和相应的清洁方法。实现了最短的入站处理时间,从而最大限度地发挥了衣物的再利用潜力及其对环境的益处。

5.人工智能销售预测防止囤积

最后一个潜力可能是业内最广为人知和最广泛采用的实践。随着时尚潮流每天都在变化,快速时尚产业制造了巨大的浪费。人工智能在这方面最明显的一个用例是使用高级数据分析和机器学*销售预测来更好地预测销售、服装趋势、客户行为,并减少每季未售出的服装数量。为了节约成本和保护环境,人们在这一领域进行了大量的研究,以使其完美无瑕。****

M 我所强调的任何潜力都是相辅相成的,例如 MySize 正在为二手服装开发其功能的专门版本。找到技术、时尚和环境之间的共同点应该能够改变世界第二大污染者,并确保外观和可持续性可以同时实现。

关于我

我是世界可持续发展规划师学会的会员,目前在联合国教科文组织香港协会及其秘书处-香港可持续发展教育学会工作。在伦敦大学学院攻读统计学学位期间,我对可持续发展和技术有着强烈的热情。因此,我致力于撰写和发表与可持续发展目标、人工智能和区块链等创新技术以及经济学相关的文章。我渴望将数字技术和可持续发展结合在一起,激励更多的人为所有人创造更美好的未来。

我的作品

联系人:

电子邮件:americanachen@unesco.hk

领英:美国陈

insta gram:@ africccana

美国陈

参考资料:

  1. Ellen MacArthur Foundation,《新纺织品经济:重新设计时尚的未来》(2017 年,http://www.ellenmacarthurfoundation.org/publications)。
  2. 麦肯锡公司,《时尚新必备:规模化可持续采购》,麦肯锡服装、时尚和奢侈品集团,2019 年 10 月
  3. 多罗彻,亚尼。"议会邮报:人工智能和大规模定制如何改变时尚产业."福布斯,《福布斯》杂志,2021 年 11 月 10 日,https://www . Forbes . com/sites/forbesagencycouncil/2021/11/10/how-ai-and-mass-customization-can-change-the-fashion-industry/?sh=502b640e50b9。
  4. 多罗彻,亚尼。"议会邮报:人工智能和大规模定制如何改变时尚产业."福布斯,《福布斯》杂志,2021 年 11 月 10 日,https://www . Forbes . com/sites/forbesagencycouncil/2021/11/10/how-ai-and-mass-customization-can-change-the-fashion-industry/?sh=502b640e50b9。
  5. “时尚与可持续发展目标:联合国的角色是什么?."联合国欧洲经济委员会,2018 年 3 月 1 日。
  6. “快时尚仍然是我们环境的一大威胁——以下是需要改变的地方。”时尚阿拉伯,2021 年 6 月 27 日,https://en.vogue.me/fashion/fast-fashion-2021-statistics/.
  7. "行业市场研究、报告和统计." IBISWorldhttps://www . ibis world . com/global/market-size/global-apparel-manufacturing/。
  8. 桑德拉·庞塞德·莱昂。" ThredUP 是如何用人工智能推动循环时尚运动的."福布斯《福布斯》杂志 2019 年 8 月 28 日https://www . Forbes . com/sites/cognitive world/2019/08/27/how-thredup-circular-fashion-ai/?sh=1e0eb62879a0。
  9. “麦肯锡服装 CPO 调查 2019,时尚的新必备:大规模可持续采购。”麦肯锡&公司,2019 年 10 月。
  10. MongoDB。"《出租跑道》采用代码优先、动态数据模型的方法来扩展仓库操作." VentureBeat ,VentureBeat,2021 年 7 月 13 日,https://VentureBeat . com/2021/07/13/rent-the-runway-enchances-code-first-dynamic-data-model-approach-to-scale-warehouse-operations/。
  11. "给快速时尚踩刹车。"环境署https://www . UNEP . org/news-and-stories/story/put-brakes-fast-fashion。
  12. "转售时装市场是下一个大事件." Vue.ai 博客,2021 年 5 月 3 日,https://vue . ai/Blog/leaders-in-retail/转售-fashion-market/。

快速数据分析报告的 5 种方法

原文:https://towardsdatascience.com/5-ways-for-a-quick-data-analysis-report-3362d1fc6e4?source=collection_archive---------26-----------------------

没有代码,没有烦恼

克里斯里德在 Unsplash 上的照片

在当今世界,人们都在投资学*编码,但也不是每个人都对编码感兴趣。我们不都想知道这是不是一种无需编码就能开发即时探索性数据分析报告的方法吗?我已经策划了 5 种不用编码就能得到你的分析报告的方法。

Excel 数据透视表:

照片由米卡·鲍梅斯特Unsplash 上拍摄

Excel 是最广为人知的数据分析工具。每个人在职业生涯的某个阶段肯定都接触过 excel。在每个公司,人们都使用 excel 立即进行数据处理和验证。但是我们也可以用 Excel 做一些事情。即汇总更广泛的类似表格格式的数据的数据透视表(即带有数据透视表图表的数据分析报告)。

开发一个数据透视表,提供对数据的即时理解:

获取您的 id,获取数据透视表以有意义的方式组合在一起的总和、平均值、计数和其他统计数据。

数据报告可以通过提供过滤器、切片器和直观的数据透视表图表与用户进行交互,数据透视表图表可以根据数据透视表自动改变图表。

一些关于如何构建 excel 数据透视表的帖子/教程:

https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.tutorialspoint.com/excel_data_analysis/excel_data_analysis_pivottables.htm&ved=2ahUKEwi54tmI34LwAhVxmuYKHZYTB5AQFjACegQIAxAF&usg=AOvVaw2Om-ZveUKj-eqWLzq2ERlC https://www.excel-easy.com/data-analysis/pivot-tables.html

使用 Tableau 的仪表板:

粘土堤Unsplash 上拍照

Tableau 是另一个广为人知的工具,可以帮助任何人查看和理解他们的数据。这个工具可以连接你选择的任何数据库。我们可以通过拖放功能开发数据仪表板或故事板,而无需编码。

Anyboday 可以通过求和、计数、平均值、百分比差异和更多计算来创建数据汇总,以从数据中获取价值。

我们还可以实时混合数据集(不同的关系、半结构化和原始数据源),而无需任何高级编程专业知识。

开发者只需点击一下鼠标,就可以向用户共享和更新仪表板。

一些关于如何开发 Tableau 仪表板的帖子/教程:

https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.tableau.com/solutions/analytics&ved=2ahUKEwjM1Krg3oLwAhXZ7XMBHbiQDpQQFjAXegQIHxAC&usg=AOvVaw2R0vWzi97ZygBiA9IxsqWJ https://www.analyticsvidhya.com/learning-paths-data-science-business-analytics-business-intelligence-big-data/tableau-learning-path/

使用 Python 进行熊猫剖析:

卢克·切瑟在 Unsplash 上拍摄的照片

Pandas profiling 是一种创建探索性数据分析报告的即时方法。你只需要安装软件包,并确保它启动和运行。

例如:

pip install pandas-profiling

之后。您必须导入您需要开发报告的数据。开发报告只需要一个函数。即df.profile_report()用于快速数据分析。

数据框架中每一列的统计数据都显示在一个交互式 HTML 报告中。

一些关于如何建立熊猫概况报告的帖子/教程:

https://www.google.com/url?sa=t&source=web&rct=j&url=https://towardsdatascience.com/exploratory-data-analysis-with-pandas-profiling-de3aae2ddff3&ved=2ahUKEwjww8Ck3ILwAhUJ7HMBHZbuC90QjjgwBHoECBkQAg&usg=AOvVaw3OvX_S8_vPFQPt9D3PHkiI

使用 R 的数据浏览器:

样本数据分析报告的屏幕截图

r 作为统计计算和图形的编程语言广为人知。在过去的 5 年里,我个人使用 R 完成了一些数据分析任务和机器学*模型。但是有 一包 可以即时开发数据分析报告。即“数据浏览器”。这是一个为自动化数据探索和处理而创建的包。

安装并下载软件包。

用于创建数据归档报告的函数是 *create_report()* ,根据所用数据和格式的要求,需要填写几个参数。

该软件包还提供了一些数据处理功能,如 set_missing、group category,以及 plot_missing()、plot_intro、plot_bar 等图形功能。

在 R 中构建数据分析报告的一些帖子/教程:

KNIME 分析平台:

Knime 是一个分析平台,用于在开源环境中生产数据科学。人们已经通过集成 ML 和数据挖掘的各种组件,将该工具用于非常自动化的技术。该工具允许开发人员使用混合不同数据源的节点,包括数据分析的预处理、建模和可视化,使用或不使用任何高级编程。

用户可以使用节点资源管理器或节点存储库来搜索快速拖放。经常使用的节点:

输入文件阅读器:Excel 阅读器、CSV 阅读器、文件阅读器等。

输出文件阅读器:Excel Writer、CSV Writer 等。

预处理节点:缺失值、字符串到数字、字符串到日期时间等。

可视化节点:散点图、饼图、折线图等。

在 Knime 中构建工作流的一些帖子/教程:

https://www.knime.com/learning

我对这些工具都有亲身体验,这有助于我理解其中的含义并轻松操作数据。上述工具并不仅限于此。我们可以开发详细的分析报告,预测模型,包括编程技能的 ML 模型。

如果你喜欢这个帖子,请随时提供反馈和分享。您可以通过以下媒体链接关注我:

您可以通过以下网站关注我:

领英:www.linkedin.com/in/neema-madayi-veetil

推特:https://twitter.com/NeemaMV

子栈(我写的是书评和我从优秀书籍中学到的教训):https://neemamv10.substack.com/

预测分析在您的企业中的 5+1 应用方式

原文:https://towardsdatascience.com/5-ways-predictive-analytics-can-be-applied-in-your-business-4a36b330b531?source=collection_archive---------40-----------------------

卢克·切瑟在 Unsplash 上的照片

预测分析如何应用于贵公司多个领域的实例

预测分析是一种先进的分析技术,使用数据、算法和机器学*来预测趋势和进行业务预测。

由于计算的进步,已经可以分析大量的数据(大数据)来发现模式,并从其历史中评估未来的可能性。

这个概念起源于 20 世纪 40 年代,当时政府开始使用第一批计算机——那些占据整个房间并用于战争目的的计算机。

但是,在强大的处理器和新技术的推动下,预测分析如今变得更加重要。

这里有一些非常有趣的例子:

客户流失预测

做一个客户流失预测意味着识别你的客户的取消请求之前的信号,计算每种情况下的概率。

使用预测模型,您可以交叉检查客户服务质量、客户满意度和流失率等数据,以确定哪些因素会影响取消。

目标是了解客户流失的主要原因,并逆转这一过程。

活动优化

你整个营销活动的历史可以用来预测未来更好的结果。

只需使用预测分析来确定每个内容的最佳渠道、每个目标受众最成功的语言以及预测消费者接受程度的其他变量。

因此,在吸引和赢得观众时,你要直接瞄准目标。

线索分割

预测分析也非常适合创建线索细分策略。

毕竟,营销的最大挑战之一是绘制这些潜在客户的轮廓,以提供量身定制的内容和创建可靠的营养活动。

借助数据和机器学*,你可以基于复杂的分析生成细分群体,预测哪些潜在客户希望获得最小的细节。

客户关系管理

在 CRM 策略中,您可以使用预测模型来了解客户在生命周期和购买过程中的每时每刻。

在这种情况下,不缺乏数据来创建多变量模型,并分析行为、档案、购买历史、互动和客户感知之间最多样的可能关系。

有了这些强大的洞察力,您可以通过个性化的内容、促销和优惠彻底改变您的客户关系。

欺诈检测

分析方法还允许公司检测欺诈模式并防止安全漏洞。

随着网络安全讨论的增加,越来越多的组织开始关注如何及时纠正漏洞和识别任何异常,以防止损害。

预测模型使实时识别威胁和预测诈骗变得更加容易。

风险管理

风险管理是另一个直接受益于预测分析的领域。

对未来的风险和机遇有一个完整的认识会更容易做决定,对吗?

因此,预测盈利或亏损的概率是高级数据分析的最大优势,无论是分析客户的信用风险还是投资的可能后果。

结论

预测分析是一种帮助您看到企业未来的好方法,可以帮助您规划做出更好决策和超越竞争对手的可能性。

请记住,人类的智慧在这个过程中是不可或缺的,因为你需要为预测模型提供高质量的数据以获得良好的结果。

还有一件事…

如果你想在学*之旅中走得更远,我为你准备了一份令人惊叹的清单,其中包含 60 多门关于人工智能、机器学*、深度学*和数据科学的培训课程,你现在就可以免费参加:

如果你想继续发现新的资源并了解人工智能,在我的电子书(下方的链接)中,我正在分享关于人工智能、机器学*、深度学*、数据科学、商业智能、分析和其他方面的最佳文章、网站和免费在线培训课程,以帮助你开始学*和发展职业生涯。

学* AI 在线:200 多种资源在线开始学* AI

此外,我刚刚在亚马逊上发布了其他有趣的电子书,我相信其中一些可能会让你感兴趣……让我们保持联系,关注我,让我们一起做吧。

订阅我的每周时事通讯,保持更新

如果你对人工智能、机器学*、数据科学和自动驾驶汽车的话题感兴趣,以及这些创新将如何扰乱世界各地的每一个企业,这份时事通讯肯定会让你保持更新。

点击下面的链接订阅人工智能新闻!

【https://medium.com/tech-cult-heartbeat/newsletters/ai-news】

定制您的 Streamlit UI 的 5 种方法

原文:https://towardsdatascience.com/5-ways-to-customise-your-streamlit-ui-e914e458a17c?source=collection_archive---------13-----------------------

如果可以自定义,为什么要使用默认设置?

Streamlit 应用示例(图片由作者提供)

你想做一个 web app,但是又不想学任何一个 web app 框架?要不要部署一个 app,却发现 Heroku 太复杂?那么 细流 就是给你的!

甚至像我这样连 HTML 和 JavaScript 的区别都分不清的数据科学家,也可以使用 Streamlit 快速创建一个应用程序。

当然,简单也有缺点,例如,如何定制用户界面的某些方面并不明显。因此,如果您是 Streamlit 的新手,您可能不知道以下定制 UI 的简单方法…

简化菜单(作者图片)

1。隐藏菜单按钮

默认情况下,在你的应用程序的右上角有一个汉堡按钮,点击它会打开 Streamlit 菜单。

虽然这个菜单确实包含了各种顶级的东西,但是当你向用户部署你的应用时,你可能想要隐藏它。

幸运的是,您可以通过添加以下代码片段来做到这一点(感谢 Mani 提供的这个):

菜单,走开!

2.精简布局

这些天来,我们花了太多的时间在滚动上。因此,所有应用程序开发人员都有责任尝试在一个屏幕上显示尽可能多的内容,从而减少用户需要滚动的次数。

你可以采取的一个小步骤是使用下面的代码片段删除应用程序组件之间的填充(感谢 Marc 的):

如果没有叫做“零填充”的波段,那么应该有

3.自定义调色板

蓝色美学(作者图片)

事实证明,如果你深入了解 Streamlit,你很快就会发现做各种事情是多么容易

例如,我是蓝色美学的粉丝,并热衷于在我的应用程序中使用这个方向。

我所要做的就是创建一个。精简我的存储库中的文件夹,并添加这个 config.toml 文件(它只设置了许多可用配置选项中的一部分):

令人惊讶的是,像蓝色美学这样的艺术美可以用简单的计算机代码来表示

4。设置页面标题和图标

这是一个标签(图片由作者提供)

去年增加了set _ page _ config(感谢 akrolsmir )。这允许您调整浏览器选项卡中显示的标题和图标:

ST . set _ page _ config(page _ title = ' trekviz ',page_icon="🖖")

Streamlit 现在完全支持表情符号。

5。多列

多列只是 Streamlit 在 2020 年末添加的众多布局选项之一。现在,拥有三列就像 1、2、3 一样简单:

st1,st2,st3 = STβ_ columns(3)

我听说你甚至可以做一个网格布局,但这超出了我的理解。

结论

乍一看,Streamlit 似乎缺乏太多的可定制性。但是在表面之下是一个充满可能性的世界,本文只列出了其中的一部分。

该团队一直在开发新功能,并且有许多优秀的 Streamlit 应用程序可以从中汲取灵感。所以下次你需要开发一个应用的时候,为什么不考虑 Streamlit 呢?

下面是我总结《星际迷航》角色互动的一个例子:

在机器学*中开发情感分析器的 5 种方法

原文:https://towardsdatascience.com/5-ways-to-develop-a-sentiment-analyser-in-machine-learning-e8352872118?source=collection_archive---------5-----------------------

探索不同的方法来开发一个模型来预测给定文本的情感

图片由 LTD EHU 发自 Pixabay

S 情感分析是一种自然语言处理技术,用于确定给定文本的情感或观点。情感分析模型可以通过从自然语言中提取含义并将其分配给数字分数来预测给定的文本数据是正面的、负面的还是中性的。

开发或训练情感分析模型有多种方法,在本文中,我们将讨论 5 种不同的方法:

  • 定制训练监督模型
  • 文本块
  • 基于单词词典的模型
  • 伯特
  • 基于命名实体的情感分析器

各种组织使用情绪分析来了解其客户的情绪,使用评论、社交媒体对话,并相应地做出更快、更准确的商业决策。

定制训练的监督模型:

你可以训练一个定制的机器学*或者深度学*的情感分析模型。标记数据集是训练鲁棒 ML 模型的关键要求。ML 模型将学*数据集中的各种模式,并可以预测给定的看不见的文本的情感。

要训练自定义情感分析模型,必须遵循以下步骤:

  • 收集用于情感分析的原始标注数据集。
  • 文本预处理
  • 文本的数字编码
  • 选择合适的 ML 算法
  • 超学*和训练 ML 模型
  • 预言;预测;预告

(图片由作者提供),自定义情感分析模型管道

阅读下面的文章,了解如何使用朴素贝叶斯分类算法开发一个电影评论情感分析模型。

https://satyam-kumar.medium.com/imdb-movie-review-polarity-using-naive-bayes-classifier-9f92c13efa2d

文本 Blob:

TextBlob 是一个开源的 Python 库,用于处理文本数据,并允许您在其简单的 API 下指定想要使用的算法。TextBlobs 的 API 可以用来执行词性标注、名词短语提取、分类、翻译、情感分析等任务。

对于情感分析,TextBlob 库提供了两种实现:

  • 模式分析器:(默认)基于模式库。
  • NaiveBayesAnalyzer :在电影评论语料库上训练的 NLTK 分类器。

安装:

**pip install -U textblob**

实施:

(作者代码)

基于单词词典的模型:

它包括从文本语料库中创建一个包含正面和负面单词的 n-gram 字典。该方法需要一个带标签的文本语料库,并使用定制的 python 函数分别为正负文本创建一个 n 元词字典。

自定义单词也可以根据领域知识添加到词典中,这是一个额外的优势。

在下一步中,创建一个定制函数,该函数可以使用上面形成的正面和负面单词的字典来分析给定的输入文本,并且可以被分类为正面或负面情绪。

  • 输入文本中出现的每个正面单词增加情感分数,负面单词减少情感分数。
  • 将最终情感分数除以该文本中的字数,以标准化分数。

范围在 0 到 1 之间的积极情绪得分描绘积极情绪,其中 1 是具有 100%置信度的积极情绪预测。然而,负面情绪得分的范围在-1 到 0 之间,其中-1 是具有 100%置信度的负面情绪预测。

实施:

(作者代码)

伯特:

BERT 代表 Google 开发的 Transformers 的双向编码器表示,它是用于 NLP 任务的最先进的 ML 模型。要使用 BERT 训练情感分析模型,请遵循以下步骤:

  • 安装变压器库
  • 加载 BERT 分类器和记号赋予器
  • 创建已处理的数据集
  • 配置和训练加载的 BERT 模型并微调其超参数
  • 进行情感分析预测

实施:

遵循下面提到的关于用 BERT 实现情感分析模型的文章。

基于命名实体的情感分析器;

基于命名实体的情感分析器主要针对实体或重要词。它也可以被称为目标情感分析,并且比上面提到的三种方法更准确和有用,因为它只关注重要的词或实体。

  • 第一步是找到文本语料库中的所有命名实体。
  • 对文本应用名称实体识别,以查找各种实体,如个人、组织、GPE。
  • 基于顶级命名实体的情感分析。
  • 通过查找包含命名实体的句子并仅对那些句子逐一执行情感分析来作为目标。

结论:

在这篇文章中,我们讨论了 5 种不同的方法来开发一个情感分析模型。让我们明白,在开发情感分析模型时,没有一种方法是必须遵循的硬性规则。它需要根据问题陈述和数据集规划和调整算法。

参考资料:

[1]伯特维基:https://en.wikipedia.org/wiki/BERT

[2]Orhan g . yaln 著《使用 bert 的情绪分析:https://towards data science . com/10 分钟内情绪分析-与 BERT 和拥抱脸-294e8a04b671

感谢您的阅读

使用 R 有效可视化调查数据的 5 种方法

原文:https://towardsdatascience.com/5-ways-to-effectively-visualize-survey-data-using-r-89928bf08cb2?source=collection_archive---------4-----------------------

图片由 200 度来自 Pixabay

当可视化地呈现时,调查结果变得比一些塞进枯燥表格的数字有趣得多。数据可视化可以帮助您的受众查看和理解结果中的关键见解。有许多数据可视化工具可以直观地呈现调查结果,包括条形图、饼图和折线图。在这篇文章中,我展示了 5 种可视化调查结果的方法。

作为一名视觉学*者,我经常使用数据可视化来展示调查结果和其他类型的自我报告措施(如心理量表)。在 2019 年加拿大教育研究学会年会上,我就如何有效地可视化评估和调查结果举办了为期半天的研讨会(研讨会幻灯片可在我的 GitHub 页面上获得)。我的目标是展示可用的工具,这些工具可用于创建调查和评估数据的有效可视化。自从我在 2019 年举办研讨会以来,我遇到了几个其他工具,这些工具对可视化地展示调查结果非常有用。所以,我决定在一个帖子里分享它们。

根据变量的类型以及要传达给受众的信息,有几种方法可以将数据可视化。图 1 给出了根据可视化目的、变量类型和变量数量选择哪种类型的可视化的一些指导原则。类似的指南可在venengage网站上找到。我还推荐黑马分析公司的博客文章数据裸体看起来更好。这篇文章很好地解释了如何通过消除数字和图表中的冗余来创建有效的可视化。

图 1:数据可视化的类型(来源:https://extremepresentation.com/)

在这篇文章中,我将使用经合组织国际学生评估项目(PISA)T1 中的学生问卷数据。PISA 是一项国际性的大规模评估,面向全球许多国家和经济体的 15 岁学生。2015 年,来自 72 个国家的* 54 万名学生参加了 PISA。在完成几项评估后,所有学生还要完成一份背景调查问卷,重点是他们在学校的学*,他们对学*不同方面的态度,以及非认知/元认知结构。利用学生在调查问卷中的回答,我将演示五种可视化调查数据的替代工具。

我们开始吧📊。

例子

在本例中,我们将使用 PISA 2015 数据库的一个子集,其中包括学生对一些调查项目和人口统计变量(如年龄、性别和移民身份)的回答。样本仅包括来自加拿大艾伯塔省参加 PISA 2015 的学生(n = 2,133)。数据集以. csv 格式在这里提供。

在数据中,有 10 个李克特式的调查项目潜在地测量学生对团队合作的态度。前八项共享同一个问题陈述:“你在多大程度上不同意或认同自己?”而后两项是独立的。现在让我们看看数据中包含的所有项目。

图二。PISA 数据集中的调查项目

学生可以通过选择以下答案选项之一来回答这些问题,或者跳过这些问题而不选择答案选项(遗漏的答案在数据中标记为 999):

  • 1 =强烈反对
  • 2 =不同意
  • 3 =同意
  • 4 =非常同意

我们将从读取 R 中的数据并预览前几行开始分析。

图 3。PISA 数据集的预览

在接下来的部分中,我将演示如何可视化 PISA 数据集中的项目。可视化集中在单个项目或项目之间的关系上。

相关矩阵图

我们将通过创建相关矩阵图来开始可视化过程。该图将一组项目的相关矩阵作为输入,并将其转换为类似于热图的彩色表格。负相关和正相关用不同的颜色表示。此外,颜色的暗(或亮)表示成对相关的强度。使用该图,我们可以:

  • 理解项目之间关系的方向和强度,
  • 检测有问题的项目(即,与其余项目弱相关的项目),以及
  • 确定由于措辞不一致而可能需要反向编码的项目(例如,某些项目中的负面措辞)。

为了创建相关矩阵图,我们可以使用corr plot【1】或ggcorrplot【2】。首先,我们将选择调查项目(数据中以 ST082 和 ST034 开头的项目)。接下来,我们将保存项目之间的成对相关性(即,10x10 相关性矩阵)。最后,我们将使用上面的两个包创建一个相关矩阵图。为了准备数据可视化的数据,我们将使用 dplyr 包【3】。

现在,让我们使用 corrplot 创建相关性矩阵图。在corrplot函数中,order = "hclust"应用层次聚类,根据项目之间的相关性将项目分组。另一个选项,addrect = 2,指的是我们想要在项目簇周围绘制的矩形的数量。在我们的示例中,我们怀疑可能有两个项目集群:一个用于前 8 个项目(侧重于团队合作),另一个用于后 2 个项目(侧重于被朋友喜欢)。图 4 中的项目群似乎证实了我们的怀疑。

图 4。PISA 调查项目的相关矩阵图(使用 corrplot)

我们还将使用 ggcorrplot 创建一个相关矩阵图。程序非常相似。通过使用type = "lower",我们将只可视化相关矩阵的下对角线部分。

图 5。PISA 调查项目的相关矩阵图(使用 ggcorrplot)

两个相关矩阵图证实了我们最初的怀疑,即最后两个项目(即 ST034Q02 和 ST034Q05)彼此相关,但与调查项目的其余部分不相关。如果我们建立一个关注“团队合作”的量表,我们可能会排除这两个项目,因为它们对量表的贡献不足。

扰乱情节

我们要尝试的下一个可视化工具叫做“颠覆图”。打乱图可以显示多组数据的交集。这些图允许用户可视化来自不同数据集的变量之间的复杂关系。这种可视化方法使用户能够组合不同的图(例如,文氏图、条形图等)。)基于数据中的交叉点。你可以看这个好看的视频来更好的理解打乱情节的设计和使用。在 R 中,镦锻机包【4】可用于轻松生成镦锻图。该软件包的作者也有一个闪亮的应用程序和一个网页版(https://vcg.github.io/upset/)来帮助用户在没有任何 r 代码的情况下生成打乱的情节

在我们的例子中,我们将使用 naniar 包[5]来创建一个翻转图,用于可视化丢失的数据。naniar 包提供了几个可视化缺失数据的工具,包括打乱图。使用这个包,我们将创建一个打乱图,显示我们调查数据中缺失的响应模式。首先,我们将选择数据中的调查项目,然后将这些项目发送到gg_miss_upset函数,以创建一个颠覆图。在函数中,nsets = 10是指我们想要可视化的项目集的数量。因此,我们使用 10 来可视化数据中的所有 10 个项目。此外,我们可以使用nintersects参数(如nintersects = 10)来改变图中显示的交点数量。

图 6。显示 PISA 调查项目中缺失数据模式的打乱图

我们可以使用图 6 来了解每个项目的缺失响应数量。例如,如果我们查看第一行(ST082Q01),我们可以看到,根据为此项目标记的三个频率的总和,有 83 个遗漏响应(即 79 + 3 + 1)。此外,我们可以使用该图来识别缺失的响应模式。例如,该图显示 79 名学生跳过了所有调查项目而没有选择答案(见第一个竖线),而 13 名学生跳过了 ST034Q05 或 ST082Q14(见第二和第三个竖线)。每一列代表具有遗漏响应的项目的不同组合(即,具有黑色标记的项目)。总的来说,翻转图对于识别遗漏方面的问题项目非常有用。

堆积条形图

下一个可视化工具是堆叠条形图。堆积条形图不一定是非常令人兴奋的数据可视化形式,但它们在调查研究中广泛用于可视化 Likert 类型的项目(例如,具有强烈不同意、不同意、同意和强烈同意响应选项的项目)。likert 包[6]提供了一种相对简单的方法来创建调查项目的堆积条形图。我不会深入研究定制这些图表的所有选项,我将演示如何使用前八个项目创建一个简单的堆积条形图,重点是团队合作。由于李克特包依赖于 plyr 包,我们将不得不激活这两个包。结果图显示了八个项目中每个响应选项的响应百分比。

图 7。PISA 调查项目的堆叠条形图

冲积地块

冲积图(或图表)类似于流程图,表示随时间或不同组之间的变化。使用冲积图,我们可以展示不同项目之间或不同受访者群体之间的调查响应流程。你可以查看包的插图来获得更多的例子。在这个例子中,我们将使用gg 冲积包【7】。我们将选择一个调查项目,并使用性别、移民身份和对该项目的回答创建一个冲积图。为了将数据从宽格式转换为长格式,我们将使用 reshape2 包[8]。

图 8。项目 ST082Q01、性别和移民身份的冲积图

项目-人员图

我们将回顾的最后一个数据可视化工具称为物品-人地图(也称为 Wright 地图)。部分信任模型(PCM)是 Rasch 模型的扩展,可用于调查开发和验证。我们可以使用 PCM 分析调查项目,并获得每个项目的项目阈值。这些阈值表示选择特定响应选项所需的潜在特性的大小(例如,选择不同意而不是强烈不同意)。使用项目-人图,我们可以看到项目的阈值以及回答者潜在特征的分布。此图对于分析项目和回答项目的受访者之间的对齐(或匹配)非常有用。

PCM 可以使用各种 R 包进行估算,例如mirt【9】和eRm【10】。在使用 R 的教育测量和心理测量手册中,我们提供了如何使用 mirt 软件包评估 PCM 的分步演示。要创建物品-人员图,用户可以使用 eRm 包中的plotPImap函数。因为我通常使用 mirt 包而不是 eRm 包,所以我编写了自己的函数来使用从 mirt 包返回的 PCM 结果创建一个物品-人映射。我的itempersonmap功能在这里可用

在下载了itempersonmap函数的 R 代码后,我们可以使用source函数将其导入 R。首先,我们将选择 8 个注重团队合作的项目(记住,其他两个项目似乎与其他项目不太协调,因此在此将其排除在外)。接下来,我们将记录从 1-2-3-4 到 0-1-2-3 的响应。最后,我们将使用 PCM 估计项目参数。在mirt功能中,itemtype = "Rasch"将 Rasch 模型应用于二进制项目,将 PCM 应用于多进制项目。由于我们的调查回答是多型的,PCM 将被选择用于估计项目阈值。请注意,我们添加了 technical = list(removeEmptyRows=TRUE),因为有 79 名受访者跳过了调查中的所有项目。因此,我们必须在估计模型之前移除它们。

我们将模型估计的结果保存为“mod”如果模型适当收敛,我们创建物品-人映射所需的所有信息都将保存在这个mirt对象中。估算完成后,我们可以简单地使用itempersonmap(mod)来创建一个物品-人员图。在图中,红点表示每个项目的项目阈值(三个阈值分隔四个响应类别),星号表示每个项目阈值的平均值。这些门槛越高,就越需要“团队合作”。在图的左侧,我们还看到了潜在特征的分布(即团队合作的结构)。

图 9。PISA 调查项目的项目-人地图

结论

在这篇文章中,我想展示五种有效可视化调查数据的方法。一些可视化(例如,堆积条形图和冲积图)可以用于呈现调查结果,而其他图(例如,扰乱图和相关矩阵图)可以用于识别调查中的有问题的项目。项目-人图也是一个非常有效的工具,可用于评估调查的整体质量(即项目和受访者之间的一致性),并确定是否需要更多的项目来精确测量潜在特质。

参考

[1]魏,t .,&西姆科,V. (2017)。 R 包“corrplot”:相关矩阵的可视化。【https://github.com/taiyun/corrplot

[2] Kassambara,A. (2019)。 Ggcorrplot:使用“ggplot2”可视化相关矩阵https://CRAN.R-project.org/package=ggcorrplot

[3]h .威克姆、r .弗朗索瓦、l .亨利和 k .米勒(2020 年)。 Dplyr:一种数据操作的语法https://CRAN.R-project.org/package=dplyr

[4]北卡罗来纳州盖伦堡(2019 年)。翻转器:一种更具可扩展性的替代文氏图和欧拉图的可视化交叉集合https://CRAN.R-project.org/package=UpSetR

[5]n .蒂尔尼、d .库克、m .麦克拜恩和 c .费伊(2020 年)。 Naniar:缺失数据的数据结构、摘要和可视化https://CRAN.R-project.org/package=naniar

[6]j .布赖尔和 k .施佩尔施奈德(2016 年)。李克特:分析和可视化李克特项目https://CRAN.R-project.org/package=likert

[7]j . c .布伦森(2020 年)。冲积:冲积地块的分层语法。开源软件杂志5 (49),2017。https://doi.org/10.21105/joss.02017

[8]韦翰·h .(2007 年)。使用整形包整形数据。统计软件杂志21 (12),1–20。http://www.jstatsoft.org/v21/i12/

[9]查默斯,R. P. (2012 年)。mirt:用于 R 环境的多维项目反应理论包。统计软件杂志48 (6),1–29。【https://doi.org/10.18637/jss.v048.i06

[10]迈尔 p .哈辛格 r .和迈尔 M. J. (2020 年)。 eRm:扩展 Rasch 建模https://cran.r-project.org/package=eRm

提高统计能力的 5 种方法

原文:https://towardsdatascience.com/5-ways-to-increase-statistical-power-377c00dd0214?source=collection_archive---------0-----------------------

可视化 A/B 测试中的统计功效

在数据科学中,我们经常需要运行 A/B 测试,并使用统计能力来解释结果。在博客中,我将解释什么是力量,以及如何使用可视化来增加力量。而且我强调一下,这些方法和 p 黑没有任何关系。

开始之前,我假设您对以下内容有一些基本的了解:

  1. 假设检验 (p 值)
  2. I 型和 II 型错误,或假阴性和假阳性

什么是权力

在二元假设检验中,要么零假设 H0 为真,要么备选假设 HA 为真。通常,我们将 null 设置为没有任何影响或事物保持不变,例如两个意味着相同(mu1 = mu2)。而我们把备择假设设定为,在你把一个变量引入实验之后,产生了某种影响或者事情发生了变化,比如两个均值不一样(mu1 ≠ mu2)。

对于我们测试人员来说,我们不希望 H0 是真实的。我们不想经历所有的困难来实现测试,却发现我们引入的变量是无用的。相反,我们关心 HA 是否为真,因为我们想要找到重要的变量,所以我们需要关心我们是正确的概率:当 HA 确实为真时,我们拒绝 H0 并因此接受 HA 的概率。这就是所谓的统计能力,当它存在的时候,你发现它的能力。

作者图片

在这个图表中,我们用深绿色来表示能量。在假设检验中,我们总是预先确定 alpha 值,通常设置为 0.05,所以在我们开始检验之前,I 类错误率就已经确定了。然后,我们可以计算出剔除 H0 所需的最小临界值。我们可以从零假设分布到备选假设分布画一条线,并将曲线下的区域分成两部分。如果我们计算的 t 或 z 值落在虚线的左边,当 HA 为真时,我们不能拒绝 H0,我们犯了第二类错误。如果计算的值落在右边,当 HA 为真时,我们拒绝 H0,我们做出正确的调用。因此,曲线右边的区域就是我们的功率。

请注意,我们只在 HA 为真的情况下谈论功率。如果不幸的是,H0 是真的,没有任何影响,没有任何力量会帮助我们。如图所示,当 H0 为真时,我们只处理α。但在现实生活中,我们不知道 H0 或哈是真的,我们不能改变地面的真相。我们所能控制的就是拒绝或者不拒绝 H0,同时希望他是真实的。尽管如此,我们仍然希望提高我们的统计能力,这样当它确实存在时,我们就有最好的机会去检测它。

如何增加功率

让我们更仔细地看看可视化,并了解我们在图中知道什么样的信息。

作者图片

开始之前,我们知道:(1)阿尔法水平,(2)我们是否使用 1-尾或 2-尾测试,(3)分布的形状(t 或 z)。在完成测试后,我们知道:(4)样本大小,(5)分布 M0 和马的平均值(或它们之间的差),(6)分布的标准偏差,因此(7)标准误差(SE)和(8)最小临界值,也就是虚线 X 的值(使用 M0、最小临界值和 SE)。

一个例子可以测试做练*册上的每一道 SAT 问题是否真的有所不同。SAT 的人口平均值为 M0 = 500,人口标准差= 100。因为我们知道总体平均值,我们可以使用 z 分布。我们可以像往常一样将测试设为双尾(alpha = 0.05)。现在,我们进行测试并检查测试数据。假设 N = 100,HA 分布的平均值为 MA = 530。由于我们假设两个分布相同,我们可以计算出 SE = SD/√N = 100/√100 = 10,因此 X = z_crit * SE + M0 = 1.96(我们从 z 表中得知)* 10 + 500 = 519.6。好了,现在我们终于可以计算功率了。HA 分布的临界值为 z _ crit 2 =(X-MA)/SE =(519.6-530)/10 =-1.04。我们可以查一下 z 表,看到对应的 p(x ≤ -1.04) = 0.1492,所以幂是 1-0.1492 = 0.8508。

好吧,现在最大的问题是。我们如何增加功率?

我相信更容易视觉化思考。你会如何增加绿色的面积?我们可以移动虚线(方法 0 & 1)、移动均线(方法 2)或改变分布的形状(方法 3–5)。

0.提高重要级别 alpha(错误的方式)

作者 GIF

保持其他一切都在原位,一个简单的方法是将虚线向左移动。通过增加α或从双尾检验切换到单尾检验,我们可以降低最小临界值 x。

很容易,但是一个大的警告是增加 alpha 会导致更高的犯 I 型错误的概率,所以我们从不篡改 alpha 的值。

1.从双尾检验切换到单尾检验

作者 GIF

类似地,从双尾测试切换到单尾测试可以将虚线向左移动。在双尾检验中,每个尾的临界 p 值是α的一半,而在单尾检验中,临界 p 等于α。

我们是使用双尾还是单尾测试取决于测试设计,并且是在进行实验之前设置的,所以我们需要从一开始就记住支持单尾测试。

2.增加平均差异

另一种方法是增加两种方法之间的差异。由于 H0 分布是固定的,因为零假设通常不会改变,我们只能希望 HA 分布能够向右移动。

作者 GIF

然而,我们无法手动实现这一点。我们需要如实报告我们从测试数据中得到的分布(否则就是数据操纵!).但这量化了为什么我们喜欢更大的均值差异,因为它给了我们更多的力量。

特别说明:
均值差是效应大小的一种,所以我们可以说增加效应大小可以增加功效。

3.用 z 分布代替 t 分布

从这种方法开始,我们着重于修改分布的形状。使用 z 分布将更容易达到统计显著性。为什么?

作者 GIF

因为 z 分布有更大的峰度(z 比 t 分布高)和更细的尾部。通过改变形状,X 也减少了,所以这两种效应增加了功率。在前面的 SAT 分数的例子中,使用 z 分布是合适的,因为我们知道总体均值。虽然这种情况在现实生活中并不经常发生,但是当样本量较大时,我们可以用 z 来*似一个 t 分布。

这种形状上的变化不会很明显。我在 GIF 中夸大了一点,以便更容易看到。

4.降低标准偏差

修改分布形状的另一种方法是通过降低 SD 来降低 SE。

作者 GIF

我们可以使用更精确的测量方法,比如在用户反馈调查中提出清晰的问题,而不是模糊的问题。这样,我们的数据将会有更少的错误和噪音。

此外,如果适用的话,我们可以尝试运行一个配对样本 t 检验。其工作原理是配对组有更高的相关性,配对样本之间的分数差异更小。

5.增加样本量(最实际的方法)

作者 GIF

最后,我们可以一直依赖的一个方法是增加样本量。如果 SD 保持不变,较大的样本大小 N 会增加分母,则 SE 会降低。

这也是真实业务场景中最实用的方式。与上面列出的方法相比,从更多的用户那里收集数据或发出更多的调查要容易得多。

这不是黑客入侵

如果你读这篇博客的第一个想法是 p-hacking,那么恭喜你!你是一个训练有素的统计学从业者,知道实验伦理。

的确,“增加”这个词给我们一种错觉,以为我们在控制实验结果,而事实上我们并没有。例如,方法(2)增加平均差异超出了我们的控制范围,但我认为理解为什么更大的平均差异导致更大的功率的机制仍然很重要。所以我把它放在这里,就像其他 帖子一样。

虽然我们不能控制测试数据,但我们可以控制实验设计。方法 0、1、3、4 和 5 都是在之前预先确定的,我们进行测试并查看测试数据。我们从不篡改测试数据!

比如说(5)增加样本量。我们是在实验期间还是之后增加样本量?不要!我们基于期望的幂(例如:幂=0.85)预先计算样本大小。如果 N=50,那么让我们找 50 个人,进行实验,检查测试数据并如实报告 p 值。

如果我是 p-hack,我会在得到 50 个人后首先检查我的 p 值= 0.053。哦不。p> 0.05,如此接*。我该怎么办?在进行测试后,我增加了样本量,并找到了另外两名参与者。我再次检查我的 p 值。现在 p = 0.049,我停止一切,报告我发现了一个效应。这是非常错误的!如果我每次添加新的参与者时都检查我的 p 值,那么在进行测试之前,任何事情都有可能获得 p < 0.05 and I will always find an effect.

Therefore, the meaning of increasing sample size is using N=50 instead of 20 or 40 。这同样适用于方法 1、3 和 4。

重要的是要知道增加统计能力的方法不止一种,因为有时增加样本量根本负担不起。从一个大学生的角度来说,如果我的资助被批准了,我只能负担 50 个测试对象,我将不得不在其他方面采取更聪明的实验设计来增加统计能力。

(此部分是在原博客发布 2 天后添加的。我在评论部分看到了一些混乱,所以希望这是更清晰的。)

结论

在这篇文章中,我们讨论了什么是使用可视化的统计能力,通过一个例子来更好地理解图表,并讨论了提高能力的 5 种方法(实际上是 6 种方法):

  • 提高重要级别 alpha(错误的方式)
  • 从双尾检验切换到单尾检验
  • 增加平均差异
  • 用 z 分布代替 t 分布
  • 降低标准偏差(通过使用精确测量和配对样本 t 检验)
  • 增加样本量(最实际的方法)

感谢您的阅读!希望这篇博客对你有所帮助。

5 种方法使组织病理学图像模型对域转移更加稳健

原文:https://towardsdatascience.com/5-ways-to-make-histopathology-image-models-more-robust-to-domain-shifts-323d4d21d889?source=collection_archive---------5-----------------------

探索各种方法:染色标准化、颜色增强、对立领域适应、模型适应和微调

组织病理学图像分析中的最大挑战之一是创建对不同实验室和成像系统的变化具有鲁棒性的模型。这些差异可能是由载玻片扫描仪、原材料、制造技术和染色方案的不同颜色响应造成的。

不同扫描仪引起的 H&E 图像变化[ Aubreville2021

不同的设置可以生成具有不同染色强度或其他变化的图像,从而在模型训练所基于的源数据和部署的解决方案需要操作的目标数据之间产生域转换。当域转移太大时,在一种类型的数据上训练的模型将在另一种数据上失败,通常是以不可预测的方式。

我一直在与一个客户合作,他有兴趣为他们的用例选择最佳的对象检测模型。但是他们的模型一旦部署将检查的图像来自不同的实验室和各种扫描仪。

从他们的训练数据集到目标数据集的领域转换可能比在训练集上获得最先进的结果更具挑战性。

我给他们的建议是尽早解决这个领域适应的挑战。一旦他们学会了如何处理域转换,他们总是可以在以后试验更好的对象检测模型。

两个不同数据集的有丝分裂外观:Radboudumc(上)和 TUPAC(下)[ Tellez2018 ]

那么,你如何处理域名转换呢?有几个不同的选项:

  1. 使用污渍标准化技术标准化图像的外观
  2. 在训练期间增加颜色以利用染色的变化
  3. 学*领域不变特征的领域对抗训练
  4. 在测试时调整模型以处理新的图像分布
  5. 在目标域上微调模型

通过 GAN [ Stacke2020 ]实现色彩增强、染色标准化和域对齐的不同目标

这些方法中的一些具有相反的目标。例如,颜色增强增加了图像的多样性,而染色归一化试图减少变化。领域对抗训练试图学*领域不变的特征,而适应或微调模型将模型转换为仅适合目标领域。

本文将回顾这五种策略中的每一种,随后是揭示哪种方法最有效的研究总结。

1。色斑标准化

不同的实验室和扫描仪可以为特定的污渍生成不同颜色配置文件的图像。污渍标准化的目标是使这些污渍的外观标准化。

传统上,像配色[ 莱因哈德 2001 ]和污渍分离[ 马森科 2009坎恩 2014瓦哈达尼 2016 ]这样的方法被使用。然而,这些方法依赖于单个参考载玻片的选择。任等人已经证明,使用具有不同参考幻灯片的集合是一种可能的解决方案[ Ren2019 ]。

H&E 图像(左)和解卷积的苏木精(中)和曙红(右)[ Macenko2009

更大的问题是,这些技术没有考虑空间特征,这可能导致组织结构得不到保留。

生成对抗网络(GANs)是当今染色标准化的最新技术。给定来自域 A 的图像,生成器将其转换到域 B。鉴别器网络试图区分真实的域 B 图像和伪造的域 B 图像,帮助生成器进行改进。

如果来自域 A 和 B 的成对和对齐的图像可用,则该设置执行良好。但是,它通常需要在两个不同的扫描仪上扫描每张载玻片,甚至可能需要重新扫描每张载玻片。

但是有一个更简单的方法可以获得配对图像:将一幅彩色图像转换成灰度(域 A),并与原始彩色图像(域 B)配对[ Salehi2020 ]。两者完全对准,并且可以训练条件 GAN 来重建彩色图像。

使用有条件的 GAN 从灰度到 H&E 的染色风格转换[ Cho2017

这种方法的一个主要优点是,为一个特定领域训练的再训练模型可以为各种不同的实验室和扫描仪工作,因为输入灰度图像中的变化小于彩色图像中的变化。

当成对图像不可用时的替代方法是 CycleGAN [ Zhu2017 ]。在此设置中,有两个生成器:一个用于从域 A 转换到 B,另一个用于从域 B 转换到 A。这两个模型的目标是能够重建原始图像:A - > B - > A 或 B->A->B。cycle gans 还利用鉴别器来预测每个域的真实图像与生成的图像。

使用 CycleGAN [ Lo2021 ]进行染色风格转移

使用深度学*的色斑归一化方法已经变得越来越复杂。作为检验这种标准化对您的任务是否有帮助的第一步,我建议从简单开始。染色工具组织切片工具都实现了一些颜色匹配和染色分离的方法。

这些简单的方法在某些情况下是足够的,但不是全部。下图展示了不同方法在五个不同数据集上的表现。

不同数据集上染色归一化结果的比较[ Salehi2020 ]

2。色彩增强

通过应用随机仿射变换或添加噪声的图像增强是用于对抗过拟合的最常见的正则化技术之一。类似地,可以利用染色的变化来增加在训练期间呈现给模型的图像外观的多样性。

虽然颜色的剧烈变化对于组织学来说是不现实的,但是通过对每个颜色通道进行随机的加法和乘法变化而产生的更微妙的变化已经被证明可以提高模型性能。

颜色增强的强度是一个额外的超参数,应该在训练期间进行实验,并在来自不同实验室或扫描仪的测试集上进行验证。

Faryna 等人展示了组织病理学上的随机扩增技术[ Faryna2021 ]。这种方法将增强参数化为所选择的随机变换的数量及其大小。

图像增强技术

特列斯等人研究了不同增强技术(单独和组合)对有丝分裂检测的影响,并提出了 H&E 特异性变换[ Tellez2018 ]。他们执行了颜色去卷积(如上文提到的染色分离方法中所使用的),然后在转换回 RGB 之前,在苏木精和曙红空间中应用随机移位。H & E 变换是性能最好的个体增强方法。所有增强方法的组合对于将性能推广到新数据集至关重要。

苏木精和曙红通道上的颜色增强[ Tellez2018

3。无监督领域对抗训练

领域适应的下一个技术是领域对抗训练。这种方法利用来自目标域的未标记图像。

域对抗模块被添加到现有模型中。该分类器的目标是预测图像是属于源域还是目标域。梯度反转层将该模块连接到现有网络,以便训练优化原始任务并鼓励网络学*域不变特征。

附属于 CNN 分类器的域对抗模块[ Ganin2016 ]

在训练期间,使用来自源域的标记图像和来自目标域的未标记图像。对于标记的源图像,应用原始网络的损失和域损失。对于未标记的目标图像,仅使用域损失。

利用领域适应模型改进领域不变性[ Aubreville2019

这个模块可以添加到各种深度学*模型中。对于分类,它通常连接到输出附*的图层。对于分段,它通常应用于瓶颈层—尽管它也可以应用于多个层。对于检测,它可以应用于特征金字塔网络。对于像有丝分裂这样需要附加分类器网络的具有挑战性的对象检测器,域对抗网络可以仅应用于第二阶段[ Aubreville2020a ]。

4。测试时调整模型

预测时间批量标准化将移位激活与训练分布对齐

不是在训练期间适应域转移,而是在测试时修改模型。域的变化反映在特征空间分布的变化中,即协变量的变化。因此,对于使用批量标准化图层的模型,可以为新的测试集重新计算平均值和标准偏差。

这些新的统计数据可以在整个测试集上进行计算,并在运行推理之前在模型中进行更新。或者可以为每批新数据计算它们。Nado 等人发现后一种方法,称为预测时间批量标准化,就足够了[ Nado2020 ]。此外,一批 500 张图像足以在模型准确性方面获得实质性的提高。

5。模型微调

最后,可以在测试集上用域转移[ Aubreville2020b ]对模型进行微调。如果测试集中有足够多的标记样本,这种方法可能会产生最好的结果。然而,它是最耗时和最不可推广的。该模型可能需要在未来的其他测试集上再次进行微调。

方法比较

颜色增强和染色标准化广泛用于病理学成像应用中,尤其是对于整个载玻片 H&E 图像。迄今为止,领域对抗训练和测试时的模型适应研究较少。

色斑标准化与增色

Khan 等人研究了单独使用和一起使用时的色斑标准化和增色[ Khan2020 ]。当这些方法一起使用时,可以获得最好的结果。

特列斯等人针对各种不同的组织学分类任务测试了图像增强和归一化策略的不同组合。最佳配置是随机移动颜色通道,并应用无污点标准化。使用染色标准化的实验表现稍差。这验证了图像增强在创建组织学的鲁棒分类器中的重要性,并强调了颜色转换的重要性。虽然应用污点归一化并没有真正的伤害,但这种额外的计算可能是不必要的。

污点规范化 vs 领域对抗训练

Ren 等人将领域对抗训练与一些染色归一化和颜色增强方法进行了比较,证明了领域对抗方法在推广到新图像集时更具优势[ Ren2019 ]。

色斑归一化 vs 颜色增强 vs 领域对抗训练

Larfarge 等人进行了一项类似的研究,其中也包括领域对抗训练。他们在有丝分裂分类和细胞核分割任务上比较了域对抗训练与颜色增强和染色归一化[ Lafarge2019 ]。

在有丝分裂分类上,他们发现颜色增强对来自模型训练的同一实验室的测试图像表现最佳。然而,在其他实验室的图像上,领域对抗训练结合色彩增强是最好的。

对于细胞核分割,结果略有不同。当在相同组织类型的图像上测试时,染色标准化是关键。在不同的组织类型上,染色标准化的领域对抗训练是最好的。

很明显,领域对抗性训练对两种类型的领域转换都有好处!

然而,最佳的预处理和增强策略因数据集而异。Lafarge 推测这是由于训练集中的域可变性的数量。

在上述方法分析中测试的污迹标准化方法仅仅是传统的颜色匹配和污迹分离技术。许多更新的基于深度学*的方法并没有包含在这些基准中。

建议

传统的污渍标准化技术值得尝试作为第一步,因为它们更容易实施,通常运行更快。对于一些域偏移,这些甚至可能是足够的,特别是当与颜色增加或域适应相结合时。用一种更简单的方法进行的实验还可以提供关于一定量的染色归一化是否会提高模型泛化性能的见解。为了使染色标准化更加可靠,并保留组织结构,请评估上述方法。

可用数据也可能是选择适当技术的决定因素。染色归一化和颜色增强在训练期间不需要目标域图像,而其他三种方法需要。模型自适应需要未标记的目标数据,而微调需要对其进行标记。出于这些原因,通常首先尝试染色正常化和颜色增强,并在需要时包括对抗性域适应。这三种方法也是训练单个可概括模型的最佳方法。如果有大量的目标图像可用,那么调整模型(使用未标记的数据)或微调(使用标记的数据)可能是最有效的。

监控已部署系统的意外域转移也很重要。Stacke 等人开发了一种量化畴变的方法[ Stacke2020 ]。他们的度量标准不需要带注释的数据,所以可以作为一个简单的测试,看看新数据是否可以被现有的模型很好地处理。

希望从图像和算法中获得最大的洞察力?

Heather D. CouturePixel Scientia Labs 的创始人,该实验室提取最新的机器学*研究,以帮助研发团队抗击癌症。

联系她,了解如何实施更好的模式并产生影响。

参考文献

[Aubreville2020a] M. Aubreville,C.A. Bertram,s .贾巴里,C. Marzahl,R. Klopfleisch,A. Maier,用于有丝分裂图评估的物种间、组织间域适应 (2020),Bildverarbeitung für die Medizin

[Aubreville2020b] M. Aubreville,C.A. Bertram,T.A. Donovan,C. Marzahl,A. Maier,R. Klopfleisch,一个完全注释的犬乳腺癌全幻灯片图像数据集,以帮助人类乳腺癌研究 (2020b),科学数据

[Aubreville2021] M. Aubreville,C. Bertram,M. Veta,R. Klopfleisch,N. Stathonikos,K. Breininger,N. ter Hoeve,F. Ciompi,A. Maier,量化有丝分裂检测中扫描仪诱导的结构域缺口 (2021),arXiv 预印本 arXiv:2103.16515

[Cho2017] H. Cho,S. Lim,G. Choi,H. Min,使用 gan 进行组织病理学图像的神经染色式转移学* (2017),arXiv 预印本 arXiv:1710.08543

[Faryna2021] K. Faryna,J. van der Laak,G. Litjens,为 H & E 染色组织病理学 (2021),深度学*医学成像

[Ganin2016] Y. Ganin,E. Ustinova,H. Ajakan,P. Germain,H. Larochelle,F. Laviolette,M. Marchand,V. Lempitsky,神经网络的领域对抗性训练 (2016),《机器学*研究杂志》

【Khan 2014】一种使用图像特定颜色去卷积对数字组织病理学图像进行染色归一化的非线性映射方法

[Khan2020] A. Khan,M. Atzori,S. Otálora,V. Andrearczyk,H. Müller,对计算病理学染色颜色异质数据的卷积神经网络进行推广 (2020),医学成像

[Lafarge2019] M.W. Lafarge,J.P .普鲁伊姆,K.A. Eppenhof,M. Veta,组织学图像的学*域不变表示 (2019),医学前沿

[Lo2021] Y.C. Lo,I.F. Chung,S.N. Guo,M.C. Wen,C.F. Juang,使用肾小球检测应用对肾脏病理图像进行周期一致性 GAN 染色翻译 (2021),应用软计算

[Macenko2009] M. Macenko,M. Niethammer,J.S. Marron,D. Borland,J.T. Woosley,X. Guan,C. Schmitt,N.E. Thomas,用于定量分析的组织切片标准化方法 (2009),生物医学成像国际研讨会

[Nado2020] Z. Nado,S. Padhy,D .斯卡利,A. D'Amour,B. Lakshminarayanan,J. Snoek,评估协变量转移下稳健性的预测时间批次归一化 (2020),arXiv 预印本 arXiv:2006.10963

[Reinhard2001] E .赖因哈德,M. Adhikhmin,B. Gooch,P. Shirley,图像间的颜色传递 (2001),计算机图形学与应用

[Ren2019] J. Ren,I. Hacihaliloglu,E.A. Singer,D.J. Foran,X. Qi,]用于组织病理学全载玻片图像分类的无监督域自适应算法 (2019),生物工程与生物技术前沿

[Salehi2020] P. Salehi,A. Chalechale, Pix2pix 基染色间转换:组织病理学图像分析中稳健染色归一化的解决方案 (2020),国际机器视觉和图像处理会议

[stack e 2020]k . stack,G. Eilertsen,J. Unger,C. Lundströ,测量结构域移位以实现组织病理学的深度学* (2020),《生物医学与健康信息学杂志》

[Tellez2018] D .特列斯,M. Balkenhol,N. Karssemeijer,G. Litjens,J. van der Laak,F. Ciompi, H 和 E 染色增强可提高用于组织病理学有丝分裂检测的卷积网络的泛化能力 (2018),医学影像学

[Tellez2019] D .特列斯,G. Litjens,P. Bándi,W. Bulten,J.M. Bokhorst,F. Ciompi,J. van der Laak,量化计算病理学卷积神经网络中数据增加和染色颜色归一化的影响 (2019),医学图像分析

【vahadane 2016】组织学图像的保结构颜色归一化和稀疏染色分离

[Zhu2017] J.Y. Zhu,T. Park,P. Isola,A.A. Efros,使用周期一致敌对网络的不成对图像到图像翻译 (2017),国际计算机视觉会议录

作为数据科学家如何提供价值

原文:https://towardsdatascience.com/5-ways-to-provide-value-as-a-data-scientist-ce7bba57af02?source=collection_archive---------41-----------------------

数据科学

机器学*实践者如何成为任何组织中不可或缺的资产。

里卡多·安南达尔在 Unsplash 上拍摄的照片

我们生活在一个价值驱动的社会。

时间、金钱、空间都是我们人类每天醒来积累的资源。除了时间,你只有 24 小时,和我们一样。

这让我想到了我们作为机器学*实践者带给组织的核心价值主张之一:通过创新或自动化节省时间和成本的能力。

当你阅读这篇文章时,有一个问题需要考虑:在一个价值驱动的社会中,作为一名机器学*从业者,你如何确保自己在一个组织中保持价值和重要性?

这篇文章应该能回答这个问题。实际上是五个答案。

如果你只采用数据科学家和 ML 从业者可以利用并用来为组织增加价值的五种方法中的一种,那么你就会成为不可或缺的资产。

1.学会沟通

Clint Patterson 在 Unsplash 上拍摄的照片

沟通是将人类推向食物链顶端的核心技能之一。

尽管早期穴居人的交流方式与现在的方式略有不同,但交流的目的是一样的。

我们都想把信息传递给他人,以产生意识。

数据科学家如何通过交流创造或增加价值?

我在创业环境中茁壮成长。有一种关于要么沉要么游的心态让我非常激动——我希望你能理解。与大公司不同,创业团队中的每个成员都扮演着重要的角色。你被你所增加和创造的价值直接衡量。

理解公司的宗旨和管理团队的目标

要想增加或创造任何形式的价值,你首先必须明白别人对你的期望。你的团队或经理希望你带来什么?

以上问题的答案取决于你的角色和职责,但这只是最低要求。

如果你打算成为一名不可或缺的数据科学家,你必须超越自我,让自己直接与管理团队和公司的目标保持一致。

在我目前的职位上,我与公司的首席执行官/首席技术官召开季度会议,以确保我很好地理解他们的目标、期望和指标。我利用这次演示会议来强调上一季度的一些成功和经验,并指出任何可能影响未来预期的重大障碍。

Unsplash空中聚焦拍摄的照片

展示是一项有用的活动,可以让你有机会进行各种形式的交流。

口头的、视觉的和书面的交流方式都是你在演讲中可以使用的。

在季度管理演示之后,我有一个个人研讨会,在那里我将总体目标分解为可操作的任务,这推动了我的日常活动。

你可能无法与管理团队直接会面,但你可以随时与经理和团队成员进行上述会面。

对于数据科学家来说,组织内部的口头交流发生在不同的层面。沟通可以是一对一,也可以是一对多。

谈判

谈判是一种常见的交流方式;你一天中的大多数互动都涉及到以公平的价格交换价值,通常是时间或金钱。这就是为什么要学会更有效地沟通,“我目前正在读‘永远不要分割差异这是一本由前联邦调查局谈判代表克里斯托夫·沃斯(Christorpher Voss)和塔尔·拉兹(Tahl Raz)撰写的流行自助书籍。

数据科学家不谈判。

你有没有尝试过让高管增加项目预算;说服团队成员为什么您应该使用一个模型而不是另一个模型,或者请求对源代码进行更改。那么,我的朋友,你在谈判。

2.拥有企业家的心态

图片由 Xan GriffinUnsplash 上拍摄

我不是说你必须在一夜之间成为埃隆·马斯克,才能为一个组织增加价值。

但是拥有企业家的心态会让你着眼于目标、期限、期望、收入等等。从不同的角度来看。

企业家的目的是通过承担普通人不愿承担的风险来创造价值,从而获得利润。这些风险可能与时间、地点和成本有关。

像企业家一样思考如何帮助数据科学家增加价值?

‘失败得快,学*得也快’这是初创公司员工的座右铭。

对于数据科学家来说,这意味着通过研究、实施和测试的迭代过程,尝试各种能够产生预期结果的方法。

我记得我不得不在我们公司的旗舰移动应用程序中开发实时人物细分。Tik-Tok、Instagram、Snap 等公司已经建立了非常有效的内部技术,并使细分成为消费者的一项微不足道的任务。

我没有告诉我的经理和团队成员,实时分段在这个时候可能不是用我们的资源实施的可行技术,而是戴上企业家的帽子,在互联网上搜索关于实时分段的最新研究和项目。

我尝试了几种方法,最多失败了,但从所有的方法中吸取了教训,我最终找到了一个解决方案,使结果可以实现。

回过头来看,我本可以轻松地说“我们不能做那件事”,这本来是情有可原的。尽管如此,当你像企业家一样思考时,你会尽可能地寻找机会和价值。

通过像企业家一样思考,我创造了价值,在我们的旗舰产品中提供了额外的创造力,并为我们整个公司在服务方面的主张增加了价值。你也可以这样做。

在拒绝产品功能请求或任何其他任务之前,挑战自己,接受看似不可能的任务。你可能会一次又一次地失败,但是失败得快,学得也快,你会成为一名更好的数据科学家。

几本书帮助我培养了一种企业家的心态。尽管如此,这两本关于杰出企业家的书被证明是最足智多谋的:埃隆·马斯克阿里巴巴:马云建造的房子

为了结束这一部分,下面是我多年来意识到的拥有企业家心态的好处:

  • 更好的任务规划会议,确保考虑时间、成本和结果。
  • 团队成员的动力和灵感来源。
  • 更高的信心水平
  • 实验可以激发更多的创造力

3.与研究保持联系

如果你经常阅读我的文章,你会遇到我经常使用的一句话:'人工智能以创新的速度前进'。

这种说法描述了机器学*领域的进步和发展速度。

作为一名机器学*实践者,你应该接触研究的前沿,通过研究收集的信息可以在组织内增加或创造价值。毕竟,知识就是力量。

拍摄的照片来自 Pexels

尽管我的 ML 专业经验很少,但我的团队成员将我视为关于创新的可靠信息来源,并将我视为战略性产品决策的关键贡献者。

我的团队能够信任我的专业知识,因为我认为尽可能多地消化与机器学*进展相关的信息至关重要。我阅读博客、文章、研究论文和听播客,所有这些活动确保我与 ML 行业合拍。

通过不断的信息搜索和理解,我已经成为团队成员和经理们信任的来源。

我明白阅读研究论文可能会令人望而生畏,尤其是如果你没有获得高等学位的经历。对于那些难以理解研究论文的人来说,这篇文章可能有助于你建立一个基础。

此外,这里有一个博客列表,可以帮助你与行业保持联系,从而以各种方式创造价值:

4.成为自动化的倡导者

来自 Pexelscottonbro 摄影

自动化是利用技术来最小化或消除任务和流程中的人工干预。

众所周知,人工智能的主要目标之一是提高工厂、家庭、办公室的自动化程度……几乎在任何可能的地方。作为机器学*的实践者,在可能的情况下,成为自动化的倡导者是你为一个组织增加价值的一种可靠方式。

通过自动化增加或创造价值是机器学*实践者最喜欢采用的价值创造方法之一。通过自动化简化的流程带来了直接和显著的价值。

通过自动化提供的价值几乎总是转化为时间和成本的减少。两个主要资源组织的优先事项,要么增加,要么减少。

数据挖掘可能是一件痛苦的事情。

在我最*的一个项目中,我不得不搜集 Instagram 的公开图片。起初,我是通过手动下载图片并将它们存储在文件夹中来完成的,你已经可以看到这种方法的缺陷了。

我的第二种方法更像数据科学。我写了一个 100 行的 python 脚本,从概要文件中抓取公共图像,处理它们,并把它们放在目标文件夹中。

这个简单的脚本为我节省了大量的时间、精力和事后成本。我通过为自己腾出更多时间来构建项目中的其他组件,从而创造了价值。

5.以产品和结果为导向

照片由贴牌盒Unsplash 上拍摄

当你将你的日常行为与总体预期目标相一致时,你给组织带来的价值会变得更加明显。很容易迷失在任务、会议和无意义的工作中。

假设你的公司打算在特定时间内发布一款具有物体检测功能的应用。在过去几周内,您仍然在收集数据并注释自定义数据集。在这种情况下,你没有增加价值。你实际上是未实现价值的瓶颈。

结果驱动的数据科学家将利用预训练的模型来检测 90%的预期对象,满足截止日期并进行沟通— 参考第 1 点任何限制因素和行动,以便在未来版本中“修补”东西。

也许上面的场景太具体了。

我要传达给你的特别信息是,如果你把精力和时间集中在任务的核心部分,在一个组织内创造价值会变得更加容易。

问问自己,要实现的应用程序或工具的主要功能是什么?

回答以上问题将使你开始思考在与总体目标相关的每项任务上投入正确的时间和精力。

结论

还记得我之前问的问题吗?

作为一名机器学*实践者,你如何确保自己在一个价值驱动的社会中保持价值和重要性?

  1. 学会沟通
  2. 拥有企业家的心态
  3. 与研究保持联系
  4. 成为自动化的倡导者
  5. 以产品和结果为导向

作为一名组织内的数据科学家,你可以通过更多方式增加价值。上面列出的方法是基于我在机器学*行业一年的经验。我相信在 2021 年及以后,我有很多东西要学。

欢迎在评论区分享你曾经或正在使用的在组织中创造价值的方法。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮箱列表 获取每周简讯
  2. 跟着我上
  3. LinkedIn Twitter 上连接并联系我

5 种不需要写代码就能对开源做出贡献的方法

原文:https://towardsdatascience.com/5-ways-you-can-contribute-to-open-source-that-doesnt-involve-writing-code-18112748bf12?source=collection_archive---------31-----------------------

现在就开始您的开源之旅吧。

照片由来自佩克斯克里斯蒂娜·莫里洛拍摄

开源软件使我们能够做很多以前做不到的事情。开源软件的基础代码可以被任何人访问和修改——只要修改和使用遵循发布许可。通常,开源项目通过 GitHub、GitLab 或任何其他公共存储系统共享。

作为开发人员和数据科学家,为开源项目做贡献有许多潜在的好处,例如学*一项新技能、与社区联系、建立强大的网络以及磨练自己的技能。此外,拥有坚实的开源贡献可以让你的投资组合和简历更上一层楼,并开辟新的和有前途的未来职业机会。

在数据科学中,许多著名的日常使用的库和包,如 Numpy 和 Pandas,都是开源项目,通过全球许多开发人员的努力才取得了今天的成就。作为当今世界的一名数据科学家,为开源项目做贡献通常不仅仅是你简历上的一个很好的附件,而是一个必不可少的项目。

但是,为开源做贡献,尤其是对初学者或以前从未做过贡献的人来说,有点令人生畏。你可能会觉得自己还不具备做出贡献所需的技能,或者你的编码或技术知识还不够。所以,你继续等待,直到你达到一个知识水平,在那里你可以舒服地做出你的第一个贡献。

在学*数据科学或编程的基础知识时,有一些方法可以做出开源贡献,而不需要编写代码。这样做的问题是,你失去了很多等待的时间。本文将探讨无需编写任何代码就能为开源项目做出贡献的 5 种方式。

№1:融入社区。

如果你喜欢与人交往,组织活动和与社区交往,这可能是你做出第一次贡献的好机会。大多数大型开源项目通常都有一群追随者,他们每天都在使用和开发它。有些甚至有自己的会议和定期聚会。

你可以请求帮助组织会议或聚会。你可以提议在你所在的城市、大学或工作场所谈论或主持一次聚会。你也可以自愿为这些会议做一些管理工作。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

№2:设计图形。

如果你是一个有创造力和艺术感的人,你还能为一个科技项目做贡献吗?毫无疑问,答案是肯定的。如果你有图形设计知识,你可以帮助创建一个项目或任何其他图形组件的标志。

你也可以提议更好地组织和展示项目或他们的网站或文档。一些人在向项目核心团队提出他们的重组和想法以支持他们的建议之前,实际上进行了 UX(用户体验)调查。

№3:改进文档。

作为一个热爱写作和解释技术概念的人,从与文档相关的贡献开始是我的首选。为文档做贡献有许多选择,可以吸引任何愿意提供帮助的人。

一些项目需要帮助编辑和校对文档的核心。您可能会提出更好的例子和解释来提高文档或其中特定部分的质量和可读性。文档贡献还包括将文档翻译成其他语言,为项目的不同特性创建新的教程,甚至为最*的项目更新创建和维护时事通讯。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

№4:回答别人的问题。

大多数开源项目接受回答其他人关于堆栈溢出或 Reddit 的问题,作为对项目的宝贵贡献。所以,你可以试着回答你路过的问题,并知道答案,以帮助那些问这个问题的人,并让你的答案被认为有助于这个项目。

让我们假设你不知道这个问题的确切答案;甚至帮助人们理解为什么问题会发生,也足以帮助他们找到自己的答案。你也可以在 GitHub 中回答问题,或者帮助主持讨论板或社区对话频道。

第 5 点:回顾他人的代码。

最后但并非最不重要的是审查他人的代码。有些人宁愿仔细检查编写的代码,寻找异常或不一致的地方,也不愿从头开始编写代码。如果你现在是这些人中的一员,那么这可能是你的开源贡献选择。

另一种选择是为项目的特殊功能写博客文章和教程。这些教程将帮助人们更好地理解项目及其用途。最后,你也可以指导另一个贡献者。或者指导项目的新用户,帮助他们导航并有效地使用它。

外卖食品

许多令人惊叹的程序员和数据科学家都在那里,这使得新人有点难以招架,难以向社区和领域展示和证明他们的价值。您可以展示您的技能、参与社区并帮助他人的一种方式是为开源项目做贡献。

当我第一次想为开源做贡献时,我非常害怕,我的技能水平比不上已经做出贡献的那些了不起的人。我总是担心我的代码不好,我非常害怕被拒绝。因此,我决定从非代码贡献开始涉足开源领域,了解这个过程是如何进行的,以及我应该如何去做。

</5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204> [## 5 本 Python 书籍,让你的代码更上一层楼

towardsdatascience.com](/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204)

我的第一个开源贡献是帮助翻译一些 Python 库的文档。我热爱写作,他们需要有人翻译成我的母语。我开枪帮忙了。这样做放松了我的心灵,消除了我对这个过程的恐惧。我认识了一些人,向他们学*,获得了开始为代码做贡献的信心。

从非代码贡献开始可以激励你克服被拒绝和不够好的恐惧,成为你开源之旅的起点。本文旨在向您推荐一些非代码开源贡献,您可以从今天开始您的贡献之旅。

5 个 YouTube 播放列表,教你所有关于数据科学的知识

原文:https://towardsdatascience.com/5-youtube-playlists-that-teach-you-all-about-data-science-ea300d6d8ed5?source=collection_archive---------23-----------------------

从一个来源获得你需要的所有知识

Szabo Viktor 在 Unsplash 上拍摄的照片

所以,你想成为一名数据科学家,你已经对该领域、子领域做了研究,你知道——模糊地——你对该领域感兴趣,你可能想进入并进一步探索的领域,你已经准备好投入时间和精力来展示自己。

但是,你从哪里开始呢?

互联网上充满了各种各样的教程,可以教你数据科学的各个方面。它们以各种形式存在,包括书面、视频、网络研讨会,甚至是面对面的课程。不仅如此,如果你更喜欢书,有很多针对不同层次和背景知识的人的书。

这很好,因为您可以选择浏览和选择最适合您的方法。一些人喜欢书,而另一些人可能想在上班路上或做饭时通过听有声读物或播客来学*。其他人可能会学*书面教程,或者在 YouTube 或其他平台上观看一些视频教程。

无论您喜欢哪种格式,您的目的都是找到好的、简单明了的材料,您可以使用这些材料轻松地学*数据科学的各个方面,如果可能的话,还可以免费学*。

也就是说,人类是视觉生物;我们从我们所看到的比我们所听到的或读到的学得最好。这就是为什么许多人选择观看视频教程来学*他们需要的任何新技能。在本文中,我将带您浏览 5 个 YouTube 播放列表,您可以通过观看这些列表来获得开始数据科学所需的知识。

</7-tips-for-data-science-newbies-d95d979add54>

№1:数据教授的数据科学 101

这个列表中的第一个播放列表涵盖了数据科学基础知识,由数据教授制作的数据科学 101 播放列表。截至撰写本文时,该播放列表包含 46 个视频,这些视频以简单易懂的短片形式介绍了数据科学的所有基本概念。

此播放列表中的视频不仅关注数据科学的技术方面。它们还包含书籍、证书和其他免费资源的推荐,供您在数据科学学*过程中使用。

这个播放列表以及 Data Professor 的整个频道的好处在于它是如何活跃的,并且总是更新以跟上该领域的最新进展。

№2:史蒂夫·布伦顿的《数据科学导论》

了解数据科学和机器学*所有基础知识的一个令人惊叹的播放列表是由史蒂夫·布伦顿和他的团队制作的数据科学简介播放列表。Steven Brunton 是西雅图华盛顿大学的机械工程和应用数学副教授以及数据科学研究员。

虽然布伦顿教授是一名学者,但他的视频并不具有学术风格。每个视频不到 10 分钟,只专注于彻底解释数据科学和机器学*的一个方面。

布伦顿教授频道还包括一个奇妙的线性代数播放列表,教授数据科学中使用的基本线性代数知识。

№3: CSE 519 —数据科学基础,作者:

Steven Skiena

这个播放列表包含了史蒂文·索尔·斯基纳在石溪大学教授的数据科学课程。Steven Skiena 是一位杰出的计算机/数据科学教授,也是石溪人工智能研究所的主任。

斯基纳教授有一种非常容易理解的方法来解释复杂的概念,并混合了淡淡的幽默感,以保持轻松。他还非常活跃,对视频讲座中的大多数评论和问题都有回应。

由于 CSE 519 播放列表视频是讲座格式的,它们每个都超过一个小时。他的频道还包括其他重要计算方面的播放列表,如算法分析和编程基础。

№4:freeCodeCamp.org 的数据科学

freeCodeCamp.org 是最著名、设计最精良的学*资源之一,几乎是任何与科技相关的资源。该网站提供了完整的课程,你可以学*技术的所有不同方面,数据科学也不例外。

但是,除了免费代码营的官方方面,他们的 YouTube 频道为他们所有的书面教程提供了许多播放列表。数据科学播放列表包括 10 个独立的视频,有些超过一小时,专注于数据科学的某些方面。

在这些视频中,你会发现一些使用 Python 的视频和一些使用 R 编程语言的视频。除了专注于某些数据科学包的视频,如 PyTorch、Numpy 和 Pandas。

</5-online-data-science-courses-you-can-start-now-748e4a2b5403>

№5:由

Codebasics 为初学者提供的数据科学完整课程

最后但同样重要的是 Codebasics数据科学课程播放列表。这个播放列表可能是这个列表中最大的一个,包含了 108 个视频,还有更多视频有待上传。

这个播放列表是一个很好的起点,尤其是如果你是科技领域的新手,以前没有任何知识。该播放列表涵盖了所有基础知识,从编程基础、数学基础、可视化开始,然后是数据科学和机器学*的基础知识。

Codebase 频道还包括侧重于版本控制、数据结构以及如何使用和优化 Jupyter 笔记本环境的播放列表。

外卖食品

YouTube 是最大最好的视频流媒体网站;如果你想学*一项新技能——不管是什么——很可能你会在 YouTube 上找到不止一个视频教程。

因此,很清楚为什么你会认为 YouTube 是你学*各种数据科学方面的主要资源。但是,你应该看哪些视频呢?如果你尝试在 YouTube 上搜索数据科学,你可能会得到来自不同语言(口语和编程语言)的不同内容提供商的数百个(更有可能是数千个)结果!。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

你会发现视频的数量绝对是压倒性的。我写这篇文章的目的是帮助您决定观看哪些视频来开始学*数据科学。我选择这些播放列表是因为它们完整、清晰,对于初学者和那些已经有一定知识的人来说容易理解。

给他们一个尝试,看看哪一个最适合你,坚持用那个。你所需要的就是坚持不懈,不断学*。

帮助我进入数据科学的 5 个 YouTubers

原文:https://towardsdatascience.com/5-youtubers-that-helped-me-break-into-data-science-3bff12fc6b7f?source=collection_archive---------4-----------------------

数据专业人士,你应该关注 YouTube 并向其学*

诺德伍德主题公司在 Unsplash 上拍摄的照片

两年前,我开始了我的数据科学之旅。在体育分析领域工作了 4 年后,我决定继续攻读数据科学硕士学位。在我读研期间,我发现自己在互联网上做了大量关于数据科学概念和如何进入该领域的职业建议的研究。本文的目的是介绍一系列真正帮助我成长为数据科学家的数据专家。如果你是数据科学的新手,我强烈建议你关注以下专业人士。

1.肯·吉

我在 LinkedIn 上遇到了 Ken Jee,他的频道确实在职业建议和提高我的技术技能方面帮助了我。我做过的最好的决定之一是参加他的#66daysofdata 挑战。在挑战中,我不仅提高了自己的技术技能,还结识了其他参加挑战的数据专业人士,拓展了自己的人脉。他也有体育分析的背景,这真的促使我追随他。如果你还没有听说过 66 天数据挑战,我强烈建议你查看下面的链接并加入挑战。

2.亚历克斯·弗雷伯格

许多数据科学家都是从数据分析师做起的。亚历克斯是一名数据分析师,如果你想成为一名数据分析师,他可能是最好的选择。SQL 是任何数据科学家都需要掌握的关键技能之一。Alex 教授 SQL 的视频确实帮助我提高了 SQL 技能。除此之外,看他解决 LeetCode 问题真的帮助我更好地理解了如何处理 SQL 问题。参见下面的示例。

3.约书亚·斯塔默

StatQuest 的创始人约书亚·斯塔默(Joshua Starmer)将永远是我复*统计学概念或不同类型的机器学*算法的头号资源。对我来说,他是一个必须跟随的人,因为他有惊人的能力清晰地教授概念。如果你正在学*任何统计学或机器学*课程,如果你对某个特定的概念感到困惑,我强烈建议你观看他的视频。我第一次尝试学*随机森林的时候就被他卖了。看看下面的视频,自己看看他对材料的解释有多好。

4.黄婷婷

在获得整体数据科学职业建议方面,Tina 非常出色。我是通过 Ken Jee 看到她的 YouTube 的。我最喜欢她的一个视频是她谈论让她获得入门级数据科学工作的简历。许多学生或应届毕业生感谢她分享了帮助她进入这个领域的东西。如果你正在写简历,看看下面的视频。该视频帮助我更好地了解了入门级数据科学简历应该是什么样的。

5.艾玛·丁

我在阅读艾玛的鼓舞人心的故事时遇到了她,她讲述了如何获得 4 份数据科学工作,并在被解雇后两个月内将收入翻了一番。我强烈建议你读一读。请参见下面的链接:

我亲自联系了艾玛,只是想听听她是如何做到这一点的。她的 YouTube 频道真的帮我选择了适合我的数据科学职位。除此之外,她关于如何在求职期间管理时间面试前该做什么的视频确实帮助我制定了一个成功找到工作的战略计划。

最后的话

我希望上面的列表对你的旅程有所帮助。我希望我开始的时候有一个可以追随的人的名单。如果你想起来 YouTube 上还有谁在如何提高技能或职业建议方面帮助过你,请在下面的评论区写下他们的名字。如果你能在任何社交媒体平台上分享这篇文章,我将不胜感激。谢谢,下次再见!✌️

https://www.navidma.com/

过去两年我被问到的 50 个数据科学面试问题

原文:https://towardsdatascience.com/50-data-science-interview-questions-i-was-asked-in-the-past-two-years-9076e06f5d14?source=collection_archive---------19-----------------------

微软、百事可乐、查尔斯·施瓦布、艺电等公司面试小抄...

照片由菲利普·布特Unsplash 拍摄

技术驱动的数据新时代为数据领域带来了大量机遇。人们一直在面试数据角色。这使得求职竞争非常激烈。在这个挑战全球疫情负面影响的世界里,只有最优秀的人才有机会面试并被录用。在这种情况下,我们必须做好准备。

在过去的两年里,我面试了微软、百事可乐、查尔斯·施瓦布、艺电、World Pay 等公司的业务分析师(2019)、数据工程师(2019)和数据科学家(2020)。

像任何人一样,我在面试招聘经理之前做了很多功课,我得出结论:有几个概念你需要涵盖,做笔记,知道答案,以确保你正确回答关于统计,数据查询,编程和机器学*的问题!

到 2026 年,预计将有 1150 万个新的数据工作岗位(来源:美国劳工统计局)

公司以各种不同的形式进行数据科学面试,包括黑客排名评估、白板问题、产品和指标驱动的电话面试。虽然大多数面试涉及 SQL、机器学*和一些 Python 问题,但肯定有基于场景的问题、软技能测试、编程知识等。

在你参加面试之前,确保你知道-

  1. 采访的形式
  2. 该角色的日常职责
  3. 公司内的职能/部门
  4. 所需的专业水平

确定工作描述和角色

申请一份新工作时,理解工作描述和角色是至关重要的。这将确保你理解你应该完成的任务和职责,并为你工作的公司增加价值。

工作角色

  1. 数据科学家—构建客户机器学*模型来推动业务决策
  2. 机器学*工程师——编写生产级代码,用数据进行预测
  3. 数据分析师—可视化和描述数据;向企业传达见解
  4. 数据工程师—存储和维护数据,构建 ETL 管道和数据仓库

工作说明

  1. 数据收集:收集和测量来自不同来源的数据,并将其存储起来以便有效访问和回答相关问题
  2. 探索和可视化:探索和揭示趋势、模式、特征和数据点。通过仪表盘可视化、展示和交流见解
  3. 实验和预测:一切机器学*!

在你开始准备面试之前,确保你知道面试的形式。

  1. 在线评估:Leetcode、HackerRank、GeeksforGeeks、CodeChef、CodeWars 或其他
  2. 小组/视频访谈
  3. 电话筛选

概念很重要,但是基于场景的问题同样重要,它决定了你的角色。招聘人员在寻找你解决问题的能力有多强,或者你在压力下能想出最佳的解决方案。以下是我在过去两年的面试中被问到的 50 多个面试问题!

软技能面试问题

大多数面试都以关于你的个人资料、项目和目标的问题开始。你应该有很好的解释:

  1. 告诉我你自己和你的背景(很明显)
  2. 谈谈你在团队中工作的一次经历;如果有冲突,你如何管理团队
  3. 告诉我们你面临挑战的一次经历,以及你是如何克服的?
  4. 你什么时候身兼数职了?你能给我们讲讲关键学*吗?
  5. 当工作进度落后时,你将如何说服他人完成工作?
  6. 你会如何向外行人解释数据科学?
  7. 你对未来 5 年有什么看法?
  8. 你对这份工作有什么期望?
  9. 你能告诉我你有很多事情要做的时候吗?你是怎么处理的?
  10. 你如何和一个你不适合的人一起工作?
  11. 解释你工作中最大的失败。你从这次经历中学到了什么?

SQL 面试问题

  1. 给定一个数据和场景:您会使用哪种连接?
  2. 什么是实体和关系?
  3. 您在查询中使用过规范化吗?
  4. 你如何使用连接从句?
  5. 给定一个场景,你会用删除还是丢弃?
  6. 可以用 SQL 写用户自定义函数吗?
  7. 你对 NoSQL 了解多少?
  8. SQL 和 NoSQL 的区别是什么?
  9. 你能谈谈你使用 SQL 的一次经历吗?
  10. 你有和 NoSQL 一起工作的经验吗?
  11. 什么是 OLAP 和 OLTP?可以举例说明吗?
  12. 你用过存储过程吗?
  13. 如何匹配 SQL 中的模式/字符?
  14. 你了解散列表吗?你在哪里使用它?
  15. 如何衡量查询性能?

Python 的面试问题

  1. 在 1-10 的范围内,您对 Python 的适应程度如何?
  2. 如何用 Python 写函数?
  3. 举几个熊猫的用例,NumPy。
  4. 你经常使用什么图书馆?
  5. Python 中的局部和全局变量是什么?
  6. 提到使用 Python 的五个好处?
  7. 如何用 python 创建字典?
  8. 如何在 python 中将一个字符串转换成一个整型?(数据类型转换)
  9. 你能举例说明几个数据清理的命令吗?
  10. 如何获取关于数据框的信息?
  11. 以下代码片段的输出会是什么?[我得到了样本代码]
  12. 写一个程序来反转一个列表(像这样的小代码片断问题)

机器学*的面试问题

  1. 如何决定 EDA 要考虑哪些数据属性?
  2. 你能想到可以使用监督和非监督 ML 算法的问题陈述吗?
  3. 对于数据可视化,您要做的第一步是什么?
  4. 给定一个场景,你会优先考虑什么:偏差还是差异?
  5. 你通常为你的训练、验证和测试集分配多少数据,为什么?
  6. 能说说你最*做的一个机器学*项目吗?
  7. 你准备分析数据的方法是什么?
  8. 如何衡量机器学*模型的有效性?
  9. 你有使用大数据工具进行机器学*的经验吗?

虽然我面试中的大多数问题都围绕着基本问题,但有很多基于场景的问题,我认为这是 2021 年 ace 面试的关键。除了与微软的一轮白板编码面试,大多数问题都是可控的。

帮助我获得工作机会的秘诀!

  1. 访问 glassdoor.com,查看该职位常见的面试问题
  2. 为公司准备一个定制的项目推介,并推动讨论朝着这个方向发展
  3. 在面试前记住一些场景,以展示你的品质和优势
  4. 如果你不知道答案,不要道歉:这是你学到的新东西,你渴望学*并与团队一起成长
  5. 表现出对角色的热情!!

这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请务必让我知道什么在采访中对您有所帮助,以及您在数据之旅中遇到了什么问题?

Rashi 是芝加哥伊利诺伊大学的一名研究生。她喜欢将数据可视化,并创造有见地的故事。当不赶着赶学校的最后期限时,她喜欢喝一杯好咖啡,写关于数据的博客..

2022 年数据科学家 50+统计面试问答

原文:https://towardsdatascience.com/50-statistics-interview-questions-and-answers-for-data-scientists-for-2021-24f886221271?source=collection_archive---------0-----------------------

一个更新的资源,为你的面试刷统计知识!

Unsplash 上的 Edge2Edge 媒体拍摄

请务必 订阅此处 千万不要错过另一篇关于数据科学指南、诀窍和技巧、生活经验等的文章!

介绍

你可能已经听我说过无数次了,但是数据科学家实际上是统计学家的现代术语,机器学*是统计学的现代术语。

因为统计学如此重要,https://medium.com/u/ab636cbf3611?source=post_page-----24f886221271--------------------------------StrataScratch的创始人内森·罗西迪和我合作写了 50 多个统计学面试问题和答案。

说到这里,让我们开始吧!

问:什么时候应该使用 t 检验和 z 检验?

Z-检验是一种使用Z-统计量的正态分布假设检验。当您知道总体方差或不知道总体方差但样本量很大时,可以使用 z 检验。

T-检验是一种假设检验,带有使用T-统计量的 T-分布。当不知道总体方差并且样本量很小时,可以使用 t 检验。

您可以查看下图,作为参考来指导您应该使用哪种测试:

作者创建的图像

问:对于一个非技术人员来说,你如何描述“p 值”是什么?

用简单的术语描述 p 值的最好方法是用一个例子。实际上,如果 p 值小于α值,比如说 0.05,那么我们说这个结果偶然发生的概率小于 5%。类似地,p 值为 0.05 相当于说“在 5%的时间里,我们会偶然看到这种情况。”

问:什么是摘樱桃、P-hacking、意义追逐?

摘樱桃指的是只挑选支持自己想要的结论的数据或信息的做法。

P-hacking 指的是一个人操纵他/她的数据收集或分析,直到不重要的结果变得重要。这包括决定测试中期不再收集数据。

重要性追逐指的是当研究人员报告无关紧要的结果时,好像它们“几乎”是重要的。

问:常态的假设是什么?

根据中心极限定理,正态性的假设是抽样分布是正态的,并且以总体参数为中心。

问:什么是中心极限定理,为什么它如此重要?

中心极限定理是非常强大的——它指出样本均值的分布*似于正态分布。

举个例子,你可以从一个数据集中抽取一个样本,然后计算这个样本的平均值。一旦重复多次,你就可以把所有的平均值和它们的频率绘制到一个图表上,你会看到一个钟形曲线,也就是众所周知的正态分布,已经被创建出来了。该分布的平均值将非常类似于原始数据的平均值。

中心极限定理很重要,因为它用于假设检验和计算置信区间。

务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、窍门和技巧、生活经验等!

问:经验法则是什么?

经验法则表明,如果数据集呈正态分布,68%的数据将落在一个标准差内,95%的数据将落在两个标准差内,99.7%的数据将落在 3 个标准差内。

问:中心极限定理成立必须满足什么一般条件?

  1. 数据必须随机抽样
  2. 样本值必须相互独立
  3. 样本量必须足够大,通常应大于或等于 30

问:平均值和比例的置信区间的等式是什么?

问:组合和排列的区别是什么?

n 个元素的排列是这 n 个元素以确定顺序的任意排列。有 n 个阶乘(n!)排列 n 个元素的方式。注意粗体字:顺序很重要!

另一方面,组合指的是从 n 个对象中选择 r 的方式的数量,其中顺序与无关。一次取 r 个的 n 个事物的组合数定义为一个有 n 个元素的集合中有 r 个元素的子集的个数,等于下式:

问:一个 6 位数的车牌有多少种排列?

问:从一副 52 张牌中抽出 6 张牌有多少种方法?

如果你想要更多类似这样的技术面试问题,可以在这里找到更多!

问:信心测试和假设测试有什么相似之处?它们有什么不同?

置信区间和假设检验都是用于进行统计推断的工具。

置信区间建议未知参数的值的范围,然后与真实参数在建议范围内的置信水平相关联。置信区间在医学研究中通常非常重要,可以为研究人员的估计提供更有力的基础。举例来说,置信区间可以显示为“10 +/- 0.5”或[9.5,10.5]。

假设检验是任何研究问题的基础,通常归结为试图证明一些事情不是偶然发生的。例如,你可以试着证明当滚动一种染料时,一个数字比其他数字更有可能出现。

问:观察数据和实验数据有什么区别?

观察数据来自观察研究,即观察某些变量并试图确定它们之间是否存在关联。

实验数据来自实验研究,即当你控制某些变量并保持它们不变,以确定是否存在因果关系。

实验设计的一个例子如下:将一组分成两个。对照组正常生活。测试组被告知在 30 天内每天晚上喝一杯酒。然后可以进行研究,看看酒是如何影响睡眠的。

问:举一些随机抽样技术的例子

简单随机抽样要求使用随机生成的数字选择一个样本。更具体地说,它最初需要一个抽样框架,一个群体所有成员的列表或数据库。然后,您可以使用 Excel 为每个元素随机生成一个数字,并获取您需要的前 n 个样本。

系统采样甚至更简单,只需从样品中取出一种元素,跳过预定的数量(n ),然后取出下一种元素。回到我们的例子,你可以选择列表中的第四个名字。

整群抽样从将一个群体分成几个组开始,或者叫做群。分层抽样的不同之处在于,每个聚类必须能够代表总体。然后,随机选择整个集群进行采样。例如,如果一所小学有五个不同的八年级班级,可以使用整群随机抽样,例如,只选择一个班级作为样本。

整群抽样示例

分层随机抽样从将人群分成具有相似属性的组开始。然后从每组中随机抽取一个样本。这种方法用于确保群体中的不同部分得到平等的代表。举个例子,假设在一所学校进行了一项调查,以确定总体满意度。这里使用分层随机抽样来平等地代表每个系学生的意见可能是有意义的。

分层随机抽样示例

问:1 型错误和 2 型错误有什么区别?

第一类错误是当你错误地拒绝了一个真的零假设。这也叫做假阳性。

第二类错误是你没有拒绝一个错误的零假设。这也被称为假阴性。

请务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、技巧和提示、生活经验等!

问:测试的力量是什么?提高测试能力的两种方法是什么?

测试的能力是当假设为假时拒绝零假设的概率。它也等于 1 减去β。

要提高测试的能力,您可以做两件事:

  1. 您可以增加 alpha,但是它也增加了类型 1 错误的机会
  2. 增加样本大小,n。这保持了类型 1 误差,但减少了类型 2 误差。

问:什么是大数定律?

大数定律是一种理论,它指出随着试验次数的增加,结果的平均值将越来越接*期望值。

正面硬币 100,000 次的翻转次数应该接* 0.5 次而不是 100 次。

问:什么是帕累托原理?

帕累托原则,也称为 80/20 法则,指出 80%的结果来自 20%的原因。80%的销售额来自 20%的顾客。

问:什么是混杂变量?

混杂变量或混杂因素是一种既影响因变量又影响自变量的变量,导致虚假关联,即两个或更多变量相关但无因果关系的数学关系。

问:线性回归需要哪些假设?

有四个主要假设:

  1. 因变量和回归变量之间存在线性关系,这意味着您创建的模型实际上符合数据
  2. 数据的误差或残差是正态分布的,并且彼此独立
  3. 解释变量之间的多重共线性最小
  4. 同质性。这意味着回归线周围的方差对于预测变量的所有值都是相同的。

问:如果一个模型是异方差的,这意味着什么?那 homoscedastic 呢?

当误差方差一致时,模型是异方差的。相反,当误差方差一致时,模型是同方差的。

问:内插法和外推法是什么意思?一般哪个更准确?

插值是使用一组观察值内的输入进行的预测。外推是指使用一组观察值之外的输入进行预测。

一般来说,插值更准确。

问:解释选择偏差(关于数据集,而不是变量选择)。为什么重要?丢失数据处理等数据管理程序如何使情况变得更糟?

选择偏倚是指在选择个人、群体或数据进行分析时,没有实现适当的随机化,最终导致样本不能代表总体的现象。

理解和识别选择偏差是很重要的,因为它会严重扭曲结果,并提供关于特定人群的错误见解。

选择偏差的类型包括:

  • 抽样偏差:非随机抽样导致的有偏差样本
  • 时间间隔:选择支持预期结论的特定时间范围。例如,在临*圣诞节时进行销售分析。
  • 暴露:包括临床易感性偏倚、原发性偏倚、适应症偏倚。此处阅读更多https://en.wikipedia.org/wiki/Selection_bias
  • 数据:包括摘樱桃、压制证据、证据不全的谬误。
  • 流失:流失偏倚类似于生存偏倚,即只有那些在长期过程中“幸存”的人才会被纳入分析,或者类似于失败偏倚,即那些“失败”的人才会被纳入分析
  • 观察者选择:与人择原理相关,这是一种哲学上的考虑,我们收集的关于宇宙的任何数据都要经过过滤,为了让它可以被观察到,它必须与观察它的有意识和有智慧的生命兼容。

处理缺失数据会使选择偏差变得更糟,因为不同的方法会以不同的方式影响数据。例如,如果您用数据的平均值替换空值,您就增加了偏差,因为您假设数据并不像实际可能的那样分散。

问:缺失数据的均值插补是可接受的做法吗?为什么或为什么不?

均值插补是用数据的均值替换数据集中的空值的做法。

均值插补通常是不好的做法,因为它没有考虑特征相关性。例如,假设我们有一个显示年龄和健康分数的表格,并假设一个 80 岁的老人缺少健康分数。如果我们从 15 岁到 80 岁的年龄范围内取平均健康分数,那么 80 岁的人看起来会有一个比他实际应该有的高得多的健康分数。

第二,均值插补减少了数据的方差,增加了数据的偏倚。由于方差较小,这导致模型不太精确,置信区间较窄。

请务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、窍门和技巧、生活经验等!

问:自相关是什么意思?

自相关是指未来的结果依赖于之前的结果。当存在自相关时,误差显示为序列模式,模型不太准确。

问:当你取样时,你会造成什么样的潜在偏见?

潜在的偏见包括:

  • 抽样偏倚:由非随机抽样引起的有偏倚的样本
  • 覆盖偏差不足:采样太少的观测值
  • 生存偏差:忽略观察的错误,没有通过一种形式的选择过程。

问:如何评估洞察力的统计显著性?

您将执行假设检验来确定统计显著性。首先,你要陈述零假设和替代假设。

其次,您将计算 p 值,即假设零假设为真,获得测试观察结果的概率。

最后,您将设置显著性水平(alpha ),如果 p 值小于 alpha,您将拒绝 null 换句话说,结果具有统计显著性。

问:解释什么是长尾分布,并提供三个具有长尾的相关现象的例子。为什么它们在分类和回归问题中很重要?

长尾分布的例子

长尾分布是一种重尾分布,它有一条(或多条)逐渐渐*消失的尾巴。

3 实际例子包括幂定律、帕累托原则(通常称为 80-20 法则)和产品销售(即最畅销的产品与其他产品相比)。

在分类和回归问题中注意长尾分布是很重要的,因为出现频率最低的值构成了总体的大多数。这最终会改变您处理异常值的方式,并且它也与一些假设数据正态分布的机器学*技术相冲突。

问:什么是异常值?解释如何筛选异常值,如果在数据集中发现异常值,您会怎么做。此外,解释什么是内联体,如何筛选内联体,如果在数据集中发现了内联体,你会怎么做。

一个异常值是一个明显不同于其他观察值的数据点。

根据异常值的原因,从机器学*的角度来看,它们可能是坏的,因为它们会降低模型的准确性。如果异常值是由测量误差引起的,那么将它们从数据集中移除是非常重要的。有几种方法可以识别异常值:

Z 值/标准偏差:如果我们知道一个数据集中 99.7%的数据位于三个标准偏差之内,那么我们可以计算一个标准偏差的大小,将其乘以 3,并确定超出该范围的数据点。同样,我们可以计算给定点的 z 分数,如果它等于+/- 3,那么它就是异常值。
注意:使用该方法时,需要考虑一些意外情况;数据必须呈正态分布,这一点不适用于小数据集,过多异常值的存在会影响 z 值

四分位距(IQR): IQR,用于构建箱线图的概念,也可用于识别异常值。IQR 等于第三个四分位数和第一个四分位数之差。然后,如果一个点小于 Q1-1.5 * IRQ 或大于 Q3 + 1.5IQR,则可以确定该点是否为异常值。这达到大约 2.698 个标准偏差。*

其他方法包括 DBScan 聚类、隔离森林和稳健随机采伐森林。

什么是内球?

一个内联者是一个数据观察,它位于数据集的其余部分内,是不寻常的或错误的。由于它位于数据集中,通常比异常值更难识别,需要外部数据来识别它们。如果您发现了任何内联者,您可以简单地将它们从数据集中删除以解决它们。

问:泊松分布代表什么?

图片来自维基媒体

泊松分布是一种离散分布,它给出了在固定时间内独立事件发生的概率。使用这种方法的一个例子是,如果您想确定在给定的一个小时内有 X 个病人来医院的可能性。

均值和方差都等于λ。

问:实验设计是什么意思?

实验设计也称为 DOE,它是在假设反映变量的条件下,旨在描述和解释信息变化的任何任务的设计。本质上,实验的目的是根据一个或多个输入(独立变量)的变化来预测结果。

问:你正在为每个月上传的用户内容编写一份报告,并注意到 10 月份的上传量有一个峰值。特别是图片上传的高峰。您可能认为这是什么原因造成的,您将如何测试它?

照片上传数量激增的潜在原因有很多:

  1. 一项新功能可能已经在 10 月份实施,它涉及上传照片,并获得了用户的大量关注。例如,提供创建相册能力的功能。
  2. 同样,有可能之前上传照片的过程不直观,在 10 月份得到了改善。
  3. 可能有一场病毒式的社交媒体运动,包括持续了整个 10 月的上传照片。八月天,但更具扩展性的东西。
  4. 这有可能是因为人们上传了自己穿着万圣节服装的照片。

测试的方法取决于尖峰的原因,但是您可以进行假设测试来确定推断的原因是否是实际原因。

问:医院的感染率高于每 100 人-日感染 1 例被认为是高的。某医院在过去的 1787 人/天中有 10 例感染风险。给出医院是否低于标准的正确片面检验的 p 值。

由于我们查看的是给定时间段内发生的事件数量(感染数量),因此这是一个泊松分布问题。

在一个区间内观察到 k 个事件的概率

零(H0):每人每天 1 例感染
替代(H1): >每人每天 1 例感染

k(实际)= 10 次感染
λ(理论)= (1/100)
1787
p = 0.032372 或 3.2372%*

因为 p 值< alpha (assuming 5% level of significance), we reject the null and conclude that the hospital is below the standard.

Q: You roll a biased coin (p(head)=0.8) five times. What’s the probability of getting three or more heads?

Use the General Binomial Probability formula to answer this question:

General Binomial Probability Formula

p = 0.8
n = 5
k = 3,4,5

P(3 头以上)= P(3 头)+ P(4 头)+ P(5 头)= 0.94 或 94%

问:一个随机变量 X 是正态的,均值为 1020,标准差为 50。计算 P(X>1200)

使用 Excel…
p =1-norm.dist(1200,1020,50,true)
p= 0.000159

问:假设出现在公交车站的人数为泊松分布,平均值为 2.5 人/小时。四小时内最多出现三人的概率是多少?

x = 3
平均值= 2.5
4 = 10*

使用 Excel…

p = poisson.dist(3,10,true)
p = 0.010336

问:艾滋病毒检测的敏感性为 99.7%,特异性为 98.5%。患病率为 0.1%的人群中的受试者获得阳性测试结果。测试的精确度是多少(即他是 HIV 阳性的概率)?

精度方程(PV)

精度=阳性预测值= PV
PV =(0.001 * 0.997)/[(0.001 * 0.997)+((1–0.001)
(1–0.985))]
PV = 0.0624 或 6.24%*

更多关于这个方程的内容参见 这里的

问:你正在竞选公职,你的民意调查机构调查了数百人。他们中的 60 个人声称他们会投你的票。你能放松吗?

  • 假设只有你和另一个对手。
  • 另外,假设我们想要 95%的置信区间。这使我们的 z 值为 1.96。

置信区间公式

p-hat = 60/100 = 0.6
z * = 1.96
n = 100
这就给了我们一个[50.4,69.6]的置信区间。因此,给定 95%的置信区间,如果你可以接受最糟糕的捆绑情形,那么你可以放松了。否则,你不能放松,直到 100 分中有 61 分说是。

问:苏格兰的谋杀率从前年的 115 下降到了去年的 99。这种报道的变化真的值得注意吗?

  • 因为这是一个泊松分布问题,均值=λ=方差,这也意味着标准差=均值的平方根
  • 95%的置信区间意味着 z 值为 1.96
  • 一个标准偏差= sqrt(115) = 10.724

因此置信区间= 115+/- 21.45 = [93.55,136.45]。由于 99 在这个置信区间内,我们可以假设这个变化不是很值得注意。

问:考虑双亲异性恋家庭的流感流行。假设父母中至少有一方患病的概率是 17%。父亲感染流感的概率为 12%,而母亲和父亲都感染该疾病的概率为 6%。母亲感染流感的概率有多大?

利用概率中的一般加法法则:
P(母亲或父亲)= P(母亲)+ P(父亲)— P(母亲和父亲)
P(母亲)= P(母亲或父亲)+ P(母亲和父亲)— P(父亲)
P(母亲)= 0.17+0.06–0.12
P(母亲)= 0.11

问:假设 35-44 岁男性的舒张压(DBPs)呈正态分布,均值为 80(毫米汞柱),标准差为 10。随机选择一个 35-44 岁的人,其 DBP 低于 70 的概率是多少?

因为 70 比平均值低一个标准差,所以取一个标准差左边的高斯分布的面积。

= 2.3 + 13.6 = 15.9%

问:在感兴趣的人群中,9 名男性的样本产生了 1,100cc 的样本平均脑容量和 30cc 的标准偏差。这个新群体的平均脑容量的 95%学生 T 置信区间是多少?

样本的置信区间

假设置信度为 95%,自由度等于 8,t 值= 2.306

*置信区间= 1100±2.306 (30/3)
置信区间= [1076.94,1123.06]

问:在六周的时间里,9 名受试者服用了减肥药。体重的平均差异(随访-基线)为-2 磅。要使 95% T 置信区间的上端点达到 0,体重差异的标准偏差必须是多少?

上限=平均值+ t 得分(标准偏差/sqrt(样本大小))
0 =-2+2.306 (s/3)
2 = 2.306 * s/3
s = 2.601903
因此,标准偏差必须至少约为 2.60,95% T 置信区间的上限才能达到 0。

问:在一项关于急诊室等待时间的研究中,调查人员考虑了一种新的标准的分流系统。为了测试系统,管理员选择了 20 个晚上,并随机分配新的分流系统在 10 个晚上使用,标准系统在其余 10 个晚上使用。他们计算了每晚看医生的平均等待时间(MWT)。新系统的平均 MWT 为 3 小时,方差为 0.60,而旧系统的平均 MWT 为 5 小时,方差为 0.68。考虑与新系统相关的平均 MWT 差异的 95%置信区间估计。假设方差不变。间隔是多少?按此顺序减去(新系统—旧系统)。

点击这里查看寻找两个独立样本的置信区间的完整教程。

置信区间=均值+/- t 分数标准误差*(见上文)**

均值=新均值-旧均值= 3–5 =-2

给定 df = 18(20–2)和 95%的置信区间,t 得分= 2.101

标准误差= sqrt((0。⁶ 9+0.⁶⁸ 9)/(10+10–2)) sqrt(1/10+1/10)
标准误差= 0.352*

置信区间= [-2.75,-1.25]

问:为了进一步测试医院的分诊系统,管理员选择了 200 个晚上,并随机分配了一个新的分诊系统用于 100 个晚上,一个标准系统用于其余的 100 个晚上。他们计算了每晚看医生的平均等待时间(MWT)。新系统的平均 MWT 为 4 小时,标准偏差为 0.5 小时,而旧系统的平均 MWT 为 6 小时,标准偏差为 2 小时。考虑与新治疗相关的平均 MWT 降低的假设。相对于这一假设,方差不等的 95%独立组置信区间说明了什么?(因为每组有如此多的观察值,所以用 Z 分位数代替 t 分位数。)

假设我们按照这个顺序减去(新系统—旧系统):

两个独立样本的置信区间公式

均值=新均值-旧均值= 4–6 =-2

z 得分= 1.96 95%的置信区间

st. error = sqrt((0。⁵ 99+* 99)/(100+100–2))* sqrt(1/100+1/100)
标准差= 0.205061
下界=-2–1.96 * 0.205061 =-2.40192
上界= -2+1.960.205061 = -1.59808

置信区间= [-2.40192,-1.59808]

问:有一个盒子——有 12 张黑色和 12 张红色卡片,第二个盒子有 24 张黑色和 24 张红色卡片;如果你想从 2 个盒子中随机抽取 2 张卡片,哪个盒子获得相同颜色的概率更高?你能直观地说出为什么第二个盒子有更高的概率吗

有 24 张红卡和 24 张黑卡的盒子获得两张同色卡片的概率更大。让我们走过每一步。

假设你从每副牌中抽出的第一张牌是红色的 a。

这意味着在有 12 个红和 12 个黑的牌组中,现在有 11 个红和 12 个黑。因此,你再抽一张红色的几率等于 11/(11+12)或 11/23。

一副牌中有 24 个红和 24 个黑,那么就有 23 个红和 24 个黑。因此,你再抽一张红色的几率等于 23/(23+24)或 23/47。

由于 23/47 > 11/23,所以卡数较多的第二副牌有较大概率得到相同的两张牌。

问:举一个例子,中间值比平均值更好衡量

当有许多异常值正或负地扭曲了数据时。

问:给定两个公平的骰子,得分总和为 4 的概率是多少?到 8?

滚动 a 4 有 4 种组合(1+3,3+1,2+2):
P(滚动 a 4) = 3/36 = 1/12

有滚安 8 的组合(2+6,6+2,3+5,5+3,4+4):
P(滚安 8) = 5/36

问:如果一个分布向右倾斜,并且中位数为 30,那么平均值会大于还是小于 30?

如果给定的分布是右偏分布,那么平均值应该大于 30,而众数仍然小于 30。

问:你即将登上飞往西雅图的飞机。你想知道你是否应该带一把伞。你打电话给住在那里的三个朋友,分别问他们是否在下雨。你的每个朋友都有 2/3 的机会对你说真话,1/3 的机会用谎言来搞乱你。三个朋友都告诉你“是的”下雨了。西雅图真的下雨的概率有多大?

你可以看出这个问题与贝叶斯理论有关,因为最后一个陈述本质上遵循这样的结构,“假设 B 为真,A 为真的概率是多少?”因此,我们需要知道某一天伦敦下雨的概率。假设是 25%。

P(A) =下雨的概率= 25%
P(B) =三个朋友都说在下雨的概率
P(A|B)假定他们说在下雨的概率
P(B|A)假定在下雨的情况下三个朋友都说在下雨的概率= (2/3) = 8/27

第一步:求解 P(B)
P(A | B)= P(B | A)
P(A)/P(B),可以改写为
P(B)= P(B | A)* P(A)+P(B | not A)* P(not A)
P(B)=(2/3)* 0.25+(1/3)* 0.75 = 0.25 * 8/27+0.75 * 1/1*

*第二步:求解 P(A | B)
P(A | B)= 0.25 (8/27)/(0.25 * 8/27+0.75 * 1/27)
P(A | B)= 8/(8+3)= 8/11

因此,如果三个朋友都说在下雨,那么有 8/11 的几率是真的在下雨。

如果你想要更多的数据科学面试问题和答案来备考,你可以在这里找到更多的https://platform.stratascratch.com/?utm_source=blog&utm_medium=click&utm_campaign=terenceshin&utm_content=statistics-interview-questions-article***!*****

感谢阅读!

如果你坚持到了最后,恭喜你!我希望这有助于你更新和修补你的统计知识。我知道有很多东西要记,但是你用得越频繁,就越不容易丢失。

一如既往,我祝你在数据科学的努力中一切顺利。如果你喜欢这篇文章,我会很感激你给我一个关注!😃

如果您喜欢这篇文章,请务必点击 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

不确定接下来要读什么?我为你选了另一篇文章:

***</10-statistical-concepts-you-should-know-for-data-science-interviews-373f417e7d11>

又一个!

特伦斯·申

6 个令人惊讶的数字函数可能会让你大吃一惊

原文:https://towardsdatascience.com/6-amazing-numpy-operations-that-might-surprise-you-52a88da77b9a?source=collection_archive---------21-----------------------

提高性能,检查平等,重塑,等等

照片由 安民 发自 像素

NumPy 是科学应用的基础 Python 模块。它是各种领域中最广泛使用的统计分析软件包之一,包括数据科学家、高级分析和统计分析。

接下来的文章将讨论令人惊奇的功能和使用 NumPy 可以做的事情。

1。allclose()函数

一个比较函数,检查两个数组是否相等或非常相似。这个函数逐项比较两个数据数组,看它们是否在某个阈值内相等,然后返回一个布尔值作为结果。

如果两个数组的项在指定的容差内不相等,则返回 false 否则,它返回 true。值得注意的是,默认的容忍度是相当适度和有利的。

a = np.array([0.16,0.26,0.365])
b = np.array([0.15,0.25,0.36])tolerance1 = 0.1
tolerance2 = 0.05print(np.allclose(a,b,tolerance1))
print(np.allclose(a,b,tolerance2))

输出

True
False

2. where()函数

其中()是一个函数,它从满足一组条件的数组中返回元素。此外,该函数返回满足一组标准的元素的索引位置。这与 SQL 中的 where 子句基本相同。

list1 = np.array([1,4,7,6,1,7,3,8,9])# Where the elements in list1 are less than 7, returns the index position
np.where(list1<7)

输出

(array([0, 1, 3, 4, 6]),)

3. extract()函数

顾名思义,Extract()用于根据条件用数组检索特定成员。我们也可以使用 and、or 或 extract()这样的标准。

让我们定义一个随机数组。

# Random integers
array_test = np.random.randint(18, size=12)#Output: array_test
array([ 2, 13, 16,  9,  2,  8, 12,  6,  6,  1, 15,  3])

让我们根据特定的条件从数组中构造一个布尔数组。

# Divide by 2 and check if the remainder is 1
cond = np.mod(array_test, 2)==1

**Output:** cond
array([False,  True, False,  True, False, False, False, False, False, True,  True,  True])

现在让我们看看 extract()如何帮助我们。

# Use extract to get the values
np.extract(cond, array_test)**Output**
array([13,  9,  1, 15,  3])

我们也可以在提取函数中直接应用条件。

# Apply condition on extract directly

np.extract(((array_test < 2) | (array_test > 14)), array_test)**Output**
array([16,  1, 15])

4. reshape()函数

NumPy 中的 reshape 数组函数用于给数组一个新的形式。这是 NumPy 最受欢迎的功能之一。整形功能非常有用;我们可以用它给数组一个新的形式或者我们想要的形状。

它可以增加或减少数组维数,同时保持项目总数不变。

arr = np.arange(1,36,2)
print(arr)*#reshape* print("reshape1\n",arr.reshape(3,6))
print('reshape2\n',arr.reshape(2,3,3))

输出

[1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35]reshape1 
[[ 1 3 5 7 9 11]
[ 13 15 17 19 21 23]
[25 27 29 31 33 35]]reshape2 
[[[ 1 3 5]
[ 7 9 11]
[ 13 15 17]][[19 21 23]
[25 27 29]
[31 33 35]]]

5. einsum()函数

Numpy 最有用的函数之一是 einsum()函数,通常称为爱因斯坦求和约定。由于它的表达能力和巧妙的循环,它可以在性能和内存经济方面胜过我们传统的数组函数。

困难的方面是学*符号需要时间,并且可能需要多次尝试才能有效地将它应用到复杂的情况中。einsum()提供了数组np.multiplynp.additionnp.transposenp.diag等 NumPy 函数来加速和简化我们的工作。

当我们第一次开始使用 einsum()时,我们将经历一些我们需要知道的基本操作。

*find array diagonal, transpose using einsum*a = np.array([[1,2,3],[4,5,6],[7,8,9]])
a_diag = np.einsum('ii->i', a)print("option1\n",a_diag)
print('option2\n',np.einsum(a,[0,0],[0]))

a_transpose = np.einsum("ij->ji",a)print("option1\n",a_transpose)
print("option2\n",np.einsum(a,[1,0]))

6.剪辑()功能

Clip()是一个将数组中的值保持在指定范围内的函数。我们有时需要将数字保持在一定的范围内。给定间隔时,外部值将被修剪到间隔边缘。

x = np.array([3, 4, 12, 20, 2, 2, 3, 7, 1, 2, 12, 0])
print(np.clip(x,2,5))

输出

array([3, 4, 5, 5, 2, 2, 3, 5, 2, 2, 5, 2])

这里有一本 ,我一定会推荐给所有 Python &数据科学初学者。一定要去看看!

结论

Numpy 不仅仅是一个更快更方便的 Python 数组计算包。除了其明显的科学用途之外,NumPy 还可以用作普通数据的多维存储。

可以定义的数据类型数量没有限制。因此,NumPy 可以简单高效地与各种数据库进行交互。

文章中提到的各种令人惊奇的函数在使用 Numpy 库时会非常有用。

注: 本文包含代销商链接。这意味着,如果你点击它,并选择购买我上面链接的资源,你的订阅费的一小部分将归我所有。

然而,推荐的资源是我亲身经历的,并在我的数据科学职业生涯中帮助了我。

在你走之前……

如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学激动人心的文章,请点击这里https://pranjalai.medium.com/membership考虑成为一名中等会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: Pranjal 的简讯

使用 Python 列表可以做 6 件惊人的事情

原文:https://towardsdatascience.com/6-amazing-things-you-can-do-with-python-lists-2509010452b2?source=collection_archive---------21-----------------------

对您的脚本任务非常有用

照片由 扎米 发自 Pexels

我们在 Python 中使用的最常见的数据结构之一是列表,我们在 Python 中做的几乎每个项目中都使用这种数据结构。因此,了解一些与列表相关的技巧不仅会使您的工作更容易,而且有时它们比我们经常编写的简单代码更有效。

在这篇文章中,我将讨论 6 个使用 python 列表的技巧和诀窍,它们肯定会让你的生活变得更轻松。这些技巧包括 Python 中的一些内置函数和一些列表理解。

1。检索列表的某一部分

假设我们想获取一个列表的某个部分,并从中创建一个新的列表。我们可以使用 Python 中的 slice() 方法来实现。该方法将起始索引值、结束索引值和增量顺序作为参数,并按该顺序检索元素。

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]elements = slice(4 ,10 ,1)list2 = list1[elements]print(list2)

输出:

[5, 6, 7, 8, 9, 10]

这个方法也可以用来反转列表,但是我们有另一个很酷的方法,我们将在本文的第三点看到。

2。对列表中的每个元素执行类似的操作

如果您想对列表中的每个元素执行一组操作,可以使用 Python 中的 map() 函数。

您只需要编写包含这些操作的函数,然后使用 map() 函数,该函数将一个函数和一个 iterable(本例中为 list)作为参数,并对列表的所有元素执行操作。

例子

mylist = [1,2,3,4,5]def multi(x):
    return 10*xlist(map(multi, mylist))

在这种情况下, map() 函数将用户定义函数 multi() 应用于mylist[]的所有元素并返回值。

输出

[10, 20, 30, 40, 50]

3。倒序列表

这是一个几乎所有 python 程序员都知道的相当常见的技巧,但是值得一试。在这种情况下,我们使用[]运算符,通过将第三个参数设置为-1 来反向遍历列表。

示例

str=”strings are cool”print(str[::-1])

输出

looc era sgnirts

敬请期待 同更多类似 精彩 文章上 Python &数据科学 —做会员考虑使用我的推荐链接:【https://pranjalai.medium.com/membership

4。同时迭代多个列表

假设您有两个想要同时访问其元素的列表。Python 中的 zip()函数允许您使用一行代码来完成这项工作。该函数将多个列表作为参数,并同时遍历它们。当较小的列表用尽时,迭代停止。

zip 函数最棒的地方在于它可以用来同时遍历多个列表。

例子

colour = [“red”, “yellow”, “green”]fruits = [‘apple’, ‘banana’, ‘mango’]price = [60,20,80]**for colour, fruits, price in zip(colour, fruits, price):
    print(colour, fruits, price)**

在这里,我们遍历了三个列表来打印其中的值。

输出

red apple 60yellow banana 20green mango 80

5。连接字典中的列表

当字典中的键值对的值是一个列表时,这个技巧会很有用。如果我们想要合并所有在字典中作为值出现的列表,我们可以借助内置的 sum()函数来完成。

示例

dictionary = {“a”: [1,2,3], “b”:[4,5,6]}numbers = sum(dictionary.values(), [])print(numbers)

输出

[1, 2, 3, 4, 5, 6]

6。将两个列表合并成一个列表

假设您有两个列表,并且您想要合并这两个列表以形成一个字典,即一个列表中的元素将是键,而另一个列表中的元素将是值。使用 python 中的 zip()函数,我们只用一行代码就可以完成这项任务。

示例

items = [“footballs”, “bats”, “gloves”]price = [100, 40, 80]dictionary = dict(zip(items, price))print(dictionary)

输出

{‘footballs’: 100, ‘bats’: 40, ‘gloves’: 80}

结论

这些是一些提示和技巧,你可以在处理列表时应用,使你的工作更容易。这些技巧不仅需要较少的代码行,其中一些对提高性能也有帮助。

除了这些技巧,您还可以使用列表理解来使您的代码更加紧凑和高效。在我们接下来的文章中,我将讨论更多与 python 相关的技巧和诀窍。

敬请期待!!了解更多与 Python 和数据科学相关的技巧。

走之前……

如果你喜欢这篇文章,并希望关注更多关于 Python &数据科学精彩文章——请考虑使用我的推荐链接https://pranjalai.medium.com/membership成为中级会员。

还有,可以随时订阅我的免费简讯: Pranjal 的简讯

每个数据科学家都应该知道的自动编码器的 7 种应用

原文:https://towardsdatascience.com/6-applications-of-auto-encoders-every-data-scientist-should-know-dc703cbc892b?source=collection_archive---------5-----------------------

自动编码器及其使用基本指南

图片由来自 Pixabay巴菲克拍摄

自动编码器是一种流行的无监督人工神经网络,它采用未标记的数据,并学*关于数据结构的有效编码,可用于另一个上下文。自动编码器*似于将数据从全输入空间映射到较低维度坐标的函数,并且进一步*似于具有最小损失的输入空间的相同维度。

对于分类或回归任务,可以使用自动编码器从原始数据中提取特征,以提高模型的稳健性。自动编码器网络还有各种其他应用,可以用于一些其他环境。我们将在本文中介绍自动编码器的 7 种应用:

***Checklist:***
**1) Dimensionality Reduction
2) Feature Extraction
3) Image Denoising
4) Image Compression
5) Image Search
6) Anomaly Detection
7) Missing Value Imputation**

在深入研究自动编码器的应用之前,让我们简单讨论一下自动编码器网络到底是什么。

什么是自动编码器?

Autoencoder 是一种无监督的神经网络,它尝试将输出层重建为与输入层相似。自动编码器架构有两个部分:

  • 编码器:从输入空间到低维空间的映射
  • 解码器:从低维空间重构到输出空间

自动编码器首先将输入向量压缩到低维空间,然后试图通过最小化重构误差来重构输出。自动编码器会尝试重建与输入层尽可能相似的输出向量。

(来源),自动编码器架构

有各种类型的自动编码器,包括正则化的、具体的和变化的自动编码器。参考自动编码器的维基百科页面来详细了解自动编码器的变化。

1)降维:

自动编码器训练网络将数据中的自然结构解释为有效的低维表示。它通过使用解码和编码策略来最小化重建误差。

(来源),自动编码器的编码器-解码器架构

输入和输出维度有 3000 个维度,期望的缩减维度是 200。我们可以开发一个 5 层网络,其中编码器有 3000 和 1500 个神经元,类似于解码器网络。

压缩输入层的矢量嵌入可以被认为是输入层的降维嵌入。

2)特征提取:

自动编码器可以用作分类或回归任务的特征提取器。自动编码器获取未标记的数据,并学*可用于监督学*任务的关于数据结构的有效编码。

在使用训练数据的样本来训练自动编码器网络之后,我们可以忽略自动编码器的解码器部分,并且仅使用编码器来将较高维的原始输入数据转换到较低维的编码空间。这种较低维度的数据可用作监督任务的特征。

(图片由作者提供),AutoEncoder 作为特征提取器

跟随我的另一篇文章,逐步实现作为特征提取器的 autoencoder:

3)图像去噪:

真实世界的原始输入数据通常在本质上是有噪声的,并且训练健壮的监督模型需要干净和无噪声的数据。自动编码器可用于数据去噪。

图像去噪是自动编码器试图从有噪声的输入图像重建无噪声图像的流行应用之一。

(图片由作者提供),使用自动编码器架构对图像进行去噪

将有噪声的输入图像作为输入馈入自动编码器,并通过最小化来自原始目标输出(无噪声)的重建损失来重建无噪声输出。一旦训练了自动编码器权重,它们可以进一步用于对原始图像去噪。

4)图像压缩:

图像压缩是自动编码器网络的另一个应用。原始输入图像可以被传递到编码器网络,并获得编码数据的压缩维度。可以通过使用解码器网络从压缩编码中重构图像来学*自动编码器网络权重。

(图片由作者提供),使用自动编码器进行图像压缩

通常,自动编码器不太适合数据压缩,基本的压缩算法效果更好。

5)图片搜索:

自动编码器可用于压缩图像数据库。压缩嵌入可以与搜索图像的编码版本进行比较或搜索。

(图片由作者提供),使用 AutoEncoder 进行图片搜索

6)异常检测:

异常检测是自动编码器网络的另一个有用的应用。异常检测模型可用于检测欺诈性交易或任何高度不平衡的监督任务。

这个想法是仅在一个类(多数类)的样本数据上训练自动编码器。这样,网络能够以良好的或更少的重建损失来重建输入。现在,如果另一个目标类的样本数据通过自动编码器网络,则会导致相对较大的重建损失。

可以确定重建损失(异常分数)的阈值,大于该阈值可以被认为是异常。

7)缺失值插补:

去噪自动编码器可用于估算数据集中缺失的值。其思想是通过在输入数据中随机放置缺失值来训练自动编码器网络,并通过最小化重建损失来尝试重建原始原始数据。

一旦训练了自动编码器权重,具有缺失值的记录可以通过自动编码器网络来重构输入数据,该输入数据也具有估算的缺失特征。

(图片由作者提供),使用去噪自动编码器输入缺失值

结论:

在本文中,我们简要介绍了自动编码器的各种应用。对于图像重建,我们可以使用一种称为卷积自动编码器的自动编码器,它通过学*最佳滤波器来最小化重建误差。

在我即将发表的文章中,我将实现上面讨论的每个应用程序。

喜欢这篇文章吗?成为 中等会员 继续无限制学*。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。

https://satyam-kumar.medium.com/membership

感谢您的阅读

提高 Python 代码速度的 6 种方法

原文:https://towardsdatascience.com/6-approaches-to-speed-up-your-python-code-37a6da14fca?source=collection_archive---------16-----------------------

快速编码的简单步骤

照片由 Guillaume JailletUnsplash

在过去的几年里,Python 已经证明了自己是一种简单易学、多才多艺、功能强大的编程语言。如果你是编程世界的新手,或者你对科学编程、数据科学或普通计算机科学感兴趣,它成为学*的首选之一。

由于这种受欢迎程度的提高,开发人员和公司在日常工作中使用 Python 来构建应用程序、进行研究和开发供他人使用的包。现在,有超过 200,000 个 Python 包,涵盖了从简单的字符串操作到完整的机器学*和人工智能包的广泛应用。

Python 是一个完整的框架,适合任何想进入编程领域,尤其是任何数据科学分支的人。Python 提供了许多优势来帮助人们建立他们的投资组合和职业生涯。毕竟,一旦你掌握了一门编程语言,学*另一门就不是那么复杂的任务了。

虽然 Python 的优点大于缺点,但当有人反对 Python 时,一个缺点似乎是许多讨论的中心,“ Python 太慢了。“如今,速度对我们所有人都至关重要;科技让我们变得不耐烦;如果一个应用程序需要多一秒钟才能打开,或者一个网页需要几秒钟才能加载,我们会感到沮丧,因为它太慢了。

事实是,与其他编程语言相比,Python 相对较慢。Python 速度慢有各种原因,但最主要的原因是它作为一种解释型语言的特性。这是我们无法改变的。那么如何才能加快 Python 的速度呢?

在编写代码时,我们可以采取一些简单的步骤来提高执行速度。也许没有 C、C++或 Java 那么快,但足够让 Python 代码做得更好。

</7-tips-for-data-science-newbies-d95d979add54>

方法 1:保持最新

Python 开发人员正在努力保持 Python 的相关性、功能性,并在未来的版本中以更有效的方式实现其核心功能。通过使用最新的 Python 版本来保持您的代码是最新的,这将确保您使用在该版本中实现的新的优化技术。

因此,只要这个版本与您所有的依赖项兼容,使用最新的版本来规划您的下一步总是一个好主意。

保持最新也适用于您正在使用的软件包和库。库提供者总是致力于修复错误、添加新特性和优化现有特性。

方法 2:有效地使用数据结构

数据结构是计算机科学的基本构件。Python 中实现了很多不同的数据结构,比如列表、元组、字典、集合等等。但是,通常,人们倾向于继续使用列表来完成他们所有的可迭代任务。

知道正确的数据结构用于您的应用程序可以使它更快。例如,在搜索应用中使用字典和集合比列表更有效,因为它们是基于哈希表构建的,并且总是需要O(1)时间来查找任何项目。

确保使用正确的数据结构是一项技能,它要求您更多地了解不同类型的数据结构以及每种数据结构的最佳应用。

方法 3:仅在绝对需要时循环

循环是任何编程语言的重要组成部分;没有没有循环的代码。但是,循环通常在执行中占用最多的时间。有时,我们在使用循环时会使它过期,这最终会使我们的代码明显变慢。

因此,我们需要减少代码中的循环次数。这可以通过使用不同的变量对列表进行排序来实现,而不是遍历列表或使用像交集和联合这样的重构技术来优化我们的代码。

更有效地使用循环的另一种方法是尽可能使用列表理解;例如,创建和填充列表通过理解比使用 append 方法更好。最后,while循环比for循环更加静态和高效,如果可能的话,用 while 循环替换 for 循环。

方法 4:不要建造已经存在的东西

Python 提供了如此多的内置函数,那些没有提供的函数通常是使用 Python 开发人员或任何其他公司开发的包来提供的。所以,使用提供的东西,而不是重建它。

我看到许多人喜欢自己实现函数,如果你正在学*语言或者只是为了扩展你的编程知识,这没什么不好。但是,如果您正在使用 Python 构建一个大型应用程序,那么实现现有的大部分功能可能会浪费时间,并导致您的代码变得更大、更慢。

summaxanyfiltermap这样的内置函数都是用 C 实现的,速度快,效率高。此外,Python 集合模块提供了各种各样的数据结构,您可以立即使用这些数据结构来优化您的代码。在你开始建造它之前,一定要先看看那里有什么。

方法 5:使用节省内存的技术

占用大量执行时间的事情之一是内存交互。因此,使用一些节省内存的技术可以显著提高代码的速度。您可以使用不同的方法来节省内存时间,包括:

  • 使用发生器生成范围值,因为它们需要较少的内存使用。
  • 使用sort()而不是sorted(),因为 sorted 创建了 iterable 的新副本。在大型数据集的情况下,使用排序更有效。
  • 使用插槽。 __slots__是声明变量的一种特殊方式,它采用变量的实例,并且只保留足够的空间来存放变量的值。
  • 使用 math 和 Numpy 处理和执行大数和矩阵运算。这些库的构建是为了提高内存效率。
  • 使用formatjoin方法连接字符串,而不是使用+操作符。

方法 6:使用加速应用程序

可以使用各种应用程序来加速 Python 代码。然而,这些应用程序要求您重写部分代码以提高效率。

例如,您可以使用Cython用 C 语言编写部分代码,或者使用 C 函数。Cython 生成的代码被编译成机器语言,执行起来更快。另一种选择是使用Numba,它是一个即时编译器。Numba 基本上是把 Python 代码变成更快的机器码,实现更快的执行。

PyPy也是一个加速代码的选项。它为 Cython 提供了一个很好的替代品。PyPy 唯一的缺点是它不能与所有 Python 包兼容,所以在决定使用 PyPy 之前,要确保所有的依赖项都得到支持。

外卖食品

Python 是最流行的编程语言之一;对于初学者和专业人士来说,它更容易学*,易于阅读和理解,并且几乎可以用在你能想到的所有应用程序中。2019 年, SlashData 估计使用 Python 作为主要编程语言的开发者数量达到 820 万,数字每天都在上升。

Python 的许多优势使它这些年来一直保持活力,并鼓励许多开发人员和公司构建和开发许多包,任何人都可以使用这些包来构建和部署来自广泛领域的应用程序。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

尽管 Python 很成功,但它总是有一个缺点,那就是速度慢。由于 Python 是一种基于解释器的语言,它默认比编译语言慢,因为它逐行执行和运行代码。

我们不能改变 Python 的本质,但是我们可以在相对更快更有效地编写代码时实现简单的步骤。在本文中,我们介绍了 6 种可以提高 Python 代码速度的方法。这并不是说这些是加速代码的唯一方法,但它们是开始优化代码库的好方法。

作为数据科学家,你不应该应用的 6 个糟糕的数据工程实践

原文:https://towardsdatascience.com/6-bad-data-engineering-practices-you-shouldnt-apply-as-a-data-scientist-58de5eca14c3?source=collection_archive---------11-----------------------

你应该做什么

照片由 Yan KrukovPexels

数据科学工作的竞争越来越激烈,拥有数据科学和数据工程技能会让你比缺乏这两种技能的数据科学家更有优势。作为一名数据工程师,为了学*最佳实践,我还必须学*不好的实践,并在此过程中处理后果。这些是我作为一名数据工程师的心得,当我成为一名数据科学家时,它们让我的生活变得更轻松,我希望它们也能帮助你。

1.不必要的基础设施

团队负责人决定标准化文件名,因为程序员倾向于使用不能反映代码实际功能的文件名。文件名将被放入一个带有文件名和代码用途描述的查找表中。我们被告知按顺序使用字母数字名称,如 a1a2a3 等等。每当一段新代码需要一个名字时,我们必须找到序列中的最后一个名字,并使用下一个。

值得庆幸的是,这个系统从未投入生产,只是在一个中途取消的项目中实现。一想到我不得不在查找表中找到 a1 的用途,我就不寒而栗。

外卖:不要过度复杂数据工程基础设施。部门主管可能已经建立了一个标准的文件命名约定,该约定对于代码或其他不涉及查找表的协议来说是不言自明的。

2.调试困难

我的团队继承了动态创建代码并在执行后被删除的遗留代码。调试这段代码的不幸任务落到了我的身上。这是一场噩梦,因为我必须编辑程序来写出代码,以确保它不会消失,以解决问题。

要点:不要让代码更难为自己和他人排除故障。必要时添加注释来解释代码的作用。设置代码的格式,使其更易于阅读。这将减少故障排除时间,并腾出时间从事比调试更有趣的其他任务(除非这确实是您整天喜欢做的事情)。

3.缺乏数据质量保证

作为一名数据工程师,我觉得自己对数据的了解不足以验证质量。分析师通常会要求我们解决一些常见的问题,这些问题可能是在数据工程师将数据传递给分析师进行审查之前,通过一些 QA 检查发现的。这增加了分析师在我们将 ETL 变更投入生产之前签署的时间。

要点:在将 ETL 变更投入生产之前,为数据工程师或您自己建立一个常见的 QA 检查列表。我们建立的几个检查是为了寻找主键字段中的重复值和缺失值,这有助于我们减少分析人员返回的 QA 问题的数量。

4。没有备份

当我第一次成为数据工程师时,我们没有源代码控制。如果您意外删除了一个文件或更改了代码,并且想要恢复它,您唯一的选择是请求它从备份磁带中提取一份副本。这延误了我们的工作,因为我们必须等待它检索文件。

一位分析师曾经更改了我们没有备份的表中的数据。我们只有 changelog,我必须手动将表更新回原始值。不用说,如果有备份的话,这花费的时间是不必要的。

在一个主要的代码改变之前,确保最新的版本保存在源代码控制中,或者只是将原始文件复制到一个备份文件夹中。如果您决定修改表中的数据,请将您计划更改的数据复制到另一个表中作为备份,以防出错。

5.增量更新前不删除原始数据

作为一名数据工程师,我们在生产中通常有两种类型的表更新管道。第一个是完全刷新,删除所有表记录,并用最新数据插入一组新记录。第二种是增量更新,即在前一天或指定时间段(如过去七天)更新数据。

当重新运行管道时,会为具有增量更新的表插入重复记录,因为 ETL 在插入之前没有删除正在更新的同一时间段的数据。这导致了报告和下游流程的许多问题,特别是当它直到后来才被发现时。

要点:在插入增量更新的表之前,总是添加代码来删除同一时期的记录。如果没有及早发现重复数据,这将防止重复数据和不正确的报告。

6.部署它,然后忘记它

您可能会认为没有必要检查已经通过 QA 并部署到生产环境中的代码。这就是你错的地方。通常情况下,在开发过程中使用样本文件和开发数据库运行的流程并不模拟真实世界,也没有在代码中考虑。我在生产中遇到过管道失败,尽管它们通过了 QA,因为我没有考虑开发环境中不存在的用例。

要点:在 ETL 管道被部署到生产环境中之后,一定要检查它的数据输出,尤其是前几天,以确认一切都如预期的那样。当您实际需要使用数据时,您不想意识到有问题。

最后的想法

无论您是与数据工程师一起工作的数据科学家,还是身兼两职的人,了解不好的实践也有助于学*好的实践。我无法完全毫发无损地逃脱这些糟糕的做法,但我希望了解它们有助于让您作为数据科学家的工作变得轻松一些。

你可能也会喜欢…

</6-best-practices-i-learned-as-a-data-engineer-9d3ad512f5aa>

让你的 Python 程序变慢的六个坏*惯

原文:https://towardsdatascience.com/6-bad-manners-makes-your-python-program-slower-15b6fce62927?source=collection_archive---------1-----------------------

图片来自 Pixabay迈克尔·莫西曼

Python 代码中通常被忽视的常见问题

随着 Python 越来越受欢迎,Python 用户的数量也在激增。Python 确实是比较好学的。它也非常灵活,因此有更多可能的方法来实现一个功能。

然而,每当有多种方法来做一件特定的事情时,就意味着每种方法都有利弊。在本文中,我收集了 6 种编写 Python 代码的典型方法,它们可能会导致相对较差的性能。

1.不要导入根模块

图片来自 PixabayAndreas Riedelmeier

使用 Python 时,我们无法避免的一件事就是导入模块,无论是内置模块还是第三方模块。有时,我们可能只需要那个模块中的一个或几个函数或对象。在这种情况下,我们应该尝试只导入我们需要的函数或对象,而不是导入根模块。

这里有一个简单的例子。假设我们需要在程序中计算一些数字的平方根。

较慢的例子

import math
math.sqrt(100)

在这个糟糕的例子中,我们导入了math模块,并使用math.sqrt()来访问函数。当然,它完成工作没有任何问题,但是如果我们能导入sqrt()函数,性能会更好。

更快的例子

from math import sqrt
sqrt(100)

这比原来快了 25%。同样,如果我们需要在程序中多次使用平方根函数,代码会更整洁。

2.避免使用点/点链接

图片由 anncapicturesPixabay 获得

在 Python 中使用点.来访问对象的属性或函数是非常直观的。大多数时候,没有问题。然而,如果我们能避免使用点,甚至是一串点,性能实际上会更好。

下面的例子显示了在列表中添加一个数字,然后删除它。

较慢的例子

my_list = [1, 2, 3]my_list.append(4)
my_list.remove(4)

更快的例子

my_list = [1, 2, 3]append = my_list.append
remove = my_list.removeappend(4)
remove(4)

如果你不相信实际上做同样的事情,我们可以验证它。

考虑

我可以预料许多 Python 开发者会跳出来说这个例子中的技术有点可笑。其实就算是对我自己来说,我也很少像上面那样写代码。然而,很高兴知道我们可以这样编程,甚至可以让它更快。

如果我们想在一个列表中添加和删除数百万次,我们应该考虑使用这个技巧。这就是为什么我们需要平衡代码的性能和可读性。

3.不要使用+来连接字符串

图片来自 PixabayPIRO4D

Python 中的字符串是不可变的。因此,当我们使用“+”将多个字符串连接在一起作为一个长字符串时,每个子字符串都是单独操作的。

较慢的例子

strs = ['Life', 'is', 'short,', 'I', 'use', 'Python']def join_strs(strs):
    result = ''
    for s in strs:
        result += ' ' + s
    return result[1:]

具体来说,对于每个子字符串,它需要请求一个内存地址,然后将它与该内存地址中的原始字符串连接起来。这就变成了一种开销。

更快的例子

def join_strs_better(strs):
    return ' '.join(strs)join_strs_better(strs)

然而,当我们使用join()函数时,该函数预先知道所有的子字符串,并且分配的内存地址的长度将适合最终连接的字符串。因此,没有为每个子字符串分配内存的开销。

考虑

强烈建议尽可能使用join()功能。然而,有时我们可能只想连接两个字符串。或者说,只是为了方便起见,我们想用“+”。在这种情况下,使用“+”符号可以提高可读性,减少代码长度。

4.不要使用临时变量进行值交换

图片来自 Pixabaymagee

许多算法需要两个变量的值交换。在大多数其他编程语言中,这通常是通过引入临时变量来实现的,如下所示。

较慢的例子

a = 1
b = 2
temp = a
a = b
b = temp

非常直观的是,我们需要一个临时变量作为缓冲区。因此,当变量b的值被传递给变量a时,保存变量a的值会有所帮助。然后,缓冲器中a的值可以赋给变量b

更快的例子

然而,在 Python 中,我们不必使用 temp 变量。Python 有内置语法来实现这种值交换,如下所示。

a = 1
b = 2
a, b = b, a

它不仅快了一点,而且使我们的代码更加整洁干净。

5.If 条件下使用短路

图片由拍摄来自 Pixabay

“短路”评估存在于许多编程语言中,Python 也是如此。基本上,它指的是某些布尔运算符的行为,其中只有当第一个参数不足以确定整个表达式的值时,才执行或计算第二个参数。

让我们用一个例子来证明这一点。假设我们有一个如下的列表。

my_dict = [
    {
        'name': 'Alice',
        'age': 28
    },
    {
        'name': 'Bob',
        'age': 23
    },
    {
        'name': 'Chris',
        'age': 33
    },
    {
        'name': 'Chelsea',
        'age': 2
    },
    {
        'name': 'Carol',
        'age': 24
    }
]

我们的工作是过滤列表,找出所有姓名以“C”开头、年龄大于或等于 30 岁的人。

较慢的例子

需要满足两个条件:

  • 名字以“C”开头
  • 年龄≥ 30 岁

因此,我们可以编写如下代码。

filtered_list = []
for person in my_dict:
    if person['name'].startswith('C') and person['age'] >= 30:
        filtered_list.append(person)

更快的例子

嗯,上一个例子中的代码没有问题。然而,在这个特别编造的例子中,只有“克里斯”的年龄超过了 30 岁。

所以,如果先写出查名字的条件,有 3 个名字满足(克里斯、切尔西、卡罗尔)。然后,关于年龄的第二个条件将对所有这 3 个人进行双重检查。

但是因为短路评估,如果先写年龄条件,只有克里斯的年龄在 30 以上,会被反复检查名字是否以“C”开头。

在这种情况下,它几乎快了 100%。

6.如果可以使用 For 循环,请不要使用 While 循环

图片由 anncapictures 来自 Pixabay

Python 使用了大量的 C 来提高性能,即 CPython。就循环语句而言,Python 中 For 循环的步骤相对较少,而作为 C 代码运行的步骤比 While 循环多。

所以在 Python 中可以使用 For 循环的时候,就不应该使用 while 循环。这不仅是因为 For-Loop 在 Python 中更优雅,而且性能更好。

较慢的例子

result = 0
max_number = 10i = 0
while i < 10:
    result += i
    i +=1

更快的例子

result = 0
max_number = 10for i in range(max_number):
    result += i

摘要

图片由赫尔维·拉格朗日Pixabay 拍摄

在这篇文章中,我列出了 6 个可以让你的 Python 程序更快的技巧。但是,也需要注意的是,我们不应该总是把性能放在第一位。有时,可读性和简洁性也应该考虑在内。

都是关于平衡的:)

https://medium.com/@qiuyujx/membership

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)

管理 BigQuery 数据访问的 6 个最佳实践

原文:https://towardsdatascience.com/6-best-practices-for-managing-data-access-to-bigquery-4396b0a3cfba?source=collection_archive---------9-----------------------

在 BigQuery 中设置数据环境时,在安全性方面需要了解什么。

杰森·登特在 Unsplash 上拍摄的照片

我们都看到了,也听说了数据泄露及其可能造成的财务和声誉损失。随着我们越来越依赖数据来做出更好的决策,数据正成为任何组织的重要资产。因此,与公司的任何其他资产一样,控制对数据的访问对于保护您的数据至关重要。

幸运的是,现代数据仓库具有强大的内置功能,可以精确控制谁可以访问什么。这通常被称为身份和访问管理或 IAM。云提供商通常设计多个层来控制数据访问,这篇文章旨在揭示 Google 是如何使用 BigQuery 的。

然而,要知道在许多控制层中控制访问的最佳实践可能是一个挑战。这篇文章试图列出我多年来遇到的一些推荐做法。

谷歌云中的资源是如何组织的

BigQuery 是 Google 选择的数据仓库技术。要了解如何控制对 BigQuery 的访问,首先必须了解资源在 Google Cloud 中是如何组织的。

图片来自谷歌云的文档

Google Cloud 的构建方式是,我们可以在资源级别或任何层级授予访问权限,比如项目、文件夹和组织。

如果不需要资源级别的细粒度访问,可以在层次级别授予许可 IAM。换句话说,如果允许所有人访问项目中的每个数据集和表,就没有必要在资源级别明确定义权限。

但是,如果您仍在阅读本文,您很可能希望控制谁可以访问项目中的内容。

BigQuery 的访问控制模式

授予资源级别的细粒度访问权限

Lutz WernitzUnsplash 上拍摄的照片

要在 BigQuery 中查询一个表,需要两个权限:运行查询的权限和查看数据的权限和查看数据的权限。

运行查询的权限可以在任何层次级别上定义。您可以战略性地设置查询运行权限,以获得更好的可见性。例如,如果数据处理被划分到不同的项目中,您可以分别查看与数据转换和使用相关的所有查询开销、查询日志和数据访问日志。

查看数据的权限也可以在分层级别上设置。但是,强烈建议您在项目或资源级别(数据集和表)设置此权限。经验法则是,如果一个角色应该可以访问项目中的所有数据,那么就在项目级别授予它。如果需要限制对某个数据集或表的访问,请在资源级别授予权限。

BigQuery 还能够设置行级和列级安全性,从而允许更细粒度的访问控制。这将成为另一篇文章的好话题。

最小特权

照片由飞:DUnsplash

通俗地说,最小特权就是给予履行职责所需的最少权限。该原则有助于为实体(用户、组和服务帐户)和 GCP 资源创建职责分离。在许多系统上,最低特权是安全的推荐做法。

例如,数据分析师的职责是查询和汇总转换后的数据。对于这个角色,她应该被授予对转换后的数据的只读访问权限,以执行她的工作。授予写访问权限可能意味着数据完整性面临风险。本例中的数据分析师可能会错误地删除或更改生产数据。同样,运营数据分析师只需要访问运营数据,而不需要访问完整的财务或客户数据。

将项目的完全访问权限(所有者或编辑权限)授予每个人通常是一个错误。默认情况下,Google Cloud 创建一个具有编辑权限的计算服务帐户,以在项目中启用计算 API。该帐户非常宽松,可能是一个潜在的安全威胁。最佳做法是禁用此帐户的自动创建,或者在以后删除它。

服务的用户服务帐户。

梁杰森Unsplash 上拍照

你可以在 Google Cloud 中使用两种主要的认证方式:用户账户服务账户。用户帐户是您用来登录控制台的 Google 帐户。另一方面,服务帐户是一个 JSON 密钥文件,您可以用它来认证服务。

这两种身份验证方法的区别在于谁在执行操作。对于用户帐户,用户使用其用户名/密码登录并执行操作。对于服务帐户,它是执行操作的服务(ETL 作业、可视化工具、元数据目录工具)。

这里一个常见的错误是使用一个用户帐户来认证服务。这样做会遇到配额问题,并使控制访问和审计日志变得更加困难。

另一个常见的错误是对每个服务使用一个服务帐户。这也不是推荐的做法,因为您不知道什么服务执行什么操作。此外,由于该帐户用于所有服务,它将是许可的,并增加了违规的机会。

授予组而不是个人帐户访问权限

UnsplashMargarida CSilva 拍摄的照片

这样做的主要原因是为了更好地控制项目中的 IAM 权限。想象一下,如果你有十个人需要访问一个项目中的数据+五个不同的服务帐户,维护谁有权访问什么可以很快失控。

然而,角色的数量将显著低于(或者,在最坏的情况下,等于)人员的数量。因此,更好的方法是基于角色创建一个不同的组,并相应地添加权限,以便更加清晰。

您还可以将一个群组添加为另一个群组的成员,以获得额外的控制层。例如,您可以有一个数据分析师小组。在这个组中,你可以有一个市场分析师组,一个运营分析师组,等等。

使用基础设施即代码(IaC)

丹尼尔·科鲁奇在 Unsplash 上的照片

IaC 使您能够轻松地创建不同的环境,尤其是当您的项目很复杂并且有许多活动部分时。在大型项目中,您可以拥有具有复杂权限和策略的环境。只需为一个环境编写一次代码,并为试运行和开发环境提供同样的东西,就可以节省您的时间。

有了 IaC,您环境中的每一个更改都被版本化,因此您知道谁做了什么更改(假设您将管理权限限制为仅您的 IaC 服务)。您还可以定期扫描您的环境,查看配置和实际环境之间的差异。如果大多数 IaC 服务检测到任何变更,它们会将您的环境恢复到配置。

下面看看我关于这个主题的其他一些文章。

资源分离

Guillaume Bolduc 在 Unsplash 上拍摄的照片

加强安全性的最佳方式之一是分离资源。这意味着为您不想存储在一起的数据创建不同的项目。

一个好的起点是将接收、处理和访问之间的资源分开,以确保只在需要的时候访问数据。通过这种设计,您可以锁定原始数据的接收,并控制哪些数据在访问层可用。一个常见的用例是在将表暴露给数据仓库之前屏蔽或散列个人身份信息(PII)。

结论

在现代云平台中,比如 Google Cloud,有许多层来限制数据访问。我讨论了使用以下最佳实践来确保您有一个安全的数据环境:

  • 授予资源级别的细粒度访问权限
  • 最小特权
  • 服务的用户服务帐户。
  • 授予组而不是个人帐户访问权限
  • 使用基础设施即代码(IaC)
  • 资源分离

在以后的文章中,我将分享如何使用行级安全性、列级安全性和 VPC 服务控制来获得更加安全的数据环境。

干杯✌️

我作为数据工程师学到的 6 个最佳实践

原文:https://towardsdatascience.com/6-best-practices-i-learned-as-a-data-engineer-9d3ad512f5aa?source=collection_archive---------26-----------------------

以及作为数据科学家如何应用它们

图片由皮克斯拜的 Gerd Altmann 提供

当我第一次成为一名数据工程师时,我很幸运(或者很不幸,这取决于你如何看待它)有一位经理,他编写了概述数据库表设计和文件命名约定的开发指南。它甚至为编码语法设置了标准。我当时并不喜欢这些限制,但多年后,我很感激学到了这些对我这个数据科学家有帮助的最佳实践。

1.文件名

作为一名数据工程师,我必须排除其他数据工程师编写的 ETL 代码的故障。我们没有使用 Git 进行源代码控制,文件命名约定使得找到需要调试的源代码变得很容易。

从那以后,我所在的公司中,文件名遍布整个地图,代码分散在多个位置。这种混乱导致了本可以避免的故障诊断延迟。

作为一名数据科学家,你如何应用这一点:

  • 标准化您的文件名,以便您自己和他人可以轻松找到它们。例如,为客户流失模型清理和聚合数据的 Python 脚本可以命名为customer _ churn _ data _ prep . py。作为一名数据科学家,我建立了一百多个模型。当涉众有问题时,标准的命名约定帮助我快速找到我的模型代码。
  • 以数字为前缀表示运行顺序。如果你需要运行 SQL 查询,用 Python 处理数据,训练模型你可以有 3 个文件——1_ customer _ churn pull _ data。sql, **2** 客户流失 _ 聚集准备。py、和3 _customer _ churn _train. py。我已经将模型投入生产,在评分之前我有 6 个步骤,数字前缀帮助我正确地安排了 ETL 过程。

2.表名

作为一名数据工程师,我们遵循表格命名标准,使用户在没有任何文档的情况下也能容易地找到数据。

例如,所有与电子邮件相关的表格都以 电子邮件 开头,后面跟类型。一个带有 email 打开和点击数据的表格被命名为email _ open _ click

从原始数据(如按电子邮件活动汇总的电子邮件打开和点击数)导出的汇总表具有一个 agg 后缀,如email _ campaign _ open _ click _ agg

【VW】开头的视图名称和以 开头的查找表

临时表以 temp 开头,后面是用户的名和姓,即 temp_vyu ,当数据库接*最大存储容量时,如果需要删除表,可以很容易地找到表的所有者。

所有这些命名标准都减少了数据工程师的问题数量,因为表名是不言自明的,并且在我们需要删除旧表时有助于维护。

作为一名数据科学家,你如何应用这一点:

  • 与数据工程师就表格命名标准达成一致,以便您和其他数据科学家能够轻松地理解表格内容。如果您也是数据工程师,请确定命名约定,以便自己和他人更容易找到正确的数据。
  • 如果您在数据库中创建临时表,请使用前缀【temp _,即使这不是必需的,因为有一天您可能会被要求帮助删除数据库中的旧表,这将使您很容易快速创建列表。

3.列名

不仅表名应该不言自明,列名也应该如此。当我刚开始做数据工程师时,我从事整个数据库的 ETL 重写工作。这允许我们在所有表中将标识字段重命名为相同的名称。例如,根据您的创意,客户 ID 字段可以命名为 custIDcust_idcustomer_id 等等。跨表使用相同的名称意味着任何查询客户 ID 的人都自动知道字段名称,而不必查看表模式。

作为一名数据科学家,你如何应用这一点:

  • 与数据工程师一起工作,或者如果您是数据工程师,请在不同的表中使用相同的字段名称作为常见的标识字段,如客户 ID 和电子邮件地址。这将使字段不言自明,并且易于跨表查找。

4。代码变更

我在没有源代码控制的公司工作过。在这种情况下,我会将代码的副本保存在另一个位置,带有一个 readme.txt 文件和日期,以指示在进行进一步编辑之前我保存的代码的日期和版本。

作为一名数据工程师,这种做法节省了我大量的时间。

有一次,我不小心删除了一段花了一天时间更新的代码,但幸运的是,我保存了一个旧版本,不需要从头重写。

另一次,我将代码推向生产,它崩溃了,尽管我在测试期间没有任何问题。直到我将新代码与我的备份进行比较并找到原因后,我才发现问题所在。

作为一名数据科学家,你如何应用这一点:

  • 如果你没有或者不想使用源代码控制,养成在修改代码时备份代码的*惯。如果您在当前代码中遇到了意外的错误,使用旧版本进行比较可以帮助您发现问题。

5.质量保证

每次我对现有的 ETL 作业进行更新时,我都必须将新的输出与原始输出进行比较,以确认只有预期的值发生了变化。我们能够在许多问题到达我们的最终用户之前发现它们。这迫使我学会如何查看数据和发现问题,这个过程至今让我受益匪浅。

作为一名数据科学家,你如何应用这一点:

  • 如果您要对现有流程进行更改,请务必比较结果。你永远不知道你会遇到什么意想不到的问题。传递错误的结果不值得你的名声。

6.生产

作为一名数据工程师,我总是编写代码,期望它最终会投入生产。我们很少有不需要自动化的特殊任务。

作为一名数据科学家,你如何应用这一点:

  • 保持一种生产心态,编写代码,期待有一天它会被自动化。如果可能的话,不要硬编码值和使用变量,请记住,您可能需要在以后的某个时间点使用不同的值重新运行代码。
  • 如果您的模型需要投入生产,请注意软件包和软件版本。我曾经用 Python 3.7 构建了一个模型,但是产品只安装了 Python 2.7 版本。在将我的模型部署到生产环境之前,我不得不花更多的时间在较低的版本上重新训练它。我团队中的另一位数据科学家需要一个 Python 包,但这个包不可用,必须等待它安装好,然后模型才能投入生产。如果您的模型有截止日期,那么由于缺少包和 Python 版本不匹配造成的延迟需要提前考虑。

现在,您已经知道如何作为一名数据科学家应用数据工程最佳实践,我希望这对您的帮助和对我的帮助一样多。

你可能也会喜欢…

* *

6 最佳编程实践

原文:https://towardsdatascience.com/6-best-programming-practices-f2605c5b469c?source=collection_archive---------5-----------------------

每个程序员和数据科学家都应该遵循的六个编程技巧

Pakata GohUnsplash 上拍摄的照片

“编程不在于你知道什么;而是你能想出什么。”——克里斯·派恩

软件行业中众多趋势的演变使得编码成为一个开发人员所拥有的最重要的技能之一。在现代世界中,编程是程序员和开发人员专注于特定任务以完成预期结果并将其公开给广泛的公众受众以从中受益和利用的能力。

掌握基本的编码技能对于成功大多数面试和开发一系列可以添加到你的简历或文件夹中的酷项目来说是非常棒的。然而,为了达到预期的结果并有效地完成您的目标,个人必须注意的最佳编程实践是什么?

在本文中,我们将介绍六种最佳编程实践和技巧,每个程序员和数据科学家都应该遵循这些实践和技巧,以从编码中获得最佳结果。在我们开始阅读这篇文章之前,我建议读者阅读下面这篇文章,它涵盖了学*编程的十个最佳免费网站。

</10-best-free-websites-to-learn-programming-939ec029009b>

1.完善你的缩进,利用注释行:

缩进是 Python 中用来区分不同代码块的空格。在其他编程语言中,比如 Java,我们使用花括号“{ }”来达到这个目的。适当缩进代码在项目工作中起着至关重要的作用。确保你相应地记录你的间距。通常,键盘上的 tab 键(或四个空格)用于 Python 代码的缩进。

另一方面,注释行在编程中也起着至关重要的作用。尽管您在注释行中编写的文本不会以任何方式影响您的代码块或程序,但它在大型项目的开发中起着至关重要的作用。在代码块的帮助下,您可以将您的思维过程和想法传达给其他想要查看您的代码以便更好地阅读和理解它们的熟练开发人员和爱好者。

您应该使用注释行的另一个原因是,当您在很长一段时间后重新访问自己的代码和代码块时,您可能无法立即理解为什么要执行某个特定的操作。在这些情况下,注释行通常会帮助你回忆你的思维过程和想法,使你更快更有效地回忆代码。

2.代码的简化:

当你经常被分配一个复杂的问题时,你的第一个想法通常会导致一个复杂的解决方案,有一个冗长而笨拙的代码块。虽然这并不完全是消极的一面,因为你最终找到了解决问题的方法之一,但重要的是要意识到这还不够。你需要深入思考,探索更多独特的方法来获得解决方案。

在技术或编程面试中,测试你的方式之一是你简化代码的方式。修剪代码并使它们看起来更有效的主要目的是减少问题的整体时间和空间复杂性。在部署阶段,删除额外和不必要的代码块以在更高的级别编写更好的代码,从而以更少的硬件消耗获得更好的性能,这一点至关重要。

举个例子,你的编程水平越高,尽量限制不必要的 for 循环的使用。相反,尝试有效地使用类、函数和匿名函数来产生尽可能好的预期结果。您可以随意查看我的文章《理解 Python 中的高级函数》,以及下面提供的链接中的代码和示例。

3.规划您的方法:

在您一头扎进问题并接触一些代码之前,对于编程爱好者来说,相应地规划他们的方法是至关重要的。对你来说,对一个复杂的问题进行编码并不总是最好的主意。有效地计划你的行动过程并详述细节通常是一个更好的建议。

当你在处理一个你觉得会导致复杂的问题或编程任务时,写下你为这个特殊问题计划的方法通常是一个好主意。你可以选择做更多的研究,更深入地了解如何解决这个问题,或者你可以选择自己尝试在纸上解决这个问题。这样做将有助于你找到如何处理特定任务的方向,而不是一味地编码并希望得到正确的答案。

假设你想解决二分搜索法问题。如果你是一个编程的初学者,你想实现二分搜索法算法的代码,对你来说,了解这个项目的直观理解和工作是必不可少的。如果没有先验知识和对方案背后的模式的基本理解,您将很难理解确切的编码设计。下面提供的文章链接应该是理解二分搜索法算法在 Python 中的实现的一个极好的起点。

4.有效调试:

编程的一个重要方面是遇到和处理错误。有效的调试是每个程序员都必须*惯的一个重要方面,因为无论你在解决程序块或问题上有多擅长,你总是会陷入一个困境,你不知道如何继续。

调试代码有许多方法。对于程序员来说,调试可能涉及一些步骤或方法来找出特定任务的正确解决方案。你可以用谷歌搜索来找出实际错误发生的原因,并访问一些网站来纠正你的错误。

你也可以不断尝试各种解决方案来自己破解答案。我鼓励读者阅读我以前的一篇文章,这篇文章介绍了如何利用 Python 中的内置工具来调试代码。

5.开发项目:

使用任何编程语言进行编码的最大好处是可以用它们开发大量精彩的项目。你可以创建一大堆独特而令人惊叹的项目来添加到你的文件夹或简历中,或者你可以构建这些项目只是为了好玩,来学*一些新的东西并获得进一步的知识。

从零开始完成一个成熟的项目后,你获得的知识量是首屈一指的。在你开始从事大量项目之后,你获得了如此多的经验,并作为一名开发人员和程序员得到了发展。在研究、批判性思维和改进的编程技能的指导下,您获得了将问题可视化并找到适当解决方案的能力。

如果你对自己想要探索什么想法或者想要构建什么独特的项目感到困惑,那么我有一个十五个令人敬畏的 Python 和数据科学项目的列表,你可以开发它们。这些项目将有助于增加你 2021 年及以后的简历和作品集!

</15-awesome-python-and-data-science-projects-for-2021-and-beyond-64acf7930c20>

6.每天编码:

这一点无疑是本文列出的所有其他点中最好的编程实践。实践是在大多数领域取得成功的重要一步。编程就是这样一个领域,你写得越多,你就能想出越多的东西。在编码时,你一定会犯错误。改正这些错误的精神,会让你不会更经常的重复错误,会让你作为程序员的整体发展。

即使你一天都很忙,也要尽量坚持每天至少花几分钟写代码。通过每天编码并保持你的练*时间表,你将使你的大脑不犯重复性错误并提高你的整体效率。除了持续改进,你还将获得更多的知识,发现新的方法和思路来处理不同类型的问题。

我们已经知道每天编码对程序员来说是非常重要的。不管你是什么级别的程序员。不管你是一个刚刚开始学*编码的新手,还是一个正在寻找高水平项目的高级开发人员。每天编码必须被视为你系统中固有的日常活动。查看下面这篇文章,它揭示了为什么每个数据科学家都应该每天编码的五个原因。

</5-reasons-why-you-should-code-daily-as-a-data-scientist-fa7fc6dc92c4>

结论:

Unsplash 上的窗口拍摄

“任何傻瓜都能写出计算机能理解的代码。优秀的程序员会写出人类能理解的代码。”—马丁·福勒

不可否认,编程是当代人需要掌握的最酷、最好的技能之一。对于每一个希望提高编码技能来设计新职业的个人来说,都有广泛的机会。然而,必须利用一些最佳的编程实践来最佳地利用这项技能。

在本文中,我们了解了一些最佳编程实践,它们将帮助大多数程序员随机应变,提高他们的整体编码技能,成为更有才华、更有技能的开发人员。本文中提到的要点对于您选择使用的任何编程语言取得最大成功都是至关重要的。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</5-essential-skills-to-develop-as-a-data-scientist-16442f094c09> </5-nlp-topics-and-projects-you-should-know-about-65bc675337a0> </7-tips-to-crack-data-science-and-machine-learning-interviews-38b0b0d4a2d3> </8-best-visualizations-to-consider-for-your-data-science-projects-b9ace21564a>

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

6 个最佳图像处理项目和有用的资源

原文:https://towardsdatascience.com/6-best-projects-for-image-processing-with-useful-resources-f860f3dfe977?source=collection_archive---------2-----------------------

六个最好的图像处理和机器学*项目,提供有用的链接和技术资源

照片由 Unsplash 上的pav polo拍摄

我们被美丽的视觉效果和丰富多彩的图像所包围。观看自然环境和拍摄照片是一段有趣的时光。虽然我们的眼睛可以轻松地想象图像的颜色和各种概念,但计算机识别这些相同的图像是一个复杂的过程。为了分析这些图像视觉效果,我们利用机器学*或深度学*的图像处理算法来创建精彩的项目。

计算机视觉是现代世界中最有趣的研究领域之一。使用最新的 CV 算法和技术,曾经被认为几乎不可能由更纯粹的机器来执行和计算的任务可以相对容易地实现。随着计算机视觉的所有元素在现代计算时代的兴起,我们可以创建一些高质量的项目。

从我们周围的众多选项和各种图像视觉选择中,我们可以从头开始创建一些顶级项目。在本文中,我们的目标是列出六个最好的图像处理项目,如果需要,可以借助计算机视觉、机器学*或神经网络来实现。

本文中列出的所有项目都是我个人为任何计算机视觉爱好者挑选的六个项目。确保您参考了本文中陈述的有用链接、资源和引用,以获得进一步的指导。他们将带你经历你在处理这些项目时可能遇到的大部分问题。

1.PIL 和 OpenCV 入门

作者截图。原文来源维基

首先,理解图像在自然世界中是如何工作的,以及计算机如何感知它们来处理和分析这些数字视觉效果是非常重要的。所有图像都以 0 的格式和直到 255 的范围来解释。彩色图像的格式是 RGB 格式,其中一个值以三维数组来解释。类似地,对于灰度图像,我们只有由白色和黑色对应物组成的两个光谱。

Python 图像库(PIL)是向 Python 解释器添加图像处理功能的主要方法之一。由于这个库提供了广泛的文件格式支持,您可以有效地执行大多数任务。它具有有效的内部表示和相当强大的图像处理能力。整个核心图像库旨在更快地访问以几种基本像素格式存储的数据元素。因此,这个库是一个很好的起点,因为它为用户提供了一个可访问的通用图像处理工具(查看下面提供的文档链接以了解更多信息)。

下面是一个简单的代码块,用来理解 PIL 库的一些基本特性。

# Importing the required libraries
import numpy as np
from PIL import Image
import PIL# Opening and analyzing an image
image1 = Image.open('Red.png')
print(image1.format)
print(image1.size)
print(image1.mode)

为了进一步实验和理解 pillow library,我建议查看一下官方文档,用这个工具实验更多的图片和模块。

下一个学*创建精彩项目的库是在 open-cv 计算机视觉库的帮助下。一旦您熟悉了枕头库,您就可以在 cv2 库的帮助下开始尝试这些图像的知识。在这个工具的帮助下,您可以操作图像,通过改变它们的尺寸来调整大小,将它们的颜色从一种格式转换为另一种格式,等等。从零开始探索并从这个图书馆中获取尽可能多的知识是值得的。

如果你有兴趣从零开始学*计算机视觉的大部分基本方面,以及解决一些复杂任务的所有相应代码,我建议大家看看下面提供的文章。它涵盖了初学者入门计算机视觉并最终掌握它所需的大部分要素。

2.基于图像的考勤系统

国立癌症研究所Unsplash 上拍摄的照片

在教室里举手说“请讲,女士”或“是的,女士”或其他你想说的话的传统方式正在逐渐消失。随着在线课程的引入,学生和教师可以通过在线平台进行互动,以更传统的方式进行出勤将变得更加困难。然而,计算机视觉来拯救我们,帮助我们创建一个基于图像的考勤系统,在你的像素化图片的帮助下进行在线考勤!

让我们来讨论一些方法,在这些方法中你可能会处理这个问题。一个经典的方法是确保你有一些所有学生和同学的照片。如果无法包含更大的数据集,可以使用数据扩充方法来增加存储的数据量。一旦你能够为这个特定的任务收集到相当数量的数据集,你就可以处理这些图像,并建立一个深度学*模型,以实现顶级的结果。

如果你有兴趣探索与基于图像的考勤系统的任务相关的理论方面,那么研究论文应该是你探索更多理论知识和理解概念的一个梦幻般的起点。然而,如果你对该过程的实际编码实现更感兴趣,那么这篇文章指南应该也能帮助你实现自己的解决方案。

3.面罩检测

照片由安娜斯塔西娅·切平斯卡Unsplash 拍摄

在疫情期间,有一些严格的规定需要遵守,以保持城市、州或国家的礼仪。由于我们不能总是让官方机构关注一些不遵守规则的人,我们可以构建一个面具检测项目,使我们能够判断特定的人是否戴着面具。在此期间,在严格的封锁规定下,实施这个项目来维护社会将是一个绝妙的主意。

因此,一个可以通过跟踪路上或街道上的人来分析他们是否戴着面具来处理整个地区或区域的图像的项目将是一个非常棒的想法。在图像处理算法和深度学*技术的帮助下,你可以计算出戴面具的人的图像。以下用于人脸面具检测的 Kaggle 数据集将是分析训练图像以实现整体高准确度的良好起点。

解决这个问题的最好方法之一是利用迁移学*模型,如 VGG-16、face-net、RESNET-50 和其他类似的架构,看看什么方法可以帮助你达到最佳效果。作为起点,我强烈推荐查看我以前的一篇关于智能人脸锁定系统的文章,其中我们构建了一些高级人脸识别系统。对于没有遮罩的面和有遮罩的面,可以使用类似的方法来解决此类任务。

4.车牌识别

托马斯·米洛特Unsplash 上拍摄

使用字母数字字符识别的最佳项目之一是借助车牌图像。有几种方法可以用来解决图像中嵌入字母、数字和数字的问题。我们可以使用深度学*技术、光学字符识别(OCR)技术、图像处理和自然语言处理(NLP)的结合、计算机视觉方法等等。

您可以处理这个问题的大量方法为您提供了一个机会,让您可以用自己开发的模型探索所有这些方法。找出什么技术将帮助你达到最佳效果是相当有趣的。通过深度学*方法,您可以从 Kaggle 收集所需的数据集和信息,用于车辆牌照检测。一旦你收集了足够的信息,你就可以建立你自己的定制模型或者使用迁移学*模型来看看是什么给了你想要的结果。

如果你想用一种更独特的方法来解决问题,建议你看看我以前的一篇关于光学字符识别(OCR)的文章。使用 OCR 技术,您可以相对轻松地解释图像中的大部分数据。OCR 引擎会尝试分析图像中的字符,并找到合适的解决方案。要详细了解这个主题,请查看下面提供的链接。您还可以尝试其他独特的方法,看看哪种技术产生的效果最好。

5.医学图像分割

Robina Weermeijer 在 Unsplash 上的照片

图像处理、计算机视觉、机器学*和深度学*最重要的贡献之一是在医疗领域。它们有助于分析和可视化许多可能发生在人类身上的高度复杂的异常现象。诸如糖尿病视网膜病变、癌症检测、x 射线分析和其他关键医疗处理任务等任务需要使用深度学*模型和图像处理来获得高度准确的结果。

虽然大多数项目需要高精度的预测,但这种说法在医学领域的图像分割任务中变得更加重要。自 2015 年使用 U-Net 架构进行生物医学图像分割以来,该架构出现了更多变化,并且不断构建许多不同类型的模型,以在每种情况下获得最佳结果。

DICOM 库可以获得接收与医学图像分割相关的任何任务的图像和视频文件的最佳位置之一。通过访问这个链接,你将被引导到一个可以下载医学图像和视频进行科学计算的地方。

您还可以利用 Kaggle 的糖尿病视网膜病变数据集开始一项流行的挑战,即计算眼睛的图像分割以及检测一个人是否患有眼睛疾病。除了上面提到的任务,还有大量的生物医学图像处理和任务可供您使用。请随意测试它们,用它们做实验。

6.情绪和手势识别

雅各布·欧文斯在 Unsplash 上的照片

看着上面的图像,人们可能会想知道这个特殊的手势可以被归类为什么。有几种手势是人们作为一种交流方式扔掉的。借助于适当的图像,人们可以找出对手势进行相应分类的最佳方法。类似地,你可能想弄清楚一张脸上的情绪。无论这个人表现出快乐、悲伤、愤怒或任何其他类似情绪的迹象,你都可以建立一个人工智能模型来执行以下分类。

情绪和手势是人类活动的组成部分。尽管与本文提到的其他一些项目相比有点困难,但我们可以构建一个计算机视觉和深度学*模型来执行以下任务。为了解决这个问题,你可以利用面部情绪识别( Kaggle 的 fer2013 数据集)进行情绪分类,利用美国手语( ASL 字母表数据集)进行手势计算。

一旦我们拥有了所有需要的数据集,你就可以在计算机视觉的帮助下构建你的深度学*架构来实现这些项目。借助神经网络和图像处理的结合,您可以开始研究情绪和手势检测,以获得高质量的结果,同时具有体面的损失和准确性。

下面提供的链接是两个最好的指南,您可以在其中从头开始执行人类情感和手势识别活动。我几乎涵盖了完美计算这些任务所需的每个方面,包括数据集的预处理、数据的可视化以及从头开始构建架构。请随意参考它们,以获得关于执行这些任务的最佳信息。

结论:

照片由达维德·扎维亚Unsplash 上拍摄

5 亿多年前,视觉成为进化“大爆炸”的主要驱动力,寒武纪大爆发导致了动物王国的爆炸性物种形成。5 亿年后,人工智能技术即将改变人类生活、工作、交流和塑造环境的方式。——费——李非

使用人工智能和计算机视觉来处理图像、图片和任何其他类型的视觉效果目前在多个领域都具有巨大的意义。除了本文提到的六个项目之外,还有数百万个项目想法可以让您自己从头开始实施,使您能够更加精通图像处理和计算机视觉任务。

对于任何与图像处理相关的任务,理解图像在核心中是如何工作的变得至关重要。有了这些基础知识和对基本概念的理解,您可以更轻松地实现更复杂的图像处理算法、机器学*方法和深度学*技术。

随着现代应用对图像处理和计算机视觉项目的需求越来越大,对于任何一个热衷于以下领域的人来说,这是投入其宝贵努力和资源的最佳时机。你不仅可以解码图像的特征和工作原理,还可以在高度复杂的任务中运用你的技能,如自动驾驶汽车,以全面改善和提高人们的生活方式。

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</6-best-programming-practices-f2605c5b469c> </5-essential-skills-to-develop-as-a-data-scientist-16442f094c09>

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

数据科学应用的 6 个最佳 Python IDEs 和文本编辑器

原文:https://towardsdatascience.com/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61?source=collection_archive---------1-----------------------

在动态、结构化的开发环境中构建您的应用程序。

照片由Unsplash

程序员问自己的一个问题,尤其是在使用什么编程语言之后的职业生涯之初,是什么 IDE 或文本编辑器会让他们的生活变得更好、更高效。无论您从事什么样的编程,无论是 web 开发、移动/桌面应用程序开发还是数据科学,您对 IDE 的选择都会对您完美完成工作的能力产生巨大的影响。

IDE 和文本编辑器是特殊的开发环境,程序员使用它们来编写代码、测试代码、调试代码,并将其上传到 g itHub——或任何其他 Git 托管网站。正确的 IDE 或文本编辑器应该对大多数编程语言都是灵活的,让你可以很容易地分类和组织你的文件,并允许你轻松地共享它们。

尽管许多 IDE 和文本编辑器提供了许多属性和选项来定制您的开发环境,但是没有绝对最好的 IDE。一切都回到个人喜好上来。有些人喜欢完整的 ide,而有些人喜欢轻量级的文本编辑器。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

本文将介绍开发人员经常使用的 6 大 Python IDEs 和文本编辑器,以使他们的工作流程尽可能的流畅和高效。因此,如果您正在寻找一个 IDE 或文本编辑器,请尝试这些工具,直到找到符合您偏好的为止。

№1:崇高

让我们从我最喜欢的文本编辑器 Sublime 开始吧。Sublime 是一个带有付费版本的免费文本编辑器,您可以使用它来编写、编辑和调试几乎任何编程语言的代码。当你第一次下载并安装 Sublime 的时候,它是一个普通的,有点无聊的文本编辑器。但是,Sublime 的优势来自于你可以根据你打算使用的编程语言安装的附加组件。

Sublime 附加组件最好的部分是,你可以定制它们来满足你的需求,从颜色到整体外观,以及与 GitHub 或其他平台的连接。将 Sublime 设置为完美的开发环境将花费您不到 30 分钟的时间,然后您就可以开始工作了。我将很快写一篇关于为 Python 和数据科学完美设置 Sublime 的文章。

№2: Spyder

接下来是科学 Python 开发环境 Spyder 。Spyder 是一个免费的开源 IDE 开发,尤其是针对 Python。Spyder 最好的一点是与其他 ide 相比它是多么的轻量级。Spyder 是数据科学和机器学*应用程序的一个很好的选择,因为它有一个交互式编码模式,允许您实时分析数据。

Spyder 还让您能够检查整个代码库,或者将其分成几个部分,以便更仔细地查看。它还集成了许多常用的数据科学包,如 NumPy、Pandas、SciPy 和 IPython。但是,也许使用 IDE 的最大优势是它们的集成调试器。Spyder 有一个非常棒的图形调试器,可以让您的测试和错误定位任务变得流畅和容易。

</5-python-debugging-tools-that-are-better-than-print-1aa02eba35>

№3:原子

我们的下一个文本编辑器是原子。Atom 是 GitHub 开发的开源文本编辑器。开发 Atom 是为了支持许多常用的编程语言,如 Java 和 Ruby on Rails。但是,可以对其进行定制,以在编写 Python 代码时提供出色的用户体验。此外,Atom 提供了许多插件,可以使其成为构建数据科学应用程序时使用的最佳编辑器之一,例如允许您执行 SQL 查询的数据 Atom 包。

除了优秀的软件包,Atom 的优势之一是它的社区。Atom 有一个最活跃的社区,该社区一直致力于开发 atom,并使之更好地为开发者服务。不用说,Atom 具有很好的 Git 集成,可以让您的项目版本控制跟踪变得轻而易举。

№4: Visual Studio 代码

其中最完整、应用最广泛的 ide 是 Visual Studio 代码 (VS 代码)。VS Code 是 Python、C、C#和 JavaScript 开发人员非常流行的 IDE。VS 代码是免费的、轻量级的、开源的。但它也为公司提供付费版本。

VS 代码有很多优点,特别是对于初学者,因为当你定义一个函数或者一个类或者有一个小的语法错误时,它提供了点击和指针来帮助你。VS 代码还与 PyLint 有很好的集成,PyLint 是一种 Python linter,用于检查代码中的错误。使用 VS 代码的另一个优点是执行单元测试和 REPL(读取-评估-打印循环)操作非常容易。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

№5:皮查姆

如果你正在学* Python,那么你可能会使用我们列表中下一个 IDE。PyCharm 可能是最著名的 Python IDE。它最初是为 Python 开发的,这是它最大的优势。虽然支持多种编程语言很好,但是为一种语言构建特定的 IDE 通常可以提供更健壮的开发环境。

PyCharm 提供了许多 Python 特性,比如代码/错误突出显示、Git 集成和强大的图形调试器。PyCharm 代码编辑器还允许您自定义其外观和颜色,以符合您的舒适。此外,PyCharm 有许多插件,您可以添加这些插件来扩展它的功能。

№6: Jupyter 笔记本

最后,也是最受数据科学社区欢迎的是 Jupyter 笔记本。如果不提到 Jupyter 笔记本,我就无法创建这个列表。Jupyter 代表 Julia、Python 和 r。Jupyter Notebooks 是一个开源、免费的开发环境,广泛应用于编程社区,因为它功能多样、健壮,并使代码文件易于共享。

Jupyter Notebook 使开发人员能够将代码位与 markdown、HTML 和 LaTeX 文本混合在一起。Jupyter notebook 是一个基于服务器的结构,易于在浏览器中使用和操作。由于 IPython 的使用,它强大的可视化能力使它成为人们的最爱,特别是在数据科学和量子计算方面。Jupyter Notebook 的扩展是 Jupyter Lab ,它提供了更多的功能,就像一个可视化调试器。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

外卖食品

当您必须编写、读取和调试数百行甚至数百万行代码时,您选择的 IDE 或文本编辑器将对您的工作流程产生重大影响。拥有正确的 IDE 或文本编辑器意味着你将有语法高亮,容易的文件编辑和组织,以及容易的共享和上传你的作品。

但是,现在有数百种 ide 和文本编辑器,尝试所有这些并不是最可行或最省时的解决方案。因此,在这篇文章中,我向您推荐了 6 种 Python IDEs 和文本编辑器,如果您想购买 IDE 或文本编辑器,可以从中选择。

本文中提出的 6 个 ide 和文本编辑器是通用的、灵活的,并且提供了大量的选项,您可以使用它们来定制构建一个高效、流畅的工作环境,使您能够轻松地执行任务。所以,试试这些 ide 和文本编辑器,看看哪一个最适合你的个性和需求。

每个有抱负的数据科学家都应该了解的 6 个特征

原文:https://towardsdatascience.com/6-characteristics-that-every-aspiring-data-scientist-should-know-about-4c34873bc89?source=collection_archive---------32-----------------------

envato elementsChanut_industries 使用图像创建(经许可)。

根据 ACM 数据科学任务组的研究

大数据和计算进步的优势导致数据科学成为一个无所不包的领域,可以帮助从数据中提取知识和价值。*年来,这种受欢迎的程度已经见证了指数级的增长和炒作,促成了对数据专业人员的巨大市场需求。有鉴于此,培训新一代数据科学家的最佳课程存在巨大空白。数据科学是一个如此独特的领域,因为它是跨学科的,并且可能根据观察者的不同而呈现不同的含义。

2017 年,计算机械协会的教育委员会成立了 ACM 数据科学任务组,以集思广益的方式为数据科学本科生推荐课程。在本文中,我们将探讨该计划所建议的数据科学毕业生的一些理想特征。

1.培养面向数据的思维方式

建议学*数据科学的人接受一种非常注重数据的心态,特别是数据的收集和数据的应用,以通过适当的分析做出有益的发现和改进。

数据科学给人类带来的好处包括:

  • 一个城市的空气质量数据可能导致危险污染的消除或哮喘预警信号的发布。
  • 患者数据收集可以为疾病诊断和治疗提供新的见解。
  • 实时交通数据收集可以导致主动的交通缓解措施。

可能性是无限的,数据科学对改善企业、社会以及最终建设更美好未来的贡献是巨大的。

尽管有其优势,人们也应该意识到其意想不到的后果的可能性。

因此,任何数据科学家也应该有强烈的职业和道德责任感。因此,道德和负责任的人工智能等术语探索了这一重要领域。

2.数据科学是一个跨学科领域

数据科学从根本上说是一个跨学科领域,包含以下关键要素的集成:

  • —为数据分析提供数据和上下文
  • —为数据分析、探索性数据分析、建模和推理提供基础
  • 计算机科学 —构成用于数据处理、数据结构和算法、机器学*以及模型部署的计算机硬件和软件

数据科学的跨学科性质。图片来自[1]。

数据科学不是这三部分的随意集合。为了交付有意义的结果,数据科学需要这三个组件的正确集成。

因此,这仍然是任何教授数据科学的教育项目的核心挑战。不可能把这三个元素的每一个都包含进来,但是我们的目标是创造一些独特的东西,把每个元素的 关键 元素都包含进来。因此,不了解这些元素中的每一个都是可以的,但是要抓住它们的核心。

数据科学的魅力可能在于其多样性,从业者拥有独特的技能组合,不仅可以从数据中提取知识和见解,还可以传达和练*引人入胜的故事,以便利益相关者可以了解分析结果。

3.探索当前的数据科学前景

为了探索数据科学领域的当前发展水平,ACM 数据科学工作组在 2018 年初对来自学术界(672)和工业界(297)的总共 969 名 ACM 成员进行了一项调查。

3.1.学术部门

当被问及该机构是否提供数据科学的学术项目时,结果如下:

  • 47%的受访者表示他们不提供数据科学本科课程,而其余 53%的受访者提供数据科学的全学士学位。
  • 提供数据科学学士学位的学院已经开设了编程和统计方面的必修课程。这些程序中的大多数还需要数据管理原则、概率、数据结构和算法、数据可视化、数据挖掘和机器学*。此外,这些课程还涵盖了伦理学、微积分、离散数学和线性代数等主题,以及一门与上下文中的数据科学相关的必修课。
  • 这些数据科学的学术项目中的很大一部分位于计算机科学系。
  • 超过一半的项目报告称,每年从该项目毕业的学生不超过 10 人。

3.2.工业部门

当被问及公司希望应聘者在数据科学和计算方面有什么经验时,结果如下:

  • 48%的人表示,他们寻找拥有数据科学、分析或相关教育背景学位的候选人。
  • 行业受访者报告的经验或技能与学术数据科学项目提供的经验或技能不谋而合。值得注意的一点是,雇主报告说,他们需要更多的计算技能,而不是数学或统计。

4.数据科学知识体系

4.1.知识领域

这些知识构成了数据科学的计算能力。它主要由以下 11 个知识领域组成:

  1. 分析和演示
  2. 人工智能
  3. 大数据系统
  4. 计算和计算机基础
  5. 数据获取、管理和治理
  6. 数据挖掘
  7. 数据隐私、安全性、完整性和安全性分析
  8. 机器学*
  9. 职业化
  10. 编程、数据结构和算法
  11. 软件开发和维护

ACM 数据科学任务组定义的数据科学知识体系。图片来自[2]。

4.2.为子领域主题分配能力级别

由于数据科学是一个广阔的领域,因此期望有抱负的数据科学家拥有所有主题的完整和全面的知识是不合理的。因此,子领域的这种分级有助于现实地设定对他们在不同主题上的能力水平的期望。

应该注意的是,这些知识领域可以进一步划分为子领域。接下来,这些知识领域的子领域的推荐能力等级按以下方式分级:

  • Tier 1 (T1) —所有数据科学毕业生都应该掌握这些主题
  • Tier 2(T2)——数据科学专业的毕业生应该掌握大部分 T2 项目。
  • 选修(E)——代表重要但被视为构成选修一部分的项目

5.能力框架

在上一节中,我们简要地提到了将 11 个知识领域的子领域划分为能力等级的能力这一术语,以便提供一个学生在毕业时应该掌握这些主题的程度的总体概念。

那么能力到底是什么?

韦氏词典将 能力 定义为

具有足够的知识、判断、技能或力量的品质或状态(如对特定的职责或在特定的方面)

实际上,我们可以认为能力是一个人在工作中表现出来的工作表现的高级水平。

人们普遍认为,大学的成功和职业准备需要学生发展属于三个关键维度的各种属性,包括知识、技能和性格。

因此,

能力=知识+技能+性格

在能力的背景下,

知识 →证明对数据科学中的核心概念和内容的熟练程度,以及将新发现的知识应用到新情况中。

技能 →随着时间的推移而成熟的能力和策略,这是通过刻意练*和与他人互动(即向他人学*)而实现的。它可以通过实践活动获得,如基于问题的作业和真实世界的项目。

性格 →执行任务的倾向,以及知道何时以及如何参与任务的判断。舒斯勒[3]对处置的定义如下:

"关心的不是人们有什么能力,而是人们倾向于如何使用这些能力."

总之,基于能力的数据科学课程方法有助于大学和学术机构设计能够赋予学生能力并实现 学*成果 (学生在完成一门课程后应该了解和展示的内容)的计划。

6.数据科学毕业生的 6 个特征

建议有抱负的数据科学家或数据科学专业的毕业生在知识体系描述的所有领域都具备基本能力。还应注意的是,知识主体中未明确列出的其他能力也是可取的,这主要包括(沟通、数据讲述等软技能。).

6.1.数学、统计和计算的基本技能

数据科学专业毕业生应具备以下 计算 技能:

  • 对计算有基本的了解(编程、数据库和互联网使用)。
  • 能够用一种或两种通用语言(Python 或 R)编程。
  • 熟悉一些常见的库,如 Python 中的 scikit-learn、R 包和一些特定于方法或领域的库。
  • 根据需要,愿意学*新的语言和库。

在数学方面,他们还应该精通:

  • 应用数学原理,如多元微积分、线性代数、最优化和图论

就统计数据而言:

  • 概率和基本统计方法。

在高层次上,他们应该能够轻松阅读面向从业者的出版物,其中包括与基础数学和统计术语相关的技术描述,以及对算法和实验数据的高层次讨论。他们还应该熟悉在数据项目的实现中使用许多公共数据存储库。

6.2.适应在快节奏的学科中工作

随着数据科学的不断发展,新的方法、工具和应用领域不断涌现。有抱负的数据科学家也应该通过各种媒介(如会议、研讨会等)在终身学*追求中茁壮成长。)以及与他们的专业同行和同事一起学*。

6.3.对应用领域的兴趣

数据科学专业的毕业生应该理解应用领域的使命、困难和限制,以便引导分析的重点以及选择适当的方法。这要求有抱负的数据科学家有广泛的兴趣、强烈的好奇心、快速的学*能力、强大的沟通能力、对客户主要问题的同情和关注。

6.4.意识到更广泛和非技术性的影响

除了构建模型,数据科学家还应该了解时事,以及潜在数据可能具有的社会和道德含义。这将有利于规划项目的行动过程,以便不违反任何隐私或安全问题。

6.5.很强的沟通技巧

拥有强大的沟通技巧也将使数据科学家向客户和利益相关者传达复杂的发现以及问题的技术基础。因为归根结底,如果数据科学家不能有效地沟通,他们就无法说服相关方做出明智的、由分析驱动的决策。

6.6.对专业责任的承诺

作为数据专业人员,数据科学家必须对其分析中使用的数据集的社会、文化和法律影响有良好的公众意识。此外,他们还应该了解在他们的分析中使用的工具的技术限制以及他们自己的个人限制,以便客观地规划他们的项目。

结论

数据科学教育中最具挑战性的问题之一是跨学科元素的无缝集成,以便所有部分可以和谐地一起工作来支持决策过程。我们希望,对 ACM 数据科学任务组提出的本文中讨论的 6 个特征的认识,将为有抱负的数据科学家提供建设性的指导,使他们能够适应自己的数据科学之旅。随着时间的推移,随着他们承担更多的责任、项目和管理角色,他们会自然而然地成熟为初级、中级和最终高级数据科学家。有鉴于此,这条路不会一帆风顺,可能会有弯路、挫折和障碍。客观、开放和成长的心态将有助于数据科学家在数据之旅中学*和成熟。

参考

[1]丹尼卢克 A,雷迪格 A,巴克 S,卡塞尔 L,麦克盖特里克 A,钱 W,塞尔温 C,王 H. 2019。大学本科生的计算能力
数据科学课程(初稿),ACM 数据科学任务组,计算机械协会。可在http://dstf.acm.org/DSReportInitialFull.pdf买到

[2] Danyluk A 和 Leidig P. 2021。大学数据科学课程的计算能力,ACM 数据科学任务组,计算机械协会。可从 https://www . ACM . org/binaries/content/assets/education/courses-recommendations/dstf _ ccdsc 2021 . pdf 获得

[3]舒斯勒法学博士,2006 年。定义处置:涉过浑水。《教师教育家》,第 41 卷第 4 期。

订阅我的邮件列表,获取我在数据科学方面的最佳更新(偶尔还有免费赠品)!

关于我

我是泰国一所研究型大学的生物信息学副教授和数据挖掘和生物医学信息学负责人。在我下班后的时间里,我是一名 YouTuber(又名数据教授)制作关于数据科学的在线视频。在我做的所有教程视频中,我也在 GitHub 上分享 Jupyter 笔记本(数据教授 GitHub page )。

**https://www.youtube.com/dataprofessor

在社交网络上与我联系

✅YouTube:http://youtube.com/dataprofessor/
♇网站:http://dataprofessor.org/(在建)
♇LinkedIn:https://www.linkedin.com/company/dataprofessor/
♇Twitter:https://twitter.com/thedataprof/
♇Facebook:http://facebook.com/dataprofessor/
♇github:https://github.com/dataprofessor/
♇insta**

下一个回归项目的 6 个通用指标

原文:https://towardsdatascience.com/6-common-metrics-for-your-next-regression-project-4667cbc534a7?source=collection_archive---------22-----------------------

优势、劣势和主要陷阱

你训练了一个模特,现在呢?或者,你已经训练了多个模型;你如何决定哪一个是最好的?好吧,我们问问谷歌。嗯,谷歌推荐了许多可以用来评估你的模型的指标。但是现在,这变成了一个元问题,我应该使用什么度量来确定使用什么模型?因此,这里列出了一些常用指标,以及它们的优点、缺点和细微差别:

Kelly SikkemaUnsplash 上拍摄的照片

对于下面的部分,y 是真实值,y-hat 是预测值,n 是测试实例的数量,并且 i 从 1 到 n。此外,所有指标都是在一个看不见的测试集上评估的。

绝对平均误差

图片作者。由 latex2png 生成

平均绝对误差是一个非常直观的指标,因此也是一个流行的指标。它只是预测值和真实值之间的平均距离。为了避免误差相互抵消,我们计算每个误差的绝对值。最好的模型通常是 MAE 最低的模型。然而,当选择 MAE 作为您的度量标准时,有一些特性需要考虑。

虽然它很容易理解,但是 MAE 也有一些缺点。例如,它不能告诉你你的模型是倾向于高估还是低估,因为任何方向信息都被绝对值破坏了。此外,该指标可能对大的异常值不敏感。看看下面的例子。

图片作者。由 latex2png 生成

在左边,这个模型在这里和那里有一点偏差。然而,在右边,模型以更大的差距错过了尾端的标记,而在开始和中间是完美的。然而,两者的 MAEs 是相同的。如果您决定使用这个度量标准,那么绘制误差图来查看任何异常值是一个好主意,就像案例 2 一样。总而言之,如果你想要一个惩罚大错误的标准,你在别的地方会有更好的运气。

均方误差

图片作者。使用 latex2png 生成。

这让我想到了均方误差。像 MAE 一样,当我们平方每一个计算误差时,我们正在破坏方向信息。MSE 也总是大于或等于 0。然而,我们现在能够区分上述两种模型。

图片作者。使用 latex2png 生成。

有趣的是,MSE 与臭名昭著的偏差-方差权衡有关。可以看出,给定测试点的预期测试 MSE 可以写成[1]:

图片作者。使用 latex2png 生成。

其中下标 0 是测试数据点的索引,ϵ是数据中的不可约或噪声。

方差是指当我们改变训练集时 y-hat 改变的量。通常,更灵活的方法具有更高的变化程度。方差也取决于我们有多少数据。训练数据集越大,方差越低。因此,我们可以在大量数据的限制下,根据模型的偏差和随机噪声来解释给定测试数据点的 MSE。

当我们试图用简单的东西来估计预测因子和目标之间的复杂关系时,就会产生偏差。例如,我们经常假设 x 和 y 具有线性或多项式关系,因为我们知道这些方程的形式,这将问题简化为我们可以估计的几个参数。实际上,x 和 y 可能没有这样的关系。

最后,MSE 的一个主要缺点是 y 的单位是平方的,这意味着很容易误解最终结果。

鲁尔均方误差

图片作者。使用 latex2png 生成。

我们开平方根怎么样?RMSE 和 MSE 非常相似,除了 RMSE 更方便,因为它和 y 有相同的单位。

图片作者。使用 latex2png 生成。

然而,你有没有尝试过转换你的目标,看看你是否得到一个更好的适合?比如取 y 的对数。然后你计算两种方法的 RMSE,你会发现一个比另一个高。这不是一个公平的比较,因为这两个值有不同的单位。解决这个问题的一个方法是除以 y 的某个属性,得到一个无单位的度量,称为归一化均方根误差。

归一化均方根误差

我这里没有任何方程,因为有很多东西可以用来除均方根。一些常见的选择是 y 的平均值、y 的最大值和最小值之差、标准差和四分位距。何时选择什么是微妙的事情,如果你感兴趣的话,[2]可以提供更深入的解释。

均方根对数误差

图片作者。使用 latex2png 生成。

我认为这个度量标准是几年前由 Kaggle 提出的[3]。当您想要增加如何惩罚错误的方向时,应该使用此指标。在这种情况下,我们告诉度量标准对低估的惩罚要多于高估。例如,假设 y=1。如果我们的模型给出 y-hat = 0,那么误差就是[log(1/2)] = 0.09。但是,如果模型给出 y-hat=2,那么误差就是[log(3/2)] = 0.03。如果我们使用 MSE,那么我们的误差无论如何都是 1。

此外,该指标还考虑了真实值和预测值的相对比例。例如,如果 y=9,y-hat=99,则误差为 1。另一方面,如果 y=99,y-hat=999,那么误差仍然是 1。因此,当目标值的范围很大时,这种度量很方便,并且当预测值和真实值都很大时,您不希望惩罚大的错误。

然而,我在这里还没有找到关于一些陷阱的讨论。如果你看看 log(x)图,你会发现 x 不能等于或小于 0。这意味着我们的对数(y-hat+1 / y+1)内部的自变量不能等于或小于 0。然后,还有一个附加的约束,y 不能是-1。否则,整件事就完了。

平均绝对百分比误差

图片作者。使用 latex2png 生成。

MAPE 看起来像 MAE 的表亲,额外的好处是它是无单位的。然而,引入除法也有一些主要的缺点。例如,在非常小的 y_i 或 y_i = 0 的情况下,MAPE 可以爆炸或根本不可计算。它还继承了 MAE 的一个问题,即每个误差的大小是否没有上限(尽管名字上写着“百分比”)。

总结

我希望你喜欢这个列表,并且学到了一些新的东西。接下来的只是我的看法。当我阅读这些指标时,我经常看到提到“可解释性”。我不太确定“可解释性”是什么意思,也不知道是否已经达成共识。我对这些指标的解释和理解通常基于它们在特定情况下的表现。总而言之,当有其他指标更像我们想要的方式,但更难解释时,我们应该在多大程度上强调一个指标的“可解释性”?

保持联系

我喜欢写关于数据科学和科学的文章。如果你喜欢这篇文章,请在 Medium 上关注我,加入我的电子邮件列表,或者成为 Medium 会员(如果你使用这个链接,我将收取你大约 50%的会员费),如果你还没有的话。下一篇帖子再见!😄

来源

[1] Gareth James,Daniela Witten,Trevor Hastie,Robert Tibshirani。统计学*导论:在 R (2013)中的应用

[2]奥托,S.A. (2019 年 1 月 7 日)。如何使 RMSE 正常化。https://www . marinedata science . co/blog/2019/01/07/normalizing-the-RMSE/

[3]https://www . ka ggle . com/carlolepelaars/understanding-the-metric-rmsle

[4]https://en . Wikipedia . org/wiki/Mean _ absolute _ percentage _ error

我最*遇到的 6 个很酷的 Python 库

原文:https://towardsdatascience.com/6-cool-python-libraries-that-i-came-across-recently-72e05dadd295?source=collection_archive---------4-----------------------

图片由 Free-Photos 来自 Pixabay

面向机器学*的出色 Python 库

Python 是机器学*不可或缺的一部分,库让我们的生活更简单。最*,我在做我的 ML 项目时遇到了 6 个很棒的库。他们帮我节省了很多时间,我将在这个博客中讨论他们。

1.纯文本

一个真正不可思议的库,当你需要处理抓取或社交媒体数据时,纯文本应该是你的首选。最酷的是,它不需要任何冗长的代码或正则表达式来清理我们的数据。让我们看一些例子:

装置

!pip install cleantext

例子

#Importing the clean text library
from cleantext import clean# Sample texttext = """ Zürich, largest city of Switzerland and capital of the canton of 633Zürich. Located in an Al\u017eupine. ([https://google.com](https://google.com)). Currency is not ₹"""# Cleaning the "text" with clean textclean(text, 
      fix_unicode=True, 
      to_ascii=True, 
      lower=True, 
      no_urls=True, 
      no_numbers=True, 
      no_digits=True, 
      no_currency_symbols=True, 
      no_punct=True, 
      replace_with_punct=" ", 
      replace_with_url="", 
      replace_with_number="", 
      replace_with_digit=" ", 
      replace_with_currency_symbol="Rupees")

输出

从上面,我们可以看到单词 Zurich 中有 Unicode(字母“u”已被编码),ASCII 字符(在 Al\u017eupine 中。)、卢比货币符号、HTML 链接、标点符号。

您只需在 clean 函数中提到所需的 ASCII、Unicode、URL、数字、货币和标点符号。或者,可以用上述函数中的替换参数来替换它们。例如,我把卢比符号换成了卢比。

完全没有必要使用正则表达式或长代码。非常方便的图书馆,特别是如果你想清理刮或社会媒体数据的文本。根据您的需求,您也可以单独传递参数,而不是将它们组合在一起。

更多详情,请查看这个 GitHub 库

2.drawdata

Drawdata 是我发现的另一个很酷的 python 库。你遇到过多少次需要向团队解释 ML 概念的情况?这种情况一定会经常发生,因为数据科学就是团队合作。这个库可以帮助你在 Jupyter 笔记本中绘制数据集。就我个人而言,当我向我的团队解释 ML 概念时,我真的很喜欢使用这个库。向创建这个库的开发人员致敬!

Drawdata 只针对四类的分类问题。

装置

!pip install drawdata

例子

# Importing the drawdata 
from drawdata import draw_scatterdraw_scatter()

输出

作者图片

执行 draw_Scatter()后,上述绘图窗口将打开。很明显,有四类,即 A、B、C 和 d。你可以点击任何一类,画出你想要的点。每个类别代表绘图中的不同颜色。您还可以选择将数据下载为 csv 或 json 文件。此外,数据可以复制到你的剪贴板,并从下面的代码读取

#Reading the clipboardimport pandas as pd 
df = pd.read_clipboard(sep=",")
df

这个库的局限性之一是它只给出了四个类的两个数据点。但除此之外,绝对是值得的。更多详情请查看这个 GitHub 链接

3.Autoviz

我永远不会忘记我使用 matplotlib 进行探索性数据分析的时间。有许多简单的可视化库。然而,我最*发现了 Autoviz,它可以用一行代码自动可视化任何数据集。

装置

!pip install autoviz

例子

我在这个例子中使用了虹膜数据集。

# Importing Autoviz class from the autoviz library
from autoviz.AutoViz_Class import AutoViz_Class#Initialize the Autoviz class in a object called df
df = AutoViz_Class()# Using Iris Dataset and passing to the default parametersfilename = "Iris.csv"
sep = ","graph = df.AutoViz(
    filename,
    sep=",",
    depVar="",
    dfte=None,
    header=0,
    verbose=0,
    lowess=False,
    chart_format="svg",
    max_rows_analyzed=150000,
    max_cols_analyzed=30,
)

以上参数为默认参数。更多信息,请点击查看

输出

作者图片

我们可以看到所有的视觉效果,并用一行代码完成我们的 EDA。有许多自动可视化库,但我真的很喜欢熟悉这一个。

4.米托

大家都喜欢 Excel 吧?这是在第一个实例中探索数据集的最简单的方法之一。几个月前我偶然发现了米托,但只是最*才尝试,我绝对喜欢它!

这是一个 Jupyter-lab 扩展 python 库,支持 GUI,增加了电子表格功能。您可以加载 csv 数据并以电子表格形式编辑数据集,它会自动生成 Pandas 代码。非常酷。

米托真的值得一整篇博文。不过,今天就不多赘述了。这里有一个简单的任务演示。更多详情,请点击查看

装置

**#First install mitoinstaller in the command prompt** pip install mitoinstaller**# Then, run the installer in the command prompt**
python -m mitoinstaller install**# Then, launch Jupyter lab or jupyter notebook from the command prompt** python -m jupyter lab

有关安装的更多信息,请点击查看

**# Importing mitosheet and ruuning this in Jupyter lab**import mitosheet
mitosheet.sheet()

执行上述代码后,mitosheet 将在 jupyter 实验室中打开。我在用虹膜数据集。首先,我创建了两个新列。一个是平均萼片长度,另一个是总萼片宽度。其次,我改变了平均萼片长度的列名。最后,我为平均萼片长度列创建了一个直方图。

遵循上述步骤后,代码会自动生成。

输出

作者图片

为上述步骤生成了以下代码:

from mitosheet import * # Import necessary functions from Mito
register_analysis('UUID-119387c0-fc9b-4b04-9053-802c0d428285') # Let Mito know which analysis is being run# Imported C:\Users\Dhilip\Downloads\archive (29)\Iris.csv
import pandas as pd
Iris_csv = pd.read_csv('C:\Users\Dhilip\Downloads\archive (29)\Iris.csv')# Added column G to Iris_csv
Iris_csv.insert(6, 'G', 0)# Set G in Iris_csv to =AVG(SepalLengthCm)
Iris_csv['G'] = AVG(Iris_csv['SepalLengthCm'])# Renamed G to Avg_Sepal in Iris_csv
Iris_csv.rename(columns={"G": "Avg_Sepal"}, inplace=True)

5.格拉姆 former

另一个令人印象深刻的库是 Gramformer,它基于生成模型,帮助我们纠正句子中的语法。这个库有三个型号,它们有一个检测器、一个荧光笔和一个校正器。检测器识别文本是否具有不正确的语法。荧光笔标出错误的词类,校正器改正错误。Gramformer 是一个完全开放的源代码,目前处于早期阶段。但它不适合长段落,因为它只在句子层面上起作用,并且已经针对 64 个长句子进行了训练。

目前,校正器和荧光笔模型有效。让我们看一些例子。

装置

!pip3 install -U git+https://github.com/PrithivirajDamodaran/Gramformer.git

实例化 Gramformer

gf = Gramformer(models = 1, use_gpu = False) # 1=corrector, 2=detector (presently model 1 is working, 2 has not implemented)

例子

#Giving sample text for correction under gf.correctgf.correct(""" New Zealand is island countrys in southwestern Paciific Ocaen. Country population was 5 million """)

输出

作者图片

从上面的输出中,我们可以看到它纠正了语法甚至拼写错误。一个非常神奇的库,功能也非常好。我在这里没有试过荧光笔,你可以试着查看这个 GitHub 文档来获得更多的细节。

6.造型器

我在 Gramformer 的积极经历鼓励我寻找更多独特的图书馆。我就是这样找到了 Styleformer,另一个非常吸引人的 Python 库。Gramformer 和 Styleformer 都是由 Prithiviraj Damodaran 创建的,并且都基于生成模型。向开源 it 的创造者致敬。

Styleformer 帮助将非正式句子转换为正式句子,正式句子转换为非正式句子,主动句子转换为被动句子,被动句子转换为主动句子。

让我们看一些例子

装置

!pip install git+https://github.com/PrithivirajDamodaran/Styleformer.git

实例化 Styleformer

sf = Styleformer(style = 0)# style = [0=Casual to Formal, 1=Formal to Casual, 2=Active to Passive, 3=Passive to Active etc..]

例子

# Converting casual to formal sf.transfer("I gotta go")

# Formal to casual 
sf = Styleformer(style = 1)     # 1 -> Formal to casual# Converting formal to casual
sf.transfer("Please leave this place")

# Active to Passive 
sf = Styleformer(style = 2)     # 2-> Active to Passive# Converting active to passive
sf.transfer("We are going to watch a movie tonight.")

# passive to active
sf = Styleformer(style = 2)     # 2-> Active to Passive# Converting passive to active
sf.transfer("Tenants are protected by leases")

看到上面的输出,它转换准确。在我的一次分析中,我使用这个库将休闲转换为正式,尤其是社交媒体帖子。更多详情,敬请查看 GitHub

您可能对前面提到的一些库很熟悉,但是像 Gramformer 和 Styleformer 这样的库是最*才出现的。它们被极度低估了,当然也值得被了解,因为它们节省了我很多时间,我在 NLP 项目中大量使用了它们。

感谢阅读。如果你有什么要补充的,欢迎随时留言评论!

你可能也喜欢我以前的文章 五个用于数据科学的酷 Python 库

你喜欢阅读这个博客吗?然后, 成为 的一员,加入好奇心灵的社群!

你应该知道的 6 个很酷的 Python 技巧

原文:https://towardsdatascience.com/6-cool-python-tricks-you-should-know-bab1b6a42446?source=collection_archive---------10-----------------------

超越常规

Unsplash 上的网络甜甜圈拍摄的照片

*年来,数据科学经历了巨大的发展。Python 作为数据科学领域最常见的编程语言,也越来越受欢迎。

在本文中,我将提到 6 个我认为非常酷的 Python 技巧。它们还会通过提供完成某些任务的实用方法,让你的生活变得更轻松。

要成为一名优秀的程序员,仅仅编写代码来完成给定的任务是不够的。你的程序应该在时间和计算复杂度方面高效。此外,代码应该是干净的,易于阅读和调试,并可维护。

本文中的技巧将帮助您实现编写干净高效代码的最终目标。

1.部分

切片是对象,因此可以存储在变量中。一些数据结构允许索引和切片,例如列表、字符串和元组。

我们可以使用整数来指定切片的上下限,或者使用切片对象。

s = slice(3,6)lst = [1, 3, 'a', 'b', 5, 11, 16]
text = 'DataScience'
tpl = (1,2,3,4,5,6,7)print(lst[s])
['b', 5, 11]print(text[s])
aScprint(tpl[s])
(4, 5, 6)

切片 s 表示从第四元素到第六元素的切片。我们将相同的切片对象应用于列表、字符串和元组。

2.交换变量

我们很可能会遇到需要交换两个变量的值的情况。一种方法是使用中间变量来临时保存值。

a = 'John'
b = 'Emily'c = a
a = b
b = cprint(a)
'Emily'print(b)
'John'

这种方式有点乏味。Python 提供了一种更好的交换方式。

a = 20
b = 50a, b = b, aprint(a)
50print(b)
20

3.对列表进行排序

假设我们有一个列表列表。

lst = [[2, 7], [7, 3], [3, 8], [8, 7], [9, 7], [4, 9]]

我们可以通过使用带有 lambda 函数的 sort 函数,根据内部列表的第一项或第二项对列表进行排序。

lst.sort(key = lambda inner:inner[1])print(lst)
[[7, 3], [2, 7], [8, 7], [9, 7], [3, 8], [4, 9]]

列表根据第二项排序。我们可以对第一个项目做同样的事情,只需将 1 改为 0。

lst.sort(key = lambda inner:inner[0])print(lst)
[[2, 7], [3, 8], [4, 9], [7, 3], [8, 7], [9, 7]]

4.参数解包

假设我们有一个给定数字相乘的函数。

def mult(a, b, c):
   return a * b * cmult(2, 3, 4)
24

如果我们只需要将三个数相乘,这个函数就能很好地工作。必须给出正好三个数字。通过使用参数解包,我们可以使函数更加灵活。

def mult(*args):
   result = 1
   for i in args:
      result *= i
   return result

现在 mult 函数能够乘以任意数量的值。

mult(2, 3)
6mult(2, 3, 4)
24mult(2, 3, 4, 5)
120

参数解包在 Python 中非常常用。如果你阅读一个包或库的文档,你一定见过 *args 和**kwargs

5.分解收藏

假设我们有一个返回两个值的元组的函数,我们想将每个值赋给一个单独的变量。一种方法是使用如下索引:

tpl = (1, 2)x = tpl[0]
y = tpl[1]print(x, y)
1 2

有一个更好的选项,允许我们在一行中执行相同的操作。

x, y = tplprint(x, y)
1 2

它可以扩展到具有两个以上值的元组或一些其他数据结构,如列表或集合。

x, y, z = {1, 2, 3}print(x, y, z)
1 2 3x, y, z = ['a', 'b', 'c']print(x, y, z)
a b c

6.f 弦

在字符串中添加变量是一种常见的做法。f 弦是迄今为止最酷的做法。为了更好地欣赏 f 字符串,让我们先用 format 函数执行操作。

name = 'John'
age = 15print("{} is {} years old".format(name, age))
John is 15 years old

我们通过在最后使用 format 函数来指定花括号内的变量。f 字符串允许在字符串中指定变量。

print(f"{name} is {age} years old")
John is 15 years old

f 字符串更容易理解和输入。此外,它们使代码更具可读性。

结论

我们已经介绍了 6 个简单却非常实用的技巧。它们引起微小的变化,但微小的改进会累积起来。你最终会写出更高效、更易于阅读和调试、更易于维护的代码。

感谢您的阅读。如果您有任何反馈,请告诉我。

初级程序员应该在 2021 年学* JavaScript 的 6 个关键原因

原文:https://towardsdatascience.com/6-critical-reasons-beginner-programmers-should-learn-javascript-in-2021-e3a837aab3e2?source=collection_archive---------40-----------------------

这种语言不仅仅是“咖啡手写”的同义词

照片由 Cookie 在 Unsplash 上的 Pom 拍摄

“为什么要学 JavaScript?”我问我妹妹,她是在大学三年级开始学* JavaScript 基础知识的。“难道不是古代的吗?现在还有人用吗?”

我很惊讶地得知 JavaScript 是 2020 年最常用的编程语言,但我不应该这样——根据 StackOverflow 的开发者调查,它在过去的八年里一直保持这一地位。对于移动应用程序和网络开发来说,这是一门真正流行的语言。你现在看到的是一个用 JavaScript 构建的网站。

随着无代码运动站稳脚跟,初学编程的人可能想知道他们为什么要学* JavaScript,因为有无数的 JavaScript 框架提供现成的代码,而且许多网站和应用程序可以完全免费构建。对于那些反对者,我只会说,在你开始走捷径之前,了解一些事情是如何工作的总是值得的。在我经常写的所有语言中,JavaScript 是最有可能比任何时尚都要长久的语言之一。94.5%的网站都在使用它,而万维网却寸步难行。当我问她“为什么要学 JavaScript?”我不知道它的影响有多大。

现在,稍微明智一点,我知道有几个很好的答案可以解释为什么初学者程序员尤其应该学* JavaScript。关键是,它们围绕着开始和坚持的难易程度;学* JavaScript 如何帮助你的编程生涯蒸蒸日上;以及 JavaScript 相对于其他语言的实际优势。

让我们来看看你,一个初学程序员,应该学* JavaScript 的六个理由。

1.无论你想做什么,你都会是一个受欢迎的人。

找一份编程方面的工作是你应该学* JavaScript 的首要原因。有充分的证据表明,计算机科学毕业生是最受欢迎的毕业生之一。以至于没有学位找一份编程工作变得越来越普遍。公司需要比目前大学毕业生更多的会编程的员工。

在所有的编码语言中,JavaScript 编码者接*列表的顶端,这是有充分理由的。“掌握这种关键的编程语言可以让你在全栈开发、游戏开发、信息安全软件工程、机器学*和人工智能领域继续工作,”在 CareerFoundry 的 Emily Stevens 写道。对于爱好和雇主来说,它是多才多艺的。

这种需求解释了为什么你应该学* JavaScript: 72%的公司都在寻找 JavaScript 程序员。作为一名 JavaScript 开发人员,在美国的工资中位数大约是每年 11.2 万美元(T4)。

即使你不想以编程网站或应用程序为职业,能够用 JavaScript 创建自己的网站来托管你的作品集也会对你的求职有很大帮助。

2.它让你成为一个多才多艺的程序员。

JavaScript 是编码语言中的一种通用语言。如果你知道如何用 JavaScript 编写代码,你可以编写出无限酷的东西。JavaScript 通过帮助开发人员在网站的客户端(前端)编码获得了立足点,但最*,JavaScript 框架中增加了一些内容,使其成为使用 Node.js 在网站的服务器端或后端编码的优秀语言。

“Javascript everywhere”(即 node.js)已经真正成为默认的网络开发范例,”Tom Critchlow 在他的博客文章中写道。对于为什么你应该学* JavaScript,他的回答很简单,那就是,不管你想用它做什么,它都是一种充满自信的语言。

此外,您可以参与一些应用程序操作,使用 React、React Native 和 electronic 创建 web 应用程序、移动应用程序和桌面应用程序。对于用 TensorFlow.js 做机器学*工作,它甚至是 Python 之类的不错的竞争者。

简而言之,如果你能学会 JavaScript,那么使用这种编码语言的主力,你几乎可以完成任何事情。不像 R,它最适合数据 viz 和统计;或者只对 iOS 有用的 Swift,JavaScript 是一种很好的语言,学*它可以完成很多不同的事情。为什么要学 JavaScript?因为它将帮助您完成您可能想要完成的大量编程任务。

3.它预装在你的浏览器中。

跑步对我来说是完美的爱好,因为除了运动胸罩和跑鞋,我不需要任何东西来锻炼。学* JavaScript 很棒的部分原因是它有点像编码语言的运行——你不需要任何花哨的设备、开发环境或品牌教科书。如果你有一台装有浏览器的电脑,你可以用 JavaScript 编码。

即使像 Python 这样简单的语言也很难与 JavaScript 相比。当我开始学* Python 时,为了做一些新奇的事情,我不得不尝试使用终端,这让我感到乏味和讨厌。坦率地说,这是一个障碍。同时,您的计算机已经有了 javascript GUI 和运行时。使用任何文本编辑器和浏览器,您都可以用 JavaScript 编写代码。

这使得像我这样的初学者非常容易上手。有了非常基本的了解,你就可以按照 Oreilly 的这个这样的教程,在几分钟内编写一个程序。当你可以动手做的时候,为什么要死记硬背呢?

你也可以通过浏览运行绝大多数网站的 Javascript,在任何网站上点击右键并选择“inspect”来学*。这是一种很有趣的方式,可以把预先存在的 JavaScript 拆开,看看当你改变时会发生什么。

作者截图

4.当你准备好走捷径的时候,有很多捷径。

编码可能包括许多重复的任务 JavaScript 中有一些快捷方式可以让您的生活变得更加轻松。在开始寻找捷径之前,最好先了解任何语言的基础。然而,如果你使用 Javascript 做任何严肃的事情,总有一天你会对 JavaScript 的基础有很好的理解。此时,您可能想知道如何让事情变得更简单。

普通的旧 JavaScript(也称为“普通”JavaScript)可以做很多事情,但是当您掌握了基础知识后,您就可以开始利用 JavaScript 库和框架中的许多快捷方式了。

这些资产有预先编写好供您使用的现成 JavaScript 代码。这些框架就像一个结构,已经构建了许多元素和组件,可以随时使用或修改。它可以帮助您更快、更轻松地构建您正在构建的任何东西。

这是从零开始建造房子和来到一个已经有蓝图甚至一些家具的房子之间的区别,可以让你更快地建造你的梦想家园。你仍然在做这项工作——你需要了解这些基础是如何工作的,否则你会冒着把整个东西拆掉的风险,因为你不知道你在做什么——但是把房子准备好更简单。

5.你会找到学*的方法。

许多人会问,“既然有这么多更新的语言,为什么还要学* JavaScript?”当我列出 2021 年最流行的编码语言时,我注意到了一个明显的缺陷。一方面,Rust、Go 和 Swift 等相对较新的技术正在迅速普及,但还没有真正广泛的学*方法。 SwiftGo 是公司赞助的(分别是苹果和谷歌),而 Rust 用户是极少数。无论在社区中有多受欢迎,这些都是学*资源有限的前沿用户。

相比之下,我还回顾了 Python、Perl 和 JavaScript 等经受了多年考验的语言。由于存在的时间更长,他们有一个更发达的资产库。有更多的免费 JavaScript 基础课程,更多的教程,更多的 YouTube 视频,更多的免费教科书。另外,有一个更大的开发者社区可以帮助你解决基本的错误和问题,比如 StackOverflow、Discord 和 newsletters。

当你学*一门新的语言时,知道你并不孤单,依靠你周围的社区会有很大的帮助。JavaScript 拥有一代又一代忠实的程序员,他们非常乐意将自己的专业知识借给任何还在为基础知识而奋斗的程序员新手,他们在互联网上到处闲逛。那种群体感觉可以成就或摧毁你坚持使用一种语言的能力。

6.JavaScript 可以让你成为一名文艺复兴时期的程序员

现在只懂一种编码语言就不错了,但是大部分工作都要求你可以用多种语言编码。出于上面列出的原因,JavaScript 是第一种语言的有力竞争者,但也因为它是您可能想要学*的任何未来编程语言的极好入门。JavaScript 的好处本身就很棒,但是知道首先学* JavaScript 对于任何有前途的程序员来说都是一个很好的赌注。

Stevens 在《职业铸造》中写道:“JavaScript 提供了关键原则和实践的重要介绍,这些原则和实践将贯穿你作为开发人员的整个职业生涯。”。与 C++、Python 和 Java 一样,JavaScript 支持面向对象、函数式和命令式的编程风格。这意味着当你完全精通 JavaScript 并考虑学*第二种语言时,你将能够比平常更快地掌握它。

许多语言相互借用概念,或者是为了弥补另一种语言的不足而构建的。JavaScript 是为数不多的具有完全可转移技能的语言之一,当你开始学*另一种编程语言时,它可以帮助你迅速进入状态。为什么要学 JavaScript?因为它会帮助你学* Python,或 C++,或任何其他类似的语言。

为什么要学 JavaScript?最后的想法

这种语言不仅仅是 coffee 手写的同义词——它是初学者在职业生涯中立即使用的完美编程语言,也为任何未来的开发提供了一个完美的起点。它是完全面向未来的,因为几乎所有的网络都依赖于它。为什么要学 JavaScript?总结一下我上面列出的理由,你应该学* JavaScript 的理由是:

-这是一种多功能语言

-这很容易上手

-有一套全面的框架和库,让您的生活更轻松

-该社区已经根深蒂固,非常出色

这是一项非常受欢迎的专业技能

-它可以帮助你学*下一门编程语言。

换句话说,它是一门伟大的语言,可以帮助你在个人生活和职业生活中取得很多成就。在 2021 年你可以开始学*的所有编程语言中,JavaScript 肯定排在首位。

6 个数据科学证书提升您的职业生涯

原文:https://towardsdatascience.com/6-data-science-certificates-to-level-up-your-career-275daed7e5df?source=collection_archive---------1-----------------------

充实你的投资组合,离你梦想的工作更*一步

路易斯·基根在 Unsplash 上的照片

由于数据科学领域的吸引力和高收入的前提,每天都有越来越多的人决定加入该领域。有的可能是技术出身,有的只是出于好奇而加入;不管你决定进入这个领域的原因是什么,你的首要目标可能是拥有一个强大、可靠的投资组合,帮助你获得你想要的工作。

那么,你如何增加你的投资组合的吸引力呢?

虽然进入数据科学领域不一定需要任何学位或证书,但有时拥有一些学位或证书可以帮助你在申请工作时在申请人中脱颖而出。

一个好的数据科学项目组合的要素是收集能够展示您的技能、证明您的知识以及展示您构建可靠的数据科学项目的能力的项目。这是一个好的投资组合的核心,但你也可以添加一些证书,证明你投入了时间、精力和金钱来磨练你的技能,成为一名更合格的数据科学家。

幸运的是,并不是所有的证书都要求你去考试中心。事实上,大多数令人向往的数据科学证书都可以在舒适的沙发上获得。

这篇文章将向你展示 6 个非常值得拥有的证书,你可以通过它们来增加获得实*或理想工作的机会。

微软认证:Azure 数据科学家助理

微软是技术和软件的领军人物之一;他们提供一个证书,旨在衡量你运行实验、训练机器学*模型、优化模型性能以及使用 Azure 机器学*工作空间部署模型的能力。

要获得这个证书,你需要通过一个考试,你可以用两种方法中的一种来准备这个考试。微软提供免费的在线资料,你可以自学来准备考试。如果你更喜欢有一个导师,他们还提供一个付费的选择,Azure 机器学*导师可以辅导你。

这项考试将花费大约 165 美元。价格根据你监考的国家而有所不同。

</11-books-to-help-gain-the-knowledge-you-need-to-be-a-data-scientist-f0df36ac6cb5>

IBM 数据科学专业证书

该证书来自 IBM,在一系列课程结束时提供,让您按照自己的进度从一个完全的数据科学初学者变成一名专业的在线数据科学家。

IBM 数据科学专业证书在 CourseraedX 上都有提供。无论在哪个平台上,你都必须完成一系列涵盖所有数据科学核心知识的课程,完成后才能获得证书和 IBM 徽章。

要获得 Coursera 的证书,你需要每月支付 39 美元的费用,所以你越早完成这个系列,你需要支付的费用就越少。另一方面,edX 要求 793 美元的完整课程体验,不管你要讲多长时间才能完成。

谷歌专业数据工程师认证

谷歌的专业数据工程师认证旨在考察你成为一名合格的数据工程师所需的技能。数据工程师可以做出数据驱动的决策,建立可靠的模型,训练、测试和优化它们。

你可以通过谷歌官方证书页面直接申请获得这个证书,也可以在 Coursera 上参加一个课程系列和证书。这些课程将教会你所有你需要知道的机器学*和人工智能基础知识,并建立有效的数据管道和分析。

要访问 Coursera 上的课程系列,您需要拥有 Coursera Plus 或支付每月 49 美元的费用,直到您完成系列课程并获得证书。

</7-tips-for-data-science-newbies-d95d979add54>

Cloudera 认证专家(CCP)数据工程师

Cloudera 面向开源开发者,并为开发者提供 CCP 数据工程师证书,以测试他们在 Cloudera CDH 环境中高效收集、处理和分析数据的能力。

为了通过这次考试,你将有 5~10 个数据科学问题,每个问题都有自己的大型数据集和 CDH 聚类。你的任务将是为这些问题中的每一个找到一个高精度的解决方案,并正确地实现它。

要参加这次考试,你需要在考试中取得至少 70%的分数。考试将持续 4 个小时,费用为 400 美元。你可以在网上任何地方参加这个考试。

SAS 认证的人工智能和机器学*专家

与我们到目前为止讨论的证书不同, SAS AI &机器学*专业证书是通过测试三种不同技能集的三次考试获得的。获得证书需要通过的三个考试是:

  1. 机器学*考试,将测试您构建、训练、测试性能和优化监督机器学*模型的技能。
  2. 预测和优化测试。在这项测试中,将测试您处理、可视化数据、构建数据管道和解决优化问题的能力。
  3. 自然语言处理和计算机视觉测试。

SAS 免费提供 30 天的准备材料,帮助你准备好参加并通过这三项考试。

</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>

TensorFlow 开发者证书

TensorFlow 是广泛用于机器学*、人工智能和深度学*应用的软件包之一。 TensorFlow 开发者证书颁发给开发者,展示他们使用 TensorFlow 开发机器学*和深度学*问题解决方案的能力。

完成深度学*就可以准备这个证书了。AI TensorFlow 开发者职业证书 Coursera 课程系列。一旦你获得了这个证书,你的名字和照片将被添加到谷歌开发者网页上。

TensorFlow 开发者证书有效期为 3 年。之后,您需要重新参加测试,以保持您的技能水平与 TensorFlow 软件包的最新更新保持同步。

外卖食品

如果你问任何一位数据科学家,他们是否需要学位或证书来获得工作角色,大多数人会告诉你,他们是从一个非技术背景进入数据科学的,带着一颗好奇的心,只想了解更多。

即使你可以通过自学数据科学的核心概念并构建现实生活规模的项目或可以轻松应用于现实生活数据的项目来成为一名数据科学家并获得一份好工作,但有时拥有证书可以帮助你的投资组合脱颖而出,并将招聘人员的目光吸引到你身上。

因为数据科学是当今最受欢迎的领域之一,你会在网上找到大量的教程和指南,告诉你如何成为一名“优秀的数据科学家”或“如何获得你梦想中的数据科学职位?”。更不用说你可以获得大量的证书和免费的课程来提高你的技能。

我曾经和你一样,被外面关于数据科学和如何进入这个领域的大量信息所淹没。但是,我总是欣赏简单,直截了当的文章,不要把话题拖得太长。

我写这篇文章的目的是给任何希望获得数据科学证书的人提供一些想法,以证明他们的起步能力和什么样的证书被认为是有价值的。它肯定会给你的简历或作品集增加一些价值。

6 个数据科学播客,随时随地学*新知识

原文:https://towardsdatascience.com/6-data-science-podcasts-to-learn-something-new-on-the-go-aa9f7628d951?source=collection_archive---------27-----------------------

充分利用你的时间。

Juja Han 在 Unsplash 上的照片

生活会变得非常忙碌。我们每天都要应付这么多杂务和责任。对一些人来说,坐下来学*并不总是可行的。要么你有一大堆工作要做,一个婴儿需要你的照顾,要么你被所有的事情压得喘不过气来。

通常,学*新的东西,更新你的知识,或者跟上这个领域的最新消息,并不是一件容易的事情。你必须安排特定的时间坐下来真正做这些事情。这也不总是可行或简单的。

幸运的是,科技拯救了我们。播客可以成为新信息、新研究成果、甚至熟悉该领域新名字的金矿。当你已经在做其他事情的时候,播客提供了一个学*新事物的好方法。通勤上班,在健身房锻炼,跑步,烹饪和许多其他活动,你可以使用播客来充分利用你的时间。

播客可以通过不同的应用程序或提供商获得,也许最著名的是 Spotify、苹果播客、Pocketcasts,甚至是浏览器。无论你使用哪一个,你都会发现我们将在本文中讨论的所有播客。

在本文中,我将帮助您浏览一些最好的数据科学播客,您可以随时收听这些播客来丰富和扩展您的知识库。不仅如此,还要倾听人们的工作故事和他们的学*之旅,以学*他们的见解和经验。

№1:超级数据科学

让我们从超级数据科学播客开始这个列表。这个播客提供了广泛的机器学*主题、人工智能和一般数据科学的知识。它提供了来自学术界和工业界的观点,让你了解整个领域的最新进展。

如果你正在寻找一个讨论研究主题、进入数据科学、在数据科学中找工作、该领域的深入技术方面的播客,或者你只是好奇想听听其他人在数据科学领域的旅程并学*他们的见解,这个播客就是为你准备的。SuperDataScience 播客几乎每 3 天就有一集新内容。

</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>

№2:数据科学中的女性

有时,女性发现自己被排除在外,在技术领域代表性不足。然而,我最喜欢数据科学领域和社区的一点是,它比许多其他领域有更好的性别平衡。名单上的第二个播客是数据科学中的女性播客。

本播客主持来自数据科学各个领域的不同杰出女性。他们讨论他们的工作,他们的旅程,他们在学术界和工业界的经历。播客讨论了数据科学的不同应用领域,从医疗保健到人权等等。

№3:家庭数据科学

我们现在都被困在家里一年了——或多或少取决于你在哪里。所以这个播客的名字对我们目前的情况再合适不过了。家庭数据科学是由 Amethix Technologies 制作的播客,每周都有新的剧集。

家庭数据科学讨论了不同数据科学分支的最新发现和进展,包括机器学*、人工智能和许多其他分支。每集采访一个或多个在该领域有影响力的研究人员,谈论他们的工作,让每个人都了解最新情况。

</5-online-data-science-courses-you-can-start-now-748e4a2b5403>

№4:数据故事

数据科学就是解释数据讲述的故事。这些故事可以以不同的方式讲述,取决于你如何呈现它们。换句话说,你如何将它们形象化。有效的可视化对于任何数据科学项目的成功都至关重要。因为这对任何数据科学家来说都是一项非常重要的技能,所以数据故事播客只关注可视化。

数据故事播客专题讨论了可用于有效可视化数据的各种工具、技术和方法。数据可视化不仅仅是项目的一个步骤;这是一种艺术形式。本播客将教授如何为您的数据选择最佳的可视化效果,并通过最新的工具帮助您创建最佳的可视化效果。

№5:实用人工智能:机器学*和数据科学

有时候,尤其是如果你是数据科学的新手,或者只是在研究理论方面,这个领域的整个概念似乎是遥远而不切实际的。实用人工智能:机器学*&数据科学播客将想法和概念放到现实生活中。

该播客与专家、研究人员、学生和爱好者讨论了不同的机器学*主题、深度学*、人工智能等。这些讨论集中于这些技术的实际实现和应用,而不仅仅是它们的理论。如果你想知道各种技术在实际应用中的最新用法,这个播客就是为你准备的。

</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>

№6:走向数据科学

如果不包括走向数据科学 (TDS)播客,这将是不公平的。TDS 不仅仅是一份媒体出版物;当我第一次开始我的学*之旅时,TDS 是我学*一切所需的指南。

TDS 播客定期采访数据科学领域的一些杰出作家,讨论数据科学领域的不同主题,从开始职业生涯到找到工作,再到深入讨论该领域的技术方面以及数据科学在现实生活中的不同应用。

最后的想法

在日本生活,通勤时间可以相当长;每天,我都要花 3、4 个小时坐在火车上无所事事。我觉得我可以利用这段时间小睡一会儿,或者扩展我对任何我感兴趣的话题的知识。我开始用那段时间看新书,听有声读物,大多数时候听各种话题的不同播客。

通勤时间是我们都必须在不同程度上处理的事情;有些人通勤时间短,有些人通勤时间长,但尽管如此,我们都有一些通勤时间。COVID 让我很难跟上我的播客和有声读物,因为我们都一直被困在家里。

</6-data-science-certificates-to-level-up-your-career-275daed7e5df>

但是,当我打扫卫生、做饭或烘烤食物时,我仍然会听我的播客。播客总是给我提供一个很好的机会来学*新的东西,而不必把我的时间完全投入到这些任务中。它们帮助我变得更有效率,保持思维敏捷。

在本文中,我为您提供了 6 个优秀的数据科学播客选择,您可以通过收听这些播客来了解新的数据科学主题,了解最新的数据科学研究,并刷新您对已有主题的记忆。无论您的经验水平如何,或者您对各种数据科学分支的具体兴趣如何,您都会在这些播客中找到自己喜欢的东西。

你需要加入的 6 个数据科学空闲工作区

原文:https://towardsdatascience.com/6-data-science-slack-workshops-you-need-to-join-b0c00952105d?source=collection_archive---------7-----------------------

从社区获得支持和灵感

潘卡杰·帕特尔在 Unsplash 上的照片

自学任何新技能或技术最困难的一个方面是孤独的感觉。当我开始学*数据科学时,我感到很迷茫,不是因为我需要学*的技术术语,而是因为我觉得我正在独自经历这段旅程。我知道还有其他人和我经历着同样的旅程;我只是不知道。

独自经历新事物并不总是最好的选择;这就是为什么有些人倾向于参加训练营或在线/离线课程来学*新东西。当你和别人一起学*时,你学到的不仅仅是技术内容;你从别人的经验和见解中学到的最多。你会从你的同龄人那里学到比你一个人经历的旅程更多的东西。

一旦我找到一个社区来帮助我,支持我,并在我的学*旅程中激励我,旅程就变得容易多了。我最终得到的不仅仅是技术知识;我最终有了朋友、志同道合的人,以及一个帮助塑造了我今天这个数据科学家的网络。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

在本文中,我将与您分享一些令人惊叹、支持和欢迎的数据科学社区 Slack workspaces,以便您可以与来自世界各地的数据科学家交流、学*和交朋友。这 6 个 Slack 工作空间将为您提供在数据科学学*之旅中取得成功所需的社区感和归属感。

№1:开放数据科学社区

开放数据科学社区 (ODSC)不仅仅是一个宽松的工作空间;这是一个数据科学领域的组织。他们在世界各地举办数据科学会议,发布关于不同数据科学主题的帖子和视频,并让您了解最新的数据科学研究。

此外,ODSC 定期提供许多免费的网络研讨会,让您参加并学*新知识或更新您当前的知识。如果你错过了一些,你可以在 ODSC 云上找到录音。你可以通过这个链接加入 ODSC。

№2:编写数据科学章节的女性

编写代码的女性是科技界最大的女性群体之一。他们的主要使命是帮助女性在科技领域脱颖而出,追求成功的职业生涯。女性程序员是一个非常活跃的社区,每个月都有各种会议和网络研讨会,讨论不同的技术主题。

女性程序员中最活跃的章节之一是数据科学章节。本章为数据科学家提供了许多网络研讨会、支持、工作公告板和机会。尽管名为女性代码组织,但它欢迎任何人加入他们的活动,并充分利用这些活动。你可以通过这个链接加入数据科学章节。

</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>

№3: Kaggle Noobs

毫无疑问,Kaggle 是数据科学领域最著名的数据集和代码集合之一;没有人不知道 Kaggle 是什么。Kaggle 提供许多课程来教你数据科学的基础知识。Kaggle 社区由全球超过 600 万名数据科学家组成。

Kaggle 还为不同的数据科学主题(如 NLP、可视化、机器学*和神经网络)提供更小、更专注的社区。您还可以参加 Kaggle 竞赛,证明您的数据科学技能。你可以通过这个链接加入 Kaggle Slack 社区。

№4:人工智能研究人员和爱好者

数据科学是一个技术领域,任何技术领域每天都在经历新的研究和进步。作为数据科学家,我们角色的一个重要部分是跟上您特定数据科学主题的最新研究。毕竟,你不能使用过时的模型或不包含的数据集。

人工智能研究人员和爱好者是一个超过 6k 名研究人员的社区,爱好者聚集在一起讨论人工智能领域的最新进展。您可以通过链接加入讨论并获得最新消息。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

№5:数据会谈。俱乐部

数据会谈。如果你正在寻找一个学*更多关于应用机器学*或机器学*和一般工程的地方,那么俱乐部就是你要去的地方。如果你想问任何关于机器学*的核心技术概念或如何在机器学*领域找到工作的问题。

此外,数据说话。俱乐部提供关于各个方面的每周活动,从初学者机器学*活动到高级概念以及如何寻找角色和准备面试。你可以加入数据会谈。俱乐部松弛社区通过这个环节。

№6: TWIML 社区

TWIML 社区是一个来自世界各地的机器学*、深度学*和人工智能研究人员和爱好者的网络。TWIML 社区提供许多文章、课程和竞赛,帮助您进入数据科学领域并在其中脱颖而出。他们还提供了与该领域专业人士讨论各种话题的精彩播客。

此外,TWIML 社区组织了许多流行的数据科学主题的学*小组,如人工智能、深度学*和 NLP。通过社区的 Slack workspace,你可以和聪明能干的人讨论你需要的所有话题。你可以通过这个链接加入 TWIML 社区。

</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>

最后的想法

我认为,进入一个新领域或学*一项新技能的最大好处之一——除了新的职业前景之外——是结识新朋友的机会。结交新朋友,从中获得灵感,结交新朋友,拓展我们的专业网络。

但有时,与人交往并不是最容易的事情,尤其是当你在疫情中学*新技能的时候。然后,你认识人的选择变得非常有限,如果不是稀缺的话。但这正是科技帮助我们的地方;它让我们“遇见”那些我们本来不会相遇的人。

为你的新技能或领域找到一个社区的最好方法之一是 Slack。在本文中,我向您推荐了 6 个优秀的数据科学 Slack 社区,它们一定会为您提供所需的支持、灵感和社区意识,帮助您完成学*之旅,并在职业道路上取得成功。

提高云 ML 生产力的 6 个开发*惯

原文:https://towardsdatascience.com/6-development-habits-for-increasing-your-cloud-ml-productivity-becdc41eb289?source=collection_archive---------57-----------------------

回归基础:重新思考云计算时代的开发最佳实践

费利佩·费塔多在 Unsplash 上的照片

我的以前的帖子主要是技术性的,涵盖了一系列关于云培训和高级 TensorFlow 开发的主题。这个帖子不一样。你可能会认为这更像是一篇观点文章。

在我的职业生涯中,当讨论软件开发实践的话题时,我很少看到比这更紧张的了。即使是最内向的工程师也会突然活跃起来。同事们会陷入激烈的争论,否则他们会步调一致地工作。我曾与牛仔程序员Scrum masters 一起工作过,与那些将敏捷作为生活方式的人一起工作过,与那些宁愿退出也不愿再参加一次[站立会议](https://en.wikipedia.org/wiki/Stand-up_meeting#:~:text=A stand-up meeting (or,to keep the meetings short.)的人一起工作过,与那些将他们的功能名称大写的人一起工作过,与那些将这样的实践视为死罪的人一起工作过。

说实话,大多数常见的开发实践都植根于坚实的常识。虽然开发人员可能对是否以及如何采用 Scrum 有强烈的感觉,但是现代开发团队应该能够快速适应变化的环境,这是常识。虽然具体的细节可能有争议,但是团队采用编码风格以增加代码可读性和可维护性是常识。虽然测试驱动的开发可能看起来势不可挡,但是在不同级别和不同开发阶段引入测试是常识。当在团队中工作时,执行持续集成包括自动化集成测试是常识。即使是最好的开发人员有时也会犯错误,在他们被推到主存储库并最终毁掉每个人的一天之前抓住他们是常识。进行同行代码评审是常识,可能只是防止像内存泄漏或数据类型溢出这样的小疏忽搞垮你的公司。

Never underestimate the capacity of a person, no matter how stupid, to do something genius. More importantly, never underestimate the capacity of a person, no matter how genius, to do something monumentally stupid. --Chaim Rand

另一个基于常识的主张是,我们的开发*惯应该适应我们正在进行的项目的细节,包括团队、时间表,以及重要的是开发环境。这是事实,尤其是在云中训练机器学*模型时。

云 ML 的优势

在云中训练机器学*模型的趋势越来越强,云服务提供商为你能想象到的任何机器学*相关任务推出了不断扩展的服务。不难看出云中培训的吸引力。

构建现代机器学*基础设施可能很难。首先,是硬件基础设施。GPU 和替代的机器学*加速器很贵,如果你想保持最新最好的状态,你需要定期更新它们。由于您可能希望在多台机器上分布您的训练,并且可能希望一次运行多个训练实验,因此您可能需要多个不同规格的 GPU。机器学*通常需要复杂且可扩展的存储基础设施来存储不断扩展的数据集,以及支持数据存储和训练机器之间的高流量的网络基础设施。

然后是软件基础设施。要让您的培训发挥作用,需要适当的 BIOS 设置、定期的驱动程序更新、复杂的访问权限管理以及仔细的环境变量配置。您通常会需要一个很长的软件包列表,这些软件包可能会有相互冲突的依赖关系,您需要对它们进行分类。您可能需要 Docker 或其他一些虚拟化层,这带来了一系列全新的潜在问题。

另一方面,当你在云中训练时,生活是容易的。硬件、存储、网络和软件基础架构都已准备就绪,随时可以使用。您有各种各样的 GPU(和其他加速器)可供选择,以及不同类型和版本的软件框架。在云中,你可以自由地扩展,运行尽可能多的并行实验,也可以扩展独立的训练课程,在许多 GPU 核心(或其他加速器)上并行运行。云中的存储容量几乎是无限的,让您不必再为满足不断增长的存储需求而头疼。此外,云产品通常包括基于其定制硬件或网络拓扑的独特优化。除了已经在管理自己的数据中心的大型组织之外,创建自己的经济高效的基础架构,并具有云中提供的相同的灵活性和复杂性,几乎是不可思议的。查看此处了解更多将培训迁移到云的优势和挑战。

https://julsimon.medium.com/making-amazon-sagemaker-and-tensorflow-work-for-you-893365184233

管理成本

虽然成本可能是使用云 ML 服务的主要考虑因素之一,但很容易看出,如果没有的适当治理,成本也可能成为主要陷阱。我相信,每个开发人员的 DNA 中都有一种与生俱来的倾向,那就是使用最大、最新、最快和最强的计算资源。如果我们可以使用一个强大的(而且昂贵的 ) GPU(或其他加速器)系统,为什么要满足于一个更便宜的呢?如果我们可以在 1024 个内核上分布我们的培训,为什么要满足于 8 个内核呢?如果我们可以并行运行 1000 个实验,为什么要把自己限制在 4 个呢?如果我们能进行 20 天的训练,为什么要限制在 1 天呢?

显然,为了确保向云的成功过渡,管理人员必须为如何以及何时使用不同的云服务制定明确的政策。应定义指导原则,包括要使用的培训资源的数量和类型、培训课程应持续多长时间、何时支付云资源的全价以及何时使用更便宜的“低优先级”资源,如 spot 实例可抢占虚拟机(冒着作业提前终止的风险)。应监控使用模式,并不断进行调整,以最大限度地提高生产率。

虽然定义和执行这样的策略是管理人员的责任,但是我们,开发人员,有责任使我们的开发过程适应这个新的工程时代。我们需要调整我们的*惯,以便最大限度地利用云资源,并最大限度地减少浪费、闲置时间和资源利用不足。

提高云培训生产力的开发*惯

为了最大化效率,我想提出 6、常识,我认为在云中训练机器学*模型时应该强调的开发实践。

1.在云中运行之前进行本地测试

众所周知,我们编写的几乎的应用程序从来不会按照我们期望的方式运行,直接开箱即用。我们经常会访问未定义的变量,使用错误的数据类型,越界访问列表,错误地使用 API,等等。在云中解决这些问题是低效、耗时和浪费的。常识告诉我们要建立一个本地的(基于 CPU 的)环境,其中有一小部分训练数据,在这个环境中,您要尽可能地验证一切都按预期运行。

2.让您的调试工具和技术适应云培训

不幸的是,在云中调试失败的应用程序,很少仅仅是在调试模式下运行您喜欢的 IDE。同时,我们快速识别和修复云运行中的错误的能力会对成本和生产率产生巨大影响。常识要求重新审视我们的调试过程,并使它们适应新的开发范式。应该对代码进行修改,以支持错误的快速再现。例如,保存中间模型检查点可能会缩短重新生成的时间,捕获输入张量可能有助于识别导致错误的输入和权重的精确组合,以及用于运行更详细的模型训练的专用调试标志可能有助于查明问题的根本原因。有关有效 TensorFlow 调试的更多详细信息,请参见此处的。

3.进行持续、深入的性能分析和优化

为了最大限度地利用您的培训资源,您应该将绩效分析和优化作为您发展过程中不可或缺的一部分。通过分析训练执行的速度(例如,以每秒迭代次数来度量)和我们利用系统资源的方式,我们寻求确定提高效率和降低总成本的机会。虽然任何未被充分利用的培训资源都是提高培训效率的潜在机会,但首先也是最重要的是,对于 GPU(或其他培训加速器),通常是系统中最昂贵和最强大的资源。你的目标应该是尽可能提高 GPU 的利用率。

典型的性能优化策略包括反复执行以下两个步骤,直到您对训练速度和资源利用率感到满意:

1.概述培训绩效,以确定流程中的瓶颈和未充分利用的资源

2.解决瓶颈并提高资源利用率

有许多不同的工具和技术来进行性能分析,这些工具和技术根据开发环境的具体情况而有所不同。关于分析 TensorFlow 模型性能的更多细节,请参见此处

4.在代码中引入容错

想象一下,在 32 台 GPU 机器上运行一个高度分布式的培训会话两天,结果只有一台机器在模型似乎已经收敛时崩溃。虽然机器也可能在本地培训环境中发生故障,但有两个原因可以解释为什么在云中这可能是一个更大的问题。首先是分布式培训更加普遍。一般来说,我们训练的机器数量越多,我们就越容易受到系统故障的影响。第二个原因是,降低云中培训成本的最常见方法之一是使用“低优先级”资源,(如点实例,或可抢占虚拟机),如果出现更高优先级的请求,这些资源容易被提前终止。因此,将容错引入到您的开发需求中只是常识。

你应该做的第一件事是确保你定期捕获你的机器学*模型的快照(也称为检查点),以便在提前终止的情况下,你可以从最*捕获的模型恢复,而不是从头开始训练。捕获快照的时间间隔应通过权衡捕获快照的开销与在出现故障时您将损失的预期培训时间来确定。

另一件要考虑的事情是实现一种从单个系统的故障中恢复的机制,而不需要重新开始培训会话。在分布式培训环境中,实现这一点的一种方法是使用 Elastic Horovod ,它支持根据系统可用性动态扩展工作人员的数量。

5.对您的培训工作进行自动监控

监控学*过程指的是在训练期间跟踪不同指标的艺术,以便评估训练如何进行,并确定调整哪些超参数以改进训练。虽然监控学*过程是训练机器学*模型的关键部分,但一般来说,这在云中尤为重要,因为我们的目标是尽可能减少浪费。一旦我们发现一个失败的训练实验,或者一个已经停止学*的训练环节,我们的目标应该是尽快停止训练,以避免浪费。

因为我们不可能在一天的每时每刻都跟踪每一个训练实验,常识告诉我们应该尽可能自动监控。我们可以编程规则来检测常见的训练失败,例如爆炸或消失梯度、非递减损失等,并采取适当的行动,无论是终止训练还是调整一些超参数。

查看此处此处了解更多关于 TensorFlow 中监控和自动监控的主题。

6。采用先进的超参数调谐技术

尽管无论培训地点在哪里,成功的培训通常都需要超参数调整,但我们希望最大限度地减少云中的浪费,这要求我们尽可能以最具成本效益的方式进行调整。虽然我们可能满足于在本地环境中进行手动或网格搜索调优,但我们应该致力于在云中使用更高级的技术,这些技术已经被证明可以更快地收敛并降低调优阶段的总体成本。同样,有许多超参数调整的解决方案,根据训练环境的不同而不同。努力选择一个提供现代的、基于贝叶斯的算法支持的(例如 Ray TuneAmazon SageMaker hyperparameter tuner)。

摘要

向云计算的过渡是一种范式的转变,它要求我们的开发过程朝着提高生产力和效率的目标调整和收紧。虽然细节肯定会因团队和项目而异,但核心原则是常识。成功掌握在我们手中。

6 中小企业在开始使用数据时面临的进入壁垒

原文:https://towardsdatascience.com/6-entry-barriers-smes-have-when-starting-to-work-with-data-46a5a27c24ad?source=collection_archive---------29-----------------------

当中小企业想要开始处理数据时,他们会遇到哪些主要困难?

Amandine M 在 Unsplash 上拍摄的照片

我的上一篇文章中,我们谈到了中小企业如何利用数据来发展业务和获得市场中的新机遇。然而,如果我们从更广泛的角度分析这种情况,我们将很快意识到,多种因素阻止这些企业利用他们拥有的数据。

这些因素可以理解为进入壁垒,使这些公司难以在技术成熟的市场中平等竞争。我们将探讨任何希望开始使用其数据的企业将面临的 6 个主要进入壁垒。我将这些进入壁垒分为内部和外部。

内部壁垒

理解力差

理解什么是数据以及你能从中提取什么价值是非常重要的。如果你不明白某件事,你就不能利用它。了解、阅读和培训新技术的应用,尤其是数据,是非常重要的。请记住,技术世界是不断发展的,很难对所有事情都有一个观点。

要在公司的日常工作中引入数据,你必须确定它们会给你的业务带来的回报,否则,你不会使用它们。或者更糟,你会失败。在这一点上,拥有一个能够识别机会、将其应用于业务并量化结果的管理层是非常重要的。

缺乏内部专业知识

中小型公司的优势之一是,它们通常利用特定利基市场中高度专业化的市场机会。这种情况是正面的,也是负面的。积极的一面是,专业化让这些企业得以成长。另一方面,这是消极的,因为他们的大多数劳动力将是专业化的,这可能会使他们偏向于新趋势的优势和机会,如数据分析。

与前一部分密切相关的是公司内部缺少可以执行数据分析功能的概要文件。如果我们进一步考虑这种情况,这些公司中的许多甚至可能没有技术档案,这意味着两种可能的情况,雇用或外包。雇用这些档案是昂贵的,因为它们在市场上需求量很大。另一方面,也有外包这些服务的可能性,但这需要管理外包员工并使其符合业务需求的人员。

数据收集和存储

中小型公司在处理数据时面临的最大限制之一是它们没有数字化。这是一个很大的障碍,因为它阻止了来自日常操作的数据被捕获。有时,与客户、销售甚至股票的关系并没有被衡量。如果我们不进行测量,我们就无法利用来自数据的知识。

即使进行了测量,这也是不够的,因为数据质量不好。测量质量差的数据等于甚至不如不测量。如果你想知道数据质量的好坏,我推荐你阅读我的文章“数据质量的 6 个维度”。

外部壁垒

必要的前期投资

拥有基础设施并重组公司以获得盈利结果并利用业务中的数据并不是从天上掉下来的。这需要前期投资,在许多情况下,这对中小企业来说是一项巨大的努力。

然而,正如我在上一篇文章中回顾的那样,当中小企业开始处理数据时,他们可能会通过消除最初不必要的某些变量来降低成本。SME 在开始处理数据时应该使用 startup 和 MVP 理念。如果我们还利用了云的一些优势(主要是从资本支出转变为运营支出),我们可以将这一进入壁垒降至最低。

数据可用性

另一个外部进入壁垒是数据可用性。中小企业很可能没有足够的内部数据,需要用外部数据补充内部数据。

然而,寻找这些外部资源并不容易,而且在许多情况下,是有代价的。一方面,使用公共数据是免费的,但需要专家能够识别这些来源,并将它们与内部数据整合。另一方面,使用其他来源可能会有成本,增加了前期投资的需求。正如我们所提到的,当一家公司开始利用数据时,它必须尽可能地避免这种投资。

软件

是的,你没看错。当你知道如何使用软件时,它是一个极好的盟友。数据世界的大问题是所有现有的软件都太复杂了。正如我们上面已经提到的,它需要大多数中小企业所不具备的专业知识。理解数据环境、选择合适的工具并学*如何使用它们需要时间,而时间意味着成本。此外,对于没有处理这类软件经验的人来说,很难找到物有所值的东西,也很难找到自己需要的东西。

另一方面,与投资进入壁垒密切相关的是数据工具的价格。其中许多工具没有为中小企业量身定制的成本。虽然一些软件解决方案确实有一个面向中小企业的精简版本,但这还不够。这里,云再次发挥作用。由于有了云,数据接收、存储和处理的成本降低了,不再是前期投资。

数据可以让你全方位了解你的业务,并在决策过程中为你提供指导。然而,如果你的公司从未与数据打交道,你会发现几个入门障碍,让你很难入门。在本文中,我们解释了开始使用数据时的 6 个最重要的入门障碍。意识到它们的存在,你可以考虑一个策略来克服它们,让你的公司更上一层楼。

感谢阅读🤗

构建伟大数据文化的 6 个基本步骤

原文:https://towardsdatascience.com/6-essential-steps-to-building-a-great-data-culture-e529d4dcad7e?source=collection_archive---------13-----------------------

卢克·切瑟在 Unsplash 上的照片

因此,像“我们去年的收入是多少”这样的问题不再被当作“数据请求”来提出

在我担任数据科学顾问的这些年里,我与数据能力各不相同的客户共事过。在此期间,我得出了一个关键的观察结果:成功利用大数据时代的公司在整个组织中建立并维护良好的数据文化,而不仅仅是在他们的“数据组”中。

那些只投入资金和精力雇佣优秀数据人才,而不注意在组织的其他部门建立数据文化的公司,通常很难留住这些优秀的数据人才。他们最终会精疲力尽,因为他们大部分时间都在充当“数据 Siri”:“嘿,XXX,我们去年的收入是多少?”“嘿,XXX,你能调出我们过去三个月的销售数据吗?"

在整个组织中建立数据文化将使运营、产品、营销、人力资源和许多其他部门的员工能够以自助方式完成大多数简单的数据查询和数据可视化。除了使这些团队更加自给自足和灵活之外,它还允许数据分析师和数据科学家将他们的时间重新分配到他们的核心职责上,即构建和改进数据系统和模型,以及提供复杂、有意义的分析,而不仅仅是简单的数据提取。

如果你是你公司数据组织的一员,或者是一名数据倡导者,请继续阅读。本文将为您提供一些关于如何构建良好的数据文化的有价值的提示。

GIF 由 GIPHY

1.从无代码选项开始(比如 Looker 或 Tableau)

由于大多数从事高要求工作的人没有时间在短时间内掌握像 SQL 这样的新的硬技能,所以无代码选项是让您组织中的人舒适地使用数据的一个不那么令人生畏的起点。

有越来越多的选择可以帮助这一步,Looker 和 Tableau 是大多数公司追求的两个首选。为了给你的公司选择一个合适的,了解两者之间的区别和它们的局限性是很重要的。

Looker 有一些很棒的内置分析功能,可以让没有深入分析知识的人更容易采用。我想到的一个限制是,Looker 主要可以连接到不同的数据仓库,如 PostgreSQL、Google BigQuery 等。但是目前没有接收 CSV 数据的好选择。唯一的解决方法是将 CSV 文件上传到这些数据库中,并建立一个与 Looker 的连接。但是,如果您所有的数据目前都在 Excel 中,并且没有数据仓库,该怎么办呢?

GIF 由 GIPHY

如果你所有的数据都保存在电子表格中,Tableau 可能是一个更好的选择。Tableau 可以处理到数据仓库的连接和本地 excel 表的接收。然而,它在可定制的分析和对分析知识和背景较少的人的易用性方面有所欠缺。

尽管当前的无代码选项有其缺点,但它们仍然降低了进入数据世界的门槛,并作为在您的组织内建立伟大的数据文化的良好起点。

2.为应该学*更高级选项(SQL)的团队提供在职学*机会

尽管无代码选项很棒,但是当它们用于执行复杂的分析时,它们不可避免地会遇到限制,并且需要更高级的 SQL 知识。此外,许可证可能会很贵,因此许多公司选择限制特定团队的访问权限。

对于像运营和营销这样经常进行复杂的大量数据分析或进行 AB 测试和其他实验的团队,员工最终会意识到他们需要足够的 SQL 知识来构建 Looker 中的“派生表”,或者至少知道足够的伪代码来有效地将他们的数据需求传达给数据团队。学* SQL 还可以让您的员工完全抛弃 Looker 等工具,直接查询数据库,消除工具限制或依赖数据团队的瓶颈。

您可以通过提供在职学*机会,例如通过第三方提供商(如verta bello)、免费替代方案(如 W3Schools )和/或由您的数据组织开发的内部 SQL 培训,来支持这些群体中的员工。

GIF 来自 GIPHY

3.确保每个人都能访问数据库

这个听起来很简单,对吧?你会惊讶地发现,有多少公司的数据库只有数据组中的少数人可以访问。因此,毫无疑问,来自整个公司的全部数据拉取请求都落在了十几名员工的肩上。

无论您限制访问的原因是什么,通常都有一个简单的解决方法;如果实现了限制以避免意外删除或篡改数据,那么写和编辑的权限可以限制到特定的数据组,而查询和读取数据库的权限应该授予每个人。如果可访问性的限制是出于对敏感数据(例如 PII——个人身份信息)的考虑,通常很容易实现一个变通办法,比如构建一个没有 PII 的辅助表,每个人都可以访问它。

引入分析和建立数据文化已经让很多人走出了他们的舒适区;不要让他们为权限而战,这是不必要的。

4.将所有数据放在一个地方,研究数据仓库解决方案

把你的数据放在不同的地方,对每个使用数据的人来说都是一种痛苦;例如,无代码选项通常不能连接来自不同连接(不同数据库)的表。这就是像雪花和 BigQuery 这样的数据仓库的用武之地。它们作为数据的一站式商店,避免了多种真实信息来源分布在不同地方的情况,这种情况很容易造成混乱。

娜娜·斯米尔诺娃Unsplash 上的照片

如果您的数据目前居住在不同的地方,不要担心;随着数据仓库解决方案的发展,只需要很少的工程资源就可以将所有数据迁移到数据仓库中。

5.为数据库和表格准备好文档,并有一个专门的小组(Slack 或其他渠道)来回答与数据相关的问题

考虑到大多数公司数据的复杂程度,没有人完全了解数据库中的一切也就不足为奇了。让每个数据用户了解每个表中的每一列实际上是不可能的。

因此,对于每个表的所有者/创建者来说,在创建时正确地记录表是很重要的,这样将来的表用户就不必绞尽脑汁试图弄清楚表的“重量”列的单位是“磅”还是“千克”。当表格中的某些内容没有被很好地记录或难以理解时,有一个专门的小组来回答类似上面的问题也是有帮助的;假设有一个客户服务部门负责您的数据源。

6.开始将查询(或无代码选项源)链接到数字

假设您已经在两份不同的报告中看到了去年的销售数字;一个说销售额是 1000 万,另一个是 900 万。是什么导致了这里的差异?是因为其中一个是含税销售额而另一个不是吗?还是因为一个是用公司的财年,另一个是日历年?对于这种差异,你可以提出各种不同的假设,但是如果你不知道这些数字是如何得出的,检查它们将是一个巨大的痛苦。

这就是为什么在报告和演示文稿中链接所有数字和图表的来源如此重要。无论您使用的是 SQL 查询还是 Looker/Tableau 仪表板链接,这些链接的源都将使那些希望重现报告或只是好奇如何找到数字的人的生活变得更加轻松。

链接源的另一个好处是利用了查询/仪表板的可重用性。想象一下,另一个部门的某人正在试图找出过去 10 年的销售数字;他们可以简单地使用您的链接查询并更改一些参数,而不是与您安排一次会议来询问您是如何得出这些数字的。现在你有 15 分钟的时间可以用来喝杯咖啡。

GIF 来自 GIPHY

有了上面提到的所有步骤,希望可以问这样的问题:“我们去年的收入是多少?”将不再显示在任何人的收件箱中。

掌握 Python 生成器的 6 个例子

原文:https://towardsdatascience.com/6-examples-to-master-python-generators-28f4c614ed45?source=collection_archive---------10-----------------------

综合实践指南

贾斯汀·坎贝尔在 Unsplash 上的照片

Python 中的生成器是我们经常使用但很少谈论的工具之一。例如,大多数 For 循环都伴随着 range 函数,它是一个生成器。

生成器允许随着时间的推移生成一系列值。使用生成器的主要优点是我们不必一次创建整个序列并分配内存。相反,生成器一次返回一个值,并一直等到调用下一个值。

在本文中,我们将通过 6 个例子来演示如何在 Python 中使用生成器,以及一些需要记住的技巧。

示例 1

让我们从一个简单但经常使用的生成器开始。range 函数用于迭代由给定的开始、停止和步长确定的一系列值。

range(5)
out> range(0, 5)for i in range(5):
   print(i)
0
1
2
3
4

如果执行 range 函数,将不会返回任何值。但是,我们可以在 for 循环中对其进行迭代,以便按顺序访问这些值。为了提供序列中的数字流,range 函数跟踪最后一个数字和步长。

我们还可以通过将生成器转换为列表来查看整个序列。

list(range(5))
[0, 1, 2, 3, 4]

示例 2

我们可以创建自己的生成器函数。语法与创建普通函数非常相似,但有一个关键的区别。

下面是一个生成器函数,它返回从 1 开始的给定范围内所有其他数字的立方。

def mygenerator(n):
   for i in range(1, n, 2):
      yield i**3

生成器和普通函数的主要区别在于我们不使用 return 关键字。而是使用 yield 关键字。

我们现在可以在 for 循环中使用我们的生成器:

for i in mygenerator(10):
   print(i)
1 
27 
125 
343 
729

示例 3

创建生成器的另一种方法是使用生成器表达式。它类似于列表理解。

mygenerator = (i**3 for i in range(1,10,2))mygenerator
<generator object <genexpr> at 0x7f867be7b9d0>

我们现在可以迭代它。

for i in mygenerator:
   print(i)
1 
27 
125 
343 
729

需要注意的是,一旦我们迭代了一个生成器并到达了末尾,我们就不能再迭代了。例如,如果我们重新运行上面的 For 循环,它将不会返回任何内容。

在示例 2 中情况并非如此,因为我们有一个生成器函数,它在每次执行时都会创建一个生成器。您可能会注意到,在这个示例中我们没有函数调用。相反,我们有一个生成器对象。

实例 4

我们可以使用 next 函数手动迭代一个生成器。让我们首先创建一个新的生成器对象。

def mygenerator(n):
   for i in range(1, n, 2):
      yield i * (i + 1)my_gen = mygenerator(6)

我们现在可以使用 next 函数来请求生成器将返回的下一个值。

next(my_gen)
2next(my_gen)
12next(my_gen)
30next(my_gen)
> StopIteration error

如果我们在到达终点后调用生成器上的下一个函数,它将返回 StopIteration 错误。for 循环的步骤与我们处理下一个函数的步骤相同。然而,当使用 for 循环时,我们不会得到 StopIteration 错误,因为它会自动捕捉这个错误。

实例 5

我们经常看到术语 iterable 和 iterator。iterable 是我们可以迭代的对象,比如列表、集合、字符串等等。然而,我们不能将可迭代对象作为迭代器。

有一个内置的 Python 函数可以将 iterable 转换为 iterator。令人惊讶的是,它是 iter 函数。例如,我们可以迭代字符串,但不能将它们用作迭代器。iter 函数允许使用字符串作为迭代器。

my_string = "Python"next(my_string)
> TypeError: 'str' object is not an iterator

让我们将其转换为迭代器,然后再次调用下一个函数。

my_string_new = iter(my_string)next(my_string_new)
'P'next(my_string_new)
'y'

实例 6

iter 函数也可以用来将列表转换成迭代器。

my_list = ['a', 'b', 'c', 'd', 'e']my_gen = iter(my_list)type(my_gen)
list_iterator

让我们在 for 循环中使用它。

for i in my_gen:
   print(i)
a
b
c
d
e

结论

当处理分配大量内存的序列时,发生器非常有用。生成器支持迭代协议,所以当我们调用它们时,它们不会返回值并退出。

序列中的下一个值生成后,它们会自动挂起,并在请求下一个值时的最后一点恢复其执行状态。

优点是生成器一次计算一个值,并等待下一个值被调用,而不是一次计算整个序列。

感谢您的阅读。如果您有任何反馈,请告诉我。

使用 PostgreSQL 掌握 SQL 连接的 6 个示例

原文:https://towardsdatascience.com/6-examples-to-master-sql-joins-with-postgresql-db56de76d27e?source=collection_archive---------23-----------------------

PostgreSQL:世界上最先进的开源关系数据库

Unsplash 上拍摄的 Mineragua 苏打水

SQL 提供了许多函数和方法来管理以表格形式存储的数据。关系数据库管理系统(RDBMS)是一个使用 SQL 来管理存储在关系数据库中的数据的程序。

关系数据库包含许多通过共享列相互关联的表。有许多不同的 RDBMSs,如 MySQL、PostgreSQL、SQL Server 等等。

在本文中,我们将通过 6 个例子来演示 SQL 连接是如何执行的。如果您想从 SQL 和 PostgreSQL 的基本介绍开始,这里有我以前写的两篇介绍性文章:

SQL 连接允许从多个表中检索数据。我们基本上是根据相关表的公共列中的值来组合多个表。然后我们可以从这些表格中提取任何信息。

我使用 Kaggle 上的墨尔本住房数据集中的数据创建了两个表格。这些表的名称是 houses 和 location,它们基于“houseid”列相关联。

房屋表的前 5 行(图片由作者提供)

位置表的前 5 行(作者图片)

示例 1

查找 2017 年 4 月 3 日发布的房屋地址。

select location.address, houses.date                                                                    from location                                                                                                    join houses                                                                                                      on location.houseid = houses.houseid                                                                             where houses.date = '2017-04-03'                                                                                 limit 5;address          |    date
-----------------+------------
5 Charles St     | 2017-04-03
40 Federation La | 2017-04-03
50 Bedford St    | 2017-04-03
23 Hart St       | 2017-04-03
1/80 Hawker St   | 2017-04-03

我们首先指定要选择的列及其表名。第二行和第三行包含表名。然后,我们指定用于匹配表间行的条件。最后,where 语句用于筛选行。Limit 关键字,顾名思义,限制要显示的行数。

示例 2

找出北部大都市地区 h 型房屋的数量。

SELECT COUNT(1)                                                                                         FROM location                                                                                                    JOIN houses                                                                                                      ON location.houseid = houses.houseid                                                                             WHERE type = 'h' AND regionname = 'Northern Metropolitan';count
-------
2754(1 row)

有 2754 套房子符合我们的条件。您可能会注意到,我们不必为 where 语句中使用的列编写表名。这是允许的,除非表中没有同名的列。

示例 3

找出北部大都市地区每种类型的房屋数量。

SELECT type, COUNT(1) AS number_of_houses
FROM houses
JOIN location
ON houses.houseid = location.houseid
WHERE regionname = 'Northern Metropolitan'
GROUP BY type;type | number_of_houses
-----+------------------
t    |              307
h    |             2754
u    |              829(3 rows)

这个例子和上一个很相似。我们使用类型列对观测值(即行)进行分组,然后对每组中的房屋进行计数,而不是只对 h 类型的房屋进行计数。

实例 4

找出每个郊区的平均房价,并根据平均价格显示前 5 个郊区。

SELECT suburb, AVG(Price) AS avg_house_price                                                            FROM location                                                                                                    JOIN houses                                                                                                      ON location.houseid = houses.houseid                                                                             GROUP BY suburb                                                                                                  ORDER BY avg_house_price DESC                                                                                    LIMIT 5;suburb      |  avg_house_price
------------+--------------------
Kooyong     |            2185000
Canterbury  | 2180240.7407407407
Middle Park | 2082529.4117647058
Albert Park |  1941355.072463768
Brighton    |            1930158(5 rows)

它类似于前面示例中的 group by 操作。在本例中,我们还基于聚合列(avg_house_price)对结果进行排序。默认情况下,结果按升序排序,但可以使用 desc 关键字进行更改。

实例 5

到目前为止,我们已经在 join 子句中交替使用了表名。桌子的顺序并不重要。“从房屋连接位置”与“从位置连接房屋”相同。

顺序无关紧要的原因是我们使用了所谓的“内部连接”。仅选择在两个表中具有匹配值的行。

(图片由作者提供)

当我们执行左连接时,我们从左侧获取整个表(即 join 子句中的第一个表),然后只从右侧表中获取匹配的行。

(图片由作者提供)

让我们找出每个地区房屋的平均土地面积。

SELECT regionname, ROUND(AVG(landsize)) AS avg_landsize                                                 FROM location                                                                                                    INNER JOIN houses                                                                                                ON location.houseid = houses.houseid                                                                             GROUP BY regionname;regionname                 | avg_landsize
---------------------------+--------------
Eastern Metropolitan       |          634
Western Metropolitan       |          494
South-Eastern Metropolitan |          614
Southern Metropolitan      |          509
Western Victoria           |          656
Eastern Victoria           |         2950
Northern Metropolitan      |          569
Northern Victoria          |         3355

语法是一样的,只是我们写的是“左连接”而不是“连接”。请记住,当我们使用 left 或 right join 时,join 子句中表名的顺序很重要。

没有必要明确提到右连接,因为只需切换表名就可以将它转换为左连接。

实例 6

我们还有“完全外部连接”,它包括两个表中匹配的行,也包括不匹配的行。

(图片由作者提供)

让我们查找地址中包含“公园”一词并且有 4 个以上房间的房子的价格。

sonery=# SELECT (price/1000000) AS price_million, address                                                        FROM houses                                                                                                      FULL OUTER JOIN location                                                                                         ON houses.houseid = location.houseid                                                                             WHERE address LIKE '%Park%' AND rooms >4;price_million  |   address
---------------+-------------
           2.1 | 21 Park Rd
           2.3 | 119 Park St
             2 | 52 Park Rd

在我们的例子中,连接的类型实际上并不重要,因为两个表都包含每个房屋 id。然而,有些情况下我们需要使用左连接或外连接。因此,了解它们是如何工作的很重要。

结论

我们已经做了 6 个例子来演示连接是如何工作的。我们需要从关系数据库中检索的数据通常分布在多个表中。因此,全面理解 SQL 连接非常重要。

感谢您的阅读。如果您有任何反馈,请告诉我。

6 个使用 R 执行高效数据分析和操作的示例

原文:https://towardsdatascience.com/6-examples-to-perform-efficient-data-analysis-and-manipulation-with-r-73db4ef6efc9?source=collection_archive---------23-----------------------

r 使它变得简单、高效和快速。

安德斯·吉尔登Unsplash 上拍摄

Python 和 R 是数据科学生态系统中的主流编程语言。我开始用 Python 学*数据科学,我建议你也这样做。

自从我开始作为一名数据科学家工作以来,我一直在广泛地使用 Python 和 R。然而,当涉及到数据分析和操作时,我倾向于选择 R 而不是 Python。

在本文中,我们将探索 r 的数据表包的一些优秀特性。即使对于大型数据集,它也是简单而高效的。

我们将使用 Kaggle 上提供的关于奥运会历史的数据集。它是在知识共享许可下共享的,所以我们可以公开使用和共享它。

就像 Python 一样,R 有几个简化和加速数据科学任务的包。我们将使用数据表包,它有点像 Python 熊猫的 R 等价物。

install.packages("data.table") #installlibrary(data.table)  #import

我们可以用fread函数读取数据集。

dt <- fread("athlete_events.csv")dim(dt)
271116   15

该数据集包含超过 27 万行和 15 列。每条线代表一名运动员和他/她在给定运动中的表现。对于本文中的例子,我们不需要所有的列。让我们先过滤一些列。

dt <- dt[, c("Sex","Age","Height","Weight",
             "Team","Sport","Medal")]head(dt)

(图片由作者提供)

示例 1

找出获得奖牌总数最多的 5 个国家。

dt[!is.na(Medal), .N, Team][order(-N)][1:5] Team       N
1: United States    5219
2:  Soviet Union    2451
3:       Germany    1984
4: Great Britain    1673
5:        France    1550

第一个逗号之前的表达式过滤掉了 medal 列中的空值,N 是 r 的 count 函数。第二个逗号之后的列是用于分组的列。由于我们对每个国家获得的奖牌感兴趣,所以我们在这里写团队栏。最后,结果按计数降序排列。如果 N 前面没有负号,结果将按升序排序。

在一小段代码中,我们实现了过滤、分组、聚集和排序。

示例 2

创建一个列,表明运动员是否获得了奖牌,而不考虑奖牌的类型。

dt[, is_medal := ifelse(is.na(Medal),0,1)]head(dt)

(图片由作者提供)

“:=”表达式就地创建一个新列,以便修改当前数据表。ifelse函数评估给定的条件并相应地赋值。

示例 3

“:=”表达式的一个好处是它也适用于分组。例如,我们可能需要创建一个列来显示每个国家获得的奖牌总数。

一种方法是单独计算这个值,然后按团队名称与原始表合并。

medals <- dt[, .(medal_count = sum(is_medal)), Team]dt <- merge(dt, medals, by="Team", all.x = TRUE)

数据表还提供了一个更简单的解决方案:

dt[, medal_count := sum(is_medal), Team]

它计算每支队伍获得的奖牌数,并将数值适当地放入奖牌数列。

(图片由作者提供)

实例 4

创建一个包含每个国家运动员的平均体重指数(身体质量指数)的列。

一种方法是计算每个运动员的身体质量指数,然后取平均值。然而,如果我们不想添加额外的身体质量指数列,我们可以直接计算每个国家的平均身体质量指数。

dt[, avg_bmi := mean(Weight / (Height/100)**2, na.rm=TRUE), Team]

(图片由作者提供)

na.rm参数设置为真很重要。否则,即使组中只有一个 null 值,结果也是 null。“丹麦/瑞典”队的平均 bmi 值为空,因为该队的所有身高和体重值都为空。

实例 5

我们之前已经计算了每个国家获得的奖牌数。我们也来算算这些奖牌来自多少个运动项目。

dt[is_medal==1, .(number_of_sports = uniqueN(Sport)), Team][order(-number_of_sports)][1:5]

前 5 名(图片由作者提供)

美国在 47 个不同的项目中赢得了奖牌。

实例 6

我们可以在一次操作中计算多个聚合。让我们分别计算那些赢得和没有赢得奖牌的男性和女性的平均年龄、身高和体重。

dt[, .(avg_age = mean(Age, na.rm=T),
       avg_height = mean(Height, na.rm=T),
       avg_weight = mean(Weight, na.rm=T)),
   .(Sex, is_medal)]

(图片由作者提供)

我们可以根据需要在括号中列出任意多的聚合。因为我们对基于性别和奖牌的分组都感兴趣,所以我们使用这两个列进行分组。

结论

我们做了 6 个例子来演示数据表包如何高效地执行数据分析和操作。我们在这篇文章中所涉及的只是它的一小部分功能。然而,典型的任务大多涉及像这些例子中的基本操作。

感谢您的阅读。如果您有任何反馈,请告诉我。

Python 中 6 种奇特的内置文本换行技术

原文:https://towardsdatascience.com/6-fancy-built-in-text-wrapping-techniques-in-python-a78cc57c2566?source=collection_archive---------19-----------------------

照片由 Bob_DmytPixabay 上拍摄

单行代码使您的文本在应用程序中“打印就绪”

大家都知道 Python 以全面的标准库而闻名。在大多数其他编程语言中,我们将不得不使用代码块来实现许多特性。然而,在 Python 中,我们可以发现许多奇特的特性已经被实现,我们可以开箱即用。

在本文中,我将介绍另一个 Python 内置库“文本包装器”,它可以帮助我们非常容易地在应用程序中生成“打印就绪”的包装文本。不需要安装它,只需导入并使用它,因为它是 Python3 自带的标准库。

1.基本文本换行

照片由 SpencerWingPixabay 上拍摄

正如我在介绍中所说的,您不需要安装任何东西。只需按如下方式导入库。

import textwrap as tr

出于演示的目的,让我们定义一个字符串,这是我从 Python 的维基百科页面复制的一个句子 https://en . Wikipedia . org/wiki/Python _(programming _ language)

my_str = "Python is an interpreted, high-level and general-purpose programming language."

好的。这个my_str不是短句。假设你的软件 UI 或者网页需要以一定的宽度显示文本。当文本长度超过宽度时,需要将文本分成多行。当然,我们不希望将它拆分成正好等于宽度的长度,因为这可能会导致一些单词部分位于行尾,而另一部分从下一行开始。从用户的角度来看,这不是一个好的阅读体验。

文本换行库来帮忙了。与其实现一些复杂的逻辑来检测单词边界,我们可以很容易地使用下面的代码来分解句子。

lines = tr.wrap(my_str, width=30)

如图所示,这个句子被分成三部分。这是因为我们设置了width=30,所以文本将在到达 30 之前换行,以确保它不会在 UI 中“溢出”。如果算上 3 块的长度,分别是 25,30,21。

因此,Python TextWrapper 足够智能,可以识别出下一个单词足够长,足以使当前行溢出,因此它会自动将其放入下一行。这就是为什么我们第一行有 25 个字符。

2.可打印的文字环绕

照片由 blickpixelPixabay 上拍摄

好吧,你可能会认为这仍然不够方便,因为我们仍然需要循环列表来逐行打印包装的字符串,如下所示。

是的,这就是为什么 Python 提供了另一个函数fill()来使它更加方便。

同样的字符串,不使用tr.wrap(),我们可以使用tr.fill()得到一个内部有\n的单个包装字符串,这就是“打印就绪”。

tr.fill(my_str, width=30)

多方便啊!

3.用文本包装截断

像素像素上拍摄的照片

我们必须在应用程序 UI 上显示所有内容吗?不总是。

我敢打赌,你一定在某些软件或网站上见过一些被删节的文字。例如,下面的截图来自 Quora.com。

看到“……(更多)”指示器了吗?它让我们知道里面有更多的内容,但现在不会显示所有内容。这是一种超出本文范围的 UI 设计概念。然而,如果您想使用 Python 模仿这种行为,一行代码就足够了。

让我们在上面的例子中继续使用同一个字符串。这一次,我们将使用tr.shorten()功能。

tr.shorten(my_str, width=30)

该字符串将被自动截断,总长度将小于 30。当然,如果宽度足够长,或者我们也可以说文本足够短,就不会被截断。

tr.shorten(my_str, width=80)

所以,我们设置了width=80,字符串小于那个。那就不会被截断了。

另外,如果我对占位符[...]不满意怎么办?它实际上只是一个默认的占位符,我们可以自定义它。

tr.shorten(my_str, width=30, placeholder=' ...(more)')

然后,我们得到了与 Quora 中完全相同的样式:)

4.自动清洗管柱

照片由 blickpixelPixabay 上拍摄

文本包装器库不仅可以包装和截断文本,如果格式有问题,它还可以修复文本。如果您的应用程序正在处理来自其他来源的大量文本,并且您希望在存储或显示它之前对其进行格式化,这将非常方便。

假设我们有另一个字符串,它的格式相当混乱。

my_str2 = '''
    Python is an interpreted,
    high-level and general-purpose
    programming language.
'''

这正是我们从上面的例子中得到的文本,但是每行有 2 个空格作为“公共缩进”。通过使用dedent()函数,我们可以很容易地摆脱它们。

tr.dedent(my_str2)

这里显示了使用和不使用dedent()功能的区别。

当然,它适用于任何数量的前导空白,而不仅仅是两个。

5.自定义自动缩进

CouleurPixabay 上拍摄的照片

与其去掉多行文本的缩进,不如添加一些缩进?是的,我们可以使用文本包装器。

有一个功能充当了dedent()的对立面,就是indent()。假设我们有如下一段代码

some_code = '''
import textwrap as trprint("hello world!")for i in range(10):
    print(i)'''

看下面的例子,它在每一行前面增加了两个空格。

tr.indent(some_code, '  ')

截图显示了与原始字符串的差异。

好吧,我同意目前这没有太多意义。为什么我们要在文本中添加前导空格?下面的例子可能会更有趣。

tr.indent(some_code, '>>> ')

是的,别忘了我们可以定制缩进所用的字符串。它看起来像 Python 控制台吗?不是 100%。没有文本的新行没有添加>>>提示。不要担心,indent()函数接受另一个参数,这个参数将是一个谓词,告诉程序“这一行是否应该添加前缀”。

tr.indent(some_code, '>>> ', lambda line: True)

所以现在所有的线都有提示了。它看起来完全像 Python 控制台。

6.重用 TextWrapper 实例

画框上创作的照片

到目前为止,我们已经在文本包装器库中引入了 5 个不同的函数。事实上,上面这些函数会自动从类中创建一个TextWrapper实例,然后应用文本的转换。然后,该实例将被释放。

当我们有许多需要包装的字符串,或者我们需要一些在TextWrapper中只定义为类方法而不是公共函数的特性时,我们必须实例化 TextWrapper 类。

好的一面是,我们还可以在任何需要的时候重用实例。

wrapper = tr.TextWrapper(
    width=50, 
    initial_indent="- "
)

在上面的代码中,我们从类中声明了一个文本包装实例,并将宽度初始化为 50。此外,我们定义了一个属性initial_indent,它将作为前缀添加到所有“包装”的文本中。

现在,我们需要多个句子。这些也是从同一个 Wiki 页面中提取的。

my_strings = [
    "Python is an interpreted, high-level and general-purpose programming language.",
    "Python's design philosophy emphasizes code readability with its notable use of significant indentation.",
    "Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.",
    "Python is dynamically-typed and garbage-collected.",
    "It supports multiple programming paradigms, including structured (particularly, procedural), object-oriented and functional programming.",
    "Python is often described as a \"batteries included\" language due to its comprehensive standard library."
]

那么,我们来包装吧!

for s in my_strings:
    print(wrapper.fill(s))

摘要

克利姆金皮克斯拜拍摄的照片

在本文中,我介绍了一个 Python 内置库“文本包装器”。它可以很容易地为我们换行,以确保所有的行都在一定的宽度内。这在有 UI 的应用程序中非常重要,这样文本就不会溢出。

不仅仅是文本换行,这个库还提供了很多非常方便的特性,比如缩进和体面。当我们想使用这个库用相同的参数包装文本时,最好实例化文本包装类,这样我们就可以重用这个实例。

https://medium.com/@qiuyujx/membership

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和其他成千上万的作者!(点击上面的链接)

posted @ 2024-10-18 09:26  绝不原创的飞龙  阅读(393)  评论(0)    收藏  举报