ไมเคิล แม็กเคาเลย์

ต้องรู้จักฟังก์ชั่น Pandas สำหรับ Machine Learning Journey

โหนดต้นทาง: 1865356

บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล

บทนำ

มีความเป็นไปได้ที่ดีที่คุณสามารถทำได้!

สำหรับนักวิทยาศาสตร์ข้อมูลที่ใช้ Python เป็นภาษาโปรแกรมหลัก แพ็คเกจ Pandas เป็นเครื่องมือวิเคราะห์ข้อมูลที่ต้องมี แพ็คเกจ Pandas มีทุกสิ่งที่นักวิทยาศาสตร์ข้อมูลต้องการ และทุกหลักสูตรสอนเราถึงวิธีใช้งานในตอนแรก มันใหญ่มาก ทรงพลัง และดำเนินการจัดการตารางแทบทุกอย่างที่คุณสามารถจินตนาการได้ อย่างไรก็ตาม ความกว้างนี้อาจเป็นข้อเสียในบางครั้ง

มันมีคุณสมบัติที่สวยงามมากมายที่แก้ปัญหาเคสขอบหายาก สถานการณ์ที่แตกต่างกัน

ข้อเสียที่สำคัญอย่างหนึ่งของแพนด้าคือมันมีปัญหากับชุดข้อมูลขนาดใหญ่ เนื่องจากแพนด้าเก็บโครงสร้างข้อมูลไว้ใน RAM ซึ่งอาจไม่เพียงพอเมื่อขนาดข้อมูลเติบโตขึ้น ใช้ PySpark หรือ Dask สำหรับสิ่งนี้

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

ท่อ

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

ตัวอย่างเช่น หากคุณต้องการใช้ฟังก์ชันต่างๆ เช่น drop_duplicates, encode_categoricals, remove_outliers ที่ยอมรับอาร์กิวเมนต์

df_cleaned = (diamonds.pipe(drop_duplicates) pipe(remove_outliers, ['price', 'carat', 'deep']) ไปป์ (encode_categoricals, ['cut', 'color', 'clarity']) )

แยกตัวประกอบ

ฟังก์ชันนี้เป็นทางเลือกแทน Sklearns Label Encoder

# คิดถึง [0] ที่ปลายเพชร["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> เพชร["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 ชื่อ: cut_enc, dtype: int64

แยกตัวประกอบผลลัพธ์เป็นทูเพิลของค่า: ค่าที่เข้ารหัสและรายการหมวดหมู่ที่ไม่ซ้ำ

ค่าเฉพาะ = pd.factorize(เพชร["cut"], sort=True) >>> ค่า[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> ไม่ซ้ำใคร ['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']

ระเบิด

ระเบิด | ฟังก์ชั่นแพนด้า

ภาพถ่ายโดย เอเดวา ฟอสเตอร์ on Unsplash

Explode เป็นฟังก์ชันที่มีชื่อที่น่าสนใจ เริ่มจากตัวอย่างและคำอธิบาย:

df = pd.Series([1, 6, 7, [46, 56, 49, 45, [15, 10, 12]]).to_frame("dirty") >>> df
ข้อมูล | ฟังก์ชั่นแพนด้า
ภาพโดยผู้เขียน

คอลัมน์คุณลักษณะมีสองแถวที่แสดงด้วยรายการ ข้อมูลประเภทนี้มีอยู่ในแบบสำรวจซึ่งคำถามสองสามข้อยอมรับหลายตัวเลือก

>>> df.explode("สกปรก", forget_index=จริง)
ข้อมูลระเบิด
ภาพโดยผู้เขียน

ฟังก์ชันนี้ใช้เซลล์ที่มีอาร์เรย์ของค่าและกระจายออกเป็นหลายแถว เพื่อรักษาลำดับของดัชนีตัวเลข ให้ใช้ dissolve_index เป็น True

ระหว่าง

สำหรับคุณสมบัติตัวเลขการจัดทำดัชนีบูลีนภายในช่วง ฟังก์ชันที่มีประโยชน์มีดังนี้:

# รับเพชรที่มีราคาตั้งแต่ 3500 ถึง 3700 ดอลลาร์ diamonds[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
ระหว่างข้อมูล | ฟังก์ชั่นแพนด้า
ภาพโดยผู้เขียน

 

T

DataFrame มีแอตทริบิวต์ T อย่างง่ายที่เรียกว่าทรานสโพส เราอาจใช้ไม่บ่อย วิธีอธิบายมีประโยชน์ขณะดูดาต้าเฟรม

>>> boston.describe().T.head(10)
ไขว้
ภาพโดยผู้เขียน

 

ตัวเลือกแพนด้า

คุณสามารถใช้การตั้งค่าส่วนกลางของแพนด้าที่ช่วยปรับแต่งและเปลี่ยนพฤติกรรมเริ่มต้นได้

>>> dir (pd.options) ['คำนวณ', 'แสดง', 'io', 'โหมด', 'พล็อต']

ประกอบด้วย 5 โมดูล มาดูตัวเลือกที่ใช้ได้ใต้จอแสดงผลกัน มีตัวเลือกมากมาย แต่ส่วนใหญ่ฉันใช้ max_columns

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'ความกว้าง']

คนส่วนใหญ่ใช้ max_columns และความแม่นยำ

# ลบขีด จำกัด เพื่อแสดงจำนวนของ cols pd.options.display.max_columns = ไม่มี # แสดงเฉพาะ 5 ตัวเลขหลัง pd.options.display.precision ทศนิยม = 5 # กำจัดสัญกรณ์วิทยาศาสตร์

Convert_dtypes

เราทุกคนทราบดีว่าแพนด้ามีนิสัยที่น่ารำคาญในการทำเครื่องหมายบางคอลัมน์เป็นประเภทข้อมูลออบเจ็กต์ แทนที่จะกำหนดประเภทโดยตรง คุณสามารถใช้วิธี convert dtypes ซึ่งจะพยายามอนุมานประเภทข้อมูลที่ดีที่สุด:

ตัวอย่าง = pd.read_csv ("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes วัตถุ StationId CO float64 O3 float64 AQI_Bucket วัตถุ dtype: วัตถุ >>> sample.convert_dtypes ().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: วัตถุ

Select_dtypes

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

เลือกเฉพาะคอลัมน์ตัวเลขที่มี np.number เช่น

# เลือกเฉพาะคอลัมน์ตัวเลข diamonds.select_dtypes(include=np.number).head()
เลือก dtypes
ภาพโดยผู้เขียน

 

หน้ากาก

ฟังก์ชันนี้ช่วยแทนที่ค่าที่เงื่อนไขแบบกำหนดเองไม่เป็นที่พอใจ

# สร้างข้อมูลตัวอย่าง อายุ = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") อายุ
หน้ากาก | ข้อมูล
ภาพโดยผู้เขียน

หลังจากดำเนินการตามข้างต้นแล้ว

กำบังดำเนินการ
ภาพโดยผู้เขียน

มินและแม็กซ์

แม้ว่าค่าต่ำสุดและค่าสูงสุดจะเป็นที่รู้จักกันดี แต่ก็มีคุณสมบัติที่ดีกว่าสำหรับเคสขอบบางตัว

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] ไลบรารี = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) สำหรับ lib ในไลบรารี}, index=index ) >>> df
ต่ำสุดและสูงสุด
ภาพโดยผู้เขียน 

DataFrame ที่สมมติขึ้นด้านบนแสดงผลลัพธ์ของไลบรารีส่งเสริมการไล่ระดับสีที่แตกต่างกันสี่ชุดในชุดข้อมูลห้าชุด เรากำลังมองหาแพ็คเกจที่ทำงานได้ดีที่สุดในแต่ละชุดข้อมูล นี่คือวิธีการทำให้สำเร็จด้วย max อย่างมีระดับ:

>>> df.max(axis=1) เพชร 99.52684 ไททานิค 99.63650 ไอริส 99.10989 โรคหัวใจ 99.31627 ค่ายืมเริ่มต้น 97.96728 dtype: float64

ใหญ่ที่สุดและเล็กที่สุด

ค่าที่ใหญ่ที่สุดและค่าน้อยที่สุดจะเป็นประโยชน์ในการดูค่า N หรือ ~(บนสุด) ของตัวแปร

diamonds.nlargest(5, "ราคา")
ใหญ่และเล็กที่สุด
ภาพโดยผู้เขียน
diamonds.nsmallest(5, "ราคา")
เล็กที่สุด
ภาพโดยผู้เขียน

 

Idxmax และ Idxmin

Pandas จะคืนค่าจำนวนที่มากที่สุด/น้อยที่สุดเมื่อคุณโทรหา max หรือ min ในคอลัมน์ อย่างไรก็ตาม มีบางสถานการณ์ที่คุณต้องการตำแหน่งของต่ำสุด/สูงสุด ซึ่งฟังก์ชันเหล่านี้ไม่มีให้

คุณสามารถใช้ idxmax/idxmin แทน:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

ค่า_นับ

วิธีทั่วไปในการค้นหาเปอร์เซ็นต์ของค่าที่หายไปคือการรวม isnull และ sum และหารด้วยขนาดของอาร์เรย์

แต่ value_counts ที่มีอาร์กิวเมนต์ที่เกี่ยวข้องทำสิ่งเดียวกัน:

ที่อยู่อาศัย = pd.read_csv("train.csv") >>> ที่อยู่อาศัย ["FireplaceQu"].value_counts (dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 ชื่อ: FireplaceQu, dtype: float64

คลิป

ฟังก์ชันคลิปช่วยค้นหาค่าผิดปกติที่อยู่นอกช่วงและแทนที่ด้วยฮาร์ดจำกัด

>>> อายุ คลิป(50, 60)
ข้อมูลสำหรับคลิป
ภาพโดยผู้เขียน

 

At_time และ Betweeen_time

ฟังก์ชันเหล่านี้มีประโยชน์ในขณะที่ทำงานกับอนุกรมเวลาที่ละเอียดสูง

at_time ช่วยในการรับค่าในวันที่หรือเวลาที่ระบุ

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time ตัวอย่าง | ฟังก์ชั่นแพนด้า
ภาพโดยผู้เขียน

>>> df.at_time(“15:00”)

.at_time | ฟังก์ชั่นแพนด้า
ภาพโดยผู้เขียน

between_time ใช้เพื่อดึงแถวภายในช่วงที่กำหนดเอง

จากวันที่และเวลานำเข้า วันที่และเวลา >>> df.between_time("09:45", "12:00")
ระหว่าง_เวลา
ภาพโดยผู้เขียน

 

Bdate_range

ฟังก์ชันนี้ช่วยในการสร้างดัชนีอนุกรมเวลาด้วยความถี่ของวันทำการ โลกการเงินมีความถี่ประเภทนี้ ดังนั้น ฟังก์ชันนี้อาจมีประโยชน์เมื่อทำดัชนีอนุกรมเวลาใหม่ด้วยฟังก์ชันการจัดทำดัชนีใหม่

series = pd.bdate_range("2021-01-01", "2021-01-31") # ระยะเวลาหนึ่งเดือน >>> len(series) 21

ที่และ Iat

อุปกรณ์เชื่อมต่อทั้งสองนี้เร็วกว่า loc และ iloc อย่างมาก อย่างไรก็ตาม พวกเขามีข้อเสียเปรียบ อนุญาตให้คุณเลือกหรือเปลี่ยนค่าได้ครั้งละหนึ่งค่าเท่านั้น:

# [index, label] >>> diamond.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # แทนที่แถวที่ 16541 ของคอลัมน์ราคา >> > diamond.at[16541, "price"] = 10000

อาร์สซอร์ต

ฟังก์ชันนี้ช่วยในการแยกดัชนีที่จะจัดเรียงอาร์เรย์ของคุณลักษณะต่างๆ

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # ตอนนี้ จัดเรียง `tips' ตามจำนวน tips.iloc[sort_idx].head()
arg_sort
ภาพโดยผู้เขียน

 

อุปกรณ์เสริมสำหรับแมว

แพนด้าอนุญาตให้มีฟังก์ชันในตัวของหลามในวันที่และสตริงโดยใช้ตัวเข้าถึงเช่น str หรือ dt

>>> diamonds.dtypes กะรัต float64 หมวดหมู่ตัด หมวดหมู่สี ความคมชัด หมวดหมู่ ความลึก float64 ตาราง float64 ราคา int64 x float64 y float64 z float64 cut_enc int64 dtype: วัตถุ

สามารถใช้ฟังก์ชันพิเศษมากมายโดยใช้ cat accessor ในคอลัมน์หมวดหมู่ มันมีฟังก์ชั่นเช่นหมวดหมู่เพื่อค้นหาที่ไม่ซ้ำกัน rename_categories เพื่อเปลี่ยนชื่อคุณสมบัติ

เพชร["new_cuts"] = เพชร["cut"].cat.rename_categories(list("ABCDE")) >>> เพชร["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

ตรวจสอบรายการนี้เพื่อดูรายการฟังก์ชันเพิ่มเติมภายใต้ อุปกรณ์สำหรับแมว.

บีบ

Squeeze เป็นฟังก์ชันที่ใช้ในสถานการณ์ขอบที่หายากแต่ทำให้รุนแรงขึ้น

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

เซตย่อย = diamonds.loc[diamonds.index >> subset
ราคา

แม้ว่าจะมีเพียงเซลล์เดียว ให้ส่งคืน DataFrame ไม่สะดวกเนื่องจากตอนนี้คุณต้องใช้.loc กับทั้งชื่อคอลัมน์และดัชนีเพื่อรับราคา

คุณไม่จำเป็นต้องทำถ้าคุณรู้วิธีบีบ แกนสามารถลบออกจาก DataFrame หรือ Series เซลล์เดียวได้โดยใช้ฟังก์ชันนี้ พิจารณาสถานการณ์สมมติต่อไปนี้:

>>> subset.squeeze() 326

สามารถระบุแกนที่จะลบได้ ตอนนี้มันกลับเป็นสเกลาร์เท่านั้น

>>> subset.squeeze("columns") # หรือ "rows" 0 326 ชื่อ: ราคา, dtype: int64

โปรดทราบว่าฟังก์ชันนี้ใช้ได้กับ Series หรือ DataFrame ที่มีค่าเดียวเท่านั้น

Excel_writer

เป็นคลาสทั่วไปสำหรับสร้างไฟล์ excel และเขียน DataFrame ลงไป พิจารณา เรามีชุดข้อมูลสองชุดนี้

# โหลดชุดข้อมูลเพชรสองชุด = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # เขียนไปยังไฟล์ excel เดียวกันกับ pd.ExcelWriter("data/data.xlsx") เป็นผู้เขียน: diamonds.to_excel (นักเขียน, sheet_name="เพชร") tips.to_excel(นักเขียน, sheet_name="เคล็ดลับ")

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

สรุป

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

ไลบรารีต่างๆ เช่น Dask และ datatable ค่อยๆ แทนที่ Pandas ด้วยคุณสมบัติใหม่ที่ฉูดฉาดสำหรับการจัดการชุดข้อมูลขนาดใหญ่ Pandas ยังคงเป็นเครื่องมือจัดการข้อมูลที่ใช้กันอย่างแพร่หลายที่สุดในชุมชนวิทยาศาสตร์ข้อมูล Python เนื่องจากมันเข้ากับสแต็ก SciPy ปัจจุบันได้ดีเพียงใด ไลบรารีจึงทำหน้าที่เป็นกระบวนทัศน์สำหรับแพ็คเกจอื่นๆ ในการติดตามและสร้าง

ฉันหวังว่าคุณจะพบโพสต์นี้ที่ชาญฉลาดและขอขอบคุณที่อ่าน

สื่อที่แสดงในบทความนี้ไม่ใช่ของ Analytics Vidhya และใช้ดุลยพินิจของผู้เขียน

ที่มา: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา