
นี่คือไลบรารีการวิเคราะห์ C ++ ที่ออกแบบมาสำหรับการวิเคราะห์ข้อมูลคล้ายกับไลบรารีใน Python และ R ตัวอย่างเช่นคุณจะเปรียบเทียบสิ่งนี้กับ pandas หรือ r data.frame
คุณสามารถหั่นข้อมูลได้หลายวิธี คุณสามารถเข้าร่วมรวมกลุ่มโดยข้อมูล คุณสามารถเรียกใช้อัลกอริทึมทางสถิติการสรุปการเงินและ ML ที่หลากหลายบนข้อมูล คุณสามารถเพิ่มอัลกอริทึมที่กำหนดเองได้อย่างง่ายดาย คุณสามารถเรียงลำดับคอลัมน์หลายคอลัมน์เลือกและลบข้อมูล และอีกมากมาย ...
DataFrame ยังรวมถึงการรวบรวมอัลกอริทึมการวิเคราะห์จำนวนมากในรูปแบบของผู้เข้าชม สิ่งเหล่านี้มาจากสถิติพื้นฐานเช่น ค่าเฉลี่ย การเบี่ยงเบน STD , return , ... ไปสู่การวิเคราะห์ที่เกี่ยวข้องมากขึ้นเช่น การแพร่กระจายความสัมพันธ์ , พหุนามพอดี , การแปลงฟูริเยร์อย่างรวดเร็วของความยาวโดยพลการ ... รวมถึงคอลเลกชันที่ดีของตัวชี้วัดการซื้อขายที่ดี คุณยังสามารถเพิ่มอัลกอริทึมของคุณเองได้อย่างง่ายดาย
DataFrame ยังใช้มัลติเธรดที่กว้างขวางในเกือบทั้งหมดของ API สำหรับชุดข้อมูลขนาดใหญ่ นั่นทำให้ DataFrame เหมาะอย่างยิ่งสำหรับการวิเคราะห์ชุดข้อมูลขนาดใหญ่
สำหรับการดำเนินการขั้นพื้นฐานเพื่อเริ่มต้นคุณดู Hello World สำหรับรายการคุณสมบัติที่สมบูรณ์พร้อมตัวอย่างรหัสดูเอกสารประกอบ
ฉันได้ปฏิบัติตาม หลักการสองสามข้อในห้องสมุดนี้ :
คุณอาจเคยได้ยิน Polars DataFrame มันถูกนำไปใช้ในการเกิดสนิมและพอร์ตโดยไม่มีการเหนือหัวไปยัง Python (ตราบใดที่คุณไม่มีลูป) ฉันถูกขอให้หลายคนเขียนการเปรียบเทียบสำหรับ DataFrame กับ Polars ดังนั้นในที่สุดฉันก็พบเวลาที่จะเรียนรู้เล็กน้อยเกี่ยวกับโพลาร์และเขียนเกณฑ์มาตรฐานที่ง่ายมาก
ฉันเขียนโปรแกรมที่เหมือนกันต่อไปนี้สำหรับทั้ง polars และ c ++ dataframe (และ pandas) ฉันใช้ Polars Version: 0.19.14 (เวอร์ชันแพนด้า: 1.5.3, NumPy Version: 1.24.2) และฉันใช้คอมไพเลอร์ c ++ 20 กับตัวเลือก -O3 ฉันวิ่งทั้งคู่บน MacBook Pro (Intel Chip, 96GB RAM)
ในทั้งสองกรณีฉันสร้าง dataframe ด้วย 3 คอลัมน์สุ่ม C ++ DataFrame ยังต้องการคอลัมน์ดัชนีเพิ่มเติมที่มีขนาดเท่ากัน Polars ไม่เชื่อในคอลัมน์ดัชนี (ที่มีข้อดีและข้อเสียของตัวเองฉันไม่ได้ผ่านมันไปที่นี่) แต่ละโปรแกรมมีสามส่วนที่เหมือนกัน ก่อนอื่นมันจะสร้างและเติมคอลัมน์ 3 คอลัมน์ด้วยตัวเลขสุ่ม 300 ม. แต่ละตัว (ในกรณีของ DataFrame C ++ มันจะต้องสร้างคอลัมน์ดัชนีตามลำดับที่มีขนาดเท่ากัน) นั่นคือส่วนที่ฉัน ไม่ สนใจในส่วนที่สองมันคำนวณค่าเฉลี่ยของคอลัมน์แรกความแปรปรวนของคอลัมน์ที่สองและความสัมพันธ์ของเพียร์สันของคอลัมน์ที่สองและสาม ในส่วนที่สามจะเลือก (หรือตัวกรองเป็นโพลาร์เรียกมัน) บนหนึ่งในคอลัมน์
ผลลัพธ์ :
ชุดข้อมูลสูงสุดที่ฉันสามารถโหลดลงในโพลาร์คือ 300m แถวต่อคอลัมน์ ชุดข้อมูลที่ใหญ่กว่าใด ๆ จะระเบิดหน่วยความจำและทำให้ระบบปฏิบัติการฆ่ามัน ฉันเรียกใช้ DataFrame C ++ ด้วยแถว 10B ต่อคอลัมน์และฉันแน่ใจว่ามันจะทำงานด้วยชุดข้อมูลที่ใหญ่กว่าด้วย ดังนั้นฉันถูกบังคับให้วิ่งทั้งสองด้วยแถว 300 ม. เพื่อเปรียบเทียบ ฉันทำการทดสอบแต่ละครั้ง 4 ครั้งและใช้เวลาที่ดีที่สุด ตัวเลข Polars แตกต่างกันมากจากการวิ่งหนึ่งไปยังอีกโดยเฉพาะอย่างยิ่งการคำนวณและเวลาการเลือก หมายเลข C ++ DataFrame มีความสอดคล้องกันมากขึ้นอย่างมีนัยสำคัญ
| C ++ DataFrame | ขั้วโลก | แพนด้า | |
|---|---|---|---|
| การสร้างข้อมูล/เวลาโหลด | 26.945900 วินาที | 28.468640 วินาที | 36.678976 วินาที |
| เวลาคำนวณ | 1.260150 วินาที | 4.876561 วินาที | 40.326350 วินาที |
| เวลาเลือก | 0.742493 วินาที | 3.876561 วินาที | 8.326350 วินาที |
| เวลาโดยรวม: | 28.948600 วินาที | 36.876345 วินาที | 85.845114 วินาที |
โปรดพิจารณาการสนับสนุน DataFrame โดยเฉพาะอย่างยิ่งหากคุณใช้งานในกำลังการผลิต มันเป็นรูปแบบที่แข็งแกร่งที่สุดของการชื่นชม