थोड़ा से संशोधित: Python Pandas Dataframe: Normalize data between 0.01 and 0.99? लेकिन से टिप्पणी के कुछ सोचा था कि यह प्रासंगिक था (खेद अगर एक पोस्ट हालांकि माना ...)
मैं गृहीत या z- की है कि नियमित रूप प्रतिशतक में अनुकूलित सामान्य चाहते थे स्कोर पर्याप्त नहीं था। कभी-कभी मुझे पता था कि आबादी का अधिकतम अधिकतम और न्यूनतम क्या था, और इसलिए इसे अपने नमूना, या एक अलग मिडपॉइंट, या जो भी हो, के अलावा इसे परिभाषित करना चाहता था! यह अक्सर तंत्रिका जाल के लिए डेटा को पुनर्विक्रय और सामान्य करने के लिए उपयोगी हो सकता है जहां आप 0 और 1 के बीच सभी इनपुट चाहते हैं, लेकिन आपके कुछ डेटा को अधिक अनुकूलित तरीके से स्केल करने की आवश्यकता हो सकती है ... क्योंकि प्रतिशत और stdevs आपके नमूना कवर मानते हैं आबादी, लेकिन कभी-कभी हम जानते हैं कि यह सच नहीं है। गर्मी के आंकड़ों को देखते समय यह मेरे लिए भी बहुत उपयोगी था। तो मैं एक कस्टम समारोह का निर्माण (कोड में अतिरिक्त कदम इस्तेमाल किया यहाँ यह के रूप में संभव के रूप में पठनीय बनाने के लिए):
def NormData(s,low='min',center='mid',hi='max',insideout=False,shrinkfactor=0.):
if low=='min':
low=min(s)
elif low=='abs':
low=max(abs(min(s)),abs(max(s)))*-1.#sign(min(s))
if hi=='max':
hi=max(s)
elif hi=='abs':
hi=max(abs(min(s)),abs(max(s)))*1.#sign(max(s))
if center=='mid':
center=(max(s)+min(s))/2
elif center=='avg':
center=mean(s)
elif center=='median':
center=median(s)
s2=[x-center for x in s]
hi=hi-center
low=low-center
center=0.
r=[]
for x in s2:
if x<low:
r.append(0.)
elif x>hi:
r.append(1.)
else:
if x>=center:
r.append((x-center)/(hi-center)*0.5+0.5)
else:
r.append((x-low)/(center-low)*0.5+0.)
if insideout==True:
ir=[(1.-abs(z-0.5)*2.) for z in r]
r=ir
rr =[x-(x-0.5)*shrinkfactor for x in r]
return rr
यह एक पांडा श्रृंखला में ले जाएगा, या यहां तक कि सिर्फ एक सूची है और अपने निर्दिष्ट कम करने के लिए यह सामान्य , केंद्र, और उच्च अंक। एक संकीर्ण कारक भी है! आपको एंडपॉइंट्स 0 और 1 से डेटा को स्केल करने की अनुमति देने के लिए (मुझे matplotlib में colormaps संयोजन करते समय ऐसा करना था: Single pcolormesh with more than one colormap using Matplotlib) तो आप देख सकते हैं कि कोड कैसे काम करता है, लेकिन मूल रूप से कहता है कि आपके पास मूल्य हैं [-5,1, 10] एक नमूने में, लेकिन 7 से 7 की एक श्रृंखला के आधार पर सामान्य बनाना चाहते हैं (इसलिए 7 से ऊपर कुछ भी, हमारे "10" को प्रभावी रूप से 7 के रूप में माना जाता है) 2 के मध्य बिंदु के साथ, लेकिन 256 आरजीबी फिट करने के लिए इसे छोटा करें रंग मैप:
#In[1]
NormData([-5,2,10],low=-7,center=1,hi=7,shrinkfactor=2./256)
#Out[1]
[0.1279296875, 0.5826822916666667, 0.99609375]
यह भी अंदर बाहर अपने डेटा बदल सकते हैं ... इस अजीब लग सकता है, लेकिन मैं इसे heatmapping के लिए उपयोगी पाया। मान लें कि आप मूल्यों के लिए एक गहरे रंग के रंग को 0/0 के बजाय 0 के करीब चाहते हैं। आप सामान्यीकृत डेटा के आधार पर हीटमैप सकता है जहां insideout = सच:
#In[2]
NormData([-5,2,10],low=-7,center=1,hi=7,insideout=True,shrinkfactor=2./256)
#Out[2]
[0.251953125, 0.8307291666666666, 0.00390625]
तो अब "2" जो केन्द्र, "1" परिभाषित के सबसे करीब है उच्चतम मूल्य है।
वैसे भी, मैंने सोचा कि मेरा आवेदन प्रासंगिक था यदि आप अन्य तरीकों से डेटा को पुन: सहेजना चाहते हैं जो आपके लिए उपयोगी अनुप्रयोग हो सकता है।
यह इतना स्पष्ट था कि मेरा दिमाग इसे स्वीकार नहीं कर सका :) – jason
यदि आप सबसेट को सामान्य बनाना चाहते हैं तो ऐसा करने का कोई तरीका है? कहें कि पंक्ति 'ए' और' बी 'एक बड़े समूहीकरण कारक का हिस्सा हैं जिन्हें आप अलग से सामान्य रूप से 'सी' और' डी' से सामान्य करना चाहते हैं। – Amyunimus
सबसेट का चयन करें और पहले की गणना करें। डेटा को अनुक्रमणित करने और चुनने के तरीके पर http://pandas.pydata.org/pandas-docs/stable/indexing.html देखें –