কীভাবে শ্রেণিবিন্যস্ত তথ্যকে পিএসপার্কে সংখ্যাসূচক তথ্যতে রূপান্তর করতে হয়


11

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

ডেটা সেটটিতে শ্রেণীবদ্ধ কলামগুলি যেমন শিক্ষা, বৈবাহিক অবস্থা, শ্রমজীবী ​​শ্রেণি ইত্যাদি রয়েছে someone কেউ আমাকে কীভাবে এগুলিকে পিএসপার্কে সংখ্যাসূচক কলামগুলিতে রূপান্তর করতে পারেন আমাকে বলতে পারেন?

workclass = {'?':0,'Federal-gov':1,'Local-gov':2,'Never-  worked':3,'Private':4,'Self-emp-inc':5,'Self-emp-not-inc':6,'State-gov':7,'Without-pay':8}

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

wc = pd.read_csv('PATH', usecols = ['Workclass'])

df = pd.DataFrame(wc)
wcdict = {' ?':0,' Federal-gov':1,' Local-gov':2,' Never-worked':3,' Private':4,' Self-emp-inc':5,' Self-emp-n-inc':6,' State-gov':7,' Without-pay':8}
df_new = df.applymap(lambda s: wcdict.get(s) if s in wcdict else s)
print(df_new)

শ্রেণিবদ্ধ তথ্যগুলিকে সংখ্যাসূচক ডেটাতে রূপান্তর করতে আমি সাধারণ অজগরটিতে এই কোডটি লিখেছি। এটা ঠিক কাজ করে। আমি স্পার্ক প্রসঙ্গে রূপান্তরটি করতে চাই। এবং, ডেটা উত্সে 9 টি শ্রেণিবদ্ধ কলাম রয়েছে। সব 9 কলামের জন্য কেভি জুড়ি রাখার জন্য অভিধান আপডেট প্রক্রিয়াটি স্বয়ংক্রিয় করার কোনও উপায় আছে কি?

উত্তর:


14

এটি StringIndexerপাইস্পার্কে ব্যবহার করা যেতে পারে এবং IndexToStringরেফারেন্স ব্যবহার করে বিপরীতে দয়া করে এটি পরীক্ষা করে দেখুন:

from pyspark.ml.feature import StringIndexer

df = sqlContext.createDataFrame(
    [(0, "a"), (1, "b"), (2, "c"), (3, "a"), (4, "a"), (5, "c")],
    ["id", "category"])
indexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
indexed = indexer.fit(df).transform(df)
indexed.show()

আরও বিশদের জন্য, স্পার্ক ডকুমেন্টেশন চেক করুন


2
workclass = {'?':0,'Federal-gov':1,'Local-gov':2,'Never-  worked':3,'Private':4,'Self-emp-inc':5,'Self-emp-not-inc':6,'State-gov':7,'Without-pay':8}

কীটি ফেরত দেয় এমন ম্যাপার ফাংশন সংজ্ঞায়নের চেষ্টা করুন:

def mapr(dict_key):
    return workclass[dict_key]

print list(map(mapr,workclass))

আরে, আপনি কি দয়া করে আমাকে বোঝাতে পারেন যে এই ব্লকটি কী করে? আমি এই কোডটি যুক্ত করে আমার স্ক্রিপ্টটি চালিয়েছি এবং আউটপুট হিসাবে আমি [6, 1, 4, 3, 5, 7, 8, 0, 2] পেয়েছি। আমি অভিধানের মানগুলি ব্যবহার করে ওয়ার্ক ক্লাসের সামগ্রীতে সংখ্যাসূচক মানগুলি প্রতিস্থাপন করতে চাই।
এসআরএস

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

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

আপনি একটি অতিরিক্ত কলাম তৈরি করতে পারেন, 'ওয়ার্কক্লাস_নাম' বলুন যা শ্রেণিবদ্ধ মানের সাথে সংখ্যাসূচক মান সংরক্ষণ করে store পাইথন পান্ডাস লাইব্রেরি পরীক্ষা করুন।
শ্রীজিথক 321
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.