大數據分析如何在Python中生成FiveThirtyEight圖?如果你閱讀大數據分析文章,則可能已經迷失了FiveThirtyEight的內容。自然,他們的出色可視化使你印象深刻。你想制作自己的出色可視化文件,所以問百度一下如何做到這一點。你收到了一些答案,但它們相當模糊。你仍然無法自己完成圖表。在大數據分析如何在Python中生成FiveThirtyEight圖中,我們將為你提供幫助。使用Python的matplotlib和pandas,我們將看到復制任何FiveThirtyEight(FTE)可視化的核心部分都相當容易。我們將從這里開始:
并且,在大數據分析如何在Python中生成FiveThirtyEight圖的結尾,到達此處:
要繼續(xù)學習,你至少需要一些Python的基礎知識。如果你知道方法和屬性之間有什么區(qū)別,那么你就很好了。
引入數據集
我們將使用描述1970年至2011年美國授予女性的單身漢百分比的數據進行處理。我們將使用由大數據分析家匯編的數據集
如果你想自己編寫代碼,請從Randal的博客中下載數據。為了節(jié)省時間,你可以跳過下載文件,而只需將直接鏈接傳遞給pandasread_csv() 函數。在以下代碼單元中,我們:
1)導入pandas模塊。
2)將指向數據集的直接鏈接作為分配string給名為的變量direct_link。
3)使用讀取數據read_csv(),并將內容分配給women_majors。
4)使用info() 方法打印有關數據集的信息。我們正在尋找行和列的數量,并同時檢查null值。
5)使用該head() 方法顯示前五行,以更好地理解數據集的結構。
除了
Year列,每隔一列的名稱表示學士學位的主題。“學士學位”列中的每個數據點都代表授予女性學士學位的百分比。因此,每一行都描述了給定年份中授予女性的各種學士學位的百分比。如前所述,我們擁有1970年至2011年的數據。為確認后一個限制,我們使用tail() 方法打印數據集的最后五行:
我們的FiveThirtyEight圖的上下文
幾乎每個FTE圖都是文章的一部分。圖形通過說明一個小故事或一個有趣的想法來補充文本。在復制FTE圖時,我們需要注意這一點。為了避免偏離大數據分析如何在Python中生成FiveThirtyEight圖的主要任務,我們僅假裝我們已經撰寫了一篇有關中國教育中性別差距的演變的文章?,F在,我們需要創(chuàng)建一個圖表,以幫助讀者直觀地了解1970年情況對女性而言真的很差的單身漢的性別差異的演變。我們已經設定了20%的閾值,現在我們想要繪制每位女性的變化趨勢圖1970年,女性畢業(yè)生的學士學位比例不到20%。讓我們首先確定那些特定的學士學位。在以下代碼單元中,我們將:
1)用途.loc,一個基于標簽的索引,來:
a)選擇第一行(對應于1970年);
b)僅在值小于20的情況下選擇第一行中的項目;該Year字段也會被檢查,但顯然不會包括在內,因為1970年大于20。
2)將結果內容分配給under_20。
使用matplotlib的默認樣式
讓我們開始研究圖表。我們首先來看看默認情況下可以構建的內容。在下面的代碼塊中,我們將:
1)運行Jupyter魔術%matplotlib以使Jupyter和matplotlib有效地協同工作,并添加inline使我們的圖形顯示在筆記本中。
2)通過使用繪制圖形plot() 的方法上women_majors。我們傳入plot()以下參數:
a)x–指定women_majors用于x軸的列;
b)y–指定women_majors要用于y軸的列;我們將使用under_20存儲在.index該對象屬性中的索引標簽;
c)figsize–將圖形的大小設置為tuple,(width, height)以英寸為單位。
3)將繪圖對象分配給一個名為的變量under_20_graph,并打印其類型以表明熊貓使用matplotlib引擎蓋下的對象。
使用matplotlib的第五十八樣式
上面的圖形具有某些特征,例如,棘的寬度和顏色,y軸標簽的字體大小,不存在網格等。所有這些特征構成了matplotlib的默認樣式。作為簡短的括號,值得一提的是,在大數據分析如何在Python中生成FiveThirtyEight圖中,我們將使用一些技術術語來表示圖形的各個部分。如果你感到迷茫,可以參考以下圖例。
除了默認樣式外,matplotlib還帶有一些內置樣式,我們可以隨時使用它們。要查看可用樣式的列表,我們將:
1)以名稱 導入matplotlib.style 模塊style。
2)探索matplotlib.style.available(此模塊的預定義變量)的內容,其中包含所有可用的內置樣式的列表。
你可能已經觀察到有一種內置樣式稱為
fivethirtyeight。讓我們使用這種樣式,看看結果如何。為此,我們將使用同一模塊(我們以名稱導入)中恰當命名的use() 函數。然后,我們將使用與之前相同的代碼來生成圖形。matplotlib.stylestyle
哇,那是一個重大變化!關于我們的第一個圖,我們可以看到該圖具有不同的背景色,帶有網格線,沒有任何刺,主要刻度標簽的粗細和字體大小均不同,等等。你可以閱讀這里的fivethirtyeight樣式的技術說明–它還應該使你對使用該樣式時后臺運行的代碼有一個很好的了解。樣式表的作者Cameron David-Pilon在這里討論了一些特征。
matplotlib第五十八樣式的局限性
總而言之,使用
fivethirtyeight風格顯然使我們更接近我們的目標。盡管如此,仍有許多工作要做。讓我們檢查一個簡單的FTE圖,并查看我們還需要添加到圖中的內容。
通過將上面的圖表與到目前為止所做的比較,我們可以看到我們仍然需要:
1)添加標題和副標題。
2)刪除塊樣式圖例,并在相關繪圖線附近添加標簽。我們還必須使這些標簽周圍的網格線透明。
3)添加一個簽名底部欄,其中提到圖形的作者和數據源。
4)添加一些其他小的調整:
a)增加刻度線標簽的字體大小;
b)在y軸的主要刻度標簽之一上添加“%”符號;
c)移除x軸標簽;
d)在y = 0處加粗水平網格線;
e)在y軸的刻度標簽旁邊添加一條額外的網格線;
f)增加圖形的側邊距。
為了最大程度地減少生成圖形所花費的時間,請務必避免開始添加標題,副標題或任何其他文本片段,這一點很重要。在matplotlib中,通過指定x和y坐標來定位文本片段,如我們在以下某些部分中所見。要詳細復制上面的FTE圖,請注意,我們必須將y軸的刻度標簽與標題和副標題垂直對齊。我們希望避免出現我們想要的垂直對齊方式,通過增加刻度線標簽的字體大小而丟失它的情況,然后必須再次更改標題和副標題的位置。
出于教學目的,我們現在將逐步調整FTE圖。因此,我們的代碼將跨越多個代碼單元。但是,實際上,只需要一個以上的代碼單元。
自定義刻度標簽
我們將從增加刻度標簽的字體大小開始。在以下代碼單元中,我們:
1)使用與之前相同的代碼繪制圖形,然后將結果對象分配給fte_graph。分配變量使我們能夠重復輕松地在對象上應用方法或訪問其屬性。
2)使用具有以下參數的tick_params() 方法來增加所有主要刻度標簽的字體大?。?/p>
a)axis–指定我們要修改的刻度標簽所屬的軸;這里我們要修改兩個軸的刻度標簽;
b)which –指示要影響的刻度標簽(主要或次要標簽;如果不知道區(qū)別,請參見前面顯示的圖例);
c)labelsize –設置刻度標簽的字體大小。
你可能已經注意到我們style.use('fivethirtyeight')這次沒有使用。這是因為一旦在我們的代碼中首次聲明,任何matplotlib樣式的首選項都會變?yōu)槿质走x項。我們之前將樣式設置為fivethirtyeight,從那里所有后續(xù)圖形都繼承了該樣式。如果出于某種原因要返回默認狀態(tài),請運行style.use('default')?,F在,我們將通過對y軸的刻度標簽進行一些調整來建立以前的更改:
1)我們將50%(y軸的最高可見刻度)添加一個“%”符號。
2)我們還在其他可見標簽之后添加了一些空白字符,以使它們與新的“ 50%”標簽優(yōu)雅地對齊。
要對y軸的刻度標簽進行這些更改,我們將使用
set_yticklabels() 方法以及l(fā)abel參數。從下面的代碼可以推斷出,此參數可以采用混合數據類型的列表,并且不需要傳入任何固定數量的標簽。
在y = 0處加粗水平線
現在,我們將在y坐標為0的水平線上加粗。為此,我們將使用
axhline() 方法來添加新的水平網格線,并覆蓋現有的水平網格線。我們使用的參數axhline()是:
1)y –指定水平線的y坐標;
2)color –指示線條的顏色;
3)linewidth –設置線寬;
4)alpha–調節(jié)線條的透明度,但是我們在這里使用它來調節(jié)黑色的強度;值alpha范圍從0(完全透明)到1(完全不透明)。
添加額外的垂直線
如前所述,我們必須在y軸刻度標簽的緊鄰處添加另一條垂直網格線。為此,我們只需調整x軸值的范圍即可。增大范圍的左限將導致我們需要額外的垂直網格線。在下面,我們使用
set_xlim() 方法與不言自明的參數left和right。
生成簽名欄
上面顯示的示例FTE圖的簽名欄具有一些明顯的特征:
1)它位于圖的底部。
2)作者的姓名位于簽名欄的左側。
3)數據源在簽名欄的右側提到。
4)文本具有淺灰色(與圖形的背景顏色相同)和深灰色背景。
5)作者姓名和來源姓名之間的區(qū)域也具有深灰色背景。
添加這樣的簽名欄似乎很困難,但是通過一點點巧思,我們可以很容易地完成它。我們將添加一個文本片段,為其提供淺灰色,并為深灰色的背景色。我們將作者的姓名和來源都寫在一個文本片段中,但是我們將這兩個空格隔開,使得它們的結尾在最左邊,另一個在最右邊。令人高興的是,空白字符也將獲得深灰色背景,這將產生簽名欄的效果。我們還將使用一些空格字符來對齊作者的姓名和源名稱,正如你將在下一個代碼塊中看到的那樣。這也是移除x軸標簽的好時機。這樣,我們可以更好地看到簽名欄如何適合圖形的整體方案。
1)通過將False值傳遞給set_visible()我們應用于對象的方法來刪除x軸的標簽fte_graph.xaxis.label。這樣想:我們訪問的xaxis屬性fte_graph,然后訪問的label屬性fte_graph.xaxis。然后我們終于申請set_visible()了fte_graph.xaxis.label。
2)以上述方式在圖形上添加一小段文本。我們將使用具有以下參數的text() 方法:
a)x –指定文本的x坐標;
b)y –指定文本的y坐標;
c)s –指示要添加的文本;
d)fontsize –設置文本的大小;
e)color–指定文字的顏色;我們在下面使用的值的格式為十六進制;我們使用這種格式來完全匹配整個圖形的背景顏色(如樣式代碼中fivethirtyeight所指定);
f)backgroundcolor –設置文本片段的背景色。
通過反復試驗找到添加的文本片段的x和y坐標。你可以通過floats向x和y參數,這樣你就可以控制文本的位置高的精度水平。還值得一提的是,我們通過以下方式調整了簽名欄的位置,即添加了一些視覺上令人耳目一新的橫向邊距(我們之前討論了此調整)。為了增加左邊距,我們只是降低了x坐標的值。為了增加右邊的字符,我們在作者的名字和源的名字之間添加了更多的空格字符–這將源的名字推到右邊,從而增加了所需的邊距。
另一種簽名欄
你還將遇到一種稍微不同的簽名欄:
FiveThirtyEight這種簽名欄也可以很容易地復制。我們將只添加一些灰色文本,并在其上方添加一行。我們將通過添加多個下劃線字符(“ _”)的文本片段來創(chuàng)建線條的視覺效果。你可能想知道為什么我們不習慣axhline()在所需的y坐標上簡單地畫一條水平線。我們不這樣做,因為新行將向下拖動圖形的整個網格,并且不會產生所需的效果。我們還可以嘗試添加箭頭,然后刪除指針,以便最終得到一條線。但是,“下劃線”解決方案要簡單得多。在下一個代碼塊中,我們將實現剛剛討論的內容。在前面的部分中,我們應該已經熟悉我們在這里使用的方法和參數。
添加標題和字幕
如果你檢查
幾個FTE圖,你可能會注意到標題和副標題的這些模式:
1)標題幾乎總是帶有副標題。
2)標題提供了從特定圖形看的上下文角度。標題幾乎從來都不是技術性的,它通常只表示一個簡單的想法。它也幾乎從來沒有情緒中立。在上方的Fandango圖表中,我們可以看到一個簡單的“具有情感動感”的標題(“ Fandango LOVES電影”),而沒有一個平淡的“各種電影分級類型的分布”。
3)字幕提供了有關圖形的技術信息。該信息經常使軸標簽變得多余。由于我們已經刪除了x軸標簽,因此應謹慎定制相應的字幕。
4)在視覺上,標題和副標題具有不同的字體粗細,并且它們是左對齊的(與大多數居中的標題不同)。而且,如我們先前所示,它們與y軸的主要刻度標簽垂直對齊。
現在,請注意上面的觀察,在圖中添加標題和副標題。在下面的代碼塊中,我們將基于到目前為止已編碼的內容,我們將:
5)通過使用與text()在簽名欄中添加文本相同的方法來添加標題和副標題。如果你已經對matplotlib有一定的經驗,你可能想知道為什么我們不使用title()andsuptitle()方法。這是因為這兩種方法在精確移動文本方面都具有可怕的功能。的唯一新參數text()是weight。我們用它來加粗標題。
如果你想知道,原始FTE圖形中使用的字體是Decima Mono(付費墻字體)。因此,我們將堅持使用Matplotlib的默認字體,無論如何看起來都非常相似。
添加色盲友好的顏色
現在,我們有了笨拙的矩形圖例。我們將擺脫它,并在每條繪圖線附近添加彩色標簽。每行將具有特定的顏色,并且相同顏色的單詞將命名該行所對應的學士學位。但是,首先,我們將修改繪圖線的默認顏色,并添加
色盲友Bang Wong設計的色盲我們將使用上圖中的值,為可色盲的顏色編譯RGB參數列表。附帶說明一下,我們避免使用黃色,因為帶有該顏色的文本片段在圖形的深灰色背景顏色上不易閱讀。編譯完此RGB參數列表后,我們將其傳遞給我們先前代碼中使用color的plot()方法的參數。請注意,matplotlib將要求RGB參數在0-1范圍內,因此我們將每個值除以255(最大RGB值)。我們不會費心將零除,因為0/255 = 0。
好的顏色:
通過添加彩色標簽來更改圖例樣式
最后,我們通過使用
text()以前使用的方法。唯一的新參數是rotation,我們使用它旋轉每個標簽,以使其優(yōu)雅地適合圖形。我們還將在此處做一些技巧,通過簡單地修改標簽的背景顏色以使其與圖形的顏色相匹配,使標簽周圍的網格線透明。在之前的代碼中,我們僅plot()通過將legend參數設置為來修改方法False。這將使我們擺脫默認的圖例。由于colors列表已經存儲在上一個單元格的內存中,因此我們也跳過了重新聲明列表的操作。
下一步
就是這樣,我們的圖形現在可以發(fā)布了!為了簡短地回顧一下,我們從生成具有matplotlib默認樣式的圖形開始。然后,我們通過一系列步驟將該圖帶入“ FTE級”:
1)我們使用了matplotlib的內置fivethirtyeight樣式。
2)我們添加了標題和副標題,并分別對其進行了自定義。
3)我們添加了簽名欄。
4)我們刪除了默認圖例,并添加了彩色標簽。
5)我們還進行了一系列其他小的調整:自定義刻度線標簽,在y = 0處加粗水平線,在刻度線標簽附近添加垂直網格線,刪除x軸的標簽,并增加y的橫向邊距-軸。
要基于你所學的知識,請考慮以下幾個步驟:
1)為其他學士學位生成相似的圖形。
2)生成各種FTE圖:直方圖,散點圖等。
3)探索matplotlib的圖庫,搜索可能的元素以豐富你的FTE圖(例如插入圖像或添加箭頭等)。添加圖像可以使你的FTE圖達到一個全新的水平:
填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!
?2007-2022/ 5wd995.cn 北京漫動者數字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc