这个问题大家都会遇到。学习数据科学的过程从来都不是一帆风顺的。在编写代码时,您是否经常要搜索相同的问题、相同的概念,甚至相同语法结构的相同特征?是的,你并不孤单。我也一直在为同样的情况而苦苦挣扎。虽然遇到问题搜索StackOverflow很正常,但是相对于掌握和理解语言特性来说,反复遇到问题+找找找会严重拖慢你的速度。如今,无穷无尽的免费资源无时无刻不在充斥着互联网,一搜就能找到。然而,对于初学者来说,这既是福也是祸。如果管理不当,过度依赖在线资源会导致不良习惯,从长远来看会影响您的成长。以我自己为例,我经常从许多内容相似的帖子中复制代码并使用它,而不是花时间和精力去学习和巩固所需的技术概念,以便下次自己编写所需的代码。这是一种懒惰的方法,虽然它在短期内看起来像是一种快速简便的方法来完成任务,但从长远来看,它会严重阻碍你的成长,破坏你的创造力,并从根本上动摇你回忆某些语法的能力特征。能力(这在技术面试中是致命的)。那我该如何解决呢?最近,我在做一个在线数据分析课程,叫做《数据科学和机器学习中的 Python 》。当发布前几个视频教程时,我被提醒在用Python进行数据分析时,我一直遗漏了一些重要的概念和语法。为了进一步巩固自己对这些概念的理解,也为了帮助大家节省每次上网搜索的时间,我在这里整理了一些自己在使用Python、NumPy和Pandas时遇到的常见小问题。希望对您有所帮助。01.只有一行代码的列表生成器如果每次生成列表都要写一个循环,是不是很烦?幸运的是,Python已经有一个内置的方法,只需要一行代码就可以解决这个问题。如果你不熟悉这个语法,可能会有点难以理解,但是一旦你习惯了这个技巧,你绝对不会爱不释手!GIF:如何将循环更改为列表生成器(来源:TreyHunner)上面的GIF是一个很好的例子。原来的代码是用for循环的方式生成列表,但是在图中一步一步,就变成了只有一行代码的列表生成方式,就不用再循环了。是不是很简洁?再举一个对比例子:使用循环:输出结果为[1,4,9,16]使用产生式:输出结果也为[1,4,9,16]02,Lambda表达式显然,这个函数不会用过几次。每次写一大串函数构造代码不累吗?别怕,Lambda表达式来拯救你!Lambda表达式可以轻松创建简单的、一次性使用的匿名函数对象。基本上,它们允许您使用函数而无需费心构造函数。Lambda表达式的基本语法是:欧莎汉化,优达学城出品。请记住,Lambda表达式创建的函数与普通def构建的函数没有区别,只是函数体只是一个单独的表达式。看看下面这个例子:输出是1003,Map和Filter函数一旦你掌握了Lambda表达式,将它们与map或filter函数一起使用是非常强大的。具体来说,map()函数接受一个列表和一个函数,该函数对列表中的每个元素调用一个函数,并将结果放入一个新列表中。在下面的例子中,map()函数遍历seq中的每一个元素,将其乘以2,将结果放入一个新的列表中,并返回这个列表。最外层list()函数将map()返回的对象转换成列表格式。输出结果为[2,4,6,8,10]和filter()函数略有不同。它接收一个列表和一个规则函数。为列表中的每个元素调用这个规则函数后,它把所有返回false的元素从列表中移除,并返回这个过滤后的子列表。输出为[3,4,5]04,arange和linspace函数为了快速方便地生成numpy数组,你必须熟悉arange()和linspace()这两个函数。这两个函数有其特定的用途,但对我们来说,它们都可以很好地生成numpy数组(而不是使用range()),这对于数据科学分析工作非常有用。arange()函数根据指定的步长返回等差数列。除了起始值和结束值,您还可以自定义步长和数据类型。请注意,给定的结束值参数不会包含在结果中。输出是一个数组对象:array([3,5])linspace()函数的用法类似,但有一点不同。linspace()在给定区间被平分多次后返回一个二分点数组。所以你传入的参数包括起始值,结束值,以及具体的等份数。linspace()对区间进行等分后,将起始值、结束值和每个等分点放入一个NumPy数组中。这在进行数据可视化和绘制轴时很有用。输出是一个数组对象:array([2.0,2.25,2.5,2.75,3.0])05.Pandas中坐标轴(axis参数)的含义是在Pandas中过滤掉某列,或者在pandas中修正NumPy矩阵你可能在对数据求和时遇到过轴参数这个问题。如果您还没有看过它,提前了解一下也没什么坏处。比如像这样处理一个Pandas表:在我真正理解之前,我基本上每次要用drop都要重新查询哪个轴值对应哪个,多到我自己数不过来清空了向上。在上面的例子中,你大概可以看出,如果要处理列,axis应该设置为1,如果要处理行,axis应该设置为0,对吧?但这是为什么呢?我最喜欢的一个解释(或者我是怎么记得的)是这样的:获取一个PandasDataTable对象的shape属性,你会得到一个元组,元组的最后一个元素是数据表的行数,第二个元素是数据表的列数。想想Python中这两个元素的下标,第一个是0,第二个是1吧?所以对于axis参数,0是前面的行数,1是后面的列数。怎么样,好记吧?06.使用Concat、Merge和Join合并数据表。如果您熟悉SQL,那么这些概念对您来说轻而易举。但无论如何,这些功能本质上只是合并多个数据表的不同方式。当然,要记住在什么情况下使用哪个功能并不容易,所以我们一起回顾一下。concat()可以简单的按行(或列)方向堆叠一张或多张数据表(看你传入的axis参数是0还是1)。merge()会将两个或多个数据表与用户指定的同名列的主键对齐。join()与merge()非常相似,只是join()是按数据表的索引对齐,而不是按同一列对齐。当表缺少索引时,对应的值为空(NaN)。如果有需要,您还可以参考Pandas官方文档,了解更详细的语法规则和应用示例,熟悉您可能遇到的一些特殊情况。07.apply函数你可以把apply()看成一个map()函数,但这个函数是专门为Pandas数据表和series对象创建的。对于初学者,您可以将系列对象想象成NumPy中的数组对象。它是一维索引数据表结构。apply()函数是对你在数据表中指定的行或列中的每个元素应用一个函数。是不是很方便?特别是当你需要格式化或修改一列的所有元素时,你不必一遍又一遍地循环!下面举几个简单的例子,让大家熟悉基本的语法规则:08、数据透视表(PivotTables)***最重要的是数据透视表。如果你对MicrosoftExcel有一定的了解,你很可能用过(或听说过)Excel中的“数据透视表”功能。Pandas中内置的pivot_table()函数做同样的事情。它可以帮助您格式化数据表格并输出类似Excel工作表的表格。在实际使用中,数据透视表会将数据按照一个或多个key进行分组,将函数传入参数aggfunc,数据会按照你指定的函数进行统计,并将结果分发到表中。下面是几个pivot_table()的应用例子:总结以上是我在自学过程中经常遇到的一些问题,以及如何理解这些问题。就我而言,把这些概念写下来,用尽可能简单的一句话描述,然后与大家分享的整个过程,也让我对这些技术有了更深入的理解和掌握。***,我希望当您与数据科学中这些难以捉摸的方法、函数和概念进行斗智斗勇时,我今天看到的一些内容可能会派上用场。
