R และ Python เติมเต็มซึ่งกันและกันในข้อมูลวิทยาศาสตร์ได้อย่างไร?


54

ในแบบฝึกหัดหรือคู่มือต่างๆการบรรยายดูเหมือนจะบอกเป็นนัยว่า R และ python อยู่ร่วมกันเป็นองค์ประกอบเสริมของกระบวนการวิเคราะห์ อย่างไรก็ตามสำหรับตาที่ไม่ได้รับการฝึกฝนของฉันดูเหมือนว่าทั้งสองภาษาจะทำสิ่งเดียวกัน

ดังนั้นคำถามของฉันคือถ้ามี niches พิเศษสำหรับสองภาษาหรือถ้าเป็นเพียงการตั้งค่าส่วนตัวว่าจะใช้อย่างใดอย่างหนึ่งหรือไม่


2
สิ่งนี้ดูไม่เหมือนซ้ำกับเธรดนั้นจริงๆ นี่ไม่เกี่ยวกับวิธีการใช้ Python ในการทำสถิติ แต่เป็นเกี่ยวกับวิธีที่ Python สามารถเติมเต็ม R (เห็นได้ชัดว่า R จะใช้ในการวิเคราะห์ทางสถิติ)
gung - Reinstate Monica

4
R ถ้าคุณเป็นนักสถิติเมื่อ 10 ปีก่อน Python หากคุณต้องการใส่รหัสในการผลิตหรือนำไปใช้ใหม่
djechlin

1
ที่เกี่ยวข้อง: datascience.stackexchange.com/questions/326
Juho Kokkala

3
เนื่องจากความนิยมของคำถามนี้ & เพื่อตอบสนองต่อคำขอผ่านทางธงฉันได้เปิดใหม่ แต่ทำให้เป็น CW
Scortchi - Reinstate Monica

1
สิ่งที่คำตอบส่วนใหญ่มักจะลืมคือพวกเขากำลังเปรียบเทียบภาษา Python กับการใช้งาน GNU-R R ยังมีการนำไปใช้งานอื่น ๆ (ดูRenjin , เขียนใน Java, Microsoft R Openซึ่งรวบรวมด้วย Intel MKL, FastR , pqR , ฯลฯ ) สิ่งเหล่านี้พยายามแก้ไขปัญหาบางอย่างกับ GNU-R ซึ่งเป็นการนำไปปฏิบัติที่อนุรักษ์นิยมมากกว่า นอกจากนี้โปรดจำไว้ว่า R ไม่มีคำจำกัดความที่เป็นทางการ
Firebug

คำตอบ:


45

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

Rมี Smorgasbord ของแพคเกจสำหรับสิ่งที่คุณคิดว่า แต่หลักคือการวิเคราะห์ทางสถิติ - จากพื้นฐานไคสแควร์การวิเคราะห์ปัจจัยและรูปแบบอันตรายมันง่ายและมีประสิทธิภาพ ชื่อที่ยิ่งใหญ่ที่สุดในสถิติสร้างแพ็คเกจ R และมีชุมชนที่มีชีวิตชีวาที่จะช่วยเหลือทุกความต้องการของคุณ ggplot2เป็นมาตรฐานในการแสดงข้อมูล (กราฟ ฯลฯ ) R เป็นภาษา vectorized และสร้างการวนลูปผ่านข้อมูลอย่างมีประสิทธิภาพ นอกจากนี้ยังเก็บข้อมูลทั้งหมดใน RAM ซึ่งเป็นดาบสองคม - มันเร็วในชุดข้อมูลขนาดเล็ก (แม้ว่าบางคนอาจเถียงกับฉัน) แต่ก็ไม่สามารถจัดการกับข้อมูลขนาดใหญ่ได้ดี (แม้ว่าจะมีแพ็คเกจที่จะข้ามสิ่งนี้ เช่นff)

Pythonง่ายต่อการเรียนรู้มากกว่า R โดยเฉพาะอย่างยิ่งสำหรับผู้ที่เคยมีประสบการณ์การเขียนโปรแกรมมาก่อน R เป็นเพียง ... แปลก งูหลามเป็นที่ดีในการดึงข้อมูลและเป็นภาษาที่จะใช้สำหรับขูดเว็บ (ที่น่าตื่นตาตื่นใจbeautifulsoup) Python เป็นที่รู้จักในด้านความแข็งแกร่งในการวิเคราะห์สตริงและการจัดการข้อความ pandasเป็นไลบรารีที่ยอดเยี่ยมสำหรับการจัดการข้อมูลการผสานการแปลง ฯลฯ และรวดเร็ว (และอาจได้รับแรงบันดาลใจจาก R)

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


13
ในฐานะคนที่รู้ทั้งสองฉันเห็นด้วยกับสิ่งนี้ อาจมีข้อโต้แย้งแบบโวหารจำนวนมาก แต่ความแตกต่างที่ยิ่งใหญ่ที่สุดคือเมื่อถึงเวลาที่จะต้องใช้แบบจำลองเชิงสถิติเชิงสาเหตุ Python นั้นยังไม่ได้รับการพัฒนา statsmodelsแพคเกจทำให้คุณได้รับพื้นฐานบางอย่าง แต่ไม่ได้เข้าใกล้ R, Stata หรือ Sas ข้อยกเว้นที่น่าสังเกตอย่างหนึ่งคือการวิเคราะห์รูปแบบการเรียนรู้ด้วยเครื่องซึ่งScikitlearnของ Python นั้นเข้ากันได้ดี สำหรับทุกสิ่งทุกอย่างฉันคิดว่าการโต้แย้งที่ดีสามารถทำให้ Python มีค่าอย่างน้อยเท่ากับ R และมักจะเหนือกว่า การเรียนรู้ทั้งสองอย่างนั้นไม่ได้เป็นการใช้เวลาอย่างเลวร้าย
Jeff

2
ฉันเห็นด้วยกับสิ่งนี้มากที่สุด - แต่จะเน้นปัญหามากขึ้น - R ไม่ดีสำหรับชุดข้อมูลขนาดใหญ่และไม่รองรับชุดข้อมูลที่กระจัดกระจาย (ห้องสมุดส่วนใหญ่ไม่สนับสนุนชุดนี้) เป็นอย่างดี เช่น 'กระเป๋าคำ' แบบจำลองชนิดที่ความสำคัญของตัวแปร / หมวดหมู่ของตัวแปรอาจอยู่ใน 1000s
seanv507

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

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

3
เพิ่มให้กับ Trevor's boost data.table; ฉันยังยินดีที่จะพูดว่าrvestเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการจัดการงานขูดส่วนใหญ่และง่ายต่อการเริ่มต้นและใช้งานมากกว่าbeautifulsoup
MichaelChirico

21

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

เวิร์กโฟลว์ในการวิเคราะห์ข้อมูลโดยทั่วไปประกอบด้วยขั้นตอนต่อไปนี้:

  1. การดึงข้อมูลจากแหล่งข้อมูลบางประเภท (ส่วนใหญ่เป็นฐานข้อมูล SQL / noSQL หรือไฟล์. csv)
  2. แยกวิเคราะห์ข้อมูลในรูปแบบที่เหมาะสมและเหมาะสม (data frame) เพื่อให้สามารถดำเนินการและคิดในเวลาต่อมา
  3. การใช้ฟังก์ชั่นบางอย่างกับข้อมูล (การจัดกลุ่มการลบการผสานการเปลี่ยนชื่อ)
  4. การประยุกต์ใช้แบบจำลองบางอย่างกับข้อมูล (การถดถอยการจัดกลุ่มเครือข่ายนิวรัลหรือทฤษฎีที่ซับซ้อนมากขึ้นหรือน้อยลง)
  5. การปรับใช้ / นำเสนอผลลัพธ์ของคุณไปยังผู้ชมทางเทคนิคที่มากหรือน้อย

กำลังดึงข้อมูล

99% ของเวลาที่กระบวนการของการดึงข้อมูลที่ลงมาเพื่อสอบถามการจัดเรียงของ SQL หรือฐานข้อมูล Impala บางทั้งงูหลามและRมีลูกค้าที่เฉพาะเจาะจงหรือห้องสมุดที่ทำผลงานได้ในเวลาไม่นานและดีพอ ๆ กัน ( RImpala, RmySQLสำหรับ R และMySQLdbสำหรับงูหลาม ทำงานได้อย่างราบรื่นไม่ต้องเพิ่ม) เมื่อพูดถึงการอ่านไฟล์. csv ภายนอกdata.tableแพคเกจสำหรับRมีฟังก์ชั่นการfreadอ่านในไฟล์. csv ขนาดใหญ่และซับซ้อนพร้อมตัวเลือกการแยกวิเคราะห์แบบกำหนดเองในเวลาไม่นานและแปลงผลลัพธ์เป็นเฟรมข้อมูลโดยตรงพร้อมชื่อคอลัมน์และหมายเลขแถว

การจัดระเบียบเฟรมข้อมูล

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

Rแพคเกจdata.tableมีวิธีที่ถูกที่สุดที่จะติดป้ายเปลี่ยนชื่อลบและการเข้าถึงข้อมูล ไวยากรณ์มาตรฐานนั้นคล้ายกับ SQL มากdt[i, j, fun_by]ซึ่งมีจุดประสงค์เพื่อเป็นdt[where_condition, select_column, grouped_by (or the like)]; ฟังก์ชั่นที่ผู้ใช้กำหนดเองสามารถกำหนดได้เองเช่นเดียวกับในส่วนjคำสั่งเพื่อให้คุณมีอิสระอย่างเต็มที่ในการจัดการข้อมูลและใช้ฟังก์ชั่นที่ซับซ้อนหรือแฟนซีในกลุ่มหรือชุดย่อย (เช่นใช้แถว i-th, k-th องค์ประกอบและรวมไปยังองค์ประกอบ (k-2) -th ของแถว (i-1) -th ถ้าหากค่าเบี่ยงเบนมาตรฐานของคอลัมน์ทั้งหมดคือ what-it-is นั้นจะถูกจัดกลุ่มตามคอลัมน์สุดท้ายทั้งหมด) ลองดูที่การวัดประสิทธิภาพและคำถามที่น่าอัศจรรย์อื่น ๆ ของSO. การเรียงลำดับการลบและการตั้งชื่อใหม่ของคอลัมน์และแถวทำสิ่งที่พวกเขาต้องทำและวิธีapply, sapply, lapply, ifelseการvectorised R มาตรฐานดำเนินการ vectorised การดำเนินงานในคอลัมน์และเฟรมข้อมูลทั้งหมดโดยไม่ต้องวนรอบแต่ละองค์ประกอบ (จำไว้ว่าเมื่อใดก็ตามที่คุณใช้ลูปใน R กำลังทำผิดอย่างรุนแรง)

counterweapon ของPythonเป็นpandasห้องสมุด ในที่สุดก็ให้โครงสร้างpd.DataFrame(Python มาตรฐานนั้นขาดเหตุผลบางอย่างที่ยังไม่ทราบสำหรับฉัน) ที่ปฏิบัติต่อข้อมูลสำหรับสิ่งที่พวกเขาคือเฟรมของข้อมูล (แทนบางส่วนnumpy array, numpy list, numpy matrixหรืออะไรก็ตาม) ดำเนินการเช่นการจัดกลุ่มใหม่ตั้งชื่อเรียงลำดับและชอบสามารถทำได้อย่างง่ายดายและที่นี่ด้วยผู้ใช้สามารถใช้ฟังก์ชั่นที่กำหนดเองใด ๆ กับชุดข้อมูลที่จัดกลุ่มหรือส่วนย่อยของกรอบโดยใช้ Python หรือapply lambdaฉันเองไม่ชอบไวยากรณ์df[df.iloc(...)]ในการเข้าถึงรายการ แต่นั่นเป็นเพียงรสนิยมส่วนตัวและไม่มีปัญหาเลย เกณฑ์มาตรฐานสำหรับการดำเนินการจัดกลุ่มยังคงแย่กว่า R เล็กน้อยdata.tableแต่ถ้าคุณต้องการบันทึก 0.02 วินาทีสำหรับการรวบรวมไม่มีประสิทธิภาพแตกต่างกันมาก

เงื่อนไข

Rวิธีการรักษาสตริงคือการใช้stringrแพคเกจใด ๆ ที่ช่วยให้การจัดการข้อความ, แอนนาแกรมการแสดงออกปกติต่อท้ายช่องว่างสีขาวหรือคล้ายกันที่มีความสะดวก นอกจากนี้ยังสามารถใช้ร่วมกับไลบรารี JSON ที่เปิดพจนานุกรม JSON และแยกรายการองค์ประกอบของพวกเขาเพื่อให้มีกรอบข้อมูลสุดท้ายที่ชื่อคอลัมน์และองค์ประกอบเป็นสิ่งที่พวกเขาจะต้องไม่มีตัวอักษรที่ไม่ใช่ UTF8 หรือพื้นที่สีขาว ในนั้น.

Pandas ของ Python .str.ทำหน้าที่เดียวกันกับการเล่นด้วยการแสดงออกปกติการลากหรืออื่น ๆ ที่ดีเท่ากับคู่แข่งดังนั้นแม้ที่นี่จะไม่มีความแตกต่างในด้านรสชาติ

การใช้แบบจำลอง

ที่นี่ฉันคิดว่าความแตกต่างระหว่างสองภาษาเกิดขึ้นได้ที่ไหน

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

งูใหญ่พยายามที่จะให้ทันกับและSciPy scikit-learnการวิเคราะห์มาตรฐานและโมเดลส่วนใหญ่ก็มีให้เช่นกัน แต่พวกมันจะยาวกว่าโค้ดเล็กน้อยและอ่านง่ายกว่า (ในความคิดของฉัน) เครื่องจักรที่ซับซ้อนมากขึ้นหายไปแม้ว่าบางคนสามารถย้อนกลับไปที่การรวมกันของห้องสมุดที่มีอยู่แล้ว สิ่งหนึ่งที่ฉันชอบทำใน Python มากกว่าใน R คือการวิเคราะห์ข้อความแบบ bag-of-word ด้วย bi-grams, tri-grams และคำสั่งซื้อที่สูงขึ้น

นำเสนอผลลัพธ์

ทั้งสองภาษามีเครื่องมือพล็อตที่สวยงาม R ggplot2เหนือสิ่งอื่นใดและเทียบเท่ากับ Python ที่เกี่ยวข้อง ไม่มากนักในการแข่งขันพวกเขาทำงานได้อย่างปลอดภัยและมีเสียงแม้ว่าฉันเชื่อว่าหากคุณนำเสนอผลลัพธ์คุณอาจต้องใช้เครื่องมืออื่น ๆ - มีเครื่องมือออกแบบที่มีสีสันแปลกตาและ Python หรือ R ไม่ได้มีความหมายอะไร ผู้ชมด้วยการลากและวางที่มีสีแดงและเขียวที่สวยงาม R มีการเผยแพร่เมื่อเร็ว ๆ นี้จำนวนมากของการปรับปรุงบนของshiny appคุณสมบัติที่พื้นอนุญาตให้ผลิตเอาท์พุทแบบโต้ตอบ ฉันไม่เคยต้องการที่จะเรียนรู้ แต่ฉันรู้ว่ามันอยู่ที่นั่นและผู้คนใช้งานได้ดี


ข้อความด้านข้าง

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

Rในทางกลับกันถูกคิดค้นโดยและสำหรับนักคณิตศาสตร์นักฟิสิกส์นักสถิติและนักวิทยาศาสตร์ด้านข้อมูล ถ้าคุณมาจากพื้นหลังนั้นทุกอย่างเข้ากันได้ดีเพราะมันสะท้อนและทำซ้ำแนวคิดที่ใช้ในสถิติและคณิตศาสตร์ แต่ถ้าคุณกลับมาจากพื้นฐานด้านวิทยาการคอมพิวเตอร์และต้องการจำลอง Java หรือ C ใน R คุณจะต้องผิดหวัง มันไม่ได้มี "วัตถุ" ในความหมายมาตรฐาน (ดีมันทำ แต่ไม่ใช่สิ่งที่คนทั่วไปคิดว่าพวกเขาเป็น ... ) มันไม่ได้มีชั้นเรียนในความรู้สึกมาตรฐาน (ดีมัน แต่ แต่ไม่ใช่สิ่งที่โดยทั่วไปแล้ว คิดว่าพวกเขาเป็น ... ) ไม่มี "ตัวชี้" หรือโครงสร้างวิทยาศาสตร์คอมพิวเตอร์อื่น ๆ - แต่เพียงเพราะมันไม่ต้องการ สุดท้าย แต่ไม่ท้ายสุด: เอกสารและแพคเกจตรงไปตรงมาเพื่อสร้างและอ่าน (ถ้าคุณใช้ Rstudio); มีชุมชนขนาดใหญ่และมีความหลงใหลอยู่ที่นั่นและใช้เวลาห้าวินาทีกับ Google "วิธีการแทรกปัญหาแบบสุ่มใน R" ซึ่งรายการแรกเปลี่ยนเส้นทางคุณไปสู่การแก้ปัญหา (ทำโดยคนอื่น) ด้วยรหัสที่สอดคล้องกัน ในเวลาไม่นาน

บริษัท อุตสาหกรรมส่วนใหญ่มีโครงสร้างพื้นฐานที่สร้างขึ้นใน Python (หรือสภาพแวดล้อมที่เป็นมิตรกับ Python) ซึ่งช่วยให้สามารถรวมรหัส Python import myAnalysisได้อย่างง่ายดาย อย่างไรก็ตามเทคโนโลยีหรือเซิร์ฟเวอร์หรือแพลตฟอร์มที่ทันสมัยสามารถเรียกใช้รหัสพื้นหลัง R ได้อย่างง่ายดายโดยไม่มีปัญหาใด ๆ เช่นกัน


8
+6 นี่คือคำตอบที่ดีมาก: รายละเอียดถูกต้องและสมดุล
gung - Reinstate Monica

+1 คำตอบที่ดีที่สุดที่นี่ มันตลกฉันมาที่ R จาก Java (ถึงแม้ว่าจะไม่ใช่ในเส้นทางตรง) และฉันก็ชอบมันมาก ฉันไม่จำเป็นต้องคิดว่าการทำลูปใน R หมายความว่าคุณทำผิด ฉันพบว่าตัวเองกำลังเกาหัวของฉันพยายามที่จะหลีกเลี่ยงการใช้ลูปในบางครั้ง แต่ไม่สามารถหาทางแก้ไขได้ (เช่นการสร้างค่าตัวแปรใหม่ในชุดข้อมูลตามเงื่อนไขของแถวก่อนหน้าและดึงข้อมูลจากชุดข้อมูลรอง)
Yuval Spiegler

หากเหลือเพียงชุด R นี้ที่จะทำอะไรภายใต้ดวงอาทิตย์ทั้งหมดที่เขียนโดยคนที่รู้วิธีการคำนวณทางสถิติ / เขียนซอฟต์แวร์ทางคณิตศาสตร์เชิงตัวเลขที่น่าเชื่อถือและมีประสิทธิภาพ / รู้การวิเคราะห์เชิงตัวเลขเป็นต้นแพ็คเกจ R บางตัวนั้นดีมาก แพ็คเกจ R จำนวนมากแม้บางคนเขียนโดยนักเขียนที่มีชื่อเสียงก็คือขยะทั้งหมดและผู้ใช้หลายคนไม่ทราบว่าพวกเขากำลังได้รับขยะ โอ้มันอยู่ใน CRAN มันจะต้องดีหรืออย่างน้อยก็ถูกต้องหรือเชื่อถือได้ ... ผิด !!!!!
Mark L. Stone

"R มีชุดของไลบรารีที่เหนือชั้นที่อนุญาตให้ผู้ใช้ทำสิ่งใด ๆ ที่พวกเขาต้องการในโค้ดหนึ่งถึงสองบรรทัด" ฉันเห็นด้วย 100% เว้นแต่ได้รับคำตอบที่ถูกต้องคือสิ่งที่ผู้ใช้ต้องการ
Mark L. Stone

8
@ MarkL.Stone คุณคิดจะนำเสนอตัวอย่างของแพ็คเกจมาตรฐานที่เขียนโดยผู้ใช้ชื่อดังที่ให้ผลลัพธ์ที่ผิด
เริ่ม

15
  • Python เป็นภาษาการเขียนโปรแกรมทั่วไปดังนั้นจึงเป็นการดีสำหรับการทำงานอื่น ๆ นอกเหนือจากการวิเคราะห์ข้อมูล ตัวอย่างเช่นถ้าเราต้องการทำให้การประมวลผลแบบจำลองของเราเป็นอัตโนมัติในเซิร์ฟเวอร์การผลิตแล้วหลามเป็นตัวเลือกที่ดีจริงๆ ตัวอย่างอื่น ๆ ได้แก่ การเชื่อมต่อกับฮาร์ดแวร์ / เซ็นเซอร์เพื่ออ่านข้อมูลการโต้ตอบกับฐานข้อมูล (ข้อมูลเชิงสัมพันธ์หรือไม่มีโครงสร้างเช่น JSON) การแยกวิเคราะห์ข้อมูลการเขียนโปรแกรมเครือข่าย (TCP / IP) ส่วนติดต่อผู้ใช้แบบกราฟิกการโต้ตอบกับเชลล์เป็นต้น ทำไมนักวิทยาศาสตร์ด้านข้อมูลจึงต้องการทำงานประเภทนี้หลายอย่างซึ่งมีส่วนเกี่ยวข้องกับแบบจำลองการทำนายน้อยมากฉันคิดว่าผู้คนมีคำจำกัดความที่แตกต่างกันนักวิทยาศาสตร์ด้านข้อมูลคืออะไรในบางองค์กรการแยกวิเคราะห์ข้อมูลและการวิเคราะห์เชิงพรรณนาด้วยแดชบอร์ดนั้นดีพอสำหรับธุรกิจและข้อมูลนั้นยังไม่โตพอสำหรับการทำแบบจำลองการทำนาย ในอีกหลาย บริษัท เล็ก ๆ คนอาจคาดหวังว่านักวิทยาศาสตร์ด้านข้อมูลจะทำวิศวกรรมซอฟต์แวร์จำนวนมาก การรู้จักหลามจะทำให้คุณเป็นอิสระจากวิศวกรซอฟต์แวร์คนอื่น ๆ )

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

ในหลายกรณีผู้คนใช้พวกเขาด้วยกัน การสร้างซอฟต์แวร์ทำได้ง่ายใน python และการสร้างแบบจำลองนั้นดีกว่าใน R. ถ้าเราต้องการส่งแบบจำลองในการผลิต แต่ไม่ใช่กระดาษเราอาจต้องใช้ทั้งคู่ หาก บริษัท ของคุณมีวิศวกรซอฟต์แวร์จำนวนมากคุณอาจต้องการอาร์มากขึ้นและหาก บริษัท ของคุณมีนักวิทยาศาสตร์การวิจัยจำนวนมากคุณอาจต้องใช้งูหลามมากกว่า


2
คำตอบที่ดี แต่คุณเขียน 'Jason' แทน 'JSON' ให้เสียงหัวเราะที่ดีแก่ฉัน
พาร์

ฉันไม่ได้เป็นสมาชิกของสถิติหรือชุมชน "การเรียนรู้ด้วยเครื่อง" จริงๆ แต่ฉันคิดว่าความพร้อมใช้งานของแพ็คเกจขั้นสูงนั้นค่อนข้างเฉพาะเจาะจงกับชุมชน ฉันเชื่อได้ว่าเทคนิคทางสถิติใหม่และล้ำสมัยมาพร้อมกับรหัส R แต่เมื่อฉันเห็นการมองเห็นของคอมพิวเตอร์ / การเรียนรู้ของเครื่อง / เอกสารทางระบบประสาทที่มาพร้อมกับรหัส ("ระดับสูง") ... พวกเขาดูเหมือนจะเป็น Matlab หรือหลาม
GeoMatt22

1
+1 สำหรับการอภิปรายว่าภาษามีอิทธิพลต่อวิธีคิดอย่างไร ข้อได้เปรียบอย่างมากของ R คือเพราะมันถูกสร้างขึ้นโดยนักสถิติสำหรับนักสถิติว่ามันส่งเสริมการคิดในแง่ของการสร้างแบบจำลองอย่างไร การเปิดเผยข้อมูล: ฉันคล่องแคล่วใน R แต่เพียงตะลุย Python
Ashe

เอ่อ ... แล้วscikit-learnไงล่ะ? scikit-learn.org/stable
เรือรบ

10

โปรแกรมเมอร์ของลายทั้งหมดประมาทเท่าใดทางเลือกภาษาวัฒนธรรม นักพัฒนาเว็บอย่าง Node.js. นักวิทยาศาสตร์อย่าง Python ในฐานะวิศวกรซอฟต์แวร์หลายคนที่สามารถรับมือกับความลื่นไหลของจาวาสคริปต์และความแข็งแกร่งของจาวาทั้งหมดก็เหมือนกันฉันรู้ว่าไม่มีเหตุผลที่แท้จริงที่ภาษาเหล่านี้ไม่ดีในงานของกันและกัน - แพคเกจเอกสารชุมชนหนังสือจำนวนมาก ฯลฯ ล้อมรอบพวกเขา

(สำหรับเหตุผลที่แท้จริงหนึ่งภาษาสุ่มดีกว่าภาษาอื่น ๆ ดูความเห็นเตรียมพร้อมสำหรับคำตอบนี้)

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

  • ไว้วางใจความน่าเชื่อถือของรหัสของคุณมากพอที่จะนำมาผลิต (ดังนั้นรูปแบบการเรียนรู้ของเครื่องที่ให้บริการผู้ใช้แบบเรียลไทม์)
  • ตรวจสอบให้แน่ใจว่ารหัสของคุณสามารถทำงานต่อได้เนื่องจากผ่านการแก้ไขและนำมาใช้ซ้ำ (ตัวอย่างเช่นกรอบการทดสอบหน่วย)
  • มุ่งเน้นไปที่การอ่านได้เพื่อประโยชน์ของผู้อื่นและตัวคุณเองในเวลาเพียง 6 เดือน
  • การเน้นอย่างลึกซึ้งเกี่ยวกับการจัดระเบียบโค้ดเพื่อความสะดวกในการกำหนดเวอร์ชัน backouts ไปยังเวอร์ชันการทำงานก่อนหน้าและการพัฒนาพร้อมกันโดยหลายฝ่าย
  • เลือกใช้เครื่องมือและเทคโนโลยีที่มีเอกสารที่ดีกว่าและใช้คุณสมบัติที่พวกเขาจะไม่ทำงานจนกว่าคุณจะใช้มันอย่างถูกต้อง (นี่เป็นมือจับที่ใหญ่ที่สุดของฉันกับ Matlab - ฉันถามคำถาม google และฉันต้องอ่านฟอรั่มที่ค่อนข้างแย่ ค้นหาคำตอบ)

ยิ่งไปกว่านั้น Python ก็เรียนรู้ได้ง่ายกว่า

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

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


จะไม่ Julia เมื่อโตขึ้นเป็นทางเลือกที่ดีกว่า Python ใช่ไหม
kjetil b halvorsen

1
@kjetilbhalvorsen "เมื่อโตขึ้น" เป็นมากกว่า "ถ้า" มันยากมากที่จะแทนที่ภาษาที่จัดตั้งขึ้นและมันก็เป็นทางเลือกส่วนบุคคลไม่ว่าคุณจะต้องการใช้เทคโนโลยีแนวชายแดนโดยไม่ต้องรับความเสี่ยง IMO, Python มีแรงกระตุ้นในขณะนี้ ฉันไม่คุ้นเคยกับ Julia มากนักดังนั้นนี่เป็นความเห็นที่ค่อนข้างธรรมดา
djechlin

1
ยกเว้นกระสุนแรกฉันไม่สามารถเห็นได้ว่า Python เหนือกว่าโดยแท้จริงในสี่จุดอื่น ๆ
Firebug

4
"Python สามารถทำทุกอย่างที่ R ทำได้"เป็นเท็จ "เพียงพอสำหรับสิ่งที่ R ที่โปรแกรมเมอร์ผู้ทุ่มเทสามารถทำงานเพื่อเติมเต็มช่องว่าง" ได้ดีนั่นจะเป็นจริงสำหรับทุกสิ่งในโลก - ทุกสิ่งสามารถทำทุกอย่างได้ตราบใดที่มีคนทำงานอยู่
เริ่ม

2
@djechlin ทั้งหมดไม่ ตัวอย่างของคุณสำหรับความน่าเชื่อถือคือ "ดังนั้นโมเดลการเรียนรู้ของเครื่องใด ๆ ที่ให้บริการผู้ใช้แบบเรียลไทม์" Python ดีกว่าในเรื่องนี้เพราะมันรองรับการปรับใช้ได้ง่ายกว่า R และมันเท่านั้น การทดสอบหน่วยความสามารถในการอ่านการจัดระเบียบและเอกสารไม่ได้มีคุณภาพโดยธรรมชาติ คุณสามารถใช้การทดสอบของคุณเองทำให้รหัสของคุณง่ายต่อการอ่านจัดระเบียบและเอกสาร R นั้นเข้าใจได้ง่าย
Firebug

8

ฉันเป็นผู้ใช้ R แต่ฉันคิดว่า Python เป็นอนาคต (ฉันไม่คิดว่ามันเป็นไวยากรณ์)

Python เป็นอนาคต
ประโยชน์ของ Python ก็คือคนอื่น ๆ ได้พูดถึงการสนับสนุนที่กว้างกว่ามากและสำหรับโปรแกรมเมอร์ผู้ใช้จะมีรูปแบบทางตรรกะที่มากกว่า
นอกจากนี้ความสามารถที่คุณสามารถแปลสิ่งที่ค้นพบจากการวิเคราะห์ของคุณไปสู่ระบบการผลิตนั้นตรงไปตรงมามากขึ้น
อาจเป็นเพราะงูใหญ่เป็นวัตถุประสงค์ทั่วไปและ R ไม่ได้ แต่ฉันยกคิ้วของฉันเมื่อฉันเห็นไปป์ไลน์ R ที่ผลิตขึ้นมา
แต่ไม่เพียงแค่นั้นสำหรับแอพพลิเคชั่นขั้นสูง Python ยังสามารถติดตาม (Scikit-learning, PyBrain, Tensorflow และอื่น ๆ ) ได้อย่างรวดเร็วและในขณะที่ R ยังคงเป็นภาษากลางในวงการวิชาการเกี่ยวกับวิธีการใช้วิธีการทางสถิติ การปรากฎตัวของห้องสมุดเฉพาะทางขั้นสูง

แต่ R ไม่เลว
คนหลายคนดูเหมือนจะชอบกระโดดขึ้นไปบน "R มีไวยากรณ์ไม่ดี" bandwagon
ฉันต้องการเสนอไวยากรณ์ของ R ให้เป็นสิ่งที่ดี!
ฟังก์ชั่นที่ได้รับมอบหมาย, การประเมินผลที่ขี้เกียจ, การประเมินที่ไม่ได้มาตรฐานและสูตรนั้นมีประโยชน์อย่างมากเมื่อใช้อาร์
มันช่วยประหยัดเวลาได้มากโดยไม่ต้องกังวลเกี่ยวกับการหลบหนีชื่อตัวแปรที่อ้างอิงในบทสรุปของคุณ มองไปที่ชื่อที่มีแล้วกำหนดชื่อใหม่โดยการเพิ่มnames() เมื่อคนบ่นเกี่ยวกับไวยากรณ์แปลก ๆ ของ R พวกเขามองว่าเป็นภาษาโปรแกรมไม่ใช่เครื่องมือวิทยาการข้อมูล ในขณะที่บางคนมาจากอาร์และรัก dplyr ฉันพบไวยากรณ์ของหมีแพนด้าค่อนข้างงุ่มง่ามในการเปรียบเทียบ<- c("A", "B", "C")


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

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


4

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

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

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


3

การเพิ่มคำตอบก่อนหน้านี้บางส่วน:

จากประสบการณ์ของฉันไม่มีอะไรง่ายไปกว่าการใช้ dplyr + tidyr, ggplot และ Rmarkdown ในการรับจากข้อมูลดิบไปจนถึงผลลัพธ์ที่นำเสนอได้ Python เสนอมากและฉันใช้มันมากขึ้นเรื่อย ๆ แต่ฉันแน่ใจว่ารักในวิธีที่แพ็คเกจของ Hadley เชื่อมโยงกัน


2

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

ฉันจะบอกว่าวันนี้ R มีจุดแข็งสองจุด: แพ็คเกจที่มีความเชี่ยวชาญสูงมากในบางพื้นที่

Python ดูเหมือนจะเหมาะสมกว่าสำหรับทุกสิ่ง

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


2

ตามที่อธิบายไว้ในคำตอบอื่น ๆ Python เป็นภาษาการเขียนโปรแกรมที่ใช้งานทั่วไปที่ดีในขณะที่ R มีข้อบกพร่องร้ายแรงในฐานะภาษาการเขียนโปรแกรม แต่มีไลบรารีการวิเคราะห์ข้อมูลที่สมบูรณ์ยิ่งขึ้น ในช่วงไม่กี่ปีที่ผ่านมา Python ได้รับการติดต่อถึง R ด้วยการพัฒนาไลบรารีการวิเคราะห์ข้อมูลที่เป็นผู้ใหญ่เช่น Scikit-Learn ในขณะที่ R จะไม่ถูกแก้ไข ในทางปฏิบัติฉันใช้ Python (จริง ๆ แล้วHy ) เกือบทุกอย่างและหันไปหา R สำหรับวิธีที่ลึกลับเช่นควอนไทล์ถดถอย มีหลายวิธีในการเรียก R จาก Python PypeR นั้นง่ายมากที่ฉันได้รับมันเพื่อทำงานในสภาพแวดล้อมที่เป็นศัตรูเช่นเซิร์ฟเวอร์ Windows

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


8
คู่มือ aRrgh นั้นเป็นคำวิจารณ์ที่ไร้เดียงสาที่สุดที่ฉันเคยอ่านเกี่ยวกับ R (และฉันอ่านมาเยอะ)
Firebug

10
"เอกสารไม่ดีอย่างไม่น่าเชื่อ" นั่นเป็นเรื่องไร้สาระ จุดแข็งของ R คือความเรียบง่ายสำหรับผู้ที่ไม่ได้เขียนโปรแกรมและมีเอกสารมากมาย "เพราะแม้แต่ชื่อของ R ก็โง่มันก็ยากที่จะทำสิ่ง google r ในวิธีที่มีประโยชน์ขออภัยยินดีต้อนรับสู่ R!" นั่นคือ clueless ฉันไม่เคยพบปัญหาใด ๆ ในการพยายามค้นหาเอกสารในแพ็คเกจที่คลุมเครือที่สุด "คุณเปลี่ยนชื่อคอลัมน์ด้วยเหมือนผีกำหนดเป็นชื่อ (กรอบ) คุณรู้ได้อย่างไรว่าทำไมและทำไมถึงใช้งานได้?
Firebug

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

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

6
R มีหูดที่เห็นได้ชัดความหลากหลายของ "wat" ที่ไม่รู้จักพอ (สตริงAsFactors) แต่มันก็มีห้องสมุดทางสถิติที่ไม่ขนานกันแม้แต่ในระยะไกลในภาษาอื่น การเขียนโปรแกรมที่จำเป็นในการสร้างห้องสมุดเหล่านี้มีความสำคัญยิ่งกว่าที่พวกเราส่วนใหญ่จะต้องทำ ในฐานะที่เป็นผ้าห่มงบ "R ไม่ใช่ภาษาที่ร้ายแรง" อยู่ที่ไหนสักแห่งระหว่าง clueless, ตำบลไร้เดียงสา, ไม่รู้หนังสือ, และองุ่นเปรี้ยว และฉันพูดแบบนี้ในฐานะคนที่ปรารถนาให้ R เป็น Python โดยทั่วไปกับห้องสมุดของ R
Paul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.