গুগল শিটের কোনও ব্যাপ্তিতে ডেটা কীভাবে বিভক্ত করা যায়


9

আমার কাছে ডেটা সহ একটি অ্যারে রয়েছে:

   X      Y
   3     50
   5     60
   9    120
  11    130
  18     90
  20    150

ডেটা সম্পূর্ণরূপে অ-রৈখিক। এক্স বাছাই করার গ্যারান্টিযুক্ত।

এখন যে কোনও মানের জন্য, আমি সংখ্যার মধ্যে রৈখিক দ্রবীভূত করতে চাই (সুতরাং উদাহরণস্বরূপ, 3 => 50, 4 => 55, 5 => 60)। একটি বিলিনার অন্তরঙ্গকরণ আরও সুন্দর হতে পারে তবে আমি আমার প্রত্যাশা কম রাখছি।

উত্তর:


9

এই স্ক্রিপ্টটি একই কাজ করবে (আরও কিছুটা বেশি)।

কোড

function myInterpolation(x, y, value) {
  if(value > Math.max.apply(Math, x) || value < Math.min.apply(Math, x)) {
    throw "value can't be interpolated !!";
    return;
  }

  var check = 0, index;
  for(var i = 0, iLen = x.length; i < iLen; i++) {
    if(x[i][0] == value) {
      return y[i][0];
    } else {      
      if(x[i][0] < value && ((x[i][0] - check) < (value - check))) {
        check = x[i][0];
        index = i;
      }
    }
  }

  var xValue, yValue, xDiff, yDiff, xInt;
  yValue = y[index][0];
  xDiff = x[index+1][0] - check;
  yDiff = y[index+1][0] - yValue;
  xInt = value - check; 

  return (xInt * (yDiff / xDiff)) + yValue;
}

ব্যাখ্যা

স্ক্রিপ্টের শুরুতে, একটি ছোট ত্রুটি পরিচালনা করা আছে। এর পরে এটি ইনপুট মানের তুলনায় প্রথম সর্বনিম্ন এন্ট্রিটি খুঁজে পাবে। একবার খুঁজে পাওয়া গেলে, এটি কিছু গণিত করে এবং ফলাফল উপস্থাপন করবে।

বিঃদ্রঃ

যদি নির্বাচিত মান 20 এর সমান হয় তবে স্ক্রিপ্টটি সূত্রটি যেখানে ফলন করবে সেখানে 150 ফিরিয়ে দেয় #DIV/0

স্ক্রিনশট

এখানে চিত্র বর্ণনা লিখুন

সূত্র

সমস্ত মান বিবেচনায় নিতে নিম্নলিখিত সূত্রটি ব্যবহার করুন

=IF(
   ISNA(
     MATCH(C2,A2:A7,0)),
   FORECAST(
     $C$2,
     OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),
     OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)), 
   INDEX(
     B2:B7,
     MATCH(C2,A2:A7,0)
     ,0)
 )

 copy / paste
 =IF(ISNA(MATCH(C2, A2:A7, 0)), FORECAST($C$2,OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)), INDEX(B2:B7, MATCH(C2, A2:A7, 0), 0))

উদাহরণ

সরঞ্জামগুলি> স্ক্রিপ্ট সম্পাদকের অধীনে স্ক্রিপ্ট যুক্ত করুন এবং সেভ বোতামটি টিপুন (কোনও প্রমাণীকরণের প্রয়োজন নেই)।

আমি আপনার জন্য একটি উদাহরণ ফাইল তৈরি করেছি: গুগল শিটের কোনও ব্যাপ্তিতে ডেটা কীভাবে বিভক্ত করা যায়


2
ধন্যবাদ জ্যাকব! সত্যি কথা বলতে, আমি প্রায় আমার সংস্করণটি আরও ভাল পছন্দ করি কারণ এটি মোবাইল ডিভাইসগুলিতেও কাজ করে (নেটিভ অ্যান্ড্রয়েড শীটস অ্যাপ্লিকেশন এবং ওয়েব অ্যাপ্লিকেশনটির মোবাইল সংস্করণে স্ক্রিপ্ট সমর্থন নেই) তবে আপনার ফাংশনটি অবশ্যই পরিষ্কার এবং আরও মার্জিত । তাই আমি আপনার উত্তর বাছাই করছি।
ইবোমাইক

@ ইবোমাইক আমি আমার কোডটি দেখলাম এবং একটি ত্রুটি লক্ষ্য করেছি। আমি কোডটি সংশোধন করেছি এবং একটি সূত্র নিয়ে এসেছি, যাতে আপনি এটি আপনার মোবাইল অ্যাপে ব্যবহার করতে পারেন।
জ্যাকব জানু টিনস্ট্রা

2
এবং এ কারণেই এটি দুর্ভাগ্য যে আপনি একবারের চেয়ে বেশি উত্তর উত্সাহ দিতে পারবেন না :) ধন্যবাদ জ্যাকব।
ইবোমাইক

10

আমি এটি করার একটি উপায় খুঁজে পেয়েছি - এর চেয়ে আরও ভাল উপায় আর হতে পারে তবে আমি এটাই সামনে এলাম:

ধরে নিই ডেটা A1: B10 এ রয়েছে এবং $ C $ 1 এ সন্ধানের কী রয়েছে:

=FORECAST($C$1,
    OFFSET(B$1,MATCH($C$1,A$1:A$10,1)-1,0,2,1),
    OFFSET(A$1,MATCH($C$1,A$1:A$10,1)-1,0,2,1))

বিস্তারিত:

ফরেক্সট একটি লিনিয়ার ইন্টারপোলেশন করে তবে এটি একটি সরল রেখা ধরে। সুতরাং আমাদের দুটি মান খুঁজে বের করা দরকার যা আমরা খুঁজছি এমন মানটি সংযুক্ত করে।

সুতরাং আমরা যা খুঁজছি তার চেয়ে সমান বা উচ্চতর প্রথম সংখ্যাটি অনুসন্ধান করতে আমরা ম্যাচটি ব্যবহার করি।

ফরেক্সট কোনও ডেটা রেঞ্জের প্রত্যাশা করে, তাই আমরা কোনও ডেটা রেঞ্জের রেফারেন্স তৈরি করতে অফসেট ব্যবহার করি। ম্যাচটি এক-সূচকযুক্ত, সুতরাং আমাদের প্রথমে একটি বিয়োগ করা উচিত। আমরা একটি প্রস্থ তৈরি করি যা এক প্রশস্ত এবং দুটি উচ্চ। এই মানটি আমাদের সন্ধানের মান $ C enc 1 আবদ্ধ করার গ্যারান্টিযুক্ত।


+1 টি; সুন্দর সূত্র !! নির্বাচনের x=20ফলাফল হবে #DIV/0
জ্যাকব জানু টিনস্ট্রা

1

এটি জ্যাকব জ্যান তুইনস্ট্রার স্ক্রিপ্টের একটি ছোট্ট পরিবর্তন, এটি তৃতীয় আর্গুমেন্ট হিসাবে কোনও অ্যারে বা মান গ্রহণ করতে সক্ষম করে, যাতে একাধিক স্থানে বিরক্তিকর কার্যটি গণনা করা যায়। পার্থক্যটি হ'ল শুরুতে যুক্ত কয়েকটি লাইন; কোনও অ্যারে গ্রহণ করে এমন কোনও কাস্টম ফাংশনকে কাস্টম ফাংশনে পরিণত করার এটি একটি দ্রুত উপায়।

function myInterpolation(x, y, value) {
  if (value.map) {
    return value.map(function(v) {
      return myInterpolation(x, y, v);
    });
  }
  //  the rest stays the same

  if (value > Math.max.apply(Math, x) || value < Math.min.apply(Math, x)) {
    throw "value can't be interpolated !!";
    return;
  }

  var check = 0, index;
  for(var i = 0, iLen = x.length; i < iLen; i++) {
    if(x[i][0] == value) {
      return y[i][0];
    } else {      
      if(x[i][0] < value && ((x[i][0] - check) < (value - check))) {
        check = x[i][0];
        index = i;
      }
    }
  }

  var xValue, yValue, xDiff, yDiff, xInt;
  yValue = y[index][0];
  xDiff = x[index+1][0] - check;
  yDiff = y[index+1][0] - yValue;
  xInt = value - check; 

  return (xInt * (yDiff / xDiff)) + yValue;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.