六、可視化
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
表格是一種組織和可視化數(shù)據(jù)的強(qiáng)大方式。然而,無(wú)論數(shù)據(jù)如何組織,數(shù)字的大型表格可能難以解釋。 有時(shí)解釋圖片比數(shù)字容易得多。
在本章中,我們將開(kāi)發(fā)一些數(shù)據(jù)分析的基本圖形方法。 我們的數(shù)據(jù)源是互聯(lián)網(wǎng)電影數(shù)據(jù)庫(kù)(IMDB),這是一個(gè)在線數(shù)據(jù)庫(kù),包含電影,電視節(jié)目,和視頻游戲等信息。Box Office Mojo 網(wǎng)站提供了許多 IMDB 數(shù)據(jù)摘要,我們已經(jīng)采用了其中一些。 我們也使用了 The Numbers 的數(shù)據(jù)摘要,這個(gè)網(wǎng)站的口號(hào)是“數(shù)據(jù)和電影業(yè)務(wù)的相遇之處”。
散點(diǎn)圖和線形圖
actors表包含好萊塢的男性和女性演員的數(shù)據(jù)。 其中的列是:
| 列 | 內(nèi)容 |
|---|---|
| Actor | 演員名稱 |
| Total Gross | 演員所有電影的國(guó)內(nèi)票房總收入(百萬(wàn)美元) |
| Number of Movies | 演員所演的電影數(shù)量 |
| Average per Movie | 總收入除以電影數(shù)量 |
| #1 Movie | 演員所演的票房最高的電影 |
| Gross | 演員的 #1 電影的國(guó)內(nèi)票房總收入(百萬(wàn)美元) |
在總票房的計(jì)算中,數(shù)據(jù)的制表人沒(méi)有包括一些電影,其中演員是客串角色或陳述角色,沒(méi)有太多的登場(chǎng)時(shí)間。
這個(gè)表格有 50 行,對(duì)應(yīng)著 50 個(gè)最頂級(jí)的演員。 這個(gè)表已經(jīng)按照Total Gross排序了,所以很容易看出,Harrison Ford是最棒的演員。 總的來(lái)說(shuō),他的電影的國(guó)內(nèi)票房收入比其他演員的電影多。
actors = Table.read_table('actors.csv')
actors
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
|---|---|---|---|---|---|
| Harrison Ford | 4871.7 | 41 | 118.8 | Star Wars: The Force Awakens | 936.7 |
| Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4 |
| Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9 |
| Tom Hanks | 4340.8 | 44 | 98.7 | Toy Story 3 | 415 |
| Robert Downey, Jr. | 3947.3 | 53 | 74.5 | The Avengers | 623.4 |
| Eddie Murphy | 3810.4 | 38 | 100.3 | Shrek 2 | 441.2 |
| Tom Cruise | 3587.2 | 36 | 99.6 | War of the Worlds | 234.3 |
| Johnny Depp | 3368.6 | 45 | 74.9 | Dead Man's Chest | 423.3 |
| Michael Caine | 3351.5 | 58 | 57.8 | The Dark Knight | 534.9 |
| Scarlett Johansson | 3341.2 | 37 | 90.3 | The Avengers | 623.4 |
(已省略 40 行)
術(shù)語(yǔ)。變量是我們稱之為“特征”的東西的正式名稱,比如'number of movies'。 術(shù)語(yǔ)“變量”強(qiáng)調(diào)了,對(duì)于不同的個(gè)體,這個(gè)特征可以有不同的值 - 演員所演電影的數(shù)量因人而異。
擁有數(shù)值的變量(如'number of movies'或'average gross receipts per movie')的變量稱為定量或數(shù)值變量。
散點(diǎn)圖
散點(diǎn)圖展示兩個(gè)數(shù)值變量之間的關(guān)系。 在前面的章節(jié)中,我們看到了一個(gè)散點(diǎn)圖的例子,我們看了兩個(gè)經(jīng)典小說(shuō)的時(shí)間段和角色數(shù)量。
Table的scatter方法繪制一個(gè)散點(diǎn)圖,由表格的每一行組成。它的第一個(gè)參數(shù)是要在橫軸上繪制的列標(biāo)簽,第二個(gè)參數(shù)是縱軸上的列標(biāo)簽。
actors.scatter('Number of Movies', 'Total Gross')

散點(diǎn)圖包含 50 個(gè)點(diǎn),表中的每個(gè)演員為一個(gè)。 一般來(lái)說(shuō),你可以看到它向上傾斜。 一個(gè)演員的電影越多,所有這些電影的總收入就越多。
在形式上,我們說(shuō)圖表顯示了變量之間的關(guān)聯(lián),并且關(guān)聯(lián)是正的:一個(gè)變量的高值往往與另一個(gè)變量的高值相關(guān)聯(lián),而低值也是一樣,通常情況下。
當(dāng)然有一些變化。 一些演員有很多電影,但總收入中等。 其他人電影數(shù)量中等,但收入很高。正相關(guān)只是一個(gè)大體趨勢(shì)的敘述。
在課程后面,我們將學(xué)習(xí)如何量化關(guān)聯(lián)。目前,我們只是定性地思考。
現(xiàn)在我們已經(jīng)探索了電影的數(shù)量與總收入的關(guān)系,讓我們把注意力轉(zhuǎn)向它與每部電影的平均收入的關(guān)系。
actors.scatter('Number of Movies', 'Average per Movie')

這是一個(gè)截然不同的情況,并表現(xiàn)出負(fù)相關(guān)。 一般來(lái)說(shuō),演員的電影數(shù)量越多,每部電影的平均收入就越少。
另外,有一個(gè)點(diǎn)是非常高的,在繪圖的左邊。 它對(duì)應(yīng)于一個(gè)電影數(shù)量很少,每部電影平均值很高的演員。 這個(gè)點(diǎn)是異常的。 它位于數(shù)據(jù)的一般范圍之外。 事實(shí)上,這與繪圖中的其他所有點(diǎn)相差甚遠(yuǎn)。
我們將通過(guò)查看繪圖的左右兩端的點(diǎn),來(lái)進(jìn)一步檢查負(fù)相關(guān)。
對(duì)于右端,我們通過(guò)查看沒(méi)有異常值的部分來(lái)放大圖的主體。
no_outlier = actors.where('Number of Movies', are.above(10))
no_outlier.scatter('Number of Movies', 'Average per Movie')

負(fù)相關(guān)仍然清晰可見(jiàn)。 讓我們找出一些演員,對(duì)應(yīng)位于繪圖右側(cè)的點(diǎn),這里電影數(shù)量較多:
actors.where('Number of Movies', are.above(60))
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
|---|---|---|---|---|---|
| Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4 |
| Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9 |
| Robert DeNiro | 3081.3 | 79 | 39 | Meet the Fockers | 279.3 |
| Liam Neeson | 2942.7 | 63 | 46.7 | The Phantom Menace | 474.5 |
偉大的演員羅伯特·德尼羅(Robert DeNiro)擁有最高的電影數(shù)量和最低的每部電影的平均收入。 其他優(yōu)秀的演員在不遠(yuǎn)處的點(diǎn),但德尼羅在極遠(yuǎn)處。
為了理解負(fù)相關(guān),請(qǐng)注意,演員所演的電影越多,在風(fēng)格,流派和票房方片,這些電影變化就越大。 例如,一個(gè)演員可能會(huì)出現(xiàn)在一些高收入的動(dòng)作電影或喜劇中(如 Meet Fockers),也可能是優(yōu)秀但不會(huì)吸引大量人群的小眾電影。 因此,演員的每部電影的平均收入值可能相對(duì)較低。
為了從不同的角度來(lái)看待這個(gè)觀點(diǎn),現(xiàn)在讓我們來(lái)看看這個(gè)異常點(diǎn)。
actors.where('Number of Movies', are.below(10))
| Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross |
|---|---|---|---|---|---|
| Anthony Daniels | 3162.9 | 7 | 451.8 | Star Wars: The Force Awakens | 936.7 |
作為一名演員,安東尼·丹尼爾斯(Anthony Daniels)可能沒(méi)有羅伯特·德尼羅(Robert DeNiro)的身材。 但是他的 7 部電影的平均收入?yún)s高達(dá)每部電影近 4.52 億美元。
這些電影是什么? 你可能知道《星球大戰(zhàn):C-3PO》中的 Droid C-3PO,那是金屬機(jī)甲里面的安東尼·丹尼爾斯。 他扮演 C-3PO。

丹尼爾斯先生的全部電影(除了客串)都是由高收入的“星球大戰(zhàn)”系列電影組成的。 這就解釋了他的高平均收入和低電影數(shù)量。
類(lèi)型和制作預(yù)算等變量,會(huì)影響電影數(shù)量與每部電影的平均收入之間的關(guān)聯(lián)。 這個(gè)例子提醒人們,研究?jī)蓚€(gè)變量之間的關(guān)聯(lián),往往也涉及到了解其他相關(guān)的變量。
線形圖
線形圖是最常見(jiàn)的可視化圖形之一,通常用于研究時(shí)序型的趨勢(shì)和模式。
movies_by_year表包含了 1980 年到 2015 年間,美國(guó)電影公司制作的電影的數(shù)據(jù)。這些列是:
| 列 | 內(nèi)容 |
|---|---|
| Year | 年份 |
| Total Gross | 所有發(fā)行電影的國(guó)內(nèi)總票房收入(以百萬(wàn)美元為單位) |
| Number of Movies | 發(fā)行的電影數(shù)量 |
| #1 Movie | 收入最高的電影 |
movies_by_year = Table.read_table('movies_by_year.csv')
movies_by_year
| Year | Total Gross | Number of Movies | #1 Movie |
|---|---|---|---|
| 2015 | 11128.5 | 702 | Star Wars: The Force Awakens |
| 2014 | 10360.8 | 702 | American Sniper |
| 2013 | 10923.6 | 688 | Catching Fire |
| 2012 | 10837.4 | 667 | The Avengers |
| 2011 | 10174.3 | 602 | Harry Potter / Deathly Hallows (P2) |
| 2010 | 10565.6 | 536 | Toy Story 3 |
| 2009 | 10595.5 | 521 | Avatar |
| 2008 | 9630.7 | 608 | The Dark Knight |
| 2007 | 9663.8 | 631 | Spider-Man 3 |
| 2006 | 9209.5 | 608 | Dead Man's Chest |
(省略了 26 行)
Table的plot方法產(chǎn)生線形圖。 它的兩個(gè)參數(shù)與散點(diǎn)圖相同:首先是橫軸上的列,然后是縱軸上的列。 這是 1980 年到 2015 年間每年發(fā)行的電影數(shù)量的線形圖。
movies_by_year.plot('Year', 'Number of Movies')

雖然每年的數(shù)字都有明顯的變化,但圖形急劇上升,然后呈現(xiàn)平緩的上升趨勢(shì)。 20 世紀(jì) 80 年代早期的劇增,部分是由于在上世紀(jì) 70 年代,電影制作人推動(dòng)電影業(yè)的幾年后,電影制片廠重新回到電影制作的前沿。
我們的重點(diǎn)將放在最近幾年。 根據(jù)電影的主題,對(duì)應(yīng) 2000 年到 2015 年的行,分配給名稱century_21。
century_21 = movies_by_year.where('Year', are.above(1999))
century_21.plot('Year', 'Number of Movies')

2008 年的全球金融危機(jī)有明顯的效果 - 2009 年發(fā)行的電影數(shù)量急劇下降。
但是,美元數(shù)量并沒(méi)有太大的變化。
century_21.plot('Year', 'Total Gross')

盡管發(fā)生了金融危機(jī),電影發(fā)行的數(shù)量也少得多,但 2009 年的國(guó)內(nèi)總收入仍高于 2008 年。
造成這種矛盾的一個(gè)原因是,人們?cè)诮?jīng)濟(jì)衰退時(shí)往往會(huì)去看電影。 “經(jīng)濟(jì)低迷時(shí)期,美國(guó)人涌向電影”,“紐約時(shí)報(bào)”于 2009 年 2 月說(shuō)。文章引用南加州大學(xué)的馬丁·卡普蘭(Martin Kaplan)的話說(shuō):“人們想要忘記自己的煩惱,想和別人在一起?!?當(dāng)節(jié)假日和昂貴的款待難以負(fù)擔(dān),電影提供了受歡迎的娛樂(lè)和寬慰。
2009 年的高票房收入的另一個(gè)原因是,電影《阿凡達(dá)》及其 3D 版本。 阿凡達(dá)不僅是 2009 年的第一部電影,它也是有史以來(lái)第二高的總票房電影,我們將在后面看到。
century_21.where('Year', are.equal_to(2009))
| Year | Total Gross | Number of Movies | #1 Movie |
|---|---|---|---|
| 2009 | 10595.5 | 521 | Avatar |
類(lèi)別分許
可視化類(lèi)別分布
許多數(shù)據(jù)不以數(shù)字的形式出現(xiàn)。 數(shù)據(jù)可以是音樂(lè)片段,或地圖上的地方。 他們也可以是類(lèi)別,你可以在里面放置個(gè)體。 以下是一些類(lèi)別變量的例子。
- 個(gè)體是冰淇淋紙盒,變量就是紙盒里的味道。
- 個(gè)體是職業(yè)籃球運(yùn)動(dòng)員,變量是球員的隊(duì)伍。
- 個(gè)體是年,而變量是今年最高票房電影的流派。
- 個(gè)體是調(diào)查對(duì)象,變量是他們從“完全不滿意”,“有點(diǎn)滿意”和“非常滿意”中選擇的回答。
icecream表包含 30 盒冰激凌的數(shù)據(jù)。
icecream = Table().with_columns(
'Flavor', make_array('Chocolate', 'Strawberry', 'Vanilla'),
'Number of Cartons', make_array(16, 5, 9)
)
icecream
| Flavor | Number of Cartons |
|---|---|
| Chocolate | 16 |
| Strawberry | 5 |
| Vanilla | 9 |
分類(lèi)變量“口味”的值是巧克力,草莓和香草。 表格顯示了每種口味的紙盒數(shù)量。 我們稱之為分布表。 分布顯示了所有變量的值,以及每個(gè)變量的頻率。
條形圖
條形圖是可視化類(lèi)別分布的熟悉方式。 它為每個(gè)類(lèi)別顯示一個(gè)條形。 條形的間隔相等,寬度相同。 每個(gè)條形的長(zhǎng)度與相應(yīng)類(lèi)別的頻率成正比。
我們使用橫條繪制條形圖,因?yàn)檫@樣更容易標(biāo)注條形圖。 所以Table的方法稱為barh。 它有兩個(gè)參數(shù):第一個(gè)是類(lèi)別的列標(biāo)簽,第二個(gè)是頻率的列標(biāo)簽。
icecream.barh('Flavor', 'Number of Cartons')

如果表格只包含一列類(lèi)別和一列頻率(如冰淇淋),則方法調(diào)用甚至更簡(jiǎn)單。 你可以指定包含類(lèi)別的列,barh將使用另一列中的值作為頻率。
icecream.barh('Flavor')

類(lèi)別分布的特征
除了純粹的視覺(jué)差異之外,條形圖和我們?cè)谇懊嬲鹿?jié)中看到的兩個(gè)圖表之間還有一個(gè)重要的區(qū)別。 它們是散點(diǎn)圖和線圖,兩者都顯示兩個(gè)數(shù)值變量 - 兩個(gè)軸上的變量都是數(shù)值型的。 相比之下,條形圖的一個(gè)軸上是類(lèi)別,在另一個(gè)軸上具有數(shù)值型頻率。
這對(duì)圖表有影響。首先,每個(gè)條形的寬度和相鄰條形之間的間隔完全取決于生成圖的人,或者用于生成該圖的程序。 Python 為我們做了這些選擇。 如果你要手動(dòng)繪制條形圖,則可以做出完全不同的選擇,并且仍然會(huì)是完全正確的條形圖,前提是你使用相同寬度繪制了所有條形,并使所有間隔保持相同。
最重要的是,條形可以以任何順序繪制。 “巧克力”,“香草”和“草莓”這些類(lèi)別沒(méi)有普遍的等級(jí)順序,不像數(shù)字5, 7和10。
這意味著我們可以繪制一個(gè)易于解釋的條形圖,方法是按降序重新排列條形圖。 為了實(shí)現(xiàn)它,我們首先按照Number of Cartons的降序,重新排列icecream的行,然后繪制條形圖。
icecream.sort('Number of Cartons', descending=True).barh('Flavor')

這個(gè)條形圖包含的信息和以前的完全一樣,但是它更容易閱讀。 雖然在只讀三個(gè)條形的情況下,這并不是一個(gè)巨大的收益,但是當(dāng)分類(lèi)數(shù)量很大時(shí),這可能是相當(dāng)重要的。
組合分類(lèi)數(shù)據(jù)
為了構(gòu)造icecream表,有人不得不查看 30 個(gè)冰淇淋盒子,并計(jì)算每種口味的數(shù)量。 但是,如果我們的數(shù)據(jù)還沒(méi)有包含頻率,我們必須在繪制條形圖之前計(jì)算頻率。 這是一個(gè)例子,其中它是必要的。
top表由美國(guó)歷史上最暢銷(xiāo)的電影組成。 第一列包含電影的標(biāo)題;《星球大戰(zhàn):原力覺(jué)醒》(Star Wars: The Force Awakens)排名第一,美國(guó)票房總額超過(guò) 9 億美元。 第二列包含制作電影的工作室的名稱。 第三列包含國(guó)內(nèi)票房收入(美元),第四列包含按 2016 年價(jià)格計(jì)算的,票面總收入。 第五列包含電影的發(fā)行年份。
列表中有 200 部電影。 根據(jù)未調(diào)整的總收入,這是前十名。
top = Table.read_table('top_movies.csv')
top
| Title | Studio | Gross | Gross (Adjusted) | Year |
|---|---|---|---|---|
| Star Wars: The Force Awakens | Buena Vista (Disney) | 906723418 | 906723400 | 2015 |
| Avatar | Fox | 760507625 | 846120800 | 2009 |
| Titanic | Paramount | 658672302 | 1178627900 | 1997 |
| Jurassic World | Universal | 652270625 | 687728000 | 2015 |
| Marvel's The Avengers | Buena Vista (Disney) | 623357910 | 668866600 | 2012 |
| The Dark Knight | Warner Bros. | 534858444 | 647761600 | 2008 |
| Star Wars: Episode I - The Phantom Menace | Fox | 474544677 | 785715000 | 1999 |
| Star Wars | Fox | 460998007 | 1549640500 | 1977 |
| Avengers: Age of Ultron | Buena Vista (Disney) | 459005868 | 465684200 | 2015 |
| The Dark Knight Rises | Warner Bros. | 448139099 | 500961700 | 2012 |
(省略了 190 行)
迪斯尼的子公司布埃納維斯塔(Buena Vista)就像福克斯(Fox)和華納兄弟(Warner Brothers)一樣,經(jīng)常出現(xiàn)在前十名中 如果我們從 200 行中看,哪個(gè)工作室最常出現(xiàn)?
為了解決這個(gè)問(wèn)題,首先要注意的是,我們需要的只是一個(gè)擁有電影和工作室的表格;其他信息是不必要的。
movies_and_studios = top.select('Title', 'Studio')
Table的group方法組允許我們,通過(guò)將每個(gè)工作室當(dāng)做一個(gè)類(lèi)別,并將每一行分配給一個(gè)類(lèi)別,來(lái)計(jì)算每個(gè)工作室出現(xiàn)在表中的頻率。 group方法將包含類(lèi)別的列標(biāo)簽作為其參數(shù),并返回每個(gè)類(lèi)別中行數(shù)量的表格。 數(shù)量列始終稱為count,但如果你希望的話,則可以使用relabeled更改該列。
movies_and_studios.group('Studio')
| Studio | count |
|---|---|
| AVCO | 1 |
| Buena Vista (Disney) | 29 |
| Columbia | 10 |
| Disney | 11 |
| Dreamworks | 3 |
| Fox | 26 |
| IFC | 1 |
| Lionsgate | 3 |
| MGM | 7 |
| MPC | 1 |
(省略了 14 行)
因此,group創(chuàng)建一個(gè)分布表,顯示電影在類(lèi)別(工作室)之間如何分布。
現(xiàn)在我們可以使用這個(gè)表格,以及我們上面獲得的圖形技能來(lái)繪制條形圖,顯示前 200 個(gè)最高收入的電影中,哪個(gè)工作室是最常見(jiàn)的。
studio_distribution = movies_and_studios.group('Studio')
studio_distribution.sort('count', descending=True).barh('Studio')

華納兄弟(Warner Brothers)和布埃納維斯塔(Buena Vista)是前 200 電影中最常見(jiàn)的工作室。 華納兄弟制作了哈利波特電影,布埃納維斯塔制作了星球大戰(zhàn)。
由于總收入以未經(jīng)調(diào)整的美元來(lái)衡量,所以最近幾年的頂級(jí)電影比過(guò)去幾十年更頻繁,這并不令人驚訝。 以絕對(duì)數(shù)量來(lái)看,現(xiàn)在的電影票價(jià)比以前更高,因此總收入也更高。 這是通過(guò)條形圖證明的,這些條形圖顯示了 200 部電影的發(fā)行年份。
movies_and_years = top.select('Title', 'Year')
movies_and_years.group('Year').sort('count', descending=True).barh('Year')

所有最長(zhǎng)的條形都對(duì)應(yīng) 2000 年以后的年份。這與我們的觀察一致,即最近幾年應(yīng)該是最頻繁的。
面向數(shù)值變量
這張圖有一些未解決的地方。 雖然它確實(shí)回答了這個(gè)問(wèn)題,200 部最受歡迎的電影中,最常見(jiàn)的發(fā)行年份,但并沒(méi)有按時(shí)間順序列出所有年份。 它將年作為一個(gè)分類(lèi)變量。
但是,年份是固定的時(shí)序單位,確實(shí)擁有順序。 他們也有相對(duì)于彼此的固定的數(shù)值距離。 讓我們看看當(dāng)我們?cè)噲D考慮它的時(shí)候會(huì)發(fā)生什么。
默認(rèn)情況下,barh將類(lèi)別(年)從最低到最高排序。 所以我們將運(yùn)行這個(gè)代碼,但不按count進(jìn)行排序。
movies_and_years.group('Year').barh('Year')

現(xiàn)在年份是升序了。 但是這個(gè)條形圖還是有點(diǎn)問(wèn)題。 1921 年和 1937 年的條形與 1937 年和 1939 年的條形相距甚遠(yuǎn)。條形圖并沒(méi)有顯示出,200 部電影中沒(méi)有一部是在 1922 年到 1936 年間發(fā)布的。基于這種可視化,這種不一致和遺漏,使早期年份的分布難以理解。
條形圖用做類(lèi)別變量的可視化。 當(dāng)變量是數(shù)值,并且我們創(chuàng)建可視化時(shí),必須考慮其值之間的數(shù)值關(guān)系。 這是下一節(jié)的主題。
數(shù)值分布
可視化數(shù)值分布
數(shù)據(jù)科學(xué)家研究的許多變量是定量的或數(shù)值的。它們的值是你可以做算術(shù)的數(shù)字。我們所看到的例子包括一本書(shū)的章節(jié)數(shù)量,電影的收入以及美國(guó)人的年齡。
類(lèi)別變量的值可以按照數(shù)字編碼,但是這不會(huì)使變量成為定量的。在我們研究的,按年齡組分類(lèi)的人口普查數(shù)據(jù)的例子中,分類(lèi)變量SEX中,'Male'的數(shù)字代碼為1,'Female'的數(shù)字代碼為2,以及分組1和2的合計(jì)為0。 1和2是數(shù)字,在這種情況下,從2中減1或取0,1和2的平均值,或?qū)@三個(gè)值執(zhí)行其他算術(shù)是沒(méi)有意義的。 SEX是一個(gè)類(lèi)別變量,即使這些值已經(jīng)賦予一個(gè)數(shù)字代碼。
對(duì)于我們的主要示例,我們將返回到我們?cè)诳梢暬诸?lèi)數(shù)據(jù)時(shí),所研究的數(shù)據(jù)集。這是一個(gè)表格,它由美國(guó)歷史上最暢銷(xiāo)的電影中的數(shù)據(jù)組成。為了方便起見(jiàn),這里再次描述表格。
第一列包含電影的標(biāo)題。第二列包含制作電影的工作室的名稱。第三個(gè)包含國(guó)內(nèi)票房總值(美元),第四個(gè)包含按 2016 年價(jià)格計(jì)算的票面收入總額。第五個(gè)包含電影的發(fā)行年份。
列表中有 200 部電影。根據(jù)Gross列中未調(diào)整的總收入,這是前十名。
top = Table.read_table('top_movies.csv')
# Make the numbers in the Gross and Gross (Adjusted) columns look nicer:
top.set_format([2, 3], NumberFormatter)
| Title | Studio | Gross | Gross (Adjusted) | Year |
|---|---|---|---|---|
| Star Wars: The Force Awakens | Buena Vista (Disney) | 906,723,418 | 906,723,400 | 2015 |
| Avatar | Fox | 760,507,625 | 846,120,800 | 2009 |
| Titanic | Paramount | 658,672,302 | 1,178,627,900 | 1997 |
| Jurassic World | Universal | 652,270,625 | 687,728,000 | 2015 |
| Marvel's The Avengers | Buena Vista (Disney) | 623,357,910 | 668,866,600 | 2012 |
| The Dark Knight | Warner Bros. | 534,858,444 | 647,761,600 | 2008 |
| Star Wars: Episode I - The Phantom Menace | Fox | 474,544,677 | 785,715,000 | 1999 |
| Star Wars | Fox | 460,998,007 | 1,549,640,500 | 1977 |
| Avengers: Age of Ultron | Buena Vista (Disney) | 459,005,868 | 465,684,200 | 2015 |
| The Dark Knight Rises | Warner Bros. | 448,139,099 | 500,961,700 | 2012 |
(省略了 190 行)
可視化調(diào)整后收入的分布
在本節(jié)中,我們將繪制Gross (Adjusted)列中數(shù)值變量的分布圖。 為了簡(jiǎn)單起見(jiàn),我們創(chuàng)建一個(gè)包含我們所需信息的小表。 而且由于三位數(shù)字比九位數(shù)字更容易處理,我們以百萬(wàn)美元衡量調(diào)整后的總收入。 注意如何使用舍入僅保留兩位小數(shù)。
millions = top.select(0).with_column('Adjusted Gross',
np.round(top.column(3)/1e6, 2))
millions
| Title | Adjusted Gross |
|---|---|
| Star Wars: The Force Awakens | 906.72 |
| Avatar | 846.12 |
| Titanic | 1178.63 |
| Jurassic World | 687.73 |
| Marvel's The Avengers | 668.87 |
| The Dark Knight | 647.76 |
| Star Wars: Episode I - The Phantom Menace | 785.72 |
| Star Wars | 1549.64 |
| Avengers: Age of Ultron | 465.68 |
| The Dark Knight Rises | 500.96 |
直方圖
數(shù)值數(shù)據(jù)集的直方圖看起來(lái)非常像條形圖,雖然它有一些重要的差異,我們將在本節(jié)中討論。 首先,我們只畫(huà)出調(diào)整后收入的直方圖。
hist方法生成列中值的直方圖。 可選的單位參數(shù)用于兩個(gè)軸上的標(biāo)簽。 直方圖顯示調(diào)整后的總額分布,以百萬(wàn)美元為單位。
millions.hist('Adjusted Gross', unit="Million Dollars")

橫軸
這些金額已被分組為連續(xù)的間隔,稱為桶。盡管在這個(gè)數(shù)據(jù)集中,沒(méi)有電影正好在兩個(gè)桶之間的邊緣上,但是hist必須考慮數(shù)值可能在邊緣的情況。所以hist有一個(gè)端點(diǎn)約定:bin包含左端點(diǎn)的數(shù)據(jù),但不包含右端點(diǎn)的數(shù)據(jù)。
我們使用符號(hào)[a, b)表示從a開(kāi)始并在b結(jié)束但不包括b的桶。
有時(shí),必須在第一個(gè)或最后一個(gè)箱中進(jìn)行調(diào)整,以確保包含變量的最小值和最大值。在前面研究的人口普查數(shù)據(jù)中,你看到了一個(gè)這樣的調(diào)整的例子,其中“100”歲的年齡實(shí)際上意味著“100 歲以上”。
我們可以看到,有 10 個(gè)桶(有些桶很低,難以看到),而且它們的寬度都是一樣的。我們也可以看到,沒(méi)有一部電影的收入不到三億美元,那是因?yàn)槲覀冎豢紤]有史以來(lái)最暢銷(xiāo)的電影。
準(zhǔn)確看到桶的末端在哪里,有點(diǎn)困難。例如,精確地確定值 500 位于橫軸上的位置并不容易。所以很難判斷一個(gè)條形的結(jié)束位置和下一個(gè)條形的開(kāi)始位置。
可選參數(shù)bins可以與hist一起使用來(lái)指定桶的端點(diǎn)。它必須由一系列數(shù)字組成,這些數(shù)字以第一個(gè)桶的左端開(kāi)始,以最后一個(gè)桶的右端結(jié)束。我們首先將桶中的數(shù)字設(shè)置為300,400,500等等,以2000結(jié)尾。
millions.hist('Adjusted Gross', bins=np.arange(300,2001,100), unit="Million Dollars")

這個(gè)圖的橫軸比較容易閱讀。 標(biāo)簽200,400,600等以對(duì)應(yīng)的值為中心。 最高的條形是對(duì)應(yīng)三億到四億美元之間的電影。
少數(shù)電影投入了 8 億美元甚至更多。 這導(dǎo)致這個(gè)數(shù)字“向右傾斜”,或者更不正式地說(shuō),“右側(cè)長(zhǎng)尾”。 大量人口的收入或租金等變量的分布也經(jīng)常具有這種形式。
桶的數(shù)量
可以使用bin方法從一個(gè)表格中計(jì)算出桶中的值的數(shù)量,該方法接受列標(biāo)簽或索引,以及可選的序列或桶的數(shù)量。 結(jié)果是直方圖的表格形式。 第一列列出了桶的左端點(diǎn)(但請(qǐng)參閱下面關(guān)于最終值的注釋?zhuān)?第二列包含Adjusted Gross列中所有值在相應(yīng)桶中的數(shù)量。 也就是說(shuō),它計(jì)數(shù)所有Adjusted Gross的所有值,它們大于或等于bin中的值,但小于下一個(gè)bin中的值。
bin_counts = millions.bin('Adjusted Gross', bins=np.arange(300,2001,100))
bin_counts.show()
| bin | Adjusted Gross count |
|---|---|
| 300 | 81 |
| 400 | 52 |
| 500 | 28 |
| 600 | 16 |
| 700 | 7 |
| 800 | 5 |
| 900 | 3 |
| 1000 | 1 |
| 1100 | 3 |
| 1200 | 2 |
| 1300 | 0 |
| 1400 | 0 |
| 1500 | 1 |
| 1600 | 0 |
| 1700 | 1 |
| 1800 | 0 |
| 1900 | 0 |
| 2000 | 0 |
注意最后一行的bin值 2000。 這不是任何條形的左端點(diǎn) - 這是最后一個(gè)條形的右端點(diǎn)。 按照端點(diǎn)約定,那里的數(shù)據(jù)不包括在內(nèi)。 因此,相應(yīng)的計(jì)數(shù)記錄為 0,并且即使已經(jīng)有超過(guò)二十億美元的電影也被記錄為 0。 當(dāng)bin或hist使用bin參數(shù)調(diào)用時(shí),圖只考慮在指定bin中的值。
一旦數(shù)值已經(jīng)分入桶中,所得數(shù)量可以用來(lái)使用bin_column命名參數(shù)來(lái)生成直方圖,以指定哪個(gè)列包含桶的下界。
bin_counts.hist('Adjusted Gross count', bin_column='bin', unit='Million Dollars')

縱軸:密度刻度
一旦我們已經(jīng)照顧到細(xì)節(jié),如桶的末端,直方圖的橫軸易于閱讀。 縱軸的特征需要更多關(guān)注。 我們會(huì)一一講解。
我們先來(lái)看看如何計(jì)算垂直軸上的數(shù)字。 如果計(jì)算看起來(lái)有些奇怪,請(qǐng)耐心等待 - 本節(jié)的其余部分將解釋原因。
計(jì)算。每個(gè)條形的高度是桶中的元素的百分比,除以桶的寬度。
譯者注:存在很多種直方圖,比如頻數(shù)直方圖、頻率質(zhì)量直方圖和頻率密度直方圖。它們的縱軸數(shù)值不相同,但是圖形形狀是一樣的。這里是最后一種,頻率密度直方圖。
counts = bin_counts.relabeled('Adjusted Gross count', 'Count')
percents = counts.with_column(
'Percent', (counts.column('Count')/200)*100
)
heights = percents.with_column(
'Height', percents.column('Percent')/100
)
heights
| bin | Count | Percent | Height |
|---|---|---|---|
| 300 | 81 | 40.5 | 0.405 |
| 400 | 52 | 26 | 0.26 |
| 500 | 28 | 14 | 0.14 |
| 600 | 16 | 8 | 0.08 |
| 700 | 7 | 3.5 | 0.035 |
| 800 | 5 | 2.5 | 0.025 |
| 900 | 3 | 1.5 | 0.015 |
| 1000 | 1 | 0.5 | 0.005 |
| 1100 | 3 | 1.5 | 0.015 |
| 1200 | 2 | 1 | 0.01 |
(省略了 8 行)
在上面直方圖的縱軸上查看數(shù)字,檢查列高度是否正確。
如果我們只查看表格的第一行,計(jì)算就會(huì)變得清晰。
請(qǐng)記住,數(shù)據(jù)集中有 200 部電影。這個(gè)[300,400)的桶包含 81 部電影。這是所有電影的 40.5%:[圖片上傳失敗...(image-82e123-1511010602425)]。
[300, 400)桶的寬度是400-300 = 100。所以 [圖片上傳失敗...(image-acb1a7-1511010602425)]。
用于計(jì)算高度的代碼使用了總共??有 200 個(gè)電影,以及每個(gè)箱的寬度是 100 的事實(shí)。
單位。條形的高度是 40.5% 除以 1 億美元,因此高度是 0.405% 每百萬(wàn)美元。
這種繪制直方圖的方法創(chuàng)建了一個(gè)垂直軸,它是在密度刻度上的。條形的高度不是桶中條目的百分比;它是桶中的條目除以桶的寬度。這就是為什么高度衡量擁擠度或密度。
讓我們看看為什么這很重要。
不等的桶
直方圖相比條形圖的一個(gè)優(yōu)點(diǎn)是,直方圖可以包含不等寬度的桶。 以下將Millions中的值分為三個(gè)不均勻的類(lèi)別。
uneven = make_array(300, 400, 600, 1500)
millions.hist('Adjusted Gross', bins=uneven, unit="Million Dollars")

這里是三個(gè)桶中的數(shù)量。
millions.bin('Adjusted Gross', bins=uneven)
| bin | Adjusted Gross count |
|---|---|
| 300 | 81 |
| 400 | 80 |
| 600 | 37 |
| 1500 | 0 |
雖然范圍[300,400)和[400,600)具有幾乎相同的計(jì)數(shù),但前者的高度是后者的兩倍,因?yàn)樗挥幸话氲膶挾取?[300,400)中的值的密度是[400,600)中的密度的兩倍。
直方圖幫助我們可視化數(shù)軸上數(shù)據(jù)最集中的地方,特別是當(dāng)桶不均勻的時(shí)候。
僅僅繪制數(shù)量的問(wèn)題
可以使用hist方法的normed=False選項(xiàng)直接在圖表中顯示數(shù)量。 生成的圖表與直方圖具有相同的形狀,但這些桶的寬度均相等,盡管縱軸上的數(shù)字不同。
millions.hist('Adjusted Gross', bins=np.arange(300,2001,100), normed=False)

雖然數(shù)量刻度可能比密度刻度更自然,但當(dāng)桶寬度不同時(shí),圖表高度的有誤導(dǎo)性。 下面看起來(lái)(由于計(jì)數(shù))高收入電影相當(dāng)普遍,事實(shí)上我們已經(jīng)看到它們相對(duì)較少。
millions.hist('Adjusted Gross', bins=uneven, normed=False)

即使使用的方法被稱為hist,上面的圖不是一個(gè)直方圖。 誤導(dǎo)性地夸大了至少 6 億美元的電影比例。 每個(gè)桶的高度只是按照桶中的電影數(shù)量繪制,而不考慮桶寬度的差異。
如果最后兩個(gè)桶組合起來(lái),情況就變得更加荒謬了。
very_uneven = make_array(300, 400, 1500)
millions.hist('Adjusted Gross', bins=very_uneven, normed=False)

在這個(gè)基于數(shù)量的圖像中,電影分布完全失去了形狀。
直方圖:通用原則和計(jì)算
上圖顯示,眼睛將面積視為“較大”的東西,而不是高度。當(dāng)桶的寬度不同時(shí),這種觀察變得尤為重要。
這就是直方圖具有兩個(gè)定義屬性的原因:
- 桶按比例繪制并且是連續(xù)的(盡管有些可能是空的),因?yàn)闄M軸上的值是數(shù)值型的。
- 每個(gè)條形的面積與桶中的條目數(shù)成比例。
屬性(2)是繪制直方圖的關(guān)鍵,通常實(shí)現(xiàn)如下:
條形的面積 = 桶中條目的百分比
高度的計(jì)算僅僅使用了一個(gè)事實(shí),條形是長(zhǎng)方形的。
條形的面積 = 條形的高度 * 桶的寬度
因此,
條形的高度 = 條形的面積 / 桶的寬度
= 桶中條目的百分比 / 桶的寬度
高度的單位是“百分比每橫軸單位”。
當(dāng)使用這種方法繪制時(shí),直方圖被稱為在密度刻度上繪制。 在這個(gè)刻度上:
- 每個(gè)條形的面積等于相應(yīng)桶中的數(shù)據(jù)值的百分比。
- 直方圖中所有條形的總面積為 100%。 從比例的角度來(lái)講,我們說(shuō)直方圖中所有條形的面積“總計(jì)為 1”。
平頂和細(xì)節(jié)水平
即使密度刻度使用面積正確表示了百分比,但是通過(guò)將值分組到桶中,丟失了一些細(xì)節(jié)。
再看一下下圖中的[300,400)的桶。 值為“0.405% 每百萬(wàn)美元”的桶的平頂,隱藏了電影在這個(gè)桶分布有些不均勻的事實(shí)。
millions.hist('Adjusted Gross', bins=uneven, unit="Million Dollars")

為了看到它,讓我們將[300, 400)劃分為更窄的 10 個(gè)桶。每個(gè)桶的寬度都是一千萬(wàn)美元。
some_tiny_bins = make_array(300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 600, 1500)
millions.hist('Adjusted Gross', bins=some_tiny_bins, unit='Million Dollars')

直方圖 Q&A
讓我們?cè)佼?huà)一遍直方圖,這次只有四個(gè)桶,檢查我們對(duì)概念的理解。
uneven_again = make_array(300, 350, 400, 450, 1500)
millions.hist('Adjusted Gross', bins=uneven_again, unit='Million Dollars')
millions.bin('Adjusted Gross', bins=uneven_again)

| bin | Adjusted Gross count |
|---|---|
| 300 | 32 |
| 350 | 49 |
| 400 | 25 |
| 450 | 92 |
| 1500 | 0 |
再次查看直方圖,并將[400,450)的桶與[450,1500)桶進(jìn)行比較。
問(wèn):哪個(gè)桶里面有更多的電影?
答:[450,1500)的桶。它有 92 部電影,而[400,450)桶中有 25 部電影。
問(wèn):那么為什么[450,1500)的桶比[400,450)桶短得多呢?
答:因?yàn)楦叨却硗袄锩繂挝豢臻g的密度,而不是桶里的電影數(shù)量。 [450,1500)的桶中的電影確實(shí)比[400,450)的桶多,但它也是一個(gè)大桶。 所以它不那么擁擠。 其中的電影密度要低得多。
條形圖和直方圖的區(qū)別
- 條形圖為每個(gè)類(lèi)別展示一個(gè)數(shù)量。 它們通常用于顯示類(lèi)別變量的分布。 直方圖顯示定量變量的分布。
- 條形圖中的所有條形都具有相同的寬度,相鄰的條形之間有相等的間距。 直方圖的條形可以具有不同的寬度,并且是連續(xù)的。
- 條形圖中條形的長(zhǎng)度(或高度,如果垂直繪制)與每個(gè)類(lèi)別的值成正比。 直方圖中條形的高度是密度的度量;直方圖中的條形的面積與桶中的條目數(shù)量成正比。
重疊的圖表
在這一章中,我們學(xué)習(xí)了如何通過(guò)繪制圖表來(lái)顯示數(shù)據(jù)。 這種可視化的常見(jiàn)用法是比較兩個(gè)數(shù)據(jù)集。 在本節(jié)中,我們將看到如何疊加繪圖,即將它們繪制在單個(gè)圖形中,擁有同一對(duì)坐標(biāo)軸
為了使重疊有意義,重疊的圖必須表示相同的變量并以相同的單位進(jìn)行測(cè)量。
為了繪制重疊圖,可以用相同的方法調(diào)用scatter,plot和barh方法。 對(duì)于scatter和plot,一列必須作為所有疊加圖的公共橫軸。 對(duì)于barh,一列必須作為一組類(lèi)別的公共軸。 一般的調(diào)用看起來(lái)像這樣:
name_of_table.method(column_label_of_common_axis, array_of_labels_of_variables_to_plot)
更常見(jiàn)的是,我們首先僅僅選取圖表所需的列。之后通過(guò)指定共同軸上的變量來(lái)調(diào)用方法。
name_of_table.method(column_label_of_common_axis)
散點(diǎn)圖
高爾頓(Franics Galton,1822 ~ 1911 年)是一位英國(guó)博學(xué)家,他是分析數(shù)值變量之間關(guān)系的先驅(qū)。 他對(duì)有爭(zhēng)議的優(yōu)生學(xué)領(lǐng)域特別感興趣,實(shí)際上,他創(chuàng)造了這個(gè)術(shù)語(yǔ) - 這涉及到如何將物理特征從一代傳到下一代。
高爾頓精心收集了大量的數(shù)據(jù),其中一些我們將在本課程中分析。 這是高爾頓的,有關(guān)父母及其子女身高的數(shù)據(jù)的子集。 具體來(lái)說(shuō),數(shù)據(jù)由 179 名男性組成,他們?cè)诩彝ブ械谝粋€(gè)出生。數(shù)據(jù)是他們自己的高度和父母的高度。所有的高度都是以英寸來(lái)測(cè)量的。
heights = Table.read_table('galton_subset.csv')
heights
| father | mother | son |
|---|---|---|
| 78.5 | 67 | 73.2 |
| 75.5 | 66.5 | 73.5 |
| 75 | 64 | 71 |
| 75 | 64 | 70.5 |
| 75 | 58.5 | 72 |
| 74 | 68 | 76.5 |
| 74 | 62 | 74 |
| 73 | 67 | 71 |
| 73 | 67 | 68 |
| 73 | 66.5 | 71 |
(省略了 169 行)
scatter方法使我們能夠可視化,兒子的身高如何與父母的身高有關(guān)。 在圖中,兒子的身高將形成公共的橫軸。
heights.scatter('son')

注意我們僅僅指定了公共的橫軸上的變量(兒子的身高)。 Python 繪制了兩個(gè)散點(diǎn)圖:這個(gè)變量和另外兩個(gè)之間的關(guān)系,每個(gè)關(guān)系一個(gè)。
金色和藍(lán)色的散點(diǎn)圖向上傾斜,并顯示出兒子的高度和父母的高度之間的正相關(guān)。 藍(lán)色(父親)的繪圖一般比金色高,因?yàn)楦赣H一般比母親高。
線形圖
我們的下一個(gè)例子涉及更近的兒童數(shù)據(jù)。 我們將返回到人口普查數(shù)據(jù)表us_pop,再次在下面創(chuàng)建用于參考。 由此,我們將提取 0 至 18 歲年齡段的所有兒童的數(shù)量。
# Read the full Census table
census_url = 'http://www2.census.gov/programs-surveys/popest/datasets/2010-2015/national/asrh/nc-est2015-agesex-res.csv'
full_census_table = Table.read_table(census_url)
# Select columns from the full table and relabel some of them
partial_census_table = full_census_table.select(['SEX', 'AGE', 'POPESTIMATE2010', 'POPESTIMATE2014'])
us_pop = partial_census_table.relabeled('POPESTIMATE2010', '2010').relabeled('POPESTIMATE2014', '2014')
# Access the rows corresponding to all children, ages 0-18
children = us_pop.where('SEX', are.equal_to(0)).where('AGE', are.below(19)).drop('SEX')
children.show()
| AGE | 2010 | 2014 |
|---|---|---|
| 0 | 3951330 | 3949775 |
| 1 | 3957888 | 3949776 |
| 2 | 4090862 | 3959664 |
| 3 | 4111920 | 4007079 |
| 4 | 4077551 | 4005716 |
| 5 | 4064653 | 4006900 |
| 6 | 4073013 | 4135930 |
| 7 | 4043046 | 4155326 |
| 8 | 4025604 | 4120903 |
| 9 | 4125415 | 4108349 |
| 10 | 4187062 | 4116942 |
| 11 | 4115511 | 4087402 |
| 12 | 4113279 | 4070682 |
| 13 | 4119666 | 4171030 |
| 14 | 4145614 | 4233839 |
| 15 | 4231002 | 4164796 |
| 16 | 4313252 | 4168559 |
| 17 | 4376367 | 4186513 |
| 18 | 4491005 | 4227920 |
現(xiàn)在我們可以繪制兩個(gè)疊加的線形圖,顯示 2010 年和 2014 年的不同年齡的兒童人數(shù)。方法調(diào)用類(lèi)似于前面例子中的scatter調(diào)用。
children.plot('AGE')

在這個(gè)刻度上,重要的是要記住我們只有0,1,2歲等等的數(shù)據(jù)。 兩個(gè)圖形的點(diǎn)相互“交織”。
這些圖表在一些地方相互交叉:例如,2010 年的 4 歲人數(shù)比 2014 年多,2014 年的 14 歲人數(shù)比 2010 年多。
當(dāng)然,2014 年的 14 歲兒童大部分都是 2010 年的 10 歲兒童。為了看到這一點(diǎn),請(qǐng)查看 14 歲的金色圖表和 10 歲的藍(lán)色圖表。事實(shí)上,你會(huì)注意到,整個(gè)金色圖表(2014 年)看起來(lái)像藍(lán)色圖表(2010 年)向右滑了 4 年。 由于 2010 年至 2014 年間進(jìn)入該國(guó)的兒童的凈效應(yīng),這個(gè)下滑幅度還是有所上升, 幸運(yùn)的是,在這些年代,沒(méi)有太多的生命損失。
條形圖
對(duì)于本節(jié)的最后一個(gè)例子,我們看看加利福尼亞州以及整個(gè)美國(guó)的成人和兒童的種族分布情況。
凱撒家庭基金會(huì)根據(jù)人口普查數(shù)據(jù),編制了美國(guó)人口種族分布情況?;饡?huì)的網(wǎng)站提供了 2014 年整個(gè)美國(guó)人口以及當(dāng)年 18 歲以下的美國(guó)兒童的數(shù)據(jù)匯總。
這里是一個(gè)表格,采用了美國(guó)和加利福尼亞州的數(shù)據(jù)。 這些列代表美國(guó)和加利福尼亞州的每個(gè)人,美國(guó)和加州的兒童。 表格的主體包含不同類(lèi)別的比例。 每一列顯示了,該列對(duì)應(yīng)的人群的種族分布。 所以在每一列中,條目總計(jì)為 1。
usa_ca = Table.read_table('usa_ca_2014.csv')
usa_ca
| Ethnicity | USA All | CA All | USA Children | CA Children |
|---|---|---|---|---|
| Black | 0.12 | 0.05 | 0.14 | 0.05 |
| Hispanic | 0.18 | 0.38 | 0.24 | 0.5 |
| White | 0.62 | 0.39 | 0.52 | 0.29 |
| Other | 0.08 | 0.18 | 0.1 | 0.16 |
我們自然想要比較這些分布。 直接比較列是有意義的,因?yàn)樗袟l目都是比例,因此在相同刻度上。
barh方法允許我們通過(guò)在相同軸域上繪制多個(gè)條形圖,將比較可視化。這個(gè)調(diào)用類(lèi)似于scatter和plot:我們必須指定類(lèi)別的公共軸。
譯者注:軸域(Axes)是橫軸和縱軸圍城的區(qū)域。
usa_ca.barh('Ethnicity')

雖然繪制疊加的條形圖非常簡(jiǎn)單,但是我們可以在這個(gè)圖表上找到太多的信息,以便能夠理清種群之間的相似性和差異性。 似乎很清楚的是,美國(guó)所有人和美國(guó)兒童的種族分布比任何其他列都更相似,但是一次比較一對(duì)要容易得多。
首先比較美國(guó)和加利福尼亞的整個(gè)人口。
usa_ca.select('Ethnicity', 'USA All', 'CA All').barh('Ethnicity')

這兩個(gè)分布是完全不同的。 加利福尼亞州的拉美裔和其他類(lèi)別比例較高,黑人和白人比例相應(yīng)較低。 這種差異主要是由于,加利福尼亞州的地理位置和移民模式,無(wú)論是歷史上還是近幾十年來(lái)。 例如,加利福尼亞的“其他”類(lèi)別包括相當(dāng)一部分亞洲人和太平洋島民。
從圖中可以看出,2014 年加州近 40% 的人口是拉美裔。 與該州兒童人口的比較表明,未來(lái)幾年拉美裔人口的比例可能會(huì)更高。 在加州兒童中,50% 屬于拉美裔。
usa_ca.select('Ethnicity', 'CA All', 'CA Children').barh('Ethnicity')

更復(fù)雜的數(shù)據(jù)集自然會(huì)產(chǎn)生各種有趣的可視化效果,包括不同種類(lèi)的重疊圖形。 為了分析這些數(shù)據(jù),獲得更多的數(shù)據(jù)操作技能的有幫助的,這樣我們就可以將數(shù)據(jù)轉(zhuǎn)化為一種形式,使我們能夠使用本節(jié)中的方法。 在下一章中,我們將介紹其中的一些技巧。