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์ ํ์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ํตํฉํ๋ฉฐ, ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ด์. ์ด๋ฐ ๊ธฐ์ ์ ๋ฆฌํฌํธ ์๋ํ ๋๊ตฌ, ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์ด๋ฅผ ์ดํดํ๊ธฐ ์ฌ์ด ํํ๋ก ํํํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํด์. ์ฆ๊ฑฐ์ฐ์ จ๊ธฐ๋ฅผ ๋ฐ๋ผ์! ๊ทธ๋ฆฌ๊ณ ์, ์ง์ ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ง๋ฒ์ ์ฝ๋๊ฐ ์ ์ฉํ ๋๊ตฌ๋ก ๋ณํ ๋ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์์ง ๋ง์ธ์!
GO TO FULL VERSION