数据分析_Python作图
Python作圖
- 概述
- 選圖_根據目的
- 選圖_根據數據關系
- 常用圖介紹及代碼實現
- 散點圖
- 折線圖
- 直方圖
- 條形圖
- 箱線圖
- 餅圖
- 熱力圖
- 蜘蛛圖
- 二元變量分布
- 成對關系
- 總結:
概述
工作時有時候有些數據在用Python處理完直接作圖比較方便。下面敘述一下日常作圖的步驟和常用的圖表實現方式。玫瑰圖等比較帥的圖的做法后續補上。可視化要是做的好還是挺能吸人眼球的,而且python也能實現比較復雜的作圖。
選圖_根據目的
畫圖第一步就是要決定使用哪種圖,使用哪種圖取決于作圖目的,上面列出9種,每種下面都有對應的基礎圖形(哪些就不用說了),根據需求選擇。
選圖_根據數據關系
如果上面的方式沒辦法掌握,就按照想要呈現的數據關系進行選擇。
比較:比較數據間各類別的關系,或者是它們隨著時間的變化趨勢,比如折線圖。
聯系:查看兩個或兩個以上變量之間的關系,比如散點圖。
構成:每個部分占整體的百分比,或者是隨著時間的百分比變化,比如餅圖。
分布:關注單個變量,或者多個變量的分布情況,比如直方圖。
常用圖介紹及代碼實現
散點圖
特點:非常適合展示兩個變量之間的關系。當然,除了二維的散點圖,還有三維的散點圖。具體實現如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline # 數據準備 N = 1000 x = np.random.randn(N) y = np.random.randn(N) # 用Matplotlib畫散點圖 plt.scatter(x, y,marker='x',c = 'g') plt.show() # 用Seaborn畫散點圖 df = pd.DataFrame({'x': x, 'y': y}) sns.jointplot(x="x", y="y", data=df, kind='scatter',); sns.set_style('whitegrid') plt.show()- Matplotlib:marker 代表了標記的符號。比如“x”、“>”或者“o”
- Seaborn:其中 x、y 是 data 中的下標。data 就是我們要傳入的數據,一般是 DataFrame 類型。kind 這類我們取 scatter,代表散點的意思。 kind 還可以取其他值,后面說,不同的 kind 代表不同的視圖繪制方式。
Matplotlib:
Seaborn:
區別:Matplotlib 默認情況下呈現出來的是個長方形。而 Seaborn 呈現的是個正方形,而且不僅顯示出了散點圖,還給了這兩個變量的分布情況。
折線圖
特點:可以用來表示數據隨著時間變化的趨勢。
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline # 數據準備 x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35] # 使用Matplotlib畫折線圖 plt.plot(x, y) plt.show() # 使用Seaborn畫折線圖 df = pd.DataFrame({'x': x, 'y': y}) sns.lineplot(x="x", y="y", data=df) plt.show()- Matplotlib:需要提前把數據按照 x 軸的大小進行排序,要不畫出來的折線圖就無法按照 x 軸遞增的順序展示。
Matplotlib:
Seaborn:
區別:在 seaborn 中標記了 x 和 y 軸的含義,散點圖也是加了坐標軸含義。
直方圖
特點:側重于分布,直方圖是比較常見的視圖,它是把橫坐標等分成了一定數量的小區間,這個小區間也叫作“箱子”,然后在每個“箱子”內用矩形條(bars)展示該箱子的箱子數(也就是 y 值),這樣就完成了對數據集的直方圖分布的可視化。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 數據準備 a = np.random.randn(100) s = pd.Series(a) # 用Matplotlib畫直方圖 plt.hist(s) plt.show() # 用Seaborn畫直方圖 sns.distplot(s, kde=True) plt.show() sns.distplot(s, kde=False) plt.show()Matplotlib:
Seaborn(核密度估計)
Seaborn(無核密度估計)
區別:Seaborn帶核密度估計,默認顏色比較小清新,低飽和度。
條形圖
特點:如果說通過直方圖可以看到變量的數值分布,那么條形圖可以幫我們查看類別的特征(頻數)。做成動態排行會很好看。
import matplotlib.pyplot as plt import seaborn as sns # 數據準備 x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5'] y = [5, 4, 8, 12, 7] # 用Matplotlib畫條形圖 plt.bar(x, y) plt.show() # 用Seaborn畫條形圖 sns.barplot(x, y) plt.show()- Seaborn:sns.barplot(x=None, y=None, data=None),還是可以用DataFrame格式,感覺這是Seaborn的通用格式。
Mathplotlib:
Seaborn:
區別:Seaborn默認不是單色
箱線圖
特點:又稱盒式圖,由五個數值點組成:最大值 (max)、最小值 (min)、中位數 (median) 和上下四分位數 (Q3, Q1)。它可以幫我們分析出數據的差異性、離散程度和異常值等。可以應用在去除噪聲數據。
# 數據準備 # 生成10*4維度數據 data=np.random.normal(size=(10,4)) lables = ['A','B','C','D'] # 用Matplotlib畫箱線圖 plt.boxplot(data,labels=lables) plt.show() # 用Seaborn畫箱線圖 df = pd.DataFrame(data, columns=lables) sns.boxplot(data=df) plt.show()- numpy.random.normal(loc=0.0, scale=1.0, size=None),概率分布的均值,scale:概率分布的標準差(對應于分布的寬度,scale越大越矮胖,scale越小,越瘦高)size:輸出的shape,默認為None,只輸出一個值。loc=0.0, scale=1.0就是正態分布。
Matplotlib:
Seborn:
區別:Style不同。
餅圖
特點:常用在統計學模塊,可以顯示每個部分大小與總和之間的比例。在 Python 數據可視化中,它用的不算多。我們主要采用 Matplotlib 的 pie 函數實現它。
import matplotlib.pyplot as plt # 數據準備 nums = [25, 37, 33, 37, 6] labels = ['High-school','Bachelor','Master','Ph.d', 'Others'] # 用Matplotlib畫餅圖 plt.pie(x = nums, labels=labels) plt.show()熱力圖
特點:熱力圖是一種矩陣表示方法,其中矩陣中的元素值用顏色來代表,不同的顏色代表不同大小的值。通過顏色就能直觀地知道某個位置上數值的大小。
import matplotlib.pyplot as plt import seaborn as sns # 數據準備 flights = sns.load_dataset("flights") data=flights.pivot('year','month','passengers') # 用Seaborn畫熱力圖 sns.heatmap(data) plt.show()- 這里我們使用 Seaborn 中自帶的數據集 flights,該數據集記錄了 1949 年到 1960 年期間,每個月的航班乘客的數量。
蜘蛛圖
特點:顯示一對多關系的方法。在蜘蛛圖中,一個變量相對于另一個變量的顯著性是清晰可見的。
import numpy as np import matplotlib.pyplot as plt import seaborn as sns from matplotlib.font_manager import FontProperties %matplotlib inline # 數據準備 labels=np.array([u"推進","KDA",u"生存",u"團戰",u"發育",u"輸出"]) stats=[83, 61, 95, 67, 76, 88] # 畫圖數據準備,角度、狀態值 angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False) stats=np.concatenate((stats,[stats[0]])) angles=np.concatenate((angles,[angles[0]])) # 用Matplotlib畫蜘蛛圖 fig = plt.figure() ax = fig.add_subplot(111, polar=True) ax.plot(angles, stats, 'o-', linewidth=2) ax.fill(angles, stats, alpha=0.25) # 設置中文字體 font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14) ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font) plt.show()- 需要在原有 angles 和 stats 數組上增加一位,也就是添加數組的第一個元素,加上之后才可以構成一個環。
- 字符前加u是用unicode編碼,中文需要,英文一般不用。
- np.linspace(start,end,num,endpoint)用于生成等差數列,endpoint=False代表不排除終點。
- flt.figure 是創建一個空白的 figure 對象,這樣做的目的相當于畫畫前先準備一個空白的畫板。然后 add_subplot(111) 可以把畫板劃分成 1 行 1 列。再用 ax.plot 和 ax.fill 進行連線以及給圖形上色。
- 中文字體simhei.ttf下載鏈接:http://www.downcc.com/font/7665.html
- ax.fill(angles, stats, alpha=0.25) ,alpha=0.25代表蛛網部分透明度。
二元變量分布
特點:如果我們想要看兩個變量之間的關系,就需要用到二元變量分布。在 Seaborn 里,使用二元變量分布非常方便, sns.jointplot(x, y, data=None, kind) 函數即可。其中用 kind 表示不同的視圖類型:“kind=‘scatter’”代表散點圖,“kind=‘kde’”代表核密度圖,“kind=‘hex’ ”代表 Hexbin 圖,它代表的是直方圖的二維模擬。
import matplotlib.pyplot as plt import seaborn as sns # 數據準備 tips = sns.load_dataset("tips") print(tips.head(10)) # 用Seaborn畫二元變量分布圖(散點圖,核密度圖,Hexbin圖) sns.jointplot(x="total_bill", y="tip", data=tips, kind='scatter') sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde') sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex') plt.show()- 這里我們使用 Seaborn 中自帶的數據集 tips,這個數據集記錄了不同顧客在餐廳的消費賬單及小費情況。代碼中 total_bill 保存了客戶的賬單金額,tip 是該客戶給出的小費金額。我們可以用 Seaborn 中的 jointplot 來探索這兩個變量之間的關系。
散點圖:
核密度圖:
Hexbin 圖:
成對關系
特點:探索數據集中的多個成對雙變量的分布,可以直接采用 sns.pairplot() 函數。它會同時展示出 DataFrame 中每對變量的關系,另外在對角線上,你能看到每個變量自身作為單變量的分布情況。pairplot 函數的使用,就像在 DataFrame 中使用 describe() 函數一樣方便,是數據探索中的常用函數。
import matplotlib.pyplot as plt import seaborn as sns # 數據準備 iris = sns.load_dataset('iris') # 用Seaborn畫成對關系 sns.pairplot(iris) plt.show()-
總結:
總結
以上是生活随笔為你收集整理的数据分析_Python作图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卡西欧CDP-100对战雅马哈镎-30
- 下一篇: websocket python爬虫_p