R এ ডাটা ফিল্টারিং - প্রফেশনাল টিপস

Author

Abdullah Al Shamim

Published

২৩ ডিসেম্বর, ২০২৫

0.1 স্টেপ ১: প্যাকেজ ইনস্টলেশন ও লোডিং

Code
# টাইডিভার্স প্যাকেজ ইনস্টল করুন (প্রথমবারের জন্য)
#install.packages("tidyverse")

# প্যাকেজ লোড করুন
library(tidyverse)
Code
# msleep ডাটাসেট দেখুন
view(msleep)

ব্যাখ্যা:

  • msleep ডাটাসেটে ৮৩টি স্তন্যপায়ী প্রাণীর ঘুম সম্পর্কিত ডাটা আছে

  • এতে নাম, ঘুমের সময়, ব্রেইন ওজন, বডি ওজন ইত্যাদি তথ্য আছে

  • এটি ggplot2 প্যাকেজের সাথে আসে

0.2 টিপ ১: সরল ফিল্টারিং (সিংগেল কন্ডিশন)

১.১ যেসব প্রাণী ১৮ ঘণ্টার বেশি ঘুমায়

Code
long_sleepers <- msleep %>% 
  select(name, sleep_total) %>% 
  filter(sleep_total > 18)

print(long_sleepers)
# A tibble: 4 × 2
  name                 sleep_total
  <chr>                      <dbl>
1 Big brown bat               19.7
2 Thick-tailed opposum        19.4
3 Little brown bat            19.9
4 Giant armadillo             18.1

ব্যাখ্যা:

  • %>% পাইপ অপারেটর ডাটাকে পরের ফাংশনে পাঠায়

  • select() শুধু name ও sleep_total কলাম রাখে

  • filter(sleep_total > 18) শুধুমাত্র ১৮-এর বেশি ঘুমানো প্রাণীগুলো রাখে

১.২ যেসব প্রাণী ১৮ ঘণ্টার কম ঘুমায়

Code
short_sleepers <- msleep %>% 
  select(name, sleep_total) %>% 
  filter(!sleep_total > 18)

# অথবা সরাসরি
short_sleepers <- msleep %>% 
  select(name, sleep_total) %>% 
  filter(sleep_total <= 18)

short_sleepers
# A tibble: 79 × 2
   name                       sleep_total
   <chr>                            <dbl>
 1 Cheetah                           12.1
 2 Owl monkey                        17  
 3 Mountain beaver                   14.4
 4 Greater short-tailed shrew        14.9
 5 Cow                                4  
 6 Three-toed sloth                  14.4
 7 Northern fur seal                  8.7
 8 Vesper mouse                       7  
 9 Dog                               10.1
10 Roe deer                           3  
# ℹ 69 more rows

ব্যাখ্যা:

  • ! হলো লজিক্যাল NOT অপারেটর

  • !sleep_total > 18 মানে “NOT (sleep_total > 18)”

  • এটি sleep_total <= 18 এর সমতুল্য

0.3 টিপ ২: মাল্টিপল কন্ডিশন (AND অপারেটর)

২.১ কমা (,) ব্যবহার করে AND অপারেশন

Code
primates_heavy <- msleep %>% 
  select(name, order, bodywt, sleep_total) %>% 
  filter(order == "Primates", bodywt > 20)

primates_heavy
# A tibble: 3 × 4
  name       order    bodywt sleep_total
  <chr>      <chr>     <dbl>       <dbl>
1 Human      Primates   62           8  
2 Chimpanzee Primates   52.2         9.7
3 Baboon     Primates   25.2         9.4

ব্যাখ্যা:

  • কমা (,) দিয়ে একাধিক কন্ডিশন দিলে সেটি AND অপারেটর হিসেবে কাজ করে

  • অর্থাৎ: order == “Primates” এবং bodywt > 20

  • দুইটি শর্তই পূরণ হতে হবে

২.২ এম্পারস্যান্ড (&) ব্যবহার করে

Code
primates_heavy <- msleep %>% 
  select(name, order, bodywt, sleep_total) %>% 
  filter(order == "Primates" & bodywt > 20)

primates_heavy
# A tibble: 3 × 4
  name       order    bodywt sleep_total
  <chr>      <chr>     <dbl>       <dbl>
1 Human      Primates   62           8  
2 Chimpanzee Primates   52.2         9.7
3 Baboon     Primates   25.2         9.4

দুইটিই একই কাজ করে। আপনি যেকোনোটা ব্যবহার করতে পারেন!

0.4 টিপ ৩: OR অপারেটর ব্যবহার

৩.১ পাইপ (|) দিয়ে OR অপারেশন

Code
primates_or_heavy <- msleep %>% 
  select(name, order, bodywt, sleep_total) %>% 
  filter(order == "Primates" | bodywt > 20)

primates_or_heavy
# A tibble: 33 × 4
   name              order           bodywt sleep_total
   <chr>             <chr>            <dbl>       <dbl>
 1 Cheetah           Carnivora        50           12.1
 2 Owl monkey        Primates          0.48        17  
 3 Cow               Artiodactyla    600            4  
 4 Northern fur seal Carnivora        20.5          8.7
 5 Goat              Artiodactyla     33.5          5.3
 6 Grivet            Primates          4.75        10  
 7 Asian elephant    Proboscidea    2547            3.9
 8 Horse             Perissodactyla  521            2.9
 9 Donkey            Perissodactyla  187            3.1
10 Patas monkey      Primates         10           10.9
# ℹ 23 more rows

ব্যাখ্যা:

  • | হলো লজিক্যাল OR অপারেটর

  • যেকোনো একটি শর্ত পূরণ হলেই হবে

  • অর্থাৎ: Primates অর্ডারের প্রাণী অথবা ২০ কেজির বেশি ওজনের প্রাণী

0.5 টিপ ৪: মাল্টিপল ভ্যালু ফিল্টারিং

৪.১ %in% অপারেটর ব্যবহার (সেরা পদ্ধতি)

Code
specific_animals <- msleep %>% 
  select(name, sleep_total) %>% 
  filter(name %in% c("Rabbit", "Tiger", "Horse"))

specific_animals
# A tibble: 3 × 2
  name   sleep_total
  <chr>        <dbl>
1 Horse          2.9
2 Rabbit         8.4
3 Tiger         15.8

ব্যাখ্যা:

  • %in% চেক করে name ভেক্টরের মানগুলো c() ভেক্টরের মধ্যে আছে কিনা

  • অনেক বেশি নামের জন্য সহজ এবং পড়তে সুবিধা

0.6 টিপ ৫: রেঞ্জ ফিল্টারিং

৫.১ between() ফাংশন ব্যবহার

Code
moderate_sleepers <- msleep %>% 
  select(name, sleep_total) %>%
  filter(between(sleep_total, 10, 16))

moderate_sleepers
# A tibble: 37 × 2
   name                       sleep_total
   <chr>                            <dbl>
 1 Cheetah                           12.1
 2 Mountain beaver                   14.4
 3 Greater short-tailed shrew        14.9
 4 Three-toed sloth                  14.4
 5 Dog                               10.1
 6 Grivet                            10  
 7 Chinchilla                        12.5
 8 Star-nosed mole                   10.3
 9 European hedgehog                 10.1
10 Patas monkey                      10.9
# ℹ 27 more rows

ব্যাখ্যা:

  • between(column, lower, upper) ফাংশন রেঞ্জ চেক করে

  • এখানে: 10 ≤ sleep_total ≤ 16

  • সীমার মানগুলো অন্তর্ভুক্ত করে (inclusive)

৫.২ near() ফাংশন ব্যবহার

Code
near_17 <- msleep %>% 
  select(name, sleep_total) %>%
  filter(near(sleep_total, 17, tol = 0.5))

near_17
# A tibble: 3 × 2
  name                   sleep_total
  <chr>                        <dbl>
1 Owl monkey                    17  
2 Long-nosed armadillo          17.4
3 Arctic ground squirrel        16.6

ব্যাখ্যা:

  • near(value, target, tol = tolerance)

  • tol = tolerance বা সহনশীলতা (ডিফল্ট 0.0000001)

  • এখানে: 16.5 ≤ sleep_total ≤ 17.5

0.7 টিপ ৬: মিসিং ভ্যালু (NA) হ্যান্ডলিং

৬.১ যেসব প্রাণীর conservation status জানা নেই

Code
unknown_conservation <- msleep %>% 
  select(name, conservation, sleep_total) %>%
  filter(is.na(conservation))

unknown_conservation
# A tibble: 29 × 3
   name                        conservation sleep_total
   <chr>                       <chr>              <dbl>
 1 "Owl monkey"                <NA>                17  
 2 "Three-toed sloth"          <NA>                14.4
 3 "Vesper mouse"              <NA>                 7  
 4 "African giant pouched rat" <NA>                 8.3
 5 "Western american chipmunk" <NA>                14.9
 6 "Galago"                    <NA>                 9.8
 7 "Human"                     <NA>                 8  
 8 "Macaque"                   <NA>                10.1
 9 "Vole "                     <NA>                12.8
10 "Little brown bat"          <NA>                19.9
# ℹ 19 more rows

ব্যাখ্যা:

  • is.na() ফাংশন চেক করে ভ্যালু missing (NA) কিনা

  • conservation কলামে NA থাকলে সেই সারিগুলো ফিল্টার করবে

৬.২ যেসব প্রাণীর conservation status জানা আছে

Code
known_conservation <- msleep %>% 
  select(name, conservation, sleep_total) %>%
  filter(!is.na(conservation))

known_conservation
# A tibble: 54 × 3
   name                       conservation sleep_total
   <chr>                      <chr>              <dbl>
 1 Cheetah                    lc                  12.1
 2 Mountain beaver            nt                  14.4
 3 Greater short-tailed shrew lc                  14.9
 4 Cow                        domesticated         4  
 5 Northern fur seal          vu                   8.7
 6 Dog                        domesticated        10.1
 7 Roe deer                   lc                   3  
 8 Goat                       lc                   5.3
 9 Guinea pig                 domesticated         9.4
10 Grivet                     lc                  10  
# ℹ 44 more rows

ব্যাখ্যা:

  • !is.na() মানে “NOT missing”

  • conservation কলামে যেসব প্রাণীর তথ্য আছে শুধু সেগুলোই রাখবে

0.8 প্রাকটিক্যাল উদাহরণ

Code
# প্র্যাকটিস: বিভিন্ন ফিল্টার একসাথে
library(tidyverse)

# উদাহরণ ১: ভারী ও কম ঘুমানো প্রাণী
heavy_light_sleepers <- msleep %>%
  select(name, vore, bodywt, sleep_total, conservation) %>%
  filter(bodywt > 50, sleep_total < 8) %>%
  arrange(desc(bodywt))

# উদাহরণ ২: কমপ্লেক্স ফিল্টার
complex_filter <- msleep %>%
  select(name, order, vore, bodywt, sleep_total, conservation) %>%
  filter(
    # কন্ডিশন ১: ওজন ১০-৫০ কেজি
    between(bodywt, 10, 50),
    # কন্ডিশন ২: ঘুম ৮-১২ ঘণ্টা
    sleep_total >= 8 & sleep_total <= 12,
    # কন্ডিশন ৩: conservation জানা নেই অথবা domesticated
    is.na(conservation) | conservation == "domesticated"
  )

# ফলাফল দেখুন
print(heavy_light_sleepers)
# A tibble: 13 × 5
   name                 vore  bodywt sleep_total conservation
   <chr>                <chr>  <dbl>       <dbl> <chr>       
 1 African elephant     herbi 6654           3.3 vu          
 2 Asian elephant       herbi 2547           3.9 en          
 3 Giraffe              herbi  900.          1.9 cd          
 4 Pilot whale          carni  800           2.7 cd          
 5 Cow                  herbi  600           4   domesticated
 6 Horse                herbi  521           2.9 domesticated
 7 Brazilian tapir      herbi  208.          4.4 vu          
 8 Donkey               herbi  187           3.1 domesticated
 9 Bottle-nosed dolphin carni  173.          5.2 <NA>        
10 Caspian seal         carni   86           3.5 vu          
11 Gray seal            carni   85           6.2 lc          
12 Sheep                herbi   55.5         3.8 domesticated
13 Common porpoise      carni   53.2         5.6 vu          
Code
print(complex_filter)
# A tibble: 2 × 6
  name   order     vore  bodywt sleep_total conservation
  <chr>  <chr>     <chr>  <dbl>       <dbl> <chr>       
1 Dog    Carnivora carni   14          10.1 domesticated
2 Baboon Primates  omni    25.2         9.4 <NA>        

0.9 অপারেটর সারাংশ

অপারেটর অর্থ উদাহরণ
> বড় filter(sleep_total > 18)
< ছোট filter(sleep_total < 5)
>= বড় বা সমান filter(weight >= 20)
<= ছোট বা সমান filter(weight <= 100)
== সমান filter(order == "Primates")
!= অসমান filter(order != "Rodentia")
%in% তালিকার মধ্যে filter(name %in% c("A", "B"))
is.na() মিসিং ভ্যালু filter(is.na(conservation))
!is.na() মিসিং নয় filter(!is.na(conservation))
, বা & AND (এবং) filter(a > 10, b < 20)
` ` OR (অথবা) `filter(a > 10 b < 20)`
! NOT (না) filter(!(a > 10))
between() মধ্যে filter(between(x, 10, 20))
near() কাছাকাছি filter(near(x, 15, tol = 1))

0.10 প্র্যাকটিস সমস্যা

Code
# সমস্যা ১: যেসব প্রাণী ১৫ ঘণ্টার বেশি ঘুমায় এবং ৫০ কেজির কম
prob1 <- msleep %>%
  filter(sleep_total > 15, bodywt < 50)


# সমস্যা ২: Primates বা Carnivora অর্ডারের প্রাণী
prob2 <- msleep %>%
  filter(order %in% c("Primates", "Carnivora"))


# সমস্যা ৩: যেসব প্রাণীর ব্রেইন ওজন জানা আছে কিন্তু বডি ওজন জানা নেই
prob3 <- msleep %>%
  filter(!is.na(brainwt), is.na(bodywt))


# সমস্যা ৪: ১০-২০ কেজি ওজনের এবং ৮-১২ ঘণ্টা ঘুমানো প্রাণী
prob4 <- msleep %>%
  filter(between(bodywt, 10, 20), 
         between(sleep_total, 8, 12))

0.11মনে রাখার বিষয়

  • R-এ ফিল্টারিং শেখা ডাটা অ্যানালাইসিসের প্রথম ধাপ

  • tidyverse প্যাকেজ সবচেয়ে জনপ্রিয় ও সহজ

  • প্রতিদিন ১৫-২০ মিনিট প্র্যাকটিস করলে ১ সপ্তাহে দক্ষ হয়ে যাবেন

  • ভুল করলে ভয় পাবেন না - ভুল থেকে শেখাই আসল মজা!

পাওয়ার টিপ: dplyr::filter() ফাংশনের মধ্যে if_any() বা if_all() ব্যবহার করে একসাথে অনেক কলাম ফিল্টার করা যায়!