সঠিক নেস্টেড অবজেক্ট তৈরির জন্য আপনি চান আমরা খাঁটি জাভাস্ক্রিপ্টের মিশ্রণ এবং একটি ডি 3 পদ্ধতি ব্যবহার করব d3.stratify
। তবে মনে রাখবেন 7 মিলিয়ন সারি (দয়া করে পোস্ট স্ক্রিটামটি দেখুন) নীচের দেখুন) গণনা করার মতো অনেক কিছুই।
এটি উল্লেখ করা খুব গুরুত্বপূর্ণ যে, এই প্রস্তাবিত সমাধানের জন্য আপনাকে পৃথক পৃথক ডেটা অ্যারে (উদাহরণস্বরূপ, ব্যবহার করে Array.prototype.filter
) আলাদা করতে হবে । এই বিধিনিষেধটি ঘটে কারণ আমাদের একটি রুট নোডের প্রয়োজন, এবং লিন্ন বিভাগে রাজ্যের মধ্যে কোনও সম্পর্ক নেই (যদি না আপনি "ডোমেন" তৈরি করেন তবে শীর্ষস্থান হিসাবে যা সমস্ত ইউক্যারিওটসের মূল হবে, তবে তারপরে আপনার একই রকম থাকবে) আরচিয়া এবং ব্যাকটিরিয়ার সমস্যা)।
সুতরাং, ধরুন আপনার কাছে কেবলমাত্র একটি কিংডম সহ এই সিএসভি (আমি আরও কয়েকটি সারি যুক্ত করেছি):
RecordID,kingdom,phylum,class,order,family,genus,species
1,Animalia,Chordata,Mammalia,Primates,Hominidae,Homo,Homo sapiens
2,Animalia,Chordata,Mammalia,Carnivora,Canidae,Canis,Canis latrans
3,Animalia,Chordata,Mammalia,Cetacea,Delphinidae,Tursiops,Tursiops truncatus
1,Animalia,Chordata,Mammalia,Primates,Hominidae,Pan,Pan paniscus
সেই সিএসভির উপর ভিত্তি করে, আমরা এখানে একটি অ্যারে তৈরি করব tableOfRelationships
যা নাম থেকেই বোঝা যাচ্ছে যে এই স্তরের মধ্যে সম্পর্ক রয়েছে:
const data = d3.csvParse(csv);
const taxonomicRanks = data.columns.filter(d => d !== "RecordID");
const tableOfRelationships = [];
data.forEach(row => {
taxonomicRanks.forEach((d, i) => {
if (!tableOfRelationships.find(e => e.name === row[d])) tableOfRelationships.push({
name: row[d],
parent: row[taxonomicRanks[i - 1]] || null
})
})
});
উপরের তথ্যগুলির জন্য, এটি হ'ল tableOfRelationships
:
+---------+----------------------+---------------+
| (Index) | name | parent |
+---------+----------------------+---------------+
| 0 | "Animalia" | null |
| 1 | "Chordata" | "Animalia" |
| 2 | "Mammalia" | "Chordata" |
| 3 | "Primates" | "Mammalia" |
| 4 | "Hominidae" | "Primates" |
| 5 | "Homo" | "Hominidae" |
| 6 | "Homo sapiens" | "Homo" |
| 7 | "Carnivora" | "Mammalia" |
| 8 | "Canidae" | "Carnivora" |
| 9 | "Canis" | "Canidae" |
| 10 | "Canis latrans" | "Canis" |
| 11 | "Cetacea" | "Mammalia" |
| 12 | "Delphinidae" | "Cetacea" |
| 13 | "Tursiops" | "Delphinidae" |
| 14 | "Tursiops truncatus" | "Tursiops" |
| 15 | "Pan" | "Hominidae" |
| 16 | "Pan paniscus" | "Pan" |
+---------+----------------------+---------------+
null
এর অভিভাবক হিসাবে একবার দেখুন Animalia
: সে কারণেই আমি আপনাকে বলেছিলাম যে আপনাকে আপনার ডেটাসেটকে কিংডম দ্বারা আলাদা করতে হবে null
, পুরো টেবিলের মধ্যে একটি মাত্র মান থাকতে পারে ।
অবশেষে, সেই টেবিলের উপর ভিত্তি করে, আমরা এই ব্যবহার করে শ্রেণিবিন্যাস তৈরি করি d3.stratify()
:
const stratify = d3.stratify()
.id(function(d) { return d.name; })
.parentId(function(d) { return d.parent; });
const hierarchicalData = stratify(tableOfRelationships);
এবং এখানে ডেমো। আপনার ব্রাউজারের কনসোলটি খুলুন (স্নিপেটের একটিটি এই কাজের জন্য খুব ভাল নয়) এবং children
বস্তুর বিভিন্ন স্তরের ( ) পরীক্ষা করুন :
const csv = `RecordID,kingdom,phylum,class,order,family,genus,species
1,Animalia,Chordata,Mammalia,Primates,Hominidae,Homo,Homo sapiens
2,Animalia,Chordata,Mammalia,Carnivora,Canidae,Canis,Canis latrans
3,Animalia,Chordata,Mammalia,Cetacea,Delphinidae,Tursiops,Tursiops truncatus
1,Animalia,Chordata,Mammalia,Primates,Hominidae,Pan,Pan paniscus`;
const data = d3.csvParse(csv);
const taxonomicRanks = data.columns.filter(d => d !== "RecordID");
const tableOfRelationships = [];
data.forEach(row => {
taxonomicRanks.forEach((d, i) => {
if (!tableOfRelationships.find(e => e.name === row[d])) tableOfRelationships.push({
name: row[d],
parent: row[taxonomicRanks[i - 1]] || null
})
})
});
const stratify = d3.stratify()
.id(function(d) {
return d.name;
})
.parentId(function(d) {
return d.parent;
});
const hierarchicalData = stratify(tableOfRelationships);
console.log(hierarchicalData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
পিএস : আপনি কী ধরণের ডেটাভিজ তৈরি করবেন তা আমি জানি না তবে আপনার সত্যিকারের ট্যাক্সোনমিক র্যাঙ্কগুলি এড়ানো উচিত। পুরো লিনেইন শ্রমশক্তিটি পুরানো, আমরা আর পদক্ষেপ ব্যবহার করি না: যেহেতু ফাইলোজেনেটিক সিস্টেমটি -০-এর দশকের মাঝামাঝি সময়ে তৈরি হয়েছিল আমরা কোনও ট্যাক্সোমিক র্যাঙ্ক ছাড়াই কেবলমাত্র ট্যাক্সি ব্যবহার করি (বিবর্তনীয় জীববিজ্ঞানের শিক্ষক এখানে)। এছাড়াও, আমি এই 7 মিলিয়ন সারি সম্পর্কে বেশ কৌতূহলী, যেহেতু আমরা মাত্র 1 মিলিয়ন প্রজাতির বর্ণনা দিয়েছি!
nan
ম্যাগনোলিপিডাসহ ফিলামের জন্য একটি । ওটা কিnan
? ফিলিয়াম হ'ল অ্যান্টোফাইটা, বা বিকল্পভাবে ম্যাগনোলিয়া (এটি পুরাতন ফিলিয়াম অ্যাঞ্জিওস্পার্মাই)।