小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)分析之在線JupyterNotebook使用小技巧|Python技能樹測(cè)評(píng)

 小小明代碼實(shí)體 2021-11-30

大家好,我是小小明。

受CSDN官方邀請(qǐng),前來測(cè)評(píng)《python 技能樹》 ,活動(dòng)地址:https://bbs.csdn.net/topics/600937310

XDM,一起來測(cè)評(píng),一起來拿獎(jiǎng)吧!獎(jiǎng)品多多,福利多多噢~

首先,我們打開內(nèi)測(cè)技能樹頁面:

image-20210927004723656

眾所周知,jupyter是數(shù)據(jù)分析領(lǐng)域最常用的工具,所以我直接進(jìn)入數(shù)據(jù)分析版塊。

雖然目前看到選項(xiàng)過于單薄,但是不耽誤我們玩玩csdn的jupyter。

下面我們就點(diǎn)開第一個(gè)模塊的第一題開始玩玩吧:

image-20210927005251802

我去,雖然只是一道選擇題,但實(shí)在是已經(jīng)嚇?biāo)缹殞毩?#xff0c;這代碼也太長(zhǎng)了點(diǎn)。那么先隨便選個(gè)試試:

image-20210927005428751

嘿嘿,選擇A點(diǎn)提交后,在線Jupyter的入口就出現(xiàn)了。看我怎么跑代碼干翻你這道 《大家來找茬》 的題目。

點(diǎn)擊前往就出現(xiàn)了,服務(wù)啟動(dòng)的頁面:

image-20210927005624830

等待啟動(dòng)完畢后,就進(jìn)入到了JupyterNoteBook的開發(fā)頁面:

image-20210927005805876

作為一名資深jupyter玩家,這點(diǎn)功能和插件顯然是不滿足要求的,下面我們看看如何安裝一些插件:

給JupyterNoteBook安裝插件

首先點(diǎn)擊open:

image-20210927005943637

然后進(jìn)入Nbextensions插件選項(xiàng)卡,我將我最需要的三個(gè)插件打勾:

image-20210927010052441

對(duì)于Autopep8這玩意,我們需要pip裝點(diǎn)庫(kù),回到前面的代碼界面執(zhí)行:

!pip install autopep8

image-20210927010339485

這是因?yàn)槲疑洗问褂脮r(shí)已經(jīng)下載過有緩存,所以直接就安裝好了。

安裝完成后刷新網(wǎng)頁剛才選擇的插件就會(huì)生效。然后給代碼框加個(gè)默認(rèn)行號(hào)顯示:

image-20210927010647924

展開目錄

點(diǎn)開目錄按鈕后,就可以編輯Markdown文本:

image-20210927011215614

如何將一個(gè)代碼節(jié)點(diǎn)轉(zhuǎn)換為Markdown節(jié)點(diǎn)呢? 按下快捷鍵H即可打開快捷鍵菜單:

image-20210927011842430

這意味著,只需要記住H快捷鍵,其他快捷鍵都通過這個(gè)面板隨時(shí)查詢。

可以看到按下ESC退出進(jìn)入命令行模式后,按下快捷鍵M即可將其轉(zhuǎn)換為Markdown文本節(jié)點(diǎn),數(shù)字快捷鍵1~6即可將將其轉(zhuǎn)換對(duì)應(yīng)等級(jí)的標(biāo)題。

復(fù)制代碼并運(yùn)行

點(diǎn)擊右上角的復(fù)制按鈕即可復(fù)制代碼:

image-20210927011713840

然后粘貼到JupyterNotebook中:

image-20210927012903790

粘貼完,代碼是這種使用制表符\t縮進(jìn)的形式,現(xiàn)在按下快捷鍵Ctrl+L即可啟動(dòng)autopep8代碼格式化:

image-20210927013031408

可以看到格式化之后的代碼都是空格縮進(jìn)的形式。

根據(jù)右上角的提示即可運(yùn)行代碼,運(yùn)行后:

image-20210927013148710

報(bào)錯(cuò),顯然我們可以排除A選項(xiàng)。

三種運(yùn)行方式的快捷鍵見Cell菜單:

image-20210927013414972

分別表示只運(yùn)行當(dāng)前單元格、運(yùn)行并選擇下一個(gè)單元格 和 運(yùn)行并向下插入一個(gè)單元格。

大家可以都試試,感受一下區(qū)別。

復(fù)制B選項(xiàng)的代碼并運(yùn)行后也報(bào)錯(cuò):

image-20210927013637039

運(yùn)氣比較好已經(jīng)排除兩個(gè)選項(xiàng)了,繼續(xù)干C和D:

image-20210927014214926
D選項(xiàng)居然正確了:

image-20210927014322205
咱們就選個(gè)D試一下?
?Good,回答正確了:

image-20210927014419052

差異代碼檢測(cè)

下面我們繼續(xù)下一題:

image-20210927014815822

這次代碼終于簡(jiǎn)化多了。這次全部復(fù)制粘貼到j(luò)upyter運(yùn)行后發(fā)現(xiàn),A和C報(bào)錯(cuò),B和D正確運(yùn)行。

image-20210927021622118

對(duì)于B和D這兩個(gè)選項(xiàng)的代碼,我看了好幾眼還真看不出區(qū)別在哪里,太像 《大家來找茬》 的找茬游戲了。

不過沒有關(guān)系,咱們有JupyterNotebook來運(yùn)行Python代碼,標(biāo)準(zhǔn)庫(kù)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)

運(yùn)行后,打開生成的html文件:

image-20210927021846197

原來差異在一個(gè)選項(xiàng)是for,一個(gè)選項(xiàng)是while。當(dāng)然選for的這個(gè)選項(xiàng)啦。
也可以使用IPython.display.HTML直接在jupyter中顯示網(wǎng)頁,代碼:

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)

效果:
image-20210927141136225
直接在單元格下方展示差異情況。

總體測(cè)評(píng)

以上就是個(gè)人體驗(yàn)Jupyter notebook的全過程,個(gè)人感覺還是挺方便的。幾乎跟本地自己安裝的Jupyter一樣的用,想裝啥插件也都可以直接裝。

不過,我有點(diǎn)想吐槽這個(gè)題,根本就不是技術(shù)題啊,純粹就是PK技術(shù)達(dá)標(biāo)的情況下誰的眼力好啊。

不過呢,咱們還是可以通過代碼差異查找軟件,找出差異后進(jìn)行對(duì)比分析,從而快速解題。代碼差異查找除了使用我上面所用的代碼還可以使用Beyond Compare這個(gè)軟件。

最后感謝CSDN,這個(gè)Jupyter服務(wù)雖然還處于VIP內(nèi)測(cè)階段,但是已經(jīng)挺好用了,相信未來還會(huì)越來越好。等未來正式發(fā)布的時(shí)候,一定非常好用后,沒有VIP的用戶們也可以使用該功能。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多