อ่านชุดข้อมูล R จาก Python
แพ็คเกจ rdata นำเสนอวิธีที่ไม่ซับซ้อนในการนำเข้าชุดข้อมูล/อ็อบเจ็กต์ R ที่จัดเก็บไว้ในรูปแบบ ".rda" และ ".rds" ลงใน Python ข้อดีหลักคือ:
เป็นการใช้งาน Python อย่างแท้จริง โดยไม่มีการพึ่งพาภาษา R หรือไลบรารีที่เกี่ยวข้อง ดังนั้นจึงสามารถใช้งานได้ทุกที่ที่รองรับ Python รวมถึงเว็บที่ใช้ Pyodide
พยายามสนับสนุนวัตถุ R ทั้งหมดที่สามารถแปลได้อย่างมีความหมาย เมื่อเทียบกับโซลูชันอื่นๆ คุณจะไม่ถูกจำกัดให้นำเข้าดาต้าเฟรมหรือข้อมูลที่มีโครงสร้างเฉพาะ
ช่วยให้ผู้ใช้ปรับแต่งการแปลงคลาส R เป็น Python ได้อย่างง่ายดาย ข้อมูลของคุณใช้คลาส R แบบกำหนดเองหรือไม่ ไม่ต้องกังวลอีกต่อไป เนื่องจากคุณสามารถกำหนดการแปลงแบบกำหนดเองให้กับคลาส Python ที่คุณเลือกได้
มีใบอนุญาตที่ได้รับอนุญาต (MIT) ต่างจากแพ็คเกจอื่นๆ ที่ขึ้นอยู่กับไลบรารี R และจำเป็นต้องปฏิบัติตามใบอนุญาต GPL คุณสามารถใช้ rdata เป็นการพึ่งพา MIT, BSD หรือแม้แต่โปรเจ็กต์แบบปิดได้
rdata อยู่บน PyPi และสามารถติดตั้งได้โดยใช้ pip
:
pip ติดตั้ง rdata
นอกจากนี้ยังมีให้สำหรับ conda
โดยใช้ช่อง conda-forge
:
conda ติดตั้ง -c conda-forge rdata
สามารถติดตั้งเวอร์ชันปัจจุบันจากสาขาพัฒนาได้
pip ติดตั้ง git+https://github.com/vnmabus/rdata.git@develop
เอกสารประกอบของ rdata อยู่ใน ReadTheDocs
ตัวอย่างการใช้งานมีอยู่ใน ReadTheDocs
วิธีทั่วไปในการอ่านชุดข้อมูล R มีดังต่อไปนี้:
นำเข้า rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda") แปลงแล้ว
ซึ่งส่งผลให้
{'test_vector': array([1., 2., 3.])}
ภายใต้ประทุนนี้เทียบเท่ากับรหัสต่อไปนี้:
นำเข้า rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")converted = rdata.conversion.convert(parsed) แปลงแล้ว
ประกอบด้วยสองขั้นตอน:
ขั้นแรก ไฟล์จะถูกแยกวิเคราะห์โดยใช้ฟังก์ชัน rdata.parser.parse_file นี่เป็นคำอธิบายตามตัวอักษรของเนื้อหาไฟล์เป็นลำดับชั้นของอ็อบเจ็กต์ Python ที่แสดงถึงอ็อบเจ็กต์ R พื้นฐาน ขั้นตอนนี้ไม่คลุมเครือและเหมือนเดิมเสมอ
จากนั้นแต่ละวัตถุจะต้องถูกแปลงเป็นวัตถุ Python ที่เหมาะสม ในขั้นตอนนี้ มีหลายตัวเลือกว่าประเภท Python ใดเหมาะสมที่สุดสำหรับการแปลงสำหรับออบเจ็กต์ R ที่กำหนด ดังนั้นเราจึงจัดเตรียมรูทีน rdata.conversion.convert เริ่มต้น ซึ่งพยายามเลือกอ็อบเจ็กต์ Python ที่เก็บข้อมูลส่วนใหญ่ของอ็อบเจ็กต์ R ดั้งเดิม สำหรับคลาส R แบบกำหนดเอง ยังสามารถระบุรูทีนการแปลงให้กับอ็อบเจ็กต์ Python ได้อีกด้วย
รูทีนการแปลงพื้นฐานจะสร้างออบเจ็กต์ SimpleConverter เท่านั้นและเรียกใช้วิธีการแปลง อาร์กิวเมนต์ทั้งหมดของการแปลงจะถูกส่งโดยตรงไปยังวิธีการเริ่มต้น SimpleConverter
เป็นไปได้แม้ว่าจะไม่ใช่เรื่องเล็กน้อยในการสร้างอ็อบเจ็กต์ Converter แบบกำหนดเองเพื่อเปลี่ยนวิธีการแปลงอ็อบเจ็กต์ R พื้นฐานเป็นอ็อบเจ็กต์ Python อย่างไรก็ตาม สถานการณ์ที่พบบ่อยกว่าคือไม่มีใครต้องการเปลี่ยนแปลงวิธีการแปลงอ็อบเจ็กต์ R พื้นฐาน แต่ต้องการจัดเตรียมการแปลงสำหรับคลาส R ที่เฉพาะเจาะจงแทน ซึ่งสามารถทำได้โดยการส่งพจนานุกรมไปยังวิธีการเริ่มต้น SimpleConverter ซึ่งมีคีย์ชื่อของคลาส R และเป็นค่า callable ที่แปลงอ็อบเจ็กต์ R ของคลาสนั้นเป็นอ็อบเจ็กต์ Python ตามค่าเริ่มต้น พจนานุกรมที่ใช้คือ DEFAULT_CLASS_MAP ซึ่งสามารถแปลงคลาส R ที่ใช้กันทั่วไป เช่น data.frame และ factor
ตามตัวอย่าง ต่อไปนี้คือวิธีที่เราจะใช้รูทีนการแปลงสำหรับคลาสปัจจัยเป็นอ็อบเจ็กต์ไบต์ แทนที่จะใช้การแปลงเริ่มต้นเป็นอ็อบเจ็กต์ Pandas Categorical:
นำเข้า rdatadef factor_constructor(obj, attrs): ค่า = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else None for i in obj] return ค่าnew_dict = { **rdata. Conversion.DEFAULT_CLASS_MAP, "ปัจจัย": factor_constructor} แปลงแล้ว = rdata.read_rda( rdata.TESTDATA_PATH / "test_dataframe.rda", ตัวสร้าง_dict=new_dict, ) แปลงแล้ว
ซึ่งมีผลดังต่อไปนี้:
{'test_dataframe': ค่าคลาส 1 บ้า 1 2 บี'บี 2 3 บี' 3}
ตัวอย่างเพิ่มเติมที่แสดงให้เห็นฟังก์ชันการทำงานของแพ็คเกจนี้สามารถพบได้ในเอกสารประกอบของ ReadTheDocs