מייקל מקולאי

חייב להכיר פונקציות פנדה למסע למידת מכונה

צומת המקור: 1865356

מאמר זה פורסם כחלק מה- בלוגאת מדע הנתונים

מבוא

ובכן, יש אפשרות טובה שאתה יכול!

עבור מדעני נתונים המשתמשים ב- Python כשפת התכנות העיקרית שלהם, חבילת Pandas היא כלי חובה לניתוח נתונים. חבילת Pandas מכילה את כל מה שמדען נתונים צריך, וכל קורס לימד אותנו כיצד להשתמש בה בהתחלה. הוא כל כך גדול, חזק ומבצע כמעט כל מניפולציה טבלאית שאתה יכול לדמיין. עם זאת, רוחב זה יכול להיות חסרון לפעמים.

יש לו הרבה תכונות יפות הפותרות מקרי נדיר נדירים, תרחישים שונים.

אחד החסרונות העיקריים של הפנדה הוא שהיא נאבקת במערכות נתונים גדולות מכיוון שהפנדות מאחסנות את מבני הנתונים שלהן בזיכרון RAM, מה שעלול להיעשות לא מספיק ככל שיגדלו הנתונים. השתמש ב- PySpark או ב- Dask לשם כך.

למרות שחבילת פנדה נמצאת בשימוש נרחב, עדיין ישנן פונקציות רבות שאנשים עשויים להתעלם ממנה, בין אם משום שהיא משמשת פחות ובין אם הן אינן מודעות לקיומה. פוסט זה מתכוון להכניס אותך מחדש לתכונות אלה ולהדגים כי פנדות מוכשרות בהרבה מכפי שהיית מודע קודם לכן.

צינור

כדי לבצע ניקוי נתונים בצורה תמציתית וקומפקטית בפנדות, אפשר להשתמש בפונקציות צינור, המאפשרות לשלב פונקציות מרובות בפעולה אחת.

לדוגמה, אם אתה אוהב ליישם פונקציות כגון drop_duplicates, coding_categoricals, remove_outliers המקבלים את הטיעונים שלו.

df_cleaned = (diamonds.pipe (drop_duplicates). pipe (remove_outliers, ['price', 'carat', 'depth']). pipe (encod_categoricals, ['cut', 'color', 'clarity']))

פקטור

פונקציה זו היא חלופה למקודד תוויות של Sklearns.

# שימו לב ל [0] בקצה היהלומים ["cut_enc"] = pd.factorize (יהלומים ["חתך"]) [0] >>> יהלומים ["cut_enc"]. מדגם (5) 52103 2 39813 0 31843 0 10675 0 6634 0 שם: cut_enc, dtype: int64

פקטור התוצאות כפל ערכים: הערך המקודד ורשימת קטגוריות ייחודיות.

ערכים, ייחודי = pd.factorize (יהלומים ["חתך"], מיין = נכון) >>> מערך [: 10] מערך ([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype = int64) >>> ייחודי ['אידיאלי', 'פרימיום', 'טוב מאוד', 'טוב', 'הוגן']

להתפוצץ

התפוצץ | פונקציות של פנדות

תמונה על ידי אדווה פוסטר on Unsplash

התפוצצות היא פונקציה עם שם מעניין. נתחיל עם דוגמה ולאחר מכן הסבר:

df = pd.Series ([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]). to_frame ("מלוכלך") >>> df
נתונים | פונקציות של פנדות
תמונה מאת המחבר

בעמודת התכונה יש שתי שורות המסומנות ברשימות. סוג זה של נתונים זמין בסקרים בהם מספר שאלות מקבלות אפשרויות רבות.

>>> df.explode ("מלוכלך", ignore_index = נכון)
נתונים מתפוצצים
תמונה מאת המחבר

פונקציה זו לוקחת תא עם מערך ערכים ומתפוצצת במספר שורות. כדי לשמור על סדר האינדקס המספרי, השתמש ב- ignore_index כ- True.

בין

להוספת אינדקס בוליאני של תכונות מספריות בטווח, הנה פונקציה שימושית:

# קבל יהלומים שמתומחרים בין 3500 ל 3700 דולר יהלומים [יהלומים ["מחיר"]. בין (3500, 3700, כולל = "אף אחד")]. מדגם (5)
בין הנתונים | פונקציות של פנדות
תמונה מאת המחבר

 

T

ל- DataFrame יש תכונת T פשוטה, הידועה בשם transpose. ייתכן שלא נשתמש בה לעתים קרובות, תיאור השיטה מועילה בעת צפייה במסגרות הנתונים.

>>> 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_colum ודיוק

# הסר את הגבול להצגת מספר העמודות pd.options.display.max_columns = None # הצג 5 מספרים בלבד לאחר שה- pd.options.display.precision = 5 # נפטר מהסימון המדעי

Convert_dtypes

כולנו מודעים לכך שלפנדות יש הרגל מעצבן לסמן כמה עמודות כסוגי נתוני אובייקטים. במקום להגדיר את סוגיהם ישירות, תוכל להשתמש בשיטת convert dtypes, המנסה לגזור את סוג הנתונים הטוב ביותר:

sample = pd.read_csv ("data/station_day.csv", usecols = ["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId object CO float64 O3 float64 AQI_Bucket אובייקט dtype: object >>> sample.convert_dtypes (). dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

Select_dtypes

מהשם, אני מאמין שברור מה הפונקציה עושה. תוכל להשתמש באפשרויות הכללה וההכללה כדי לציין עמודות הכוללות או השמטת סוגי נתונים ספציפיים.

בחר עמודות מספריות בלבד עם מספר מס 'np, למשל:

# בחר רק עמודות מספריות יהלומים. Select_dtypes (כולל = מספר מספר) .head ()
בחר סוגים
תמונה מאת המחבר

 

מסכה

פונקציה זו מסייעת להחליף ערכים שבהם התנאי המותאם אישית אינו מתקיים.

# צור גילאים לדוגמה לדוגמא = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]). To_frame ("ages") גילאים
מסכה | נתונים
תמונה מאת המחבר

לאחר ביצוע הפעולה הנ"ל.

מיסוך בוצע
תמונה מאת המחבר

מינימום ומקסימום

למרות ש- min ו- max ידועים היטב, יש לו כמה תכונות טובות יותר עבור כמה מקרי קצה.

index = ["יהלומים", "טיטאניק", "איריס", "מחלות לב", "ברירת מחדל להלוואה"] ספריות = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90, 100, 5) עבור lib בספריות}, index = index) >>> df
דקות ומקסימום
תמונה מאת המחבר 

הנתונים הדמיוניים לעיל מציגים את התוצאות של ארבע ספריות מגבירות שיפוע על חמישה מערכות נתונים. אנו מחפשים את החבילה שעשתה את הטוב ביותר בכל מערך נתונים. כך תוכל להשיג זאת בצורה מקסימלית בצורה קלאסית:

>>> df.max (ציר = 1) יהלומים 99.52684 טיטניק 99.63650 איריס 99.10989 מחלת לב 99.31627 ברירת מחדל להלוואה 97.96728 dtype: float64

הכי גדול והכי קטן

המספר הגדול ביותר והקטן ביותר עוזר להציג את ערכי N או ~ (N העליונים) העליונים של משתנה.

diamonds.nlargest (5, "מחיר")
הגדול והקטן ביותר
תמונה מאת המחבר
יהלומים. הכי קטן (5, "מחיר")
הכי קטן
תמונה מאת המחבר

 

Idxmax ו- Idxmin

פנדות מחזירות את המספר הגדול/הקטן ביותר כאשר אתה מתקשר למקסימום או לדקה בעמודה. עם זאת, ישנם מצבים שבהם אתה צריך את המיקום של min/max, אשר פונקציות אלה אינן מספקות.

במקום זאת, תוכל להשתמש ב- 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

לגזור

פונקציית הקליפ עוזרת לאתר חריגים מחוץ לטווח ולהחליף אותם במגבלות קשות.

>>> ages.clip (50, 60)
נתונים לקליפ
תמונה מאת המחבר

 

בזמן_שעה ובבטווין_שעה

פונקציות אלה מועילות בעת עבודה עם סדרות זמן של פירוט גבוה.

at_time עוזר להשיג ערכים בתאריך או שעה מסוימים.

index = pd.date_range ("2021-08-01", תקופות = 100, freq = "H") df = pd.DataFrame ({"col": list (range (100))}, index = index) >> > df.head ()
at_time דוגמא | פונקציות של פנדות
תמונה מאת המחבר

>>> df.at_time ("15:00")

.at_time | פונקציות של פנדות
תמונה מאת המחבר

בין_זמן משמש לשליפת שורות בטווח מותאם אישית.

מאת datetime לייבא datetime >>> df.between_time ("09:45", "12:00")
בין_זמן
תמונה מאת המחבר

 

תאריך תאריך

פונקציה זו מסייעת ביצירת מדדי סדרות זמן בתדירות ימי עסקים. לעולם הפיננסי יש תדר מסוג זה. לכן, פונקציה זו עשויה להיות מועילה בזמן איחוד סדרות זמן עם פונקציית אינדקס.

series = pd.bdate_range ("2021-01-01", "2021-01-31") # תקופה של חודש >>> len (סדרה) 21

ב ואית

שני הגישות הללו מהירים בהרבה מ- loc ו- iloc. עם זאת, יש להם חסרון. הם מאפשרים לך רק לבחור או להחליף ערך אחד בכל פעם:

# [אינדקס, תווית] >>> diamonds.at [234, "לחתוך"] 'אידיאלי' # [אינדקס, אינדקס] >>> diamonds.iat [1564, 4] 61.2 # החלף שורה 16541 של עמודת המחיר >> > diamonds.at [16541, "מחיר"] = 10000

ארגסורט

פונקציה זו מסייעת לחלץ מדדים שימיינו מערך של התכונות.

tips.reset_index (inplace = True, drop = True) sort_idx = tips ["total_bill"]. argsort (kind = "mergesort") # כעת, מיין 'טיפים' בהתבסס על total_bill tips.iloc [sort_idx] .head ()
סוג arg_sort
תמונה מאת המחבר

 

אביזר לחתולים

הפנדות מאפשרות פונקציות מובנות של פייתון בתאריכים ומחרוזות באמצעות אביזרים כמו str או dt.

>>> diamonds.dtypes carat float64 קטגוריית חתך צבע קטגוריית בהירות קטגוריית עומק float64 שולחן float64 מחיר int64 x float64 y float64 z float64 cut_enc int64 dtype: object

אפשר להשתמש בפונקציות מיוחדות רבות באמצעות אביזר חתולים בעמודות קטגוריות. יש לו פונקציות כגון קטגוריות כדי למצוא ייחודי, שם_קטגוריות לשינוי שם התכונות.

יהלומים ["new_cuts"] = יהלומים ["cut"]. cat.rename_categories (רשימה ("ABCDE")) >>> יהלומים ["new_cuts"]. cat.categories Index (['A', 'B', ' C ',' D ',' E '], dtype =' object ')

בדוק זאת לקבלת רשימה נוספת של פונקציות תחת אביזר לחתול.

לסחוט

סחיטה היא פונקציה המשמשת בנסיבות קצה נדירות אך מחמירות.

כאשר ערך יחיד מוחזר מתנאי המשמש לקביעת משנה של DataFrame, זהו אחד המקרים הללו. שקול את התרחיש הבא:

קבוצת משנה = diamonds.loc [diamonds.index >> תת -קבוצה
מחיר

גם אם יש רק תא אחד, החזר את DataFrame. זה לא נוח מכיוון שעכשיו עליך להשתמש ב- .loc עם שם העמודה וגם האינדקס כדי לקבל את המחיר.

אתה לא חייב אם אתה יודע לסחוט. ניתן להסיר ציר מתא חד-תא או מסדרה באמצעות תא זה באמצעות פונקציה זו. שקול את התרחיש הבא:

>>> subset.squeeze () 326

אפשר לציין את הציר להסרה. זה רק החזיר סקלר עכשיו.

>>> subset.squeeze ("עמודות") # או "שורות" 0 326 שם: מחיר, dtype: int64

שים לב שפונקציה זו פועלת רק עבור Series או DataFrame עם ערכים בודדים.

Excel_writer

זוהי מחלקה כללית ליצירת קבצי אקסל ולכתיבת תוכנת DataFrame בה. שקול, יש לנו את שני מערכי הנתונים האלה.

# טען שני מערכות נתונים יהלומים = sns.load_dataset ("יהלומים") טיפים = sns.load_dataset ("עצות") # כתוב לאותו קובץ אקסל עם pd.ExcelWriter ("data/data.xlsx") ככותב: diamonds.to_excel (כותב, sheet_name = "יהלומים") tips.to_excel (כותב, sheet_name = "עצות")

יש לו מאפיינים לציון פורמט DateTime לשימוש, בין אם אתה זקוק לקובץ חדש או לשנות קובץ קיים, מה יקרה אם קיים גיליון. בדוק את זה תיעוד לקבלת פרטים נוספים.

סיכום

זו אינה סקירה ממצה של פנדות, ו תיעוד מכיל מידע נוסף על הקוד והתכונות. אני ממליץ לך להתנסות עם וריאציות שונות של קטעי הקוד המופיעים כאן, כמו גם פרמטרים שונים. אפשר להבין לגמרי את העוצמה של פנדות על ידי כך.

ספריות כמו Dask ו- datatable עוקפות בהדרגה את פנדות עם התכונות החדשות והנוצצות שלהן לטיפול במערכות נתונים גדולות, פנדה נשארת הכלי הנפוץ ביותר לשימוש במניעת נתונים בקהילת מדעי הנתונים של פייתון. בגלל עד כמה היא משתלבת בערימת SciPy הנוכחית, הספרייה משמשת כפרדיגמה של חבילות אחרות לעקוב ולבנות.

אני מקווה שמצאת את הפוסט הזה מרתק ותודה שקראת.

אמצעי התקשורת המוצגים במאמר זה אינם בבעלות Analytics Vidhya ומשמשים את שיקול הדעת של המחבר.

מקור: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

בול זמן:

עוד מ אנליטיקה וידיה