แบ็คกราวน์: ฉันเป็นนักวิทยาศาสตร์ข้อมูลที่เริ่มต้นทำงานที่ออสตินและฉันมาจากบัณฑิตวิทยาลัย (ฟิสิกส์) ฉันใช้ Python แบบวันต่อวันสำหรับการวิเคราะห์ข้อมูล แต่ใช้ R บิต ฉันยังใช้ C # /. NET และ Java (เกือบทุกวัน) ฉันใช้ C ++ อย่างมากในโรงเรียนระดับบัณฑิตศึกษา
ฉันคิดว่าปัญหาหลักของการใช้ Python สำหรับตัวเลข (สูงกว่า R) คือขนาดของชุมชนผู้ใช้ เนื่องจากภาษามีมาอย่างยาวนานผู้คนจำนวนมากได้ทำสิ่งต่าง ๆ ที่คุณน่าจะอยากทำ ซึ่งหมายความว่าเมื่อประสบกับปัญหาที่ยากคุณสามารถดาวน์โหลดแพ็คเกจและใช้งานได้ และ R "ใช้งานได้": คุณให้ชุดข้อมูลและรู้ว่าสถิติสรุปใดที่มีประโยชน์ คุณให้ผลลัพธ์บางอย่างและรู้ว่าคุณต้องการแปลงอะไร แผนการทั่วไปทั้งหมดที่คุณต้องการจะทำอยู่ที่นั่นแม้กระทั่งปริศนาลึกลับที่คุณต้องค้นหาบนวิกิพีเดีย เช่นเดียวกับ scipy / numpy / pandas / statsmodels / ฯลฯ สำหรับ Python มันไม่ได้อยู่ในระดับมาตรฐานไลบรารี R
ข้อได้เปรียบหลักของ Python over R คือมันเป็นภาษาการเขียนโปรแกรมจริงในตระกูล C มันปรับขนาดได้อย่างง่ายดายดังนั้นจึงเป็นไปได้ว่าทุกอย่างที่คุณมีในกล่องทรายของคุณสามารถนำไปใช้ในการผลิตได้ Python มีการจัดวางวัตถุในอบซึ่งตรงข้ามกับ R ที่มันให้ความรู้สึกเหมือนเป็นชนิดของภายหลัง (เพราะมันเป็น) มีสิ่งอื่น ๆ ที่ Python ก็ทำได้ดีเช่นกันการทำเกลียวและการประมวลผลแบบขนานนั้นค่อนข้างง่ายและฉันก็ไม่แน่ใจว่าเป็นเช่นนั้นในอาร์หรือไม่และการเรียนรู้ของ Python ก็มีเครื่องมือการเขียนสคริปต์ที่ทรงพลังเช่นกัน นอกจากนี้ยังมี IDE ที่ดี (ฟรี) สำหรับ Python ที่ดีกว่าถ้าคุณยินดีจ่าย (น้อยกว่า $ 100) และฉันไม่แน่ใจว่านี่คือกรณีของ R - R IDE เดียวที่ฉันรู้จักคือ R Studio ซึ่งค่อนข้างดี แต่ไม่ดีเท่า PyDev + Eclipse ในประสบการณ์ของฉัน
ฉันจะเพิ่มสิ่งนี้เป็นนักเตะ: เนื่องจากคุณยังอยู่ในโรงเรียนคุณควรคิดถึงงาน คุณจะพบการโพสต์งานเพิ่มเติมสำหรับ devs Python ที่มีทักษะสูงกว่าที่คุณต้องการสำหรับ R dev ที่มีทักษะสูง ในออสตินงานของ Django devs นั้นตกลงมาจากท้องฟ้า หากคุณรู้จัก R ดีจริงๆมีอยู่ไม่กี่ที่ที่คุณจะสามารถใช้ประโยชน์จากทักษะนั้น (ตัวอย่างเช่น Analytics Analytics) แต่ร้านค้าจำนวนมากดูเหมือนจะใช้ Python แม้ในสาขาการวิเคราะห์ข้อมูล / วิทยาศาสตร์ข้อมูลผู้คนจำนวนมากดูเหมือนจะหันไปใช้ Python
และอย่าดูถูกดูแคลนว่าคุณอาจทำงานร่วมกับ / สำหรับคนที่รู้เท่านั้น (พูด) Java คนเหล่านั้นจะสามารถอ่านรหัส Python ของคุณได้อย่างง่ายดาย กรณีนี้ไม่จำเป็นเลยถ้าคุณทำงานทั้งหมดใน R. (มาจากประสบการณ์)
ในที่สุดสิ่งนี้อาจฟังดูผิวเผิน แต่ฉันคิดว่าเอกสาร Python และการตั้งชื่อแบบแผน (ซึ่งปฏิบัติตามอย่างเคร่งครัดในศาสนาปรากฏออกมา) เป็นเรื่องที่ดีกว่าเอกสาร R ของผู้ใช้ นี่จะถูกถกเถียงกันอย่างถึงพริกถึงขิงฉันแน่ใจ แต่การเน้นใน Python นั้นสามารถอ่านได้ นั่นหมายความว่าอาร์กิวเมนต์ของฟังก์ชัน Python มีชื่อที่คุณสามารถอ่านได้และนั่นหมายถึงบางสิ่ง ใน R ชื่ออาร์กิวเมนต์มักถูกตัดทอน --- ฉันพบสิ่งนี้น้อยกว่าจริงใน Python นี่อาจฟังดูเพ้อเจ้อ แต่มันทำให้ฉันถั่วเขียนสิ่งต่าง ๆ เช่น 'xlab' เมื่อคุณสามารถตั้งชื่ออาร์กิวเมนต์ 'x_label' (ตัวอย่างเดียว) ได้อย่างง่ายดาย --- นี่มีผลอย่างมากเมื่อคุณพยายามเรียนรู้ API โมดูล / แพ็กเกจใหม่ การอ่าน R doc เปรียบเสมือนการอ่านหน้า man ของลินุกซ์ --- ถ้านั่นคือสิ่งที่ลอยอยู่บนเรือของคุณ
จากทั้งหมดที่กล่าวมาฉันขอแนะนำสิ่งต่อไปนี้ (ซึ่งเป็นขั้นตอนการทำงานโดยทั่วไปของฉันด้วย) เนื่องจากคุณรู้จัก Python ให้ใช้มันเป็นเครื่องมือแรกของคุณ เมื่อคุณพบว่า Python ขาดเรียนรู้ R เพียงพอที่จะทำสิ่งที่คุณต้องการจากนั้น:
- เขียนสคริปต์ใน R และเรียกใช้จาก Python โดยใช้โมดูล subprocess หรือ
- ติดตั้งโมดูล RPy
ใช้ Python สำหรับ Python ที่ดีและเติมในช่องว่างด้วยวิธีใดวิธีหนึ่งข้างต้น นี่เป็นขั้นตอนการทำงานปกติของฉัน --- ฉันมักจะใช้ R เพื่อวางแผนสิ่งต่างๆและ Python สำหรับการยกของหนัก
ดังนั้นเพื่อสรุป: เนื่องจาก Python ให้ความสำคัญกับความสามารถในการอ่าน (ค้นหา gooogle สำหรับ "Pythonic") ความพร้อมใช้งานของ IDE ที่ดีและฟรีความจริงที่ว่ามันอยู่ในตระกูลภาษา C ความเป็นไปได้ที่คุณจะสามารถใช้ประโยชน์ได้มากขึ้น ชุดทักษะและรูปแบบเอกสารที่ดีขึ้นของภาษาฉันขอแนะนำให้คุณใช้ Python ในการไปและใช้ R เมื่อจำเป็นเท่านั้น
ตกลงนี่คือคำตอบที่ได้รับความนิยมสูงสุดของฉันในไซต์สแต็กและไม่แม้แต่อันดับที่ 1 :) ฉันหวังว่านี่จะช่วยคนไม่กี่คนตามเส้นทาง
อย่างไรก็ตามฉันได้ข้อสรุปดังต่อไปนี้หลังจากผ่านไปหลายปีในสาขา:
นี่อาจเป็นคำถามที่ผิดที่จะถาม
ถาม "ฉันควรเรียนรู้เทคโนโลยีนี้โดยเฉพาะ" เป็นคำถามที่ไม่ดี ทำไม?
- การเปลี่ยนแปลงทางเทคโนโลยี คุณจะต้องเรียนรู้เทคโนโลยีอื่นเสมอ ถ้าคุณไปทำงานที่ Twitter พวกเขาเรียกใช้สกาล่า สถานที่บางแห่งเป็นร้านค้า Python บางแห่งไม่สนใจ คุณจะไม่ได้รับการว่าจ้างเพราะคุณรู้จักหรือไม่รู้จักเทคโนโลยีบางอย่าง - หากคุณไม่สามารถเรียนรู้เทคโนโลยีใหม่คุณสามารถไล่ (และควร) ได้ ถ้าประแจท่อตัวใหม่ออกมาและคุณเป็นช่างประปาและคุณไม่สามารถเข้าใจได้ว่าประแจท่อตัวใหม่ทำงานอย่างไรคุณอาจเป็นช่างประปาที่น่ารัก
- ด้วยตัวเลือก "ฉันเรียนรู้เทคโนโลยีนี้" หรือ "ฉันใช้เวลาในการแก้ปัญหาจริงมากขึ้น" คุณควรเลือกอย่างหลังโดยไม่มีข้อยกเว้น
ในฐานะที่เป็นนักวิทยาศาสตร์ข้อมูลงานของคุณคือการแก้ปัญหา สติปัญญาเพียงเล็กน้อยนั้นสูญเสียไปในการประชุมหรือพบปะคุณทุกครั้งการพูดคุย "ข้อมูลขนาดใหญ่" ทุกครั้งที่ฉันเคยเห็นได้ให้ความสำคัญกับเทคโนโลยีไม่ใช่การแก้ปัญหา การแก้ปัญหาที่เกิดขึ้นจริงมักจะผลักไสให้สองสามสไลด์ในตอนท้าย:
[Talk title = "การเรียนรู้อย่างลึกล้ำที่ Cool New Startup"] ... [45 นาทีของไดอะแกรมและเทคโนบาเบลระหว่างที่ฉันแยกตัวและตรวจสอบโทรศัพท์ของฉัน] ... และหลังจากใช้คลัสเตอร์ Hadoop ของเราและ [โซน Ben ออกมา อีกครั้ง] เราสามารถเรียกใช้รูทีนการเรียนรู้ลึกของเรา [ตื่นขึ้น: นี่คือสาเหตุที่ฉันมา!] รายละเอียดที่เป็นกรรมสิทธิ์ คำถาม?
สิ่งนี้ให้ความประทับใจที่ไม่ดีเกี่ยวกับเทคโนโลยีและเป็นเรื่องไม่จริง ถ้าคุณดีจริงๆที่สกาล่าหรืองูหลามหรือ R แต่คุณไม่ดีจริงๆที่การแก้ปัญหาของคุณจะทำให้นักวิทยาศาสตร์ข้อมูลหมัด
Paco Nathan อยู่ที่ Austin เมื่อไม่กี่เดือนที่ผ่านมาในการประชุม "ข้อมูลขนาดใหญ่" นานวันและกล่าวว่า "เคมีไม่ได้เกี่ยวกับหลอดทดลอง" ผลรวมนั้นค่อนข้างมาก - วิทยาศาสตร์ข้อมูลไม่ได้เกี่ยวกับ Scala หรือ Hadoop หรือ Spark หรือสิ่งอื่นใดที่มีเทคโนโลยี-du-jour ปรากฏขึ้น ในตอนท้ายของวันฉันต้องการจ้างคนที่คิดว่าไม่ใช่คนที่มีความเชี่ยวชาญในการใช้ Stack Overflow เพื่อเรียนรู้ชุดเครื่องมือ
ในทำนองเดียวกันถ้าคุณไปสัมภาษณ์งานและพวกเขาไม่ได้จ้างคุณเพียงเพราะคุณไม่รู้ภาษาการเขียนโปรแกรมบริษัท นั้นแย่มาก พวกเขาไม่เข้าใจความหมายของ "นักวิทยาศาสตร์ข้อมูล" และอาจดีกว่าสำหรับคุณถ้ามันไม่ได้ผล
ในที่สุดถ้าความสามารถในการแก้ปัญหาของคุณอยู่ที่ขอบ (ซื่อสัตย์กับตัวเอง) หรือคุณเพียงแค่สนุกกับด้านเทคโนโลยีของสิ่งต่าง ๆ หรือเรียนรู้เทคโนโลยีคือสิ่งที่คุณรัก (อีกครั้งซื่อสัตย์) จากนั้นเรียนรู้เทคโนโลยีมากมาย คุณจะสามารถค้นหาบทบาทประเภท "วิศวกรข้อมูล" ที่เหมาะสมกับชุดทักษะของคุณได้เสมอ นี่ไม่ใช่เรื่องเลวร้ายวิศวกรข้อมูลใช้จาระบีและทำให้คุณสามารถทำงานเป็นนักวิทยาศาสตร์ด้านข้อมูลได้ (ความแตกต่างนั้นคล้ายกับสถาปนิกซอฟต์แวร์กับทีมพัฒนา)