Akashic Records

[추가자료] 9.3 데이터 시각화 plotly- dice (주사위) 본문

Python for Beginners

[추가자료] 9.3 데이터 시각화 plotly- dice (주사위)

Andrew's Akashic Records 2024. 6. 13. 15:02
728x90

 

Plotly Python Graphing Library

 

Plotly는 데이터 시각화를 위한 매우 강력한 라이브러리 중 하나로, 대화형 그래프를 생성할 수 있게 도와줍니다. Plotly는 웹 기반의 도구이며, Python, R, MATLAB, Perl, Julia 등 다양한 프로그래밍 언어를 지원합니다. 특히 Python에서의 사용이 매우 인기가 있습니다.

주요 특징

  1. 대화형 차트: Plotly를 사용하여 만든 차트는 사용자가 마우스로 호버하거나 클릭할 때 상세 정보를 볼 수 있는 대화형 기능을 제공합니다.
  2. 다양한 차트 유형: Plotly는 선형 차트, 산점도, 히스토그램, 막대 그래프, 파이 차트, 산점도 행렬, 3D 차트, 지리적 맵 등 다양한 차트와 그래프 유형을 지원합니다.
  3. 웹 통합: Plotly 그래프는 HTML과 JavaScript를 기반으로 하기 때문에 웹사이트나 웹 애플리케이션에 쉽게 통합할 수 있습니다.
  4. 쉬운 사용법: Plotly의 API는 매우 직관적이고 사용하기 쉬워, 복잡한 데이터 시각화도 간단히 코드 몇 줄로 구현할 수 있습니다.
  5. 서버나 클라우드 통합: Plotly는 Plotly 클라우드나 Plotly Enterprise 서버에 그래프를 호스팅할 수 있어, 온라인에서 데이터를 공유하고 협업할 수 있습니다.

Plotly Open Source Graphing Library for Python

Python에서의 사용

Python에서 Plotly를 사용하려면, 먼저 Plotly 패키지를 설치해야 합니다. 일반적으로 pip를 사용하여 설치할 수 있습니다:

pip install plotly

간단한 예제

import plotly.graph_objects as go

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [11, 22, 33, 44, 55]

# 데이터로 그래프 객체 생성
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers'))

# 그래프 표시
fig.show()

이 예제는 x와 y 데이터의 간단한 산점도를 생성하고, 대화형 기능을 가진 그래프 창을 보여줍니다.

Plotly는 대화형 데이터 시각화에 탁월한 라이브러리로, 데이터 과학자나 분석가가 데이터를 더 깊이 이해하고 탐색할 수 있게 해 줍니다.

 

주사위 결과 차트 예제 

die.py

from random import randint

class Die:
    """주사위 하나를 나타내는 클래스"""

    def __init__(self, num_side=6):
        """6면체 주사위"""
        self.num_side = num_side

    def roll(self):
        """1에서 주사위 면까지의 임의의 숫자를 반환한다."""
        return randint(1,self.num_side)

 

die_visual.py

import plotly.express as px

from die import Die

def roll_die(die, roll_count=1000):
    # 몇 회 굴린 결과를 리스트에 저장한다.
    results = []

    for roll_num in range(roll_count):
        result = die.roll()
        results.append(result)

    # 결과를 분석합니다.
    frequencies = []
    poss = range(1, die.num_side + 1)
    for value in poss:
        frequency = results.count(value)
        frequencies.append(frequency)

    return frequencies


def roll_die(die1, die2, roll_count=1000):
    # 몇 회 굴린 결과를 리스트에 저장한다.
    results = []

    for roll_num in range(roll_count):
        result = die1.roll()+die2.roll()
        results.append(result)

    # 결과를 분석합니다.
    frequencies = []
    poss = range(2, die1.num_side + die2.num_side + 1)
    for value in poss:
        frequency = results.count(value)
        frequencies.append(frequency)

    return frequencies

def draw_chart():
    roll_count = 1000
    # 결과를 시각화 합니다.
    title = f"Results of Rolling One D6 {roll_count:,} Times"
    labels = {'x':'Result', 'y':'Frequency of Result'}

    # 6면체 주사위를 만든다.
    die = Die(6)
    frequencies = roll_die(die, roll_count)
    fig = px.bar(x=range(1, die.num_side+1), y=frequencies, title=title, labels=labels)
    fig.show()

def draw_dual_dice():
    roll_count = 5000
    # 결과를 시각화 합니다.
    title = f"Results of Rolling Two D6 and D10 {roll_count:,} Times"
    labels = {'x':'Result', 'y':'Frequency of Result'}

    # 6면체 주사위를 만든다.
    die1 = Die(6)
    die2 = Die(10)

    frequencies = roll_die(die1, die2, roll_count)
    fig = px.bar(x=range(2, die1.num_side+die2.num_side+1), y=frequencies, title=title, labels=labels)

    # 추가 커스텀
    fig.update_layout(xaxis_dtick=1)

    #fig.show()
    fig.write_html('dice_visual.html')

if __name__ == '__main__':
    #draw_chart()
    draw_dual_dice()

 

이 파이썬 코드는 Die 클래스를 사용하여 주사위를 시뮬레이션하고, 주사위를 굴린 결과를 Plotly를 이용해 시각화하는 프로그램입니다. 코드의 핵심은 주사위 객체의 생성, 결과의 수집 및 분석, 그리고 그 결과를 시각화하는 데 있습니다. 코드는 몇 개의 주요 부분으로 구성되어 있습니다.

1. Die 클래스

  • 클래스 정의: Die 클래스는 주사위를 모델링하며, 주사위의 면 수(num_side)를 인자로 받습니다. 기본적으로 6면체 주사위로 설정됩니다.
  • 주사위 굴리기 (roll 메소드): roll 메소드는 주사위의 한 면을 무작위로 선택하여 반환합니다. 이는 randint 함수를 사용하여 1과 주사위의 면 수 사이에서 임의의 수를 반환합니다.

2. roll_die 함수

  • 단일 주사위 굴리기: 첫 번째 roll_die 함수는 하나의 주사위를 입력으로 받고, 주어진 횟수(roll_count, 기본값 1000)만큼 주사위를 굴린 후 각 면이 나타나는 빈도를 계산합니다.
  • 두 개의 주사위 굴리기: 두 번째 roll_die 함수는 두 개의 주사위(die1, die2)를 입력으로 받고, 두 주사위의 결과 합을 계산하여 같은 방식으로 빈도를 분석합니다.

3. draw_chart 함수

  • 결과 시각화: 이 함수는 하나의 주사위를 굴린 결과를 바 차트로 시각화합니다. Plotly Express의 px.bar를 사용하여 x축은 주사위 결과, y축은 각 결과의 빈도를 나타냅니다.
  • 차트 제목 및 라벨: 차트의 제목과 축 라벨을 설정합니다.

4. draw_dual_dice 함수

  • 결과 시각화: 이 함수는 두 주사위를 굴린 결과를 바 차트로 시각화합니다. 두 주사위의 결과의 합에 대한 빈도를 표시합니다.
  • 차트 제목 및 라벨: 마찬가지로 차트의 제목과 축 라벨을 설정합니다.
  • 추가 커스텀: x축의 눈금 간격을 설정하여 결과를 더 명확하게 표시합니다.
  • 결과 저장: 그래프를 HTML 파일로 저장하여 웹 브라우저에서 볼 수 있습니다.

실행 제어

  • __main__: 이 스크립트는 직접 실행될 때 draw_chart 또는 draw_dual_dice 함수 중 하나를 호출합니다. 현재 설정으로는 draw_dual_dice 함수가 호출되어 두 주사위의 결과를 시각화하고 HTML로 저장합니다.

코드의 특징

이 코드는 객체지향 프로그래밍 원리를 활용하여 주사위 객체를 구현하고, 함수적 접근을 통해 데이터를 처리하며, 시각화 라이브러리를 통해 결과를 직관적으로 표현합니다. 이를 통해 데이터 시각화 및 분석의 전체 프로세스를 간결하게 보여줍니다.

728x90
Comments