เจาะลึกการกรอง การจัดการ และการทำงาน
ลองนึกย้อนกลับไปครั้งล่าสุดที่คุณทำงานกับชุดข้อมูลที่จัดรูปแบบอย่างสวยงาม คอลัมน์ที่มีชื่อดี ค่าที่หายไปน้อยที่สุด และการจัดระเบียบที่เหมาะสม เป็นความรู้สึกที่ดี — เกือบจะเป็นอิสระ — ที่ได้รับพรจากข้อมูลที่คุณไม่จำเป็นต้องล้างและแปลง
เป็นเรื่องดีจนกว่าคุณจะหลุดออกจากฝันกลางวันและกลับมาซ่อมแซมต่อโดยพบกับแถวที่พังทลายและป้ายไร้สาระที่อยู่ตรงหน้าคุณ
ไม่มีสิ่งที่เรียกว่าข้อมูลที่สะอาด (ในรูปแบบดั้งเดิม) หากคุณเป็นนักวิทยาศาสตร์ข้อมูล คุณจะรู้สิ่งนี้ หากคุณเพิ่งเริ่มต้นคุณควรยอมรับสิ่งนี้ คุณจะต้องแปลงข้อมูลของคุณเพื่อให้สามารถทำงานกับข้อมูลได้อย่างมีประสิทธิภาพ
เรามาพูดถึงสามวิธีในการทำเช่นนั้น
การกรอง — แต่อธิบายอย่างถูกต้อง
มาพูดถึงการกรองกันดีกว่า แต่ให้ลึกกว่าที่คุณคุ้นเคยเล็กน้อย เนื่องจากเป็นหนึ่งในการดำเนินการแปลงข้อมูลที่ใช้กันทั่วไปและมีประโยชน์มากที่สุด การกรองอย่างมีประสิทธิภาพจึงเป็นทักษะที่นักวิทยาศาสตร์ข้อมูลทุกคนต้องมี หากคุณรู้จักแพนด้า ก็อาจเป็นหนึ่งในปฏิบัติการแรกๆ ที่คุณเรียนรู้ที่จะทำ
มาทบทวนโดยใช้ตัวอย่างที่ฉันชอบและหลากหลายอย่างแปลกประหลาด: DataFrame ของเกรดของนักเรียน ที่เรียกว่าเหมาะเจาะ grades
:
เราจะกรองคะแนนที่ต่ำกว่า 90 ออก เพราะในวันนี้เราได้ตัดสินใจที่จะเป็นนักการศึกษาที่ได้รับการฝึกอบรมมาไม่ดี ซึ่งจะให้บริการเฉพาะนักเรียนที่เก่งเท่านั้น (โปรดอย่าทำเช่นนี้จริงๆ เลย) บรรทัดโค้ดมาตรฐานสำหรับการดำเนินการนี้มีดังนี้:
เกรด[เกรด['คะแนน'] >= 90]
นั่นทำให้เราอยู่กับแจ็คและเฮอร์ไมโอนี่ เย็น. แต่เกิดอะไรขึ้นที่นี่กันแน่? Why บรรทัดโค้ดด้านบนใช้งานได้หรือไม่ มาเจาะลึกลงไปอีกหน่อยโดยดูผลลัพธ์ของนิพจน์ภายในวงเล็บด้านนอกด้านบน:
เกรด['คะแนน'] >= 90
อ่าโอเค. นั่นสมเหตุสมผลแล้ว ปรากฏว่าบรรทัดโค้ดนี้ส่งคืนวัตถุ Pandas Series ที่เก็บบูลีน ( True
/ False
) ค่าที่กำหนดโดยอะไร >= 90
ส่งคืนสำหรับแต่ละแถว นี่คือขั้นตอนกลางที่สำคัญ หลังจากนั้นเป็นชุดบูลีนซึ่งจะถูกส่งผ่านไปยังวงเล็บด้านนอก และกรองแถวทั้งหมดตามนั้น
เพื่อให้เสร็จสมบูรณ์ ฉันจะพูดถึงว่าพฤติกรรมเดียวกันนี้สามารถทำได้โดยใช้ loc
คำสำคัญ:
grades.loc[เกรด['คะแนน'] >= 90]
มีสาเหตุหลายประการที่เราอาจเลือกใช้ loc
(ซึ่งหนึ่งในนั้นคือช่วยให้เราสามารถกรองแถวและคอลัมน์ผ่านการดำเนินการเพียงครั้งเดียว) แต่นั่นเป็นการเปิดการดำเนินการ Box of Pandas ของ Pandora ที่ดีที่สุดเหลือไว้สำหรับบทความอื่น
สำหรับตอนนี้ เป้าหมายการเรียนรู้ที่สำคัญคือ เมื่อเรากรอง Pandas ไวยากรณ์ที่น่าสับสนไม่ใช่สิ่งมหัศจรรย์อะไรสักอย่าง เราเพียงแค่ต้องแบ่งมันออกเป็นสองขั้นตอน: 1) รับชุดบูลีนของแถวที่ตรงตามเงื่อนไขของเรา และ 2) ใช้ชุดเพื่อกรอง DataFrame ทั้งหมด
ทำไมสิ่งนี้ถึงมีประโยชน์คุณอาจถาม? โดยทั่วไปแล้ว มันมีแนวโน้มที่จะนำไปสู่ข้อผิดพลาดที่ทำให้เกิดความสับสน หากคุณเพียงแค่ใช้การดำเนินการโดยไม่เข้าใจวิธีการทำงานจริง ๆ การกรองเป็นการดำเนินการที่มีประโยชน์และธรรมดามาก และตอนนี้คุณก็ทราบวิธีการทำงานแล้ว
ไปกันเถอะ
ความงามของฟังก์ชันแลมบ์ดา
บางครั้ง ข้อมูลของคุณต้องการการเปลี่ยนแปลงที่ไม่มีอยู่ในฟังก์ชันการทำงานของ Pandas พยายามอย่างเต็มที่ ไม่มีการกำจัด Stack Overflow หรือการสำรวจเอกสารของ Pandas อย่างขยันขันแข็งสักเท่าใดที่จะเผยให้เห็นวิธีแก้ปัญหาของคุณ
เข้าสู่ฟังก์ชัน lambda ซึ่งเป็นฟีเจอร์ภาษาที่มีประโยชน์ซึ่งผสานรวมกับ Pandas ได้อย่างสวยงาม
เพื่อเป็นการทบทวนสั้นๆ ต่อไปนี้คือวิธีการทำงานของแลมบ์ดา:
>>> add_function = แลมบ์ดา x, y: x + y
>>> add_function(2, 3)
5
ฟังก์ชัน Lambda ก็ไม่ต่างจากฟังก์ชันทั่วไป ยกเว้นว่าฟังก์ชันเหล่านี้มีไวยากรณ์ที่กระชับมากกว่า:
- ชื่อฟังก์ชันทางด้านซ้ายของเครื่องหมายเท่ากับ
- พื้นที่
lambda
คำหลักทางด้านขวาของเครื่องหมายเท่ากับ (คล้ายกับdef
ในคำจำกัดความฟังก์ชัน Python แบบดั้งเดิม ซึ่งจะทำให้ Python รู้ว่าเรากำลังกำหนดฟังก์ชัน) - พารามิเตอร์หลัง
lambda
คำหลักทางด้านซ้ายของเครื่องหมายทวิภาค - ส่งกลับค่าทางด้านขวาของเครื่องหมายทวิภาค
ต่อไป ลองใช้ฟังก์ชันแลมบ์ดากับสถานการณ์จริงกัน
ชุดข้อมูลมักจะมีรูปแบบเฉพาะของตัวเอง โดยเฉพาะการป้อนข้อมูลและการรวบรวมรูปแบบต่างๆ ด้วยเหตุนี้ ข้อมูลที่คุณกำลังทำงานอยู่อาจมีปัญหาเฉพาะเจาะจงแปลกๆ ที่คุณต้องแก้ไข ตัวอย่างเช่น ลองพิจารณาชุดข้อมูลง่ายๆ ด้านล่าง ซึ่งจัดเก็บชื่อบุคคลและรายได้ของพวกเขา ลองเรียกมันว่า monies
.
ขณะนี้ ในฐานะ Master Data Highnesses ของบริษัทนี้ เราได้รับข้อมูลลับสุดยอด: ทุกคนในบริษัทนี้จะได้รับการเพิ่มเงิน 10% บวกด้วยเงินเพิ่มอีก 1000 ดอลลาร์ นี่อาจเป็นการคำนวณเฉพาะเจาะจงเกินกว่าจะหาวิธีการเฉพาะได้ แต่ก็ตรงไปตรงมาเพียงพอสำหรับฟังก์ชันแลมบ์ดา:
update_income = แลมบ์ดา num: num + (num * .10) + 1000
จากนั้น สิ่งที่เราต้องทำคือใช้ฟังก์ชันนี้กับแพนด้า apply
ซึ่งทำให้เราใช้ฟังก์ชันกับทุกองค์ประกอบของซีรี่ส์ที่เลือกได้:
เงิน['รายได้ใหม่'] = เงิน['รายได้'].apply(update_income)
เงิน
และเราทำเสร็จแล้ว! DataFrame ใหม่ที่ยอดเยี่ยมประกอบด้วยข้อมูลที่เราต้องการ ทั้งหมดนี้อยู่ในโค้ดสองบรรทัด เพื่อให้กระชับยิ่งขึ้น เราอาจกำหนดฟังก์ชันแลมบ์ดาไว้ข้างในก็ได้ apply
โดยตรง — เคล็ดลับดีๆ ที่ควรคำนึงถึง
ฉันจะรักษาประเด็นนี้ให้เรียบง่าย
Lambdas มีประโยชน์อย่างยิ่ง ดังนั้นคุณจึงควรใช้มัน สนุก!
ฟังก์ชันการจัดการสตริงแบบอนุกรม
ในส่วนก่อนหน้านี้ เราได้พูดคุยเกี่ยวกับความอเนกประสงค์ของฟังก์ชัน lambda และสิ่งดีๆ ทั้งหมดที่ฟังก์ชันเหล่านี้สามารถช่วยให้คุณบรรลุผลสำเร็จด้วยข้อมูลของคุณ นี่สุดยอดเลย แต่ คุณควรระวังอย่าให้ถูกพาตัวไป เป็นเรื่องปกติอย่างไม่น่าเชื่อที่จะจมอยู่กับวิธีการทำสิ่งที่คุณคุ้นเคยโดยที่คุณพลาดการใช้ทางลัดที่เรียบง่ายกว่าที่ Python ได้ให้พรแก่โปรแกรมเมอร์ แน่นอนว่าสิ่งนี้ใช้ได้กับมากกว่าแลมบ์ดา แต่เราจะยึดถือสิ่งนั้นอยู่ในขณะนี้
ตัวอย่างเช่น สมมติว่าเราเรียก DataFrame ต่อไปนี้ names
ซึ่งเก็บชื่อและนามสกุลของบุคคล:
ขณะนี้ เนื่องจากข้อจำกัดด้านพื้นที่ในฐานข้อมูลของเรา เราตัดสินใจว่าแทนที่จะจัดเก็บนามสกุลทั้งหมดของบุคคล จะมีประสิทธิภาพมากกว่าในการจัดเก็บชื่อย่อนามสกุลของพวกเขา ดังนั้นเราจึงต้องแปลงร่าง 'Last Name'
คอลัมน์ตามลำดับ สำหรับ lambdas ความพยายามของเราในการทำเช่นนั้นอาจมีลักษณะดังนี้:
ชื่อ['นามสกุล'] = ชื่อ['นามสกุล'].สมัคร(แลมบ์ดา s: s[:1])
ชื่อ
มันใช้งานได้ชัดเจน แต่มันค่อนข้างจะเทอะทะนิดหน่อย ดังนั้นจึงไม่ใช่ Pythonic เท่าที่ควร โชคดีที่ฟังก์ชันการจัดการสตริงที่สวยงามใน Pandas มีอีกวิธีหนึ่งที่หรูหรากว่า (สำหรับจุดประสงค์ของโค้ดบรรทัดถัดไป เพียงดำเนินการต่อและถือว่าเรายังไม่ได้แก้ไข 'Last Name'
คอลัมน์ที่มีโค้ดด้านบน):
ชื่อ['นามสกุล'] = ชื่อ['นามสกุล'].str[:1]
ชื่อ
ทาดา! ที่ .str
คุณสมบัติของ Pandas Series ช่วยให้เราสามารถประกบทุกสตริงในซีรีส์ด้วยการดำเนินการสตริงที่ระบุ เหมือนกับว่าเราทำงานกับแต่ละสตริงแยกกัน
แต่เดี๋ยวก่อนมันจะดีขึ้น เนื่องจาก .str
ช่วยให้เราเข้าถึงการทำงานปกติของสตริงผ่าน Series ได้อย่างมีประสิทธิภาพ เรายังสามารถใช้ฟังก์ชันสตริงต่างๆ เพื่อช่วยประมวลผลข้อมูลของเราได้อย่างรวดเร็ว! ตัวอย่างเช่น สมมติว่าเราตัดสินใจแปลงทั้งสองคอลัมน์เป็นตัวพิมพ์เล็ก รหัสต่อไปนี้ทำงาน:
ชื่อ['ชื่อ'] = ชื่อ['ชื่อ'].str.lower()
ชื่อ['นามสกุล'] = ชื่อ['นามสกุล'].str.lower()
ชื่อ
ตรงไปตรงมามากกว่าการต้องผ่านความยุ่งยากในการกำหนดฟังก์ชันแลมบ์ดาของคุณเองและเรียกใช้ฟังก์ชันสตริงที่อยู่ภายใน ไม่ใช่ว่าฉันไม่ชอบ lambdas แต่ทุกอย่างมีที่ของมัน และความเรียบง่ายควรมีความสำคัญเป็นลำดับแรกใน Python เสมอ
ฉันได้กล่าวถึงตัวอย่างบางส่วนเท่านั้นที่นี่ แต่ มีฟังก์ชันสตริงมากมายให้คุณเลือกใช้งาน [1]
ใช้พวกเขาอย่างเสรี พวกเขายอดเยี่ยมมาก
ความคิดสุดท้ายและบทสรุป
ต่อไปนี้เป็นเอกสารสรุปการแปลงข้อมูลเล็กๆ น้อยๆ สำหรับคุณ:
- กรองตามที่คุณหมายถึง. เรียนรู้ว่าจริงๆ แล้วเกิดอะไรขึ้นเพื่อให้คุณรู้ว่าคุณกำลังทำอะไรอยู่
- รักลูกแกะของคุณ. พวกเขาสามารถช่วยคุณจัดการข้อมูลด้วยวิธีที่น่าทึ่ง
- แพนด้าก็รักสายอักขระมากเท่ากับคุณ. มีฟังก์ชันในตัวมากมาย คุณก็สามารถใช้งานได้เช่นกัน
คำแนะนำสุดท้ายข้อหนึ่งคือ ไม่มีวิธี "ถูกต้อง" ในการกรองชุดข้อมูล ขึ้นอยู่กับข้อมูลที่มีอยู่ตลอดจนปัญหาเฉพาะที่คุณต้องการแก้ไข อย่างไรก็ตาม แม้ว่าจะไม่มีวิธีการตายตัวที่คุณสามารถปฏิบัติตามในแต่ละครั้ง แต่ก็มีชุดเครื่องมือที่มีประโยชน์มากมายที่คุ้มค่าแก่การมีไว้ใช้ ในบทความนี้ ฉันได้พูดถึงสามเรื่องเหล่านี้
ฉันขอแนะนำให้คุณออกไปหาอะไรเพิ่มเติม
อ้างอิง
[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas
การแปลงข้อมูลหลักใน Pandas ด้วยเทคนิคที่มีประโยชน์ทั้งสามนี้ เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 ทาง https://towardsdatascience.com/feed
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- การปฏิบัติตามบล็อคเชน
- การประชุม blockchain
- ที่ปรึกษาบล็อคเชน
- coinbase
- เหรียญอัจฉริยะ
- เอกฉันท์
- การประชุม crypto
- การทำเหมือง crypto
- cryptocurrency
- ซึ่งกระจายอำนาจ
- Defi
- สินทรัพย์ดิจิทัล
- ethereum
- เรียนรู้เครื่อง
- โทเค็นที่ไม่สามารถทำซ้ำได้
- เพลโต
- เพลโตไอ
- เพลโตดาต้าอินเทลลิเจนซ์
- Platoblockchain
- เพลโตดาต้า
- เพลโตเกม
- รูปหลายเหลี่ยม
- หลักฐานการเดิมพัน
- W3
- ลมทะเล