जो किंगटन का सही उत्तर है, लेकिन आपके DATA
शायद अधिक जटिल है जो दर्शाया गया है। इसमें 'ए' पर कई मान हो सकते हैं। जो एक्स एक्स अक्ष मान बनाता है वह त्वरित है लेकिन केवल अद्वितीय मानों की सूची के लिए काम करेगा। ऐसा करने के एक तेज़ तरीका हो सकता है, लेकिन यह मैं इसे कैसे पूरा किया:
import matplotlib.pyplot as plt
def assignIDs(list):
'''Take a list of strings, and for each unique value assign a number.
Returns a map for "unique-val"->id.
'''
sortedList = sorted(list)
#taken from
#http://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-in-python-whilst-preserving-order/480227#480227
seen = set()
seen_add = seen.add
uniqueList = [ x for x in sortedList if x not in seen and not seen_add(x)]
return dict(zip(uniqueList,range(len(uniqueList))))
def plotData(inData,color):
x,y = zip(*inData)
xMap = assignIDs(x)
xAsInts = [xMap[i] for i in x]
plt.scatter(xAsInts,y,color=color)
plt.xticks(xMap.values(),xMap.keys())
DATA = [
('a', 4),
('b', 5),
('c', 5),
('d', 4),
('e', 2),
('f', 5),
]
DATA2 = [
('a', 3),
('b', 4),
('c', 4),
('d', 3),
('e', 1),
('f', 4),
('a', 5),
('b', 7),
('c', 7),
('d', 6),
('e', 4),
('f', 7),
]
plotData(DATA,'blue')
plotData(DATA2,'red')
plt.gcf().savefig("correlation.png")
मेरे DATA2
सेट हर एक्स अक्ष मूल्य के लिए दो मान होते हैं। यह नीचे लाल रंग में साजिश रची है:
संपादित
सवाल आपसे पूछा बहुत व्यापक है। मैंने 'सहसंबंध' की खोज की, और Wikipedia ने पियरसन के उत्पाद-पल गुणांक पर अच्छी चर्चा की, जो एक रैखिक फिट की ढलान को दर्शाता है। ध्यान रखें कि यह मान केवल एक गाइड है, और किसी भी तरह से भविष्यवाणी नहीं करता है कि रैखिक फिट उचित धारणा है या नहीं, उपरोक्त पृष्ठ में correlation and linearity पर नोट्स देखें।
import matplotlib.pyplot as plt
import numpy as np
def plotData(inData,color):
x,y = zip(*inData)
xMap = assignIDs(x)
xAsInts = np.array([xMap[i] for i in x])
pearR = np.corrcoef(xAsInts,y)[1,0]
# least squares from:
# http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html
A = np.vstack([xAsInts,np.ones(len(xAsInts))]).T
m,c = np.linalg.lstsq(A,np.array(y))[0]
plt.scatter(xAsInts,y,label='Data '+color,color=color)
plt.plot(xAsInts,xAsInts*m+c,color=color,
label="Fit %6s, r = %6.2e"%(color,pearR))
plt.xticks(xMap.values(),xMap.keys())
plt.legend(loc=3)
नया आंकड़ा है:
इसके अलावा प्रत्येक दिशा सपाट और व्यक्तिगत वितरण को देख सकता है यहाँ एक अद्यतन plotData
विधि है, जो numpy.linalg.lstsq
और का उपयोग करता है रेखीय प्रतीपगमन करने के लिए numpy.corrcoef
पियर्सन की आर गणना करने के लिए है उपयोगी हो, और उनके doing this in matplotlib के उदाहरण हैं:
यदि रैखिक अनुमान उपयोगी है, तो आप गुणात्मक निर्धारित कर सकते हैं बस फिट पर देखकर ly, आप y दिशा की flatting से पहले इस प्रवृत्ति को घटाना चाहते हैं। यह दिखाने में मदद करेगा कि आपके पास एक रैखिक प्रवृत्ति के बारे में गॉसियन यादृच्छिक वितरण है।
हाय यान .. लिपि के लिए धन्यवाद। मैं अद्वितीय सूची भाग के बारे में नहीं समझा। आप बस फ्लोटिंग पॉइंट मानों को पूर्णांक में परिवर्तित कर रहे हैं। एक्स-अक्ष में अभी भी डुप्लिकेट मान हैं? – mdasari