九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
50個(gè)數(shù)據(jù)可視化最有價(jià)值的圖表

作者:lemonbit


from Unsplash by @Mike Enerio

翻譯 | Lemon

來源 | Machine Learning Plus

23 直方密度線圖 (Density Curves with Histogram)

帶有直方圖的密度曲線匯集了兩個(gè)圖所傳達(dá)的集體信息,因此您可以將它們放在一個(gè)圖中而不是兩個(gè)圖中。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(13,10), dpi= 80)

  5. sns.distplot(df.loc[df['class'] == 'compact', 'cty'], color='dodgerblue', label='Compact', hist_kws={'alpha':.7}, kde_kws={'linewidth':3})

  6. sns.distplot(df.loc[df['class'] == 'suv', 'cty'], color='orange', label='SUV', hist_kws={'alpha':.7}, kde_kws={'linewidth':3})

  7. sns.distplot(df.loc[df['class'] == 'minivan', 'cty'], color='g', label='minivan', hist_kws={'alpha':.7}, kde_kws={'linewidth':3})

  8. plt.ylim(0, 0.35)


  9. # Decoration

  10. plt.title('Density Plot of City Mileage by Vehicle Type', fontsize=22)

  11. plt.legend()

  12. plt.show()

圖23

24 Joy Plot

Joy Plot允許不同組的密度曲線重疊,這是一種可視化大量分組數(shù)據(jù)的彼此關(guān)系分布的好方法。 它看起來很悅目,并清楚地傳達(dá)了正確的信息。 它可以使用基于 matplotlib 的 joypy 包輕松構(gòu)建。 (『Python數(shù)據(jù)之道』注:需要安裝 joypy 庫(kù))

  1. # !pip install joypy

  2. # Python數(shù)據(jù)之道 備注

  3. import joypy


  4. # Import Data

  5. mpg = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  6. # Draw Plot

  7. plt.figure(figsize=(16,10), dpi= 80)

  8. fig, axes = joypy.joyplot(mpg, column=['hwy', 'cty'], by='class', ylim='own', figsize=(14,10))


  9. # Decoration

  10. plt.title('Joy Plot of City and Highway Mileage by Class', fontsize=22)

  11. plt.show()

圖24

25 分布式包點(diǎn)圖 (Distributed Dot Plot)

分布式包點(diǎn)圖顯示按組分割的點(diǎn)的單變量分布。 點(diǎn)數(shù)越暗,該區(qū)域的數(shù)據(jù)點(diǎn)集中度越高。 通過對(duì)中位數(shù)進(jìn)行不同著色,組的真實(shí)定位立即變得明顯。

圖25

26 箱形圖 (Box Plot)

箱形圖是一種可視化分布的好方法,記住中位數(shù)、第25個(gè)第45個(gè)四分位數(shù)和異常值。 但是,您需要注意解釋可能會(huì)扭曲該組中包含的點(diǎn)數(shù)的框的大小。 因此,手動(dòng)提供每個(gè)框中的觀察數(shù)量可以幫助克服這個(gè)缺點(diǎn)。

例如,左邊的前兩個(gè)框具有相同大小的框,即使它們的值分別是5和47。 因此,寫入該組中的觀察數(shù)量是必要的。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(13,10), dpi= 80)

  5. sns.boxplot(x='class', y='hwy', data=df, notch=False)


  6. # Add N Obs inside boxplot (optional)

  7. def add_n_obs(df,group_col,y):

  8.    medians_dict = {grp[0]:grp[1][y].median() for grp in df.groupby(group_col)}

  9.    xticklabels = [x.get_text() for x in plt.gca().get_xticklabels()]

  10.    n_obs = df.groupby(group_col)[y].size().values

  11.    for (x, xticklabel), n_ob in zip(enumerate(xticklabels), n_obs):

  12.        plt.text(x, medians_dict[xticklabel]*1.01, '#obs : '+str(n_ob), horizontalalignment='center', fontdict={'size':14}, color='white')


  13. add_n_obs(df,group_col='class',y='hwy')    


  14. # Decoration

  15. plt.title('Box Plot of Highway Mileage by Vehicle Class', fontsize=22)

  16. plt.ylim(10, 40)

  17. plt.show()

圖26

27 包點(diǎn)+箱形圖 (Dot + Box Plot)

包點(diǎn)+箱形圖 (Dot + Box Plot)傳達(dá)類似于分組的箱形圖信息。 此外,這些點(diǎn)可以了解每組中有多少數(shù)據(jù)點(diǎn)。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(13,10), dpi= 80)

  5. sns.boxplot(x='class', y='hwy', data=df, hue='cyl')

  6. sns.stripplot(x='class', y='hwy', data=df, color='black', size=3, jitter=1)


  7. for i in range(len(df['class'].unique())-1):

  8.    plt.vlines(i+.5, 10, 45, linestyles='solid', colors='gray', alpha=0.2)


  9. # Decoration

  10. plt.title('Box Plot of Highway Mileage by Vehicle Class', fontsize=22)

  11. plt.legend(title='Cylinders')

  12. plt.show()

圖27

28 小提琴圖 (Violin Plot)

小提琴圖是箱形圖在視覺上令人愉悅的替代品。 小提琴的形狀或面積取決于它所持有的觀察次數(shù)。 但是,小提琴圖可能更難以閱讀,并且在專業(yè)設(shè)置中不常用。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(13,10), dpi= 80)

  5. sns.violinplot(x='class', y='hwy', data=df, scale='width', inner='quartile')


  6. # Decoration

  7. plt.title('Violin Plot of Highway Mileage by Vehicle Class', fontsize=22)

  8. plt.show()

圖28

29 人口金字塔 (Population Pyramid)

人口金字塔可用于顯示由數(shù)量排序的組的分布。 或者它也可以用于顯示人口的逐級(jí)過濾,因?yàn)樗谙旅嬗糜陲@示有多少人通過營(yíng)銷渠道的每個(gè)階段。

  1. # Read data

  2. df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/email_campaign_funnel.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(13,10), dpi= 80)

  5. group_col = 'Gender'

  6. order_of_bars = df.Stage.unique()[::-1]

  7. colors = [plt.cm.Spectral(i/float(len(df[group_col].unique())-1)) for i in range(len(df[group_col].unique()))]


  8. for c, group in zip(colors, df[group_col].unique()):

  9.    sns.barplot(x='Users', y='Stage', data=df.loc[df[group_col]==group, :], order=order_of_bars, color=c, label=group)


  10. # Decorations    

  11. plt.xlabel('$Users$')

  12. plt.ylabel('Stage of Purchase')

  13. plt.yticks(fontsize=12)

  14. plt.title('Population Pyramid of the Marketing Funnel', fontsize=22)

  15. plt.legend()

  16. plt.show()

圖29

30 分類圖 (Categorical Plots)

由 seaborn庫(kù) 提供的分類圖可用于可視化彼此相關(guān)的2個(gè)或更多分類變量的計(jì)數(shù)分布。

  1. # Load Dataset

  2. titanic = sns.load_dataset('titanic')


  3. # Plot

  4. g = sns.catplot('alive', col='deck', col_wrap=4,

  5.                data=titanic[titanic.deck.notnull()],

  6.                kind='count', height=3.5, aspect=.8,

  7.                palette='tab20')


  8. fig.suptitle('sf')

  9. plt.show()

圖30

  1. # Load Dataset

  2. titanic = sns.load_dataset('titanic')


  3. # Plot

  4. sns.catplot(x='age', y='embark_town',

  5.            hue='sex', col='class',

  6.            data=titanic[titanic.embark_town.notnull()],

  7.            orient='h', height=5, aspect=1, palette='tab10',

  8.            kind='violin', dodge=True, cut=0, bw=.2)

圖30-2

五、組成 (Composition)

31 華夫餅圖 (Waffle Chart)

可以使用 pywaffle包 創(chuàng)建華夫餅圖,并用于顯示更大群體中的組的組成。

(『Python數(shù)據(jù)之道』注:需要安裝 pywaffle 庫(kù))

  1. #! pip install pywaffle

  2. # Reference: https://stackoverflow.com/questions/41400136/how-to-do-waffle-charts-in-python-square-piechart

  3. from pywaffle import Waffle


  4. # Import

  5. df_raw = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  6. # Prepare Data

  7. df = df_raw.groupby('class').size().reset_index(name='counts')

  8. n_categories = df.shape[0]

  9. colors = [plt.cm.inferno_r(i/float(n_categories)) for i in range(n_categories)]


  10. # Draw Plot and Decorate

  11. fig = plt.figure(

  12.    FigureClass=Waffle,

  13.    plots={

  14.        '111': {

  15.            'values': df['counts'],

  16.            'labels': ['{0} ({1})'.format(n[0], n[1]) for n in df[['class', 'counts']].itertuples()],

  17.            'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 12},

  18.            'title': {'label': '# Vehicles by Class', 'loc': 'center', 'fontsize':18}

  19.        },

  20.    },

  21.    rows=7,

  22.    colors=colors,

  23.    figsize=(16, 9)

  24. )

圖31

圖31-2

32 餅圖 (Pie Chart)

餅圖是顯示組成的經(jīng)典方式。 然而,現(xiàn)在通常不建議使用它,因?yàn)轲W餅部分的面積有時(shí)會(huì)變得誤導(dǎo)。 因此,如果您要使用餅圖,強(qiáng)烈建議明確記下餅圖每個(gè)部分的百分比或數(shù)字。

  1. # Import

  2. df_raw = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  3. # Prepare Data

  4. df = df_raw.groupby('class').size()


  5. # Make the plot with pandas

  6. df.plot(kind='pie', subplots=True, figsize=(8, 8))

  7. plt.title('Pie Chart of Vehicle Class - Bad')

  8. plt.ylabel('')

  9. plt.show()

圖32

圖32-2

33 樹形圖 (Treemap)

樹形圖類似于餅圖,它可以更好地完成工作而不會(huì)誤導(dǎo)每個(gè)組的貢獻(xiàn)。

(『Python數(shù)據(jù)之道』注:需要安裝 squarify 庫(kù))

  1. # pip install squarify

  2. import squarify


  3. # Import Data

  4. df_raw = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  5. # Prepare Data

  6. df = df_raw.groupby('class').size().reset_index(name='counts')

  7. labels = df.apply(lambda x: str(x[0]) + '
    (' + str(x[1]) + ')', axis=1)

  8. sizes = df['counts'].values.tolist()

  9. colors = [plt.cm.Spectral(i/float(len(labels))) for i in range(len(labels))]


  10. # Draw Plot

  11. plt.figure(figsize=(12,8), dpi= 80)

  12. squarify.plot(sizes=sizes, label=labels, color=colors, alpha=.8)


  13. # Decorate

  14. plt.title('Treemap of Vechile Class')

  15. plt.axis('off')

  16. plt.show()

圖33

34 條形圖 (Bar Chart)

條形圖是基于計(jì)數(shù)或任何給定指標(biāo)可視化項(xiàng)目的經(jīng)典方式。 在下面的圖表中,我為每個(gè)項(xiàng)目使用了不同的顏色,但您通??赡芟M麨樗许?xiàng)目選擇一種顏色,除非您按組對(duì)其進(jìn)行著色。 顏色名稱存儲(chǔ)在下面代碼中的all_colors中。 您可以通過在 plt.plot()中設(shè)置顏色參數(shù)來更改條的顏色。

  1. import random


  2. # Import Data

  3. df_raw = pd.read_csv('https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv')


  4. # Prepare Data

  5. df = df_raw.groupby('manufacturer').size().reset_index(name='counts')

  6. n = df['manufacturer'].unique().__len__()+1

  7. all_colors = list(plt.cm.colors.cnames.keys())

  8. random.seed(100)

  9. c = random.choices(all_colors, k=n)


  10. # Plot Bars

  11. plt.figure(figsize=(16,10), dpi= 80)

  12. plt.bar(df['manufacturer'], df['counts'], color=c, width=.5)

  13. for i, val in enumerate(df['counts'].values):

  14.    plt.text(i, val, float(val), horizontalalignment='center', verticalalignment='bottom', fontdict={'fontweight':500, 'size':12})


  15. # Decoration

  16. plt.gca().set_xticklabels(df['manufacturer'], rotation=60, horizontalalignment= 'right')

  17. plt.title('Number of Vehicles by Manaufacturers', fontsize=22)

  18. plt.ylabel('# Vehicles')

  19. plt.ylim(0, 45)

  20. plt.show()

圖34

六、變化 (Change)

35 時(shí)間序列圖 (Time Series Plot)

時(shí)間序列圖用于顯示給定度量隨時(shí)間變化的方式。 在這里,您可以看到 1949年 至 1969年間航空客運(yùn)量的變化情況。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')


  3. # Draw Plot

  4. plt.figure(figsize=(16,10), dpi= 80)

  5. plt.plot('date', 'traffic', data=df, color='tab:red')


  6. # Decoration

  7. plt.ylim(50, 750)

  8. xtick_location = df.index.tolist()[::12]

  9. xtick_labels = [x[-4:] for x in df.date.tolist()[::12]]

  10. plt.xticks(ticks=xtick_location, labels=xtick_labels, rotation=0, fontsize=12, horizontalalignment='center', alpha=.7)

  11. plt.yticks(fontsize=12, alpha=.7)

  12. plt.title('Air Passengers Traffic (1949 - 1969)', fontsize=22)

  13. plt.grid(axis='both', alpha=.3)


  14. # Remove borders

  15. plt.gca().spines['top'].set_alpha(0.0)    

  16. plt.gca().spines['bottom'].set_alpha(0.3)

  17. plt.gca().spines['right'].set_alpha(0.0)    

  18. plt.gca().spines['left'].set_alpha(0.3)  

  19. plt.show()

圖35

36 帶波峰波谷標(biāo)記的時(shí)序圖 (Time Series with Peaks and Troughs Annotated)

下面的時(shí)間序列繪制了所有峰值和低谷,并注釋了所選特殊事件的發(fā)生。

圖36

37 自相關(guān)和部分自相關(guān)圖 (Autocorrelation (ACF) and Partial Autocorrelation (PACF) Plot)

自相關(guān)圖(ACF圖)顯示時(shí)間序列與其自身滯后的相關(guān)性。 每條垂直線(在自相關(guān)圖上)表示系列與滯后0之間的滯后之間的相關(guān)性。圖中的藍(lán)色陰影區(qū)域是顯著性水平。 那些位于藍(lán)線之上的滯后是顯著的滯后。

那么如何解讀呢?

對(duì)于空乘旅客,我們看到多達(dá)14個(gè)滯后跨越藍(lán)線,因此非常重要。 這意味著,14年前的航空旅客交通量對(duì)今天的交通狀況有影響。

PACF在另一方面顯示了任何給定滯后(時(shí)間序列)與當(dāng)前序列的自相關(guān),但是刪除了滯后的貢獻(xiàn)。

  1. from statsmodels.graphics.tsaplots import plot_acf, plot_pacf


  2. # Import Data

  3. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')


  4. # Draw Plot

  5. fig, (ax1, ax2) = plt.subplots(1, 2,figsize=(16,6), dpi= 80)

  6. plot_acf(df.traffic.tolist(), ax=ax1, lags=50)

  7. plot_pacf(df.traffic.tolist(), ax=ax2, lags=20)


  8. # Decorate

  9. # lighten the borders

  10. ax1.spines['top'].set_alpha(.3); ax2.spines['top'].set_alpha(.3)

  11. ax1.spines['bottom'].set_alpha(.3); ax2.spines['bottom'].set_alpha(.3)

  12. ax1.spines['right'].set_alpha(.3); ax2.spines['right'].set_alpha(.3)

  13. ax1.spines['left'].set_alpha(.3); ax2.spines['left'].set_alpha(.3)


  14. # font size of tick labels

  15. ax1.tick_params(axis='both', labelsize=12)

  16. ax2.tick_params(axis='both', labelsize=12)

  17. plt.show()

圖37

38 交叉相關(guān)圖 (Cross Correlation plot)

交叉相關(guān)圖顯示了兩個(gè)時(shí)間序列相互之間的滯后。

圖38

39 時(shí)間序列分解圖 (Time Series Decomposition Plot)

時(shí)間序列分解圖顯示時(shí)間序列分解為趨勢(shì),季節(jié)和殘差分量。

  1. from statsmodels.tsa.seasonal import seasonal_decompose

  2. from dateutil.parser import parse


  3. # Import Data

  4. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')

  5. dates = pd.DatetimeIndex([parse(d).strftime('%Y-%m-01') for d in df['date']])

  6. df.set_index(dates, inplace=True)


  7. # Decompose

  8. result = seasonal_decompose(df['traffic'], model='multiplicative')


  9. # Plot

  10. plt.rcParams.update({'figure.figsize': (10,10)})

  11. result.plot().suptitle('Time Series Decomposition of Air Passengers')

  12. plt.show()

圖39

40 多個(gè)時(shí)間序列 (Multiple Time Series)

您可以繪制多個(gè)時(shí)間序列,在同一圖表上測(cè)量相同的值,如下所示。

圖40

41 使用輔助 Y 軸來繪制不同范圍的圖形 (Plotting with different scales using secondary Y axis)

如果要顯示在同一時(shí)間點(diǎn)測(cè)量?jī)蓚€(gè)不同數(shù)量的兩個(gè)時(shí)間序列,則可以在右側(cè)的輔助Y軸上再繪制第二個(gè)系列。

圖41

42 帶有誤差帶的時(shí)間序列 (Time Series with Error Bands)

如果您有一個(gè)時(shí)間序列數(shù)據(jù)集,每個(gè)時(shí)間點(diǎn)(日期/時(shí)間戳)有多個(gè)觀測(cè)值,則可以構(gòu)建帶有誤差帶的時(shí)間序列。 您可以在下面看到一些基于每天不同時(shí)間訂單的示例。 另一個(gè)關(guān)于45天持續(xù)到達(dá)的訂單數(shù)量的例子。

在該方法中,訂單數(shù)量的平均值由白線表示。 并且計(jì)算95%置信區(qū)間并圍繞均值繪制。

圖42

圖42-2

43 堆積面積圖 (Stacked Area Chart)

堆積面積圖可以直觀地顯示多個(gè)時(shí)間序列的貢獻(xiàn)程度,因此很容易相互比較。

圖43

44 未堆積的面積圖 (Area Chart UnStacked)

未堆積面積圖用于可視化兩個(gè)或更多個(gè)系列相對(duì)于彼此的進(jìn)度(起伏)。 在下面的圖表中,您可以清楚地看到隨著失業(yè)中位數(shù)持續(xù)時(shí)間的增加,個(gè)人儲(chǔ)蓄率會(huì)下降。 未堆積面積圖表很好地展示了這種現(xiàn)象。

  1. # Import Data

  2. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/economics.csv')


  3. # Prepare Data

  4. x = df['date'].values.tolist()

  5. y1 = df['psavert'].values.tolist()

  6. y2 = df['uempmed'].values.tolist()

  7. mycolors = ['tab:red', 'tab:blue', 'tab:green', 'tab:orange', 'tab:brown', 'tab:grey', 'tab:pink', 'tab:olive']      

  8. columns = ['psavert', 'uempmed']


  9. # Draw Plot

  10. fig, ax = plt.subplots(1, 1, figsize=(16,9), dpi= 80)

  11. ax.fill_between(x, y1=y1, y2=0, label=columns[1], alpha=0.5, color=mycolors[1], linewidth=2)

  12. ax.fill_between(x, y1=y2, y2=0, label=columns[0], alpha=0.5, color=mycolors[0], linewidth=2)


  13. # Decorations

  14. ax.set_title('Personal Savings Rate vs Median Duration of Unemployment', fontsize=18)

  15. ax.set(ylim=[0, 30])

  16. ax.legend(loc='best', fontsize=12)

  17. plt.xticks(x[::50], fontsize=10, horizontalalignment='center')

  18. plt.yticks(np.arange(2.5, 30.0, 2.5), fontsize=10)

  19. plt.xlim(-10, x[-1])


  20. # Draw Tick lines  

  21. for y in np.arange(2.5, 30.0, 2.5):    

  22.    plt.hlines(y, xmin=0, xmax=len(x), colors='black', alpha=0.3, linestyles='--', lw=0.5)


  23. # Lighten borders

  24. plt.gca().spines['top'].set_alpha(0)

  25. plt.gca().spines['bottom'].set_alpha(.3)

  26. plt.gca().spines['right'].set_alpha(0)

  27. plt.gca().spines['left'].set_alpha(.3)

  28. plt.show()

圖44

45 日歷熱力圖 (Calendar Heat Map)

與時(shí)間序列相比,日歷地圖是可視化基于時(shí)間的數(shù)據(jù)的備選和不太優(yōu)選的選項(xiàng)。 雖然可以在視覺上吸引人,但數(shù)值并不十分明顯。 然而,它可以很好地描繪極端值和假日效果。

(『Python數(shù)據(jù)之道』注:需要安裝 calmap 庫(kù))

  1. import matplotlib as mpl


  2. # pip install calmap  

  3. # Python數(shù)據(jù)之道 備注

  4. import calmap


  5. # Import Data

  6. df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/yahoo.csv', parse_dates=['date'])

  7. df.set_index('date', inplace=True)


  8. # Plot

  9. plt.figure(figsize=(16,10), dpi= 80)

  10. calmap.calendarplot(df['2014']['VIX.Close'], fig_kws={'figsize': (16,10)}, yearlabel_kws={'color':'black', 'fontsize':14}, subplot_kws={'title':'Yahoo Stock Prices'})

  11. plt.show()

圖45

46 季節(jié)圖 (Seasonal Plot)

季節(jié)圖可用于比較上一季中同一天(年/月/周等)的時(shí)間序列。

圖46

七、分組 (Groups)

47 樹狀圖 (Dendrogram)

樹形圖基于給定的距離度量將相似的點(diǎn)組合在一起,并基于點(diǎn)的相似性將它們組織在樹狀鏈接中。

  1. import scipy.cluster.hierarchy as shc


  2. # Import Data

  3. df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/USArrests.csv')


  4. # Plot

  5. plt.figure(figsize=(16, 10), dpi= 80)  

  6. plt.title('USArrests Dendograms', fontsize=22)  

  7. dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop', 'Rape']], method='ward'), labels=df.State.values, color_threshold=100)  

  8. plt.xticks(fontsize=12)

  9. plt.show()

圖47

48 簇狀圖 (Cluster Plot)

簇狀圖 (Cluster Plot)可用于劃分屬于同一群集的點(diǎn)。 下面是根據(jù)USArrests數(shù)據(jù)集將美國(guó)各州分為5組的代表性示例。 此圖使用“謀殺”和“攻擊”列作為X和Y軸。 或者,您可以將第一個(gè)到主要組件用作X軸和Y軸。

  1. from sklearn.cluster import AgglomerativeClustering

  2. from scipy.spatial import ConvexHull


  3. # Import Data

  4. df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/USArrests.csv')


  5. # Agglomerative Clustering

  6. cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')  

  7. cluster.fit_predict(df[['Murder', 'Assault', 'UrbanPop', 'Rape']])  


  8. # Plot

  9. plt.figure(figsize=(14, 10), dpi= 80)  

  10. plt.scatter(df.iloc[:,0], df.iloc[:,1], c=cluster.labels_, cmap='tab10')  


  11. # Encircle

  12. def encircle(x,y, ax=None, **kw):

  13.    if not ax: ax=plt.gca()

  14.    p = np.c_[x,y]

  15.    hull = ConvexHull(p)

  16.    poly = plt.Polygon(p[hull.vertices,:], **kw)

  17.    ax.add_patch(poly)


  18. # Draw polygon surrounding vertices    

  19. encircle(df.loc[cluster.labels_ == 0, 'Murder'], df.loc[cluster.labels_ == 0, 'Assault'], ec='k', fc='gold', alpha=0.2, linewidth=0)

  20. encircle(df.loc[cluster.labels_ == 1, 'Murder'], df.loc[cluster.labels_ == 1, 'Assault'], ec='k', fc='tab:blue', alpha=0.2, linewidth=0)

  21. encircle(df.loc[cluster.labels_ == 2, 'Murder'], df.loc[cluster.labels_ == 2, 'Assault'], ec='k', fc='tab:red', alpha=0.2, linewidth=0)

  22. encircle(df.loc[cluster.labels_ == 3, 'Murder'], df.loc[cluster.labels_ == 3, 'Assault'], ec='k', fc='tab:green', alpha=0.2, linewidth=0)

  23. encircle(df.loc[cluster.labels_ == 4, 'Murder'], df.loc[cluster.labels_ == 4, 'Assault'], ec='k', fc='tab:orange', alpha=0.2, linewidth=0)


  24. # Decorations

  25. plt.xlabel('Murder'); plt.xticks(fontsize=12)

  26. plt.ylabel('Assault'); plt.yticks(fontsize=12)

  27. plt.title('Agglomerative Clustering of USArrests (5 Groups)', fontsize=22)

  28. plt.show()

圖48

49 安德魯斯曲線 (Andrews Curve)

安德魯斯曲線有助于可視化是否存在基于給定分組的數(shù)字特征的固有分組。 如果要素(數(shù)據(jù)集中的列)無(wú)法區(qū)分組(cyl),那么這些線將不會(huì)很好地隔離,如下所示。

  1. from pandas.plotting import andrews_curves


  2. # Import

  3. df = pd.read_csv('https://github.com/selva86/datasets/raw/master/mtcars.csv')

  4. df.drop(['cars', 'carname'], axis=1, inplace=True)


  5. # Plot

  6. plt.figure(figsize=(12,9), dpi= 80)

  7. andrews_curves(df, 'cyl', colormap='Set1')


  8. # Lighten borders

  9. plt.gca().spines['top'].set_alpha(0)

  10. plt.gca().spines['bottom'].set_alpha(.3)

  11. plt.gca().spines['right'].set_alpha(0)

  12. plt.gca().spines['left'].set_alpha(.3)


  13. plt.title('Andrews Curves of mtcars', fontsize=22)

  14. plt.xlim(-3,3)

  15. plt.grid(alpha=0.3)

  16. plt.xticks(fontsize=12)

  17. plt.yticks(fontsize=12)

  18. plt.show()

圖49

50 平行坐標(biāo) (Parallel Coordinates)

平行坐標(biāo)有助于可視化特征是否有助于有效地隔離組。 如果實(shí)現(xiàn)隔離,則該特征可能在預(yù)測(cè)該組時(shí)非常有用。

  1. from pandas.plotting import parallel_coordinates


  2. # Import Data

  3. df_final = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/diamonds_filter.csv')


  4. # Plot

  5. plt.figure(figsize=(12,9), dpi= 80)

  6. parallel_coordinates(df_final, 'cut', colormap='Dark2')


  7. # Lighten borders

  8. plt.gca().spines['top'].set_alpha(0)

  9. plt.gca().spines['bottom'].set_alpha(.3)

  10. plt.gca().spines['right'].set_alpha(0)

  11. plt.gca().spines['left'].set_alpha(.3)


  12. plt.title('Parallel Coordinated of Diamonds', fontsize=22)

  13. plt.grid(alpha=0.3)

  14. plt.xticks(fontsize=12)

  15. plt.yticks(fontsize=12)

  16. plt.show()

圖50


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深度好文 |Matplotlib 可視化最有價(jià)值的 50 個(gè)圖表
一文匯總Python可視化工具及圖表
干貨undefined|undefined20個(gè)Python教程,掌握時(shí)間序列的特征分析(附代碼)
常見統(tǒng)計(jì)分布的概率分布圖
python數(shù)據(jù)可視化 | DataFrame.plot()函數(shù)繪制數(shù)據(jù)圖
3種時(shí)間序列混合建模方法的效果對(duì)比和代碼實(shí)現(xiàn)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服