用 3 行 Python 代码编写一个 Web 服务器
使用内置库“http.server”用 Python 编写的最简单的 web 服务器
要知道 Python 可以非常有效的用来写 web 服务器。据了解,目前有许多流行和优秀的框架和库,如 Django 和 Flask,这使得后端开发人员可以专注于业务逻辑,节省了大量的编码时间。
但是,你知道 Python 的内置库http.server
也可以用来写 web 服务器吗?还有,你知道你甚至可能只用三行代码就写出一个吗?在本文中,我将向您展示如何在一分钟内编写并运行一个 web 服务器!
简单的准备
Toa Heftiba 在 Unsplash 上拍摄的照片
web 服务器将需要在某个地方启动,因此您需要考虑要在哪里启动它。然后,你可能想把你的代码放在那里。
此外,我们需要导入http.server
库。可选地,建议导入os
库,以确保 web 服务器确实运行在“当前”目录中。换句话说,使用当前目录作为 web 服务器的根路径。
import os
from http.server import HTTPServer, CGIHTTPRequestHandler
从http.server
库中,我们需要HTTPServer
类来实例化服务器对象,以及CGIHTTPRequestHandler
类作为请求处理器。
如果你不知道什么是CGI
,这里有一个来自维基百科的简短定义:
在计算中,公共网关接口 ( CGI )是一种接口规范,用于 web 服务器执行程序,如运行在动态生成网页的服务器上的控制台应用程序(也称为命令行接口程序)。这样的程序被称为 CGI 脚本或简称为 T21 CGI。服务器如何执行脚本的细节由服务器决定。在一般情况下,CGI 脚本在发出请求时执行,并生成 HTML。[1]
三行代码
乔希·里默尔在 Unsplash 上拍摄的照片
然后,让我们用三行代码编写服务器,不开玩笑。
第一行
让我们确保在当前目录下创建服务器,并将其用作根路径。os.chdir()
方法会将路径设置为当前工作目录。这里我们将当前目录.
设置为它的工作目录。
# Make sure the server is created at current directory
os.chdir('.')
第二行
让我们从HTTPServer
类创建一个“服务器对象”。它有两个参数,第一个是server_address
,它是
- 侦听的地址,其中空字符串表示侦听本地主机
- 侦听的端口号。我将使用端口 80,这样我就不必输入端口号来访问。您可以选择使用其他端口号,如 8080
# Create server object listening the port 80
server_object = HTTPServer(server_address=('', 80), RequestHandlerClass=CGIHTTPRequestHandler)
第二个参数是请求处理程序类。这里我们使用已经导入的CGIHTTPRequestHandler
。
第三行
没别的,我们跑吧!
# Start the web server
server_object.serve_forever()
serve_forever()
方法将基于我们刚刚创建的服务器对象启动服务器,并确保它持续运行。
所有代码放在一起
Here is all the code:import os
from http.server import HTTPServer, CGIHTTPRequestHandler# Make sure the server is created at current directory
os.chdir('.')
# Create server object listening the port 80
server_object = HTTPServer(server_address=('', 80), RequestHandlerClass=CGIHTTPRequestHandler)
# Start the web server
server_object.serve_forever()
测试服务器以及我们为什么需要它
本·怀特在 Unsplash 上的照片
将所有代码保存到一个名为pyserver.py
的文件中。然后,转到命令行并运行 Python 脚本。
python pyserver.py
您将在 stdout 中看到预期的任何输出。去你的浏览器输入localhost
,网络服务器已经开始工作了。
web 服务器根目录的屏幕截图
因此,这个 web 服务器将允许您从根路径浏览文件。
现在,你可能会问我为什么需要这个 web 服务器?对,没那么有用。但是想想你能用网络浏览器做什么?例如,我过去常常下载一些通常是 PDF 格式的学术研究论文。你会发现在网页浏览器中浏览子文件夹和打开 PDF 文件比使用 Windows 资源管理器和 Mac OS Finder 要快得多。
包含 PDF 文件的文件夹的屏幕截图
打开的 PDF 文件的屏幕截图
同样,在这个例子中,我们在本地机器上运行 web 服务器。如果您可以在远程机器上运行这个 Python 脚本,那么您将获得一个非常快速的文件共享服务器!
总结和注意事项
在本文中,我介绍了如何只用三行 Python 代码编写一个 web 服务器,让您可以浏览服务器上的文件。
然而,需要注意的是,实现如此简单的http.server
是不安全的。因此,请不要在重要的环境中只使用这三行代码,这可能会成为潜在的安全漏洞。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和其他成千上万的作者!(点击上面的链接)
参考
[1]通用网关接口,维基百科https://en.wikipedia.org/wiki/Common_Gateway_Interface
2021 年你应该阅读的 4 篇重要的机器学习和深度学习论文
2021 年机器学习的突破
从数百篇高质量的 ML 研究论文中筛选出来的,这些是最突出的。
丹·迪莫克在 Unsplash 上拍摄的照片
2021 年重要的机器学习和深度学习论文
机器学习 突然成为计算机科学最关键的领域之一,几乎涉及到所有与人工智能相关的领域。
每个公司都在应用 机器学习 并开发利用这个领域的产品来更有效地解决他们的问题。
每年都有数千篇与 机器学习 相关的研究论文发表在 NeurIPS、ICML、ICLR、ACL、MLDS 等热门刊物上。
该标准使用来自三个学术来源的引用计数:scholar.google.com;academic.microsoft.com;还有 semanticscholar.org 的。
自然语言处理、对话式人工智能、计算机视觉、强化学习和人工智能伦理方面的重要研究论文每年发表一次
几乎所有的论文都提供了在 机器学习 领域的某种程度的发现。然而,有三篇论文特别站得住脚,它们在 机器学习 领域,特别是在 神经网络 领域提供了一些真正的突破。
用于图像识别的深度残差学习
摘要:
越深的神经网络越难训练。我们提出了一个剩余学习框架来简化比以前使用的网络更深入的网络训练。我们明确地将这些层重新表述为参考层输入的学习剩余函数,而不是学习未被参考的函数。
在深度意义的驱动下,一个问题产生了:学习更好的网络是不是和堆叠更多层一样简单?
具有 20 层和 56 层平面网络的 CIFAR-10 上的训练误差(左)和测试误差(右)。
学习身份函数极其困难,因为权重和偏差的所有可能组合的范围都是巨大的,因此学习身份函数的机会微乎其微。如上所述,给神经网络增加更多的层实际上可能会适得其反:更多的层=更低的精度(收益递减)。
该文件指出,对此有一个解决办法。也就是通过将隐藏层的输入与输出相加
剩余学习:一个积木。
通过在更深的网络上实现这一想法,他们能够在 COCO 对象检测数据集上获得 28%的相对改善。深度残差网络是我们提交给 ILSVRC 和 COCO 2015 竞赛的基础,在那里他们还在 ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割任务中获得了第一名。
单头注意力 RNN:停止用你的头脑思考
arvix:作者:史蒂文
在这篇论文中,哈佛毕业生史蒂文·梅里蒂介绍了一种最新的自然语言处理模型,称为单头注意力 RNN 或沙-RNN。Stephen Merity,独立研究员,主要专注于 机器学习、NLP 和深度学习 。作者通过一个简单的带有 SHA 的 LSTM 模型进行演示,在 enwik8 上实现了最先进的字节级语言模型结果。
作者的主要目标是表明,如果我们沉迷于稍微不同的首字母缩写词和稍微不同的结果,整个领域可能会朝着不同的方向发展。
要了解全部细节,请参见题为《单头注意力 RNN:停止用你的头脑思考》的论文。总而言之,“停止思考…
github.com](https://github.com/smerity/sha-rnn)
Steven 提出的模型架构的中心概念由一个 LSTM 架构和一个基于阿沙的网络组成,该网络具有三个变量(Q、K 和 V)。
来源:Arvix(https://arxiv.org/pdf/1911.11423.pdf)
每个 SHA-RNN 层只包含一个关注点,通过消除更新和维护多个矩阵的需要,有助于将模型的内存消耗保持在最低水平。
Boom 层与在变形金刚 和其他架构中发现的 l arge 前馈层紧密相关。与传统的向下投影层相比,该块通过使用高斯误差线性单元(GeLu)乘法来分解输入以最小化计算,从而减少并移除了整个参数矩阵。
下面我们来看实际对比。2016 年,RNN 正则化方法 surprise-Driven zone out在 Hutter Prize 数据集 enwiki8 上取得了 1.313bpc 的优异压缩成绩,该数据集是一个百兆字节的维基百科页面文件。
与 2016 年的车型相比,SHA-RNN 的 bpc 甚至更低。令人印象深刻。每个字符的位数是由 Alex Graves 提出的模型,用于在给定过去字符的情况下近似下一个字符的概率分布。
来源:https://arxiv.org/pdf/1911.11423.pdf
此外,单头注意力 RNN(沙-RNN)设法实现了强大的最先进的结果,几乎没有超参数调整,并通过使用一个单一的泰坦 V GPU 工作站。此外,他的工作没有经历过密集的超参数调整,完全依赖于一台商用台式机,这使得作者的小工作室公寓有点太温暖了,他不喜欢。这就是对 机器学习 的热情。*
EfficientNet:重新思考卷积神经网络的模型缩放
arvix:【https://arxiv.org/abs/1905.11946】
作者: 谭明兴郭诉乐**
在本文中,作者系统地研究了模型缩放,并确定仔细平衡网络深度、宽度和分辨率可以获得更好的性能。本文展示了一种新的缩放方法,它使用一个简单而高效的复合系数统一缩放深度、宽度和分辨率的所有维度。
** [## narumiruna/efficient net-pytorch
“EfficientNet:卷积神经网络模型缩放的再思考”的 PyTorch 实现。…
github.com](https://github.com/narumiruna/efficientnet-pytorch)
论文提出了一种简单然而有效的复合缩放方法,描述如下:
来源:Arvix()https://arxiv.org/abs/1905.11946)
经过尺寸缩放(宽度、深度或分辨率)的网络可提高精度。但是需要注意的是,模型精度随着模型的增大而下降。因此,在 CNN 缩放过程中平衡网络的所有三个维度(宽度、深度和分辨率)对于提高精度和效率至关重要。
与传统的缩放方法相比,如上所述的复合缩放方法 持续提高了放大现有模型的模型精度和效率,例如 MobileNet (+1.4%图像净精度)和 ResNet (+0.7%)
缩放不会改变图层操作;相反,他们通过进行神经架构搜索(NAS)获得了他们的基本网络,该网络同时优化了准确性和 FLOPS。与 ResNet-50 和 DenseNet-169 等现有 ConvNets 相比,扩展的 EfficientNet 模型始终将参数和 FLOPS 减少了一个数量级(参数减少高达 8.4 倍,FLOPS 减少高达 16 倍)。
EfficientNets 还在八个数据集的五个中实现了最先进的准确性,如 CIFAR-100 (91.7%)和 Flowers (98.8%),参数数量级更少(参数减少高达 21 倍),这表明 EfficientNets 也传输良好。**
深度双重下降:更大的模型和更多的数据会造成伤害
arvix: 作者:普雷顿·纳克兰加尔·卡普伦亚米尼·班萨尔特里斯坦·杨****
在本文中,作者在 OpenAI 将神经网络的一个训练过程的有效模型复杂度(EMC) 定义为它能达到接近零训练误差的最大样本数。进行的实验表明,在插值阈值附近存在一个临界区间。**
插值阈值意味着模型随着模型参数的数量、训练的长度、分布中的标签噪声量以及训练样本的数量而变化。临界区域只是参数化不足和参数化过度的风险域之间的一个小区域。
来源:https://www . less wrong . com/posts/frv 7 ryoqtvsuqbxut/understanding-deep-double-descent
在大多数研究中,偏差-方差权衡是经典统计学习理论中的一个基本概念。这个想法是,模型越复杂,偏差越小,但方差越大。
一旦模型复杂性超过临界区间,模型会过度拟合,方差项会控制测试误差,因此从这一点开始,增加模型复杂性只会降低性能,这称为双下降现象。
我们证明了双重下降现象发生在 CNN、ResNets 和 transformers 中:性能首先提高,然后…
openai.com](https://openai.com/blog/deep-double-descent/)
本文定义了模型性能降低的三种情况,因为下面的状态变得更加重要。
(按型号)双重下降—型号越大,伤害越大
模范政权(来源:【https://arxiv.org/abs/1912.02292】)
论文展示了不同架构、数据集、优化器和训练过程中的模型式双下降现象。
该论文的结论是,通过在训练之前对数据集进行的常规修改(例如,添加标签噪声、使用数据扩充和增加训练样本的数量),测试误差峰值会向更大的模型移动**。**
此外,在上面的图表中,测试误差的峰值出现在插值阈值附近,此时模型刚好大到足以适合训练集。
(样本方面)非单调性—更多数据会造成伤害
样本政权(来源:https://arxiv.org/abs/1912.02292)
在本节中,图表显示了改变固定模型的训练样本数量的效果。增加样本数量会使曲线向较低的测试误差方向下移,但也会使峰值误差向右移动。
(纪元方式)双重下降-更高的纪元伤害
历朝政权(来源:【https://arxiv.org/abs/1912.02292】T21)
对于给定数量的优化步骤(固定的 y 坐标),测试和训练误差呈现出模型大小的双重下降。对于给定的模型尺寸,随着训练过程的进行,测试和训练误差减小、增大、再减小;我们称这种现象为划时代的双重下降。
增加训练时间会增加 EMC,因此在整个训练阶段,一个足够大的模型会从参数不足过渡到参数过多。
此外,具有更多宽度参数的较大模型(如 ResNet 架构)可能会经历显著的双下降行为,其中测试误差首先下降(比其他尺寸模型更快),然后在插值阈值附近上升,然后再次下降,如下所示。
来源:https://mltheory.org/deep.pdf
对于处于插值阈值的模型,实际上只有一个全局模型适合训练数据,强制它适应甚至小的错误指定的标签将破坏它的全局结构。然后,该论文得出结论,没有好的模型既能对训练集进行插值,又能在测试集上表现良好。
如上所述,这些关键机制的特征为实践者提供了一种有用的思维方式,希望很快在机器学习方面取得突破。
参考
[## 理解“深度双重下降”——less wrong 2.0
如果你不熟悉双重下降现象,我想你应该熟悉。我认为双重血统是一种…
www.lesswrong.com](https://www.lesswrong.com/posts/FRv7ryoqtvSuqBxuT/understanding-deep-double-descent) [## 深度双重下降
我们证明了双重下降现象发生在 CNN、ResNets 和 transformers 中:性能首先提高,然后…
openai.com](https://openai.com/blog/deep-double-descent/)
最后
随着 机器学习 社区每年的成长,会有越来越多的论文发表。这是我们的一部分,阅读新的和合理的文章,以装备自己在社区的最新和最先进的突破。继续阅读爱好者伙伴!
如果我已经设法让你注意到这一点,请留下评论,如果你对这个系列有任何建议,因为它将大大增加我的知识,改善我的写作方式。Prem Kumar是一个无私的学习者,对我们身边的日常数据充满热情。如果你想谈论这个故事和等待的未来发展,请在LinkedIn上与我联系。**
初级开发人员在面试中犯的 3 个错误
对我采访软件开发人员的反思
丹尼尔·麦卡洛在 Unsplash 上的照片
如果你不能通过面试,成为一名天才软件工程师不会让你走得很远。我不是在谈论沟通技巧或不了解你面试的公司的实质性细节。那些问题在我看来在大多数情况下都不是决定因素。
相反,我会提到我见过的开发人员犯的错误,这些错误最终成为他们被拒绝的原因。这些问题也很容易解决,会在面试中产生巨大的影响。
反应太快
我在面试候选人时看到的最大错误是在了解问题之前就跳到解决方案。候选人渴望回答问题,所以他们相信自己越快想出解决方案,听起来就越聪明。但这不是我们的工作。
不要像翻译一样,把业务问题翻译成代码。你首先是一个问题解决者,然后才是程序员。你应该始终了解问题,尽可能多地提问,以了解问题的动态。不要急!
没有人指望你马上提供解决方案。被评估的是你处理问题的方式。
东奔西跑
我经常看到的另一个问题是,候选人害怕说“我不知道”你不必假装自己无所不知。即使是你在简历中提到过的事情,你也可以大声说出来。
当你不知道一些琐事时,很容易弄清楚(“Python 中如何处理哈希冲突?”).优秀的候选人知道总会有一些他们不知道的事情,所以他们只会给出一个自信的、没有歉意的“我不知道”这完全没问题,也是一个有效的答案。
你只有不到一个小时的面试时间。除了展示为什么你是最好的候选人之外,你必须确保你不会把它浪费在其他任何事情上。
质量差的代码提交
很多时候,在技术面试之前,你应该解决一个问题,然后把代码送回去。通常给你两天时间来写答案。你可以选择你觉得舒服的语言,如果你不太明白,也可以做一些假设。
一个糟糕的提交通常有两个错误——假设代码质量良好,解决方案可行。
- 糟糕的文档:对于第一次看你的代码的人来说,没有以书面形式提及解决方案的关键部分是非常令人恼火的。在编写假设、使用的依赖项以及如何运行应用程序时,您必须非常谨慎。
- 测试覆盖率:考虑到你通常得到的时间量,添加适当的测试并拥有最低 80 %的测试覆盖率应该不会太难。
一个快速的技巧是让你的朋友试着运行代码。如果他们能够运行并理解它,那么你就可以走了。
结论
这是我在面试应聘者时注意到的几件事。对我来说,做最后的决定有很大的不同。
“一般人只把 25%的精力放在工作上。这个世界向那些贡献了超过 50%能力的人脱帽致敬,而向那些贡献了 100%的人致敬。”—安德鲁·卡内基
这绝不是一个详尽的列表,也不能保证任何事情。但是把这些方面考虑进去肯定会给你的面试经历增加很多价值。
这是另一篇你可能会感兴趣的文章。
这将有助于大大减少返工,并增强您的整体理解
levelup.gitconnected.com](https://levelup.gitconnected.com/3-habits-that-will-help-you-become-a-top-developer-7f310fa2c3b0)
我希望这篇文章对你有用!你可以跟着我。我也在推特上。欢迎在下面的评论中留下任何问题。我很乐意帮忙!
学生在开始学习数据科学时会犯的 3 个错误
成为更好的数据科学家的技巧和资源
最近,我有幸作为小组成员参加了东北大学的新冠肺炎发现数据大会。目标很简单:从开源新冠肺炎数据中产生可操作的见解和/或预测模型,以帮助社区做出更好的决策。
我想写下一些我注意到的学生在资源上犯的常见错误,他们可以在那里找到更多的帮助。
忽略了良好可视化的价值
我坚信,如果没有有意义的可视化,您的分析和建模工作是没有价值的。视觉化不需要新颖,但必须是深思熟虑的和完整的。提高可视化的一些技巧:
- 添加轴标签和绘图标题:对“x”和“y”轴标签和 df $变量标题说不!这就像穿着运动裤去参加一个聚会,没什么不对,但你可能要重新考虑一下。
添加轴标签和标题(必要时添加图例)会使可视化更加有效。图片作者。
2.彩虹色是一大禁忌!色彩可以让剧情在视觉上刺激,但是太多了从来都不好。彩虹调色板的衰落已经被记录了几次,无数的帖子对此进行了更详细的讨论,一个简单的谷歌搜索就会发现无数的文章。
我的经验法则是:少用颜色,让观众注意到视觉的某个方面。
虽然彩虹调色板的颜色更丰富,但黑白更有价值。彩虹是混乱的,需要观看者不断地看着传说,然后理解故事情节。图片作者。
下面的帖子详细介绍了如何使用一些简单的工具来挑选更好的颜色,colorbrewer2.org是我经常使用的一个网站。
为图表选择好的颜色很难。这篇文章试图让它变得更简单。我希望你感觉更自信…
blog.datawrapper.de](https://blog.datawrapper.de/beautifulcolors/)
3.选择正确的可视化:这听起来像是一句“废话,天才!”点,但从传达信息的意义上来考虑一个情节,而不是从数据中传达一个观察结果,这是值得的。下面的帖子是一个很好的起点。提示:试着为给出的例子想出不太理想的可视化效果。
如果您想要可视化数据,请确保使用正确的图表。虽然您的数据可能适用于多个…
infogram.com](https://infogram.com/page/choose-the-right-chart-data-visualization)
最后,如果你是一名东北学生,我强烈建议你参加一门可视化课程——比如 DS5500。
幻灯片很无聊,故事很有趣
讲故事非常有效地帮助观众理解你对数据和你试图解决的问题的观点。我喜欢带领我的观众踏上数据之旅,向他们展示我在哪里遇到了麻烦,并用可靠的数据可视化来支持我的决策。从一个简单的结构开始:
- 分析的目的:清楚地陈述你想要达到的目标和一个小要点,以及为什么这对某人有用。
- 数据:数据的一个小片段(标题)有助于将听众与手边的问题联系起来。当使用大型数据集时,重要变量的汇总统计会很有帮助。
- 分析、方法和结果:向观众介绍一些你执行的分析和使用的建模方法,必要时用可视化来补充。显示变量中的异常值、不一致和缺失,以及如何处理它们。
- 结论:这个比你想象的简单多了,重申结果,以及为什么有意义。我喜欢把这一部分看作是我的一两张幻灯片的概述。
熟能生巧,我发现 YouTube 是一个很好的资源。观察演讲者如何分析,并尝试思考是否有其他方式可以传达相同的信息。
最终想法:演示者就像牧羊人引导观众(羊)通过数据得出结论。当你得出结论的时候,你不希望羊群走失。
太快开始做模特了
从数据科学开始,我也渴望拟合模型,并在测试集上呈现最高的准确性。但是随着时间的推移,我意识到一个模型的好坏取决于用来建立模型的数据。探索性数据分析不仅能让你更好地理解数据,还能让你更好地向听众传达为什么要做出某些决定。作为一名数据科学家,我 70%的时间都花在清理数据和发现不一致的地方。
建模前需要考虑的几件事:
- 多重共线性和混杂变量:数据通常充满了噪音和混杂变量。查看可以消除哪些变量的一个简单方法是查看相关性热图,并对保留/删除显示明显相关性的变量进行推理。在我看来,这为你和你的观众完成了 80%的工作。
- 数据很乱!清理异常值,并考虑如何处理缺失值。真实世界的数据永远不会像你期望的那样,这很容易打乱你的分析,得出错误的结论。
这不是数据科学。来源:https://xkcd.com/1838/
在这篇文章中,我将回顾一些我学到的让我从一名技术数据科学家变成…
towardsdatascience.com](/top-examples-of-why-data-science-is-not-just-fit-predict-ce7a13ef7663)
总之,关注你的听众,从数据中呈现一个故事。使用正确的可视化来帮助你的故事,并验证你选择的变量来创建模型。记住这些提示,通过实践,你将学会成为一名更好的数据科学家。
感谢阅读!
数据科学家最常被问到的 3 个 Python 面试问题
面向数据科学家的顶级 python 面试问题
许多博客和网站都有一些关于数据科学面试的问题和建议。然而,大多数数据科学面试也想测试候选人的软件工程技能。在这里,我们列出了在数据科学访谈中最常被问到的关于 Python 编程的 3 个问题。
链表和元组有什么区别?
这个问题其实是关于理解 Python 中的数据结构。什么时候使用列表,什么时候使用元组?这与一个没有进入前三名的问题密切相关,这个问题是关于什么是不可变的和易变的对象。我们将直接进入它。
元组是不可变的对象,而列表不是。简单地说,可变对象可以被改变,而不可变对象则不能。因此,一个列表有一个可变的大小,即,可以扩展,我们可以替换它的项目,而一个元组是不可变的,因此我们不能。
这种解释在大多数情况下足以通过面试问题,但在本帖中,我们会给你更多的细节,让你更好地理解它。
元组和列表都是用于存储项目集合的数据结构,这些项目可以是任何数据类型。元组和列表都使用索引来访问这些项目。这就是相似之处的终结。
元组的语法不同于列表,列表中的元组是用‘()’
和列表‘[]’
创建的。如上所述,元组是不可变的,这意味着如果你有一个这样的元组: my_tuple=('A','B','C')
,并且你试图覆盖索引“0”处的元素,例如my_tuple[0]='D'
,这将抛出一个类型错误:TypeError: ‘tuple’ object does not support item assignment
。如果你在修改一个列表,这种情况不会发生。
就内存效率而言,由于元组是不可变的,因此可以为它们分配更大的内存块,而列表需要更小的内存块来适应这种可变性。这里不要混淆。更大的内存块实际上意味着更少的内存占用,因为开销很低。因此,元组的内存效率更高,但如果预计它们会发生变化,那么使用元组并不是一个好主意。
什么是列表理解?
任何用 python 编程的人都可能遇到过这种符号,在这里你可以像这样做 for 循环。意志导致[‘E ‘,’ x ‘,’ a ‘,’ m ‘,’ p ‘,’ l ‘,’ e’]。
列表理解是一种创建和定义列表的优雅方式,无需编写太多代码。此外,您可以像这样向列表理解添加条件:[ x for x in range(20) if x % 2 == 0]
它只返回能被 2 整除的数字(包括 0)。
这里的一个关键点是,每个列表理解都可以使用普通的 for 循环重写。然而,并不是每个 for 循环都可以用列表理解格式重写。然而,通常情况下,列表理解更有效。如需更多分析,请访问此链接。
有时,列表理解被比作 lambda 函数(不要与 AWS Lambda 混淆),这是另一个在面试中经常出现的问题。Lambda function 实际上是做一个函数操作,就像你通常做的那样,但它是在一行中完成的。
举个例子,
def my_func(x):
print(x+1)
可以转到这个 lambda 函数my_func=lambda x: print(x+1)
,这里可以像普通函数一样调用这个函数,例如my_func(2)
什么是装修工?
Python 中的装饰器是任何可调用的 Python 对象,用于修改函数或类,而不改变其底层结构。使用装饰器很容易,对于一个没有经验的程序员来说,编写装饰器可能很复杂。
让我们看看如何创建一个。
假设我们想要创建一个装饰器来将字符串转换成小写。
def lowercase_decorator(function): def wrapper():
func = function()
make_lowercase = func.lower()
return make_lowercase return wrapper
我们定义了一个函数,它将另一个函数作为参数,并对传递的函数执行小写操作。
def say_hello():
return ‘HELLO WORLD’decorate = lowercase_decorator(say_hello)
decorate()
输出将是“hello world”。
然而,在实践中,我们使用’ @ '符号作为我们上面所做的语法糖,以减少改变函数行为所需的代码。
在定义了我们的装饰器之后,我们可以得到如下结果:
@lowercase_decorator
def say_hello():
return ‘HELLO WORLD’say_hello()
我们希望输出是相同的,即,“你好世界”。
用这三个数据科学项目打动你的招聘经理
用有影响力的项目打动你的招聘经理
向您展示各种不同的现实世界问题以及如何解决它们。
蒂姆·范德奎普在 Unsplash 上拍摄的照片
2020 年,如果你想进入数据科学和机器学习行业,教育背景是不够的。招聘人员和招聘经理希望看到真正的时间被投入到解决可能对企业和世界产生影响的现实问题中。如今,商业世界将数据科学用于各种目的,包括金融、零售、制造、运输等。拥有技术和实际的实践技能是将你与其他数据科学家区分开来的最重要的标准之一。您必须能够理解如何识别哪些业务相关的问题可以通过使用您所拥有的特定技能得到最好的解决。这就是为什么做那些接近真实世界的项目是重要的。我列出了 3 个与现实环境密切相关的项目,以及如何利用这些项目建立一个坚实有效的个人技能组合。
以下 3 个项目旨在解决成为数据科学家的一些核心基础问题:
统计和概率、数学、预测和逻辑建模、数据争论和预处理技能、数据可视化、机器学习、神经网络、CNN 等等。
新冠肺炎全球研究项目(CORD-19)
新冠肺炎全球疫情为数据科学家同事提供了一个绝佳的机会,让他们可以将自己的一些崇高工作投入到当前的形势中。CORD-19 数据集是与白宫和领先的研究小组联盟合作编制的,其中包括超过 140,000 篇学术文章,包括超过 65,000 篇全文,涉及新冠肺炎,新型冠状病毒和相关的冠状病毒病例。
你的目标?—开发强大的数据和文本挖掘工具,帮助医疗机构回答高优先级的科学问题
目前有 18 项任务需要一个全面的解决方案来准确回答美国国家科学院、工程和医学委员会新兴传染病和 21 世纪健康威胁常设委员会(NASEM 的 SCIED)和世界卫生组织(世卫组织)在疫情援助中提出的一些紧迫的科学问题。
这个库是一个案例研究,分析和新冠肺炎疫情传播的可视化,以及预测模型…
github.com](https://github.com/tarunk04/COVID-19-CaseStudy-and-Predictions) [## 新型冠状病毒 2019 数据集
新冠肺炎受影响病例的日水平信息
www.kaggle.com](https://www.kaggle.com/sudalairajkumar/novel-corona-virus-2019-dataset)
CORD-19 是一个巨大的 13.3Gb 数据集,包括超过 114k 个文件和 3000+列,具有 8 个不同的目标表— 人口、患者描述、材料、诊断、治疗干预、风险因素和模型,以准确提供关于该疫情的一些关键科学问题的相关答案。迄今为止,CORD-19 数据集已有超过 178 万次浏览和 73,000 次下载。许多重要的基础知识,如时序分析 和 可视化 都经过测试,以开发出最终的工具。这个项目确实值得一试。
信用卡欺诈交易检测
想象一下。你正在研究你的每月信用卡账单,你注意到附近的一家杂货店收取了 150 美元。问题是,你已经几个月没去商店买东西了。那笔可疑的费用可能是一个信号——你是信用卡诈骗的受害者。检测信用卡交易中的欺诈是金融研究中的一个巨大课题,具有深远的经济意义。此外,检测未经授权的信用卡交易是一个极其复杂的问题,因为如果单独使用,这些特征很少有用。
你的目标?— 预测和分析任何特定的信用卡交易是否是欺诈交易
被标记为欺诈或真实的匿名信用卡交易
www.kaggle.com](https://www.kaggle.com/mlg-ulb/creditcardfraud)
布鲁塞尔自由大学(ULB)提供了 143Mb 的数据集,这是欧洲持卡人在 2013 年进行的交易。它包含 284,807 笔交易中的 492 个欺诈和 28 个匿名特征,这些特征经过了主成分分析(PCA)以保护用户身份和敏感特征。处理不平衡/偏斜数据、异常检测、逻辑回归等。是你在这个项目中会面临的一些问题,如果彻底分析,这些问题是真正有益的。*
项目推荐模型
随着 Youtube、亚马逊、网飞等在线公司和许多其他类似网络服务的兴起,推荐系统在我们的生活中占据了越来越多的位置,而我们却没有意识到这一点。最近的一项研究表明,网飞有超过 1300 个关于其所有用户的推荐集群,可以根据他们的观看行为(类型、观看时间、兴趣等)将正确的电影准确地部署在正确的用户面前。推荐系统目前被部署用于大型互联网公司和企业的各种任务,包括广告点击率(CTR)预测和排名。这些系统有时在一些行业中至关重要,因为当它们有效时可以产生大量的收入,或者是在市场中脱颖而出的一种方式。
你的目标?—使用 TensorFlow 开发基于客户项目的推荐模型
* [## 在 TensorFlow 中构建推荐系统:概述|解决方案
本文是一个多部分教程系列的概述,向您展示如何实现一个推荐系统…
cloud.google.com](https://cloud.google.com/solutions/machine-learning/recommendation-system-tensorflow-overview)
推荐模型是一种简单的算法,用于将正确的内容呈现在正确的用户面前。有相当多的方法被用来建立模型,如协同过滤、内容过滤、神经网络等。协同过滤是最广泛使用的系统,因为它们不同于基于内容的方法,因为它们不需要关于用户或项目的大量信息,并且它们仅基于用户和项目之间的交互信息(例如点击、浏览和评级)来做出准确的推荐。随着用户信息变得越来越丰富,这些算法中的每一个算法的复杂度都在增加。除了可视化、统计分析、数据处理等,该项目主要关注当前算法的实现,以构建一个健壮的推荐模型。
此外,推荐模型目前也在研究使用深度神经网络。在中国科学院大学 2017 年提出的一篇论文中,作者演示了基于深度神经网络的推荐模型的实现
来源:https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8247172
DNN 的方法正在获得巨大的吸引力,甚至谷歌也有一个关于如何构建、测试和部署系统的使用 TensorFlow 的迷你课程。
上一节向您展示了如何使用矩阵分解来学习嵌入。矩阵的一些限制…
developers.google.com](https://developers.google.com/machine-learning/recommendation/dnn/softmax)
从整体上看,推荐模型仍然是数据科学中最重要的支柱之一,它为企业和经济带来了积极的好处。如上所述,将 DNN 模型应用于基于内容的推荐系统的有效性和实现细节也与机器学习领域中的原始算法一起被积极地研究。
最后
上述项目对我们当前的经济产生了切实的影响。从在疫情中提供真正的价值到识别无现金欺诈,我相信不仅学到了新的技能,而且最终推动了使用数据科学和机器学习可以解决什么问题的界限。
如果我成功地让你注意到了这一点,请留下你的评论,如果你对这个系列有任何建议,因为这将大大增加我的知识,改善我的写作方式。 普雷姆·库马尔 是一个无私的学习者,对我们身边的日常数据充满热情。如果你想谈论这个故事和等待的未来发展,请在LinkedIn上与我联系。*
3 个必备的 JupyterLab 2.0 扩展
JupyterLab 刚刚成为一个成熟的 IDE,具有代码辅助、调试和 Git 等功能——欢迎来到笔记本编辑的未来。
维克多·加西亚在 Unsplash 上拍摄的照片
我很高兴地确认,在最新扩展的帮助下,JupyterLab 刚刚成为一个成熟的 IDE。一周前,我提到了我在用 JupyterLab 编辑笔记本时注意到的几个缺陷——不存在的代码帮助就是其中之一。
不久之后,JupyterLab-LSP 的一位主要开发人员联系了我,并向我展示了他们的扩展。我尝试了一下——这是 Jupyter 生态系统的一大进步。
在 JupyterLab 生态系统中仍然有一些缺失的部分,使它至少在功能上等同于 PyCharm。但现在不是了。
这里有几个你可能会感兴趣的链接:
- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)
上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
如果你错过了我之前关于这个话题的文章:
数据科学城推出了一款新的高端产品。它有优越的编码辅助,调试和更多…是吗…
towardsdatascience.com](/are-you-still-using-jupyterlab-ce1a4339c0a9) [## JupyterLab 2.0
让我们来一窥 Jupyter 笔记本编辑的未来。有了编码等特性,未来看起来一片光明…
towardsdatascience.com](/jupyterlab-2-0-edd4155ab897)
JupyterLab-LSP
LSP 为 JupyterLab 增加了代码辅助功能。阅读 JupyterLab 2.0 。要了解更多信息:
让我们来一窥 Jupyter 笔记本编辑的未来。有了编码等特性,未来看起来一片光明…
towardsdatascience.com](/jupyterlab-2-0-edd4155ab897)
使用 JupyterLab-LSP 在 JupyterLab 中完成代码
调试器
我曾经用 pdb 包在 JupyterLab 做调试——那是一个痛苦的过程。几天前,我听说了一个新的调试扩展,我很想尝试一下:
JupyterLab 调试器 UI 扩展。这个扩展正在积极开发中。JupyterLab 2.0+xeus-python 0 . 7 . 1+…
github.com](https://github.com/jupyterlab/debugger)
合适的调试器是 JupyterLab 生态系统中最后缺失的部分之一。所有对最新的 JupyterLab 扩展的开发者的赞美——第一次安装就能工作,写得很好的文档等等。调试器扩展也是如此。注意,调试器仅支持 JupyterLab ≥ 2.0,它仍在积极开发中。
如何启用调试器?
创建一个新的 xpython 笔记本,启用调试并打开调试窗格。
调试器在 xpython Notebook 中工作——x 是 xeus 的缩写,xeus 是一个旨在帮助 Jupyter 实现内核的库。它承担了实现 Jupyter 内核协议的负担,因此开发人员可以专注于实现内核的解释器部分。
如何使用调试器?
要使用调试器,请启用右上角的橙色开关,设置一个断点并执行代码。使用右边的调试面板调查变量。
我通过调查函数中变量的值来尝试调试器——这是使用 pdb 包时最大的痛点——它工作得很好。我还试图研究一个类和一个数据帧的值。这一切都完美无缺。
怎么安装?
请确保您安装了 JupyterLab 2.0 或更高版本,并且启用了扩展管理器。然后安装要求:
pip install xeus-python==0.7.1
pip install ptvsd
要安装扩展,请运行:
jupyter labextension install [@jupyterlab/debugger](http://twitter.com/jupyterlab/debugger)
JupyterLab-Git
如果你曾经将一个 Jupyter 笔记本推送到 Git,然后对它做了一些修改,再推一次,你就知道 Git 的 diff 功能是没用的——它标记了一切。我使用了一个在推之前重置所有输出的变通方法,但有时我会忘记(或者 JupyterLab 没有保存最新的状态),最后出现了一个大混乱。我真的对这一个感到兴奋。它会符合我的期望吗?
让我们试试吧
我打开右边的 git 面板。然后我去掉 3 个细胞,再加上 3 个细胞。diff 功能运行良好。
哇,我真的被这一个惊呆了。我在笔记本上做了一些改动,diff 功能运行得很好。向 jupyterlab-git 团队致敬。
提示:还原笔记本中的更改时,首先关闭笔记本,然后使用“还原”。效果更好
提交历史记录
探索带有 jupyter-git 责任的提交历史
您可以观察提交历史—这是一个致命的特性。它甚至显示图像。你终于可以观察到同事做了什么改变,而不用翻阅整个笔记本。
怎么安装?
请确保您安装了 JupyterLab 2.0 或更高版本,并且启用了扩展管理器。然后运行:
pip install --upgrade jupyterlab-git
jupyter lab build
安装完成后,Extension Manager 显示软件包已经过时,所以我点击了 update,等待了一段时间,确认了重建并重启 jupyter-lab。然后成功了!
结论
就像我在以前关于 JupyterLab 的文章中提到的——笔记本编辑的未来是光明的,☀️。当 vim 扩展和代码格式化程序扩展可用时,我将切换到 JupyterLab 2.x。在那之前,我将坚持 will JupyterLab 1.2。
在你走之前
在 Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的。
给初学者的 3 个 MySQL 头脑风暴问题
SQL 问题,以评估和提高初学者的技能
内特·格兰特在 Unsplash 上的照片
T 他的文章总结了我在解决各种 MySQL 难题时发现的有趣且具有挑战性的问题。这些将向您介绍 MySQL 世界的 3 个领域,即:
- CASE WHEN 语句。
- 比较运算符。
- 正则表达式。
我相信尝试解决这些问题是 MySQL 初学者评估他们目前所学技能的一个更好的方法。让我们来看看这些问题。
1.标记二叉树节点
这个挑战是标记二叉树的节点。
查询:将二叉树节点标记为根节点、内部节点和叶节点。
对于那些不熟悉二叉树的人来说,它看起来会像下面这样:
二叉树
节点 1:根节点(没有父节点,有 0 个或更多子节点)
节点 4、5:内部节点(具有父节点和一个或多个子节点)
节点 9、8、2、3:叶节点(有父节点,没有子节点)
设 N 为节点,P 为 N 的父节点,则上述二叉树的数据表如下:
双星树
为了解决上述问题,可以使用 MySQL CASE,其语法如下。
基本 SQL CASE 语句语法:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
.
.
.
WHEN conditionN THEN resultN
ELSE result
END;
SQL 将二叉树节点标注为根节点、内节点和叶节点:
SELECT N,
CASE
WHEN P IS NULL THEN 'Root'
WHEN N IN (SELECT P FROM BinaryTree) THEN 'Inner'
ELSE 'Leaf'
END
from BinaryTree;
输出:
解释:
- 节点 1:P 的值为空,因此节点 1 是根节点。
- 节点 4、5:满足这个条件“当 N 在(从 BinaryTree 中选择 P)”因此它们是内部节点。
- 节点 9、8、2、3:无法满足上述两种情况中的任何一种,因此它们是叶节点。
2.查找中间值
不幸的是,MySQL 没有计算列的中值的默认函数。有多种方法可以实现这一点,但是,我想分享实现这一点的详细解决方案。
**中位数:**中位数是奇数排序列表中的中间数,也是偶数排序列表中中间数的平均值。
考虑以下数据:
标记数据集—奇数
上述案例中的中位数是 30
标记数据集—偶数
上述案例中的中位数是 35 岁
奇数值集的 MySQL 解决方案:
当参考标记数据集-奇数时,很明显,值 30 在其之前具有相同数量的元素(aka。2 个值)和它下面的元素的相同元素(也称为。2 值)。可以按照下面的步骤找到中间值。
- 对于每个值,计算比它小的值的个数。
- 对于每个值,计算大于它的值的个数。
- 找出上面和下面有相同数量的值的值。这将是中间值。
伯爵
在上表中,值 30 有相等数量的大于它的值和相等数量的小于它的值。因此,中值为 30。
SQL 查找奇数个数据值的中值:
SELECT marks as Median FROM MarksTable m
WHERE (SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks);
偶数集的 MySQL 解决方案:
可以按照下面的步骤找到偶数组值的中值。
- 对于每个值,找出值的个数加上大于它的个数的 1,并在该计数上加 1。就当是 x 吧。
- 对于每个值,找出小于它的值的个数。顺其自然吧。
- 找出数据集中 X = Y 的值,设它为 z。
- 对于每个值,找出值的个数加一,小于它的个数加一。假设它是 X1。
- 对于每个值,找出大于它的值的个数。就当是 Y1 吧。
- 找出数据集中 X1 = Y1 的值。假设是 Z1。
- 中位数是 Z 和 Z1 的平均值。
计数
根据上表,Z 值为 40,Z1 值为 30。因此,中位数是这两个值的平均值,即 35。
SQL 查找偶数个数据值的中位数:
SELECT avg(marks)as Median FROM MarksTable m
WHERE (SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) + 1 =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks)
OR
(SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks) + 1)
因此整个查询找出的中位数会如下:
如果数据值的数目可被 2 整除,则该列中的值为偶数,否则为奇数。
SELECT IF (SELECT COUNT(marks, 2) FROM MarksTable) = 0,
(SELECT avg(marks)as Median FROM MarksTable m
WHERE (SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) + 1 =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks)
OR
(SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks) + 1)
),
SELECT marks as Median FROM MarksTable m
WHERE (SELECT COUNT(marks) from MarksTable
WHERE m.marks > marks) =
SELECT COUNT(marks) from MarksTable
WHERE m.marks < marks)
));
3。查找不以元音字母开头和结尾的名字:
考虑下面的学生姓名数据表:
学生表
查询:查找不以元音字母 开头和结尾的学生姓名
MySQL 支持 REGEXP 操作符进行基于正则表达式的模式匹配操作。
解决上述查询所需的模式是:
- ^:检查字符串的开头。
- $:检查字符串的结尾
查询:
SELECT name FROM studentTable WHERE name NOT IN
(SELECT name FROM studentTable WHERE name
REGEXP '^[aeiou]' or name REGEXP '[aeiou]$';
输出:
感谢阅读!
用于地理空间分析数据科学项目的 3 个新数据集
新数据科学项目的新数据集
格雷格·罗森克在 Unsplash 上的照片
早在三月份,我写了一篇关于“冠状病毒数据可视化使用 Plotly ”的文章,这篇文章引起了很多关注。由于受欢迎程度,我带着更多专注于地理空间分析的数据科学项目回来了。
如果你想学习如何使用 Plotly 创建可视化效果(如下图所示),点击这里 查看我的教程 。
这一次,我带来了三个新的数据集,您可以使用它们来构建新的、令人兴奋的可视化效果!
说到这里,我们开始吧…
北美停车统计
在北美搜索停车位所需时间的数据
www.kaggle.com](https://www.kaggle.com/terenceshin/searching-for-parking-statistics-in-north-america)
该数据集可识别城市中驾驶员在寻找停车位时遇到困难的区域。城市可以利用这些数据来识别问题区域、调整标识等。仅包括人口超过 10 万的城市。
下面列出了一些有趣的统计数据:
- AvgTimeToPark:搜索停车场所用的平均时间(分钟)
- AvgTimeToParkRatio:在当前 geohash 中搜索停车场所花费的平均时间与未搜索停车场所花费的平均时间之比
- TotalSearching:寻找停车位的司机数量
- 搜索百分比:搜索停车位的司机的百分比
世界各地的危险驾驶点
事故发生率最高、刹车最猛的地方
www.kaggle.com](https://www.kaggle.com/terenceshin/hazardous-driving-spots-around-the-world)
该数据集根据特定区域内的紧急制动和事故级别事件来识别驾驶的危险区域。每个月都会生成一组新的危险驾驶区域,并封装一年的滚动数据(即从前一个月到前一年)。与每个区域相关联的是基于该区域中的发生频率和所述发生的严重性的严重性分数。数据是过去 12 个月的汇总数据。
下面列出了一些有趣的统计数据:
- SeverityScore:每个区域的严重性分数,即每 100 个交通流量单位的紧急制动事件和事故级别事件的数量。交通流量定义为 geohash 中每小时的车辆总量
- 事件总数:geohash 中发生的紧急制动事件和事故级事件的总数
新冠肺炎对机场交通的影响
COVID 后交通量分析
www.kaggle.com](https://www.kaggle.com/terenceshin/covid19s-impact-on-airport-traffic)
该数据集显示了进出机场的交通量占基线期交通量的百分比。用于计算此指标的基线期是从 2020 年 2 月 1 日到 3 月 15 日。数据集每月更新一次。
下面列出了一些有趣的统计数据:
- PercentofBaseline:该日期的旅行与基线期内一周同一天的平均旅行次数相比所占的比例
感谢阅读!
我希望你觉得这些数据集有趣/有用。欢迎在评论中分享你的可视化链接。一如既往,我祝你在努力中好运!
不确定接下来要读什么?我为你挑选了另一篇文章:
关于 Choropleth 地图的介绍和教程
towardsdatascience.com](/visualizing-the-coronavirus-pandemic-with-choropleth-maps-7f30fccaecf5)
特伦斯·申
- 如果你喜欢这个, 跟我上 Medium 了解更多
- 关注我Kaggle了解更多内容!
- 我们连线上LinkedIn
3 开源安全风险以及如何解决它们
你需要知道的是
迈克尔·盖格在 Unsplash 上的照片
开源软件非常受欢迎,并构成了商业应用程序的重要组成部分。据 Synopsys 报道,99%的商业数据库至少包含一个开源组件,这些代码库中有近 75%包含开源安全漏洞。
公司和开发人员选择使用开源软件的一个主要原因是,它使他们不必自己开发这些基本功能。
哦,开源软件是免费的!
尽管有其优势,开源软件往往有可能影响您的数据和组织的漏洞。为了让您大致了解开源安全风险如何影响您的业务,我们列出了三大开源安全风险以及解决它们的方法。
在深入本文之前,我们先来看看开源漏洞到底是什么。
什么是开源漏洞?
开源漏洞基本上是开源软件中的安全隐患。这些是脆弱或易受攻击的代码,使得攻击者能够进行恶意攻击或执行未经授权的意外操作。
在某些情况下,开源漏洞会导致拒绝服务(DoS)等网络攻击。它还可能导致重大违规,在此期间,攻击者可能会未经授权访问组织的敏感信息。
当谈到开源软件时,有很多安全问题。例如,OpenSSL 是一个加密库,负责管理各种互联网连接软件的高度敏感的数据传输功能,包括运行一些最流行的电子邮件、消息和 web 服务的软件。
你还记得《心脏出血》吗?是的,那引起了不小的轰动!是的,那是 SSH 库中一个严重的开源漏洞。
同样,2014 年在 Bash shell 中发现了另一个流行的开源漏洞,Bash shell 是许多 Linux 发行版上的默认命令处理器。它有一个任意命令执行漏洞,可以通过 web 服务器上的服务器端 CGI 脚本和其他机制进行远程攻击。这种开源漏洞通常被称为“Shellshock”。
3 大开源安全风险是什么?
既然您已经对什么是开源安全风险有了一个合理的想法,那么让我们来探讨一下目前存在的三大开源安全风险,以及如何减轻这些风险。
软件安全风险
开源漏洞一旦被发现,就可能成为攻击者利用它们的诱人目标。
通常情况下,这些开源漏洞以及关于如何利用漏洞的细节都是公开的。这使得黑客能够获得实施攻击所需的所有必要信息。结合开源软件的广泛使用,你可以想象当一个开源漏洞被发现时,它会造成多大的破坏。
组织在解决开源漏洞时面临的主要挑战之一是跟踪漏洞及其修复并不像人们想象的那么容易。
由于这些开源漏洞发布在各种平台上,因此很难跟踪它们。此外,查找更新版本、补丁或修复程序来解决安全风险是一个耗时且昂贵的过程。
一旦开源漏洞及其利用途径被公布,攻击者利用它们并侵入您的组织只是时间问题。企业必须集成必要的工具和流程来快速解决开源漏洞。
功勋的宣传
开源漏洞在国家漏洞数据库(NVD) 等平台上公开,任何人都可以访问。
公开可用的开源漏洞导致的攻击的一个著名例子是 2017 年的重大 Equifax 违规,该信用报告公司泄露了 1.43 亿人的个人信息。这次攻击的发生是因为 Equifax 使用了一个具有高风险漏洞的开源 Apache Struts 框架版本,攻击者利用了这个漏洞。
这种对开源软件的攻击不仅会导致数据泄露或丢失,还会影响公司的市场声誉、估值和客户关系。这反过来会影响您的客户流失率、保留率、销售额和收入。处理由开源漏洞造成的违规影响可能是一个漫长而痛苦的过程。
许可合规风险
开源软件附带一个许可证,允许在定义的准则下使用、修改或共享源代码。然而,这些许可证的问题是,它们中的大多数不符合开源的严格的 OSI 和 SPDX 定义。
除此之外,单个专有应用程序通常包括几个开源组件,这些项目以各种许可类型发布,如 GPL、Apache 许可或 MIT 许可。
组织被要求遵守每一个单独的开源许可,这可能是相当压倒性的。尤其是随着快速开发和发布周期的到来,商业随之而来的事实是,现在存在将近 200 多种开源许可类型。
一项对 1253 个应用程序的研究发现,大约 67%的代码库有许可冲突,33%的代码库有未经许可的软件。不遵守许可证规定会使企业面临法律诉讼的风险,影响您的运营和财务安全。
您如何战胜这些开源安全风险?
接下来,让我们仔细看看这些开源安全风险的解决方案。
建立安全第一的文化
开发人员常常根据他们需要的功能和编程语言选择使用开源组件。虽然功能很重要,但也应该包括其他标准。
例如,项目的每个单独的组件都可以提供功能,而不需要集成整个项目代码库。这有助于限制开源软件的数量,并有助于简化集成,消除安全风险,以及降低非必需组件中的源代码复杂性。
开源软件和其他软件一样可能存在安全风险,所以你选择使用的每个组件都必须提供功能并且安全。
除此之外,开源项目通常专注于为最终用户提供具有新特性的新更新。由于时间和预算的限制,企业不太重视安全性,更倾向于尽快发布更新。
然而,公司应该在新版本之间保持平衡,同时确保设计、实现和代码是安全的。
你可以做的最重要的事情之一是清点你使用的开源软件,并跟踪与这些库相关的漏洞。
拥抱自动化和扫描开源软件中的漏洞
发现并修复开源软件中的漏洞本身就是一个巨大的挑战。公司需要找到一种方法来检测其环境中开放源代码中的所有安全漏洞,定期更新列表,促使开发人员远离旧的、不安全的软件组件,并最终在发现安全漏洞时部署补丁。
解决这个问题的一个方法是引入自动化工具,帮助您持续跟踪您的开源使用情况,并识别安全弱点、漏洞、修复和更新。
开源软件的自动化工具有助于识别哪些项目中使用了哪些包,它们包含哪些安全漏洞,以及如何修复它们。这些工具通常还带有警报功能。如果发现了漏洞,就会向相关的开发和安全团队发送通知,提醒他们新发现的安全风险。
集成自动化来扫描开源软件中的安全漏洞对于大型组织来说尤其重要,因为很难跟踪和识别所有正在使用的源代码中的漏洞。
大多数企业甚至不知道他们拥有的应用程序的完整清单,这使得他们更容易受到网络攻击,因为源代码中存在未知的漏洞。一份报告称,近 88%的代码库在过去两年中没有任何开发活动。
交叉培训你的员工
雇佣既精通开发又精通安全的专业人士并不总是容易,甚至是不可能的。然而,培训你的团队是可能的,这样他们可以从两端着手解决问题。虽然为不同的团队定期举行网络安全意识培训并不容易,但这对项目的整体安全性至关重要。
企业应确保其开发人员对网络安全有一个大致的了解,以及最新的趋势和更新。您的开发人员应该能够识别开源代码中出现的常见安全问题,如果没有修复它们的话。
同样,安全团队应该从早期阶段就参与开发过程。与其让安全性成为事后的想法,不如从项目一开始就把它放在优先位置。
正如您分析和跟踪您的开发过程一样,您也应该主动监控您的安全工作。采取积极主动的方法对准备处理开源安全风险大有帮助。
最后的想法
开源是一个优秀的模型,在当今的许多项目中都可以找到。然而,为了确保安全的开源代码,您需要认识到开源软件带来的安全风险。您必须确保您的每个开源组件都为项目提供了价值,并且是安全的。
Cypress Data Defense 通过推荐最佳安全实践,帮助公司进行安全审计并加强其项目的整体安全性。
我们帮助企业创建发布安全更新的路线图,提供开源支持、扫描、监控,并提供安全有效利用开源软件的解决方案。借助 Cypress Data Defense,组织可以获得对其开源组件的必要控制,以降低开源安全风险,同时增加成本节约。
关于作者:
Steve Kosten 是 Cypress Data Defense 的首席安全顾问,也是“Java/JEE 中的 SANS DEV541 安全编码:开发可防御应用程序”课程的讲师。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
3 Pandas 函数控制数据帧
Pandas 是一个广泛的 Python 库,数据科学家在许多领域使用它。如果你使用过微软的 Excel 或者 MySQL,你应该已经熟悉了关系数据结构。您必须熟悉按行和列排列的数据。我是在学习 Python 的机器学习的时候开始了解这个库的。Pandas 不仅为你提供了进行大量数据分析和统计推断的工具,而且因为它是建立在 Numpy(另一个重要的 Python 库)之上,它被证明是一个构建高度复杂的机器学习和人工神经网络算法的平台。Pandas 提供的三种主要数据结构是数据序列(一维)、数据帧(二维)和数据面板(多维)。Pandas 配备了大量的函数和类,给你足够的能力来处理任何数据分析问题。在本文中,我们将讨论数据框的三个主要功能,这些功能不仅在几乎所有问题/项目中都有应用,而且如果理解了这些功能,将会证明是至关重要的。让我们不要进一步延伸,直接跳到函数。
- **布尔屏蔽:**布尔屏蔽是一种数据帧切片技术。在大多数问题中,我们需要满足特定条件的数据框的子集,例如,可能会要求您在学生分数和成绩的数据框中过滤出通过特定测试的学生的数据,或者从人口普查数据框中过滤出识字的男性的数据。熊猫的这类问题可以很容易地通过布尔掩蔽来解决。为了理解这个概念,让我们考虑如下所示的数据帧(df1 ):
上述数据表总结了 4 名学生(A、B、C、D)在 4 门学科(数学、物理)中取得的分数百分比。,化学。,和 Prog。).为了便于理解,只显示了 10 个数据条目。在 pandas 中,每个数据帧都有一个与之相关的索引。它是标识数据条目或数据行的东西。在当前数据框中,Student 列被视为索引(还要注意,Pandas 中的索引与 MySQL 中的主键不同,因为索引条目可以重复)。在布尔屏蔽中,我们将一个布尔序列(一系列真、假值)传递给数据帧,然后根据数据帧索引进行匹配。返回索引与真值匹配的所有数据条目,不返回索引与假值匹配的那些条目(行)。通过回答与上述数据框相关的几个问题,我们将更清楚地理解布尔掩蔽。如果我们被要求从上面的数据框中只取出学生 A 的数据,我们将不得不首先创建条件语句,这将创建一个我们想要的布尔序列。如果我们写 df1[‘学生’]= ’ A ',它会将值’ A '与学生列匹配,如果满足条件则返回 True,否则返回 False】。上述条件语句将返回如下所示的序列:
真
错误的
错误的
错误的
错误的
错误的
真
错误的
错误的
错误的
仔细观察以上系列。该系列仅在满足给定条件df1[’ Student ']= = ’ A '【T11]的地方包含真值。上面创建的布尔序列可以作为索引参数传递给数据框,以过滤掉数据。该语句可以写成:
*df1[ df1[‘Student’] == ‘A’ ]*
上述语句将只返回学生姓名为 A 的那些数据条目,而忽略所有其他条目:
到目前为止,布尔屏蔽背后的思想应该是清楚的。这是一个强大的工具,也可以解决更复杂的问题,例如:提取那些数学成绩超过 50%的学生的数据
*df1[ (df1[‘Subject’] == ‘Maths’) & (df1[‘%age Marks’] > 50) ]*
布尔掩码适用于所有类型数据框架,且在几乎所有类型的问题/项目中被证明是一个方便的工具
2.**分组数据:**分组数据是数据科学家面临的另一个要求,例如,在当前数据框架的上下文中,我们可能会被要求找出每个学生获得的总分或平均分,或者学生获得的学科总分或平均分等。熊猫通过群和函数解决这类问题。我们就直接用这个函数来理解吧。让我们试着解决第一个问题。“每个学生获得的总分数”。这些问题要求我们首先将每个学生的数据分组,然后找出总分或平均分。编程方式如下所示:
*df1.groupby(‘Student’)*
它会将相同的学生及其相关数据分组在一起。通过下图可以理解:
当运行*df1 . group by(‘Student’)*时,可以认为原始数据帧根据学生的名字分成了 4 个不同的数据帧。现在我们有了不同学生的不同数据框架,通过熊猫提供的聚合函数,我们可以很容易地找出每个学生获得的总和或平均分数。
*df1.groupby(‘Student’).sum()*
会给我们每个学生的总分表
*df1.groupby(‘Student’).mean()*
会得出平均值。通常,我们可以通过下面提到的命令创建基于列的组:
df1.groupby('col_name')
或者,我们可以将列名列表传递给 groupby 命令,根据多个列进行分组:
df1.groupby([‘col_1’, ‘col_2’, ‘col_3’])
3.**合并:**到目前为止,我们只讨论了适用于单个数据帧的操作,但这并不是数据分析受限的地方。很多时候,我们被要求对多个数据框架进行分析。为了了解合并的概念,让我们介绍另一个学生数据框( df2 ):
上述数据框显示了学生参加体育活动的信息。与前一个数据框架一起,体育数据框架可以与它合并,以提取许多有意义的信息。在开始编程之前,让我们先了解一下合并过程。两个数据帧主要可以通过如下所示的 4 种不同方式进行合并:
两个圆圈表示任意两个数据帧,而 a、b、c 表示三个可能的区域。区域 b 被称为两个数据帧的交集。类似地,区域 a 是数据帧 1 ( df1 )减去交集部分,类似的解释也适用于区域 c 。
四种可能的合并过程是:
- **左合并:**区域 a +区域 b 。在当前数据框的上下文中,它将是 marks 数据框中提到的所有学生的运动详细信息。在 Pandas 中,它是通过运行以下命令来实现的:
*df1.merge(df2, on = ‘Student’, how = ‘left’)*
on = 'Student '属性表示合并必须在 Student 列上完成,how = 'left '表示合并过程必须是左侧的。上述命令将生成如下所示的表格:
注意,在左侧合并中,左侧数据帧占优势,并且从右侧数据帧中提取附加信息。此外,请注意 Nan 值,这些值会在缺少信息的地方插入。
2 **。右合并:**右合并与左合并含义相同,只是数据帧被翻转,即代表区域 b + c 。在 Pandas 中,它是通过运行以下命令来实现的:
*df1.merge(df2, on = ‘Student’, how = ‘right’)*
这些属性具有通常的含义,并将生成如下所示的数据框:
上表包含右表中的所有条目,以及从左表中提取的附加信息。此外,请注意,所有在右表中而不在左表中的条目在左数据框的列上都有 Nan 值
3.内部合并:这代表两个数据帧的交集,即区域 b 。熊猫同样的命令如下:
*df1.merge(df2, on = ‘Student’, how = ‘inner’)*
结果数据帧将是:
请注意,只包括了出现在两个数据帧中的那些条目的信息
**4。外部合并:**外部合并是指两个数据帧的合并。在上述图表的上下文中,它表示区域 a +区域 b +区域 c 。在熊猫中,这种现象表现为:
*df1.merge(df2, on = ‘Student’, how = ‘outer’)*
并将产生如下所示的数据帧:
在外部合并中,包含两个数据帧中存在的所有条目,并且所呈现的数据点由 Nan 表示
虽然 Pandas 是一个由许多强大的类和函数组成的包,但上面包含的三个是经常使用的,很少有其他函数足以执行非常复杂的数据分析任务。要进一步了解这个话题,你可以参加密歇根大学 Coursera 上的数据分析课程,或者阅读 Matt Harrison 的书《学习熊猫》
希望你喜欢这篇文章,你可以在下面提出你的疑问,或者通过 LinkedIn 联系我,了解关于这个话题的更多问题。
谢谢,
祝你玩得愉快😊
原载于 2020 年 5 月 14 日 https://www.wildregressor.com。
3 只熊猫让你的数据生活变得轻松
你可以在日常工作中运用的一些熊猫技巧
作为一名数据科学家,我们的日常工作包括提取数据、理解数据、清理数据、转换数据和创建新功能。注意我没有包括创建一个机器学习模型?因为创建一个模型将是我们做的最后一件事,它不一定是我们的日常工作。然而,清理数据是日常工作。
基于以上原因,我想向你展示三个漂亮的熊猫技巧,让你的数据工作变得更简单。
1.使用查询进行数据选择
作为数据科学家,数据选择是最基本的活动,但也是最麻烦的事情之一,尤其是在重复进行的时候。让我给你看一个例子。
#Let's use a dataset example
import pandas as pd
import seaborn as snsmpg = sns.load_dataset('mpg')
mpg.head()
上面是我们的数据集示例,假设我想选择 mpg 小于 11 或马力小于 50 且 model_year 等于 73 的行。这意味着我需要像下面这样写代码。
mpg[(mpg['mpg'] < 11) | (mpg['horsepower'] <50) & (mpg['model_year'] ==73)]
典型数据选择方法结果
这是选择数据的通常方式,但有时因为条件太多而很麻烦。在这种情况下,我们可以使用来自 Pandas 数据框对象的查询方法。
那么,这个查询方法是什么呢?这是一种从熊猫数据框中选择的更人性化的方法。下面让我给你看一个例子。
mpg.query('mpg < 11 or horsepower < 50 and model_year == 73')
查询方法的结果
结果和平时的选拔方式一模一样吧?唯一的区别是,对于查询,我们有一个不太冗长的条件,我们将它写在字符串中,其中查询方法接受字符串英语单词,如示例中所示。
通常的选择方法和查询方法的另一个简单区别是执行时间。让我们看看下面的例子。
通常的选择方法需要 18ms,查询方法执行代码需要 13ms。在这种情况下,查询方法是一种更快的选择方法。
2.用替换、掩码和 where 替换值
当我们处理数据时,我确信有时需要用其他特定值替换列中的一些值。如果我们手动操作,可能会很麻烦。让我们说,在我的 mpg 数据集之前,我想取代所有的气缸整数值到一个字符串值。我举个例子,说明如何手动替换。
def change_value(x):
if x == 3:
return 'Three'
elif x == 4:
return 'Four'
elif x == 5:
return 'Five'
elif x == 6:
return 'Six'
else:
return 'Eight'mpg['cylinders'] = mpg['cylinders'].apply(change_value)
mpg.head()
用函数替换值的结果表
在最简单的情况下,我们需要使用 Pandas 数据框对象中的 apply 方法,或者您可以使用 for 循环方法手动完成。无论哪种方式,每次需要替换一个值时都要这么做,这很麻烦。
在这种情况下,我们可以使用 Pandas 数据框对象中的替换方法。这是一种专门用来帮助我们替换数据框中特定值的方法。下面让我给你看一个例子。
mpg.replace({'cylinders' : {3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six', 8 : 'Eight'}}, inplace = True)mpg.head()
用 replace 方法替换值的结果表
结果是一样的,唯一的区别是我们用来替换值的行有多短。在我上面的例子中,我使用 dictionary 对象来指定我想要替换哪些列的值,并使用字典中的另一个字典来选择我想要替换哪些值和替换值。换句话说,它可以概括为{列名:{列中的值:替换值}}。
如果你想用一个特定的条件替换这些值呢?在这种情况下,我们可以尝试使用蒙版法。此方法是一种 if-then 方法,最适用于系列对象,而不是数据框对象。让我给你演示一下蒙版法是如何工作的。
mpg['mpg'].mask(mpg['mpg'] < 20, 'Less than Twenty' )
使用掩码方法时,我们通常会向方法传递两个参数;要替换的条件和值。在这种情况下,我给出了一个 mpg 值小于 20 的条件,然后用“小于 20”替换这些值。
如果您需要不止一个条件,您需要将这些方法链接起来。
mpg['mpg'].mask(mpg['mpg'] < 20, 'Less than Twenty' ).mask(mpg['mpg'] > 40, 'More than Fourty')
还有一个 where 方法,它的工作方式与 mask 方法相反。
mpg['mpg'].where(mpg['mpg'] < 20, 'More than Twenty' )
从结果中,您可以看到不符合条件的值被替换了。
在任何情况下,您都可以用自己喜欢的方法替换这些值。
3.隐藏不需要的索引和/或列
有时,您希望展示您的数据框,但不希望内容分散观众的注意力(我经常遇到这种情况,尤其是索引值)。
例如,我想给你看 mpg 数据集的前五名。
mpg.head()
上面的结果显示了整个表,表中有索引。有一次,我展示了一张和上面一样的桌子,被问及桌子旁边的数字,需要时间向大家解释。这当然是浪费时间。这就是为什么我们可以用下面的代码隐藏索引。
mpg.head().style.hide_index()
我们可以从数据框对象中使用 style.hide_index() 方法。
此外,可能有这样一种情况,您可能希望只保留一列,而呈现数据框的其余部分。要选择你想要的每一列,只留下一个不必要的列,这将是一项很大的工作。
在这种情况下,我们可以使用数据框对象中的 style.hide_columns() 。让我们看看下面的例子。
mpg.head().style.hide_index().hide_columns(['weight'])
在我上面的例子中,我想省去权重列,这就是为什么我只在方法中传递权重。当然,您可以隐藏任意多的列。你只需要把值传入列表。
结论
在这篇文章中,我向您展示了三个技巧来简化您的日常数据工作。这包括:
- 使用查询
- 用 replace、mask 和 where 替换值
- 使用 hide_index 和 hide_columns 隐藏
希望有帮助!
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。
如果您没有订阅为中等会员,请考虑通过我的介绍订阅。
你应该知道的熊猫数据选择的 3 个主要方法
以您需要的方式选择您的数据
罗伯特·卡茨基在 Unsplash 上的照片
熊猫作为一个数据科学家是一个不可分割的库,尤其是对于 Pythonist 来说。这是因为库能够轻松地存储和操作数据。熊猫图书馆力量的一个例子是我们可以多么容易地选择我们想要的数据。下面让我用 seaborn 库中的 mpg 数据集给你举个例子。
#importing the library
import pandas as pd
import seaborn as snsmpg = sns.load_dataset('mpg')
mpg.head()
这是数据框形式的 mpg 数据集。现在,假设我只想要 mpg 列,我们可以用下面的代码得到它。
#Getting the data column with bracket and the column name
mpg['mpg'].head()
我们最终得到了之前选择的列的系列数据。这只是选择数据的例子。在下一节中,我将展示使用 Pandas 选择数据的四种不同的主要方法。
“熊猫是一个不可分割的图书馆作为一个数据科学家,尤其是对 Pythonist 来说.”
1.按标签选择
取自熊猫文献。
“pandas 提供了一套方法来让完全基于标签的索引。这是一个基于严格包含的协议。要求的每个标签都必须在索引中,否则将引发一个
*KeyError*
熊猫让我们根据标签选择数据。如果你意识到,在我们之前的例子中,我们只选择了基于列的数据。对于基于标签的选择,我们需要熊猫.loc
属性。让我们在下面的例子中展示它是如何工作的。
#Selecting data on index 0
mpg.loc[0]
使用.loc
属性,我们选择标签 0 数据,并以标签 0 行的序列结束。现在,如果我们想要在我们的选择中包含更多的标签,我们需要选择一系列带有:
符号的标签,如下所示。
#Selecting data from index 0 to 4
mpg.loc[0:4]
假设我只想从各行中选择某个标签,我需要把它放入列表对象中。
#Selecting data from index 0,4,6
mpg.loc[[0,4,6]]
我们也可以添加我们希望在.loc
属性中选择的列,如下所示。
#Select the column we want with the list of the columns name
mpg.loc[[0,4,6], ['mpg', 'cylinders', 'origin']]
在熊猫对象中,第一个位置是行位置,第二个位置是列位置。这就是为什么当我们选择数据时,我们首先根据行,然后根据列进行选择。
我们的数据框大部分时间都有默认标签,但是我们可以将另一列设置为标签并基于新索引选择数据。我将在下面的例子中展示它。
#Set the 'origin' column as the new index using .set_index then selecting the data using .locmpg.set_index('origin').loc['europe']
在上面的数据框中,现在我只得到带有‘欧洲’标签的数据。
2.按位置选择
如果在前面的部分中我们基于标签选择数据,Pandas 也提供了一个基于整数索引位置的选择方法。我们将使用的熊猫属性是.iloc
属性。
这些是
*0-based*
索引。切片时,起始边界为包含,上限为排除。试图使用一个非整数,甚至一个有效的标签都会引发一个*IndexError*
。
以上是熊猫官方文档说明。从解释中我们可以看到,当我们选择数据时,我们只 使用 整数值作为从 0 开始的位置,而不是标签。让我在下面的例子中展示一下。
#Selecting the data in the index position two
mpg.iloc[2]
我们从位置索引位置 2 的数据帧中获取序列。一目了然,与使用标签方法相比没有什么不同,但如果我们将标签更改为非整数标签,会有什么不同。
mpg.set_index('origin').iloc['europe']
这会引发一个错误,因为使用.iloc
属性是基于位置的,而不是标签本身。现在,如果使用与上面相同的数据,但是我使用一个整数值来选择数据,会发生什么呢?
mpg.set_index('origin').iloc[2]
我们可以看到,如果我们不改变指数,结果是相似的。这是因为我们根据位置而不是标签来选择数据。现在,像上一节那样的序列索引怎么样?它还能用吗?
#Selecting a sequence index based on position
mpg.iloc[0:4]
是的,我们仍然可以基于序列选择,但是我们需要记住的是,在基于位置的选择中,下限不包括在内。我们选择0:4
,但是我们最终只得到从位置 0 到 3 的数据。
就像以前一样,我们也可以通过使用 list 对象来选择一个特定的位置。
mpg.iloc[[0,4,6]]
但是,如果我们想在这里包含列选择。
mpg.iloc[[0,4,6], ['mpg', 'cylinders', 'origin']]
会出现错误,因为.iloc
函数只接受数字索引,不接受其他内容。
3.布尔选择
在我们继续讨论之前,我想解释一下熊猫怎么会有布尔结果。试试下面的代码。
#Comparing the 'mpg' data with integer 17
mpg['mpg'] > 17
结果将是一系列布尔值,这些值指示结果状态。True 表示大于 17 的数据,False 表示小于 17 的数据。现在,我们可以把布尔值作为选择标准。让我们试试下面的代码。
#Inputing the criteria within the square bracket
mpg[mpg['mpg'] > 17]
结果将是“mpg”数据大于 17 的所有数据或每个单个真布尔结果。如果我们想要两个或更多的标准呢?我们也可以像下面的代码那样做。
mpg[(mpg['mpg'] > 17) & (mpg['origin'] == 'japan')|~(mpg['horsepower'] <120)]
在上面的代码中,我指定了三个标准;“mpg”数据高于 17,“原产地”数据等于日本,“马力”数据不低于 120。当我们提出一个以上的标准时,我们需要把它放在括号中。而且,我们用&
符号作为与,|
符号作为或,~
符号作为非。
结论
在这里,我向您展示了如何根据标签、位置和布尔值选择数据。虽然有许多选择数据的方法,但请使用您更熟悉的方法。
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
你应该知道的 3 个概率框架|贝叶斯工具包
用概率编程语言构建更好的数据科学工作流程,克服经典 ML 的缺点。
构建、训练和调整概率模型的工具。帕特里克·grądys 在 Unsplash 上拍摄的照片。
我们应该始终致力于创建更好的数据科学工作流。
但是为了实现这个目标,我们应该找出我们还缺少什么。
传统的 ML 工作流程缺少一些东西
经典的机器学习是流水线作业。通常的工作流程如下所示:
- 有一个带有潜在假设的用例或研究问题,
- 构建和管理与用例或研究问题相关的数据集,
- 建立一个模型,
- 训练和验证模型,
- 甚至可能交叉验证,同时网格搜索超参数,
- 测试拟合的模型,
- 为用例部署模型,
- 回答你提出的研究问题或假设。
您可能已经注意到,一个严重的缺点是要考虑模型的确定性和对输出的信心。
确定不确定
在经历了这个工作流程之后,假设模型结果看起来是合理的,我们认为输出是理所当然的。那么缺少什么呢?
首先是,我们有没有考虑我们工作流程中出现的丢失或移位的数据。
你们中的一些人可能会插话说,他们对自己的数据有一些增强程序(例如图像预处理)。那很好——但是你把它正式化了吗?
其次是,在看到数据之前构建一个原型怎么样——类似于建模健全性检查?模拟一些数据并在投入资源收集数据并拟合不充分的模型之前建立一个原型**。
Andrew gel man 在 2017 纽约 PyData 主题演讲中已经指出了这一点。
最后,获得更好的直觉和参数洞察!对于深度学习模型,你需要依靠像 SHAP 和绘图库这样的老生常谈的工具来解释你的模型学到了什么。
对于概率方法,您可以快速了解参数。那么,我们希望在生产环境中使用什么工具呢?**
一.斯坦——统计学家的选择
STAN 是研究的一个完善的框架和工具。严格地说,这个框架有自己的概率语言,Stan-code 看起来更像是你正在拟合的模型的统计公式。
一旦你用你的模型建立并完成了推理,你就可以把所有的东西保存到文件中,这带来了一个很大的好处,那就是所有的东西都是可复制的。
STAN 在 R 中通过 RStan ,Python 带 PyStan ,以及其他接口得到很好的支持。
在后台,框架将模型编译成高效的 C++代码。
最后,通过 MCMC 推理(例如 NUTS sampler)来完成计算,该推理易于访问,甚至支持变分推理。
如果你想开始使用贝叶斯方法,我们推荐案例研究。
二。pyro——编程方法
我个人最喜欢的深度概率模型工具是 Pyro 。这种语言由优步工程部门开发和维护。该框架由 PyTorch 提供支持。这意味着您正在进行的建模与您可能已经完成的 PyTorch 工作无缝集成。
构建你的模型和训练例程,编写和感觉像任何其他 Python 代码一样,带有一些概率方法带来的特殊规则和公式。
作为概述,我们已经在以前的帖子中比较了 STAN 和 Pyro 建模的一个小问题集:
用两种贝叶斯方法模拟美国癌症死亡率:STAN 的 MCMC 和 Pyro 的 SVI。
towardsdatascience.com](/single-parameter-models-pyro-vs-stan-e7e69b45d95c)
当你想找到随机分布的参数,采样数据和执行有效的推断时,Pyro 表现出色。由于这种语言在不断发展,并不是你所做的每件事都会被记录下来。有很多用例以及已经存在的模型实现和例子。此外,文档一天比一天好。
示例和教程是一个很好的起点,尤其是当你是概率编程和统计建模领域的新手时。
三。张量流概率——谷歌的最爱
说起机器学习,尤其是深度学习,很多人想到的是 TensorFlow 。因为 TensorFlow 是由 Google 开发者支持的,所以你可以肯定它得到了很好的维护,并且有很好的文档。
当您的工作流程中已经有 TensorFlow 或更好的 TF2 时,您就可以使用 TF Probability 了。
Josh Dillon 在 Tensorflow Dev Summit 2019 上做了一个很好的案例,说明为什么概率建模值得学习曲线,以及为什么您应该考虑 TensorFlow 概率:
张量流概率:信心学习(TF Dev Summit '19)张量流频道
这里有一个简短的笔记本,让你开始写张量流概率模型:
编辑描述
colab.research.google.com](https://colab.research.google.com/github/tensorflow/probability/blob/master/tensorflow_probability/g3doc/_index.ipynb)
荣誉奖
PyMC3 是一个公开可用的 python 概率建模 API。它在研究中有广泛的应用,有强大的社区支持,你可以在 YouTube 上找到一些关于概率建模的演讲来帮助你开始。
如果你在给 Julia 编程,看看 Gen 。这也是公开提供的,并且处于非常早期的阶段。因此仍然缺少文档,事情可能会出错。无论如何,这似乎是一个令人兴奋的框架。如果你愿意尝试,那么到目前为止的出版物和讲座都非常有前途。
参考
[1]保罗-克里斯蒂安·布克纳。 brms:使用 Stan 的贝叶斯多水平模型的 R 包
【2】b . Carpenter,A. Gelman 等人 STAN:一种概率编程语言
【3】e . Bingham,J. Chen 等人 Pyro:深度泛概率编程
数据科学教育的 3 个问题…以及如何解决它们。
你想在大学里学习数据科学。你的大学提供了一个全新的数据科学学位,你可以用它来获得“ 全美最好的工作 ”。你看看那些充斥着一些世界上最时髦词汇的课程描述:“机器学习”、“人工智能”、“大数据”、“神经网络”等等……你激动了!
你应该感到兴奋。许多大学正在创建数据科学/机器学习学科的全新课程和计划,以满足行业的高需求。虽然这些课程很好地为学生提供了数据科学基础的良好概述,但我确实相信,有一些主题和想法被忽略了,这些主题和想法可以为学生在大学毕业后有所作为做好更好的准备。
旁注:这些想法都是我根据大学经历得出的个人看法。我并不是说数据科学项目在任何方面都不好。我只是想分享一些我自己研究过的帮助我在行业中脱颖而出的东西。
来源: XKCD (CC BY-NC 2.5)
1.数据清理
数据清洗是我要讲的第一个话题。数据清理可能是机器学习管道中最重要的部分。没有好的数据,计算机就无法学会有效地做出自主决策。
问题是
许多机器学习课程旨在让学生探索不同的 ML 算法,甚至可能建立自己的神经网络。项目的分配是为了让每个学生都能得到相同的、干净的数据来进行分析。这不实际!
在“真实世界”中,数据是肮脏、丑陋的,并且通常对数据科学家来说不是很好——当我们运行第一个机器学习脚本时,我们都被 iris 数据集欺骗了。下图显示,数据科学家花费大约 80%的时间清理和准备数据,不到 20%的时间实际运行分析。
解决办法
数据科学家花费如此多的时间准备数据的想法得到了一个非常坏的名声。相反,我们应该接受它,并在这方面变得很棒。
这将需要一些课外的工作。做自己的项目是好的,但是要为此收集自己的数据。虽然 Kaggle 是磨练数据科学技能的绝佳资源,但它并不是练习数据清理和准备的好资源。我提出一个想法:
做包含数据争论的非学术项目。使用以下建议作为练习:
- 编写脚本从网络上抓取数据(查看 BeautifulSoup
- 搜索那些而非必须用于机器学习的数据(查看谷歌的数据集搜索
- 使用你已经有的数据,但是尝试解决一个不同的问题
- 给一家拥有有趣数据的公司发电子邮件,要求将其用于研究(这可能很难,除非你给他们一些回报,一些公司可以提供学术许可证)
2.可解释性
好的…这是一个大的。这不仅是数据科学教育的问题,也可能是数据科学和机器学习领域的最大问题。
我将这一部分命名为“可解释性”,因为它很模糊——抱歉。我这么说的意思是,优秀的数据科学家需要有能力向非技术专业人士解释他们的模型。这对于能够交付业界最强大的模型至关重要。
我不是在谈论“模型可解释性”,这意味着准确描述一个模型如何做出决策。Cassie Kozyrkov 写了一篇非常全面的文章关于为什么可解释的 AI 不会交付。她文章中的一段话是:
“复杂性是所有这一切的原因”
是的,人工智能和人工智能的全部目的是从如此复杂的数据中产生洞察力,以至于人类自己无法完成这项任务。
所以你问我的‘可解释性’是什么意思?嗯,问题来了。
问题
在大学里:你是一名数据科学专业的学生,由一名数据科学教授授课,他会为你设计全面的编程作业,让你和你的数据科学同学一起完成,然后交给数据科学博士生助教,助教会给你打分。
你从未被要求向一个非数据科学家解释你的工作,更不用说向一个非技术人员解释了。在工业界,如果你在一家大公司工作,这种交流每天都会发生。构建复杂的模型,然后向项目经理和执行人员解释它们的用途,这对于部署您的模型至关重要。通常人们发现自己在大学毕业后第一次做这种“解释”。拥有解释模型的能力将使你在工作中表现出色,更好地理解你自己的工作,并能够接触到更广泛的受众。此外,人们通常害怕改变。如果一个公司的功能在历史上是以一种方式完成的,如果没有一个好的解释,人们会犹豫是否要转换到“现代机器学习方法”。
解决办法
对于如何在大学期间获得这种体验,我提出了一些建议:
- 与专业以外的人或教授讨论你的工作
- 在非技术层面上写关于你的工作的文章(这就是我所做的,查看我的第一篇文章这里!)
- 我个人认为《走向数据科学》出版物有许多文章,它们以简单的方式很好地解释了高水平的技术主题。订阅并关注您最喜欢的作家!
- 在你热爱的学科中做自己的项目总是一个好主意。我喜欢棒球,所以我做了很多关于棒球的预测模型的工作。我总是觉得解释这些模型很容易,因为我对这个学科非常熟悉。如果你不是植物学家,就很难解释为什么鸢尾花是一种植物!(哇,我的第二个 iris 笑话,这是个问题)
总之:我不认为有必要解释你的模型是如何得出一个决定的,但我认为很好地解释你的模型的本质以及它们如何适应一个生态系统是必要的。
3.可量测性
用可以在你的笔记本电脑上安装的数据集做项目是很好的。但在“现实世界”中,你将经常处理如此庞大的数据,你的笔记本电脑根本不够用!我们需要知道如何扩展!
(可伸缩性)是指当计算机应用程序或产品(硬件或软件)的大小或容量发生变化以满足用户需求时,它仍能继续正常运行的能力。通常,重新调整是为了更大的尺寸或体积。-TechTarget
问题
换句话说,知道如何编写代码和使用可用的资源来构建可以在企业级部署的应用程序是很重要的。这种类型的教育很少在本科阶段教授。
有些课程将涵盖这一领域的特定技术,如大数据和云计算。然而,根据我的经验,这些课程涵盖了这些概念的架构,而不是将它们具体应用于数据科学。我不想贬低这些课程的价值,但是对于数据科学家来说,使用 Amazon Web Services 并不完全需要知道 Amazon Web Services 的幕后是什么。我的解决方案将突出一些在工业中广泛使用,但在学校中很少涉及的重要技术。
解决办法
**云服务:**学习如何使用云服务是一项无价的技能(尤其是在这个时代)。云服务是构建可伸缩程序的最新技术。幸运的是,世界上最大的三家云提供商——亚马逊网络服务、谷歌云、微软 Azure——都有免费服务可供尝试。唉,我提出我的第一个解决方案:
- 在 AWS 、 Google Cloud 或 Azure 上注册账户,开始了解他们的服务。
- 拿一个你的深度学习模型,试着在云上构建它。看到它跑得多快了吗?看,可扩展性。这里是帮助你入门的教程。
**大数据:**下一个解决方案与大数据有关。许多云提供商都有大数据存储服务。这些都值得探讨。此外,其他公司专门从事大数据存储,如 Splunk 。我的第二个解决方案是:
- 查看 Splunk 获取大数据。Splunk 被许多大公司用于他们的大数据解决方案,他们的许多服务也是免费的。
**集装箱化:**接下来,值得一提的是码头工人集装箱。简而言之,使用 Docker 容器是一种“打包项目”的方式。它们将运行一个项目所需的所有不同的依赖项包装在一个容器中。这使得在任何地方运行你的项目都很容易(甚至是云端!).了解如何使用 Docker 容器很重要,因为这是一种在企业级部署应用程序的广泛使用的技术。我的第三个解决方案如下:
- 练习创建和使用 Docker 容器。从查看这篇教程开始。本教程非常强大,但是入门部分是一个很好的入门地方。
荣誉奖
以下是一些优化数据科学工作流程的重要技术。这些工具很少在学校教授,因为它们不够全面,不足以让整个班级都来讨论它们。我会把它们列为“荣誉奖”。
饭桶
令我非常惊讶的是,一些计算机科学和数据科学课程并没有涵盖 git。Git 是一个允许程序员分享他们项目工作的系统。它跟踪每个人对文件所做的更改,并可以将它们合并在一起。这对团队发展是绝对必要的。无论你是和 1 个人一起工作,还是和 100 个人一起工作,git 都是行业标准。
Git 是一个重要的软件,在合作编程项目时可以使用。它是一个足够广泛的工具,通常有资格进入自己的大学课堂。因此,学生通常被迫自己学习 git。
以下是一些开始的想法:
- GitHub 是使用 git 最流行的客户端。GitHub 为你的在线存储提供了一个很好的用户界面。关于如何使用 GitHub,网上有无限的教程。这里是我喜欢的一个。
- BitBucket 类似 GitHub。
- 另一个很少被提及的协作工具是 Google Colab 。Google Colab 就像编码的 Google Docs。为此,它使用了一个 Jupyter 笔记本类型的界面。
想知道为什么我没有进一步解释 Jupyter 笔记本?只是等待…
Jupyter 笔记本
是的,你猜对了……Jupyter 笔记本是文本编辑器的替代品。它们允许您一次运行特定的代码块,也可以写入 Markdown。下面是一个笔记本的截图:
我的 Jupyter 笔记本样本。
Jupyter 笔记本很重要,因为它们可以让您轻松地可视化数据,而不必重新运行脚本和恢复数据,并且可以快速运行。
以下是开始使用 Jupyter 的分步过程:
- 打开一个终端窗口。
- 运行命令:
pip3 install jupyter
。 - 等待 jupyter 安装其依赖项。
- 运行命令
jupyter notebook
启动你的第一个笔记本。 - 将其中一个 URL 复制并粘贴到 web 浏览器中,按 enter 键。
- 单击右上角的“新建”创建新笔记本
总结一下…
我希望你从中吸取了一些东西。我想再次重申,这些是我的意见。我对持肯定态度有些学校提供涵盖这些话题的课程。然而,这 4 个主题非常重要,我的节目没有深入讨论它们。我写这篇文章是为了帮助那些发现自己和我处境相同的人。
一如既往,非常感谢您的反馈。感谢阅读!
J
每个数据科学家必读的 3 本编程书籍
用 Python 掌握数据科学的编程方面
实用数据科学更多的是关于编程,而不是数学。Python 是大多数人选择的语言,所以掌握这种语言的非数据科学方面是很重要的。今天我们将讨论 3 本基本的书来做到这一点。
普里西拉·杜·普里兹在 Unsplash 上的照片
但是,作为一名数据科学家,掌握编程为何如此重要?好吧,我会碰碰运气,说你将为一家有其他软件开发人员的公司工作,所以了解你的角色如何融入大局是很重要的。
让我们快速地对此进行详细说明。
大多数数据科学家在提供一些产品/服务的公司工作,这些产品/服务主要由软件开发团队开发。数据科学家的角色是通过数据分析或某种预测性建模来扩展上述产品/服务的功能。
知道如何在笔记本上训练机器学习模型是不够的。此外,了解软件开发的基础知识对于软件开发部门的高效工作也是不够的。
您需要知道如何编写简单、可读且高效的代码,还需要知道如何以最佳方式组织代码。
这就是更高级的编程概念发挥作用的地方——如数据结构、算法、设计模式和面试问题等主题——它们不一定只与面试相关。但稍后会详细介绍。
请记住,在这篇文章中,你会找到我推荐的书籍的链接。这对你来说没什么,因为价格是一样的,但是如果你决定购买,我会得到一点佣金。此外,我只收录了我亲自阅读过的书籍,可以保证 100%的质量。
好吧,我们从第一个开始。
用 Python 实践数据结构和算法
如果你认真对待你的编程工作,学习数据结构和算法是必须的。
这是那些一开始你不理解要点的概念之一,但是一旦你浏览了材料,一切都变了。你将了解到高效编写的代码有多优雅,还将了解一些最常见的面试问题的答案。
这是学习 Python 编程语言中的数据结构和算法的入门书籍,它涵盖了内置数据类型、集合模块中的数据类型、单向和双向链表、堆栈、队列、树和树遍历、哈希表、图形、搜索和排序算法等主题。
网上有很多学习这些话题的资源,但我发现这本书的价格非常不错。它大约有 400 页长,所以不要指望很快就能完成。至少花两个月的时间,因为主题相当复杂。
你可以在这里得到《T2》这本书。
掌握 Python 设计模式
【https://amzn.to/3GsYU97
将设计模式视为一组最佳实践,您可以在设计应用程序时使用它们来解决特定的问题。
这本书将教你如何构建你的代码。呆在笔记本电脑里不是生产环境的解决方案,所以学习如何正确地组织代码是必须的——即使你不是在编写应用程序(从传统意义上来说)。
这本书涵盖了绝大多数的设计模式,比如抽象工厂模式、构建器模式、适配器模式、装饰器模式、桥模式、门面模式、命令模式、观察者模式等等。
这些被分成几个部分以使学习变得合理和容易,主要部分是创造模式、结构模式和行为模式。
它只有大约 250 页,所以它不应该花费你那么长时间来完成。再说一次,这不是最简单的话题,所以慢慢来,不要着急。
你可以在这里得到书。
Python 中编程面试的要素
又一本很棒的书。如果你已经阅读了列表中的第一个——用 Python 实践数据结构和算法*——你可能会发现这个有点类似。这并不是一件坏事。我来详细说明一下。*
你需要学好数据结构和算法,重复几个月前学过的概念只会有好处。此外,你应该学习或至少浏览一些最常见的编码面试问题。
为什么?因为这些很可能会在你的求职面试中发生。你应该知道这些东西,尽管它与数据科学没有直接联系。我知道这很糟糕。
这就是数据科学的情况——面试官要求的大量先决条件,其中你将在工作中用到 5%。也许吧。但事实就是如此。
你可以在这里得到这本书。
在你走之前
编程和软件工程比人们想象的要广泛得多。学习如何编写代码是不够的,因为我们必须以最简单和最有效的解决方案为目标。
这些书是我推荐的让你的 Python 技能达到最高水平的方法。如果你是 Python 初学者,这里有一篇文章值得一读:
如何学习编程和我推荐的最佳书籍
towardsdatascience.com](/heres-how-i-learned-just-enough-programming-for-data-science-58389f50c570)
感谢阅读,我希望你喜欢它。
加入我的私人邮件列表,获取更多有用的见解。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
每个数据科学家都应该阅读的 3 本编程书籍
用 Python 掌握数据科学的编程和架构
照片来自 Unsplash 上的Janko ferli
如果你读了我上一篇关于数据科学工程师书籍资源的文章,你就会知道我在毕业前从来没有太喜欢过教科书。回头看看我的书架,我发现了另外三本对 Python 编程有帮助的书。在过去的一年里,我致力于为公司内部的数据科学家设计新的工具和技术,并发现当我陷入某个问题时,这些资源非常有价值。到目前为止,我发现最有帮助的三本书是《面向所有人的 Python:探索 Python3 中的数据》、《Python 食谱》和《干净的架构》。
面向所有人的 Python:探索 Python3 中的数据
来自亚马逊列表的图书封面图片
**作者:**查尔斯·塞弗伦
即使你已经编程一段时间了,这也是一本很好的复习书。Python for Everybody 首先介绍了为什么应该学习编程以及编程意味着什么。这本书对于没有编程经验的人来说是一本很好的入门读物。在浏览了为什么你应该编程和什么是编程之后,这本书详细介绍了变量、表达式和语句。这篇简介很好地介绍了如何使用条件执行、函数和迭代。在本书的结尾,作者讨论了面向对象编程,与数据库和 SQL 交互,并简要介绍了数据可视化。
如果你正在学习编程或者需要复习基础知识,我强烈推荐你去读一读。这是一本帮助阐明 Python 中具体编程要点的好书,并且有助于强化基本编程原则。作者有简单明了的例子,容易理解。
Python 食谱
来自亚马逊列表的图书封面图片
作者:大卫·比兹利和布莱恩·k·琼斯
Python Cookbook 在我的书架上已经有一段时间了,当你需要你可能遇到的日常 Python 任务的快速例子时,它是一个很好的参考。这本书一章一章地分解主题,每一节都有几个详细的例子。在阅读这本书的序言时,您会注意到作者是为那些希望更好地理解 Python 和现代编程习惯用法的更有经验的 Python 程序员写的这本书。书中的每个食谱都被写成一个框架例子,为读者提供必要的信息。你得到了一个基本的理解,如果需要的话,你可以去做更深入的研究。
我最初被这本书吸引是基于食谱是如何设置的。每个食谱在一章的一个小节中都是独立的。例如,第 8 章关注类和对象,而配方 8.9 讨论创建新的类或实例属性。在每份食谱中,你会发现三个部分:问题、解决方案和讨论。第一部分详述了问题陈述。然后,解决方案进入一个代码示例和输出的简要描述。讨论将深入到解决方案的更多细节,以及这种方法的任何顾虑、缺点或劣势。这些例子并不都是包罗万象的方法,但它们是理解一个概念并决定是否需要为手头的问题研究进一步信息的一个很好的起点。
干净的建筑
亚马逊列表的封面图片
**作者:**罗伯特·c·马丁
在我的上一篇文章中,我讨论了同一作者的《干净的代码》一书,认为这是一本适合软件工程师和数据科学家的完美书籍。与这本书一起的是《干净的建筑》,这是你图书馆的另一个极好的补充。在工作中开发了不同的工具和库之后,我今年购买了这本书。在本书中,作者分解了软件设计和架构的含义,并简要讨论了不同的编程范例。他详细介绍了如何设计软件架构以及如何处理业务规则。
通过阅读这本书,你将更好地理解架构代码意味着什么,以及你如何在你的工作中使用不同的范例和原则。每一部分都详细描述了开发干净架构的各个方面,比如第 3 部分,他详细描述了架构方面的坚实原则。总的来说,这是一本很好的读物,它讨论了业务逻辑应该如何在一个干净的架构代码基中自包含。总而言之,如果你想学习更多关于架构代码的知识,这是添加你的书架的一个很好的参考。
摘要
如果你读了我上一篇关于这个主题的文章,你会知道我向对数据科学和软件开发感兴趣的人推荐的前三本书是:
- 罗伯特·塞西尔·马丁的《干净的代码》
- 统计学习介绍作者 Gareth James,Daniela Witten,Trevor Hastie,Robert Tibshirani
- 每个程序员都应该知道的 40 种算法
我放在书架上的伟大资源,我喜欢介绍给软件工程师和数据科学家。
towardsdatascience.com](/top-3-books-for-every-data-science-engineer-e1180ab041f1)
当你继续你的旅程时,我推荐以下三本书:
- 面向所有人的 Python:探索 Python3 中的数据
- 大卫·比兹利和布莱恩·k·琼斯的 Python 食谱
- 罗伯特·塞西尔·马丁的清洁建筑
按照这个顺序,您将首先获得关于 Python 的精彩介绍。随着您对这种语言的了解越来越多,并寻找更复杂的例子,您可以浏览 Python 指南。这本书是一个很好的资源,可以通过框架例子来解决常见问题。从框架例子中走出来,你可以开始理解架构你的代码的方法,并且清楚地做出更好的设计决策。
你的书架上有什么有用的书吗?如果有,它们是什么?
如果你想阅读更多,看看我下面的其他文章吧!
当我参加大学讲座时,最常被问到的问题是“我需要具备什么技能?”
towardsdatascience.com](/top-8-skills-for-every-data-scientist-79e6b1faf3e1) [## 停止浪费你的时间,咨询一个主题专家
在从事数据科学项目时,请一位主题专家来审查您的工作可能会有所帮助。
towardsdatascience.com](/stop-wasting-your-time-and-consult-a-subject-matter-expert-f6ee9bffd0fe) [## 创建用于熊猫分组的自定义聚合
Pandas groupby 是一个函数,您可以在数据帧上使用它来分割对象、应用函数以及组合…
towardsdatascience.com](/creating-custom-aggregations-to-use-with-pandas-groupby-e3f5ef8cb43e) [## 数据可视化的前 3 篇文章
如果您想更好地构建数据可视化,这些文章很有帮助。
towardsdatascience.com](/top-3-articles-for-data-visualization-956a08a54b04) [## 不要太骄傲而不愿寻求帮助
如果你被一个 bug 卡住了或者感到不知所措,你可以寻求你需要的帮助。
towardsdatascience.com](/dont-be-too-proud-to-ask-for-help-76f21d16f318) [## 理解分析开发生命周期
将您的分析从摇篮带到坟墓。
towardsdatascience.com](/understanding-the-analytic-development-lifecycle-2d1c9cd5692e)
3 分钟内 3 个 Python 概念
利用视频游戏开发的背景获得直觉
在这篇文章中,我谈到了用 Python 开发代码的 3 个关键概念。我将使用游戏开发的背景作为每个概念的例子,因为我相信这有助于最直观的理解。
让我们开始吧…
1.班级
面向对象编程的标志:类。这些可以被看作是你试图编码的任何东西的计算模型。请允许我详细说明,在我们假设的视频游戏中,我们可以用一个类来表示一个玩家和他们的属性…
这里我们设计了一个类来代表游戏中的玩家。玩家将有三个主要属性:力量、智力和魅力——他们的其他属性将基于之前的值进行调整。要创建一个在我们的游戏中使用的类的实例,我们可以编写以下代码…
我们现在可以在游戏中玩家发生任何事情时引用 player_1 变量。
这个概念可以扩展到建立从狗到数据库的任何东西的计算模型。唯一的区别在于类的结构和实现。
2.子类
对类和面向对象编程的扩展是子类的概念。每当不同的计算模型之间有共同的属性时,使用超类可能是最佳的。考虑一下我们正在创建的游戏中的敌人——所有的敌人,不管他们是什么类型(骷髅、僵尸等等),都有共同的属性(生命值、攻击力),所以我们可以创建一个名为“敌人”的超类,并将所有不同类型的敌人编码为子类…
现在让我们创建一个僵尸和骷髅子类,使用敌人类作为超类。你会看到我们可以修改属性,这样每个敌人类型可以被不同地初始化(增加多样性),但仍然有相同的标准参数(生命值和攻击力)…
要实现这些类,我们可以创建实例,就像我们创建 player 类一样…
我们可以参考 skeleton_1 和 zombie_1 的统计数据,无论游戏中发生什么事情。
3.枚举类型
通常在游戏中用来表示物品稀有性的是枚举类型。它允许我们通过名字和数字来引用一个变量,例如,我们游戏中的一个基本稀有系统可以如下工作…
如果我们想从敌人身上“随机掉落”一件物品,我们可以用一个随机小数来确定稀有度…
- 0 –. 5=普通
- .51-.75 =不常见
- . 76-. 9=稀有
- .91-.98 =传奇
- .981+ =异国情调
代码看起来会像这样…
为了检查稀有性选择是否正确(并且公平)地工作,我们可以运行一个 for 循环来确保所有选项都是统计上可用的…
这将打印一组稀有值作为枚举类型。利用我们之前学到的职业,我们可以制造物品(剑、弓等)和子类,它们的属性会随着物品的稀有程度而改变,就像僵尸和骷髅有不同的生命值和攻击值一样。
2020 年你不能错过的 3 个 Python 库
给新的一年开个好头。
在这篇文章中,我将展示 3 个你可能不知道的强大的库。我们开始吧!
python-dateutil
你可能已经使用过 Python 的标准日期时间模块,尽管它在大多数情况下已经很好了,但你可能觉得它缺少了什么。好吧,让我告诉你,在 python-dateutil 中可能已经有了一些东西,你可以安装如下:
pip3 install python-dateutil
这个库提供了许多强大的功能,例如,您可以用自然语言解析包含日期的字符串。让我们通过一个例子来看看如何做到这一点:
from dateutil.parser import parse
s = "Today is the 31st of January of the 91\. And the current time is 12:34:56 AM"
parse(s, fuzzy=True)
…提供以下输出:
datetime.datetime(1991, 1, 31, 0, 34, 56)
在我看来,相当令人印象深刻。这个库中还有许多其他有趣的特性,所以我真的推荐你去看看。
降价
如果你曾经觉得有必要将 Markdown 转换成 HTML,这是为你准备的。 Markdown 库,也可以安装 pip:
pip3 install Markdown
然后,它允许您解析 Markdown 格式的字符串或 Markdown 文件。例如,您可以按如下方式转换字符串:
import markdown
markdown.markdown('1\. **Hello**')
…提供以下输出:
'<ol>\n<li><strong>Hello</strong></li>\n</ol>'
彩色光
你刚刚在你的网站上发布了一个新的特性,然后走向实时日志的海洋,寻找错误信息。然而都是黑白的,你几乎分辨不出什么。为什么不给你的标准输出增加一些色彩呢?例如,您可能想用红色打印您的错误消息。有了 colorama ,这就变得容易了,可按如下方式安装:
pip3 install colorama
下面的例子摘自库的 PyPI 站点,很好地总结了这个库的强大之处:
from colorama import Fore, Back, Style
print(Fore.RED + 'some red text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
…给出这样的结果!
您有更多颜色和款式可供选择:
Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Style: DIM, NORMAL, BRIGHT, RESET_ALL
提取文本数据应该知道的 3 个 Python 模块
用于文本分析的 Python
提取文本数据是进一步分析数据的第一步。我们在社交媒体上有大量的数据。然而,我们需要一个能帮助我们从大量文本数据中提取有用信息的系统。一些使用文本提取的著名应用程序是简历解析和发票阅读。在本文中,我们将看到一些最新的免费使用 python 库来提取文本数据以及如何使用它们。
1.Pdf 水管工
PDF 水管工库是用 python 写的。这个库可以在提取文本时解决不同的目的。如果我们想从任何文档中提取文本或表格数据,这个库会非常方便。
如何安装
要安装此库,请打开命令提示符并键入以下命令。确保 python 在机器中可用。
pip install pdfplumber
如何使用
要使用这个库,首先,我们需要导入它,然后使用pdfplumber.open
来读取任何 pdf 文件。
import requests
import pdfplumberwith pdfplumber.open("Pranjal Saxena Resume.pdf") as pdf:
page=pdf.pages[0]
text=page.extract_text()
输出
我已经用我的简历提取了数据,并得到了一个很棒的结果来对文本做进一步的处理。
PDF 水管工
2.PyPDF2
Matthew Stamy 的 PyPDF2 是另一个很好的库,可以帮助我们从文档中提取数据。它可以执行以下操作。
- 提取文档信息。
- 逐页拆分文档
- 逐页合并文档
- 裁剪页面
- 将多页合并成一页
- 加密和解密 PDF 文件
它执行 pdf 文档中的所有操作。让我们看看它如何从文档中提取文本数据。
如何安装
要安装 PyPDF2 库,请打开命令提示符并键入以下命令。确保 python 在机器中可用。
pip install PyPDF2
如何使用
要使用这个 PyPDF2 库,首先,我们需要导入它,然后使用PdfFileReader
读取任何 PDF 文件。然后,最后使用extractText()
来获取文本数据。
from PyPDF2 import PdfFileReader
pdfFile_pypdf = open('Pranjal Saxena Resume.pdf', 'rb')
pdfReader = PdfFileReader(pdfFile_pypdf)print(pdfReader.getPage(0).extractText())
输出
如果我们将它与 PDF Plumber 库进行比较,这里的输出并不那么令人满意,因为这个库也关注其他 PDF 文档操作任务。
PyPDF2
PyPDF2
3.阿帕奇蒂卡
Apache Tika 是一个内容检测和分析框架,用 Java 编写,由 Apache Software Foundation 管理。看到它所能提供的输出,我感到很惊讶(你也会这样)。因为它对用户友好,易于转换成有价值的数据。
如何安装
要安装和使用 Apache Tika python 库,您应该安装最新版本的 Java。安装 Java 后,打开命令提示符并键入以下命令。确保 python 在机器中可用。
pip install tika==1.23
而且,如果你是用 Jupyter Notebook 来运行代码,那么 Jupyter Notebook 会自己安装所需的 java 环境。
如何使用
要使用 Apache Tika 库,首先,我们需要从 Tika 导入解析器,然后使用parser.from_file
读取任何 pdf 文件。然后,最后使用[“content”]
来获取文本数据。
from tika import parser
parsed_tika=parser.from_file("Pranjal Saxena Resume.pdf")print(parsed_tika["content"])
输出
输出看起来很有趣。我们可以从文档中提取适当组织的文本。
阿帕奇蒂卡
结束点
我们已经讨论了一些最新的免费使用 python 库从文档中提取文本或表格数据。这些库非常有助于从文档中收集信息数据。我们可以尝试这三个库,并根据文档的格式相应地使用它们。现在我们有了数据,下一步是使用正则表达式找到数据中的模式,并存储提取的数据以供进一步操作。
这就是本文的全部内容。我会在附近的某个地方见到你。
在你走之前……
如果你喜欢这篇文章,并希望继续关注更多关于 Python &数据科学的精彩文章**——请点击这里https://pranjalai.medium.com/membership考虑成为中级会员。**
请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。
还有,可以随时订阅我的免费简讯: Pranjal 的简讯 。
自动读取、创建和运行多个模型的 3 个 Python 技巧
用 Python 和 Bash For Loop 自动化枯燥的东西
动机
将代码投入生产时,您很可能需要组织代码文件。读取、创建和运行许多数据文件非常耗时。本文将向您展示如何自动
- 遍历目录中的文件
- 如果嵌套文件不存在,则创建嵌套文件
- 使用 bash for 循环运行一个具有不同输入的文件
这些技巧让我在从事数据科学项目时节省了大量时间。我希望你也会发现它们很有用!
遍历目录中的文件
如果我们有多个数据要像这样读取和处理:
├── data
│ ├── data1.csv
│ ├── data2.csv
│ └── data3.csv
└── main.py
我们可以尝试一次手动读取一个文件
import pandas as pd def process_data(df):
passdf = pd.read_csv(data1.csv)
process_data(df)df2 = pd.read_csv(data2.csv)
process_data(df2)df3 = pd.read_csv(data3.csv)
process_data(df3)
当我们有 3 个以上的数据时,这种方法是可行的,但效率不高。如果我们在上面的脚本中唯一改变的是数据,为什么不使用 for 循环来访问每个数据呢?
下面的脚本允许我们遍历指定目录中的文件
data/data3.csv
data/data2.csv
data/data1.csv
以下是对上述脚本的解释
*for* filename *in* os.listdir(*directory*)
:遍历特定目录下的文件if filename.endswith(".csv")
:访问以’结尾的文件。csv ’file_directory = os.path.join(*directory*, filename)
:连接父目录(‘数据’)和目录内的文件。
现在我们可以访问“数据”目录中的所有文件了!
如果嵌套文件不存在,则创建嵌套文件
有时我们可能想要创建嵌套文件来组织我们的代码或模型,这使得我们将来更容易找到它们。例如,我们可以使用“模型 1”来指定特定的特征工程。
在使用模型 1 时,我们可能希望使用不同类型的机器学习模型来训练我们的数据(“模型 1/XGBoost”)。
在使用每个机器学习模型时,由于模型使用的超参数的差异,我们甚至可能希望保存模型的不同版本。
因此,我们的模型目录可能看起来像下面这样复杂
model
├── model1
│ ├── NaiveBayes
│ └── XGBoost
│ ├── version_1
│ └── version_2
└── model2
├── NaiveBayes
└── XGBoost
├── version_1
└── version_2
为我们创建的每个模型手动创建一个嵌套文件可能会花费我们很多时间。有没有一种方法可以让这个过程自动化?是的,用os.makedirs(datapath).
运行上面的文件,您应该看到自动创建的嵌套文件“model/model2/XGBoost/version_2 ”!
现在您可以将您的模型或数据保存到新目录中了!
Bash for 循环:用不同的参数运行一个文件
如果我们想用不同的参数运行一个文件呢?例如,我们可能希望使用相同的脚本来预测使用不同模型的数据。
如果一个脚本需要很长时间来运行,并且我们有多个模型要运行,那么等待脚本运行完毕然后运行下一个脚本将会非常耗时。有没有办法让电脑运行模型 1,2,3,…,10,然后去做别的事情。
是的,我们可以用 for bash for loop。首先,我们使用sys.argv
来解析命令行参数。如果你想在命令行中覆盖你的配置文件,你也可以使用像 hydra 这样的工具。
>>> python train.py XGBoost 1
Loading model from model/model1/XGBoost/version_1 for training
太棒了。我们刚刚告诉我们的脚本使用模型 XGBoost,版本 1 来预测命令行上的数据。现在我们可以使用 bash for 循环遍历模型的不同版本。
如果你可以用 Python 做 for 循环,你也可以在终端上这样做,如下所示
$ for version in 2 3 4
> do
> python train.py XGBoost $version
> done
键入 Enter 来分隔各行
输出:
Loading model from model/model1/XGBoost/version_1 for training
Loading model from model/model1/XGBoost/version_2 for training
Loading model from model/model1/XGBoost/version_3 for training
Loading model from model/model1/XGBoost/version_4 for training
现在,您可以在让您的脚本使用不同的模型运行的同时做其他事情!多方便啊!
结论
恭喜你!您刚刚学习了如何一次自动读取和创建多个文件。您还学习了如何使用不同的参数运行一个文件。现在,您可以将手动读取、写入和运行文件的时间节省下来,用于更重要的任务。
如果你对文章中的某些部分感到困惑,我在这个回购中创建了具体的例子。
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上联系我。
如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:
现在,您可以在等待培训完成的同时从事其他项目
towardsdatascience.com](/how-to-get-a-notification-when-your-training-is-complete-with-python-2d39679d5f0f) [## 如何创建可重用的命令行
你能把你的多个有用的命令行打包成一个文件以便快速执行吗?
towardsdatascience.com](/how-to-create-reusable-command-line-f9a2bb356bc9) [## 如何用 Faker 创建假数据
您可以收集数据或创建自己的数据
towardsdatascience.com](/how-to-create-fake-data-with-faker-a835e5b7a9d9) [## cy thon——Python 函数的加速工具
当调整你的算法得到小的改进时,你可能想用 Cython 获得额外的速度,一个…
towardsdatascience.com](/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd) [## 高效 Python 代码的计时
如何比较列表、集合和其他方法的性能
towardsdatascience.com](/timing-the-performance-to-choose-the-right-python-object-for-your-data-science-project-670db6f11b8e)