TowardsDataScience 博客中文翻译 2020(三百五十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

任何东西都有它的价格——如何给单词和短语定价,在线广告竞价等等

原文:https://towardsdatascience.com/everything-has-its-price-how-to-price-words-for-ad-bidding-etc-7df38e1d152?source=collection_archive---------36-----------------------

这篇文章概述了自然语言单词或短语定价的 NLP 方法。它创造性地利用了(1)模型 word2vec,它从给定的语料库中学习上下文和单词之间的关联;(Mondovo 数据集,它为我们进一步引导我们的应用程序提供了基本的构建块。该解决方案将在诸如在线广告竞价、在线营销、搜索引擎优化等领域具有有趣的应用。这篇文章是定价问题的初始基线解决方案的一个示例,渴望了解更多关于我在实践中是如何做的以及对该主题更深入的处理的读者欢迎收听我的后续出版物。

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

马库斯·温克勒Unsplash 上拍摄

人们正在量化一切。当我们无法做到这一点时,我们称之为无价值的或神秘的,或熟练地将其视为幻觉;爱情、忠诚、诚实等等就是如此。

在线广告竞价行业绝对不是例外,他们最大的问题之一是如何为他们选择的广告关键词或短语提供准确的竞价价格,以确保出版商网站上的一些热点广告。困境是这样的:如果出价太高,你可能肯定会得到广告位,但你也将不得不支付你出价的高昂价格;如果你把出价定得太低,你可能很难得到那个广告位。显然,这种微妙的权衡需要创造性地解决将单词/短语量化为价格的问题。

幸运的是,我们可以放心一个响亮的好消息:单词也可以定价!对于这个问题,我们可能没有像 Black-Scholes 期权定价模型那样精心制作的处方,但我们有多种方法可以解决这个问题。

在本文中,我将为关键词定价问题草拟一个简单的解决方案,它基本上使用了一种叫做 **word2vec 的自然语言处理技术。**接下来的部分将展示如何处理数据,在哪里使用 word2vec,如何将我们的问题转化为一个回归任务,最后展示整个管道的性能。

让我们开始吧。

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

约翰·金Unsplash 上拍照

word2vec 简介

追溯统计语言模型的演变可能是有帮助的。首先,我们有简单的词袋模型,在这个模型中,我们离散地对待语料库中的每个词;没有上下文,没有依赖,只有独立的词。对于这样一个模型,你能做的最好的事情就是想出一个词频图表。

接下来是 n 元模型。单字,即单个单词,没有那么强大,但我们可以扩展到双字、三字、四字等,其中每 N (2、3、4 或更多)个连续的单词被视为一个整体(作为单个单词)。可以说,这样的模型将能够捕捉大小为 N 的单词上下文,并使我们能够进行更复杂的预测和推理。例如,我们可以轻松地构建更强大的概率状态转移模型,如马尔可夫链,它支持日常应用,如单词自动暗示或自动完成。

相比之下, word embedding 是一个语言模型家族,其中使用向量来描述/表示词汇表中的单词或短语,而 word2vec 是最流行的技术之一。一般来说,它使用神经网络从给定的语料库中学习单词关联/关系,并使用给定长度的向量来表示每个单词,使得单词之间的语义相似性将与它们的向量表示之间的向量相似性相关。维基百科页面将提供一个很好的初始指针,对于这个主题的更深入的处理,请继续关注我未来的帖子。

数据处理

这是极其重要的一步。为了让我们提出任何模型,我们首先需要数据。此外,为了让我们的模型学习数据之间任何有意义的关系,我们希望数据包含从自然语言单词到价格的示例映射。不幸的是,互联网上有许多这样的数据集,我能找到的一个来自 Mondovo 。这个特定的数据集包含了 Google 上最常问的 1000 个问题及其相关的全球每次点击成本,尽管数据集相当小,但它提供了我们需要的基本成分:单词及其价格。

将这 1000 行数据打包成一个包含两列的 pandas dataframe 是相当容易的:关键字价格,从现在开始我们称这个 dataframe 为 df

然后,让我们执行以下步骤,以确保数据的顺序确实是随机的:

df = df.sample(frac=1).reset_index(drop=True)

这就是我们的数据预处理。

模型导入

现在让我们稍微关心一下 word2vec。在这项任务中,我们将依赖于一些现成的向量表示,而不是从我们自己的语料库(即 1000 个短语)中学习单词向量表示。以下代码片段将介绍 Google 的开箱即用解决方案:

import gensim.downloader as apiwv = api.load('word2vec-google-news-300')

这位消息人士称,该模型建立在‘预先训练好的谷歌新闻语料库(30 亿个运行词),(并包含)词向量模型(300 万个 300 维英文词向量)’。

从单词到句子

这里有一个问题:模型 word2vec 只包含单个单词的向量表示,但是我们需要像我们数据集中的那些短句/短语的向量表示。

至少有三种方法可以解决这个问题:

(1)取短句中所有单词的向量的平均值;

(2)类似地,取平均值,但是使用单词的 idf(逆文档频率)分数对每个向量进行加权;

(3)使用 doc2vec,而不是 word2vec。

在这里,我很想看看基线模型的表现如何,所以让我们暂时使用(1 ),将其他选项留给将来的探索。

以下代码片段将提供一个简单的示例来实现平均函数:

def get_avg(phrase, wv):
    vec_result = []
    tokens = phrase.split(' ') for t in tokens:
        if t in wv:
            vec_result.append(wv[t].tolist())
        else:
            #300 is the dimension of the Google wv model
            vec_result.append([0.0]*300) return np.average(vec_result, axis=0)

请注意如果条件在某个“停用词”(给定语言中极其常见且通常无信息的词)中是必要的。在英语中,认为“the”、“it”、“which”等已被排除在谷歌模式之外。在上面的片段中,我留了一些余地,跳过了详细处理缺少单词或停用词的主题。在我以后的文章中,将会有更深入的讨论。请继续收看!

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

照片由米卡·鲍梅斯特Unsplash 上拍摄

回归问题设置

请记住,从根本上讲,几乎所有的机器学习算法都期望数字输入:例如,在图像处理问题中,黑白图片作为 0–1 的矩阵提供给算法,彩色图片作为 RGB 张量。我们的问题也不例外,这就是为什么我们不厌其烦地介绍 word2vec。

考虑到这一点,让我们看看机器学习算法中使用的特征矩阵和目标向量:

X = np.array([get_avg(phrase, wv) for phrase in df['keyword']])y = df['price']

由于我们预测的是一些数值,这是一个回归问题。让我们为此任务选择一些简便的回归算法:

from sklearn.ensemble import RandomForestRegressor#leaving out all params tuning to show absolute baseline performance
reg = RandomForestRegressor(random_state=0)

表演

现在我们终于能够看到我们的绝对基线模型的表现了。让我们建立如下 10 重交叉验证方案:

from sklearn.model_selection import KFoldfrom sklearn.metrics import mean_absolute_error#set up 10-fold Cross Validation:
kf = KFold(n_splits=10)#loop over each fold and retrieve result
for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index] reg.fit(X_train, y_train)

    print(mean_absolute_error(y_test, reg.predict(X_test)))

在我的实验中,运行上面的代码给出了 MAE 分数 1.53、0.98、1.06、1.23、1.02、1.01、1.06、1.19、0.96 和 0.96,导致平均 MAE 为 1.1,这意味着我们的估计价格平均可能会偏离真实价值 1.1 美元。

考虑到可用的数据稀少,训练数据中缺乏单词冗余,样本内数据点稀疏,以及我们在没有任何参数优化的情况下的绝对基线假设,我对我们目前的方法能够推进的程度印象深刻。不难想象,一些热心的读者自己做实验一定会取得更好的结果。

一切都是回归

原文:https://towardsdatascience.com/everything-is-just-a-regression-5a3bf22c459c?source=collection_archive---------7-----------------------

寻找统计学的统一范例

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

序幕

我的记忆力很差。

在大学里,我的第一爱好是生物,但最终我对这些课程不感兴趣,因为它们强调记忆。我被数学作为一门学问所吸引,因为我不需要记忆任何东西。在数学中,要点是我们如何知道某事。如果你自己都不能证明一个结果,那你就是不懂。

出于某种原因,统计学仍然经常通过列出在各种情况下适用的测试来教授。复杂的流程图和更加具体的统计测试。

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

检验均值假设的统计流程图。

这导致了统计测试的混乱和误用。不过没关系,因为我有一些好消息。基本统计数据可以分为三个部分进行解释:

对于有数据科学和/或机器学习背景的人来说,这是一个好消息。由于回归是大多数机器学习研究的起点,这意味着你已经在做统计假设检验了——也许你并不知道。在这篇文章中,我将通过给出一些如何从回归的角度考虑普通统计检验的例子来关注这一点的最后一步。

线性回归快速回顾

在线性回归中,我们为我们的特征 x 和我们的响应变量 y. 之间的关系建立一个线性模型

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

该模型是统计的,因为假设ε是随机的。

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

噪声项,假设正态分布在普通最小二乘法(OLS)中

这是一个数学模型。这是我们精确地指定我们对数据集的假设的一种方式。每当我们构建模型时,记住这句名言是很有用的:

所有的模型都是错的,但有些是有用的。—乔治·博克斯

模型是对现实世界复杂性的抽象和简化。因为它们是一种简化,所以它们总是错误的,但它们可能捕捉到一些重要的想法。

作为一个例子,让我们考虑一个从 1991 年到 2018 年的 NBA 选秀数据集(你可以从我的网站下载这个数据集)。我们可以看看选秀权和职业生涯场均得分之间的关系。这显示在下面的散点图中,以及数据的最佳拟合回归线。

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

对 1991 年至 2018 年的 737 名 NBA 选秀权和他们的职业生涯 PPG 平均水平进行线性回归。请注意,这些点是随机抖动的,以避免散点图上的重叠

这里的最佳拟合回归线由下式给出:

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

最佳拟合线性回归模型

线性回归的最佳拟合通常通过最小化残差平方项来找到。

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

N 个数据点的 LS 成本函数。

在这里,我不会深入探讨成本函数的实际最小化是如何工作的。可以说,使用线性代数中的一些技巧,我们可以很快找到这个成本函数的全局最小值。这给了我们一些最适合斜率和截距的参数。

分类变量回归

我们还可以对本质上是分类的特征进行回归。这里的诀窍是做一个所谓的 一个热编码 的分类变量。想法是将分类水平转换成指示变量(δ)。如果输入属于其指定电平,这些δ将为 1,否则为零。

例如,对于 NBA 选秀数据,让我们将选号列分为彩票选号(≤14)和非彩票选号(NL)。

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

然后我们可以寻找这两组球员平均每场得分的差异。

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

编码回归模型。如果不是彩票选号,δ为 0,否则为 1。

这是一张显示回归线的数据图。

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

现在,斜率项β给出了非彩票选号(x=0)和彩票选号(x=1)之间每场游戏的平均点数的差异。这里的轻微上升趋势表明,我们有一些证据表明,彩票选秀权往往在他们的职业生涯中平均得分更多。

当然,这种趋势是基于对玩家的随机抽样,所以如果我们收集新的样本,这种上升趋势可能会消失。为了说明随机采样引起的变化,我们可以为斜率形成一个置信区间

对于上面的彩票选号示例,我们发现参数的 95%置信区间如下:

β ∈ (3.48, 4.78)

α ∈ (6.65,7.57)

这告诉我们,彩票选秀权减去非彩票选秀权的职业生涯 PPG 的平均差异可能在 3.48 到 4.78 之间。这让我们了解了影响方向(正面)和影响程度(3.5-4.8 分)。

我们可以看到这个斜率区间不包含零。这告诉我们,如果我们重新采样数据,我们不太可能看到这一趋势的逆转。如果我们将置信水平从 95%提高到 99%,我们将看到区间宽度会增加。为了减少错误,我们需要更大范围的值。

我们现在可以玩增大(100-p)%置信区间的游戏,直到区间在左侧刚好达到 0。这个值称为 p 值

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

斜率为零的零假设的 p 值可以通过稳定地增加 CI 的宽度直到它接触零假设区域来找到。

p 值给出 P(D|H₀)在假设零假设为真(即 H₀ : β=0)的情况下观察到数据的概率。

双样本 t 检验

在某些情况下,我们可能只关心效果的方向,而不关心效果的大小。这属于被称为双样本 t 检验的统计检验的范畴。在基础统计学课上,我们被教导使用双样本 t 检验来评估在两种条件下收集的数据,以寻找均值差异的证据。这是典型的控制组对实验组。

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

为了在 R 中执行这个测试,我首先要从我们相当大的草案数据集制作一个较小的数据集。下面的命令只是产生一个随机的 100 名玩家的子集,供我们比较。为了更好地衡量,我还在数据集中创建了一个彩票列。

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

为两个样本的 t 检验建立两组。使用种子,这样你就可以得到和我一样的值。

现在我们准备在 r 中运行 t 测试。

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

我们运行了一个双样本 t 检验来寻找 NBA 中彩票和非彩票选秀权之间的平均职业生涯得分的差异。

现在请注意我们结果中的 p 值。此处相对较小的值表明数据不太可能给出零假设。

现在让我们用一个分类特征来做线性回归。

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

在这里,我将展示我们简单的线性回归的 R 中的一个摘要命令的结果。

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

我已经强调了重要的一行。将此结果与我们使用双样本 t 检验发现的结果进行比较。t 值(直到符号)和 p 值是相同的!

此外,当我们查看 R 中的回归汇总时,请注意相同的 p 值在汇总的最后一行中重复出现。这是对我们整个回归模型进行的 F 检验 的结果。

这个测试告诉我们模型中的任何特征是否以统计上显著的方式偏离零。我们的课程,在这个简单的例子中,我们只有一个特征,因此模型的 f 检验和彩票特征的 t 检验是完全相同的。在多元回归(不止一个特征)中,这些将是不同的。

方差分析和多元回归

假设我们想评估球员的位置对他们职业生涯平均得分的影响。首先,我们应该清理数据集中 position 列的级别。

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

使用 R 中的 forcats 包来清理 Position(Pos)列的级别。这里我们将一些类别合并在一起,得到 C,F,G 作为位置。

然后,我们可以按职位绘制职位职业得分图:

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

nba 球员样本中位置对职业得分影响的箱线图。

我们可能想知道这些组的平均值是否真的不同,或者观察到的差异是否也可以用抽样误差来解释。在经典统计学中,我们会说我们想要进行单向 ANOVA (方差分析)。这可以在 R:

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

R 中的 ANOVA,注意 p 值在最右边给出 p=0.0813。

现在我们也可以把它看作回归。我们的回归模型具有以下形式:

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

alpha 截距值现在告诉我们中心的平均值,两个斜率告诉我们相对于中心值的点。

这些都是在 r 中完成的,输出如下:

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

将回归输出中的最后一行(f 检验)与 ANOVA 输出进行比较。我们再次看到相同的结果!

这告诉我们,单向方差分析只是一个具有分类特征的线性回归模型——具有两个以上的水平。使用的测试有一个无效假设,即所有的斜率都为零。

双向方差分析

在双向方差分析中,我们使用两个分类特征来预测一个连续的响应变量。

让我们使用 Tm(起草团队)和 Pos(职位)列对我们的草案数据集进行此操作。双向方差分析需要更多的数据来拟合模型,所以我们将使用完整的数据集,而不是我们的精简数据集。首先,我运行下面的两个命令来清理两个分类特征级别。

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

清理整个草稿数据集的团队和职位列。这些人使用了 forcats 软件包

在这种情况下,我们的线性模型采用以下形式:

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

第一个总和是虚拟编码团队变量,第二个总和是职位类别。所有这些都在 r 中很好地完成了。为了执行我们的分析,我们可以使用以下公式构建线性模型:

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

建立双向方差分析线性模型

这里唯一的变化是我们应该在我们的模型上使用 anova() 命令,而不是通常的 summary() 。这将显示以下结果:

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

这两条线告诉我们,我们有证据表明职位对职业积分很重要,但我们没有足够的证据得出团队很重要的结论。现在,您大概可以看到如何使用多元回归进行 N 向方差分析。

协方差分析

如果我们在回归中加入一个连续的特征,这就有了另一个名字(ANCOVA=协方差分析)。这里的动机可能是我们已经看到位置对 NBA 球员的 PPG 很重要,然而这可能只是因为一些位置比其他位置打更多的时间。

我们可以通过在我们的模型中包含这个特性来控制播放时间的效果。首先,我将重新调整上场时间列(MP ),使平均值为零,标准差设为 1。这样做的动机是,否则我们在线性模型中的截距是真的没用的——因为这会给一个场均 0 分钟的中锋带来职业生涯的 PPG。现在,截击将有一个平均每场比赛出场时间的中锋的平均 PPG 的解释。也许有点拗口,但更有意义。

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

缩放播放分钟数栏

这是一张每场比赛上场时间和得分之间的关系图,位置用颜色表示。

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

现在我们来建立线性模型:

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

这会产生以下结果:

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

第一行告诉我们,即使在控制上场时间后,这个位置对职业生涯 PPG 也有统计学上的显著影响。

比例和 GLMs

我们也可以把其他基本的统计程序表述为回归。然而,我们将需要利用所谓的广义线性模型(GLM) 走得更远。

首先,我将生成一个假数据集供我们使用。下面的命令创建了一个 R 数据帧,它存储了一场假想比赛的罚球结果和球员姓名,在这场比赛中,球员 A 和 B 各罚 100 次球。

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

玩家 B 只有 77%的命中率,玩家 A 只有 80%的命中率,虽然这是有抽样误差的。我们可以在 R:

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

在这里,我们可能要执行一个双样本比例测试,以检验两个玩家之间的百分比不同的假设。

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

这可以在 R 中使用 prop.test 命令来完成。

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

在 r 中运行双尾 prop 测试的结果。这里我们简单地使用两个比例相等的零假设进行测试。这也可以用相同的 p 值进行χ检验。

现在是回归方法。如上所述,由于我们的响应变量不再连续,我们需要调整我们的回归来处理二元输出。实际上,我们希望我们的模型能产生一个概率 pᵢ

这可以使用 逻辑回归 来完成。我们通常的回归采用以下形式:

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

在逻辑回归中,我们的输出 Yᵢ应该给出在给定 Xⱼ特征的情况下,Yᵢ取值 1 的概率。如前所述,我们有一个问题,上面模型的右边将产生ℝ=(-∞的值,∞),而左边的应该存在于[0,1]中。

因此,要使用这样的模型,我们需要我们的输出从[0,1]转换到整个实际ℝ.线 logit 函数对此很有用,因为它映射 logit: [0,1] → ℝ.

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

因此,如果将我们的输出视为由 logit 函数 Yᵢ=logit(pᵢ).产生,我们可以使用我们的多元回归技术这是逻辑回归的基本思想:

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

最后,我们可以反转 logit 函数来获得实际概率:

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

其中 logit⁻ : ℝ → [0,1]由下式给出:

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

逻辑回归是被称为广义线性模型(GLM) 的一系列技术中的一个例子。GLMs 包括线性预测函数α+ ∑ βⱼ Xᵢⱼ和将线性预测函数映射到响应变量的链接函数 g()。

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

这在 r 中很容易做到。我们只需将 lm()函数改为 glm(),并指定我们想要使用的链接函数。

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

使用逻辑回归和模型比较进行双样本比例检验。请注意,p 值与上面的结果一致。

在上述情况下,我们实际上符合两个逻辑回归。第一个是我们实际想要建立的模型,第二个是两个样本比例检验的零假设的等价物。通过仅拟合截距(上面的~1),我们说两个球员罚球的百分比必须相同。

然后,我们使用 anova()函数将我们的模型与零假设模型进行比较。我还指定方差分析应该使用 l 似然比检验(LRT) 。当然,像往常一样,请注意 p 值与上面的比例测试相同。

此外,这个例子向我们展示了如何使用回归模型和 anova 命令来进行模型选择。实际上,我们一直在这么做,因为零假设一直是一个模型——我们只是以前没有在 anova 命令中指定它。这也向我们展示了如何开始将我们的模型与更复杂的空模型进行比较。

模型选择允许我们比较模型并超越琐碎的空模型。

为什么这很重要

一个数学模型的自然进程的超级奇妙的图表如下所示:

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

RIP 模型。让这成为你深度学习的一个警告!

当我们被迫承认统计测试是数学模型时,这就把假设推到了前沿。希望这能让我们在模型生命周期的前两个阶段停留得更久一点。同样,这意味着我们可以停止试图记忆一堆统计测试。

停止记忆,开始建立模型

如果你想继续了解这个话题,我强烈推荐你去看看乔纳斯·林德洛夫的网站。对于这方面的教科书,我推荐《统计学再思考》。对于基本的统计阅读,我喜欢所有的统计。对于一些更高级的回归分析,我推荐看一看 Gelman 和 Hill

掌握数据科学的 SQL 技能所需的一切

原文:https://towardsdatascience.com/everything-that-needs-to-master-sql-skills-for-data-science-dca851995b8d?source=collection_archive---------5-----------------------

如果你谷歌“如何学习 SQL?”,你得到很多结果,这是压倒性的。让我们来看看一些最好的资源。

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

杰夫·W 在 Unsplash 上拍摄的照片

我写这篇文章是通过分析业内一些最好的数据科学家写的各种 LinkedIn 帖子以及我在学习 SQL 时经历的事情。我认为这是 SQL 的一些好资源的列表。我用过其中的一些,但不是全部。

本文包括 SQL 的重要性、必须涵盖的重要主题、课程、实践平台、面试准备资源,以及 SQL 注释。

SQL 的重要性?

在脸书最近发布的 25 个数据科学家职位中,每个职位都列出了 SQL 技能。在 2020 年 LinkedIn 印度十大创业公司名单中,有 7 家将 SQL 作为他们最常用的技能之一。这种经常被低估的语言不仅在印度,而且在全世界都是需要的顶级技能之一。只要数据科学中有‘数据’,SQL 就仍然是它的重要组成部分。虽然 SQL 已经有 40 多年的历史,但它在 21 世纪仍然适用,这是因为它提供了许多优于替代产品的关键优势。

SQL 在什么情况下出现?

数据科学是对数据的研究和分析。为了分析数据,我们需要从数据库中提取数据。这就是 SQL 的用武之地。

许多数据库平台都是模仿 SQL 的。这是因为它已经成为许多数据库系统的标准。事实上,像 Hadoop、Spark 这样的现代大数据系统利用 SQL 来维护关系数据库系统和处理结构化数据。

识别正确的数据源、获取数据和预处理数据是任何描述性或预测性分析工作的基本步骤。由于这些数据主要存储在关系数据库中,因此,为了查询这些数据库,数据科学家必须具备良好的 SQL 知识。而 SQL 在这些步骤中扮演着最关键的角色。

为了通过创建测试环境来试验数据,数据科学家使用 SQL 作为他们的标准工具,并使用存储在 Oracle、Microsoft SQL、MySQL 等关系数据库中的数据进行数据分析,我们需要 SQL。

数据科学 SQL 中的重要主题

在进入参考资料之前,让我们看看哪些是重要的主题。确保你涵盖了以下话题,但不限于这些。

**1】Group By 子句:**SQL Group By 子句与 SELECT 语句配合使用,将相同的数据分组。大多数情况下,我们将聚合函数与 group by 子句一起使用,也使用 Having 子句和 group by 子句来应用条件。

2】聚合函数:聚合函数对一组值执行计算,并返回单个值。《出埃及记》计数、平均值、最小值、最大值等。

**3】字符串函数和操作:**为了执行各种操作如将字符串转换成大写,匹配一个正则表达式等。

《出埃及记》1]查找名称以“A”开头的学生 id。2]从地址栏中获取 pin 码。

**4】日期&时间操作:**当值包含唯一的日期时,很容易处理,但是当还包含时间部分时,事情就有点复杂了。所以一定要多练习。

**5】输出控制语句:**按要求得到结果。例如:order by 子句,limit 函数获取有限的行。

**6】各种运算符:**主要有三种运算符,分别是算术运算符、逻辑运算符和比较运算符

**7]联接:**这是一个重要的主题,用于联接多个表以获得期望的输出。确保您了解所有的概念,如连接类型、主键、外键、组合键等。

**8】嵌套查询:**子查询/嵌套用于返回数据,当该数据将在主查询中用作条件以进一步限制要检索的数据时。

(嵌套查询可用于返回标量(单个)值或行集;然而,联接用于返回行。如果您可以用两种方式执行操作,那么优化的方式是使用连接。)

**9】视图&索引:**索引是数据库搜索引擎可以用来加速数据检索的特殊查找表。简单地说,数据库中的索引类似于一本书的索引。

临时表:这是一个很棒的特性,它允许您使用相同的选择、更新和连接功能来存储和处理中间结果。

**11】窗口函数:**窗口函数对一组行进行操作,并为基础查询中的每一行返回一个值。它们降低了分析数据集分区(窗口)的查询的复杂性。

**12】查询优化:**当我们处理较大的数据集时,使用最有效的方法让 SQL 语句访问所请求的数据是很重要的。

最后是 13】常用表表达式。

如果您在以下课程中没有找到***【CTE】*,那么这里有 5 个有用的资源: 资源 1 资源 2 资源 3资源 4

学习和实践的资源:

课程:

1】uda city 用于数据分析的 SQL:

* [## 数据分析| Udacity

在本课程中,您将学习使用结构化查询语言(SQL)来提取和分析存储在数据库中的数据…

www.udacity.com](https://www.udacity.com/course/sql-for-data-analysis–ud198)

这是最好的 免费 课程之一,涵盖上述所有主题,每个主题后都有清晰的解释和练习测验。实践测验的质量使本课程非常有效。总的来说,这是一门很棒的课程。

2】Excel 用户 SQL 编程入门:

如果你是一个 Excel 用户,并想学习 SQL,那么这将是一个很好的 YouTube 播放列表。这涵盖了以上列表中的主要主题。

3】Udemy 的数据科学主 SQL:

[## 面向数据科学的 SQL:通过交互式练习学习 SQL

本课程将使您成为 SQL 查询向导。你将学到从…中提取关键洞察力所需的技能

www.udemy.com](https://www.udemy.com/course/master-sql-for-data-science/)

在本课程中,您将学习从数据库中的数据中提取关键洞察力所需的技能。有超过 100 个谜题散布在整个课程中,有深入的解决方案为你提供大量练习的机会。

4】可汗学院:

[## SQL 简介:查询和管理数据|可汗学院

了解如何使用 SQL 来存储、查询和操作数据。SQL 是一种专用编程语言,专为…

www.khanacademy.org](https://www.khanacademy.org/computing/computer-programming/sql)

这是一个非营利教育组织,目标是创建一套帮助教育学生的在线工具。这是一个很棒的平台,提供免费的优质课程,并有详细的解释。你也可以尝试其他课程这里。尤其是我爱统计一。

整个课程包含 5 个部分,从基础开始,一直到更高级的课程。在本课程中,每个主题的末尾都有挑战,然后是视频教程和一个小项目。

5】200+SQL 面试问题:

[## 面向开发人员的 200 多个 SQL 面试问题和答案

您准备好参加 SQL Developer 面试了吗?我在数据库领域有大约 15 年以上的经验,并且…

www.udemy.com](https://www.udemy.com/course/sql-interview-questions/?LSNPUBID=JVFxdTr9V80&ranEAID=JVFxdTr9V80&ranMID=39197&ranSiteID=JVFxdTr9V80-u9gxl6DftoBTfGmhkAhkog&utm_medium=udemyads&utm_source=aff-campaign)

如果你正在为面试做准备,本课程将通过解决复杂的问题来帮助你。在本课程中,您将找到 200 多个真实世界的 SQL 问题和实用答案。

6】LinkedIn Master SQL for Data Science:

[## SQL 在线培训课程| LinkedIn Learning,原名 Lynda.com

从选择编程语言到理解存储过程,通过观看我们的…

www.linkedin.com](https://www.linkedin.com/learning/topics/sql)

数据科学主 LinkedIn

这总共包含 6 个项目。这套课程涵盖了数据科学所需的各个方面。

如果你对 SQL 的历史感兴趣,那就去看看 这段视频 (仅第 1 部分)。

如果你是一名 初学者 ,选修以上任何一门课程或你认为好的任何其他课程,并完成以上列表中的所有主题。

如果你 知道了基础知识 那么对复习所有题目 这段视频 会很有帮助。

实践是成功的关键。

一旦你知道了所有的主题,就该练习了。没有实践,你无法掌握任何技能。所以让我们来看看一些好的练习平台……

SQL 查询实践平台:

1】leet code:

[## 问题- LeetCode

提高你的编码技能,迅速找到工作。这是扩展你的知识和做好准备的最好地方…

leetcode.com](https://leetcode.com/problemset/database/)

这是一个最好的实践平台,有各种各样的问题。下面是一些好问题有第二高工资问题重复邮件班级 5 人以上升温班级 5 人以上

2】SQL 动物园:

[## SQLZOO

跳转到导航跳转到搜索新教程:新冠肺炎国际数据。这个服务器是由爱丁堡纳皮尔托管的…

sqlzoo.net](https://sqlzoo.net/wiki/SQL_Tutorial)

SQLZoo 是一个完善的在线平台(自 1999 年以来),用于编写和运行针对实时数据库的 SQL 查询。您可以看到查询的实际结果,而不必仔细检查您的查询是否与解决方案匹配,因为解决一个问题可能有多种方法。评估部分包含更多复杂的示例,允许您以不同的难度深入数据库

3】黑客排名:

[## 解决 SQL 代码挑战

加入超过 1100 万名开发人员的行列,在 HackerRank 上解决代码挑战,这是为…

www.hackerrank.com](https://www.hackerrank.com/domains/sql)

这是一个很好的练习平台。这里的问题分为三个部分,容易,中等,困难。

4】SQL Bolt:

[## SQLBolt -学习 SQL-SQL 介绍

欢迎使用 SQLBolt,这是一系列交互式课程和练习,旨在帮助您在工作中快速学习 SQL

sqlbolt.com](https://sqlbolt.com/lesson/introduction)

本质上,它是一系列互动的课程和练习,旨在帮助用户轻松学习 SQL(T21)。本网站上的课程和主题非常全面,涵盖了使用 SQL 的所有重要细节。

5]选择 SQL:*

[## 选择星形 SQL

这是一本交互式的书,旨在成为互联网上学习 SQL 的最佳场所。这是免费的…

selectstarsql.com](https://selectstarsql.com/)

这是一本交互式书籍,旨在成为互联网上学习 SQL 的最佳场所。它是免费的,没有广告,不需要注册或下载。它通过对现实世界的数据集运行查询来帮助您完成重要的项目。

6】模式:

[## 模式 SQL 教程

学会用 SQL 用数据回答问题。不需要编码经验。

mode.com](https://mode.com/sql-tutorial/)

在这里,您可以按主题练习,有四个主要部分,分别是基础、中级、高级和 SQL 分析培训。在这里,您可以阅读理论并练习 SQL 查询。

7】斯坦福大学:

[## LAGUNITA 学习平台上的斯坦福课程

斯坦福在 2013 年 6 月发布了 edX 平台的第一个开源版本 Open edX。我们将我们的实例命名为…

online.stanford.edu](https://online.stanford.edu/lagunita-learning-platform)

在这里你可以练习题型智慧题。用户界面不是很好,但你会得到高质量的材料。在这里,您可以解决主题式查询。涵盖的主要主题是基础知识、连接、子查询、修改数据、聚合、日期、字符串,最后是递归。

面试准备资源

如果你正在准备面试,下面的资源可以帮助你,

1】Zachary Thomas 的数据分析师 SQL 面试问题:

[## 最佳中硬数据分析师 SQL 面试问题

扎克里·托马斯·(zthomas.nc@gmail.com,推特,LinkedIn)

quip.com](https://quip.com/2gwZArKuWk7W)

SQL 的前 70%相当简单,剩下的 30%可能相当复杂。科技公司数据分析师和数据科学家的面试问题通常来自这 30%。在这里,他专注于那些中等难度的问题。如果你练习了以上任何一个平台的所有重要话题(我会更喜欢 Leetcode。)那么这就足够面试准备了。

2】数据和尚:

[## 150 多个 SQL 数据科学面试问题

SQL 数据科学面试问题这里我们有 150 多个 SQL 面试问题,大部分数据都会问这些问题…

thedatamonk.com](http://thedatamonk.com/sql-data-science-interview-questions/)

在这里你可以找到公司的所有主题(SQL、python、统计学、案例研究等。)面试问题破解数据科学与数据分析师面试。

笔记

1]如果你想在短时间内复习所有概念,那么 这里是 GoalKicer 提供的 SQL 100+ pages 笔记。

2】这是 stack overflow 投稿人创作的电子书。 这本书涵盖了所有的概念。

注:很可能还有其他资源。太好了。我只是还没有全部做完!

如果你发现任何可以帮助别人的东西,请写在评论里,我会把这些资源添加到博客里。

结论

在本文中,我们回顾了所有有助于规划您自己的 SQL 跟踪的资源。本文涵盖了从基础知识到面试准备的所有资源。如果你还在困惑“如何开始?”,只需使用每个标题下的第一个资源。

您可能想阅读的其他文章

[## 线性回归分析完全指南

这篇文章是关于用统计术语理解线性回归的。

towardsdatascience.com](/the-complete-guide-to-linear-regression-analysis-38a421a89dc2)*

通过 TigerGraph 认证测试的所有知识

原文:https://towardsdatascience.com/everything-to-know-to-pass-your-tigergraph-certification-test-6c3d313c0fce?source=collection_archive---------31-----------------------

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

Jon Herke 拍摄的照片

为什么每个数据科学家都应该获得认证,以及如何获得认证

什么是 TigerGraph,我为什么要获得认证?

被列为 Gartner 2019 年十大数据和分析趋势之一的图形技术是未来,允许用户对复杂的数据提出复杂的问题,TigerGraph 就是其中的一个例子。在这里,我们将介绍使用 TigerGraph 和学习图形技术所需的所有内容。如果你获得认证,你的可信度会增加,因此我强烈建议你试一试。此外,TigerGraph 是“企业唯一可扩展的图形数据库。”通过参加认证考试,你不仅会增加你的可信度,而且你还会学到一些几乎在任何地方都能帮到你的新东西。此外,参加考试是完全免费的,所以所需要的只是时间和愿意学习通过你的测试!

第一步:理论

你将看到的前四个模块由理论组成。什么是图形技术?你能说出一些流行版本之间的区别和它们不同的应用吗?

图形数据库和分析

一个图由通过连接的个顶点(也称为节点)组成。所有的顶点和边组成一个模式。图表技术的强大之处在于数据是相互关联的,允许用户跨复杂的数据提出复杂的问题,而使用 SQL 有时是不可能的。节点和边可以有属性或属性,如年龄、位置、时间等。,它提供关于每个节点和边的细节;带有节点、顶点和属性的图称为属性图

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

照片由 Shreya Chaudhary 拍摄。上面显示了一个基本的属性图和一个例子。每个顶点都与有向边或无向边(分别是一个箭头或一条线)相连,并且具有唯一的 primary_id。

通过搜索不同的实体,图可以被用作一个参考网络,这些实体具有多个共同的顶点,并且相距几个(或边)。你可以在日常生活中找到推荐网络,比如你推荐的 LinkedIn 联系人或推荐的医生。

属性图与资源描述框架(RDF)图形成对比,因为 RDF 上的每个节点都是唯一资源标识符(URI) ,它不能携带任何属性。它们有主语和宾语(节点),用谓词(边)连接,但它们可能会变得冗长。

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

照片由 Shreya Chaudhary 拍摄。这是一个 RDF。请注意,属性是独立的节点,而不是节点的属性。

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

考试的时候一定要记住上面图表中的信息!

管理关系

接下来,我们将了解不同数据库存储关系的方法以及 graph 如何进行比较。关系数据库将每个实体存储在单独的表中,然后需要表连接来连接,这一操作可能需要几个小时,并且计算量很大。它可以用于索引和搜索一种类型的数据,并执行基本分析。关系数据库针对交易进行了优化,而不是深度分析。

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

照片由 Shreya Chaudhary 拍摄。这是一个在不同实体之间使用表连接的关系数据库的例子。

图形数据库,相比之下,是一个,单一的,预先连接的表。它们是为存储和分析关系而构建的自然存储模型。因为它的所有关系都是一级实体,针对深度分析优化的图形数据库往往比关系数据库快得多。

与 NoSQL 相比,图形数据库更适合深度分析。一个这样的例子是键值数据库,它将所有数据存储在一个表中。键值数据库允许数据灵活性和快速键查找,但它是低级的。列族是大规模的高效处理,但是对于事务和更新来说很慢。文档可以处理像 XML 和 JSON 这样的结构,但是它通常非常专业。所有这些都需要遍历和分析关系,对表进行多次扫描,这使得它不适合分析深层关系。最后,有利于处理关系,是上述结构中唯一能很好管理关系的,但并不是所有的图都能提供大规模的实时速度。总的来说,虽然 NoSQL 图可以存储各种各样的数据,但图是处理关系和实体的最佳选择。

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

照片由 Shreya Chaudhary 拍摄。这显示了一个键值数据库,这是一个巨大的数据库,需要花费很多时间来迭代。

图的演变

目前有三种类型的图表:图表 1.0、图表 2.0 和图表 3.0。 Graph 1.0 使用单服务器和非并行架构的原生图形存储。 Graph 2.0 使用 NoSQL 基础进行存储扩展,并且可以支持两跳查询,但是它们不是为实时更新而设计的。然而,Graph 3.0 既是原生的又是并行的,支持超过十跳,运行跳和加载数据花费的时间更少。

由 TigerGraph 提供的图形 3.0(T1)支持 HTAP(混合事务和分析)。它还支持 OLTP 和 OLAP,具有实时性能,是一个事务图形,具有针对大规模数据集的可扩展性,可以使用深度链接多希望分析,易于开发和部署,并提供企业级安全性。TigerGraph 是世界上第一个本地并行和分布式图形,具有互操作性,与 MPP 并行,库中有许多图形算法,支持多重图形,使用 GSQL(类似于 SQL,便于转换)。图形工作室,一个图形用户界面,允许快速简单地创建图形和易于可视化。

数据科学能力

图形支持许多机器学习和数据科学算法。这是其中一些的演练。

深度链接分析支持查看三跳以上的数据。这可能会呈指数级增长。深度链接分析的一个例子是试图找到一个用户的欺诈历史。它不仅会查看浅层连接,还会查看深层连接,以检测用户的历史记录是否清晰。

多维实体和模式匹配将在图形中寻找模式。

关系共性寻找两个顶点的共同点,比如两个供应商的共同客户。

中枢社区检测搜索图中最有影响力的顶点,即边最多的顶点。这有助于发现社区中某个事物的相关性。

地理空间图形分析使用纬度和经度显示两个事物之间的距离。

时态图分析类似,但它着眼于实体和关系如何随时间变化。

机器学习和可解释的 AI 可以通过提取特征和使用 graph studio(GUI)为图表提供视觉帮助,供 graph 使用。

第二步:TigerGraph 云

要使用 TigerGraph Cloud,请前往https://tgcloud.io/。登录,然后确保您对使用该资源感到满意。能够使用 GraphStudio 创建解决方案、上传数据、创建查询和构建图表。已经有几个很棒的关于这个的博客了,所以我在这里把它们链接起来。

这里有一个我推荐:https://www . tiger graph . com/2020/01/20/taking-your-first-steps-in-learning-tiger graph-cloud/

第 3 步:选择语句

挑选

使用 Select 语句,可以从一组顶点遍历到另一组顶点。这是一般语法(必需的参数以粗体显示):

resultSet = **SELECT vSet FROM (edgeSet | vertexSet)** [whereClause] [accumClause] [havingClause] [orderClause] [limitClause] **;**

当运行这个命令时,算法从 FROM 开始,遍历所有其他子句来“过滤”或操作它们,然后 SELECT 返回所有合适的顶点。

以下是一个查询示例:

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   Start = (inputUser);
   Friends = SELECT t FROM Start:s- (IsFriend:e)-User:t;
   PRINT Friends;
}

在示例中,s 是起始节点,e 是边,t 是目标或最终节点。

哪里和和

其中过滤掉不符合特定条件的顶点。可以使用 AND 语句连接这些条件。

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   Start = (inputUser);
   Friends = SELECT t FROM Start:s- (IsFriend:e)-User:t
             WHERE e.connectDt BETWEEN to_datetime("2019-01-01")
             AND to_datetime("2020-01-01")
             AND t.gender == "F";
   PRINT Friends;
}

在本例中,它使用 connectDt 过滤 2019–01–01 和 2020–01–01 之间的所有边。接下来,它过滤掉所有性别属性为“F”的目标节点。最终,Friends 打印出 2019 年所有连接的女性朋友。

累加器

累加器可以是本地(用一个@表示)或全局(用两个@@表示)。局部累加器专用于每个顶点,全局累加器用于整个图形。

其次,累加器有更具体的类型:

  1. suma ccum存储所有通过的数字的累计。
  2. MaxAccum存储通过的最大数。
  3. MinAccum < int > 存储通过的最小数。
  4. AvgAccum < int > 存储所有传递的数字的移动平均值。
  5. SetAccum < int > 要求所有元素都是唯一的。
  6. ListAccum < int > 有一个按传入顺序排列的元素列表。
  7. MapAccum < int,SumAccum < int > > 使用键值对像映射一样存储数据。
  8. **HeapAccum**将数据按升序或降序存储在元组中。还可以设置容量限制;当达到限制时,它将删除最高值或最低值。

这里有两个例子。第一个具有一跳全局 MinAccum:

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   MinAccum<uint> @@youngFriend;
   Start = (inputUser);
   Friends = SELECT t FROM Start:s- (IsFriend:e)-User:t
             WHERE e.connectDt BETWEEN to_datetime("2019-01-01")
             AND to_datetime("2020-01-01")
             AND t.gender == "F";
             ACCUM @@youngFriend += t.age;
   PRINT Friends;
}

第二个具有两跳本地 AvgAccums:

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   AvgAccum @avgAge;
   Start = (inputUser);
   Friends1Hop = SELECT t FROM Start:s- (IsFriend:e)-:t;
   Friends2Hop = SELECT t 
                 FROM Friends1Hop:s- (IsFriend:e)-:t
                 ACCUM t.@avgAge += s.age;
   PRINT Friends2Hop;
}

累积后

POST-ACCUM 独立于 ACCUM 子句。他们可以访问起始顶点或目标顶点(s 或 t 别名)。如果是全局累加器,工作会排队,在离开 POST-ACCUM 子句后生效。

查看使用全局最大累加器和求和累加器进行规格化的示例:

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   SumAccum<uint> @sumAge;
   SumAccum<float> @normCNum;
   MaxAccum<float> @@maxCNum;
   Start = (inputUser);
   Friends1Hop = SELECT t FROM Start:s- (IsFriend:e)-:t;
   Friends2Hop = SELECT t 
                 FROM Friends1Hop:s- (IsFriend:e)-:t
                 ACCUM t.@cNum += 1
                 POST-ACCUM @@maxCNum += t.@cNum;
   Friends2Hop = select s FROM Freinds2Hop:s
                 POST-ACCUM s.@normCNum += s.@cNum/@@maxCNum;
   PRINT Friends2Hop;
}

拥有

HAVING 子句是过滤数据的另一种方式。它类似于 WHERE 子句,但是 HAVING 子句只能访问选定的顶点和属性,而 WHERE 子句可以访问起始顶点和目标顶点。

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   AvgAccum @avgAge;
   Start = (inputUser);
   Friends1Hop = SELECT t FROM Start:s- (IsFriend:e)-:t;
   Friends2Hop = SELECT t 
                 FROM Friends1Hop:s- (IsFriend:e)-:t
                 ACCUM t.@avgAge += s.age
                 HAVING t.@avgAge > 30;
   PRINT Friends2Hop;
}

排序依据和限制

最后,ORDER BY 可以对结果进行升序或降序排序。限制设置累加器中值的最大数量。

CREATE QUERY GetFriends(vertex<Users> inputUser) FOR GRAPH Social {
   AvgAccum @avgAge;
   Start = (inputUser);
   Friends1Hop = SELECT t FROM Start:s- (IsFriend:e)-:t;
   Friends2Hop = SELECT t 
                 FROM Friends1Hop:s- (IsFriend:e)-:t
                 ACCUM t.@avgAge += s.age
                 ORDER BY t.@avgAge ASC
                 LIMIT 2;
   PRINT Friends2Hop;
}

上面的例子将结果排序为升序,然后获取前两个,也就是最小的两个。

步骤 4: GSQL 演示

图表模式

对于模式中的每个顶点,您需要有一个主 ID。另外,对于每个顶点,你需要指定一个 FROM 和 to。请遵循以下语法:

CREATE VERTEX Test(PRIMARY_ID test_id STRING)
CREATE VERTEX Test2(PRIMARY_ID test2_id STRING)
CREATE DIRECTED EDGE TEST_TO_TEST2(FROM Test, To Test2)
CREATE UNDIRECTED EDGE TEST2_TO_TEST(FROM Test2, To Test)

加载数据

要加载数据,您需要定义一个加载作业。为此,您需要创建文件名变量并使用加载语句:

DEFINE FILENAME f1 = “/path”
LOAD f1 TO VERTEX person($”name”)

图形检查

对于本模块,您需要熟悉如何使用终端或控制台来检查图表。您可以使用以下选项选择要使用的图表:

use graph social

然后,您可以使用各种其他命令。列出的命令包括 from、to、directed、to、attributes、e_type。这里有一个例子:

SELECT * FROM person WHERE var=”Val”

基本 GSQL

您将创建的查询将返回 JSON。你也可以使用 curl 来运行这个图表。知道如何创建查询和结果。

CREATE QUERY name(VERTEX=person p) FOR GRAPH social;
Start = ()
Result = SELECT tgt from Start:src -{friendship x} -person-tgt

高级 GSQL

本模块回顾了累加器,如 OrAccum 和 AvgAccum 以及本地和全局累加器。这些是累积变量的不同方法。请记住,要创建全局变量,请使用两个@@,否则只需使用一个@符号。

GSQL 中的深度查询

对于深度查询,模块检查了khoprun query name(parameters)

其他来源

在本文中,我回顾了每个视频系列,并对每个视频系列进行了总结或描述。此外,考试中还有一些杂七杂八的题目,比如如何使用 gadmin。如果您有时间,我建议您也查看一下 TigerGraph 的文档。

gad min:https://www . tiger graph . com/managing-tiger graph-servers-with-gad min/

TigerGraph 文档:https://www.tigergraph.com/tigergraph-docs-gsql-101/

视频系列原文链接:https://community . tiger graph . com/t/tiger graph-getting-started-guide/11

你现在准备好了

这是 TigerGraph 认证考试的文本版本。现在,去这里获得认证并了解本文之外的更多内容。祝好运,学习愉快!

你不想知道的关于 CSV 的一切

原文:https://towardsdatascience.com/everything-you-didnt-want-to-have-to-know-about-csv-665d0755e28?source=collection_archive---------33-----------------------

揭开 CSV 的神秘面纱,介绍使用 CSV 文件的工具和策略

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

CSV 是用于存储数据的更常见的文件格式之一,但是,它也充满了许多问题,这些问题会使使用它变得很痛苦。不像其他格式,如 JSON ,CSV 不是形式化或标准化的。这意味着有些东西可能被称为 CSV,但不一定能被您正在使用的 CSV 解析器正确读取。

我希望这篇文章能让你更好地理解使用 CSV 文件的挑战,以及一些转换和分析 CSV 格式数据的方法。我假设你有一定程度的技术经验,但不一定是你写代码。

什么是 CSV?

维基百科条目的第一句话提供了一个简单的(但已经有问题的)CSV 定义:

逗号分隔值(CSV)文件是使用逗号分隔值的分隔文本文件。CSV 文件以纯文本格式存储表格数据(数字和文本)。文件的每一行都是一条数据记录。每个记录由一个或多个字段组成,用逗号分隔。

根据这个定义,CSV 文件看起来应该是这样的(本例中的第一行代表列标题):

id,name,title
1,Alex Wennerberg,Cloud Data Engineer

这看起来相对简单,但是很快,问题就出现了。比如一个值里面有逗号怎么办?您可以将该值封装在双引号中,但是如果引号字符也包含在该值中呢?如果用于描述记录的字符(即换行符)出现在数据中会怎样?如果您的文件使用逗号以外的字符来描述值,该怎么办?诸如此类。这些问题的答案通常是特定的,并且依赖于系统,因此,根据您正在处理的 CSV 数据的来源,您需要应用一组不同的规则来正确解释该数据。如果幸运的话,您的源代码系统会提供完整的文档。如果不是,那么您必须猜测和/或逆向工程您的 CSV 文件遵循的任何规则集。

CSV 从 20 世纪 70 年代就开始使用了,但是没有标准化。最接近 CSV 标准的是 2005 年发布的 RFC 4180 。虽然这可能是一个有用的参考,但不能保证您正在使用的系统称为“CSV”文件的文件遵循这个 RFC。比如微软 Excel 明确没有。RFC 本身声明如下:

它没有规定任何类型的互联网标准。

美国国会图书馆提供了一个更加“真实”的 CSV 定义,并描述了许多常见的偏差:

在使用逗号字符代替数字中的小数点的语言环境中,字段/列之间的分隔符通常是分号。

换行符可以是 CR 或 LF,不一定是 CRLF。

一些基于 Unix 的应用程序可能使用不同的转义机制来指示某个分隔符出现在文本值中。单个字符前面有一个反斜杠字符,而不是用双引号将整个字符串括起来。单引号可能被视为等同于转义的双引号(也称为“文本限定”)。其他几个警告值得注意:

文件中的最后一条记录可能以换行符结尾,也可能不以换行符结尾。

通过使用几种 c 样式字符转义序列中的一种,不可打印的字符可以包含在文本字段中:###或\ o # # # Octal\x##十六进制;\d###十进制;和\u#### Unicode。

对字段和记录分隔符附近空白的处理因应用程序而异。如果文本字段值开头和结尾的空格很重要,则文本字符串应该是文本限定的,即用引号括起来。

在某些应用中,存在强数据类型的假设,未加引号的字段被认为是数字,加引号的字段被认为是文本数据。

我在实践中见过大部分或所有这些偏差。在某些情况下,工具会通过在记录之间拼接一个逗号来导出“CSV”,这很容易被打断(例如 SQL Server 的“CSV”格式)。

如果您有兴趣进一步阅读,LOC 页面有很多其他的细节,但是我不建议您假设任何 CSV 数据都符合 RFC 4180,或者您正在与之交互的任何解析器都实现了 RFC 4180。您可能想要查看您正在使用的特定 CSV 编写器或解析器的文档,如果它存在的话,以了解那个单独的系统如何处理 CSV。一些系统将相对较好地处理 CSV,而其他系统可能会以不可预测的方式失败。

CSV 工具

如果您正在处理 CSV 格式的数据,您可能希望转换您的 CSV 数据并将其加载到对 CSV 格式有不同期望的不同系统中。您可能还想从 CSV 加载数据,并对其执行转换和分析。这里有一些我觉得在处理 CSV 文件时有用的工具。这些工具中的大多数都假设您有一些使用命令行和从二进制或软件包仓库安装软件的经验。

xsv

这个命令行工具是我执行大多数与 CSV 相关的任务的首选工具——它可靠且速度极快,如果您正在处理大文件(> 1GB ),它没有太大的竞争力。它可以做许多简单的操作,包括切片数据、排序数据、执行基本分析、重新格式化 CSV 数据、修复不匹配的行等。查看文档以获取更多信息。如果您正在对数据进行更复杂的分析或转换,xsv 可能不合适,您可能想看看下面的一些其他工具。

T5【CSV kit】T6

另一个命令行工具,我在发现 XSV 之前使用 CSVkit。它起着类似的作用,但速度远不及前者。CSVkit 还有很多附加功能,例如在 CSV 和其他格式之间转换。如果你需要做一些 XSV 做不到的事情,或者如果你处理的文件比较小,性能不是很重要,那么这是一个很好的库。

(或其他关系数据库)

大多数关系数据库都能够从 CSV 导入或导出。对于在大型数据集上进行复杂分析,这是一个非常好的策略,性能相对较好。如果您已经熟悉 SQL,这也很容易。我推荐 SQLite 来做这样的分析,因为它不需要服务器,可以直接写到磁盘,甚至可以在内存中运行,但是您也可以使用您更熟悉的另一个关系数据库。

一个相对较新的工具是 DuckDB ,一个嵌入式列数据库,它也可以读取 CSV。我还没有使用过这个,但如果您正在为分析工作流寻找一个更高性能的嵌入式数据库,这可能是一个很好的选择!

熊猫

如果您熟悉 Pandas(Python 数据操作和分析库),它可能是处理 CSV 数据的一种有用方式,但在大型(几 GB)数据集上可能会遇到性能问题,具体取决于您的计算机规格。数据科学家经常结合使用 Pandas 和 Jupyter 进行数据分析,这两种工具都有一个广泛的社区。Pandas 非常适合在从 CSV 加载数据后对其进行更复杂的转换和分析。你也可以将数据从 Pandas 导出为多种不同的格式。

big query,** 红移 ,或者其他托管的柱状数据库**

如果您正在处理非常大量的数据(数十或数百 GB),您的计算机可能无法通过 SQLite 或 Pandas 处理本地运行的分析。您可能想要将您的 CSV 文件移动到列数据库中,这些托管工具让您不必担心设置数据库服务器。

用你选择的编程语言编写代码

如果你喜欢写代码,你的编程语言可能有一个 CSV 解析库。例如,我经常使用标准 Python 库的一部分 Python CSV 库。如果您正在处理大量数据并且对性能非常敏感,或者如果您想要执行上述工具无法处理的任务,这是一个有用的策略。在某些情况下,使用 Unix 工具如 awksed 可能对处理 CSV 有意义,但我通常会使用专门编写的命令行工具来处理 CSV。编写自己的代码对于修复格式错误的 CSV 可能特别有帮助,这样它就可以被不同的解析器读取。

提示和技巧

我确信这一点是显而易见的,但是在几乎所有情况下,您都不希望通过简单地用逗号分割文件或用逗号连接一系列值来编写自己的 CSV 解析器。如果您正在编写代码,几乎可以肯定存在一个 CSV 解析库,它可以处理尽可能多的我们已经讨论过的问题。但是,在某些情况下,您可能希望查看您的语言的 CSV 解析器的细节,以便更彻底地理解“CSV”的确切含义。

如果您的 CSV 文件来自机器导出,请查看该系统的文档以了解它是如何导出 CSV 的。例如,Excel、MySQL、PostgreSQL 等都在如何格式化 CSV 文件方面做出不同的决定。您正在使用的另一个专有或遗留系统可能会做出不同的决策。看看你正在使用的系统是否记录了它的 CSV 格式。在某些情况下,可能不会。

注意数据类型。CSV 是非类型化的,不同的系统可能有不同的方式来区分整数(1)和字符串(例如,邮政编码,01234)。确保您的系统不会将字符串 id(可以从零开始)转换成整数。请注意不同系统处理 NULL 值的方式之间的差异,以及 NULL 和空字符串之间的差异,空字符串在 CSV 文件中可能是相同的值,也可能不是相同的值。

如果您决定使用除 CSV 之外的任何其他开放格式,您可能希望考虑使用该格式而不是 CSV。

有时问题可以通过使用像 XSV 这样的工具来解决,使 CSV 中的所有字段都被引用,或者改变分隔符以便系统可以正确解析它。

如果您继续努力将您的 CSV 加载到某个系统中,而该系统可以加载另一种格式,如 JSON,那么可以尝试在加载之前将您的 CSV 转换为 JSON。JSON 是正式指定的,可能会导致较少的问题。

最终注释

在命令行查看Data Science以更全面地了解如何通过命令行处理数据,而不仅仅是 CSV 文件。

CSV 可能会令人沮丧,但请注意,你并不孤单,其他人可能也遇到了类似的问题。如果遇到问题,可以自由使用 Google 和 StackOverflow。CSV 的存在是有充分理由的——它简单、轻量级、可读,但是它表面上的简单隐藏了许多常见问题。当这些问题发生时,做好处理它们的准备。

链接和参考

原载于https://www.cloudbakers.com**

深入 Python 编程所需的一切

原文:https://towardsdatascience.com/everything-you-need-to-get-started-with-python-programming-4a37a46e427b?source=collection_archive---------5-----------------------

你很可能已经被覆盖了

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

来自 Pexelscottonbro 摄影

A 你准备好用 Python 编程了吗?对于一个初学者来说,跳入水中可能会很害怕,但是相信我,你只需要一条游泳裤就可以了。而我说的泳裤,是指一些基本的硬件和软件。

一个常见的问题是“Python 编程应该买哪台笔记本电脑?”好消息是 Python 不需要太多。在本文中,我将介绍一些基本知识来帮助您进行设置。

穿上裤子,让我们开始您的 Python 之旅。

  • 硬件 —您的需求以及台式机和笔记本电脑的区别
  • 软件 —选择适合您的操作系统
  • 在手机上编程? —是啊,毕竟是 2020 年了
  • 文本编辑器IDE s
  • 在线 —使用在线编码环境

免责声明:本文中没有附属链接。

五金器具

我很想说任何机器都可以。如果你买了一个不到 5-10 年的带有现代操作系统的,它很可能会运行。我不是说这将是一个平稳的经历,但它会工作。您需要什么样的硬件取决于您打算编写什么样的代码。

说到硬件,你要么看台式电脑,要么看笔记本电脑。(除非你想在手机上开发。稍后将详细介绍)您的选择基于多种需求。这往往归结于功率与便携性。

桌面

Python 代码只是文本,所以代码本身非常简单。在决定购买什么样的硬件时,您还需要考虑其他因素。由于 CPU、RAM 和 GPU 不是那么重要,我将从您将与之交互的其他部分开始。

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

照片由乔希·索伦森派克斯拍摄

屏幕:

你的主要工具之一是你的屏幕。屏幕分辨率越高,可以显示的代码就越多。在高分辨率屏幕上,文本可能会显得很小,会让您的眼睛感到紧张,因此,请调整设置,以获得您可以使用几个小时的最佳设置。

对于您的桌面,您希望找到一个可以旋转 90 度的屏幕,这样您就可以显示更多行代码。4k 分辨率的屏幕现在越来越便宜,所以如果你负担得起,我建议你看看 27 英寸及以上支持 4k 的屏幕。如果你正在寻找一个预算屏幕,跳过 4k 选项,选择一个适合你桌子的。你可以在更小的屏幕上编码,但是我会在我的预算范围内得到最大的屏幕。

如果你发现自己经常在软件之间切换,你应该考虑超宽选项。有了这些显示器,您可以让您的应用程序并排排列。在 38 英寸超宽屏幕上工作了几年后,我发现很难回到双显示器设置。

键盘

你在键盘上打字的时间和看屏幕的时间差不多。毕竟你是代码。对你有用的键盘,对另一个人来说可能是最糟糕的。选择合适的键盘是个人的事,只要记住你会用上几个小时,所以使用起来舒服很重要。

我过去用过各种键盘,最近扔掉了我定制的 WASD 键盘,换上了一个苹果魔法键盘

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

上图:WASD 键盘,下图:苹果魔法键盘。两种截然不同的体验。作者图片

WASD 键盘有机械键(这是许多程序员的首选),移动距离很好。这是一个沉重的设备,使它显得坚实。对我来说,高度让我分心,因为长时间打字会让我的手腕疼痛。你可以通过获得手腕支撑来避免这一点,但超扁平的苹果 Magic keyboard 对我来说更舒适。苹果魔键的行程更短,但键盘的手感非常舒适,我可以输入几天。

在你下定决心之前,你应该试着弹奏几次键盘。如果每天工作 10 个小时后感觉良好,你可能已经找到了你的打字伴侣。如果你住的地方有很好的退货选择,试一试,如果不适合你的手指,就把它送回去。

如果一个普通的平面键盘会疼,你可以寻找键盘分离和倾斜的选项。我姐夫最近向我介绍了 ergo DOX EZ T1 键盘,这看起来是一个非常有趣的选择。

我建议你买一个美式布局的键盘。这种布局非常适合编写代码。我是挪威人,但是因为这个原因,我所有的键盘都是美式布局。如果你需要你的母语字母,你可以在软件中切换语言。我看着你“啊,啊,啊”。

你可能不会经常使用数字小键盘。在这种情况下,你可以看看紧凑型键盘。一些制造商创造了他们键盘的紧凑版本。确保他们没有把箭头键放在奇怪的位置。

老鼠

很容易说你用什么鼠标都没关系,因为毕竟你不会经常用你的鼠标。即使打字是你的主要活动,你也会浏览网页(主要是 StackOverflow)和用鼠标做很多其他的操作。当谈到偏好时,这就像键盘一样个人化,但是要确保你得到的鼠标不会伤到你的手。你的手是你的工具,好好保管它!

虽然我很喜欢苹果的神奇键盘,但神奇鼠标并没有那么棒。在我看来,苹果从来就不擅长鼠标,而苹果神奇鼠标的人机工程学外形非常糟糕。我最近使用它的唯一原因是因为它上面集成了触控板。它非常适合浏览,但当我需要做一些更繁重的工作时,我旁边有一个 Steelseries Kana,因为握起来更舒服。

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

苹果魔术鼠标与支持钢系列假名。作者图片

购买鼠标时,您应该考虑外形因素。使用普通键盘已经让你的手腕扭曲到不自然的位置。你可以考虑用一个稍微垂直的鼠标来减轻你手腕的压力。罗技 MX Master 3 目前是一个受欢迎的选择,并略有倾斜。我目前有这个订单,并希望它像所有评论说的那样好。如果效果更好的话,你可以得到全垂直布局或操纵杆布局的鼠标。

CPU 和内存

关于 CPU 就不多说了,因为大多数 CPU 都会运行 Python。一个更强的 CPU 总是比一个弱的更快,所以购买你能负担得起的 CPU。Python 已经是慢语言了。没有必要用一个糟糕的 CPU 使它更慢。

注意 Python 也是单线程的。

来自 Python 文档:

在 CPython 中,由于全局解释器锁,一次只有一个线程可以执行 Python 代码(尽管某些面向性能的库可能会克服这个限制)。如果你想让你的应用更好的利用多核机器的计算资源,建议你使用[multiprocessing](https://docs.python.org/3.8/library/multiprocessing.html#module-multiprocessing)或者[concurrent.futures.ProcessPoolExecutor](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor)。但是,如果您想要同时运行多个 I/O 绑定的任务,线程仍然是一个合适的模型。

如果你发现自己在进行繁重的计算,你可能需要更多的内存,但是对于大多数任务,你不需要太多。有些任务需要在处理时将结果存储在内存中,但是对于大多数任务来说,使用少量 RAM 应该没问题。

请记住,像浏览器和 IDE 这样的应用程序将会使用大量的 RAM,所以如果您的预算不紧张,一般来说就使用更多的 RAM。4GB 可能可以,但这是最低端的容量,您会看到大部分容量可能会在一天中使用。今天,大多数桌面都配备了 8GB-64GB 的 RAM——这对于 Python 来说当然没有问题。

国家政治保卫局。参见 OGPU

你可能已经猜到了,Python 也不是 GPU 的重地。几乎任何显卡都可以。你可以考虑的一件事是,你可以使用 GPU 进行机器学习,所以如果你打算走这条路,你可以投资一个更好的显卡,只是为了做好准备。

硬盘驱动器

Python 代码只是文本,如果你看看你的 python 程序,你会发现我们谈论的是 kB 而不是 MB。这意味着代码本身不需要太多的硬盘空间。另一方面,您用代码创建的数据可能需要空间,所以这是您必须添加到等式中的内容。另一个会消耗硬盘空间的是你的操作系统和其他安装的软件。

有两种硬盘:固态硬盘 SSD 和硬盘 HDD。固态硬盘比硬盘快得多,所以一般来说,你会喜欢使用固态硬盘。与硬盘相比,它们的价格很高,所以还是要看预算。您可以考虑将 SSD 用于您的操作系统,将 HDD 用作第二个硬盘,以最大化大小。

我们在云中存储越来越多的内容,大多数情况下你的代码会被上传到 Github。这意味着对硬盘的需求不像 10-20 年前那么重要了。我用 iCloud 储存大部分工作文件。它既可以作为备份,也很容易在设备之间同步文件。

网络摄像机

我猜你没想到会这样。当你购买一台笔记本电脑时,一个网络摄像头几乎总是包含在屏幕框中。当你买台式机时,你必须单独购买(除非你买 iMac 或类似的产品)。如果你从初级爱好者变成初级开发人员,你很可能会看到自己与团队进行数字会议。你不想成为那个没有相机的人。作为奖励,它迫使你保持房间整洁。

笔记本电脑

好了,说到便携小兄弟。

你总是可以带额外的设备,比如键盘和鼠标,但是让我们来关注是什么让笔记本电脑成为笔记本电脑。我们在这里看到的例子有点贵,但请记住,你可以用二手笔记本电脑,我也会告诉你一个秘密。你可以带着你能找到的最便宜的笔记本电脑离开。关键是在线编码环境。

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

来自 Pexelscottonbro 摄影

屏幕

你将整天看着你的屏幕。11 英寸或 13 英寸会给你带来很大的便携性,但 15 英寸- 17 英寸会给你更多的空间。配备 retina 显示屏(3072×1920)的 Macbook Pro 16 英寸 2019 型号的尺寸与旧的 15 英寸相同。戴尔 XPS、联想 X1 Carbon 和 Razer Blade 都拥有 3840 x 2160 的出色分辨率。使用更大的屏幕,你可以获得更好的分辨率,但是你放弃了一些便携性。在我看来,它们是如此轻,无论如何,这是一个明显的优势去有点大。

根据 Just Josh 的说法,与他的 Surface Book 2 15 英寸和 Aero 17 英寸笔记本电脑相比,他可以在 Macbook Pro 16 英寸上查看多 30%的代码行。它们都具有相同的 8.5 英寸垂直屏幕高度。

键盘

如果你想买 MacBook Pro,你必须知道在 2015 年至 2019 年期间,苹果公司为它们配备了蝴蝶键盘。这种键盘因故障而臭名昭著,键程几乎不存在。2019 年,他们开始发运配备新苹果魔法键盘的型号,这些是打字的乐趣。它们不是机械的,但感觉就像独立版的魔法键盘。如果你买了一台蝴蝶键盘的 MacBook,苹果有一个保修计划,如果你有问题,你可以换一台。

不管你喜不喜欢,苹果的产品都有触控条而不是 F 键。我喜欢这一点,因为它提供了很大的灵活性,但也有很多人讨厌它们。如果您依赖功能键,请确保尝试 touch bar 来下定决心。

一些游戏笔记本电脑已经开始包括机械键盘,所以如果你正在寻找那种触感,你也可以在旅途中得到它。

当心!拿到笔记本电脑需要注意的一点是,厂商需要做一些妥协,让这些机器变得轻薄小巧。你必须检查键盘的布局。在 MacBook Pros 的最新阵容中,ESC 键以其物理形式回归。对程序员来说是个好消息。Razer Blade 有一个荒谬的箭头键位置,但看起来他们在最新的阵容中改变了这一点。确保你做了一些研究,这样你就不会讨厌每一次按键。

轨迹板

一些制造商还不如包括触控板。以我的经验来看,没有人能与 MacBook 触控板相媲美。也许是 Razer,但我自己没有试过,只听同事说它很棒。如果你不想带鼠标,确保你对触控板满意。

如果触控板很糟糕,你可能会更好地使用键盘导航。至少不是完全的损失。

软件

希望你现在已经拿到了一台机器。但是软件呢。你需要软件来运行代码,对吗?根据您正在编程的内容,您可以对您的编程机器进行最小的设置。

我们首先要看的是操作系统。

操作系统

要开始编程,你需要一个操作系统(OS)。Python 是跨平台的,可以在 Windows、macOS 和 Linux 上工作。选择操作系统主要是个人喜好的问题。

根据 Stack Overflow 的 2020 年调查,45.8%使用 Windows 开发,27.5%在 macOS 上工作,26.6%在 Linux 上工作。

Windows 操作系统

你可能对视窗很熟悉,因为它们在全世界被广泛使用。Windows 的最新版本是 Windows 10。一般来说,你应该使用最新版本的操作系统,但如果你有一台旧机器或其他软件需要它,你可能会被困在 Windows 7 或更旧的版本。这两个你都应该没问题,但是要注意如果你想用 Python 3.5 或者更高版本的话, Windows XP 是不支持的

如果您使用 Windows,有一些 shell 选项适合您。Windows 自带命令行,也有 Powershell。Powershell 感觉更像是一个普通的终端,你可以从 Linux 或者 Mac 世界中了解到。

更好的新来者是 Windows 终端。这款高度可定制的终端非常好用。

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

运行中的新 Windows 终端。作者图片

在过去,人们对某些库在 Windows 上不被支持有疑问。您可能不知道将来会使用什么库,但是如果您最终在安装任何库时遇到问题,这可能就是原因。

Windows 许可证通常与您购买的机器捆绑在一起。如果不是,你看到的费用在 139-309 美元之间。

马科斯

Mac 和 Linux 都属于 UNIX 家族。你可以把它们看作两个不同的分支。这两种操作系统的开发感觉是相似的。

Mac 有一个开箱即用的内置终端。如果您喜欢更大的灵活性,您可以安装各种版本,比如 iTerm,但是原始版本可以完美地完成它的工作。Python 预装在 macOS 中,但请确保检查版本,以便保持最新。

大多数文本编辑器和 ide 都在 macOS 上工作。

macOS 和 Windows 一样,不是开源的,但它是机器自带的。macOS 只能在 Mac 上运行(官方),所以你只能依赖苹果的硬件。

Linux 操作系统

Linux 并不是真正的操作系统,它是一个内核。你所认为的操作系统是发行版。使用 Linux 的一个好处是这些发行版是轻量级的,并且是高度可定制的。你可以货比三家,找到最适合你的。一些流行的发行版有 Ubuntu、Mint、Fedora 和 CentOS。

Linux 非常适合开发。它还带有一个终端,许多文本编辑器和 ide 都在 Linux 上工作。Linux 是开源的,所以它是一个预算友好的选择。

计算机编程语言

当然,你需要 Python。前往 python.org,下载安装程序,并运行它。如果您在终端中编写“python3”(如果您下载了 python3 版本),您应该看到它执行并打印您运行的 python 版本。

文本编辑器和 ide

有很多文本编辑器,但是请不要成为那个说你可以在记事本中写代码的人。至少知道如何通过说“哦,我指的是 Notepad++”来拯救自己,以防你受到邪恶的盯视…

你在文本编辑器中寻找的一些东西是:

  • 语法突出显示。Python 是一种流行的语言,所以大多数文本编辑器都将它作为标准或可下载的扩展。
  • 代码预测。如果你已经创建了一个名为ninja_turtles的变量,在你开始输入 ninj 之后,编辑器会预测你的变量名,这很好……让软件在你输入的时候寻找模块可以用于快速编码和学习。
  • 制表符缩进。大多数编辑器允许你选择你想要在一个标签中有多少空格。Python 的 PEP8(圣经)指出你应该使用 4 个空格。Python 3 甚至不允许混合制表符和空格。

我们只看精选的几个。确保你浏览网页寻找你最喜欢的。

原子

Atom 是一个轻量级的文本编辑器,可以在所有操作系统上运行。它是高度可定制的,有主题和 CSS/Less 定制。包管理器、文件系统浏览器、git 集成,以及最后但同样重要的“Teletype ”,它让您可以实时地对同一代码进行协作,这是文本编辑器的最佳选择。

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

感觉大胆运行一个轻的主题。左边是浏览器,中间是代码,右边是设置。使用安装的社区制作的脚本在底层执行代码。作者图片

托尼

Thonny 是一个极简的 IDE,非常适合初学者。借助强大的调试器,您可以确保理解您的代码。我过去从未使用过 Thonny,但很快就喜欢上了这个工具。

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

Thonny 及其出色的调试器。作者图片

崇高

崇高出现在游戏中已经有一段时间了,被很多人使用。它有一些漂亮的特性,比如允许你一次重命名多个变量的“多重选择”和定制。

朱皮特

Jupyter 是一个开源的 web 应用程序,允许你创建和共享包含实时代码、等式、可视化和叙述性文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。

你可能以前见过使用 Jupyter的漂亮的图形数据展示。可以安装 Jupyter 笔记本,也可以使用浏览器版本。如果你想处理数据,Jupyter 是你的工具。

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

Jupyter 进行中。作者图片

Visual Studio IDE

由微软开发,受到许多人的喜爱。这个广泛的工具允许你写代码,调试,安装库,使用 Git 进行源代码控制和单元测试你的代码。

要找到适合你的版本,去他们的比较页面看看,并确保你看了他们的 python 特定页面

在手机上编程

给你一个小惊喜。你可能没有意识到,你信任的旧手机可以用来实现伟大的事情。我必须承认,我从来没有在我的手机上做过任何适当的编码(只有当我在度假时迫切需要时),但从我在网上看到的情况来看,有几个应用程序可以完成这项工作。

ios

Pythonista 是一款流行的软件,是一款面向手机开发的完整 IDE。

Koder 是另一种选择。这是一个代码编辑器,不是一个完整的 IDE,但它有语法高亮显示和对 Dropbox 等云服务的支持。

Buffer Editor 看起来圆滑简约。它支持 Git 和 Dropbox。

机器人

Pydroid 遍布脸书的 Python 团体,有了 pip 支持、GUI 支持,比如 PyQT、离线解释器、语法高亮和代码预测,它成为流行的选择并不奇怪。

在线编程

如果你喜欢最大的可移植性,你可以考虑使用在线编辑器。你可能会在安装库或类似的东西时遇到一些困难,但是你也可以在网上完成很多工作。去年,我在大学为我们的 python 课程使用了 6 个月的在线编辑器。用浏览器登录任何一台电脑的好处都是很大的。

这里是一些你可以尝试的概述。记住,总有比我发现的更多的选择,所以一定要做一些研究。也许你会找到另一个你喜欢的服务。

回复它

它拥有多种语言,其中包括 python。您可以与其他程序员合作,连接到您的 Git 存储库,并且它有插件支持。免费版将带你走得更远,还有团队定价选项。

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

repl.it 运行“生命的游戏”。作者图片

Pythonanywhere

顾名思义, pythonanywhere 让你无论身在何处都可以编码。这项服务是 python 独有的,在免费版本中你可以同时运行两个控制台。

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

pythonanywhere 玩 Yahtzee。作者图片

编程

Programiz 有一个简单易用的在线编辑器。据我所知,它只是一个供你测试代码的编辑器,而不是你存储文件的环境。如果我错了,请纠正我。

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

运行非常著名的“Hello World”程序。作者图片

最后

我希望 Python 入门看起来不再可怕,如果它更早的话。如你所见,开始学习 Python 并不需要太多。如果你有浏览器,你可以开始学习。当你对 Python 有了更多的了解,并意识到这是你喜欢做的事情时,你可以考虑升级。当你这样做的时候,你仍然不需要太多的继续。这就是这种轻量级编程语言的美妙之处。

当然,买你买得起的。你必须时刻考虑你采购的东西是否需要,但是硬件永远不可能太好

我希望你会喜欢这个奇妙的旅程,现在我们已经讨论了各种替代方案,有些选择是明确的。

M

关于相关性你需要知道的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-correlation-3ef78f22fcad?source=collection_archive---------14-----------------------

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

上海崇明岛上的一群白鹭

皮尔森、斯皮尔曼、肯德尔*、B* iserial、Tetrachoric 等等

相关性是几乎所有部门都使用的最基本的统计概念之一。

例如,在投资组合管理中,相关性经常被用来衡量投资组合中包含的资产的多样化程度。选择彼此相关性低或负相关的资产有助于降低投资组合的风险。此外,在营销研究中,相关性提供了关于营销策略和业务成果的见解,这进一步帮助营销人员做出可操作的决策,并最终发展业务。

简而言之,当一组变量中的测量值与另一组变量中的测量值以一种并非偶然的方式相关时,我们使用相关性来以定量的方式陈述两组变量之间关系的强度和方向**。**

或许,你可能和我有相似的经历,纠结于许多不同类型的相关性(例如皮尔森、斯皮尔曼、肯德尔、比瑟里尔、四分位数等等)。有什么区别?我们应该使用哪一个?我们如何在 Python 中计算它们?

在本帖中,我将与你分享我回答这些问题的笔记。像往常一样,我提供一个笔记本给你练习,可以从 my Github 访问。

几个关键术语

在我们深入研究相关性之前,如果能列出一些关键术语并放在手边就更好了。

1。标准差:它是一组值的变化量或离差的度量(它只是方差σ 的平方根)。

  • ****总体标准差: N 为总体大小,为总体均值。

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

  • ****样本标准差: n 为样本大小, 为样本均值。

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

2。协方差:它是两个变量从它们的平均值前后变化的程度的度量。

  • ****人口协方差: N 为人口规模,为人口均值。

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

  • ****样本协方差: n 为样本大小, x̅/y̅ 为样本均值。

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

****3。参数检验:它假设数据中潜在的统计分布。必须满足有效性条件,以便参数测试的结果是可靠的。

****4。非参数检验:它不依赖于任何分布,因此可以在有效性的参数条件不满足时应用。

****5。效应大小/强度:相关系数在. 10 到. 29 之间代表小关联,系数在. 30 到. 49 之间代表中等关联,系数在. 50 及以上代表大关联或关系。

6。分类变量:又称离散变量或定性变量。分类变量可进一步分为名义变量,二分变量或序数变量。****

  • 名义变量是指有两个或两个以上类别,但没有内在顺序的变量。例如,财产类型(房屋、单元和公寓)、公司名称、宗教、颜色偏好和邮政编码。
  • 二分变量是名义变量,但只有两个类别或级别。比如性别(男女),是/否问题,电信流失数据(流失或停留)。
  • 序数变量是和名义变量一样有两个或两个以上类别的变量,但也可以排序或排名。例如,汽车尺寸(超小型、紧凑型、中型、豪华型)、经济地位(下层、中层或上层)、排名 5 种啤酒、满意度(非常不满意、有些不满意、有些不满意、不满意)。

7。连续变量:又称数量变量。这种类型的数据具有相邻单元之间的有序和等间隔的性质。连续变量可进一步分类为区间比率变量。****

  • ****区间变量:可以沿连续统测量的,有数值的数据。例如,温度、出生年份、满意度(分值单位,1-10)和鞋码。
  • 比率变量:它们是区间变量,但是有明确的定义 0,表示没有该变量。比如收入,价格,距离,一个家庭的孩子数,开车时间,剂量等等。

“比率”这个名称反映了这样一个事实,即可以对比率变量的值执行乘法和除法运算。因此,我们可以说 15 美元的价格比 5 美元的价格贵三倍。然而,10°C 的温度不应被视为 5°C 的两倍。它仅高出 5°C(即,只能对区间变量的值应用加法和减法运算)。

这里有一个取自 GraphPad 的图表(图 1)可以帮助你理解这些不同的变量

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

图 1 | 可变刻度

****8。单调关系:在单调关系中,两个变量趋向于以下之一:(1)随着一个变量的值增加,另一个变量的值也增加;或者(2)随着一个变量值的增加,另一个变量值减少。,但不一定以恒定的速率(图 2)。

****9。线性关系:线性关系中,两个变量的作用与单调关系相同,但速率不变。趋势可以用直线来模拟。线性关系都是单调的,但不是所有的单调关系都是线性的。

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

图 2 |单调关系的图示

****10。并列等级:在计算 Spearman 相关系数时,这是一列中具有相同等级的两个项目。

****11。一致/不一致:描述两个样本的排序是否相同(图 3)。

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

图 3 |和谐与不和谐的定义

理解c或关系的强度、方向和意义

两个变量之间的相关性用一个数字相关系数来量化,通常在 1 到+1 之间变化。零表示没有相关性,1 表示完全或完美的相关性。相关强度从 0 增加到+1,从 0 增加到 1。符号表示相关的方向。负相关意味着这两个变量是反向相关的。

一般来说,除了相关性的强弱,我们还需要报告其统计显著性,即 p 值。p 值表示这种相关强度可能偶然出现的概率。统计上显著的相关性不一定意味着相关性的强度很强。

比如两个相关系数 0.32 ( p < 0.01 )和 0.93 ( p < 0.05 )。即使 0.32 的相关性具有更显著的水平( p < 0.01 ),与 0.93 的相关性相比,它仍然是较弱的相关性。 p < 0.01 仅确保 99%的时间相关性为 0.32。

皮尔逊相关(参数检验)

皮尔逊相关系数(皮尔逊积差相关系数)是线性相关变量之间关系程度的最广泛使用的统计度量。用字母 r 表示。

Pearson 的 r 是通过将这两个变量的协方差除以它们的标准差的乘积来计算的。

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

其计算要求以下数据假设有效:

  • 区间比率变量****
  • 线性相关

在实践中,第二个假设是通过用测试的两个变量制作散点图来直观检查的(图 4)。

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

图 4 |用于目视检查的散点图

“皮尔逊 r 并没有假设正态性。许多人认为,为了证明 r 的计算是正确的,这两个变量必须是正态分布的。但许多人也认为,他们在喝酒后可以更好地驾驶。”

艾伯特·库尔茨和塞缪尔·梅奥

皮尔森 r 本身并不假设正态性!实际上,我们仍然需要检查二元正态性的原因是为了满足显著性统计检验的假设。

Python 中有几种不同的检验正态性的方法,包括直方图(**pyplot.hist**()),正态 Q-Q 图 ( [**statsmodels.qqplot**()](https://www.statsmodels.org/stable/generated/statsmodels.graphics.gofplots.qqplot.html)),夏皮罗-维尔克检验(**scipy.stats.shapiro**()),达戈斯蒂诺检验(**scipy.stats.normaltest**(),安德森-达令检验(**scipy.stats.anderson**())。

我们需要注意的另一件事是,正如其公式中的标准差所表明的那样,皮尔逊相关系数自然对偏斜分布和异常值敏感。

如果我们的数据满足上述假设和先决条件,我们可以通过调用**scipy.stats.pearsonr**(*x***,** *y*)在 Python 中轻松计算 Pearson 的 r,这将返回 Pearson 相关系数和p-值。或者我们可以使用**pandas.dataframe.corr**(method=’pearson’)来寻找数据帧中所有列的成对相关性。**

斯皮尔曼相关(非参数检验)

在大多数情况下,如果我们的数据满足所有要求,Pearson 的 r 是关系的最佳度量,应该使用。然而,并不是一切都能如人所愿。幸运的是,当我们得到不理想的数据时,仍然有几个选项使我们能够得到相关系数。

Spearman 秩相关系数通常表示为 ρ (rho)或 r s ,是 Pearson 相关系数的非参数版本。对于单调关系,可以处理序数、区间或比率变量。

顾名思义,斯皮尔曼的 ρ 依赖于给定的两个变量的秩而不是它们的值。其简单形式公式如下:

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

其中 n 为样本大小, di 样本的秩差。请看图 5 中的一个例子,计算距离机场的距离和瓶装水的价格之间的相关性,我相信这将有助于你立即理解公式。

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

图 5 | Spearman 等级相关系数的计算

正如我们从图 5 中看到的,Spearman 相关性对强异常值的敏感度低于 Pearson 相关性,因为 Spearman 的 ρ 将异常值限制在其等级值内。

另一件应该注意的事情是并列的等级(图 5 中的商店#2 和#4)。当这种情况发生时,我们可以取他们本来会占据的等级的平均值。当联系数相对于 n 较小(1 或 2)时,仍然可以使用简单形式的公式。

否则,我们需要使用 Spearman 公式的完整版本,它将处理并列的等级:

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

其中 ui 是第一个样本中第个观测值的秩,第 vi 是第二个样本中第个观测值的秩。****

在 Python 中,我们可以调用**scipy.stats.spearmanr**(),它返回我们两个值 ρp- 。或者我们可以使用**pandas.dataframe.corr**(method=’spearman’)来查找数据帧中所有列的成对相关性。

肯德尔相关性(非参数检验)

一般来说,当样本量很小且有很多并列秩时,肯德尔相关常表示为τ(Tau)(Tau 有三个版本,即 Tau-a、Tau-b、Tau-c ,是 Spearman 相关的最佳替代。******

肯德尔相关性要求与斯皮尔曼相关性相同的数据假设,即 1)序数、区间或比率变量和 2) 两个变量之间的单调关系

这里只介绍 Tau-b(这是**scipy.stats.kendalltau**(x, y)中使用的方法),定义为:

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

其中𝑁𝑐和𝑁𝑑分别表示样本中一致对的数量和不一致对的数量。𝑇𝑥表示仅与第一个响应变量相关的配对数量,𝑇𝑦表示仅与第二个变量相关的配对数量。如果同一对在 xy 中出现平局,则不会添加到𝑇𝑥或𝑇𝑦.****

在 Python 中,我们可以调用**scipy.stats.kendalltau**(x, y),它返回给我们 Taup- 值。或者我们可以使用**pandas.dataframe.corr**(method=’kendall’)来查找数据帧中所有列的成对相关性。

总的来说,关于数据中异常值和差异的容忍度,Kendall 相关性是最稳健的度量,其次是 Spearman 相关性,而 Pearson 相关性是最敏感的。

点双列相关

当我们需要将一个连续变量与另一个二分变量相关时,我们可以使用点双列相关。****

**点双列的相关性通常用符号 rpb 表示,计算如下:

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

其中 𝑀1 是变量 y 的第 1 组中所有数据点在连续变量 x 上的平均值, 𝑀0 是变量 y 的第 2 组中所有数据点在连续变量 x 上的平均值, 𝑛1 是第 1 组中的数据点数, 𝑛0 是第 2 组中的数据点数,𝑛是总样本量。

在 Python 中,这可以通过调用**scipy.stats.pointbiserialr(***x***,** *y***)**来计算,它再次返回给我们一个点双列相关系数和它的p-值。**

我们应该注意到有一个 双列的相关 ,它也是一个连续变量与另一个二分变量的相关系数。但是,这里的二分变量应该是基本连续且正态分布的。****

换句话说,这种类型的二分变量,在现实中是连续的,正态分布的,但只记录了两类。因此可称为连续二分法。****

分类二分法相比,连续二分法可以被认为是一个正态分布的连续变量,它被人为地分为两类。例如,通过使用某个阈值,测试分数可以分为通过和失败。销售可以分为不好的和好的等等。****

然而,你可能会问,为什么我要通过把连续变量转换成二分变量来丢失信息呢?说实话,我也不知道。也许统计学家只是喜欢发明公式。无论如何,在这种情况下,我只是使用皮尔逊相关性。****

四分相关

当我们希望将两个二分变量相互关联时,Tetrachoric 相关性旨在估计 Pearson r 。实际上,这些变量中的每一个都可能是连续的和正态分布的,但只记录在两个类别中。

正如它的定义所显示的,Tetrachoric 关联的适用性并不十分普遍。本质上,它根本不适用于分类变量。对于这样的情况,我们要用φ的关联 ( φ, AKA。马修斯相关系数(MCC)) 改为

在 python 中,我们可以使用**sklearn.metrics.matthews_corrcoef()**得到 φ

最后,我们应该注意到,还有更多用于相关性计算的技术,本文没有涉及。我们一定要根据我们的数据和目的来选择合适的方法。我希望你能从这篇文章中学到一些有用的东西。

感谢阅读!

以下是一些有用的链接:

和往常一样,我欢迎反馈、建设性的批评以及听到关于您的数据科学项目的信息。可以通过 Linkedin我的网站找到我。

在 3 分钟内你需要知道的关于日期格式的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-date-formatting-in-3-minutes-d7f3d53beea?source=collection_archive---------22-----------------------

每个分析师都知道。你必须合并十个文件,每个文件都有不同的日期格式。我将向您展示如何转换日期以便进一步处理。

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

假设您收到了十个不同的文件,您的工作是匹配这些数据以获得新的见解。不管您是通过 csv 还是 api 获得数据,您至少会收到五种不同的日期格式。这可能具有挑战性。Python 的 datetime 提供了一些非常有趣的函数来处理这类问题。

[In]
import datetime
now = datetime.datetime.now()
now
[Out]
datetime.datetime(2020, 1, 30, 21, 4, 11, 887948)

变量现在包含年、月、日和当前时间。在许多情况下,获得年、月和日就足够了。日期时间对象的每一部分都可以单独访问。

[In]
print(now.year)
print(now.month)
print(now.day)
[Out]
2020
1
30

但是它如何帮助转换数据呢? Datetime 对象提供了函数 strftime ,使得在 Python 中处理日期变得如此简单。

[In]
now.strftime('%Y-%m-%d')
[Out]
'2020-01-30'

表达式 %Y 是一个已定义的指令,它从日期时间对象中提取年份。这同样适用于其他对象。有趣的是,您可以以任何想要的方式格式化结果字符串。在本例中,我们在年、月和日之间添加了“ - ”。我们还可以添加任何其他字符:

[In]
now.strftime('%Y/%m/%d')
[Out]
'2020/01/30'

通常,您会收到一个需要首先转换的字符串:

delivered_date = 'Sep, 26 2019'

您可以使用 strptime 将我们的变量 delivered_date 转换为 datetime 对象:

[In]
datetime.datetime.strptime(delivered_date, '%b, %d %Y')
[Out]
datetime.datetime(2019, 9, 26, 0, 0)

strptime 需要两个参数。第一个是字符串,第二个是给定表达式的结构。在这种情况下,我们有一个月的短版本,带有一个逗号 %b,,后面是日期 %x 和年份 %Y

让我们看一下标题图片中的例子。我们总是希望格式 YYYY-MM-DD 最后:

我们从 2020 年 1 月 1 日开始

[In]
date_1 = 'Jan, 01 2020'
datetime.datetime.strptime(date_1, '%b, %d %Y').strftime('%Y-%m-%d')[Out]
'2020-01-01'

2020 年 1 月 1 日

[In]
date_2 = '2020 Jan 01'
datetime.datetime.strptime(date_3, '%Y %b %d').strftime('%Y-%m-%d)[Out]
'2020-01-20'

20/01/20

[In]
date_3 = '20/01/20'
datetime.datetime.strptime(date_4, '%y/%m/%d').strftime('%Y-%m-%d')[Out]
'2020-01-20'

2020 年 1 月 20 日

[In]
date_4 = '20.01.2020'
datetime.datetime.strptime(date_4, '%d.%m.%Y').strftime('%Y-%m-%d')
[Out]
'2020-01-20'
  1. 2020 年 1 月
[In]
date_5 = '1\. January 2020'
datetime.datetime.strptime(date_6, '%d. %B %Y').strftime('%Y-%m-%d')
[Out]
'2020-01-20'

结论

Python 的 datetime 提供了一个非常简单的框架来处理日期格式。格式化数据以便进一步处理也非常有用。例如,无论是 Excel 还是 CSV 文件都没关系。所有格式都可以转换。我希望你喜欢阅读,并且可以带走一些有用的东西。

如果您喜欢中级数据科学,并且还没有注册,请随时使用我的推荐链接加入社区。

关于熊猫的“loc”和“iloc”你需要知道的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-loc-and-iloc-of-pandas-79b386cac776?source=collection_archive---------25-----------------------

明确区分 loc 和 iloc

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

Javier Allegue Barros 在 Unsplash 上拍摄的照片

Pandas 是使用最广泛的数据分析和操作库,它提供了许多灵活方便的功能,可以简化和加快数据分析过程。在这篇文章中,我将介绍两个重要的工具,它们用于根据指定的行和列从数据帧中选择数据。让我们先介绍它们,并通过不同种类的例子来建立一个全面的理解。

  • 位置:按行和列的标签选择
  • iloc:按行和列的位置选择

随着我们对例子的研究,这种区别变得很明显。一如既往,我们从进口熊猫开始。

import pandas as pd
import numpy as np

我们将在 kaggle 上的电信客户流失数据集上做例子。让我们将数据集读入熊猫数据帧。

df = pd.read_csv("Projects/churn_prediction/Telco-Customer-Churn.csv")

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

数据集包括 21 列,但我们只能看到适合屏幕的列。

loc 用于通过标签选择数据。列的标签是列名。例如,customerID、gender、SeniorCitizen 是前三个列名(即标签)。我们需要小心行标签。由于我们没有分配任何特定的索引,pandas 默认创建整数索引。因此,行标签是从 0 开始向上的整数。与 iloc 一起使用的行位置也是从 0 开始的整数。我们将通过例子来看熊猫如何用 loc 和 iloc 不同地处理行。

  • 选择行“2”和列“性别”

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

它返回行“2”的“性别”列中的值

  • 选择最多“5”的行标签以及“性别”和“伴侣”列

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

  • 选择行标签“2”、“4”、“5”和“InternetService”列

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

我们还可以过滤数据帧,然后应用 loc 或 iloc

  • 选择带有合作伙伴的客户的行标签“10”、“InternetService”和“PhoneService”列(Partner == 'Yes ')

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

我们过滤数据帧,但不改变索引。因此,所得数据帧的索引仅包含未被省略的行的标签。因此,当使用 loc[:10]时,我们可以选择标签达到“10”的行。o 另一方面,如果我们在应用过滤器后使用 iloc[:10],我们会得到 10 行,因为 iloc 按位置选择,而不考虑标签。

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

正如您所注意到的,我们还需要改变选择列的方式。我们还需要将列的位置传递给 iloc。

  • 选择前 5 行和前 5 列

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

  • 选择最后 5 行和最后 5 列。

这些位置从 0 开始。如果我们从末尾开始定位,我们从-1 开始,所以我们使用“-5:”来选择最后五个。

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

我们也可以应用 lambda 函数。

  • 选择第三行到第 15 行,仅显示“合作伙伴”和“互联网服务”列。

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

我们可以在两者之间选择位置或标签。

  • 选择 20 到 25 之间的行位置,4 到 6 之间的列位置。

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

如果您试图将标签传递给 iloc,Pandas 会友好地返回如下信息反馈:

**ValueError**: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types

当我们将位置传递给 loc 时,会返回类似的错误。

我希望 loc 和 iloc 之间的区别现在已经非常清楚了。要掌握知识,真正“学”,我建议大量练习。只是尝试不同的例子,你会在很短的时间内习惯它们。

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

关于最小-最大归一化,您需要知道的一切:Python 教程

原文:https://towardsdatascience.com/everything-you-need-to-know-about-min-max-normalization-in-python-b79592732b79?source=collection_archive---------2-----------------------

在这篇文章中,我解释了什么是最小-最大缩放,何时使用它,以及如何使用 scikit-learn 在 Python 中实现它,但也可以从scratch手动实现。

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

作者用 Python 创建的图。

介绍

这是我关于在机器学习(ML)模型拟合之前经常使用的标准化技术的第二篇文章。在我的第一篇文章中,我使用 scikit-learn 的StandardScaler函数介绍了标准化技术。如果您不熟悉标准化技术,只需点击这里即可在 3 分钟内学会要领。

现在的帖子中,我将使用 scikit-learn(函数名:[MinMaxScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html))解释第二个最著名的归一化方法,即 最小-最大缩放

方法的核心

另一种标准化输入特征/变量的方法是最小-最大缩放器(除了标准化缩放特征使其具有μ=0σ=1)。通过这样做,所有特征将被转换到范围****【0,1】中,这意味着特征 / 变量最小值最大值将分别为 01

如果你想在交互式路线图和活跃的学习社区的支持下自学数据科学,看看这个资源:【https://aigents.co/learn

为什么要在模型拟合之前进行归一化?

规范化/标准化背后的主要思想总是相同的。在不同的尺度下测量的变量对模型拟合 &模型学习函数的贡献不相等,可能最终产生偏差。因此,为了处理这个潜在的问题,通常在模型拟合之前使用特征标准化,例如最小最大缩放。****

这个可以 非常有用 对于一些 ML 模型像多层感知器(【MLP】),其中可以更甚至 更快**

:基于树的模型通常不依赖于缩放,但非树模型模型如 SVM、LDA 等。往往非常依赖它。

数学公式

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

最小-最大缩放的数学公式。作者创造的形象。这里,x 表示单个特征/变量向量。

Python 工作示例

这里我们将使用通过 scikit-learn 获得的著名的iris数据集。

提醒 : scikit-learn 函数期望输入一个 numpy 数组X,其维数为[samples, features/variables]

**from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
import numpy as np# use the iris dataset
X, y = load_iris(return_X_y=True)
print(X.shape)
# (150, 4) # 150 samples (rows) with 4 features/variables (columns)# build the scaler model
scaler = MinMaxScaler()# fit using the train set
scaler.fit(X)# transform the test test
X_scaled = scaler.transform(X)# Verify minimum value of all features
X_scaled.min(axis=0)
# array([0., 0., 0., 0.])# Verify maximum value of all features
X_scaled.max(axis=0)
# array([1., 1., 1., 1.])# Manually normalise without using scikit-learn
X_manual_scaled = (X — X.min(axis=0)) / (X.max(axis=0) — X.min(axis=0))# Verify manually VS scikit-learn estimation
print(np.allclose(X_scaled, X_manual_scaled))
#True**

视觉示例中的变换效果

**import matplotlib.pyplot as pltfig, axes = plt.subplots(1,2)axes[0].scatter(X[:,0], X[:,1], c=y)
axes[0].set_title("Original data")axes[1].scatter(X_scaled[:,0], X_scaled[:,1], c=y)
axes[1].set_title("MinMax scaled data")plt.show()**

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

Iris 数据集前两个特征的最小最大缩放效果。图由作者用 Python 制作。

很明显,在最小-最大缩放**(右图)之后,特性值在和**范围【0,1】。****

scikit-learn 网站的另一个可视化示例

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

最小最大缩放效果。图摘自 scikit-learn 文档:https://scikit-learn . org/stable/auto _ examples/preprocessing/plot _ all _ scaling . html

摘要

  • 使用最小最大值缩放时要记住的一件重要事情是,它受到我们数据中最大值和最小值的高度影响**,因此如果我们的数据包含异常值,它就会有偏差。**
  • MinMaxScaler重新调整数据集,使所有特征值都在范围[0,1]内。这是以独立的方式按功能完成的
  • MinMaxScaler缩放可能在一个窄的范围内压缩所有内联者**。**

如何处理异常值

  • 手动方式(不推荐):目视检查数据,并使用异常值剔除统计方法剔除异常值。
  • 推荐方法:使用[RobustScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html)来缩放特征,但在这种情况下,使用对异常值稳健的统计。该缩放器根据分位数范围范围(默认为 IQR :四分位间距)移除中值缩放数据。IQR 是第一个四分位数(第 25 个四分位数)和第三个四分位数(第 75 个四分位数)之间的范围。****

今天就到这里吧!希望你喜欢这第一个帖子!下一个故事下周开始。敬请关注&注意安全。

——我的邮件列表只需 5 秒:https://seralouk.medium.com/subscribe

-成为会员支持我:https://seralouk.medium.com/membership

最新帖子

** [## 用新冠肺炎假设的例子解释 ROC 曲线:二分类和多分类…

在这篇文章中,我清楚地解释了什么是 ROC 曲线以及如何阅读它。我用一个新冠肺炎的例子来说明我的观点,我…

towardsdatascience.com](/roc-curve-explained-using-a-covid-19-hypothetical-example-binary-multi-class-classification-bab188ea869c) [## 支持向量机(SVM)解释清楚:分类问题的 python 教程…

在这篇文章中,我解释了支持向量机的核心,为什么以及如何使用它们。此外,我还展示了如何绘制支持…

towardsdatascience.com](/support-vector-machines-svm-clearly-explained-a-python-tutorial-for-classification-problems-29c539f3ad8) [## PCA 清楚地解释了——如何、何时、为什么使用它以及特性的重要性:Python 指南

在这篇文章中,我解释了什么是 PCA,何时以及为什么使用它,以及如何使用 scikit-learn 在 Python 中实现它。还有…

towardsdatascience.com](/pca-clearly-explained-how-when-why-to-use-it-and-feature-importance-a-guide-in-python-7c274582c37e) [## Scikit-Learn 的标准定标器如何工作

在这篇文章中,我将解释为什么以及如何使用 scikit-learn 应用标准化

towardsdatascience.com](/how-and-why-to-standardize-your-data-996926c2c832)

请继续关注并支持我

如果你喜欢这篇文章并且觉得它有用,请关注我和我的故事鼓掌支持我!

资源

在这里并排查看所有 scikit-learn 规范化方法:https://sci kit-learn . org/stable/auto _ examples/preprocessing/plot _ all _ scaling . html

参考

[1]https://sci kit-learn . org/stable/modules/generated/sk learn . preprocessing . minmax scaler . html

[2]https://sci kit-learn . org/stable/auto _ examples/preprocessing/plot _ all _ scaling . html

[3]https://sci kit-learn . org/stable/modules/generated/sk learn . preprocessing . robust scaler . html

和我联系

关于 MVC 架构你需要知道的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-mvc-architecture-3c827930b4c1?source=collection_archive---------1-----------------------

MVC 如何工作的一般解释。

MVC 被认为是一种架构模式,它包含三个部分模型、视图和控制器,或者更准确地说,它将应用程序分成三个逻辑部分:模型部分、视图和控制器。它曾用于桌面图形用户界面,但现在用于设计移动应用和网络应用。

历史

Trygve Reenskaug 发明了 MVC。关于 MVC 的第一份报告是他在 1978/79 年拜访施乐帕洛阿尔托研究实验室(PARC)的一位科学家时写的。起初,MVC 被称为“事物模型视图编辑器”,但很快就变成了“模型视图控制器”。

Tygrve 的目标是解决用户控制大型复杂数据集的问题。多年来,MVC 的实践已经发生了变化。由于 MVC 模式是在 web 浏览器之前发明的,最初被用作图形用户界面(GUI)的架构模式。

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

最初的 MVC

目前,MVC 被用于设计 web 应用程序。一些使用 MVC 概念的 web 框架:Ruby on Rails、Laravel、Zend framework、CherryPy、Symphony 等

MVC 架构

MVC 是一种架构模式,这意味着它控制着应用程序的整个架构。即使它通常被称为设计模式,但如果我们只将其称为设计模式,我们可能是错误的,因为设计模式用于解决特定的技术问题,而架构模式用于解决架构问题,所以它影响我们应用程序的整个架构。

它有三个主要组件:
-模型
-视图
-控制器
,每个组件都有特定的职责

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

MVC 架构

使用 MVC 的主要原因是:首先,它不允许我们重复自己,其次,它有助于创建我们的 web 应用程序的坚实结构。

模型

它被称为最低级别,这意味着它负责维护数据。逻辑地处理数据,所以它基本上是处理数据。模型实际上是与数据库相连的,所以你对数据做的任何事情。添加或检索数据是在模型组件中完成的。它响应控制器的请求,因为控制器从不自己与数据库对话。该模型与数据库来回对话,然后将所需的数据提供给控制器。注意:模型从不与视图直接交流。

视角

数据表示由视图组件完成。它实际上为用户生成 UI 或用户界面。因此,在 web 应用程序中,当您想到视图组件时,只需想到 Html/CSS 部分。视图是由模型组件收集的数据创建的,但这些数据不是直接获取的,而是通过控制器获取的,因此视图只与控制器对话。

控制器

它被称为主要人员,因为控制器是实现视图和模型之间的互连的组件,所以它充当中介。控制器不必担心处理数据逻辑,它只是告诉模型做什么。从模型接收数据后,它对数据进行处理,然后将所有信息发送给视图,并向用户解释如何表示。注意:视图和模型不能直接对话。

MVC 的优势

  • MVC 架构将用户界面从业务逻辑和业务逻辑中分离出来
    -组件是可重用的。
    -易于维护。
    -MVC 中应用程序的不同组件可以独立部署和维护。
    -这种架构有助于独立测试组件。

MVC 的缺点

——复杂度高。
-不适合小型应用。
-针对数据访问的低效率。

结论

所以 MVC 不是那么容易理解,实际上它真的很难,但不是不可能学会,每个开发人员在开发应用程序时都需要记住它。请记住,MVC 是一种将你的软件分成更小的组件的架构。模型处理数据和系统的逻辑。视图只显示数据,控制器维护模型和视图之间的连接。这种“划分”使可读性和模块化,以及它更容易测试部分。

只要记住这些要点:
-MVC 是一种架构模式,由三部分组成:模型、视图、控制器。模型:处理数据逻辑。
视图:向用户显示来自模型的信息。
控制器:控制数据流向模型对象,并在数据变化时更新视图。
——是 Trygve Reenskau 发明的。
-尽管它非常受欢迎,也确实有一些缺点,但主要的缺点是复杂。

关于时间序列你需要知道的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-time-series-5fa1834d5b18?source=collection_archive---------13-----------------------

你能找到的最完整的时间序列分析介绍

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

Unsplash 上由智妍公园拍摄的照片

很明显,我们拥有的最宝贵的资源是时间。—史蒂夫·乔布斯

介绍

收集的大多数数据都有时间结构。有时,这种结构是隐藏的,或者我们可以忽略它,但是,有一些方法可以使用这种时间结构从可用数据中提取相关信息。

知道如何对时间序列建模是数据科学中的一项基本技能,因为这种类型的数据有特定的结构,可以在所有情况下进行探索。

我放在本指南中的所有内容都可以在任何时间尺度上使用。请记住:每当我说天、周、小时或任何时间单位,你都可以理解为“周期”。那么,我们开始吧。

时间序列的结构

你如何知道你正在处理一个时间序列?一个时间序列是一系列按时间顺序索引的数据点。最简单的时间序列是这样的:

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

简单时间序列

其中的元素是:

  • 时间戳:事件被注册时的时间标记。其准确性将取决于测量的事件。
  • 价值:这种现象在那一刻的价值是什么?
    可以只是一个或多个值。当每个时间戳有多个值时,我们有一个多变量时间序列。

时间序列的类型

此外,知道时间序列有两种类型也很重要:

  • 有规律的时间序列:在每个统一的时间段内都有记录的时间序列。一个每日的温度序列可以被认为是一个常规序列,因为我们期望每天一个记录,每单位时间一个记录。
  • 不规则时间序列:没有规定频率的时间序列。一个例子是网站的访问日志。人们不是每隔 N 分钟就统一访问一次。在这种情况下,我们将拥有不同时间间隔的记录。

时间序列数据准备

特征工程

为了创建机器学习模型,我们需要输入变量(特征— X)和一个或多个输出变量(目标— y)。有四个基本特征,应该在任何时间序列问题上进行测试:

  • 滞后:滞后特性就是简单地使用以前的目标值作为预测当前目标值的特性。例如,如果你想预测明天苹果股票的价格,今天的价格是一个非常强大的功能,这个案例是一个 lag 1 功能。或者,如果您的问题具有每周季节性,滞后七功能可能会非常有用。
  • 差异:这个特性和 Lag 很相似。只是这里不用具体的数值,而是用上一期和上一期的差。例如,计算昨天售出的商品数量和上周同一天售出的商品数量之间的差异。最常见的运算是差(减),但我们也可以使用和、比和乘法。
  • 统计特性:除了对特定的值和算术运算,我们还可以计算平均值、标准差、最大值、最小值、分位数等统计量。在我们的销售示例中,我们可以计算在过去的七天中,该产品在一天中的最大销售量。这个想法很简单,取一个时间段的窗口,对各自的值应用一个函数。通常,这个函数应该为每个时间戳只返回一个数字。
  • 时间戳分解:我们也可以提取时间戳的相关部分,通常是与它的季节性相关的东西。一些时期有特定于那个时刻的不同模式。一些经典的例子是圣诞节,黑色星期五,母亲节,父母,情人节。在这些日期之前的日子里,贸易中的销售有显著的增加。换句话说,在一年中的这个时候,总会有销售增长,模型需要知道这一点。我们可以创建诸如星期几、一个月中的某一天、一年中的某个月、一天中的某个时间等特征。

系统模型化

传统上,统计时间序列模型一次应用于一个序列。也就是说,您只有一系列的值,并应用期望的方法来建模生成它的过程。在 Data Science,我们也可以一次对一个序列建模,只需创建仅依赖于我们试图预测的序列值的特征。但是,我们也可以将时间序列堆叠起来,制作一个堆叠模型。这样,我们可以有单独的模型和堆叠的模型,因为单独的模型是传统的方法,我将详细解释堆叠方法。

堆叠建模

在这种情况下,我们不是为每个系列创建一个模型,而是将它们“堆叠”在一起,创建一个全局模型。我说的堆叠是什么意思?

假设我们有一系列 10 家公司一年的股票价格,每天一个记录。让我们把所有这些系列连接成一个。那么我们将有 10 家公司 x 365 天= 3650 行。“新系列”的每一行都有时间戳、公司标识和当时的销售额。

我们为什么要这样做?

  • 更多数据:机器学习模型往往在数据量较大的情况下工作得更好。我们不是基于一些记录(在我们的例子中是 365 行)来建立模型,而是建立更多的行,让模型更健壮地捕捉模式。
  • 复杂性:对于生产、监控模型、保持模型运行来说,维护一个模型比维护 10 个模型要简单得多。这降低了我们解决方案的复杂性,并避免了实现错误。
  • 全球效应:同时使用几个系列,模型有机会捕捉它们之间的共同事件。全球效应,发生在几个系列,将更清楚,更容易捕捉。

确认

当我们处理时间序列模型时,我们不能进行错误的验证,而严重错误的验证是很常见的。如果你只是简单地随机划分你的数据,就像我们在很多课程中学到的那样,你会得到一个看起来非常好的结果,但它实际上不会在生产中重现。这是因为你将混合过去和未来的线,让你的模型知道未来的信息来预测过去!这样,在生产中,就没有办法得到时间机器,得到这些信息。

另外,整个过程受时间影响。有些更快,有些更慢,因此我们需要了解我们的模型将如何应对将要发生的变化。

你可能想知道:整个过程真的会随着时间而改变吗?

即使是图像分类器也会受到影响,因为用于拍照的设备总是在变化。

通常,与人类行为直接或间接相关的模型往往变化更快,需要以一定的频率更新(重新训练)。正确的频率取决于具体情况。一般来说,时间序列打破了线独立性的假设。也就是说,来自邻近线的信息倾向于给出关于我们选择的线的目标的提示。

因此,在训练和测试之间划分时间数据的最简单但已经相当健壮的方法是按日期划分。你可以选择一个特定的日期或一部分数据,通常前 70%用于训练,30%用于验证。甚至,我们可以做一个时间序列交叉验证吗?

时间序列交叉验证

不要只使用一个分割来验证我们的模型,最好使用至少三个交叉验证折叠来这样做,总是按照时间戳来分割数据。

通常,越新的数据对模型越重要。我们可以使用两种类型的“窗口”来验证我们的模型:

  • **可扩展窗口:**这意味着久而久之,我们的训练数据将会增加。下图可以很好的说明这个过程。

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

  • **滑动窗口:**在这个格式中,以及在特征的计算中,我们将滑动一个固定的窗口,由数据预先定义。滑动窗口让您对将要使用的数据有更多的控制,使您的管道在重新训练时更加健壮。即使你有很多年的数据,也不代表你需要用所有的东西来训练模型。

简单交叉验证的一个缺点是,我们正在验证未来的“某个版本”,那些真正发生过的版本,在一个小时间的变化后迭代每个版本。但在某些情况下,未来可能会有所不同。

在金融市场建模的案例中,这种情况经常发生。总的来说,你需要寻找不同金融体系(高、低和停滞)的时间段来验证你的模型。

越来越受欢迎的一种方法是跨块验证。一般而言,在验证中重复使用数据样本的重采样方法往往更加稳健。

在时间序列的情况下,由于我们希望保留结构,但模拟不同的场景,我们需要在不进行随机混合的情况下获取数据块,并且这些数据块在交叉验证折叠之间不能有交集。最重要的是,随着时间的推移,一起生成的线保持在一起。这些可以在下图中看到:

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

模型

一些机器学习模型似乎更适合时间序列数据。

树形系综

这里我们讨论的是任何结合几个决策树进行预测的模型。最流行的是随机森林和梯度提升决策树。

在竞赛和行业项目中,我们看到这些模型很容易发现时间序列中的模式,对噪声具有鲁棒性,并且由于其捕捉非线性模式的高能力,能够提取与目标几乎不相关的特征值。

神经网络

多层感知器(MLP)神经网络是最传统的,可以用来创建基本上任何性质的模型。但是有一些类型可以直接处理字符串。

卷积神经网络

最初是为了处理图像而创建的,但是它们在时间序列案例中的使用越来越普遍。基本上,他们最终会学习在卷积窗口内乘以原始特征的滤波器。这意味着我们可以使用学习表示的能力来建模时间序列。

与递归网络相比,它们训练速度更快,需要调整的参数(权重)更少。尽管如此,在大多数神经网络的情况下,随着数据量的增长,它们往往会工作得更好。小样本值得一试,但不要指望它能创造奇迹。

递归神经网络(RNN)

今天最流行的是长-短时记忆(LSTM ),是专门针对顺序数据的,时间序列也是如此。这个想法是,不仅当前的例子可以影响结果,过去例子的“记忆”也可以帮助预测。

这些网络往往相当复杂,有大量的参数需要调整,这使得它们需要大量的样本才能达到良好的效果。同时,它们非常灵活,允许在进入和退出期间的数量之间有多种架构组合。

衰减时间

每个时间序列预测都试图理解人类的相互作用。如果建模的系统改变了任何逻辑,则训练的模型将随着时间的推移而出现性能衰减。有些模型会衰减很快,有些则很慢。

要测量您的模型随着时间的推移表现如何,请尝试监控其性能,并在性能下降到阈值以下时重新训练它。

衰减的速度会因您处理的问题类型而异,例如,金融模型可能需要在短时间内重新训练,而预测天气的模型可以在较长时间后重新训练。

有一些更可靠的方法来判断何时重新训练时间序列模型,然而,这篇文章已经足够长了。总有一天我会在这里写一篇关于它的文章。

结论

最常见的数据之一与时间有关。对于数据科学家来说,它们是理解如何正确探索、准备、提取好的特征、验证和建模这类数据的基础。

有了这里提出的想法,你一定能够使用时间序列的机器学习来创建高性能和稳健的模型。

我希望这个概述可以帮助一些人,因为现在我只会留下一本书的推荐和一个好的报价。

读时间系列的书很好:

时间序列预测(Francesca Lazzeri):【https://amzn.to/2R7qGko T2

Python 速成班(Eric Matthes):【https://amzn.to/38gJtPI

用于数据分析的 Python(韦斯·麦金尼):https://amzn.to/2tpgevz

很明显,我们拥有的最宝贵的资源是时间。—史蒂夫·乔布斯

参考资料:

时间序列 CV 数字来自:https://hub . packtpub . com/cross-validation-strategies-for-time-Series-forecasting-tutorial/

关于网络抓取,你需要知道的一切

原文:https://towardsdatascience.com/everything-you-need-to-know-about-web-scraping-6541b241f27e?source=collection_archive---------4-----------------------

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

如今,无论你走到哪里,都有机器在为人类做事。随着技术和生产的发展,许多事情很容易实现自动化。我们现在正需要这些,为什么你不能让自己也轻松一点呢?

这正是网页抓取的目的。这是一个用来从网上网页获取数据的术语。
一旦你得到了你想要的数据,你可以用它做很多事情,这取决于你,但在这篇文章中,我想回顾一下网络抓取的一些最佳用法,并回答一些关于这个话题的一般性问题。

什么是网页抓取?

Web 抓取是一种从网站上获取大量数据的方法,这些数据可以用于任何类型的数据处理和操作。

对于这项技术,我们使用 web 浏览器。您通常没有获得所需数据的内置选项。这就是为什么我们使用 Web 抓取来自动获取数据,而不必手动操作。网络抓取是一种自动化这一过程的技术,这样就不用手动从网站上复制数据。

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

网络搜集的好处和用途

如前所述,用这种方法你可以一次获得大量数据,但这不是它的唯一用途。

如果你能从网站上获得数据,想象一下你能做什么。数据操作是这里的关键。

以下是一些例子:

分析:收集数据,做一个分析工具,跟踪你的数据。你可以用这个方法进行研究。甚至可能用机器学习或更复杂的想法来预测行为(如何用 Python 制作分析工具 ) 价格比较:从不同的网站获取价格并进行比较,以了解市场概况,这样您就可以省钱!(如何用 Python 省钱 )
邮件列表:收集邮件地址,用于营销和促销目的。你每天都会收到很多来自你从未听说过的公司的电子邮件,这就是原因。
工作:找工作真的很难,因为招聘信息分散在不同的网站上,令人困惑
社交媒体:从脸书、Instagram 或 Twitter 等网站搜集数据。为了获得关注者/不关注者的数量或当时的趋势。

这些是网络抓取的一些最常见的用法,这些是我的想法,但是根据你的工作和网站的使用情况,你可能会有一些关于如何实现它的其他想法!关键是你的工作流程中自动化程度越多(T2),对你就越好。

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

网页抓取的最佳编程语言

显然巨蟒。你可以使用很多不同的库来抓取网页。其中一些是:

Selenium :这个库使用 Web Driver for Chrome 来测试命令和处理网页以获得你需要的数据。(使用示例:如何使用 Python 制作分析工具如果您想了解更多信息25 个 Selenium 函数,让您成为 Web 抓取专家)
beautiful soup:用于从 HTML 和 XML 文件中提取数据的 Python 库。它创建了数据解析树以便于获取数据。(用法举例:如何用 Python 省钱 )
熊猫:用于数据提取和操纵。通常,对于数据库,它将数据保存为某种格式。

这不仅仅是因为 Python 有库,而且 Python 是最容易使用的语言之一,也是最强大的语言之一。

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

法律问题

有些网站允许刮痧,有些不允许。

为了检查网站是否支持网页抓取,您应该在目标网站的 URL 末尾添加“/robots.txt”。

它会告诉你关于网站的所有细节,包括关于刮擦的信息,这里有一个例子:

https://www.facebook.com/robots.txt

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

在这种情况下,你必须查看专门的网页抓取网站。

始终注意版权并仔细阅读 合理使用

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

简单的例子

现在我们已经基本上涵盖了网络抓取的所有要点,让我们创建一个简单的网络抓取使用示例。

如果你想要一些具体的东西,可以看看这方面的高级例子:如何用 Python 制作分析工具如何用 Python 省钱

相反,我们将制作一个简单的脚本来从一个网站获取一些数据!类似于这篇文章,我们会从网站上得到价格和标题。

让我们直接开始吧!

编码

规划流程

首先,我们必须找到我们想要跟踪的项目。我发现这台笔记本电脑很贵。

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

我的代销商产品链接

为此,我们需要几个库,所以让我们来设置环境。

设置环境

一旦我们完成了一个项目搜索,我们打开编辑器。我个人选择的是 Visual Studio 代码。它简单易用,可定制,并且对你的计算机来说很轻。

打开一个新的项目,创建一个新文件。这是一个我的看起来能帮助你的例子:

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

在 VS 代码中,有一个“Terminal”选项卡,您可以使用它打开 VS 代码中的内部终端,这对于将所有内容放在一个地方非常有用。

在终端中,您应该安装库:

*pip3 install requests*

可以使用请求,这样您就可以通过简单的 Python 库添加内容,如标题、表单数据、多部分文件和参数。它还允许您以同样的方式访问 Python 的响应数据。

sudo pip3 install beautifulsoup4

Beautiful Soup 是一个 Python 库,用于从 HTML、XML 和其他标记语言中获取数据。

pip3 install smtplib

smtplib 模块定义了一个 SMTP 客户端会话对象,该对象可用于向任何带有 SMTP 或 ESMTP 监听器守护进程的互联网机器发送邮件。

创建工具

我们已经设置好了一切,现在我们要编码了!

首先,如前所述,我们必须导入已安装的

*import* requests*from* bs4 *import* BeautifulSoup*import* smtplib

在这种情况下,我们需要使用两个变量,即 URL标题
URL 将是我们产品的链接,标题将是用户代理,我们将使用它来访问正确版本的浏览器和机器。要找出你的浏览器用户代理,你可以在这里做。只需替换“用户代理”部分之后的链接,并像我一样用单引号括起来。

URL = '[https://www.amazon.de/dp/B07XVWXW1Q/ref=sr_1_10?keywords=laptop&qid=1581888312&sr=8-10](https://www.amazon.de/dp/B07XVWXW1Q/ref=sr_1_10?keywords=laptop&qid=1581888312&sr=8-10)'In order to fix that we are going to do some text permutations or parsing.For title we are going to use .split() function:print(title.strip())
And for our price:sep = ','
con_price = price.split(sep, 1)[0]
converted_price = int(con_price.replace('.', ''))
We use sep as the separator in our string for price and convert it to integer (whole number).headers = {"User-agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}

接下来,我们将使用 URL 和请求库的标题来定义页面。

page = requests.get(URL, headers=headers)soup = BeautifulSoup(page.content, 'html.parser')

这将得到我们想要的链接,现在我们只需找到页面上的元素,以便将它们与希望的价格进行比较。

title = soup.find(id="productTitle").get_text()price = soup.find(id="priceblock_ourprice").get_text()

为了找到页面上的元素,我们使用 soup。找到()函数,用。get_text()。
标题价格我们要为程序的输出进行节省,让它看起来很好看。

现在,元素看起来很奇怪,因为在我们需要的文本前后有太多的空格。

为了解决这个问题,我们将进行一些文本置换或解析

对于标题我们将使用。拆分()功能:

print(title.strip())

而对于我们的价格:

sep = ','con_price = price.split(sep, 1)[0]converted_price = int(con_price.replace('.', ''))

我们使用 sep 作为价格字符串中的分隔符,并将其转换为整数。

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

下面是完整的代码:

我们完了!

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

如果你想了解更多关于硒功能的知识,试试这里的!

我希望你喜欢这个小教程,并关注我更多!

感谢阅读!

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

跟着我上

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

在推特上关注我

在 20 分钟内成为一名数据科学家需要了解的基础知识

原文:https://towardsdatascience.com/everything-you-need-to-know-to-be-a-data-scientist-explained-in-20-minutes-2738ecbc6829?source=collection_archive---------20-----------------------

关于成为数据科学家所需了解的广泛速成课程

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

图片由皮克斯拜的 Gerd Altmann 提供

这篇文章是一个广泛的速成班,我认为这是成为一名数据科学家需要知道的一些最基本和最有用的概念。我已经把它分成了不同的部分,这样你就可以一点一点地看了。

好吧,这并没有涵盖与数据科学相关的一切(那是不可能的),不,这应该是而不是你用来发展知识和技能的唯一资源…

然而,如果你一无所知,那么这将有助于你很好地理解数据科学的基础知识。如果您对数据科学有所了解,这可以作为一门紧凑的速成课程,用于复习、磨练您的知识和/或找出您知识中的差距。

一如既往,我希望这能对您有所帮助,并祝您在数据科学事业中好运!

目录

  1. 机器学习模型
  2. 统计数据
  3. 概率
  4. 熊猫
  5. SQL &查询
  6. 奖金内容

1.机器学习模型

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

机器学习模型的基本分段

所有的机器学习模型被分类为监督的非监督的。如果模型是监督模型,那么它被细分为回归分类模型。我们将讨论这些术语的含义以及下面每个类别中对应的模型。

监督学习

监督学习涉及学习基于示例输入-输出对将输入映射到输出的函数。

例如,如果我有一个包含两个变量的数据集,年龄(输入)和身高(输出),我可以实现一个监督学习模型,根据年龄预测一个人的身高。

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

监督学习的例子

重复一下,在监督学习中,有两个子类别:回归和分类。

回归

回归模型中,输出是连续的。下面是一些最常见的回归模型。

线性回归

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

线性回归的例子

线性回归的概念就是找到一条最符合数据的直线。线性回归的扩展包括多元线性回归(例如,找到最佳拟合的平面)和多项式回归(例如,找到最佳拟合的曲线)。你可以在我的上一篇文章中了解更多关于线性回归的知识。

决策图表

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

图片来自 Kaggle

决策树是一种流行的模型,用于运筹学、战略规划和机器学习。上面的每个方块被称为一个节点,节点越多,你的决策树就越精确(一般来说)。决策树中做出决策的最后节点称为树的。决策树直观且易于构建,但在准确性方面有所欠缺。

随机森林

随机森林是一种基于决策树的集成学习技术。随机森林包括使用原始数据的自举数据集创建多个决策树,并在决策树的每一步随机选择一个变量子集。然后,该模型选择每个决策树的所有预测的模式。这有什么意义?依靠“多数获胜”模型,它降低了单个树出错的风险。

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

例如,如果我们创建一个决策树,第三个,它会预测 0。但是如果我们依赖所有 4 个决策树的模式,预测值将是 1。这就是随机森林的力量。

StatQuest 做了一项了不起的工作,更详细地说明了这一点。见此处

神经网络

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

神经网络的可视化表示

一个神经网络是一个受人脑启发的多层模型。就像我们大脑中的神经元一样,上面的圆圈代表一个节点。蓝色圆圈代表输入层,黑色圆圈代表隐藏层,绿色圆圈代表输出层。隐藏层中的每个节点代表一个输入经过的函数,最终导致绿色圆圈中的输出。

神经网络实际上是非常复杂和非常数学化的,所以我不会进入它的细节,但…

饶彤彤的文章对神经网络背后的过程给出了直观的解释(见此处)。

如果你想更进一步,理解神经网络背后的数学,请点击这里查看这本免费的在线书籍。

如果你是一名视觉/音频学习者,3Blue1Brown 在 YouTube 上有一个关于神经网络和深度学习的惊人系列这里

分类

在分类模型中,输出是离散的。下面是一些最常见的分类模型。

逻辑回归

逻辑回归类似于线性回归,但用于模拟有限数量结果的概率,通常为两个。在对结果的概率建模时,逻辑回归比线性回归更常用,原因有很多(见此处)。实质上,逻辑方程是以这样一种方式创建的,即输出值只能在 0 和 1 之间(见下文)。

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

支持向量机

一个支持向量机是一种监督分类技术,它实际上可以变得非常复杂,但在最基本的层面上是非常直观的。

让我们假设有两类数据。支持向量机将找到一个超平面或两类数据之间的边界,该边界使两类数据之间的间隔最大化(见下文)。有许多平面可以分隔这两个类别,但只有一个平面可以最大化类别之间的边距或距离。

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

如果你想了解更多细节,Savan 在这里写了一篇关于支持向量机的文章。

朴素贝叶斯

朴素贝叶斯是数据科学中使用的另一种流行的分类器。背后的想法是由贝叶斯定理驱动的:

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

虽然有许多关于朴素贝叶斯的不切实际的假设(这就是为什么它被称为‘朴素’),但它已经被证明在大多数情况下都是有效的,而且构建起来也相对较快。

如果你想了解更多,请点击这里

决策树,随机森林,神经网络

这些模型遵循与前面解释的相同的逻辑。唯一区别是输出是离散的而不是连续的。

无监督学习

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

与监督学习不同,非监督学习用于从输入数据中进行推断和发现模式,而不参考标记的结果。无监督学习中使用的两种主要方法包括聚类和降维。

使聚集

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

摘自 GeeksforGeeks

聚类是一种无监督的技术,涉及数据点的分组,或聚类。它经常用于客户细分、欺诈检测和文档分类。

常见的聚类技术有 k-means 聚类、分层聚类、均值漂移聚类、基于密度的聚类。虽然每种技术在寻找聚类时有不同的方法,但它们的目标都是一样的。

降维

降维是通过获得一组主变量来减少所考虑的随机变量的数量的过程。简单来说,就是减少特性集的维数的过程(更简单来说,就是减少特性的数量)。大多数降维技术可以分为特征消除特征提取。

一种流行的降维方法叫做主成分分析。

主成分分析

从最简单的意义上来说, PCA 涉及到将高维数据(如 3 维)投影到更小的空间(如 2 维)。这导致数据的维度降低(2 维而不是 3 维),同时保持模型中的所有原始变量。

这涉及到相当多的数学问题。如果你想了解更多…

点击查看这篇关于 PCA 的精彩文章。

如果你宁愿看视频,StatQuest 在 5 分钟内解释 PCA这里

2.统计数字

数据类型

数值:用数字表示的数据;是可以衡量的。既可以是离散也可以是连续

分类:定性数据分类成类别。可以是名义(未排序)或序数(排序数据)。

集中趋势测量

**均值:**一个数据集的平均值。
**中位数:**有序数据集的中间;不易受离群值的影响。
**模式:**一个数据集中最常见的值;仅与离散数据相关。

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

差异量数

**范围:**数据集中最高值和最低值之差。

方差(σ2): 测量一组数据相对于平均值的分布程度。

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

标准差(σ): 数据集中数字分布的另一种度量;它是方差的平方根。

**Z 值:**确定数据点偏离平均值的标准偏差数。

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

**R 平方:**拟合的统计度量,表明自变量解释了因变量的多少变化;仅对简单线性回归有用。

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

**调整后的 R 平方:**已针对模型中预测器的数量进行调整的 R 平方的修改版本;如果新项对模型的改进超过偶然的预期,那么它就会增加,反之亦然。

变量之间关系的度量

**协方差:**测量两个(或更多)变量之间的方差。如果是正的,那么它们倾向于向同一个方向移动,如果是负的,那么它们倾向于向相反的方向移动,如果它们是零,那么它们彼此没有关系。

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

样本的分母变为(n-1)

**相关性:**衡量两个变量之间的关系强度,范围从-1 到 1;协方差的标准化版本。一般来说,+/- 0.7 的相关性代表两个变量之间的密切关系。另一方面,介于-0.3 和 0.3 之间的相关性表明变量之间几乎没有关系。

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

概率分布函数

概率密度函数(PDF): 连续数据的函数,其中任意点的值可以被解释为提供随机变量的值等于该样本的相对可能性。(维基)

概率质量函数(PMF): 离散数据的函数,给出给定值出现的概率。

累积密度函数(CDF): 告诉我们一个随机变量小于某个值的概率的函数;PDF 的积分。

连续数据分布

**均匀分布:**所有结果可能性相等的概率分布。

**正态/高斯分布:**通常称为钟形曲线,与 中心极限定理 有关;平均值为 0,标准偏差为 1。

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

**T-分布:**在样本量较小和/或总体方差未知时用于估计总体参数的概率分布(参见更多 此处 )。

**卡方分布:**卡方分布统计量( 此处 )。

离散数据分布

**泊松分布:**概率分布,表示给定数量的事件在固定时间段内发生的概率。

**二项式分布:**一系列 n 次独立经历中成功次数的概率分布,每次经历都有自己的布尔值结果(p,1-p)。

朋友圈

描述了分布的性质和形状的不同方面。一阶矩是均值**,二阶矩是方差**,三阶矩是偏度**,四阶矩是峰度**。********

准确(性)

**真阳性:**检测条件出现时的条件。

**真否定:**不检测条件不存在时的条件。

**假阳性:**检测条件不存在时的条件。

**假阴性:**在条件存在时不检测条件。

灵敏度:又称召回;当条件存在时,测量测试检测条件的能力;灵敏度= TP/(TP+FN)

**特异性:**测量当条件不存在时,测试正确排除条件的能力;特异性= TN/(TN+FP)

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

预测值正:又称精度;对应于条件存在的阳性比例;PVP = TP/(TP+FP)

**预测值阴性:**对应于条件不存在的阴性比例;PVN = TN/(TN+FN)

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

假设检验和统计显著性

查看我的文章《尽可能简单地解释假设检验》获得更深入的解释 这里

**零假设:**样本观察值纯属偶然的假设。

**备选假设:**样本观测值受某种非随机原因影响的假设。

**P 值:**假设零假设正确,获得某个检验的观测结果的概率;较小的 p 值意味着有更强的证据支持替代假设。

α:显著性水平;当零假设为真时拒绝零假设的概率—也称为1 型错误。

**贝塔:**2 型错误;未能拒绝虚假的零假设。

假设检验的步骤:
1。陈述无效假设和替代假设。确定测试规模;是单尾还是双尾检验?
3。计算测试统计和概率值
4。分析结果,拒绝或不拒绝零假设(如果 p 值大于α,不拒绝零假设!)

3.可能性

概率是事件发生的可能性。

**条件概率【P(A | B)】**是一个事件发生的可能性,基于前一个事件的发生。

独立事件是其结果不影响另一事件结果概率的事件;P(A|B) = P(A)。

互斥事件是不能同时发生的事件;P(A|B) = 0。

**贝叶斯定理:**确定条件概率的数学公式。“给定 B 的概率等于给定 A 的 B 的概率乘以 A 的概率超过 B 的概率”。

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

概率的八大法则

  • 规则#1:对于任何事件 A,0≤P(A)≤1换句话说,一个事件发生的概率范围可以从 0 到 1。
  • 规则 2:所有可能结果的概率总和总是等于 1。
  • 规则#3: P(非 A)= 1—P(A)这个规则解释了一个事件的概率和它的补事件之间的关系。补充事件是指包含 a 中没有的所有可能结果的事件。
  • 规则#4:如果 A 和 B 是不相交事件(互斥),那么 P(A 或 B)= P(A)+P(B)这被称为不相交事件的加法规则
  • 规则#5: P(A 或 B) = P(A) + P(B) — P(A 和 B);这就是所谓的一般加法法则。
  • 规则#6:如果 A 和 B 是两个独立事件,那么 P(A 和 B)= P(A) P(B)*;这叫做独立事件的乘法法则。
  • 规则#7:给定事件 A,事件 B 的条件概率为 P(B|A) = P(A 和 B) / P(A)
  • 规则#8:对于任意两个事件 A 和 B, P(A 和 B)= P(A) P(B | A)*;这被称为通用乘法法则

计数方法

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

阶乘公式:n!= n x(n-1)x(n-2)x…x 2 x 1 当项目数等于可用的位置数时使用。找出 5 个人可以坐在 5 个空座位上的总数。
= 5×4×3×2×1 = 120

基本计数原理(乘法) 当允许重复且填充空位的方式数不受之前填充的影响时,应使用此方法。早餐有 3 种,午餐有 4 种,甜点有 5 种。组合总数= 5 x 4 x 3 = 60

排列:P(n,r)= n!/(n r)! 此方法用于不允许替换且项目排序重要的情况。 例如,一个代码有 4 个数字,按特定顺序排列,数字范围从 0 到 9。如果一个数字只能用一次,有多少种排列?
P(n,r) = 10!/(10–4)!=(10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x2 x 1)/(6x 5 x 4 x 3 x2 x 1)= 5040

组合公式:C(n,r)=(n!)/[(n r)!r!] 当不允许替换并且项目的排列顺序不重要时使用。要赢得彩票,你必须以从 1 到 52 的任何顺序选择 5 个正确的数字。有多少种可能的组合?
C(n,r) = 52!/ (52–5)!5!= 2598960

4.熊猫

Pandas 是 Python 中的一个软件库,用于数据操作和分析。这在数据科学领域是普遍现象,必须了解!下面是学习熊猫基本功能的指南。

设置

导入熊猫库

import pandas as pd

创建和读取数据

创建数据框架

数据帧只是一个由多个数组组成的表。在下面的示例中,代码将创建一个包含 ABC 和 DEF 两列的表。

pd**.DataFrame**({'ABC':[1,2,3],'DEF':[4,5,6]},index=[1,2,3])

创建一个系列

系列是一系列值,也称为列表。从视觉角度来看,想象它是表格中的一列。

pd**.Series**([1,2,3],index=[], name ='ABC')

将 CSV 文件读入数据帧

获取数据的最常见方式。这将 CSV 文件转换为数据帧。

# example
df = pd**.read_csv**("filename.csv", index_col=0)

将数据帧转换为 CSV 文件

反之亦然,如果您想将 DataFrame 转换成 CSV,可以使用下面的代码:

# example
df**.to_csv**("filename.csv", index_col=0)

确定数据帧的形状

这将告诉您数据帧有多大,格式是什么(行,列)。

df**.shape()**

查看数据帧的前 5 行

如果你想直观地了解数据帧的样子。head() 返回给定数据帧的前 5 行。

df**.head()**

查看一列或多列的数据类型

# For one column
df.variable**.dtype**# For all columns
df**.dtypes**

将列转换为另一种数据类型

如果您想将整数转换成浮点数(反之亦然),这是很有用的。

df.variable**.astype()**

操作数据帧

从数据帧中选择系列

# a) Method 1
df.property_name# b) Method 2
df['property_name']

索引系列

# if you want to get the first value in a series
df['property_name'][0]

基于索引的选择

基于索引的选择根据数据在数据帧中的数字位置检索数据。它遵循行优先,列第二的格式。Iloc 的索引方案是这样的:的第一个数字是包含性的,而的最后一个数字是排他性的

df**.iloc[]**

基于标签的选择

基于标签的选择是索引数据帧的另一种方式,但它基于实际数据值而不是数字位置来检索数据。Loc 的索引方案使得的第一个和最后一个值都包含在内。

df**.loc[]**

使用现有列设置索引

因为基于标签的选择依赖于数据帧的索引,所以可以使用**。set_index()** 将一列分配给索引。

df.**set_index**("variable")

基于条件标签的选择

我们也可以使用基于标签的选择来过滤出数据帧。

# a) Single Condition 
df.loc[df.property_name == 'ABC']# b) Multiple conditions using AND
df.loc[df.property_name == 'ABC' & df.property_name == 'DEF']# c) Multiple conditions using OR
df.loc[df.property_name == 'ABC' | df.property_name == 'DEF']

选择值在值列表中的位置

我们也可以使用 isin() 来过滤数据帧。如果你懂 SQL,它类似于 WHERE ___ IN()语句。

df.loc[df.property_name **isin**(['ABC','DEF'])

选择值为空/不为空的位置

第一行代码将过滤 DataFrame,只显示属性名为 null 的行。
反之亦然,第二行代码用 filter it 使属性名不为空。

df.loc[df.property_name**.isnull**()]df.loc[df.property_name**.notnull()**]

添加新列

df['new_column'] = 'ABC'

重命名列

您通常会希望将列重命名为更容易引用的名称。使用下面的代码,列 ABC 将被重命名为 DEF。

df.**rename**(columns={'ABC': 'DEF'})

汇总函数

。描述()

这给出了数据帧或变量的高级摘要。它是类型敏感的,这意味着与字符串变量相比,数字变量的输出是不同的。

df**.describe()**
df.variable**.describe()**

。平均值()

这将返回变量的平均值。

df.variable**.mean()**

。唯一()

这将返回变量的所有唯一值。

df.variable**.unique()**

。值计数()

这显示了唯一值的列表以及数据帧中出现的频率。

df.variable.**value_counts()**

映射函数

。地图()

映射用于通过函数将一组初始值转换为另一组值。例如,我们可以使用映射将列的值从米转换为厘米,或者我们可以将这些值标准化。

。map()用于转换一个序列。

df.numerical_variable**.map()**

。应用()

。apply()类似于。map(),只是它转换整个数据帧。

df.numerical_variable**.apply()**

分组和排序

。groupby()

获取变量的每个值的计数(与 value_counts 相同)

df**.groupby**('variable').variable**.count()**

获取变量的每个值的最小值

df**.groupby**('variable').variable**.min()**

获取变量的每个值的汇总(长度、最小值、最大值)

df**.groupby**(['variable']).variable.**agg([len, min, max])**

多重索引

df.groupby(['variable_one', 'variable_two'])

对数据帧排序

按一个变量排序

df.**sort_values**(by='variable', ascending=False)

多变量排序

df.sort_values(by=['variable_one', 'variable_two'])

按索引排序

df**.sort_index()**

处理缺失数据

处理缺失数据是 EDA 中最重要的步骤之一。下面是一些处理缺失数据的方法。

删除包含空值的行

如果您有一个包含大量行的数据帧,并且您能够完全删除包含空值的行,那么。dropna()是一个有用的工具。

df.**dropna()**

删除包含空值的列

这与上面类似,除了它删除任何具有空值的而不是行。

df.**dropna(axis=1)**

填充缺失值

如果您希望填充缺少的值,而不是完全删除行或列,可以使用下面的代码:

df.variable**.fillna**("n/a")

替换值

假设有一个数据帧,其中有人已经用“n/a”填充了缺失值,但是您希望用“unknown”填充缺失值。那么您可以使用下面的代码:

df.variable**.replace**("n/a", "unknown")

组合数据

。concat()

当您想要合并具有相同列的两个数据帧时,这很有用。例如,如果我们想将一月份的销售额和二月份的销售额结合起来分析长期趋势,您可以使用以下代码:

Jan_sales = pd.read_csv("jan_sales.csv")
Feb_sales = pd.read_csv("feb_sales.csv")**pd.concat**([Jan_sales, Feb_sales])

。加入()

如果您想要合并具有公共索引的两个列(例如 customer_id),那么您可以使用。加入()。

使用上的参数确定要连接的列。

要确定它是左连接、右连接、内连接还是外连接,可以使用参数 how

# example
table_1.**join**(table_2, on='customer_id', *how='left')*

如果你不了解 SQL joins,在这里阅读。本质上是一样的想法。

5.SQL 和查询

定义

,也称为*记录,*是代表单个实体的属性(变量)的集合。例如,一行可能代表一个住院病人,可能有年龄、体重、身高等属性/变量…

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

是具有相同属性(相同变量)的行的集合。对我帮助最大的是把一个表格想象成一个 Excel 表格。

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

表格示例

查询是从数据库表或表的组合中请求数据。使用上面的表格,如果我想找到所有年龄大于 23 岁的患者,我将编写一个查询*。*

如何编写 SQL

因为这是一个初学者的教程,所以如果你想从一个表中提取数据,我将向你展示如何编写一个查询。

一个基本查询有五个组成部分*😗**

  1. 选择(必填)
  2. 从(必填)
  3. 其中(可选)
  4. 分组依据(可选)
  5. 排序依据(可选)

其结构如下:

***SELECT**
   [column_name_1],
   [column_name_2],
   [column_name_n]
**FROM**
   [table_name]
**WHERE**
   [condition 1]
**GROUP BY** [column_name] 
**ORDER BY** [column_name]*

让我们带回我的例子作为参考:

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

1.选择(必填)

***SELECT 决定了要从给定的表中提取哪些列。*例如,如果我想提取名字,那么我的代码应该是这样的:

*SELECT Name*

一个巧妙的技巧是,如果你想提取所有的列,你可以使用星号——如下所示:

*SELECT **

2.从(必填)

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

***FROM 确定要从哪个表中提取信息。*例如,如果您想要提取患者的姓名,您可能想要从名为 patient_info 的表中提取数据(见上文)。代码看起来会像这样:

*SELECT
   Name
FROM
   patient_info*

这是您的第一个函数查询!让我们来完成另外 3 个可选步骤。

3.其中(可选)

如果您想选择年龄超过 23 岁的患者的姓名,该怎么办?这就是我们的用武之地。 WHERE 是用来过滤您的表的语句,就像您在 Excel 中使用过滤工具一样!

获取 23 岁以上患者姓名的代码在左边。右侧显示了一个可视化表示:

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

如果您想要满足两个子句的患者姓名,您可以使用。例如,查找年龄超过 23 岁且体重超过 130 磅的患者的姓名。

*SELECT
   Name
FROM
   patient_info
WHERE
   Age > 23
   AND
   Weight_lbs > 130*

如果您想要满足两个子句之一的患者姓名,您可以使用。找出小于 22 岁或大于 23 岁的病人的名字。

*SELECT
   Name
FROM
   patient_info
WHERE
   Age < 22
   OR
   Age > 23*

4.分组依据(可选)

GROUP BY 正如它所说的那样— 它将具有相同值的行分组到汇总行中。它通常与计数、最小值、最大值、总和、AVG 等聚合函数一起使用。

让我们用下面的例子:

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

如果我们想得到每个病人去医院的次数,我们可以使用下面的代码并得到下面的结果:

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

5.排序依据(可选)

ORDER BY 允许您根据特定属性或多个属性按升序或降序对结果进行排序。我们来举个例子。

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

*SELECT
   *
FROM
   patient_info
ORDER BY
   Age asc*

“ORDER BY Age asc”意味着您的结果集将按年龄以升序对行进行排序(参见上图中的左表)。如果你想按降序排列(上图的右边表格),你可以用 desc 代替 asc

现在你已经学习了基本结构,下一步是学习 SQL 连接,你可以在这里阅读。

6.额外内容

如果你读到了最后,恭喜你!我希望这能激励你继续你的数据科学之旅。事实是,关于我写的每个主题,还有很多东西需要学习,但幸运的是,有成千上万的资源可供您使用!

下面是一些额外的资源和教程,您可以用它们来继续学习:

感谢阅读!

如果你喜欢我的工作,想支持我…

  1. 支持我的最好方式就是在媒体这里关注我。
  2. Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
  3. 此外,成为第一批订阅我的新 YouTube 频道 这里
  4. LinkedIn 这里关注我。
  5. 在我的邮箱列表 这里注册。
  6. 看看我的网站,terenceshin.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值