ตัวเลือกการวิเคราะห์ข้อมูลนอกหลัก


18

ฉันใช้ SAS อย่างมืออาชีพมาเกือบ 5 ปีแล้ว ฉันติดตั้งไว้ในแล็ปท็อปของฉันและต้องวิเคราะห์ชุดข้อมูลด้วยตัวแปร 1,000-2,000 ชุดและการสังเกตนับแสนครั้ง

ฉันกำลังมองหาทางเลือกอื่นสำหรับ SAS ที่ให้ฉันทำการวิเคราะห์ในชุดข้อมูลขนาดใกล้เคียงกัน ฉันอยากรู้ว่าคนอื่นใช้อะไรในสถานการณ์เช่นนี้ นี่ไม่ใช่ "ข้อมูลขนาดใหญ่" ในลักษณะที่ใช้ในปัจจุบัน หรือชุดข้อมูลของฉันมีขนาดเล็กพอที่จะเก็บไว้ในหน่วยความจำ ฉันต้องการโซลูชันที่สามารถใช้อัลกอริทึมกับข้อมูลที่เก็บไว้ในฮาร์ดไดรฟ์ นี่คือสิ่งที่ฉันได้ตรวจสอบเพื่อประโยชน์:

  1. R - BigMemory สามารถสร้างเมทริกซ์ที่เก็บไว้นอกหน่วยความจำได้ แต่องค์ประกอบจะต้องเป็นโหมดเดียวกัน ฉันทำงานกับข้อมูลที่เกือบ 50/50 แยกระหว่างตัวละครและตัวเลข แพ็คเกจ FF เข้าใกล้สิ่งที่ฉันต้องการ แต่ฉันไม่เข้าใจเลยว่าขั้นตอนใดบ้างที่เข้ากันได้ ฉันคิดว่าการสนับสนุนค่อนข้าง จำกัด
  2. Pandas - ฉันตื่นเต้นมากเกี่ยวกับทางเลือก Pythonic กับ R อย่างไรก็ตามมันก็ต้องเก็บข้อมูลทั้งหมดไว้ในหน่วยความจำด้วย
  3. Revolution R - อันนี้แสดงค่อนข้างสัญญา ฉันมีสำเนาบนคอมพิวเตอร์ที่บ้านของฉัน (ฟรีหากคุณสมัคร Kaggle) และยังไม่ได้ทดสอบว่าเป็นทางเลือกที่ทำงานได้กับ SAS ความคิดเห็นเกี่ยวกับ Revolution R ในฐานะทางเลือกของ SAS ได้รับการชื่นชมอย่างมาก

ขอบคุณ

อัพเดท 1

การแก้ไขเพื่อเพิ่มว่าฉันกำลังมองหาโซลูชันที่ใช้งานจริงในชีวิตจริงที่ผู้คนใช้งานได้สำเร็จ ส่วนใหญ่แล้ว SAS ช่วยให้ฉันสามารถรับไฟล์ขนาดใหญ่ได้โดยไม่ต้องกังวลเรื่องข้อ จำกัด หน่วยความจำเพียงเล็กน้อย อย่างไรก็ตามมีการใช้งาน SAS พวกเขาหาวิธีทำให้การจัดการหน่วยความจำโปร่งใสสำหรับผู้ใช้ แต่ด้วยหัวใจที่หนักหน่วงที่ฉันใช้ SAS สำหรับงานของฉัน (ฉันต้องทำ) และจะชอบทางเลือก FOSS ที่ช่วยให้ฉันทำงานกับข้อมูล "ใหญ่" โดยไม่ต้องคิดหนักเกินไปว่าข้อมูลอยู่ที่ไหน เวลาที่ระบุ (ในหน่วยความจำหรือดิสก์)

สิ่งที่อยู่ใกล้ฉันได้เจอเป็นแพคเกจ FF R และบางสิ่งบางอย่างบนขอบฟ้าสำหรับงูใหญ่เรียกว่าBlaze แต่ถึงกระนั้นปัญหาเหล่านี้ก็มีอยู่เป็นเวลาหลายปีดังนั้นนักวิเคราะห์ได้ทำอะไรในช่วงเวลานั้น? พวกเขาจัดการปัญหาเดียวกันนี้กับ Memory limit อย่างไร โซลูชั่นที่เสนอส่วนใหญ่ดูเหมือนจะเป็น:

  • รับ RAM มากขึ้น - นี่ไม่ใช่ทางออกที่ดี imo ง่ายต่อการค้นหาชุดข้อมูลที่เกิน RAM แต่ยังพอดีกับฮาร์ดไดรฟ์ นอกจากนี้กระบวนการทำงานต้องรองรับโครงสร้างทั้งหมดที่สร้างขึ้นระหว่างการวิเคราะห์ข้อมูลเชิงสำรวจ
  • จัดกลุ่มข้อมูล - นี่เป็นสิ่งที่ดีสำหรับการสำรวจ แต่ไม่ใช่สำหรับการสรุปผลลัพธ์และการรายงาน ในที่สุดกระบวนการอะไรก็ตามที่ได้รับการพัฒนาบนชุดย่อยจะต้องนำไปใช้กับชุดข้อมูลทั้งหมด (ในกรณีของฉัน)
  • รับรู้ข้อมูล - นี่คือสิ่งที่ฉันต้องการทราบเพิ่มเติมเกี่ยวกับคนที่ใช้กระบวนการทำงานนี้จริง ๆ เป็นอย่างไรบ้าง? ด้วยเครื่องมืออะไร สามารถทำได้ในลักษณะที่โปร่งใสต่อผู้ใช้หรือไม่? (กล่าวคือสร้างโครงสร้างข้อมูลบนดิสก์บางส่วนและเฟรมเวิร์กจะดูแลการเชื่อมต่อภายใต้ประทุน)

1
Stata รุ่นใหม่กว่าบนเครื่อง 64 บิตไม่มีปัญหากับชุดข้อมูลขนาดนี้ (เนื่องจาก 5GB เหมาะกับ RAM ในปัจจุบัน) แต่คุณสนใจทางเลือกเชิงพาณิชย์ของ SAS หรือคุณกำลังมองหาที่ FOSS เท่านั้น?
whuber

1
ใช่โซลูชั่น FOSS คือสิ่งที่ฉันกำลังมองหา ฉันยอมรับว่าชุดข้อมูลสามารถมี RAM 5 กิ๊ก แต่ก็ต้องจัดการการดำเนินงานและโครงสร้างข้อมูลเพิ่มเติมที่สร้างขึ้นระหว่างการวิเคราะห์ข้อมูลเชิงสำรวจ จับคู่สิ่งนี้กับแล็ปท็อปเชิงพาณิชย์ที่มี RAM ขนาด 4GB และค่าใช้จ่ายที่ใช้โดยระบบปฏิบัติการและข้อผิดพลาดของหน่วยความจำปรากฏขึ้นอย่างรวดเร็ว
Zelazny7

2
@ Zelazny7: การเพิ่ม 4Gigs ลงในแล็ปท็อปน่าจะถูกในตอนนี้ :)
อยากรู้อยากเห็น _cat

3
ตัวเลือกอื่นคือการจัดเก็บข้อมูลในฐานข้อมูล (SQL หรืออย่างอื่น) บ่อยครั้งที่การวิเคราะห์ต้องการเพียงชุดย่อยของข้อมูล (ตัวแปร 1:10 แต่ไม่ใช่ 1: 1,000) ซึ่งจะพอดีกับหน่วยความจำ หากเซตย่อยยังคงมีขนาดใหญ่กว่าหน่วยความจำการวิเคราะห์สามารถทำได้เป็นชิ้น ๆ (โหลดข้อมูลจากฐานข้อมูลการสังเกต 1,000 ครั้งในแต่ละครั้งให้เรียงลำดับผลลัพธ์อย่างเหมาะสมพร้อมกันในตอนท้าย)
jthetzel

1
อย่าลืมตรวจสอบคำถามเกี่ยวกับข้อมูลขนาดใหญ่บน SO รวมถึงมุมมองงานการคำนวณประสิทธิภาพสูงบน CRAN สำหรับการสนทนาที่เกี่ยวข้องเพิ่มเติมหากคุณยังไม่ได้ดำเนินการ
jthetzel

คำตอบ:


3

หากคุณใช้ตัวแปรสูงสุดถึง 500,000 รายการ x 2,000 ตัวแปรฉันจะใช้เงินเพิ่มอีกเล็กน้อยใน RAM สำหรับแล็ปท็อปของคุณและใช้งานได้ หากคุณมี 16GB คุณสามารถอ่านชุดข้อมูลที่คุณอธิบายลงไปใน R ได้โดยตรง และ ณ จุดนั้นคุณจะสามารถทำอะไรได้มากกว่า - และเร็วมาก .. แต่คุณบอกว่านั่นไม่ใช่ตัวเลือกดังนั้น:

ดูแพ็คเกจบน SQL สำหรับอาร์เหล่านี้ช่วยให้คุณเชื่อมต่อกับฐานข้อมูลภายนอกและเข้าถึงตารางเหล่านั้นผ่านทาง SQL เนื่องจาก SQL นั้นค่อนข้างเป็นสากล (และเนื่องจาก R เป็นโอเพ่นซอร์ส) โค้ดของคุณจะไม่สูญหายหากคุณเปลี่ยนงานหรือสูญเสียการเข้าถึง SAS ฐานข้อมูลภายนอกที่ง่ายที่สุดในการตั้งค่าคือRSQLiteแต่โดยเร็วที่สุดคือMonetDB.R( การทดสอบความเร็ว )

อาจมีทางออกที่ดีสำหรับปัญหาที่คุณระบุไว้ฉันเดาว่าพวกเขาทั้งหมดเกี่ยวข้องกับ R;)


2

อาจจะไม่มากเกี่ยวกับแอปพลิเคชั่น / ปัญหาที่คุณตั้งเป้าหมายและลักษณะของมัน แต่เพิ่มเติมเกี่ยวกับอัลกอริธึมและตัวแปรที่คุณใช้ เป็นรูปธรรมมากขึ้นเพื่อจัดการกับข้อมูลขนาดใหญ่ตัวแปรหลายตัวที่ขึ้นอยู่กับการไล่ระดับสีแบบสุ่มของอัลกอริทึมยอดนิยมเช่น SVM ได้ปรากฏขึ้นซึ่งสามารถจัดการได้

Scikit ให้การสนับสนุนอัลกอริธึมบางส่วน (SVM, kNN, kmeans, ... ) ฉันเดาว่ากราฟที่ดีนี้สามารถช่วยให้คุณเข้าใจได้อย่างรวดเร็วหากscikitสมเหตุสมผลกับคุณเลย

หวังว่าจะช่วย

หมายเหตุ: สิ่งต่อไปนี้เป็นการตอบกลับความคิดเห็นโดยzelazny7

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


ขอบคุณ! อัลกอริทึมจะต้องทำงานอย่างแน่นอนon-lineหรือบนชิ้นส่วนของข้อมูลที่อ่านเข้าไปในหน่วยความจำและเขียนลงดิสก์ Scikit นั้นยอดเยี่ยมและนั่นคือสิ่งที่ฉันรักที่จะใช้ แต่มีเครื่องมือ / กระบวนการทำงาน / วิธีการใดบ้างที่มีอยู่สำหรับขั้นตอนที่จำเป็นอย่างยิ่งในการสำรวจ munging และการเตรียมข้อมูลก่อนที่จะใช้ algos เหล่านี้ ภาษาเหล่านี้สามารถจัดการกับขั้นตอนเหล่านี้ได้ แต่ฉันกำลังมองหาตัวอย่างจริงจากผู้ที่ต้องจัดการกับปัญหาเหล่านี้ไม่เพียงพอ
Zelazny7

ฉันแก้ไขคำตอบของฉันด้วยสิ่งที่คุณกำลังมองหา (หรือดังนั้นฉันเชื่อ!)
jpmuc

2

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

มีเหตุผลที่ยอดเยี่ยมอื่น ๆ ในการใช้ Pandas หรือ R แต่ฉันไม่คิดว่าคุณต้องกังวลเกี่ยวกับการ จำกัด หน่วยความจำ หากคุณไม่สามารถเก็บหน่วยความจำเพียงพอในแล็ปท็อปของคุณให้รัน Python หรือ R instance และเชื่อมต่อกับ SSH, iPython Notebook หรือ RStudio


1

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


1

ฉันเพิ่งเจอSFramesและGraphLab Create. เหล่านี้เป็นไลบรารีสำหรับ Python ที่มีฟังก์ชั่นการใช้งานที่คุณดูเหมือนจะมองหาจากไซต์ Pypi: "SFrame เป็น dataframe ที่ล้าสมัยซึ่งสามารถปรับขนาดได้ซึ่งช่วยให้คุณทำงานกับชุดข้อมูลที่มีขนาดใหญ่กว่า RAM ในระบบของคุณ " ดังนั้นคิดว่ามันเป็นฟังก์ชั่นการจัดการข้อมูลและ API ใน Pandas แต่ไม่มีการใส่ข้อมูลทั้งหมดในหน่วยความจำก่อน SFrame นั้นฟรีและโอเพ่นซอร์สเท่าที่ฉันรู้ ในทางกลับกัน GraphLab จะสร้างบนฟังก์ชัน SFrame เพื่อให้อัลกอริทึมสำหรับการวิเคราะห์เชิงพรรณนาและการคาดการณ์ (การเรียนรู้ของเครื่อง) ในข้อมูลที่เก็บไว้ใน SFrames GraphLab Create สร้างไม่ได้ฟรี / เปิด แต่มีใบอนุญาตสาธิตฟรี ไม่ว่าในกรณีใดขึ้นอยู่กับความซับซ้อนของอัลกอริธึมของคุณ SFrame อาจเพียงพอสำหรับคุณ


-1

คุณถือว่าเป็น "จริง" ภาษาที่ไม่ตีความเช่นฟอร์แทรน?

ดูเหมือนว่าคำแนะนำจะขึ้นอยู่กับผู้ขายมากหรือตีความ วิธีการตีความที่ไม่ดีในการใช้งานหน่วยความจำอย่างรุนแรง MatLab อาจมีระดับภาษาที่สูงกว่า "C" แต่การเพิ่มประสิทธิภาพการจัดการหน่วยความจำใน C สามารถทำให้สามารถจัดการชุดข้อมูลได้เร็วขึ้น 100 เท่าซึ่งใหญ่กว่าล้านเท่า

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

คุณอาจพิจารณาอินสแตนซ์ R-on-Hadoop อย่างใดอย่างหนึ่ง (Rhipe, อื่น ๆ ) สิ่งนี้มีความได้เปรียบในการแปล R (ระดับสูงง่ายต่อการเขียนโปรแกรม) เป็นคำแนะนำ MapReduce / Hadoop Hadoop สามารถสร้างคลัสเตอร์หลายตัวประมวลผลที่ไม่ดีที่น่าสนใจ

http://www.datadr.org/ <- (ลิงก์ Rhipe)

Fortran ได้รับการพัฒนามานานหลายทศวรรษ มันมีการจัดการหน่วยความจำที่มีประสิทธิภาพมากและการรวบรวม นอกจากนี้ยังมีไลบรารี่ระดับสูงขึ้นอีกด้วยดังนั้นจึงสามารถทำการดำเนินงานที่ซับซ้อนทางเทคนิคได้อย่างง่ายดาย ฉันอาจทำ CFD ของเล่นใน MatLab แต่สำหรับบางสิ่งที่เหมือนจริงและเขียนโค้ดเองฉันจะใช้ Fortran สำหรับการประมวลผล "เหล็กใหญ่" และบางอย่างเช่น MatLab หรือ R สำหรับการนำเสนอ / สรุปข้อมูล ไม่มีใครทำซอฟต์แวร์ CFD เชิงพาณิชย์ที่มี "engine" ถูกตีความแทนการรวบรวม ผู้ค้าหลายรายมี CFD moneymaker ที่เข้ารหัสใน C หรือ Fortran SAS ถูกเขียนครั้งแรกใน C ( ลิงค์ )

สามารถเข้าถึง Fortran และ Rhipe ได้ MatLab ใช้เงินเป็นเงินและถ้างานของฉันไม่จ่ายมันก็จะใช้ R หรือ Python ทันที

UPDATE:
ประเด็นของฉันคือ "รวบรวม" Python มี cython ที่สามารถรันโค้ด (พื้นฐาน) เดียวกันได้เร็วขึ้น ~ 1000x นั่นหมายความว่าคุณสามารถมีข้อมูลที่ใหญ่กว่า ~ 1000x และประมวลผลได้ในเวลาใกล้เคียงกัน การทำให้ Cython ทำงานสะอาดอาจเป็นเรื่องที่ท้าทาย แต่เครื่องมืออย่าง " ปราชญ์ " ห่อไว้อย่างดี Rcppนัยว่ามีความคล้ายคลึงกัน แต่ฉันไม่รู้ว่าเป็นการพัฒนา

หากคุณคิดเกี่ยวกับมันพื้นฐานของเกือบทุกอย่างที่คุณใช้ในการคำนวณทางวิทยาศาสตร์แม้ในภาษาที่ตีความจะรวบรวม Fortran หรือรวบรวม C. BLAS เป็น BLAS; คุณไม่ได้อีกครั้งประดิษฐ์รหัสทุกครั้งที่คุณทำทุกEDA ภาษาที่แปลของคุณกำลังเรียกไลบรารีเหล่านั้นแม้ว่าจะไม่มีประสิทธิภาพมากเมื่อมันทำงาน

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


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

1
Rcpp ได้รับการพัฒนาเป็นอย่างดี (เพียงตรวจสอบการใช้งานย้อนกลับบน CRAN) แต่ไม่สามารถเทียบเคียงได้กับ cython หากคุณมีฟังก์ชั่นที่กำหนดไว้คุณสามารถใช้อินพุต R ประมวลผลใน Cpp และส่งคืนข้อมูลไปที่ R แต่คุณจะไม่รวบรวมสคริปต์ R ทั้งหมดลงใน Cpp ในไม่ช้า
russellpierce
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.