Pandas vs. SQL — ตอนที่ 4: Pandas สะดวกกว่า
tl;dr:ในโพสต์นี้ เราเปรียบเทียบ Pandas กับ SQL บนแกนที่สามจากสามแกน: ความสะดวกสบาย เราอธิบายหกวิธีที่โมเดลข้อมูลดาต้าเฟรมของ Pandas สะดวกกว่าสำหรับกรณีการใช้งานด้านวิทยาการข้อมูลและแมชชีนเลิร์นนิง
ในข้อเสนอครั้งที่สี่ของการต่อสู้ครั้งยิ่งใหญ่ระหว่าง Pandas กับ SQL เราได้แสดงให้เห็นว่า Pandas สะดวกกว่า SQL สำหรับวิทยาการข้อมูลและการเรียนรู้ของเครื่องอย่างไร Pandas ได้รับการออกแบบโดยนักวิทยาศาสตร์ข้อมูลสำหรับนักวิทยาศาสตร์ข้อมูล และได้รับประโยชน์จากการปรับปรุงหลายพันรายการที่สนับสนุนโดยชุมชนวิทยาศาสตร์ข้อมูลแบบโอเพ่นซอร์สอย่างกระตือรือร้น ทั้งหมดนี้มุ่งเน้นไปที่ประโยชน์ใช้สอยที่มากขึ้นและใช้งานง่าย จึงไม่แปลกใจเลยที่จะเข้ากันได้ดี!
ก่อนที่เราจะเริ่มต้น หากคุณพลาดข้อเสนอ Pandas vs. SQL ก่อนหน้านี้ คุณยังสามารถติดตามได้ที่นี่: ตอนที่ 1: ศูนย์อาหารและร้านอาหารสไตล์มิชลินตอนที่ 2: Pandas Is More ConciseและPart 3: Pandas Is More ยืดหยุ่น _ โพสต์ก่อนหน้าของเรามุ่งเน้นไปที่การเปรียบเทียบโมเดลข้อมูลดาต้าเฟรมและพีชคณิต ของดาต้าเฟรม — ในโพสต์นี้ เรามุ่งเน้นไปที่การยศาสตร์ของดาต้าเฟรม: โดยเฉพาะอย่างยิ่ง วิธีการใช้ดาต้าเฟรม
เพื่อให้ง่ายต่อการค้นหา ต่อไปนี้เป็นรายการที่มีประโยชน์ของดาต้าเฟรมของ Pandas ที่สะดวกกว่าการใช้ความสัมพันธ์/SQL แบบคู่ขนาน:
- ใน Pandas คุณสามารถสร้างข้อความค้นหาเพิ่มเติมได้เรื่อยๆ ใน SQL คุณไม่สามารถ
- ใน Pandas การดำเนินการและตั้งชื่อผลลัพธ์ระดับกลางเป็นเรื่องง่าย ใน SQL มันยากขึ้น
- ใน Pandas เป็นเรื่องง่ายที่จะรับรู้ข้อมูลอย่างรวดเร็ว ใน SQL มันยากกว่ามาก
- Pandas มีการสนับสนุนดั้งเดิมสำหรับการแสดงภาพ SQL ไม่ได้
- Pandas ทำให้การเรียนรู้ของเครื่องเป็นเรื่องง่าย SQL ไม่ได้
- Pandas รักษาคำสั่งเพื่อช่วยผู้ใช้ตรวจสอบความถูกต้องของขั้นตอนกลาง — และอนุญาตให้ผู้ใช้ดำเนินการตามคำสั่ง; SQL ไม่ได้
1. ใน Pandas คุณสามารถสร้างข้อความค้นหาเพิ่มเติมได้เรื่อยๆ ใน SQL คุณไม่สามารถ
ความแตกต่างที่สำคัญระหว่าง Pandas และ SQL คือ Pandas อนุญาตให้ผู้ใช้เพิ่มเลเยอร์การดำเนินการที่ด้านบนของสิ่งอื่นเพื่อสร้างการสืบค้นที่ซับซ้อนมากขึ้น ในขณะเดียวกัน ผู้ใช้สามารถตรวจสอบผลลัพธ์ระหว่างกลางของส่วนย่อยของข้อความค้นหาเหล่านี้ได้ — ในความพยายามที่จะตรวจสอบความถูกต้องระหว่างดำเนินการ การดีบักเป็นเรื่องง่ายด้วย Pandas!
ดังนั้น ในชุดข้อมูลของเรา สมมติว่าเราต้องการมุ่งเน้นไปที่ใบอนุญาตที่สอดคล้องกับ Geary Street เราสามารถแยกส่วนย่อยของชุดข้อมูลได้ดังนี้
สิ่งหนึ่งที่เราอาจสังเกตเห็นคือ Geary ครอบคลุมย่านต่างๆ มากมาย โดยเข้ารหัสเป็น'Neighborhoods - Analysis Boundaries'
. สมมติว่าเราต้องการตรวจสอบเฉพาะคอลัมน์นี้'Neighborhoods - Analysis Boundaries'
(และตัดคอลัมน์ที่เหลืออีก 42 คอลัมน์) เราสามารถผนวกอนุประโยค[['Neighborhoods - Analysis Boundaries']]
ที่ส่วนท้ายของนิพจน์ก่อนหน้าได้
นี่คือแถวจำนวนมาก: 1966 จากนั้นในสองขั้นตอนสุดท้ายของเรา ให้พูดว่าเราต้องการระบุย่านบน Geary ที่มีใบอนุญาตมากที่สุด วิธีหนึ่งในการทำเช่นนั้นคือการต่อท้ายด้วย'sort_values'
a'value_counts'
ที่น่าสนใจดังนั้นย่านยอดนิยมคือ Tenderloin รองลงมาคือ Outer Richmond โปรดทราบว่าแม้ว่าลำดับของการดำเนินการนี้สามารถแสดงใน SQL ได้อย่างแน่นอน แต่คงจะเจ็บปวดกว่านี้มาก เราไม่สามารถเพิ่มโอเปอเรเตอร์ต่อท้ายแบบสอบถาม SQL ได้: มีตำแหน่งเฉพาะภายในแบบสอบถามที่เราต้องทำการเปลี่ยนแปลง ตัวอย่างเช่น หากต้องการเปลี่ยนคอลัมน์ที่จะแสดง เราจำเป็นต้องแก้ไขSELECT
ส่วนของข้อความค้นหาตั้งแต่เนิ่นๆ Pandas ช่วยให้คุณคิดในเชิงปฏิบัติ (หรืออย่างจำเป็น) แทน และสร้างผลลัพธ์ขั้นสุดท้ายทีละขั้นตอน ในขณะที่ตรวจสอบผลลัพธ์ขั้นกลาง
2. ใน Pandas การดำเนินการและตั้งชื่อผลลัพธ์ระดับกลางเป็นเรื่องง่าย ใน SQL มันยากขึ้น
Pandas เนื่องจากมันถูกฝังอยู่ในภาษาการเขียนโปรแกรมจริง Python จึงยืมสำนวนการเขียนโปรแกรมที่คุ้นเคยจำนวนมากสำหรับการทำงานบนดาต้าเฟรม โดยเฉพาะอย่างยิ่ง เราสามารถกำหนด dataframe expression ให้กับตัวแปรได้ ตัวแปรเหล่านี้สามารถดำเนินการและ/หรือกำหนดให้กับตัวแปรอื่นได้
เราจะยกตัวอย่างให้เห็นภาพง่ายๆ เนื่องจากชุดข้อมูลนี้มาจากความท้าทายในการล้างข้อมูล สมมติว่าเราสงสัยว่าอาจมีค่า Null จำนวนมาก เราตรวจสอบได้ว่าแต่ละคอลัมน์มีกี่รายการ โดยทำดังนี้
นั่นคือค่า Null จำนวนมาก! สมมติว่าฉันต้องการสร้างชุดข้อมูลในเวอร์ชันที่สะอาด โดยปล่อยคอลัมน์ที่มีค่า Null มากเกินไป โดยตั้งค่าเกณฑ์ที่ 190,000 ค่าที่ไม่ใช่ค่า Null (ชุดข้อมูลโดยรวมมีประมาณ 199,000 แถว)
ว้าว — จำนวนคอลัมน์ลดลงจาก 43 เหลือเพียง 13 อย่างที่เราเห็นที่นี่ เราสามารถกำหนดตัวแปรใหม่ได้อย่างง่ายดาย'sf_permits_cleaned'
(เหมือนกับที่เราสร้างตัวแปรก่อนหน้า'missing_values_count'
) โดยใช้การกำหนดตัวแปรแบบโปรแกรมมาตรฐานและดำเนินการกับมันในภายหลัง วิธีการนี้เป็นเรื่องปกติสำหรับโปรแกรมเมอร์ ใน SQL เราสามารถสร้างเอฟเฟกต์ที่คล้ายกันผ่านมุมมองได้ แต่การกำหนดมุมมองและการดำเนินการกับพวกมันนั้นใช้งานง่ายน้อยกว่าและยุ่งยากกว่า
3. ใน Pandas เป็นเรื่องง่ายที่จะรับรู้ข้อมูลอย่างรวดเร็ว ใน SQL มันยากกว่ามาก
Pandas นำเสนอวิธีที่รวดเร็วในการทำความเข้าใจข้อมูลและข้อมูลเมตาของดาต้าเฟรม เราได้เห็นตัวอย่างนี้แล้วเมื่อเราพิมพ์ dataframe โดยใช้ชื่อตัวแปร หรือถ้าเราใช้'head/tail()'
ฟังก์ชัน เพื่อความสะดวก เพื่อให้พอดีกับหน้าจอ บางแถวและคอลัมน์จะถูกซ่อนไว้'...'
เพื่อช่วยให้ผู้ใช้ยังคงได้รับภาพระดับสูงของข้อมูล
หากเราต้องการตรวจสอบข้อมูลสรุปของคอลัมน์และประเภทของคอลัมน์ ฟังก์ชันหนึ่งที่อำนวยความสะดวกโดย Pandas คือ'info()'
ซึ่งจะแสดงรายการคอลัมน์ของชุดข้อมูล ประเภท และจำนวนค่า Null เราสามารถใช้ฟังก์ชันนี้เพื่อตรวจสอบ dataframe ที่เราเพิ่งสร้างขึ้น
ดังนั้นดูเหมือนว่าคอลัมน์เดียวที่ยังมีค่า Null คือคอลัมน์คำอธิบาย คอลัมน์อื่น ๆ เต็มแล้ว
ฟังก์ชัน Pandas ที่มีประโยชน์อีกตัวหนึ่งซึ่งกำหนดเป้าหมายไปที่คอลัมน์ตัวเลขคือ'describe()'
ซึ่งให้การสรุปที่สะดวกของคอลัมน์เหล่านี้ ด้วยการนับ ค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน และปริมาณ
อืม เหมือนจะมีถนนหมายเลข 0 อยู่เลย สงสัยจัง!
น่าเสียดายที่ SQL ไม่มีสิ่งอำนวยความสะดวกที่คล้ายคลึงกันในการทำความเข้าใจรูปร่างและลักษณะของชุดข้อมูล คุณจะต้องเขียนข้อความค้นหาแบบกำหนดเองเพื่อจุดประสงค์นี้ สำหรับตัวอย่างก่อนหน้านี้ ความยาวของข้อความค้นหานี้จะเป็นสัดส่วนกับจำนวนคอลัมน์ตัวเลข
4. Pandas รองรับการสร้างภาพข้อมูลโดยกำเนิด SQL ไม่ได้
การวิเคราะห์ตารางตัวเลขจะทำให้คุณได้รับเท่านั้น บ่อยครั้งสิ่งที่คุณต้องการคือวิธีการมองเห็นข้อมูลในดาต้าเฟรม ซึ่งแตกต่างจาก SQL ซึ่งกำหนดให้คุณต้องโหลดข้อมูลของคุณลงในเครื่องมือสร้างภาพข้อมูลหรือ BI (ข่าวกรองธุรกิจ) แยกต่างหาก Pandas ให้การสนับสนุนการสร้างภาพในตัวภายในไลบรารี ยกตัวอย่างง่ายๆ คือ ผมโทร'plot()'
ไปขอดูกราฟแท่งของ'Current Status'
ใบอนุญาตต่างๆ
ดูเหมือนว่าใบอนุญาตส่วนใหญ่จะอยู่ในหมวดหมู่ที่เสร็จสมบูรณ์ ออกให้ และยื่นแล้ว โดยมีอีกเล็กน้อยในหมวดหมู่อื่นๆ
พลังของคุณสมบัตินี้ชัดเจน: ไม่เหมือนกับฐานข้อมูล SQL คุณไม่จำเป็นต้องออกจากไลบรารีหากต้องการสร้างการแสดงภาพ คุณสามารถทำได้จากตรงนั้น! หากคุณต้องการ “เพิ่มพลัง” ประสบการณ์การแสดงภาพของคุณ มีคลังภาพจำนวนเท่าใดก็ได้ที่ทำงานร่วมกับแพนด้าอย่างแน่นหนา รวมถึงMatplotlib , seabornและaltair และถ้าคุณขี้เกียจเหมือนฉัน และไม่ต้องการเขียนโค้ดใดๆ เลยเพื่อสร้างการแสดงภาพ คุณสามารถใช้Luxซึ่งเป็นไลบรารีแนะนำการแสดงภาพแบบเนทีฟของ Pandas เพื่อสร้างการแสดงภาพให้คุณโดยอัตโนมัติ โดยทั้งหมดจะปรับให้เข้ากับชุดข้อมูลของคุณ . อ่านเพิ่มเติมเกี่ยวกับ Lux ที่นี่
5. Pandas ทำให้การเรียนรู้ของเครื่องเป็นเรื่องง่าย SQL ไม่ได้
แมชชีนเลิร์นนิงเป็นองค์ประกอบสำคัญของวิทยาการข้อมูล ทำให้ผู้ใช้ไม่เพียงเข้าใจข้อมูลที่ไม่มีโครงสร้าง เช่น รูปภาพ วิดีโอ และข้อความเท่านั้น แต่ยังคาดการณ์อนาคตได้อีกด้วย เนื่องจาก Pandas ผสานรวมเข้ากับระบบนิเวศวิทยาการข้อมูลอย่างแนบแน่น จึงไม่น่าแปลกใจเลยที่มันทำงานได้ดีกับไลบรารีแมชชีนเลิร์นนิง รวมถึงไลบรารีทั่วไปอย่างscikit-learn , pytorch , numpyและอื่น ๆ ที่นี่ เราจะใช้ ไลบรารี spaCyซึ่งเป็นไลบรารีการประมวลผลภาษาธรรมชาติที่ค่อนข้างใหม่ เพื่อให้เข้าใจถึงคอลัมน์ข้อความในชุดข้อมูลของเรา SpaCy นำเสนอโมเดลคำศัพท์ต่างๆ ที่ได้รับการฝึกฝนล่วงหน้าเพื่อทำการฝังคำ การรู้จำเอนทิตีที่มีชื่อ ส่วนหนึ่งของการติดแท็กคำพูด การจัดประเภท และอื่นๆ ในการติดตั้ง spaCy เราเรียกใช้คำสั่งต่อไปนี้:
ตอนนี้เราได้ติดตั้งแล้ว สมมติว่าเราต้องการเข้าใจประเภทของกิจกรรม (เช่น การรื้อถอน การขนย้าย การเปลี่ยน ฯลฯ) ที่เกี่ยวข้องกับการขออนุญาตแต่ละรายการ (เช่น แถว) ในชุดข้อมูลของเรา สิ่งนี้ยากที่จะเข้าใจล่วงหน้า แต่ถูกฝังอยู่ในช่อง'Description'
ข้อความ ลองใช้แพ็คเกจเพื่อแยกรายการคำกริยาที่กล่าวถึงในฟิลด์นี้ ในส่วนนี้ ก่อนอื่นเราจะโหลดโมเดลของ spaCy 'en_core_web_md'
จากนั้นตามด้วยการแยกคำกริยาแต่ละคำในโทเค็นของคำอธิบายโดยใช้โมเดล เก็บไว้ในอาร์เรย์ ดังนี้
ดังที่เราเห็นข้างต้น แบบจำลองทำงานที่เหมาะสมในการแยกคำกริยา แม้ว่ามันจะพลาดไปสองสามคำ (เช่น ติดตั้ง) ด้วยความพร้อมใช้งานที่เพิ่มขึ้นของโมเดลสำเร็จรูปขนาดใหญ่ (เช่น โมเดลหม้อแปลงไฟฟ้า) ฉันคาดหวังว่าการรวมโมเดลดังกล่าวเข้ากับการประมวลผลข้อมูลแบบวันต่อวันภายในแพนด้ามากยิ่งขึ้น
การรวมการเรียนรู้ของเครื่องในฐานข้อมูล SQL นั้นยากเป็นพิเศษ แม้ว่าบางฐานข้อมูลจะมีโครงสร้างเฉพาะของแมชชีนเลิร์นนิง (เช่น BigQuery ML) แต่ผู้ใช้ก็มีข้อจำกัดในสิ่งที่สามารถทำได้ และไม่มีการควบคุมอย่างละเอียด อีกแนวทางหนึ่งคือการใช้ UDF เพื่อทำการเรียนรู้ของเครื่อง บ่อยครั้งที่สิ่งที่เกิดขึ้นคือผู้ใช้ส่งออกข้อมูลนอกบริบทของฐานข้อมูลเพื่อทำการเรียนรู้ด้วยเครื่อง
6. Pandas รักษาคำสั่งเพื่อช่วยผู้ใช้ตรวจสอบความถูกต้องของขั้นตอนกลาง — และอนุญาตให้ผู้ใช้ดำเนินการตามคำสั่ง SQL ไม่ได้
แพนด้ารักษาความสงบเรียบร้อย นี่เป็นสิ่งสำคัญสำหรับการดีบั๊กและการตรวจสอบเนื่องจากกำลังสร้างนิพจน์แบบสอบถามที่ซับซ้อนมากขึ้น ดำเนินการต่อด้วยตัวอย่างของฉันใหม่หลังจากการแยกคำกริยาของ spaCy สมมติว่าฉันต้องการใช้'explode'
ฟังก์ชันเพื่อขยายคำกริยาแต่ละรายการใน dataframe ก่อนหน้าออกเป็นหลายแถว หนึ่งคำต่อคำกริยา ผมสามารถทำได้ง่ายๆ ดังนี้
ขอให้สังเกตว่าตอนนี้ฉันมีสามแถวที่สอดคล้องกับแถวเดิม 1 แถวหนึ่งซึ่งแยกคำกริยาแต่ละคำออกมา การรักษาความเป็นระเบียบนี้ทำให้ง่ายต่อการตรวจสอบความถูกต้องของขั้นตอนนี้ การใช้ฐานข้อมูล SQL จะยากกว่ามากเนื่องจากคำสั่งไม่รับประกัน ดังนั้นเราต้องดูที่เอาต์พุตทั้งหมดเพื่อดูว่าแถวที่กำหนดสิ้นสุดที่ใด (หรือเพิ่มส่วนคำสั่งเพื่อบังคับใช้คำสั่งเอาต์พุตเฉพาะ)ORDER BY
บทสรุป
ในโพสต์นี้ เราได้กล่าวถึงวิธีการต่างๆ ที่ Pandas สะดวกกว่า SQL จากมุมมองของผู้ใช้ปลายทาง ซึ่งรวมถึงความง่ายในการสร้างคำค้นหา Pandas อย่างถูกต้อง ผ่านการรักษาลำดับ การเพิ่มองค์ประกอบ การตั้งชื่อและการจัดการ และการตรวจสอบไปพร้อมกัน นอกจากนี้ยังรวมถึงการผสานรวมกับวิทยาศาสตร์ข้อมูลอื่นๆ และความต้องการในการวิเคราะห์ข้อมูล รวมถึงการสร้างภาพข้อมูลและการเรียนรู้ของเครื่อง: Pandas ทั้งสองให้ผู้ใช้แสดงภาพและดำเนินการสร้างแบบจำลองเชิงทำนายทั้งหมดภายใน Pandas แต่ยังให้ตะขอเพื่อเชื่อมต่อผลลัพธ์ไปยังไลบรารีการสร้างภาพและการเรียนรู้ของเครื่องยอดนิยมอื่นๆ และ แพ็คเกจโดยเฉพาะอย่างยิ่งภายในระบบนิเวศของ PyData ท้ายที่สุดแล้ว Pandas อยู่ภายใต้ภาษาการเขียนโปรแกรมที่สมบูรณ์อย่าง Python และสืบทอดพลังที่เป็นองค์ประกอบทั้งหมดของมัน
หากคุณนึกถึงตัวอย่างอื่นๆ ที่ Pandas สะดวกกว่า SQL หรือในทางกลับกัน เราก็ยินดีรับฟัง! อย่าลังเลที่จะตอบกลับทวีต ของเรา และติดตามเราบน TwitterหรือLinkedInสำหรับเนื้อหา Pandas / Python / data science เพิ่มเติม!