การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง - KDnuggets

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง – KDnuggets

โหนดต้นทาง: 3093512

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน
 

การดำน้ำลึกเข้าไปในโลกแห่งวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่อง หนึ่งในทักษะพื้นฐานที่คุณจะพบคือศิลปะของการอ่านข้อมูล หากคุณมีประสบการณ์มาบ้างแล้ว คุณอาจคุ้นเคยกับ JSON (JavaScript Object Notation) ซึ่งเป็นรูปแบบยอดนิยมสำหรับจัดเก็บและแลกเปลี่ยนข้อมูล 

ลองนึกถึงวิธีที่ฐานข้อมูล NoSQL เช่น MongoDB ชอบจัดเก็บข้อมูลใน JSON หรือวิธีที่ REST API มักจะตอบสนองในรูปแบบเดียวกัน

อย่างไรก็ตาม JSON แม้จะสมบูรณ์แบบสำหรับการจัดเก็บและการแลกเปลี่ยน แต่ก็ยังไม่พร้อมสำหรับการวิเคราะห์เชิงลึกในรูปแบบดิบ นี่คือจุดที่เราแปลงให้เป็นสิ่งที่เป็นมิตรกับการวิเคราะห์มากขึ้น นั่นคือรูปแบบตาราง 

ดังนั้นไม่ว่าคุณจะจัดการกับออบเจ็กต์ JSON เดียวหรืออาร์เรย์ที่สวยงาม ในแง่ของ Python คุณจะต้องจัดการ dict หรือรายการ dicts เป็นหลัก 

มาสำรวจด้วยกันว่าการเปลี่ยนแปลงนี้เกิดขึ้นได้อย่างไร ทำให้ข้อมูลของเราสุกงอมสำหรับการวิเคราะห์ ????

วันนี้ผมจะอธิบายคำสั่งมหัศจรรย์ที่ช่วยให้เราสามารถแยกวิเคราะห์ JSON เป็นรูปแบบตารางได้อย่างง่ายดายภายในไม่กี่วินาที 

และมันคือ… pd.json_normalize()

มาดูกันว่ามันทำงานอย่างไรกับ JSON ประเภทต่างๆ 

JSON ประเภทแรกที่เราสามารถใช้ได้คือ JSON ระดับเดียวที่มีคีย์และค่าไม่กี่คีย์ เรากำหนด JSON แบบง่ายตัวแรกของเราดังนี้:

รหัสโดยผู้เขียน

เรามาจำลองความจำเป็นในการทำงานกับ JSON เหล่านี้กันดีกว่า เราทุกคนรู้ดีว่าไม่มีอะไรให้ทำมากนักในรูปแบบ JSON เราจำเป็นต้องแปลง JSON เหล่านี้ให้เป็นรูปแบบที่สามารถอ่านและแก้ไขได้... ซึ่งหมายถึง Pandas DataFrames!

1.1 การจัดการกับโครงสร้าง JSON อย่างง่าย

อันดับแรก เราต้องนำเข้าไลบรารีของ pandas จากนั้นจึงใช้คำสั่ง pd.json_normalize() ได้ดังนี้:

import pandas as pd
pd.json_normalize(json_string)

 

เมื่อใช้คำสั่งนี้กับ JSON ด้วยระเบียนเดียว เราจะได้ตารางพื้นฐานที่สุด อย่างไรก็ตาม เมื่อข้อมูลของเราซับซ้อนขึ้นเล็กน้อยและแสดงรายการ JSON เรายังคงสามารถใช้คำสั่งเดียวกันได้โดยไม่มีความยุ่งยากเพิ่มเติม และผลลัพธ์จะสอดคล้องกับตารางที่มีหลายบันทึก

 

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน
 

ง่าย…ใช่มั้ย? 

คำถามทั่วไปถัดไปคือจะเกิดอะไรขึ้นเมื่อค่าบางค่าหายไป 

 1.2 การจัดการกับค่าว่าง

ลองนึกภาพค่าบางค่าไม่ได้รับการแจ้ง เช่น บันทึกรายได้ของ David หายไป เมื่อแปลง JSON ของเราให้เป็น dataframe แพนด้าธรรมดา ค่าที่เกี่ยวข้องจะปรากฏเป็น NaN 

 

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน 
 
แล้วถ้าฉันอยากได้แค่บางสาขาล่ะ?

 1.3 เลือกเฉพาะคอลัมน์ที่สนใจ

ในกรณีที่เราเพียงต้องการแปลงบางฟิลด์เฉพาะให้เป็น DataFrame แพนด้าแบบตาราง คำสั่ง json_normalize() จะไม่อนุญาตให้เราเลือกฟิลด์ที่จะแปลง 

ดังนั้น ควรดำเนินการประมวลผลล่วงหน้าเล็กน้อยของ JSON โดยที่เรากรองเฉพาะคอลัมน์ที่สนใจเหล่านั้น 

# Fields to include
fields = ['name', 'city']

# Filter the JSON data
filtered_json_list = [{key: value for key, value in item.items() if key in fields} for item in simple_json_list]

pd.json_normalize(filtered_json_list)

 

มาดูโครงสร้าง JSON ขั้นสูงกัน 

เมื่อต้องจัดการกับ JSON หลายระดับ เราพบว่าตัวเองมี JSON ที่ซ้อนกันภายในระดับที่ต่างกัน ขั้นตอนจะเหมือนเดิม แต่ในกรณีนี้ เราสามารถเลือกได้ว่าต้องการแปลงกี่ระดับก็ได้ ตามค่าเริ่มต้น คำสั่งจะขยายทุกระดับและสร้างคอลัมน์ใหม่ที่มีชื่อที่ต่อกันของระดับที่ซ้อนกันทั้งหมด 

ดังนั้นหากเราทำให้ JSON ต่อไปนี้เป็นมาตรฐาน

รหัสโดยผู้เขียน

เราจะได้ตารางต่อไปนี้ซึ่งมี 3 คอลัมน์ภายใต้ทักษะภาคสนาม: 

  • ทักษะหลาม
  • ทักษะ.SQL
  • ทักษะ.GCP

และ 4 คอลัมน์ใต้บทบาทภาคสนาม 

  • บทบาทผู้จัดการโครงการ
  • บทบาทวิศวกรข้อมูล
  • บทบาทนักวิทยาศาสตร์ข้อมูล
  • นักวิเคราะห์ Role.data

 

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน 
 

อย่างไรก็ตาม ลองจินตนาการว่าเราเพียงต้องการเปลี่ยนแปลงระดับบนสุดของเรา เราสามารถทำได้โดยการกำหนดพารามิเตอร์ max_level เป็น 0 โดยเฉพาะ (max_level ที่เราต้องการขยาย) 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

ค่าที่รอดำเนินการจะถูกรักษาไว้ภายใน JSON ภายใน DataFrame แพนด้าของเรา

 

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน 

กรณีสุดท้ายที่เราพบคือการมีรายการที่ซ้อนกันภายในเขตข้อมูล JSON ดังนั้นเราจึงกำหนด JSON ของเราที่จะใช้ก่อน 

รหัสโดยผู้เขียน

เราสามารถจัดการข้อมูลนี้ได้อย่างมีประสิทธิภาพโดยใช้ Pandas ใน Python ฟังก์ชัน pd.json_normalize() มีประโยชน์อย่างยิ่งในบริบทนี้ โดยสามารถแบ่งข้อมูล JSON รวมถึงรายการที่ซ้อนกัน ให้อยู่ในรูปแบบที่มีโครงสร้างที่เหมาะสมสำหรับการวิเคราะห์ เมื่อนำฟังก์ชันนี้ไปใช้กับข้อมูล JSON ของเรา จะสร้างตารางมาตรฐานที่รวมรายการที่ซ้อนกันไว้เป็นส่วนหนึ่งของช่อง

นอกจากนี้ Pandas ยังมีความสามารถในการปรับแต่งกระบวนการนี้เพิ่มเติมอีกด้วย ด้วยการใช้พารามิเตอร์ record_path ใน pd.json_normalize() เราจึงสามารถกำหนดให้ฟังก์ชันเพื่อทำให้รายการที่ซ้อนกันเป็นมาตรฐานโดยเฉพาะ 

การดำเนินการนี้ส่งผลให้มีตารางเฉพาะสำหรับเนื้อหาของรายการเท่านั้น ตามค่าเริ่มต้น กระบวนการนี้จะแสดงเฉพาะองค์ประกอบภายในรายการเท่านั้น อย่างไรก็ตาม เพื่อเพิ่มคุณค่าให้กับตารางนี้ด้วยบริบทเพิ่มเติม เช่น การเก็บรักษา ID ที่เกี่ยวข้องสำหรับแต่ละเรกคอร์ด เราสามารถใช้พารามิเตอร์เมตาได้

 

การแปลง JSON เป็น Pandas DataFrames: แยกวิเคราะห์ด้วยวิธีที่ถูกต้อง
ภาพโดยผู้เขียน

โดยสรุป การแปลงข้อมูล JSON เป็นไฟล์ CSV โดยใช้ไลบรารี Pandas ของ Python นั้นง่ายและมีประสิทธิภาพ

JSON ยังคงเป็นรูปแบบที่ใช้กันทั่วไปในพื้นที่จัดเก็บและการแลกเปลี่ยนข้อมูลสมัยใหม่ โดยเฉพาะในฐานข้อมูล NoSQL และ REST API อย่างไรก็ตาม ทำให้เกิดความท้าทายในการวิเคราะห์ที่สำคัญเมื่อต้องรับมือกับข้อมูลในรูปแบบดิบ 

บทบาทสำคัญของ pd.json_normalize() ของ Pandas กลายเป็นวิธีที่ดีเยี่ยมในการจัดการรูปแบบดังกล่าวและแปลงข้อมูลของเราให้เป็น DataFrame ของ pandas 

ฉันหวังว่าคู่มือนี้จะเป็นประโยชน์ และครั้งต่อไปที่คุณกำลังจัดการกับ JSON คุณสามารถทำได้อย่างมีประสิทธิผลมากขึ้น 

คุณสามารถตรวจสอบ Jupyter Notebook ที่เกี่ยวข้องได้ใน ติดตาม repo GitHub
 
 

โจเซป เฟอร์เรอร์ เป็นวิศวกรวิเคราะห์จากบาร์เซโลนา เขาสำเร็จการศึกษาด้านวิศวกรรมฟิสิกส์และกำลังทำงานในสาขาวิทยาศาสตร์ข้อมูลที่ประยุกต์ใช้กับการเคลื่อนที่ของมนุษย์ เขาเป็นผู้สร้างเนื้อหานอกเวลาที่มุ่งเน้นด้านวิทยาศาสตร์ข้อมูลและเทคโนโลยี สามารถติดต่อเขาได้ที่ LinkedIn, Twitter or กลาง.

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต