数据分析之在线JupyterNotebook使用小技巧|Python技能树测评
Posted 小小明-代码实体
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析之在线JupyterNotebook使用小技巧|Python技能树测评相关的知识,希望对你有一定的参考价值。
大家好,我是小小明。
受CSDN官方邀请,前来测评《python 技能树》 ,活动地址:https://bbs.csdn.net/topics/600937310
XDM,一起来测评,一起来拿奖吧!奖品多多,福利多多噢~
首先,我们打开内测技能树页面:
众所周知,jupyter是数据分析领域最常用的工具,所以我直接进入数据分析版块。
虽然目前看到选项过于单薄,但是不耽误我们玩玩csdn的jupyter。
下面我们就点开第一个模块的第一题开始玩玩吧:
我去,虽然只是一道选择题,但实在是已经吓死宝宝了,这代码也太长了点。那么先随便选个试试:
嘿嘿,选择A点提交后,在线Jupyter的入口就出现了。看我怎么跑代码干翻你这道 《大家来找茬》 的题目。
点击前往就出现了,服务启动的页面:
等待启动完毕后,就进入到了JupyterNoteBook的开发页面:
作为一名资深jupyter玩家,这点功能和插件显然是不满足要求的,下面我们看看如何安装一些插件:
给JupyterNoteBook安装插件
首先点击open:
然后进入Nbextensions插件选项卡,我将我最需要的三个插件打勾:
对于Autopep8这玩意,我们需要pip装点库,回到前面的代码界面执行:
!pip install autopep8
这是因为我上次使用时已经下载过有缓存,所以直接就安装好了。
安装完成后刷新网页刚才选择的插件就会生效。然后给代码框加个默认行号显示:
展开目录
点开目录按钮后,就可以编辑Markdown文本:
如何将一个代码节点转换为Markdown节点呢? 按下快捷键H
即可打开快捷键菜单:
这意味着,只需要记住H快捷键,其他快捷键都通过这个面板随时查询。
可以看到按下ESC退出进入命令行模式后,按下快捷键M
即可将其转换为Markdown文本节点,数字快捷键1
~6
即可将将其转换对应等级的标题。
复制代码并运行
点击右上角的复制按钮即可复制代码:
然后粘贴到JupyterNotebook中:
粘贴完,代码是这种使用制表符\\t
缩进的形式,现在按下快捷键Ctrl+L即可启动autopep8代码格式化:
可以看到格式化之后的代码都是空格缩进的形式。
根据右上角的提示即可运行代码,运行后:
报错,显然我们可以排除A选项。
三种运行方式的快捷键见Cell菜单:
分别表示只运行当前单元格、运行并选择下一个单元格 和 运行并向下插入一个单元格。
大家可以都试试,感受一下区别。
复制B选项的代码并运行后也报错:
运气比较好已经排除两个选项了,继续干C和D:
D选项居然正确了:
咱们就选个D试一下?
✅Good,回答正确了:
差异代码检测
下面我们继续下一题:
这次代码终于简化多了。这次全部复制粘贴到jupyter运行后发现,A和C报错,B和D正确运行。
对于B和D这两个选项的代码,我看了好几眼还真看不出区别在哪里,太像 《大家来找茬》 的找茬游戏了。
不过没有关系,咱们有JupyterNotebook来运行Python代码,标准库difflib
让差异无处遁形:
import difflib
text1 = """import csv
def dump_list(file, list):
with open(file, 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
for row in list:
spamwriter.writerow(row)
def load_list(file):
with open(file, 'r', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
yield row
if __name__ == "__main__":
rows = [
['Spam'] * 5 + ['Baked Beans'],
['Spam', 'Lovely Spam', 'Wonderful Spam']
]
list_file = '/tmp/list.csv'
dump_list(list_file, rows)
rows = load_list(list_file)
for row in rows:
for cell in row:
print(cell)"""
text2 = """import csv
def dump_list(file, list):
with open(file, 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
for row in list:
spamwriter.writerow(row)
def load_list(file):
with open(file, 'r', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
yield row
if __name__ == "__main__":
rows = [
['Spam'] * 5 + ['Baked Beans'],
['Spam', 'Lovely Spam', 'Wonderful Spam']
]
list_file = '/tmp/list.csv'
dump_list(list_file, rows)
rows = load_list(list_file)
for row in rows:
while cell in row:
print(cell)"""
def diff_compare(text1, text2, diff_out="diff_result.html", max_width=30, numlines=0, show_all=False):
text1 = [row.rstrip() for row in text1.splitlines(keepends=True)]
text2 = [row.rstrip() for row in text2.splitlines(keepends=True)]
d = difflib.HtmlDiff(wrapcolumn=max_width)
with open(diff_out, 'w', encoding="u8") as f:
f.write(d.make_file(text1, text2, context=not show_all, numlines=numlines))
diff_compare(text1, text2, numlines=3)
运行后,打开生成的html文件:
原来差异在一个选项是for,一个选项是while。当然选for的这个选项啦。
也可以使用IPython.display.HTML
直接在jupyter中显示网页,代码:
from IPython.display import HTML
def diff_compare(text1, text2, diff_out="diff_result.html", max_width=70, numlines=0, show_all=False):
text1 = [row for row in text1.splitlines(keepends=True)]
text2 = [row for row in text2.splitlines(keepends=True)]
d = difflib.HtmlDiff(wrapcolumn=max_width)
return d.make_file(text1, text2, context=not show_all, numlines=numlines)
diff_html = diff_compare(text1, text2, numlines=1)
HTML(diff_html)
效果:
直接在单元格下方展示差异情况。
总体测评
以上就是个人体验Jupyter notebook的全过程,个人感觉还是挺方便的。几乎跟本地自己安装的Jupyter一样的用,想装啥插件也都可以直接装。
不过,我有点想吐槽这个题,根本就不是技术题啊,纯粹就是PK技术达标的情况下谁的眼力好啊。
不过呢,咱们还是可以通过代码差异查找软件,找出差异后进行对比分析,从而快速解题。代码差异查找除了使用我上面所用的代码还可以使用Beyond Compare这个软件。
最后感谢CSDN,这个Jupyter服务虽然还处于VIP内测阶段,但是已经挺好用了,相信未来还会越来越好。等未来正式发布的时候,一定非常好用后,没有VIP的用户们也可以使用该功能。
以上是关于数据分析之在线JupyterNotebook使用小技巧|Python技能树测评的主要内容,如果未能解决你的问题,请参考以下文章