TowardsDataScience 博客中文翻译 2020(一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

⚡️加载相同 CSV 文件的速度提高了 10 倍,memory⚡️减少了 10 倍

原文:https://towardsdatascience.com/️-load-the-same-csv-file-10x-times-faster-and-with-10x-less-memory-️-e93b485086c7?source=collection_archive---------2-----------------------

熊猫,达克,多重加工,等等…

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

照片由卡拉·富勒Unsplash ( 最快的哺乳动物)上拍摄

即使我们有 1TB 的磁盘存储、8GB/16GB 的 RAM,许多其他数据加载 API 仍然难以加载 2GB 的文件。

这是因为当进程请求内存时,内存以两种方式分配:

  1. 连续内存分配(分配连续的块)
  2. 非连续内存分配(不同位置的独立块)

Pandas 使用连续内存将数据加载到 RAM 中,因为 RAM 上的读写操作必须比磁盘(或 SSD)快。

  • 固态硬盘读数:~16,000 纳秒
  • 从 RAM 中读取:~100 纳秒

在进入多处理& GPUs 等之前…让我们看看如何有效地使用 pd.read_csv()

Pandas 可以很好地加载数据和预处理,但是要训练你的模型,从 TensorFlowPyTorch 或任何你运行模型的地方开始使用 DataLoader。

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

塞巴斯蒂安·耶佩斯在 Unsplash 上拍摄的照片

注意:如果您在手机上阅读,您可能无法滚动浏览代码。(打开要点可读性更好。)

1。使用列:

而不是加载数据并删除处理数据时无用的不必要的列。只加载有用的列。

🔥内存使用与您使用的列数成比例。🔥

**2 使用正确的 **dtypes** 进行数值数据:

在熊猫数据框架中,每一列都有自己的dtype,例如,整数有int64int32int16

  • int8可以存储-128 到 127 的整数。
  • int16可以存储从-32768 到 32767 的整数。
  • int64可以存储-9223372036854775808 到 9223372036854775807 的整数。

默认情况下,熊猫将int64分配给整数datatype,因此通过定义正确的dtypes,我们可以显著减少内存使用。

🔥内存使用减少了 75%。🔥

**🔥Pro 提示:**在加载数据时使用converters来替换缺失值或 nan,特别是对于使用dtype.预定义了数据类型的列

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

塞缪尔·吉文Unsplash 上拍摄的照片

3。使用正确的 ***dtypes*** 进行分类列:

在我的数据集中,我有一个列Thumb,默认情况下它被解析为一个字符串,但是它只包含固定数量的值,这些值对于任何数据集都保持不变。

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

还有性别等栏目…可存储为分类值,将内存从约 1000 KB 减少至约 100 KB。(检查 sat)

🔥内存使用减少了 97%。🔥

**🔥专业提示:**如果你的数据帧包含大量空值、缺失值或 nan,你可以通过将它们转换成稀疏序列来减少它们的内存占用。

4。nrows,跳过行

甚至在将所有数据加载到 RAM 之前,使用小数据集测试您的函数和工作流总是一个好的做法,pandas 使精确选择行数变得更加容易(您甚至可以跳过不需要的行。)

在大多数情况下,出于测试目的,当一个样本可以做得很好时,您不需要加载所有数据。

nrows从文件中读取的行数。

>>> Import pandas as pd
>>> df = pd.read_csv("train.csv", nrows=1000)
>>>len(df)
1000

skiprows文件开头要跳过的行数(0-索引)或要跳过的行数(int)。

# Can be either list or first N rows.
df = pd.read_csv('train.csv', skiprows=[0,2,5]) 
# It might remove headings

🔥提示:nrows的一个有效用法是当您有超过 100 个列时,检查并为每一列定义正确的数据类型。所有这些开销都可以使用如下所示的nrows来减少。

sample = pd.read_csv("train.csv", nrows=100) # Load Sample datadtypes = sample.dtypes # Get the dtypes
cols = sample.columns # Get the columnsdtype_dictionary = {} 
for c in cols:
    """
    Write your own dtypes using 
    # rule 2
    # rule 3 
    """
    if str(dtypes[c]) == 'int64':
        dtype_dictionary[c] = 'float32' # Handle NANs in int columns
    else:
        dtype_dictionary[c] = str(dtypes[c])# Load Data with increased speed and reduced memory.
df = pd.read_csv("train.csv", dtype=dtype_dictionary, 
                 keep_default_na=False, 
                 error_bad_lines=False,
                 na_values=['na',''])

**注意:**由于 nan 在 pandas 中被认为是 float,所以如果您的列包含 nan,不要忘记将 integer data _ types 转换为 float。

5。分块加载数据:

熊猫 read_csv()中的内存问题长期存在。因此,加载大型数据集的最佳变通方法之一是分块加载。

**注意:**分块加载数据实际上比直接读取整个数据要慢,因为您需要再次concat分块,但是您可以轻松加载超过 10 GB 的文件。

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

照片由伊琳娜·布洛克Unsplash 上拍摄

6.使用 pandas 的多重处理:

因为 pandas 没有 njobs 变量来利用多处理能力。我们可以利用multiprocessing库在多线程上异步处理块大小操作,这可以将运行时间减少一半。

古塔曼巴拉拉曼

**注意:**您只需要在 main 中定义pool,因为只有 main 可以在多个处理器之间异步分配池。

7.Dask 代替熊猫:

虽然 Dask 没有像 pandas 那样提供广泛的数据预处理功能,但它支持并行计算,加载数据比 pandas 更快

import dask.dataframe as dddata = dd.read_csv("train.csv",dtype={'MachineHoursCurrentMeter': 'float64'},assume_missing=True)
data.compute()

🔥**专业提示:**如果你想知道 jupyter 细胞运行所需的时间,只需在细胞开始处添加%%time魔法函数

试题库:ParatextDatatable

他们的是另一种方式,你可以在云中租一台虚拟机,64 个内核和 432GB 内存,每小时 3 美元左右,甚至更好的价格。

警告:你需要花下一周的时间来配置它。

谢谢你坚持到最后,我希望你学到了新的东西。快乐装货…✌️.(👏如果你喜欢的话。)

在下面评论你用来更快加载数据的技巧,我会把它们添加到列表中。

(把他们添加到你的博客列表中):

🔥 Itamar Turner-Trauring —速度巨蟒大师(必须✅).

🔥 Gouthaman Balaraman —用 python 进行量化金融(必须✅).

Linkedin 上与我联系。

情感分析:基于方面的观点挖掘

原文:https://towardsdatascience.com/️-sentiment-analysis-aspect-based-opinion-mining-72a75e8c8a6d?source=collection_archive---------7-----------------------

入门

情感分析和主题建模技术的研究。

介绍

当发展一个成功的企业时,最关键的因素之一是你与客户的沟通和关系。然而,随着用户群的增长,一个主要的挑战是产生大量的数据,通常是以自然语言的形式。这些数据可以来自客户反馈,甚至可以来自社交媒体平台,客户可以在这些平台上表达他们对使用您的服务或产品的体验的想法和意见。

真正的挑战是自动解析和组织这些数据,使之成为更易理解和可操作的洞察。应用于这种数据的最流行的自然语言处理技术之一是情感分析。情感分析旨在自动提取和分类文本中表达的情感(观点的主观部分)和/或情绪(感觉的投射或显示)。

意见可以被定义为四个因素(实体、持有人、主张和情感)的组合,其中意见持有人可能相信关于实体的主张,并且在许多情况下,将情感与该信念相关联。与提取一段文本中表达的一般情感相反,基于方面的情感分析旨在提取文本中描述的实体(在这种情况下,是产品或服务的属性或组件)以及对这些实体表达的情感。

通过探索客户对您的服务或产品的特定部分的反应所获得的优势可以帮助支持业务用例,包括产品开发和质量控制、通信、客户支持和决策过程。在这种情况下,这篇文章研究了将传统的主题建模技术与情感分析相结合来提取文本方面,以及对它们表达的情感。

数据预处理

这篇文章中使用的数据集是由朱利安·麦考利提供的。它包含亚马逊的产品评论和元数据,包括 1996 年 5 月至 2014 年 7 月期间的 1.428 亿条评论。该数据集包括评论(评级、文本、有用性投票)、产品元数据(描述、类别信息、价格、品牌和图像特征)和链接(也查看过/也购买过的图表)。在这里,我们将使用手机和配件的评论。该数据集中的评论总数是 194,439。

我们将遵循一些自然语言处理任务中使用的标准预处理技术。这些技术包括:

  • 将文本转换为小写。
  • 删除标点符号和额外的空格。
  • 象征化。
  • 删除停用词。
  • 引理满足。

在我们研究应用主题建模技术之前,最后一个预处理步骤是对评论进行矢量化,即我们需要将数据表示为数字形式,以便模型可以处理它们。您可以使用几种表示方法,最流行的方法是单词的 TF-IDF 得分或它们的频率计数(单词袋方法)。在这里,我们将坚持单词袋表示法。我们将使用 Sklearn 的特征提取模块中的CounterVectorizer函数。该函数将文本集合转换为字数矩阵。

主题建模

主题建模是一种无监督的机器学习方法,用于将文本分配到最能表征此类文档的组中。这个概念也可以用来提取文本方面。

Sklearn 包括一个潜在的狄利克雷分配(LDA)算法版本。对于这个概念,我们想提炼五个方面。一旦设置了参数,我们就可以使 LDA 适合文本的矢量化版本。

为了使输出更容易阅读,我们可以将为每个主题生成的相关性分数作为一列附加到每个评论中,并通过取具有最高相关性分数的主题来计算主导主题。

现在我们可以看到评论属于哪个主题(根据其编号)。但是 LDA 从这样的评论中提取了什么关键词呢?我们可以通过调用矢量器的get_feature_names()来查看它们,并使用 LDA 的components_函数来查看它们与该方面的相关性分数:

我们通过在五个方面中取其最高相关性分数来确定一个关键词属于哪个方面。然后,对于每个方面,我们可以按降序排列我们的数据框架,并选择得分最高的关键字。

这五个方面是:

  • 蓄电池充电器
  • 电池组
  • 汽车充电器
  • 手机
  • 屏幕保护器

情感分析

已经开发了各种技术和方法来解决自动识别文本中表达的情感。在这篇文章中,我将使用 Python 情感分析库 VADER 来分类评论是积极的、消极的还是中立的。

一种非常简单的情感分析方法是使用一个单词列表,这些单词已经根据它们的语义取向进行了标记。例如,我们可以假设单词“好”有一个正价,而单词“坏”有一个负价。VADER 使用这种技术,并提供了一个百分比分数,它代表了属于每个情感类别的歌词的比例。它还提供了一个复合得分,计算方法是将每个单词的效价得分相加,然后将得分归一化到-1(最大负值)和+1(最大正值)之间。

VADER 的好处在于我们不需要以任何方式对文本进行预处理。我们可以将原始产品评论输入到 VADER 的情感函数中,并检索每个产品的综合得分。

首先,我们将从 VADER 的 Python 库中导入SentimentIntensityAnalyzer函数。我将初始化 VADER 的情绪分析器,然后迭代数据框架中的评论。然后,我将计算复合情绪得分是高于还是低于阈值,这样我们就可以给它们贴上积极、消极或中性的标签。

从结果中获得的见解

一旦我们获得了每个评论的复合分数,我们就可以对这五个方面中的每一个绘制并计算正面、负面和中性评论的数量。

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

每个方面的正面、负面和中性评论的总数。

该图表显示,每个方面的大多数评价都是积极的。特别是,超过 83,000 条评论的屏幕保护者获得了 49,572 条正面评论。对于一个企业来说,超过 50%的评论表达了积极的情绪,这是一个很好的迹象,表明你的客户对产品感到满意。

我们还能收集到哪些潜在的见解?让我们更深入地了解一下客户在说什么。对于这个概念,我们将使用对屏幕保护的评论。

用于支持情感分析的主要特征之一包括明确传达主观偏见的个体情感词(例如,好、坏)。情感词汇可以从专业词典中找到,在那里它们被映射到自己的情感上。

这些词通常是形容词(如好的,坏的),副词(如愉快地,古怪地),名词(如祝福,垃圾),动词(如爱,恨)。情感也可以通过使用比较词来表达(例如,更好,更差)。为了识别文本中的形容词、副词、名词和动词,我们可以应用词性标注。词性标注是根据单词的定义和上下文,将文本中的单词标记为对应于特定词类(名词、动词、形容词、副词、代词、介词、连词、感叹词、数词、冠词或限定词)的过程。

这里,我们使用 NLTK POS tagger 来标识 POS 标签。由于我们已经有了一个相当大的数据集,我们希望尽可能地自动缩小情感词的范围。在这种情况下,我们能够识别英语和正确拼写的单词,并将它们映射到 SentiWordNet ,这是一个用于观点挖掘的词汇资源。SentiWordNet 给单词分配三个情感分数:积极、消极和客观。

客观性可以定义为在考虑和陈述事实时不受个人感觉或观点的影响。因此,主观性是客观性的对比。在评分方面,我们要识别客观性评分低的词。但并不是所有的主观词都是感情词。

为了从主观词汇中捕获情感词汇,我们使用了另一种词汇资源 WordNet-Affect ,它以分层结构表示与情感词汇相关的情感概念。一旦我们检查了主观词汇是否在 WordNet-Affect 中,我们就可以很有把握地认为这些是情感词汇。基于他们的 SentiWordNet 正面和负面得分,我们还可以将他们分成单独的集合,并计算他们在整个数据集中出现的次数。

我们将在单词云中展示结果,单词云是一种简单的数据可视化方式,根据单词在数据中出现的频率,单词以不同的大小显示。单词的大小显示了它在评论中出现的频率。

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

正情词云

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

负面情绪词云

基于这两个词云,很明显,评论中最常见的正面和负面情绪词分别是快乐担忧T6。对于一个企业来说,同样,把快乐作为最流行的积极情绪词是令人放心的!

“我爱这个案子!太漂亮了。我喜欢这款保护套的触感,因为它有橡胶。很开心!”

但是负面情绪的话可能会令人担心。在浏览了包含担心的评论后,我们可以注意到,它们出现的大多数是在否定词“*没担心”*或“*别担心”*之后。否定在情感分析中起着重要的作用,因为它可以逆转情感词的极性。否定词如“not”或“never”通常被认为是停用词,它们在预处理过程中被移除,并影响情感词的极性。这是未来需要考虑的一个重要问题。

下面的评论举例说明了一个例子,其中出现了评论中第二常见的负面情绪词仇恨:

“我讨厌屏幕保护器。讨厌它们,因而很少使用它们。它们要么很难安装,要么让显示器看起来像垃圾,要么两者兼而有之。”

估计这个人不喜欢屏幕保护…

结论

那么,我从这个分析中学到了什么?

传统的主题建模技术可以用来成功地从文本中提取方面。像许多数据科学问题一样,问题的核心任务之一是数据的预处理。这对于情感分析结果具有特别的影响,其中移除特定的停用词可能会影响否定的识别,从而影响所表达的真实情感。

对于完整的笔记本,请查看下面我的 GitHub repo:

https://github.com/LowriWilliams/Aspect_Sentiment_Analysis

如果你对更多的主题建模帖子感兴趣,我最近写了关于确定给定主题的更有意义的标题。你可以在这里阅读:

🗣️ 主题建模:超越令牌输出

情感分析:习语及其重要性

原文:https://towardsdatascience.com/️-sentiment-analysis-idioms-and-their-importance-2f547f2e646c?source=collection_archive---------19-----------------------

习语在情感分析中的作用研究

注: 本文讨论的方法背后的方法论源于我的博士论文,可以在这篇 学术论文 中找到。

介绍

情感分析(或观点挖掘)旨在自动提取和分类文本中表达的情感(观点的主观部分)和/或情绪(感觉的投射或显示)。

我们用几种语言特征来表示文本中的情感。特征的形式可以是单个单词(uniGRams)、短语(bigrams)和更长的短语(n-grams)、表情符号(例如:)通常用于表示积极的情绪)、俚语(例如 chuffed、do one’s nut)、缩写(例如 great — GR8)、拟声词元素(例如 gr、hm),以及大写字母、标点符号(例如!!, ?!),以及字母的重复(如 sweeeeet)来强调情感。这些特征通常从文本中提取出来,并呈现给机器学习模型,这些模型经过训练,可以根据文本中包含的特征对文本中表达的情感进行分类。

尽管这些特征在情感分析中得到了广泛的应用,但是忽略习语作为特征的影响却很少被关注。在这种情况下,这篇文章通过比较两种最先进的工具在有习语和没有习语时的性能,研究了将习语作为特征包含在情感分析中的重要性。实现这一点有两个要求:1)需要识别与习语相关联的情感,以及 2)需要自动识别文本中的习语。

什么是成语?

在进入技术层面之前,我们先来定义一下什么是成语。

成语通常被定义为多词表达s(由至少两个词组成的表达或短语)。但是使它们与其他短语不同的是,它们的整体意思不能从构成习语的每个单词的字面意思中猜测出来。例如,离开水的鱼是用来指在某个特定情境下感到不舒服的人,而不是它的字面意思。下图提供了英语习语的其他例子。

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

卡普兰关于货币和金融的习语示例

但正因为如此,习语对语言学习者来说是一个挑战。因此,相对于学习它们的结构而言,它们和它们的意义被教授和记忆是很常见的。

为了将习语与其他短语和谚语区分开来,可以考虑以下属性:

  • 惯例:一个习语的整体意思不能(完全)从组成它们的每个单词的字面意思中预测出来。
  • 不灵活:它们的语法是受限制的,也就是说,它们的构成方式没有太大变化。
  • 比喻:它们通常具有源于隐喻、夸张和其他类型比喻的比喻意义。
  • 众所周知:它们通常描述一种反复出现的社会状况。
  • 非正式:它们与不太正式的语言如口语联系在一起。
  • 影响:他们通常暗示对某事的情感态度,而不是中立的态度。

最后一个属性, affect ,意味着习语本身可以用于确定一段文本中表达的情感。例如,“我对结果感到欣喜若狂”表达了一种积极的情绪。

数据收集

风格

为了使用习语作为情感分析的特征,我们需要更多关于它们潜在情感的信息。在这种情况下,我们求助于 Learn English Today 网站,该网站按主题整理了 580 个习语,其中许多可以直接(例如快乐、悲伤*)或间接(例如成功、失败)映射到一种情绪。我们特别关注与情感相关的习语,因为它们预计会对情感分析结果产生一些影响。我们从总共 60 个可用主题中选择了 16 个,并在下表中列出了相关习语的数量。*

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

跨主题的习语分布(表 1

文集

除了一系列习语,我们还需要它们在上下文中使用的例子。在这种情况下,我们搜索了英国国家语料库(一个从各种来源收集的书面和口头英语的大型文本语料库),寻找在不同上下文中使用的 580 个习语的例子。总的来说,我们收集了 2521 个句子,其中包含一个可以与习语匹配的表达式。

在大多数情况下,习语都有与之相关的比喻意义。但在其他情况下,他们传达的是字面意思。从这个意义上说,有些句子是误报的。例如:

“威尔士农民的儿子已经将 1988 年有条件骑师的头衔收入囊中。”

“我看了看袋子,里面全是鱼。”

有必要包括假阳性,这样我们就可以评估错误识别的习语会如何影响情感分析的结果。

手动注释习惯用法

虽然习语已经在许多学科得到了广泛的研究,但到目前为止,还没有一套完整的习语被系统地映射到他们的情感上。这就是为什么习语在情感分析中作为特征的代表性不足的主要原因。

在这种情况下,至少需要 3 名注释者来标记上下文中使用的每个成语示例是否反映了积极、消极、中立或模糊的情绪。同样,要求 5 名注释者断章取义地标记每个习语表达的情感。

为了测量带注释的数据集的可靠性,我们使用 Krippendorff 的 alpha 系数来测量注释者之间的一致性。还有其他协议度量,但是,这种度量被认为是可靠的,因为它考虑了任意数量的注释者(不仅仅是两个)、任意数量的类别,并且考虑了不完整或缺失的数据。

Krippendorff 的α系数根据以下公式计算:

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

克里彭多夫阿尔法系数

其中 Do 是观察到的不一致(两个注释者都同意的项目的比例),而 De 是随机给出注释时预期的不一致。Krippendorff 建议将α = 0.667 作为最低可接受值,以将数据集视为训练模型的可靠数据集。Krippendorff 的α系数 1 表示完全一致,而 0 直观地表示不一致。因此,较高的值表示更好的一致性。

在习语数据集上的一致性计算为 De = 0.606, Do = 0.205,α = 0.662。在上下文中使用的成语语料库的一致度计算为 De = 0.643, Do = 0.414,α = 0.355。

仅习语的一致性(α = 0.662)就说明了它们在某种程度上可以映射到它们的情感极性。然而,在成语的上下文例子上显著较低的一致性(α = 0.355)说明了注释者的主观情感解释。

Krippendorff 的 alpha 系数的值可以使用计算注释者协议的在线工具获得,例如 ReCal ,或者可以在 Python 中实现。

金本位

然后,带注释的上下文实例被用来为情感分析实验创建一个黄金标准(被认为是最有效的标准)。为了创造一个黄金标准,至少 50%的注释者中的相对多数同意的每一句注释都被视为基本真理。也就是说,如果两个注释者同意“好吧,不要打断我的话”反映了负面情绪,而第三个注释者注意到它反映了正面情绪,则与该句子相关联的基本事实被确定为负面的。

习语认可

为了将习语作为情感分析的特征,我们需要在文本中自动识别它们的方法。事实上,大多数习语的结构都是不灵活的,这使得这一点变得可行。**

词汇句法模式(一种基于文本标记和句法结构的字符串匹配模式)可以用于计算建模习语,以自动识别它们在文本中的出现。许多习语是冻结的短语(它们的结构不变),可以通过简单的字符串匹配来识别。但是句法上的变化,如词形变化(如动词时态的变化),也会在习语中出现。这些可以使用正则表达式(RegEx)来建模,例如 spill[s|t|ed] the beans,或者对于更复杂的习语,使用词汇句法模式(例如将 NP 放在 PRN 的位置)。

在这种情况下,习语识别规则被实现为一种简单的模式匹配语言 Mixup (我的信息提取和理解包)中的表达式。例如,下面的语法:

《习语》: =《VB》《PRP》《PRP 袖上的心》

﹔VB ﹔: = wear | wear | wear | wear | wear

〈PRP$〉 ::=我的,你的,他的,她的,它的,我们的,他们的

被用来成功地识别出习语下面这句话中的穿心:

“与其把你的心放在袖子上,而不是放在帽子下面,你不如把它藏起来。”

将模式匹配规则应用于 500 个句子的测试数据集(原始数据集的 40%),其中注释者标记所有习语出现,区分比喻和字面意义。例如:

“唷,那真是一次〈习语〉 千钧一发 〈习语】。”

“他的鞋子擦得锃亮,胡子刮得很干净,而且太骄傲了,不想喝免费的酒。”

识别习语的表现以 97.14%的 F1 分数记录,其中如果建议的文本跨度与注释者标记的文本跨度完全匹配,则认为习语被正确识别。

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

使用 Mixup 识别习语

特征工程

为每个习语收集的 5 个注释用于计算它们的特征向量。每个习语被表示为一个三元组:(正、负、其他),其中每个值表示相应类别中注释的百分比。比如习语穿心收到了 1 个正面,0 个负面,4 个其他注解。因此,它被表示为以下三元组:(20,0,80)。

由于我们想要调查习语作为情感分析中的特征的影响,我们进行了两个实验,其中我们将习语的三重表示与两种流行的情感分析方法的结果相结合: SentiStrengthStanford CoreNLP 的情感注释器

在第一个实验中,我们使用了 SentiStrength,这是一种词袋方法,它通过聚合单个词的极性来为句子分配情感极性

输入:晚会结束

解析:当事人[1]超过了[1]。

输出:结果= 0,正= 1,负= 1

如给定示例所示,短语 party is over 将被识别为习语,它映射到以下三元组:(0,100,0)表示所有注释者都认为它是否定的。我们将这两个向量相加,为给定的句子创建一个单一的特征向量,如下所示:

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

在第二个实验中,我们使用了作为 Stanford CoreNLP(一套核心 NLP 工具)的一部分分发的情感注释器。该方法使用递归神经网络,通过在 5 点尺度上对每个子树进行分类(非常负面、负面、中性、正面和非常正面),在解析树的所有组成级别上执行情感分析。除了分类之外,它还提供了跨 5 个类别的概率分布,通过将它们转换成 5 维向量,我们在我们的方法中将其用作特征。如前所述,习语聚会结束了将被识别,并且其三元组被附加以创建给定句子的单个特征向量,如下所示:

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

对于这两个实验,为每个句子产生的特征向量与它们的基础真实类标签连接在一起:

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

情感分类

一旦我们将习语和习语的上下文实例作为特征向量来表示和组合,我们就使用一套流行的机器学习软件 Weka 来训练分类器并进行分类实验。我们基于对训练数据集(原始数据集的 60%)的交叉验证实验的结果来选择机器学习方法。贝叶斯网络分类器优于其他方法。

分类性能根据三个指标进行评估——精确度§、召回率®和基于真阳性(TP)、假阳性(FP)和假阴性(FN)数量的 F1 分数。

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

使用 SentiStrength 作为基线方法的评估结果

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

使用 Stanford CoreNLP 情感标注器作为基线方法的评估结果

结论

那么,我们从这个分析中学到了什么?

我们证明了习语作为情感分析特征的价值,通过表明当习语存在时,基于习语的特征显著地改善了情感分类结果。F1 分数的整体表现在一个实验中从 45%提高到 64%,在另一个实验中从 46%提高到 61%。

下一步是探索如何使用正则表达式在 Python 中实现习语识别规则。这是为了使习语识别规则更易于使用并且与使用 Scikit-learn 构建情感分类器兼容。

对于完整的数据集和混淆规则,请查看下面我的 GitHub repo:https://github.com/LowriWilliams/Idiom_Sentiment_Analysis

主题建模:超越令牌输出

原文:https://towardsdatascience.com/️-topic-modelling-going-beyond-token-outputs-5b48df212e06?source=collection_archive---------10-----------------------

关于如何给题目赋予有意义的标题的调查

注: 本文讨论的方法背后的方法论源于 数据创新加速器 之间的一个合作项目,简单地说就是做想法

介绍

我最近面临一项任务,其最终目标是将大量非结构化的句子和短文段自动聚合到相关主题的组中。

在这个任务中,我意识到主题建模方法还没有太多的报道,特别是当试图给主题起一个有意义的名字时。我很快意识到现有的方法有同样的问题;他们使用一系列标记(单个单词)来命名主题。通常由人类解释者来决定,例如,'mouse', 'keyboard', 'monitor', 'cpu'是来自描述计算机部件的一段文本的标记。

这篇文章讨论了关键词提取技术和主题建模的应用,以便给主题起一个有意义的名字。在这种情况下,我将有意义的 T21 定义为不仅仅是一些符号,在这些符号中,读者必须解释它们之间的整体语义关系,以理解整体主题。作为一名读者,从前面提到的例子中,我希望能够知道这个特定的主题是关于'computer parts'的,而不必考虑太多。

数据预处理

Susan Li 是数据科学社区的知名撰稿人。她那篇名为“ 用 NLTK 和 Gensim*”*用 Python 进行主题建模的文章,因其清晰地应用了潜在狄利克雷分配 (LDA),一种广泛使用的主题建模技术,将精选的研究论文转换为一组主题,而获得了一些好评。

有问题的数据集可以在 Susan 的 Github 上找到。它由 2,507 个简短的研究论文标题组成。

在我们开始应用 LDA 主题建模方法之前,让我们先来看看我们需要考虑的预处理技术。像许多自然语言处理(NLP)问题一样,通常要做的第一件事是将文本转换成小写,并去掉文本中的任何标点符号,这样我们就有了一组标准化的字符串来处理。如果我们不删除它们,我们经常会得到重复的字符串集合,它们的不同仅仅是因为它们包含了一些应该被删除的内容。此外,我说“许多 NLP 问题,而不是“*所有 NLP”*问题作为情感分析中的标点符号,一个旨在自动检测一段文本是否表达积极或消极情感或观点的 NLP 问题,是需要考虑的重要问题。作为一个简短的例子,考虑读者如何基于感叹号的过度包含来不同地解释They cut my hair shortThey cut my hair short!!!!的情绪。然而,在应用主题建模时,标点符号是相对无意义的。我们可以通过使用正则表达式来删除它们。我们还想考虑删除字符串两端以及字符串内部可能出现的额外空白。

既然我们的文本去掉了标点符号,我们希望将标题表示为单个单词(记号化),并考虑删除停用词。停用词(如“the”、“a”、“an”、“in”)是提供无意义信息的常用词,通常在预处理阶段从文本中移除。

我们可以使用 Python 的 NLP 库之一自然语言工具包(NLTK)轻松标记和删除停用词。为了说明这一点,我们可以将 NLTK 内置的word_tokenize函数应用于标题。该输出将每个文本表示为一个包含构成标题的每个单词的list。然后我们可以初始化 NLTK 的停止字功能。我注意到现在还没有一个像样的停用词表,很多人和我一样,不得不在原来的列表中添加单词。然后,我们遍历每个列表,删除与停用词列表相对应的词。

最后,我们想看看如何将引理满足应用于每个标题的剩余单词。词条满足考虑了单词的形态分析。为此,有必要拥有详细的字典,算法可以通过这些字典将该形式链接回其所有屈折形式的引理或基础形式(例如,studies, studying共享引理study)。NLTK 包含一个英语词汇数据库。这些单词根据它们的语义关系连接在一起。这种联系取决于单词的意思。特别是,我们可以使用 WordNet,一个词汇之间语义关系的词汇数据库。再一次,我们假设我们想要得到一套描述论文标题的标准化词汇。我们初始化 WordNet lemmatiser,然后应用于列表中的每个单词,用它的 lemma 替换它。现在,输出应该是这样的:

主题建模

现在我们的数据已经处理完毕,我们可以开始研究如何应用 LDA 并将论文标题分组到主题中。在我们这样做之前,还有最后一个预处理步骤,那就是将标题表示为向量,也就是说,我们需要将数据表示为数字形式,以便模型可以处理它们。您可以使用几种表示方法,最流行的方法是单词的 TF-IDF 得分或它们的频率计数(单词袋方法)。在这里,我们将坚持单词袋表示法。我们将使用 Sklearn 的特征提取模块中的CounterVectorizer函数。该函数将文本集合转换为字数矩阵。

Sklearn 还包括一个 LDA 版本。对于这个概念,假设我们想将论文标题分成 10 个主题中的 1 个。一旦设置了参数,我们就可以使 LDA 适合文本的矢量化版本。为了更容易阅读,我们可以将为每个主题产生的相关性分数作为一列附加到每个标题,并通过取具有最高相关性分数的主题来计算主导主题。

太好了!现在我们可以看到标题属于哪个主题(根据其编号)。但是 LDA 给出了什么关键词来描述这些话题呢?我们可以通过调用矢量器的get_feature_names()函数来查看它们:

信息对我们有多大用处?嗯,它不是那么有用,因为有一些主题有相同的关键字,如networkdata。我们要删除那些重复的单词,因为我们希望在给主题分配有意义的标题之前,一个标题只属于一个主题。

为主题指定有意义的名称

现在是有趣的部分。让我们首先将每个主题的令牌输出合并到主数据帧中与该主题对应的每一行。这样,我们就有了一个主要的数据框架。

在我解释代码做什么之前,我们先介绍一下快速自动关键词提取(RAKE)。RAKE 是一个众所周知的关键字提取工具,它使用停用词和短语分隔符列表来检测一段文本中最相关的词或短语。以下面的文字为例:

“关键词提取终究没那么难。有许多库可以帮助你提取关键词。快速自动关键词提取就是其中之一。”

首先,RAKE 将文本分割成一个单词列表,在这个过程中删除停用词。这将返回一个名为内容词的列表。

content_words = [ keywordextractiondifficultmanylibrarieshelprapidautomatic ]

然后,该算法在短语分隔符和停用词处拆分文本,以创建候选表达式。因此,候选关键短语如下:

*Keyword extraction* 终究不是那个 *difficult* 。还有 *many libraries* 可以 *help* 你跟 *keyword extraction* *Rapid automatic keyword extraction* 就是其中之一。

一旦文本被分割,该算法就创建一个单词共现矩阵。每行显示给定的内容词与候选短语中的每一个其他内容词同时出现的次数。对于上面的示例,矩阵如下所示:

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

在矩阵建立之后,单词被给予一个分数,该分数可以使用三种方法之一来计算:矩阵中单词的度(即该单词与文本中任何其他内容单词共现的次数之和),作为词频*(即该单词在文本中出现的次数),或者作为该单词的度除以其频率。*

如果我们要计算示例中每个单词的程度分数除以频率分数,结果将如下所示:

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

这些表达也有一个分数,这个分数是单词的分数总和。如果我们要计算上面粗体短语的分数,它们会是这样的:

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

如果两个关键字或关键短语以相同的顺序同时出现两次以上,则不管该关键短语在原始文本中包含多少停用词,都会创建一个新的关键短语。该关键短语的分数就像单个关键短语的分数一样被计算。

如果关键字或关键短语的分数属于前 T 个分数,则选择该关键字或关键短语,其中 T 是要提取的关键字的数量。对于上面的例子,该方法将返回前 3 个关键字,根据我们定义的分数,它们将是快速自动关键字提取 (13.33)、关键字提取 (5.33)和许多库 (4.0)。

因此,如果我们迭代每个主题,并对这些主题中的原始论文标题应用 RAKE,我们可以提取关键字和短语,以及它们的分数。我们希望能够将使用 RAKE 提取的关键字与 LDA 模型提取的关键字相关联。我们可以将 RAKE 的关键词分成单词和双词,并根据 LDA 的输出屏蔽这些词。我们这样做是因为 RAKE 会提取可能与该主题无关的关键词。

一旦我们过滤掉不相关的关键词,如果我们对它们的得分进行降序排列,我们应该会看到每个主题得分最高的关键词。我们可以把这些得分最高的关键词作为每个题目的主标题。如果有不止一个关键字,我们可以将它们附加在一起,并用分隔符/将它们分开。

剩下的关键词呢?那些也很有用。事实上,根据您试图通过主题建模实现的目标,这些剩余的关键字可以用作主题的子术语。也就是说,这个话题还可能是关于什么的。

我们有很多子术语,所以我们可以通过选择得分高于 10 的关键字来限制它们。让我们用旭日图来展示结果,这样我们就可以看到它的实际效果。

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

不错!我们有 10 个主题,每个主题都有几个子术语。但最重要的是,每个题目都是知识性的!让我们看看观想的粉红色部分。主题是“mpeg 4 avc h 264 视频编码应用”。它有 7 个子主题,都与视频配置框架相关:

“mpeg 可重构视频编码框架”、“使用小波的分布式视频编码”、“基于分布式视频编码”、“可重构视频编码框架”、“达到 100 编码效率”、“帧间视频编码”、“T10”、“T11”高分辨率视频编码。

结论

那么,我从这个分析中学到了什么?

将关键词提取与主题建模相关联是一种非常有用的方法,可以为给定的主题确定更有意义的标题。像许多数据科学问题一样,问题的核心任务之一是数据的预处理。但是一旦做了,而且做得好,结果会很有希望。

我怀疑这种方法也可以用来支持自动确定将数据分成多少个主题。已经有一些方法可以做到这一点,例如在一系列主题上运行 LDA,并将每个模型的最低复杂度视为主题的最佳数量。在这篇文章中,我们手动选择将数据分布到 10 个主题中。但是,如果一个人可以计算在给定的范围内每个主题是否存在关键词,并将具有全套关键词的最高数量的主题作为最佳主题数量,结果可能会很有趣!这是我想进一步调查的事情。

完整的笔记本,请看下面我的 GitHub repo:https://GitHub . com/lowri Williams/Topic _ modeling _ Beyond _ Tokens

1+1=?当因果推理遇到机器学习时更好的决策

原文:https://towardsdatascience.com/1-1-better-decision-making-when-causal-inference-meets-machine-learning-bd3b00d8286b?source=collection_archive---------46-----------------------

双机器学习:使用机器学习(ML)方法估计因果效应的一般框架

近年来,机器学习已经应用于不同的领域,如在线营销和商务,个性化医疗和数据驱动的政策制定。这一巨大的成功使得人们对自主系统做出正确决策的期望越来越高。公司经常使用经典的机器学习工具来解决决策问题,例如在哪里定价,或者营销活动以哪些客户为目标。这引发了当今机器学习的主要挑战之一,即理解因果联系。

决策问题需要因果关系

要做出数据驱动的决策,对因果关系的理解是关键。这里有一个来自我们日常业务的简单例子:**价格弹性。**为产品设定最优价格,公司需要知道在不同(假设)价格水平下会卖多少,这就是需求的价格弹性。

如果你是一个 ML 从业者,一个经典的 ML 算法,以价格水平作为一个特征来预测销售结果,可能是你的首选。然而,在实践中,这种方法不能简单地给出价格对销售的因果影响。下面的情节展示了“为什么”——*预测和因果推理是截然不同的(尽管密切相关)问题。(Athey,2017,第 484 页)*左手边,是预测问题,我们在寻找价格和数量的相关性。在右边,虚线是反事实,即如果我改变价格,给定产品的销售额是多少。尽管有积极的联系,因果关系是负面的。如果我们提高价格,数量就会减少。

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

预测(左)与因果推理

正如上面的例子和许多其他例子在 Athey,S. (2017)中描述的那样。超越预测:使用大数据解决政策问题。科学 335,483–485机器学习模型不是为了估计因果关系而建立的。应用机器学习的现成预测方法会导致对因果影响的有偏估计。另一方面,传统的因果推理需要对模型的函数形式进行强有力的假设。如果我们错误地指定了函数形式,我们最终会得到有偏差的估计。因此,可以修改现有的机器学习技术,以利用机器学习的优势从数据中学习条件期望函数的形式——双机器学习的诞生

两全其美的通用框架

有许多研究人员在因果机器学习领域开发方法。我对双机学习特别感兴趣,因为它的通用性和简单性。它可以与惩罚方法、神经网络、树算法和集成方法结合使用,并且易于操作。让我告诉你这有多简单:

假设我们有几组具有重要特性 X 的产品,我们用 P 来表示价格,Y 是需求响应(销售)。我们然后:

  1. 在 X 上回归 Y,并计算 Y 与模型中 Y 的预测值之间的差值(即残差),我们称之为 Y_res。
  2. 我们类似地回归 X 上的 P,并计算 P_res,即 P 与模型中 P 的预测值之间的差值。
  3. 最后,我们在 P_res 上回归 Y _ RES。P _ RES 上的结果系数是 P 对 Y 的因果效应的点估计。

为了得到一个公正的估计。你需要在每个步骤中应用交叉拟合。更具体地说,您应该:1)将您的数据随机划分为两个子集 2)在第一个子集中拟合两个 ML 模型 3)使用我们在第一个子集中拟合的模型估计第二个子集中的系数 4)检查 1 到 3,但在每个步骤中翻转子集 5)平均系数,这将是无偏估计

这不是简单明了吗?!如果你仍然对如何实现它没有信心,我推荐一个很棒的 python 包,叫做 econML 。它包含了许多前沿的因果机器学习作品,double ML 就是其中之一。以下是该包的代码片段:

 est = LinearDMLCateEstimator(model_y=MultiTaskElasticNetCV(cv=3, tol=1, selection='random'),
                             model_t=MultiTaskElasticNetCV(cv=3),
                             featurizer=PolynomialFeatures(1),
                             linear_first_stages=**True**)
est.fit(Y, T, X, W)
te_pred = est.const_marginal_effect(X_test)# Reference: [https://github.com/microsoft/EconML/blob/master/notebooks/Double%20Machine%20Learning%20Examples.ipynb](https://github.com/microsoft/EconML/blob/master/notebooks/Double%20Machine%20Learning%20Examples.ipynb)

其中 Y 是结果,T 是治疗,X 是特征,W 是共同创始人。这个包可以让你把不同的机器学习模型嵌入到它的 double ML 类中,超级方便。

在这篇文章中,我介绍了因果关系和机器学习的一些基本概念。此外,我还引入了一个广义 ML 框架来估计因果效应。您可以将这种方法应用到您的工作或其他数据科学项目中,以帮助您获得最佳控制,从而更快地获得正确答案。

我计划分享更多关于这种方法的理论,这样你就能更好地理解为什么以及如何推进这种方法。

参考:

  1. 爱丽丝(因果关系和经济学的自动学习和智能)——微软研究院
  2. 对随机实验中异质治疗效果的一般机器学习推断

1.Apache Spark 简介

原文:https://towardsdatascience.com/1-introduction-to-apache-spark-299db7a4b68d?source=collection_archive---------17-----------------------

理解大数据,探索 Spark 性能优化

开始探索 Spark 性能优化新系列的启动帖子

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

照片由 NASAUnsplash 上拍摄

Apache Spark 是大数据领域的一个流行框架。由于我有 Python 和 SQL 编码的背景,我很快就掌握了 Spark 的使用方法。然而,由于不了解这些机制,我在开始时经常感到困惑。我以前在单机上运行代码的经验向使用集群的转变,加上处理的数据大小变化从 MB 向 GB(甚至 TB)的转变,促使我开始学习 Spark。我将在这个系列中讨论我对 Spark 性能优化的探索,从第一篇介绍文章开始。这篇文章将涉及一些与 Spark 相关的关键概念、API 和工具。

事不宜迟,我们开始吧!

Spark 是一个分布式集群计算软件框架。它提供了简单的 API 来计算大量数据,而最终用户几乎不需要了解跨机器的任务和资源管理,这些都是由 Spark 在幕后完成的。

1.分布式计算

要实现分布式计算,需要在一个机器集群上进行资源和任务管理。资源管理包括为当前任务获取可用的机器,而任务管理包括协调集群中的代码和数据。

Spark 应用程序由驱动程序组成,在集群上执行并行计算。为了启动 Spark 应用程序,在主机上运行的驱动程序将首先启动一个SparkContext对象。这个SparkContext对象将与一个集群管理器通信,这个集群管理器可以是 Spark 自己的独立集群管理器、Mesos、YARN 或 Kubernetes,以获取这个应用程序的资源。然后,SparkContext对象将把应用程序代码和任务发送给工作节点。

对于一个应用程序,一个 worker 节点可以有多个执行器,这取决于该 worker 节点上可用的 CPU 数量。在应用程序的计算过程中,每个执行器将数据保存在内存或磁盘存储器中,并运行任务。这样,执行者就相互隔离了,同一个应用程序的任务并行运行。

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

火花簇模式概述

2.弹性分布式数据集(RDD)

是 Spark 中的核心抽象,代表弹性分布式数据集。它能够将大数据分割成适合每台机器的较小数据,因此计算可以在多台机器上并行进行。此外,rdd 会自动从节点故障中恢复,以确保存储的弹性。

HDFS (Hadoop 分布式文件系统)是我在使用 Spark 时经常碰到的另一个重要概念。尽管 RDD 和 HDFS 都是关于弹性分布式存储的,但它们是为处理不同的问题而设计的。RDD 的弹性观点指的是计算失败的自动处理。虽然 HDFS 是关于存储管理的,但它是为处理存储故障而设计的。

3.Spark APIs

Spark 提供了三个 API:data framesDatasets。所有这三个 API 都确保了分布式、弹性的数据计算,但是它们适用于不同的应用场景。****

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

三个 Spark API

RDD 是 Spark 提供的底层 API,它支持非结构化或半结构化数据的操作。使用 RDD 就像告诉 Spark 如何执行任务,而不是简单地告诉 Spark 执行什么任务。因此,在这三个 API 中,RDD 提供了最好的编码灵活性和数据控制。然而,与此同时,在没有利用 Spark 内部优化的情况下,一个好的 RDD 大师对程序员的经验提出了更高的要求。

除了低级的 RDD API,Spark 还提供高级的 DataFrames API。数据框架强调数据结构。因此,DataFrames 对有关系数据库经验的程序员来说是友好的。当使用 DataFrame 时,感觉非常类似于使用 Pandas DataFrame 或 Excel 电子表格,但 Spark 在幕后处理集群计算。

如果我们说 RDD 和数据框架 API 位于倾斜的两侧,RDD 位于灵活的低级控制一侧,数据框架位于简单的高级编码一侧,那么数据集 API 位于其他两个 API 的中间。在 DataFrames API 之上,Datasets API 强加了类型安全以避免运行时错误。

RDD 和数据集 API 都需要类型安全,并且只支持 Java 和 Scala。但是 DataFrame API 支持动态类型语言,比如 Python 和 r。

Jules Damji 有一个关于 RDD、数据框架和数据集的精彩博客。如果你有兴趣,别忘了去看看。

4.Spark SQL

Spark SQL 是 Spark 处理结构化数据的模块。

Spark SQL 使用两种结构化 API,即数据集和数据帧。利用仅在数据集或数据帧中可用的模式信息,Spark SQL 代码以声明的方式告诉 Spark 做什么,而不是在使用低级 RDD API 时告诉 Spark 如何做。这样,用 Spark SQL 编写的代码受益于 Spark 的 catalyst,它优化了性能。因此,使用 Spark SQL 和结构化 API 更容易编写高性能代码。

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

Catalyst 优化 SQL 查询性能

使用 Spark SQL 和 DataFrames API 相当于在关系数据库上运行 SQL 查询。常用的 SQL 函数,如 filter、join、aggregation、window 函数等,在 Spark SQL 中也有。Spark SQL 和 DataFrames API 支持几种编程语言,包括 Python、R、Scala 和 Java。

Spark SQL、 PrestoHive 都支持使用 SQL 语法查询驻留在分布式存储中的大规模数据,但用于不同的场景。

Spark SQL 是 Spark 中的核心模块,而 Presto 在 Hadoop 生态中。Spark SQL 强调计算,通常用于大规模 ETA 和流水线。然而,Presto 强调查询,更常用于特别分析。Spark SQL 和 Presto 都在内存中计算。当谈到内存短缺时,Spark SQL 允许溢出到磁盘中,而 Presto 将遭受 OOM 问题。Spark SQL 中也考虑了容错,但 Presto 中没有。

Hive 是一个数据仓库软件,管理 Hadoop 生态系统中的大规模结构化数据。Hive 查询可以通过 Spark 或 MapReduce 来执行。Hive 有自己的 SQL 引擎,名为 HiveQL。正如我们上面提到的,Spark SQL 是 Spark 处理结构化数据的模块。类似地,Hive 是 Hadoop 处理结构化数据的模块。

总结

在这篇文章中,我讨论了 Spark 的一些基本概念。尽管高级 DataFrame API 和 Spark SQL 使得编写高性能代码更加容易,但是理解 Spark 的工作方式有助于进一步提高性能。在下一篇文章中,我将以 YARN 为例,讨论如何使用 YARN web UI 理解 Spark 资源和任务管理。如果你对本次探索星火性能优化系列感兴趣,敬请关注!

1 个破坏你生产力的错误

原文:https://towardsdatascience.com/1-mistake-ruining-your-productivity-ae6e52ef2693?source=collection_archive---------53-----------------------

改变这一习惯,在进行下一次分析时提高你的效率。

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

照片来自约书亚·科尔曼Unsplash

完成分析后,不要乱扔笔记本。当你开始下一个项目时,它会毁了你的工作效率。当我从事不同的数据科学项目时,我回头看我创建的笔记本,并想,“这些代码可以重用吗?”答案几乎总是肯定的!开发一个可重用的代码库将允许你运行重复的分析,并且当你与他人分享你的代码时,使它更具可读性。

什么是代码重用?

代码重用是将现有的代码或笔记本用于新的功能或应用。正如《T4 系统编程》一书中所说的,代码重用有很多好处,它允许更好的代码可读性、更好的代码结构和更少的测试。

保留旧笔记本有助于代码重用。您可以开始看到您正在重复的代码模式,并使用它们来开发函数或类。这种重构工作将帮助您在避免重复的同时改进代码。您将拥有更多可维护的功能,这些功能在将来需要时更容易更新。当您创建这些函数时,您可以开始合并单元测试来验证您的函数是否正常工作。单元测试是一项有价值的工作,通过向您展示您的功能是否产生了预期的结果,有助于避免将来出现问题。

为什么要实践代码重用?

通过创建函数/类在以后的项目中使用的代码重用是一种有价值的技术,它将帮助您在运行您的分析时变得更有效率并节省时间。正如 Matlab 关于代码重用的文章中所讨论的,代码的模块化也将使多个个体能够容易地使用相同的功能。如果您决定为您的数据科学项目创建您的软件库,您会有许多代码重用的例子。这个库将包含许多函数和类,负责数据科学工作的不同方面。

学习使用可重用和面向对象的代码也将允许您使用自定义实现来实现新的行为。例如,您可能会发现自己使用的数学库不包含您需要的函数或以特定方式行动的能力。学习重用代码和用 OOP 编写将允许你扩展库的功能,使之适合你的用例。

Thomas Huijskens 提出了一个很好的观点,即你的代码应该可以投入生产。当您想要重新运行一个分析时,学习创建函数和清理代码对您也是有价值的。如果你开发了一个有用的分析,你会想把它展示给不同的管理层或者推动一个业务单元的行动。在这种情况下,您的代码应该易于重新运行和维护。在函数中清理代码并使其可读将使您在下次需要分析时更容易重新运行和重新创建结果。您可能会发现,随着您继续开发,您的分析和可视化会推广到其他团队或客户。编写函数将有助于使您的分析可重复,代码可读。

最后的想法

保留您的旧笔记本并开发可重用的代码将有助于提高您在数据科学方面的生产力。创建一个可重用的代码库将允许您运行重复的分析,并在与他人共享您的代码时使其更具可读性。您的代码应该是生产就绪的,这样任何人都可以从您停止的地方开始,重新运行分析,并理解代码。当您开始下一个项目时,考虑使用函数,编写清晰的文档,并找到高重用性的领域。

附加阅读

  • Richard John Anthony,在系统编程,2016 第 7.5.4 章机会出现时重用代码
  • Matlab 什么是代码重用?
  • Arho Huttunen 对代码重用的误解
  • 对于数据科学家来说,唯一有用的代码是 Thomas Huijskens 的生产代码

如果你想阅读更多,看看我下面的其他文章吧!

[## 停止浪费你的时间,咨询一个主题专家

在从事数据科学项目时,请一位主题专家来审查您的工作可能会有所帮助。

towardsdatascience.com](/stop-wasting-your-time-and-consult-a-subject-matter-expert-f6ee9bffd0fe) [## 每位数据科学工程师的前三本书

我放在书架上的伟大资源,我喜欢介绍给软件工程师和数据科学家。

towardsdatascience.com](/top-3-books-for-every-data-science-engineer-e1180ab041f1) [## 在数据科学中我们需要面向对象编程吗?

让我们讨论一下作为一名数据科学家转向面向对象编程的利弊。

towardsdatascience.com](/do-we-need-object-orientated-programming-in-data-science-b4a7c431644f) [## 采用现有数据科学项目的成功关键

代码本来可能不是你的,但现在是你的了。那么接下来呢?

towardsdatascience.com](/keys-to-success-when-adopting-a-pre-existing-data-science-project-9f1225fb0275) [## 从一年的会议中吸取的 7 大教训

日历上有如此多的会议,有时 it 会觉得它们没有达到应有的效果。

medium.com](https://medium.com/the-innovation/top-7-lessons-learned-from-a-year-of-meetings-cbf419910649)

为您的数据科学项目查找任何数据集的 1 个技巧

原文:https://towardsdatascience.com/1-trick-to-find-any-dataset-for-your-data-science-project-391c365359f4?source=collection_archive---------48-----------------------

使用谷歌数据集搜索引擎搜索和贡献数据集

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

弗兰基·查马基在 Unsplash 上拍摄的照片

互联网上有数千个数据集储存库,提供对数百万个数据集的访问。任何人工智能项目的一个共同要求是存在大量数据来训练模型,数据越多越好。每个有抱负的数据科学家都面临着为他们的数据科学项目找到正确数据集的问题。

也有很多开源数据集可供不同组织、大学和政府研究,你可以直接访问他们的网站。您可以在下面找到其中的一些:

一些开源数据集来源:

  1. 各种数据集由 ka ggle:【https://www.kaggle.com/datasets
  2. https://archive.ics.uci.edu/ml/index.php UCI 的 ML 数据集:
  3. 美国政府开源数据:https://www.data.gov/
  4. NOAA 提供全球历史天气和气候数据:https://www.ncdc.noaa.gov/cdo-web/
  5. Qualdl 的金融、经济和替代数据集:https://www.quandl.com/
  6. 英国社会、经济和人口数据资源:https://www.ukdataservice.ac.uk/
  7. 国际货币基金组织贷款、汇率和其他经济和金融指标的时间序列数据:https://www.imf.org/en/Data

有很多网站提供开源数据集。您不必再花费宝贵的时间从多个来源为您的数据科学项目寻找合适的数据集,而是在一个地方找到它们。

谷歌数据集搜索:

谷歌有一个数据集搜索引擎,你可以在那里找到你的数据科学项目的数据集。它索引了数据集上可用的宣传,并在这个 Google 数据集搜索引擎上推荐给用户。

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

(图片由作者提供),谷歌数据集搜索引擎

使用https://datasetsearch.research.google.com/网址访问谷歌数据集引擎。

谷歌数据集搜索可以为你的项目找到合适的存储在互联网上任何地方的数据集。

如何从 Google 数据集搜索中找到数据集:

您可以通过提供支持信息(如名称或描述)来搜索任何数据集。谷歌搜索使用 schema.org 和其他元数据标准向你推荐数据集。

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

(图片由作者提供),在谷歌数据搜索上搜索数据集时的建议

在很高的层面上,谷歌依赖于数据集提供者。它使用可用数据集的元数据,将其与可用的其他资源链接,并建立这个丰富的元数据语料库的索引。

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

(来源),谷歌数据集搜索背后的技术概述

为 Google 数据集搜索贡献您的数据:

您也可以在互联网上公开您的数据集,它可以由谷歌数据集搜索引擎推荐。要在互联网上公开您的数据集,您需要遵循特定的步骤。

  1. 向 schema.org 的添加元数据,读取文档添加元数据。
  2. 验证标记产生了您在结构化数据测试工具中预期的结构化数据
  3. 如果你有多个页面,创建一个站点地图,并将它添加到你的搜索控制台

结论:

使用 Google 数据集搜索,您可以从大量公开可用的数据集中找到适合您的数据科学项目的数据集。谷歌数据集搜索引擎的目标是为发布、消费和发现数据集开发一个生态系统。

参考资料:

[1]谷歌数据集搜索常见问题解答(2019 年 3 月 2 日):https://support.google.com/webmasters/thread/1960710

[2]乔·詹姆斯 Youtube 视频(2019 年 12 月 3 日):https://www.youtube.com/watch?v=1aUt8zAG09E

感谢您的阅读

柏林房租冻结前一周:我能在网上找到多少非法的高价报价?

原文:https://towardsdatascience.com/1-week-until-the-berlin-rent-freeze-how-many-illegal-overpriced-offers-can-i-find-online-6e5511d49e5a?source=collection_archive---------20-----------------------

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

乔纳斯·泰贝在 Unsplash 上的照片

柏林目前的住房状况

搬到柏林后,找到一套价格合理的公寓绝对是最困难的事情之一。为了了解竞争有多激烈,11 月1749 名找房子的人在外面排队参观位于著名的舍内贝格区的一套空置公寓。就在 12 小时前,这套公寓在网上登了广告。

为了阻止不断上涨的住房成本,柏林州政府通过了一项有争议的法律来限制房租。再过一周,2 月 23 日,新法将正式生效。

目前的网上公寓是否遵循租金上限?

作为我的下一个数据科学辅助项目,我决定分析immobilienscout 24上当前的在线房源,看看当前的房东是否已经尊重新的租金上限。不遵守法律会被处以高额罚款:

违反租金上限可能会被处以高达 500,000 欧元的罚款。

我把这篇博客分成三部分,帮助你找到和阅读与你最相关的内容:

  • **第一部分:**一些技术细节和我如何获得数据集
  • 了解更多关于租金上限及其计算方法的信息
  • Part 3: 直奔结果,看我发现了什么。

第 1 部分:在 4 分钟内下载 4040 个列表

有了这个惊人的 scrapy 包,我能够在两分钟之内的两个会话中从网上搜集到总共 4040 个房源。当然,设置蜘蛛花了相当长的时间。

接下来,所有的数据都被加载到一个pandasdata frame中并进行清理。我不会在这里说太多细节,但这是相当多的清洗。

第 2 部分:批量计算新的租金上限

为了计算新的租金上限,我不得不为数据集设计一些特性。不过,首先让我们看看租金上限是如何计算的。

租金上限计算 101

简而言之,新租金上限由以下四个部分计算得出:

  1. 一个基本价格:下面的租金表根据的建筑年份、中央供暖系统(Sammelheizung)和/或浴室(Bad)的存在情况,确定净冷租金可能有多高。

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

柏林租金表,来源:柏林体育场

2。现代设备因素:对于配有现代家具的公寓,如果至少具备以下三个特征,价格将增加 1.00 欧元:

  • 没有门槛就能到达的电梯
  • 安装厨房
  • 优质卫生设备
  • 绝大多数生活空间都采用高品质地板
  • 能耗特征值小于 120 千瓦时/(米·年)

**3。a 地段溢价/扣除:**适用于 a …

  • …简单住宅区,在计算租金上限时,考虑从租金表中的相关租金中扣除 0.28 欧元**。**
  • 中等住宅区扣 0.09 欧元
  • …良好的住宅区将收取 0.74 欧元的附加费。

颇具讽刺意味的是,位置分类至今仍未发布

4。单人或双人家庭住宅:如果居住空间位于不超过两套公寓的建筑中,租金上限增加百分之十的附加费。

如果你把这四个因素加起来,你就得到租金上限。但是,只有满足以下标准,租金才算过高:

考虑到上述四个因素,如果租金比租金表中的相关租金上限高出 20%以上,则租金过高。

如果你在这一点上迷失了,住在柏林,并相当关心你目前是否为你在柏林的公寓支付了太多的费用,试试这个很酷的 计算器 (德语),看看你是否更好地理解了计算。

从 256 个 PDF 页面中提取位置评级

到目前为止,最具挑战性的部分是为尚未发布的位置分类找到代理。在在线计算器中,我看到 2019 年的柏林租金指数被用作代理,所以我遵循了同样的方法。

然而,这个项目最大的挑战是,这些信息是以 PDF 格式发布的,与我实际需要的格式相差甚远。在 tabula 的帮助下,我能够将 256 个 PDF 页面转化为柏林每条街道的 270,068 行位置评级。

最后,合并两个来源中拼写略有不同的街道名称,用fuzzywuzzy变得简单多了。尽管计算量很大,但比任何可以想象的正则表达式模式都要容易得多。

我对租金上限计算的保守假设

在我的计算中,我采用了以下保守假设来计算每平方米的租金上限:

  • 基准表(1) 中相应建造年份的最高价格,假设所有公寓都有中央供暖系统和浴室
  • 假设所有的公寓都有现代设备,那么它们至少符合现代家具的三个标准
  • 2019 年发布的租金指数 PDF 文档是位置评级(3)的一个很好的近似值
  • 所有的公寓都是非独栋住宅,因为我只租了几套公寓

下面提供的信息和分析的正确性和完整性的免责声明:虽然我非常小心地进行了这个项目,但是我对下面提供的结果的正确性和完整性不承担任何责任。

第 3 部分:分析结果

从大约 4k 个搜索到的房源中,有 1687 个房源(41.6%)有 2014 年之前的建造年份和地址信息,以便计算租金上限。

令人震惊的是,在 1687 个房源样本中,有四分之三的分析房源价格高于允许的租金上限。

在 ImmobilienScout 24 网站上,四分之三的分析租赁房源都超过了租金上限。

如果所有这些公寓都以当前的非法价格出租,所有租户每月将比根据新法律多支付 463,059.79€:

数据集中所有非法定价房源的租金构成。

在整个数据集中(信息充足的房源),月平均冷租为 15.12€/平方米。根据新的法律,这一平均值将降低 39%,至平均 9.21€/平方米

仔细看看每平方米的冷租金超出新租金上限多少就会发现,例如1272 个房源中有 386 个在 0.50€到 2.49€之间的价格过高

仔细观察不同地区的价格变化,可以发现中部地区,如 Mitte 或 Tiergarten,与更偏远的地区,如 Hellersdorf 或 Marzahn 相比,平均价格下降幅度更大

当前平均价格和新租金上限之间的租金比较。

从当前冷租金/平方米到新计算的租金上限/平方米的百分比变化

最后,在我的 1272 套高价公寓的小样本中,我看了看谁在 ImmibolienScout24 上发布了最多的房源。不出所料,许多较大的房地产公司名列榜首。然后,我计算了他们目前的平均非法价格/平方米,并与我计算的平均租金上限进行比较,以找出他们对所有房源的平均超额收费**。结果如下所示,Berlin Haus Verwaltung GmbH以 29 个房源位居榜首,平均收费10.60€/平方米,高于新租金上限允许的价格。**

所有房地产公司的比较,以及他们在新租金上限下的超额收费。

最后,我想展示一个具体的 的例子 ,把我们带回到这篇博文的开头,我们从舍内贝格一个拥挤的公寓开始。过滤我关于租金超额价格最高的舍内贝格的数据集,发现在新法律下,人们每月可以节省 406.93€,将租金从 650.00€减少到 243.07€。

舍内贝格公寓租金构成示例

为了再次检查我的结果,我把数据输入在线计算器,得到了同样的结果。

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

来源:https://www . mietendeckelrechner . de

我希望你喜欢这篇博文。如果你目前住在柏林,想知道你是否为你的房子付了太多钱,免费看看这个 整洁的计算器

如果我有更多的时间**,我可能会自己开发一个小的网络应用**,任何人都可以类似地发布一个在线房源的链接自动计算租金是否超出法律规定。

项目开始一年:佐治亚理工学院 OMSA 分校 vs 加州大学伯克利分校 MIDS 分校

原文:https://towardsdatascience.com/1-year-into-the-program-georgia-tech-omsa-vs-uc-berkeley-mids-c1675356d531?source=collection_archive---------6-----------------------

哪项投资值得你花费时间和金钱?

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

第一轮。战斗!(图片由作者提供)

我正与我的好朋友和前同事 John Lee 合作,将我们在一年后的经历与两个不同的数据科学/分析在线硕士项目进行比较。

我们将这篇文章分成 3 个部分:1)分享一些关于我们自己的信息,2)在 2 分钟中总结 2 个项目,以及 3)回答 10 个关于我们现在了解的项目的问题。

关于你的参赛者

2019 年秋季同时开学,约翰报名参加了加州大学伯克利分校数据科学硕士(MIDS) 项目,而我报名参加了佐治亚理工在线分析科学硕士(OMSA) 项目。

为了搭建舞台…

  • 我们的年龄(28-30 岁)和人生阶段(与不同城市的配偶结婚,没有孩子)非常相似。
  • 我们俩有着相似的职业道路(之前是环境工程专业的本科生,后来成为暖通空调/能源效率专业的机械工程师)。在某个时候,我们是两个不同组织的同事。我们有大约 6-7 年的工作经验。
  • 我们都在日常工作之外兼职学习(不是数据科学家)。
  • 开始这个项目时,我们都没有什么编程或数据科学经验。
  • 我们都完成了项目中的大部分基础课程。

为什么这些相似之处是相关的?这证明了我们经验中偏见的一些背景。

两分钟之内,一年的项目看起来像什么?

我们认为“项目一年”相当于两个学期(秋季和春季)。虽然,严格来说,MIDS 每年有三个学期。MIDS 需要暑期班,但 OMSA 不需要。

免责声明:请记住,你应该参考官方学校的网站(盖茨 OMSAUCB MIDS )获取最新信息。

盖茨 OMSA

选修的课程:12 门课程中的 3 门

a.ISYE 6501 —分析建模入门(难度:3/5,平均时数/周:10–15)
b . MGT 8803—商业分析入门
(难度:2/5,平均时数/周:5–10)
c . CSE 6040—数据分析计算入门
(难度:3/5,平均时数/周:10–15)

还有两门课程被认为是 OMSA 学生“必读”课程清单的一部分:d . MGT 6203-商业数据分析,和 e. CSE 6262 数据可视化和分析。

**期限:**您有最多 6 年的时间来完成该计划。每学期最多可以上 2 节课(如果想上 3+节课,联系项目)。我发现每学期 1 节课最适合我的工作生活平衡。如果你需要选择退出一个学期(秋季或春季),你需要联系该计划。

费用: (3 个班)(3 个单位/班)($275/单位)+($304 校园费/学期)* 2 个学期= 3083 美元。

**资源:**面向 GT 学生的典型在线资源工具(图书馆、项目、技术折扣等)。)、 Slack 频道(需要 gatech.edu 的邮箱地址或者给 Slack 的主人)、 Reddit

**录取率:**校内版的录取率更低。OMSA 录取率在 2017 年约为 24–27%,在 2019 年移至~ 70%(more GaTech stat)。

**社区规模:**2019-2020 年约有 ~2.8k 在读学生。截至 2020 年 5 月,我们在 OMSA 研究 Slack 频道和 Reddit 上大约有 3.7k。

**加入计划前的准备:**我考了 UCSD edX Python 的数据科学,交了 350 美金的验证证书。我还兼职做了一些项目。项目+ edX 课程可能总计约 80-100 小时。

加州大学伯克利分校 MIDS 分校

参加的课程:9 门课程中的 4 门

a.W200 —数据科学的 Python 基础
(难度:3/5,平均小时/周:18)
b. W201 —数据和分析的研究设计应用
(难度:2/5,平均小时/周:10)
c. W203 —数据科学的统计学
(难度:4/5,平均小时/周:20)
d. W205 —数据工程基础
(难度:3/5,平均小时/周:8)

还有一门额外的基础课:e .应用机器学习。点击查看课程列表

持续时间: MIDS 要求夏季学期作为最长 8 个学期(包括夏季学期)的一部分才能毕业。MIDS 允许学生因紧急情况而休学一学期。

费用: (4 个班)* (3 个单位/班)(2573 美元/单位)+(728.50 美元校园费/学期) 2 个学期+ $95 (1 次)= 32428 美元。(官方网站)

资源:任何伯克利学生都可以使用的典型在线工具(图书馆、项目、技术折扣等)。)、WeWork Access(超级酷)、Slack Channel(一旦被该计划接受)、Zoom、通常每年 3 次的面对面会议(但是,学生只需参加一次,500 美元/注册+差旅费)

录取率:不知道。一份 2018 年 MIDS 项目状态报告披露了一些数字,例如该项目每年接受约 150 名学生,目标是增加到 450 名。

**社区规模:**截止 2020 年 5 月,我们的 Slack 频道约有 880 名会员,官方学堂资讯频道有 2.5k。一旦你被该计划接受,你将需要 ischool.bekeley.edu 帐户加入。

**加入计划前的准备:**我上了数据科学基础、Python 编程、计算机科学导论、算法导论等在线课程。除了准备 GRE 考试(不再需要),个人准备的总时间大约是 200 小时。

1 年后我们学到的 10 件事

完成了秋季和春季学期后,我们对各自项目的理解肯定比最初申请时更加清晰。

1.课程如何“体验”?

  • 盖茨 OMSA: 班级规模从每班 400 名学生到超过 1000 名学生不等(如果算上 Edx micro master/验证过的学生)。在基础课程之后,这个数字可能会更低。Piazza(官方课程论坛)有时很难跟进每个帖子,但幸运的是,GaTech 和 Edx 学生有单独的论坛。讲座是预先录制好的。成绩在很大程度上基于考试(理解这一点有一些变化)。总的来说,我认为这类似于我在大学时的传统课堂经历。
  • 加州大学伯克利分校 MIDS 分校: 班级规模低于 20 人/班讲座正在现场直播并录制成绩很大程度上基于项目。

2.你每周花多少时间?

  • 盖茨 OMSA : OMScentral 是一个很棒的班级复习网站,在这里你可以更广泛地了解时间承诺和难度因班级而异。就我个人而言,我接近大多数课程的平均水平,平均每周 10-15 小时。
  • 加州大学伯克利分校 MIDS 分校:课堂讨论主要在 Slack 上进行。我平均每周花大约 15 个小时来阅读至少 50%的指定阅读材料。

3.关于这个项目,我们最惊讶的是什么?

  • 盖茨 OMSA :绝对有一门**【艺术】****【科学】**一样多的分析学。另外,并不是所有广告的课程每学期都有,尤其是计算方向。你也不能参加 OMSCS 的课程,除非它们是通过 OMSA 项目提供的,这个项目可能每个学期都有变化。
  • 加州大学伯克利分校 MIDS 分校:我很惊讶同学们是如何做到全职工作和管理工作量的。这个在线项目也比我预期的要好很多。首先,我认为在线课程与 Udemy 上的典型在线课程没有太大区别,在 Udemy 上,你可以观看讲座,做一些作业(不太关心质量)。然而,现场会议和与同学在项目上的合作会激发你的积极性。此外,与他人一起努力完成工作比独自上课教会你更多,因为讨论的是你从未想过的问题/话题。

4.你能应用你学到的东西吗?

  • 盖茨 OMSA:我能够比我预期的更多地应用我所学到的东西。例如,CSE 6040 使我能够在解析 pdf 文件时应用 regex。MGT 8803 帮助我理解了会计和预算中支持我的经理角色的财务术语。ISYE 6501 让我准备好不断思考如何将机器学习方法应用于实际问题。
  • 加州大学伯克利分校 MIDS 分校:我的几个同学合作对新冠肺炎数据集进行了探索性分析。统计学课程(W203)教会了我不要盲目相信任何研究。你真的要看看它的方法,自己决定是否有假阳性或假阴性。

5.你最喜欢这个节目的哪一点?

  • 盖特奇·OMSA:我很高兴我接触到了很多基础统计学和机器学习理论。这很重要,因为我可以理解数学证明和论文。我对理解这些材料更有信心,并有动力去寻找潜在的应用。我真的很喜欢活跃的 slack 频道,也喜欢和我当前职业领域之外的人联系。
  • 加州大学伯克利分校 MIDS 分校:作为这个项目的一部分,我真正感激的是在使用数据处理和从数据中获取价值方面获得了信心。从我开始这个项目到现在总共有 180 个。我喜欢学习是渐进的,你学习建立你的环境,学习概念,然后应用到一个项目中。

6.你最不喜欢这个节目的哪一点?

  • 盖特奇·OMSA:有时候会让人感到孤立。
  • 加州大学柏克莱分校 MIDS 分校:学费高昂。

7.到目前为止,你对你参加的课程和/或课程的整体质量感觉如何?

  • 盖茨 OMSA:只要你投入工作,基础课程对初学者来说是友好的。我确实从我上的每一堂课中获益匪浅。另一方面,我确实认为,在以前的学生做了大量的评论之后,项目课程可以得到改进。由于可用性和顺序设计,我很难选择课程。你必须四处打听,才能知道先上哪门课是个好主意。
  • 加州大学伯克利分校 MIDS 分校:基础课程对于数据科学领域的初学者是可行的。但我总是遇到一些同学(他们知道得更多),让我觉得我不应该在这里(冒名顶替综合症)。例如,我已经按照指示干净、清晰地完成了一个数据分析项目的数据流。提交后,另一名同学超越并分享了他们的相同项目,但相反,他们创建了一个攻击僵尸的游戏来生成流数据。看到其他学生所做的真的激励我去尝试更困难的任务。

8.如果时光能够倒流,你还会选择这个节目吗?

  • 盖茨 OMSA :佐治亚理工学院计算机科学在线硕士(OMSCS)是一个非常受欢迎的“哥哥”在线项目。事后看来,我认为我应该选择 OMSCS,因为它更符合我的个人目标,并且在我的舒适区之外。例如,如果你想成为一名机器学习工程师或更多地参与生产管道,Reddit 上的意见建议 OMSCS 可能是一条更好的道路,因为你为开发管道做了更好的准备。我有点担心我将来不会被更认真地对待一个更技术性的角色。尽管如此,我真的很喜欢我正在学习的东西,并计划坚持这个项目。
  • 加州大学伯克利分校 MIDS 分校:是的。我仍然不知道我是否更喜欢其他节目,因为我不知道其他节目会怎么样。无论如何,我很自豪也很高兴成为这个项目的一部分。它非常适合我,一个不知道从哪里开始学习数据科学的人。

9.你的项目的价值因素是什么?

  • 盖茨 OMSA :物有所值的因素肯定是负担能力高声誉的学校。有些课程很有挑战性(20 多小时/周),有些则更灵活(< 20 小时/周)。如果你有策略地选择课程,如果这是你的目标,你可以更快地完成课程(范围从 1200 小时到 2000 小时)。这是一个混合了商业课程的跨学科项目,这可能会给某些雇主增加加分,以资助你的高级学位。
  • 加州大学伯克利分校 MIDS 分校:伯克利 MIDS 分校绝对拥有强大的网络,一个积极上进的同龄人社区,以及在美国西海岸广为人知的名校。虽然除了与课程相关的材料,我还没有与我的网络讨论过其他内容,但我接触过的一些同学都在英伟达(Nvidia)、方(FANG)和其他硅科技公司工作。拥有这样的班级群体的好处是真正看到了他们对家庭作业问题的看法,他们的工作场所会如何处理类似的问题,以及他们在该领域的知识。

10.你对每个项目的潜在学生有什么建议?

  • 盖茨 OMSA : 垃圾进=垃圾出。从数据分析到你从这个项目中得到的东西,一切都是如此。我推荐所有潜在的学生阅读这个 Reddit 的常见问题指南。省省吧。预订它。多读几遍。认真对待先决条件 ( 编码微积分、prob/stat线性代数)用 Jupyter 笔记本(或任何你喜欢的工具)尝试简单的项目( 123 )会帮助你在开始时不那么沮丧。如果你在考虑申请 OMSA 大学,这里是我的博客,告诉你如何申请。
  • 加州大学伯克利分校 MIDS 分校利用你的人际网络。无论是在课堂上还是在职业上,你都可以从他们那里学到很多东西。许多人都是来自加州湾区和科技公司的高水平专业人士。对待你的项目,就好像它们会在你的作品集里展示给招聘经理看一样。不要担心成绩,如果你努力,成绩就会随之而来。更早地进入简单的 DS 项目。学习一些 Linux 命令和 git。一旦开始上课,就会变得很忙。

每个项目都提供不同的体验。不管它们是否适合你,最终还是要由你自己来决定。

如果你正在考虑选择哪所学校,我们希望这能为你的研究和决策过程提供有价值的见解。如果你觉得这很有帮助,或者希望看到更多关于这些在线硕士项目的问题,请鼓掌!😃

请随时在社交媒体上与我们联系:

跟随容闳上 推特Github

Instagram 上关注约翰。领英Github。

10.000 小时的数据科学|熟练掌握

原文:https://towardsdatascience.com/10-000-hours-in-data-science-gaining-proficiency-440387e723c1?source=collection_archive---------41-----------------------

从数据新手到专业人士的路

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

反数字时钟,布拉格犹太市政厅时钟-理查德·迈克尔(版权所有)。

有一种观点认为,练习一件事超过 10000 小时(10000 小时)就能让你对这门学科达到足够的熟练程度。这个概念是基于 M. Gladwell 的《T2》一书《局外人》。所说的 10k 小时是你花在练习或学习一门学科上的时间,直到你掌握得很牢固,可以被称为精通。虽然这个小时数有些随意,但我们将看看如何利用这些小时来精通数据科学领域。

想象一下,这是你在数据学徒之旅中的学习预算。如果我从零开始,这就是我如何花这一万个小时成为一名熟练的数据科学家。

核心模块

数学与 Stat istics: 基础统计学、贝叶斯统计、数据分析导论、一些概率论、基础分析与微积分
数据科学家的主要工作是从问题领域提供数据洞察。牢固掌握数学基础是必不可少的。你可以从现有的大学课程和 Coursera 课程中找到很多优秀的内容。这是开始您的旅程并初步了解统计工作原理的好方法。不过,基础课程是必不可少的,请用真实交易挑战自己。假设是 2500 小时(312 天 8 小时的工作时间)。

分析/统计语言和模块 : R,Python(熊猫),Julia,SAS 。这是你的面包和黄油,可以被视为你统计教育的一部分。这就是边做边学。阅读一本关于 R 的奥莱利的书只会让你到此为止。加载一个精选的数据集,一些挑战和解决一些问题。统计语言存在一个范围。因此,如果你接近科学计算,你可能会考虑朱莉娅。仅有统计分析的另一端是 SAS。有些人认为 R 可以两者兼得。
1000 小时(125 天 8 小时工作制)

多用途编程语言 : Python,Go,Java,Bash,Perl,C++ ,…
这在很大程度上取决于您每天面对的系统。如果你刚开始,选择一门语言并坚持下去。一旦你学会了这个概念,你就会更容易学会不同的语言。我本人在日常工作中非常依赖于 Python 和 Bash 的组合。其他任务需要彻底理解优秀的旧 Java,甚至是 Perl。
2000h (250 天 8 小时工作制)。

数据库技术 : {T-,My-,U-}SQL,PostgreSQL,MongoDB,…
关系型或非关系型数据库是您在生产环境中必须使用的一些系统。了解你的数据是如何存储的,查询是如何运行的,如何撤销一个交易是很有用的。对于以后的工作,你的数据来源可能会有很大的不同,最好有一个基本的了解。
750 小时(94 天 8 小时工作制)

操作系统 : Windows,Linux,MacOS。无论你的工作环境如何:掌握它!知道来龙去脉。这一次你可能需要安装一些非常奇怪的库来解决一个特定的问题(真实故事)。知道东西在哪里以及它们为什么在那里有很大的帮助。了解什么是 SSH 连接,以及如何在不同的系统上运行分析。不在本地机器上运行分析将会在未来的某个时候发生。500 小时(62 天 8 小时工作制)。

ETL/ELT 系统: 这是编程语言、数据库技术和操作系统的混合体。像 SparkHadoopHive 这样的框架为集群计算平台上的数据存储和分析提供了先进的手段。一些公司可能依赖于不同的技术栈,如微软 Azure Systems、谷歌云或 AWS 解决方案。这与数据库技术密切相关,可能已经要求对高级编程语言(如 Java 或 Python)有很好的理解。也有初学者系统,像 KNIME 让你的脚沾水。400 (50 天 8 小时)

你的问题域 :这可能是 Fin-Tech,Bio-Tech,Business Analytics。你应该熟悉你的工作领域。你做的是研发吗?您是否在可视化业务流程和客户行为?不同的领域需要不同的见解。您的数据必须对您有意义,并且您应该能够看到模型输出是在有效范围内还是完全偏离。花绝对*最少 350 小时在你的问题领域。我建议更多。多得多。你可以决定你是想成为万金油还是你所在领域的专家。

350 小时(44 天 8 小时)*

细心的读者会发现,到目前为止,这总共才 7500 个小时。我们现在有一个基础,你可能想从这里进入某个方向。

不同的数据交易——你的个人方向

回到过去,黑暗蒙昧的时代,我们有行会。处理数据的领域也有不同的行业。不同类型的商人解决不同的问题,在这个主题上有不同的文章
以下是这些行业在要求上的不同之处:

  1. **数据科学家:**你做统计和分析,你推出解决方案,部署回答问题和提供见解的平台。干净利落。升级你的统计游戏:+ 200h。也许是一点我们称之为统计学习的 ML+100h 和某种类型的多用途语言,比如 Python、Perl 或 Bash。
  2. 数据工程师:你关心数据。您构建系统,使数据科学家能够有效地工作,并为分析师提供日常面包。你的重点在于底层系统。系统+500 小时,ETL/ELT 系统+200 小时,数据库和编程语言+200 小时。你甚至可以不要过多地参与统计部分(500 小时的纯统计和理论)。
  3. 机器学习工程师:你实现了让奇迹发生的模型。你需要所有的统计洞察力,还需要精通所有的 ML-
    +300 小时 ML,+200 小时 Stats。你还应该精通一种高级编程语言,这种语言首先使得实现 ML 模型成为可能。
  4. 分析师:你从系统中获取数据,让它变得漂亮,便于管理层报告。您需要知道在您的问题领域中什么是重要的,在问题案例中+200h,在数据库系统中+100h。您每天都需要您的 SQL。尽管有各种各样的分析师工作。所以通知自己,继续学习你认为必要的东西。

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

数据科学家的时间和经验与分析师的工作相比。

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

ML 工程师相对于数据工程师的时间和经验。
Math/Stats = Mathematics and Statistics,包括您使用 r 等 stat 语言的工作。
Systems =设置和维护数据系统(例如 ETL/ELT、GC、AWS 等)
DBs =数据库系统(关系型、非关系型)
SWE =软件工程(Python、Perl、Java、Scala、Go、JavaScript 等)
Exp。领域=问题领域的经验。花在这个话题上的时间。

上面的数字说明了典型的职业以及在每个领域可以投入多少时间和精力。这些只是简单的建议,因人而异。例如,我们示例中的数据工程师也可以称为处理大量数据的软件工程师,与软件开发相比,另一个工程师需要更多的数据库工作经验。

就像生活中的一切一样,界限是模糊的。有时数据科学家也做 ML 工程师的工作,反之亦然。请记住,10k 预算是你的入门,给你一个进入该领域的方向,而不是你的专业。因此,你拥有世界上所有的自由,最终去攻读你一直想要的超心理学博士学位。

一万小时是多少工作

一万小时是一段很长的时间,如果你要工作一年,那就是每天 27 小时,这对普通人来说不太可行。
因此,更好的 3 年约 9 小时的工作可能更适合。
如果你在兼职学习,并希望在未来的某个时候换一份工作,那么再过几年你可能就万事俱备了。重要的是要和它保持一致。几年后,每天几个小时的高质量锻炼会让你受益匪浅。

关键要素

没关系,如果你在大学、在学校、在研讨会或在家里花了一万个小时。你必须展示你的作品。一个学位,如果做得正确的话,可以显示这一点——但这并不是必须的。它是关于通过解决问题获得领域经验和概念的熟练程度。
解决一个问题,并把它放入文件夹、你的简历或你的 GitHub 库。

对你最合适的。人们雇佣你是因为你解决问题的能力。不是为了你两年前在那个项目上得到的。你可能会说这是一个非常酷的项目。

太好了!如果你对宇宙有所贡献,你应该告诉人们。

这是一个漫长的旅程,如果你喜欢你所做的事情,它就是值得的。一路上你会学到很多东西。

**简短的免责声明:**请始终记住,在野外有不同领域的数据科学相关工作。每项工作都有其特定的目的,需要不同的工具。每个雇主可能会寻找不同的技能组合。祝你一路顺风!

可视化的 10+1 交叉验证技术

原文:https://towardsdatascience.com/10-1-cross-validation-techniques-visualized-9013095fb68e?source=collection_archive---------41-----------------------

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

在本文中,我们将:

  • 探索 11 种交叉验证技术。
  • 可视化****培训验证样品在中各折。这是立即理解特定 CV 技术如何工作的最佳方式。
  • 绘制每次验证中的分布与实际测试的分布。

我们有一个数据集。它被分成两部分。一个叫做训练,另一个叫做测试。除了一列之外,它们的列数相同。培训也有目标。

我们的任务是在训练数据上拟合模型,在测试数据上预测未知目标。

我们不能仅仅满足于所有的训练数据,并期望测试一切顺利。我们需要验证我们的模型捕获了训练数据中的隐藏模式,是稳定的,不会过度拟合,并且在未知数据上概括得很好。

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

初始数据集分为训练和测试。培训用于交叉验证。来源:向数据科学,通过阿迪·布朗什坦

这就是交叉验证发挥作用的地方。

我们中的许多人都熟悉并使用最著名的交叉验证技术,其中训练集被分成 K 个部分,在 K 次迭代的每一次中,不同的部分被用作测试集(称为验证集),而剩余的集被用于训练。在每次迭代中,进行预测,最后的预测是它们的平均值。

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

十重交叉验证。来源:牛等人,转自 researchgate

在我们开始之前,先说几句:这个数据集来自 M5 预测准确性竞赛。任务是尽可能精确地预测沃尔玛在美国销售的各种产品的单位销售(需求)。在这个演示中,我将使用这些数据中的一部分。这个数据是时间序列的。这里将展示的一半技术在时间序列数据的参考书目中没有被推荐(尽管在这里它们表现得相当好)。

我选择尽可能保持文章的整洁,不在这里包含代码。

你在这里看到的所有东西的代码都在我的 Github 上。

好了,我们走吧!

首先快速绘制数据集的目标。测试集正好是一年。

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

1.k 倍交叉验证—无洗牌

在参考文献中,已知并且不建议对时间序列数据使用这种类型的 CV,因为它忽略了数据中的一致性。记住实际的测试数据是未来的一个时期。

分布图用橙色显示了每次迭代验证的 5 个分布,用蓝色显示了实际样本外测试数据的分布。

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

CV mean score: 		   23.64240, std: 1.8744.
Out of sample (test) score: 20.455980

2.k 倍交叉验证—洗牌

五分之一的数据也是每次迭代中的验证集,但这次它随机分布在整个数据中。和前面一样,在一次迭代中用作验证的每个样本永远不会在另一次迭代中用作验证。

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

CV mean score: 		   22.59125, std: 1.7155.
Out of sample (test) score: 20.526280

3.随机排列交叉验证

ShuffleSplit 将在每次迭代期间随机采样整个数据集,以生成训练集和验证集。test_size 和 train_size 参数控制每次迭代的验证和训练集应该有多大。因为我们在每次迭代中从整个数据集进行采样,所以在一次迭代中选择的值可以在另一次迭代中再次选择**。**

由于一些数据不包括在训练中,这种方法比正常的 k 倍交叉验证更快。

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

CV mean score: 		   22.47461, std: 2.2129.
Out of sample (test) score: 20.630861

4.分层 K 倍交叉验证—无洗牌

类似于正常的 K 折叠,但是每个折叠包含每个目标的大约相同百分比的样本。最好与分类一起使用,而不是回归。

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

CV mean score: 		   22.57824, std: 2.7578.
Out of sample (test) score: 20.532799

5.分层 K-折叠交叉验证——带洗牌

对于每个目标,折叠包含大约相同百分比的样本,但是首先,数据被打乱。

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

CV mean score: 		   22.51464, std: 3.0626.
Out of sample (test) score: 20.585582

6.分组 K 倍

我们可以从数据集的另一列定义组。确保同一组不在训练集和验证集中。

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

CV mean score: 		   23.21066, std: 2.7148.
Out of sample (test) score: 20.550477

在前一个示例中,我们使用 year 作为组,在下一个示例中使用 months 作为组。

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

CV mean score: 		   22.32342, std: 3.9974.
Out of sample (test) score: 20.481986

7.成组的 K 倍——去掉一个组

在每次迭代中,用除一组以外的所有组的样本训练模型。在以月为组的情况下,执行 12 次迭代。

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

CV mean score: 		   22.48503, std: 5.6201.
Out of sample (test) score: 20.468222

8.随机排列的分组 K-折叠

这是两种方法的结合。我们定义组,并在每次迭代期间随机采样整个数据集,以生成训练集和验证集。

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

CV mean score: 		   21.58829, std: 2.5721.
Out of sample (test) score: 20.365067

9.时间序列分割

建议将以下方法用于时间序列数据。

在时间序列分割中,训练集总是被分成两部分。第一部分始终是训练集,而后一部分是验证集。验证集的长度保持不变,而训练集随着每次迭代变得越来越大。

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

CV mean score: 		   24.32591, std: 2.0312.
Out of sample (test) score: 20.999613

10.阻止时间序列分割

训练集和验证集在每次迭代中都是唯一。没有值被使用两次。训练集总是在验证之前。由于在更少的样本中训练,它也比其他交叉验证方法更快。

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

CV mean score: 		   22.57081, std: 6.0085.
Out of sample (test) score: 19.896889

奖金:11。清除的交叉验证

在每次迭代中,在训练集之前和之后,我们移除一些样本。

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

CV mean score: 		   23.64854, std: 1.9370.
Out of sample (test) score: 20.589597

将禁运设置为大于 0 的值,我们将在验证集之后移除额外的样本。

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

CV mean score: 		   23.87267, std: 1.7693.
Out of sample (test) score: 20.414387

最后,让我们看看每种技术在交叉验证均方根误差和实际测试 RMSE 上的表现。

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

我把这个留给你作为思考的食粮,来决定哪种技术是最好的。

我会选择随机排列的 K 倍群。

参考资料:

https://hub . packtpub . com/cross-validation-strategies-for-time-series-forecasting-tutorial/

https://sci kit-learn . org/stable/modules/cross _ validation . html

https://www . Wiley . com/en-us/Advances+in+金融+机器+学习-p-9781119482086

不熟悉 Python?每个 Python 程序员都应该知道的 10 个缩写

原文:https://towardsdatascience.com/10-acronyms-that-every-python-programmer-should-know-58008635b5fe?source=collection_archive---------13-----------------------

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

阿希什·阿查里亚在 Unsplash 上拍摄的照片

编程原则、规则和一些有趣的事实

介绍

Python 已经成为很多开始学习编码的人的编程语言选择。它有非常直观的语法和支持动态类型的灵活性。此外,它是一种解释语言,这使得使用交互式控制台进行学习成为可能。基本上,你可以只使用一个命令行工具,比如 Mac 中的 Terminal,来开始 Python 的学习,因为现在 macOS 都附带了 Python。

当你学习 Python 时,你会逐渐熟悉它的数据结构、控制流、类、函数和其他基本的东西。我发现有趣的一件事是 Python 中的各种首字母缩写词,我们不时会遇到。本文将回顾十个这样的缩略语。其中一些是通用编程原则,而其他一些则更具体地针对 Python 编码。然而,它们中的每一个都有自己有用和/或有趣的方面。

1.面向对象编程

我们应该知道的第一个缩写是 OOP——面向对象编程,这是 Python 的设计基础。我们知道编程本身是关于编码的,但是程序本身应该是关于数据的。我们的程序需要输入数据、处理数据和输出数据。请注意,这里讨论的数据是最广义的,可以包括表格数据、字符串、用户动作(例如,点击按钮)、图像和任何形式的具有信息的数据。我们代码的工作就是处理这些不同形式的数据,并以期望的方式呈现它们。

为了完成我们的工作,我们需要能够处理这些数据的代码,现代编程语言(包括 Python)中一个常见的设计模式是采用 OOP 范例。**这个想法非常直观——我们用特定的对象包装我们的数据。**更具体地,对象可以保存数据(例如,属性)并且可以操作数据(例如,方法)。例如,如果我们开发一个赛车游戏。我们可以构建汽车对象,每个对象都有特定的属性,比如颜色、最大速度和重量。此外,这些对象可以有操作,如刹车和加速。这些数据的逻辑组织以汽车为中心。

让我们看一个 Python 中的具体例子。我们可以使用内置的 str 类包装字符串数据,这不仅允许我们使用字符串对象传递字符串数据,还允许我们改变字符串的表示方式。下面来看一个很琐碎的例子。

字符串数据的操作

2.干(不重复)

干的原则(不要重复自己)是每个程序员都应该实践的最根本的规则之一。这个想法很简单— 如果你注意到你的代码中有任何重复,这是一个信号,你需要进行一些重构,以尽可能减少重复代码或完全删除任何重复。以下伪代码向您展示了应用 DRY 原则对一些代码进行的重构。

不要重复你自己

代码重构的另一个可能场景是,您发现自己要处理一堆具有相同结构的数据。与其使用一系列字典、列表或元组来存储每个个体的数据,不如考虑用自己的类来处理这些数据。这不仅仅是为了让你的代码不容易出错,也是为了长期的可维护性。

3.PIP(Python 的包安装程序)

Python 受欢迎的最重要原因可能是它的开源特性,这产生了大量的免费 Python 包。根据维基百科,在 Python 包索引(PyPI)中有超过 235,000 个包被编入索引。我们可以使用 pip 工具从 PyPI 安装任何包。安装相当简单,只需要在命令或终端中输入一行代码。下面的代码片段总结了一些常见的用法。要了解更多关于 pip 工具的用法,您可以访问其官方网站这里

PIP 使用示例

4.LEGB(本地、封闭、全局和内置)

LEGB 规则是指 Python 中的变量查找顺序,如下图所示。具体来说,当解释器试图解析变量时,Python 有四层作用域——理解哪些值绑定到变量。首先从局部作用域开始,它可以是一个函数或者一个类。如果解释器为变量找到了相应的界限值,它将停止查找并使用具有该特定值的变量。

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

可变分辨率规则

否则,它将在更高的层次上查找— 封闭范围。封闭范围仅存在于函数的嵌套结构中。具体来说,当一个函数在另一个函数中声明时,我们称内部函数为内部函数,外部函数为外部函数。当解释器试图解析内部函数范围内使用的变量时,如果它不能在局部范围内解析,它将转到封闭范围,即外部函数的局部范围。

如果它仍然不能解析封闭范围内的变量,它将转到全局范围。全局范围通常是模块级的,通常是一个独立的 Python 文件。值得注意的是,当您将包导入到当前文件中时,导入的函数和类也将成为全局范围的一部分。内置作用域是在解释器启动时加载的函数、类和其他模块,以使这些最基本的对象始终可用(如print和其他内置函数)。

5.MRO(方法解析顺序)

方法解析顺序表示Python 或编程语言一般如何解析方法或属性。与上面讨论的 LEGB 规则不同,LEGB 规则关注的是解析变量,而 MRO 关注的是对象以及如何解析其方法调用或检索特定属性。MRO 主要是在多重继承的上下文中讨论的——从多个类(即超类)和/或多层继承继承的类(即子类)。因为子类和超类共享一些可能不同实现的公共方法,Python 解释器需要一种机制来确定在特定调用中应该使用哪个方法或属性,这是 MRO 负责的。下面的代码片段显示了一个示意性示例。

方法解析顺序

对于 W 类的实例(第 22 行),当我们调用bingo()方法时,这个方法在它自己的类中被解析,因为它是在类中定义的(第 18–20 行)。然而,这个方法将进一步调用bin()go()方法。以类似的方式,bin()方法在它自己的类中被解析,然而,它调用超类的bin()方法,如第 15 行所示。但是在它的直接超类(即 Y 和 Z)中,都没有实现bin()方法,因此 Python 将更上一层到超类的超类(即 X),在那里实现并调用bin()方法。

值得注意的是,对于 W 的go()方法,它的两个超类都实现了这个方法,但是正如你所看到的,只有 Y 类中使用的实现被调用。这是因为当我们定义我们的 W 类时,继承顺序是 Y 和 Z,这将使 MRO 遵循相同的顺序。与此相关,我们可以使用特殊方法__mro__找出特定类的 MRO,如下所示。此外,为了向您展示类继承的顺序是如何重要的,我们创建了另一个类,Z 类在 Y 类之前,这改变了 W_ class 的 MRO。

特殊方法 mro

6.& 7.EAFP(请求原谅比请求允许容易)& LBYL(三思而后行)

EAFP(请求原谅比请求许可容易)编码风格是 Python 热衷于遵循的。因为 Python 是一种动态编程语言,所以在运行时实现以及修改现有的实例对象、类甚至模块都是可能的。**因此,建议您在编写代码时假设特定的属性或功能是可用的。**换句话说,这个想法是如果一些代码潜在地有特殊的问题,让问题浮出水面并相应地解决它们。通过应用 EAFP 规则,如果我们想更进一步,我们可以简单地使用 try…except 语句编写特定的代码来处理代码可能引发的潜在异常。基本上,我们的想法是,当一些意想不到的事情发生时,我们可以事后处理。

与 EAFP 原则相反,还有另一种编码风格叫做 LBYL,代表三思而后行。使用这种编码风格,程序员被期望在某些代码运行之前排除所有可能的不良情况。因此,你可以在项目中看到更多遵循 LBYL 原则的 if 语句。基本上,这种编码风格试图以特别的方式防止任何问题。

下面的代码片段向您展示了一个使用 EAFP 对 LBYL 的可能场景。使用 EAFP 编码风格,我们简单地将我们的代码和预期的可能异常封装在一个 try…except 语句中,而使用 LBYL 编码风格,我们必须使用自省方法和值检查来在划分之前验证适用的条件。正如您所看到的,EAFP 代码看起来更整洁,没有创建嵌套结构。当然,如果你愿意,你也可以在你的项目中应用 LBYL。最终项目仍将类似地工作。

EAFP 对 LBYL

8.PEP (Python 增强提案)

上一节讨论了一般的编码风格。但是最有影响力的 Python 编码风格指南之一被称为 PEP 8—Python 增强提案 # 8,由 BDFL(将在接下来讨论)和其他几个 Python 核心维护者撰写。pep 涵盖了很多东西——都与 Python 相关。你可以在官方网站找到完整的名单。这里列出了一些值得注意的,请随意阅读。

PEP 8:Python 代码样式指南
PEP 257: Docstring 约定
PEP 20:Python 之禅
PEP 498: 文字字符串插值
PEP 202: 列表理解
PEP 405: Python 虚拟环境

9.BDFL(仁慈的终身独裁者)

什么是 BDFL?当然,部分标题已经告诉你它代表什么,但是它实际上意味着什么呢?这是来自维基百科的定义。

终身仁慈的独裁者 ( BDFL )是一个给少数开源软件开发领导者的头衔,通常是项目创始人,他们在社区内的争议或争论中保留最终发言权。

虽然这个定义通常适用于开源软件开发,但它最初是在 Python 社区中使用的,作为一种指代 Python 编程语言的创造者吉多·范·罗苏姆 (GvR)的方式。在担任这个 BDFL 角色超过 20 年后,他在 2018 年卸任。如果你对 BDFL 的故事感兴趣,请在他的维基百科页面上探索更多。

10.REPL(读取-评估-打印循环)

在我看来,REPL (Read-Eval-Print 循环)是一个方便的工具,可以让学习 Python 变得如此轻松。如您所知,我们可以像使用命令或终端窗口一样简单地开始学习 Python 编码。您可以使用 pip 工具在那里安装您的软件包,如前所示。更重要的是,您可以立即编写您的第一行 Python 代码(例如,可能应该是这一行:print(“Hello World!”)),而不需要对其他编程语言可能需要的 IDE 工具进行任何配置。让我们快速拍一张它的快照。

REPL 的例子

REPL 的工作流程非常简单——读取代码,对其进行评估,并在控制台中打印评估的任何适用结果,然后一次又一次地重复这三个步骤,探索 Python 的各种特性。REPL 在标准 python 或其他常见 Python 开发工具中实现为默认模式,如 ipython,它是著名的 Python 学习和编码工具— Jupiter Notebook 的基础。

结论

Python 是一种灵活而强大的面向对象语言,由 BDFL GvR 创建。利用 PIP,我们可以很容易地管理 Python 包,并通过 REPL 在控制台中学习语言和各种包。当我们用 Python 编码时,我们希望遵循 PEP 8 中概述的风格。其他重要的编码原则包括干和 EAFP。如果你愿意,你也可以在你的代码中做一些 LBYL。LEGB 规则和 MRO 将帮助您理解如何解析变量、属性和函数,以使您的代码按预期运行。

深入挖掘:10 本高级人工智能书籍

原文:https://towardsdatascience.com/10-advanced-ai-books-for-those-who-feel-the-need-to-go-deeper-bbb7a7d1c169?source=collection_archive---------25-----------------------

获得洞察力并深入了解最先进的方法

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

图片来自皮克斯拜的赫尔曼·特劳布

正如你无疑发现了自己,要成为一名有效的机器学习科学家,你需要获得很多知识和经验。要在机器学习和 AI 方面起步,学习几门网络课程和入门书籍大概就够了。然而,为了变得更好,你需要更多的学习。多得多。

大多数关于人工智能最新方法的信息都包含在顶级会议上发表的论文中,如 ICMLNeurIPSICLR 以及 arXiv 。为了能够阅读这些论文,大多数论文需要在它们各自的领域中有深入的知识,并且(通常)需要有很深的数学理解。更重要的是,整个领域都在以惊人的速度发展。因此,不仅你必须能够阅读这些论文,而且你必须快速阅读它们并提取最重要的部分,以便能够决定其中包含的信息对你是否有用。

在这篇文章中,我收集了 10 本书,我想推荐给任何想深入了解最新技术以及更多数学和编程经验的人。总的来说,这些书对任何想在这个领域工作的人都有意义。我没有包括涵盖特定主题的书籍,如 NLP、计算机视觉或医学图像处理。文章根据特定的主题分为不同的类别。这些书中有几本也可以在网上免费获得,所以没有理由不马上开始学习更多的知识!

人工智能的数学基础

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

图片由皮克斯拜的 Gerd Altmann 提供

特雷弗·哈斯蒂的《统计学习的要素》

毫无疑问,您会同意,良好的统计学基础对于任何数据科学家都是极其重要的。这本书对统计学习中最重要的概念进行了全面而实际的解释。同时,你不需要成为数学专家来理解这些概念。作者涵盖了监督和非监督学习,包括支持向量机,神经网络和决策树,随机森林,套索回归等等。对我来说,这是任何标准 ML 算法的首选参考。

平装本在这里或者亚马逊上可以免费买到。

谢尔登·埃克斯勒正确地完成了线性代数

设计作为线性代数的第二课程书,这本书真正深入到线性代数的数学基础。它假设你已经理解了基本概念,而是以一种更理论化的方式来呈现这个主题。虽然为了理解深度学习领域的大多数论文,绝对没有必要非常了解线性代数,但我发现它不仅对阅读,而且对自己的研究都非常有帮助。

在亚马逊上购买这本书的精装本或平装本。

概率论:阿齐姆·克兰克的综合教程

这是一本全面而严谨的概率论书籍。当我说严格的时候,我是认真的:它是为已经有一些概率论经验的人准备的。像所有关于概率的数学课程一样,它以测度论的一章开始。然而,只有最相关的测量理论概念被涵盖。之后,这本书深入到独立性,条件概率,鞅,马尔可夫链,随机过程和随机积分的概念。由于这是一本主要面向数学家的书,所有的东西都得到了恰当的证明(尽管有些证明是作为练习留下的!)而且你得花时间去理解定理。然而,这本书也提供了大量的例子和数字,以便更好地理解。我会把它推荐给任何想从数学角度理解概率的人。

这本书在亚马逊上有精装版。

一般人工智能主题

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

图片由 Gerd AltmannPixabay 拍摄

《人工智能:现代方法》,斯图尔特·拉塞尔和彼得·诺维格著

这是人工智能圣经。它提供了一个非常好的领域概述,同时非常清晰和简洁,要求惊人的数学背景。这本书还设法涵盖了大量的材料:它开始谈论智能代理、搜索算法和约束满足,接着是易于阅读的逻辑介绍,最后是学习、概率推理、NLP 和机器人等主题。这最后几章是在第三次添加时才添加到书中的,我觉得它们包含的信息并没有真正与其余的内容很好地协调。然而,我可以全心全意地把这本书的其余部分推荐给任何想拓展他的人工智能视野的人。

和所有其他的书一样,这本书在亚马逊上有平装本和精装本。

深度学习,作者伊恩·古德菲勒

这本书现在已经成为深度学习的标准书籍,涵盖了非常基础的主题,如线性代数和概率以及前馈网络的介绍,以及更高级的主题,如 CNN,RNNs,正则化和自动编码器。还包括图形模型和蒙特卡罗方法的概述。

如果你刚学完一些基础的机器学习课程,想更深入的了解深度学习,我推荐这本书。

这本书可以在网上免费获得在 deeplearningbook.org。精装版在亚马逊上出售。

机器学习:概率视角

如果你在你的生活中曾经做过一门适当的机器学习课程,这本书可能已经被推荐给你了。事实上,该领域的顶尖人物之一南多·德·弗雷塔斯(Nando de Freitas)的课程(可以在 YouTube 上找到)就是基于这本书。请注意,这本书并不容易阅读,也不打算这么做:它涵盖了优化,概率,支持向量机,高斯模型,贝叶斯和频率统计,线性和逻辑回归,图形模型,期望最大化,高斯过程,变分和蒙特卡洛推理,聚类和深度学习都在一本书里(哇!).这本书的主题,以及标题中“概率”的原因,是作者倾向于贝叶斯方法。如果你认为线性回归很简单,那就看看贝叶斯线性回归这一章吧!这本书对我来说是过去几十年里对这个课题所做的所有研究的参考。它并没有像我在这里提到的其他书籍一样涵盖深度学习的主题,但它也不打算这样做。还有其他的书也是这样设计的。

再次,亚马逊提供这本书(精装本)。然而,考虑到这本书的价格,你也可能倾向于从大学图书馆借阅。

神经网络和深度学习

这是一本关于深度学习的相对较新的书。我拿起它只是为了看看它是否包含我还没有在其他地方读过的信息,因为我已经读过作者的另一本书(文本的机器学习)。男孩被我惊呆了!尤其是第一章让我耳目一新,让我重新思考整个 ML 领域。在这些章节中,Aggarwal 博士建立了支持向量机、回归、奇异值分解和其他经典 ML 算法之间的联系,并解释说这些实际上只是神经网络的特例。很有意思!这本书的其余部分致力于神经网络的基础,非常详细地解释了反向传播,正则化,CNN,RNNs 和自动编码器,同时也简要地看了最新的东西,如注意机制。

亚马逊上可以找到精装本。

更专业的话题

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

图片由 Gerd AltmannPixabay 拍摄

强化学习:理查德·萨顿介绍

在我看来,每个从事 ML 工作的人至少应该知道什么是强化学习,因为它目前似乎是我们朝着通用 AI 前进的最大希望。“强化学习”涵盖了这个主题,如果不是详尽无遗(不可能),那么至少非常广泛。这本书最大的优点是简单明了。在读这本书的时候,我从来没有感觉到作者遗漏了一些可以帮助我更好地理解这个主题的东西。阅读真的是一种享受。虽然它在某些部分变得相当数学化,但更复杂的东西总是被标记出来,如果你喜欢,你可以跳过它(尽管我会建议你从头开始)。

这本书可以在网上免费获得这里。你也可以在麻省理工学院出版社购买印刷版。

统计学中的因果推理:朱迪亚·珀尔的入门

虽然将这本书列入我的清单可能会感到奇怪,因为它涵盖了一个相当有限的主题,但我觉得它值得在这里占有一席之地,主要是因为因果推理正迅速成为人工智能的一个主要话题,朱迪亚·珀尔是首席研究员和因果推理理论的发明者(在他的许多其他成就中)。在这本书里,你会发现什么是因果推理,当然你会学到所有关于因果关系和相关性的知识。它作为因果关系领域的介绍,因此向读者提供概念而不是详尽的细节。它还包含许多例子和发人深省的问题,作为更深入思考这个问题的动力。对我来说,关于反事实的讨论特别有趣,令人耳目一新。

你可以在威利或者亚马逊上买到这本书。

高级编程知识

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

图片来自 PixabayJohnson Martin

流畅的 Python:清晰、简洁和有效的编程,卢西亚诺·拉马尔霍著

IMHO,每个深度学习科学家或者数据科学家都需要能够写出清晰简洁的 Python 代码。虽然设计庞大的代码架构通常不是我们工作的主要部分,但编写易于理解的算法才是。这本书真的可以帮助你发展你的 Python 技能。我在看这本书的时候发现了很多我事先不知道的 Python 特性。我几乎每天都在使用的一个概念是元类。此外,我在其他任何地方都没有找到对 Python 数据模型如此清晰的描述。如果您想让您的同事和 GitHub 追随者对您编写的优雅代码感到敬畏,请拿起这本书!

当然,亚马逊也提供这个。你也可以通过奥莱利的网站购买。

结论

有如此多的资源可以用来学习人工智能和机器学习,以至于比以往任何时候都更容易获得关于这一主题的深刻知识。我提供的书籍只是你可以使用的无数高质量材料的例子。我希望这个列表能给你一些指导,让你对外面的世界有所了解。享受阅读!

Python 编码面试前要解决的 10 个算法

原文:https://towardsdatascience.com/10-algorithms-to-solve-before-your-python-coding-interview-feb74fb9bc27?source=collection_archive---------0-----------------------

编程 | 面试 | 办公时间

在这篇文章中,我提出并分享了在 MAANG 访谈中反复出现的一些基本算法的解决方案。

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

间隔拍摄

建议的点播课程

你们很多人联系我要有价值的资源 钉 Python 编码面试 。下面我分享几个 课程/平台 我强烈推荐练习完本帖算法后继续锻炼:

> > >还不是中等成员?考虑与我的 推荐链接 签约,以获得 Medium 提供的一切服务,费用低至每月 5 美元**!**

为什么练习算法是关键?

如果你对 Python 相对陌生,并计划开始面试顶级公司(其中包括 MAANG ),听听这个:你需要现在就开始练习算法。

不要像我刚开始解的时候那么幼稚。尽管我认为偶尔破解几个算法很有趣,但我从来没有花太多时间去练习,甚至没有花更少的时间去实现一个更快或更有效的解决方案。在我自己之间,我在想,在一天结束的时候,整天解决算法有点太乏味了,它在真实的日常工作环境中没有实际用途,从长远来看,它不会给我的口袋带来多少。

“知道如何解决算法会让你在求职过程中获得竞争优势”

嗯……我错了(至少部分错了):我仍然认为在算法上花太多时间而不关注其他技能不足以让你获得梦想中的工作,但我明白,由于复杂的问题出现在程序员的日常工作中,大公司必须找到一个标准化的流程来收集对候选人解决问题和关注细节技能的见解。这意味着,知道如何解决算法将让你在求职过程中获得竞争优势,因为即使是不太出名的公司也倾向于采用类似的评估方法。

* [## PySpark 中聚合数据的 3 种方法

PySpark 用编码示例解释基本聚合。

towardsdatascience.com](/3-ways-to-aggregate-data-in-pyspark-72209197c90)

外面有一个完整的世界

在我开始更加一致地解决算法后不久,我发现有大量的资源可供练习,学习解决它们的最有效策略,并为面试做好心理准备( 【黑客等级】 ,**leet codecoding bat)

在练习顶级面试问题的同时,这些网站通常会按公司对算法进行分组,嵌入活跃的博客,人们可以在博客上分享他们面试经历的详细总结,有时甚至会提供模拟面试问题,作为额外收费计划的一部分。

比如 LeetCode 让你按具体公司、按频率筛选顶级面试问题。您还可以选择自己觉得合适的难度级别(简单、中等和困难):

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

来源:https://leetcode.com/problemset/all/

有数百种不同的算法问题,这意味着能够识别常见的模式并在不到 10 分钟的时间内编写一个有效的解决方案将需要大量的时间和精力。

“如果你一开始真的很难解决它们,不要失望,这是完全正常的”

如果你一开始真的很难解决它们,也不要失望,这是完全正常的。即使是更有经验的 Python 程序员也会发现,如果没有足够的培训,许多算法在短时间内很难解决。

同样,如果你的面试没有像你预期的那样进行,并且你刚刚开始解决算法,也不要失望。有些人准备了几个月,每天解决几个问题,并定期排练,然后才能搞定面试。

为了在你的训练过程中帮助你,下面我选择了我在电话编码面试中一再看到的 10 种算法(主要围绕字符串操作数组)。这些问题的水平主要是 容易 所以把它们当作好的起点。

请注意,我为每个问题分享的解决方案只是许多可能实现的潜在解决方案中的一个,而且通常是 BF(“暴力”)解决方案。因此,请随意编写您自己版本的算法,尝试在运行时和使用的内存之间找到正确的平衡。

字符串操作

1.反向整数

*Output:
-132
543*

一个预热算法,可以帮助你练习切片技巧。实际上,唯一棘手的是确保你考虑到了整数为负的情况。我看到这个问题以不同的方式出现,但它通常是更复杂请求的起点。

2。平均单词长度

*Output:
4.2
4.08*

要求您使用字符串进行一些简单计算的算法非常常见,因此熟悉像**.replace()****.split()**这样的方法很重要,在这种情况下,它们帮助我删除了不想要的字符,并创建了一个单词列表,其长度可以很容易地测量和求和。

3。添加字符串

*Output:
2200
2200*

我发现这两种方法都同样敏锐:第一种方法简单直观,使用**eval( )**方法动态评估基于字符串的输入,第二种方法巧妙使用**ord( )** 函数,通过字符的 Unicode 码位将两个字符串重新构建为实际数字。如果我真的必须在这两者之间做出选择,我可能会选择第二种方法,因为它起初看起来更复杂,但在解决需要更高级的字符串操作和计算的“中等”和“硬”算法时,它通常很方便。

4.第一个唯一字符

*Output:
1
2
1
###
1
2
1*

同样在这种情况下,提供了两种可能的解决方案,我猜想,如果您对算法相当陌生,第一种方法看起来更熟悉,因为它从一个空字典开始构建简单的计数器。

然而,从长远来看,理解第二种方法会对你有更大的帮助,这是因为在这个算法中,我简单地使用了**collection.Counter(s)**,而不是自己构建一个字符计数器,并用**enumerate(s)**替换了**range(len(s))**,这个函数可以帮助你更优雅地识别索引。

5.有效回文

*Output:
True*

**“有效回文”问题是一个真正的经典,你可能会在许多不同的口味下反复找到它。在这种情况下,任务是通过删除最多一个字符来检查天气,字符串与其相反的对应物匹配。当 s = 'radkar 时,函数返回**True**,因为通过排除’ k '我们得到单词 ‘radar’ ,这是一个回文。

数组

6.单调阵列

*Output:
True
False
True*

这是另一个非常常见的问题,上面提供的解决方案非常优雅,因为它可以写成一行程序。一个数组是单调的 当且仅当它是单调递增的,或者单调递减的并且为了评估它,上面的算法利用了all()函数,如果 iterable 中的所有项都为真,则返回True,否则返回False。如果 iterable 对象为空,all()函数也返回True

7.移动零点

*Output:
[1, 3, 12, 0, 0]
[1, 7, 8, 10, 12, 4, 0, 0, 0, 0]*

当您使用数组时,.remove().append()方法是宝贵的盟友。在这个问题中,我使用它们首先删除属于原始数组的每个零,然后将它附加到同一个数组的末尾。

8.填补空白

*Output:
[1, 1, 2, 3, 3, 3, 5, 5]*

在真实的面试中,我被要求解决这个问题几次,两次解决方案都必须包括边缘情况(为了简单起见,我在这里省略了)。理论上,这是一个很容易构建的算法,但是你需要清楚地知道你想用 for 循环和 if 语句实现什么,并且能够自如地使用None值。

9.匹配和不匹配的单词

*Output:
(['The','We','a','are','by','heavy','hit','in','meet','our',
    'pleased','storm','to','was','you'],
 ['city', 'really'])*

这个问题相当直观,但该算法利用了一些非常常见的集合运算,如set()intersection() or &symmetric_difference()or ^,这些运算对使您的解决方案更加优雅非常有用。如果这是你第一次遇到它们,一定要看看这篇文章:

10.素数数组

*Output:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]*

我想用另一个经典问题来结束这一部分。如果你熟悉质数定义和 模运算 ,那么通过range(n)循环可以很容易地找到解决方案。

结论

在这篇文章中,我分享了 10 个 Python 算法的解决方案,这是编码面试中的常见问题。如果你正在准备一个知名科技公司的面试,这篇文章是一个很好的起点,让你熟悉常见的算法模式,然后转向更复杂的问题。还要注意的是这篇文章中的练习(以及它们的解决方案)是对 Leetcode 和 GeekForGeeks 上的问题的重新诠释。我远非该领域的专家,因此我提出的解决方案只是指示性的。**

给我的读者一个提示

还不是中等会员?考虑注册我的推荐链接,以每月 5 美元的价格获得 Medium 提供的一切!

这个帖子包括附属链接,如果你购买的话,我可以免费给你一点佣金。

您可能还喜欢:

* [## 3 门数据工程课程,在 2022 年推进您的职业发展

加入数据行业,改变角色或通过注册数据工程简单地学习前沿技术…

towardsdatascience.com](/3-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72) [## 使用 Python 字典计数器解决的 5 种算法

通过 Python 字典学习计数对象的三种方法。

towardsdatascience.com](/5-algorithms-solved-using-python-dictionary-counters-5f68f5740211) [## 下一次面试前要解决的 5 组 Python 算法

集合是许多 Python 访谈中反复出现的话题,并且经常提供高效求解算法的捷径。

towardsdatascience.com](/5-pythons-sets-problems-to-solve-before-your-coding-interview-41bb1d14ac25)**

面向数据科学家的 10 个令人敬畏的编程项目

原文:https://towardsdatascience.com/10-awesome-programming-projects-for-data-scientists-d2bf64f72ee4?source=collection_archive---------20-----------------------

帮助您改进编码和分析的原创想法

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

约书亚·雷德科普在 Unsplash 上的照片

实践是学习的重要部分。但是根据我学习编程的经验,找到有用的任务和项目来强化你的技能是很困难的。对于数据分析的编程来说尤其如此。如果你不知道去哪里找,找到有意义和有趣的数据真的很难。

幸运的是,有很多很棒的数据集和项目。在寻找你的下一个项目时,有几件事值得考虑:

  • 不是每个项目都必须复杂。我从尝试可以用一句话概括的任务中学到了很多。
  • 与传统意义上的“数据”无关的项目仍然可以帮助你成为更好的数据科学家/分析师。

考虑到这一点,我喜欢探索快速任务、长期项目以及数据集和问题集合的混合。以下是我最喜欢的 10 个。

1.易贝分析

**描述:**使用 Python 的数据抓取和分析项目

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

Justin LimUnsplash 上的照片

作为一个非常受欢迎的二手物品市场,易贝拥有大量关于其所有物品和列表价格不断变化的数据。如果你想在买卖时获得优势,获取并分析这些数据是非常有用的。

有几种方法可以获得易贝数据。我既使用了像 Python 的 BeautifulSoup 这样的网络抓取库,也使用了不同 Python 脚本中的易贝 API。无论您采用哪种方法,以下是您可以对数据做的一些事情:

  • 分析特定项目随时间的价格波动
  • 确定一个给定的列表是否可以买卖以获取更大的利润
  • 根据标题或描述的内容预测商品的销售价格

我已经尝试过其中的几个,我发现当我准备在易贝买卖时,它很有用。试试看,也许你还能赚点外快。

2.待办事项自动化

**描述:**使用 Python 和 Todoist API 的生活自动化项目

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

Cathryn LaveryUnsplash 上拍摄的照片

如果您有一个数字待办事项列表,您可以创建一个脚本来以编程方式添加和操作任务。这在过去为我节省了大量的时间,并帮助我处理那些不经常重复的任务。

为了开始这个项目,我建议使用 Todoist 作为你的数字待办事项列表。Todoist 提供了一个简单明了的 API,很容易与 Python 一起使用,还有一些有用的文档。然后,您可以确定添加和操作待办事项列表的条件。您可以:

  • 设置动态提醒,根据天气情况给植物浇水
  • 当内部温度过高时,创建一个紧急提醒来清理您的计算机
  • 如果一项任务已经过期超过了设定的时间,就删除它(并添加另一个提醒来为自己设定更现实的目标)

一旦您将待办事项清单自动化脚本设置为定期运行,您应该有望体验到生产力的激增。至少,你会获得更多的经验。

[## 如何用 Python 自动化你的待办事项列表

花几分钟写代码,再也不会忘记任务

levelup.gitconnected.com](https://levelup.gitconnected.com/how-to-automate-your-to-do-list-with-python-2da26b0ffc8f)

3.嘶嘶作响

**描述:**快速基本编码任务

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

Sharon McCutcheon 在 Unsplash 上拍摄的照片

FizzBuzz 是一个非常简单的问题。但我强调它是一个独立的项目,因为我认为每个程序员都应该尝试一下,并学习如何解决它。问题如下:

打印整数 1 到 N,但是如果一个整数能被 3 整除,则打印“Fizz”,如果一个整数能被 5 整除,则打印“Buzz”,如果一个整数能被 3 和 5 整除,则打印“FizzBuzz”。

虽然这是一个简单的任务,但对于一个程序员新手来说,这仍然需要一些思考。也有不同的方法来解决它,其中一些是更有经验的用户感兴趣的。学习这个任务的好的解决方案将有助于提高你解决问题的能力,以及你对什么是好代码的理解。

[## 如何解决 R 中的 FizzBuzz 问题

用这五个解决方案给面试官留下深刻印象并改进你的代码。

towardsdatascience.com](/how-to-solve-the-fizzbuzz-problem-in-r-c62e7e6c959a)

4.代码的出现

**描述:**快速编程问题集

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

照片由裘德·贝克Unsplash 上拍摄

每年 12 月,Codeinitiative降临节每天都会上传一个新的编程问题,直到圣诞节。不能等到明年圣诞节吗?不用担心—每年的所有问题都已存档,全年可用。

我喜欢《代码降临》有几个原因。随着时间的推移,问题变得越来越难,这意味着每个人都有自己的事情。它们也涵盖了广泛的任务和技能,让你接触到各种奇怪的任务和数据。如果你也是一名自学成才的程序员,其中一些可能会挑战你,并推动你提高计算机科学知识。

5.欧拉项目

**描述:**数学编码问题集合

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

照片由安托万·道特里Unsplash 上拍摄

想把你的编码技能运用到有趣的娱乐数学问题上吗? Project Euler 是给你的。

项目欧拉是一个庞大的数学问题集合,旨在提高程序员的技能。这些问题的难度各不相同,但许多都不需要专业的数学知识。虽然项目欧拉问题不是以数据为中心的,但解决它们无疑会加强数学知识和解决问题的方法,这将有助于处理数据。

我建议从档案中的一些早期问题开始。

6.整洁的星期二

**描述:**收集来自 R 社区的有趣数据集

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

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

在 R 社区,周二是一个事件!每周的这一天,一个新的数据集会在整洁的周二 GitHub 库中发布。这些数据集在主题上有很大的不同,无论你喜欢哪种编程语言,探索和分析它们都很有趣。

整洁星期二的社交方面也很独特。鼓励用户每周在 Twitter 标签#TidyTuesday 上分享他们的可视化和分析。这就产生了一个有趣的关于相同数据的汇编,通常对你自己的努力是一个很大的启发。

7.卡格尔比赛

**描述:**大项目集合,有奖

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

照片由布拉登·科拉姆Unsplash 上拍摄

到目前为止, Kaggle 竞赛已经成为数据科学社区的中流砥柱。Kaggle 是一个托管在线 Jupyter 笔记本环境、教程和数千个免费真实数据集的平台。Kaggle 还举办比赛,参赛队伍尝试使用数据科学回答数据集的问题。

介绍性的比赛都有很好的记录,但是新的比赛不断出现,有时会奖励获胜的团队一大笔现金。如果你能找到一个与你的技能相符的项目,那么看看 Kaggle 是值得的。

8.个人推荐仪表板

**描述:**决策自动化程序使用从基本逻辑到机器学习的任何东西

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

丘特尔斯纳普Unsplash 上拍照

把你的分析结论应用到有用的事情上总是令人满意的。推荐引擎可以做到这一点。基于一些输入和一些启发,你可以通过让一个程序自动化你的一些日常选择来使你的生活变得更容易。

我之前用 R Shiny 开发了一个仪表盘应用程序,根据温度和正式程度等因素,它会给我建议穿什么。虽然我使用了基本的逻辑来实现这一点,但是使用外部数据和/或统计模型是很自然的下一步。无论你选择哪种方法或推荐问题,从长远来看,这个项目都可以节省你的时间。你的前端、后端和设计技能也会得到锻炼。

9.个人财务分析

**描述:**用代码洞察你的消费和储蓄

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

Kelly SikkemaUnsplash 上拍摄的照片

如果你记录了你的花费或者有了预算,你就立刻开启了一个伟大的项目。为什么不利用你的分析知识来分解你的支出,预测下一年你会存多少钱,或者根据复利来计算预测回报呢?

虽然一些银行应用程序有预算功能,但我发现它们不够全面或可定制,不符合我的喜好。通过比较,你自己的财务分析可以更深入,并且是一个有用的项目。当你最终量化你在酒吧花了多少钱时,省钱的空间是巨大的。

10.批量图像处理

**描述:**使用 R 包进行图像编辑

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

Vincentas LiskauskasUnsplash 上拍摄

你想同时编辑一堆图片吗?也许是为了在网页上使用而调整它们的大小,或者因为它们都有点曝光过度而调整它们的亮度?用代码自动化你的图像编辑过程!

虽然编辑图像听起来不像数据分析,但值得记住的是,图像仍然是数据。它们包含大量丰富的信息,可以通过编程进行分析,用于各种用途。因此,学会和他们一起工作是很有价值的。这也比你想象的要容易。我写了一个关于在 R 中使用 magick 包进行批量图片编辑的小教程,整个代码大概有 10 行!

[## 用 R 批量编辑图像

使用函数式编程编辑和文件转换任意多的图像。

levelup.gitconnected.com](https://levelup.gitconnected.com/batch-editing-images-with-r-3d4aef08bc62)

最后的想法

学习任何东西的最好方法是把它应用到你关心的事情上。这些项目中的许多在某种程度上让我的生活变得更容易,并且当我获得理解时,所有这些项目都让我参与进来。所以用你最喜欢的语言打开一个新项目。

不一定是大项目,也不一定让你赚钱。它只需要是新的有趣的东西。

谁知道它会把你带到哪里。

想阅读我所有关于编程、数据科学等方面的文章吗?在这个链接注册一个媒体会员,就可以完全访问我所有的作品和媒体上的所有其他故事。这也直接帮助了我,因为我从你的会员费中得到一小部分,而不需要你额外付费。

只要我在这里订阅,你就可以将我所有的新文章直接发送到你的收件箱。感谢阅读!

10 个令人惊叹的 Python 3.9 特性

原文:https://towardsdatascience.com/10-awesome-python-3-9-features-b8c27f5eba5c?source=collection_archive---------0-----------------------

必须了解的 Python 3.9 特性

最新的 Python 3.9.0 最终版本将于 2020 年 10 月 5 日星期一发布

就像大多数 Python 爱好者一样,我对探索和使用最新的特性感到非常兴奋。本文将概述 Python 3.9 的必备特性。

对于 Python 程序员来说,这又是一个激动人心的时刻。

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

作者图片

我通读了 Python 3.9 发行说明和相关讨论。基于这些信息,我想写一个全面的指南,这样每个人都可以对这些功能及其详细的工作原理有所了解。

在我开始之前,我必须说,我非常兴奋地探索 3.9 版本,因为一些功能肯定会在我的应用程序中使用。

简单地

从字典更新/合并到添加新的字符串方法,再到引入 zoneinfo 库,已经添加了许多新特性。此外,还引入了一种新的稳定、高性能的解析器。

随着新模块zoneinfographlib的加入,标准库更新了许多新特性。许多模块也得到了改进,例如astasyncioconcurrent.futuresmultiprocessingxml 等等。

这个版本进一步稳定了 Python 标准库。

现在让我们来探索 Python 3.9 的特性。

1.特性:字典更新和合并操作符

内置的dict 类中增加了两个新的操作符||=

|操作符用于合并字典,而|=操作符可用于更新字典。

人教版:584

代码:

用于合并:|

>>> a = {‘farhad’: 1, 'blog’: 2, 'python’: 3}
>>> b = {’farhad’: 'malik’, 'topic’: 'python3.9’}
>>> a | b
{’blog’: 2, 'python’: 3, ’farhad’:’malik’,  'topic’: 'python3.9’}
>>> b | a
{’farhad’: 1,’blog’: 2, 'python’: 3, 'topic’:’python3.9’ }

求更新:|=

>>> a |= b
>>> a
{’blog’: 2, 'python’: 3,’farhad’:’malik’}

要记住的关键规则是,如果有任何键冲突,那么将保留最右边的值。这意味着最后看到的值总是有效的。这也是其他dict 操作的当前行为。

详细解释:

正如我们在上面看到的,两个新的操作符||=已经被添加到内置的dict 类中。

|操作符用于合并字典,而|=操作符可用于更新字典。

我们可以认为|是列表中的+(连接),我们可以认为|=是列表中的+=操作符(扩展)。

如果我们评估 3.8 版本,我们会注意到合并和更新字典的方法很少。

作为一个例子,我们可以做first_dict.update(second_dict)。这种方法的问题是它在适当的位置修改了first_dict 。解决这个问题的一个方法是将first_dict 复制到一个临时变量中,然后执行更新。然而,它添加了额外的不必要的代码,只是为了让更新/合并工作。

我们也可以用{**first_dict, **second_dict}。这种方法的问题是它不容易被发现,并且更难理解代码打算执行什么。这种方法的另一个问题是映射类型被忽略,类型总是 dict。作为一个例子,如果first_dict 是一个defaultdict 并且second_dict 是 dict 类型,那么它将失败。

最后,collections 库包含一个ChainMap 函数。它可以接受两个字典,比如ChainMap(first_dict, second_dict),并返回一个合并的字典,但是这个库并不常见。

对于具有不兼容的__init__ 方法的dict 的子类,它也会失败。

更多信息:https://www.python.org/dev/peps/pep-0584

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

作者图片

2.特性:新的灵活的高性能基于 PEG 的解析器

Python 3.9 版本提议用一种新的基于 PEG 的高性能和稳定的解析器取代当前基于 LL(1)的 Python 解析器。

人教版:617

详细解释:

当前的 CPython 解析器是基于 LL(1)的。随后,该语法是基于 LL(1)的,以允许它被 LL(1)解析器解析。LL(1)解析器是一个自顶向下的解析器。此外,它从左到右解析输入。当前的语法是上下文无关的语法,因此没有考虑标记的上下文。

Python 3.9 版本提议用一个新的基于 PEG 的解析器来代替它,这意味着它将取消当前的 LL(1)语法 Python 限制。此外,当前的解析器已经修补了许多将被删除的漏洞。因此,从长远来看,这将降低维护成本。

例如,尽管 LL(1)解析器和语法实现起来很简单,但是这些限制不允许它们以自然的方式向语言设计者和读者表达常见的结构。解析器只查看前面的一个标记来区分可能性。

选择运算符|是命令。对于一个实例,如果编写了以下规则:

rule: A|B|C

LL(1)解析器是一个上下文无关的语法解析器,它将生成这样的构造,即给定一个输入字符串,它将推断出是否需要扩展 A 或 B 或 c。它将检查第一个选项是否成功。如果仅失败一次,它将继续第二次或第三次。

PEG 解析器只为一个字符串生成一个有效的树。因此,它不像 LL(1)解析器那样不明确。

PEG 解析器还通过语法动作直接生成规则的AST 节点。这意味着它避免了中间步骤的产生。

关键是 PEG 解析器已经过广泛的测试和验证。PEG 解析器的性能得到了微调。因此,对于大多数指令来说,它只占用当前解析器 10%的内存和速度。这主要是因为没有构造中间语法树。

为了保持文章的简单和可读性,我删除了对底层细节的提及。如果需要了解更多信息,底部提供了链接。

更多信息:https://www.python.org/dev/peps/pep-0617

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

作者图片

3.特性:新的字符串功能,以消除前缀和后缀

两个新功能被添加到str 对象中。

  • 第一个函数删除前缀。是str.removeprefix(prefix)
  • 第二个函数删除后缀。正是str.removesuffix(suffix)

人教版:616

代码:

'farhad_python'.removeprefix('farhad_')
#returns python'farhad_python'.removesuffix('_python')
#returns farhad

详细解释:

数据科学应用程序中涉及操作文本的常见任务之一是删除字符串的前缀/后缀。str 对象增加了两个新功能。这些函数可以用来删除字符串中不需要的前缀和后缀。

第一个函数删除前缀。第二个函数是str.removeprefix(prefix).删除后缀。是str.removesuffix(suffix).

记住字符串是字符的集合,每个字符在字符串中都有一个索引。我们可以使用索引和冒号 :来返回字符串的子集。这个特性被称为字符串切片。

如果我们研究函数,它们在内部检查字符串是否以前缀开始(或以后缀结束),如果是,那么它们使用str[:]切片特性返回一个没有前缀(或在后缀之后)的字符串。

随着这些函数成为标准库的一部分,我们得到了一个一致的、不太脆弱的、高性能的、更具描述性的 API。

更多信息:https://www.python.org/dev/peps/pep-0616

4.特性:内置泛型类型的类型提示

在此版本中,通过移除 Python 中的并行类型层次,注释程序变得更加简单。

该版本支持类型模块中当前可用的所有标准集合中的泛型语法。

我们可以使用listdict 内置集合类型作为泛型类型,而不是在函数签名中使用typing.List or typing.Dict

因此,代码现在看起来更清晰,并且更容易理解/解释代码。

PEP: 585

详细解释:

虽然 Python 是一种动态类型语言,但是 Python 程序中的类型注释支持类型的自省。随后,该注释可用于运行时类型检查的 API 生成。

这个版本支持类型模块中当前可用的所有标准集合中的泛型语法。

一般类型通常是一个容器,例如 list。它是一种可以参数化的类型。参数化泛型是具有容器元素的预期类型的泛型的实例,例如 list[str]

我们可以使用listdict 内置集合类型作为泛型类型,而不是使用typing.List or typing.Dict.

例如,我们可以通过注释代码来指导 Python 运行时类型检查:

def print_value(input: str):
  print(input)
# We would get notified  if the input is not a string

在过去的几个版本中,已经在现有 Python 运行时的基础上逐步构建了许多静态类型特性。其中一些功能受到现有语法和运行时行为的限制。因此,由于泛型,在类型模块中存在重复的集合层次结构。

例如,我们将看到typing.Listtyping.Dictionary 以及内置的listdictionary等等。这使我们能够编写代码:

**def** read_blog_tags(tags: list[str]) -> **None**:
    **for** tag **in** tags:
        print("Tag Name", tag)

更多信息:https://www.python.org/dev/peps/pep-0585

5.特性:支持 IANA 时区

已经创建了模块zoneinfo 来支持IANA 时区数据库。对IANA 时区数据库的支持已经被添加到标准库中。

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

人教版:615

IANA 时区通常被称为tzzone info。有许多 IANA 时区使用不同的搜索路径来为日期时间对象指定 IANA 时区。例如,我们可以将搜索路径的名称作为洲/城市传递给一个datetime 对象来设置它的tzinfo

dt = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("Europe/London"))

如果我们传入一个无效的键,那么zoneinfo.ZoneInfoNotFoundError将被抛出。

详细解释:

我们使用datetime 库来创建一个datetime 对象,并通过设置 tzinfo 属性来指定它的时区。然而,当使用datetime.tzinfo基线时,我们最终会创建复杂的时区规则。

大多数时候,我们只需要设置对象并将其时区设置为 UTC、系统本地时区或 IANA 时区。

我们可以创建一个zoneinfo.ZoneInfo(key) 对象,其中的键是 string 类型的,表示系统时区数据库中时区文件的搜索路径。可以创建zoneinfo.ZoneInfo(key)对象,并将其设置为datetime 对象的tzinfo 属性。

代码:

**from** **zoneinfo** **import** ZoneInfo
**from** **datetime** **import** datetime

dt = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("America/Los_Angeles"))

欲知详情:https://www.python.org/dev/peps/pep-0615

6.功能:取消并发期货的能力

一个新的参数 cancel_futures被添加到concurrent.futures.Executor.shutdown()中。

此参数cancels 所有未开始的未决期货。在 3.9 版本之前,进程会在关闭执行器之前等待它们完成。

解释:

新参数cancel_futures 已经添加到ThreadPoolExecutorProcessPoolExecutor中。它的工作方式是当参数的值为 True 时,那么当调用 shutdown()函数时,所有未决的期货都将被取消。

简而言之,当执行 shutdown()时,解释器检查执行器是否没有被垃圾收集。如果它仍然在内存中,那么它将获得所有挂起的工作项,然后取消期货。

一旦没有挂起的工作项,它就会关闭工作线程。

链接:https://bugs.python.org/issue30966

7.特性:异步和多处理改进

在这个版本中,对 asyncio 和多处理库进行了许多改进。

作为一个例子,

  1. 由于严重的安全问题,不再支持asyncio.loop.create_datagram_endpoint()reuse_address 参数。
  2. 新增了coroutines, shutdown_default_executor() 和协程asyncio.to_thread()shutdown_default_executor 为等待ThreadPoolExecutor 完成关闭的默认执行器安排关闭。asyncio.to_thread()主要用于在单独的线程中运行 IO 绑定的函数,以避免阻塞事件循环。

关于多重处理库的改进,一个新的方法close()被添加到了 multiprocessing.SimpleQueue 类中。

此方法显式关闭队列。这将确保队列被关闭,并且不会停留超过预期的时间。要记住的关键是,一旦队列关闭,就不能调用方法get(), put(), empty()

链接:https://bugs.python.org/issue30966

8.功能:一致的包导入错误

在 3.9 版本之前导入 Python 库的主要问题是,当相对导入越过其顶级包时,Python 中的导入行为不一致。

builtins.__import__()升高ValueError 同时importlib.__import__() 升高 ImportError。

现在已经修好了。import()现在会引发ImportError 而不是ValueError

欲知详情:https://bugs.python.org/issue37444

9.功能:随机字节生成

3.9 版本中增加的另一个特性是功能random.Random.randbytes()。该函数可用于生成随机字节。

我们可以生成随机数,但是如果我们需要生成随机字节呢?在 3.9 版本之前,开发人员必须发挥创造力来生成随机字节。虽然我们可以使用os.getrandom(), os.urandom() or secrets.token_bytes() 但是我们不能生成伪随机模式。

作为一个例子,为了确保随机数以预期的行为生成,并且该过程是可重复的,我们通常使用随机的种子。随机模块。

因此,random.Random.randbytes()法被引入。它也能以可控的方式生成随机字节。

更多信息:https://bugs.python.org/issue40286

10.功能:字符串替换功能修复

在 Python 版本之前,“”.replace(“”,s,n)返回空字符串,而不是所有非零 n 的 s

这个错误让用户感到困惑,并导致应用程序的行为不一致。

3.9 版本已经修复了这个问题,现在与"".replace("", s)保持一致。

replace 函数的工作方式是,对于给定的 max replace occurrence 参数,它用一组新的字符替换字符串中的一组字符。

string.replace(s, old, new[, maxreplace])Return a copy of string s with all occurrences of substring old replaced by new. If the optional argument maxreplace is given, the first maxreplace occurrences are replaced.

为了进一步解释这个问题,在 3.9 版本之前,replace 函数的行为不一致

"".replace("", "blog", 1)
Returns ’'
One would expect to see blog"".replace("", "|", 1)
Returns ’'
One would expect to see |"".replace("", "prefix")
Howver returns ’prefix'

因此,现在的变化是,如果我们进入:

“”.replace(“”,s,n) returns s instead of empty string for all non-zero n

更多信息:https://bugs.python.org/issue28029

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

作者图片

Python 3.9 中也删除了许多冗余特性,比如Py_UNICODE_MATCH.

我对探索 3.9 版感到非常兴奋,因为其中的一些特性肯定会在我的应用程序中使用。

如果你想了解更多关于这些改进的信息,请点击阅读官方指南

数据科学家在封锁期间应该阅读的 10 本书

原文:https://towardsdatascience.com/10-books-data-scientists-should-read-during-lockdown-f49b68fad650?source=collection_archive---------5-----------------------

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

莎伦·麦卡琴在 Unsplash 上的照片

如果你和数据打交道,这些书会帮助你保持活跃和学习

介绍

几个星期以来,全世界都在与新冠肺炎作战,大多数人已经被封锁了一段时间。尽管我们大多数人仍然在家工作,但在空闲时间很容易感到无聊,不知道接下来在网飞看什么。

就我个人而言,我喜欢阅读,所以我想推荐一些我最近读过的书籍,这些书籍可能对与数据打交道的人有用或有趣。有些更专业,有些更有趣,但我相信你会在这里找到你想要的。

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

人工智能:思考人类的指南

我不仅向数据科学家推荐这本书,也向所有对人工智能及其未来成果感兴趣的人推荐这本书。对于一本面向普通大众的书来说,它花了很多时间在计算机视觉和计算机如何“思考”的细节上,对该主题进行了清晰而广泛的概述。它还谈到了人工智能对未来的展望以及你对未来几年的期待。AI 潜力有时会吓到我们,但我们也倾向于高估它在过去几年的进步。如果你对人工智能特别感兴趣,你可能会喜欢这篇关于如何让人工智能更有道德的文章

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

统计学:非常简短的介绍

如果你是一名来自 IT 或商业背景的数据科学家,并且想了解统计技术的基础,而又不想了解太多细节,这本书特别有用。它涵盖了基础知识,从概率分布到回归分析,以及决策树。顾名思义,它很短,你只需要花几天时间就可以读完。更详细的概述,你可以点击查看其摘要

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

精益分析

如果你在一家初创公司从事数据工作,或者如果你拥有一家初创公司并希望它开发其数据潜力,这本书是特别推荐的。它帮助你根据公司的商业模式以及如何优化它们来定义对公司最重要的指标,而不是淹没在一堆无用的指标中。这里可以找到更详细的总结

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

解决市场问题的人

这是一本非技术性的书,讲述了数学家吉姆·西蒙斯(Jim Simons)的故事,他开始使用统计数据进行股票交易,当时市场上的其他人都只使用直觉和传统的基本面分析。显然,起初每个人都对他的方法持怀疑态度,但在多年管理他的基金并取得惊人成果后,人们最终屈服了,并开始承认所谓的 quant 对冲基金的力量,这些基金目前在金融行业发挥着巨大作用。

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

商业预测交易

商业预测艺术的初级读本,这是在商业应用中使用数据和统计的最传统的方法之一。如果你有一些统计学和时间序列的知识,并且必须在工作中做预测,比如预测收入,这真的很有帮助。它涵盖了基础知识和神话,采用了非常实用的方法(尽管所介绍的技术可以被认为是过时的,但与机器学习技术相比,它们通常在这个领域中工作得非常好)。

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

用数据讲故事

对于那些在工作中必须使用数字来推销想法、展示成果或讲述故事的人来说,这是必备的。它更适合业务分析师,但数据科学家也可以从中受益,通过学习数据可视化技术,帮助他们展示模型的结果,更好地可视化和绘制数据。那种你一直回去复习重要概念的书。

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

为什么之书

我们经常被告知“相关性并不意味着因果关系”。然而,当你思考这个问题时,因果关系的概念并不是很清楚:T2 到底是什么意思?这本书讲述了我们如何从哲学角度看待因果关系,然后介绍了理解它的数学工具和模型。它会改变你对因果的看法。如果你想了解更多关于因果关系的知识,你应该阅读这篇文章

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

钱球

这是一个关于比利·比恩和保罗·德波斯塔的故事,他们通过挑选廉价的被忽视的球员,在职业棒球大联盟的一场出色的比赛中,带领一个小棒球队奥克兰运动家队。他们是怎么做到的?通过使用数据。这改变了球队选择球员的整个方式,以前这完全是由球探和他们的直觉来完成的。这个故事也启发了同名电影,它们都是杰作。

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

数据策略

这一点更多的是在业务方面,它可能有助于执行经理,甚至 C 级人员了解如何在一个组织中释放数据的力量。从如何从数据中提取有价值的洞察力,到如何将其货币化。如果你是一名数据科学家,它可以帮助你对自己在公司中的角色有一个更广阔的视野,以及如何使用数据帮助 it 创造价值。如果你想了解更多,这里有一篇关于这个主题的好文章。

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

机器学习的特征工程

尽管特征工程是数据科学工作流程中最重要的步骤之一,但它有时会被忽视。这本书是这个过程的一个很好的概述,包括详细的技术,警告和实际应用。它附带了大多数方法的数学解释和 Python 代码,所以您需要有一定的技术背景才能理解。关于特征工程方法的简要总结,你可以阅读这篇文章,大致基于这本书。

没人会教你的 10 条编码原则

原文:https://towardsdatascience.com/10-coding-principles-that-no-one-will-teach-you-37d64b5081ef?source=collection_archive---------13-----------------------

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

来源:作者图片

介绍

互联网将编码员定义为用一种外来语言实现涉及复杂逻辑和数学方程的算法以促进特定计算操作和功能的计算机呆子。诚然,人可以用这样的方式编码, 真正的编码技巧是当你能给机器写令人费解的指令时,这些指令也能被人类容易地阅读和理解。

想想看,写好代码就相当于写好故事。首先,给你的变量起个合适的名字。你不会把你故事中的人物命名为*ssddds**sfddfd*吧?😛

此外,一个令人恼火的深奥而老成的词汇的混合,使你的故事显得清晰明了,并不能使它成为一个好故事,对吗?(词汇学分,Shashi Tharoor 😛)
同样,仅仅在代码中使用高级算法并不能让你成为一名优秀的程序员!

当我们与不同的团队和业务单位合作进行一个真实世界的项目时,我们需要编写干净的可维护的、以及(如果可能的话)优化的代码,以确保跨职能流程。本文将展示一些概念和编码实践,从长远来看,它们将对您有所帮助。

1.对合适的人有合适的可见性

如今,在我们生活的世界中,所有业务部门对技术的依赖都在呈指数级增长,以实现业务的自动化、优化和扩展。尤其是在这个在家工作的新世界,数据驱动的解决方案的必要性是不可避免的。我们需要用一种面向对象编程 的方式来思考解决业务问题。需要正确层次的 抽象封装 ,向不同层次的业务展示不同层次的可视性。
在**商界,**通常,

客户只关心结果,不关心算法!

这里顾客的定义是主观的。

任何直接/间接使用你的解决方案的人都是你的客户。

取决于你做什么,它可以是合作开发者,项目经理,项目经理,测试团队,或者实际的客户本身。在本文中,我将使用术语“客户”。我们的责任是确保客户能够获得输出,而不处理超出范围的任何事情。

考虑一个茶叶店的类比;顾客说的都是,“*兄弟,两杯茶!”,*他们并不是真的想知道后台发生了什么,也就是说,水和牛奶的比例是多少,我们从哪里获得供应,等等。除非他们明确说明。

同样,泡茶的厨师通常不需要知道玻璃杯是在哪里制造的,或者种植茶叶所需的土壤条件是什么。他只是需要货源。

2.模块化您的解决方案

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

封装级别[来源:作者图片]

总是将你的代码保持在模块中,而不是给出一个冗长的脚本/笔记本作为你的解决方案,利用 导入系统

优点:

  1. 让顾客觉得事情简单,对他们隐藏不必要的细节。
  2. 可重用资产:你可以找到一些几乎所有项目都会用到的模块,你可以很容易地重用它们,而不是重复发明轮子。
  3. 更容易的协作:当每个个体贡献者处理不同的文件时,合并冲突的概率将显著降低。

如果您对创建自己的 Python 包感兴趣,请查看官方文档。你也可以看看我为了创建新的 Python 包而创建的这个 Python 包 。是的,这是一个**包装异常!**这将创建基本的框架和文件夹结构;你可以用你的溶液填满它们。

3.首先创建 0 版解决方案

总是先创建一个基本解决方案。这将允许我们展示一些进展并开始讨论,这将有助于你从客户那里获得早期反馈。

开始错了,总比结束错了好。

因为即使你有一个你认为能在截止日期前完成的更好的解决方案的想法,你也应该假设你不能完成它的场景。然后,对于客户来说,你什么都没有。

这样,您就取得了一些进步,并可以在按照您的预期完成模块后,以改进的表现给客户留下深刻印象。

总是有一个后备选择。A 计划几乎永远行不通,准备好 B 计划。

4.版本控制系统和错误记录

说到后备选项,当你在团队中工作时,对版本控制系统有一个公平的理解是必须的,比如【Git】。这将确保:

  1. 更容易的协作和分支。
  2. 隐式备份
  3. 指责游戏在这里不起作用。每一行代码都被跟踪。
  4. 你的文件夹看起来不像
    final _ code . py
    final _ code _ 2 . py
    final _ code _ for _ sure . py
    final _ code _ possible _ not . py
    final _ code _ tell _ you _ so . py……

    再也:P

拥有一个日志文件来记录的进度和错误将会大大减少调试工作。

5.即插即用功能

创建一个配置文件**,用于激活/停用解决方案的各种功能。这可以在许多方面帮助我们:**

  1. 如果我们对同一个问题有多种可能的解决方案,并且需要测试所有的可能性。
  2. 你需要在一个子模块中调试一个问题,这不需要很多其他模块。在这里,您可以简单地停用它们,避免运行那些不需要的模块所花费的时间。

6.信任他人,而不是他们的代码

现实世界编码中最重要的技能之一是防御性编码的艺术。在我上一篇关于现实项目 中 Python 的 目录和文件处理的文章中,我提到了异常处理的必要性。****

防御性编码是一种编程方式,旨在预测可能的失败点。

当你是一个大型项目的一部分时,你将与许多其他开发人员合作,你将不得不创建具有外部输入的模块,这些外部输入将是原始数据本身或来自其他模块的处理输出。

我们需要预料到人为错误和现实世界噪音的可能性,并努力处理它们;我们的想法是,我们的解决方案不应中断;如果您的模块无法运行,您应该记录错误并继续**。**

尤其是我们在处理 AI 项目的时候,由于误报,一些模块的失败是意料之中的;这并不意味着代码应该中断;可能还有其他运行良好并为客户增加价值的模块。你需要花时间在:

  1. 异常处理:总是假设你的模块出现故障的情况,并提供异常。
  2. ****角落案例:这是你直觉思维可以发挥作用的地方;当您创建一个解决方案时,考虑各种可能需要为异常情况添加一些额外逻辑和条件的场景。

正如他们所说,

代码必须继续!

7.也不要相信你的代码!

不言而喻,我们是人类,人类容易犯错误。无论你是一个多么优秀的程序员,都要对你犯错误的可能性保持开放的态度。您可以尝试以下方法来尽量减少错误:

  1. 一旦你完成一个模块**,休息一下。做些别的事情,然后回来看看你的代码。你会惊讶地发现,你可以很容易地找到前一阵子从未想到过的错误和优化。这也适用于你被困在某件事情上的时候。**
  2. ****同行评审:不同的视角总能帮到你,有时候,仅仅通过向别人解释你的代码,你就能想出更好的点子。想大声点

8.不要对你的代码感情用事!

当你花大量时间头脑风暴、学习新技术、解决大量边角案例、代码优化等。为了创造一个解决方案,你倾向于依赖它,因为它是由你的创造力和智慧创造的。

当然,这种激情和创造力会让你写出更好的代码,解决复杂的挑战,但也有一些缺点。有时候,完美主义会适得其反。

  1. 你继续向你的客户过度解释你的算法之美,而客户并不真正关心这些。
  2. 在不断发展的业务场景中,任何事情都可能在一天之内发生变化。你会被要求放下去年一直在做的事情,开始一个新的项目,而执着于你的代码会让这变得困难。
  3. 你得到过度保护** **你的代码,失去客观性,认为不可能出错。

这听起来可能很傻,但这是一件真实的事情,即使在这个行业工作了三年多,我有时仍会为此而挣扎。

9.完美只能追求

最后,接受一个事实,完美是无法达到的,只能追求。不管你觉得今天写的代码有多好,如果一个月后再看,你可以想出很多方法来改进它。就像那个迷因,

我,一个知识分子,评判犯同样错误的人,我最近学会停止犯

但是如果你追求完美,你就会达到卓越。只要你玩得开心,就要坚持学习!

10.结论

我们在这个博客中讨论的大多数观点不仅适用于编码,也适用于生活。正如史蒂夫·乔布斯所说,

每个人都应该学会给电脑编程,因为它教会你如何思考

——乔布斯

事实上,我也是遵循这些原则来完成这篇文章的!

感谢您花宝贵的时间阅读我的哲学;我希望你能从中受益:)

您可以在sreekiranar@gmail.com**给我反馈和建议,或者在 LinkedIn 上联系我。你也可以看看我的 GitHubstack overflow**

快乐编码!😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值