查看原文
其他

Jupyter Notebook中的魔术命令

爬虫俱乐部 Stata and Python数据分析 2023-02-21

本文作者:张 猛,中南财经政法大学金融学院

本文编辑:刘光中

技术总编:王玉婷

Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

引言
Jupyter Notebook作为功能强大的交互式IDE,是比较基础的编程工具。但Jupyter Notebook中有一些鲜为人知的功能——魔术命令,非常实用且有趣。魔术命令是常规Python代码的增强,这些命令由IPython内核提供,基本上是为了解决常见问题而添加的,同时也为代码提供了一些快捷方式,提高编程的灵活性。今天的推文里我们就来介绍下常用的几种魔术命令。
一、可用的魔术命令魔术命令总共有多少种呢?我们可以用%lsmagic这个命令来查看当前可用的魔术命令。
%lsmagic

魔术命令主要包括两大类:第一类是行魔术(line magic),基本形式是 %magic, 表示magic只在本行有效;第二类是单元魔术(cell magic),基本形式是%%magic, 表示magic在整个cell单元有效。有些命令默认可以不带百分号使用,只要确定没有定义与其同名的变量即可。在魔术命令后面加上"?"即可以查询该命令的详细说明信息。


二、列出所有变量

这个魔术命令可以很好地向你展示Notebook环境中的变量列表。我们这里举出3个变量——1个数组、1个数字以及1个字符串。如果运行%who,它将列出定义的所有3个变量;%whos类似于%who,但可以给出更详细的信息。我们也可以在%who(%whos)魔术命令后面加上所需查找的变量类型对变量进行筛选,例如加上str对字符串形式的变量进行输出。

import pandas as pd a = pd.DataFrame()b = 2c = "爬虫俱乐部"%who%whos%whos str


三、计时命令有没有想过运行计算单元需要多长时间?魔术命令%time允许跟踪计算单元的总执行情况。%time命令可以测量执行一行代码花费的时间;%timeit命令是指多次执行一条语句,并返回平均时间以及偏差,可以测量循环过程的稳定性。
A = 0%time for i in range(1000):A = A + i**2%timeit for j in range(1000): A = j**2

上图是测量的单行代码的运行时间,如果是处理整个计算单元,需要使用%%作为time关键字之前的前缀,然后将其放于单元格的首行。


四、不同Notebook共享变量

这个魔术命令允许在不同的Jupyter Notebook之间共享任何变量。如果你在一个Notebook上做出了变量,而想在另一个Notebook上也使用这个变量,就可以使用魔术命令%store传递原始变量。如图所示,表示名为"myData1"的列表被储存起来了。

myData1 = ['爬虫俱乐部', 'Stata and Python'] %store myData1

然后我们可以在任意路径下调用这个变量,从而实现在不同的Jupyter Notebook变量共享。调用的时候需要输入%store -r 加变量名称。
%store -r  myData1myData1


五、查看历史操作当你花了很多时间跑程序后,你想知道你做过什么以及你目前的状况,或者有时候你不得不在单元格之间来回跳转以运行函数时,你会不会经常忘记历史的操作?在这种情况下,我们可以使用%history 魔术命令查看您的活动日志,并跟踪您已经做了什么。
%history


六、将内容复制到文件中

如果我们想要将Jupyter  Notebook中写的复杂函数或者类保存到专门的文件中时,魔术命令%%writefile非常有用,只需为函数或类的单元格添加%%writefile前缀,并写明想要保存到的文件名即可,当我们需要保存成py文件的时候就不需要复制了。

%%writefile temp_test.py def triplesum(a,b,c): d = a + b + c + a * b * c     return d 

这样我们就将创建的函数保存到temp_test.py 文件中,文件默认生成在同路径下,也可以对同名文件进行覆盖。如图,在同一路径下生成了新的文件。


七、显示外部文件的内容

如果需要将外部文件中的几行代码复制到代码中,就需要用到魔术命令%pycat,其允许在任何目录中显示任何文件的内容,而不是通过冗长的过程来获取文件并将其打开以进行复制。这里用%pycat显示一下我们刚才写入的py文件。

%pycat temp_test.py 


八、运行外部文件如果说魔术命令%pycat只能用来显示文件内容,那么%run后面接一个相对地址的file_name.py,就可以表示运行一个py文件,一旦被加载进来,我们就可以在后面的程序中使用该脚本文件中的逻辑定义。利用这个magic,我们也可以把一些公共函数、基本设置写在不同的Notebook内,在程序量大的时候可以节省空间和时间。
%run temp_test.py triplesum(3,4,5)


九、图像显示形式

魔术命令%matplotlib允许Jupyter Notebook在Notebook中显示matplotlib图形,激活matplotlib对Jupyter Notebook的交互式支持。

%matplotlib inline生成的图像内嵌显示,也是默认的显示形式。当我们调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,可以确保Jupyter Notebook显示出我们的绘图。

import numpy as np import matplotlib.pyplot as plt %matplotlib inlineplt.plot(np.arange(10))

与其相似的命令是%matplotlib notebook,在这个模式下会在Notebook中产生一个绘图窗口,能用图像下的按键对图片进行放大缩小等操作;%matplotlib auto与其一致,只是在这个模式下会弹出一个单独的绘图窗口。
%matplotlib notebookplt.plot(np.arange(10))


小结魔术命令是一种特殊的命令,虽然不常见,但可以帮助我们大大提高我们日常工作效率,掌握好这些魔术命令一定能对你有所帮助。(END)重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!



往期推文推荐     《Stata正则表达式》由中国金融出版社出版发行   

       匿名函数lambda到底怎么用?

Stata绘图系列—NBER Working paper仿图

       Camelot:从PDF中提取表格数据      Stata之计算财务指标——融资约束

      列表生成式|让你的代码更简洁

Stata绘图系列——玩转绘图通用选项之坐标轴

       玩转地图的好帮手--pyecharts

       爬虫俱乐部又又又输送了一位研究助理!!!      【数据分析】一文教你玩转DataFrame

 震惊,爬虫俱乐部竟是这样运营答疑群的?!

【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

带你玩转Stata编码一言不合就teamviewer

【基础篇】循环语句的continue与break

        教你用Stata爬取全国疫情风险地区数据,原来这么简单!【数据结构】集合的使用方法      Stata爬取七普人口数据

       浅析Python的序列化与反序列化

     爬虫俱乐部的精彩答疑--爬虫为何失败?

     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存