본문 바로가기
관/핫한 파이썬 공부

파이썬의 여러 모듈 공부하기 05.

by 4차원 박스 2019. 11. 2.

이번엔 tkinter가 아닌 다른 여러 모듈을 통해

데이터를 시각화 하는 모듈을 사용한다

(파이썬 머신러닝 쪽에 해당하는 분야 이다.)

 

이건 추가적인 정보로 알아둔다

 

<소프트웨어 생명주기>
1. 요구사항
2. 설계
3. 구현
4. 테스트
5. 운영
6. 모든분야의 유지보수(1,2,3,4,5 전부)

 

 


데이터 시각화를 위한 모듈
1. matplotlib = 그래프그리기 
2. NumPy = 고성능 수치계산 전용(행렬 연산)
3. SciPy = 데이터사이언스에서 사용하는 대표적인것
4. SymPy = 파이썬에서 넘파이와 유사하게 사용하는 대수 전용 모듈

1. 라이브러리 기반 = 함수기반
2. 패키지 혹은 모듈 기반 = 클래스 기반

클래스는 함수와 변수를 포함하며 둘이 하나인경우 이다.

import matplotlib.pyplot as plt
import math
import numpy
'''
x=range(100)
y=[value**2 for value in x]

plt.plot(x,y)
plt.show()
'''

'''
t=range(100)
#x=[(2*math.pi*i)/len(t) for i in t]
#x=[2*math.pi for i in t] 이건 안나온다
y=[math.sin(value) for value in x]

plt.plot(x,y)
plt.show()
'''


'''
x=numpy.linspace(0,2*numpy.pi,100)
y=[numpy.sin(value) for value in x]
#y=numpy.sin(x) 위와 같은데 보다 간편하다

plt.plot(x,y)
plt.show()
'''


'''
x=numpy.linspace(-3,2,200)
y=x**2-2*x+1

plt.plot(x,y)
plt.show()
'''

'''
x=numpy.linspace(0,2*numpy.pi,100)
ya=numpy.sin(x)
yb=numpy.cos(x)

plt.plot(x,ya)
plt.plot(x,yb)
plt.show()
'''

이런식으로 사용한다

import matplotlib.pyplot as plt

x=range(100) #기본적으로 리스트에 담긴다.
y=[value**2 for value in x] #기본적으로 리스트에 담긴다.

plt.plot(x,y)
plt.show()

를 통해 그래프를 그릴수 있다.



다른 파일에서 가져오기 있을수 있다.
파일 데이터로부터 그래프 그리는법

x,y를 리스트로 만들어준다

r= read
w= write
a= append 형식의 파일을 불러온다는 것임.

다음과 같다

x,y =[],[]
for line in open('example_data.txt','w'):
    value=[float(s) for s in line.split()]
    x.append(value[0])
    y.append(value[1])

plt.plot(x,y)
plt.show()

example_data 라는 이름의 메모장을 만들어 놓아야 한다.


다음과같이 간단하게 줄여 적는 코드도 있다.
with open('example_data.txt','r') as f:
    x,y=zip(*[[float(s) for s in line.split()]for line in f])
plt.plot(x,y)
plt.show()


다음은 넘파이와 리스트의 슬라이싱을 이용한 줄여적는 코드이다
data=numpy.loadtxt('example_data.txt')
plt.plot(data[:,0],data[:,1]) #2차원 배열에서 0열과 1열을 각각 x,y좌표에 받는다.
plt.show()


만약 텍스트파일에서 3개의 값을 받아서
그래프 3개를 그리려면 다음과 같이 하면 된다.
넘파이를 통해 불러온다.

data=numpy.loadtxt('new.txt')

plt.plot(data[:,0],data[:,0])
plt.plot(data[:,0],data[:,1])
plt.plot(data[:,0],data[:,2])

plt.show()

만약 그래프를 n개를 그려야 하는 상황이라면
다음과 같이 for문을 이용하여 줄이는 방법이 있다.

data=numpy.loadtxt('new.txt')

for column in data.T:
    #print(data[:,0],column)
    plt.plot(data[:,0],column)
plt.show()



의문(이걸 tkinter에 넣을수 있는가? 한결)


산점도 그리기(랜덤으로)
c=100
x=[random.random() for i in range(c)]
y=[random.random() for i in range(c)]

plt.scatter(x,y)
plt.show()

이걸 넘파이로 줄여보기.

data=numpy.random.rand(100,2)#2차원 행렬만들기
plt. scatter(data[:,0],data[:,1])
plt.show()


막대그래프 그리기

다음은 가장 기본형그래프 이다
data=[5.,25.,50.,20.] #.은 안적어도 가능함
plt.bar(range(len(data)),data)
plt.show()

여기서 너비를 늘리면 다음과 같다
data=[5.,25.,50.,20.]
plt.bar(range(len(data)),data,width=1)
plt.show()

그래프를 수평으로 눕혀본다
data=[5.,25.,50.,20.]
plt.barh(range(len(data)),data) #bar가 아니라 barh를 사용한다.
plt.show()

다중 막대 그래프 그리기

다음은 기본형 이다
data=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

x=numpy.arange(4)
plt.bar(x+0.00,data[0], color='b', width=0.25)
plt.bar(x+0.25,data[1], color='g', width=0.25)
plt.bar(x+0.50,data[2], color='r', width=0.25)

plt.show()

이걸 좀더 다르게 표현하면
plt.bar(range(4),data[0],color='b',width=0.25)
plt.bar([x+0.25 for x in range(4)],data[1],color='g',width=0.25)
plt.bar([x+0.50 for x in range(4)],data[2],color='r',width=0.25)

plt.show()

이렇게 된다.

분할 막대그래프 그리기

다음은 기본형 코드 이다
a=[5,6,7,8]
b=[9,10,11,12]

x=range(4)
plt.bar(x,a,color='b')
plt.bar(x,b,color='r' ,bottom=a) #바텀을 통해 중첩시킨다 바텀이 아래로 간다.

이번엔 3개를 중첩한다
a=numpy.array([1,2,3,4])
b=numpy.array([5,6,7,8])
c=numpy.array([9,10,11,12])
x= range(4)
plt.bar(x,a,color='b')
plt.bar(x,b,color='g', bottom=a)
plt.bar(x,c,color='r',bottom=a+b)
plt.show()

양방향 막대 그래프 그리기

w_pop=[1,2,3,4]
m_pop=[5,6,7,8]
x=range(4)
plt.barh(x,w_pop, color='r')
plt.barh(x, [-v for v in m_pop], color='b') #음수를 붙여서 반대로 해주면 끝
plt.show()


원형 그래프 그리기

data=[1,2,34,56]
plt.pie(data)
plt.show()

댓글