مائیکل میکالے۔

مشین لرننگ کے سفر کے لیے پانڈوں کے افعال کو جاننا ضروری ہے۔

ماخذ نوڈ: 1865356

اس مضمون کے ایک حصے کے طور پر شائع کیا گیا تھا۔ ڈیٹا سائنس بلاگتھون

تعارف

ٹھیک ہے، آپ کر سکتے ہیں ایک اچھا امکان ہے!

ڈیٹا سائنسدانوں کے لیے جو Python کو اپنی بنیادی پروگرامنگ زبان کے طور پر استعمال کرتے ہیں، پانڈاس پیکج ڈیٹا کا تجزیہ کرنے کا ایک لازمی ٹول ہے۔ پانڈاس پیکج میں وہ سب کچھ ہے جس کی ایک ڈیٹا سائنسدان کی ضرورت ہے، اور ہر کورس نے ہمیں یہ سکھایا کہ اسے پہلے کیسے استعمال کیا جائے۔ یہ اتنا بڑا، طاقتور ہے اور تقریباً ہر ٹیبلر ہیرا پھیری کرتا ہے جس کا آپ تصور کر سکتے ہیں۔ تاہم، یہ وسعت بعض اوقات نقصان کا باعث بن سکتی ہے۔

اس میں بہت سی خوبصورت خصوصیات ہیں جو نایاب ایج کیسز، مختلف منظرناموں کو حل کرتی ہیں۔

پانڈا کی اہم خرابیوں میں سے ایک یہ ہے کہ یہ بڑے ڈیٹا سیٹس کے ساتھ جدوجہد کرتا ہے کیونکہ پانڈے اپنے ڈیٹا ڈھانچے کو RAM میں محفوظ کرتے ہیں، جو کہ ڈیٹا کے سائز میں اضافے کے ساتھ ناکافی ہو سکتے ہیں۔ اس کے لیے PySpark یا Dask استعمال کریں۔

اگرچہ پانڈاس پیکج بڑے پیمانے پر استعمال کیا جاتا ہے، اب بھی بہت سے فنکشنز ہیں جنہیں لوگ نظر انداز کر سکتے ہیں، چاہے اس کا استعمال کم ہو یا اس وجہ سے کہ وہ اس کے وجود سے لاعلم ہیں۔ یہ پوسٹ آپ کو ان خصوصیات سے دوبارہ متعارف کرانے اور یہ ظاہر کرنے کا ارادہ رکھتی ہے کہ پانڈاس اس سے کہیں زیادہ قابل ہیں جتنا آپ پہلے جانتے تھے۔

پائپ

پانڈا میں ایک مختصر، کمپیکٹ انداز میں ڈیٹا کی صفائی کرنے کے لیے، کوئی پائپ فنکشنز استعمال کر سکتا ہے، جو آپ کو ایک آپریشن میں متعدد فنکشنز کو یکجا کرنے کی اجازت دیتا ہے۔

مثال کے طور پر، اگر آپ فنکشنز کو لاگو کرنا چاہتے ہیں جیسے کہ drop_duplicates، encode_categoricals، remove_outliers جو اس کے دلائل کو قبول کرتے ہیں۔

df_cleaned = (diamonds.pipe(drop_duplicates) پائپ(remove_outliers, ['price', 'carat', 'depth'])). پائپ(encode_categoricals, ['cut', 'color', 'clarity']))

فیکٹرائز

یہ فنکشن Sklearns Label Encoder کا متبادل ہے۔

# مائنڈ the [0] at the end diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 نام: cut_enc، dtype: int64

نتائج کو فیکٹرائز کریں قدروں کا ایک بڑا حصہ: انکوڈ شدہ قدر اور منفرد زمروں کی فہرست۔

اقدار، منفرد = pd.factorize(diamonds["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 سے

ایکسپلوڈ ایک دلچسپ نام والا فنکشن ہے۔ آئیے ایک مثال کے ساتھ شروع کریں اور پھر ایک وضاحت:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
ڈیٹا | پانڈوں کے افعال
مصنف کی طرف سے تصویر

فیچر کالم میں فہرستوں کے ساتھ دو قطاریں ہیں۔ اس قسم کا ڈیٹا سروے میں دستیاب ہے جہاں چند سوالات متعدد انتخاب کو قبول کرتے ہیں۔

>>> df.explode("گندی"، ignore_index=True)
ڈیٹا پھٹنا
مصنف کی طرف سے تصویر

یہ فنکشن اقدار کی ایک صف کے ساتھ سیل لیتا ہے اور متعدد قطاروں میں پھٹ جاتا ہے۔ عددی انڈیکس کی ترتیب کو برقرار رکھنے کے لیے، ignore_index کو True کے طور پر استعمال کریں۔

کے درمیان

ایک رینج کے اندر بولین انڈیکسنگ عددی خصوصیات کے لیے، یہاں ایک آسان فنکشن ہے:

# ایسے ہیرے حاصل کریں جن کی قیمت 3500 سے 3700 ڈالر کے درمیان ہے ہیرے[ہیرے["قیمت"] کے درمیان۔
ڈیٹا کے درمیان | پانڈوں کے افعال
مصنف کی طرف سے تصویر

 

T

ڈیٹا فریم میں ایک سادہ T وصف ہے، جسے ٹرانسپوز کہا جاتا ہے۔ ہو سکتا ہے کہ ہم اسے اکثر استعمال نہ کریں، ڈیٹا فریم دیکھنے کے دوران بیان کا طریقہ کارآمد ہے۔

>>> boston.describe().T.head(10)
ٹرانسپوز کریں
مصنف کی طرف سے تصویر

 

پانڈوں کے اختیارات

کوئی پانڈوں کی عالمی ترتیبات استعمال کرسکتا ہے جو پہلے سے طے شدہ طرز عمل کو موافقت اور تبدیل کرنے میں مدد کرتا ہے۔

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

یہ 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 اور precision استعمال کرتے ہیں۔

# کالز کی تعداد ظاہر کرنے کی حد کو ہٹا دیں pd.options.display.max_columns = کوئی نہیں # اعشاریہ pd.options.display.precision = 5 کے بعد صرف 5 نمبر دکھائیں

کنورٹ_ڈی ٹائپس

ہم سب جانتے ہیں کہ پانڈوں کو کچھ کالموں کو آبجیکٹ ڈیٹا کی اقسام کے بطور نشان زد کرنے کی پریشان کن عادت ہے۔ ان کی اقسام کی براہ راست وضاحت کرنے کے بجائے، آپ کنورٹ 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 سٹرنگ CO float64 O3 float64 AQI_Bucket سٹرنگ dtype: آبجیکٹ

منتخب_dtypes

نام سے، مجھے یقین ہے کہ یہ واضح ہے کہ فنکشن کیا کرتا ہے۔ آپ ان کالموں کی وضاحت کرنے کے لیے شامل اور خارج کرنے کے اختیارات استعمال کر سکتے ہیں جن میں ڈیٹا کی مخصوص قسمیں شامل ہوں یا اسے چھوڑ دیں۔

np.number کے ساتھ صرف عددی کالم منتخب کریں، مثال کے طور پر:

# صرف عددی کالم منتخب کریں diamonds.select_dtypes(include=np.number).head()
قسمیں منتخب کریں۔
مصنف کی طرف سے تصویر

 

ماسک

یہ فنکشن اقدار کو تبدیل کرنے میں مدد کرتا ہے جہاں حسب ضرورت حالت مطمئن نہیں ہوتی ہے۔

# نمونہ ڈیٹا ایجز = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("عمر") عمر بنائیں
ماسک | ڈیٹا
مصنف کی طرف سے تصویر

مندرجہ بالا آپریشن کرنے کے بعد.

ماسکنگ کی کارکردگی کا مظاہرہ کیا
مصنف کی طرف سے تصویر

کم سے کم اور زیادہ سے زیادہ

اگرچہ min اور max اچھی طرح سے جانا جاتا ہے، اس میں کچھ کنارے کے معاملات کے لیے کچھ بہتر خصوصیات ہیں۔

index = ["ہیرے"، "ٹائٹینک"، "آئرس"، "دل کی بیماری"، "لون ڈیفالٹ"] لائبریریاں = ["XGBoost"، "CatBoost"، "LightGBM" "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform(90, 100, 5) لائبریریوں میں lib کے لیے}, index=index ) >>> df
کم سے کم اور زیادہ سے زیادہ
مصنف کی طرف سے تصویر 

اوپر کا افسانوی ڈیٹا فریم پانچ ڈیٹا سیٹس پر چار مختلف گریڈینٹ بوسٹنگ لائبریریوں کے نتائج دکھاتا ہے۔ ہم اس پیکیج کی تلاش کر رہے ہیں جس نے ہر ڈیٹاسیٹ پر بہترین کارکردگی کا مظاہرہ کیا۔ اسے بہترین انداز میں میکس کے ساتھ پورا کرنے کا طریقہ یہاں ہے:

>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 Loan Default 97.96728 dtype: float64

سب سے بڑا اور سب سے چھوٹا

سب سے بڑا اور nsmallest ایک متغیر کی ٹاپ N یا ~(top N) قدروں کو دیکھنے کے لیے مددگار ہے۔

diamonds.nlargest(5, "قیمت")
سب سے بڑا اور سب سے چھوٹا
مصنف کی طرف سے تصویر
diamonds.nsmallest(5، "قیمت")
سب سے چھوٹا
مصنف کی طرف سے تصویر

 

Idxmax اور Idxmin

جب آپ کالم پر زیادہ سے زیادہ یا کم سے کم کال کرتے ہیں تو پانڈے سب سے بڑا/سب سے چھوٹا نمبر واپس کرتے ہیں۔ تاہم، ایسے حالات ہوتے ہیں جب آپ کو کم سے کم/زیادہ سے زیادہ کی پوزیشن کی ضرورت ہوتی ہے، جو یہ افعال فراہم نہیں کرتے ہیں۔

اس کے بجائے، آپ 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 Po, 0.01644 Fa 0.01370 Po., 64 EX. XNUMX فائر پلیس قسم: floatXNUMX

کلپ

کلپ فنکشن ایک رینج سے باہر آؤٹ لیرز کو تلاش کرنے اور انہیں سخت حدود سے بدلنے میں مدد کرتا ہے۔

>>> ages.clip(50, 60)
کلپ کے لئے ڈیٹا
مصنف کی طرف سے تصویر

 

وقت_وقت اور درمیان_وقت

یہ فنکشنز ہائی گرینولریٹی کی ٹائم سیریز کے ساتھ کام کرتے وقت مددگار ہوتے ہیں۔

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 | پانڈوں کے افعال
مصنف کی طرف سے تصویر

درمیان_وقت ایک حسب ضرورت رینج کے اندر قطاریں لانے کے لیے استعمال ہوتا ہے۔

ڈیٹ ٹائم سے درآمد ڈیٹ ٹائم >>> df.between_time("09:45", "12:00")
درمیان_وقت
مصنف کی طرف سے تصویر

 

Bdate_range

یہ فنکشن کاروباری دن کی فریکوئنسی کے ساتھ ٹائم سیریز انڈیکس بنانے میں مدد کرتا ہے۔ مالیاتی دنیا میں اس قسم کی تعدد ہوتی ہے۔ لہذا، یہ فنکشن ری انڈیکس فنکشن کے ساتھ ٹائم سیریز کو دوبارہ ترتیب دینے کے وقت مددگار ثابت ہوسکتا ہے۔

سیریز = pd.bdate_range("2021-01-01", "2021-01-31") # ایک ماہ کی مدت >>> len(سیریز) 21

At اور Iat

یہ دونوں ایکسیسرز loc اور iloc سے کافی تیز ہیں۔ تاہم، ان میں ایک خرابی ہے. وہ آپ کو ایک وقت میں صرف ایک قدر منتخب کرنے یا تبدیل کرنے کی اجازت دیتے ہیں:

# [انڈیکس، لیبل] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> 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") # اب، کل_بل 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: آبجیکٹ

زمرہ دار کالموں پر کیٹ ایکسر کا استعمال کرتے ہوئے کوئی بہت سے خصوصی فنکشن استعمال کر سکتا ہے۔ اس میں فنکشنز ہیں جیسے منفرد تلاش کرنے کے لیے زمرہ جات، فیچرز کا نام بدلنے کے لیے نام تبدیل کریں۔

diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> ہیرے["new_cuts"].cat.categories Index(['A', 'B',' C', 'D', 'E'], dtype='object')

ذیل میں افعال کی مزید فہرست کے لیے اسے چیک کریں۔ بلی تک رسائی حاصل کرنے والا.

سکوڑیں

Squeeze ایک فنکشن ہے جو نایاب لیکن بڑھتے ہوئے کنارے کے حالات میں استعمال ہوتا ہے۔

جب ڈیٹا فریم کو سب سیٹ کرنے کے لیے استعمال ہونے والی شرط سے ایک ہی قدر واپس کی جاتی ہے، تو یہ ان صورتوں میں سے ایک ہے۔ درج ذیل منظر نامے پر غور کریں:

سب سیٹ = diamonds.loc[diamonds.index >> سب سیٹ
قیمت

یہاں تک کہ اگر صرف ایک سیل ہے، ڈیٹا فریم واپس کریں. یہ تکلیف دہ ہے کیونکہ قیمت حاصل کرنے کے لیے اب آپ کو کالم کے نام اور انڈیکس دونوں کے ساتھ.loc استعمال کرنا چاہیے۔

اگر آپ نچوڑنا جانتے ہیں تو آپ کو اس کی ضرورت نہیں ہے۔ اس فنکشن کا استعمال کرتے ہوئے سنگل سیل ڈیٹا فریم یا سیریز سے ایک محور کو ہٹایا جا سکتا ہے۔ مندرجہ ذیل منظر نامے پر غور کریں:

>>> subset.squeeze() 326

ہٹانے کے لیے محور کی وضاحت کرنا ممکن ہے۔ یہ اب صرف اسکیلر واپس آیا تھا۔

>>> subset.squeeze("کالم") # یا "قطاریں" 0 326 نام: قیمت، dtype: int64

نوٹ کریں کہ یہ فنکشن صرف واحد اقدار کے ساتھ سیریز یا ڈیٹا فریم کے لیے کام کرتا ہے۔

Excel_writer

یہ ایکسل فائلیں بنانے اور اس میں ڈیٹا فریم لکھنے کے لیے ایک عام کلاس ہے۔ غور کریں، ہمارے پاس یہ دو ڈیٹاسیٹس ہیں۔

# دو ڈیٹا سیٹ لوڈ کریں diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # اسی ایکسل فائل میں pd.ExcelWriter("data/data.xlsx") کے ساتھ بطور مصنف لکھیں: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

اس میں استعمال کرنے کے لیے ڈیٹ ٹائم فارمیٹ کی وضاحت کرنے کی خصوصیات ہیں، چاہے آپ کو نئی فائل کی ضرورت ہو یا موجودہ فائل میں ترمیم کریں، اگر شیٹ موجود ہو تو کیا ہوتا ہے۔ یہ دیکھو دستاویزات مزید تفصیلات کے لئے.

نتیجہ

یہ پانڈوں کا ایک مکمل جائزہ نہیں ہے، اور دستاویزات کوڈ اور خصوصیات کے بارے میں مزید معلومات پر مشتمل ہے۔ میں تجویز کرتا ہوں کہ آپ یہاں فراہم کردہ کوڈ کے ٹکڑوں کے ساتھ ساتھ مختلف پیرامیٹرز کے مختلف تغیرات کے ساتھ تجربہ کریں۔ ایسا کرنے سے کوئی بھی پانڈوں کی طاقت کو پوری طرح سمجھ سکتا ہے۔

Dask اور ڈیٹا ٹیبل جیسی لائبریریاں بڑے ڈیٹا سیٹس کو سنبھالنے کے لیے اپنی چمکدار نئی خصوصیات کے ساتھ آہستہ آہستہ پانڈوں کو بے گھر کر رہی ہیں، پانڈا Python ڈیٹا سائنس کمیونٹی میں ڈیٹا ہیرا پھیری کا سب سے زیادہ استعمال ہونے والا ٹول ہے۔ موجودہ SciPy اسٹیک میں یہ کتنی اچھی طرح سے فٹ بیٹھتا ہے اس کی وجہ سے، لائبریری دوسرے پیکجوں کی پیروی اور تعمیر کے لیے ایک نمونہ کے طور پر کام کرتی ہے۔

مجھے امید ہے کہ آپ کو یہ پوسٹ بصیرت مند لگی ہوگی اور پڑھنے کے لیے آپ کا شکریہ۔

اس مضمون میں دکھایا گیا میڈیا Analytics ودھیا کی ملکیت نہیں ہے اور مصنف کی صوابدید پر استعمال کیا جاتا ہے۔

ماخذ: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

ٹائم اسٹیمپ:

سے زیادہ تجزیات ودھیا