মাইকেল ম্যাকোলে

মেশিন লার্নিং জার্নির জন্য পান্ডাস ফাংশন জানতে হবে

উত্স নোড: 1865356

এই নিবন্ধটি একটি অংশ হিসাবে প্রকাশিত হয়েছিল ডেটা সায়েন্স ব্লগাথন

ভূমিকা

ওয়েল, আপনি পারেন একটি ভাল সম্ভাবনা আছে!

ডাটা সায়েন্টিস্টদের জন্য যারা পাইথনকে তাদের প্রাথমিক প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে ব্যবহার করে, পান্ডাস প্যাকেজটি অবশ্যই একটি ডাটা অ্যানালাইসিস টুল। পান্ডাস প্যাকেজে একজন ডেটা সায়েন্টিস্টের প্রয়োজনীয় সবকিছুই রয়েছে এবং প্রতিটি কোর্সই আমাদের শিখিয়েছে যে কীভাবে এটি প্রথমে ব্যবহার করতে হয়। এটি এত বড়, শক্তিশালী এবং প্রায় প্রতিটি ট্যাবুলার ম্যানিপুলেশন করে যা আপনি কল্পনা করতে পারেন। যাইহোক, এই প্রস্থ মাঝে মাঝে একটি অসুবিধা হতে পারে।

এটিতে অনেক সুন্দর বৈশিষ্ট্য রয়েছে যা বিরল প্রান্তের ক্ষেত্রে, বিভিন্ন পরিস্থিতিতে সমাধান করে।

পান্ডাদের মূল ত্রুটিগুলির মধ্যে একটি হল এটি বড় ডেটাসেটের সাথে লড়াই করে কারণ পান্ডারা তাদের ডেটা স্ট্রাকচারগুলিকে RAM এ সঞ্চয় করে, যা ডেটা আকার বাড়ার সাথে সাথে অপর্যাপ্ত হতে পারে। এর জন্য PySpark বা Dask ব্যবহার করুন।

যদিও পান্ডাস প্যাকেজ ব্যাপকভাবে ব্যবহৃত হয়, তবুও অনেকগুলি ফাংশন রয়েছে যা লোকেরা উপেক্ষা করতে পারে, কারণ এটি কম ব্যবহৃত হয় বা তারা এর অস্তিত্ব সম্পর্কে অবগত নয়। এই পোস্টটি আপনাকে সেই বৈশিষ্ট্যগুলির সাথে পুনরায় পরিচয় করিয়ে দিতে এবং প্রদর্শন করতে চায় যে পান্ডারা আপনার আগে যে সচেতন ছিলেন তার চেয়ে অনেক বেশি দক্ষ।

নল

পান্ডাগুলিতে সংক্ষিপ্ত, কম্প্যাক্ট পদ্ধতিতে ডেটা পরিষ্কার করার জন্য, কেউ পাইপ ফাংশন ব্যবহার করতে পারে, যা আপনাকে একটি অপারেশনে একাধিক ফাংশন একত্রিত করতে দেয়।

উদাহরণস্বরূপ, যদি আপনি ড্রপ_ডুপ্লিকেট, এনকোড_ক্যাটেগরিক্যালস, রিমুভ_আউটলারের মতো ফাংশন প্রয়োগ করতে চান যা এর আর্গুমেন্টগুলি গ্রহণ করে।

df_cleaned = (diamonds.pipe(drop_duplicates)। পাইপ(remove_outliers, ['price', 'carat', 'depth'])). পাইপ(encode_categoricals, ['cut', 'color', 'clarity']))

ফ্যাক্টরাইজ করুন

এই ফাংশনটি Sklearns লেবেল এনকোডারের বিকল্প।

# মাইন্ড দ্য [0] শেষে হীরা["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].নমুনা(5) 52103 2 39813 0 31843 0 10675 0 6634 0 নাম: cut_enc, dtype: int64

ফ্যাক্টরাইজ ফলাফলগুলি একাধিক মান: এনকোড করা মান এবং অনন্য বিভাগগুলির একটি তালিকা৷

মান, অনন্য = pd.factorize(diamonds["cut"], sort=True) >>> values[:10] array([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=True)
তথ্য বিস্ফোরিত
লেখক দ্বারা চিত্র

এই ফাংশনটি মানগুলির অ্যারে সহ একটি ঘর নেয় এবং একাধিক সারিতে বিস্ফোরিত হয়। একটি সাংখ্যিক সূচকের ক্রম বজায় রাখতে, ignore_index কে True হিসাবে ব্যবহার করুন।

মধ্যে

একটি পরিসরের মধ্যে বুলিয়ান ইনডেক্সিং সাংখ্যিক বৈশিষ্ট্যগুলির জন্য, এখানে একটি সহজ ফাংশন রয়েছে:

# 3500 এবং 3700 ডলারের মধ্যে দামের হীরা পান
তথ্যের মধ্যে | পান্ডা ফাংশন
লেখক দ্বারা চিত্র

 

T

ডেটাফ্রেমের একটি সাধারণ 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', ... 'নির্ভুলতা', 'শো_মাত্রা', 'ইউনিকোড' , 'প্রস্থ']

অধিকাংশ মানুষ max_columns এবং নির্ভুলতা ব্যবহার করে

# pd.options.display.max_columns = কোনটিই নয় # দশমিকের পরে শুধুমাত্র 5টি সংখ্যা দেখান pd.options.display.precision = 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()
dtypes নির্বাচন করুন
লেখক দ্বারা চিত্র

 

মাস্ক

এই ফাংশন মান প্রতিস্থাপন করতে সাহায্য করে যেখানে কাস্টম অবস্থা সন্তুষ্ট হয় না।

# নমুনা ডেটা বয়স তৈরি করুন = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("বয়স") বয়স
মুখোশ | তথ্য
লেখক দ্বারা চিত্র

উপরোক্ত অপারেশন করার পর।

মাস্কিং সঞ্চালিত
লেখক দ্বারা চিত্র

নূন্যতম এবং সর্বোচ্চ

যদিও ন্যূনতম এবং সর্বোচ্চ সুপরিচিত, কিছু প্রান্তের ক্ষেত্রে এর কিছু ভাল বৈশিষ্ট্য রয়েছে।

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 হৃদরোগ 99.31627 লোন ডিফল্ট 97.96728 dtype: float64

সবচেয়ে বড় এবং ক্ষুদ্রতম

একটি ভেরিয়েবলের শীর্ষ N বা ~(শীর্ষ N) মানগুলি দেখতে সবচেয়ে বড় এবং nsmallest সহায়ক।

diamonds.nlargest(5, "দাম")
বৃহত্তম এবং ছোট
লেখক দ্বারা চিত্র
diamonds.nsmallest(5, "দাম")
সবচেয়ে ছোট
লেখক দ্বারা চিত্র

 

Idxmax এবং Idxmin

যখন আপনি একটি কলামে সর্বোচ্চ বা সর্বনিম্ন কল করেন তখন পান্ডারা সবচেয়ে বড়/ছোট নম্বর ফেরত দেয়। যাইহোক, এমন পরিস্থিতি রয়েছে যখন আপনার সর্বনিম্ন/সর্বোচ্চ অবস্থানের প্রয়োজন হয়, যা এই ফাংশনগুলি প্রদান করে না।

পরিবর্তে, আপনি idxmax/idxmin ব্যবহার করতে পারেন:

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

মান_গণনা

অনুপস্থিত মানগুলির শতাংশ খুঁজে বের করার একটি সাধারণ উপায় হল isnull এবং যোগফলকে একত্রিত করা এবং অ্যারের আকার দ্বারা ভাগ করা।

কিন্তু, প্রাসঙ্গিক আর্গুমেন্ট সহ 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 Po: 0.01370 ফায়ারপ্লেস float64

ক্লিপ

ক্লিপ ফাংশন একটি সীমার বাইরে বহিরাগতদের খুঁজে পেতে এবং তাদের কঠোর সীমা দিয়ে প্রতিস্থাপন করতে সহায়তা করে।

>>> 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 | পান্ডা ফাংশন
লেখক দ্বারা চিত্র

between_time একটি কাস্টম পরিসরের মধ্যে সারি আনতে ব্যবহৃত হয়।

তারিখ থেকে আমদানি তারিখ সময় >>> df.between_time("09:45", "12:00")
মধ্যে_সময়
লেখক দ্বারা চিত্র

 

Bdate_range

এই ফাংশনটি ব্যবসায়িক দিনের ফ্রিকোয়েন্সি সহ সময়-সিরিজ সূচক তৈরি করতে সহায়তা করে। আর্থিক বিশ্বের এই ধরনের ফ্রিকোয়েন্সি আছে। সুতরাং, এই ফাংশনটি রিইন্ডেক্স ফাংশনের সাথে টাইম-সিরিজ রিইনডেক্স করার সময় সহায়ক হতে পারে।

সিরিজ = pd.bdate_range("2021-01-01", "2021-01-31") # এক মাস সময়কাল >>> লেন(সিরিজ) 21

At এবং Iat

এই দুটি অ্যাক্সেসর loc এবং iloc থেকে যথেষ্ট দ্রুত। যাইহোক, তাদের একটি অপূর্ণতা আছে। তারা আপনাকে একবারে একটি মান চয়ন বা প্রতিস্থাপন করার অনুমতি দেয়:

# [index, label] >>> diamonds.at[234, "cut"] 'আইডিয়াল' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # মূল্য কলামের 16541 তম সারি প্রতিস্থাপন করুন >> > diamonds.at[16541, "price"] = 10000

আর্গসোর্ট

এই ফাংশনটি সূচকগুলি বের করতে সাহায্য করে যা বৈশিষ্ট্যগুলির একটি অ্যারে বাছাই করবে।

tips.reset_index(inplace=True, drop=True) sort_idx = টিপস["total_bill"].argsort(kind="mergesort") # এখন, total_bill 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')

অধীনে ফাংশন আরো একটি তালিকা জন্য এটি পরীক্ষা করে দেখুন বিড়াল অ্যাক্সেসর.

লুৎফর

স্কুইজ হল একটি ফাংশন যা বিরল কিন্তু উত্তেজনাপূর্ণ প্রান্তের পরিস্থিতিতে ব্যবহৃত হয়।

একটি ডেটাফ্রেম সাবসেট করতে ব্যবহৃত একটি শর্ত থেকে যখন একটি একক মান ফেরত দেওয়া হয়, এটি এই ক্ষেত্রেগুলির মধ্যে একটি। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

উপসেট = diamonds.loc[diamonds.index >> উপসেট
মূল্য

এমনকি যদি শুধুমাত্র একটি সেল থাকে, ডেটাফ্রেমটি ফেরত দিন। এটি অসুবিধাজনক কারণ মূল্য পেতে আপনাকে এখন কলামের নাম এবং সূচক উভয়ের সাথেই ব্যবহার করতে হবে।

আপনি কিভাবে চেপে জানেন যদি আপনি করতে হবে না. এই ফাংশনটি ব্যবহার করে একটি একক-কোষ ডেটাফ্রেম বা সিরিজ থেকে একটি অক্ষ সরানো যেতে পারে। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

>>> subset.squeeze() 326

অপসারণ করার জন্য অক্ষটি নির্দিষ্ট করা সম্ভব। এটা এখন শুধুমাত্র স্কেলার ফিরে ছিল.

>>> subset.squeeze("columns") # বা "সারি" 0 326 নাম: মূল্য, dtype: int64

মনে রাখবেন এই ফাংশনটি শুধুমাত্র একক মান সহ সিরিজ বা ডেটাফ্রেমের জন্য কাজ করে।

এক্সেল_লেখক

এটি এক্সেল ফাইল তৈরি এবং এতে ডেটাফ্রেম লেখার জন্য একটি সাধারণ ক্লাস। বিবেচনা করুন, আমাদের কাছে এই দুটি ডেটাসেট রয়েছে।

# দুটি ডেটাসেট লোড করুন 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")

এটিতে ব্যবহার করার জন্য তারিখ সময় বিন্যাস নির্দিষ্ট করার বৈশিষ্ট্য রয়েছে, আপনার একটি নতুন ফাইলের প্রয়োজন হোক বা বিদ্যমান একটি সংশোধন করা হোক, একটি শীট বিদ্যমান থাকলে কী হবে৷ এটা যাচাই কর ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য.

উপসংহার

এটা পান্ডাদের একটি সম্পূর্ণ ওভারভিউ নয়, এবং ডকুমেন্টেশন কোড এবং বৈশিষ্ট্য সম্পর্কে আরও তথ্য রয়েছে। আমি সুপারিশ করছি যে আপনি এখানে প্রদত্ত কোড স্নিপেটের বিভিন্ন বৈচিত্র্যের পাশাপাশি বিভিন্ন পরামিতি নিয়ে পরীক্ষা করুন৷ এটি করার মাধ্যমে কেউ পান্ডাদের শক্তি সম্পূর্ণরূপে উপলব্ধি করতে পারে।

ডাস্ক এবং ডেটাটেবলের মতো লাইব্রেরিগুলি ধীরে ধীরে বড় ডেটাসেটগুলি পরিচালনা করার জন্য তাদের চটকদার নতুন বৈশিষ্ট্যগুলির সাথে পান্ডাদের স্থানচ্যুত করছে, পাইথন ডেটা বিজ্ঞান সম্প্রদায়ে পান্ডাস সবচেয়ে ব্যাপকভাবে ব্যবহৃত ডেটা ম্যানিপুলেশন টুল হিসাবে রয়ে গেছে। বর্তমান SciPy স্ট্যাকের সাথে এটি কতটা ভালভাবে ফিট করে, লাইব্রেরিটি অন্যান্য প্যাকেজগুলি অনুসরণ এবং তৈরি করার জন্য একটি দৃষ্টান্ত হিসাবে কাজ করে।

আমি আশা করি আপনি এই পোস্টটি অন্তর্দৃষ্টিপূর্ণ খুঁজে পেয়েছেন এবং পড়ার জন্য আপনাকে ধন্যবাদ।

এই নিবন্ধে প্রদর্শিত মিডিয়াগুলি অ্যানালিটিক্স বিদ্যা মালিকানাধীন নয় এবং এটি লেখকের বিবেচনার ভিত্তিতে ব্যবহৃত হয়।

সূত্র: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

সময় স্ট্যাম্প:

থেকে আরো বিশ্লেষণ বিদ্যা