Skip to content

Commit

Permalink
Merge pull request #1 from humphreylee/Added-new-dz!-macros-in-datafr…
Browse files Browse the repository at this point in the history
…ame.rs-to-create-dataframe-from-vector-of-mixed-data-type-vectors

Update dataframe.rs to create dataframe from vector of mixed data typ…
  • Loading branch information
humphreylee authored Aug 4, 2024
2 parents 9f3c796 + a7042c3 commit 269dc72
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions charming/src/datatype/dataframe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,69 @@ macro_rules! df {
]
};
}

/// Code below is modified from ChatGPT generated code.
/// The main objective of macro dz! is to transpose mixed data type vectors,
/// aka columns or dimensions into ECharts dataframe format.
#[macro_export]
macro_rules! dz {
/*
Handle named vectors
let d1 = vec![44056, 13334];
let d2 = vec![81.8, 76.9];
let d3 = vec![23968973, 1376048943];
let d4 = vec!["Australia", "China"];
let d5 = vec![2015, 2015];
let df = dz!(d1, d2, d3, d4, d5);
>>df = [Value(Array([Number(Integer(44056)), Number(Float(81.8)),
Number(Integer(23968973)), String("Australia"), Number(Integer(2015))])),
Value(Array([Number(Integer(13334)), Number(Float(76.9)),
Number(Integer(1376048943)), String("China"), Number(Integer(2015))]))]
*/
($($v:expr),* $(,)?) => {{
let mut df = Vec::new();
let mut iterators: Vec<Box<dyn Iterator<Item = $crate::datatype::CompositeValue>>> = vec![
$(Box::new($v.into_iter().map(|x| $crate::datatype::CompositeValue::from(x))),)*
];

let len = iterators.first().map(|v| v.size_hint().0).unwrap_or(0);

for _ in 0..len {
let mut row = Vec::new();
for iter in iterators.iter_mut() {
if let Some(value) = iter.next() {
row.push(value);
}
}
let z = $crate::datatype::DataPoint::from(row);
df.push(z);
}
df
}};

/*
Handle direct input of vectors
let df = dz!([44056, 13334], [81.8, 76.9], [23968973, 1376048943], ["Australia", "China"], [2015, 2015]);
>>df = [Value(Array([Number(Integer(44056)), Number(Float(81.8)),
Number(Integer(23968973)), String("Australia"), Number(Integer(2015))])),
Value(Array([Number(Integer(13334)), Number(Float(76.9)),
Number(Integer(1376048943)), String("China"), Number(Integer(2015))]))]
*/
($([$($v:expr),*]),* $(,)?) => {{
let mut df = Vec::new();
let mut iterators: Vec<_> = vec![$(vec![$($v.into()),*].into_iter()),*];

let len = iterators.first().map(|v| v.len()).unwrap_or(0);
for _ in 0..len {
let mut row = Vec::new();
for iter in &mut iterators {
if let Some($crate::datatype::CompositeValue) = iter.next() {
row.push($crate::datatype::CompositeValue);
}
}
df.push(row);
}
df
}};
}

0 comments on commit 269dc72

Please sign in to comment.