정보통신기술(ICT)

유전체 염기서열과 파이썬 코드

해머슴 2024. 11. 26. 10:41
import tkinter as tk
from tkinter import filedialog, messagebox
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 유전체 염기서열 -> 숫자 매핑
def sequence_to_numbers(sequence):
    mapping = {'A': 1, 'T': 2, 'C': 3, 'G': 4}  # 기본 매핑
    return [mapping.get(base, 0) for base in sequence]

# 그래프 그리기
def plot_graph(numbers):
    x = np.arange(len(numbers))
    y = np.array(numbers)
    curvature = np.gradient(np.gradient(y))  # 곡률 계산
    plt.figure(figsize=(10, 5))
    plt.plot(x, y, label='Data')
    plt.plot(x, curvature, label='Curvature', linestyle='--')
    plt.legend()
    plt.title("Genomic Sequence Curvature Graph")
    plt.xlabel("Position")
    plt.ylabel("Value")
    plt.grid()
    plt.show()

# 데이터 변환 및 그래프 표시
def process_data():
    sequence = input_field.get("1.0", tk.END).strip()
    if not sequence:
        messagebox.showwarning("Input Error", "유전체 염기서열을 입력하세요!")
        return
   
    numbers = sequence_to_numbers(sequence)
    result_field.delete("1.0", tk.END)
    result_field.insert(tk.END, f"Converted Numbers: {numbers}")
    plot_graph(numbers)

# GUI 생성
root = tk.Tk()
root.title("줄기세포 유전체 곡률 그래프")

# 입력 영역
tk.Label(root, text="염기서열 입력").pack()
input_field = tk.Text(root, height=5, width=50)
input_field.pack()

# 변환 버튼
convert_button = tk.Button(root, text="변환 및 그래프 표시", command=process_data)
convert_button.pack()

# 결과 출력 영역
tk.Label(root, text="변환된 숫자").pack()
result_field = tk.Text(root, height=5, width=50)
result_field.pack()

# 실행
root.mainloop()