<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3633字,需瀏覽 8分鐘

           ·

          2020-11-11 20:01

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

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

          本案例用到的數(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克拉及以下,但也有極少量極端值。
          為了獲得更多細(xì)節(jié)的數(shù)據(jù),我們可以增加分箱的數(shù)量來查看更小范圍內(nèi)的鉆石重量,通過限制x軸的寬度使整個圖形在畫布上顯得不那么擁擠。

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

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

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

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

          箱線圖

          箱線圖是另一種單變量圖, 方法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);

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

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

          散點(diǎn)圖

          散點(diǎn)圖是雙變量圖,采用兩個數(shù)值變量,并在x/y平面上繪制數(shù)據(jù)點(diǎn)。創(chuàng)建單個散點(diǎn)圖使用方法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));

          盡管上面的散點(diǎn)圖有許多重疊點(diǎn),但它仍然讓我們對鉆石克拉重量和價格之間的關(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ù)并沒有提供盡善盡美的所有功能,但它們通常足以完成任務(wù)。


          瀏覽 63
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本不卡一区在线 | www日日日 | 成人亚洲A片Ⅴ一区二区三区动漫 | 哪里有毛片看 | 人人干人人模 |