matplotlib는 정적인 그래프를 그려서 줌인이나 줌아웃, 그래프 다운로드 등을 하려면 코드을 더 쳐서 그래프를 움직이고 변경하는 방식을 반복했습니다. 이 기능을 한번에 할 수 있는 plotly를 소개할까 합니다. plotly가 기능이 많은데 각 기능은 따로 떼어서 작성하고 이번 포스팅에서는 가장 간단한 기능만 소개하겠습니다. 설치 plotly는 아나콘다에서 기본적으로 설치되는 모듈이 아니라서 따로 설치를 해야합니다. plotly를 사용하려면 cufflinks 라는 모듈을 사용해야 그래프가 그려집니다. 데이터프레임을 iplot을 해야하는데 cufflinks가 임포트되어 있지 않으면 오류가 발생하고 작동을 안 합니다. 설치는 pip으로 하면 됩니다. 저는 쥬피터 노트북을 주로 사용해서 쥬피터 노트북 기..
matplotlib를 이용해 3D plot의 앵글을 바꾸는 방법입니다. 3D는 입체라서 여러면이 존재하는데 회전을 시켜가며 보는게 가장 정확하게 그림을 보는거지만 matplotlib는 정적인 그림이라 한면만 보여줍니다. 그래서 앵글을 바꿔서 보여주는 방식으로 되어 있습니다. view_init()를 쓰면 간단히 되어서 이번 포스팅은 굉장히 짧지 않을까 싶습니다. 이전 포스팅에서 3D plot을 그려보았는데 이번엔 다른 면을 보기 위해 각도를 바꾸겠습니다. view_init의 파라미터부터 보면 다음과 같습니다. view_init(elev=None , azim=None) elev : elevation을 약자로 쓴것으로 z plane의 각도를 의미. 입력한 각도대로 위 아래로 변화함. azim : azimuth..
matplotlib를 이용해 3D 그래프를 그려보겠습니다. 분야에 따라서 많이 쓰이는 곳도 있고 아닌 곳도 있지만 여러모로 유용하게 쓸 수 있는 툴입니다. 더 좋은 모듈이 있지만 파이썬의 기본 모듈로 그릴 수 있는 것도 좋을 것 같아서 공유의 의미로 포스팅을 할까 합니다. 3차원 그래프를 그리는 것이니 3차원 좌표가 필요합니다. 3차원 좌표를 바로 만들어서 할 수도 있고 함수에 의해 데이터가 이루어진다면 $ z = f(x,y) $ 으로 여기고 그에 맞게 데이터를 맞춰주면 됩니다. 함수에 의해 움직이는 데이터를 가지고 해보겠습니다. import numpy as np x = np.linspace(50,150,24) y = np.linspace(0.5,2.5,24) x,y = np.meshgrid(x,y) z..
넘파이의 meshgrid() 함수를 이용해 직사각형의 그리드를 만들어보겠습니다. 먼저 직사각형 그리드는 말 그대로 격자를 의미합니다. $ P_{ij}= (x_{i},y_{j}) $ 라고 하면 그림과 같이 하나의 좌표로써 표현 할 수 있는데 그림과 같이 직사각형 그리드 안에서 될 수 있도록 배치를 하는게 meshgrid의 역할입니다. meshgrid()를 이용해서 교정(?)을 해놓으면 3차원 그림을 그릴 때 유용합니다. 매개변수(Parameter) meshgrid()의 파라미터를 살펴보면 다음과 같습니다. np.meshgrid(xi, copy=True, sparse=False, indexing='xy') xi : 그리드에 나타낼 1차원 배열 벡터 copy : 디폴트는 True, False가 되면 메모리 절..
여러모로 많이 쓰이는 히스토그램 그리는 방법에 대해서 알아볼까 합니다. matplotlib를 이용해 그리는데 파라미터가 굉장히 많습니다. 그만큼 변형이 많이 되는 그래프입니다. 파라미터를 보면 굉장히 많습니다. plt.hist(x,bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs) 여기서 메인으로 쓰는 파라미터만 설명을 하겠습니다. x : 데이터값으로 리스트나 ndarray 타입으로 넣음..
데이터프레임의 데이터가 많으면 원하는 자료를 눈으로 찾기가 어려운데 흔히 하는 찾기(ctrl+f)기능과 같은 역할을 하는 str.contains()를 소개하겠습니다. 예제 자료는 국내의 etf 종목리스트입니다. listing이라고 합시다. listing 468개의 종목이 있지만 내가 원하는건 레버리지가 붙은 종목인데 찾을수가 없습니다. 이럴 때 '레버리지' 만 가지고 종목을 찾아보고 싶을때 str.contains()을 씁니다. str.contains() 타입 일단 str.contains()만 했을때 어떤 타입이 나오는지 확인해보겠습니다. 이 함수는 column을 대상으로 찾는 기능이므로 찾을 대상을 column으로 지정하고 해야합니다. listing['Name'].str.contains('레버리지') b..
데이터 값이 어디에 모여있고 어디로 떨어져있는지 알 수 있는 산포도 그래프를 작성해보겠습니다. 작성 방법은 간단합니다. plt.scatter(x,y,c,marker,cmap) 정도를 이용하면 기본적인 plot을 만들 수 있습니다. x,y는 데이터 포지션으로 x축, y축을 무엇으로 할 것인지 정해줍니다. cmap으로 colorbar를 만들 수 있는데 값에 따라 색깔을 정해줍니다. 색깔을 정해주는 데이터 값을 c에 입력합니다. c는 전체 색깔리스트를 입력하는 것이니 리스트로 입력합니다. marker는 표시하는 방식인데 디폴트값은 'o'로 되어있습니다. 즉, 점으로 표시가 됩니다. 딱히 변경할게 없는 파라미터이긴 합니다. 좀 더 풍성하게 그래프를 그릴려면 scatter에 쓰이는 파라미터를 더 알고 있어야 하지..
matplotlib를 이용해 여러개의 그래프로 나오게 하겠습니다. subplot을 이용하면 가능한데 먼저 예제를 통해 설명하겠습니다. import matplotlib.pyplot as plt import numpy as np y = np.random.standard_normal((10,2)) y 2차원 데이터입니다. 2차원 데이터는 그래프가 column별로 나눠지므로 2개의 그래프가 나타나게 됩니다. 이 그래프를 한곳에 넣지 말고 각각 나눠서 넣기 위해 subplot을 사용합니다. plt.subplot(211) plt.plot(y[:,0],label='1column') plt.plot(y[:,0],'ro') plt.legend(loc=0) plt.subplot(212) plt.plot(y[:,1],lab..
matplotlib를 이용해 n차원 데이터를 그리는 방법을 살펴볼까 합니다. 2차원을 먼저 살펴보고 n차원을 그려보겠습니다. n차원 사실상 숫자가 정해져 있지 않으니 n=10으로 정하겠습니다. n차원이라 해서 어려운 건 없고 하나의 plot에 그래프 갯수가 n개 나온다는 것뿐입니다. 2차원 데이터 랜덤으로 (10,2) 모양의 데이터를 가져오겠습니다. import matplotlib as plt import numpy as np y = np.random.standard_normal((10,2)) y 그래프를 그리면 첫번째 column과 두번째 column으로 나눠집니다. plt.plot(y,lw=1.5) plt.plot(y,'ro') 2차원이라서 두개로 나눠집니다. n차원이라면 n으로 나눠지게 됩니다. 구..
join() 함수를이용한 데이터프레임 합치기입니다. join()은 인덱스를 기준으로 왼쪽으로 순차적으로 연결되는 방식입니다. 어떤 인덱스를 기준으로 하느냐에 따라 배열이 달라집니다. df1= pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d']) df2 = pd.DataFrame({'B':[15,25,35,45]},index=['b','c','g','f']) 예를 위해 df1과 df2의 인덱스 중 2개만 같게 했습니다. b,c가 같습니다. df1.join(df2) 먼저 df1으로 join을 하면 df1의 인덱스를 따라서 df2가 붙여지게 됩니다. df2의 b,c 값은 나오고 나머지 값은 NaN로 나오게 됩니다. df2.join(df1) df2를 기준으로 하..
데이터프레임 합치는 방법인 append와 concat에 대해서 알아보겠습니다. 가장 기초적인 방법이고 단순한 결합입니다. 값이 없으면 결측치로 처리하고 마는 방법입니다. 빠르기로 치면 append가 가장 빠르지 않나 싶은데 저도 실제로 작업을 할때 append랑 merge를 주로 쓰게 되는 것 같습니다. append 여기저기서 나타나는 append부터 보겠습니다. 친숙한 메쏘드라 어려움은 없습니다. column을 기준으로 배열이 좌우된다는 것만 기억하고 하면 됩니다. df1 = pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d']) df2 = pd.DataFrame({'A':[10,20,30,40]},index=['e','f','g','h']) df3 = ..
groupby() 함수를 이용해 데이터프레임을 범주별로 묶어 통계내고 범주별로 출력하는 방법을 소개하겠습니다. 엑셀에서 흔히 쓰는 필터링 역할을 groupby()를 통해 할 수 있는데 한 눈에 볼 수 없다는 단점은 있지만 groupby로 손쉽게 묶어낼 수 있고 빠르게 데이터 처리를 할 수 있기 때문에 유용하게 사용됩니다. 예제 자료는 랜덤으로 (9,4)을 만들어서 넣었습니다. 인덱스는 시간데이터로 하였습니다. 랜덤으로 만들고 시간데이터를 만드는 방법은 이미 포스팅을 해놨으니 관련 포스팅을 참고해주시기 바랍니다. df 9개의 행으로 이루어진 데이터프레임입니다. df를 3개씩으로 범주를 넣어 구분하겠습니다. df['Quarter'] = ['Q1','Q1','Q1','Q2','Q2','Q2','Q3','Q3'..
판다스로 시간데이터를 만들어 보겠습니다. 어디서 데이터를 가져오는 게 아니고 직접 만들어서 하는 방법입니다. 타임시리즈 데이터로써 데이터를 다루고 싶을 때 쓰면 유용한데 date_range() 함수를 쓰면 시간데이터를 만들 수 있습니다. dates = pd.date_range('2020-1-1',periods=6,freq='M') 이렇게 간단히 만들 수 있습니다. 타입은 datetime64로 만들어집니다. 파라미터 date_range()의 파라미터는 다음과 같습니다. 파라미터 포맷 기능 start string/datetime 데이터의 시작시간을 지정 end string/datetime 데이터의 끝시간을 지정 periods integer/None 기간의 수를 지정 freq stgring/Dateoffset..
numpy를 이용해 SQL 배열같이 column이 있는 배열로 만들 수 있습니다. tructured array라고 하는데요. 같이 묶음으로 모아서 끌고 가야할때 간단히 모아서 가져가면 좋은 방식입니다. ndarray의 특성을 가지고 SQL처럼 쓸수 있는 장점이 있습니다. 그리고 각 column마다 다른 타입을 배정해줄 수 있습니다. 각 column은 (name,type)으로 이루어져 있고 배정후 사용하게 됩니다. dt = np.dtype([('Name', 'S10'), ('Age', 'i4'), ('Height', 'f'), ('Children/Pets', 'i4', 2)]) s = np.array([('Sims', 45, 1.83, (0, 1)), ('Jane', 55, 1.72, (2, 2))], d..
numpy에 있는 where() 함수에 대해 알아보겠습니다. 결론적으로 말하면 엑셀의 if 함수와 같은 역할을 합니다.쓰는 법도 비슷합니다.파라미터는 다음과 같습니다. np.where(condition,x,y) 엑셀의 if와 같이 condition은 말 그대로 조건이고x는 True일때의 값, y는 False일때의 값을 의미합니다. 예를 들어보겠습니다.a = np.array(range(15))a= a.reshape(3,5)여기서 7보다 큰 수는 1, 아니면 0으로 바꾸겠습니다.np.where(a>7,1,0) 이번에는 짝수,홀수로 나눠보겠습니다.np.where(a%2==0,'even','odd') 이렇듯 자신이 원하는 값으로 바꿀 수 있습니다.이렇게 만들고서 엑셀에 저장하면 엑셀에서 일일히 드래그 작업을 하..