데이터 블로그

'python'에 해당되는 글 1건

  1. Power BI Python 통합

Power BI Python 통합

PowerBI

최근에 Power BI 2018년 8월 업데이트를 적용하고 옵션을 확인하던 도중 미리 보기 기능에 Python 지원이라는 문구가 보였다. 대박!!! 그토록 염원하던 기능인데, 프리뷰지만 지원한다니 간단히 테스트를 하고 결과를 정리한다.


먼저 Power BI Desktop 옵션에서 미리 보기 기능을 보면 Python 지원을 활성화 할 수 있다.





Python 지원을 활성화하면 시각화 개체 목록에 Python 시각적 개체가 추가된다.





다시 Power BI Desktop에서 옵션을 열어보면 Python 관련 설정이 보인다. Python이 설치된 경로와 IDE에 대해 설정을 할 수 있다. Python 버전에 대한 안내는 없지만 3.6 버전에서 잘 동작하였다. Python IDE은 Python 스크립트를 외부 IDE에서 편집할 수 있게 해준다.





Python 시각적 개체를 보고서 안으로 추가해 보았다. 그러니 화면 아래쪽에 스크립트 편집기 영역이 나타났다. 여기서 바로 스크립트를 작성할 수 있다. 아니면 Python IDE에서 설정한 편집기로 작성중인 스크립트를 띄울 수도 있다.





Python 시각적 개체를 보고서에 추가했으니, 데이터를 지정해보자. 영역에 필요한 필드를 끌어놓으면 된다. 여기서는 간단한 회귀분석을 진행해 보기로 했다. 그래서 x, y 값을 CSV 형식으로 저장한 다음 Power BI Desktop에서 불러와 Python 시각적 개체에 입력하였다.





Python 시각적 개체에 데이터를 입력하니 스크립트 편집기에 뭔가 자동으로 입력된다. 주석으로 처리되어 있지만, 그 내용을 보면 앞에서 입력한 x, y 값을 Pandas Dataframe형식의 dataset이라는 변수로 접근할 수 있음을 알 수 있다. 그리고 필요한 스크립트를 작성해서 데이터를 처리하여 쓰라는 이야기이다.


아무 스크립트를 추가하지 않은 상태에서 Python IDE로 지정한 Visual Studio Code에서 스크립트를 열어 보았다. Python 스크립트 편집기 오른쪽 상단에 버튼을 누르면 바로 열수 있다. Visual Studio Code에 나타난 코드는 아래와 같다.



# Prolog - Auto Generated #
import os, matplotlib.pyplot, uuid, pandas
os.chdir(u'C:/Users/…./PythonEditorWrapper_c6f91fe0-401c-464d-a654-b45c8dcd7871')
dataset = pandas.read_csv('input_df_27b4cbee-ac0c-4f53-90c7-ddbc9d297506.csv')

matplotlib.pyplot.figure(figsize=(5.55555555555556,4.16666666666667))
matplotlib.pyplot.show = lambda args=None,kw=None: matplotlib.pyplot.savefig(str(uuid.uuid1()))
# Original Script. Please update your script content here and once completed copy below section back to the original editing window #
##############################

# Epilog - Auto Generated #
os.chdir(u'C:/Users/…./PythonEditorWrapper_c6f91fe0-401c-464d-a654-b45c8dcd7871')




이제 Power BI Desktop의 데이터를 어떻게 Python에서 불러오는지 명확해진다. Power BI Desktop 데이터를 CSV 형식으로 임시 저장소에  저장하고, 그 파일을 Pandas의 read_csv 메소드로 불러와 dataset 이라는 변수로 접근할 수 있게 해주는 것이다. 또한 Matplotlib가 import 된것을 볼 수 있다. 이것만 보면 모든 것을 알 수 있을듯 하다. Pandas로 데이터를 저장하고, 그 결과는 Matplotlib로 뿌려주는 형식이다.




히스토그램

앞에서 불러온 데이터를 Python 시각적 개체에 나타내어 보자. 먼저 간단하게 히스토그램을 출력해 보았다.


코드

import matplotlib.pyplot as plt
 
plt.hist(dataset['x'], bins=10, facecolor='blue', alpha=0.5)
plt.show()




실행결과




Matplotlib을 import 한것을 보았을 때 결과가 Jupyter Notebook 처럼 나오지 않을까 생각을 했었는데, 그 생각이 맞았다. 이 정도면 Python으로 했던 분석을 Power BI 리포트나 대시보드에 통합하는 것이 문제 없겠다는 생각을 했다.



회귀분석

이번 목표는 기본으로 import 되는 패키지 외에 다른 패키지도 지원하는지 보는 것이다. 다른 패키지도 잘 동작한다면, 그야말로 신세계가 열릴 수 있다. 여기서는 scipy 패키지를 이용해 회귀분석을 수행해 보았다. 추가로 Matplotlib에서 한글 출력 문제가 없는지도 함께 보았다. 그리고 print 문으로 출력하면 어딘가 결과가 혹시나 나올가하여 출력도 해보았다.



코드

import numpy as np
import matplotlib.pyplot as plt

from scipy import stats

plt.scatter(dataset['x'], dataset['y'], c='red', alpha=0.5)
slope, intercept, r_value, p_value, std_err = stats.linregress(dataset['x'], dataset['y'])

plt.text(5,250, 'slope: {}'.format(slope))
plt.text(5,235, 'intercept: {}'.format(intercept))
plt.text(5,220, '결정계수: {}'.format(r_value ** 2))
print("p_value:", p_value)

x_val = np.linspace(0.0, 140.0, 1000)
for predic_x in x_val:
    predic_y = slope * predic_x + intercept
    plt.scatter(predic_x, predic_y, c='blue', alpha=0.5)

plt.show()




실행결과




오호라.. 잘 나온다. 근데 역시나 한글이 깨진다. 해결방법은 구글에서 쉽게 찾을 수 있다. 아래와 같이 코드를 수정(추가) 하였다.


import numpy as np
import matplotlib.pyplot as plt

from scipy import stats
from matplotlib import font_manager, rc

font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
 
plt.scatter(dataset['x'], dataset['y'], c='red', alpha=0.5)
slope, intercept, r_value, p_value, std_err = stats.linregress(dataset['x'], dataset['y'])

plt.text(5,250, 'slope: {}'.format(slope))
plt.text(5,235, 'intercept: {}'.format(intercept))
plt.text(5,220, '결정계수: {}'.format(r_value ** 2))
print("p_value:", p_value)

x_val = np.linspace(0.0, 140.0, 1000)
for predic_x in x_val:
    predic_y = slope * predic_x + intercept
    plt.scatter(predic_x, predic_y, c='blue', alpha=0.5)

plt.show()




결과




이제 한글까지 잘 나온다. 더 많은 패키지를 테스트 해보고 싶었지만, 뭔가 다 확인했다는 마음인지 만사가 귀찮아진다. 구글에서 찾아보니 누가 테스트 해본 결과가 있어 왠만한건 다 되겠구나 싶다. Power BI 블로그에 Python Episode 1 – A New hope라는 글을 보면 Seaborn, Altair, Scikit-Learn, FlashText 등을 테스트한 결과를 볼 수 있다. 모두 잘 나온다.


이제 마지막 테스트만 남았다. 지금까지 작업한 내용을 웹으로 게시하여 웹에서도 잘 나오는지 확인하였다. 결과는 아직 안 된다. 물론 추후 정식 서비스가 될 것이다. 아마도 어느 패키지까지 지원할 것인지, 어떤 이는 이것으로 Machine Learning 돌려서 그 결과도 보려고 할테니 리소스 제한은 어떻게 할 것인지 고심이 많을 것이다.





갈수록 Power BI가 마음에 들어진다.