Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바네트워크
- 웹 크롤링
- write by chatGPT
- 소프트웨어공학
- spring data jpa
- 데이터베이스
- spring integration
- NIO
- flet
- jpa
- 리눅스
- Java
- 유닉스
- 파이썬
- 코틀린
- 자바암호
- 자바
- GPT-4's answer
- 고전역학
- 역학
- chatGPT's answer
- Database
- 시스템
- JVM
- write by GPT-4
- kotlin
- android
- python
- oracle
- 인프라
Archives
- Today
- Total
기억을 지배하는 기록
[추가자료] 9.3 데이터 시각화 plotly- dice (주사위) 본문
Python for Beginners
[추가자료] 9.3 데이터 시각화 plotly- dice (주사위)
Andrew's Akashic Records 2024. 6. 13. 15:02728x90
Plotly는 데이터 시각화를 위한 매우 강력한 라이브러리 중 하나로, 대화형 그래프를 생성할 수 있게 도와줍니다. Plotly는 웹 기반의 도구이며, Python, R, MATLAB, Perl, Julia 등 다양한 프로그래밍 언어를 지원합니다. 특히 Python에서의 사용이 매우 인기가 있습니다.
주요 특징
- 대화형 차트: Plotly를 사용하여 만든 차트는 사용자가 마우스로 호버하거나 클릭할 때 상세 정보를 볼 수 있는 대화형 기능을 제공합니다.
- 다양한 차트 유형: Plotly는 선형 차트, 산점도, 히스토그램, 막대 그래프, 파이 차트, 산점도 행렬, 3D 차트, 지리적 맵 등 다양한 차트와 그래프 유형을 지원합니다.
- 웹 통합: Plotly 그래프는 HTML과 JavaScript를 기반으로 하기 때문에 웹사이트나 웹 애플리케이션에 쉽게 통합할 수 있습니다.
- 쉬운 사용법: Plotly의 API는 매우 직관적이고 사용하기 쉬워, 복잡한 데이터 시각화도 간단히 코드 몇 줄로 구현할 수 있습니다.
- 서버나 클라우드 통합: Plotly는 Plotly 클라우드나 Plotly Enterprise 서버에 그래프를 호스팅할 수 있어, 온라인에서 데이터를 공유하고 협업할 수 있습니다.
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
'Python for Beginners' 카테고리의 다른 글
GeoJSON 데이터 파일을 이용한 세계 지진의 크기와 위치 시각화 (0) | 2024.06.17 |
---|---|
CSV 데이터 파일을 이용한 데이터 시각화 (0) | 2024.06.17 |
[추가자료] 9.3 데이터 시각화 Matplotlib - RandomWalk(무작위 이동) (1) | 2024.06.11 |
[추가자료] 9.3 데이터 시각화 Matplotlib - 직선, 점 그래프 (1) | 2024.06.11 |
[파이썬 크래시 코스 예제] 외계인 침공 -최종 (1) | 2024.06.10 |
Comments