CodeGym /์ž๋ฐ” ์ฝ”์Šค /Python SELF KO /๋ณด๊ณ ์„œ ๊ทธ๋ž˜ํ”„ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๋ฌธ์„œ ํ†ตํ•ฉ

๋ณด๊ณ ์„œ ๊ทธ๋ž˜ํ”„ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๋ฌธ์„œ ํ†ตํ•ฉ

Python SELF KO
๋ ˆ๋ฒจ 42 , ๋ ˆ์Šจ 4
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1. Plotly์—์„œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„ ๋‚ด๋ณด๋‚ด๊ธฐ

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ์นœ๊ตฌ๋“ค๊ณผ ๊ทธ๋ž˜ํ”„ ์•„ํ‹ฐ์ŠคํŠธ ์—ฌ๋Ÿฌ๋ถ„, ํ™˜์˜ํ•ด! ์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์˜ ๋งˆ์ง€๋ง‰ ๊ฐ•์˜๋กœ, ๋ฉ‹์ง€๊ณ  ์ •๋ณด ๊ฐ€๋“ํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‚ด๋ณด๋‚ด๊ณ  ๋ฌธ์„œ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด์ž. ๋‹น์‹ ์˜ ์ƒ์‚ฌ๋ฅผ ๋†€๋ผ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ฉ‹์ง„ ๋ถ„์„๋ฟ ์•„๋‹ˆ๋ผ PowerPoint๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HTML ํŽ˜์ด์ง€์—๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ๋ณด์—ฌ์ฃผ๋ฉด ์˜ค๋Š˜์€ ๋‹น์‹ ์˜ ํ–‰์šด์˜ ๋‚ ์ด๋‹ค!

Plotly ๋‚ด๋ณด๋‚ด๊ธฐ ์ฃผ์š” ํฌ๋งท

Plotly๋Š” ์—ฌ๋Ÿฌ ๋‚ด๋ณด๋‚ด๊ธฐ ํฌ๋งท์„ ์ง€์›ํ•ด:

  • HTML โ€” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ ํ•ฉํ•จ.
  • PNG, JPG, PDF, SVG โ€” ๊ณ ํ’ˆ์งˆ์˜ ์ •์  ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํฌ๋งท
  • JSON โ€” JSON ๊ตฌ์กฐ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ์œ ์šฉํ•จ.

๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐฉ๋ฒ•

Plotly๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•˜๊ณ  ๋™์ ์ธ ๊ทธ๋ž˜ํ”„ ๋งŒ๋“ค๊ธฐ๋กœ ์œ ๋ช…ํ•ด. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ป๊ฒŒ Python์ด ์„ค์น˜๋œ ๋…ธํŠธ๋ถ์„ ๋‹ค ๋“ค๊ณ  ๋‹ค๋‹ˆ์ง€ ์•Š๊ณ ๋„ ์„ธ์ƒ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

Plotly๋Š” HTML๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด. HTML ํŒŒ์ผ์„ ๋™๋ฃŒ์—๊ฒŒ ๋ณด๋‚ด๋ฉด ๊ทธ๋“ค์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ทธ๋ž˜ํ”„์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์–ด. ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” plotly.io.write_html ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด:

Python

import plotly.express as px
import plotly.io as pio

# ๊ฐ„๋‹จํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
df = px.data.iris()  # irises ๋ฐ์ดํ„ฐ์…‹
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")

# ๊ทธ๋ž˜ํ”„๋ฅผ HTML๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
pio.write_html(fig, file='grafik.html', auto_open=True)

auto_open=True ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ €์žฅ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŒŒ์ผ์„ ๋ฐ”๋กœ ์—ด์–ด์ค˜. ๋™๋ฃŒ์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ์ €์žฅ์ด ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์•„์ฃผ ํŽธ๋ฆฌํ•ด.

๋‹ค๋ฅธ ํฌ๋งท์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

Plotly๋Š” PNG, JPEG, SVG ๋“ฑ์˜ ์ด๋ฏธ์ง€ ํฌ๋งท์œผ๋กœ๋„ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด. ์ด๋ฅผ ์œ„ํ•ด plotly.io.write_image ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, kaleido๋ผ๋Š” ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•ด์ค˜:

Bash
pip install -U kaleido

์ด์ œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚ด๋ณด๋‚ด๋ณด์ž:

Python

# PNG ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
pio.write_image(fig, file='grafik.png')

# JPG ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
pio.write_image(fig, file='grafik.jpg', width=800, height=400, scale=2)

2. ๋ณด๊ณ ์„œ์— ๊ทธ๋ž˜ํ”„ ํฌํ•จํ•˜๊ธฐ

๋‚ด๋ณด๋‚ธ ๊ทธ๋ž˜ํ”„๋Š” ๋ถ„์„ ๋ณด๊ณ ์„œ์˜ ํ•„์ˆ˜ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚ด๋ณด๋‚ธ HTML ๊ทธ๋ž˜ํ”„๋Š” ํšŒ์‚ฌ ํฌํ„ธ์— ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์›จ๋น„๋‚˜์—์„œ ๋ฐœํ‘œํ•  ๋ณด๊ณ ์„œ์— ์‰ฝ๊ฒŒ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด.

Word ๋ฐ PDF ๋ฌธ์„œ์— ๊ทธ๋ž˜ํ”„ ์‚ฝ์ž…

Microsoft Word ๋˜๋Š” PDF ๋ฌธ์„œ์— ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ฉํ•˜๋ ค๋ฉด, ๊ทธ๋ž˜ํ”„๋ฅผ PNG ๋˜๋Š” JPG ํ˜•์‹์œผ๋กœ ์ €์žฅํ•œ ๋‹ค์Œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋ผ. ํŒŒ์ผ์„ ๋ฌธ์„œ๋กœ ๋“œ๋ž˜๊ทธํ•˜๊ฑฐ๋‚˜, Word์™€ PDF ํŽธ์ง‘๊ธฐ์˜ ์‚ฝ์ž… ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋ผ.

Python

fig.write_image("sales_chart.pdf")

PDF๋Š” ๊ณ ํ’ˆ์งˆ ๊ทธ๋ž˜ํ”„ ์ธ์‡„์™€ ๋ฐฐํฌ์— ํŽธ๋ฆฌํ•ด. Plotly์—์„œ kaleido๋ฅผ ์‚ฌ์šฉํ•ด PDF๋กœ ๋‚ด๋ณด๋‚ผ ๊ฒฝ์šฐ, ํŒŒ์ผ ํ˜•์‹๋งŒ ์ง€์ •ํ•˜๋ฉด ๋ผ.

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋ฅผ ์›น ๋ฌธ์„œ์— ํ†ตํ•ฉ

HTML ํ˜•์‹์˜ Plotly ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋Š” ์›น ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด. ์ด๋Š” ์˜จ๋ผ์ธ ๋ณด๊ณ ์„œ์™€ ์›น ๋ฌธ์„œ์— ํŠนํžˆ ์œ ์šฉํ•ด. ๊ทธ๋ž˜ํ”„๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด HTML ํŒŒ์ผ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ HTML ์ฝ”๋“œ๋ฅผ ์›น ํŽ˜์ด์ง€์— ์ง์ ‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋Š” HTML ํŽ˜์ด์ง€์— iframe์„ ์‚ฌ์šฉํ•ด ํฌํ•จํ•  ์ˆ˜ ์žˆ์–ด:

HTML

<iframe src="grafik.html" width="800" height="600"></iframe>

์ด๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ํŽ˜์ด์ง€์— ํฌํ•จ์‹œ์ผœ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค˜.

JSON์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๋‚ด๋ณด๋‚ด๊ธฐ

JSON ํฌ๋งท์€ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ €์žฅํ•ด ์‹œ์Šคํ…œ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ์œ ์šฉํ•˜๋ฉฐ, ๋‚˜์ค‘์— Plotly๋กœ ๋‹ค์‹œ ๊ฐ€์ ธ์™€ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ์–ด.

Python

# ๊ทธ๋ž˜ํ”„๋ฅผ JSON์œผ๋กœ ์ €์žฅํ•˜๊ธฐ
fig.write_json("sales_chart.json")

๋ณด๊ณ ์„œ ์œ ํ˜•๋ณ„ ํฌ๋งท ๋ฐ ์„ค์ • ์„ ํƒ

  • ์ถœํŒ ๋ฐ ์ธ์‡„์šฉ: ๊ณ ํ•ด์ƒ๋„ (dpi=300) PNG ๋˜๋Š” PDF ํฌ๋งท์„ ์‚ฌ์šฉํ•ด, ์ด๋ฏธ์ง€๊ฐ€ ์„ ๋ช…ํ•˜๊ณ  ๊ณ ํ’ˆ์งˆ์ž„์„ ์œ ์ง€.
  • ์›น ๋ฌธ์„œ ๋ฐ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์šฉ: PNG์™€ SVG ํฌ๋งท์€ ์›น ๋ฌธ์„œ์— ์ด์ƒ์ ์ด๋ฉฐ, SVG๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ์œ ๋ฆฌํ•จ.
  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ณด๊ณ ์„œ์šฉ: Plotly ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋ฅผ HTML ํ˜•์‹์œผ๋กœ ์ €์žฅํ•ด ์›น ํŽ˜์ด์ง€๋‚˜ ์˜จ๋ผ์ธ ๋ฌธ์„œ์— ํ†ตํ•ฉ.

3. ์˜ˆ์ œ

์ง€์‹์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ณ  ์ด๋ฅผ ๊ฐ„๋‹จํ•œ HTML ๋ฌธ์„œ์— ํ†ตํ•ฉํ•ด ๋ณด์ž.

๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ:

Python

import plotly.express as px
import plotly.io as pio

df = px.data.tips()
fig = px.bar(df, x='day', y='total_bill', color='sex', barmode='group')
pio.write_html(fig, file='tips_graph.html', auto_open=True)

๊ทธ๋ž˜ํ”„ ํฌํ•จ HTML ๋ฌธ์„œ ์ƒ์„ฑ:

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ index.html๋กœ ์ €์žฅํ•ด:

HTML

<!DOCTYPE html>
<html lang="ko-KR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ํŒ ๋ณด๊ณ ์„œ</title>
</head>
<body>
    <h1>์š”์ผ๋ณ„ ํŒ ๋ถ„์„</h1>
    <p>์•„๋ž˜๋Š” ์š”์ผ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ผ ์ด ํŒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.</p>
    <iframe src="tips_graph.html" width="900" height="500" frameBorder="0"></iframe>
</body>
</html>

๋ฌธ์„œ ๋ณด๊ธฐ:

index.html์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด ๊ฒฐ๊ณผ๋ฅผ ์ฆ๊ฒจ๋ผ! ๋ฐฉ๊ธˆ ๋™๋ฃŒ๋‚˜ ์ธํ„ฐ๋„ท์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“ค์—ˆ์–ด.

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋Š” ๋ฉ‹์žˆ์„ ๋ฟ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฅผ ๊นŠ๊ฒŒ ๋ถ„์„ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐœํ‘œํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ด. ์ด๋ฅผ ํ™œ์šฉํ•ด ๋ณด๊ณ ์„œ๋ฅผ ๋” ์ธ์ƒ์ ์ด๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž.

Plotly์™€ Matplotlib ํ•™์Šต์„ ๋งˆ์น˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ‹์ง€๊ฒŒ ์‹œ๊ฐํ™”ํ•ด์„œ ์ตœ๋Œ€์˜ ํšจ์šฉ์„ฑ์„ ์–ป๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ ์˜ˆ์ˆ ์ž„์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์–ด. ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ™œ์šฉํ•ด์„œ ๋„ˆ๋งŒ์˜ ๋ฉ‹์ง„ ์‹œ๊ฐํ™” ๊ฑธ์ž‘์„ ๋งŒ๋“ค์–ด๋ณด๊ธธ ๋ฐ”๋ผ. ํ–‰์šด์„ ๋นŒ์–ด!

1
ะžะฟั€ะพั
Plotly ์ž‘์—…,ย  42 ัƒั€ะพะฒะตะฝัŒ,ย  4 ะปะตะบั†ะธั
ะฝะตะดะพัั‚ัƒะฟะตะฝ
Plotly ์ž‘์—…
Plotly ์ž‘์—…
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION