欢迎光临
我们一直在努力

PDSII是什么意思TowardsDataScience 博客中文翻译 2021(五百零一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

原文:https://towardsdatascience.com/my-path-variable-is-a-mess-e52f22bfa520?source=collection_archive———12———————–

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

莉莉·波普在 Unsplash 上拍摄的照片

当你安装一个程序时,它经常要求你添加一个路径到你的 shell 配置文件。我盲目地想,“这个工具很酷。我现在就想用!”过了一段时间后,你发现你的路径变量一团糟。许多重复或三重的路径。是时候清理了。

以下命令用新行替换冒号,排序,计算唯一路径出现的次数,并显示:

$ echo $PATH | sed 's/:/
/g' | sort | uniq -c

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

我从 echo $PATH | sed 的/😕 n/g ’ | sort | uniq-c . Image by Author 输出的部分。

你有不止一次的经历吗?如果是这样,请继续阅读!

macOS 有path_helper命令。path_helper是构造 PATH 环境变量的助手。

man path_helper:

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

man path_helper 的输出。图片作者。

默认路径和 MANPATH 值在/etc/paths/etc/manpaths中。并且path-helper 还读取etc/paths.d/etc/manpaths.d目录中的文件。

让我们检查一下/etc/paths的内容:

$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

这些是 macOS 上的默认路径。如果您的 shell 配置文件中有这些,它将在路径输出中重复它们。

现在让我们检查一下/etc/manpaths的内容:

$ cat /etc/manpaths
/usr/share/man
/usr/local/share/man

当您使用man命令时,它将在上述路径中搜索手册页。

您可以输出 PATH 和 MANPATH 变量:

$ /usr/libexec/path_helper

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

/usr/libexec/path_helper 的我的输出。注意第一行的/Library/Apple/usr/bin。图片作者。

您可以查看etc/paths.d/etc/manpaths.d中有哪些文件。

$ ls /etc/paths.d
100-rvictl$ cat /etc/paths.d/100-rvictl
/Library/Apple/usr/bin$ ls /Library/Apple/usr/bin
rvictl

它加载了100-rvictl并具有/Library/Apple/urs/bin。我的/usr/libexec/path_helper第一行有/Library/Apple/usr/bin

Ubuntu 使用/etc/environment进行系统范围的配置,您可以在这个文件中找到默认路径。

ubuntu@shin-instance:/$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

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

/etc/environment 中的 Ubuntu 输出。图片作者。

如果您是 ZSH 用户,并且在您的~/.zshrc文件中有太多的路径,您可以在您的~/.zshrc的末尾添加以下内容:

# .zshrc
typeset -U PATH

这可以防止路径变量重复。

在 UNIX 上,您可以使用冒号添加多个路径:

PATH="/path1/to/file:/path2/to/file:/path3/to/file:$PATH"

如果您想要前添加一个路径(在默认路径之前),请使用:

PATH="/path/to/file:$PATH"

如果你想追加一个路径(在默认路径之后)使用:

PATH="$PATH:/path/to/file"

例如,如果要添加/usr/local/sbin路径:

export PATH="/usr/local/sbin:$PATH"

如果您的 Bash 脚本在~/bin目录中,并且您想将它放在前面:

export PATH="$HOME/bin:$PATH"

不要在要添加的路径前后添加$PATH

您可能希望在 ZSH 和 Bash shell 中共享相同的路径。一种方法是在您的~/.zshrc文件中获取~/.bashrc

# In the ~/.zshrc, sourcing ~/.bashrc 
. ~/.bashrc

如果您使用 iTerm2 ,iTerm2 在 Preference>Profiles>General>命令下有“登录 Shell”。它会在~/.bashrc之前寻找~/.bash_profile

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

iTerm2 使用登录 Shell。图片作者。

这意味着您需要在~/bash_profile中获取~/.bashrc:

# In ~/.bash_profile
. ~/.bashrc

然后在~/.bashrc中,添加您想要在 ZSH 和 Bash shell 中使用的路径。添加路径或包含路径的源文件。

# I have all the GNU/Linux PATH in [~/.macgnu](https://github.com/shinokada/macgnu/blob/main/.macgnu) file
. ~/.macgnu
export PATH="/path/to/file1:$PATH"# Terminal color
export PS1="[033[01;32m]w:$ [033[00m]"# not display errors when using apropos and whatis
alias apropos="apropos 2>/dev/null"
alias whatis="whatis 2>/dev/null"
...

如果您正在寻找其他路径文件,这可能会导致路径重复。您需要仔细检查您是否正在寻找相同的路径。注意不要在不同的 shell 配置文件中添加相同的路径。

如果你声明了一个没有附加或前置的路径变量,你没有从/etc/paths加载路径。从长远来看,这将是问题的一个原因。你总是在你的配置文件中为$PATH变量添加新的路径,比如~/.zshrc~/bashrc等等。我建议偶尔进行路径检查,以获得健康的外壳寿命。在~/.bashrc中编写公共因子并在~/.zshrc中获取是个好主意,但是要小心路径的重复。如果使用 ZSH,添加typeset -U PATH可以防止路径变量重复。

通过 成为 会员,可以完全访问媒体上的每一个故事。

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

https://blog.codewithshin.com/subscribe

原文:https://towardsdatascience.com/my-pc-vs-azure-ml-compute-go-98a6e33e816c?source=collection_archive———44———————–

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

照片由蒂姆·高在 Unsplash 拍摄

几周前,我在 YouTube 上制作了一个视频,内容是将微软 Visual Studio 代码连接到运行在 Azure 计算资源上的 Jupyter 笔记本(通过 Azure ML Studio)。当我制作视频时,我一直在想那个远程服务器到底有多快。

所以我决定测试一下。

这是 Jupyter 设置的视频:

作者提供的视频

我不会让您费力地完成我的探索性数据分析,甚至加载我的数据。这与我的目的没有密切关系,我的目的只是向您展示在我的个人电脑上运行一段重要代码与在 Azure 上进行比较之间的区别。

正如我在 Jupyter 视频中所说的,如果你想跟进,你还需要一个 Azure 帐户,并创建一个 Azure ML Studio 资源。这里有一段视频向你展示如何做到这一切。

作者提供的视频

代码运行的是 GridSearchCV,它不仅运行交叉验证,还进行一些相对重要的超参数调优。我选择这个场景是因为它需要一些时间在我的电脑上运行,并且代表了远程计算的常见情况。

你可以看到代码通过 5 个交叉折叠经历了许多KNeighborsRegressor选项。最后总共是 360 度。根据您的需要,为任何估计器/调整/ CV 选项修改这段代码并不困难。

我还添加了自己的计时器,只是为了获得整个代码的完整运行时间。

我的电脑是微软 Surface,配有 i7–8650 u CPU 和 16 GB 内存。我运行的是 Windows 10。即使没有 GPU,它通常也很快。

为了运行所有 360 fits,我的电脑总共用了 4287 秒,即 71.4 分钟或 1 小时 11 分钟 27 秒左右。不可怕,但更能说明问题的是在这段时间里我的电脑发生了什么。

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

作者图片

我的 CPU 完全被运行的代码消耗了。我认为这是占用所有 CPU 的工作室代码,但它(逻辑上)实际上是 Python:

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

作者图片

看看所有这些 Python 进程!整个 1:11.27 的 CPU 利用率超过 90%。虽然在我的电脑上做其他事情在技术上是可能的,但实际上是不可能的。一个多小时了。在一个简单的模型上。做一件事。

在 Azure 中,我创建了一个很好的 CPU(对于一个免费帐户来说,这是我能做到的最好的了)——它不是 GPU。标准 DS12 V2 计算机拥有 4 个内核和 28 GB 内存。默认情况下,Azure ML Studio Compute 运行在 Linux 上。

它肯定比我的电脑更强大。而且是 30 美分一小时

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

作者图片

在连接到 Azure 的 Jupyter 笔记本上运行完全相同的代码需要 1621.6 秒,也就是 27 分钟零 2 秒(27.02)。云计算运行速度提高了 62%。但更重要的结果是:

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

作者图片

Python 是空闲的,我的 CPU 利用率下降到了 12% ( < 3% was Studio Code). This mean while those 360 fits were running, I can do anything I want on my PC!

Not bad for a free account and about 30 minutes of setup (total). Imagine what that could be with a GPU or better yet, a GPU cluster (I can’t create either of those with the free account or I would have).

I’m not going to try and convince anyone about the value of cloud. But there are some facts worth noting:

  • I can get the latest and greatest CPU/GPU (if I have a real subscription) with almost no effort
  • I need to do 很少管理那个服务器
  • 当我不用它的时候,我不付钱(只要我用完它的时候记得关机
  • 我没有在上面安装任何软件(正如我在 Azure 安装视频中演示的那样,添加 Python 包超级容易)
  • 在代码运行时,让我的计算机可用对我来说是无价的;我不需要等待,可以同时处理很多这样的情况

我决定模拟(胡乱猜测)这在财务上可能是什么样子。我的电脑买的时候大约是 1800 美元。如果我是一家公司,有一个 3 年的折旧计划,那么每年就是 600 美元。

假设我运行了 1000 次像我的例子一样的代码。也就是 1000 * 71 分钟,也就是 71000 分钟,也就是 1183 个小时。我的电脑每小时的费用大约是 600 美元(每年的成本)除以 1,800(我每年工作的小时数……是的,没错)。这大约是每小时 33 美分(比我预期的更接近 Azure)。这相当于每年 394 美元。

在 Azure 上运行这个工作负载是 1000 * 27 分钟或 27000 分钟(450 小时,快 62%)。450 * .30 = $135.少了 259 美元,或者说便宜 66%。更不用说,当代码在 Azure 中运行时,我可以在我的电脑上做任何其他事情,而当我在电脑上运行工作负载时就不是这样了。

我知道,这是一个非常粗略的财务草图(充其量),但当数字改变时,价值不会改变(只是或多或少)。

在我看来,Azure 在各方面都赢了。虽然自从我有了 Surface,微软输了吗?(因为我买了 Surface,而且我也在写关于 Azure 的东西,所以我猜不会。)

云计算快乐!

原文:https://towardsdatascience.com/my-recent-interview-experience-with-google-c7e8e1206260?source=collection_archive———14———————–

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

Firmbee.com在 Unsplash 上拍照

个人故事。

如果你想让自己在新技术主题上保持最新,尤其是在数据科学和机器学习领域,写技术文章是实现这一目标的最佳方式之一。

例如,我喜欢从头开始创建机器学习应用程序和 python 程序,并通过记录步骤和做笔记来跟踪开发过程。这次实践教会了我很多。

写我已经完成的项目就像向自己展示我是如何完成的。过了一段时间,我发现我这样学得更好。我就是这样体会到写作和教学的力量的。我认为教学是长期学习的最佳途径,即使你是在自学。

作为一个软件工程出身的人,我可以说技术写作对我来说并不有趣。但是写的越来越多之后,我觉得用起来更舒服了。这也是我申请谷歌技术写作职位的动机。

在这篇文章中,我将分享我在谷歌的申请过程,以及它如何帮助我更好地了解自己。整个申请过程花了我不到一个月的时间。事情是这样的。

星期一,申请了这个职位。软件工程技术作家。

周三,招聘人员发来一封邮件。得到快速回复,我超级兴奋。

使用日历链接安排的电话呼叫。

周五,与招聘人员进行 30 分钟的电话交谈。进行得太顺利了。善良友好的人。我真的很喜欢这次聊天。

我已经走到第二步了。分享我的一些作品。

一周后。

我想保持列表的多样性。所以,我从三个不同的主题中挑选了文章:语音识别,人脸识别和语音情感识别。

周五,我和招聘人员分享了我的三份技术写作样本。

周末,很高兴得到反馈。

下周。

周一,招聘人员回复。对书写样本进行了审查。我被下一步录取了。耶!

周二,一封来自招聘协调员的邮件。下周安排一次面试。

很棒的电子邮件,解释了面试过程的一切。谷歌会议链接。以及更多关于这一过程的有用指南的链接。

下周。

星期一,大日子!采访技术作家。他已经在谷歌工作了 5 年多。很知性的人!我真的很喜欢这次谈话。这是一次 45 龙敏的采访。

我们检查了写作样本,他问了一些技术问题。

最后,我也有机会问了许多问题。整个面试进行得很快很顺利。

同一周。

周三,我收到了招聘人员发来的一封电话聊天的邮件。得知自己的表现,我非常兴奋。

反馈:需要更多经验。

我被拒绝了。我有点震惊。我很难过。

经过一周的消化一切;我不再感到悲伤,尽管我为自己感到骄傲。让我告诉你为什么。

我喜欢做创造性的事情。而写作绝对是其中之一。自由写作。在自己的时间用自己的声音写作。

去年在一级防范禁闭期间,我开始编写动手编程教程。我已经有了一个小的个人博客,我经常在那里写东西。当我有机会呆在家里一段时间时,我决定试一试,把我的博客带到一个新的高度。就在那时,我决定加入媒体伙伴计划,与世界分享我的文章。

经过 18 个月的写作经历后,我来到了这里。有超过 2000 名追随者,我不知道有多少人观看。是的,有点多。(我不喜欢分享号码,所以我会保守这个秘密。)

我喜欢我在这里做的事情。与大家分享动手编程教程和项目。与出色的出版物和编辑合作。与来自世界各地的读者和作家没有任何界限的联系。

  • 我了解到“技术写作者”的职位并不适合我。至少在我人生的这个阶段。
  • 我了解到我在这里做的事情和在一家高科技公司成为一名技术作家有点不同。技术作家大部分时间都在写文档,我更喜欢博客风格。
  • 我发现我的年龄还不足以胜任技术写作的职位。在美国,技术作家的平均年龄是 46 岁。我现在还 20 多岁。
  • 我了解到面试对双方来说都是很棒的经历。在进行下一步之前,你可以随意问他们你想知道的任何问题。
  • 我很高兴我申请并通过了整个过程。我一路走到了第三步,对此我非常自豪。
  • 谷歌的面试过程是如此的顺利和中肯。我在路上遇到的每个人都很好,很善良。我一点也不觉得有压力。我会保持联系,为未来不同的机会。

对我来说,写作是铅笔,而不是最终产品。比起写作,我更喜欢创造新事物的过程。

  • 我将更加专注于软件开发。
  • 我会继续在 Medium 和我的个人博客上分享动手编程教程。
  • 我将继续联系我的读者,帮助他们解决编码问题。
  • 我将更加努力在我的行业获得更多的经验。
  • 我会提出一些项目想法,这些想法可能会成为未来个人公司的种子。如果事情没有按计划进行,早点开始将有助于我有更多的时间再次尝试。

拒绝给了我时间 重新思考提问 我的目的地就分在这人生的旅途中。这是值得的。

感谢您花时间阅读我的简短采访之旅。这是一个个人故事,但我希望它能给你一些启发和灵感。我写这篇文章的目的是安慰我自己和任何可能需要勇气来处理生活中这种拒绝的人。请随时通过我的博客联系我。

我是 贝希克·居文 ,喜欢分享编程、教育、生活方面的故事。 订阅 给我的内容留下灵感。Ty,

如果你想知道我写什么样的文章,这里有一些:

  • 使用 Python 构建人脸识别器
  • 分步指南—用 Python 构建预测模型
  • 使用 Python 从视频中提取语音
  • 使用 Python 构建语音情感识别器

原文:https://towardsdatascience.com/my-rooftop-project-a-satellite-imagery-computer-vision-example-e45a296129a0?source=collection_archive———11———————–

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

凯文·杨在 Unsplash 上的照片

我们都越来越关注全球变暖。随着时间的推移,世界上又一场自然灾害发生了。如果你在这个线程上,你可能想做点什么。如果你能用你所有的知识,你所有的背景来建立一个系统来对抗它,让我们的生活更可持续会怎么样?作为一名机械和航空航天工程的双学位毕业生,我发现热岛的一个方面可以通过计算机视觉技术和数据挖掘来有效地解决。在这篇文章中,我将向您介绍一个简单而全面的解决方案,这是我在参加欧空局举办的哥白尼大师赛 2021 期间开发的。这次黑客马拉松通过征集对抗气候变化的概念来促进卫星图像的利用。在影像上使用著名的 Mask-RCNN 时,该解决方案可以定位助长热岛现象的深色屋顶建筑物。

未来几年城市地区的主要问题之一将是热岛现象。城市中心通常使用的建筑材料,如混凝土、柏油路面和钢铁,限制和储存入射的太阳能,使大白天的温度大幅上升至 40°c。另一方面,众所周知,在没有这些材料的地方,如农田或农村,即使在热浪期间,温度也不会上升太多。显然,解决办法是消除这些材料和太阳能之间的相互作用,但是说起来容易做起来难!在这种情况下,空调通常用于将热量从建筑中带走,但它只是将热量转移,而不是将热量带出城市(热量最终会重新进入被冷却的建筑,参见傅立叶定律)。所以问题依然存在。

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

城市热岛示意图(资料来源:莫里斯和西蒙兹,2000 年)

我对建造屋顶感兴趣,因为它们是问题的核心。它们直接面对太阳,因此它们直接接收入射的太阳能并与之相互作用。当屋顶隔热层用深色涂层制成时,它会明显地储存太阳能,因为众所周知深色会积聚热量。这导致车内温度大幅上升,因此将使用更多的空调。它会使电费更加膨胀。它还会导致周围的大气通过对流变热,然后出现热岛现象。但是你能做什么呢?希腊长期以来所做的是用一种非常反光的白色油漆来粉刷建筑物的侧面。这种颜色会大大增加反射太阳能的部分,因此屋顶吸收的太阳能部分会大大减少。热量不太可能进入建筑物,室内温度不太可能升高,因此空调消耗较少。此外,随着更多的太阳能直接返回太空,周围的大气不太可能变热,热岛现象大大减弱。

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

图片来自作者

正如你在非常迷人的希腊城市圣托里尼所看到的,白色绘画已经进行了几个世纪,但这一过程在西方国家仍处于萌芽状态。这个项目的目标是使人们能够方便地进入受益于屋顶白色油漆的建筑位置。当地的决策者、政府甚至公司将很容易找到联系人来推动当地的进程。让我向您介绍一个我认为可以完成这项工作的管道概念。

该管道由 3 个不同的系统组成,这些系统放在一起可以形成一个地址、建筑业主联系方式和屋顶表面的数据库。管道最终对它所处理的任务来说“相当”简单。你可以在下面的幻灯片中看到我在 2021 年夏季哥白尼大师赛上展示的管道。

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

图片来自作者

  • 空间供应商提供的非常高分辨率的卫星图像随时可用,即每一个大气校正都已经应用。在培训期间,我主要使用美国地质调查局通过国家地图服务公开发布的美国城市图像(芝加哥、奥斯汀、旧金山)。美国地质调查局、国家地理空间计划提供的地图服务和数据。这项服务是开源的,所以你可以对数据做任何你想做的事情!😉

  • 然后对图像进行预处理和格式化,以便正确地输入掩模 RCNN 算法。更具体地说,图像分辨率降低到 0.6 地面米/像素,并被削减到只有 1024 像素边的正方形图像。每一步都使用 GDAL 库来保存嵌入在数据集中的地理空间元数据。tiff 文件。

  • 预处理和分割成训练/val/测试子集的数据然后被馈送到掩模 RCNN Matterport 算法。我选择它是因为,目前,它是对象检测/实例分割领域中最有效的算法之一。这种计算机视觉算法能够检测(单独识别)图片的特定元素,并将它们所属的像素与这些元素相关联。使用图像地理空间信息,可以计算每个屋顶的全球 GPS 坐标,并用经度和纬度来标识。稍后,它将能够估计屋顶表面被刷成白色。

  • 每一对*(经度,纬度)*被发送到 Google Maps API,使用反向地理编码功能转换成地址。API 发回的信息随后被处理并存储在一个基本的 csv 数据库中(我正在处理 PostGIS 数据库,以获得一个健壮而灵活的工具)。其他 API 功能可用于获取更多关于建筑物的详细信息,如联系信息。

使用 12GB GPU 在 Google Colab 会话上执行训练。迄今为止,我已经能够在一些看不见的图像上测试管道,第一批结果相当令人鼓舞。即使在 0.37 公里的瓦片上仍然没有检测到一些建筑物,主要的建筑物屋顶也能被人工智能正确识别,并被谷歌地图 API 精确定位。与黑客马拉松幻灯片相反,TRL 目前是 6 比 5,因为所有渠道开始表现良好。对于你们当中的数据科学家,我将继续通过改进 mAP 和 mAR 来注释 tiles 以提高管道性能。你可以在我的 Github repo 中找到与这个项目相关的代码。

这个管道项目表明,对抗气候变化的伟大系统可以用每个人都可以获得的技术来建造。如果每一块砖都包含一种专门的技术,那么将它们组合在一起就会形成一条强大的管道。

让我们在我的 LinkedIn 和 T2 Github 上保持联系,了解更多的深度技术项目😉。在 UpWork 上为你的计算机视觉自由工作找到我。#爱芝加哥

原文:https://towardsdatascience.com/my-search-for-a-better-spotify-playlist-to-use-for-workouts-ed8d4a191074?source=collection_archive———39———————–

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

照片由德鲁·格拉汉姆在 Unsplash 拍摄

如果你像我一样,那么你对健身和锻炼的享受将与你对音乐的热爱紧密相连。我相信孔子曾经说过*“音乐产生一种人类自然不能没有的快乐”*,鉴于我在激烈运动时经常经历的真正的不适,我经常需要音乐的独特快乐来淹没消极的精神沉思,这种沉思反复鼓励我放弃运动,过一种更安静和闲散的生活。

不要误解我,我确实喜欢锻炼和训练(尤其是在最后),然而,我有时会想,如果我听不到我的音乐,感受不到令人愉快的旋律或引人入胜的低音线带来的温暖保证,我是否会同样喜欢我的锻炼。我不会考虑不带耳机和一个足够有条理的播放列表去跑步,我也不会考虑在没有响亮的音乐和访问我的 Spotify 帐户的情况下锻炼。音乐是我锻炼的阳之于阴。

现在你明白了我的锻炼强度和动机是如何与我听的音乐紧密相关的,你可能会更好地理解我这个项目的动机;因为,尽管 Spotify 在应用程序和网络播放器中提供了合理的搜索功能,但我目前不知道有什么功能可以让我根据特定的音频特征(如速度和能量)精确地过滤歌曲。

我知道 Spotify(和其他公司)为锻炼和其他情况提供特色播放列表,但是,因为我没有读过任何关于用于确定这些播放列表中有哪些曲目的具体标准的文档,所以我想我会通过分析我当前锻炼播放列表的音频功能来定义我自己的新锻炼播放列表的标准,来尝试一下。

在这篇文章中,我描述了我如何通过遵循数据驱动的方法和使用 Charlie Thompson 的神奇的spotifyr包来创建一个特定的声音播放列表库。该软件包允许您深入研究您的 Spotify 收听习惯,并提供与您最喜爱的歌曲和艺术家相关的详细信息。我发表这篇文章,希望我分享的任何信息都可能对那些新手、spotifyr的其他用户以及英国音乐的支持者有所帮助。

这篇文章的结构如下:

  1. 在 R/RStudio 中设置spotifyr包;
  2. 我如何分析我当前的健身程序播放列表,以确定我理想的健身程序播放列表所需的曲目数据和音频特征;
  3. 使用spotifyr在 Spotify 中搜索并过滤音频特征符合我所选锻炼标准的歌曲;
  4. 我是如何创建多个锻炼播放列表并上传到我的 Spotify 库中的;和
  5. 我对新锻炼播放列表的最初感受和反应。

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

亚历克斯·格鲁伯在 Unsplash 上的照片

为了避免网上重复的内容,我将避免简单地重复设置和初始化spotifyr的最基本方面的操作方法。对于如何安装和设置spotifyr的概述,Charlie Thompson(软件包的开发者)有一个特定的网页,详细说明了安装和认证软件包所需的步骤,位于这里。

除了查理的spotifyr网页,我还发现以下网站有助于设置和初始灵感:

  • 用 R 和“spotifyr”探索你在 Spotify 上的活动:如何分析和可视化你的流媒体历史和音乐品味;
  • 用数据找最愤怒的死缠烂打宋:一个暗号;和
  • 用 R 探索 Spotify API:初学者教程,作者:初学者

在开始这个项目之前,我用下面的代码初始化了需要的 R 包:

library(spotifyr)
library(tidyverse)
library(scales)

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

诺贝特·布杜茨基在 Unsplash 上的照片

我首先需要了解 Spotify 音频功能,这些功能定义了我目前认为的剧烈或高强度锻炼的最佳聆听体验。幸运的是,我有一个代表性的播放列表来分析(“我的最佳播放列表”),由 26 首曲目组成,当我需要一致的高节奏节奏和响亮的低音时,我会默认使用它们。

我使用函数get_my_playlists(limit = 50)来检索我的库中的前 50 个播放列表。从产生的数据帧中,我能够定位我的最佳播放列表的id,我将其命名为my_optimum_gym_playlist_id。如果您的媒体库包含超过 50 个播放列表,您还需要包含offset = 50来检索您的媒体库中的下 50 个播放列表。

现在我有了最佳播放列表的相关 Spotify ID,我使用函数get_playlist_audio_features()来检索播放列表中每个曲目的流行度和音频特征的数据帧。对于我的初步分析,我只是想了解播放列表中的每个曲目在典型的价/能量情绪象限模型中的排名,其中:

  • 低能/低价歌曲被认为是“悲伤的”或“压抑的”;
  • 低价/高能歌曲被认为是“愤怒的”或“动荡的”;
  • 高价/低能歌曲被认为是“平和的”或“冷的”;和
  • 高价/高能歌曲被认为是“快乐的”或“欢乐的”。

使用上面的代码,我能够直观地看到我的最佳播放列表中的每首歌曲在情感上的排名:

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

正如我们从上面的散点图中看到的,我的最佳播放列表不包含令人沮丧或冰冷的歌曲,所有歌曲(除了一首)的“能量”值都在 0.50 以上。正如我所料,我的最佳播放列表包含高能轨道。Spotify 表示“*充满活力的歌曲感觉起来很快、很响、很吵”,*这是一种解脱,因为这个特定的播放列表应该代表我在高节奏和高强度训练中选择的歌曲。

在使用情绪象限模型对我的最佳播放列表中的每个曲目进行可视化后,我想了解该播放列表是否有其他突出的特征,可以用作基准来创建我的理想锻炼播放列表库。

通过使用上面的代码,我能够将原始的my_optimum_gym_playlist_audio_features数据帧转换成长格式,然后我可以用它来创建密度图和总结音频特征数据的表格。

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

在查看了图表和汇总表后,我注意到了我的最佳播放列表中的以下特征:

  • 音轨的速度在 89 bpm 以上;
  • 响度低于-3 分贝;
  • 仪器化程度小于 0.0062;
  • Key 是一个从 1 到 11 的整数值;
  • 轨道模式为 1 或 0;
  • 音轨的声音、舞蹈性、能量、活性、语速和效价范围从 0 到 1;和
  • 26 首曲目中有 2 首是 2018 年之前发布的。

虽然密度图提供了数值分布的良好视觉效果,但我也为每个音频特性创建了一个箱线图,这样我就可以更好地显示与我的最佳播放列表中每个音轨相关的数值。给定不同音频特征的值的变化和范围,为了显示我的初始箱线图可视化,我排除了“速度”、“音量”、“键”、“模式”、“乐器性”和“音轨持续时间 _ 毫秒”。

我使用上面的代码创建了以下六个选定音频特征的箱线图:

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

有关每个音频功能代表什么的更多信息,请访问 Spotify 开发者页面 此处

然后,上面的代码用于创建其他六个音频特征的第二个箱线图可视化:

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

既然我已经分析了我的最佳播放列表的 Spotify 音频特性,我还需要了解分配给播放列表中每个艺术家的流派。

使用上面的代码,我能够总结并创建一个条形图,显示我的最佳播放列表中分配给每个艺术家的流派:

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

看着上面的图表,任何认识我的人都不会对这个结果感到惊讶,因为尽管我喜欢美国嘻哈音乐,但我目前更喜欢高强度锻炼时英国嘻哈音乐和 grime 音乐的声音。套用伟大的鲍勃·马利的话,当音乐击中我时,我感觉不到痛苦!只是有一些关于英国曲调和他们的节拍。

现在我已经分析了我的最佳播放列表的音频特征,这个过程的下一部分是决定适当的阈值(最小/最大)。

在查看了各种图表、表格和数据框后,我决定为新的锻炼轨迹选择以下最佳标准:

  • 能量> 0.67;
  • 可跳舞性> 0.64;
  • 节奏> 100 bpm
  • 曲目发布日期> 2017–12–31;
  • 仪器性< 0.0062;
  • 活性< 0.20;
  • 语速< 0.33;
  • 120000 毫秒
  • -11 分贝

我已经分析了我的代表性锻炼播放列表,并定义了 Spotify 音频功能,以将哪种类型的歌曲包含在我的新锻炼播放列表中,现在我必须在 Spotify 中搜索并过滤符合我的最佳标准的英国嘻哈、grime 和英国备选嘻哈歌曲。

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

由内森·杜姆劳在 Unsplash 拍摄的照片

在开始这个潜在的耗时的 Spotify 兔子洞之旅之前,我在网上搜索了旨在解决这个 Spotify 过滤难题的相关网站、内容或应用程序。我偶然发现了 Nelson ,一个网站/应用程序,被 Engadget 描述为*“一个内部项目,感觉更像是一个玩具,而不是一个确切的工具或适当的功能”,*在测试了几次应用程序后,我不得不同意 Engadget 的观点,尽管这个网站很有趣“*瞎玩……有时结果有点令人困惑。”*此外,流派过滤器排除了英国 hip hop、grime 和英国另类 hip hop,这进一步证实了我将不得不潜入 Spotify 的庞大图书馆寻找我想要的歌曲。

使用上面的代码,我能够检索 Spotify 的“uk_hip_hop”流派中所有艺术家的数据。在执行代码时,我收到了以下警告消息(这似乎不会妨碍我的分析):

In stri_detect_regex(string, pattern, negate = negate, opts_regex = opts(pattern)): argument is not an atomic vector; coercing

您会注意到,在我的代码末尾,我包含了以下内容:

dplyr::filter(!str_detect(genres, "ukrainian"))

我包含了过滤器,因为我注意到最初的数据帧以c("ukrainian hip hop", "ukrainian pop")等“流派”为特色。Spotify 似乎也认为“uk_hip_hop”是“ukrainian_hip_hop”的简称?!

在收集了英国嘻哈艺术家的 Spotify 信息后,我接着对“grime”和“uk_alternative_hip_hop”艺术家进行了类似的练习。

按照上面的代码,我添加了另一个过滤器,以排除属于不想要的流派的艺术家,如“grime brasileiro”、“funk ostentacao”和“fluxwork”(我认为这是 grime 音乐的南美衍生物)。

我使用上面的代码组合了三个数据框,创建了一个包含来自三个流派的 771 位相关艺术家的数据框。

下一步是询问 Spotify 与数据帧中每个艺术家的每个曲目(专辑或单曲)相关的音频特征数据。

使用上面的代码,我可以下载 771 位艺术家的所有专辑和单曲数据。我必须包含insistently(artist_tracks, my_rate)possibly(artist_tracks_insistently, otherwsie = NA)以允许对 Spotify API 的重复调用,并确保错误将默认为 NA。关于insistently()的更多信息,请访问这里,关于possibly()请访问这里。

您应该注意到,下载数据确实需要一些时间,所以如果您计划复制这个项目,您可能需要在这个过程的这一部分找到一些事情来占用您的时间。

现在,我已经从 Spotify 获得了 49,309 首英国 hip hop、grime 和英国 alternative hip hop 曲目的相关曲目信息和音频特征数据,我只需要过滤数据帧中符合最佳标准的曲目。

使用上述代码过滤原始数据帧将磁道数量减少了 96%以上,从 49,309 减少到 1,734。

然后,我使用上面的代码过滤重复的曲目,这样我只保留了每个重复曲目的“explicit”和“album”版本。此外,我还只过滤了英国市场上的歌曲。

在筛选出想要的曲目后,我现在有了一个包含 1,270 首曲目的代表性健身程序库,这些曲目符合我的最佳标准。我将使用这个新的库来创建我的新的最佳锻炼播放列表。

使用上面的代码,我能够比较我的新的最佳播放列表库和我的初始 26 轨最佳播放列表的音频特性箱线图。

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

除了箱线图,我还计算了音频特征平均值的差异和百分比变化。

我使用上面的代码创建了一个汇总表和柱状图,显示了每个音频特性平均值的变化和百分比变化。

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

虽然该图表似乎描述了我的新的最佳播放列表库的平均乐器性、音调、活跃度、模式和语音的相对较大的变化,但是快速回顾我的原始最佳播放列表表明,平均乐器性、活跃度和语音的相对较大的百分比变化是由这些音频特征的低初始值引起的。此外,key 和 mode 的变化是由它们的深奥性质引起的:key 是从 0 到 11 的整数值,而 mode 只有两个值(0 或 1)。

现在,我已经根据我选择的标准创建了一个最佳锻炼库,我需要将我的 1270 首曲目库分成更小、更易于管理的播放列表,上传到我的 Spotify 帐户。

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

照片由 Erin Song 在 Unsplash 拍摄

此过程的最后一步是将较大的最佳播放列表库分割成较小的、更易于管理的健身程序播放列表。

我使用上面的代码创建了 26 个随机播放列表,每个列表包含大约 49 首歌曲,都是从我的 1,270 首歌曲的最佳锻炼库中采样的。然后,我可以使用功能add_tracks_to_playlist()将新的播放列表上传到我的 Spotify 账户。

我实现了我的目标!根据对当前锻炼播放列表的音频特征的分析,我创建了 26 个新的锻炼播放列表。

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

凯文·麦卡琴在 Unsplash 上的照片

在将这 26 个新的锻炼播放列表上传到我的 Spotify 图书馆后,我显然想知道这些播放列表是否不错,或者我是否设法上传了只包含古典音乐曲目和摇滚民谣的播放列表。

在我第一次播放“新最佳播放列表 1”时,我感到惊喜!新的播放列表主要由我没有听说过的歌曲组成,在我最初听的 43 首歌曲中,只有 3 首歌曲似乎没有达到我一直在寻找的锻炼强度或“声音”。从那以后,我又听了另外 40 多首来自其他新的锻炼播放列表的歌曲,我很高兴地告诉大家,大多数歌曲都有我一直在寻找的能量和声音。

这让我开始思考。尽管我已经花了时间来分析和定义我的最佳音频功能的标准,但我仍然在某种程度上受 Spotify 内部测量和分类系统的支配。如果 Spotify 对一系列歌曲进行了错误的测量或错误的分类会怎么样?例如,虽然 Spotify 将可跳舞性描述为基于*“音乐元素的组合,包括速度、节奏稳定性、节拍强度和整体规律性”,*但我不清楚 Spotify 如何从其描述中详细描述的属性中具体计算可跳舞性。此外,仅仅因为我喜欢锻炼中的某些音频功能,这并不一定意味着我会喜欢符合这些音频功能的每一首歌曲。

唉,就像生活中的大多数事情一样,没有什么是完美的;然而,如果我偶然发现一首不吸引人的歌曲,我可以简单地把它从播放列表中删除。在接下来的几个月里,我将一边锻炼一边使用我的 26 个新的播放列表;希望我不会花太多时间删除歌曲,而不是健身?!

沉默之后,最接近表达不可表达的东西是音乐。

感谢您通读。我希望你喜欢我的分析和写作。如果您有任何问题或意见,请联系我们。谁知道呢…如果有足够多的人感兴趣,我甚至会公开一些播放列表…或者创建一个网站,这样其他人也可以做类似的事情?!

原文:https://towardsdatascience.com/my-secrets-to-writing-a-successful-data-science-blog-b2597b2553c6?source=collection_archive———9———————–

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

约书亚·厄尔在 Unsplash 上的照片

在 2020 年初,我只是将 Medium 作为一种“媒介”,用于每周记录我对数据科学的学习。当时我甚至不知道什么是媒介——我真的认为它是 WordPress 的替代品。

快进到今天,我现在有将近 25,000 名粉丝,近 4,000,000 篇文章。同样,现在中等收入几乎占我每年总收入的 25%。

在这篇文章中,我想分享我是如何建立我的数据科学博客和我的追随者基础到今天的秘密。请记住,这些技巧不是黑客或欺骗系统的方法——建立一个博客需要大量的工作。然而,这些建议会帮助你思考一些你以前可能从未想过的事情。

说了这么多,让我们开始吧!

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

作者创建的图像

这是我给有抱负的作家的第一个建议。理想情况下,你想找到一个满足这三个条件的利基市场。

如果你发现你擅长写的东西,你也喜欢写它,但人们不喜欢阅读它,那么你就不会建立一个粉丝群(假设你在乎这个)。

如果你发现一个你擅长写的话题,人们喜欢读它,但你不喜欢写它,那么你不会持续很久,因为你会失去兴趣。

最后,如果你发现一个你喜欢写的话题,人们喜欢读它,但你不擅长写它(例如,因为你没有足够的专业知识),那么你可能不会得到任何牵引。

所以,在你旅程的开始,找出你的定位。我将在技巧 3 中详细阐述这一点。

无论你是使用 Medium,Substack,Patreon,还是其他的博客平台,确保你花时间去理解这个平台是如何工作的。

我不能透露太多细节,但理解诸如收益是如何计算的,平台如何帮助你做广告,以及诸如此类的事情是值得思考的。

通过理解媒体的机制和它是如何工作的,我能够最大限度地拓展我的范围,并最终更快地扩大我的追随者基础。

下一个技巧将帮助你实现技巧 1 和 2:

为了找到技巧 1 中三件事的交集,并理解你正在编写的平台的机制,考虑一下开发与探索的概念。

这个想法来自于一个叫做“多臂土匪问题的统计问题我不会说得太详细,但“探索和利用”背后的主要思想是决定是探索并发现新的潜在想法,还是利用你已经知道有效的想法。

在你写作/博客生涯的开始,探索和尝试尽可能多的想法,看看什么最适合你,这对你最有利。这意味着写不同的主题,在不同的出版物上发表(在媒体上),并可能尝试新的写作风格。

随着你在写作风格和偏好上变得更加成熟,你可能会偶然发现一个让你在写作中持续成功的“秘诀”。这是你可以开始利用这一突破,加倍你的秘密公式。

总而言之,在旅程的早期尽可能多地探索,当你开始定义自己并找到成功时,开始利用那些让你成功的见解和想法。

这可能取决于你写的主题,但由于我写的是数据科学,我必须始终跟上人们有兴趣了解的内容,因为总是在变化

我该怎么做?

这没什么稀奇的,但我只是有一个网站和 YouTube 频道的列表,我会定期浏览这些网站和频道,以提出新的想法。比如看到一个学习 SQL 的速成班,就想着写一个 52 周的速成班,学习包括统计学、Python、SQL、Pandas 等数据科学技能。

通过了解人们感兴趣的最新信息,并花时间思考新的想法,你将能够建立一个内容管道,永远不会缺乏可写的想法!😃

这个听起来很明显,但是我真的相信遵循这个建议是我成功的支柱。

去年,我承诺在 52 周内每周学习和写作数据科学,这样做让我能够建立一个有效的系统,在一致的基础上撰写文章,而不会筋疲力尽。此外,通过保持一致,你无疑会推出更多的内容,最终让你的博客发展得更快。

所以找一个适合你的写作时间表,不管是一周一篇还是一个月一篇,坚持下去!

我希望这对你有所帮助!这和我平时写的有些不同,但是如果你想看到更多这样的文章,请留下评论。

一如既往,我祝你学习一切顺利。😃

不确定接下来要读什么?我为你挑选了另一篇文章:

[## 我如何利用数据科学在一年内将收入翻倍

towardsdatascience.com](/how-i-used-data-science-to-double-my-income-in-one-year-c8ba8c28ce8f)

又一个!

  • 如果你喜欢这个, 跟我上媒 了解更多
  • 有兴趣合作吗?让我们连线上LinkedIn
  • 报名我的邮箱列表 这里

原文:https://towardsdatascience.com/my-start-to-data-science-9ff46431996?source=collection_archive———37———————–

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

詹姆斯·彭纳在 Unsplash 上的照片

2020 年 5 月 23 日是我完成数据科学本科学位的日子。

在过去的四年里,我挣扎了很多,但是我得到了将会伴随我一生的朋友和知识。尽管我还是觉得很奇怪。感觉就像是昨天我拥抱着我的父母告别,开始了我大一的第一天。然而,回忆我的过去不会成为一篇非常引人注目的文章,所以我想带你踏上我在数据科学中寻找激情的旅程。

我想和你谈谈我的一些数据科学课程,以及它是否对我未来的数据科学有所帮助。我也想和你分享一些我帮助其他学生的方法和有效的学习方法。

我还想指出,大学并不便宜。网上有丰富的信息,所以无论是金钱、家庭还是距离,四年制课程并不是每个人的最佳选择。然而,与其他有抱负的数据科学家一起学习和成长的经历对我来说是无价的。

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

由 Avinash Murugappan 在 Unsplash 拍摄

和一些人一样,我实际上并不是从数据科学家开始的。我进入大学的第一个学期实际上是作为一个计算机工程专业(CPE)。我一直以为我会被一家大公司雇用,成为一名承包商。然而,我正在做的工作让我感到不满足。

2017 年春天,在与一位朋友交谈后,他告诉我大学里一个更新的项目,名为计算数据科学(CDS)。这听起来很有趣,我联系了本科生导师以获得更多信息。他是一位年长的绅士,年轻时在地里干活。他给我看了一些数据科学研究生正在做的研究项目,从那以后,我知道我迷上了数据。

“数据科学家有点像新文艺复兴时期的人,因为数据科学本质上是多学科的。”

John 领班

2017 年秋天,我正式从 CPE 转到 CDS。我在该专业的前几堂课涉及计算思维和 Python 及 r 编程。渐渐地,我开始接触班上的其他学生并与之互动。起初,我们只是谈论一般的课程,但最终我们会一起吃午饭,分享不同的项目,在线课程和资源。这是一个很好的环境,帮助我专注于我的学习。所以我强烈建议,尤其是如果你是这个领域的新手,在课堂之外与你的同龄人互动。

到 2018 年秋天,我已经完成了 CDS 课程的一半,并认识了许多新同事。我当时的课程主要集中在数据可视化、数据库和数据挖掘技术上。我也努力在我的系里保持形象,和教授们谈论他们在这个领域的经历。最终,我和其他学生想出了创办一个数据科学俱乐部来推广该领域的想法,到下学期,我们已经完全投入使用了。在我们在一起的时候,我们互相帮助提出关于个人项目的想法,将在线资源正规化,并组成了一个紧密团结的团队。

“你可以有没有信息的数据,但你不能有没有数据的信息”——丹尼尔·凯斯·莫兰

到 2019 年秋季,我的大多数课程都专注于高级数据建模、机器学习、处理非结构化数据和模拟。通过一名前俱乐部成员,我得以获得一个为学校做一些数据科学工作的机会。这个角色教会了我很多如何成为一名成功的数据科学家,但那是以后的事了。当我设法在当地一家公司找到实习机会时,情况开始好转,我真的很想拿到学位毕业。

2020 年春季将会是一个非常难忘的学期。我不知道我们都将经历一场全球性的疫情,在我知道之前,每个人都不得不呆在家里。像许多其他人一样,没有人知道会发生什么,不幸的是,我曾经的实习被取消了。尽管压力很大,但在几个月内,我完成了本科的一天。

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

耶稣·希拉里奥·h .在 Unsplash 上的照片

以下是我对数据科学项目的一些想法

  • 建模与仿真 I:这门课主要教授 Python 的基础知识和算法思维技能的发展。它介绍了基本的软件概念,如测试、调试和数据类型。
  • 建模与仿真 II:在对各种科学应用建模的同时,更加关注 Python 中的高级技术。这个课程确实帮助我熟悉了非结构化数据类型(图像、声音、文本)。
  • 基于代理的建模和仿真简介:本课程主要提供基于代理的建模的背景知识。学习了很多不同的模型,教授也很棒,但是在我的数据工作中不要真的使用 Netlogo。
  • 计算和数据科学介绍:这门课主要关注用 r 进行数据分析。我对使用 RMarkdown 非常熟悉,我们对 Rshiny 也有一个简短的介绍。了解一些数据科学的历史背景也很不错。
  • 数据可视化:本课程主要关注数据可视化的最佳实践。我们讨论了诸如配色方案、完形原理、用户控制等主题。我们可以自由选择任何我们认为效果最好的可视化软件,但课程主要集中在 Tableau 上。
  • 数据库:我们学习了 SQL 的基础知识,同时学习了数据库系统的基础知识。我们主要练习开发复杂的查询和建立数据库。
  • 科学数据挖掘/机器学习:这实际上是两个课程。我把他们分在了一起,因为他们是由同一个教授教授的,基本上是按系列教授的。这堂课真的很酷,因为我们深入探讨了让我对数据科学感到兴奋的话题。这些包括监督学习,非监督学习,强化学习,推荐系统,神经网络,并谈到了很多历史。这位教授刚从视频游戏行业的数据科学领域出来,所以他给课堂带来了很多有趣的话题。
  • 数学和统计:最后,程序调用了单变量和多变量统计以及 Calc (I,II,III)和线性代数。主要用作职业生涯的基础课。

这就是我四年的大学生活,总结成一篇文章!当然,除了无数个小时的在线学习、工作和学习新资源之外,这只是一个简短的概要。所以我就回到之前的问题,“拿个数据科学的本科学位值得吗?”我的答案是,老实说,这取决于你如何学习,以及一个项目提供了哪些资源来满足你的具体目标。

如果你的项目需要你参与很多实践项目,并且是一个既定的项目,那么我会说去做吧。除了得到一张证明你合格的纸之外,我看到的最大好处是在一个以数据为导向的环境中与有相似目标的人在一起。这帮助我发展了更多的软技能,并获得了分享不同想法和在该领域发挥创造力的信心。

总的来说,我对本科阶段所教的课程感到满意。我目前正在研究生院读第一年,我一定会让每个人都知道将来会发生什么!

特别感谢我的同学 Jordan,他让我进入了数据科学领域,感谢我的室友和女朋友,感谢他们不断的鼓励,最后感谢我的导师 Joe,他让我走过了我的旅程!

库珀·巴雷特生存指南毕业 GIF

原文:https://towardsdatascience.com/my-story-as-an-online-united-nations-volunteer-on-covid-19-data-projects-17a5d159980a?source=collection_archive———34———————–

联合国开发计划署亚太地区区域创新中心 UNV 在线志愿服务在线志愿者邓华。

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

在 Unsplash 上雷桑加库苏马的照片

新冠肺炎,2020 年最重要的话题,已经俘获了每个人的心,我也不例外。作为一名拥有数据科学专业知识的研究生,尽管我渴望为这场全球抗击疫情的斗争做出贡献,但我不知道如何才能参与进来。幸运的是,通过在线联合国志愿服务的机会,我加入了联合国开发计划署曼谷区域中心的区域创新中心,为东南亚的新冠肺炎数据分析提供支持。

我想知道是否也有像我一样的学生或专业人士,他们愿意自愿为社会公益贡献他们在数据科学方面的专业知识,但发现很难获得机会。

当我在寻找机会的时候,我确实找到了一些。比如在公益组织做实习;加入学术研究; DrivenData ,举办社会影响领域的数据科学竞赛; DataKind ,以项目为基础提供志愿服务机会。但总的来说,仍然没有足够的机会,或者接近这些机会的方法并不广为人知。

为什么?

如果没有既定的数据治理系统,数据共享肯定是一个问题。在这种情况下,使用开放数据的项目,或者从收集数据开始的项目会引起较少的关注。例如,根据《每日电讯报》的报道,印度尼西亚政府的国家新冠肺炎特别工作组发言人维库·阿迪萨斯米托说,印度尼西亚政府“赞赏”来自独立党派的报告,如“T2 报告新冠肺炎”的报告,这是一项由公民主导的数据科学活动,要求公民报告疑似新冠肺炎死亡病例,并在此基础上进行分析。

此外,非营利组织可能缺乏为拥有数据科学专业知识和奉献时间热情的人组织这种“为好的数据”机会的经验。他们可能很少看到过去让志愿者参与数据科学项目的案例,因此很少或根本不知道可以做什么以及如何安排。这促使我写这篇博客来分享我作为数据导向项目志愿者的经历,以及我对“数据为善”项目核心步骤的思考。你可以在这里找到关于我的项目的博客,在这里找到 tableau 仪表盘。

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

马库斯·温克勒在 Unsplash 上拍摄的照片

老实说,我们花了很长时间来确定项目范围。我们一开始非常灵活,没有必须做的事情,因为这个项目本质上是探索性的。结果,我们花了很多时间决定做什么,在多个潜在的提议中摇摆不定,而不是实际去做。

我们最终决定制作一个交互式仪表盘,显示我们对东南亚隔离政策的分析。我们相信仪表板可以是一个放大器,可以激发更多的工作,我们的分析可以是一个演示或火花。此外,考虑到我们的潜在受众,我们认为数据可视化是最广泛接受的形式。

反思我的经验——当数据项目的范围不明确时,首先确定以下任何方面都是有帮助的:问题、数据源和分析类别。然后,评估可访问性并相应地调整计划将是一个迭代过程。

首先,一个好的数据项目始于一个好的问题,尤其是工作中出现的问题。确定一个明确的“问题所有者”效果最好,或者至少了解你的听众和他们关心的话题。第二,如果团队中有人熟悉可用的数据源,这将节省搜索时间,并帮助您快速评估您的提议的可行性。第三,我们应该认识到问题属于哪一类分析——描述性的、诊断性的、预测性的还是规定性的。这四个类别分别回答了以下问题:过去发生了什么,为什么会发生,未来可能会发生什么,以及应该采取什么行动来影响结果。问题的本质已经在很大程度上决定了要采取的方法和可交付成果的形式。

有时,问题没有明确定义,因为客户或利益相关者可能没有特定的问题,他们可能不知道数据分析可以帮助什么。在这种情况下,项目可以从理解上下文、目标和现有项目开始。需要深入的交流来激发灵感并制定可行的建议。

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

由Nathana rebou as在 Unsplash 上拍摄

当输入“新冠肺炎开放数据”时,人们可能会感到兴奋,然后被数据来源的数量所淹没。它不像学术出版,学术出版已经是一个非常成熟的过程,因此发表的论文是有据可查的,可以很容易地搜索到。到目前为止,数据发布仍然非常分散,没有被广泛接受的标准。开放的数据源分散在互联网上,你必须找到它们并逐例理解它们。我真诚地希望会有好的做法出现,这样我们就可以少受一些通过“煮海”来寻找数据的痛苦。

以下是高效搜索开放数据的五个技巧。

  • 有针对性的关键词搜索——使用有针对性的关键词来获取满足您需求的资源,而不是泛泛而谈。比如“新冠肺炎数据”+话题+其他说明。
  • 收集库 —当你没有一个明确的目标时,寻找一个库或数据门户,在那里你将立即接触到丰富的来源。挑战在于如何在众多选择中找到适合您项目的源代码。一些例子包括#数据 4 提供 19 、我们数据中的世界、 AMiner 等。
  • 链接和引用 —你也可以通过追踪参考文献找到好的数据来源。通常,图表、分析博客和论文的作者都会引用数据来源。一些数据所有者也在他们的网站上推荐其他好的数据源。
  • 相关机构 —如果你具体知道你想要什么数据,谁可能是它的第一手采集者,你可以直接去他们的网站上找。主要的提供者类型包括政府、非政府组织、私营部门公司和学术机构。了解他们通常提供什么类型的数据会很有帮助,如果你考虑他们的数据来自哪里,这是非常直观的。
  • 社交网络——我没想到这会有所帮助,直到我们在那里找到了一些好的资源。然后我意识到,这些数据所有者也需要一个渠道来宣传他们的数据,以获得更好的影响,特别是那些来自私营部门公司的“数据换好”项目,来自学术机构的项目,以及致力于促进开放数据使用的非政府组织。一旦你关注了这些机构或代表,就很容易获得新的、创新的数据来源的更新,以及基于它们的好项目。

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

照片由斯科特·格雷厄姆在 Unsplash 上拍摄

新冠肺炎是一场全球性危机,国际社会正在共同努力抗击整个疫情。为了防止重复工作,检查已经做了什么和还需要做什么是很重要的。这里有一些方面你可以从它们开始。

数据发布者通常为他们的数据提供简单的可视化或报告,但很少将他们自己的数据与其他数据源相关联。如果你能发现不同数据源之间的关联,很可能你会发现别人以前没有想到的角度。

基于分析的上下文,可能有不同的粒度级别被证明是合适的。例如,在我们的项目中,在国家一级查看菲律宾的流动性指数是不太合适的,因为菲律宾在次区域、省和城市一级执行其隔离政策是不同的。

许多数据源非常全面,这为不同的分析目的提供了灵活性。事实上,没有必要使用所有可用的数据。相反,缩小范围可以清除噪音,使模式变得明显。基于深思熟虑的判断进行有意义的比较是很重要的。

这是我从我们的项目中学到的最重要的一课。数据信息量很大,但也有局限性。有些见解只有通过深入理解上下文和领域知识才能获得。它们是提示和线索,有助于组织你对数据的探索并理解结果。例如,在我们的项目中,如果不了解菲律宾的隔离政策,我们永远无法解释流动趋势。进行可靠的分析依赖于严格的定量评估和深刻的定性判断。

感谢您的阅读!我们希望这个博客能够让人们学习我们利用开放数据的经验,并鼓励更多的人加入社区,致力于数据对社会的影响。可以在这里 找到之前关于项目 的博客,在这里 找到 tableau dashboard

原文:https://towardsdatascience.com/my-system-design-interview-checklist-86b64b5ac5e2?source=collection_archive———14———————–

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

图像通过 Unsplash

可怕的系统设计面试。我记得我被问到的第一个系统设计问题。“设计 WhatsApp”,他说。我不知道从哪里开始!我是新生。我只知道数据结构和算法。我相信你能猜到面试进行得如何。然后经过充分的研究,我给自己做了一个各种组件的清单,来引导我通过下一次系统设计面试!

所以我就不闲聊了,直接进入正题吧!

首先,用户如何与你的系统交互?是通过手机应用程序,还是通过笔记本电脑或智能电视?这给了我们一个我们正在处理的限制和隐藏需求的指示。例如,在移动用户的情况下,我们可能必须处理波动的网络,对于智能电视和笔记本电脑用户,我们可能必须支持不同的文件格式和不同的分辨率和纵横比。

没有负载平衡器,就无法设计分布式系统。负载平衡是指在分布式系统的各个节点之间分配请求,以减少响应时间和提高资源利用率。通过在各个节点之间分配负载,我们排除了出现单点故障的可能性,并且还确保了在另一个服务器空闲时,单个节点不会过载。

或者更具体地说 web socket 处理器web socket 管理器。我知道,这些不是标准条款。但这是我最近在 youtube 视频上看到的,完全有道理。一个 Web Socket 处理器基本上是一个服务器,它与所有活动的用户设备保持开放的 Web Socket 连接。来自用户的任何请求都将通过 web 套接字处理程序进入系统,对用户的任何通知或响应也将通过 web 套接字处理程序发送。现在,如果我们正在开发一个大规模的应用程序,用户分布在不同的位置,我们将需要分布在不同地理位置的 web 套接字处理程序。认为低延迟。现在,用户也可以在各种 web 套接字处理程序之间切换,原因是网络波动,或者仅仅是因为他们现在在物理上更接近另一个 web 套接字处理程序。在这种情况下,我们需要一个中央存储库来跟踪哪个用户连接到哪个 web 套接字处理程序。这是由网络套接字管理器完成的。

不仅仅是数据库,还有一般的存储解决方案。如果我们需要保存图像或文件,我们将需要像亚马逊 blob 存储,如果我们存储支付记录,我们需要它遵循 ACID 属性,在这种情况下需要一个关系数据库。如果我们在 Amazon 这样的平台上存储产品相关的信息,我们可能需要一个像 Mongo DB 这样的文档数据库。如果我们正在构建 Twitter 或脸书,没有像 Redis 这样的缓存解决方案,我们就无法设计我们的系统。在决定使用哪种存储解决方案时,我们需要考虑很多事情!这是我在准备->CodeKarle 的系统设计访谈中遇到的最好的文章之一。

同样,如果我们的用户分布在不同的地理位置,那么将频繁访问的数据的副本保存在离用户位置更近的数据中心是有意义的。例如,网飞上“恐怖游戏”的大量流量可能来自印度。因此,将数据保存在靠近印度的数据中心以减少延迟并改善用户体验是有意义的。下面是 Akamai 的一个短片,简要解释了 CDN 到底做什么-> 什么是 CDN

记住,无论你正在创建什么样的系统,总有分析的空间。这是那些在需求收集过程中从来不会被提出,但是总是被要求的事情之一。这就是我们使用 Kafka 这样的流处理软件的时候。无论系统中发生了什么,用户登录或退出,挂断电话,取消订单,取消付款,任何事情!对我们来说都是有用的信息!每当有事件发生,都要写给卡夫卡。在 Kafka 上,我们可以运行一些简单的 spark 流作业进行实时处理。或者我们可以简单地将数据转储到 Hadoop 集群中,然后运行一些复杂的机器学习算法进行详细的分析。

如果我们正在设计 Twitter,帖子长度是我们需要处理的限制之一。但是如果用户想要分享一个链接呢?那会占据一半的职位!这就是为什么我们需要一个 URL 缩短服务。无论您构建什么系统,总会有这样或那样的事情需要通知用户。这就是你可能需要一个通知服务的地方。通知服务实际上是理解可插拔性需求的一个好方法。如果按照我们的要求,如果一个朋友喜欢脸书上的个人资料图片,我们需要发送应用内通知。所以我们把它建立在我们的系统中。现在出现了一个新的要求,向超过 3 天没有访问应用程序的用户发送电子邮件通知。我们无法添加另一项服务来处理电子邮件通知。这就是我们的通知服务需要可插拔的原因,这样我们就可以随时添加处理程序,并轻松支持新的通知方法。

另一个作为独立组件使用的独立服务的例子是资产交付服务。如果您正在构建类似网飞的东西,我们需要一个系统来根据传入流量将视频内容加载到 cdn,管理需要发送给哪个用户的分辨率和宽高比数据,负责将主文件转码为所有其他支持的文件格式,等等。我将附上我提到的一个视频的链接,以了解资产交付系统可能如何工作。

你达到里程碑了吗?满足截止日期?您的系统是否按预期工作?无论是什么应用程序,无论计划或设计得多好,总有出错的可能。第三方依赖可能会崩溃,服务器可能会停机,可能一台服务器的 CPU 利用率非常高,而另一台服务器未得到充分利用,可能系统在黑色星期五销售期间无法进行足够的扩展!事先知道这些事情不是很好吗?

但是怎么做呢?当然是通过监控你的系统!和警报。任何表现出乎意料或达到极限的事情,都必须在失控之前被大声指出。这是另一个在构建系统时,最初没有被提到但非常重要的事情。这里的是一个你如何做到这一点的例子。

一旦你想出了一个满足需求收集阶段所有要求的解决方案,那就是你从其他申请者中脱颖而出的时候了。这是当你考虑人们在面试中通常不会考虑的边缘情况时。比如谷歌如何在谷歌地图中处理像印巴中边界这样的争议地区?或者你可以展示如何扩展你的解决方案来支持比预期大得多的规模。比如你的视频会议系统可以扩展到现场直播吗?

什么是负载均衡器?->https://medium . com/@ itIsMadhavan/what-is-load-balancer-and-how-it-works-f 7796 a 230034

如何在系统设计面试中选择最佳存储解决方案?->https://www . codekarle . com/system-design/Database-system-design . html

CDN 到底是什么?——>https://youtu.be/l6X_IxyGHHU

如何用 Redis 扩展你的系统->https://youtu.be/CtV-QymAeIc

资产交付系统如何工作(以网飞为例)——>https://youtu.be/lYoSd2WCJTo

下面是我写的另一篇关于为系统设计面试选择最佳 DB 的中型文章->https://towardsdatascience . com/choosing-the-right-database-in-a-a-system-design-interview-b 8 af 9 c 6 DC 525?source = friends _ link&sk = d 78 ef 7 e 0 b 0 f 4071636 c 57681 b 9 FCE 1c 8

破解下一个系统设计的综合指南采访由 CodeKarle->【https://www.codekarle.com/】

**系统设计面试常见问题->https://www.youtube.com/watch?v=EpASu_1dUdE&list = plhgw 50 vuymyckxl 3d 1 lxo VL 94 wknjfuc

我希望这能帮助你想出一个你自己的清单,在你下一次系统设计面试时参考。觉得我错过了重要的一步?请在评论中告诉我!

原文:https://towardsdatascience.com/my-top-3-machine-learning-algorithms-7eaa19d9bb36?source=collection_archive———44———————–

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

戴维·冯迪马尔在Unsplash【1】上拍摄的照片。

  1. 介绍
  2. 随机森林
  3. XGBoost
  4. CatBoost
  5. 摘要
  6. 参考

随着 2021 年的到来,我想讨论一下我最喜欢的三种机器学习算法的更新列表以及原因。在过去的一年里,我在业余时间通过自己研究和使用不同的算法获得了更多的专业经验和实践经验。新的用例、Kaggle 示例、视频和其他文章让我关注我最喜欢的三种算法,包括 Random Forest、XGBoost 和 CatBoost。这三者都有好处,你当然可以用这三者产生令人印象深刻的结果。虽然一个是老的和可靠的,另一个是强大的和有竞争力的,最后一个是新的和令人印象深刻的,这三个算法在我的列表中名列前茅,看看哪三个在你的列表中名列前茅将是有趣的。如果你想了解这三种著名的机器学习算法的更多信息,请继续阅读下面的内容。

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

由 Sebastian Unrau 在Unsplash【2】上拍摄的照片。

一种经过检验的真正的机器学习算法是随机森林【3】算法。它已被证明在各种情况和用例中表现良好。这个库的一个独特的好处是,因为它比较老,所以它比 XGBoost 和 CatBoost 拥有更多的文档和更多的例子。随机森林工作的一般方法是在子样本上拟合一些决策树,然后对它们进行平均。这有助于提高精度和防止过度拟合。当我第一次调查我的数据,执行特征工程,并希望有一个总体的准确性时,我倾向于使用这种算法。即使您使用随机森林作为最终数据科学模型的一部分,您仍然会看到一些令人印象深刻的结果,并且 XGBoost 或 CatBoost 实现可能没有必要。当然,您可以随时对所有三种算法进行测试,以查看哪种算法最适合您、您的数据和您的用例。

我特别喜欢用随机森林做分类问题,也叫监督学习。这种类型的学习是当你的数据上有标签。标签的一个例子是商店或电子商务平台的特定类型的服装(,例如,裤子、t 恤、毛衣)。你可以使用特征(袖长、可能的尺寸、颜色等。)描述服装,最终对新装进行训练和分类。在预测时,很容易使用predict_proba函数,该函数很容易显示某事物对其分类的可能性。

以下是随机森林的一些好处:

  • 通用(回归和分类)
  • 处理不平衡的数据
  • 适用于异常值
  • 并行处理(n_jobs = -1)
  • 易于使用
  • 学习、练习和理解算法的几种方法

总的来说,随机森林是数据科学和机器学习过程的一个很好的起点,也可能是一个很好的终点。但是,下面可能会有其他某些算法对于其他某些情况更好,或者出于其他原因(基于你的限制)。

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

罗马法师在Unsplash【4】上拍摄的照片。

卡格尔赢家。

我不会深究这个问题,因为它比下一个算法讨论得更广泛。

XG boost【5】经常被用在比赛中,在这些比赛中,最微小的精确度都是至关重要的。然而,这种强大的机器学习算法也可以在学校,在你的时间练习,或在工作中使用。这是一个梯度增强库,已被证明是非常准确和快速的。XGBoost 可能比 Random Forest 需要更长的时间,但是在我所看到的情况下,它在大多数时候都更准确。

以下是 XGBoost 的一些优点:

  • 正规化
  • 缺失值处理
  • 交叉验证
  • 并行处理
  • 质量很好
  • 特征重要性

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

照片由迪米特里·科艾曼斯在Unsplash【6】上拍摄

CatBoost 机器学习算法是由Yandex【7】创建的,它在决策树上使用梯度推进。该算法是最新的算法之一,如果不是最新的算法的话。它强大、健壮、准确,总体来说令人印象深刻。组成这个算法的主要类包括分类器和回归器,分别是CatBoostClassiferCatBoostRegreessor。当然,CatBoost 的主要区别在于它强调分类变量的重要性。它使用一种目标编码的形式,其他包或算法也包括这种形式;然而,这种特定类型的目标编码要健壮得多。使用这种转换的好处是不仅可以加快训练和预测数据所需的时间,还可以获得更准确和有益的值。例如,使用 CatBoost,您不需要采用一次热编码,也不需要担心数百个稀疏列,而是可以专注于一个编码特性,该特性也可以防止目标泄漏。

我发现对 CatBoost 有用的两个主要特性重要性类型是PredictionValuesChangeLossFunctionChange类型。对于排名指标,您需要坚持使用 LossFunctionChange 方法。您还可以使用非常流行且易于使用的 SHAP 库来直观地解释特性的重要性。

以下是 CatBoost 的优势:

  1. 更快的计算
  2. 快速预测
  3. 防止过度拟合
  4. 防止目标泄漏
  5. 最适用于分类特征
  6. 提高培训质量
  7. 减少参数调整的时间
  8. 更多关于可解释性的时间
  9. 不同类型的特征重要性
  10. 也利用 SHAP 价值观
  11. 嵌入了大量有益且令人印象深刻的情节

CatBoost 本身讨论的主要特性是无需参数调整的高质量、分类特性支持、快速和可扩展的 GPU 版本、提高的准确性和快速预测。他们还提到了它在搜索、推荐系统、天气预报等方面的广泛应用。到目前为止,我真的相信这个机器学习算法是最好的。看看一年或几年后会出现什么来与强大而准确的机器学习算法 CatBoost 竞争,这将是一件有趣的事情。

总的来说,有几个机器学习算法提供了很大的好处。它们都比较容易实现,同时还能产生有竞争力和高质量的结果。我知道这些算法中的一些可能对你来说并不陌生,所以我希望我还是增加了对至少一种算法的认识。虽然 Random Forest 是最老的,但 XGBoost 一直在主导 Kaggle 竞争,我相信 CatBoost 是最好的——对于分类数据科学用例来说。

以下是我现在和 2021 年最喜欢的三种机器学习算法:

*Random ForestXGBoostCatBoost*

我希望你觉得这篇文章既有用又有趣,请随时讨论你使用的机器学习算法。哪些是你最喜欢的?你同意还是不同意我的观点?为什么或为什么不?

感谢您的阅读!

请随意查看我在’The Top 5 Machine Learning Algorthims ’ [8]中的另一篇文章,这篇文章深入探讨了这些算法中的两个以及其他三个算法的用例:

*

[1]照片由 David von Diemar 在Unsplash(2019)上拍摄

2Sebastian Unrau 在 Unsplash 上拍摄的照片,(2015)

[3] scikit-learn 开发者,随机森林,(2007-2020)

4罗马法师在 Unsplash 上拍摄的照片

[5] xgboost 开发商, XGBoost ,(2020)

6Dimitry Kooijmans 在 Unsplash 上拍摄的照片,(2017)

[7] Yandex, CatBoost ,(2021)

[8 ] M.Przybyla,五大机器学习算法,(2020)*

原文:https://towardsdatascience.com/my-top-4-geopandas-functions-a-practical-story-ed375b76c686?source=collection_archive———21———————–

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

六月在 Unsplash 拍摄的

在过去的几个月里,我一直在研究 GeoPandas,它很快成为我最喜欢的 Python 包之一。就个人而言,我对数据科学如何应用于城市规划、地理空间信息和技术等领域很感兴趣。对于这些,GeoPandas 特别有用,因为它允许用户操作地理数据并从中提取有价值的信息。在这个故事中,我将根据我的学习经验,用一个实际的例子向您展示我在 GeoPandas 中的 4 个顶级函数。

首先,如果您刚刚开始使用 GeoPandas,您将需要一些易于访问的数据集。这可以通过使用“.“可用”功能如下:

这会产生以下结果,每个结果都是一个数据集:

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

如果您发现自己正在处理地理空间数据,它可能并不总是适合您立即开始处理的格式。一个这样的例子是当您的数据包含在纬度和经度列中,并且您需要它们在点几何中。幸运的是,GeoPandas 提供了一个函数来快速将这些数据转换为点格式。这个函数叫做“points_from_xy”。让我们来看看它的实际应用:

使用城市的数据集,让我们分解 x 和 y 坐标中的点几何列,然后将它们作为列添加到数据框中:

这是新的数据框架:

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

现在,我们可以使用“points_from_xy”函数将纬度和经度转换回点几何:

结果如下:

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

使用地理空间数据的很大一部分是能够在地图中有效地可视化它们。GeoPandas 允许对用户表示地图数据的方式进行大量细化,包括添加不同的地图图层和处理缺失数据。在这一部分,我们来看看如何制作一个多层地图。首先,我们需要创建一个基础层。假设我们将着眼于仅位于南半球的城市。让我们过滤掉这些数据,然后使用 geopandas.plot 绘制它:

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

现在,让我们用一张世界地图覆盖这些城市,该地图在 GeoPandas 可用数据集中提供。我们将调整国家边界的颜色,这些国家的填充,以及城市点的颜色和大小:

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

现在,我们有了一张分层地图,可以看到世界南部的一些城市和国家的边界。

对于第四个也是最后一个函数,我选择了“area”函数。这个函数顾名思义就是计算多边形和多重多边形等形状的面积。这在处理几何数据时非常有用,我们将在下面看到。

对于这个例子,让我们使用“nybb”数据集,它包含关于纽约行政区的信息。如下图所示,数据框包括代表纽约每个区域形状的多重多边形:

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

从这里开始,计算每个多边形的面积非常简单:

以下是输出:

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

让我们使用此结果,并使用 GeoPandas 绘图功能绘制行政区,使用图例按区域对其进行着色:

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

现在,我们已经完成了 4 个函数,我希望您也受到启发,开始使用 GeoPandas 并进一步探索它。感谢您的阅读,如有任何问题,请联系我!

原文:https://towardsdatascience.com/my-top-data-science-reads-resources-june-2021-edition-2c2f3a1e7643?source=collection_archive———22———————–

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

照片由 Scott Goodwill 在 Unsplash 上拍摄

你好!欢迎来到我这个月遇到的第一个月度顶级数据科学资源展览。我想在做一些像时事通讯一样的事情,但不要太激烈,要能产生直接价值的。

每个月,我都会与您分享我遇到的一些最佳读物,并按主题/话题对它们进行分组—本月,我想与您分享一些关于 SQL 技巧和提示的文章、世界级的实验平台以及一个免费资源,其中包含超过 15 个关于各种统计话题的研究生课程。

也就是说,我希望你喜欢,如果这是你有兴趣每月关注的事情,请留下评论!

https://alexpetralia.com/posts/2017/7/19/more-dangerous-subtleties-of-joins-in-sql

无论你是初学者还是专家,我都强烈建议你读一下这篇文章。本文讨论了 SQL 连接中一个微小但深刻的细微差别,实际上直到去年我才意识到这一点。如果你没有意识到这个微妙之处,这个小错误会给你的公司带来巨大的成本和影响。

我不想完全破坏这篇文章,但是对于 SQL 连接如何工作有一个常见的误解—例如,许多人认为左连接将在左表中返回相同数量的行。事实并非如此。左连接给了至少和左表一样多的行。

https://mark-mccracken.medium.com/bigquery-date-sharding-vs-date-partitioning-cee3754f7900

如果您是数据分析师、数据科学家、数据工程师、数据架构师,或者基本上是任何编写数据管道和创建表视图的人,那么接下来的两篇文章是非常有价值的。

分片分区是两个概念,它们将帮助您编写查询并创建更具可伸缩性和效率的表——这意味着运行查询的时间更少,每次查询的费用更少!

学习如何创建分片/分区表将使您与众不同,因此我强烈建议您阅读一下这篇文章。

https://medium.com/analytics-vidhya/bigquery-partitioning-clustering-9f84fc201e61

类似地,还有另一个叫做集群的概念,它的作用类似于分区。如果你觉得上一篇文章很有价值,强烈建议你也读一读这篇文章。

随着我职业生涯的深入,我越来越意识到实验的重要性。实验远远超出了假设检验和 A/B 检验背后的理论。下面的两篇文章展示了所有公司在进行实验时都应该努力争取的理想结果。

https://medium.com/airbnb-engineering/experiments-at-airbnb-e2db3abf39e7 [## Airbnb 的实验

medium.com](https://medium.com/airbnb-engineering/experiments-at-airbnb-e2db3abf39e7)

这篇文章很好地介绍了实验。它不太关注 Airbnb 已经建立的平台,而是更关注 Airbnb 在其一生中积累的经验和教训。

我喜欢这篇文章的原因是,它向您展示了在进行实验时,您必须了解和考虑的所有细微差别和复杂性。

https://eng.uber.com/xp/

这篇文章有如此多的有价值的信息,我不能相信它是免费的,可以让其他人看到。优步在这篇文章中谈到了几件事:

  • 它们涵盖了他们日常使用的所有实验方法
  • 他们简要介绍了他们的统计引擎和实验平台
  • 它们还涵盖了他们在进行实验时需要注意的几个条件和因素。

https://online.stat.psu.edu/statprogram/graduate-programs

人人都爱免费课程。

这是一个拥有超过 15 门免费统计学研究生课程的网站。

这是我在学习过程中利用的一个很好的资源,我想把这个留给你们,以防你们觉得有必要学习更多的统计学。

以下是他们提供的一些课程:

  • 方差分析和实验设计
  • 应用数据挖掘和统计学习
  • 应用时间序列分析
  • 抽样理论和方法
  • 还有更多…

我希望你喜欢这个精选的阅读和资源列表!如果你喜欢这个,请给这个一些掌声,并留下评论,你希望在未来几个月看到什么主题!

一如既往,我祝你学习一切顺利。

不确定接下来要读什么?我为你挑选了另一篇文章:

又一个!

</10-statistical-concepts-you-should-know-for-data-science-interviews-373f417e7d11>

  • 如果你喜欢这个, 跟我上媒 了解更多
  • 有兴趣合作吗?让我们连线上LinkedIn

原文:https://towardsdatascience.com/my-tubestats-app-ft-ali-abdaal-48dfc982c7ed?source=collection_archive———44———————–

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

照片由绍博·维克多在 Unsplash 上拍摄

拥有超过 1 亿的浏览量和 100 万的订阅者,Ali Abdaal 绝对是一个建议建立一个成功的 YouTube 频道的人。除了给有抱负的 YouTuber 今天就开始的建议之外,他还鼓吹一致性。

这就是这个应用程序的动机所在。问题是:阿里·阿布达尔的 YouTube 频道有多稳定?那其他 YouTube 频道呢?

我们将看到使用 TubeStats 来回答这个问题。我们还将介绍它是如何工作的。我还会提供我的个人倾向以及我未来的计划。

app 链接:https://www . tubestats . app

github:https://www.github.com/shivans93/tubestats

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

作者的动画 gif

该应用程序接受用户输入。这可以是:

  • 频道 ID(例如UCoOae5nYA7VqaXzerajD0lg),
  • 链接到通道(如[https://www.youtube.com/channel/UCoOae5nYA7VqaXzerajD0lg](https://www.youtube.com/channel/UCoOae5nYA7VqaXzerajD0lg,)、、
  • 链接到感兴趣频道的视频(如https://www.youtube.com/watch?v=epF2SYpWtos,或
  • 视频 ID(例如epF2SYpWtos)。

几分钟后,它将生成该频道的汇总统计数据。示例包括总视频计数和总观看时间,如下所示。

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

作者图片

这里,我们还有渠道头像图像以及渠道上提供的描述。

接下来,我们有一个图表,总结了频道中的所有视频。

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

作者图片

该图涉及发布时间对查看次数的自然对数。y 轴有对数刻度,因为数据偏向尾部。这是由于视频的“病毒”性质。如果我们使用线性访问,那么大多数视频将在底部附近,只有少数在顶部附近。

圆圈的颜色代表视频的喜欢-不喜欢比率。圆圈的大小与其绝对视图数有关。

日期范围可以更改。在这个例子中,我改变了日期范围,因为 Ali Abdaal 在 2017 年 7 月开始更加认真地对待他的渠道。

另一个图表显示了视频之间的天数。例如,在上面选择的日期中,“我最喜欢的 iPad Pro 应用程序”视频的最长不活动时间不到 22 天。从视频的日期来看,这是在节日期间。

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

作者图片

平均来说,Ali Abdaal 能够每 3 天发布一个视频,其中大多数(75%)在 5 天内发布。

最后,TubeStats 提供了一个在频道中观看次数最多的视频列表,以及喜欢/不喜欢比率最低的视频列表。

主要工作部件:

  1. YouTube 数据 API
  2. pandas
  3. streamlit
  4. 赫罗库

我还把这分成了几个障碍,并提供了克服它们的解决方案。

我用的是 Linux。建立我们的开发环境对于我们编码的生产力是必不可少的。

我们从创建目录开始。接下来,我们创建一个虚拟环境来管理我们的包,而不会干扰其他项目。最后,我们初始化 git 来跟踪变化,并允许与世界共享我们的代码。

$ mkdir tubestats
$ cd tubestats$ python3 -m venv venv
$ source venv/bin/activate
$ (venv)$ git init

我们可以为了观看次数、评论次数等而放弃每一个视频。这需要很长时间。幸运的是,我们可以使用 YouTube 数据 API 。这提供了对 YouTube 视频和频道的统计数据的简单访问。要访问这个,我们必须设置我们的谷歌云控制台平台。

由此,我们创建了一个“新项目”。我们激活 YouTube 数据 API v3 应用程序。最后,我们创建凭证(单击此处了解更多信息)。这些步骤将提供访问 YouTube 数据 API 的关键。

我们想分享我们的代码,但不是我们的密码和 API 密匙。我们如何做到这一点?

我们可以用一个第三方包: [python-dotenv](https://pypi.org/project/python-dotenv/)

这很重要,这样我们就可以在本地访问数据。我们将会看到,当我们使用 Heroku 推进网络服务时,我们必须使用不同的方法。

我们可以将密钥存储在一个.env文件中,并且我们可以将这个文件添加到.gitignore中,这样它就不会被共享。

.env file
 APIKey=xxxAPIKEYherexxx

我们安装了允许访问 YouTube API 的模块。我们在激活虚拟环境的同时,使用 pip 来实现这一点。

$ (venv) pip install google-api-python-client

如果我们有一个频道 ID,我们可以用它来获得一个播放列表,其中包含从该频道上传的所有视频的 ID。然后我们可以调用视频 ID,然后获得我们感兴趣的统计数据。

def get_video_data(self) -> pd.core.frame.DataFrame: ... while True:                     
            # obtaining video ID + titles                       
            playlist_request = self.youtube.playlistItems().list(                    
                    part='snippet,contentDetails',                 
                    maxResults=50, # API Limit is 50                  
                    pageToken=next_page_token,                    
                    playlistId=upload_playlist_ID,                
                    )                 
            playlist_response = playlist_request.
            # isolating video ID
            vid_subset = [ vid_ID['contentDetails']['videoId'] for vid_ID in playlist_response['items']
            # retrieving video ID
            vid_info_subset_request = self.youtube.videos().
                part='snippet,contentDetails,
                id=vid_subset
                )       

            vid_info_subset_response = vid_info_subset_request.    
            video_response.append(    
            # obtaining page     
            next_page_token = playlist_response.get('nextPageToken') 
            # get method used because token may not exist
            if next_page_token is 
                break
        df = pd.json_normalize(video_response, 'items')       
        return df

这里我们调用 API,但是一次只能获得 50 个视频 id。这要归功于分页。每次调用时,如果超过 50 个视频,则提供一个页面令牌。页面标记指向下一页。如果页面令牌是返回None,这意味着所有的 id 已经用尽。我们使用 while 循环来获取视频 id。一旦我们不再有页面标记,while 循环就会停止。

我们将这个输出附加到一个 python 列表中,这是一个 JSON 格式的字符串列表。我们将这些信息存储在一个pandas DataFrame中。我们能够做到这一点要感谢一个内置函数json_normalize()。由此,我们有了数据框架。

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

既然我们的代码已经开始腾飞,将所有这些代码放入一个文件变得越来越困难。这是我们为组织使用不同文件和目录的地方。

├── data
 │   ├── channel_data.pkl
 │   └── video_data.pkl
 ├── LICENSE
 ├── Procfile
 ├── README.MD
 ├── requirements.txt
 ├── setup.sh
 ├── tests
 │   ├── **__init__**.py
 │   ├── test_settings.py
 │   ├── test_youtube_api.py
 │   ├── test_youtube_data.py
 │   └── test_youtube_parser.py
 ├── tubestats
 │   ├── __init__.py
 │   ├── youtube_api.py
 │   ├── youtube_data.py
 │   └── youtube_parser.py
 └── youtube_presenter.py

需要注意的主要子目录是tubestats,它包含访问 API 的 python 源代码,处理数据,并生成底层图形来呈现数据。tests包含用于测试tubestats模块的测试代码。

最后,youtube_presenter.py是呈现代码的东西。我们看到了一些其他的文件,我们将在后面处理。

确保我们的代码工作是很重要的。在这种情况下,我使用pytest。下面是测试上述get_video_data()功能的一个例子。

from tubestats.youtube_api import create_api, YouTubeAPI
 from tests.test_settings import set_channel_ID_test_case from pathlib import Path import pytest import googleapiclient
 import pandas def test_create_api():
     youtube = create_api()
     assert isinstance(youtube, googleapiclient.discovery.Resource) @pytest.fixture()
 def youtubeapi():
     channel_ID = set_channel_ID_test_case()
     yt = YouTubeAPI(channel_ID)
     return yt def test_get_video_data(youtubeapi):
     df = youtubeapi.get_video_data()
     assert isinstance(df, pandas.core.frame.DataFrame)

     # saving video data to save API calls for later test 
     BASE_DIR = Path(**file**).parent.parent
     df.to_pickle(BASE_DIR / 'data' / 'video_data.pkl')

在这种情况下,我们导入源代码,以及相关的模块。我们使用pytest.fixture()装饰器。这允许我们重用我们在测试用例中提取的数据的结果。我们“腌制”数据,这样我们就可以使用它,而不是为其他测试进行更多的 API 调用。

我可能比isinstance做得更好,但这也是必须的。

如果我们在终端中运行pytest,这将测试我们代码的功能。

这是通过altair的组合来完成的,它为我们提供了交互式的图形。此外,我们使用streamlit来显示这些图形并允许交互。

以下代码创建了一个图表,显示一段时间内的所有视频。

import altair as alt
 def scatter_all_videos(self, df: pd.core.frame.DataFrame) -> alt.vegalite.v4.Chart:
df_views = df
         c = alt.Chart(df_views, title='Plot of videos over time').mark_point().encode(
                 x=alt.X('snippet.publishedAt_REFORMATED:T', axis=alt.Axis(title='Date Published')),
                 y=alt.Y('statistics.viewCount_NLOG:Q', axis=alt.Axis(title='Natural Log of Views')),
                 color=alt.Color('statistics.like-dislike-ratio:Q', scale=alt.Scale(scheme='turbo'), legend=None),
                 tooltip=['snippet.title:N', 'statistics.viewCount:Q', 'statistics.like-dislike-ratio:Q'],
                 size=alt.Size('statistics.viewCount:Q', legend=None)
         )
         return c

接下来,我们可以显示这个图表,并能够编辑日期。

import streamlit as st def date_slider(date_end=datetime.today()):
         date_start, date_end = st.slider(
                 'Select date range to include:',
                 min_value=first_video_date, # first video
                 max_value=last_video_date, #value for date_end
                 value=(first_video_date , last_video_date), #same as min value
                 step=timedelta(days=2),
                 format='YYYY-MM-DD',
                 key=999)
         return date_start, date_end date_start, date_end = date_slider()
     transformed_df = youtuber_data.transform_dataframe(date_start=date_start, date_end=date_end) 
     c = youtuber_data.scatter_all_videos(transformed_df)
     st.altair_chart(c, use_container_width=True)

这是我们在本地运行程序时看到的,streamlit run youtube_presenter.py:

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

坐在我们的电脑上没有任何意义。我们需要与世界分享这一点。Github 可以用来共享代码,但是我们当中的非技术人员呢?

解决办法是用 Heroku 来主持。

首先,我们要做的是在 Heroku 上创建一个帐户。一个免费账户就够了。

我们已经确保代码工作,我们可以把它推到 GitHub 上。接下来,我们创建一个requirements.txtsetup.shProcfile

requirements.txt文件将包含外部库。我们可以使用命令:

$ (venv) pip freeze > requirements.txt

创建了setup.sh文件:

mkdir -p ~/.streamlit/echo "\
[server]\n\
headless = true\n\
port = $PORT\n\
enableCORS = false\n\
\n\
" > ~/.streamlit/config.toml

然后Procfile告诉 Heroku 这是一个 web 应用程序。它还指示setup.py运行文件以及使用streamlit运行我们的代码。

web: sh setup.sh && streamlit run app.py

接下来,我们安装 Heroku 命令行接口。

然后,我们可以将代码推送到 Heroku,就像我们对 GitHub 库所做的那样。

$ heroku login
$ heroku create tubestats$ git push heroku main

这就是我们的最终产品

我们还可以附加一个域来定制应用程序。

到目前为止,这仅适用于通道 ID 输入。视频 ID 呢?一个网址?这是我们需要解析输入的地方。

我们结合使用正则表达式和检查长度。

例如,频道 ID 正好是 24 个字符长,视频 ID 是 11 个字符长。

如果提供了链接,我们可以使用正则表达式(regex,使用re模块)来提取视频 ID 或频道 ID。有很多网站可以帮助使用 regex。这里有一个。

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

下面是一个应用正则表达式的例子。

import reLINK_MATCH = r'(^.*youtu)(\.be|be\.com)(\/watch\?v\=|\/)([a-zA-Z0-9_-]+)(\/)?([a-zA-Z0-9_-]+)?'
m = re.search(LINK_MATCH, for_parse)
video_id = m.group(4) # video ID
if video_id == 'channel':
    return m.group(6) # Channel ID
elif video_id == 'user':
    channel_username = m.group(6) # Channel Username

从这个项目中可以学到很多东西。

项目可以帮助学习,让你保持兴趣。没有什么比提出问题并回答它更有帮助的了。这意味着你所有的研究和你学到的东西都是相关的,并且可能会坚持下去。

此外,达到“最低可行产品”也很重要。如果一个项目是压倒性的,把它分解成一个简单的层次,得到一些刚刚工作。然后,专注于使代码有性能,干净等等。

错误。没有办法捕捉错误。将打印的是代码本身提供的错误。

更好的性能。可能有很多地方可以让代码运行得更好。不过,我可以稍后再谈这个。

发布视频的一致性是 YouTube 频道成功的一个重要因素。这个应用程序就是这样测量的。或者至少尝试过。

该项目实现了 YouTube 数据 API 以及pandasstreamlit,并推送到 Heroku 进行托管。一个重要的教训是建立一个项目到一个最低限度可行的阶段。以后集中精力完善它。

我从这个项目中学到了很多,也有更多我可以做的。

  1. 一个阿卜达尔,阿里阿卜达尔 (2021),https://aliabdaal.com/
  2. 谷歌, Youtube 数据 API (2021),https://developers.google.com/youtube/v3/
  3. 熊猫开发团队,熊猫文档 (2021),https://pandas.pydata.org/
  4. H Krekel,pytest-dev 团队, pytest:帮助您编写更好的程序— pytest 文档 (2021),https://docs.pytest.org/en/6.2.x/
  5. 牛郎星开发者,牛郎星:Python 中的声明式可视化——牛郎星 4.10 文档 (2021),https://altair-viz.github.io/
  6. 细流公司,细流公司 (2021),https://streamlit.io/
  7. 赫罗库,赫罗库 (2021),【https://www.heroku.com】T2
  8. 名词(noun 的缩写)Mashinchi,一个关于如何将你的 Streamlit 应用程序部署到 Heroku 的快速教程。 (2017),走向数据科学

原文:https://towardsdatascience.com/my-unfair-advantage-in-computing-resources-that-are-accessible-to-most-people-5bb95932f247?source=collection_archive———26———————–

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

照片由帕特里克·福尔在 Unsplash 拍摄

我在参加研究生机器学习课程时,开始使用谷歌协作实验室(Colab),这是一个附带免费计算资源的 python 笔记本。

在最初的一两个月里,这是相当毁灭性的,因为相当比例的学生可以从他们的实验室或系里访问计算资源。试图通过免费 GPU 获得更高结果的学生看到并感受到了这种差异。

起初我也在其中,但幸运的是,有从前的学生传下来的提示和技巧,或在同龄人之间分享,大多数人都愿意帮助。我也开发了一些我自己的技术,为泳池做出了贡献。

最终 Colab 成了我手中越来越强大的工具,我也能过得去了。我甚至幸运地在我们的几个 Kaggle 比赛中连续几天名列第一。

您可以通过运行!nvidia-smi来实现这一点。举个下面的例子,我正在用一辆特斯拉 K80。

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

跑步!尼维迪亚-斯米

在撰写本文时,Colab 提供了 4 种类型的 GPU,下面按照一般性能从高到低列出了它们。

  1. V100
  2. T4
  3. P100
  4. K80

GPU 会在每次会话时重新启动,并且通过单击左上角工具栏上的运行时>恢复出厂设置运行时来重新启动会话。

人们发现,获得更好的 GPU 和更长的运行时间的可能性并不固定。从我和我周围的人分享的经验来看,一些客户享受更长的会话,长达 3 到 9 个小时,而其他人在达到略高于 1 个小时后就停止了。

通过跨不同帐户的测试,我发现允许的运行时间与两个因素最相关。

查看了 20 多个谷歌账户和 100 多次运行,发现谷歌对每个账户使用该服务的时间有不同的标准。

我没有找到任何可靠的预测一个帐户的持久性。起初,人们很容易认为活跃了一段时间的账户比新创建的实体更持久,教育账户也比免费的谷歌账户更持久。令人惊讶是,这些假设没有一个被证明是正确的,我经常看到类似的客户资料以非常不同的方式处理。

基于它的不可预测性,我会说,最好的方法来找出一个帐户是否是好的,将得到你的手脏,只是测试自己。通过比较不同的账户,你应该能够决定哪个账户是你的深度学习项目的最佳选择。

谷歌似乎也采用了一种“冷静”的政策:最近在 Colab 中使用较多的账户通常比最近被滥用的账户训练时间更长。

请注意,前一点仍然适用,每个帐户在冷却之前使用 GPU 的起始配额是不同的。一些帐户在最初的几次会议后就被禁止了,而其他人则喜欢默认分配到 T4 GPU,可以训练 8 或 9 个小时进行多次跑步。

简而言之,如果你在 Colab 上遇到了使用问题,考虑改变使用帐户,这可能会有所帮助。

在默认设置中,会话中发生的一切,包括训练参数或检查点,都只是临时存储在 colab 上,会话结束后就会消失。以下是一些防止悲剧发生的措施。

在 Colab 的左侧,点击“文件”>“安装驱动器”,并按照说明将文件保存或加载到您的 google drive。

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

文件>安装驱动器

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

装载驱动器提示

使用%cd content/drive/MyDrive/the_name_of_folder在你的驱动器中移动目录。

完成后,会话期间创建的所有文件都将自动保存到帐户的 Google drive 中,并且不会在会话结束后立即消失。

只需在 Colab 上登录不同的 Google 帐户,就可以持续不断地进行培训,但要安装在同一个帐户的 Google drive 上。

然而,这是假设你熟悉如何保存训练检查点,从我的角度来看,这对初学者来说并不容易。我建议从 Pytorch 的指南开始。

Colab 为更快的 GPU 和更长的运行时间提供每月 9.99 美元的订阅计划,这通常是一笔相当不错的交易,除非你遇到问题。

简而言之,您选择升级订阅的帐户对您将获得的体验至关重要。

我是吃了苦头才知道的。一听到这个计划,我立即掏出我的卡,骑了上去。令人发指的是,用了不到 1 个小时,我的会话就被切断了,连不上 GPU。

冷却一段时间后,我仍然可以使用它,但我在使用 1 小时左右后被切断。(与免费计划中的 3-9 小时相比)

另外,我甚至没有得到最好的图形处理器。虽然通常分配给 T4,但 Colab Pro 的默认分配是 P100。

话虽如此,我还是想训练我的神经网络。我决定用一个不同的帐户再次订阅 Pro,结果是体验好得多。在这个帐户下,我可以用以下好处进行训练。

V100 很好。虽然很难量化有多好,但在我的一些 NLP 项目中,我可以看到它比 T4 快 10 倍。

快速不仅节省时间,有时还能发挥很大作用。有一次,我的最后期限是 23 小时,但通常需要 24 小时才能完成培训。我几乎要放弃了,但在最后的 10 个小时里,我上了 V100,按时完成了。

只有在使用正确的帐号登录 Pro 后,我才能在训练过程中睡足 8 个小时。

这也很难量化,但是当我的互联网被切断时,培训仍在继续,这在我的印象中与我们在免费计划中获得的不同。

在免费版中,你一次只能训练一个笔记本,而在付费版中,你有时可以训练多达三个标签。这同样不适用于每个账户,在我看来,这增加了被 GPU 禁止的几率。因此,我通常做一两个标签,它工作得很好。

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

最后,Colab 附带了这个可爱的功能,除了让你保持愉快的心情工作更长时间之外,它什么也没做,我认为这是一个优势。你可以在设置>杂项中找到它,然后点击 Corgi 模式/Kitty 模式。

Colab 让我的数据科学之旅变得有趣和可能,我希望你也会喜欢你的旅程。

中级会员资格使我有可能学到足够的知识,并为数据科学写作。用我的个人链接报名,然后在下面评论,我会给你发一个分享我全程的 pdf。

原文:https://towardsdatascience.com/my-workflow-for-open-and-reproducible-science-as-an-academic-researcher-in-biomedicine-b41eaabcd420?source=collection_archive———28———————–

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

夕阳下我们的实验室。

这篇文章的目的是提供一个资源的概述,这些资源可以用来使生物医学科学和数据分析更具可重复性,我个人认为是有用的。它并不意味着全面或解释太多细节。如果你有问题或补充,请在评论中留下。

到目前为止,我在博士期间做得最好的一件事是在我刚刚起步的时候学习编程。它节省了我无数的时间,并帮助我在更深的层次上理解科学。我在 2018 年初写了这个,在我关于编程和生物信息学的速成课程中。现在,三年多过去了,是时候更新一下我作为一名学术研究者如何在日常工作中整合编码和生物信息学了。

首先,我认为很重要的一点是,无论如何,我仍然不是一名高级程序员——我最多认为自己是一名中上程序员。我花了整整两年时间才明白编程是实现目标的一种手段,而不是目标本身。换句话说,从“我希望能够使用 R 和 Python”到“我希望能够使用 R 和 Python 从我的数据中获得有意义的见解”,用了 2 年时间。在那之后,它再次花费了大量的时间来发展到“我希望能够使用 R 和 Python 从我的数据中获得有意义的见解,这样其他人就可以完全复制我是如何获得这些见解的”。

我说 R 和 Python 是因为这是我最常用的两种语言。我使用 Python 编写必须在计算集群/HPC 上运行的脚本。然后,我将 Python 的输出下载到我的计算机上,并使用 R 进行下一部分的数据分析(可视化、注释),其中交互性(例如,改变图形的外观)更重要。

虽然学习额外的编程语言既有趣又有挑战性,但一天也就那么几个小时。最后,你必须自己决定你想把时间投入到什么事情上。我个人有一瞬间想尝试 Java 或者 Julia 语言。我感觉自己处于 R 和 Python 的平台期:停滞不前,因为我没有开始时提高得那么快,学习一门新语言会有所帮助。但是在对了解 Julia 和 Java 可能带来的好处进行批判性评估之后,我不确定这是否会提高我的生产率。相反,我专注于提高我已经掌握的技能,而不是学习新的东西。

不可复制的科学更像科幻小说而不是科学。通常这种缺乏再现性并不是因为不良意图,而是因为固有的难以再现的不良实践。通过在 Excel 表中单击来清理数据。或者改变表中的值,几周或几个月后忘记为什么这些变量被改变了。认为完美的再现性存在是天真的,但是通过一些工具你可以非常接近。伴随着可再现性,通常会有一个代价,那就是需要更多的时间来配置所有的东西,但是从长远来看,这些时间是可以赚回来的。

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

我的工作流程草图

工作流管理器的目标是使数据分析(1)可重复,(2)可扩展。工作流管理器有很多,其中最受欢迎的是 Nextflow 和 snakemake 。我选择使用 snakemake 是因为它的直观语法,以及它与 Python 和我们大学的 HPC 基础设施的完美集成——但 Nextflow 可能是满足您需求的同样好或更好的替代方案。官方的 snakemake 教程非常好,如果你刚刚开始,我强烈推荐它。

什么时候我使用 snakemake 而不是简单的 python 或 bash 脚本?自动化总是在投入的时间和节省的时间之间取得平衡。由于 snakemake 的用户友好性,当我注意到必须在两个或更多文件上运行一行代码时,我会快速编写一个 snakemake 管道。这样,我就不必在 shell/python 脚本中修改和删除变量,而且通过使用 snakefile,代码可以在一个或一千个输入文件上运行。

用 snakemake 制作的 bcl2fastq 片段。即使您不熟悉 snakemake,也应该清楚这段代码是做什么的。

Git 是另一个可重复数据分析的重要工具。这是一种版本控制的形式,这意味着您可以轻松地回到不同版本的代码,比较版本,并在不同的设备上同步您的代码。我推荐这个关于数据营的教程。

我经常遇到这样的情况,我的代码必须在集群/HPC 上运行。我在笔记本电脑上编写代码,将其推送到 Github,并在 HPC 上提取存储库。为了避免合并冲突,我将这个目录设为只读目录。虽然我可以通过 SSH 连接 Visual Studio 代码,直接在 HPC 上编写代码,但是这个额外的步骤允许对每个修改进行完全跟踪,并且如果出现问题,我可以很容易地返回到早期版本。

**我什么时候做一个 Github 库?**每当我开始一个新项目时,我都会将其连接到我们的 Github Enterprise。如果我的电脑、time machine backup 和 Dropbox 都出现故障,它还可以作为额外的备份。

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

Github 上相同脚本的两个版本之间的差异

snakemake 的输出通常不是结束,而是生成表格或文件,为 r 的进一步处理做好准备。当开始一个新项目时,我首先创建一个新的*Rproj,并像这样构建我的文件夹:

$ cd ~/tutorial
$ treetutorial
├── .git
│   └── HEAD
├── .gitignore
├── code
│   ├── processRaw.snakefile
│   └── config.yaml
├── Markdowns
│   ├── annotation.csv
│   ├── tutorial.Rmd
│   └── tutorial.html
├── raw_data # this can be a remote folder to save space
├── processed_data
│   ├── datafile1.csv
│   └── datafile2.csv
├── plots
│   └── figure.png
└── tutorial.Rproj

我的哲学是,如果我的电脑现在坏了,我不得不重新安装,那么重新配置的时间应该越短越好。换句话说,记住不同计算机和操作系统之间的可移植性,因为如果你和其他人一起工作(其他人可以包括手稿的审阅者或读者),这将导致很多挫折。

当您使用 RStudio 打开 Rproj 文件时,工作目录会自动分配给 Rproj 的目录。如果您在另一台计算机上工作,并且将目录与 Onedrive 或 Dropbox 同步,那么如果您使用相对路径,一切应该仍然正常:

library(tidyverse)df <- read_csv("./data/datafile1.csv")
df$SampleID <- "datafile1"

这让我想到了另一个重要的提示。我曾经尽可能多地给文件名添加注释(类似于sample1_DNA_plasma_72hincubation.csv),但这很容易出错(在重命名过程中出错),别人也不总是清楚。我现在创建包含所有元数据的注释文件。

annotation <- read_csv("./Markdowns/annotation.csv")
annotation
    SampleID    biomaterial    incubation_time_hours
    datafile1   plasma         72
df_annotated <- merge(df, annotation, on = "SampleID")

RMarkdown 有很多定制选项,请参阅 Yan Holtz 的指南了解更多信息。

**我什么时候用 RMarkdown 而不用 R?**也总是如此——除非在极少数情况下,我编写一个脚本在集群上运行。如果你更习惯使用 Python,你可以用 Jupyter 笔记本代替 RMarkdown 文件。

如果没有提到 Docker 的使用,一篇关于可再现数据分析的文章是不完整的。简而言之,Docker 允许您使用和编写的任何软件在计算机之间(甚至在 macOS 和 Windows 之间)完全可移植。我在 Docker 上学习过教程,但是到目前为止我还没有使用过它。为什么不呢?我们的集群使用 easybuild ,每当我们想要使用一个软件包(比如说 FastQC)时,我们必须用ml FastQC/0.11.9_Java-11显式地加载它,它也加载它所有的依赖项。这在某种程度上使 Docker 对我来说是多余的,但在任何其他情况下,我都建议查看 Docker。

让你的数据分析对你未来的自己来说是可理解和可复制的是一回事,但让它对整个科学界来说是可复制的是另一回事。即使对你来说一切都很清楚,清理你的代码和数据并将其公之于众也是一项巨大的时间投资。发布可重复的研究有三个主要组成部分:原始数据、处理过的数据和脚本/代码(第四部分:编写文档和提供元数据)。

在我的生物医学和基因组学领域,原始数据通常是测序数据,可能会占用大量存储空间,并且可能是机密的。测序数据可以通过欧洲基因组-现象档案提供给社区。但是根据数据的大小和性质,原始数据也可以作为补充数据添加到手稿中。

经过处理的数据可以采取多种形式。也可以选择将处理后的数据发布到公共存储库中(例如 ArrayExpress ),将其作为补充数据文件添加到发布中,或者将其托管在 Github 存储库中,您将在那里添加代码。避免由你自己或你的大学托管,因为这在几年内更容易出现 404“未找到”错误。

这些脚本要么将原始数据转化为经过处理的数据,要么将经过处理的数据转化为手稿中呈现的图形和结论。从原始数据和经过处理的数据中复制手稿的代码可以在 Github 上获得。如果您使用如上所述的文件夹结构进行数据分析,就像上传文件夹一样容易(如果文件太大,不需要原始/处理过的数据,将这些数据添加到。gitignore)。许多杂志也接受你从编织你的博客中得到的 html 文件。此外,您可以将 html 文件作为网页发布在 Github 页面上。

https://gfycat.com/sillythirstybangeltiger

对于这些 Github 库来说,编写文档通常是最具挑战性的。当我发布我的代码时,我并不打算每次都发布一个适用于所有人的现成软件包。对于熟悉 R 和/或 Python 的用户来说,我更多地将这些脚本视为扩展的数据分析部分。我试着给出每个脚本做了什么的简要总结,并以一种清晰的方式评论我的 Python 代码或 RMarkdowns。

我下面列出的工具通过使用提高我的生产率的扩展的组合来帮助加速我的编码过程。一个很好的经验法则是,如果你在编程过程中遇到一些困难,并且认为“这可以更有效地完成”,那么很有可能有人已经做得更有效了。

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

Visual Studio 代码

除了 RMarkdown 之外,我对所有东西都使用 Visual Studio 代码(对此我使用 RStudio)。我的(有限的)扩展列表是:

  • 诺德:我最喜欢的调色板
  • Excel 查看器
  • Git lens:Git 与 VS 代码的无缝集成
  • Jupyter :交互式 Python 编码
  • MarkdownLint :降价文件的错误报告
  • PyLance 和 Python:Python 的提示和错误报告
  • 彩虹 CSV :彩色列,便于查看 CSV
  • Snakemake 语言:snake make 的语法高亮

我仍然在 tmux 中使用 iTerm2,正如我在关于使用 Nord 调色板编程的速成班中所写的。

定制你的.bashrc.zprofile也可以节省你大量的打字时间。我最重要的别名是给 ls 的输出上色,但是还有很多其他的小技巧。

cat ~/.bashrc
    # Color for grep and ls
    alias ls="ls --color=auto"
    alias grep='grep --color=auto'

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

iTerm2 和 tmux

RStudio 用于编写 RMarkdown —除了 Nord 调色板之外,我对 RStudio 没有任何定制。对于可视化,我总是使用 ggplot2。

背页— 在线 LaTeX 作者同步到 GitHub,我完全用 LaTeX 写了我的博士论文,这是一次非常愉快的经历,避免了我在 Word 中可能遇到的许多挫折。

分享你的代码可能会令人害怕,尤其是如果你刚刚开始。试着从目标是做好科学和做出有效结论的角度来看。一个开放和透明的工作流程使其他研究人员能够进一步发展和改进您的工作。如果他们发现了一个错误,那么你会学到一些新的东西,在某些情况下,这可能会对你的数据产生新的见解。最后,要意识到每个人都会犯错误,科学研究是一个终身学习的过程。开放的、可复制的科学和其他任何东西一样是一种技能,你做得越多,你就会做得越好(当你犯更多的错误时,你就会知道要注意什么)。

如果没有我从转化肿瘤组学和生物信息学(TOBI)实验室和OncoRNAlab的计算博士生、博士后和生物信息学家那里获得的灵感,这篇文章是不可能完成的,特别是 Pieter-Jan Volders、Celine Everaert、Jasper Anckaert、Annelien Morlion 和 Francisco Avila Cobos。

关于作者:

我是 Ruben Van Paemel 博士,2017 年从医学院毕业后,我开始在根特大学(医学遗传学中心)担任儿科肿瘤学的博士研究员。我得到了弗兰德斯研究基金会的资助。我也是根特大学医院的儿科住院医师。可以在推特上关注我:@ RubenVanPaemel

原文:https://towardsdatascience.com/myanmar-language-natural-language-processing-in-python-30489b5de2ca?source=collection_archive———23———————–

语言检测、Zawgyi-Unicode 转换和标记化

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

照片由在 Unsplash 上看到 Wunna

今天的主题是一个面向缅甸语言的开源免费 NLP 工具包,名为 pyidaungsu 。根据官方文件,pyiduangsu 是一个

…缅甸语 Python 库。在缅甸语言的自然语言处理和文本预处理中很有用。

在撰写本文时,它支持:

  • 语言检测(通用缅甸语、扎吉语、克伦语、孟语、掸语)
  • Zawgyi 和 Unicode 文本之间的转换
  • 基于音节或单词的标记化

建议在继续安装之前创建一个新的虚拟环境。

激活它并运行以下安装命令:

pip install pyidaungsu

在文件顶部添加以下导入语句:

import pyidaungsu as pds

然后,您可以调用detect函数并传入您想要的文本:

pds.detect("ထမင်းစားပြီးပြီလား")
# "mm_uni"

它将返回一个指示检测到的缅甸语言的字符串。例如,看看下面的例子和结果:

pds.detect("ထမင္းစားၿပီးၿပီလား")
# "mm_zg"
pds.detect("တၢ်သိၣ်လိတၢ်ဖးလံာ် ကွဲးလံာ်အိၣ်လၢ မ့ရ့ၣ်အစုပူၤလီၤ.")
# "karen"
pds.detect("ဇၟာပ်မၞိဟ်ဂှ် ကတဵုဒှ်ကၠုင် ပ္ဍဲကဵုဂကောံမွဲ ဖအိုတ်ရ၊၊")
# "mon"
pds.detect("ၼႂ်းဢိူင်ႇမိူင်းၽူင်း ၸႄႈဝဵင်းတႃႈၶီႈလဵၵ်း ၾႆးမႆႈႁိူၼ်း ၵူၼ်းဝၢၼ်ႈ လင်ၼိုင်ႈ")
# "shan"

在撰写本文时,它支持以下输出:

  • mm_uni
  • mm_zg
  • 凯伦
  • 孟族人
  • 掸族

这个包提供了两个方便的函数供你在 Zawgyi 和 Unicode 之间转换。

对于从 Unicode 到 Zawgyi 的转换,请使用以下函数:

pds.cvt2zgi("ထမင်းစားပြီးပြီလား")
# "ထမင္းစားၿပီးၿပီလား"

至于 Zawgyi 转 Unicode,可以这样调用:

pds.cvt2uni("ထမင္းစားၿပီးၿပီလား")
# "ထမင်းစားပြီးပြီလား"

这个包的主要核心特性之一是标记缅甸语文本的能力。在撰写本文时,它支持:

  • 音节级标记化(缅甸语、克伦族、掸族、孟族)
  • 单词级标记化(缅甸语)

这种标记化基于正则表达式(regex)。它支持缅甸语,克伦族,掸族和孟族语言。叫它如下:

它将返回一个记号列表(记号化的单词)。

另一方面,单词级标记化只支持缅甸语。它基于条件随机场(CRF)预测。照常调用 tokenize 函数,并将form参数指定给word

根据输入的文本,输出与音节标签略有不同。在包含英语单词的第二个例子中,注意单词标记化将Alan Turing组合成一个单词。

虽然这个包相当新,目前提供的功能有限,但作者在官方库中概述了以下路线图:

  • 支持新的标记化方法(BPE,文字块等)。)
  • 缅甸语的词性标注
  • 缅甸语命名实体识别(NER)分类器
  • 适当的文件

如果您对其他亚洲语言的语言分析感兴趣,请随意查看以下文章:

  • 高棉语—Python 中的高棉语自然语言处理
  • 泰语—python 语言入门指南
  • 朝鲜语—Python 中的朝鲜语自然语言处理
  • 日语—Suda chipy:Python 中的日语词法分析器
  • 越南语—pyvi 简介:Python 越南语 NLP 工具包

让我们回顾一下你今天所学的内容。

本文首先简要介绍了这个包提供的特性。

然后,它通过pip install进入安装过程。

它继续深入解释了语言检测、Zawgyi-Unicode 转换以及标记化。此外,标记化分为音节级和词级。

感谢你阅读这篇文章。祝你有美好的一天!

  1. Github — pyidaungsu

原文:https://towardsdatascience.com/mysql-data-connector-for-your-data-warehouse-solution-db0d338b782d?source=collection_archive———26———————–

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

由丽塔·塞内卡在 Unsplash 拍摄的照片

假设您是一名数据工程师,您的任务是从您的 MySQL 数据库实例和您的 数据仓库 中同步数据。这是一个非常常见的场景,其中您需要连接最流行的数据源和您的数据仓库解决方案,即雪花、红移或 BigQuery。

这篇文章详细总结了如何在不使用任何第三方应用程序的情况下从关系数据库(MySQL)中提取和保存数据。是用 AWS Lambda 函数构建的node . jsserver less应用的详细教程。这个微服务将从 MySQL 数据库中提取数据,并可以在您的机器上本地运行或/和按计划从 AWS 帐户运行。同样的应用程序还有一个更高级的例子,它创建了节点。JS streams从 MySQL 提取数据并保存到你的 AWS S3 数据湖

你将学习如何:

  • AWS Lambda 创建一个简单的 Node.js app。
  • 使用 Node.js streams 来优化内存消耗。
  • 提取数据并以 CSV 和 JSON 格式保存在本地。
  • 导出到云存储中。
  • 使用yaml config 进行查询。
  • 部署和安排它。

*$ npm run test* 命令会将一亿行数据批量导出到云存储中。

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

作者图片💡迈克·沙克霍米罗夫

本教程可能对数据工程师和所有使用 MySQL 数据库或想学习如何连接各种任意数据源和数据仓库解决方案的人有用。

工具

  • 已安装 Node.js 和节点包管理器
  • 对云计算(Amazon Web Services 帐户)、AWS CLI 和 AWS SDK 有基本的了解
  • Google Cloud Platform 或 AWS 帐户,具体取决于您使用的云存储。
  • Shell(命令行界面)命令和脚本(高级)。

技巧

  • 良好的节点知识。JS(中级)。您将创建一个 Lambda 函数。
  • 你必须了解 Node。JS 基本概念,即异步函数、节点包和代码如何工作。
  • 基本调试(控制台、打印报表)
  • 循环:即用于
  • 分支:if、if/else、开关
  • Shell 命令和脚本,就像您希望从命令行使用 AWS CLI 部署 Lambda 并能够在本地测试它一样。

您可能希望使用[SELECT * INTO 'file.csv'](https://dev.mysql.com/doc/refman/5.7/en/select-into.html)来实现这一点:

稍加调整和改变,你就会获得想要的结果。

但是,这是手动操作…

请记住,您可能希望使用索引列来限制where子句中的范围。否则,您的数据库将会遇到困难。

跳过 这部分如果你是在用 node.js streaming、数据转换和S3 upload等更高级的例子之后。

  • 为你的 Lamda 微服务新建一个文件夹:
    $ mkdir mysql-connector
    $ cd mysql-connector $ npm init

  • 使用npm为其安装 mysql 包:
    $npm i mysql2@2.0.0

  • 安装 run-local-lambda 包。我们将使用它在本地触发和测试 Lambda:
    $ npm i run-local-lambda@1.1.1

  • 在您的 Lambda 根目录中创建一个config文件来定义要使用的管道配置和表:

  • 在主应用程序文件./app.js中创建一个async函数,从./config.json文件运行 SQL 查询

你的应用程序文件夹现在应该是这样的:

您的主应用程序文件 **./app.js** 应该是这样的:

这是如何以编程方式从 MySQL 导出数据的要点。很简单。

在命令行中运行$ npm run test,这将从 MySQL 数据库中导出数据。请确保您的凭据和数据库主机地址正确无误。

现在您可以在您的./config.json文件中更改 SQL 查询,并以编程方式运行它。

首先,为什么要用 node . jsstream

如果你的数据集超过了你的内存,那么你应该像我们在步骤 1 中所做的那样分块提取数据。那stream是干什么用的。它可以帮助你优化应用程序的内存并导出数据,而无需将所有行加载到内存中。

如果你使用 AWS Lambda 或 GCP 云功能,这有助于节省资金,并且不会过度配置内存资源。

通常,128 Mb 的分配内存足以导出几百万行。

所以有了 Node.js *stream* 你可以更高效的把 MySQL 连接到你的数据仓库。

它的要旨

假设您想从 MySQL 中逐行提取数据,并在本地保存为 CSV 格式。以下示例适用于 npm 包mysql2csv-stringify

尝试创建一个函数,并用 lambda 的npm run test命令运行它。

你所需要的只是一个queryDbAndSave()函数。尝试将下面的async示例添加到您的processEvent()函数中。

把这个加到你的 **processEvent()** 函数里,就像这样:

下一个在你的命令行运行:$ npm run test

有想法了?酷毙了。让我们继续举更多的例子。

这个例子将把你的 SQL 查询结果保存到 AWS S3 或者 GCP 云存储中,不需要过度配置内存资源。

在我的场景中,我希望将结果查询到我的 S3 数据湖桶 ,并将 JSON 转换为 ndJSON 。

这样,当文件在云存储中被创建时,我可以很容易地用其他的服务 进一步触发 数据摄取 。如果你想学习如何做,请查看我的教程如何处理数据加载到你的数据仓库

对于stream-save查询结果,您可能想要向您的queryDbAndSave()函数添加一个新的分支:

此示例适用于相同的模块,但您可能也想包括这些模块:

  • npm i aws-sdk@2.1001.0撰写本文时,AWS Lambda 环境中使用的。检查当前环境这里的,这样您就可以简单地将其从部署工件中排除。
  • through2@4.0.2"一个更容易构建的包装库streams

所以现在如果再添加一个 MySQL 管道 到你的./config.json:

在你的命令行运行 *$ npm run test*

它将从 MySQL 中导出数据,并以 *stream* 模式将其 保存为一个文件 到您的云存储中。

您可能还想将数据保存在本地或保存到 AWS S3 中,即保存在 批处理模式 中。下面的片段解释了如何做到这一点。

您可能希望在./app.js : const BATCH_SIZE = process.env.BATCH_SIZE || 3000;的顶部声明输出文件的批量大小

那么您可能想要评估 SQL 查询的大小。您可以为此使用另一个异步函数:

向您的queryDbAndSave()函数添加另一个分支,并在每次检查是否到了结束时间时分块导出数据:

最终解决方案为**./app.js******processEvent()****功能:别忘了运行$npm i moment./app.js将使用构造文件的键来保存对象。

最终的解决方案可以在这个仓库中找到,为你的 MySQL 管道使用npm configyaml定义。

我更喜欢使用 *yaml* 只是因为当你添加那些长的 SQL 查询时更容易阅读。

样品./config/staging.yaml通常会看起来:

在我看来,当你需要区分livestaging环境时,这也更直观。在你的命令行运行$ npm i config。所以你最终的应用程序文件夹用./config/代替./config.json看起来会像这样:

有三种方法可以做到。

  1. 初学者可能会选择使用 web UI,要么将解决方案部署为 AWS LambdaGCP 云功能
  2. 更高级的用户可能想要创建一个部署 shell 脚本./deploy.sh,如下所示。在命令行中运行$ ./deploy.sh,它将部署 Lambda:

3.使用 Tarraform 或 AWS Cloudformation 部署代码为的基础设施。方便的 AWS Cloudformation 模板可以在 github 上的这个项目的资源库中找到。

在部署期间,确保您正确配置了所有访问角色安全组。例如,当您的 MySQL 数据库在 AWS 中时,您的 Lambda 函数必须部署在同一个 VPC 中才能访问它。一旦你在 Lambda 中启用了 VPC 支持,你的函数就不能再访问 VPC 之外的任何东西,包括 S3。具体到 S3,你可以使用[VPC 端点][15]来解决这个问题。

这是一个简单可靠的 数据导出 解决方案,允许你以低内存使用的方式从 MySQL 数据库中提取数据。这样你就可以创建一个快速可靠的 MySQL 数据连接器 并拥有一些令人敬畏的特性:

  • 通过从命令行运行$npm run test以编程方式提取 MySQL 数据。
  • 使用yaml定义来描述你的 MySQL 管道
  • 执行dryRun来评估 SQL 大小。
  • 使用Node.js streams导出数据,以避免内存过度配置。
  • 在本地设备上保存数据导出。
  • 将数据作为一个文件或成块保存到中。
  • 基础设施为代码的一键式部署和调度

查看 Github 库了解更多信息。

一些实时集成可能会很昂贵,而且通常依赖于你拥有的数据量。想象一下,插入到 MySQL 中的每一行都会触发 Lambda 导出并插入到您的数据仓库中。有一种更好的方法来像这样监视和控制数据摄取。

就在几天前,我用它从 MySQL 中导出了 5600 万行。然后我将它们分块保存到 AWS S3 的数据湖中。例如,我有一个数据加载管理器,每次文件进入数据湖时,它都会将数据发送到我的 BigQuery 数据仓库。

因此,导出我的 MySQL 数据并将其加载到我的数据仓库既快又容易。

[1]:https://towardsdatascience . com/how-to-handle-data-loading-in-big query-with-server less-ingest-manager-and-node-js-4f 99 FBA 92436

[3]:https://docs . AWS . Amazon . com/Amazon rds/latest/aurora user guide/aurora MySQL。Integrating.SaveIntoS3.html

【5】:【https://nodejs.org/api/stream.html

[7]:https://docs . AWS . Amazon . com/lambda/latest/DG/lambda-runtimes . html

[8]:https://AWS . Amazon . com/blogs/database/captureing-data-changes-in-Amazon-aurora-using-AWS-lambda/

[9]:https://stack overflow . com/questions/12333260/export-a-MySQL-table-with-亿万记录分块

[10]:https://stack overflow . com/questions/1119312/MySQL-export-into-outfile-CSV-escaping-chars/1197023

[11]:https://joshuaotwell . com/select-into-outfile-examples-in-MySQL/

[13]:https://AWS . Amazon . com/blogs/database/best-practices-for-export-and-import-data-from-Amazon-aurora-MySQL-to-Amazon-S3/

[14]:https://blog . rising stack . com/node-js-MySQL-example-handling-Bai-gigabytes-of-data/

原载于https://mydataschool.com

原文:https://towardsdatascience.com/mysql-vs-access-5db036bcdf4d?source=collection_archive———10———————–

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

在 Unsplash 上由 Rodion Kutsaev 拍照

正如你可能从标题中猜到的,我们正在做 MySQL 对比系列的另一篇文章。数据库再次引起了我的兴趣,还有一个数据库我们还没有谈到。Microsoft Access 数据库。我们甚至不必开始深入研究,你可能已经知道访问将会有多么不同。但这正是我认为挖掘更多信息会很有趣的地方。有那么多明显的不同,但是当我们去挖掘的时候,又有多少相似之处呢?也有一些明显的相似之处,但是那么又有多少不同呢?

正如你所猜测的,我刚刚发现这是一个有趣的话题。根据我在几堂课上的经验,我们没有把 Access 作为一个完整的数据库来使用。但是在我女朋友的一堂课上,她做到了。那么,让我们深入了解 MySQL 和 Microsoft Access 之间的差异。在这一点上,我们将更多地关注两者之间的差异,而不是积极/消极的方面。在我看来,你已经看到 MySQL 是我最喜欢在家里使用的开源数据库之一,而我从来没有真正提到过 Access。所以,今天我们只看 MySQL 和 Access 的区别。

首先要注意的是,Access 不仅仅是一个数据库管理系统(DBMS)。Access 合并了 Jet 数据库引擎和图形用户界面(GUI)。它还增加了软件开发工具。传统上,Access 使用关系数据库管理系统(RDBMS)。但是,Access 也可以简单地作为 DBMS 运行。

虽然 Jet 数据库引擎是默认的,但是您也可以选择 Access 支持的其他常用数据库,如 SQL Server、Oracle、DB2,或者查找对开放式数据库连接(ODBC)标准的支持。Access 还允许您从电子表格、文字处理文件或数据库文件中导出或导入数据。您还可以导入甚至直接链接到存储在其他数据库或应用程序中的数据。Access 还可以理解各种各样的数据格式。

当然,访问点是能够访问各种资源。这可能意味着它访问的文件,或者它可以读取的不同数据格式。但它也适用于访问数据的方式。例如,Access 可以处理来自其他来源、其他 SQL 数据库、流行的 PC 数据库程序、服务器、小型机、大型机的数据,甚至可以处理 Internet 或 intranet web 服务器上的数据。关于访问已经说得够多了,让我们开始比较一些不同之处。

正如我们之前多次讨论过的,MySQL 是一个开源的 RDBMS,大部分可以免费使用。MySQL 只涉及一些专有代码。当然,这是你不能只看到的代码,也是你要付费的领域。对于 MySQL,你有更多的争议。所以,Access 是微软 Office 自带的应用程序之一。但是可以肯定的是,这些并不是完全免费的。你必须有办公室才能免费进入那里。你可以获得微软 365 应用的 30 天免费试用,但也有免费的 Access 运行时版本可供你使用。现在,应该有免费使用 Access 的方法,但当然,这并不等同于 MySQL 是开源的,因为 Access 使用的是商业许可证。

说到分区,我们已经讨论了 MySQL 如何使用水平分区,或者使用 MySQL Cluster 或 MySQL Fabric 进行分片。另一方面,Access 不支持分区。复制也是如此。MySQL 支持多源或源副本复制,而 Access 不支持复制。

对于用户概念,MySQL 使用了细粒度的用户授权概念。然而,Access 并不包含用户概念,尽管在 Access 2003 之前有简单的用户级内置安全性。

MySQL 和 Access 都是为了经久耐用而构建的。它们都支持数据的持久性。但是,Access 不包括用于事务日志记录的文件。MySQL 和 Access 也是 ACID 兼容的,但是 Access 没有用于事务日志的文件。

我们还应该提到操作系统。MySQL 可以在 Linux、Windows、Solaris、OS X 和 FreeBSD 上运行。但是,Access 只能在 Windows 上运行。这是因为它不是真正的数据库服务器。它只是通过使用 dll(动态链接库)来发挥作用。也许没那么重要,MySQL 是用 C++和 C 写的,而 Access 只用 C++写的。

服务器端脚本也可能是一个考虑因素,这取决于您使用的版本。例如,MySQL 只有专有版本的服务器端脚本。对于 Access,仅当您将 Access 2010 或更高版本与 ACE 引擎一起使用时。Access 中的触发器也是如此。它们仅在带有 ACE 引擎的 Access 2010 或更高版本中可用,而触发器在 MySQL 中始终可用。

就安全性而言,访问权限要有限得多。您可能已经听说过,MySQL 有不同类型的安全性,并且可以配置 SSL 支持。为了安全起见,Access 仅支持用户名/密码。

既然我们已经了解了这些差异,那么让我们快速了解一下 Access 的优点和缺点。

Access 易于导航,因为它使用经典的 Microsoft UI(用户界面)。它也是微软办公套件的一部分。

访问不仅仅是针对表。如果你需要你的图表都绘制出来,没有必要在纸上做。Access 使得为表或模拟布局创建实体关系图变得很容易。

Access 还支持标准的 SQL 语法/脚本,因此您不必花时间学习一门新语言来使用它。

虽然有对访问的支持,但它并不总是有用的。就教程而言,它们有时会受限于所涵盖的材料。这使得“帮助信息”并不总是有用的。

虽然有更新,但没有太多大的变化。这可能是好事,但也可能是坏事。没有太多的变化也意味着他们会落后。

很难展示未使用的表格、报告、表格、文档等等。虽然开始时这可能不是很重要,但由于内存有限,您需要找到哪些对象可以删除,而不会损害任何底层查询或报告。

另一个挑剔的问题,但是对话框并不总是可调整大小的,所以长名字可能会被删掉。这不会是太大的问题,除非您有类似的命名约定。在这种情况下很难分辨出哪个是哪个。

在本文中,我们研究了 MySQL 和 Microsoft Access 之间的区别。总而言之,这两者之间有很多相似之处,但都具有标准的 SQL 特性。至于更技术性的方法,主要是底层结构,有更多的差异。在我看来,这是对数据库的一次有趣的探索。我认为有比我认为的更多的相似之处,但也许差异是重要的决定因素,比如付费或开源。最后,我希望您发现这是对 MySQL 和 Access 的一次有趣的探索。下次见,干杯!

用我的 每周简讯 免费阅读我的所有文章,谢谢!

想阅读介质上的所有文章?成为中等 成员 今天!

看看我最近的一些文章:

https://python.plainenglish.io/how-fast-are-sqlalchemy-relationships-5b6787dc9276 https://medium.com/codex/libreoffice-on-docker-1a64245468c

参考资料:

https://dba.stackexchange.com/questions/62851/mysql-vs-microsoft-access https://db-engines.com/en/system/Microsoft+Access%3BMySQL https://www.toolbox.com/tech/devops/question/difference-between-microsoft-access-and-mysql-061011/ https://www.tutorialspoint.com/ms_access/ms_access_overview.htm

原文:https://towardsdatascience.com/mysql-vs-cassandra-db-49bc518e1b8f?source=collection_archive———7———————–

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

丹尼尔·库切列夫在 Unsplash 上拍摄的照片

在我上一篇 MySQL vs 的文章中,我谈到了 Redis,这是一个我以前没有听说过的数据库。这一次,我想谈谈一个我听说过但没有时间试用的数据库。Cassandra DB 是另一个 NoSQL 数据库,我没有机会尝试,但经常在黑客马拉松这样的活动中听说它。除了是一个 NoSQL 数据库,Cassandra 也是开源的,它遵循我通常选择写的文章。但除此之外,我没有其他关于它的背景知识。

因此,对于另一篇 MySQL vs 文章,让我们更深入地了解一下 Cassandra DB 是什么。就像我们在以前的文章中所做的那样,它主要是管理性的,不包括语法。但是我们也要看看卡桑德拉的一些利弊。我们也可以比较一下 MySQL 的优缺点,但它们将与我们对 Cassandra 的了解直接相关,因为我们已经在本系列中讨论了很多关于 MySQL 的内容。所以,不再耽搁,让我们来学习一下什么是 Cassandra DB。

Cassandra 是 Apache 的一个开源数据库。这是 NoSQL,所以也很轻。Cassandra 也是一个分布式数据库。分布式数据库运行在多台机器上,但是对于用户来说,它看起来就像只有一台机器,因为他们是一个统一的整体。这通过多个节点发生,每个节点代表 Cassandra 的一个实例。从那里,节点相互通信以分配工作负载,从而改进功能。如果这个节点逻辑听起来很熟悉,那是因为 Cassandra 被设计成易于组织成一个集群。在那里,如果您愿意,您可以拥有多个数据中心。

Cassandra 在可伸缩性方面也很灵活。因为 Cassandra 是如此动态,您可以根据需要增加或缩小数据库。但这不像 MySQL,MySQL 有很长的停机时间,最终会再次达到上限。相反,Cassandra 允许更多的动态扩展,这意味着您需要做的只是添加更多的节点来增加大小、容量,甚至 CPU 能力或相关的 RAM。这意味着需要很少甚至没有停机时间,如果您过度,您可以轻松地缩减。

正如我们过去讨论过的,MySQL 和 Cassandra 都是开源的。关于 MySQL,前几篇文章我们讨论了 MySQL 提供的专有软件。这当然是一种付费服务,具有额外的支持和功能。对于 Cassandra,我在他们的开源文档中找到了信息,但我找不到任何关于它有付费功能或专有代码的信息。如果这是不正确的,请让我在评论中知道,但从我所看到的,卡珊德拉是真正的开源。

所以,首先,让我们谈谈数据库的结构。如你所知,MySQL 是一个 RDBMS(关系数据库管理系统)。然而,卡珊德拉是一个 NoSQL 数据库。这意味着 MySQL 将更多地遵循主/工人架构,而 Cassandra 则遵循对等架构。

我们已经知道 MySQL 支持 ACID(原子性、一致性、可靠性和持久性)事务。然而,Cassandra 不会自动跟踪 ACID 交易。这并不意味着这是不可能的。虽然最初没有提供,但是您可以调整 Cassandra 的特性来支持 ACID 属性。例如,调整 Cassandra 的复制和容错功能可以确保可靠性。另一个例子是调整一致性。Cassandra 是一个 AP (Available Partition-tolerant)数据库,但是您可以将一致性配置为基于每个查询。

当我们考虑可伸缩性时,MySQL 更普遍地支持垂直伸缩。通过复制或分片,水平扩展也是可能的。另一方面,Cassandra 支持水平和垂直可伸缩性。虽然这个更具体一点,但是我们也来看看 Read 事务的性能。但是首先,我们需要查看连接来理解逻辑。如您所知,MySQL 或任何 RDBMS 都支持查询中多个表之间的连接。另一方面,卡桑德拉不鼓励加入。相反,它更喜欢每次查询只从一个表中选择。因此,因为在一次 MySQL 读取中可以连接多个表,所以性能为 O(log(n))。一次只读取一个表,Cassandra 的性能是 O(1)。当查看 Write 语句时,MySQL 的性能可能会降低,因为在写入之前执行了搜索。Cassandra 不使用搜索,而是使用 append 模型,这在编写时提供了更高的性能。

可能是给定的,但是 MySQL,因为它是 RDBMS,支持参照完整性,并且有外键。因为 Cassandra 是一个 NoSQL 数据库,它不实施参照完整性,因此没有外键。

为了确保分布式系统中的一致性,MySQL 提供了即时一致性方法,但这是唯一提供的类型。Cassandra 允许即时一致性方法和最终一致性方法。

就操作系统而言,MySQL 用于 FreeBSD、Linux、OS X、Solaris 和 Windows。然而,Cassandra 只在 BSD、Linux、OS X 和 Windows 上受支持。正如我们所知,MySQL 也是用 C 和 C++语言编写的。另一方面,Cassandra 只使用 Java 编写。MySQL 也是 Oracle 开发的,其中 Cassandra 是 Apache 软件开发的。

正如我们在描述 Cassandra 时谈到的,它的可伸缩性是一个很大的优势。这是因为它可以在不停机的情况下快速完成,因为您不必关闭数据库来进行扩展。水平和垂直可伸缩性都是一个选项,因为 Cassandra 使用线性模型来获得更快的响应。

除了可伸缩性,数据存储也很灵活。因为它是一个 NoSQL 数据库,所以可以处理结构化、非结构化或半结构化数据。同样的,数据分布也很灵活。可以使用几个不同的数据中心,这使得分发数据更加容易。

性能是我们讨论的另一个因素。我们将在这里讨论的好处是它如何处理同时读写语句。即使是多个写请求也能得到快速处理,不会影响读请求。

使用 Cassandra 的另一个好处是简单的语言,CQL (Cassandra 查询语言),它是作为一个替代 SQL 提供的。卡珊德拉也有权力下放的好处。这意味着,由于节点的结构,不会有单点故障。如果一个节点发生故障,另一个节点可以检索相同的数据,因此数据仍然可用。

Cassandra 的一个缺点是,因为它是 NoSQL,没有结构化的 SQL 语法,所以会有一系列 Cassandra 没有的功能。例如,没有实施参照完整性、子查询(GROUP BY、ORDER BY 等。),甚至是加入。Cassandra 的查询能力有限,也不支持聚合。此外,读取请求可能运行缓慢。我们提到写请求可以运行得很快,但是多个读请求会延迟结果并且运行得更慢。

使用预测查询在 Cassandra 中对数据建模。这意味着存在重复数据的可能性。尤其是卡桑德拉是 NoSQL,你可能必须处理重复的数据,因为它不会像 MySQL 或其他 SQL 语言那样被自动拒绝。

与 Cassandra 相比,MySQL 的最大优势在于它是一个 RDBMS。首先,我们讨论的是连接、聚合和其他功能,比如实施参照完整性。还有更灵活的查询,您可以创建任何组合来产生不同的结果。然而,MySQL 比其他一些 SQL 系统更灵活,因此对 SQL 标准的遵从是有限的。

MySQL 也试图防止重复记录,而 Cassandra 没有。不仅如此,MySQL 还兼容 ACID,这可能是您数据库需要的额外结构。

与 Cassandra 相比,第一个主要缺点是伸缩时的灵活性。虽然 MySQL 可以扩展,但是会有停机时间,即使这样,您仍然会遇到瓶颈。但是,由于查询中的所有潜在组合,查询速度也会变慢。例如,如果您正在连接多个表,无论是读请求还是写请求,都可能会降低结果的速度。

MySQL 也只是部分开源。使用付费版本时,涉及到专有代码和额外的支持。

在今天的 MySQL 对比系列中,我们看了 NoSQL 数据库 Cassandra。Cassandra 是另一个轻量级、开源、高度可伸缩的数据库,越来越受欢迎。它是一个 Apache 软件,设计为在一系列节点之间作为分布式数据库运行。这意味着可以有多个数据中心,如果您想要扩展,只需添加或删除节点。尽管 Cassandra 灵活而有用,但它也不遵循标准的 SQL 实践,例如强制引用完整性,并且它鼓励用户编写单独的查询,而不是不支持的连接。

如果你对卡珊德拉有更多的了解,或者想分享你的经历,请随时发表评论。我希望这些信息对你有用,或者至少是一篇有趣的文章。下次见,干杯!

用我的 每周简讯 免费阅读我的所有文章,谢谢!

想阅读介质上的所有文章?成为中等 成员 今天!

看看我最近的一些文章:

https://medium.com/codex/libreoffice-on-docker-1a64245468c https://python.plainenglish.io/searching-for-text-in-those-annoying-pdfs-d95b6dc7a055

参考资料:

https://cassandra.apache.org/_/cassandra-basics.html https://www.educba.com/cassandra-vs-mysql/ https://www.geeksforgeeks.org/difference-between-cassandra-and-mysql/ https://cloudinfrastructureservices.co.uk/cassandra-vs-mongodb-vs-redis-vs-mysql-vs-postgresql-pros-and-cons/

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » PDSII是什么意思TowardsDataScience 博客中文翻译 2021(五百零一)

登录

找回密码

注册