久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    比 matplotlib 效率高十倍的數(shù)據(jù)可視化神器

     heii2 2019-07-20

    https://mp.weixin.qq.com/s/DdME3Py88uujFNcoFIhLgg

    原文鏈接:

    https:///the-next-level-of-data-visualization-in-python-dd6e99039d5

    心理學(xué)上有一個名詞叫“沉沒成本謬誤”,它指如果我們已經(jīng)在一項(xiàng)事業(yè)上花費(fèi)了很多時間,那么即使明知是失敗的,我們?nèi)匀粫A向于繼續(xù)把時間和資源花在上面。

    在數(shù)據(jù)可視化的路上,我也曾犯過這樣的錯誤。

    當(dāng)我明知存在更高效、更具交互性和外觀更好的替代方案時,我卻仍然繼續(xù)使用一個過時的繪圖庫——matplotlib,只是因?yàn)槲以?jīng)花了數(shù)百個小時來學(xué)習(xí) matplotlib 復(fù)雜的語法。

    幸運(yùn)的是,現(xiàn)在有許多的開源繪圖庫可供選擇,經(jīng)過仔細(xì)研究,我發(fā)現(xiàn) plotly 包無論從易用性、交互性還是功能性來看,都有絕對的優(yōu)勢。接下來,我將帶領(lǐng)大家學(xué)會如何用更少的時間繪制更美觀的可視化圖表——通常只需要一行代碼。

    本文所有代碼都可以在 GitHub 上找到。讀者朋友們也可以直接在瀏覽器里打開 NBViewer 鏈接查看效果。地址獲取方式見文末。


    Plotly簡要概述

    plotly Python 包是一個構(gòu)建在 plotly.js 上的開源庫,而后者又是構(gòu)建在 d3.js 上的。我們將使用一個 plotly 的“包裝器”——cufflinks,它可以 plotly 的使用變得更加簡單。整個堆疊順序是cufflinks>plotly>plotly.js>d3.js,意味著我們同時獲得了 Python 的編程高效性和d3強(qiáng)大的圖形交互能力。(畢竟d3.js是全世界公認(rèn)的第一可視化框架!)

    本文中所有工作都是使用 plotly+cufflinks 在 Jupyter Notebook 中完成的。在開始前,我們需要使用 pip install cufflinks plotly 在 Python 環(huán)境中安裝這兩個包,然后在 jupyter notebook 中導(dǎo)入這兩個包:

    # 導(dǎo)入plotly包
    import plotly.plotly as py
    import plotly.graph_objs as go
    from plotly.offline import iplot,init_notebook_mode

    # 使用離線模式的 plotly + cufflinks
    import cufflinks
    cufflinks.go_offline(connected=True)

    單變量分布:直方圖和箱線圖

    單變量-單變量制圖是開始一個數(shù)據(jù)分析的標(biāo)準(zhǔn)方法。直方圖是繪制單變量分布的首選方式。在這里,我使用的數(shù)據(jù)來源是我個人在 medium 網(wǎng)站上所寫過文章的統(tǒng)計信息,讓我們先來制作一個關(guān)于文章點(diǎn)贊次數(shù)的交互式直方圖(df 是一個標(biāo)準(zhǔn)的 Pandas 數(shù)據(jù)結(jié)構(gòu))。

    df['claps'].iplot(kind='hist', xTitle='claps', yTitle='count', title='Claps Distribution')


    如果你已經(jīng)習(xí)慣使用matplotlib,你所需要做的只是在你原有代碼的基礎(chǔ)上添加一個字母,即把 plot 改為 iplot,就可以得到一個更加好看的交互式圖標(biāo)!我們可以通過鼠標(biāo)的滑動獲得更多的數(shù)據(jù)幾節(jié),還可以放大圖的各個部分。

    如果我們想要繪制重疊的直方圖,這很簡單:

    df[['time_started', 'time_published']].iplot( kind='hist', histnorm='percent', barmode='overlay', xTitle='Time of Day', yTitle='(%) of Articles', title='Time Started and Time Published')

    通過一點(diǎn) pandas 處理,我們還可以制作一個條形圖:

    #重采樣獲得每月的均值 e Views and Reads')

    df2 = df[['view','reads','published_date']].set_index('published_date').resample('M').mean()
    df2.iplot(kind='bar', xTitle='Date', yTitle='Average', title='Monthly Average Views and Reads')


    就像我們前面看到的那樣,pandas+plotly+cufflinks 這一組合的功能非常強(qiáng)大。如果我們要繪制一個關(guān)于每篇文章粉絲數(shù)量在不同發(fā)表渠道的分布情況的箱線圖,我們可以先使用 pandas 中DataFrame 的 pivot(透視表) 功能,然后再繪制圖表,如下:

    df.pivot(columns='publication', values='fans').iplot( kind='box', yTitle='fans',title='Fans Distribution by Publication')

    交互式圖表的好處就在于,我們可以盡情地探索圖表中的數(shù)據(jù)。特別是在箱線圖中,包含的信息很多,如果不能局部放大查看,我們可能會錯過這些信息。

    散點(diǎn)圖

    散點(diǎn)圖是大多數(shù)分析的核心,它可以使我們看到變量隨著時間的演變情況,也可以看到兩種變量之間的關(guān)系。

    時間序列

    現(xiàn)實(shí)世界中的大部分?jǐn)?shù)據(jù)都與時間相關(guān)。幸運(yùn)的是,plotly + cufflinks 在設(shè)計之初就考慮到了時間序列的可視化。讓我們來創(chuàng)建一個關(guān)于我寫過文章情況的 dataframe,看看它的各項(xiàng)指標(biāo)是怎么隨著時間變化的。

    #創(chuàng)建一個數(shù)據(jù)集,只包括發(fā)布在Towards Data Science渠道的文章
    tds = df[df['publication'] == 'Towards Data Science']. set_index('published_date')

    #將閱讀時間作為時間序列
    tds[['claps', 'fans', 'title']].iplot( y='claps', mode='lines+markers', secondary_y = 'fans', secondary_y_title='Fans', xTitle='Date', yTitle='Claps', text='title', title='Fans and Claps over Time')

    我們在一行代碼里完成了很多不同的事情:

    - 自動獲得了格式友好的時間序列作為x軸

    - 添加一個次坐標(biāo)軸(第二y軸),因?yàn)樯蠄D中的兩個變量的值范圍不同。

    - 添加文章的標(biāo)題到每個數(shù)據(jù)點(diǎn)中(鼠標(biāo)放上去可以顯示文章名和變量值)

    如果要從圖表上了解更多的信息,我們還可以很容易地添加文本注釋:

    tds_monthly_totals.iplot(mode='lines+markers+text', text=text, y='word_count', opacity=0.8, xTitle='Date', yTitle='Word Count',title='Total Word Count by Month')

    對于由第三個分類變量著色的雙變量散點(diǎn)圖,我們使用:

    #read_time代表文章所需閱讀時長,read_ratio代表閱讀比例,即閱讀文章的人數(shù)/點(diǎn)擊查看的人數(shù)
    df.iplot( x='read_time', y='read_ratio',

    # 定義類別變量
    categories='publication',xTitle='Read
    Time',yTitle='Reading Percent', title='Reading Percent vs Read Ratio by Publication')

    如果要在圖表中體現(xiàn)三個數(shù)值變量,我們還可以使用氣泡圖,如下圖:橫坐標(biāo)、縱坐標(biāo)、氣泡的大小分別代表三個不同的變量——文章字?jǐn)?shù)的對數(shù)、閱讀數(shù)量、閱讀比例。

    tds.iplot(x='word_count',y='reads', size='read_ratio',text=text, mode='markers',

    # Log xaxis
    layout=dict(xaxis=dict(type='log', title='Word Count'), yaxis=dict(title='Reads'), title='Reads vs Log Word Count Sized by Read Ratio'))

    再做一點(diǎn)工作,我們甚至可以在一個圖表中體現(xiàn)四個變量!


    結(jié)合 pandas 對數(shù)據(jù)進(jìn)行統(tǒng)計處理,我們可以得到很多非常有價值的圖,比如下面這張關(guān)于不同文章發(fā)表渠道的讀者點(diǎn)擊查看數(shù)量的變化趨勢圖,顯然名為Toward Data Science的發(fā)表渠道能給文章帶來更多的點(diǎn)擊量。

    更高級的圖表

    接下來所講述的圖表大家可能不會經(jīng)常用到,但是非常酷炫,值得了解一下。同樣,我們?nèi)匀恢皇褂靡恍写a就可以完成這些超級圖表。

    散點(diǎn)圖矩陣

    當(dāng)我們想要探索許多變量之間的關(guān)系時,散點(diǎn)圖矩陣是非常好的選擇。

    import plotly.figure_factory as ff
    figure = ff.create_scatterplotmatrix(df[['claps', 'publication','views','read_ratio','word_count']],diag='histogram', index='publication')

    以上的散點(diǎn)矩陣圖仍然是可以交互的,可以自由放大縮小,查看各個數(shù)據(jù)點(diǎn)的詳細(xì)信息。

    相關(guān)系數(shù)熱力圖

    為了將數(shù)值型變量的相關(guān)性可視化,我們可以先計算相關(guān)系數(shù),接著就可以創(chuàng)建一個帶注釋的熱力圖:

    corrs = df.corr()
    figure = ff.create_annotated_heatmap(z=corrs.values,x=list(corrs.columns),y=list(corrs.index), annotation_text=corrs.round(2).values, showscale=True)

    我們還可以繪制非常酷炫的3D表面圖和3D氣泡圖:


    云制圖——Plotly Chart Studio

    當(dāng)你使用 plotly 在 notebook 中繪制圖表時,你可能注意到了每幅圖的右下角都有一個鏈接 “Export to ” 。如果你點(diǎn)擊該鏈接,就會跳轉(zhuǎn)到名為chart studio的云制圖平臺,然后你就可以對自己的圖標(biāo)進(jìn)行潤色,添加注釋、改改顏色、清理一些不必要的內(nèi)容等等。

    你還可以在線發(fā)布該圖表,任何人可以直接通過鏈接訪問到你的圖表。
    (比如我的這個3D圖,在瀏覽器中輸入后方鏈接可直接抵達(dá):https:///~Allencxl/3/

    前面所述的內(nèi)容還不算是這個庫的所有功能,非常鼓勵各位小伙伴們?nèi)ゲ榭?plotly 和 cufflinks 的文檔,肯定會有更多不可思議的神級可視化在等著你!



    美國風(fēng)力發(fā)電廠的分布情況

    總結(jié)

    我已經(jīng)因?yàn)楣虉?zhí)地使用matploblib而浪費(fèi)了太多時間,所以希望大家能通過這篇文章學(xué)習(xí)到一種新的方式提升自己的繪圖效率。
    另外,當(dāng)我們在選擇繪圖庫的時候,有幾點(diǎn)是永遠(yuǎn)需要考慮的:

    - 用少量的代碼進(jìn)行數(shù)據(jù)探索

    - 可以實(shí)時與數(shù)據(jù)交互,查看數(shù)據(jù)子集情況

    - 根據(jù)自己的需要,選擇性挖掘數(shù)據(jù)中的細(xì)節(jié)

    - 非常便利地潤色最終演示的圖表

    而到目前為止,能夠在 Python 中實(shí)現(xiàn)上述需求的不二選擇便是 plotly。plotly 使我們能夠快速地進(jìn)行可視化,讓我們通過與圖表的交互更好地了解我們的數(shù)據(jù)。日常工作中,在使用其他繪圖庫的時候,我感覺繪圖是一項(xiàng)單調(diào)乏味的任務(wù),但是使用 plotly 時,我覺得繪圖是數(shù)據(jù)科學(xué)中相當(dāng)有趣的工作之一!

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 精品无码人妻一区二区三区| 好男人官网资源在线观看| 人妻在卧室被老板疯狂进入| 国产精品福利中文字幕| 正在播放酒店约少妇高潮| 亚洲高清揄拍自拍| 亚洲欧美人成电影在线观看| 日韩精品无码一区二区三区AV | 久久综合九色综合欧洲98| 国产乱码卡二卡三卡4| 亚洲欧洲日韩国内精品| 免费无码成人AV片在线在线播放| 亚洲日韩欧洲无码AV夜夜摸| 成人午夜大片免费看爽爽爽| 久久精品国产99久久久古代| 性欧美VIDEOFREE高清大喷水| 午夜性色一区二区三区不卡视频 | 另类 亚洲 图片 激情 欧美 | 色妞色综合久久夜夜| 免费观看的AV毛片的网站| 精品乱码一区二区三四五区| 蜜桃久久精品成人无码AV| 国产成人高清亚洲综合| 猫咪AV成人永久网站在线观看| 国产亚洲精品AA片在线播放天| 后入内射国产一区二区| 国产精品无码a∨麻豆| 亚洲中文字幕久久精品无码A| 日本久久99成人网站| 四虎成人精品无码| 国产午夜精品一区理论片| 久久人人爽人人爽人人av| 精品亚洲欧美无人区乱码| 东京热人妻丝袜无码AV一二三区观| 精品人妻少妇嫩草AV无码专区| 亚洲中文字幕无码一区无广告| 国产av中文字幕精品| 99久久99久久精品国产片| 国产午夜亚洲精品不卡下载| 94人妻少妇偷人精品| 无码精品国产D在线观看|