تحلیل داده های چند بعدی در پایتون — راهنمای کاربردی

۴۷۹ بازدید
آخرین به‌روزرسانی: ۳۱ اردیبهشت ۱۴۰۲
زمان مطالعه: ۵ دقیقه
تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

«تحلیل داده‌های چند بعدی» (Multidimensional Data Aanalysis)، نوع مهم و مفیدی از تحلیل‌ها است که امروزه با توجه به افزایش حجم و البته، ابعاد داده‌ها، از اهمیت به سزایی برخوردار است. در این نوع از تحلیل‌ها، روابط گوناگون موجود میان متغیرها و به طور کل، داده‌ها، در نظر گرفته می‌شوند. در ادامه، برخی از روش‌های تحلیل داده های چند بعدی در پایتون مورد بررسی قرار می‌گیرد.

مجموعه داده مورد استفاده برای تحلیل داده‌های چند بعدی و چند متغیره

مجموعه داده‌ای که در این مطلب برای تحلیل داده های چندبُعدی در پایتون مورد استفاده قرار گرفته است، «Zoo Data Set» نام دارد.

مشخصات این مجموعه داده در جدول زیر ارائه شده است.

خصیصه مجموعه داده چند متغیره
نوع ویژگی‌ها دسته‌ای، صحیح
نوع وظیفه مربوطه دسته‌بندی
تعداد نمونه‌ها ۱۰۱
تعداد ویژگی‌ها ۱۷
حاوی مقادیر ناموجود؟ خیر

این مجموعه داده را می‌توان از اینجا دانلود کرد.

تحلیل داده های چند بعدی در پایتون

در راستای انجام تحلیل، ابتدا باید مجموعه داده را «وارد» (Import | ایمپورت) کرد.

بدین منظور، می‌توان از قطعه کد زیر استفاده کرد.

import pandas as pd 
  
zoo_data = pd.read_csv("zoo_data.csv", encoding = 'utf-8', 
                              index_col = ["animal_name"]) 
  
# print first 5 rows of zoo data  
print(zoo_data.head())

خروجی قطعه کد بالا، به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

نکته: نوع ویژگی‌هایی که در این مجموعه داده وجود دارند، معمولا «دسته‌ای» (Categorical) هستند. روش مورد استفاده در این مطلب برای تحلیل داده‌های دسته‌ای، بسیار ساده و قابل درک است و تفسیر و پیاده‌سازی آن نیز آسان خواهد بود. روش مورد استفاده در این مطلب، شامل «تحلیل همبستگی» (Correlation Analysis)، «تحلیل مولفه اساسی» (Principal Component Analysis | PCA) و «تحلیل داده اکتشافی» (Exploratory Data Analysis | EDA) می‌شود.

تحلیل خوشه

با توجه به آنکه داده‌های موجود بر مبنای ویژگی‌های انواع مختلف حیوانات است، می‌توان حیوانات را در گروه‌های گوناگون (خوشه‌ها) یا زیرگروه‌هایی با استفاده از روش‌های خوشه‌بندی شناخته شده‌ای مانند «K-میانه» (K-Means)، «خوشه‌بندی سلسله مراتبی» (Hierarchical Clustering) و «K-نزدیک‌ترین همسایگی» (K-Nearest Neighbours | KNN) دسته‌بندی کرد.

به منظور حفظ سادگی، به نظر می‌رسد که خوشه‌بندی K-Means در این مثال گزینه مناسب‌تری باشد. خوشه‌بندی داده‌ها با استفاده از روش خوشه‌بندی K-Means با استفاده از ماژول KMeans از cluster class از کتابخانه پایتون «سایکیت‌لِرن» (Scikit-Learn) انجام می‌شود. قطعه کد مورد استفاده در این راستا، در ادامه آمده است.

# from sklearn.cluster import KMeans 
clusters = 7
  
kmeans = KMeans(n_clusters = clusters) 
kmeans.fit(zoo_data) 
  
print(kmeans.labels_)

خروجی قطعه کد بالا، به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

در اینجا، اینرسی کلی خوشه برابر با 119.70392382759556 است. این مقدار در متغیر kmeans.inertia_‎ ذخیره شده است.

تحلیل EDA

برای انجام تحلیل‌های EDA، نیاز به کاهش ابعاد داده‌های چند متغیره موجود به داده‌های دوبُعدی و سه‌بُعدی وجود دارد. برای رسیدن به این مقصود، می‌توان از «تحلیل مولفه اساسی» (Principal Component Analysis | PCA) استفاده کرد.

برای اعمال PCA، می‌توان از PCA module از class decomposition، از کتابخانه sklearn به صورت زیر استفاده کرد.

# from sklearn.decomposition import PCA 
  
pca = PCA(3) 
pca.fit(zoo_data) 
  
pca_data = pd.DataFrame(pca.transform(zoo_data)) 
  
print(pca_data.head())

خروجی قطعه کد بالا، به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

خروجی داده بالا، نشانگر داده‌های کاهش یافته به سه‌بُعد است که می‌توان تحلیل EDA را روی آن‌ها انجام داد.

نکته: داده‌های کاهش یافته تولید شده به وسیله PCA را می‌توان به طور غیر مستقیم برای انجام انواع گوناگونی از تحلیل‌ها استفاده کرد؛ اما این داده‌ها به طور مستقیم توسط انسان قابل تفسیر نیستند.

نمودار نقطه‌ای، یک نمودار دوبُعدی/سه‌بُعدی است که برای تحلیل خوشه‌های گوناگون در داده‌های دوبُعدی/سه‌بُعدی مفید هستند. نمودار نقطه‌ای سه‌بُعدی داده‌هایی که پیش از این تولید شده‌اند را می‌توان با استفاده از روشی که در ادامه بیان شده است، ترسیم کرد.

کد زیر یک کد «پایتونیک» (Pythonic) است که آرایه‌ای از رنگ‌های مرتب شده بر اساس رنگ، مقدار و اشباع آن‌ها را تولید می‌کند. در این نمودار نقطه‌ای، که در آن تعداد رنگ‌ها تقریبا برابر با تعداد خوشه‌ها است. در اینجا، هر رنگ، به یک خوشه تخصیص یافته و برای مشخص کردن یک حیوان به عنوان یک نقطه در هنگام ترسیم آن در یک نمودار/فضای سه‌بُعدی است (در این مثال، نمودار نقطه‌ای).

from matplotlib import colors as mcolors 
import math 
   
''' Generating different colors in ascending order  
                                of their hsv values '''
colors = list(zip(*sorted(( 
                    tuple(mcolors.rgb_to_hsv( 
                          mcolors.to_rgba(color)[:3])), name) 
                     for name, color in dict( 
                            mcolors.BASE_COLORS, **mcolors.CSS4_COLORS 
                                                      ).items())))[1] 
   
   
# number of steps to taken generate n(clusters) colors  
skips = math.floor(len(colors[5 : -5])/clusters) 
cluster_colors = colors[5 : -5 : skips] 

کد زیر یک کد پایتونیک است که یک نمودار نقطه‌ای سه‌بُعدی را تولید می‌کند که در آن، هر نقطه داده دارای یک رنگ مرتبط به خوشه متناظر آن است.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
   
fig = plt.figure() 
ax = fig.add_subplot(111, projection = '3d') 
ax.scatter(pca_data[0], pca_data[1], pca_data[2],  
           c = list(map(lambda label : cluster_colors[label], 
                                            kmeans.labels_))) 
   
str_labels = list(map(lambda label:'% s' % label, kmeans.labels_)) 
   
list(map(lambda data1, data2, data3, str_label: 
        ax.text(data1, data2, data3, s = str_label, size = 16.5, 
        zorder = 20, color = 'k'), pca_data[0], pca_data[1], 
        pca_data[2], str_labels)) 
   
plt.show()

خروجی قطعه کد بالا، به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

تحلیل دقیق نمودار نقطه‌ای می‌تواند به این نظریه بیانجامد که خوشه‌های شکل گرفته با استفاده از داده‌های اولیه، قدرت بیان کافی را ندارند. برای حل این مشکل، نیاز به کاهش داده‌ها به داده‌هایی است که می‌توانند خوشه‌های مفیدی تولید کنند. یک راه برای تولید چنین ویژگی‌هایی، انجام تحلیل همبستگی است. این کار را می‌توان با ترسیم نمودار «نقشه گرمایی» (Heatmap) و «سطحی سه‌بُعدی» (Trisurface) انجام داد. در این راستا، می‌توان از قطعه کد زیر استفاده کرد.

import seaborn as sns 
  
# generating correlation heatmap 
sns.heatmap(zoo_data.corr(), annot = True) 
  
# posting correlation heatmap to output console  
plt.show()

خروجی قطعه کد بالا به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

کد زیر برای تولید یک نمودار سطحی سه‌بُعدی از «ماتریس همبستگی» (Correlation Matrix) با ساخت لیستی از تاپل‌ها که در آن‌ها یک تاپل حاوی مقادیر مختصات و همبستگی به ترتیب اسامی حیوانات است، مورد استفاده قرار می‌گیرد. «شبه‌کد» (Psuedocode) مورد استفاده برای این کار در زیر آمده است.

# PsuedoCode
tuple -> (position_in_dataframe(feature1),
          position_in_dataframe(feature2),
          correlation(feature1, feature2))

کد مورد استفاده برای ترسیم نمودار سطحی سه‌بُعدی ماتریس همبستگی به صورت زیر است.

from matplotlib import cm 
  
# generating correlation data 
df = zoo_data.corr() 
df.index = range(0, len(df)) 
df.rename(columns = dict(zip(df.columns, df.index)), inplace = True) 
df = df.astype(object) 
  
''' Generating coordinates with  
corresponding correlation values '''
for i in range(0, len(df)): 
    for j in range(0, len(df)): 
        if i != j: 
            df.iloc[i, j] = (i, j, df.iloc[i, j]) 
        else : 
            df.iloc[i, j] = (i, j, 0) 
  
df_list = [] 
  
# flattening dataframe values 
for sub_list in df.values: 
    df_list.extend(sub_list) 
  
# converting list of tuples into trivariate dataframe 
plot_df = pd.DataFrame(df_list) 
  
fig = plt.figure() 
ax = Axes3D(fig) 
  
# plotting 3D trisurface plot 
ax.plot_trisurf(plot_df[0], plot_df[1], plot_df[2],  
                    cmap = cm.jet, linewidth = 0.2) 
  
plt.show()

خروجی قطعه کد بالا به صورت زیر است.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

با استفاده از نمودار گرمایشی و سطحی سه‌بُعدی، می‌توان استدلال‌هایی پیرامون چگونگی انتخاب یک مجموعه کوچک‌تر از ویژگی‌های مورد استفاده برای انجام تحلیل خوشه داشت. به طور کلی، جفت ویژگی‌ها با مقادیر همبستگی بالا، دارای قدرت بیان بالایی هستند و می‌توان از آن‌ها برای تحلیل‌های بیشتر استفاده کرد.

در این مثال، با نگاهی به هر دو نمودار، می‌توان به یک لیست عقلانی از هفت ویژگی [“milk”, “eggs”, “hair”, “toothed”, “feathers”, “breathes”, “aquatic”] رسید. با اجرای مجدد تحلیل خوشه روی زیرمجموعه مجموعه ویژگی‌ها، می‌توان نمودار نقطه‌ای با استلال بهتر پیرامون چگونگی توزیع حیوانات مختلف در میان گروه‌های گوناگون را به دست آورد.

تحلیل داده های چند بعدی در پایتون -- راهنمای کاربردی

در اینجا، شاهد یک اینترسی خوشه کاهش یافته به 14.479670329670329 هستیم که در واقع بسیار کمتر از اینرسی اولیه است.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeeks

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *