반응형
n = 2
인 이산 벡터 데이터 세트가 있다고 가정합니다.
DATA = [
('a', 4),
('b', 5),
('c', 5),
('d', 4),
('e', 2),
('f', 5),
]
두 변수 간의 상관 관계를 시각화하기 위해 matplotlib로 해당 데이터 세트를 어떻게 플로팅 할 수 있습니까?
간단한 코드 예제라면 좋을 것입니다.
해결 방법
Joe Kington이 정답을 가지고 있지만 DATA
가 표현 된 것보다 더 복잡 할 수 있습니다. 'a'에 여러 값이있을 수 있습니다. Joe가 x 축 값을 작성하는 방법은 빠르지 만 고유 한 값 목록에서만 작동합니다. 이 작업을 수행하는 더 빠른 방법이있을 수 있지만이 방법으로 수행했습니다.
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
세트에는 모든 x 축 값에 대해 두 개의 값이 있습니다. 아래에 빨간색으로 표시됩니다.
수정
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)
새로운 수치는 다음과 같습니다.
선형 근사값이 유용하고 적합도 만보고 정 성적으로 결정할 수있는 경우 y 방향을 평평하게하기 전에이 추세를 빼고 싶을 수 있습니다. 이것은 선형 추세에 대한 가우스 랜덤 분포가 있음을 보여주는 데 도움이됩니다.
참조 페이지 https://stackoverflow.com/questions/8154511
반응형
'파이썬' 카테고리의 다른 글
파이썬 클래스에 대한 __str__ 메서드를 정의하는 방법은 무엇입니까? (0) | 2020.09.25 |
---|---|
파이썬 Google App Engine에서 파일 업로드 (0) | 2020.09.25 |
파이썬 Python에서 파일 gzip (0) | 2020.09.25 |
파이썬 re.sub 교체 패턴에서 그룹 캡처에 대한 역 참조 처리 (0) | 2020.09.25 |
파이썬 밀리 초 정밀도로 Unix 타임 스탬프에 대한 datetime (0) | 2020.09.25 |
댓글