ทำไมคนถึงชอบ Pandas ถึง SQL


69

ฉันใช้ SQL มาตั้งแต่ปี 1996 ดังนั้นฉันอาจจะลำเอียง ฉันใช้ MySQL และ SQLite 3 อย่างกว้างขวาง แต่ก็ใช้ Microsoft SQL Server และ Oracle ด้วย

การดำเนินการส่วนใหญ่ที่ฉันเคยทำกับ Pandas นั้นสามารถทำได้ง่ายขึ้นด้วย SQL ซึ่งรวมถึงการกรองชุดข้อมูลการเลือกคอลัมน์เฉพาะสำหรับการแสดงนำฟังก์ชันไปใช้กับค่าและอื่น ๆ

SQL มีข้อดีของการมีเครื่องมือเพิ่มประสิทธิภาพและการคงอยู่ของข้อมูล SQL ยังมีข้อความแสดงข้อผิดพลาดที่ชัดเจนและเข้าใจได้ นุ่นมี API ที่ค่อนข้างคลุมเครือซึ่งในบางครั้งก็เหมาะสมที่จะใช้เป็นหนึ่งเดียว[ stuff ]ครั้งอื่น ๆ ที่คุณต้องการและบางครั้งคุณจำเป็นต้องมี[[ stuff ]] .locส่วนหนึ่งของความซับซ้อนของนุ่นเกิดขึ้นจากความจริงที่ว่ามีการบรรทุกเกินพิกัดมากเกินไป

ดังนั้นฉันจึงพยายามที่จะเข้าใจว่าทำไมนุ่นถึงได้รับความนิยม


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Sean Owen

คำตอบ:


51

คำถามแรกที่แท้จริงคือเหตุใดผู้คนจึงมีประสิทธิผลในการใช้ DataFrame abstractions มากกว่า abstractions SQL ที่บริสุทธิ์

TLDR; SQL ไม่ได้มุ่งไปที่การพัฒนาและการดีบัก (มนุษย์) กระบวนการ DataFrames คือ

เหตุผลหลักคือ DataFrame abstractions อนุญาตให้คุณสร้างคำสั่ง SQL ในขณะที่หลีกเลี่ยงการซ้อนแบบละเอียดและไม่สามารถอ่านได้ รูปแบบของการเขียนรูทีนที่ซ้อนอยู่แสดงความคิดเห็นเพื่อตรวจสอบจากนั้นการยกเลิกการทำเครื่องหมายความคิดเห็นจะถูกแทนที่ด้วยการแปลงบรรทัดเดียว คุณสามารถรันสิ่งต่าง ๆ ทีละบรรทัดในแบบจำลอง (แม้ใน Spark) และดูผลลัพธ์

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

DataFrames ควรถูกมองว่าเป็น API ระดับสูงถึงรูทีน SQL แม้ว่าจะมีนุ่นพวกมันก็ไม่ได้ถูกนำไปใช้ในการวางแผน SQL

-

คุณอาจมีการสนทนาทางเทคนิคมากมายเกี่ยวกับเรื่องนี้ แต่ฉันกำลังพิจารณามุมมองของผู้ใช้ด้านล่าง

เหตุผลง่ายๆข้อหนึ่งที่ทำให้คุณเห็นคำถามมากมายเกี่ยวกับการจัดการข้อมูลของ Pandas ซึ่งตรงข้ามกับ SQL คือการใช้ SQL ตามคำนิยามหมายถึงการใช้ฐานข้อมูลและกรณีการใช้งานจำนวนมากในทุกวันนี้ค่อนข้างต้องการบิตของข้อมูลสำหรับ ' งานที่ทำเสร็จแล้ว '(จาก. csv, web api ฯลฯ ) ในกรณีเหล่านี้การโหลดการจัดเก็บการจัดการและการแยกจากฐานข้อมูลจะไม่สามารถใช้งานได้

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

ประการแรกข้อได้เปรียบที่สำคัญของแพนด้ามีมากกว่า SQL คือมันเป็นส่วนหนึ่งของจักรวาล Python ที่กว้างขึ้นซึ่งหมายความว่าในคราวเดียวฉันสามารถโหลด, ทำความสะอาด, จัดการและแสดงภาพข้อมูลของฉัน (ฉันสามารถรัน SQL ผ่าน Pandas ... ) อีกอย่างก็คือผู้ใช้จำนวนมากเกินไปไม่รู้ความสามารถของ SQL ผู้เริ่มต้นทุกคนเรียนรู้ 'ไวยากรณ์การแยก' ของ SQL (SELECT, FROM, WHERE, ฯลฯ ) เป็นวิธีการรับข้อมูลของคุณจากฐานข้อมูลไปยังตำแหน่งถัดไป บางคนอาจเลือกกลุ่มการจัดกลุ่มล่วงหน้าและไวยากรณ์การทำซ้ำ แต่หลังจากนั้นก็มีแนวโน้มที่จะเป็นอ่าวที่มีความสำคัญพอสมควรจนกว่าคุณจะไปถึงผู้เชี่ยวชาญ (DBA, วิศวกรข้อมูล ฯลฯ )

tl; dr: บ่อยครั้งที่ผู้ใช้จะใช้งานได้สะดวกหรือมีช่องว่างในความรู้เกี่ยวกับขีดความสามารถของ SQL


2
ฉันคิดว่า SQL ส่วนใหญ่ถูกตั้งค่าตามเล่นเป็นส่วนใหญ่เมื่อผู้คนจำนวนมากจากพื้นที่ทางเทคนิคอื่น ๆ ที่ใช้ในการจัดการสายข้อมูลโดยสาย นอกจากนี้ให้พิจารณาว่าข้อมูลส่วนใหญ่เป็นเพียงข้อมูลให้กับแพนด้า แต่เอ็นจิน SQL ที่แตกต่างกันนั้นรองรับฟังก์ชั่นต่าง ๆ ที่สามารถสร้างความรำคาญอย่างรวดเร็วหากคุณต้องสับและเปลี่ยนในระหว่างวันทำงานของคุณ
เดฟ

3
ฉันจะไม่พูดว่ามันใช้ไม่ได้ หากคุณสามารถรับข้อมูลลงในกรอบข้อมูลแพนด้าคุณอาจผลักมันลงใน PostgreSQL DB แต่สำหรับหนึ่งและทำมันอาจจะเป็นความพยายามและเวลามากกว่าที่คุณจะประหยัด
jpmc26

2
ฉันยอมรับว่าวิธีการ ETL บางอย่างดูเหมือนเป็นการตัดสินใจแบบเป็นศูนย์กลาง นั่นคือพวกเขาต้องการจัดการข้อมูลจากนั้นนำเสนอเพย์โหลดที่สมบูรณ์แบบนี้ไปยังฐานข้อมูล อย่างไรก็ตามตามที่คุณระบุหากสามารถทำได้ผ่านการสืบค้น SQL หลาย ๆ ชั้นเลเยอร์เชิงโปรแกรมพิเศษนั้นไม่จำเป็น สิ่งที่ฉันเผชิญเมื่อเร็ว ๆ นี้ ดังที่ OP และคำตอบของคุณบ่งชี้ว่าอาจเป็นเพราะคน "โรงเรียนเก่า" หรือ DBA เป็นศูนย์กลางมองดูแล้วพูดว่าทำไมไม่ทำใน SQL (แม้แต่แบบสอบถามง่ายๆหลายข้อ!) ที่กล่าวว่าฉันพบแพนด้ามีประสิทธิภาพมากสำหรับชุดข้อมูลที่หลากหลายมาก
SaltySub2

1
@SaltySub จุดหนึ่งในการเปลี่ยนสิ่งต่าง ๆ จากเลเยอร์เชิงโปรแกรมไปเป็น SQL: มันเป็นจุดที่ยุติธรรมและสามารถใช้งานได้อย่างสมบูรณ์แบบ แต่ไปจนถึงการฝังตรรกะของแอปพลิเคชันในขั้นตอน SQL สามารถทำให้เกิดอาการปวดหัวเป็นพิเศษ
หัวไฟฟ้า

1
@ElectricHead ฉันยอมรับว่าต้องมียอดเงินที่เหมาะสม หากชุดของแบบสอบถาม SQL สามารถทำงานได้อย่างเพียงพอมันจะง่ายขึ้นและมีประสิทธิภาพมากขึ้น ในทางกลับกันหากคุณต้องวางลอจิกจำนวนมากลงในโพรซีเดอร์ SQL ฯลฯ คุณควรพิจารณาแพนด้าเป็นอย่างยิ่ง โดยเฉพาะอย่างยิ่งถ้าคุณใช้รสชาติของฐานข้อมูลที่แตกต่างกัน - ความแตกต่างทางไวยากรณ์ของ SQL จะมีปัญหามาก
SaltySub2

29

เท่าที่มีการเหลื่อมกันในการใช้สองสิ่งนี้เป็นการเปรียบเทียบแอปเปิ้ลกับส้ม

pandas เป็นชุดเครื่องมือวิเคราะห์ข้อมูลที่ใช้ใน Python ซึ่งเป็นภาษาโปรแกรมทั่วไป SQL เป็นภาษาเฉพาะโดเมนสำหรับการสืบค้นข้อมูลเชิงสัมพันธ์ (โดยปกติจะอยู่ในระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ซึ่ง SQLite, MySQL, Oracle, SQL Server, PostgreSQL เป็นต้นเป็นตัวอย่าง)

SQL หมายถึง

  • ทำงานกับข้อมูลใน RDBMS * ซึ่งอาจหรืออาจไม่เหมาะสมกับปริมาณงานแม้ว่าจะเป็นเพียงฐานข้อมูล SQLite ขนาดเล็กก็ตาม
  • ความรู้เกี่ยวกับโดเมนฐานข้อมูล (ในฐานะผู้ใช้ผู้พัฒนาและ / หรือผู้ดูแลระบบคำแนะนำว่า "SQL นั้นเร็วกว่า" ฉันมักจะเห็นว่าเป็นการทำให้เข้าใจง่ายเกินไป) และ
  • การเอาชนะช่วงการเรียนรู้ที่ไม่สำคัญในการใช้ SQL อย่างมีประสิทธิภาพโดยเฉพาะอย่างยิ่งในแอปพลิเคชันเฉพาะด้านเช่นการวิเคราะห์ข้อมูล (ตรงข้ามกับการสร้างรายงานอย่างง่ายของข้อมูลอย่างง่าย)

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

Python ในทางกลับกัน (pandas นั้นค่อนข้าง "pythonic" ดังนั้นมันจึงเป็นจริงที่นี่) มีความยืดหยุ่นและเข้าถึงได้สำหรับผู้คนที่มาจากภูมิหลังที่หลากหลาย มันสามารถใช้เป็น "ภาษาสคริปต์" เป็นภาษาที่ใช้งานได้และเป็นภาษา OOP ที่มีคุณลักษณะครบถ้วน ความสามารถในการสร้างภาพและการทำงานร่วมกันของแหล่งข้อมูลนั้นถูกสร้างขึ้นเป็นแพนด้า แต่คุณสามารถรวมสิ่งที่ Python สามารถทำได้ในเวิร์กโฟลว์ของคุณ ระบบนิเวศทางวิทยาศาสตร์ของ Python ได้ถูกบอลลูนและรวมถึงเครื่องมือที่ยอดเยี่ยมเช่นJupyter Notebookและห้องสมุดscipy ที่สำคัญเช่นmatplotlibและnumpy (ซึ่งแพนด้าสร้างขึ้น) องค์ประกอบที่สำคัญของการวิเคราะห์ข้อมูลของแพนด้าคือR- แรงบันดาลใจและโดยทั่วไปคุณจะไม่พบนักสถิติที่กำลังเข้ามาและไม่สนใจว่าพวกเขาใช้ R (หรืออาจจะเป็นแพนด้ามากขึ้น!) เพื่อวางทุกอย่างในฐานข้อมูลและเขียนการวิเคราะห์ของพวกเขาใน SQL

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


1
นี่เป็นคำตอบที่แท้จริงเพียงข้อเดียวที่ควรได้รับการคัดเลือก SQL และ Pandas เป็นสองสิ่งที่แตกต่างกันฉันไม่เข้าใจว่าผู้คนพยายามเปรียบเทียบอะไร
gented

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

ฉันขอท้าเล็กน้อยเกี่ยวกับการไม่เกี่ยวข้องกับสถานการณ์ NoSQL ลองพิจารณาตัวอย่างที่ PostgreSQL ได้ทำกับหน่วยเก็บ JSON ของมัน
jpmc26

ฉันพยายามเลือกคำพูดอย่างระมัดระวัง PostgreSQL ยังคงเป็น RDBMS แม้จะทำสิ่งต่าง ๆ ได้ดี (เนื่องจาก SQL Server นั้นสนับสนุนกราฟ) แต่ฉันผ่อนคลายถ้อยคำที่สัมผัสได้เพราะมันยังคงเป็นจุดที่ดี: มีครอสโอเวอร์อยู่บ้างและที่สำคัญ SQL APIs มีอยู่สำหรับระบบ NoSQL บางตัว มันเป็นแบบไขว้แม้ว่า SQL ไม่ใช่ภาษาสากลและไม่ใช่ว่าข้อมูลทั้งหมดมีโครงสร้างที่สัมพันธ์กัน
หัวไฟฟ้า

ฉันคิดว่าคุณสามารถทำทุกอย่างใน SQL ซึ่งเป็นไปได้ในแพนด้า SQL ไม่ยืดหยุ่น แต่ได้รับการปรับให้เหมาะสมที่สุด
สื่อ

22

ก่อนอื่นแพนด้าไม่ค่อยได้รับความนิยมเท่าไหร่ ฉันใช้ทั้งนุ่นและ SQL ก่อนอื่นฉันพยายามทำความเข้าใจกับงานถ้าสามารถทำได้ใน SQL ฉันชอบ SQL เพราะมีประสิทธิภาพมากกว่าแพนด้า ลองทำงานกับข้อมูลขนาดใหญ่ (10,000,000 x 50) พยายามที่จะทำบางGroupByการดำเนินงานทั้งใน SQL และหมีแพนด้า คุณจะเข้าใจ.

ฉันใช้หมีแพนด้าซึ่งเป็นประโยชน์ - เช่นการแบ่งค่าคอลัมน์เป็นอาร์เรย์และทำบางสิ่งกับมัน (เช่นเลือกเฉพาะค่าบางค่าจากอาร์เรย์นั้น) ตอนนี้งานประเภทนี้ค่อนข้างยากที่จะเขียนโค้ดใน SQL แต่แพนด้าจะทำให้งานของคุณง่ายขึ้น


ความไร้ประสิทธิภาพนี้เป็นลักษณะเฉพาะของหมีแพนด้าหรือไม่? ฉันทำการจัดการข้อมูลในหน่วยความจำใน C # ค่อนข้างน้อยและพบว่าค่อนข้างง่ายและมีประสิทธิภาพโดยจัดให้เหมาะสมกับหน่วยความจำและถ่ายได้ครั้งเดียว
CodesInChaos

แพนด้ามีความหมายว่าสะดวกกว่าเร็ว แต่นั่นไม่ได้หมายความว่าจะไม่เร็วถ้าคุณใช้มันอย่างถูกต้อง ในท้ายที่สุดการดำเนินการสืบค้น SQL กับข้อมูลในฐานข้อมูลไม่ใช่เรื่องมหัศจรรย์ - มันต้องการทรัพยากรเหมือนอะไรมันก็แค่นั้น (ถ้าคุณทำถูกต้อง!) คุณหวังว่าจะใช้ทรัพยากรบนเซิร์ฟเวอร์ฐานข้อมูลที่มีการกำหนดค่าอย่างระมัดระวัง . การทำให้ไพพ์ไลน์ของคุณถูกต้องในรูปแบบของหมีแพนด้าหรือสิ่งที่คล้ายกัน (เช่นการสตรีมข้อมูลแทนที่จะโหลดมันทั้งหมดลงในหน่วยความจำ) จะเป็นตัวกำหนดว่าความสำเร็จของความพยายาม
หัวหน้าไฟฟ้า

@CodesInChaos มีคำตอบของหมีแพนด้า VS SQL นี่คือ - qr.ae/TUIpzE มีการอธิบายถึงข้อดีและข้อเสียของการใช้แพนด้า
Ankit Seth

12

ฉันเป็นหนึ่งในคนเหล่านั้นที่จะใช้ (ในกรณีของฉัน) Dplyr ของ R (ภาษาไม่จำเป็นต้องเป็นเครื่องมือ) ในทุกกรณีถ้าฉันสามารถทำได้แม้ว่าฉันจะรู้ SQL ของฉัน

ประโยชน์หลัก ๆ ที่ฉันเห็นในท่อส่งของ Pandas / dplyr / data.table คือการดำเนินการเป็นอะตอมและสามารถอ่านจากบนลงล่าง

ใน SQL คุณต้องแยกวิเคราะห์สคริปต์ทั้งหมดกระโดดไปรอบ ๆ (สิ่งที่ถูก sumamrized สิ่งที่มีการเข้าร่วมและวิธี - ซ้ายด้านในด้านขวามีตัวกรองใดใช้หรือไม่) เพื่อเข้าใจอย่างเต็มที่สิ่งที่เกิดขึ้น

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

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


6

ฉันค่อนข้างใหม่กับ Pandas / Python แต่มีประสบการณ์มากกว่า 20 ปีในฐานะ SQLServer DBA, สถาปนิก, ผู้ดูแลระบบและอื่น ๆ ฉันรัก Pandas และฉันพยายามผลักดันให้ตัวเองพยายามทำสิ่งต่าง ๆ ใน Pandas ก่อนที่จะกลับไปที่ความสะดวกสบายของฉัน โลก SQL ที่แสนสบาย

ทำไม RDBMS ถึงดีกว่า: ข้อได้เปรียบของ RDBMS คือประสบการณ์หลายปีในการเพิ่มประสิทธิภาพความเร็วคิวรีและการอ่านข้อมูล สิ่งที่น่าประทับใจคือพวกเขาสามารถทำสิ่งนี้ได้ในขณะเดียวกันก็จำเป็นที่จะต้องเพิ่มความเร็วในการเขียนและจัดการการเข้าถึงพร้อมกันสูง บางครั้งค่าโสหุ้ยเพิ่มเติมเหล่านี้ทำให้เกิดประโยชน์กับ Pandas เมื่อพูดถึงกรณีที่ใช้งานง่าย แต่ถึงอย่างนั้น DBA ที่มีประสบการณ์ก็สามารถปรับแต่งฐานข้อมูลเพื่อให้ได้ความเร็วสูงสุดในการอ่านผ่านความเร็วในการเขียน DBA สามารถใช้ประโยชน์จากสิ่งต่าง ๆ เช่นการเพิ่มประสิทธิภาพการจัดเก็บข้อมูลการปรับขนาดหน้าดิสก์เชิงกลยุทธ์การบรรจุ / การขยายหน้าตัวควบคุมข้อมูลและกลยุทธ์การแบ่งพาร์ติชั่นดิสก์แผน I / O ที่เหมาะสมที่สุดการตรึงข้อมูลในหน่วยความจำแผนการดำเนินการที่กำหนดไว้ล่วงหน้า , และอื่น ๆ อีกมากมาย. ฉันได้รับความประทับใจจากนักพัฒนาหมีแพนด้าหลายคนที่พวกเขาสวม ' ไม่เข้าใจความลึกที่มีอยู่ สิ่งที่ฉันคิดว่ามักจะเกิดขึ้นก็คือหากนักพัฒนา Pandas ไม่เคยมีข้อมูลที่ใหญ่พอที่จะต้องการการปรับแต่งเหล่านี้พวกเขาจะไม่ขอบคุณเวลาที่พวกเขาสามารถช่วยคุณประหยัดเวลาได้มากแค่ไหน โลกของ RDBMS มีประสบการณ์ 30 ปีในการปรับให้เหมาะสมดังนั้นหากจำเป็นต้องใช้ความเร็วของชุดข้อมูลขนาดใหญ่จะสามารถเอาชนะ RDBMS ได้

ทำไม Python / Pandas ถึงดีกว่า: ที่กล่าวว่าความเร็วไม่ใช่ทุกอย่างและในหลายกรณีการใช้งานไม่ใช่ปัจจัยขับเคลื่อน ขึ้นอยู่กับว่าคุณใช้ข้อมูลอย่างไรไม่ว่าจะแชร์หรือไม่และคุณสนใจเรื่องความเร็วในการประมวลผลหรือไม่ โดยทั่วไปแล้ว RDBMS จะมีความเข้มงวดมากขึ้นในโครงสร้างข้อมูลและสร้างภาระให้กับผู้พัฒนาเพื่อกำหนดรูปแบบข้อมูลให้มากขึ้น นุ่นช่วยให้คุณหลวมที่นี่ นอกจากนี้และนี่คือเหตุผลที่ฉันชอบคุณอยู่ในภาษาการเขียนโปรแกรมจริง ภาษาการเขียนโปรแกรมช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการใช้ตรรกะขั้นสูงกับข้อมูล แน่นอนว่ายังมีระบบนิเวศที่สมบูรณ์ของโมดูลและกรอบงานของบุคคลที่สามที่ SQL ไม่สามารถเข้าใกล้ได้ ความสามารถในการไปจากข้อมูลดิบไปจนถึงการนำเสนอเว็บหรือการสร้างภาพข้อมูลในฐานรหัสเดียวนั้นสะดวกมาก มันยังพกพาได้มากกว่า คุณสามารถเรียกใช้ Python ได้เกือบทุกที่รวมถึงสมุดบันทึกสาธารณะที่สามารถขยายขอบเขตการเข้าถึงผลลัพธ์ของคุณเพื่อเข้าถึงผู้คนได้รวดเร็วยิ่งขึ้น ฐานข้อมูลไม่ยอดเยี่ยมในเรื่องนี้

คำแนะนำของฉัน? หากคุณพบว่าตัวเองจบการศึกษาไปสู่ชุดข้อมูลที่ใหญ่กว่าและใหญ่กว่านั้นคุณต้องติดใจและเรียนรู้ว่า RDBMS ช่วยได้อย่างไร ฉันเห็นล้านแถวการเข้าร่วมหลายตารางสรุปรวมข้อความค้นหาที่ปรับจาก 5 นาทีจนถึง 2 วินาที การมีความเข้าใจในแถบเครื่องมือของคุณเพียงแค่ทำให้คุณเป็นนักวิทยาศาสตร์ด้านข้อมูลที่โค้งมนมากขึ้น คุณอาจจะทำทุกอย่างใน Pandas วันนี้ แต่บางวันคุณอาจมีงานที่ RDBMS เป็นตัวเลือกที่ดีที่สุด


5

สิ่งที่ Pandas สามารถทำได้นั้น SQL ไม่สามารถทำได้

  1. df.describe()
  2. พล็อตเช่น df['population'].plot(kind='hist')
  3. ใช้ดาต้าเฟรมโดยตรงสำหรับอัลกอริทึมการเรียนรู้ของเครื่องฝึกอบรม

สิ่งที่ Pandas สามารถทำได้ฉันไม่ทราบว่า SQL สามารถทำได้เช่นกัน

  1. ส่งออกเป็น df.to_csv('foobar.sv')CSV: นี่เป็นสิ่งสำคัญเมื่อคุณต้องการแสดงบางสิ่งบางอย่างแก่เจ้าของธุรกิจที่ต้องการทำงานกับ Excel และก็มีdf.to_excelเช่นกัน แต่ใน SQL คุณสามารถทำได้SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;(ขอบคุณ vy32!)

1
ดี แม้ว่าฟังก์ชั่นเหล่านี้ส่วนใหญ่จะดูเหมือนว่าสามารถนำไปใช้ใน SQL ได้ (SQL มีการส่งออก CSV โดยตรง)
vy32

คุณช่วยส่งแบบสอบถามที่ส่งออกไปยัง CSV ได้ไหม (ฉันเพิ่งรู้เครื่องมือที่ทำสิ่งนี้สำหรับฐานข้อมูล SQL บางตัว แต่ฉันไม่เคยเห็นข้อความค้นหา ... ดังนั้นฉันสงสัยว่านี่เป็นส่วนหนึ่งของข้อกำหนด SQL)
Martin Thoma

1
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; ดูdev.mysql.com/doc/refman/8.0/en/select-into.html
vy32

ขอบคุณมาก vy! ฉันคิดว่าฉันจะปรับคำตอบของฉันเมื่อฉันอยู่ที่บ้าน :-)
Martin Thoma

แน่นอนค่ะ จำไว้ว่าไฟล์นั้นจบลงที่เซิร์ฟเวอร์ SQL ไม่ใช่ลูกค้า
vy32

3

สิ่งเดียวที่ไม่ครอบคลุมในคำตอบเหล่านี้ที่ฉันต้องการพูดถึงก็คือมันยังขึ้นอยู่กับว่าคุณใช้ SQL ยกตัวอย่างเช่นอาร์คpy ด้วยเหตุผลบางอย่างฟังก์ชั่น arcpy.da ไม่มีฟังก์ชั่นการใช้งานมากมาย นี่มันแปลกจริงๆเพราะห้องสมุดหลาม sql อื่น ๆ ทำ คำสั่ง Where ในฟังก์ชัน arcpy.da นั้น จำกัด อยู่ที่ประมาณ 120 ตัวอักษร นี่หมายถึงว่าถ้าคุณมีสิ่งที่คุณพยายามทำกับฐานข้อมูลของคุณค่อนข้างมากตัวเลือกเดียวที่แท้จริงของคุณคือเรียกฟังก์ชัน arcpy.da ที่คุณเลือกหลาย ๆ ครั้งเปลี่ยนคำสั่ง where ทุกครั้ง มีเทคนิคไม่กี่อย่างที่คุณสามารถใช้เพื่อทำให้กระบวนการนี้ทำงานได้เร็วขึ้น - คุณสามารถวนซ้ำชุดข้อมูลของคุณได้ - แต่แท้จริงทุกเทคนิคเหล่านี้ช้ากว่าการใช้ arcpy.da เพียงใด searchcursor เพื่อโหลดตารางทั้งหมดของคุณลงในกรอบข้อมูลแพนด้าแล้วจัดการมันด้วยการใช้แพนด้านัมเบอร์และถ้าข้อมูลของคุณมีขนาดใหญ่มาก ฉันต้องเน้นที่นี่ว่านุ่นไม่ได้เร็วขึ้นเพียงเล็กน้อยในกรณีนี้ มันเร็วกว่าที่น่ารังเกียจ มันเร็วกว่ามากที่ฉันหัวเราะตัวเองอย่างแท้จริงเพราะไม่ทำมันเร็วกว่านี้ การใช้หมีแพนด้าทำให้เวลาในการประมวลผลของสคริปต์ลดลงหนึ่งชั่วโมง - ฉันลืมว่านี่เป็นการกระโดดจาก 3.5 ชั่วโมงหรือจาก 1.5 ชั่วโมง - เป็น 12 นาที เร็วขึ้นมากจนฉันหัวเราะตัวเองอย่างแท้จริงเพราะไม่ได้ทำมันเร็วกว่านี้ การใช้หมีแพนด้าทำให้เวลาในการประมวลผลของสคริปต์ลดลงหนึ่งชั่วโมง - ฉันลืมว่านี่เป็นการกระโดดจาก 3.5 ชั่วโมงหรือจาก 1.5 ชั่วโมง - เป็น 12 นาที เร็วขึ้นมากจนฉันหัวเราะตัวเองอย่างแท้จริงเพราะไม่ได้ทำมันเร็วกว่านี้ การใช้หมีแพนด้าทำให้เวลาในการประมวลผลของสคริปต์ลดลงหนึ่งชั่วโมง - ฉันลืมว่านี่เป็นการกระโดดจาก 3.5 ชั่วโมงหรือจาก 1.5 ชั่วโมง - เป็น 12 นาที

สิ่งหนึ่งที่ควรทราบคือในขณะที่ฉันสามารถทำสิ่งนี้ได้ด้วย sql ฉันจะต้องเรียนรู้อีกต่อไป ฉันจะต้องเรียนรู้การดำเนินการโดยเฉพาะสำหรับ SQL ใน Access - นั่นคือข้อมูลสำหรับสคริปต์นี้สิ้นสุดลง - - sql ใน Access ไม่แข็งแกร่งเท่าที่ฉันต้องการให้เป็นตอนที่ฉันกำลังมองหาสิ่งนี้จริง ๆ - หรือ ฉันจะต้องเขียนข้อมูลทั้งหมดของฉันไปยังฐานข้อมูล sqlite3 จัดการกับมันแล้วนำไปไว้ใน Access แม้ว่าสิ่งนี้อาจให้ผลการทำงานที่คล้ายกัน แต่มันก็ทำให้สคริปต์ของฉันยากขึ้นที่จะแก้ไขในอนาคต

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

อีกสิ่งหนึ่งที่ฉันต้องการพูดถึง Pandas และ numpy ก็คือไลบรารีทั้งสองนี้เป็นไปตามวิธีการตั้งค่าตามธรรมชาติ คุณสามารถวนซ้ำผ่าน dataframes และ series build ด้วยไลบรารีเหล่านี้ แต่มันยากที่จะแก้ไขข้อมูลในโครงสร้างเหล่านี้แบบนั้นดังนั้นคุณจะต้องเขียนโค้ดที่มีประสิทธิภาพมากขึ้น - ตั้งค่า - โดยใช้ทั้งสองไลบรารีเหล่านี้ล้วนๆเพราะง่ายกว่ามาก ทำ. การเป็น "นำทาง" หากไม่ใช่ทางรถไฟเข้าสู่การใช้วิธีการตั้งค่าไม่ใช่สิ่งที่ฉันเคยสัมผัสกับ SQL

อีกสิ่งที่ยิ่งใหญ่กว่าฉันลืมพูดถึงกับนุ่น เงิน Pandas เป็นเครื่องมือที่มีงานด้านวิทยาศาสตร์ข้อมูลจำนวนมากต้องการให้คุณรู้วิธีใช้ ค่อนข้างทุกงานวิทยาศาสตร์ข้อมูลที่ฉันได้ดูได้จ่ายมากกว่างานประเภทการจัดการฐานข้อมูล ข้อยกเว้นเพียงข้อเดียวที่ฉันสังเกตเห็นอยู่ใน Data Engineering แต่ฉันเห็นการโพสต์งานเหล่านั้นน้อยกว่ามาก Pandas ดูเหมือนว่าจะทำให้คุณมีเงินมากขึ้นได้อย่างรวดเร็ว


5
บางทีน่าเศร้าที่เมื่อพูดถึงงานที่ทันสมัยมันเกี่ยวกับการมี buzzwords ที่ถูกต้องในเรซูเม่ของคุณซึ่งตรงข้ามกับวิธีการที่คุณใช้ในการแก้ปัญหา (สมมติว่าคุณสามารถเรียนรู้คำศัพท์ buzzword ที่ค่อนข้างเร็ว) มันเหมือน buzzword มีความสำคัญมากกว่าการแก้ปัญหา เมื่อการแก้ปัญหาสำหรับ X ควรเกี่ยวข้องกับการเรียนรู้และการใช้เทคโนโลยี A, B, C ไม่ใช่สิ่งที่ตรงกันข้าม ฉันสงสัยว่าตอนนี้ทีมพัฒนาส่วนใหญ่แตกออกเพราะ buzzword-ism และ trendiness แล้วคิดเกี่ยวกับการแก้ปัญหาในฐานะรองหรือสิ่ง "โรงเรียนเก่า" เพราะคุณไม่รู้ / ใช้ buzzword กล่าว
SaltySub2

1
@ElectricHead จากประสบการณ์ของฉันถ้าคุณกำลังเขียนฟังก์ชั่นของคุณเองที่เกี่ยวข้องกับ sql ใน python มันง่ายกว่าที่จะใช้เคอร์เซอร์ของคุณผิดและเขียนเคียวรีที่ไม่ดีมากกว่าที่ใช้ pandas / numpy ต้องจำไว้ว่าโมดูล / ไลบรารี sql ทั้งหมดไม่ได้ทำเหมือนกัน ในกรณีของฉันกับ arcpy.da.SearchCursors และสิ่งที่คล้ายกันไม่มีวิธีที่ดีที่จะทำบางสิ่งบางอย่างกับบันทึกจำนวนมากได้อย่างมีประสิทธิภาพเนื่องจากข้อ จำกัด แปลก ๆ ถ้าฉันใช้ pandas / numpy มีวิธีหนึ่งที่ดีในการทำสิ่งต่าง ๆ และนั่นคือสิ่งที่ฉันต้องการเมื่อใช้ python

1
อ่าาาโอเค คุณหมายถึงไพร่พลของ SQL ไปป์ไลน์ผ่านทาง python dbapi กับการใช้ numpy / pandas หรือไม่? ในกรณีนี้ใช่ gotcha ไม่มีข้อโต้แย้งจากฉันที่นั่น; จำเป็นต้องดูแล! มันอ่านให้ฉันในฐานะ VS SQL ธรรมดาซึ่งคุณต้องเข้าใจการตั้งค่าด้วย แต่จะพบว่าค่อนข้างเร็วเมื่อเรียกใช้แบบสอบถามที่ไม่มีสาระจากไคลเอ็นต์ฐานข้อมูล
หัวไฟฟ้า

1
@ Steve ใช่จะไม่หยุดคนที่พยายามปรับเปลี่ยนสิ่งต่าง ๆ ในลูปในแพนด้าหรือคล้ายกัน :) ฉันคิดว่าการเข้าใจ SQL ช่วยให้ทำงานในแพนด้าได้อย่างมีประสิทธิภาพ (ไม่ใช่ว่าพวกเขาซ่อนความคล้ายคลึงกันไว้ในแนวคิด
หัวไฟฟ้า

1
@Steve อันที่จริงแล้ว Pandas นั้นก็ทรงพลังเช่นกัน ... ฉันคิดว่าหนึ่งในความผิดหวังของฉันคือนักพัฒนาและการจัดการทั้งสองรวมถึงตัวฉันเองไม่ได้ใช้เวลาพอสมควรในการประเมินโซลูชั่นและแนวโน้มการไล่ล่า แต่แม้แต่ในการทำต้นแบบแบบลีน / mvp ก็จะต้องวางรากฐานที่เหมาะสมสำหรับการปรับ SQL, noSQL และ Pandas ... ทั้งหมดมีวัตถุประสงค์เพื่องานและโครงการที่เหมาะสมในแต่ละขั้นตอน สำหรับปีที่ผ่านมาบวกด้วย noSQL สำหรับตัวต้นแบบแบบลีน / mvp ช่วยฉันได้หลายวิธีมากกว่าหนึ่งอย่างแน่นอน SQL จะ overkill สำหรับสิ่งนั้น
SaltySub2

3

ฉันคิดว่าฉันจะเพิ่มว่าฉันทำการวิเคราะห์ข้อมูลตามอนุกรมเวลาจำนวนมากและแพนด้าresampleและreindexวิธีการนั้นมีค่ามากสำหรับการทำเช่นนี้ ใช่คุณสามารถทำสิ่งที่คล้ายกันใน SQL (ฉันมักจะสร้างDateDimensionตารางเพื่อช่วยในการค้นหาที่เกี่ยวข้องกับวันที่) แต่ฉันเพิ่งพบวิธีการใช้แพนด้าง่ายกว่ามาก

อย่างที่คนอื่นพูดกันว่าการสร้างแบบจำลองส่วนที่เหลือของฉันอยู่ใน Python และฉันมักจะมีเว็บคอลหรือไฟล์ CSV


2

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

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

B+

ความแตกต่างอีกประการหนึ่งคือการดำเนินการ CRUD ใน SQL สามารถนำไปใช้กับนโยบายการอนุญาตที่แตกต่างกันซึ่งไม่สามารถทำได้ในแพนด้า

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

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


1

แพนด้าเป็นที่นิยมมากขึ้นเนื่องจากไพ ธ อนในรูปแบบของสมุดบันทึก jupyter เป็นกล่องเครื่องมือที่นิยมใช้มากที่สุดที่นักวิทยาศาสตร์ข้อมูลใช้ในพื้นที่โครงข่ายประสาทเทียม Python กำลังกลายเป็น "the" ไป เป็นไปได้ที่จะใช้แบ็กเอนด์ SQL แต่คุณไม่ได้ผูกติดกับ SQL เฉพาะกับแพนด้า


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.