TowardsDataScience 博客中文翻译 2020(四十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

创建干净而有趣的 Python 图表的初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-creating-clean-and-appetizing-python-charts-f7e1cf1899d2?source=collection_archive---------24-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由斯特凡Unsplash 上拍摄

数据可视化

随着诸如 Matplotlib、Seaborn 和 Plotly 之类的优秀图形软件包数量的增加,人们很快就会对如何使它看起来更好感到困惑。这并不意味着你可以偷懒!

当你第一次试图弄清楚如何使你的图表看起来完全符合你的要求时,你会感到困惑,尤其是因为似乎 StackOverflow 上的每个人都有自己绘制和定制图表的方式。当您意识到您不能仅仅应用 Matplotlib 中完全相同的代码来定制 Seaborn 中强大的开箱即用的绘图时,这变得更加令人沮丧。

本文将重点关注在试图用 Matplotlib 创建一个清晰的图表时将会遇到的主要问题,然后深入研究这些工具如何转化为 Seaborn 和 Plotly。

  1. **电镀:**标签,支线剧情,轴刻度,旋转,支线剧情
  2. **成分:**线宽、线型、色调/Cmap、线条颜色、图例和样式。
  3. 调料: Kwargs,动画,注解,还有其他类似 Seaborn,Plotly 的包。
  4. **上菜:**针对你制作的每张图表要问的问题

电镀

"如何设置标题、轴标签、轴限制等?"可能是关于 Matplotlib 最常搜索的问题之一。我喜欢用set()把所有东西都放在一行。

import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize = (10,10))
df.plot(kind="line")
ax.set(Title = "Test Title", xlabel = "x label", ylabel= "y label", xlim= (0,5), ylim = (0,5))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

绘制空白图形

**支线剧情:**关于定制支线剧情已经有很多很棒的文章了,我就简单说一下。以下是你开始时真正需要知道的:

fig, (ax1,ax2) = plt.subplots(2,1, sharex=True) #creating a figure with two charts in the same column, that share an x axis.ax3 = ax1.twinx #creating secondary y axis.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ax1 是第一个图,因此 ax3 在第一个图上创建了一个双轴

有时在你添加了第二个轴或一些支线剧情后,你的情节和标签看起来会被压扁,所以使用fig.tight_layout()来固定间距。

如果你正在绘制一个像pivot.plot(kind=’line’)这样的数据透视表,那么你可以做的一个很酷的技巧是pivot.plot(kind = 'line’, subplots = True)为数据透视表的每一列快速创建支线剧情。使用plot()绘制枢轴将成为你最好的朋友,索引将永远是 x 轴,列将是 y 轴。

**刻度管理:**假设您想要在折线图中绘制一些“对象”类型的数据,但是轴不允许您这样做,因为它需要是一个 int!首先保存分类变量名称的列表,然后将分类列转换为整数(1,2,3,4…)。

选择频率(1,5,10,…)并将其保存在另一个列表中。现在设置您的滴答频率,然后用您的按滴答频率索引的分类变量列表替换标签。代码应该如下所示:

cat_labels = df[“column_name"].unique()df[“column_name"] = np.arange(1,100,1) tickfrequency = np.arange[1,100,5] #every 5th tick to be shown on axis ax.xaxis.set_ticks(tickfrequency) ax.xaxis.set_ticklabels(cat_labels[tickfrequency])

配料

**线条定制:**线条宽度、标记、颜色和类型可以在这里找到如果你向下滚动到格式字符串。如果愿意,您可以使用set_dashes()创建自定义模式。

import numpy as np#data for plots
x = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots()
# Using set_dashes() to modify dashing of an existing lineline1, = ax.plot(x, y, label='line 1')
line1.set_dashes([2, 2, 10, 2]) line2 = ax.plot(x, y-0.4, label='line 3', color='green', marker='o', linestyle='dashed', linewidth=0.5, markersize=0.3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们在同一图形上先画一条线,然后画一个散点,散点会覆盖这条线。现在解决这个问题的一个方法是最后绘制这条线,但是使用zorder更容易跟踪。较高的zorder 值会覆盖较低的值,把它想象成一个向你走来的 z 轴。

我认为没有足够多的人使用不同的线条模式(我对此也感到内疚),但是数据可视化也需要考虑可访问性。 考虑你的观众是色盲的情况,使用不同的线条图案或色盲友好的颜色图。要了解更多信息,请跟随这条线索,但一般来说你要避免以下组合 : 绿色&棕色,蓝色&紫色,绿色&蓝色,浅绿色&黄色,蓝色&灰色,绿色&灰色,绿色&黑色。

**管理颜色:**所以你有 20 个不同的列试图绘制(如果你有更多,请考虑过滤或创建不同的图表),但颜色在第一个 10 个之后重复!

unique = example_df["column_name"].unique()
palette = dict(zip(unique, sns.color_palette()))

对于 Matplotlib,你设置color = palette,对于 Seaborn,你在你的绘图函数的参数中设置palette = palette

您还可以将分类变量传递给“hue ”,以便在 Seaborn 中自动分配颜色,或者传递给“c ”,以便使用 matplotlib,如下所示。

c=example_df['column_name'].apply(lambda x: palette[x]) 
#this is replacing the unique label with the color assigned through the whole column.

通过支线剧情和循环,你已经在同一张图表上得到了你的多个情节,但是现在你的传奇完全是一团糟。让我们来看一下如何创建自定义图例。假设您正在绘制第二个 y 轴,但不想要两个图例。

您可以随意设置图例标记,并按如下方式分配标签:

from matplotlib.patches import Patch
from matplotlib.lines import Line2Dlegend_elements = [Line2D([0], [0], color='b', lw=4, label='Line1'),
                   Patch(facecolor='r', edgecolor='g',
                         label='Line2')]ax1.legend(handles = legend_elements,loc='best')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你正在绘制一个循环,以下是有用的

from collections import OrderedDicthandles, labels = plt.gca().get_legend_handles_labels()
by_label = OrderedDict(zip(labels, handles))    
ax.legend(by_label.values(), by_label.keys())

您可以将图例的loc设置为 9 个位置中的一个(3x3 网格),将其设置为“最佳”,或者通过改变bbox_to_anchor=(1, 1.1))的值将其移出图形。ncols将允许您通过指定每行放置多少个标签来横向压缩您的图例。

ax.legend(by_label.values(), by_label.keys(), bbox_to_anchor=(1,1.1),ncol = 3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你还是不喜欢你的图表吗?然后使用plt.style.use('ggplot2')更改样式表。要查看完整的风格列表,请点击这里

调料

现在事情会变得有点复杂。如果你输入help(fig.plot),你会在最后看到**kwargs**kwargs 是一个字典的设置,帮助你定制到一个发球台。这是一篇很好的文章解释了一般的*args**kwargs,但简而言之,因为 Seaborn 方法是建立在 Matplotlib 之上的,所以你可以将任何 Matplotlib 参数传递到 Seaborn 的**kwargs中(并像字体一样进行定制)。我在下面谈到了一个比这更简单的方法,你已经学到了。

你一定要知道 中的一个是gridspec,因为它可以让你改变支线剧情的比例(也就是说,让上面的变小,下面的变大)。

**动画:**我发现使用这种方法最简单,而不是用matplotlib.animation搞乱不同的编剧和问题。如果你的动画太大使用这个来缩小它们的尺寸。

**注解:**这个简单,只用于文本,其中前两个值是 x 和 y 坐标:

text = ("This is a really long string that I'd rather have wrapped so that it "
     "doesn't go outside of the figure, but if it's long enough it will go "
     "off the top or bottom!")plt.text(4, 1, text, ha='left', rotation=15, wrap=**True**)

对于箭头和文本之类的东西,也是类似的:

ax.annotate(‘local max’, xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor=’black’, shrink=0.05) 

对于图形上的水平线或垂直线,您可以绘制:

plt.axhline(y=0.5, color='r', linestyle='-')
plt.axvline(x=0.5, color='r', linestyle='-')

这个包完全是基于 Matplotlib 构建的。由于单线图的复杂性,你需要更多地关注args来找出你需要改变的地方。处理所有定制问题的最简单方法是创建一个fig, ax = plt.subplots(),将轴传递给参数ax=ax,然后使用ax.set()定制轴。有些情节不会有“ax”参数,但会有一个“height”你可以设置。其他情节允许你改变情节的类型,但是你不能轻易改变网格/支线剧情的布局。然而,知道了 [gridspec](https://matplotlib.org/3.2.1/tutorials/intermediate/gridspec.html) kwarg 会让你相对轻松地重现许多剧情。

这不是一篇关于最有用的图的文章,但是一定要熟悉pairplot()并通过在sns.heatmap()中插入 df.corr()来创建相关图。这些是让任何人惊叹的快速方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谷歌图片相关图示例

Plotly: 它们经历了多次迭代,拥有 Express、Graph Objects、Dash 等子类。它主要是用 Javascript ( D3.jsHTMLCSS )在前端构建的,这就是为什么你可以在 HTML 文件(或者嵌入)中与它交互。一开始可能会令人困惑,但可以这样想:

  1. plotly . express是给你的 Seaborn 式的俏皮话。
  2. 是为了更复杂的可视化和定制。他们不使用支线剧情,而是使用“轨迹”,你可以在同一个剧情中添加轨迹(就像 Matplotlib 中的轴)或者使用它们来创建支线剧情。查看此链接以深入了解如何定制您的图表。
  3. plotly.dash 是使用回调的能力(比如有一个滑块来更新不同日期的图表,或者下拉菜单来改变你的 x 和 y 轴)。这是一个非常强大的工具,可以部署在 Heroku 或 Jupyter 笔记本上,但需要一些时间来适应。

Plotly 需要记住的一件重要事情是,根据您绘制的数据量,交互速度可能会显著降低。一种方法是使用这个方法

上菜

如果这太多太混乱,不要担心,因为数据可视化并不容易。就像建立机器学习模型一样,你的大部分时间并没有花在有趣的事情上——而是花在争论和清理数据上,以便可以可视化。你可以做很多改变,这些改变可能看起来微不足道,没有必要,但是当你把它们加起来,这就是星盘和混乱的星盘之间的区别。

在发送任何图表之前,有几个问题需要问自己:

  1. ****对于电镀:我的轴的规模和分布基于域有意义吗?我是否在一张图表上放了太多东西或者太多支线剧情?
  2. ****对于配料:我能否轻松清晰地理解每条线/条/点所指的内容?你通常会有太多或太少的变化,并不是所有的变化都可以通过颜色和图例来补偿!
  3. ****为了调味:我真的需要它是 3D 的、动画的、可交互的吗?一点点盐可以增加味道,但是太多了,人们会感到恶心。在棒线图或哑铃图工作正常的情况下,放入类似桑基图这样的东西是多余的。

任何时候你感到困惑,只要记住你的图表试图从数据中传达一个故事,如果它没有做到这一点,你需要再次浏览它,添加或删除元素。大多数时候,人们不会有足够的耐心耐心听完你对你想要展示的东西的冗长解释。****

祝你们好运,我希望你们都能给出一些令人惊叹的视觉效果!

Python 数据分析初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-data-analysis-in-python-188706df5447?source=collection_archive---------2-----------------------

Python 数据分析入门分步指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯·利维拉尼在 Unsplash 上的照片

数据分析师的角色

数据分析师使用编程工具来挖掘大量复杂的数据,并从这些数据中找到相关信息。

简而言之,分析师是从杂乱的数据中获取意义的人。为了在工作场所发挥作用,数据分析师需要具备以下方面的技能:

  • 领域专业知识——为了挖掘数据并提出与其工作场所相关的见解,分析师需要具备领域专业知识。
  • 编程技能—作为一名数据分析师,你需要知道使用什么样的库来清理数据、挖掘数据并从中获得洞察力。
  • 统计 —分析师可能需要使用一些统计工具来从数据中获取意义。
  • 可视化技能 —数据分析师需要具备出色的数据可视化技能,以便汇总数据并呈现给第三方。
  • 讲故事— 最后,分析师需要向利益相关者或客户传达他们的发现。这意味着他们需要创建一个数据故事,并有能力讲述它。

在本文中,我将带您完成使用 Python 的端到端数据分析过程。

如果您遵循本教程并按照我的方式编写代码,那么您可以将这些代码和工具用于未来的数据分析项目。

我们将从下载和清理数据集开始,然后继续分析和可视化。最后,我们将围绕我们的数据发现讲述一个故事。

我将使用来自 Kaggle 的一个名为Pima Indian Diabetes Database的数据集,您可以下载该数据集来执行分析。

先决条件

在整个分析过程中,我将使用 Jupyter 笔记本。你可以使用任何你喜欢的 Python IDE。

您将需要沿途安装库,我将提供链接,引导您完成安装过程。

分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卢克·切瑟在 Unsplash 上的照片

下载完数据集后,你需要阅读*。csv* 文件作为 Python 中的数据帧。你可以使用熊猫图书馆来做到这一点。

如果您还没有安装它,您可以在您的终端中使用一个简单的“*pip install pandas”*来完成。如果你在安装时遇到任何困难,或者只是想了解更多关于熊猫库的知识,你可以在这里查看他们的文档。

读取数据

要将数据框读入 Python,首先需要导入 Pandas。然后,您可以读取该文件并使用以下代码行创建数据框:

import pandas as pd
df = pd.read_csv('diabetes.csv')

要检查数据帧的头部,请运行:

df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从上面的截图中,您可以看到与患者健康相关的 9 个不同变量。

作为一名分析师,您需要对这些变量有一个基本的了解:

  • 怀孕:患者怀孕的次数
  • 葡萄糖:患者的葡萄糖水平
  • 血压
  • 皮肤厚度:患者皮肤的厚度,单位为毫米
  • 胰岛素:患者的胰岛素水平
  • 身体质量指数:患者体重指数
  • 糖尿病糖尿病功能:亲属有糖尿病史
  • 年龄
  • 结果:患者是否患有糖尿病

作为一名分析师,您需要了解这些变量类型(数值型和分类型)之间的区别。

数值变量是一种测量变量,具有某种数值意义。除了“结果之外,该数据集中的所有变量都是数字。

分类变量也叫名义变量,有两个或两个以上可以分类的类别。

变量“结果”是分类的——0 代表没有糖尿病,1 代表有糖尿病。

快速笔记

在继续分析之前,我想简单说明一下:

分析师也是人,我们经常会对我们期望在数据中看到的东西有先入为主的想法。

例如,你会认为老年人更有可能患糖尿病。您可能希望在数据中看到这种相关性,但情况可能并不总是如此。

在分析过程中保持开放的心态,不要让你的偏见影响决策。

熊猫简介

这是一个非常有用的工具,可供分析师使用。它生成数据框的分析报告,并帮助您更好地理解变量之间的相关性。

要生成 Pandas 分析报告,请运行以下代码行:

import pandas_profiling as pp
pp.ProfileReport(df)

该报告将为您提供数据集的一些总体统计信息,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

通过浏览数据集统计数据,我们可以看到数据框中没有缺失或重复的像元。

上面提供的信息通常需要我们运行几行代码来查找,但是使用 Pandas Profiling 生成这些信息要容易得多。

Pandas Profiling 还提供了每个变量的更多信息。我给你看一个例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这是为变量“怀孕”生成的信息

作为一名分析师,这份报告节省了大量时间,因为我们不必检查每个变量,也不必运行太多行代码。

从这里,我们可以看出:

  • 变量“*怀孕”*有 17 个不同的值。
  • 一个人怀孕的次数最少是 0 次,最多是 17 次。
  • 这一列中零值的数量非常少(只有 14.5%)。这意味着数据集中 80%以上的患者都怀孕了。

在报告中,为每个变量提供了这样的信息。这对我们理解数据集和其中的所有列很有帮助。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

上面的图是一个相关矩阵。它帮助我们更好地理解数据集中变量之间的相关性。

变量“年龄”和“皮肤厚度”之间存在轻微的正相关关系,这可以在分析的可视化部分进一步研究。

由于如上所示,数据帧中没有丢失或重复的行,我们不需要做任何额外的数据清理。

数据可视化

现在我们对每个变量都有了基本的了解,我们可以试着找出它们之间的关系。

最简单快捷的方法是生成可视化效果。

在本教程中,我们将使用三个库来完成这项工作——Matplotlib、Seaborn 和 Plotly。

如果你是 Python 的完全初学者,我建议开始熟悉 Matplotlib 和 Seaborn。

这里的是 Matplotlib 的文档,这里的是 Seaborn 的文档。我强烈建议花一些时间阅读文档,并使用这两个库做教程,以提高您的可视化技能。

Plotly 是一个允许您创建交互式图表的库,需要稍微熟悉 Python 才能掌握。你可以在这里找到安装指南和要求。

如果你完全按照这个教程,你将能够用这三个库制作漂亮的图表。然后,您可以将我的代码用作将来任何分析或可视化任务的模板。

可视化结果变量

首先,运行下面几行代码,在安装后导入 Matplotlib、Seaborn、Numpy 和 Plotly:

# Visualization Importsimport matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()
get_ipython().run_line_magic('matplotlib', 'inline')
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls
import plotly.express as px
import numpy as np

接下来,运行以下代码行来创建一个饼图,可视化结果变量:

dist = df['Outcome'].value_counts()
colors = ['mediumturquoise', 'darkorange']
trace = go.Pie(values=(np.array(dist)),labels=dist.index)
layout = go.Layout(title='Diabetes Outcome')
data = [trace]
fig = go.Figure(trace,layout)
fig.update_traces(marker=dict(colors=colors, line=dict(color='#000000', width=2)))
fig.show()

这是用 Plotly 库完成的,你会得到一个交互式图表,看起来像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

您可以摆弄图表,选择更改颜色、标签和图例。

然而,从上面的图表中,我们可以看到数据集中的大多数患者都不是糖尿病患者。其中不到一半的结果为 1(患有糖尿病)。

Plotly 相关矩阵

类似于在 Pandas Profiling 中生成的相关矩阵,我们可以使用 Plotly 创建一个:

def df_to_plotly(df):
    return {'z': df.values.tolist(),
            'x': df.columns.tolist(),
            'y': df.index.tolist() }import plotly.graph_objects as go
dfNew = df.corr()
fig = go.Figure(data=go.Heatmap(df_to_plotly(dfNew)))
fig.show()

上面的代码将生成一个类似于上面的相关矩阵:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

同样,与上面生成的矩阵类似,可以观察到变量之间的正相关关系:

  • 年龄和怀孕
  • 葡萄糖和结果
  • 皮肤厚度和胰岛素

为了进一步了解变量之间的相关性,我们将创建一些图表:

可视化葡萄糖水平和胰岛素

fig = px.scatter(df, x='Glucose', y='Insulin')
fig.update_traces(marker_color="turquoise",marker_line_color='rgb(8,48,107)',
                  marker_line_width=1.5)
fig.update_layout(title_text='Glucose and Insulin')
fig.show()

运行上面的代码应该会得到如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

变量葡萄糖和胰岛素之间存在正相关。这是有道理的,因为血糖水平较高的人应该摄入更多的胰岛素。

想象结果和年龄

现在,我们将可视化变量结果和年龄。为此,我们将使用下面的代码创建一个箱线图:

fig = px.box(df, x='Outcome', y='Age')
fig.update_traces(marker_color="midnightblue",marker_line_color='rgb(8,48,107)',
                  marker_line_width=1.5)
fig.update_layout(title_text='Age and Outcome')
fig.show()

结果图看起来有点像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从上面的图中,你可以看到老年人更容易患糖尿病。患有糖尿病的成年人的平均年龄在 35 岁左右,而没有糖尿病的人的平均年龄要低得多。

然而,有很多异常值。

有一些没有糖尿病的老年人(一个甚至超过 80 岁),这可以在箱线图中观察到。

想象身体质量指数和结果

最后,我们将把变量“身体质量指数”和“结果”可视化,看看这两个变量之间是否有关联。

为此,我们将使用 Seaborn 库:

plot = sns.boxplot(x='Outcome',y="BMI",data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这里创建的箱线图类似于上面使用 Plotly 创建的箱线图。然而,Plotly 更擅长创建交互式的可视化效果,与 Seaborn 制作的图表相比,这些图表看起来更漂亮。

从上面的方框图中,我们可以看到较高的身体质量指数与积极的结果相关。患有糖尿病的人比没有糖尿病的人更容易患身体质量指数氏症。

您可以通过简单地更改变量名并运行相同的代码行来制作更多类似上面的可视化效果。

我将把它作为一个练习留给你去做,让你更好地掌握 Python 的可视化技巧。

数据叙事

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Blaz PhotoUnsplash 上拍摄

最后,我们可以围绕我们已经分析和可视化的数据讲一个故事。我们的发现可以细分如下:

糖尿病患者比非糖尿病患者更容易衰老。他们也更有可能有较高的身体质量指数氏症,或患有肥胖症。他们的血液中也更可能有较高的葡萄糖水平。血糖水平较高的人也倾向于服用更多的胰岛素,这种正相关性表明糖尿病患者也可能具有较高的胰岛素水平(这种相关性可以通过创建散点图来检查)。

本文到此为止!我希望本教程对您有所帮助,并且可以作为您需要创建的项目的未来参考。祝您在数据科学之旅中好运,并祝您学习愉快!

随时随地向任何人学习你所能学到的一切;总有一天你会感激你所做的——莎拉·考德威尔。

用 python 进行数据分析和机器学习的初学者指南——成人工资数据集

原文:https://towardsdatascience.com/a-beginners-guide-to-data-analysis-machine-learning-with-python-adult-salary-dataset-e5fc028b6f0a?source=collection_archive---------4-----------------------

使用 python 进行机器学习的入门教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

米卡·鲍梅斯特在 Unsplash 上的照片

你好。如果你想知道机器学习 (ML)到底是什么,数据分析和 ML 有什么关系,为什么每次你碰到 ML/数据分析我们都会听到 Python ?别再担心了,你马上就能找到答案了。

一旦你读完这篇文章,你将对什么是机器学习有一些基本的了解,为什么 Python 如此流行来执行 ML 模型的数据分析,你将能够自信地在你的工作场所加入关于 ML 的对话。本文可能是您学习这些技术的第一步。所以,让我们不要再拖延,直接进入主题。

什么是机器学习?

机器学习是人工智能(AI)的一个子集,通过从提供的数据中提取模式,训练模型像人一样思考和工作。如果一个 ML 程序有 99 行数据,你的算法可以预测第 100 行,而不需要人工编程。机器学习大致分为三种技术,即监督学习、非监督学习强化学习。在本文中,我们将研究监督学习用例,您可以从中了解更多信息。在 medium.com 有许多伟大的文章都在谈论 ML,但我发现有一篇文章,它用简单的术语展示了机器学习的完整概述,可能有助于你更多地了解 ML。

什么是数据分析? 通俗地说,数据分析无非就是了解你的数据。在互联网时代之前,数据非常有限,因为来源很少。但是,现在几乎所有东西都是数据的来源,从你手中的智能手机到你的搜索历史。因此,现在我们不仅拥有海量数据,还拥有各种各样的数据,如结构化、非结构化和半结构化数据。让我们以一个简单的 excel 表格为例,它有 100 列和 50k 多条记录作为数据源。为了从数据中获得一些有用的输出,您需要首先开始理解它。因此,您可以按照这些步骤来分析数据。

  • 从名称理解 excel 中列的用途。
  • 找出对你有用的栏目。
  • 去掉不需要的数据列。
  • 从您感兴趣的列中删除重复值或空值。
  • 将任何特殊或不需要的字符转换成数字或有意义的数据。

就是这样!您已经完成了清理和分析数据源的基本步骤。当然,当你为一个组织工作时,数据不会是简单的 excel 表格。数据可以是任何格式或任何类型:它可以是 CSV 文件、日志转储文件、事务性文件、数据库等。仅通过人工分析它们将是一项具有挑战性且乏味的任务。因此,我们借助各种可用的编程语言,如 Python、R、Java、SQL、Scala 等。还有很多工具,像 IBM SPSS,Power BI,Matlab。现在,这将我们带到文章中的下一个主题,为什么我们使用 Python 进行数据分析,为什么它是数据科学家或爱好者学习的最佳语言。

为什么 Python 这么受机器学习的欢迎?

让你惊讶的是 Python 从 90 年代就存在了。但是最近它变得流行是因为它的开源社区。Python 比许多编程语言有更多的优势,例如:

  • 用 python 编写代码很简单,因为它避免了编写大量样板代码。
  • Python 主要强调其清晰的可读性和自然语言语法。
  • 由于互联网上有大量的教程,这也很容易学会。
  • Python 的主要优势是它的强大的库。

库只不过是函数或方法的集合,你可以在代码中使用它们来执行某些操作,只需在需要时导入并调用它们,而不是从头开始编写。Python 有强大的机器学习库,如 Pandas、NumPy、SciPy、Seaborn、Matplotlib、Scrapy、Scikit-learn、Tensorflow、PyTorch、Plotly 等…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,不要被所有这些库和它们的名字所迷惑或淹没。理想情况下,您不会使用所有这些工具来执行数据分析和生成 ML 模型。但是对于一个数据科学家来说,掌握其中一些知识是很有必要的,这样会使他的工作变得容易得多。当您将这些库用于用例时,您会对它们有更好的理解,所以,关于库的讨论已经足够了。让我们在 Python 的帮助下,尝试使用数据分析技术解决一个用例,并建立一个预测性的机器学习模型,从而开始一些行动。

使用案例:

正如我前面提到的,互联网上有大量的资源可以用来学习 ML、数据分析和 Python。通过利用这些资源中的一些,我们将挖掘在 UCI 机器学习回购或 Kaggle 中可用的成人工资数据集

我已经将我在这个数据集上的工作整合到我的 Kaggle 笔记本中,可以在这里找到。为了更好地理解,这本笔记本在每一行代码上都有适当的注释,我也会使用笔记本中的代码片段在本文中进行更多的阐述。

问题陈述 :
你得到了一个 Excel 数据集,它有 15 列 48842 行。我们的任务是分析数据集,并通过开发一个有监督的机器学习模型来预测一个成年人的年收入是否会超过 50k。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Alexander MilsUnsplash 上拍摄的照片

好了,让我们从导入一些需要的库/模块开始。正如我在本文前面提到的,库只不过是大量已经编写好的代码,你需要做的就是在需要的时候使用它们。对每个导入的注释将解释其目的。

*# Import libraries* 

**import numpy as np** *# linear algebra*
**import pandas as pd** *# data processing,* 

*# Libraries for data visualization*
**import matplotlib.pyplot as pplt ** 
**import seaborn as sns** 
**from pandas.plotting import scatter_matrix**

*# Import scikit_learn module for the algorithm/model: Linear Regression*
**from sklearn.linear_model import LogisticRegression***# Import scikit_learn module to split the dataset into train.test sub-datasets*
**from sklearn.model_selection import train_test_split** *# Import scikit_learn module for k-fold cross validation*
**from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score***# import the metrics class*
**from sklearn import metrics**# import stats for accuracy 
**import statsmodels.api as sm**

下一步是加载数据集

*#load the dataset provided*
**salary_dataset = pd.read_csv('../input/adult-incomedataset/adult.csv')**

现在,如果你仔细阅读,上面的这一行代码可能会引起你的兴趣。这一行代码解释了很多关于 Python 简单而自然的语言语法。由于我们想要读取/加载一个 CSV,我们只需使用我们已经导入的 Pandas 库提供的 read_csv() 函数,并将其别名为 pd 。所以,现在我们需要做的就是从库中调用适当的函数,即 pd.read_csv() 。这向我们展示了 Python 库有多强大,可以在一行中加载一个 CSV 文件。

分析数据:

让我们开始分析提供的 excel。我们需要知道列、行、空对象等的数量。那么,让我们打开 excel 表,开始计算列数,获得行数,遍历每一行,找出其中的任何特殊字符或空值,找出所提供的每一列的数据类型。听起来单调乏味,对吗?不要担心,Python 和它的库可以提供帮助,让我们来看看如何实现。

*# salary dataset info to find columns and count of the data* 
**salary_dataset.info()**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看看这有多简单,同样只是一行代码,我们在其中调用适当的函数**。熊猫提供的 info()** 。我们得到了所有我们需要的信息,比如数据类型、空值计数、行数等。

我们看到一些列名中有特殊字符。我们最好删除它们,因为它们可能会给我们的数据分析带来问题。我们可以用熊猫**轻松做到这一点。**重命名()【函数】如下所示

*#replacing some special character columns names with proper names* 
**df.rename(columns={'capital-gain': 'capital gain', 'capital-loss': 'capital loss', 'native-country': 'country','hours-per-week': 'hours per week','marital-status': 'marital'}, inplace=True)
df.columns**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

扫一眼提供的数据,我们可以看到数据中有一些特殊字符,如**‘?’**。因此,让我们来计算数据中出现的特殊字符的数量。

数据清理:

*#Finding the special characters in the data frame* 
**df.isin(['?']).sum(axis=0)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据中包含特殊字符是不可取的,因为这可能会导致不正确的数据分析和预测模型。所以,我们需要摆脱他们。为了实现这一点,我们可以利用如下所示的库。

*# code will replace the special character to nan and then drop the columns* 
**df['country'] = df['country'].replace('?',np.nan)
df['workclass'] = df['workclass'].replace('?',np.nan)
df['occupation'] = df['occupation'].replace('?',np.nan)***#dropping the NaN rows now* 
**df.dropna(how='any',inplace=True)**

首先,更换所有的**'?'用 NaN(NaN 在 pandas 中用作缺失数据的占位符),为此,使用 python 的 stringreplace()function用 NumPy 的(之前作为 np 导入)NaN。**

第二,使用。dropna()** 函数删除缺少值的行。dropna()可以删除列或行,默认情况下,如果没有提到 axis 关键字,它将删除行。如果行中存在任何缺失值,how=‘any’ 将删除这些行。你可以通过 w3resource 链接了解更多关于 dropna()的信息。**

特征工程:

机器学习模型需要用数字符号输入数据,以从中提取模式并进行预测。但是,并不是我们的源数据集中提供的所有数据都是数字的。提供的一些数据是分类数据,如工作类别、教育、婚姻状况、职业、关系等。我们需要把这些转换成数字符号。

在这里,数据只是我们的模型用作输入的一个特征。因此,我们对数据执行特征工程,从源数据集中创建有意义的数字数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安德鲁·布坎南在 Unsplash 上的照片

我们有 15 个特征(列),我们的最终目标是预测收入特征,使收入成为我们的因变量。如果其余 14 个特征中的任何一个影响目标特征,那么这些特征被称为独立变量。****

为了保持文章的简洁并避免与模型无关的数据,我们将避免输入数据中不太独特或有噪声的特征。这有助于我们细化我们的特征以识别独立变量。但是,这可能不适用于所有数据集,这取决于您正在处理的数据类型以及要素的重要性。

*#running a loop of value_counts of each column to find out unique values.* 
**for c in df.columns:
    print ("---- %s ---" % c)
    print (df[c].value_counts())**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里,我们使用对所有列运行了一个 for 循环。Pandas 的 value_counts()** 函数,它获得唯一值的计数。我们可以看到,提供的一些数据是唯一的,如“workclass”属性只有 7 个不同的值,而一些列有很多不同的值,如 fnlgwt 属性有大约 2000 多个值。**

所以,让我们去掉那些有噪声数据的属性。

*#dropping based on uniquness of data from the dataset* 
**df.drop(['educational-num','age', 'hours per week', 'fnlwgt', 'capital gain','capital loss', 'country'], axis=1, inplace=True)**

熊猫。drop()** 函数用来删除指定的列或行。 axis=1 表示我们打算删除列本身, inplace=True 表示我们在删除列后用清理后的数据集替换原始数据帧,即 df。**

现在,我们剩下 8 个特征,它们是分类数据。正如我们之前讨论的,我们需要将这些数据转换成我们的 ML 模型可以理解的数字符号。有许多不同的方法来实现这种数据转换,如这里的所述。用数字替换分类数据的简单而基本的方法,即使用 Pandas 。【T21 地图()】功能。

让我们从我们的目标属性开始,它是收入列。我们看到收入列有两个唯一值,分别是 ’ < =50K’’ > 50K’ 。我们可以很容易地将这些字符串字符映射到数字数据。map()函数如下所示。

*#mapping the data into numerical data using map function*
**df['income'] = df['income'].map({'<=50K': 0, '>50K': 1}).astype(int)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,现在我们的收入属性有了数值数据。熊猫。map()函数已经将每个’<=50K’ with 0 value and ‘> 50K '替换为 1 和。astype(int)** 是指被替换的值应该是类型 int 。**

使用 map 函数,我们可以将数据集中的所有其他分类数据转换为数字数据。

*#gender*
**df['gender'] = df['gender'].map({'Male': 0, 'Female': 1}).astype(int)***#race* **df['race'] = df['race'].map({'Black': 0, 'Asian-Pac-Islander': 1,                     'Other': 2, 'White': 3, 'Amer-Indian-Eskimo': 4}).astype(int)**#marital **df['marital'] = df['marital'].map({'Married-spouse-absent': 0, 'Widowed': 1, 'Married-civ-spouse': 2, 'Separated': 3, 'Divorced': 4,'Never-married': 5, 'Married-AF-spouse': 6}).astype(int)**#workclass **df['workclass'] = df['workclass'].map({'Self-emp-inc': 0, 'State-gov': 1,'Federal-gov': 2, 'Without-pay': 3, 'Local-gov': 4,'Private': 5, 'Self-emp-not-inc': 6}).astype(int)**#education **df['education'] = df['education'].map({'Some-college': 0, 'Preschool': 1, '5th-6th': 2, 'HS-grad': 3, 'Masters': 4, '12th': 5, '7th-8th': 6, 'Prof-school': 7,'1st-4th': 8, 'Assoc-acdm': 9, 'Doctorate': 10, '11th': 11,'Bachelors': 12, '10th': 13,'Assoc-voc': 14,'9th': 15}).astype(int)**#occupation **df['occupation'] = df['occupation'].map({ 'Farming-fishing': 1, 'Tech-support': 2, 'Adm-clerical': 3, 'Handlers-cleaners': 4, 
 'Prof-specialty': 5,'Machine-op-inspct': 6, 'Exec-managerial': 7,'Priv-house-serv': 8,'Craft-repair': 9,'Sales': 10, 'Transport-moving': 11, 'Armed-Forces': 12, 'Other-service': 13,'Protective-     serv':14}).astype(int)***#*relationship
**df['relationship'] = df['relationship'].map({'Not-in-family': 0, 'Wife': 1, 'Other-relative': 2, 'Unmarried': 3,'Husband': 4,'Own-child': 5}).astype(int)**

我们数据集的最终数字输出将是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我们最后的数字符号数据集。其现在可以被馈送到任何 ML 预测建模算法中。在我们尝试这样做之前,我们应该将数据可视化,并寻找我们可以在数据集的变量之间推导出的任何相关性。

数据可视化:

这里,我们将尝试找出最终数值数据集的每一列与目标属性 income 之间的关系。这可以通过在收入和其他各栏之间创建一个条形图来实现。

*#plotting a bar graph for Education against Income to see the co-relation between these columns* 
**df.groupby('education').income.mean().plot(kind='bar')**

我们正在使用熊猫 绘制条形图。plot() 函数可视化教育与收入属性之间的关系。我们通过使用熊猫对教育价值进行分组来实现它。groupby()** 使用对收入属性的平均值执行函数。平均值()。同样,我们可以绘制出所有其他独立属性相对于收入的条形图,如下所示。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

各种特征与收入均值的条形图。

通过这些可视化,我们可以推导出我们的独立属性和从属属性之间的一些相关性:

  1. 拥有专业学校(7)和博士学位(10)教育背景的成年人将有更好的收入,他们的收入很可能高于 5 万英镑。
  2. 我们的数据表明,职业为专业教授(5)和高级管理人员(7)的人收入超过 5 万英镑的可能性更大。
  3. 性别条形图为我们提供了一些有用的数据洞察,即男性(0)更有可能有更高的收入。
  4. 关系图告诉我们,妻子(1)和丈夫(4)有更高的收入。一对已婚夫妇最有可能挣 5 万多英镑。
  5. 根据数据,亚裔 Pac-Islander 人(1)或白人(3)收入超过 5 万英镑的机会更多。
  6. 自我雇佣(0),联邦政府(2)的工人阶级有更高的机会赚取超过 50K。

我们可以看到,我们所有的数字属性对我们的目标可变收入都有一些影响。因此,我们应该创建一个 ML 模型,将我们所有的数字数据作为输入。

型号选择:

大约有 60 多种预测建模算法可供选择。我们必须很好地理解我们的数据和我们正在寻找的理想解决方案,以缩小我们的模型选择。这里我们的目标是预测收入,收入可以是 0 或 1(小于 50K 或大于 50K ),我们希望确定我们的产出(收入)和其余独立特征(教育、工作类别、性别等)之间的关系。).这个场景是分类的经典例子(分类收入是否是<50K or more ).

We are provided with 48K rows of the labeled dataset tagged with the output column “income” to train our model. Whenever the dataset is labeled and output feature is known, we opt for the 监督学习机器学习技术。因此,我们的用例是一个监督学习加分类问题。根据这些标准,我们可以将选择的型号缩小到以下几种:

  • 逻辑回归
  • KNN 或 k-最近邻
  • 支持向量机
  • 朴素贝叶斯分类器
  • 决策图表
  • 随机福里斯特

逻辑回归:

逻辑回归是用于范畴分类的最简单和最常用的监督机器学习算法之一。逻辑回归的基本概念很容易理解,可以用作任何二元(0 或 1)分类问题的基线算法。对于这个用例,我们将选择逻辑回归作为我们的分类模型,因为对于任何初学者来说,从一个简单而流行的算法开始将是一个良好的开端。

逻辑回归是一种统计预测模型,可以预测“是”(1)或“否”(0)。它基于范围在 0 和 1 之间的 Logit 或 Sigmoid 函数。不要因为听到一个数学函数而害怕。让我简单地给你解释一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

sigmoid 函数

如果我们在这里观察,sigmoid 函数是一条在值 0 和 1 之间延伸的“S”形曲线,它是根据函数输入一组数据时的输出绘制的。我们可以看到,sigmoid 函数方程是 1 除以 1 加上 e 的-z 次方,其中 e 是一个数学常数,称为欧拉数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,等式的输出应该在 0 和 1 之间。如果 z 值为正无穷大,预测值将为 1,如果 z 值为负无穷大,预测值将为 0。如果将我们拥有的数字数据输入 sigmoid 函数,我们将得到一个小于 0.5 的值,即归类为 0,或者大于 0.5 的值,归类为 1。

好吧!这是逻辑回归背后的所有数学,学习和理解它真的取决于你,因为 Python 的 scikit 库将通过一个函数调用为你解决所有这些数学问题。但是,对于一个优秀的数据科学家来说,了解所有的数学背景是必须的。

现在让我们看看如何利用 Scikit python 库来解决我们的分类问题。

识别特征:

*#Transform the data set into a data frame**#X axis = We concatenate the Relationship, Education,Race,Occupation columns concate using np.c_ provided by the numpy library*
**df_x = pd.DataFrame(np.c_[df['relationship'], df['education'], df['race'],df['occupation'],df['gender'],df['marital'],df['workclass']], columns = ['relationship','education','race','occupation','gender','marital','workclass'])***#Y axis = Our* dependent *variable or the income of adult i.e Income* **df_y = pd.DataFrame(df.income)**

在这里,我们将数据分为两个独立特征,一个是作为 df_y 的收入,另一个是作为 df_x 的关系、种族、职业、性别、婚姻、工作类别。

拆分数据:

*#Initialize the linear regression model*
**reg = LogisticRegression()***#Split the data into 77% training and 33% testing data*
*#NOTE: We have to split the dependent variables (x) and the target or independent variable (y)* **x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, test_size=0.33, random_state=42)**

我们从调用 scikit 库中的函数 LogisticRegression() 开始,并将它赋给变量 reg 。然后,我们使用 train_test_split() 将数据分为测试集和训练集,这有助于更好地训练模型并测试其性能。 test_size=0.33 用我们拥有的 33%的数据创建一个测试数据集,剩下的 77%将作为我们的训练集来训练我们的模型。这个 split 函数返回一对训练集(x_train,y_train)和一对测试集(x_test,y_test)。

*#Train our model with the training data* **reg.fit(x_train, y_train)***#print our price predictions on our test data*
**y_pred = reg.predict(x_test)**

然后我们使用训练我们的模型。fit()** 函数为其提供我们的训练集,并使用**获得输出预测。预测()【函数】通过饲养测试集。

预测与评估:

现在让我们验证我们的模型是如何工作的。

*#feeding the predict function with our test values in the format 
[['relationship','education','race','occupation','gender','marital','workclass']]*
**reg.predict([[1,7,3,7,0,2,0]])**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们向我们的模型提供测试数据,以便根据我们之前使用数据可视化所做的假设进行预测。我们假设,如果关系状态为 1 或 4,教育为 7 或 10,种族为 1 或 3,职业为 5 或 7,性别为男性即 0,婚姻状态为 2 或 6,工作级别为 0 或 2,那么一个人的收入将超过 50K。因此,我们正确地预测了一个具有这些特征的人肯定能够赚到超过 50K,并返回了预测值 1。

我们可以使用各种模型评估指标来评估我们的模型,比如 python 的 sklearn 库提供的准确性。

#printing the accuracy values **
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们实现了 76% 的准确度值,这对于任何机器学习预测模型都是好的,尤其是对于分类回归问题。

结论:

终于!我们使用 Python 及其强大的库成功创建了一个分类机器学习预测模型,该模型可以预测给定成年人的收入是否会> 50K。

我希望你花 15 分钟的时间阅读这篇文章,并了解什么是数据分析,如何建立机器学习模型,以及 python 如何帮助我们建立这些模型。这篇文章可能是你机器学习旅程的第一步,但是请记住马克·吐温的话:

“取得成功的秘诀在于开始行动”

如果你在这里,我假设你是一个编程爱好者,想学习机器学习方面的知识。我建议你从学习 python 的基本概念开始,如果你不熟悉, w3schools 简单而优雅的 Python 教程是学习基础知识的最好地方。

一旦你掌握了基础知识,不要急于学习 python 上所有可用的库,你不需要所有的库,从一些对 ML 来说最重要的库开始,比如 Numpy,Pandas,拥有这些库的中级知识足以开始你的数据科学家生涯。

Kaggle 是 ML 的一个很好的学习资源,你可以在超过 19,000 个公共数据集上学习和练习。一旦你熟悉了你在这篇文章中学到的基础知识,我建议你去参加 Kaggle 的传奇泰坦尼克号预测比赛,这是一个分类问题,有一些很棒的笔记本可以学习,并开始编写你的预测模型。

让我知道评论中的任何建议或改进。

快乐学习!!再见。

数据库可靠性工程初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-data-reliability-engineering-8bfd9b9fcaf6?source=collection_archive---------17-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克林特·帕特森在 Unsplash 上拍摄的照片

数据工程

当站点可靠性工程遇到数据工程时

背景

这不是新闻。随着处理、存储和分析大量数据的高度可扩展和高度可用的系统的发展,一个新的工程分支已经诞生。它被称为数据库可靠性工程。它明显源于谷歌新的开发方法,叫做站点可靠性工程。已经有很多关于 SRE 和德国有什么不同的文章发表了。理解为什么会这样很重要。

数据库可靠性工程是 SRE 的一个子领域。就像 SRE 全面处理公司所有系统的可靠性一样,DRE 处理公司所有数据基础设施的系统。想到的第一个问题是,为什么需要这种分离?这是一个合理的问题。在过去的十年中,数据工程本身已经发展成为一个巨大的领域。工具、技术和流程的多样性是巨大的。

[## 完整的数据工程师词汇

数据工程师必须知道的 10 个单词以内的概念

towardsdatascience.com](/complete-data-engineers-vocabulary-87967e374fad)

数据库可靠性工程

在 SRE 的框架内,数据库可靠性已经成为一项独立的专业。然后,DRE 成为负责数据基础设施(可靠性)的人,包括数据管道、数据库、部署、CI/CD、HA、访问和权限(在某些情况下)、数据仓库、存储和归档。简而言之,DRE 负责数据工程师正常工作所需的所有基础设施。同样值得注意的是—

数据可靠性工程对于数据库管理来说并不是一个花哨的词。

数据库管理是一项高度专业化的工作。DBA 的大部分工作已经被 DevOps 或 DRE 占用了。如前所述,数据库可靠性工程师不仅负责数据库,还负责整个数据基础设施。然而,一些公司利用 DBRE 的职位来具体管理数据库的可靠性。我会给你介绍一家法国家居装修技术公司,它帮助人们做一些 DIY 的事情,描述了数据库可靠性工程师的角色

数据库可靠性工程师负责保持支持所有面向用户的服务的数据库系统和许多其他生产系统全天候平稳运行。dre 是数据库工程和管理部门主管和软件开发人员的混合体,他们应用合理的工程原理、操作规程和成熟的软件开发和自动化,专攻数据库。

DRE 的角色和职责

DRE 的职责范围从为数据建模提供建议,到确保数据库在时机成熟时做好伸缩准备。DRE 使用的工具和技术非常相似,在大多数情况下,SRE 使用的工具和技术如 IaC (Terraform,Pulumi,CloudFormation),CI/CD (Jenkins),配置管理(Ansible,Chef,Puppet)等等。除此之外,数据库可靠性工程师还包括数据分析师、数据工程师、数据库工程师、开发人员等。有时建模数据、编写&优化查询、分析日志&访问模式、安全性&合规性、管理复制拓扑、磁盘空间、警报、监控、计费等等。

许多公司已经开始意识到并在其不断增长的工程团队中开放数据库可靠性工程师的职位。我在 VimeoTwitchPinterestOktaDataDogFastlyBoxActiveCampaignMambuPelotonInVisionair 分析了其中的一些职位简介我发现许多公司在 DBA 工作中包括数据建模方面,而其他公司则没有。就像任何其他工作一样,这取决于公司决定如何定义数据库可靠性工程师。

基于我的经验和科技行业的趋势,我按照共性递减的顺序列出了数据库可靠性工程师最常见的职责

  • 数据库的高可用性和高可扩展性—包括数据仓库和数据湖
  • 数据库内部性能调优、优化和最佳实践建议方面的专业知识
  • 数据管道、大数据处理系统(MPP)、分布式系统、存储和归档的基础设施可靠性
  • 跨数据基础架构的安全性和法规遵从性,包括上述所有领域以及更多领域

所有这些职责都需要在多个云平台的数据工程服务方面具备一定水平的专业知识。

数据操作与数据库可靠性工程

数据操作是另一个经常与 DRE 混淆的领域。适用于德沃普斯& SRE 公司的类比同样适用于这里。DRE 负责数据系统的工作,而数据运营人员则通过提供基础设施、授予使用基础设施的权限来帮助数据工程师。

如前所述,在许多公司,将这些工作分成不同工作的界限变得模糊不清。例如,在初创公司的早期阶段,可能只有一个人同时负责数据运营和 DBRE,很有可能同一个人同时担任 SRE 和 DevOps 的工程师。

结论

职位描述的演变是不可避免的。随着新技术的不断发展,工程师的工作将会不断变化,而且变化的速度也非常快。工作会不断变得多余。更新的技术将为更新但更少的工作腾出空间。

数据库可靠性工程作为一个概念只有大约五年的时间,仍然是一个非常年轻的职业。它会不断进化。角色和职责将不断变化,随着管理基础架构的自动化程度越来越高,角色和职责可能会减少。不过,就目前而言,这是一个很好的进入领域。一定要看看 Liane Campbell & Charity Majors 写的关于数据库可靠性工程的书,以获得对该领域的全面介绍。

[## 数据库可靠性工程

数据库可靠性工程书籍。阅读来自世界上最大的读者社区的 5 篇评论。的…

www.goodreads.com](https://www.goodreads.com/book/show/36523657-database-reliability-engineering)

资源

  1. Laine Campbells 在 Surge 2015 上谈数据库可靠性工程
  2. 露丝·王君馨对 SRE 可汗学院的采访
  3. git lab 的数据库可靠性工程
  4. Google Cloud Next 2019+devo PS 之间的对比& SRE
  5. Sapient 的客户数据平台 SRE

成为数据科学家的端到端指南

原文:https://towardsdatascience.com/a-beginners-guide-to-data-scientist-67bbc7fc32c9?source=collection_archive---------6-----------------------

数据科学技巧/初学者指南

🤯让我们从零开始学习数据科学吧!

在过去的两年中,数据科学有了很大的进步。近 90%的可用数据是在前两年产生的,证明数据科学家增加了十倍。它现在被全球的大公司和行业广泛使用。数据科学领域的发展速度比其他领域快得多。

你想踏入数据科学的世界并获得与之相关的所有名声吗?那么你来对地方了!我们将在本文中广泛地探讨数据科学中涉及的**、工具、过程。我们还将提供对数据科学世界的深入见解成为数据科学家的条件。该报告还将涵盖该领域的各个方面以及全球知名公司如何广泛使用该技术。让我们沉浸在增长最快的研究领域的世界中吧!**

介绍

数据科学是包括从大量数据中提取关键信息的研究领域。它是通过算法、流程和各种科学方法完成的。

重要的数据科学工作角色包括数据科学家、数据工程师、统计师、业务分析师、数据分析师等。

游戏世界广泛使用 it、银行部门、医疗行业和电子商务网站。

网飞宝洁这样的世界知名公司使用数据科学来获得想要的结果。

这是目前需求量最大的领域之一。

让我们潜入数据科学的世界,由未知用户Reddit使用gi phy创建的****

什么是数据科学?

这是人们在搜索数据科学时想到的最常见的问题之一。

数据科学是一个跨学科领域,从结构化和非结构化数据中获取知识和简化的信息。这种简化的信息便于阅读和保存。

数据科学专指给一组数据赋予意义的过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**什么是数据科学?, **数据科学面临哪些挑战?,照片由斯蒂芬·道森Unsplash 上拍摄

数据科学家使用云计算工具创建虚拟开发环境。数理统计、大数据和机器学习是该过程中使用的一些标准方法。

大型企业以创造性的方式使用数据科学策略。这也增加了他们在商界的竞争优势。

数据科学流程包括商业分析、商业智能、数据挖掘、预测分析、数据分析和数据可视化。

为什么数据科学变得如此流行?

数据科学有助于将问题转化为研究。它同样提出了一个实用的解决方案。

借助数据科学,您可以识别欺诈活动**。它使您的企业免于落入虚假和虚拟的陷阱。**

你可以增加顾客的品牌忠诚度。数据科学使这成为可能,因为它执行情感分析**。它还可以帮助您推荐客户需要的确切产品。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****数据科学变得如此受欢迎,弗兰基·查马基在 Unsplash 上拍摄的照片

它防止任何形式的金钱损失。

它促进了决策过程,使决策越来越快。

数据科学最酷的特征之一是它让你开发你的机器的智能**!**

数据科学类似于商业智能(BI)吗?

虽然经常互换使用,但并不相似!

数据科学是一个广阔的领域,它将商业智能作为其策略之一。因此,BI 属于数据科学的父类别。

BI 侧重于可视化和统计,数据科学侧重于统计、图形和机器学习。

BI 使用的工具有微软 Bl、Pentaho、** QlikView 。数据科学使用像 TensorFlow 和 R 这样的工具。**

商业智能分析历史**、经历和相关数据。数据科学利用这些来分析和预测未来。在 BI 发现问题的地方,数据科学通过神经语言编程和分析提供了解决方案。**

数据科学的组成部分是什么?

****统计:它是最重要的单位。统计学是指收集和分析大量数字数据的科学方法。它提供了有用的见解。

可视化:它有助于通过易于理解和直观的视觉效果来访问大量数据。它使数据容易破译。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****数据科学有哪些组成部分?,照片由卢克·切瑟Unsplash 上拍摄

机器学习:它强调算法的学习。这也有助于建立相同的。这样做是为了对未来数据做出预测。

****深度学习:是机器学习一个比较新的研究领域。这里,算法特别选择将要遵循的分析模型。

数据科学使用的工具有哪些?

****数据集:数据来源于过去进行的大量研究。然后通过分析工具和算法对数据进行分析。没有数据集,数据科学研究是不可能的,因为没有数据可以分析。

****大数据:是非常复杂的海量数据的集合。使用传统数据处理应用手头的数据库管理工具很难处理。传统软件可以免费管理大数据。因此,数据科学家想出了另一种设备。

Hadoop: Hadoop 最初是为了处理传统软件无法管理的大数据而开发的。它存储和处理这些大型数据集。 HDFS 或 Hadoop 分布式文件系统管理 Hadoop 中的存储。它通过在整个生态系统中均匀分布数据,进一步提高了数据的可用性。它首先将信息分成片段,然后将它们传播到集群中的各个节点。

MapReduce 是 Hadoop 最关键的元素。算法通过映射和减少数据来运行。制图者把更重要的任务分成更小的任务。这些较小的任务平均分配。一旦映射完成,结果将被汇总。通过归约过程,效果被归约为相对更简单的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****数据科学使用的工具有哪些?,照片由艾萨克·史密斯Unsplash 上拍摄

R Studio: 是一个开源的编程语言和软件环境。在 R 基础下处理图形统计计算。它也可以作为编程语言用于分析目的。它可以用于数据可视化。它简单,易于阅读、书写和学习。因为它是开源的,人们可以分发它的拷贝,阅读和修改它的源代码,等等。然而,R studio 无法管理大数据。

使用 Hadoop,用 R Studio 处理输入是相当棘手的,因为它不能在分布式生态系统中运行。因此,我们使用 Spark R. Spark R 是一个 R 包。它提供了一种将 R 与 Apache Spark 一起使用的简单方法。它提供分布式数据帧**。这些数据框可用于过滤、选择和聚合大型数据集。**

数据科学中使用的流程有哪些?

探索数据:它通常处理从外部和内部来源收集的数据。这样做是为了回答特定的业务问题或提供解决方案。它处理的数据是通过使用 API 从在线资源、人口普查数据集、社交媒体以及网络服务器的日志中收集的。

****数据准备:清除空白列、缺失值、数据格式不正确等不一致。在建模之前,需要对数据进行探索、处理和调整。有了干净的数据,您可以实现更好的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****数据科学中使用的流程有哪些?照片由印尼 UXUnsplash 上拍摄

****模型规划:你需要确定在输入变量之间绘制关系的技术和方法。模型规划是通过使用各种统计公式和可视化工具完成的。r,SQL analysis services 是用于模型规划的一些工具。

模型的建立:数据集均匀分布用于测试和训练聚类、分类和关联技术应用于训练数据集。准备好模型后,将根据测试数据集对其进行测试。

****操作化:最终模型与技术文档、报告和代码一起交付。该模型经过了彻底的测试。如果通过测试,它将被用作实时生产环境。

****结果:结果传达给所有的利益相关者。它真正决定了结果是否成功。决策是基于模型的输入做出的。

哪些工作与数据科学相关?

****数据科学家:数据科学家处理大量数据,为特定业务产生引人注目的愿景。他们利用各种算法、工具、方法和过程。一个数据科学家处理像 R,Python,SAS,SQL,Matlab,Spark,Hive 和 Pig 这样的编程语言。

数据分析师:他们挖掘大量数据。他们在数据中寻找趋势、模式和关系。他们这样做是为了提供引人注目的可视化和报告。这些进一步用于分析数据。只有在这之后才做出商业决策。他们处理像 R、Python、SQL、C++、C、HTML 和 JS 这样的编程语言。

数据工程师:数据工程师处理大量的数据。他们维护、构建、开发和测试架构,如大规模数据库和处理系统。他们处理编程语言,如 Java、C++、R、Python、Hive、SQL、SAS、Perl 和 Ruby。****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****哪些工作是与数据科学相关的角色?,照片由 M. B. M.Unsplash 上拍摄

统计员:他们运用统计方法和理论收集和分析数据。他们也用这些来理解定量和定性数据。他们处理编程语言,比如 Spark、Perl、R、SQL、Python、Tableau 和 Hive。

****业务分析师:他们负责改进业务流程。他们充当了 IT 部门业务主管之间的桥梁。他们处理像 SQL、Python、Tableau 和 Power BI 这样的编程语言。

数据管理员:他们确保所有用户都能访问数据库。他们关心它的正确和安全性能,以防止它被黑客攻击。他们处理编程语言,比如 SQL、Java、Ruby on Rails、Python 和 C#。****

数据科学有哪些应用?

谷歌搜索 : 它利用数据科学在几微秒内搜索出一个特定的结果。

****语音和图像识别:语音处理许多系统,如 Siri、Alexa 和谷歌助手。由于数据科学的应用,所有这一切都成为可能。图像识别的一个例子是当你在社交媒体上上传一张和你朋友的照片时;它能识别你的朋友并显示建议标签。

****推荐系统:数据科学用于创建推荐系统。社交媒体中的建议好友,YouTube 上的建议视频,电子商务网站上的建议购买都是例子。

价格比较: Shopzilla、Junglee 和 PriceRunner 利用数据科学。使用 API,可以从特定的网站获取数据。

****游戏:任天堂、索尼、EA Sports 使用数据科学。机器学习技术被用于开发游戏。当你进入更高和更复杂的层次时,它会自我更新以面对更多的复杂情况。你还可以解锁各种奖品。数据科学让这一切成为可能。

哪些部门使用数据科学?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****哪些部门使用数据科学?,照片由 NeONBRANDUnsplash 上拍摄

电子商务 : 在线零售商以 4 种方式利用数据科学。这样做是为了实现商业价值**。这四种方法包括确定目标客户,发掘潜在客户,通过产品推荐增加销售,以及从评论中提取有用的反馈。**

制造业:它以 8 种方式使用数据科学来分析其生产力,最小化风险,增加利润。这八种方式包括跟踪性能和缺陷、预测性维护、预测需求、供应链关系、全球市场定价、自动化、新产品开发技术以及提高可持续性的效率。

****银行业:银行业在欺诈检测、风险建模、客户价值、客户细分和实时预测分析中使用数据科学。

**医疗保健行业:利用数据科学进行患者预测和患者跟踪。它还将其用于电子健康记录、**重要数据成像、和预测分析。

交通:交通部门使用数据科学来确保为司机提供更安全的驾驶环境。它优化了车辆性能。这也增加了司机的自主性。数据科学也催生了自动驾驶汽车

哪些知名组织利用了数据科学?

网飞 : 对,你没看错。它使用数据科学来理解什么强调了用户的兴趣。根据收集的信息,它首映下一个生产系列。

宝洁:它使用数据科学的时间序列模型。通过这些模型,它了解未来的需求和相应的生产水平计划。

Target: 它利用数据科学来识别主要客户群及其购物行为。通过这个,他们引导不同的受众。

如何成为一名数据科学家?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****如何成为一名数据科学家?,丹尼尔·麦卡洛在 Unsplash 上拍照

教育资历:你应该在这些领域中的任何一个领域拥有学士学位——计算机科学、物理学、社会科学和统计学。最常见的领域包括统计学和数学,其次是计算机科学和工程。

学习统计和数学:一个人要成为数据科学家,需要有扎实的数学基础和对统计的基本理解。你必须熟悉因果关系、相关性和假设检验。线性代数和微积分必不可少。

****练习编程:你必须熟悉 Python 的编程语言。数据库交互同样重要。如果你对 Python 有了很好的了解,那么继续学习其他编程语言,比如 Java 和 R。

****专注于机器学习:学习标准算法也是比较热门的。学习复杂的问题并不总是有帮助的。从对我们很重要的简单问题开始,比如你的问题解决和优化能力。

****创建机器学习项目:开始实施你在机器学习上开发的知识。大公司总是寻找那些知道幕后如何运作的人。

跟上潮流:提高技能非常重要。目前,公司正在寻找精通机器人技术、网络安全、RPA、人工智能、自动化、数据分析和金融科技的人才。

创建作品集: 你的简历一定要提到你的编码和软件技能。必须指定求职者的用户名、电子邮件地址、位置和当前雇主。增强你的投资组合的是大量的追随者,在明星、贡献图、编写目标代码、贡献图等方面的改进。

数据科学面临哪些挑战?

****高质量的数据是准确分析所必需的。小组织不可能有数据科学部门。尽管这是一个需求很高的领域,但没有足够的数据科学家。可能会有隐私问题。一家公司的管理层未能提供建立数据科学团队所需的财务支持。向不具备该领域任何知识的人解释数据科学是一项挑战。获取数据要么不可用,要么很困难。业务决策者未能有效利用数据科学成果。

结论

如果你从事数据科学,有大量的职业机会。跨国公司总是在过滤数据并优化数据,以获得更好的客户体验。像银行、医疗保健行业、运输、电子商务站点这样的重要行业使用数据科学来获得最佳结果。这个世界在不断地将自己升级成一个更好的版本。它通常为数据科学处理海量数据和满足客户需求铺平了道路!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论,照片由托马斯·博曼斯Unsplash 上拍摄

未来几年,世界将需要超过 14 万名数据科学家**。据报道,美国数据科学家的收入约为每年 14.4 万美元。因此,现在是时候让人们将数据科学视为一个令人信服的职业选择了。这些公司也应该投资于它,并提供它所需要的财政支持。**

我总是把生活看作是从一次经历到另一次经历的旅程。到目前为止,这是一条充满有趣事件和人的道路。通过 LinkedIninsta gram&Youtube加入我的旅程

有了手头的所有信息,你就有希望在未来成为一名成功的数据科学家。希望这对你有所帮助,并祝你未来一切顺利!感谢阅读本文!如果你有任何问题,请在下面留言。

** [## 西瓦苏布拉马尼亚 B 培养基

阅读 Sivasubramanian B 的作品。创意说书人,品牌战略家。商业智能分析师。

medium.com](https://medium.com/@storieswithsiva)

祝你好运!干杯!**

Python 数据可视化初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-data-visualization-with-python-49f1d257c781?source=collection_archive---------15-----------------------

如何用几行代码创建强大的可视化效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卢克·切瑟在 Unsplash 上的照片

图表有魔力。一条曲线的轮廓在一瞬间揭示了一个整体的情况——一场流行病、一场恐慌或一个繁荣时代的生活史。曲线通知头脑,唤醒想象力,令人信服。

什么是数据可视化?

数据可视化是获取数据并以可视格式呈现的行为。这是一种用于交流信息的强大技术,它允许读者立即从数据中获得洞察力。

为什么要数据可视化?

让我举一个小例子来展示数据可视化的强大。

这是一些样本数据,有三个变量——“年龄组”、“使用互联网”和“不使用”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

免责声明:这不是真实的数据,我只是创建它来展示可视化的重要性。

根据上面的数据,你能找出年龄组和互联网使用之间的关系吗?

你大概可以从数据中看出一些趋势。你也许还能找到互联网使用最频繁的年龄组。

但是,仅仅看上面的数据,很难得到一个清晰的画面。

现在,我用一行代码创建了两个图表来模拟这种关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用互联网

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不要使用互联网

看出区别了吗?

从杂乱的数据中生成一个简单的图表可以给我们提供有价值的见解,并帮助我们找到我们从来不知道存在的趋势。

数据可视化通常用于数据科学过程的两个阶段:

  • 当你,数据科学家,试图理解数据的时候。
  • 当您试图向他人展示您的数据发现时。

在本教程中,我将向您展示如何使用内置库(如 Matplotlib 和 Seaborn)在 Python 中执行探索性数据可视化。

我将使用来自 Kaggle 的泰坦尼克号数据 t 的 train.csv 文件。

导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

注意:确保你已经安装了所有这些库。如果没有,您可以使用简单的 pip 命令安装它们。

创建数据框架

df = pd.read_csv("train.csv")
df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看看数据帧的头部,这是我们得到的信息。

数据帧中有 12 个变量。这些是:

  1. PassengerId:每个乘客的唯一 Id
  2. Pclass:客运类;第一、第二和第三。第一个是上层阶级,第三个是下层阶级。
  3. 名字
  4. 年龄
  5. SibSp:船上的兄弟姐妹和/或配偶人数
  6. Parch:船上父母和/或子女的人数
  7. 机票:机票号码
  8. 票价
  9. 小木屋
  10. 装船:装船港
  11. 幸存:是否有乘客在泰坦尼克号上幸存。值 1 表示乘客幸存,值 0 表示他们没有。

如果您想更多地了解您的数据集(例如行数),我建议使用 Pandas profiling。

这是一个功能强大的工具,可用于分析您的数据框。您不必一次又一次地运行代码行来检查缺少的值或变量类型。

import pandas_profiling as pp
pp.ProfileReport(df)

只需这两行代码,就会在您的数据框上生成一个报告,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据框概览为您提供了整个数据集的快速分析,以及缺失值、变量数量和变量类型。

报告的下一部分将为您提供对数据集中每个变量的深入分析,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该报告还包括可视化,以映射数据集中不同变量之间的相关性。以下是生成的热图示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

甚至在我们开始分析数据框中的每个变量之前,热图就告诉了我们许多不同变量之间的关系。

只要看一看,我们就可以知道有些值比其他值更高度相关。这在进行预测或回答某些数据问题时非常有帮助,我们将在后面详细解释。

数据问题

在开始任何类型的数据分析或可视化之前,您必须在头脑中有一个数据问题。

你试图从数据中得出什么样的见解?有什么特定的趋势或模式吗?

写下几个你想借助可视化回答的问题。

在这种情况下,我们希望在本教程结束时能够回答以下数据问题:

  1. 泰坦尼克号上有多少人幸存?
  2. 哪种性别更有可能在泰坦尼克号上幸存?
  3. 乘客所在的班级对他们的生存有影响吗?
  4. 年轻人更有可能在泰坦尼克号上幸存吗?
  5. 支付更高票价的乘客更有可能在泰坦尼克号上幸存吗?

既然我们已经知道要寻找什么,我们就可以开始数据可视化了。

变量类型

在处理数据时,你会遇到两种主要类型的变量,即分类变量定量变量

分类:分类变量,顾名思义,就是有两个或两个以上类别的变量。它表示可以分组的数据类型。

例如:在泰坦尼克号的数据集中,变量“性别”是绝对的。它代表了两类人;男性和女性。

**定量:**定量,或数字变量代表一个可测量的量。

例如:变量“年龄”是一个数量变量。

有不同的方法来可视化定量和定性变量,我们将继续讨论。

可视化分类变量

我们将首先通过使用 Seaborn 中的“计数图”来可视化单个变量。

计数图是可视化分类变量的一种简单方式。顾名思义,它显示一个变量的频率。

想象泰坦尼克号上有多少人幸存:

sns.countplot(x='Survived',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

泰坦尼克号生存计数图

从这张图表可以看出,泰坦尼克号上没有生还的人比幸存的人多得多。

使用计数图,我们现在可以可视化数据框中的其他分类变量:

  • 性别:
sns.countplot(x='Sex',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《泰坦尼克号》中的性别分布

泰坦尼克号上的男性乘客似乎比女性乘客多得多。

  • Pclass
# Pclass:
sns.countplot(x='Pclass',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乘客的等级分布

图表显示泰坦尼克号上三等舱的乘客比其他任何舱都多。

  • 从事

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从事

泰坦尼克号上的大多数乘客都是从 s 港上船的。

可视化定量变量

为了形象化定量变量的分布,我们可以使用直方图。

直方图相当于计数图,但用于数值数据。

首先,我们将创建一个直方图来可视化泰坦尼克号上乘客的年龄分布:

sns.distplot(df['Age'])

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

泰坦尼克号乘客的年龄分布

从上面的柱状图可以看出,泰坦尼克号上的大多数乘客年龄在 20-40 岁之间。

接下来,我们将看看变量“Fare”:

sns.distplot(df['Fare'])

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以观察到,大多数乘客支付了大约 0-50 英镑的车费。有一些异常值——一些价格高达 500 英镑。

较低“等级”的乘客,如三等舱的乘客,支付比较高等级乘客更低的票价是合理的。

我们很容易想象这种关系。

可视化多个变量

在进行数据分析时,我们常常希望找到两个变量之间的关系。

例如,在回答问题***‘哪个性别更有可能在泰坦尼克号上幸存?’***

我们需要在这里想象两个变量——“性”和“幸存”

一个简单的方法是创建一个计数图,并添加一个色调函数。“色调”参数允许您选择一个用颜色编码来可视化的变量。

这是可视化分类变量的一个很好的方法。

这里有一个例子:

# Visualize survived with sex:
sns.countplot(x='Survived',hue='Sex',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

性别对存活率的影响

从这个图中,我们可以清楚地看到,泰坦尼克号上女性幸存者的数量比男性多。

同样,我们可以回答下面的问题— 乘客所处的阶层对他们的生存有什么影响吗?

sns.countplot(x='Survived',hue='Pclass',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乘客级别的生存计数

sns.countplot(x='Pclass',hue='Survived',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乘客级别与存活率相关

从上面的情节中,我们可以看到,三等舱的乘客比一等舱和二等舱的乘客生还的可能性要小得多。

我们现在可以用“幸存”来形象化变量“上船”

# Survived and embarked:
sns.countplot(x='Survived',hue='Embarked',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

船上生存很重要

接下来,我们将看看如何用分类变量可视化一个定量变量。

“年轻人更有可能在泰坦尼克号上幸存吗?”

为了回答这个问题,我们需要将变量“存活”和“年龄”形象化。我们可以用一个简单的方框图来做这件事。

箱形图为我们提供了数值分布的良好指示,并提供了 5 个数字汇总的信息(最小值、第一个四分位数、中值、第三个四分位数、最大值)。

要完全理解盒子情节,你可以阅读这篇文章。

# Age and sex with survived
sns.boxplot(data=df, x='Survived', y='Age')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

年龄和幸存

从上面的情节来看,泰坦尼克号上一个人的生存和年龄似乎没有明确的关联。

支付更高票价的乘客更有可能在泰坦尼克号上幸存吗?

为了回答这个问题,我们需要将变量“幸存”和“费用”形象化。

为此,我们可以创建一个条形图:

sns.barplot(x='Survived',y="Fare",data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

票价和幸存

可以观察到,支付较高票价的乘客比不支付的乘客更有可能幸存。

这可能是由于他们所处的乘客等级。较高级别的乘客比较低级别的乘客更有可能支付较高的票价。

我们可以想象这种关系:

sns.barplot(x='Pclass',y='Fare',data=df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乘客等级和票价

看来我们的假设是正确的!

较高等级的乘客确实比较低等级的乘客支付更多的票价。

有时,我们希望将两个以上的变量相互可视化。例如,我们想知道特定年龄组的男性或女性是否更有可能在泰坦尼克号中幸存。

我们需要想象三个变量——“年龄”、“性别”和“存活”这些变量中有两个是分类变量,一个是定量变量。

你可以通过创建一个变量“年龄”和“性别”的方框图来做到这一点,并创建一个“幸存”的色调

# Age and sex with survived:
sns.boxplot(data=df, x='Age', y='Sex', hue ='Survived')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

幸存的年龄和性别

我们可以用’ Age ‘、’ Pclass ‘和’ Survived '做同样的事情,看看泰坦尼克号幸存乘客的年龄分布。

sns.boxplot(data=df, x='Age', y='Sex', hue ='Pclass')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

和乘客发生性关系

大多数头等舱和二等舱的乘客年龄较大,这是有道理的,因为他们会有更多的钱去乘坐更高级别的航班。

最后,要查看乘客类别、已付车费和存活率之间的关系,我们可以运行以下代码:

sns.barplot(data=df, x='Pclass', y='Fare', hue ='Survived')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

幸存的票价和乘客等级

从上面的可视化中,我们可以观察到两件事:

  • 高级别的乘客要比不高级别的乘客多付很多钱。
  • 等级较高的乘客更有可能在泰坦尼克号上幸存。

同时可视化两个以上变量之间的关系是非常强大的,因为它可以帮助我们同时找到模式和回答多个数据问题。

使用 Seaborn 中提供的工具创建这样的可视化也非常简单。

配对图

配对图是一种可视化类型,它在一个图中绘制多个变量的成对分布。

Seaborn 中的 Pair plots 只接受数字列,因此您需要选择这些列以传递到您的数据集中。

在这个配对图中,我们将每个数值变量并排显示,并选择用变量“存活”来着色:

numeric = df.iloc[: , [0,1,5,9]]
sns.pairplot(numeric.dropna(), hue='Survived')

生成的配对图如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数字列与幸存列的配对图

配对图为我们提供了两种类型的可视化效果——散点图和离差图。你可以在这里阅读更多关于剧情类型的内容。

对角线上的距离图为我们提供了单个变量的信息,类似于我们之前创建的直方图。

散点图向我们展示了所有数字变量之间的相关性。从这些变量中似乎没有观察到强有力的关系。

热图

我们可以在 Seaborn 生成一个热图,类似于熊猫概况报告中提供的热图。

在生成热图之前,我们需要根据数据框创建一个关联矩阵:

cor = df.corr()
sns.heatmap(cor)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

热图

热图向我们展示了数据集中变量之间的相关性。颜色的变化代表不同层次的相关性。

变量之间的相关性范围从-1 到 1。值-1 表示完全负相关,值 1 表示完全正相关。

零值表示变量之间没有任何相关性。

你会注意到热图中的对角线似乎具有 1 的相关性,这是因为每个变量都与自身完全相关。

我们可以在这里观察到一些强关系。

  • 变量“SibSp”和“Parch”似乎具有正相关性。
  • 变量“票价”和“幸存”似乎也有正相关关系。

然后…我们结束了!

我希望这篇教程能帮助你了解一些基本的可视化技术。

这将有助于在几个不同的数据集上进行探索性数据分析和可视化,以了解不同类型的变量使用何种类型的图。

数据可视化是一项很好的技能,因为您可以帮助分解复杂的数据,并根据您的发现提供有价值的见解。

它不仅能帮助你理解数据,还能让你清楚地向他人展示数据。

深度学习初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-deep-learning-ed41ac75c4e5?source=collection_archive---------10-----------------------

面向新数据科学家的人工神经网络速成班!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔希·里默尔在 Unsplash 上的照片

近年来,“深度学习”一词已经成为众多招聘人员和公司在职位描述中的常用术语。这是一个极其复杂的课题,一些数据科学家花了一生的时间来研究。对于许多将职业转向数据科学或没有广泛人工智能背景的人来说,这似乎是一个令人生畏的课题。作为一个对此感兴趣的人,我写这篇博客是为了给那些想了解这个话题的人一个简单的概述。

本博客结束时,你将能够:

  • 有效地描述什么是深度学习,以及它与机器学习有何不同。
  • 描述人工神经网络及其组成部分。
  • 提供深度学习的现实应用实例。

什么是深度学习?

深度学习是“人工智能”旗下的一类机器学习算法。用最简单的话来说,就是教机器通过例子来学习,很像人类的婴儿!当读到“人工智能”这个词时,你可能会想到流行的科幻电影,这些电影描述了机器人进化到不再需要人类,然后最终毁灭了世界。幸运的是,我们还没有到那一步,但是机器仍然可以做一些令人印象深刻的事情!例如,深度学习可以用于处理 X 射线图像,以便识别肿瘤等不规则性。它还可以用于面部识别、语音识别、文本分类甚至创建自动驾驶汽车!

那么深度学习和机器学习有什么不同呢?

请记住,深度学习是机器学习,这一点很重要。它们都使用给定的数据执行功能,并且随着时间的推移越来越好。主要区别在于数据如何呈现给模型。**机器学习算法需要指导和结构化数据,而深度学习网络使用多层人工神经网络(ANN)来自行确定其预测是否准确。**这使得深度学习变得极其强大,因为它可以非常好地处理非结构化数据(即图像、音频文件、文本数据)。

什么是人工神经网络?

模仿是最真诚的奉承形式,作为人类,还有什么比模仿人脑的机器学习网络更好的奉承形式呢?!人工神经网络是模仿人脑内部复杂的生物神经系统而设计的计算系统。

显然,人工神经网络不像人类神经系统那样复杂,但我们可以将相似之处可视化。在人类神经元中,有树突、细胞体和轴突。树突从其他神经元接收信号,并将信号向下发送到细胞体,进行一些处理,然后将信号发送到轴突和轴突终末,信号在轴突终末被转移到其他神经元,一遍又一遍(如下所示)。在人工神经网络中,加权输入被输入到一个特征节点,在那里进行一些处理,形成一个输出,然后输入到下一层,一遍又一遍。需要注意的是,输入和输出实际上是二进制的(0 或 1)。图像中没有显示的一点是节点之间的间隙,其中权重被分配给每个输入。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/人工神经网络-计算机科学-生物神经网络之间的区别是什么

权重很重要,因为它们决定了哪些特征比其他特征更重要。每个节点都有一个导致该节点“触发”的特定阈值如果加权输入的组合超过阈值,它将触发节点发信号。由于节点是二进制的,网络只是作为一个典型的线性回归模型。通过添加一个激活函数,它向输入提供一个非线性变换,使其能够利用相对于误差的差异进行学习。

因此,简单来说,激活函数就像一个数学“网关”,它接收输入并计算一个带有附加偏差的加权和,以确定该节点是否应该激活。这允许一些连接变得更强,导致新的连接出现,或者变弱,导致连接被消除。在下图中,使用了一个 sigmoid 激活函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自熨斗学校

有许多不同类型的激活功能可以应用。我在下面列出了一些最常见的,但是你可以在这里这里了解更多:

  • **Sigmoid 激活函数:**二分类问题输出层的 go-to 函数。给出介于 0 和 1 之间的输出值。
  • **双曲正切(tanh)函数:**在中间层表现良好,因为它给出的值介于-1 和+1 之间。
  • **反正切(arctan)函数:**很多和 tanh 一样的性质,但是范围从-1.6 到+1.6,所以斜率更平缓。
  • **整流线性单元(RELU)功能:**与 tanh 一起最流行的激活功能!当输出<为 0 时,激活正好为 0,这在求导时会很麻烦。
  • **漏 RELU 函数:**通过在输出<为 0 时允许激活稍微为负,解决了 RELU 遇到的导数问题

真实世界的例子

让我们通过一个例子来形象地说明什么是神经网络。假设我们想在一个有 20 家不同餐馆的镇上开一家新餐馆。我们希望在给定某些输入特征的情况下预测一家餐馆的销售额,这些输入特征包括:位置、不同食品的价格以及食品选择的多样性。

现在,让我们分别看一下每项功能:

  • 位置 —路过餐厅的人都会被算作潜在顾客,所以位置有助于决定路过的人的数量是有道理的。
  • 定价*——食品的定价方式决定了人们的承受能力,进而影响销售额。*
  • 品种——在一家餐厅有更广泛的选择可能会被认为是一家更高质量的餐厅,并可能吸引更多的顾客。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由熨斗学校提供

因此,在食品供应中有更广泛的品种可能会增加餐馆的感知质量,但另一方面,如果价格高,顾客可能会感知餐馆的质量更高。这表明几个输入可能影响一个’ '隐藏的 '特征。在传统的神经网络中,输入和输出相互独立,但是在递归神经网络(RNNs) 中,节点可以使用前一个节点的输出作为当前节点的输入。你可以在这里了解更多关于 RNNs 的信息。**

****隐藏层是一层节点(在本例中为路过的人数、可负担性和感知质量),其输出取决于其他节点的输入(在本例中为位置、价格和多样性),因此不像网络输出那样可见。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

熨斗学校的人工神经网络图像

要被认为是“深度学习”,人工神经网络需要至少有两个隐藏层。每一层可以有任意数量的节点,并且可以有任意数量的层。如果你有兴趣了解更多关于不同类型的神经网络,你可以在这里了解更多关于。****

感谢您花时间阅读这篇博文!希望这能给你启发和信心,让你了解更多关于深度学习的知识。

参考文献

  1. https://hacker noon . com/deep-learning-vs-machine-learning-a-simple-explain-47405 B3 eef 08
  2. https://www . zendesk . com/blog/machine-learning-and-deep-learning/

3.https://www.asimovinstitute.org/author/fjodorvanveen/

4.https://hacker noon . com/rnn-or-recurrent-neural-network-for-noobs-a9 afbb 00 e 860

5.https://dashee 87 . github . io/deep % 20 learning/visualizing-activation-functions-in-neural-networks/

6.熨斗学校模块 6:第 44 部分

完全管理的机器学习初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-fully-managed-machine-learning-9d4a5e46b419?source=collection_archive---------50-----------------------

从业余项目转向企业规模的机器学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安妮·斯普拉特在 Unsplash 上的照片

人们从不同的背景过渡到机器学习,大多数情况下他们是软件开发人员;然而,每个人都从个人或课程项目开始。然而,在这个行业中,项目的规模更大,给开发和维护带来了额外的复杂性。这就是全面管理的 ML 服务或 ML Ops(灵感来自 DevOps)的用武之地。它将流程转移到云中,为团队提供了更大的灵活性、可靠性和透明度。通过这篇文章,我将软件开发和典型的数据科学项目进行了比较。

单一责任

这是借用了软件设计的坚实原则。我们可以将端到端的机器学习模型分成执行单一功能的任务。然后,我们将这些任务连接成一个连续的工作流。每个任务只关心它自己的输入和输出数据以及分配给它的资源。通常,我们可能希望将数据转换、增强或图像/视频预处理等步骤从建模中分离出来。

依赖性倒置

在这种情况下,它可能不是最合适的术语,但是开发人员对此很满意。这个原则指的是模块的解耦——工作流中较高级别的模块应该尽可能少地依赖较低级别的模块。数据可以从多个来源摄取到 ML 模型中;如果这些来源在任何时候发生变化,都不会影响建模过程。低阶模块负责以期望的格式向模型提供数据。

可重用性

机器学习工程师努力在工作流中构建可重用的模块。尽管更高层次的模型发生了变化,但是数据争论任务应该是即插即用的。当训练长时间运行的算法时,特别是可能需要几个小时的神经网络,缓存结果可能会有所帮助,这样每次运行工作流时,您就不必重新执行训练阶段。大多数云 ML 解决方案都提供了这个特性,它节省了大量的时间。

可量测性

与传统软件类似,ML 应用程序也面临着不同的性能需求。完全托管服务的最大优势之一是能够将任务横向扩展到一个机器集群。随着训练数据的大小或请求数量的增加或减少,它会自动在集群中添加或删除机器。规格是可配置的,您也可以添加具有 GPU 的高性能机器。

集装箱化

就像应用程序的容器一样,它也有助于在隔离的环境中运行数据分析脚本。例如,Python 提供了对虚拟环境的支持,虚拟环境指定了 Python 版本和其他依赖项(通常是一个很长的列表)。每次有新的团队成员加入团队或您更换机器时,配置设置都很容易转移。在自己的环境中运行项目还可以防止它们与其他项目(可能使用较低版本的 Python)发生冲突。在集群中运行脚本的每台机器上解析依赖性。

版本控制

系统地跟踪每个模型运行并比较不同模型的能力是每个数据人员的天赋。机器学习中最具挑战性的问题之一是选择超参数的最佳组合,即权衡对性能和准确性的影响。通过专用功能,我们可以在一大组超参数上快速训练模型,并可视化精度(或任何其他指标)。

云服务还促进了与同时在工作流程的不同阶段工作的贡献者的协作。每个服务都通过集成开发环境(ide)提供支持,集成开发环境可用于从本地机器推送更改。

部署和监控

建立机器学习模型几乎永远不是故事的结尾;你产生的见解会有消费者。您可以通过 REST APIs 或作为 web 服务公开您的模型,有时,您可能还需要将输出与其他应用程序集成。

最后,蛋糕上的樱桃是主动监控工作流状态和接收定制通知的能力。

谷歌大查询地理信息系统初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-google-s-bigquery-gis-46a1193499ef?source=collection_archive---------21-----------------------

通过这个循序渐进的教程,免费开始使用 Google Big Query GIS

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

约书亚·索蒂诺在 Unsplash 上拍摄的照片

这个大数据时代的云计算无处不在。然而,许多云服务不提供位置组件来分析和可视化地理空间数据。Big Query 具有接收、处理和分析地理空间数据的内置功能。

在本教程中,我将指导您免费设置 BigQuery 沙盒,使用熟悉的 PostGIS/Spatial SQL 接口处理空间数据,并在云中可视化。

设置免费的 BigQuery 沙箱

谷歌慷慨地提供了一个免费的沙盒供你实验。 BigQuery 沙箱让你可以自由尝试 BigQuery 的功能,并带有一些[限制](http://The BigQuery sandbox gives you free access to the power of BigQuery subject to the sandbox’s limits. The sandbox lets you use the web UI in the Cloud Console without providing a credit card. You can use the sandbox without creating a billing account or enabling billing for your project. The web UI is the graphical interface that you can use to create and manage BigQuery resources and to run SQL queries. See the BigQuery web UI quickstart for a working introduction to the web UI.)。有了沙盒,您可以使用 BigQuery,而无需为您的项目创建计费帐户或启用计费。

他们还提供 3 个月 300 美元的免费试用,你可能有资格。

要使用 BigQuery 沙盒,只需转到此 URL。

[https://console.cloud.google.com/bigquery](https://console.cloud.google.com/bigquery)

用谷歌账户登录(最好使用匿名模式)。请注意下图左上角的沙盒标志,它表示您现在处于一个免费的沙盒环境中(每月 10 GB 的活动存储和 1 TB 的已处理查询数据)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

BigQuery 界面—作者图片

您可以在“资源”面板中添加数据源(左侧以蓝色突出显示)。在中间的面板中,有查询编辑器,您可以在其中编写 SQL 语法(突出显示为绿色)。一旦准备好 SQL,就可以使用 run 按钮运行查询。

BigQuery 公共数据集

谷歌有一个庞大的公共数据集存储库。在撰写本文时,可用的公共数据集数量为 195 个。在本教程中,我们将使用开放的公共数据集之一:芝加哥犯罪。请随意从列表中确定一个感兴趣的数据集并进行实验,但本文中的所有示例都将使用芝加哥的犯罪数据。

要添加公共数据集,您需要点击+ sign ADD DATA,然后点击Explore public data set。选择一个令人兴奋的数据集,点击它查看数据集。在本例中,我们使用芝加哥犯罪数据集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

搜索数据集(左)。正确可用的 big query-big query 界面中的公共数据-作者图片

现在我们已经添加了公共查询数据集,我们可以查询它们了。让我们在下一节看到这一点。

使用 BigQuery 运行 GIS 查询

现在,您可以运行标准的 SQL 查询来浏览公共数据集。但是,由于这些数据集通常很大,您可以运行限制行数的 select 语句来预览数据集的前几行或查看表的架构。但是,您可以预览模式和数据集的几行,而无需运行任何 SQL 代码,从而节省运行查询的成本。

查看数据集的架构。单击数据集和下方的按钮,您将看到表格的Schema(如下所示)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bigquery 接口数据集架构-按作者分类的图像

如果您想预览前几行,那么您可以点击Preview,然后您应该会看到数据集的一些行,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bigquery 接口数据集预览-按作者分类的图像

在下一节中,我们将介绍 BigQuery 的地理特性。

创建和处理地理要素

我们的表有经度和纬度列;因此,我们可以使用 SQL 地理函数将这些值转换为地理要素。如果您已经熟悉 PostGIS,BigQuery GIS SQL 语法也应该是典型的。

我们可以使用ST_GeogPoint函数创建一个地理列。让我们看一个例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

BigQuery 中的 ST_GeogPoint 查询-按作者分类的影像

让我们先来看一下 SQL 语法。我们选择犯罪的主要类型,使用ST_GeogPoint创建一个地理点,并传递纬度和经度列。我们还删除了经度列中的所有空值,因为我们不能用坐标创建地理点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ST_GeogPoint 查询 SQL 代码-作者图片

如果您查看上面的图像,您可以保存结果,但更重要的是,BigQuery 具有 GIS 可视化功能,您可以在其中交互式地绘制地图。要可视化地理空间数据,点击Explore with GeoViz,会弹出一个新窗口。点击Authorize并使用您的帐户登录。现在,您应该可以将之前运行的 SQL 语法复制到 BigQuery Geo Viz 工具中。点击Run。现在,您应该会看到一个带有 SQL 结果的底图,在本例中是犯罪点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Geoviz 工具-图片由作者提供

如果数据已经是地理空间格式,运行一个简单的 SQL 查询就足够了。比方说,我们想得到芝加哥的邮政编码。Big Query 在 geo_us_boundaries 上有一个公共数据集,我们可以运行一个包含 geom 列的 select 语句。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多边形几何 SQL 代码-作者图片

现在,我们可以使用 BigQuery Geo Viz 工具可视化结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 GeoViz 可视化多边形-作者提供的图像

现在,我们可以在 BigQuery 中查询地理数据集,让我们转到一个使用空间连接函数的更高级的示例。

空间连接

空间连接是应用最广泛的空间过程之一。当我们想要按位置连接数据时,我们使用空间连接。假设我们想要将每个犯罪点与其邮政编码关联起来。我们可以使用ST_Within函数来检查该点是在邮政编码以内还是以外。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简单空间连接 SQL 代码-按作者分类的图像

上面的 SQL 查询将芝加哥犯罪点与邮政编码关联起来。我们正在使用ST_Within功能,并通过犯罪和邮政编码几何地理点。结果如下表所示,其中每个点都与其邮政编码相匹配。

如果我们想统计每个邮政编码中的犯罪数量,我们可以添加一个 group by 语句。以下 SQL 查询返回每个邮政编码的犯罪数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有空间连接的分组依据 SQL 代码-按作者排序的图像

结果如下所示。我们统计了每个邮编的所有犯罪。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按结果分组-按作者分组的图像

你知道我们没有任何地理特征,因为我们不能按地理特征分组。但是,我们可以运行 with-statement 查询来获取邮政编码几何以及每个邮政编码中所有犯罪的计数。

让我们尝试一下(参见下面的 SQL 查询)。这里没有什么新的东西,我们首先通过一个带有空间连接的语句运行通常的 group,然后连接到实际的邮政编码几何。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

带语句的空间连接 SQL 代码-按作者分类的图像

查询结果如下所示。您现在可以看到,我们已经在结果中包含了几何列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

几何空间连接-作者提供的图像

因为我们有一个几何列,所以我们也可以使用 Goeviz 工具来可视化结果。我需要设计地图的样式,因此我使用了计数栏来绘制一个 choropleth 地图(见下图)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者绘制的带 GeoViz- Image 的 Choropleth 地图

结论

在本文中,我们已经使用免费的沙箱介绍了 BigQuery 的一些基本地理功能。在熟悉了 BigQuery 接口之后,我们已经使用 BigQuery GIS 的地理功能创建并运行了简单的查询。最后,我们实现了一个按位置连接数据的例子。

BigQuery GIS 中有大量的地理功能。你可以在这里找到它们。

[## 标准 SQL | BigQuery | Google Cloud 中的地理功能

如果任何输入参数为 NULL,所有 BigQuery 地理函数都将返回 NULL。地理功能分为…

cloud.google.com](https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions)

用 Python 获取和分析工资数据的初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-grabbing-and-analyzing-salary-data-in-python-e8c60eab186e?source=collection_archive---------18-----------------------

提供三个用于探索性数据分析的 Python 库,让您的生活更加轻松

当我第一次开始学习 Python 时,我希望我拥有的资源之一是关于如何获取和分析数据的非常简单、实用的示例。多年来,我坚持使用 Excel 只是因为我可以相对快速地做任何事情,而且在当时,Python 似乎是一个值得怀疑的收益。

下面,我想讨论三个对探索性数据分析(EDA)非常有用的库,向那些可能想知道学习 Python 的成本效益的人强调每个库的价值。下面显示的完整代码可以在这里找到一个 Jupyter 笔记本

查看 Levels.fyi 数据

如果你在其中一家公司(脸书/苹果/亚马逊/网飞/谷歌)工作,你可能听说过网站 级别。对于那些没有这样做的人来说,levels 可以很容易地比较和对比不同公司的不同职业水平,而且相对于其他薪酬网站,如glassdoor.com,Levels 通常被认为在实际技术工资方面更准确。Levels.fyi 有一个很好的界面,它的可视化使比较不同公司的工资级别变得很容易,但是,我发现自己想以一种网站上预先汇总的视图不允许的方式来分析数据。下面是我如何做的一步一步的过程。接下来,你需要一些东西来编写 Python(推荐 Jupyter ),并且知道如何安装提到的各种库(推荐初学者下载 Anaconda )。

获取数据

检索数据是最令人困惑的部分,因为站点结构决定了数据的可访问性。幸运的是,在使用开发人员工具检查网络调用后,我发现 level.fyi 从单个端点交付其全部薪水有效负载。用 Python 抓取 JSON 数据简单得离谱,我个人就用了[requests](https://github.com/psf/requests/)库。将它与[pandas](https://github.com/pandas-dev/pandas)库结合起来,我们已经用两行代码将 JSON 存储到一个整洁的数据帧中:

import pandas as pd
import requestsdata = requests.get('https://www.levels.fyi/js/salaryData.json').json()
df = pd.DataFrame(data)

使用requests.get允许我们发出适当的 http 请求并返回一个响应对象。在末尾添加json()将响应转换成 JSON。现在我们已经有了 JSON 格式的数据,我们需要做的就是构造一个数据帧,产生如下结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的数据框架示例

你可以看到有一些无用的栏目,比如rowNumber。我们将继续进行并删除它们,这样我们就不会在接下来的步骤中打乱我们的分析。我们还希望用数字“NaN”替换空白值,以便接下来的步骤中的一些探索性分析能够正常运行:

import numpy as npdf = df.drop(['cityid', 'dmaid','rowNumber'], axis=1)
df = df.replace("", np.nan)

现在我们已经清理了数据框架,让我们开始研究数据集吧!

探索性数据分析

熊猫有很多真正有用的方法来快速理解你的数据集,如describe()info()shape()等。虽然它们本身肯定是有用的,但我发现在早期记住它们会很麻烦。他们也更关注描述性统计,这并不能帮助你理解更大的问题,如数据完整性或相关性。幸运的是,这是 Python 的地盘,有三个库在为我们做繁重的工作方面做得非常好。

了解缺失数据的完整性

对于这个数据集,我首先想了解每个特征的完整性,以及我是否有足够的数据来进行有意义的分析(例如,检查按性别划分的工资差异,或按任期划分的股票/奖金差异)。为了做到这一点,我更喜欢使用 missingno 库,它可以返回各种可视化结果,以帮助更好地理解数据集中缺失的数据。我需要做的就是导入这个库并使用下面的一行程序:

import missingno as msnomsno.matrix(df, figsize=(12, 8))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行 msno.matrix()的输出

瞧啊。除了查看数据有多完整,我们还了解到某些功能,如“标签”、“基本工资”和“奖金”并不总是表单填写所必需的,但后来变成了必需的。它还显示,除了“其他详细信息”(和“性别”),可选数据如“股票价值”被频繁填写,可以包含在我的初始分析中。

使用 Pandas_profiling 了解数据结构

现在我对数据的完整性有了一个快速的想法,我可以运行一个更深入的探索性分析。为此,我将使用一个名为 Pandas Profiling 的库。把它想象成dataframe.describe(),但是用了类固醇。Pandas Profiling 获取数据集的每个特征,查看数据类型,然后创建一个巨大的页面,使用分布图、分类箱、极值等详细描述每个特征。它还提供了数据集、相关矩阵的概述,以及使用上述 MissingNo 库显示所有缺失数据的部分!Lukas Frei 在这里写了一篇关于图书馆的文章,我强烈推荐这篇文章来更深入地了解熊猫概况。

我们需要做的第一件事是确保我们的数据类型是正确的类型,以便 Pandas Profiling 可以正确地解释它们。使用df.info()表明我们所有的列当前都是对象类型,所以让我们用下面的代码来改变它:

df['timestamp'] = pd.to_datetime(df['timestamp'])df[['yearsofexperience','basesalary','bonus','stockgrantvalue','totalyearlycompensation','yearsatcompany']] = df[['yearsofexperience','basesalary','bonus','stockgrantvalue','totalyearlycompensation','yearsatcompany']].apply(pd.to_numeric)

如果你再次运行df.info(),你会看到‘时间戳’是一个日期时间,其他的都变成了浮点数。现在我们的数据格式正确了,让我们使用单线奇迹来生成熊猫简介!

import pandas_profiling as ppdf.profile_report(style={'full_width':True})

一旦它运行,您应该会看到类似下图的东西,以及数据集的概述!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

熊猫概况概述

很酷,对吧?除了汇总数据,它还突出显示相关信息,如高度基数数据、变量中缺失数据的百分比和零值。对于这篇文章,我最感兴趣的是totalyearlycompensation,所以让我们检查一下这个变量,看看我们能学到什么…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“总薪酬”变量的汇总

我们已经可以看到一些东西导致了数据的严重倾斜,因为分布高度集中在左侧。展开详细信息并转到extreme values选项卡,显示如下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“总年度薪酬”的最小值/最大值

最高值是 5000 似乎有点奇怪,所以我们需要去https://www.levels.fyi/addcomp.html了解输入工资数据的表单是什么样子的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Levels.fyi 表单

查看表单会发现歪斜的几种可能性。有些人可能一年挣 500 多万美元(有可能!),可能有人只是输入了垃圾数据,和/或可能有一段时间网站上的用户输入了不同的数据(整数而不是千)。由于我们无法控制数据质量,让我们看看“统计”选项卡是否能帮助我们了解更多信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“总薪酬”变量的统计数据

当查看左侧的分位数数据时,我们可以看到 5/95%标记似乎与整体数据相匹配(范围在 96,000 美元到 500,000 美元之间)。我们可以使用 Python 中另一个令人兴奋的方法quantile来轻松过滤掉前 5%和后 5%的数据,而不是试图创建静态过滤器或梳理数据来删除这些异常值:

df = df[df['totalyearlycompensation'].between(df['totalyearlycompensation'].quantile(.05),df['totalyearlycompensation'].quantile(.95))]

哒哒!我们已经即时动态地从数据集中移除了异常值。如果我们重新运行 pandas-profiling 我们的totalyearlycompensation变量现在看起来像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

过滤分位数后的总年薪

您甚至可以进一步推断,使用 pandas 查询方法来分析数据的特定子集。例如:

df.query("company in ('Facebook','Amazon','Apple','Netflix','Google') and title in ('Product Manager','Software Engineer') and yearsofexperience>4 and yearsofexperience<16").profile_report(style={'full_width':True})

为我们提供了一份报告,该报告分析了具有 5-15 年经验的 FAANG 产品经理和软件工程师的子集。

你可以进一步使用一些额外的库来绘制一个 violin plot 的比较图!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看看我的 Jupyter 笔记本如何做到这一点!

用 AutoViz 让电脑为你做一切

最初,我的文章只打算讨论上面的两个库,但是有一个新的版本我也想介绍一下,它叫做 AutoViz 。这是一个较新的库,本质上是寻找数据集的“相关”细节,以逻辑方式将它们组合在一起,然后以各种图形形式向用户提供输出。如本文章所述:

XGBoost 模型被重复用于确定最一致的特征集,每次通过使用随机的特征集来确定该特征集是重要的;然后,最突出的选定特征可用于指导未来的绘图和可视化

要在我们的数据集上应用和尝试这一点,我们需要做的就是添加几行额外的代码,并命名我们要分析的因变量(在本例中为 totalyearlycompensation)。让我们将数据集过滤给软件工程师,这样我们可以在查看输出时分析单个作业类型:

from autoviz.AutoViz_Class import AutoViz_Class
AV = AutoViz_Class()df = df[df['title'] == 'Software Engineer']df_av = AV.AutoViz(filename="", sep=",", depVar="totalyearlycompensation", dfte=df, header=0, verbose=2, lowess=False, chart_format="svg", max_rows_analyzed=15000, max_cols_analyzed=30)

运行上面的代码后,您应该会看到类似这样的内容,后面是一些图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AutoViz 的摘要输出

因此,我们可以看到,在数据集中的 13 个特征中,AutoViz 决定放弃 6 个,因为信息相关性低,令人惊讶的是,公司和位置也在其中。然而,如果我们使用df.value_counts(normalize=True)查看位置统计,我们会发现 51%的工资仅来自 5 个位置,因此可能没有足够的数据使位置成为一个强有力的指标。

现在让我们看看它生成的图表,看看我们能学到什么。在“根据目标变量映射的连续变量”下,我们看到以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据目标变量映射的连续变量散点图

由此我们可以看出:

  1. 不管年度总薪酬是多少,基本工资一般都在 25 万美元左右
  2. 股票奖励和奖金变化很大,可能占软件工程师年度总薪酬的很大一部分
  3. 奖金往往更均匀地分散,而股票奖励似乎有三个点集群(90/50/20 度角)。这可能是一个数据质量问题,但这也可能意味着股票价值大幅上升

考虑输出时,直方图 KDE 部分非常重要,因此我们接下来讨论这一部分。首先,我们可以看到男性约占数据集的 88%,因此考虑到严重的不平衡,提取性别间有意义的见解将是困难的。其次,数据严重倾向于职业生涯早期的人——63%的报告工资来自有 0-6 年工作经验的人。这告诉我们,那些有更多经验的人可能希望在下太多结论之前考虑有限的样本量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

性别和经验年限

KDE 图部分的下一组变量也显示了强烈的右偏。特别是 Bonus 和 stockgrantvalue 也有几个峰值。这是 KDE 的说法,即这些是数据集中概率最高的选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KDE 为股票期权价值和红利绘制图表

为什么这很重要?如果我们继续只查看成对散点图部分,我们会遇到这种情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

股票价值和奖金与经验年限的关系

如果我们没有看到 KDE 的偏斜,我就无法判断,对于奖金,40%的价值实际上低于数字“40”。

AutoViz 是一个优秀的新库,当您初次查看数据时,它实际上有可能节省您的时间。如上所示,该程序不会将您从畸形或古怪的数据中拯救出来,因此理解您的数据集是生成有用见解的关键!

结论

希望这篇文章给了你一些新的工具,让你在开始使用数据集时可以使用。我可能会在未来的帖子中讨论更多深入和核心的包,但我认为这些包在高价值输出和低强度输入之间实现了良好的混合。就我个人而言,我从 missingno 开始,在我确信数据相对完整后运行 pandas_profile,然后过滤/按摩到更详细的数据集,以针对 AutoViz 运行更细粒度的自动生成的洞察。感谢阅读!

连接数据的初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-joining-data-935c8e579fb7?source=collection_archive---------28-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由来自佩克斯克里斯蒂娜·莫里洛拍摄

左连接、内连接、外连接

连接数据是数据分析的基本技能之一。不幸的是,当您刚刚开始时,或者当您正在从 excel 过渡到 SQL 或 Python 时,这也可能有点令人困惑。

在本文中,我将直观地解释连接数据意味着什么以及如何有效地进行连接。

加入数据是什么意思?

理解连接的最好方法是通过一个简单的例子来完成。

假设你为一家在网站上销售 t 恤的公司工作。

你有一个数据集告诉你关于你的网站用户的细节。为简单起见,假设该表只包含唯一的客户端 ID、客户端名称和来源国家:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您还有另一个数据集,它告诉您这些网站用户的所有购买行为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你的老板走进房间,要求你告诉她哪个国家的网站销售额最高。

要回答她的问题,你需要把告诉你客户在哪里的数据和告诉你他们买了什么的数据放在一起。换句话说,对于每一笔交易,您都需要弄清楚客户端位于何处。

使这成为可能的是,这两个数据集之间有一些共性。在这种情况下,它是客户端 ID。

“连接”就是基于一个公共数据点组合数据。恰当地说,这个公共数据点被称为“连接键”

对于本例,我们可以使用下面的 SQL 查询将用户数据连接到购买数据,该查询使用“client ID”作为连接键:

select purchases.client_id, purchases.sale, users.country 
from purchases
left join users
on purchases.client_id = users.client_id;

瞧:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们可以看到墨西哥的销售额最高。(注意:如果我们有多行,我们会希望使用“groupby”和“sum”函数。但是由于我们在上面的例子中没有太多的数据,我们可以很容易地当场回答这个问题,并把那些话题留到另一天。)

为什么我们需要连接数据?

如果您是数据分析的新手,您可能会感到疑惑,为什么我们首先需要连接数据?为什么数据不能只存在一个表中?

这主要有两个原因。首先,数据通常从不同的来源获得。获取用户数据和事务数据的过程可能是分开的。

如果您是 excel 的超级用户,想想您不得不执行 vlookup 来连接两个数据源的所有时间。本质上,这是一个连接。

第二个原因与速度有关。通常,一个表中的数据越多,从表中检索所需内容的时间就越长。

不同类型连接的简单说明

很好,现在我们对什么是联接以及为什么需要联接有了直觉。接下来,我们需要了解不同类型的连接。

这是一个人们经常犯错的领域,所以让我们试着把这部分讲清楚。

我们需要多种类型的连接有一个原因。如果你能记住原因,那么你就能记住类型。

原因如下:当你的连接键中的值不存在于你正在连接的两个数据集时,计算机需要知道返回什么。

现在,让我们看一个基于之前数据集的例子。

“8367”的客户端 id 在用户表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是它不在事务表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,join 的“类型”只是告诉计算机在这种情况下做什么。

作为该查询的自豪作者,您可以控制希望计算机返回的内容。

左连接

一个“左连接”告诉计算机:“给我左表中的所有东西,即使它不在右表中。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左边的表是查询中第一个出现的表

还记得前面的例子吗?我们使用了一个左连接,只从左表中获得了 client _ ids:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完全外部连接

“完全外部连接”告诉计算机,“给我两个表中的所有记录。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们从两个表中获取客户 id,包括 1902 和 8367(仅在 users 表中)以及 1000(仅在 purchases 表中)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,上表中的一些单元格有“null”(即。缺少)值。这是有意义的,因为这些数据实际上并不存在于原始表中。

我们知道客户 id 1000 购买了 10 美元,但是不知道这个客户来自哪里。如果它在原始数据中丢失,那么它将在连接后丢失。

内部连接

最后,一个“内部连接”告诉计算机——“只给我那些连接键在两个表中都存在的记录。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上述查询返回:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,结果集中缺少所有非重叠的客户端 id—1902、8367 和 1000。

需要注意的事项

了解有关连接数据的更多信息时,需要考虑以下几点:

  1. 右连接:一个“右连接”告诉计算机“给我右表中的所有东西,即使它不在左表中”。我从来没用过右连接。为什么?因为任何时候你想做一个右连接,你可以颠倒表的顺序,然后做一个左连接。少了一件需要记住的事。
  2. 多键连接:可以连接多个列值。(即。table1.id1 = table2.id1 和 table1.id2 = table2.id2 的左连接)
  3. Duplicates: 始终注意连接前后表中记录的数量。初学者的一个常见错误是执行一个创建不需要的副本的连接。如果您遇到这种情况,您将不得不批判性地思考如何重写连接以得到您真正想要的。

Python 逻辑回归初学者指南

原文:https://towardsdatascience.com/a-beginners-guide-to-logistic-regression-in-python-470bdc57a33?source=collection_archive---------19-----------------------

逻辑回归、混淆度量、AOC 和使用 scikit 学习的解算器的基础

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CelpaxUnsplash 上拍摄的照片

介绍

在统计学中,逻辑斯蒂模型被用于预测一个二元因变量。当我们处理需要预测 1 和 0 的数据集时,我们通常依赖逻辑回归或其他分类算法。统计学上,逻辑回归用于预测事件发生的概率。基于概率值和相应的阈值,我们指定事件是否会发生。例如,今天下雨的概率是 0.73,并且考虑到我们的阈值是 0.5,我们可以确认今天会下雨,即输出是 1,这转化为事件(在这种情况下“今天会下雨”)为真的事实。

当我写下这篇文章时,天正在下雨。太巧了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

奥斯曼·拉纳在 Unsplash 上拍摄的照片

现在的问题是这些概率阈值是什么?我们如何对数据建模?我们可以用线性回归来代替吗?简而言之,当因变量为 1 或 0 时,*线性回归不是一个选项,因为线性回归遵循因变量连续的基本假设。*当我们使用线性回归对数据建模时,因变量(Y)可以取任何范围的值。当使用线性模型进行预测时,将因变量的输出分别定标为 0 和 1 是具有挑战性的。这就是为什么对于逻辑回归,我们给定独立变量 X1、X2、X3 等等,来模拟事件 Y 的概率。迷茫?

让我们用上面的例子来解决这个问题。什么是概率****会下雨(这里的 Y 是今天下雨的概率)给定昨天下雨(X1),今天气温 20 度(X2),月份 10 月(X3),湿度 20% (X4)。现在,如果我们建立一个回归模型,假设 Y = aX1 + bX2 + cX3 + dX4 +常数,Y 的值可以在[A,B]之间,其中 A 和 B 可以取任何可能的值集。然而,我们知道*一个概率可以位于【0,1】*之间。这要求我们以一种输出总是位于 0 和 1 之间的方式对数据建模,因此我们使用如下图所示的 sigmoid 函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。使用 Sigmoid 函数的逻辑回归方程。作者使用 Latex 开发的图像。

逻辑回归在哪里?

我们大多数人都会收到品牌或网站的促销信息,这些信息包含我们的电子邮件 id 和个人信息。你有没有注意到像 Dash、Swiggy、Uber Eats 这样的移动应用程序定期(当你在他们的平台上不活跃时)为你提供定制的折扣?像优步这样的大机构如何知道你是否应该得到促销优惠或定制折扣?一切都可以归结为使用上面讨论的概念实现的客户分类。这些公司有机器学习模型来理解或预测你粗制滥造的概率。如果模型将你标记为一个不满意的客户,他们会部署这些个性化的策略来留住你。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的 abillionveg 拍摄

分类的概念

任何分类问题中的因变量都是 0 和 1 的二进制值(也可以是多类,例如产品质量,比如好、中、差)。因此,一旦开发了逻辑回归模型,我们需要将概率转换为 0 和 1。今天下雨的概率是 0.72。这意味着今天会下雨(真/ 1)还是不会下雨(假/ 0)?这里的一般思想是**一个事件必须是真(1)或假(0),而不能像“不确定”那样介于两者之间。**因此,一旦我们对概率值建模,我们需要将概率得分转换为 1 和 0 的组合。为了达到同样的目的,大多数机器学习算法使用 0.5 的阈值。

这意味着如果一个事件发生的概率是> 0.5,我们通常认为该事件会发生,或者换句话说,如果一个事件发生的概率超过 50%,那么我们可以声称该事件会发生,也就是说,在这种情况下,会下雨。

混乱矩阵

一旦概率被转换成 1 和 0,我们最终得到一个 2 x 2 矩阵,通常被称为混淆矩阵。混淆矩阵主要用于模型验证或预测模型的拟合程度,或模型与现有数据的吻合程度。这里值得注意的是,当我们建立一个逻辑模型时,我们需要确保我们的预测与数据中给出的相似。例如,如果数据中最初有 100 个 1 和 100 个 0,我们的模型应该将所有 1 预测为 1,所有 0 和 0。这意味着任何错误的分类或不正确的预测都会降低我们的准确性。我们先来看看混淆矩阵。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。实际值和预测值的混淆矩阵。所有相应的解释都使用这个混淆矩阵来讨论结果。作者使用 Excel 开发的图像。

  • 真阳性 —模型预测为 1 的值中有多少是原始数据集中的 1?真意味着正确的预测,1 在这里指的是积极的,所以简而言之,积极的正确预测
  • 假阴性 —数据集中有多少被模型预测为 0 的值是 1。False 是不正确的预测,这里负数是 0。所以对 0 或负数的错误预测
  • 假阳性 —有多少值被模型预测为 1,但在数据集中却是 0。False 是不正确的,这里的正数是 1。所以对 1 的错误预测
  • 真阴性 —模型预测为 0 的值中有多少是原始数据集中的 0?True 表示正确的预测,0s 在这里指的是否定的,所以简而言之就是否定的正确预测

模型验证术语

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **准确性:**我们的模型在预测真阳性和真阴性时的准确性,换句话说,我们的预测有多少与数据中的类别变量完全匹配。
  • 假设数据集中有 100 个 0 和 1 的观察值,其中 50 个观察值为 0,50 个观察值为 1 (参考实际)
  • 运行模型后,数据集中被标记为 0 的 50 个观察值中的 30 个也被模型 (指真阴性) 标记为 0
  • 在数据集中被标记为 1 的 50 个观察值中,有 25 个被模型 (指真阳性) 标记为 1。所以我们的准确率是(30+25)/100 =55/100 或者 55%。所以准确率是(真阳性+真阴性)/(真阳性+真阴性+假阳性+假阴性)
  • **召回率或敏感度或真阳性率:**数据集中原本标记为 1 的值被模型预测为 1 的百分比是多少?所以敏感度是真阳性/(真阳性+假阴性)也就是 25 / (25+25) = 50%。
  • 这告诉我什么?—它告诉我,数据集中只有 50%被归类为 1 的值被模型正确预测到。
  • **特异性或真阴性率:**数据集中原本标记为 0 的值有百分之多少被模型预测为 0?所以敏感度是真阴性/(真阴性+假阳性)也就是 30 / (25+25) = 60%。
  • 这告诉我什么?—它告诉我,在数据集中,只有 60%归类为 0 的值被模型正确预测。
  • **1-特异性或假阳性率:**数据集中原本标记为 0 的值有百分之多少被模型预测为 1?所以 1-灵敏度是假阳性/(真阴性+假阳性)也就是 20 / (25+25) = 40%。
  • 这告诉我什么?—它告诉我,在数据集中被归类为 0 的值中,只有 40%被模型错误地预测到。
  • **精度:**预测为 1s 的值有百分之多少是正确的?所以精度是真正/(真正+假正)也就是 20 / (20+25) = 44.4%。
  • 这告诉我什么?—它告诉我,模型预测为 1s 的值中只有 44.4%是正确的
  • F1 得分:是精度和召回率的调和平均值。它的计算方法是 2 x(精度召回率)/(精度+召回率)。在我们的例子中,它是 2 * (0.440.5) / (0.44+0.5) = 0.46

使用哪个模型验证指标?

现在我们知道了多个度量标准,很难确定使用哪一个。我在这里举个例子。我们先来看看下图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3。四种不同情景的混淆矩阵及其准确性、回忆/敏感度、精确度和 F1 分数。作者使用 Excel 开发的图像。

上图显示了一个经典的场景示例,其中来自不同模型运行的输出产生了相同的准确性分数。当验证一个逻辑模型时,我们需要在进入模型验证度量之前理解业务用例。一个经典的例子是诊断病人的医疗状况。在处理医疗保健行业的问题时,除了准确性,我们还需要关注召回价值。准确度和精确度并不那么重要。我们需要更准确地预测有健康状况的患者,即使这意味着错误地将没有健康状况的患者分类。

这里的基本原理是,即使的精确度很差,即我们错误地预测健康患者患有某种疾病,也会有后续的医学测试来帮助诊断。然而,如果我们的召回率低,即我们不能正确预测患者的医疗状况,那么我们就会危及他们的生命

想一想——在营销活动中,我们需要预测客户是否会购买产品,并向他发送一些促销信息,这种情况如何?

我们应该将阈值从 0.5 更改为不同的值吗?

在统计学中,如果一个事件发生的概率是 0.5,那么就认为是一个随机事件 大多数 ML 算法使用阈值 0.5 将概率转换为 1 和 0,这转化为随机化因子。如果一个事件的概率大于随机概率值,那么这个事件就有可能发生,否则就不会发生。然而,有时我们需要微调这个阈值来改进模型度量之一。

如果我提高或降低阈值,会有什么变化?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 始终记住真阳性+假阴性 是数据集的 常数,这意味着如果其中一个改变,灵敏度也会改变。类似地,数据集的假阳性+真阴性是常数,这意味着如果任一变化特异性也发生变化
  2. 降低阈值意味着我最终预测 1 多于 0?这意味着什么?
    -这意味着真阳性+假阳性 通过增加预测 1
    的数量来增加
    -这导致了假阳性数量增加的可能性,从而降低 精度
    -如果假阳性增加,真阴性将下降,从而降低特异性
  3. 增加阈值意味着我最终会预测更多的 0 而不是 1
    这意味着什么?
    -这意味着真阴性+假阴性增加,因为模型预测的 0 的数量将更高
    -这导致假阴性的数量可能会增加,从而降低灵敏度

如果模型的召回(灵敏度)值很低,您可能希望将阈值从 0.5 降低到一个较低的值。

接收机工作特性曲线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。逻辑回归模型的 ROC 曲线。作者使用 Jupyter 笔记本开发的图像。

  1. 当灵敏度/真阳性率为 0,1-特异性或假阳性率为 0 时,意味着什么?
    -真阳性为 0,这意味着所有的 1 都被模型
    错误地预测到了-假阳性为 0,或者我们可以说真阴性为 100%,即所有的 0 都被模型
    正确地预测到了-我的模型为 0 返回了极好的回报,但未能识别 1
  2. 当灵敏度/真阳性率为 1 且 1-特异性或假阳性为 1 时意味着什么?
    -假阴性为 0,这意味着所有的 0 都被模型
    错误地预测到了-真阳性为 1,或者我们可以说所有的 1 都被模型
    正确地预测到了-我的模型返回了 1 的优秀结果,但未能处理 0
  3. 上面的曲线意味着什么?
    -对于不同的概率阈值,灵敏度和 1-特异性值是多少
    -面积越大,表示 1-特异性低时灵敏度高,之后保持饱和

使用 Python 预测贷款资格

信用风险是指借款人拖欠任何贷款。在银行部门,这是在批准申请人的贷款之前要考虑的一个重要因素。X 公司经营所有房屋贷款。他们在所有地区都有业务。客户申请贷款,在批准之前,贷款官员会对其进行验证。该分析旨在为客户建模,并确定他们是否合格。

实现相同功能的代码片段如下:

import pandas as pd
from sklearn.linear_model import LogisticRegression# importing ploting libraries
import matplotlib.pyplot as plt
# To enable plotting graphs in Jupyter notebook
%matplotlib inline#importing seaborn for statistical plots
import seaborn as sns
sns.set(color_codes=True) # — — — — — — — -adds hue to the color#Let us break the X and y dataframes into training set and test set. For this we will use
#Sklearn package’s data splitting function which is based on random functionfrom sklearn.model_selection import train_test_splitimport numpy as np
import os,sys
from scipy import statsimport warnings
warnings.filterwarnings(‘ignore’)# calculate accuracy measures and confusion matrix
from sklearn import metricsfrom IPython.display import display # — — — — — — — — — — -for displaying multiple data frames in one output

读取数据

df = pd.read_csv(‘CreditRisk.csv’)print(“Shape of the data:”, df.shape)display(df.head())

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5。来自信用数据的数据元素。作者使用 Jupyter 笔记本开发的图像。

cr_df = df.drop(‘Loan_ID’, axis =1 ) # dropping this column as it will be 1–1 mapping anywayscr_df['Loan_Amount_Term'].value_counts(normalize=True)#The Loan_Amount_Term/Credit_History is highly skewed - so we will delete this columncr_df.drop(['Loan_Amount_Term'], axis=1, inplace=True)

缺失值处理

for i in list(cr_df.columns[cr_df.dtypes==’object’]): # checking value counts of all object type columns
 print(cr_df[i].value_counts(normalize=True))
 print()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6。按属性分布数据。作者使用 Jupyter 笔记本开发的图像。

#filling Null Valuescr_df[‘Self_Employed’].fillna(‘No’,inplace=True) #replacing with mode, as maximum people are not self employedcr_df[‘Dependents’].fillna(‘0’,inplace=True) #replacing with modecr_df[‘Credit_History’].fillna(0.0,inplace=True) #replacing with modecr_df['Gender'].fillna('Male',inplace=True) #replacing remaining values with mode as no other relationship founddf.groupby(['Loan_Status','Gender','Property_Area'])['Married'].value_counts()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7。为了取代婚姻状况,我们着眼于属性的组合,以确定插补的类型。作者使用 Jupyter 笔记本开发的图像。

cr_df.loc[104,’Married’] = ‘Yes’
cr_df.loc[228,’Married’] = ‘Yes’
cr_df.loc[435,’Married’] = ‘No’

为模型开发准备数据

数据分为训练集和测试集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8。测试列车概念。作者使用 MS Excel 开发的图像。

## Define X and Y variablesX = cr_df.drop([‘Loan_Status’], axis=1)
Y = cr_df[[‘Loan_Status’]]#Convert categorical vriables to dummy variables
X = pd.get_dummies(X, drop_first=True)##Split into training and test setfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.30,random_state=1)from sklearn.metrics import confusion_matrix, recall_score, precision_score, f1_score, roc_auc_score, accuracy_score, log_loss
from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression(random_state=42);logreg.fit(X_train, y_train)

让我们检查一下测试数据的准确性。

y_predict = logreg.predict(X_train) # — — — — — — — — -Prediction here are 0s and 1s# — — — — — — — to get probability values use this snippety_predict_prob = logreg.predict_proba(X_train)confusion_matrix(y_train,y_predict)#-----------------------------------Regression Score--------------------------------------
print("Trainig accuracy",logreg.score(X_train,y_train))  
print()print("Testing accuracy",logreg.score(X_test, y_test))
print()print("Recall:",recall_score(y_train,y_predict))
print()print("Precision:",precision_score(y_train,y_predict))
print()print("F1 Score:",f1_score(y_train,y_predict))
print()print("Log Loss:",log_loss(y_train,y_predict))
print()

使用解算器、正则化和类权重微调模型

在构建逻辑回归时,我们需要考虑三个可用于提高准确性的参数。这包括解算器(如牛顿-cg、lbfgs、liblinear、sag(随机平均梯度下降)、saga、正则化器(这是 L1 和 L2 罚函数,用于说明较高数量的变量并防止过度拟合)和正则化器的罚函数。我们还可以微调类平衡,以解决数据中的不平衡。下面的代码使用的默认求解器是 lbfgs,惩罚为“l2”,平衡的类权重,惩罚值为 25%。

#Therefore final model is
model = LogisticRegression(random_state=42,penalty=’l2', class_weight=’balanced’,C=0.25)model.fit(X_train, y_train)y_predict = model.predict(X_test)print(“Trainig accuracy”,model.score(X_train,y_train)) 
print()
print(“Testing accuracy”,model.score(X_test, y_test))
print()print(‘Confusion Matrix’)print()
print(“Recall:”,recall_score(y_test,y_predict))
print()
print(“Precision:”,precision_score(y_test,y_predict))
print()
print(“F1 Score:”,f1_score(y_test,y_predict))
print()
print(“Roc Auc Score:”,roc_auc_score(y_test,y_predict))

[## sklearn.linear_model。逻辑回归-sci kit-学习 0.23.2 文档

逻辑回归(又名 logit,MaxEnt)分类器。在多类的情况下,训练算法使用一对其余…

scikit-learn.org](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)

关于作者:高级分析专家和管理顾问,帮助公司通过对组织数据的商业、技术和数学的组合找到各种问题的解决方案。一个数据科学爱好者,在这里分享、学习、贡献;你可以在 LinkedIn Twitter上和我联系。

为什么您需要在部署后管理 ML 模型

原文:https://towardsdatascience.com/a-beginners-guide-to-machine-learning-model-monitoring-36bf7faf3616?source=collection_archive---------15-----------------------

机器学习模型监控初学者指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由穆罕默德·哈桑拍摄,来自皮克斯拜

目录

  1. 简介
  2. 什么是模型监控
  3. 为什么模型监控很重要
  4. 模型监控中的指标

介绍

机器学习(ML)模型的生命周期非常长,而且它肯定不会在你建立模型后结束——事实上,这只是开始。一旦你创建了你的模型,下一步就是生产你的模型,这包括部署你的模型并监控它。虽然这听起来成本很高,但为了从 ML 模型中获得最大价值,在使用模型的过程中监控模型是非常必要的。

想象一下监控一个 ML 模型,就像你想做年度体检或定期给你的车换油一样。模型建模是一项操作任务,它允许您检查您的模型是否发挥了最佳性能。

在本文中,您将了解什么是模型监控,以及为什么它对于生产化模型如此重要。

什么是模型监控

模型监控是机器学习生命周期中的一个操作阶段,在模型部署之后,它需要“监控”您的 ML 模型,例如错误、崩溃和延迟,但最重要的是,确保您的模型保持预定的预期性能水平。

为什么模型监控很重要

为什么模型监控很重要的简单答案是,随着使用时间的推移,您的模型会退化,这被称为模型漂移。模型漂移,也称为模型衰减,指的是由于各种原因(我将在下面解释)导致的模型预测能力的退化。

看不见的数据

一般来说,机器学习模型仅在域内数据总人口的大约百分之十的样本大小上进行训练[1],并且通常是由于标记数据的稀缺或训练大量数据的计算限制。虽然构建机器学习模型是为了减少偏差并能够归纳数据,但总会有模型输出不正确、不准确或低于标准的数据样本。

环境的变化和变量之间的关系

人们经常忘记的是,模型是基于其创建时的变量和参数进行优化的,ML 模型也不例外。想象一下 20 年前创建的垃圾邮件检测模型现在会如何运行。二十年前,互联网还不算什么!垃圾邮件变得越来越复杂,变化也越来越大,因此人们可能会怀疑垃圾邮件检测模型是否能够发挥作用。这是环境变化的一个例子。

影响模型环境及其变量之间关系的另一个因素是我们对数据的解释。例如,十年前创建的情感模型可能会错误地对各种单词和短语的情感进行分类,因为我们说话的方式、我们使用的单词和我们开发的俚语会随着时间不断变化。你再也听不到有人用古英语说话了,是吗?

上游数据变更

这指的是数据管道中的操作数据变化。实际上,这很常见,因为数据科学团队或部门通常无法控制输入数据来自的每个系统。例如,一个完全孤立的软件工程团队可能会将一个变量的度量单位从摄氏温度改为华氏温度,尽管其余的数据是以摄氏温度存储的。例如,如果一个人试图找到平均温度,这可能会导致严重的后果。上游数据更改的一个更简单的例子是不再生成要素,从而导致丢失值。

总体而言…

机器学习模型的阶段环境永远不会无限期地等同于生产环境,因为我们生活的世界总是在变化。基于上述原因,对你投入生产的任何 ML 进行监控是非常必要的。在下一章中,我们将讨论您可以监控的各种指标,以及在决定要监控什么指标时应该考虑的因素。

模型监控中的度量

有几个指标可以用来监控 ML 模型。您选择的指标取决于多种因素:

  • 是回归还是分类任务?
  • 商业目标是什么?精确度与召回率
  • 目标变量的分布是什么?

以下是模型监控中常用的各种指标:

类型 1 错误

也被称为假阳性,这是模型错误预测阳性类别的结果。例如,当你没有怀孕时,一个结果为阳性的妊娠测试就是一个 1 型错误的例子。

第二类错误

也被称为假阴性,这是模型错误预测阴性类别的结果。这方面的一个例子是,当一个结果说你没有患癌症,而你实际上患了癌症。

精度

模型的准确性简单地等于模型正确预测的分数,由以下等式表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

精度

Precision 试图回答“多大比例的肯定识别实际上是正确的?”并且可以由下面的等式表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回忆

回忆试图回答“多大比例的实际阳性被正确识别?”并且可以由下面的等式表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

F1 得分

F1 分数是对测试准确性的一种衡量——它是精确度和召回率的调和平均值。它的最高分是 1(完美的精确度和召回率),最低分是 0。总的来说,它是对模型的精确性和稳健性的一种度量,可以用以下等式表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

R 平方

r 平方是一种度量,它告诉你因变量的方差在多大程度上是由自变量的方差来解释的。更简单地说,当系数估计趋势时,R 平方表示最佳拟合线周围的散布。

例如,如果 R 是 0.80,那么 80%的变化可以用模型的输入来解释。

如果 R 为 1.0 或 100%,这意味着因变量的所有变动都可以完全由自变量的变动来解释。

调整后的 R 平方

添加到模型中的每个额外的独立变量总是增加 R 值,因此,具有几个独立变量的模型可能看起来更适合,即使它不是。这就是调整后的 R 的用武之地。调整后的 R 补偿每个额外的独立变量,并且仅在每个给定变量将模型改进到超出概率可能的程度时才增加。

平均绝对误差

绝对误差是预测值和实际值之间的差值。因此,平均绝对误差是绝对误差的平均值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

均方误差

均方误差或 MSE 与 MAE 类似,只是取预测值和实际值之间的平方差的平均值。

因为差值是平方的,所以较大的误差被赋予更高的权重,所以当您想要最小化较大的误差时,这应该在 MAE 上使用。下面是 MSE 的等式和代码。

O 总之,您选择监控的指标最终取决于手头的任务和您工作的业务环境。

例如,在数据科学领域,众所周知,准确性指标与欺诈检测模型无关,因为欺诈交易的百分比通常不到 1%。因此,即使欺诈检测模型有 99%的准确率,因为它将所有交易归类为非欺诈交易,这也不能帮助我们确定该模型是否有效。

另一个例子是,当涉及到癌症筛查测试时,假阴性分类的严重性比假阳性分类严重得多。说一个癌症患者没有癌症最终会导致他或她的死亡。这比说一个病人得了癌症,进行进一步的检查,却发现病人没有癌症要糟糕得多。(安全总比后悔好!)

更多类似的文章,请查看 https://blog.datatron.com/Datatron 的媒体页面或他们的博客

感谢阅读!

如果你喜欢我的工作并想支持我,我会非常感谢你在我的社交媒体频道上关注我:

  1. 支持我的最好方式是在媒体T10【这里上关注我。
  2. 推特关注我这里
  3. 点击这里订阅我的新 YouTube 频道
  4. LinkedIn 上关注我这里
  5. 在我的邮箱列表 这里报名。
  6. 查看我的网站terenceshin.com

资源

[1]德什穆克,奥姆(2019)。部署了你的机器学习模型?以下是你需要了解的后期制作监控。分析维迪亚。
https://www . analyticsvidhya . com/blog/2019/10/deployed-machine-learning-model-post-production-monitoring/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值