ฉันพยายามไขปริศนาคำตอบสำหรับคำถามนี้เป็นเวลาหลายเดือนในขณะที่เรียนรู้แพนด้า ฉันใช้ SAS สำหรับงานประจำวันของฉันและมันยอดเยี่ยมสำหรับการสนับสนุนนอกหลัก อย่างไรก็ตาม SAS นั้นน่ากลัวเหมือนชิ้นส่วนของซอฟต์แวร์ด้วยเหตุผลอื่น ๆ อีกมากมาย
วันหนึ่งฉันหวังว่าจะเปลี่ยนการใช้ SAS ของฉันเป็น python และ pandas แต่ตอนนี้ฉันขาดเวิร์กโฟลว์นอกหลักสำหรับชุดข้อมูลขนาดใหญ่ ฉันไม่ได้พูดถึง "ข้อมูลขนาดใหญ่" ที่ต้องใช้เครือข่ายแบบกระจาย แต่ไฟล์ใหญ่เกินไปที่จะใส่ในหน่วยความจำ แต่เล็กพอที่จะใส่ลงในฮาร์ดไดรฟ์
ความคิดแรกของฉันคือการใช้HDFStore
เพื่อเก็บชุดข้อมูลขนาดใหญ่บนดิสก์และดึงเฉพาะส่วนที่ฉันต้องการลงใน dataframes สำหรับการวิเคราะห์ คนอื่น ๆ พูดถึง MongoDB ว่าเป็นทางเลือกที่ใช้งานง่ายกว่า คำถามของฉันคือ:
ขั้นตอนการปฏิบัติที่ดีที่สุดสำหรับการทำสิ่งต่อไปนี้คืออะไร:
- การโหลดไฟล์แฟล็ตไปยังโครงสร้างฐานข้อมูลถาวรบนดิสก์
- การสืบค้นฐานข้อมูลนั้นเพื่อดึงข้อมูลไปยังฟีดลงในโครงสร้างข้อมูลแพนด้า
- การอัพเดตฐานข้อมูลหลังจากจัดการกับชิ้นส่วนในนุ่น
ตัวอย่างในโลกแห่งความเป็นจริงจะได้รับการชื่นชมอย่างมากโดยเฉพาะจากใครก็ตามที่ใช้หมีแพนด้ากับ "ข้อมูลขนาดใหญ่"
แก้ไข - ตัวอย่างของวิธีที่ฉันต้องการให้ทำงาน:
- ทำซ้ำนำเข้าไฟล์แฟล็ตขนาดใหญ่และเก็บไว้ในโครงสร้างฐานข้อมูลถาวรบนดิสก์ โดยทั่วไปไฟล์เหล่านี้ใหญ่เกินไปที่จะใส่ในหน่วยความจำ
- ในการใช้ Pandas ฉันต้องการอ่านชุดย่อยของข้อมูลนี้ (โดยปกติจะมีคอลัมน์ไม่กี่คอลัมน์ในเวลาเดียวกัน) ที่สามารถใส่ในหน่วยความจำได้
- ฉันจะสร้างคอลัมน์ใหม่โดยดำเนินการต่าง ๆ ในคอลัมน์ที่เลือก
- ฉันจะต้องผนวกคอลัมน์ใหม่เหล่านี้ลงในโครงสร้างฐานข้อมูล
ฉันกำลังพยายามหาวิธีปฏิบัติที่ดีที่สุดในการทำตามขั้นตอนเหล่านี้ การอ่านลิงก์เกี่ยวกับนุ่นและปิรามิดดูเหมือนว่าการผนวกคอลัมน์ใหม่อาจเป็นปัญหาได้
แก้ไข - ตอบคำถามของ Jeff โดยเฉพาะ:
- ฉันกำลังสร้างแบบจำลองความเสี่ยงด้านเครดิตของผู้บริโภค ชนิดของข้อมูลรวมถึงโทรศัพท์ SSN และลักษณะที่อยู่ ค่าคุณสมบัติ ข้อมูลที่เสื่อมเสียเช่นบันทึกความผิดทางอาญาการล้มละลาย ฯลฯ ... ชุดข้อมูลที่ฉันใช้ทุกวันมีเกือบ 1,000 ถึง 2,000 ฟิลด์โดยเฉลี่ยของชนิดข้อมูลแบบผสม: ตัวแปรต่อเนื่อง, ชื่อและเลขลำดับของข้อมูลตัวเลขและตัวละคร ฉันไม่ค่อยใส่แถว แต่ฉันทำการดำเนินการหลายอย่างที่สร้างคอลัมน์ใหม่
- การดำเนินงานทั่วไปเกี่ยวข้องกับการรวมหลายคอลัมน์โดยใช้ตรรกะตามเงื่อนไขลงในคอลัมน์ผสมใหม่ ตัวอย่างเช่น
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
. ผลลัพธ์ของการดำเนินการเหล่านี้เป็นคอลัมน์ใหม่สำหรับทุกระเบียนในชุดข้อมูลของฉัน - ในที่สุดฉันต้องการผนวกคอลัมน์ใหม่เหล่านี้ลงในโครงสร้างข้อมูลบนดิสก์ ฉันจะทำซ้ำขั้นตอนที่ 2 สำรวจข้อมูลด้วยแท็บไขว้และสถิติเชิงพรรณนาพยายามหาความสัมพันธ์ที่น่าสนใจ
- ไฟล์โครงการทั่วไปมักจะประมาณ 1GB ไฟล์ถูกจัดระเบียบในลักษณะที่แถวประกอบด้วยบันทึกข้อมูลผู้บริโภค แต่ละแถวมีจำนวนคอลัมน์เท่ากันสำหรับทุกเรคคอร์ด นี่จะเป็นกรณีนี้เสมอ
- มันค่อนข้างยากที่ฉันจะแบ่งย่อยเป็นแถวเมื่อสร้างคอลัมน์ใหม่ อย่างไรก็ตามมันเป็นเรื่องธรรมดาสำหรับฉันที่จะเซตย่อยบนแถวเมื่อสร้างรายงานหรือสร้างสถิติเชิงพรรณนา ตัวอย่างเช่นฉันอาจต้องการสร้างความถี่อย่างง่ายสำหรับสายธุรกิจเฉพาะพูดบัตรเครดิตขายปลีก ในการทำเช่นนี้ฉันจะเลือกเฉพาะระเบียนที่บรรทัดของธุรกิจ = ค้าปลีกนอกเหนือจากคอลัมน์ใดที่ฉันต้องการรายงาน อย่างไรก็ตามเมื่อสร้างคอลัมน์ใหม่ฉันจะดึงแถวข้อมูลทั้งหมดและเฉพาะคอลัมน์ที่ฉันต้องการสำหรับการดำเนินการ
- กระบวนการสร้างแบบจำลองต้องการให้ฉันวิเคราะห์ทุกคอลัมน์ค้นหาความสัมพันธ์ที่น่าสนใจกับตัวแปรผลลัพธ์บางส่วนและสร้างคอลัมน์ผสมใหม่ที่อธิบายความสัมพันธ์เหล่านั้น คอลัมน์ที่ฉันสำรวจมักจะทำในชุดเล็ก ๆ ตัวอย่างเช่นฉันจะมุ่งเน้นไปที่ชุดของคอลัมน์ 20 คอลัมน์ที่พูดถึงการจัดการกับมูลค่าทรัพย์สินและสังเกตว่าพวกเขาเกี่ยวข้องกับการผิดนัดชำระเงินกู้อย่างไร เมื่อมีการสำรวจและสร้างคอลัมน์ใหม่แล้วฉันจะย้ายไปยังกลุ่มคอลัมน์อื่นพูดการศึกษาระดับวิทยาลัยและทำซ้ำกระบวนการ สิ่งที่ฉันทำคือการสร้างตัวแปรตัวเลือกที่อธิบายความสัมพันธ์ระหว่างข้อมูลของฉันกับผลลัพธ์บางอย่าง ในตอนท้ายของกระบวนการนี้ฉันใช้เทคนิคการเรียนรู้ที่สร้างสมการออกมาจากคอลัมน์ผสมเหล่านั้น
มันเป็นเรื่องยากที่ฉันจะเพิ่มแถวไปยังชุดข้อมูล ฉันจะสร้างคอลัมน์ใหม่เกือบตลอดเวลา (ตัวแปรหรือคุณสมบัติในสถิติ / การเรียนรู้ของเครื่อง)