Special Lecture

Are you ready to thrive in an AI world?

Nakcho Choi

November 12, 2024

강의 노트

Are you ready to thrive in an AI world?

Survey

Introduction


  • 무엇을 알려줄 것인가?

  • 4 년동안 배운 화공생물공학과 지식을 기반으로 화공생물공학 공정을 프로그램을(ASPEN) 이용해 설계하는 수업

  • AI를 이용한 화공과 실험하는 법

  • 앞으로 어떻게 공부하고 일해야 하는가?

최근 경험 사례

각 기업들이 무슨 연구를 하는지..   이거 다 보려니 눈이 아프다. 
AI로 이런거 할 수 있나? 
국책 과제 기획을 해야 하는데...


논문 다운로드

Shiseido_2019-2024
Unilever_2019-2024
P&G_2019-2024
Loreal_2019-2024
Kao_2019-2024
Beiersdorfr_2019-2024


R과 클로드를 이용하여 최신 화장품 트랜드 분석 보고

질문


나는 동국대학교 화학생물공학과 특강을 하고 싶다. 담당 교수님 전공은 ASPEN 을 이용한 화공 시뮬레이션이다. 나는 AI를 통하여 아래와 같은 방법으로 쉽게 학생들이 다양한 주제로 시뮬레이션을 할 수 있는 방법을 알려주고 싶다.

강의 내용을 아래 내용을 넣어서 만들어줘. (code 포함)


[Simulation tools]

Rshiny, Streamlit, FlexPDE, NetLogo

[주제]

물질전달, 열역학, 반응공학, 유체역학, 열전달

Rshiny Simulation by Claude


Prompt Story


Python Streamlit by Claude


Prompt Story


  1. 1D Diffusion


  1. 2D Diffusion

클로드에서 직접 시뮬레이션


프롬프트

확산시뮬레이션

비어-램버트 시뮬레이션

Aspen Simulation


무슨 소프트웨어인가?

Aspen

Mimicking Aspen simulation

Custom Modeler


다음은 전공 교수님 수업 중 aspen custom modler 를 이용한 혼합 믹서 디자인 시뮬레이션이다. 이것을 python streamlit으로 구현하는 code를 만들어라. 시간에 따른 유체 이동이 시각적으로 보이도록 하라. 그리고 관련 수식을 문구에 넣고 이것이 의미하는 바를 설명하라.


알겠습니다. Aspen Custom Modeler의 혼합 믹서 디자인 시뮬레이션을 Python Streamlit으로 구현하겠습니다. 시간에 따른 유체 이동을 시각화하고, 관련 수식과 그 의미를 설명하겠습니다.
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import time

def mixer_simulation(initial_masses, flow_rates, mixing_time, num_steps):
    components = ['C', 'Fe', 'Mn', 'Cr']
    num_components = len(components)
    
    masses = np.zeros((num_steps, num_components))
    masses[0] = initial_masses
    
    total_mass = np.sum(initial_masses)
    dt = mixing_time / num_steps
    
    for i in range(1, num_steps):
        for j in range(num_components):
            inflow = flow_rates[j] * dt
            outflow = (masses[i-1, j] / total_mass) * np.sum(flow_rates) * dt
            masses[i, j] = masses[i-1, j] + inflow - outflow
        
        total_mass = np.sum(masses[i])
    
    return masses

def create_mixer_diagram():
    fig, ax = plt.subplots(figsize=(8, 6))
    
    # 믹서 본체
    mixer = plt.Rectangle((0.3, 0.1), 0.4, 0.6, fill=False)
    ax.add_patch(mixer)
    
    # 입구 파이프
    ax.arrow(0.1, 0.8, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc='b', ec='b')
    ax.arrow(0.1, 0.6, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc='r', ec='r')
    ax.arrow(0.1, 0.4, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc='g', ec='g')
    ax.arrow(0.1, 0.2, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc='y', ec='y')
    
    # 출구 파이프
    ax.arrow(0.7, 0.4, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc='purple', ec='purple')
    
    # 레이블
    ax.text(0.05, 0.8, 'C', fontsize=12, va='center')
    ax.text(0.05, 0.6, 'Fe', fontsize=12, va='center')
    ax.text(0.05, 0.4, 'Mn', fontsize=12, va='center')
    ax.text(0.05, 0.2, 'Cr', fontsize=12, va='center')
    ax.text(0.95, 0.4, 'Mixture', fontsize=12, va='center')
    
    ax.text(0.5, 0.9, 'Mixer', fontsize=16, ha='center')
    
    ax.set_xlim(0, 1)
    ax.set_ylim(0, 1)
    ax.axis('off')
    
    return fig

st.title("혼합 믹서 시뮬레이션")

st.sidebar.header("입력 매개변수")
initial_masses = [
    st.sidebar.number_input(f"{comp} 초기 질량 (kg)", value=10.0, step=0.1) 
    for comp in ['C', 'Fe', 'Mn', 'Cr']
]
flow_rates = [
    st.sidebar.number_input(f"{comp} 유입 속도 (kg/s)", value=0.1, step=0.01) 
    for comp in ['C', 'Fe', 'Mn', 'Cr']
]
mixing_time = st.sidebar.number_input("혼합 시간 (s)", value=100.0, step=1.0)
num_steps = 100

st.write("### 믹서 시뮬레이션 개략도")
diagram = create_mixer_diagram()
st.pyplot(diagram)

if st.button("시뮬레이션 시작"):
    masses = mixer_simulation(initial_masses, flow_rates, mixing_time, num_steps)
    components = ['C', 'Fe', 'Mn', 'Cr']
    
    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 12))
    
    progress_bar = st.progress(0)
    status_text = st.empty()
    plot_spot = st.empty()
    
    for i in range(num_steps):
        # 막대 그래프 업데이트
        ax1.clear()
        ax1.bar(components, masses[i])
        ax1.set_ylim(0, np.max(masses) * 1.1)
        ax1.set_title(f'Component Masses in Mixer (Time: {i*mixing_time/num_steps:.2f} s)')
        ax1.set_ylabel('Mass (kg)')
        
        # 파이 차트 업데이트
        ax2.clear()
        ax2.pie(masses[i], labels=components, autopct='%1.1f%%', startangle=90)
        ax2.set_title(f'Mass Fractions in Mixer (Time: {i*mixing_time/num_steps:.2f} s)')
        
        plot_spot.pyplot(fig)
        progress_bar.progress((i + 1) / num_steps)
        status_text.text(f"{int((i+1)/num_steps*100)}% Complete")
        
        time.sleep(0.1)  # 애니메이션 속도 조절
    
    st.write(f"확산 계수: {flow_rates} kg/s")
    st.write(f"총 시뮬레이션 시간: {mixing_time} s")

    st.write("### 관련 수식 및 설명")
    st.latex(r"\frac{dm_i}{dt} = F_{i,in} - \frac{m_i}{M_{total}} \sum_{j} F_{j,out}")
    st.write("여기서:")
    st.write("- $m_i$: 컴포넌트 $i$의 질량")
    st.write("- $F_{i,in}$: 컴포넌트 $i$의 유입 속도")
    st.write("- $M_{total}$: 믹서 내 총 질량")
    st.write("- $\sum_{j} F_{j,out}$: 총 유출 속도")
    
    st.write("이 수식은 믹서 내에서 각 컴포넌트의 질량 변화를 나타냅니다:")
    st.write("1. 유입: 각 컴포넌트는 일정한 속도로 믹서에 유입됩니다.")
    st.write("2. 유출: 각 컴포넌트의 유출 속도는 현재 믹서 내 해당 컴포넌트의 질량 분율에 비례합니다.")
    st.write("3. 완전 혼합: 믹서 내부는 항상 완전히 혼합되어 있다고 가정합니다.")
    st.write("4. 질량 보존: 총 유입 속도와 총 유출 속도가 같아 믹서 내 총 질량은 일정하게 유지됩니다.")
    
    st.write("이 시뮬레이션은 시간에 따른 믹서 내 각 컴포넌트의 질량과 질량 분율 변화를 보여줍니다. "
             "초기에는 주입된 양에 따라 분포가 달라지지만, 시간이 지남에 따라 유입 속도에 비례하는 "
             "안정적인 상태에 도달하게 됩니다.")

st.write("이 시뮬레이션은 화학공정에서 중요한 혼합 공정을 모델링합니다. 실제 공정에서는 이러한 원리를 이용하여 "
         "원료 배합, 반응기 설계, 제품 품질 제어 등 다양한 응용이 가능합니다.")

이 Python Streamlit 코드는 Aspen Custom Modeler의 혼합 믹서 디자인 시뮬레이션을 구현합니다. 주요 특징은 다음과 같습니다:

  1. 시간에 따른 유체 이동 시각화:
    • 막대 그래프: 각 컴포넌트의 질량 변화를 보여줍니다.
    • 파이 차트: 각 컴포넌트의 질량 분율 변화를 보여줍니다.
    • 애니메이션: 시간에 따른 변화를 동적으로 표시합니다.
  2. 사용자 상호작용:
    • 사이드바에서 각 컴포넌트의 초기 질량과 유입 속도를 설정할 수 있습니다.
    • 혼합 시간을 조절할 수 있습니다.
  3. 수식 및 설명:
    • 믹서 내 각 컴포넌트의 질량 변화를 나타내는 미분방정식을 제시합니다.
    • 수식의 각 항목에 대한 설명을 제공합니다.
    • 시뮬레이션의 물리적 의미와 가정에 대해 설명합니다.
  4. 시뮬레이션 로직:
    • 각 시간 단계마다 컴포넌트의 유입, 유출, 그리고 총 질량을 계산합니다.
    • 완전 혼합을 가정하여 유출 시 각 컴포넌트의 질량 분율에 비례하여 유출됩니다.

이 시뮬레이션은 학생들이 혼합 공정의 동적 특성을 이해하는 데 도움을 줄 것입니다. 특히, 초기 조건과 유입 속도가 최종 평형 상태에 미치는 영향, 그리고 시스템이 평형 상태에 도달하는 과정을 직접 관찰할 수 있습니다. 이는 화학공학에서 중요한 개념인 물질 수지, 혼합 동역학, 그리고 정상 상태 도달 과정을 시각적으로 이해하는 데 큰 도움이 될 것입니다.

심화 질문


ok. 에러가 없다. 다만 시간에 따른 변화를 그래프로 좀 더 효과적으로 보여주어야 한다. 그리고 시뮬레이션 속도가 너무 느리다 좀 더 빠르게 진행되면서 변화 모습을 볼 수 있도록 초기 조건을 수정하라.  그리고 그래프의 형태를 시간에 따른 변화를 효과적으로 보여줄 수 있도록 하라.
ok. 교수님이 실험 내용을 설명하듯이 시뮬레이션 시작전에 이 실험의 의미와 반응 속도 방정식 및 물리적 의미를 설명하고, 시뮬레이션이 끝나면 결과를 설명하는 문구가 나타나도록 하시오.
그래프에 나오는 x축, y축, title 은 영어로 바꾸어라. 나머지는 한글로 보여주도록 하라.
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import time


def mixer_simulation(initial_masses, flow_rates, mixing_time, num_steps):
    components = ["C", "Fe", "Mn", "Cr"]
    num_components = len(components)

    masses = np.zeros((num_steps, num_components))
    masses[0] = initial_masses

    total_mass = np.sum(initial_masses)
    dt = mixing_time / num_steps

    for i in range(1, num_steps):
        for j in range(num_components):
            inflow = flow_rates[j] * dt
            outflow = (masses[i - 1, j] / total_mass) * np.sum(flow_rates) * dt
            masses[i, j] = masses[i - 1, j] + inflow - outflow

        total_mass = np.sum(masses[i])

    return masses


def create_mixer_diagram():
    fig, ax = plt.subplots(figsize=(8, 6))

    # 믹서 본체
    mixer = plt.Rectangle((0.3, 0.1), 0.4, 0.6, fill=False)
    ax.add_patch(mixer)

    # 입구 파이프
    ax.arrow(
        0.1, 0.8, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc="b", ec="b"
    )
    ax.arrow(
        0.1, 0.6, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc="r", ec="r"
    )
    ax.arrow(
        0.1, 0.4, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc="g", ec="g"
    )
    ax.arrow(
        0.1, 0.2, 0.2, 0, width=0.02, head_width=0.05, head_length=0.05, fc="y", ec="y"
    )

    # 출구 파이프
    ax.arrow(
        0.7,
        0.4,
        0.2,
        0,
        width=0.02,
        head_width=0.05,
        head_length=0.05,
        fc="purple",
        ec="purple",
    )

    # 레이블
    ax.text(0.05, 0.8, "C", fontsize=12, va="center")
    ax.text(0.05, 0.6, "Fe", fontsize=12, va="center")
    ax.text(0.05, 0.4, "Mn", fontsize=12, va="center")
    ax.text(0.05, 0.2, "Cr", fontsize=12, va="center")
    ax.text(0.95, 0.4, "Mixture", fontsize=12, va="center")

    ax.text(0.5, 0.9, "Mixer", fontsize=16, ha="center")

    ax.set_xlim(0, 1)
    ax.set_ylim(0, 1)
    ax.axis("off")

    return fig


st.title("혼합 믹서 시뮬레이션")

st.sidebar.header("입력 매개변수")
initial_masses = [
    st.sidebar.number_input(f"{comp} 초기 질량 (kg)", value=val, step=0.1)
    for comp, val in zip(["C", "Fe", "Mn", "Cr"], [5.0, 15.0, 10.0, 20.0])
]
flow_rates = [
    st.sidebar.number_input(f"{comp} 유입 속도 (kg/s)", value=val, step=0.01)
    for comp, val in zip(["C", "Fe", "Mn", "Cr"], [0.2, 0.1, 0.15, 0.05])
]
mixing_time = st.sidebar.number_input("혼합 시간 (s)", value=50.0, step=1.0)
num_steps = 25  # 스텝 수를 줄여 시뮬레이션 속도를 높입니다

st.write("### 믹서 시뮬레이션 개략도")
diagram = create_mixer_diagram()
st.pyplot(diagram)

if st.button("시뮬레이션 시작"):
    masses = mixer_simulation(initial_masses, flow_rates, mixing_time, num_steps)
    components = ["C", "Fe", "Mn", "Cr"]

    fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 18))

    progress_bar = st.progress(0)
    status_text = st.empty()
    plot_spot = st.empty()

    for i in range(num_steps):
        # 막대 그래프 업데이트
        ax1.clear()
        ax1.bar(components, masses[i])
        ax1.set_ylim(0, np.max(masses) * 1.1)
        ax1.set_title(
            f"Component Masses in Mixer (Time: {i*mixing_time/num_steps:.2f} s)"
        )
        ax1.set_ylabel("Mass (kg)")

        # 파이 차트 업데이트
        ax2.clear()
        ax2.pie(masses[i], labels=components, autopct="%1.1f%%", startangle=90)
        ax2.set_title(
            f"Mass Fractions in Mixer (Time: {i*mixing_time/num_steps:.2f} s)"
        )

        # 선 그래프 업데이트
        ax3.clear()
        for j, comp in enumerate(components):
            ax3.plot(
                np.linspace(0, i * mixing_time / num_steps, i + 1),
                masses[: i + 1, j],
                label=comp,
            )
        ax3.set_xlabel("Time (s)")
        ax3.set_ylabel("Mass (kg)")
        ax3.set_title("Component Masses Over Time")
        ax3.legend()

        plot_spot.pyplot(fig)
        progress_bar.progress((i + 1) / num_steps)
        status_text.text(f"{int((i+1)/num_steps*100)}% Complete")

        time.sleep(0.02)  # 애니메이션 속도를 더 빠르게 조절

    st.write(f"유입 속도: {flow_rates} kg/s")
    st.write(f"총 시뮬레이션 시간: {mixing_time} s")

    st.write("### 관련 수식 및 설명")
    st.latex(r"\frac{dm_i}{dt} = F_{i,in} - \frac{m_i}{M_{total}} \sum_{j} F_{j,out}")
    st.write("여기서:")
    st.write("- $m_i$: 컴포넌트 $i$의 질량")
    st.write("- $F_{i,in}$: 컴포넌트 $i$의 유입 속도")
    st.write("- $M_{total}$: 믹서 내 총 질량")
    st.write("- $\sum_{j} F_{j,out}$: 총 유출 속도")

    st.write("이 수식은 믹서 내에서 각 컴포넌트의 질량 변화를 나타냅니다:")
    st.write("1. 유입: 각 컴포넌트는 일정한 속도로 믹서에 유입됩니다.")
    st.write(
        "2. 유출: 각 컴포넌트의 유출 속도는 현재 믹서 내 해당 컴포넌트의 질량 분율에 비례합니다."
    )
    st.write("3. 완전 혼합: 믹서 내부는 항상 완전히 혼합되어 있다고 가정합니다.")
    st.write(
        "4. 질량 보존: 총 유입 속도와 총 유출 속도가 같아 믹서 내 총 질량은 일정하게 유지됩니다."
    )

    st.write(
        "이 시뮬레이션은 시간에 따른 믹서 내 각 컴포넌트의 질량과 질량 분율 변화를 보여줍니다. "
        "초기에는 주입된 양에 따라 분포가 달라지지만, 시간이 지남에 따라 유입 속도에 비례하는 "
        "안정적인 상태에 도달하게 됩니다."
    )

st.write(
    "이 시뮬레이션은 화학공정에서 중요한 혼합 공정을 모델링합니다. 실제 공정에서는 이러한 원리를 이용하여 "
    "원료 배합, 반응기 설계, 제품 품질 제어 등 다양한 응용이 가능합니다."
)

무엇이 바뀐것인가?

FlexPDE


FlexPDE

소개

FlexPDE Simulation

플러그 흐름 반응기 (PFR) 모델 분석

1. 모델 개요

이 시뮬레이션은 플러그 흐름 반응기(Plug Flow Reactor, PFR)의 동작을 모델링합니다. PFR은 연속적인 튜브형 반응기로, 반응물이 관을 따라 흐르면서 화학 반응이 진행됩니다.

2. 주요 변수 및 방정식

2.1 변수
  • \(C\): 반응물 농도 (mol/m³)
  • \(T\): 반응기 내부 온도 (K)
  • \(L\): 반응기 길이 (1 m)
  • \(u\): 유체 흐름 속도 (0.1 m/s)
  • \(k_0\): 반응 속도 상수의 전지수 인자 (10⁶ 1/s)
  • \(E_a\): 활성화 에너지 (50,000 J/mol)
  • \(R\): 기체 상수 (8.314 J/mol/K)
  • \(\Delta H\): 반응 엔탈피 (-50,000 J/mol, 발열 반응)
  • \(\rho\): 유체 밀도 (1000 kg/m³)
  • \(C_p\): 열용량 (4000 J/kg/K)
  • \(h\): 열전달 계수 (100 W/m²/K)
  • \(D\): 반응기 직경 (0.1 m)
  • \(T_w\): 반응기 벽 온도 (300 K)
2.2 주요 방정식
  1. 아레니우스 방정식 (반응 속도 상수): \(k = k_0 \exp(-\frac{E_a}{RT})\)

  2. 반응 속도 (1차 반응 가정): \(r = kC\)

  3. 물질 수지 방정식: \(u\frac{dC}{dx} = -r\)

  4. 에너지 수지 방정식: \(u\rho C_p\frac{dT}{dx} = -\Delta Hr + \frac{4h}{D}(T_w-T)\)

3. 시뮬레이션 결과 해석

3.1 농도 프로필
  • 반응기 길이에 따라 농도가 1 mol/m³에서 약 0.27 mol/m³로 감소합니다.
  • 이는 반응이 진행되면서 반응물이 소모되고 있음을 나타냅니다.
  • 농도 감소 곡선의 형태는 1차 반응의 특성을 보여줍니다.
3.2 온도 프로필
  • 반응기 길이에 따라 온도가 300 K에서 약 359 K로 상승합니다.
  • 온도 상승은 발열 반응(\(\Delta H < 0\))으로 인한 것입니다.
  • 온도 상승 곡선이 완만해지는 것은 반응기 벽을 통한 열손실 때문입니다.

4. 화학공학적 의의

  1. 반응 진행: 농도 감소는 반응의 진행을 나타냅니다. 출구에서의 농도를 통해 전환율을 계산할 수 있습니다.

  2. 열 효과: 온도 상승은 발열 반응의 특성을 보여줍니다. 이는 반응 속도에 영향을 미치며, 안전성 문제와도 연결됩니다.

  3. 열전달: 온도 프로필이 비선형적인 것은 반응열 생성과 벽면을 통한 열손실의 균형을 보여줍니다.

  4. 반응기 설계: 이러한 프로필을 통해 원하는 전환율 달성을 위한 반응기 길이, 냉각/가열 요구사항 등을 결정할 수 있습니다.

  5. 안전성: 온도 상승은 반응의 안전성과 직결됩니다. 과도한 온도 상승은 부반응이나 재료의 열화를 일으킬 수 있습니다.

  6. 최적화: 농도와 온도 프로필을 분석하여 수율, 선택성, 에너지 효율 등을 최적화할 수 있습니다.

  7. 스케일업: 이러한 모델을 바탕으로 실험실 규모에서 산업적 규모로의 스케일업 시 예상되는 변화를 예측할 수 있습니다.

이 시뮬레이션은 PFR 내에서 일어나는 복잡한 상호작용을 잘 보여줍니다. 반응 공학, 열전달, 유체역학의 원리가 어떻게 실제 반응기 설계와 운전에 적용되는지 이해하는 데 도움이 됩니다. 또한, 이러한 모델링 기술은 실험 비용을 줄이고 다양한 운전 조건에서의 반응기 성능을 예측하는 데 필수적입니다.

FlexPDE 결과

TITLE 'Plug Flow Reactor Model'
COORDINATES cartesian1
VARIABLES
    C    ! Concentration of reactant (changed from C1 for consistency)
    T    ! Temperature (changed back from Temp for simplicity)
SELECT
    errlim=1e-4
DEFINITIONS
    L = 1        ! Reactor length (m)
    u = 0.1      ! Flow velocity (m/s)
    k0 = 1e6     ! Pre-exponential factor (1/s)
    Ea = 50000   ! Activation energy (J/mol)
    R_gas = 8.314 ! Gas constant (J/mol/K)
    dH = -50000  ! Heat of reaction (J/mol)
    rho = 1000   ! Density (kg/m^3)
    Cp = 4000    ! Heat capacity (J/kg/K)
    h = 100      ! Heat transfer coefficient (W/m^2/K)
    D = 0.1      ! Reactor diameter (m)
    Tw = 300     ! Wall temperature (K)
    
    k = k0*exp(-Ea/(R_gas*T))  ! Reaction rate constant
    r = k*C                    ! Reaction rate
INITIAL VALUES
    C = 1
    T = 300
EQUATIONS
    C: u*dx(C) = -r
    T: u*rho*Cp*dx(T) = -dH*r + 4*h*(Tw-T)/D
BOUNDARIES
    REGION 1
        START(0)
        !NATURAL(C) = 0
        !NATURAL(T) = 0
        LINE TO (L)
PLOTS
    FOR t = 0 BY 0.1 TO 1
        ELEVATION(C) FROM (0) TO (L)
        ELEVATION(T) FROM (0) TO (L)
END

FlexPDE 결과


NetLogo by Claude

컴퓨터 공학? 판 뒤집혔다!


  • 문과, 이과 , 예체능 분리의 시대
  • 전문적인 지식 훈련이 중요한 시대
  • 질서, 경험이 중요한 시대

  • AI를 수단으로 경계가 허물어짐
  • 세상의 이치에 대한 물음이 더 중요
  • 기초 과학적 지식으로 문제 해결 의지 필요

예제

어느날 A군은 한 강연회에서 페어트레이딩 관련 내용을 듣습니다. 

웹페이지로 한번 구현해볼까 하고 생각해봅니다.
유투브로 python streamlit 강의 기초를 들어봅니다. 

코딩 프로그램을 설치합니다. 

- Python, VS code
- Cursor

AI에게 우선 내용을 설명하고
KOSPI와 S&P 500 지수를 이용하여 상관관계 보는 
**Rshiny 코드**를 만들어달라고 함
버그 수정 ~~

AI에게 두 지수를 이용하여 Pair trading 하는 코드 작성 요청

버그 수정 ~~

아이디어 구현까지 걸린 시간 2일 ~~

여러분은 어떻게 생각하나요?

Break Time

2부



경험사례

About

Nakcho Choi

Those who recognize the value of their data will experience freedom.