1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        手把手教你使用Pandas繪制最常用的幾類統(tǒng)計圖形

        共 3633字,需瀏覽 8分鐘

         ·

        2020-11-11 20:01

        柱狀圖箱線圖密度圖條形圖散點圖折線圖保存繪圖總結(jié)

        可視化是用來探索性數(shù)據(jù)分析最強大的工具之一。Pandas庫包含基本的繪圖功能,可以讓你創(chuàng)建各種繪圖。Pandas中的繪圖是在matplotlib之上構(gòu)建的,如果你很熟悉matplotlib你會驚奇地發(fā)現(xiàn)他們的繪圖風格是一樣的。

        本案例用到的數(shù)據(jù)集是關(guān)于鉆石的。

        import?numpy?as?np
        import?pandas?as?pd
        import?matplotlib

        %matplotlib?inline
        diamonds?=?pd.read_csv("diamonds.csv")
        diamonds?=?diamonds.drop("Unnamed:?0",?axis=1)

        print(diamonds.shape)????????

        diamonds.head(5)
        (53940,?10)

        輸出結(jié)果顯示,數(shù)據(jù)集包含53940個不同鉆石的10個特征,其中有數(shù)值變量也有分類變量。

        柱狀圖

        柱狀圖是一個單變量圖(注意區(qū)分柱狀圖和條形圖),它將一個數(shù)值變量分組到各個數(shù)值單元中,并顯示每個單元中的觀察值數(shù)量。直方圖是了解數(shù)值變量分布的一種有用工具。所用到的方法是df.hist()

        diamonds.hist(column="carat",????????#?具體列
        ??????????????figsize=(8,8),?????????#?圖片大小
        ??????????????color="blue");?????????#?繪畫顏色

        從圖上我們可以看到鉆石重量的分布是十分傾斜的:大多數(shù)鉆石大約1克拉及以下,但也有極少量極端值。
        為了獲得更多細節(jié)的數(shù)據(jù),我們可以增加分箱的數(shù)量來查看更小范圍內(nèi)的鉆石重量,通過限制x軸的寬度使整個圖形在畫布上顯得不那么擁擠。

        diamonds.hist(column="carat",????????
        ??????????????figsize=(8,8),?????????
        ??????????????color="blue",??????????
        ??????????????bins=50,???????????????
        ??????????????range=?(0,3.5));???????

        這個直方圖讓我們更好地了解了分布中的一些細微差別,但我們不能確定它是否包含所有數(shù)據(jù)。將X軸限制在3.5可能會剔除一些異常值,以至于它們在原始圖表中沒有顯示。接下來看看有沒有鉆石大于3.5克拉:

        diamonds[diamonds["carat"]?>?3.5]

        哦豁,真的有9顆鉆石比3.5克拉大,這些'怪種'鉆石我們應該關(guān)心嗎?出于數(shù)據(jù)探索的目的,我們完全可以舍棄這些點,但如果是把數(shù)據(jù)的全貌展示給別人看,我覺得有必要詳細說明:范圍之外還存在9個離群點。

        箱線圖

        箱線圖是另一種單變量圖, 方法pd.boxplot()

        diamonds.boxplot(column="carat");

        箱線圖的中心框代表中間50%的觀察值,中心線代表中位數(shù)。
        boxplot最有用的特性之一是能夠生成并排的boxplots。每個分類變量都在一個不同的boxside上繪制一個分類變量。接下來將鉆石價格按鉆石凈度分成兩部分來做一個并排的方框圖:

        diamonds.boxplot(column="price",????????
        ?????????????????by=?"clarity",?????????
        ?????????????????figsize=?(8,8));???????

        上面的箱線圖很奇怪:按理說清晰度更好的鉆石能賣到更高的價格,然而清晰度最高的鉆石(IF)的中間價卻比低凈度鉆石低!這是為什么呢?也許下面這個圖可以給我們一些啟示:

        diamonds.boxplot(column="carat",????????
        ?????????????????by=?"clarity",?????????
        ?????????????????figsize=?(8,8));???????

        上面的圖表顯示,透明度較低的鉆石往往更大,透明度高的鉆石更加小巧。由于尺寸重量是決定鉆石價值的另一個重要因素,因此低透明度鉆石的中間價較高也就不足為奇了。

        密度圖

        密度圖以連續(xù)曲線顯示數(shù)值變量的分布。它類似于柱狀圖,但密度圖能更好地顯示分布的基本形狀。series.plot(kind="density")

        diamonds["carat"].plot(kind="density",?
        ??????????????????????figsize=(8,8),????
        ??????????????????????xlim=?(0,5));?????

        條形圖

        條形圖是直觀顯示分類變量計數(shù)的圖形,df.plot(kind="bar"):

        carat_table?=?pd.crosstab(index=diamonds["clarity"],?columns="count")
        carat_table
        carat_table.plot(kind="bar",
        ?????????????????figsize=(8,8));

        可以使用二維表格創(chuàng)建堆積條形圖。堆積條形圖顯示每個條形圖中另一個變量的分布:

        carat_table?=?pd.crosstab(index=diamonds["clarity"],?
        ??????????????????????????columns=diamonds["color"])

        carat_table
        carat_table.plot(kind="bar",?
        ?????????????????figsize=(8,8),
        ?????????????????stacked=True);

        分組條形圖是堆疊條形圖的另一種選擇,設置stacked=False即可:

        carat_table.plot(kind="bar",?
        ?????????????????figsize=(8,8),
        ?????????????????stacked=False);

        散點圖

        散點圖是雙變量圖,采用兩個數(shù)值變量,并在x/y平面上繪制數(shù)據(jù)點。創(chuàng)建單個散點圖使用方法df.plot(kind="scatter"):

        diamonds.plot(kind="scatter",?????#?Create?a?scatterplot
        ??????????????x="carat",??????????#?Put?carat?on?the?x?axis
        ??????????????y="price",??????????#?Put?price?on?the?y?axis
        ??????????????figsize=(10,10),
        ??????????????ylim=(0,20000));

        盡管上面的散點圖有許多重疊點,但它仍然讓我們對鉆石克拉重量和價格之間的關(guān)系有了一些了解:大鉆石通常更貴。

        折線圖

        折線圖通常用于繪制時間序列數(shù)據(jù):

        years?=?[y?for?y?in?range(1950,2016)]

        readings?=?[(y+np.random.uniform(0,20)-1900)?for?y?in?years]

        time_df?=?pd.DataFrame({"year":years,
        ????????????????????????"readings":readings})


        time_df.plot(x="year",
        ?????????????y="readings",
        ?????????????figsize=(9,9));

        保存繪圖

        如果要保存圖片供以后使用,兩步就可以輕松解決:首先用plot.get_figure(),然后用figure.savefig("filename")。圖片可以保存為多種常見的文件格式,例如png、jpeg和pdf。

        my_plot?=?time_df.plot(x="year",????
        ?????????????y="readings",
        ?????????????figsize=(9,9))

        my_fig?=?my_plot.get_figure()????????????

        my_fig.savefig("line_plot_example.png")??

        總結(jié)

        Python繪圖生態(tài)系統(tǒng)有許多不同的庫,大部分人可能會很難從中抉擇,不知道該如何人下手。Pandas繪圖函數(shù)使你能夠快速地可視化和瀏覽數(shù)據(jù)。Pandas繪圖函數(shù)并沒有提供盡善盡美的所有功能,但它們通常足以完成任務。


        瀏覽 63
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操逼黄色一级网站 | 999久久久 | 性俄罗斯熟白嫩hd | 免费播放男人添女人下边电影 | 做爱在线观看视频在线观看 | 16—17女人毛片毛片国内 | 国产18在线 | 久热伊人 | 淫婷婷 | 啊啊啊啊啊靠逼 |