Pyspark में संख्यात्मक डेटा को श्रेणीबद्ध डेटा कैसे परिवर्तित करें


11

मैं pyspark अनुप्रयोगों के साथ काम करने के लिए Ipython नोटबुक का उपयोग कर रहा हूं। मेरे पास CSV फ़ाइल है जिसमें यह निर्धारित करने के लिए कई श्रेणीगत कॉलम हैं कि आय 50k से अधिक है या नहीं। मैं आय सीमा निर्धारित करने के लिए सभी आदानों को लेते हुए एक वर्गीकरण एल्गोरिदम प्रदर्शन करना चाहूंगा। मुझे मैप किए गए चर के लिए चर का एक शब्दकोश बनाने और प्रसंस्करण के लिए संख्याओं के लिए चर को मैप करने के लिए एक मानचित्र फ़ंक्शन का उपयोग करने की आवश्यकता है। अनिवार्य रूप से, मैं अपने डेटासेट को संख्यात्मक स्वरूप में रखना चाहूंगा ताकि मैं मॉडलों को लागू करने पर काम कर सकूं।

डेटा सेट में, शिक्षा, वैवाहिक स्थिति, कामकाजी वर्ग आदि जैसे श्रेणीबद्ध कॉलम हैं। क्या कोई मुझे बता सकता है कि उन्हें pyspark में संख्यात्मक कॉलम में कैसे बदलना है?

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}

मैंने काम वर्ग के लिए प्रमुख मूल्य जोड़े के साथ एक नमूना शब्दकोश बनाया। लेकिन, मुझे नहीं पता कि इसे मैप फ़ंक्शन में कैसे उपयोग किया जाए और सीएसवी फ़ाइल में संबंधित डेटा को संबंधित मूल्य के साथ बदलें।

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

यह StringIndexerPySpark का उपयोग करके किया जा सकता है और 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] मिला। मैं शब्दकोश में मूल्यों का उपयोग करके कार्यशील सामग्री के लिए संख्यात्मक मूल्यों को प्रतिस्थापित करना चाहता हूं।
एसआरएस

नमस्ते, Mapr फ़ंक्शन श्रेणी मान से संबद्ध संख्यात्मक मान लौटाएगा। उदाहरण के लिए: 'सेल्फ एम्पायर-नॉट-इंक' के लिए 6, पायथन डिक्शनरी अनियंत्रित हैं। यदि आप एक आदेशित शब्दकोश चाहते हैं, तो संग्रह की कोशिश करें। संपादित करें।
श्रीजिथकसी

ठीक है, अब मैं फ़ंक्शन को समझता हूं। बात यह है, मेरे पास कई हजार पंक्तियों के साथ एक सीएसवी है और वर्कक्लास नाम का एक कॉलम है जिसमें शब्दकोश में उल्लिखित मूल्य में से कोई भी एक है। इसलिए, प्रत्येक पंक्ति के लिए, मुझे पाठ के साथ पाठ की तुलना करके उस कॉलम में एक संख्या को एक संख्या में बदलना होगा और संबंधित संख्या को प्रतिस्थापित करना होगा। मैं पंक्तियों द्वारा स्तंभ को पार्स करने और शब्दकोश के साथ मूल्यों की तुलना करने के लिए एक फ़ंक्शन का उपयोग कैसे करूं?
एसआरएस

आप एक अतिरिक्त कॉलम बना सकते हैं, 'वर्कक्लास_नम' कह सकते हैं जो श्रेणीबद्ध मानों के अनुरूप संख्यात्मक मानों को संग्रहीत करता है। अजगर पंडों के पुस्तकालय की जाँच करें।
श्रीजित् सी सी सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.