ฉันจะพยายามจัดทำคำตอบที่สัมผัสกับประเด็นหลักที่มีสองภาษาเข้ามาใช้ในการวิเคราะห์ข้อมูลทางวิทยาศาสตร์ / สถิติ / การวิเคราะห์ข้อมูลและสิ่งที่คล้ายกันในฐานะคนที่ใช้ทั้งสองอย่าง
เวิร์กโฟลว์ในการวิเคราะห์ข้อมูลโดยทั่วไปประกอบด้วยขั้นตอนต่อไปนี้:
- การดึงข้อมูลจากแหล่งข้อมูลบางประเภท (ส่วนใหญ่เป็นฐานข้อมูล SQL / noSQL หรือไฟล์. csv)
- แยกวิเคราะห์ข้อมูลในรูปแบบที่เหมาะสมและเหมาะสม (data frame) เพื่อให้สามารถดำเนินการและคิดในเวลาต่อมา
- การใช้ฟังก์ชั่นบางอย่างกับข้อมูล (การจัดกลุ่มการลบการผสานการเปลี่ยนชื่อ)
- การประยุกต์ใช้แบบจำลองบางอย่างกับข้อมูล (การถดถอยการจัดกลุ่มเครือข่ายนิวรัลหรือทฤษฎีที่ซับซ้อนมากขึ้นหรือน้อยลง)
- การปรับใช้ / นำเสนอผลลัพธ์ของคุณไปยังผู้ชมทางเทคนิคที่มากหรือน้อย
กำลังดึงข้อมูล
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 ได้อย่างง่ายดายโดยไม่มีปัญหาใด ๆ เช่นกัน