1 فراخوانی کتابخانه ها و آماده سازی

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)

2 بارگزاری دیتا فریم

emot <- read_csv("E:\\Acoustic features.csv")
## Rows: 400 Columns: 51
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr  (1): Class
## dbl (50): _RMSenergy_Mean, _Lowenergy_Mean, _Fluctuation_Mean, _Tempo_Mean, ...
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

3 اطلاعات نوع داده

class(emot)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"

4 خلاصه داده

glimpse(emot)
## Rows: 400
## Columns: 51
## $ Class                                            <chr> "relax", "relax", "re~
## $ `_RMSenergy_Mean`                                <dbl> 0.052, 0.125, 0.046, ~
## $ `_Lowenergy_Mean`                                <dbl> 0.591, 0.439, 0.639, ~
## $ `_Fluctuation_Mean`                              <dbl> 9.136, 6.680, 10.578,~
## $ `_Tempo_Mean`                                    <dbl> 130.043, 142.240, 188~
## $ `_MFCC_Mean_1`                                   <dbl> 3.997, 4.058, 2.775, ~
## $ `_MFCC_Mean_2`                                   <dbl> 0.363, 0.516, 0.903, ~
## $ `_MFCC_Mean_3`                                   <dbl> 0.887, 0.785, 0.502, ~
## $ `_MFCC_Mean_4`                                   <dbl> 0.078, 0.397, 0.329, ~
## $ `_MFCC_Mean_5`                                   <dbl> 0.221, 0.556, 0.287, ~
## $ `_MFCC_Mean_6`                                   <dbl> 0.118, 0.799, 0.140, ~
## $ `_MFCC_Mean_7`                                   <dbl> -0.151, -0.403, -0.24~
## $ `_MFCC_Mean_8`                                   <dbl> -0.131, -0.264, 0.025~
## $ `_MFCC_Mean_9`                                   <dbl> 0.129, -0.057, -0.112~
## $ `_MFCC_Mean_10`                                  <dbl> 0.154, 0.288, -0.422,~
## $ `_MFCC_Mean_11`                                  <dbl> 0.274, 0.309, 0.018, ~
## $ `_MFCC_Mean_12`                                  <dbl> 0.232, 0.049, 0.179, ~
## $ `_MFCC_Mean_13`                                  <dbl> 0.246, 0.027, 0.138, ~
## $ `_Roughness_Mean`                                <dbl> 51.542, 336.839, 39.8~
## $ `_Roughness_Slope`                               <dbl> 0.325, 0.366, 0.224, ~
## $ `_Zero-crossingrate_Mean`                        <dbl> 403.129, 204.886, 685~
## $ `_AttackTime_Mean`                               <dbl> 0.028, 0.015, 0.033, ~
## $ `_AttackTime_Slope`                              <dbl> -0.014, -0.079, -0.27~
## $ `_Rolloff_Mean`                                  <dbl> 1844.664, 1181.067, 1~
## $ `_Eventdensity_Mean`                             <dbl> 1.336, 1.336, 1.336, ~
## $ `_Pulseclarity_Mean`                             <dbl> 0.082, 0.051, 0.299, ~
## $ `_Brightness_Mean`                               <dbl> 0.173, 0.117, 0.496, ~
## $ `_Spectralcentroid_Mean`                         <dbl> 1121.368, 896.047, 41~
## $ `_Spectralspread_Mean`                           <dbl> 1970.389, 1959.622, 4~
## $ `_Spectralskewness_Mean`                         <dbl> 3.621, 4.134, 0.902, ~
## $ `_Spectralkurtosis_Mean`                         <dbl> 18.037, 21.990, 2.366~
## $ `_Spectralflatness_Mean`                         <dbl> 0.030, 0.025, 0.091, ~
## $ `_EntropyofSpectrum_Mean`                        <dbl> 0.806, 0.765, 0.897, ~
## $ `_Chromagram_Mean_1`                             <dbl> 0.496, 0.000, 0.412, ~
## $ `_Chromagram_Mean_2`                             <dbl> 0.000, 0.142, 0.245, ~
## $ `_Chromagram_Mean_3`                             <dbl> 0.047, 0.137, 0.526, ~
## $ `_Chromagram_Mean_4`                             <dbl> 0.030, 0.076, 0.095, ~
## $ `_Chromagram_Mean_5`                             <dbl> 0.314, 0.112, 0.519, ~
## $ `_Chromagram_Mean_6`                             <dbl> 0.038, 0.000, 0.001, ~
## $ `_Chromagram_Mean_7`                             <dbl> 0.024, 0.120, 0.563, ~
## $ `_Chromagram_Mean_8`                             <dbl> 0.951, 0.000, 0.282, ~
## $ `_Chromagram_Mean_9`                             <dbl> 0.426, 0.002, 0.184, ~
## $ `_Chromagram_Mean_10`                            <dbl> 1.000, 1.000, 0.746, ~
## $ `_Chromagram_Mean_11`                            <dbl> 0.008, 0.000, 0.016, ~
## $ `_Chromagram_Mean_12`                            <dbl> 0.101, 0.984, 1.000, ~
## $ `_HarmonicChangeDetectionFunction_Mean`          <dbl> 0.316, 0.285, 0.413, ~
## $ `_HarmonicChangeDetectionFunction_Std`           <dbl> 0.261, 0.211, 0.299, ~
## $ `_HarmonicChangeDetectionFunction_Slope`         <dbl> 0.018, -0.082, 0.134,~
## $ `_HarmonicChangeDetectionFunction_PeriodFreq`    <dbl> 1.035, 3.364, 1.682, ~
## $ `_HarmonicChangeDetectionFunction_PeriodAmp`     <dbl> 0.593, 0.702, 0.692, ~
## $ `_HarmonicChangeDetectionFunction_PeriodEntropy` <dbl> 0.970, 0.967, 0.963, ~

5 تعداد var و obs

nrow(emot)
## [1] 400
ncol(emot)
## [1] 51

6 تبدیل متغیر کیفی

emot <- emot |> 
  mutate(
    Class = as.factor(Class)
  )

glimpse(emot)
## Rows: 400
## Columns: 51
## $ Class                                            <fct> relax, relax, relax, ~
## $ `_RMSenergy_Mean`                                <dbl> 0.052, 0.125, 0.046, ~
## $ `_Lowenergy_Mean`                                <dbl> 0.591, 0.439, 0.639, ~
## $ `_Fluctuation_Mean`                              <dbl> 9.136, 6.680, 10.578,~
## $ `_Tempo_Mean`                                    <dbl> 130.043, 142.240, 188~
## $ `_MFCC_Mean_1`                                   <dbl> 3.997, 4.058, 2.775, ~
## $ `_MFCC_Mean_2`                                   <dbl> 0.363, 0.516, 0.903, ~
## $ `_MFCC_Mean_3`                                   <dbl> 0.887, 0.785, 0.502, ~
## $ `_MFCC_Mean_4`                                   <dbl> 0.078, 0.397, 0.329, ~
## $ `_MFCC_Mean_5`                                   <dbl> 0.221, 0.556, 0.287, ~
## $ `_MFCC_Mean_6`                                   <dbl> 0.118, 0.799, 0.140, ~
## $ `_MFCC_Mean_7`                                   <dbl> -0.151, -0.403, -0.24~
## $ `_MFCC_Mean_8`                                   <dbl> -0.131, -0.264, 0.025~
## $ `_MFCC_Mean_9`                                   <dbl> 0.129, -0.057, -0.112~
## $ `_MFCC_Mean_10`                                  <dbl> 0.154, 0.288, -0.422,~
## $ `_MFCC_Mean_11`                                  <dbl> 0.274, 0.309, 0.018, ~
## $ `_MFCC_Mean_12`                                  <dbl> 0.232, 0.049, 0.179, ~
## $ `_MFCC_Mean_13`                                  <dbl> 0.246, 0.027, 0.138, ~
## $ `_Roughness_Mean`                                <dbl> 51.542, 336.839, 39.8~
## $ `_Roughness_Slope`                               <dbl> 0.325, 0.366, 0.224, ~
## $ `_Zero-crossingrate_Mean`                        <dbl> 403.129, 204.886, 685~
## $ `_AttackTime_Mean`                               <dbl> 0.028, 0.015, 0.033, ~
## $ `_AttackTime_Slope`                              <dbl> -0.014, -0.079, -0.27~
## $ `_Rolloff_Mean`                                  <dbl> 1844.664, 1181.067, 1~
## $ `_Eventdensity_Mean`                             <dbl> 1.336, 1.336, 1.336, ~
## $ `_Pulseclarity_Mean`                             <dbl> 0.082, 0.051, 0.299, ~
## $ `_Brightness_Mean`                               <dbl> 0.173, 0.117, 0.496, ~
## $ `_Spectralcentroid_Mean`                         <dbl> 1121.368, 896.047, 41~
## $ `_Spectralspread_Mean`                           <dbl> 1970.389, 1959.622, 4~
## $ `_Spectralskewness_Mean`                         <dbl> 3.621, 4.134, 0.902, ~
## $ `_Spectralkurtosis_Mean`                         <dbl> 18.037, 21.990, 2.366~
## $ `_Spectralflatness_Mean`                         <dbl> 0.030, 0.025, 0.091, ~
## $ `_EntropyofSpectrum_Mean`                        <dbl> 0.806, 0.765, 0.897, ~
## $ `_Chromagram_Mean_1`                             <dbl> 0.496, 0.000, 0.412, ~
## $ `_Chromagram_Mean_2`                             <dbl> 0.000, 0.142, 0.245, ~
## $ `_Chromagram_Mean_3`                             <dbl> 0.047, 0.137, 0.526, ~
## $ `_Chromagram_Mean_4`                             <dbl> 0.030, 0.076, 0.095, ~
## $ `_Chromagram_Mean_5`                             <dbl> 0.314, 0.112, 0.519, ~
## $ `_Chromagram_Mean_6`                             <dbl> 0.038, 0.000, 0.001, ~
## $ `_Chromagram_Mean_7`                             <dbl> 0.024, 0.120, 0.563, ~
## $ `_Chromagram_Mean_8`                             <dbl> 0.951, 0.000, 0.282, ~
## $ `_Chromagram_Mean_9`                             <dbl> 0.426, 0.002, 0.184, ~
## $ `_Chromagram_Mean_10`                            <dbl> 1.000, 1.000, 0.746, ~
## $ `_Chromagram_Mean_11`                            <dbl> 0.008, 0.000, 0.016, ~
## $ `_Chromagram_Mean_12`                            <dbl> 0.101, 0.984, 1.000, ~
## $ `_HarmonicChangeDetectionFunction_Mean`          <dbl> 0.316, 0.285, 0.413, ~
## $ `_HarmonicChangeDetectionFunction_Std`           <dbl> 0.261, 0.211, 0.299, ~
## $ `_HarmonicChangeDetectionFunction_Slope`         <dbl> 0.018, -0.082, 0.134,~
## $ `_HarmonicChangeDetectionFunction_PeriodFreq`    <dbl> 1.035, 3.364, 1.682, ~
## $ `_HarmonicChangeDetectionFunction_PeriodAmp`     <dbl> 0.593, 0.702, 0.692, ~
## $ `_HarmonicChangeDetectionFunction_PeriodEntropy` <dbl> 0.970, 0.967, 0.963, ~

7 مشاهده variable ها

names(emot)
##  [1] "Class"                                         
##  [2] "_RMSenergy_Mean"                               
##  [3] "_Lowenergy_Mean"                               
##  [4] "_Fluctuation_Mean"                             
##  [5] "_Tempo_Mean"                                   
##  [6] "_MFCC_Mean_1"                                  
##  [7] "_MFCC_Mean_2"                                  
##  [8] "_MFCC_Mean_3"                                  
##  [9] "_MFCC_Mean_4"                                  
## [10] "_MFCC_Mean_5"                                  
## [11] "_MFCC_Mean_6"                                  
## [12] "_MFCC_Mean_7"                                  
## [13] "_MFCC_Mean_8"                                  
## [14] "_MFCC_Mean_9"                                  
## [15] "_MFCC_Mean_10"                                 
## [16] "_MFCC_Mean_11"                                 
## [17] "_MFCC_Mean_12"                                 
## [18] "_MFCC_Mean_13"                                 
## [19] "_Roughness_Mean"                               
## [20] "_Roughness_Slope"                              
## [21] "_Zero-crossingrate_Mean"                       
## [22] "_AttackTime_Mean"                              
## [23] "_AttackTime_Slope"                             
## [24] "_Rolloff_Mean"                                 
## [25] "_Eventdensity_Mean"                            
## [26] "_Pulseclarity_Mean"                            
## [27] "_Brightness_Mean"                              
## [28] "_Spectralcentroid_Mean"                        
## [29] "_Spectralspread_Mean"                          
## [30] "_Spectralskewness_Mean"                        
## [31] "_Spectralkurtosis_Mean"                        
## [32] "_Spectralflatness_Mean"                        
## [33] "_EntropyofSpectrum_Mean"                       
## [34] "_Chromagram_Mean_1"                            
## [35] "_Chromagram_Mean_2"                            
## [36] "_Chromagram_Mean_3"                            
## [37] "_Chromagram_Mean_4"                            
## [38] "_Chromagram_Mean_5"                            
## [39] "_Chromagram_Mean_6"                            
## [40] "_Chromagram_Mean_7"                            
## [41] "_Chromagram_Mean_8"                            
## [42] "_Chromagram_Mean_9"                            
## [43] "_Chromagram_Mean_10"                           
## [44] "_Chromagram_Mean_11"                           
## [45] "_Chromagram_Mean_12"                           
## [46] "_HarmonicChangeDetectionFunction_Mean"         
## [47] "_HarmonicChangeDetectionFunction_Std"          
## [48] "_HarmonicChangeDetectionFunction_Slope"        
## [49] "_HarmonicChangeDetectionFunction_PeriodFreq"   
## [50] "_HarmonicChangeDetectionFunction_PeriodAmp"    
## [51] "_HarmonicChangeDetectionFunction_PeriodEntropy"

8 کاربرد تابع slice

8.1 مشاهده سه ردیف اول

emot |> 
  slice(1:3)
## # A tibble: 3 x 51
##   Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##   <fct>             <dbl>             <dbl>               <dbl>         <dbl>
## 1 relax             0.052             0.591                9.14          130.
## 2 relax             0.125             0.439                6.68          142.
## 3 relax             0.046             0.639               10.6           188.
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>,
## #   `_AttackTime_Mean` <dbl>, `_AttackTime_Slope` <dbl>, ...

8.2 مشاهده ردیف آخر

emot |> 
  slice(n())
## # A tibble: 1 x 51
##   Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##   <fct>             <dbl>             <dbl>               <dbl>         <dbl>
## 1 angry             0.086             0.475                5.34          152.
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>,
## #   `_AttackTime_Mean` <dbl>, `_AttackTime_Slope` <dbl>, ...

8.3 نمونه گیری تصادفی هفت ردیف

emot |> 
  slice_sample(n = 5)
## # A tibble: 5 x 51
##   Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##   <fct>             <dbl>             <dbl>               <dbl>         <dbl>
## 1 relax             0.236             0.549                6.71          106.
## 2 happy             0.161             0.589                7.19          167.
## 3 angry             0.144             0.643                5.96          158.
## 4 relax             0.074             0.556                6.45          122.
## 5 relax             0.055             0.676                6.99          144.
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>,
## #   `_AttackTime_Mean` <dbl>, `_AttackTime_Slope` <dbl>, ...

8.4 مشاهده بیشترین مقدار تمپو

emot |> 
  slice_max(`_Tempo_Mean`)
## # A tibble: 1 x 51
##   Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##   <fct>             <dbl>             <dbl>               <dbl>         <dbl>
## 1 angry             0.101             0.562                5.90          195.
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>,
## #   `_AttackTime_Mean` <dbl>, `_AttackTime_Slope` <dbl>, ...

9 کاربرد تابع select

9.1 بخش های مربوظ به انرژی صوتی همراه متغیر هدف

emot |> 
  select(Class,`_RMSenergy_Mean`,`_Lowenergy_Mean`,`_Fluctuation_Mean`)
## # A tibble: 400 x 4
##    Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean`
##    <fct>             <dbl>             <dbl>               <dbl>
##  1 relax             0.052             0.591                9.14
##  2 relax             0.125             0.439                6.68
##  3 relax             0.046             0.639               10.6 
##  4 relax             0.135             0.603               10.4 
##  5 relax             0.066             0.591                9.77
##  6 relax             0.137             0.51                 7.66
##  7 relax             0.123             0.533                7.48
##  8 relax             0.103             0.575                7.01
##  9 relax             0.145             0.542                6.85
## 10 relax             0.129             0.618                8.67
## # i 390 more rows

9.2 بخش های مربوظ به انرژی صوتی همراه متغیر هدف

emot |> 
  select(`_Tempo_Mean`,Class,everything())
## # A tibble: 400 x 51
##    `_Tempo_Mean` Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean`
##            <dbl> <fct>             <dbl>             <dbl>               <dbl>
##  1         130.  relax             0.052             0.591                9.14
##  2         142.  relax             0.125             0.439                6.68
##  3         188.  relax             0.046             0.639               10.6 
##  4          66.0 relax             0.135             0.603               10.4 
##  5          88.9 relax             0.066             0.591                9.77
##  6         116.  relax             0.137             0.51                 7.66
##  7         136.  relax             0.123             0.533                7.48
##  8         141.  relax             0.103             0.575                7.01
##  9          82.0 relax             0.145             0.542                6.85
## 10          93.0 relax             0.129             0.618                8.67
## # i 390 more rows
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>, ...

9.3 مشاهده متغیر هایی که با کلمه R شروع میشوند

emot |> 
  select(starts_with("_R"))
## # A tibble: 400 x 4
##    `_RMSenergy_Mean` `_Roughness_Mean` `_Roughness_Slope` `_Rolloff_Mean`
##                <dbl>             <dbl>              <dbl>           <dbl>
##  1             0.052              51.5              0.325           1845.
##  2             0.125             337.               0.366           1181.
##  3             0.046              39.9              0.224          10779.
##  4             0.135             354.               0.215           6746.
##  5             0.066              46.9             -0.118           3328.
##  6             0.137             249.               0.04            5093.
##  7             0.123             336.               0.272            887.
##  8             0.103             293.               0.345           8090.
##  9             0.145             738.               0.38            1584.
## 10             0.129             215.               0.185           6397.
## # i 390 more rows

9.4 مشاهده متغیر هایی که با sتمام میشوند

emot |> 
  select(ends_with("s"))
## # A tibble: 400 x 1
##    Class
##    <fct>
##  1 relax
##  2 relax
##  3 relax
##  4 relax
##  5 relax
##  6 relax
##  7 relax
##  8 relax
##  9 relax
## 10 relax
## # i 390 more rows

9.5 مشاهده متغیر هایی که در آنها از حروف oug استفاده شده است

emot |> 
  select(contains("oug"))
## # A tibble: 400 x 2
##    `_Roughness_Mean` `_Roughness_Slope`
##                <dbl>              <dbl>
##  1              51.5              0.325
##  2             337.               0.366
##  3              39.9              0.224
##  4             354.               0.215
##  5              46.9             -0.118
##  6             249.               0.04 
##  7             336.               0.272
##  8             293.               0.345
##  9             738.               0.38 
## 10             215.               0.185
## # i 390 more rows

10 کاربرد تابع arrange

10.1 داده هارا بر اساس میزان تمپو صعودی مرتب کنید

emot |> 
  arrange(`_Tempo_Mean`)
## # A tibble: 400 x 51
##    Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##    <fct>             <dbl>             <dbl>               <dbl>         <dbl>
##  1 sad               0.153             0.554                7.17          48.3
##  2 happy             0.11              0.449               16.2           52.0
##  3 relax             0.084             0.56                 8.45          52.8
##  4 relax             0.15              0.567                7.83          52.9
##  5 sad               0.1               0.558                6.04          53.0
##  6 angry             0.151             0.562                5.73          54.5
##  7 angry             0.115             0.587                4.30          54.9
##  8 relax             0.167             0.63                 8.21          55.0
##  9 relax             0.129             0.593                6.69          55.3
## 10 happy             0.143             0.505                6.93          58.1
## # i 390 more rows
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>, ...

10.2 داده ها را بر اساس میزان تمپو نزولی مرتب کنید

emot |> 
  arrange(desc(`_Tempo_Mean`))
## # A tibble: 400 x 51
##    Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##    <fct>             <dbl>             <dbl>               <dbl>         <dbl>
##  1 angry             0.101             0.562                5.90          195.
##  2 sad               0.085             0.58                 6.13          194.
##  3 happy             0.132             0.537                6.85          194.
##  4 happy             0.168             0.604                7.63          192.
##  5 happy             0.167             0.582                7.89          190.
##  6 happy             0.077             0.552                7.35          189.
##  7 happy             0.077             0.552                7.35          189.
##  8 relax             0.109             0.575                6.61          188.
##  9 relax             0.046             0.639               10.6           188.
## 10 happy             0.065             0.512               17.3           188.
## # i 390 more rows
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>, ...

11 کاربرد تابع filter

11.1 آهنگ هایی که تمپو بالای 150 دارند و تغییرات انرژی بالای 5

emot |> 
  filter(`_Tempo_Mean` > 150 , `_Fluctuation_Mean` > 5)
## # A tibble: 87 x 51
##    Class `_RMSenergy_Mean` `_Lowenergy_Mean` `_Fluctuation_Mean` `_Tempo_Mean`
##    <fct>             <dbl>             <dbl>               <dbl>         <dbl>
##  1 relax             0.046             0.639               10.6           188.
##  2 relax             0.068             0.659                8.58          182.
##  3 relax             0.14              0.522                7.12          158.
##  4 relax             0.068             0.613                6.29          176.
##  5 relax             0.127             0.508                9.59          179.
##  6 relax             0.1               0.548                5.39          165.
##  7 relax             0.123             0.515                6.56          168.
##  8 relax             0.083             0.543                6.06          179.
##  9 relax             0.109             0.575                6.61          188.
## 10 relax             0.093             0.543               10.1           182.
## # i 77 more rows
## # i 46 more variables: `_MFCC_Mean_1` <dbl>, `_MFCC_Mean_2` <dbl>,
## #   `_MFCC_Mean_3` <dbl>, `_MFCC_Mean_4` <dbl>, `_MFCC_Mean_5` <dbl>,
## #   `_MFCC_Mean_6` <dbl>, `_MFCC_Mean_7` <dbl>, `_MFCC_Mean_8` <dbl>,
## #   `_MFCC_Mean_9` <dbl>, `_MFCC_Mean_10` <dbl>, `_MFCC_Mean_11` <dbl>,
## #   `_MFCC_Mean_12` <dbl>, `_MFCC_Mean_13` <dbl>, `_Roughness_Mean` <dbl>,
## #   `_Roughness_Slope` <dbl>, `_Zero-crossingrate_Mean` <dbl>, ...

11.2 تعداد آهنگ های شاد

happy_emot <- emot |> 
  filter(Class == "happy")
nrow(happy_emot)
## [1] 100

11.3 چند درصد داده ها مربوط به آهنگای شاد است

mean(emot$Class == "happy")*100
## [1] 25

11.4 تعداد آهنگ هایی که غمگین یا خشن هستند

sad_angry_emot <- emot |> 
  filter(Class %in% c("sad","angry"))
nrow(sad_angry_emot)
## [1] 200

12 کاردبرد تابع mutate و transmute

12.1 ستونی بسازید که میزان خشونت صدا نسبت به انرژی کل را نشان دهد

emot <- emot |> 
  mutate(RbyR = `_Roughness_Mean` / `_RMSenergy_Mean`)

12.2 ستونی بسازید که زمان حمله صدا را به سه دسته تقسیم کند

emot <- emot |> 
  mutate(Attack_time_type = case_when(
    `_AttackTime_Mean` < 0.05 ~ "Short",
    `_AttackTime_Mean` < 0.15 ~ "Medium",
    TRUE ~ "Long"
    
  ))

12.2.1 ستون های جدید که ساختید را به همراه متغیر هدف نمایش دهید

emot |> 
  select(Attack_time_type,RbyR,Class)
## # A tibble: 400 x 3
##    Attack_time_type  RbyR Class
##    <chr>            <dbl> <fct>
##  1 Short             991. relax
##  2 Short            2695. relax
##  3 Short             867. relax
##  4 Short            2620. relax
##  5 Short             710. relax
##  6 Short            1820. relax
##  7 Medium           2734. relax
##  8 Short            2848. relax
##  9 Short            5089. relax
## 10 Short            1667. relax
## # i 390 more rows

12.3 متغیر tempo_metr را طوری بسازید که آهنگ ها را بر اساس میزان تمپو به سه دسته Low , Medium و High تقسیم بندی کند و آن را همرا با ستون متغیر هدف در دیتاستی جدید نمایش دهد

emot |> 
  transmute(
    Class,
    tempo_metr = case_when(
      `_Tempo_Mean` < 90 ~ "Low",
      `_Tempo_Mean` < 130 ~ "Medium",
      TRUE ~ "High"
    )
  )
## # A tibble: 400 x 2
##    Class tempo_metr
##    <fct> <chr>     
##  1 relax High      
##  2 relax High      
##  3 relax High      
##  4 relax Low       
##  5 relax Low       
##  6 relax Medium    
##  7 relax High      
##  8 relax High      
##  9 relax Low       
## 10 relax Medium    
## # i 390 more rows

13 خلاصه سازی و استفاده از توابع group_by و summarise

13.1 یک جدول خلاصه سازی شده بسازید که برای هر class تعداد آهنگ ها و tempo_Mean را نمایش دهد

Tempo_summary <- emot |> 
  group_by(Class) |> 
  summarise(
    count_song = n(),
    avg_tempo = mean(`_Tempo_Mean`, na.rm = TRUE)
  ) |> 
  ungroup()

13.1.1 دیدن جدول

Tempo_summary
## # A tibble: 4 x 3
##   Class count_song avg_tempo
##   <fct>      <int>     <dbl>
## 1 angry        100      129.
## 2 happy        100      124.
## 3 relax        100      113.
## 4 sad          100      128.

14 بخش مصور سازی

14.1 در این بخش با استفاده از بسته های مختلف R داده های مربوط به مجموعه داده موسیقی ترکی تحلیل و مصور سازی میشوند ابتدا کتابخانه های مورد نیاز فراخوانی شده و سپس داده ها وارد محیط R میشوند در ادامه با استفاده از نمودار های مناسب روابط بین متغیر ها توزیع داده ها و ویژگی های مهم مجموعه داده بررسی خواهند شد

14.1.1 فراخوانی کتابخانه های مورد نیاز

library(dplyr)
library(tidyr)
library(ggplot2)
library(ggthemes)
library(RColorBrewer)
library(viridis)
## Loading required package: viridisLite
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:viridis':
## 
##     viridis_pal
## The following object is masked from 'package:readr':
## 
##     col_factor
library(ggridges)
library(DT)
library(GGally)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(treemapify)
library(sn)
## Loading required package: stats4
## 
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
## 
##     sd
library(tmap)
library(patchwork)
library(ggcorrplot)
library(htmlwidgets)

15 مشخصات مجموعه داده

15.1 این مجموعه داده شامل ویژگی های آکوستیکی موسیقی های ترکی است.

15.2 متغیر پاسخ : class

15.3 نوع متغیر : categorical

15.4 نوع مسئله : classification

15.5 الگوریتم های مناسب : Decision Tree , Random Forest , Logistic Regression , Support Vector Machine , Naive Bayes , KNN

16 نمودار میله ای فراوانی احساسات

16.1 در این نمودار تعداد آهنگ های موجود در هر کلاس احساسی نمایش داده میشوند

ggplot(emot, aes(x = Class, fill = Class)) +
  geom_bar() +
  labs(
    title = "Distribution of Emotion Classes",
    x = "Emotion Class",
    y = "Frequency"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    legend.position = "none"
  )

16.1.1 تفسیر نمودار : نمودار میله ای فراوانی هر یک از کلاس های احساسی موجود در مجموعه داده را نمایش میدهد. این نمودار به بررسی توزیع متغیر پاسخ Class کمک میکند و مشخص میسازد که هر احساس چه تعداد نمونه در مجموعه داده دارد. بررسی توزیع کلاس ها از اهمیت بالایی برخوردار است، زیرا متوازن بودن تعداد نمونه‌های هر کلاس میتواند موجب افزایش دقت و کاهش سوگیری در مدل های طبقه بندی شود. همچنین این نمودار دید اولیه مناسبی از ساختار مجموعه داده و نحوه پراکندگی احساسات ارائه میدهد.

17 نمودار دایره ای فراوانی احساسات

17.1 در این نمودار، سهم هر کلاس احساسی از کل مجموعه داده به صورت درصدی نمایش داده میشود

17.1.1 ابتدا فراوانی هر کلاس را محاسبه میکنیم

emotion_count <- emot |>
  count(Class)

17.1.2 سپس نمودار را رسم میکنیم

ggplot(emotion_count,
       aes(x = "", y = n, fill = Class)) +
  geom_col(color = "white") +
  coord_polar(theta = "y") +
  labs(
    title = "Percentage of Emotion Classes",
    fill = "Emotion"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_void()

17.1.3 تفسیر نمودار : نمودار دایره ای سهم نسبی هر یک از کلاس های احساسی را از کل مجموعه داده نشان می‌دهد. این نمودار به درک بهتر نسبت هر کلاس کمک میکند و به صورت درصدی بیان میکند که هر احساس چه سهمی از کل داده ها را تشکیل میدهد. با مقایسه اندازه بخش های مختلف نمودار میتوان وضعیت توزیع کلاس ها را به سادگی ارزیابی کرد.

18 نمودار هیستوگرام میانگین تمپو

18.1 در این نمودار توزیع متغیر Tempo_Mean نمایش داده میشود هیستوگرام یکی از مناسب ترین نمودارها برای بررسی نحوه توزیع داده های عددی و شناسایی تمرکز پراکندگی و وجود داده های پرت است

ggplot(emot, aes(x = `_Tempo_Mean`)) +
  geom_histogram(
    bins = 30,
    fill = "#4E79A7",
    color = "white"
  ) +
  labs(
    title = "Distribution of Mean Tempo",
    x = "Mean Tempo",
    y = "Frequency"
  ) +
  theme_minimal()

18.1.1 تفسیر نمودار : این هیستوگرام نحوه توزیع میانگین تمپو در مجموعه داده را نشان میدهد. با استفاده از این نمودار می توان میزان تمرکز داده ها، گستردگی مقادیر و وجود احتمالی داده های پرت را بررسی کرد

19 نمودار چگالی (Density Plot)

19.1 نمودار چگالی، توزیع پیوسته متغیر Tempo_Mean را نمایش میدهد. این نمودار نسبت به هیستوگرام، شکل کلی توزیع داده ها را نرم تر نشان میدهد و برای مقایسه توزیع بین کلاس های مختلف بسیار مناسب است

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           fill = Class)) +
  geom_density(alpha = 0.5) +
  labs(
    title = "Density Plot of Mean Tempo",
    x = "Mean Tempo",
    y = "Density"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

19.1.1 تفسیر نمودار : نمودار چگالی، نحوه توزیع متغیر Tempo_Mean را برای هر یک از کلاس های احساسی نشان می‌دهد. این نمودار امکان مقایسه شکل توزیع، میزان پراکندگی و نواحی تمرکز داده ها را بین کلاس های مختلف فراهم میکند. در صورت مشاهده هم پوشانی زیاد بین منحنی ها، میتوان نتیجه گرفت که میانگین تمپو به تنهایی قدرت تفکیک بالایی بین برخی احساسات ندارد و برای طبقه بندی بهتر، استفاده از سایر ویژگی های صوتی نیز ضروری است.

20 نمودار جعبه ای (Box Plot)

20.1 نمودار جعبه ای برای مقایسه توزیع متغیر Tempo_Mean در کلاس های مختلف احساسی استفاده میشود. این نمودار علاوه بر نمایش میانه و چارک ها، داده های پرت (Outlier) را نیز مشخص میکند و امکان مقایسه پراکندگی داده ها بین گروه های مختلف را فراهم میسازد.

ggplot(emot,
       aes(x = Class,
           y = `_Tempo_Mean`,
           fill = Class)) +
  geom_boxplot() +
  labs(
    title = "Box Plot of Mean Tempo by Emotion Class",
    x = "Emotion Class",
    y = "Mean Tempo"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

20.1.1 تفسیر نمودار : نمودار جعبه ای توزیع متغیر Tempo_Mean را در هر یک از کلاس های احساسی نمایش میدهد. با استفاده از این نمودار میتوان میانه، دامنه بین چارکی (IQR)، میزان پراکندگی داده ها و وجود داده های پرت را برای هر کلاس بررسی کرد. مقایسه جعبه ها نشان میدهد که آیا میانگین تمپو در احساسات مختلف تفاوت قابل توجهی دارد یا خیر. همچنین نقاط خارج از جعبه به عنوان داده های پرت شناسایی میشوند که میتوانند در تحلیل های بعدی مورد بررسی قرار گیرند.

21 نمودار ویولنی (Violin Plot)

21.1 نمودار ویولنی ترکیبی از نمودار جعبه ای و نمودار چگالی است. این نمودار علاوه بر نمایش میانه و پراکندگی داده ها، شکل توزیع متغیر را نیز برای هر کلاس احساسی نشان میدهد و امکان مقایسه دقیق تر توزیع داده ها بین گروه های مختلف را فراهم میکند.

ggplot(emot,
       aes(x = Class,
           y = `_Tempo_Mean`,
           fill = Class)) +
  geom_violin(trim = FALSE,
              alpha = 0.8) +
  labs(
    title = "Violin Plot of Mean Tempo by Emotion Class",
    x = "Emotion Class",
    y = "Mean Tempo"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

21.1.1 تفسیر نمودار : نمودار ویولنی توزیع متغیر Tempo_Mean را برای هر کلاس احساسی نمایش میدهد. پهنای هر قسمت از نمودار نشان دهنده تراکم داده ها در آن ناحیه است؛ به عبارت دیگر، هرچه نمودار در یک بازه پهن تر باشد، تعداد بیشتری از داده ها در آن محدوده قرار دارند. این نمودار امکان مقایسه شکل توزیع، میزان پراکندگی و تفاوت الگوی داده ها را بین احساسات مختلف فراهم میکند و نسبت به نمودار جعبه ای اطلاعات بیشتری درباره ساختار توزیع ارائه میدهد.

22 نمودار چگالی چندگانه (Multiple Density)

22.1 در این نمودار، توزیع متغیر Tempo_Mean برای هر یک از کلاس های احساسی به صورت هم زمان نمایش داده می شود تا امکان مقایسه شکل توزیع بین گروه های مختلف فراهم گردد.

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           fill = Class)) +
  geom_density(alpha = 0.6) +
  labs(
    title = "Multiple Density Plot of Mean Tempo",
    x = "Mean Tempo",
    y = "Density"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

22.1.1 تفسیر نمودار : این نمودار توزیع متغیر Tempo_Mean را برای تمامی کلاس های احساسی به صورت هم زمان نمایش میدهد. هم پوشانی منحنی ها نشان هنده میزان شباهت توزیع تمپو بین احساسات مختلف است، در حالی که فاصله میان قله های منحنی ها میتواند بیانگر تفاوت در الگوی تمپو میان کلاس های احساسی باشد.

23 نمودار Ridge Plot

23.1 نمودار Ridge Plot یکی از روش های مناسب برای مقایسه توزیع یک متغیر عددی در گروه های مختلف است. در این نمودار، توزیع متغیر Tempo_Mean برای هر یک از کلاس های احساسی به صورت جداگانه نمایش داده میشود تا مقایسه بین احساسات مختلف آسان تر شود.

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           y = Class,
           fill = Class)) +
  geom_density_ridges(alpha = 0.8) +
  theme_ridges() +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Ridge Plot of Mean Tempo by Emotion Class",
    x = "Mean Tempo",
    y = "Emotion Class"
  ) +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold", hjust = 0.5)
  )
## Picking joint bandwidth of 11.8

23.1.1 تفسیر نمودار : نمودار Ridge Plot توزیع متغیر Tempo_Mean را به تفکیک هر کلاس احساسی نمایش میدهد. این نمودار امکان مقایسه شکل توزیع، میزان پراکندگی و نواحی تمرکز داده ها را بین کلاس های مختلف فراهم میکند. هرچه قله منحنی بلندتر باشد، نشان دهنده تمرکز بیشتر داده ها در آن محدوده از تمپو است و تفاوت بین منحنی ها میتواند بیانگر تفاوت الگوی تمپو در احساسات مختلف باشد.

24 نمودار KDE دومتغیره (Density2D)

24.1 در این نمودار، رابطه بین دو متغیر عددی Tempo_Mean و RMSenergy_Mean بررسی میشود. خطوط چگالی، نواحی با تمرکز بیشتر داده ها را نشان میدهند و نمودار پراکندگی نیز موقعیت هر مشاهده را نمایش میدهد

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           y = `_RMSenergy_Mean`)) +
  geom_density2d(color = "red") +
  geom_point(color = "steelblue",
             alpha = 0.6,
             size = 2) +
  labs(
    title = "2D Kernel Density of Tempo and RMS Energy",
    x = "Mean Tempo",
    y = "Mean RMS Energy"
  ) +
  theme_minimal()

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

25 نمودار KDE دومتغیره رنگی (Density2D Filled)

25.1 این نمودار نسخه پیشرفته تر نمودار چگالی دومتغیره است. در این روش، نواحی با تراکم بیشتر داده ها با رنگهای مختلف نمایش داده میشوند و درک بهتری از محل تجمع داده ها فراهم میشود.

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           y = `_RMSenergy_Mean`)) +
  geom_density2d_filled(alpha = 0.7) +
  geom_point(color = "black",
             size = 1.5,
             alpha = 0.5) +
  labs(
    title = "Filled 2D Kernel Density of Tempo and RMS Energy",
    x = "Mean Tempo",
    y = "Mean RMS Energy"
  ) +
  theme_minimal()

25.1.1 تفسیر نمودار : در این نمودار، نواحی با رنگهای پررنگ تر نشان دهنده تراکم بیشتر داده ها هستند. این ویژگی باعث میشود محل تجمع نمونه ها با وضوح بیشتری نسبت به نمودار خطوط چگالی مشخص شود. همچنین پراکندگی نقاط در کنار نواحی رنگی، درک بهتری از رابطه بین متغیرهایTempo_Mean و RMSenergy_Mean ارائه میدهد

26 نمودار ماتریس همبستگی (Correlation Plot)

26.1 در این بخش، میزان همبستگی بین تعدادی از مهم ترین ویژگی های صوتی مجموعه داده بررسی میشود. ماتریس همبستگی به شناسایی متغیرهایی که دارای ارتباط مثبت یا منفی با یکدیگر هستند کمک میکند.

selected_features <- emot |>
  select(
    `_Tempo_Mean`,
    `_RMSenergy_Mean`,
    `_AttackTime_Mean`,
    `_Brightness_Mean`,
    `_Roughness_Mean`,
    `_Spectralcentroid_Mean`,
    `_Spectralspread_Mean`,
    `_Zero-crossingrate_Mean`,
    `_Lowenergy_Mean`,
    `_Pulseclarity_Mean`
  )

cor_mat <- cor(selected_features)

ggcorrplot(
  cor_mat,
  method = "circle",
  hc.order = TRUE,
  lab = TRUE,
  type = "upper"
)

26.1.1 تحلیل و تفسیر نمودار : این نمودار میزان همبستگی بین ویژگی های مهم صوتی را نمایش میدهد. ضرایب همبستگی مثبت نشان دهنده افزایش هم زمان دو متغیر و ضرایب منفی بیانگر رابطه معکوس بین آنها هستند. همچنین مرتب سازی خوشه ای (Hierarchical Clustering) باعث میشود ویژگی های مشابه در کنار یکدیگر قرار گیرند و الگوهای ارتباطی بهتر قابل مشاهده باشند.

27 نمودار GGPairs

27.1 نمودار GGPairs برای بررسی هم زمان روابط بین چندین متغیر عددی استفاده میشود. این نمودار علاوه بر نمایش نمودارهای پراکندگی، توزیع هر متغیر و ضرایب همبستگی را نیز نمایش میدهد و یکی از کاربردی ترین ابزارها برای تحلیل اکتشافی داده ها (EDA) است.

emot |>
  select(
    Class,
    `_Tempo_Mean`,
    `_RMSenergy_Mean`,
    `_Brightness_Mean`,
    `_Roughness_Mean`
  ) |>
  ggpairs(aes(color = Class, alpha = 0.7))
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

27.1.1 تفسیر نمودار : نمودار GGPairs روابط بین ویژگی های مهم صوتی را به صورت هم زمان نمایش میدهد. در قطر اصلی ماتریس، توزیع هر متغیر نمایش داده شده و در سایر خانه ها، نمودارهای پراکندگی و میزان ارتباط بین متغیرها قابل مشاهده است. این نمودار به شناسایی الگوها، همبستگی ها و تفاوت کلاس های احساسی کمک میکند و یکی از مهم ترین ابزارهای تحلیل اکتشافی داده ها به شمار میرود.

28 نمودار میله ای تعاملی

28.1 در این بخش، نمودار میله ای با استفاده از بسته Plotly به صورت تعاملی نمایش داده میشود. کاربر میتواند با قرار دادن نشانگر ماوس روی هر ستون، اطلاعات مربوط به آن کلاس احساسی را مشاهده کند.

bar_plot <- ggplot(emot,
                   aes(x = Class,
                       fill = Class)) +
  geom_bar() +
  labs(
    title = "Interactive Emotion Distribution",
    x = "Emotion",
    y = "Frequency"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

ggplotly(bar_plot)

28.1.1 تفسیر نمودار : این نمودار همان توزیع کلاس های احساسی را به صورت تعاملی نمایش میدهد. قابلیت تعامل با نمودار باعث میشود کاربر بتواند اطلاعات هر ستون را با حرکت نشانگر ماوس مشاهده کند و تحلیل دقیق تری از داده ها داشته باشد.

29 نمودار پراکندگی تعاملی

29.1 در این نمودار رابطه بین میانگین تمپو و میانگین انرژی صوتی به صورت تعاملی نمایش داده میشود.

scatter_plot <- ggplot(
  emot,
  aes(
    x = `_Tempo_Mean`,
    y = `_RMSenergy_Mean`,
    color = Class
  )
) +
  geom_point(size = 2) +
  labs(
    title = "Interactive Scatter Plot",
    x = "Mean Tempo",
    y = "Mean RMS Energy"
  ) +
  theme_minimal()

ggplotly(scatter_plot)

29.1.1 تفسیر نمودار : این نمودار رابطه بین دو ویژگی مهم صوتی را نمایش میدهد. امکان بزرگ نمایی، جابه جایی و مشاهده اطلاعات هر نقطه باعث میشود تحلیل داده ها دقیق تر و آسان تر انجام شود.

30 نمودار رگرسیونی (Regression Plot)

30.1 در این نمودار، رابطه بین دو متغیر عددی Tempo_Mean و RMSenergy_Mean بررسی میشود. علاوه بر نمایش نقاط، یک خط رگرسیون خطی نیز رسم میشود تا روند کلی تغییرات و جهت ارتباط بین دو متغیر مشخص گردد.

ggplot(emot,
       aes(x = `_Tempo_Mean`,
           y = `_RMSenergy_Mean`,
           color = Class)) +
  geom_point(alpha = 0.7, size = 2) +
  geom_smooth(
    aes(group = 1),
    method = "lm",
    color = "black",
    se = TRUE,
    linewidth = 1
  ) +
  scale_color_brewer(palette = "Set2") +
  labs(
    title = "Regression Plot of Tempo and RMS Energy",
    x = "Mean Tempo",
    y = "Mean RMS Energy",
    color = "Emotion"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

30.1.1 تحلیل و تفسیر نمودار : این نمودار رابطه بین متغیرهای Tempo_Mean و RMSenergy_Mean را به همراه خط رگرسیون خطی نمایش میدهد. نقاط آبی نشان دهنده مشاهدات مجموعه داده هستند و خط قرمز روند کلی تغییرات را مشخص میکند. اگر شیب خط رگرسیون مثبت باشد، نشان دهنده افزایش هم زمان میانگین انرژی صوتی با افزایش تمپو است و اگر شیب منفی باشد، بیانگر رابطه معکوس بین این دو متغیر خواهد بود. همچنین ناحیه سایه دار اطراف خط، بازه اطمینان مدل رگرسیونی را نمایش میدهد.