CodeGym /ํ–‰๋™ /Python SELF KO /๋ฆฌํฌํŠธ์™€ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ

๋ฆฌํฌํŠธ์™€ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ

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

1. ๋ฆฌํฌํŠธ ์ž‘์—…์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

์ž, ์—ฌ๋Ÿฌ๋ถ„, ์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ๊ฒƒ์„ ๋ณด๊ธฐ ์ข‹๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  ๋ฉ‹์ง€๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ์‹œ๊ฐ„์ด์—์š”. ์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ ๋ฆฌํฌํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๊ฑฐ์˜ˆ์š”. Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ง„ํ•œ ์ปคํ”ผ ํ•œ ์ž” ํ›„์ฒ˜๋Ÿผ ๊ฐ€๋ณ๊ฒŒ ๋Š๊ปด์งˆ ๋งŒํผ์š”!

๋ฆฌํฌํŠธ ์„ ํƒ ๋ฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„

๋จผ์ € ์‚ฌ์šฉ์ž๊ฐ€ ํ‘œ์‹œํ•  ๋ฆฌํฌํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”. ์ด ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฒ„ํŠผ, ๋‹ค์–‘ํ•œ ๋ฆฌํฌํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์˜์—ญ์„ ํฌํ•จํ•  ๊ฑฐ์˜ˆ์š”.


import tkinter as tk
from tkinter import ttk

# ๋ฉ”์ธ ์œˆ๋„์šฐ ์ƒ์„ฑ
root = tk.Tk()
root.title("๋ฆฌํฌํŠธ์™€ ๋ฐ์ดํ„ฐ")

# ๋ฆฌํฌํŠธ ์„ ํƒ์„ ์œ„ํ•œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด ์ถ”๊ฐ€
report_label = ttk.Label(root, text="๋ฆฌํฌํŠธ๋ฅผ ์„ ํƒํ•˜์„ธ์š”:")
report_label.pack(pady=10)

report_options = ["๋ฆฌํฌํŠธ โ„–1", "๋ฆฌํฌํŠธ โ„–2", "๋ฆฌํฌํŠธ โ„–3"]
selected_report = tk.StringVar(value=report_options[0])

report_menu = ttk.Combobox(root, textvariable=selected_report, values=report_options)
report_menu.pack(pady=10)

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฃจํ”„ ์‹œ์ž‘
root.mainloop()

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ œ๊ณต๋œ ๋ฆฌํฌํŠธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์ฐฝ์ด ๋‚˜ํƒ€๋‚  ๊ฑฐ์˜ˆ์š”. ์•„์ง ๊ทธ๋ž˜ํ”„๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ, ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์„ ๊ตฌ์ถ•ํ•  ๊ธฐ๋ฐ˜์ด์—์š”.

2. ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ†ตํ•ฉ

Matplotlib์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ทธ๋ž˜ํ”„ ํ‘œ์‹œํ•˜๊ธฐ

์ด์ œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”. ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” ์ธ๊ธฐ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Matplotlib์„ ์‚ฌ์šฉํ•  ๊ฑฐ์˜ˆ์š”. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์ด๋ฉฐ Tkinter ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋จผ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๊ฐ€ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:


pip install matplotlib

์ด์ œ FigureCanvasTkAgg๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Tkinter์™€ ํ†ตํ•ฉํ•˜๋ฉด์„œ ์ธํ„ฐํŽ˜์ด์Šค์— ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณผ๊ฒŒ์š”.


from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# ๊ทธ๋ž˜ํ”„ ์˜์—ญ ์ƒ์„ฑ
def plot_report():
    # ํ…Œ์ŠคํŠธ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
    fig = Figure(figsize=(5, 4), dpi=100)
    plot = fig.add_subplot(111)
    plot.plot([1, 2, 3, 4, 5], [2, 3, 5, 7, 11])  # ์˜ˆ์ œ ๋ฐ์ดํ„ฐ

    # Tkinter ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ
    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.draw()
    canvas.get_tk_widget().pack()

# ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฒ„ํŠผ ์ถ”๊ฐ€
plot_button = ttk.Button(root, text="๋ฆฌํฌํŠธ ์ƒ์„ฑ", command=plot_report)
plot_button.pack(pady=20)

์œ„ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "๋ฆฌํฌํŠธ ์ƒ์„ฑ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๊ฐ„๋‹จํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋ฌผ๋ก , ์ด๊ฒƒ์€ ์‹œ์ž‘์ผ ๋ฟ์ด์—์š”. ์‹ค์ œ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ„๋‹จํ•œ ๊ทธ๋ž˜ํ”„ ๋Œ€์‹  ๋ฆฌํฌํŠธ์˜ ์ง„์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฑฐ์˜ˆ์š”.

3. ์‹ค์Šต ํ™œ์šฉ

๊ทธ๋ž˜ํ”„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•œ ๋ฆฌํฌํŠธ ์ƒ์„ฑ ๋ฐ ๋ณด๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘

์ด์ œ ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌํ•จ๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ์„ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ข€ ๋” ๋ณต์žกํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณผ๊ฒŒ์š”. ์ด๋ฅผ ์œ„ํ•ด, ์—ฌ๋Ÿฌ๋ถ„์€ ์ฒ˜๋ฆฌ๋œ Excel ๋˜๋Š” CSV ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•œ ๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™”๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์–ด์š”.


import pandas as pd
import random

def load_data():
    # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    data = pd.DataFrame({
        "x": list(range(1, 11)),
        "y": [random.randint(1, 10) for _ in range(10)]
    })
    return data

def plot_data_report():
    data = load_data()
    fig = Figure(figsize=(5, 4), dpi=100)
    plot = fig.add_subplot(111)
    plot.plot(data['x'], data['y'])

    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.draw()
    canvas.get_tk_widget().pack()

plot_button.config(command=plot_data_report)

๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋ฆฌํฌํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๊ธฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹จ์ˆœํžˆ ๋ฐ๋ชจ์šฉ์ด ์•„๋‹ˆ๋ผ ์œ ์šฉํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, PDF ๋˜๋Š” Excel ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ ๋™๋ฃŒ๋‚˜ ์ƒ์‚ฌ์™€ ๋ฆฌํฌํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์ฃ :


from tkinter import filedialog
import matplotlib.pyplot as plt

def export_report():
    # ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
    data = load_data()
    fig, ax = plt.subplots()
    ax.plot(data['x'], data['y'])

    # ์ €์žฅ ๊ฒฝ๋กœ ์„ ํƒ
    file_path = filedialog.asksaveasfilename(defaultextension=".pdf",
                                             filetypes=[("PDF ํŒŒ์ผ", "*.pdf"), ("๋ชจ๋“  ํŒŒ์ผ", "*.*")])
    if file_path:
        fig.savefig(file_path)
        print(f"๋ฆฌํฌํŠธ๊ฐ€ {file_path}์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")

# ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฒ„ํŠผ ์ถ”๊ฐ€
export_button = ttk.Button(root, text="๋ฆฌํฌํŠธ ๋‚ด๋ณด๋‚ด๊ธฐ", command=export_report)
export_button.pack(pady=10)

export_report ํ•จ์ˆ˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•  ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•ด์š”. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด๋ฅผ ํŽธ๋ฆฌํ•œ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์š”.

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

1
ะžะฟั€ะพั
์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ,ย  50 ัƒั€ะพะฒะตะฝัŒ,ย  4 ะปะตะบั†ะธั
ะฝะตะดะพัั‚ัƒะฟะตะฝ
์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ
์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION