介绍7个可以提高效率的Python技巧!
本文列举了一些提升或加速日常数据分析工作的技巧,包括:
Pandas Profiling
使用 Cufflinks 和 Plotly 绘制 Pandas 数据
IPython 魔术命令
Jupyter 中的格式编排
Jupyter 快捷键
在 Jupyter(或 IPython)中使一个单元同时有多个输出
为 Jupyter Notebook 即时创建幻灯片
1
Pandas Profiling
该工具效果明显。下图展示了调用 df.profile_report() 这一简单方法的结果:
![](https://filescdn.proginn.com/8966007cba3f77ffc7bffbcf88995e01/5c38d5e4edf318493949425a2e739586.webp)
使用该工具只需安装和导入 Pandas Profiling 包。
2
使用 Cufflinks 和 Plotly 绘制 Pandas 数据
「经验丰富的」数据科学家或数据分析师大多对 matplotlib 和 pandas 很熟悉。也就是说,你只需调用 .plot() 方法,即可快速绘制简单的 pd.DataFrame 或 pd.Series:
![](https://filescdn.proginn.com/dd33f746681537e5c09ceb377306fe09/7115b943f262392d5ca1ec400f496da7.webp)
有点无聊?
这已经很好了,不过是否可以绘制一个交互式、可缩放、可扩展的全景图呢?是时候让 Cufflinks* *出马了!(Cufflinks 基于 Plotly 做了进一步的包装。)
在环境中安装 Cufflinks,只需在终端中运行! pip install cufflinks --upgrade 即可。查看下图:
![](https://filescdn.proginn.com/eaa0ec2fc4b51048d2d540474994f0e2/142b954be246b014dfb0ddb44c8f0cda.webp)
效果好多了!
注意:上图唯一改变的是 Cufflinks cf.go_offline() 的导入和设置,它将 .plot() 方法变为 .iplot()。
其他方法如 .scatter_matrix() 也可以提供非常棒的可视化结果:
![](https://filescdn.proginn.com/8aedeae030399fd8c5b12e3664af1a36/5b01a5e10b7110d67ee01113a9481f4c.webp)
3
IPython 魔术命令
IPython 的「魔术」是 IPython 基于 Python 标准语法的一系列提升。
魔术命令包括两种方法:
行魔术命令(line magics):以 % 为前缀,在单个输入行上运行;
单元格魔术命令(cell magics):以 %% 为前缀,在多个输入行上运行。
下面列举了 IPython 魔术命令提供的一些有用功能:
1.%lsmagic:找出全部命令
如果你只记得一个魔术命令,那必须得是这一个。执行 %lsmagic 命令将提供所有可用魔术命令的列表:
![](https://filescdn.proginn.com/20bc7747d8641f623dea7ad3745cfffe/f70f405be7cdc807673162b8f99b2ca1.webp)
2.%debug:交互式 debug
大部分数据科学家都遇到过这种情况:
执行的代码块一直 break,你绝望地写了 20 个 print() 语句,想输出每个变量的内容。然后,当你最终修复问题后,你还得返回并再次删除所有 print() 语句。
不过以后再也不用这样了。遇到问题后只需执行 %debug 命令,即可执行想要运行的任意代码部分:
![](https://filescdn.proginn.com/eb86e167cde8e66b4ea2e27ea22aa432/29731cf987516ce7d0567314eb3db7bd.webp)
上图中发生了什么?
我们有一个函数,它以列表为输入,并对所有的偶数取平方值。
我们运行函数,但是出了些问题。但是我们并不知道怎么回事!
对该函数使用%debug 命令。
让调试器告诉我们 x 和 type(x) 的值。
问题显而易见:我们把'6'作为字符串输入到函数中了!
这对于更复杂的函数非常有用。
3.%store:在 notebook 之间传递变量
这个命令也很酷。
假设:你花了一些时间清洗 notebook 中的数据,现在你想在另一个 notebook 中测试一些功能,那么你是在同一个 notebook 中实现该功能,还是保存数据并在另一个 notebook 中加载数据呢?
使用%store 命令后,这些操作都不需要!该命令将存储变量,你可以在其他任意 notebook 中检索该变量:
![](https://filescdn.proginn.com/9d05fd73526fe5a9747035f3a42533b7/75c9f47bbe030bb4268b1d589ab976be.webp)
%store [variable] 存储变量。
%store -r [variable] 读取/检索存储变量。
4.%who:列出所有全局变量
你是否遇到过,为变量赋值后却忘记变量名的情况?或者不小心删掉了负责为变量赋值的单元格?
使用%who 命令,你可以得到所有全局变量的列表:
![](https://filescdn.proginn.com/7589c27663446f5e86c99bd3f45aed42/771d9a3aea072a6a61b3b012cd4e6b78.webp)
5.%%time:计时魔法命令
使用该命令可以获取所有计时信息。只需对任意可执行代码应用%%time 命令,你就可以得到如下输出:
![](https://filescdn.proginn.com/4e6bf8ab1bc782fe05c9985622be5065/9ebd647e11c23405c1e184aeb3e1b0ed.webp)
6.%%writefile:向文件写入单元格内容
在 notebook 中写复杂函数或类,且想将其保存到专属文件中时,该魔法命令非常有用。只需为函数或类的单元格添加 %%writefile 前缀和想要保存到的文件名即可,如下:
![](https://filescdn.proginn.com/78da276fbc32883132ee0eaca8a4c811/f17b85473dff95ed3a50efc41a1e5a65.webp)
如上所示,我们可以将创建的函数保存到 utils.py 文件中,然后就可以随意导入了。在其他 notebook 中也可以这样,只要与 utils.py 文件属于同一个目录即可。
4
Jupyter中的格式编排
这个工具很酷!Jupyter 考虑到 markdown 中存在 HTML / CSS 格式。以下是我最经常使用的功能:
1.蓝色、时尚
<div class="alert alert-block alert-info"> This is <b>fancyb>!div>
2.红色、轻微慌张
<div class="alert alert-block alert-danger"> This is <b>baaaaadb>!div>
3.绿色、平静
<div class="alert alert-block alert-success"> This is <b>goooodb>!div>
下图展示了它们的运行过程:
![](https://filescdn.proginn.com/db86f54e000ae3c2073d0e34e9185da1/9fdf5c19a818deb6cd381d94e906f067.webp)
当你想以 Notebook 格式呈现一些发现时,这非常有用!
5
Jupyter 快捷键
想了解和学习键盘快捷键,你可以使用命令面板:Ctrl + Shift + P,获取 notebook 所有功能的列表。下面选取了几个最基础的命令:
Esc:进入命令模式。在命令模式内,你可以使用方向键在 notebook 内进行导航。
在命令模式内:
A 和 B:在当前单元格上方(Above)或下方(Below)插入新的单元格。
M:当前单元格转入 Markdown 状态。
Y:当前单元格转入 code 状态。
D,D:删除当前单元格。
Enter:当前单元格回到编辑模式。
在编辑模式内:
Shift + Tab:为你在当前单元格中键入的对象提供文档字符串(文档),持续使用该快捷键,可循环使用文档模式。
Ctrl + Shift + -:在光标所在处分割当前单元格。
Esc + F:查找并替换代码(不包括输出)。
Esc + O:切换单元格输出。
选择多个单元格:
Shift + Down 和 Shift + Up:选中下方或上方的单元格。
Shift + M:合并选中单元格。
注意:选中多个单元格后,你可以批量执行删除/复制/剪切/粘贴/运行操作。
6
在 Jupyter(或 IPython)中使一个单元同时有多个输出
想展示 pandas DataFrame 的 .head() 和 .tail(),但由于创建运行 .tail() 方法的额外代码单元过于麻烦而不得不中途放弃,你是否有过这样的经历?现在不用怕了,你可以使用以下代码行展示你想展示的输出:
from IPython.core.interactiveshell import InteractiveShellInteractiveShell.ast_node_interactivity = "all"
下图展现了多个输出的结果:
![](https://filescdn.proginn.com/f5080adbe6f70775aba86392ec4610c8/bb296a26769be0d7e2e8cfdc29c673fb.webp)
7
为 Jupyter Notebook 即时创建幻灯片
使用 RISE,你可以仅通过一次按键将 Jupyter Notebook 即时转变为幻灯片。而且 notebook 仍然处于活跃状态,你可以在展示幻灯片的同时执行实时编码!
要想使用该工具,你只需通过 conda 或 pip 安装 RISE 即可。
conda install -c conda-forge rise
或者
pip install RISE
现在,你可以点击新按钮,为 notebook 创建不错的幻灯片了:
![](https://filescdn.proginn.com/29c0aa91f2f71e65b51913832c1c5092/f5d3ac6749c0cf2cde934aa69f02133b.webp)
- END -
本文为转载分享&推荐阅读,若侵权请联系后台删除