시각화/대시보드는 관심을 가지고 지켜보는 분야 중의 하나인데, 최근 인사이트에서 <Visualize This> 2판을 번역한 <데이터 리터러시를 높이는 데이터 시각화>책이 출간되어 주말을 이용해서 읽었다. 제목에서 알 수 있듯이 시각화하는 방법(코드부터 각종 도구 사용법까지)을 소개한다. 예전에 책만 출판사에서 출간된 <데이터 시각화 교과서>로 스터디 모임을 진행했는데, 그 책에는 코드가 제공되지 않아서 열심히 파이썬과 씨본으로 직접 책의 내용을 시각화해 보았다. 

 

대략 360쪽,

 

 

책은 각종 데이터를 다루는 방법부터 시간, 범주, 관계, 공간을 중심으로 시각화하는 방법과 고려사항을 하나씩 설명한다. R이나 파이썬 때로는 어도비 도구를 사용하여 최종 시각화 화면을 만드는 과정, 그 속에서 고민해야할 지점들을 소개한다.

책을 읽으면서 무엇보다도 저자가 시각화를 바라보는 관점이 좋았다. 그중 마음에 드는 몇 구절을 소개해 보자면 다음과 같다.

  • 우리는 데이터를 통해 인사이트를 얻을 수 있고, 인사이트와 맥락이 결합하면 이야기가 만들어진다. 이런 데이터를 통한 이야기가 사람들이 업무와 일상생활에서 정보에 기반하여 더 나은 결정을 내리는데 도움을 준다.(4쪽)
  • 데이터들은 서로 관계 맺고 상호 작용한다. 그걸 찾아내는 건 당신의 몫이다.(8쪽)
  • 데이터를 분석하고 시각화에 초점을 맞추는 가장 좋은 방법은 질문을 던지는 것이다. 이런 질문과 답변으로 품질을 검증하고, 데이터의 의미를 탐색하고, 통찰력을 전달한다.(9쪽)
  • 결국 전하고 싶은 이야기는 데이터 자체가 아니라 그 데이터가 무엇을 나타내는지에 관한 것이다.
  • 시각화 과정은 데이터를 재료로 더 복잡한 무언가의 추상적인 모습을 만드는 것이다. 데이터는 보통 단순화된 것이지만, 상황을 측정하는 최선의 방법이다. 그래서 이를 분석하고 탐색한다. 데이터로 이야기를 전할 때, 분석과정에서 발견한 것을 강조해 다른 이들이 추상적인 것을 현실과 연결하도록 돕는다.(340쪽)
  • 시각화를 배울 때는 제약과 규칙을 중심으로 배우는 게 일반적이다. 마치 올바른 차트를 만들려면 기능성을 제한해야 하는 것처럼 보인다. 처음 시작할 때는 이런 접근이 중요하다. 글쓰기를 배우는 것과 같은 이치다. 맞춤법을 익히고 문장 부호의 쓰임을 알고 문장 구조를 배우고, 생각을 문단과 절로 나누는 법을 먼저 배운다....... 기초를 다지고 나면 그때부터 진짜 재미가 시작된다. (344쪽~345쪽)

앞에서 소개한 <데이터 시각화 교과서>나 인사이트에서 출간되었던  전작 <월스트리트 저널 인포그래픽 가이드>를 읽어보았다면 수월하게 읽을 수 있는 내용이다. 살짝 아쉬운 점은 R을 주로 다룬다는 점인데, 우리나라에서는 R의 사용자층이 넓지 않아서, 원서가 파이썬이었으면 더 좋지 않았을까 하는 생각이 들었다.

 

코드를 완성해 가면서 데이터를 시각화한다.

 

 

책의 내용이 정적인 시각화에 중점을 두고 있는데, 이는 인쇄 매체나 정적인 웹 페이지를 대상으로 하기 때문일 것이다. 우리가 데이터를 분석하고 그 통찰력을 전달하는 매개체가 동적인 웹으로 이동하고 있으므로, 그에 대한 시각화 방법론을 보충해 주면 좋겠다는 생각이 들었다. 3판이 나올때 쯤에는 그러한 내용이 추가되지 않을까 기대해 본다.

 

 

 

데이터 리터러시를 높이는 데이터 시각화 | 네이선 야우 - 교보문고

데이터 리터러시를 높이는 데이터 시각화 |

product.kyobobook.co.kr

 

 

데이터 시각화 교과서 | 클라우스 윌케 - 교보문고

데이터 시각화 교과서 | 정확성과 심미성을 모두 갖춘 데이터 시각화에 대한 바이블! 통계적 본질에 근거해 데이터 분석 결과를 효율적으로 전달하는 데이터 시각화에 대한 모든 것!데이터 시각

product.kyobobook.co.kr

 

 

월스트리트저널 인포그래픽 가이드 | 도나 M. 웡 - 교보문고

월스트리트저널 인포그래픽 가이드 | 통계 그래픽스의 거장 에드워드 티프티의 이론과 다양한 실무예제를 수록한 인포그래픽 기본서!『월스트리트저널 인포그래픽 가이드: 데이터, 사실, 수치

product.kyobobook.co.kr

 

반응형

 

이번에 나눌 이야기는 파이썬 클래스에서 동적으로 메서드를 생성하는 방법에 대한 이야기입니다. dataclass 데코레이터의 동작 원리를 살펴보다가 알게된 내용을 정리해 봅니다.

 

EXEC 함수 

먼저 exec 함수에 대해 알아봅니다.

이 함수는 텍스트로 작성된 코드를 실행하기 위한 용도로 사용됩니다. 즉, 파이썬 코드 문자열을 동적으로 실행하는 기능을 제공합니다.

exec('print("Hello World")')

 

이 코드를 실행하면 마치 파이썬 코드로 print("Hello World")를 실행한 것과 동일한 결과를 얻습니다. 여기까지는 많이들 보셨을 텐데요, exec 함수의 서명(signature)는 다음과 같습니다.

exec(object[, globals[, locals]])

 

두번째 인자와 세번째 인자는 스코프의 네임스페이스입니다.  따라서 특정 인수값을 전달하지 않으면 현재의 전역/지역 네임스페이스를 기반으로 실행됩니다.

exec(object) # 현재 스코프에서 코드 실행
exec(object, globals) # 주어진 전역 네임스페이스에서 실행
exec(object, globals, locals) # 전역과 지역 네임스페이스를 분리하여 실행

 

 

SETATTR 함수

setattr 함수는 객체의 속성을 동적으로 추가하거나 변경하는 함수입니다. 즉, 클래스/객체에 속성을 추가하거나 기존 속성을 수정할 수 있습니다. 이 함수의 서명은 다음과 같습니다.

setattr(object, name, value)
# object: 속성을 추가하거나 수정할 대상 객체
# name: 속성의 이름(문자열)
# value: 설정할 속성 값

 

예를 들어 빈 Person이라는 클래스를 만들고, 여기에 name이라는 속성을 동적으로 추가해 봅시다.

class Person:
    pass  # 빈 클래스 정의

p = Person()

# 동적으로 'name' 속성 추가
setattr(p, 'name', 'neozest')
print(p.name)  # neozest

 

 

클래스에 메서드 동적으로 추가하기

파이썬에서 함수는 1급 시민입니다. 즉, 함수 자체를 인수로 주고 받을 수도 있습니다.

이번에는 Animal 클래스를 만들고, 여기에 speak 메서드를 동적으로 추가해 보겠습니다. 먼저 클래스 코드!

 

class Animal:
    def __init__(self, name):
        self.name = name

a = Animal("Dog")
a.speak()  # AttributeError 발생!

 

AttributeError 예외가 발생했습니다. 당연한 결과죠. Animal 클래스에 speak 메서드가 정의되어 있지 않습니다. 

 

이번엔 동적으로 메서드를 추가해 보겠습니다. 본질적으로 어떤 함수 정의 객체를 클래스에 추가하는 작업입니다. 이를 보다 추상화해서 특정 클래스에 특정 코드를 메서드로 추가하는 함수를 만들어 봅니다.

def add_method(cls, method_name, method_body):
    code = f"def {method_name}(self): {method_body}"
    exec(code, globals(), locals())
    setattr(cls, method_name, locals()[method_name])

 

code는 함수를 선언하기 위해 만든 문자열입니다. 이 함수 정의 코드 문자열을 exec 함수를 사용하여 전역/지역 네임스페이스에서 실행합니다. 그렇게 만들어진 속성(메서드)를 setattr함수를 사용하여 특정 클래스의 신규 속성으로 등록합니다.

이제 Animal 클래스에 새로운 메서드를 추가한 후 speak 메서드를 호출해 봅니다.

add_method(Animal, "speak", 'print(f"{self.name} makes a sound")')

a = Animal("Dog")
a.speak()  # Dog makes a sound

 

이제 문제없이 speak 메서드를 호출할 수 있습니다.

 

심지어 람다함수로도 메서드를 동적으로 추가할 수 있습니다.

setattr(Animal, "shout", lambda self: "Roar!")

print(a.shout())  # Roar!

 

 

마무리 - dataclass 데코레이터

dataclass 데코레이터는 클래스 정의를 자동화하는 기능을 제공하여 __init__, __repr__, __eq__와 같은 던더 메서드를 직접 작성하지 않아도 자동으로 생성해 줍니다. dataclass 데코레이터는  클래스의 __annotations__ 던더 속성을 이용하여 사용자 정의 클래스를 수정합니다. 이 속성은 클래스에 대한 메타정보,즉  변수, 속성, 함수 인자, 반환값 등에 대한 타입 힌트를 담고 있습니다. 이 속성을 이용하여 필요한 메서드를 동적으로 클래스에 추가할 수 있습니다.

 

알아두면 좋을법한 관련 정보

데코레이터, 네임스페이스에 대한 보다 자세한 이야기는 제가 번역하고 인사이트 출판사에서 펴낸 <Python How-To: 파이썬다운 코드를 개발하는 63가지 실용기법>의 다음 부분에 설명되어 있습니다.

  • dataclass 데코레이터:Python How-to의 9.2절에 자세히 설명되어 있습니다.
  • LEGB 네임스페이스 규칙: Python How-to의 10.3절에 자세히 설명되어 있습니다.
  • 데코레이터: Python How-To의 7.3절에 자세히 설명되어 있습니다.

책을 구매하시면 출판사에서 더 좋은 파이썬 책을 만드는데 도움이 되지 않을까요. :)

 

알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=369848931

교보: https://product.kyobobook.co.kr/detail/S000217294649

YES24: https://www.yes24.com/product/goods/151253343

 

 

파이썬다운 코드를 개발하는 63가지 실용 기법 | 프로그래밍 인사이트 Programming Insight | 용 추이

63가지 핵심 파이썬 기술을 익힐 수 있는 간단하지만 강력한 방법을 제시한다. 예를 들어, ‘시퀀스에서 항목을 찾으려면 어떻게 해야 할까?’와 같은 질문에서 출발하여 매우 명확한 기본 해결

www.aladin.co.kr

 

 

반응형

+ Recent posts