<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mxnxae__.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 17 Oct 2025 15:20:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>mxnxae__.log</title>
            <url>https://velog.velcdn.com/images/mxnxae__/profile/816e4987-34e0-483a-9ba5-5d87b9a4a2a2/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. mxnxae__.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mxnxae__" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[정보처리기사 - c언어 ]]></title>
            <link>https://velog.io/@mxnxae__/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-c%EC%96%B8%EC%96%B4</link>
            <guid>https://velog.io/@mxnxae__/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-c%EC%96%B8%EC%96%B4</guid>
            <pubDate>Fri, 17 Oct 2025 15:20:15 GMT</pubDate>
            <description><![CDATA[<h1 id="매개변수-전달-방법">매개변수 전달 방법</h1>
<h2 id="call-by-value">call by value</h2>
<pre><code class="language-c">int addTen(int a) {
    a = 7;
    return a;
}

int main() {
    int a = 5;
    addTen(a);
    printf(&quot;함수 밖: a = %d\n&quot;, a);
    return 0;
}
</code></pre>
<p>이러면 출력값 5</p>
<p>main()에서 a는 5로 선언됨.</p>
<p>addTen(a)를 호출할 때,
→ a의 값 5가 복사되어 함수 매개변수 a(다른 변수) 에 전달됨.</p>
<p>main의 a   = 5
addTen의 a = 5 (복사본)</p>
<p>함수 안에서 a = 7;을 해도, 복사본(addTen의 a) 을 바꾸는 것.
→ main의 a는 그대로 5인 상태로 남음</p>
<p>addTen 함수가 return a;로 7을 반환하지만, main()에서 그 반환값을 변수에 저장하지 않음
addTen(a); -&gt; 이렇게만 써놨기 때문에 리턴값이 버려짐</p>
<p><strong>만약 7로 바꾸고 싶다면?</strong></p>
<p>✅: 리턴값을 받아서 저장</p>
<pre><code class="language-c">int main() {
    int a = 5;
    a = addTen(a);   // 리턴값(7)을 저장
    printf(&quot;함수 밖: a = %d\n&quot;, a);
    return 0;
}</code></pre>
<p>➡️ 출력: 함수 밖: a = 7</p>
<pre><code class="language-c">#include &lt;stdio.h&gt;

int addTen(int a) {
    a = 7;
    printf(&quot;%d &quot;, a);   // 따옴표(&quot;&quot;) 안에 %d 넣기, 뒤에 공백 하나
    return a;
}

int main() {
    int a = 5;
    addTen(a);
    printf(&quot;%d\n&quot;, a);  // &quot;함수 밖: &quot; 대신 숫자만 출력하도록
    return 0;
}</code></pre>
<p>하면 출력값 7 5</p>
<pre><code class="language-c">#include &lt;stdio.h&gt;

int change(int x) {
    x = x + 5;
    printf(&quot;함수 안: x = %d\n&quot;, x);
    return x;
}

int main() {
    int a = 10;
    change(a);
    printf(&quot;함수 밖: a = %d\n&quot;, a);
    return 0;
}
</code></pre>
<p>함수 안 15, 함수 밖 10 </p>
<h1 id="value-vs-reference">value vs reference</h1>
<blockquote>
<p>call by <strong>value</strong> vs call by <strong>reference</strong></p>
</blockquote>
<pre><code class="language-c">void add(int *x) {
    *x = *x + 1;   // x가 가리키는 &quot;원본 int&quot;를 1 증가
}

int calc(int x, int *y) {
    x = x + 2;     // x는 값 복사본
    add(y);        // y는 이미 &quot;주소(int*)&quot;다. 그대로 전달
    printf(&quot;calc 안: x = %d, *y = %d\n&quot;, x, *y);
    return x + *y;
}

int main() {
    int a = 5, b = 10;
    int result = calc(a, &amp;b);  // &amp;b: b의 주소를 넘김
    printf(&quot;main: a = %d, b = %d, result = %d\n&quot;, a, b, result);
}</code></pre>
<p><strong>흐름 추적</strong></p>
<ol>
<li><p><code>main</code>: <code>a=5</code>, <code>b=10</code>.</p>
</li>
<li><p><code>calc(a, &amp;b)</code> 호출</p>
<ul>
<li><code>x</code>는 <strong>값 복사</strong> → <code>x = 5</code></li>
<li><code>y</code>는 <strong>포인터</strong>(주소) → <code>y = &amp;b</code></li>
</ul>
</li>
<li><p><code>x = x + 2;</code> → <code>x = 7</code> (원본 <code>a</code>는 그대로 5)</p>
</li>
<li><p><code>add(y)</code> 호출</p>
<ul>
<li><code>add</code>의 매개변수 타입은 <code>int *x</code></li>
<li>지금 <code>y</code>는 이미 <code>int*</code>이므로 <strong>그대로</strong> 넘기는 게 맞음 (<code>add(y)</code>)</li>
<li><code>add</code> 내부에서 <code>*x = *x + 1;</code> → <code>*(&amp;b) = b = 10 + 1 = 11</code></li>
<li>즉 <strong>b가 11</strong>이 됨</li>
</ul>
</li>
<li><p>그래서 <code>calc</code> 안에서 <code>*y</code>는 <code>*(&amp;b)</code> = <code>b</code> = <strong>11</strong>
출력: <code>calc 안: x = 7, *y = 11</code></p>
</li>
<li><p><code>return x + *y</code> → <code>7 + 11 = 18</code></p>
</li>
<li><p><code>main</code> 출력: <code>a = 5</code>(안 바뀜), <code>b = 11</code>(주소로 바뀜), <code>result = 18</code></p>
</li>
</ol>
<p><strong>헷갈린 포인트</strong></p>
<ul>
<li><p>“<code>&amp;</code> 없으면 주소로 안 들어가는 거 아냐?”</p>
<ul>
<li><strong>맞아.</strong> 주소를 처음 만들 때(원본 <code>int</code>의 주소가 필요할 때)는 <code>&amp;</code>가 필요해. 그래서 <code>calc(a, &amp;b)</code>에서 <code>&amp;b</code>를 쓴 거야.</li>
</ul>
</li>
<li><p>그 다음 단계에서 <code>y</code>는 이미 <strong>주소(int*)</strong> 를 담고 있어.</p>
<ul>
<li><code>add</code>도 <code>int*</code>를 받으니까 <strong>그냥 <code>add(y)</code></strong>로 호출하는 게 정답.</li>
<li>만약 <code>add(&amp;y)</code>라고 했다면 <strong>`int</strong><code>(이중 포인터)를 넘기는 꼴**이 되고, 함수 시그니처도</code>void add(int **x)` 여야 해. 전혀 다른 이야기.</li>
</ul>
</li>
</ul>
<p><strong>한 줄 요약</strong></p>
<ul>
<li>주소를 <strong>처음 생성</strong>할 때만 <code>&amp;원본변수</code>가 필요.</li>
<li>이미 포인터(주소) 변수라면 그 <strong>포인터 자체</strong>를 넘긴다. (<code>add(y)</code>)</li>
</ul>
<h2 id="이중포인터">이중포인터</h2>
<pre><code class="language-c">#include &lt;stdio.h&gt;

void addOne(int *x) {
    *x = *x + 1;
}

void changePtr(int **p) {
    **p = **p + 2;
    printf(&quot;changePtr 안: **p = %d\n&quot;, **p);
}

int main() {
    int a = 5;
    int *ptr = &amp;a;

    addOne(ptr);
    changePtr(&amp;ptr);

    printf(&quot;main: a = %d\n&quot;, a);
    return 0;
}</code></pre>
<p><strong>전체 흐름</strong></p>
<pre><code class="language-c">int a = 5;
int *ptr = &amp;a;

addOne(ptr);     // (*ptr) = (*ptr) + 1 → a = 6
changePtr(&amp;ptr); // (**p) = (**p) + 2 → a = 8

printf(&quot;main: a = %d\n&quot;, a); // ??? 왜 8이지?</code></pre>
<p><strong>addOne() 함수 내부</strong></p>
<pre><code class="language-c">void addOne(int *x) {
    *x = *x + 1;
}</code></pre>
<ul>
<li>매개변수 <code>x</code>는 <code>ptr</code>의 복사본(주소를 복사)</li>
<li>하지만 <code>x</code>가 가리키는 곳은 여전히 <strong>a의 메모리 주소</strong></li>
<li>그래서 <code>*x = *x + 1;</code> → a 값이 직접 바뀜
💡 결과: a = 6</li>
</ul>
<p><strong>changePtr() 함수 내부</strong></p>
<pre><code class="language-c">void changePtr(int **p) {
    **p = **p + 2;
    printf(&quot;changePtr 안: **p = %d\n&quot;, **p);
}</code></pre>
<ul>
<li><code>&amp;ptr</code>을 넘겼으니
<code>p</code>는 “<code>ptr</code>의 주소”를 받음.</li>
<li>하지만 <code>ptr</code> 자체가 가리키는 건 여전히 <strong>a</strong>.</li>
</ul>
<p>그림으로 보면</p>
<pre><code>main 영역
 ┌───────────────┐
 │ a = 6         │
 │ ptr ───────┐  │
 └────────────┼──┘
              │
              ▼
          (주소) → [ a의 메모리 6 ]</code></pre><p>이때 <code>&amp;ptr</code>이 넘어가면
<code>p</code>는 <strong>ptr을 가리키는 포인터의 주소</strong>를 가짐.</p>
<p>그래서 <code>**p</code>는 결국 <strong>p → ptr → a → 값(6)</strong></p>
<p><code>**p = **p + 2;</code>는 <code>a = a + 2;</code>, 
💡 a = 8</p>
<hr>
<p>** changePtr() 함수 종료 후**</p>
<p>함수가 끝나도, <code>a</code>는 여전히 메모리에 8로 저장되어 있음.
왜냐면 <code>**p</code>로 <strong>a의 실제 메모리 공간을 바꾼 거</strong>니까.</p>
<pre><code>a: 8
ptr: 여전히 &amp;a</code></pre><p><strong>main()의 printf 실행 시점</strong></p>
<p>이제 <code>printf(&quot;main: a = %d\n&quot;, a);</code> 하면 <strong>바뀐 a(8)</strong>를 그대로 출력
최종 출력은</p>
<pre><code>changePtr 안: **p = 8
main: a = 8</code></pre><p>🧠 요약 포인트</p>
<table>
<thead>
<tr>
<th>함수</th>
<th>매개변수</th>
<th>실제로 바뀌는 대상</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td><code>addOne(int *x)</code></td>
<td><code>x</code> → <code>a</code>의 주소 복사</td>
<td>a 값 직접 바뀜</td>
<td>a = 6</td>
</tr>
<tr>
<td><code>changePtr(int **p)</code></td>
<td><code>p</code> → <code>ptr</code>의 주소 복사, <code>**p</code> → a</td>
<td>a 값 직접 바뀜</td>
<td>a = 8</td>
</tr>
</tbody></table>
<hr>
<h2 id="배열과-포인터">배열과 포인터</h2>
<pre><code class="language-c">int arr[3] = {10, 20, 30};
int *p;
</code></pre>
<blockquote>
<p>arr(배열이름, 상수) = p;    ❌ 오류 
p(포인터변수) = arr;    ✅ 가능</p>
</blockquote>
<p>p = arr; → ✅ 가능
이건 배열의 시작 주소(1000) 를 포인터 변수 p에 저장하는 것</p>
<ul>
<li>arr → 1000 (상수)</li>
<li>p   = 1000 (복사됨)</li>
</ul>
<p>arr = p; → ❌ 오류
포인터의 주소값을 배열 이름에 넣으려는 시도, 배열 이름은 상수이기 때문에 값을 바꿀 수 없음</p>
<p>컴파일러 입장: 
“상수(주소)를 다른 값으로 대입하려 하네? 말이 안 돼!”</p>
<p>배열 이름 arr은 변수(variable) 이 아니라 <strong>“고정된 메모리 이름(label)”</strong>
= 주소값을 바꾸는 대입 연산(=)은 불가능</p>
<table>
<thead>
<tr>
<th>예시</th>
<th>실제 의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>p = arr;</code></td>
<td>“변수 p에 5를 넣어라.” — 가능</td>
</tr>
<tr>
<td><code>arr = p;</code></td>
<td>“5 = 7;” — 말이 안 됨 ❌</td>
</tr>
</tbody></table>
<p>arr = p; 이건 “5 = 7;” 같은 말도 안 되는 문장
왼쪽이 ‘값을 담는 변수’가 아니라 ‘이미 정해진 상수’이기 때문</p>
<table>
<thead>
<tr>
<th>상황</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>p</code>는 “택배 기사 이름표”</td>
<td>기사 이름표(p)는 다른 집 주소로 옮길 수 있음</td>
</tr>
<tr>
<td><code>arr</code>은 “집 주소 자체”</td>
<td>집 주소(arr)는 영구적으로 고정돼 있음</td>
</tr>
</tbody></table>
<p>풀이하면</p>
<table>
<thead>
<tr>
<th>표현</th>
<th>실제 의미</th>
</tr>
</thead>
<tbody><tr>
<td><strong><code>p</code>는 “택배 기사 이름표”</strong></td>
<td>포인터 변수는 <strong>주소를 저장할 수 있는 변수</strong>다. 즉, “지금 어느 집에 가야 하는지 적어둘 수 있다.”</td>
</tr>
<tr>
<td><strong><code>p</code>는 다른 집으로 옮길 수 있다</strong></td>
<td><code>p = 다른주소;</code> 가능. 즉, “기사 이름표에 새 주소를 적을 수 있다.”</td>
</tr>
<tr>
<td><strong><code>arr</code>은 “집 주소 자체”</strong></td>
<td>배열 이름은 <strong>이미 그 집(메모리)의 고정된 주소</strong>다.</td>
</tr>
<tr>
<td><strong><code>arr</code>은 영구적으로 고정돼 있다</strong></td>
<td><code>arr = ...;</code> 불가능. 집 주소는 바뀌지 않는다.</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[빅분기 필기 _ 250905]]></title>
            <link>https://velog.io/@mxnxae__/%EB%B9%85%EB%B6%84%EA%B8%B0-%ED%95%84%EA%B8%B0-250905</link>
            <guid>https://velog.io/@mxnxae__/%EB%B9%85%EB%B6%84%EA%B8%B0-%ED%95%84%EA%B8%B0-250905</guid>
            <pubDate>Fri, 05 Sep 2025 12:30:38 GMT</pubDate>
            <description><![CDATA[<p>빅분기..필기 틀렸던것만 다시 빠르게 훅훅</p>
<p>문제를 많이 푸는 것도 좋지만..
이미 계속 60점 이상 나오는걸로 봐선..
틀린걸 더 안틀리는게 중요할 듯!!! </p>
<hr>
<h1 id="1과목-빅데이터-분석-기획">1과목 빅데이터 분석 기획</h1>
<h2 id="조직구조docoe">조직구조(DOCoE)</h2>
<p>집분기
집중: 독립 전담 -&gt; 중복업무 가능성
분산: 분석조직을 각 부서에 배치
기능: 각 부서에서 직접 분석(DOCoE x )</p>
<h2 id="조직분석-성숙도">조직분석 성숙도</h2>
<p><strong>도활확최</strong>
<img src="https://velog.velcdn.com/images/mxnxae__/post/ff1a8df8-dcd8-4e3f-8512-5b46fd0cccc7/image.png" alt=""></p>
<h2 id="차등보호">차등보호</h2>
<p>개인정보에 노이즈를 추가하여 참여 여부가 분석결과에 영향을 미치지 않도록 함</p>
<ul>
<li><p>I다양성: 민감정보에 대해 다양성을 높임</p>
</li>
<li><p>K익명성 : 일정 확률 이상 비식별 되도록 함</p>
</li>
<li><p>가명처리 : 주요 식별요소를 다른 값으로 대체함</p>
</li>
</ul>
<h2 id="개인정보-보호">개인정보 보호</h2>
<h3 id="가명처리">가명처리</h3>
<p>추가정보 없이는 알아볼 수 없게 함</p>
<h3 id="익명정보">익명정보</h3>
<p>다른 정보를 사용해도 개인을 알 수 없게 함</p>
<h3 id="비식별정보">비식별정보</h3>
<p>말 그대로 식별이 안되는 정보, 개인정보가 아니다!
하지만 불특정다수에게 공개하면 안됨</p>
<h2 id="비식별화-기법">비식별화 기법</h2>
<ul>
<li>데이터 마스킹
잡음 추가: 식별 정보에 잡음 추가</li>
<li>가명처리
휴리스틱 익명화: 식별자 값을 규칙으로 대체하거나 가공</li>
<li>데이터 범주화
랜덤 라운딩: 반올림/내림, 수치형 변수 외에도 확장가능</li>
</ul>
<h2 id="빅데이터-플랫폼-구조">빅데이터 플랫폼 구조</h2>
<p>소프트웨어: app구성, 데이터 처리/분석, 수집/정제
플랫폼 : 플랫폼 제공, 작업 스케줄링/자원 할당, 관리
인프라 스트럭쳐: 자원 배치,  노드/네트워크 관리 =&gt; 자원제공</p>
<h2 id="데이터-수집방법">데이터 수집방법</h2>
<ul>
<li>관찰: 실시간/녹화 비디오 통해 직접 관찰</li>
<li>FGB(Focus Group Interview): 토론을 통한 인사이트</li>
<li>실험: 가설검증을 위한 <strong>조작조건</strong>으로 데이터 수집</li>
<li>설문조사: 개별질문과 척도를 통한 의견수집(설문지, 전화인터뷰..)</li>
</ul>
<h2 id="데이터-수집시-고려사항">데이터 수집시 고려사항</h2>
<ul>
<li>수집가능성</li>
<li>보안</li>
<li>정확성</li>
<li>난이도</li>
<li>수집비용</li>
</ul>
<h2 id="웹데이터-수집">웹데이터 수집</h2>
<p>FTP(File Transfer Protocol): 원격지원 파일 송수신
스크래핑: 웹페이지 자동 추출</p>
<h2 id="데이터-품질-기준">데이터 품질 기준</h2>
<ul>
<li>정확성</li>
<li>완전성: 필수항목이 누락되면 안된다</li>
<li>적시성: 지속적으로 생성하고 소멸하는 데이터가 필요시점에 맞제, 적절히 제공되어야 한다.</li>
<li>일관성</li>
</ul>
<h2 id="데이터-노이즈-처리">데이터 노이즈 처리</h2>
<ul>
<li>구간화(Bining) : 연속형을 범주형 형태로 변경.</li>
<li>회귀값 대치</li>
<li>군집화 : 비슷한 값들을 묶어서 하나의 군집으로 만들어 중심점을 대표값으로 바꿈.</li>
</ul>
<p><strong>표준화</strong>는 정규화가 목적일 뿐이다.</p>
<h2 id="데이터-산업-구조">데이터 산업 구조</h2>
<ul>
<li><p>인프라
  -하드웨어: 컴퓨터, 스토리지
  -소프트웨어: 데이터관리/ 분석</p>
</li>
<li><p>서비스 : 교육, 데이터/정보 제공</p>
</li>
</ul>
<h2 id="분석과제-우선순위">분석과제 우선순위</h2>
<ul>
<li>전략적 중요도</li>
<li>ROI</li>
<li>비즈니스 성과</li>
<li>실행용이성</li>
</ul>
<p>적용범위와 방식: 업무 내재화 수준, 분석데이터 적용수준, 데이터 기술적용 수준을 고려</p>
<h2 id="과제-도출-방식">과제 도출 방식</h2>
<table>
<thead>
<tr>
<th>분석의 방법(how) / 분석의 대상(what)</th>
<th>Known</th>
<th>Un-Known</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Known</strong></td>
<td>최적화(Optimization)</td>
<td>통찰(Insight)</td>
</tr>
<tr>
<td><strong>Un-Known</strong></td>
<td>솔루션(Solution)</td>
<td>발견(Discovery)</td>
</tr>
</tbody></table>
<p>아무것도 모를때 발견!!!!
아무것도 모를 때 발견
아무것도 모를 때 발견</p>
<h2 id="데이터-웨어하우스">데이터 웨어하우스</h2>
<ul>
<li>ODS : 추출데이터 통합 관리</li>
<li>OLAP : 사용자가 직접 다차원 데이터 확인</li>
<li>Data Mart: DW의 접근계층으로 데이터를 꺼내 사용자에게 제공</li>
</ul>
<h2 id="데이터-웨어하우스-특징">데이터 웨어하우스 특징</h2>
<ul>
<li>주제지향성: 고객/제품 등 중요주제 중심 데이터 구성</li>
<li><strong>통합성</strong> : 일관된 형태로 데이터 변환 입력, 전사적 관점에서 통합.</li>
<li>시계열성: 데이터는 일정기간동안 시점별로 이어짐</li>
<li>비휘발성: 갱신 이외 수정 금지</li>
</ul>
<h2 id="분석작업계획wbs">분석작업계획(WBS)</h2>
<p>Work Breakdown Structure
프로젝트 소요 비용 배분 - 프로젝트 작업 분할 구조 - 업무 분장 계획, 배분</p>
<h2 id="분산파일시스템">분산파일시스템</h2>
<p>네트워크를 공유하는 호스트의 파일에 접근할 수 있는 것
파일 저장/접근이 여러 네트워크 노드에 분산되어 있음</p>
<ul>
<li>GFS(구글), HDFS(하둡), 아마존 s3, Ceph</li>
</ul>
<p>Hbase: 하둡 파일 시스템 위에 저장.</p>
<h2 id="ml-학습종류와-응용">ML 학습종류와 응용</h2>
<ul>
<li>비지도<ul>
<li>gan : 누락데이터 생성, 시뮬레이터 데이터 생성</li>
</ul>
</li>
<li>지도<ul>
<li>분류: 신용평가, 사기검출</li>
<li>회귀: 시세, 가격, 주가, 강우량 예측</li>
</ul>
</li>
<li>강화 : 게임플레이어 생성, 로봇학습 알고리즘, 공급망 최적화</li>
</ul>
<h2 id="지도학습의-고려-요소">지도학습의 고려 요소</h2>
<ul>
<li>데이터</li>
<li>분석목적</li>
<li>변수의 중요도</li>
</ul>
<h2 id="자기상관성">자기상관성</h2>
<p>시계열 데이터에서 시차값들 사이에 선형관계를 이루는 것
시차를 두고 자기 자신과 얼마나 닮았는지 측정함</p>
<h2 id="batch">batch</h2>
<p>데이터셋을 잘라서 일정 개수씩 묶은 것(묶어 나눈 덩어리/단위)</p>
<h2 id="텍스트-마이닝">텍스트 마이닝</h2>
<p>텍스트에서 의미있는 정보를 뽑아내는 것</p>
<h3 id="전처리-방법">전처리 방법</h3>
<ul>
<li>토큰화</li>
<li>어간추출(stemming): 동일 뜻 다른 단어 같은형태로 변환(running, ran, runs -&gt; run)</li>
<li>표제어(lemmatization)</li>
<li>불용어 제거(Stopword removal)</li>
</ul>
<hr>
<h1 id="2과목-빅데이터-탐색">2과목 빅데이터 탐색</h1>
<h2 id="이항분포">이항분포</h2>
<h3 id="이산확률분포">이산확률분포</h3>
<ul>
<li>베르누이</li>
<li>이항분포</li>
<li>다항분포</li>
<li>포아송 분포</li>
<li>기하분포, 음이항분포, 초기하분포
<img src="https://velog.velcdn.com/images/mxnxae__/post/33c5470a-a3c3-42df-828d-726bec2ec8f9/image.png" alt=""></li>
</ul>
<h2 id="분포">분포</h2>
<ul>
<li><strong>포아송분포</strong>: 평균 = 분산이면 이산확률분포, <strong>평균 = 분산</strong> </li>
<li>카이제곱분포 : z~n(0,1)일때 제곱합은 자유도n을 따름<ul>
<li>카이제곱 검정 : 범주형 데이터의 적합도 검정 / 독립성검정 / 동질성 검정시 사용</li>
</ul>
</li>
<li>정규분포 : 평균과 분산을 모수로 m=0, 분산=1</li>
<li>초기하분포 : 비복원추출, 표본간의 연관성이 존재한다</li>
</ul>
<h2 id="초기하분포">초기하분포</h2>
<p><strong>비복원추출</strong>로, 앞선 시행결과가 다음 시행결과에 영향을 주기때문에 시행간 독립성이 성립되지 않는다.
N개 중 n개를 추출 할 때 원하는 것 k개가 뽑힐 확률
모집단은 두가지 범주이며 성공확률은 동일하다</p>
<h2 id="표본--모집단">표본 / 모집단</h2>
<p>표본분산은 분모에 n-1이 온다(자유도, 모집단 일부 추출했기 때문에 분산을 보정해줘야함)</p>
<ul>
<li>불편추정량 : 표본평균 = 모집단평균</li>
</ul>
<h2 id="lsalatent-semantic-analysis">LSA(Latent Semantic Analysis)</h2>
<p>특이값 분해(svd)를 활용하여 문서와 단어를 차원축소하고, 잠재의미(의미적 유사성)을 추출하는 기법.</p>
<p>LDA(Latent Dirichlet Albacation) : 확률기반 주제 모델링으로 단어들이 여러 주제에 속할 확률을 추정한다</p>
<ul>
<li>주성분분석(PCA): 수치형 차원 축소</li>
<li>요인분석: 관찰된 변수들 간 <strong>공통요인</strong>을 찾기위한 통계끼법</li>
</ul>
<h2 id="로지스틱회귀">로지스틱회귀</h2>
<p>종속변수(y)가 특정범주에 속할 확률을 예측하는 확률기반모델
독립변수의 선형결합을 시그모이드를 통해 0~1의 확률값으로 변환, 확률 출력</p>
<p><strong>종속변수(y)는 이진(0/1)이나 범주형 변수 가능
독립변수(x)는 연속형/범주형 모두 사용 가능</strong></p>
<p>선형회귀계수를 최소제곱량(LSE)로 두면 불편추정(평균값=기댓값)성립</p>
<p>확률기반모델은 정규성 가정이 필요없다.</p>
<h2 id="iqr">IQR</h2>
<p>Q1은 <strong>하위</strong> 25%지점이다.</p>
<h2 id="편향과-분산">편향과 분산</h2>
<p>trade off관계.</p>
<p>편향과 분산은 흩어짐의 정도를 나타낸다
편향이 크다 - 학습할 패턴이 적다 - 과소적합
분산이 크다 - 과대적합</p>
<p>모두 낮으면 좋은 모델</p>
<h2 id="추정">추정</h2>
<ul>
<li>점추정: 하나의 값으로 추정</li>
<li>구간추정: 점추정을 기초로(점추정 선행) 신뢰구간을 제시</li>
<li>불편추정량(편향이 없는 추정값 = 불편) : 추정량의 기댓값 = 실제 모수(표본평균, 표본분산 모두 일치) </li>
<li>일치추정량 : 데이터의 개수가 무한대일때, 추정량(표본분산만 일치)은 참이다</li>
</ul>
<table>
<thead>
<tr>
<th>추정량</th>
<th>불편성</th>
<th>일치성</th>
</tr>
</thead>
<tbody><tr>
<td>표본평균 $\bar{X}$</td>
<td>O (E[$\bar{X}$] = μ)</td>
<td>O (n→∞이면 μ에 수렴)</td>
</tr>
<tr>
<td>표본분산 $S^2 = \frac{1}{n-1}\sum(X_i-\bar{X})^2$</td>
<td>O (불편)</td>
<td>O (일치)</td>
</tr>
<tr>
<td>표본분산 $S_n^2 = \frac{1}{n}\sum(X_i-\bar{X})^2$</td>
<td>X (작은 n에서는 평균보다 작음)</td>
<td>O (n→∞이면 σ²에 수렴)</td>
</tr>
</tbody></table>
<h2 id="통계적-방법을-이용한-변수-선택-방법">통계적 방법을 이용한 변수 선택 방법</h2>
<p>교차검증을 사용하여 모델 성능을 비교하며 변수선택을 수행한다.</p>
<ul>
<li>교차검증: 데이터를 학습용과 평가용으로 나누어 성능 측정하는 방법
새로운 데이터에도 잘 맞는 모델인지 일반화 성능을 확인하는 과정</li>
</ul>
<p>단순히 통계적 유의성만 본다면 과적합 위험이 있기 때문에 교차검증을 통한 성능비교를 해야함.</p>
<h3 id="상관계수를-이용한-변수선택">상관계수를 이용한 변수선택</h3>
<p>상관계수 하나는 단변량 관계만 나타내므로, 다중공선성, 비선형성, 상호작용 등도 고려해야 한다.</p>
<h2 id="파생변수">파생변수</h2>
<ul>
<li><strong>교호작용</strong> : 두 개 이상의 변수를 결합해 파생변수를 만들면, 이 변수가 종속변수에 미치는 영향이 각각의 합으로 나타나지 않음.(새로운 영향)</li>
</ul>
<p>종속-독립간 교호작용을 이용해 파생변수를 만드는 것은 모델이 예측해야하는 정보를 누출하게 되는 것이기 때문에 종속-독립 파생변수를 만들 것이 아니라 독립변수끼리 교호작용을 파생변수로 만들어야한다.</p>
<h2 id="변동계수cv">변동계수(cv)</h2>
<p>표준편차 / 평균, 평균에 대한 변동성 나타냄(-무한,무한)</p>
<p>분산의 경우 데이터가 평균에서 얼마나 떨어져있는가 나타내는 것으로 데이터 하나하나 값이 있음 [0,무한)</p>
<h2 id="분산분석anova">분산분석(ANOVA)</h2>
<p>셋 이상 집단간의 <strong>평균</strong>차이가 통계적으로 유의미한지 여부를 검정</p>
<p>집단 내 분산, 집단 간 분산을 비교하여 평균차이의 유의성 판단
3개이상 표본 평균의 분산과 표본내 관측치 분산 비교, 검정</p>
<ul>
<li>상관분석 : <strong>연속형변수 2개</strong> 관계를 추정</li>
<li>회귀분석: 독립변수가 종속변수에 미치는 영향 추정</li>
<li><strong>카이제곱</strong>분석: <strong>범주형</strong> 변수간 독립성 / 적합성 검정</li>
</ul>
<h3 id="다변량분석-manova">다변량분석 (MANOVA)</h3>
<p>1개 이상 독립변수(X, 범주형), 여러개(2개이상)의 종속변수(Y, 연속형)</p>
<p>1개 독립변수로 집단간 평균 비교하면 ANOVA
1개이상 독립변수와 여러개의 종속변수를 비교하면 MANOVA</p>
<h2 id="상관분석">상관분석</h2>
<ul>
<li><p>피어슨 상관분석
양적 척도(무게, 점수, ...), 연속형 변수, 선형관계 크기 측정(-1~1)
일반적인 상관계수를 의미하며, 선형관계의 <strong>강도</strong>와 <strong>방향</strong>을 측정한다.
이상치의 영향이 크게 나타난다.</p>
</li>
<li><p>스피어만 상관분석
서열 척도(만족도, 등수, ...), 순서형 변수(범주), 선형/비선형적 관계 나타냄.</p>
</li>
<li><p><em>선형관계가 아니어도*</em> 1 혹은 -1이 될 수 있다.
1에 가까울수록 단조(커지면 같이 커짐)상관이 높아진다</p>
</li>
</ul>
<h2 id="f검정">F검정</h2>
<p>두 모집단의 분산이 같은지(등분산성)검정</p>
<ul>
<li>결정계수(R^2) : 회귀모델이 데이터를 얼마나 설명하는지(설명력) 나타냄
1에 가까울수록 좋은 모델
결정계수 = 설명계수</li>
</ul>
<p>회귀모형에 독립변수를 추가하면 결정계수가 무조건! 향상됨</p>
<ul>
<li>F통계량 : 분산 비율을 이용해 두 집단간 차이를 검정할 때 사용되는 통계량</li>
</ul>
<table>
<thead>
<tr>
<th>분석/검정</th>
<th>통계량 사용</th>
</tr>
</thead>
<tbody><tr>
<td>ANOVA</td>
<td><strong>F-통계량</strong> (그룹 간 변동 ÷ 그룹 내 변동)</td>
</tr>
<tr>
<td>등분산검정</td>
<td>일부 방법(Bartlett&#39;s Test)에서 <strong>χ²</strong> 또는 <strong>F-통계량</strong> 사용</td>
</tr>
<tr>
<td>회귀분석 유의성검정</td>
<td><strong>모델 전체 유의성</strong> 검정 시 <strong>F-통계량</strong> 사용</td>
</tr>
</tbody></table>
<h2 id="차원축소의-목적">차원축소의 목적</h2>
<ul>
<li>특징추출 : PCA, 데이터 중요 특성을 추출</li>
<li>설명력 증가: 주요 구성요소만 남겨 설명력을 증가시킴(해석용이)</li>
<li><strong>노이즈 제거</strong> : 패턴을 유지하고 불필요한 변동을 제거함</li>
</ul>
<h2 id="주성분분석pca">주성분분석(PCA)</h2>
<p>선형변환을 통해 새로운 변수를 생성하고, 이 새로운 변수들은 서로 독립이다.
주로 차원축소/차원의 저주에 활용된다.
<strong>선형성과 분산을 기반</strong>으로 한 분석이다. 정규분포 아님!!! <strong>상관관계</strong> 기반임!!</p>
<ul>
<li>차원의 저주 : 변수가 많아질수록 생기는 문제(과적합, 계산량, ...)</li>
</ul>
<h2 id="단순-지수-평활법">단순 지수 평활법</h2>
<p>시간에 따라 변하는 데이터를 예측할 때 이전 관측값은 지수적으로 감소하는 가중치로 반영하는 방법.
최근값일수록 가중치(a)부여(이전 예측 가중치도 함께 결정됨(1-a)), 수요나 값이 완만한경우에 유용하다.</p>
<p>추세나 계절성이 없는 경우에 단순 지수 평활법을 사용.</p>
<h2 id="시계열-자료">시계열 자료</h2>
<ul>
<li><p>준척형자료: 척도의 일부 조건 만족하지 않는 자료
순서/간격, 설문조사, 성적등급 등 순서를 가진 자료를 수치화해서 <strong>근사적 간격으로 나타낸 것</strong></p>
</li>
<li><p>패널자료 : 동일개체를 여러 시점에 반복해서 관측</p>
</li>
<li><p>횡단면: 여러개체를 동일 시점에 관측</p>
</li>
</ul>
<h2 id="왜도와-첨도">왜도와 첨도</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/84e20e46-8c52-4ee5-9008-b360361fd875/image.png" alt=""></p>
<p>첨도는 단위가 없다 + 항상 양수값을 나타냄
첨도가 0 이면 정규분포를 따른다</p>
<h2 id="스케일링">스케일링</h2>
<ul>
<li>Z-score : 평균0, 표준편차1 (음수값 가능)</li>
<li>binning: 데이터 구간화</li>
<li>box-cox : 양수데이터에만 적용, 정규분포에 근사하게 변환.</li>
</ul>
<h2 id="지지도--신뢰도">지지도 / 신뢰도</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/e1ef8816-38c7-490a-987c-4d72ed419743/image.png" alt=""></p>
<h2 id="오류">오류</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/8cd7cdfc-087d-4279-bcee-c3244056cce0/image.png" alt="">
1종오류 : 귀무가설이 참인데 대립가설을 채택하는 경우</p>
<h1 id="3과목-빅데이터-모델링">3과목 빅데이터 모델링</h1>
<h2 id="과적합-해결방안">과적합 해결방안</h2>
<ul>
<li><p>정규화(규제) : 모델이 너무 큰 계수를 갖지 않도록 제한 → 과적합 방지
L1 정규화 (Lasso라쏘) → <strong>일부 계수를 0으로 만들어 변수 선택</strong> 효과
L2 정규화 (Ridge릿지) → 계수를 작게 만들어 모델을 안정화</p>
</li>
<li><p>조기종료 : 검증데이터 성능이 떨어지면 STOP</p>
</li>
<li><p>드롭아웃 : 무작위로 뉴런을 제거해서 일반화 성능을 높임</p>
</li>
</ul>
<h2 id="거리공식">거리공식</h2>
<ul>
<li>L1(맨해튼), 대각선X</li>
<li>L2(유클리드), 최단값(피타고라스)
이 리 </li>
</ul>
<p>-민코스프스키 : 유클리드 _ 맨해튼</p>
<p>-마할라노비스 거리: 정규분포, 표준편차 비교거리 척도
노비 비교</p>
<h2 id="앙상블">앙상블</h2>
<h3 id="보팅">보팅</h3>
<p>다수결 방식으로 모델 선택</p>
<h3 id="배깅bagging">배깅(Bagging)</h3>
<p><strong>약한 모델을 독립적으로 훈련해 예측을 평균화 함 -&gt; 분산줄인 **
복원추출 기반, **붓스트랩</strong> 생성해 보팅으로 결합 -&gt; 다수결.
무한반복시 하나의 데이터가 선택되지 않을 확률 36.8%
<strong>병렬학습, 과적합 완화(분산감소)</strong></p>
<h4 id="랜덤포레스트">랜덤포레스트</h4>
<p>의사결정 + <strong>배깅</strong>, 성능 좋고 이상치에 강함</p>
<h3 id="부스팅boosting">부스팅(Boosting)</h3>
<p>잘못된 분류 데이터에 큰 가중치-&gt;집중학습-&gt; 성능개선,  <strong>이상치에 민감</strong>
순차, 예측력향상(편향 감소), 샘플링(오분류 가중치)</p>
<p>GBM: 가중치 업데이트 경사하강법
XGBoost : GBM + 정규화 식 추가 -&gt; 속도 빨라짐
Light GBM : 레벨기반이 아니라, 리프중심으로 <strong>비대칭 트리구조 나타</strong>남</p>
<h3 id="스태킹stacking">스태킹(stacking)</h3>
<p>각각의 모델에서 학습한 예측 결과를 다시 학습
동일샘플로 다양한 모델 학습하는 것</p>
<h3 id="배치batch">배치(batch)</h3>
<p>미니배치/stochastic 사용</p>
<p>영향</p>
<ul>
<li>훈련속도</li>
<li>메모리</li>
<li>모델 성능(정확도)</li>
</ul>
<p>배치크기가 크면 훈련속도가 빠른 반면 메모리를 많이 차지하고 모델성능이 떨어진다
배치크기가 작으면 최적 경로가 비효율적이라 훈련속도가 느린반면, 양이 적어 메모리를 적게 사용하고 모델성능이 높아진다.</p>
<h2 id="배치정규화bn">배치정규화(BN)</h2>
<p>미니배치 단위로 평균과 분산을 이용하여 입력노드를 표준화하면, 배치마다 다른 값이 나와 잡음이 생성되고, 가중치 의존도가 낮아진다.</p>
<h2 id="의사결정나무">의사결정나무</h2>
<p>전처리 필요없음 + 데이터 양이 많아도 됨
분류/회귀 모두 사용
명확한 설명력을 가지고 있음.</p>
<p>노드 내 동질성이 높아지는 방향으로 분기(노드간은 이질)</p>
<h3 id="분리기준">분리기준</h3>
<p>불순도를 가장 많이 줄이는 분할 찾기</p>
<ul>
<li>지니지수 : 불순도 측정 지표 (CART), 0에 가까우면 GOOD</li>
<li>엔트로피 : 정보 이득이 큰걸로 분할, 작을수록 GOOD</li>
<li><strong>카이제곱</strong> 통계량 : <strong>범주형</strong>, 관측빈도와 유의빈도 차이를 유의확률로..</li>
</ul>
<h2 id="하이퍼-파라미터초매개변수">하이퍼 파라미터(초매개변수)</h2>
<ul>
<li>knn의 k</li>
<li><strong>인공신경망 은닉층 수</strong></li>
<li>결정트리 깊이</li>
</ul>
<p>신경망 가중치는 최적화 알고리즘(경사 하강법)으로 스스로 학습</p>
<h2 id="매개변수-vs-초매개변수">매개변수 vs 초매개변수</h2>
<p>매개변수 : 학습하며 자동으로 갱신, 모델추정값(가중치, 계수, 절편, 편향 등) 경사하강법으로 추정할 수 있는 값
초매개변수 : 학습을 진행하며 조정 가능, 은닉층 수, 학습률, 뉴런 수, 배치 크기 등</p>
<h2 id="손실함수">손실함수</h2>
<p>손실함수: 예측 - 실제간 오차, 주로 복잡한 비선형관계에서는 인공신경망 사용.</p>
<h2 id="경사하강법gd-기반-알고리즘">경사하강법(GD) 기반 알고리즘</h2>
<p>손실함수를 최소화하기 위해 전체 데이터를 사용해서 파라미터를 업데이트 하는 방법</p>
<p>Nesterov</p>
<ul>
<li><p>Momentum : 관성이용, 지역최소 -&gt; 전역최소 찾아감(일정속도유지)</p>
</li>
<li><p>Adam : RMSprop + 모멘텀</p>
</li>
<li><p>확률적 경사하강법(SGD): 배치샘플(학습데이터 일부)만 보고 파라미터 업데이트, 지역최소 탈출 가능.
손실함수 따라 최적모델 찾음 + 전체 노드 고정 학습율
임의 단일 데이터로 기울기를 계산해 파라미터를 업데이트.
진행방향이 불규칙하고 수렴속도가 불안정하지만 전역최소를 찾을 수 있고 최적화시간이 빠르다.</p>
</li>
<li><p>RMSProp: SGD + 이전 기울기 제곱의 지수 이동평균으로 학습률 조정</p>
</li>
<li><p>Adagrad : 가중치 업데이트 횟수를 조정해 학습률 업데이트(파라미터마다 다른 학습률), 속도달라짐</p>
</li>
</ul>
<p>Adaboost: 앙상블 </p>
<h2 id="활성화함수">활성화함수</h2>
<p>출력값으로 변환하는 함수, 기울기 소실문제가 발생함.</p>
<ul>
<li>시그모이드 : 로지스틱 회귀 사용 활성화함수 
미분시 최댓값 X = 0</li>
<li>tanh : -1 ~ 1, RNN,LSTM 순환신경망에 사용</li>
<li>ReLU</li>
</ul>
<h2 id="relu">ReLU</h2>
<p>활성화함수 중 하나로, <strong>기울기 소실문제 완화</strong>위해 도입
(다른예제 - LSTM, GRU, 배치정규화, Adam...)</p>
<p>입력값이 0 이하 -&gt; 0 출력
입력값 양수 -&gt; 그대로 출력(무한대까지 출력 가능)
양수구간 미분하면 기울기 1이니까 기울기 소멸문제 해결 가능.</p>
<h2 id="로짓함수">로짓함수</h2>
<p>확률값을 실수(-무한,무한)로 확장하기 위한 <strong>비선형함수</strong>
성공확률 P를 자연로그를 이용해 오즈(성공확률과 실패확률의 비)의 로그값으로 변환하는 함수</p>
<p>로그오즈(로짓함수)의 역함수 = 시그모이드
실수를 0~1의 확률값으로 변환,
즉 로지스틱 회귀에서 예측값을 확률로 바꾸는 함수가 시그모이드.</p>
<p><strong>- 로지스틱 회귀는 분류모델이다</strong>
확률을 보고 범주 결정.</p>
<h2 id="회귀분석">회귀분석</h2>
<ul>
<li><p>선형회귀</p>
</li>
<li><p>다항회귀</p>
</li>
<li><p>릿지회귀</p>
</li>
<li><p>로지스틱 : 범주형(이진)의 <strong>분류</strong>를 주 목적으로한다!! 회귀아니다!! </p>
</li>
</ul>
<h2 id="회귀분석-유의성검정">회귀분석 유의성검정</h2>
<p>전체 유의성(모든 회귀계수) 검사시 F검정 이용(ANOVA)</p>
<h2 id="시퀀스-투-시퀀스">시퀀스 투 시퀀스</h2>
<p>RNN계열(LSTM, GRU), 길이가 다른 입력도 처리 가능</p>
<ul>
<li>컨텍스트 벡터 : 마지막 은닉 상태를 하나의 벡터로 요약
입력시퀀스가 길면 정보손실이 발생 + 예측품질이 저하됨</li>
</ul>
<h2 id="cnn-vs-rnn">CNN VS RNN</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/337e6360-7c9d-428d-ad53-61eb7036d1ea/image.png" alt=""></p>
<h2 id="군집분석">군집분석</h2>
<ul>
<li>계층적 군집분석: 한번 합쳐진 군집 쪼개거나 이동 x</li>
<li>k-means : k값이 커지면 노이즈도 군집으로 잘못해석. 계층적 군집보다 빠르다. k값 먼저 정하는거 잊지말기</li>
</ul>
<h2 id="연결법">연결법</h2>
<ul>
<li>와드연결법 : 군집 병합시 SSE(제곱오차 하)의 증가를 최소화 하는 연결</li>
<li>완전연결법 : 두 군집 사이의 거리중 최대값을 기준으로 연결</li>
</ul>
<h2 id="네트워크-분석-지표">네트워크 분석 지표</h2>
<ul>
<li>밀도 : 그래프 연결 수가 최대중 얼마인지, 전반적 연결정도</li>
<li>포괄성 : 전체중 연결된 노드 비율</li>
<li>전이성 : 삼각관계 비율, 국소밀집도 측정(클러스터링 정도)</li>
<li>정도: 한 노드가 연결된 간선의 개수</li>
</ul>
<h2 id="베이즈">베이즈</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/33de582a-99b0-480e-b79e-9ff91b611ad5/image.png" alt=""></p>
<p>베이즈정리를 이용해 분류알고리즘을 만들면 나이브 베이즈.
확률모형함수로 사전확률 + 우도 = 사후확률.
종속변수(y)의 확률을 계산하며, 별도의 학습과정이 없음</p>
<h2 id="모수-vs-비모수">모수 vs 비모수</h2>
<p>모수검정 : 통계적 해석
비모수 검정 : 정규성 가정이 어렵거나 표본 크기가 작은경우 활용
데이터의 순위나 비율 기반 수행 -&gt; 이상치 민감도가 낮으나 검정력 낮음</p>
<h1 id="4과목---빅데이터-결과해석">4과목 - 빅데이터 결과해석</h1>
<h2 id="학습곡선">학습곡선</h2>
<p>모델의 성능이 학습데이터 <strong>크기</strong>에 따라 어떻게 변하는지 보여줌</p>
<p>수평에 수렴하면 모델을 변경해야함.
과대적합 : 훈련오차가 적고 검증오차가 큼</p>
<h2 id="roc커브">ROC커브</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/b554d7b8-0824-47fa-92f5-3214768f9b62/image.png" alt=""></p>
<h2 id="등간척도-vs-비율척도">등간척도 VS 비율척도</h2>
<ul>
<li><p>등간척도: 절대 0 없음 -&gt; 비율 무의미 (온도, IQ)</p>
</li>
<li><p>비율척도: 등간 + 0 (나이, 무게, 길이, 시간)</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250822]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250822</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250822</guid>
            <pubDate>Tue, 26 Aug 2025 03:43:08 GMT</pubDate>
            <description><![CDATA[<p>무조건 합격 ㅋㅋ 이거 합격못하면 걍 절대 합격 못한다고 봐야함</p>
<p>이제 여태 내가 계속해서 지피티한테 질문했던것만 요약하고 컴활은 더이상 보지 않겠슨</p>
<hr>
<p><strong>컴활 1급 프로젝트</strong> 안에서 받은 질문 중에서, <strong>반복적으로 계속 물어본 주제</strong></p>
<h3 id="1-엑셀-함수-응용">1. <strong>엑셀 함수 응용</strong></h3>
<ul>
<li><code>VLOOKUP</code> (근사값/정확도, 구간 설정 이유)</li>
<li><code>MATCH</code> (문자 검색, type 옵션 0/1 차이)</li>
<li><code>SUMIF</code>, <code>COUNTIF</code>, <code>AVERAGEIF</code> (조건 다중 처리, OR vs + 차이)</li>
<li><code>SMALL</code>, <code>LARGE</code>, <code>RANK</code> (순위/배열 수식 활용)</li>
<li><code>FIXED</code>, <code>CDATE</code>, <code>VAL</code> 함수 등 변환/서식 함수</li>
</ul>
<p>👉 즉, “조건 걸어서 함수 쓰는 법”이 계속 반복됨.</p>
<hr>
<h3 id="2-배열-수식--논리식-처리">2. <strong>배열 수식 / 논리식 처리</strong></h3>
<ul>
<li><code>{}</code> 배열 수식 문법</li>
<li><code>(조건식1) + (조건식2)</code> vs <code>OR(조건식1, 조건식2)</code></li>
<li>TRUE/FALSE 값이 <code>1/0</code>으로 계산되는 원리</li>
</ul>
<p>👉 특히 <code>OR</code>, <code>+</code>, <code>*</code> 를 섞어서 쓰는 부분을 여러 번 물어보심.</p>
<hr>
<h3 id="3-액세스-문법--쿼리">3. <strong>액세스 문법 / 쿼리</strong></h3>
<ul>
<li><code>NOT IN</code>, <code>IS NULL</code> 차이</li>
<li>입력마스크 (<code>LLLL</code>, <code>&gt;LAa09#</code> 등 기호별 의미)</li>
<li>유효성 검사 규칙 <code>In (&quot;남&quot;,&quot;여&quot;)</code> vs <code>&quot;남&quot; Or &quot;여&quot;</code></li>
<li>레코드소스/필터/Requery/OrderBy 같은 이벤트 프로시저</li>
<li>컨트롤 원본에 <code>Count(*)</code> vs <code>1</code></li>
</ul>
<p>👉 액세스에서 “이 표현이 맞나?” “이 경우는 왜 틀리냐?”를 반복적으로 확인</p>
<hr>
<h3 id="4-vba--참조-문법">4. <strong>VBA / 참조 문법</strong></h3>
<ul>
<li><code>[B3]</code> vs <code>Range(&quot;B3&quot;)</code></li>
<li><code>.CurrentRegion.Rows.Count + k</code> 결과가 왜 다르게 나오는지</li>
<li>SQL 함수(<code>Mid</code>, <code>Right</code>) vs VBA 함수 차이</li>
<li><code>Caption</code> 속성의 의미</li>
</ul>
<p>👉 VBA와 SQL/액세스의 차이를 혼동하는 질문</p>
<hr>
<p>✅ 반복해서 물어본 걸 정리하면</p>
<ol>
<li><strong>엑셀 조건 함수 활용</strong></li>
<li><strong>배열 수식과 논리식</strong></li>
<li><strong>액세스 쿼리와 입력마스크/유효성 검사</strong></li>
<li><strong>VBA 문법 차이</strong></li>
</ol>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250821]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250821</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250821</guid>
            <pubDate>Thu, 21 Aug 2025 15:05:56 GMT</pubDate>
            <description><![CDATA[<p>아...진짜.... 합격이 한문제차이로 갈릴것같아서 우울띠함 ㅜ
이제 엑세스는..웬만하면 풀 줄 아는듯</p>
<h1 id="복기">복기</h1>
<h2 id="엑셀">엑셀</h2>
<p>고급필터: 인천이 들어가는거 search찾아서 + 뭐 하나 더 있었는데
search하면은 iferror을 해줘야하나? 이게 왜 있나 했음.</p>
<p>그냥 SEARCH 쓰면 찾는 값이 없을 때 에러 나서 수식 전체가 깨짐.
=IFERROR(SEARCH(&quot;@&quot;, A1), 0)</p>
<p>그래서 false라는 값을 &quot;false&quot;라고 적엇는데...이러면안됨 ㅜㅜ</p>
<p>계산 : </p>
<blockquote>
<p>large, average 
: 와 이거 끝나기 10초전에 깨달아서 울뻔함
이거 맞으면 합격일텐데 ㅜ</p>
</blockquote>
<blockquote>
<p>text, sumifs, left</p>
</blockquote>
<pre><code>SUMIFS(sum_range, criteria_range1, criteria1, criteria_range2, criteria2, ...)
</code></pre><p>sum_range → 더할 범위</p>
<p>criteria_range1, criteria1 → 조건 범위와 조건값
조건이 여러 개면 AND 조건으로 동작</p>
<p>sumifs를 쓰면 상대적으로 짧은 식으로 원하는 값을 찾을 수 있음.</p>
<blockquote>
<p>search, iferror</p>
</blockquote>
<p>고급필터랑 거의 같은내용</p>
<p>프로시저 cdate</p>
<h2 id="데이터-가져오기">데이터 가져오기</h2>
<p>아니 원래 레거시 마법사를 이용해서 했던것같은데
이제는 피벗테이블에서 외부원본 이용해서 불러오는듯...
오늘은 운좋게 원본에서 바로 했는데 가져오기에서 라고 하면 
<strong>내 데이터에 추가? 이거 하면 안됨</strong></p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/c0397c6b-2a39-4600-93c1-f85f27c8c000/image.png" alt=""></p>
<p>데이터 모델에 이 데이터 추가 선택하지 말라는 말.</p>
<p>그냥 하라할 때만 저거 하자..</p>
<p>ㅋㅋ아님</p>
<p><strong>데이터 가져오기 - 기타원본에서 - microsoft Query에서</strong></p>
<h2 id="엑세스">엑세스</h2>
<h3 id="dsum">dsum</h3>
<p>하위커리에서 작성한거라
하위커리에 있는 폼이름을 작성해야함...!!!! 하 맞네 그러보니 그랬네 ㅜ</p>
<p>dsum(&quot;주차총수&quot;,&quot;광진구주차장현황&quot;,&quot;주차장유형번호=txt주차장유형번호&quot;)</p>
<h1 id="엑셀-1">엑셀</h1>
<h2 id="계산">계산</h2>
<h3 id="날짜함수">날짜함수</h3>
<blockquote>
<p>시리얼넘버 -&gt; 날짜</p>
</blockquote>
<ol>
<li>text<pre><code>=TEXT(45000,&quot;yyyy-mm-dd&quot;)
</code></pre></li>
</ol>
<pre><code>이건 문자로 바뀌기 때문에 날짜계산 안됨


2. date</code></pre><p>=DATE(YEAR(A1),MONTH(A1),DAY(A1))</p>
<pre><code>
#### CDATE
아니 이거 낮에 나와서 복기때 봤는데도 어떻게 쓰는지 모른다는게 말이됨?
그냥 괄호 안에 값을 넣어라
값을 날짜형(Date) 으로 변환하는 함수 -&gt; cdate
`CDate(expression)`


### fixed

FIXED = 반올림 + 서식 지정 + 문자열 변환
</code></pre><p>=FIXED(number, [decimals], [no_commas])</p>
<pre><code>number : 반올림할 숫자
decimals : 소수 자릿수 (기본값 2)
no_commas : 천 단위 구분기호(,) 표시 여부
    - 생략하거나 FALSE → 쉼표 표시함
    - TRUE → 쉼표 빼고 출력
논리값 TRUE = 1, FALSE = 0

| 수식                         | 결과         |
| -------------------------- | ---------- |
| `=FIXED(1234.567,2,FALSE)` | `1,234.57` |
| `=FIXED(1234.567,1,TRUE)`  | `1234.6`   |
| `=FIXED(1234.567,0)`       | `1,235`    |</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250820]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250820</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250820</guid>
            <pubDate>Thu, 21 Aug 2025 03:54:15 GMT</pubDate>
            <description><![CDATA[<p>상시기출..레츠고</p>
<h1 id="엑셀">엑셀</h1>
<h2 id="기본작업">기본작업</h2>
<h3 id="row">row</h3>
<p>영역에서 행 번호를 4로 나눈 나머지가 0인 데이터의 행 전체에 대해 ~ ..
=MOD(ROW($A3),4)=0
정답 : =MOD(ROW(),4)=0</p>
<p>row나 column은 참조(셀)를 안해도 된다!</p>
<h2 id="계산작업">계산작업</h2>
<h3 id="if배열에서-or처리">if배열에서 OR처리</h3>
<p><strong>범위 조건을 배열 수식으로 걸 때 OR 함수는 제대로 동작하지 않는다.</strong></p>
<p>(조건1) + (조건2) → 배열 수식에서 OR 효과
(조건1) * (조건2) → 배열 수식에서 AND 효과</p>
<p>따라서 시험에서는 +와 * 연산을 이용하는 방식이 정답 처리됨</p>
<h3 id="재무함수">재무함수</h3>
<h4 id="pmt">PMT</h4>
<p>일정 이자율과 기간으로 대출 상환액(매회 납입금) 계산</p>
<pre><code>=PMT(rate, nper, pv, [fv], [type])</code></pre><p>PMT(이자율, 기간, 현재가치, [미래가치], [말/초])\</p>
<h4 id="fv">FV</h4>
<p>일정 금액을 적립했을 때 미래에 모이는 금액 계산</p>
<pre><code>=FV(rate, nper, pmt, [pv], [type])
</code></pre><p>=FV(이자율, 기간, 납입액, [현재가치], [말/초])</p>
<h4 id="재무함수-매개변수">재무함수 매개변수</h4>
<table>
<thead>
<tr>
<th>한국어</th>
<th>영어</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>이자율</td>
<td>rate</td>
<td>기간당 이자율 (연 이율/12 등)</td>
</tr>
<tr>
<td>기간</td>
<td>nper</td>
<td>총 납입 횟수</td>
</tr>
<tr>
<td>현재가치</td>
<td>pv</td>
<td>현재 가치*<em>(대출금, 음수) *</em></td>
</tr>
<tr>
<td>납입액</td>
<td>pmt</td>
<td>매회 납입액(음수)</td>
</tr>
<tr>
<td>미래가치</td>
<td>fv</td>
<td>목표금액(기본 0)</td>
</tr>
<tr>
<td>말/초</td>
<td>type</td>
<td>0 = 기간말 납입(기본), 1 = 기간초 납입</td>
</tr>
<tr>
<td>추정값</td>
<td>guess</td>
<td>예상 이율 (기본 10%)</td>
</tr>
</tbody></table>
<p>pv(Present Value): 현재 가치 (대출금, 적립금의 현재 값)
fv(Future Value): 미래 가치 (목표금액, 만기 시점 잔액)
pmt(Payment): 매회 납입액 (상환액, 저축액)</p>
<h3 id="countif">countif</h3>
<p>지정한 범위 안에서 조건을 만족하는 셀의 개수를 세는 함수
조건식에 <code>&quot;&quot;</code>쓰는거 잊지말기.</p>
<pre><code>=COUNTIF(범위, 조건)
</code></pre><p>=COUNTIF(A1:A10, 10)
A1:A10 범위에서 값이 10과 같은 셀 개수    10이 몇 개인지</p>
<p>=COUNTIF(B1:B20, <strong>&quot;</strong>&gt;100<strong>&quot;</strong>)
B1:B20에서 100보다 큰 값 개수    조건식 가능</p>
<h2 id="분석작업">분석작업</h2>
<h3 id="그룹">그룹</h3>
<h1 id="엑세스">엑세스</h1>
<h2 id="db구축">DB구축</h2>
<h3 id="데이터형식">데이터형식</h3>
<p>255자 이상의 데이터가 입력되도록 데이터 형식을 설정하시오 
: 긴텍스트</p>
<table>
<thead>
<tr>
<th>데이터 형식</th>
<th>설명</th>
<th>크기/제한</th>
</tr>
</thead>
<tbody><tr>
<td><strong>짧은 텍스트 (Short Text)</strong></td>
<td>문자, 숫자, 특수문자 등 일반 텍스트 입력</td>
<td>최대 255자</td>
</tr>
<tr>
<td><strong>긴 텍스트 (Long Text, 예전 Memo)</strong></td>
<td>긴 문장, 메모, 설명 등 대용량 텍스트 입력</td>
<td>최대 약 65,536자 저장 가능</td>
</tr>
<tr>
<td><strong>숫자 (Number)</strong></td>
<td>정수, 실수 등 수치 데이터</td>
<td>바이트(0~255), 정수, Long, Single, Double 등 세부 지정</td>
</tr>
<tr>
<td><strong>큰 숫자 (BigInt)</strong></td>
<td>매우 큰 정수 값 저장</td>
<td>-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807</td>
</tr>
<tr>
<td><strong>통화 (Currency)</strong></td>
<td>금액, 환율 같은 고정 소수점 값</td>
<td>소수점 4자리까지</td>
</tr>
<tr>
<td><strong>일시(Date/Time)</strong></td>
<td>날짜 및 시간 값 저장</td>
<td>1/1/100 ~ 12/31/9999</td>
</tr>
<tr>
<td><strong>예/아니오 (Yes/No, Boolean)</strong></td>
<td>참/거짓 값</td>
<td>1(예), 0(아니오)</td>
</tr>
<tr>
<td><strong>OLE 개체</strong></td>
<td>그림, 문서, 미디어 파일 연결/삽입</td>
<td>대용량 가능</td>
</tr>
<tr>
<td><strong>하이퍼링크</strong></td>
<td>URL, 이메일 주소 저장</td>
<td>최대 2048자</td>
</tr>
<tr>
<td><strong>첨부 파일</strong></td>
<td>여러 개의 파일 첨부 가능</td>
<td>제한: 2GB</td>
</tr>
<tr>
<td><strong>계산</strong></td>
<td>다른 필드 기반 계산식 저장</td>
<td>저장 공간 없음</td>
</tr>
<tr>
<td><strong>룩업 마법사</strong></td>
<td>다른 테이블/목록에서 값 선택</td>
<td>-</td>
</tr>
</tbody></table>
<h2 id="입력-및-수정-기능-구현">입력 및 수정 기능 구현</h2>
<h3 id="조건부서식">조건부서식</h3>
<p>문제 : 시장구분 필드의 값이 유가증권인 경우 본문 모든 텍스트 상자의 글꼴 색을 변경</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/8d0fc27f-304e-4cea-8b54-1040ebed20da/image.png" alt=""></p>
<p>조건은 잘 썼는데 <code>필드 값</code>이 아니라 <code>식</code>으로 할 것! </p>
<h3 id="컨트롤-원본-vs-행-원본">컨트롤 원본 vs 행 원본</h3>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/7aeb3a84-5ac9-4d2f-9172-5390d7feb350/image.png" alt="">
컨트롤 원본에만 바인드시키면
<img src="https://velog.velcdn.com/images/mxnxae__/post/2ab23fbc-c19d-41f1-ad84-58904722cc8a/image.png" alt="">
이렇게 목록에는 아무것도 안 뜸!</p>
<p>반대로 해야 폼에 안뜨고 목록에 뜸 !</p>
<h2 id="조회-및-출력-기능-구현">조회 및 출력 기능 구현</h2>
<h3 id="recordsource">RecordSource</h3>
<p>txt조회 컨트롤에 입력된 킥보드명을 포함하는 킥보드명이 표시되도록 하시오
포함! 문제 똑바로 읽기</p>
<pre><code>Me.RecordSource = &quot; select * from 킥보드 where 킥보드명 like &#39;*&quot; &amp; txt조회 &amp; &quot;*&#39;&quot;
</code></pre><p>like <em>txt조회</em> -&gt; like <code>&#39;</code><em>txt조회</em><code>&#39;</code>인거 기억하기</p>
<p>또 나는 select 킥보드명 이라고만 했는데 이러면 하위폼 연결이 이상하게 됨.
select <code>*</code>로 받아줄 것 !</p>
<h3 id="날짜형식">날짜형식</h3>
<p>오늘 날짜와 현재 시간을 2025-05-05 (월) 오전 10:30 처럼 표시되도록
컨트롤 원본과 형식 속성 설정</p>
<p>원본 -&gt; now()</p>
<p>형식 -&gt; yyyy-mm-dd (aaa) <strong>ampm hh:nn</strong></p>
<h3 id="docmd-msgbox">docmd msgbox</h3>
<p>메시지 상자에서 &lt;예&gt;를 클릭했을 때만 저장여부를 묻지않고 저장한 후 폼을 종료하시오.</p>
<pre><code>dim a
a = msgbox(&quot;폼을 종료하시겠습니까?&quot;, vbYesNo, &quot;폼 종료&quot;)
if a = vbyes then
    docmd.close **acForm**,&quot;채용회사&quot;,acSaveYes
end if</code></pre><h3 id="recordsetclonefindfirst">RecordsetClone.findfirst</h3>
<p>Me.RecordsetClone.FindFirst &quot;조건&quot;
여기는 =&quot;조건&quot;이 아니다!!!!!! </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250819]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250819</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250819</guid>
            <pubDate>Tue, 19 Aug 2025 16:17:14 GMT</pubDate>
            <description><![CDATA[<p>아직도 모르는게 있다는게 말이안됨</p>
<h1 id="엑셀">엑셀</h1>
<h2 id="계산작업">계산작업</h2>
<h3 id="modesngl">MODE.SNGL</h3>
<pre><code>MODE.SNGL(숫자들-범위-)</code></pre><p>조건에 만족한 대출액의 평균을 계산하시오
조건 : 고객등급이 &#39;최우수&#39;이면서 대출액이 최빈수 이하이거나 고객등급이 &#39;우수&#39;이면서 대출액이 최빈수 이하, MODE.SNGL함수 사용</p>
<p>표를 만들 때
고객등급 \ 조건
최우수 <br>우수 \</p>
<p>이런식으로 만들어야함!</p>
<h3 id="daverage">DAVERAGE</h3>
<p>데이터베이스 함수!
DAVERAGE(표, 평균구할 열번호-이름/숫자-, 조건)</p>
<p>표전체(필드명 포함),열(필드명)이름,조건(표)</p>
<p><a href="https://www.youtube.com/watch?v=OK-LzaueK8Y">해설</a>
18:00</p>
<h3 id="vlookup">vlookup</h3>
<pre><code>VLOOKUP(찾으려는 값, 찾을 범위, 몇번째 열에서 찾을지, [정확한 값/ 근사값])
정확한 값 = false = 0</code></pre><p><img src="https://velog.velcdn.com/images/mxnxae__/post/6fa3df65-1a61-4545-937a-b91892eb7c7b/image.png" alt=""></p>
<p>찾을범위!
VLOOKUP의 근사값 모드(TRUE) 동작:</p>
<p>오름차순으로 정렬!
찾는 값(lookup_value)보다 작거나 같은 값 중 가장 큰 값을 기준으로 삼음</p>
<p>즉, <strong>구간의 시작점(이상 값)</strong>만 표에 두면,
엑셀은 자동으로 그보다 작은 구간을 다 포함해서 “미만” 처리.</p>
<h2 id="분석작업">분석작업</h2>
<h3 id="데이터-유효성-검사">데이터 유효성 검사</h3>
<p>검사 대상 셀 하나하나에 대해, 그 셀을 기준으로 수식을 적용하는 것이기 때문에
범위에 대한 질문을 해도 영역의 첫번째 셀 값만 수식으로 적어줄 것!</p>
<p><code>MOD(C9:H9,12)=0</code>은 틀리고, <code>MOD(C9,12)=0</code>은 맞다</p>
<h2 id="기타작업">기타작업</h2>
<h3 id="ucase">UCASE</h3>
<p>대문자로 변환하는 함수</p>
<pre><code>UCASE(문자)
</code></pre><h3 id="for-each--next">FOR EACH ~ NEXT</h3>
<p>문법</p>
<pre><code>For Each element In collection
    &#39; 실행할 코드
Next element

# element : 컬렉션에서 꺼낸 개별 항목(변수처럼 씀)
# collection : 여러 개의 요소가 들어 있는 집합(예: Range, Worksheets, Workbooks 등)
</code></pre><p>선택한 범위 안의 값을 전부 대문자로 변환하려면 </p>
<pre><code class="language-Dim">
For Each c In Selection
    c.Value = UCase(c.Value)   &#39; 선택한 범위 안의 값을 전부 대문자로 변환
Next c</code></pre>
<p>여기서 c는 Range 타입 변수 
→ 반복문 돌 때마다 Selection 안에 포함된 셀 하나씩 담김</p>
<p>Selection은 실행할 때 마우스로 선택한 범위 전체
따라서 선택된 각 셀(c)을 순서대로 꺼내서 대문자로 바꿈</p>
<blockquote>
<p>Range(&quot;A1:B10&quot;) = “프로그래머가 지정한 범위”
Selection = “사용자가 선택한 범위”, 드래그 한 값</p>
</blockquote>
<ul>
<li>문제 : txt번호 컨트롤에서 조회할 번호를 입력한 후 cmd조회 단추를 클릭하면 txt종류, txt금액, txt지점에 해당하는 자료를 폼에 표시하고, 다음의 경우 메시지 상자를 표시하는 프로시저를 작성하시오.<ul>
<li>해당 대출번호의 정보가 없는 경우에는 &quot;조건에 일치하는 자료가 없습니다.&quot;라는 메시지 박스 표시</li>
<li>for each next문 이용</li>
<li>소문자를 입력할 때 대문자로 변환하여 조회</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/268d9797-7bc8-47f2-8a5e-822d5327e1c1/image.png" alt=""></p>
<p>대출번호의 정보가 있는지 없는지 확인하기 위해 
a를 b3~b15(대출번호)의 범위 값으로 잡고, -&gt; for each a in range(&quot;b3:b15&quot;)</p>
<p>a값이 txt번호값과 같다면 txt종류, txt금액, txt지점값을 입력 -&gt; if a=UCASE
isdata = 1로 설정</p>
<p>다르다면 -&gt; if isdata = 0</p>
<h1 id="엑세스">엑세스</h1>
<h2 id="입력-및-수정-기능-구현">입력 및 수정 기능 구현</h2>
<h3 id="테두리-스타일">테두리 스타일</h3>
<ul>
<li>문제: 폼의 크기를 조정할 수 없도록 설정
Access에서는 윈도우 창의 크기 조절 여부 자체를 ‘테두리 스타일’ 속성으로 컨트롤</li>
</ul>
<blockquote>
<p>테두리 스타일 = 두꺼움 → 크기 조절 가능
테두리 스타일 = 가늘게 → 크기 조절 불가
테두리 스타일 = 대화 상자 → 팝업처럼 고정 크기</p>
</blockquote>
<p>즉, Access는 “크기 조절 여부”를 따로 두는 속성이 없고, 테두리 스타일에 묶어둔 거</p>
<h2 id="조회-및-출력-기능-구현">조회 및 출력 기능 구현</h2>
<h3 id="순번">순번</h3>
<ul>
<li>count(*)</li>
</ul>
<p>특정 그룹이나 전체 레코드 개수를 세어서 순번처럼 사용.
보통 쿼리나 그룹화된 보고서에서 그룹 내 행 번호를 만들 때 사용함.
예: <code>=Count(*)</code>를 컨트롤 원본으로 하면 → 해당 그룹 내에서 몇 번째 레코드인지 표시됨.
👉 카운트 함수로 그룹 내 행 번호를 구하는 방식</p>
<ul>
<li>1
컨트롤 원본을 그냥 =1로 두면 모든 행에 1만 표시됨.
대신 해당 컨트롤의 <strong>집계 기능(누적 합계 = &quot;그룹 전체&quot; 또는 &quot;구간별&quot;)</strong> 을 켜주면,
행이 진행될수록 1,2,3… 식으로 순번처럼 올라감.
👉 보고서의 누적 합계 기능을 이용한 순번</li>
</ul>
<h3 id="이벤트-프로시저">이벤트 프로시저</h3>
<ul>
<li><p>recordSource : 폼이나 보고서가 데이터를 가져오는 SQL문 또는 테이블/쿼리 이름
select문 사용하면 됨!!!!</p>
</li>
<li><p>Requery: 폼이나 컨트롤의 데이터를 새로 고침(재조회)하는 메서드</p>
</li>
</ul>
<pre><code>me.recordsource = &quot;select * from 강사 where 강사명 = &#39;&quot; &amp; txt조회 &amp; &quot;&#39;&quot;
me.requery</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250817]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250817</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250817</guid>
            <pubDate>Sun, 17 Aug 2025 10:26:44 GMT</pubDate>
            <description><![CDATA[<p>저번주 목요일에 친 컴활 무조건 탈락임 ㅜ..
시간배분을 좀 더 촉박하게 할 것
계산문제 제외 30분컷 해내기
여기서는 무조건 다 맞아야한다!!</p>
<h1 id="엑셀">엑셀</h1>
<h2 id="기본작업">기본작업</h2>
<h3 id="페이지-레이아웃">페이지 레이아웃</h3>
<h4 id="여백-좁게">여백 좁게</h4>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/a6cb9812-541c-4b7f-957a-4e05d927c832/image.png" alt=""></p>
<p>여백 수기입력 되지만 레이아웃 칸에 있음.</p>
<h2 id="계산작업vba">계산작업(VBA)</h2>
<blockquote>
<p>기출6회. 비고는 계좌번호의 4번째부터 2글자가 ~면 ..</p>
</blockquote>
<p>4번째부터 2글자라길래 right(&quot;글자&quot;,4,2)인줄 알았는데 애초에 안되는거였다.
right(&quot;글자&quot;,숫자)해서 오른쪽에서 n개글자만 추출하는 것!</p>
<p>k번째부터 n개의 글자를 뽑을 땐 ** mid함수**를 써야한다</p>
<pre><code>Mid(문자열, 시작위치, 길이)

Mid(&quot;ABCDEFG&quot;, 4, 2)   &#39;결과: &quot;DE&quot;
</code></pre><p>mid도 결국 str함수기 때문에 비교할 때 &quot;&quot;로 하는게 좋지만, 엑셀 vba에서는 내부에서 자체적으로 숫자 비교가 가능하게 해주긴 함.</p>
<h2 id="분석작업">분석작업</h2>
<blockquote>
<p>기출6 : 셀 서식에서 사죵자 지정을 이용하여 기본단위가 &#39;천&#39;이 되도록 설정</p>
</blockquote>
<p><code>#,###,</code>로 지정하면 됨</p>
<pre><code>#,### = 천 단위마다 쉼표 구분

#,###,
마지막에 , = 표시 = 천 단위로 나눠서 표시
-&gt; 기본 단위를 ‘천’으로 바꾸는 효과</code></pre><h2 id="기타작업">기타작업</h2>
<h3 id="vba-프로그래밍">VBA 프로그래밍</h3>
<h3 id="caption">caption</h3>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/e3565422-9804-4df0-9a0c-bf23b179a504/image.png" alt=""></p>
<p>opt은행.caption하면
caption값인 은행이체가 값으로 들어감.</p>
<h3 id="unload-me">UNLOAD ME</h3>
<p>문제에서 창 닫기 뿐만아니라 <strong>메모리에서 제거</strong> 된다는 표현도 UNLOAD ME 사용하는 것</p>
<h1 id="엑세스">엑세스</h1>
<h2 id="입력-및-수정기능-구현---폼">입력 및 수정기능 구현 - 폼</h2>
<h3 id="filter">filter</h3>
<p>문제 : &#39;lst부서명&#39; 컨트롤에서 선택한 부서명에 대한 사원 명단이 표시되도록 한 후, &#39;chk전체부서&#39;의 값이 False로 되도록 구현하시오</p>
<p>정답</p>
<pre><code>if me.chk전체부서 then
    me.lst부서명 = null
    me.filteron = false
end if
</code></pre><p>확인란 컨트롤(chk전체부서)는 그 자체가 T/F값을 가지기 때문에 me.chk전체부서 = True 라고 안하고 그냥 이름만 써도 됨.
확인란이 선택된 경우 목록상자(lst부서명)의 선택행은 해제 -&gt; null
filter가 뭔지는 문제에서 나와있지 않지만, 적용된 필터 기능을 해제해야함.</p>
<h2 id="조회-및-출력기능-구현---보고서">조회 및 출력기능 구현 - 보고서</h2>
<h3 id="count">count</h3>
<p>인원수 셀 때 count(*)하는데 언제 <code>누적합계-그룹</code>을 선택해야하지?</p>
<p>문제 : 부서코드 바닥글의 &#39;txt인원수&#39; 컨트롤에는 해당그룹의 인원수가 표시되고</p>
<p>라길래 당연히 그룹으로 했는데 이거때문에 틀렸다 ㅠ
기본으로 안하고 =1 이런식으로 컨트롤 원본 설정할때만 그룹 선택하는건가?</p>
<h3 id="filter-1">filter</h3>
<p>문제 : &#39;lst부서명&#39; 컨트롤을 클릭하면 &#39;lst부서명&#39; 컨트롤에서 선택한 부서명에 대한 사원명단이 표시되도록 한 후, &#39;chk전체부서&#39;의 값이 false가 되도록 구현</p>
<pre><code>me.filter= &quot;부서명 =&#39;&quot; &amp; lst부서명 &amp; &quot;&#39;&quot;
me.filteron = True
me.chk전체부서 = False</code></pre><h2 id="처리-기능-구현">처리 기능 구현</h2>
<h3 id="열-머리글">열 머리글</h3>
<p>열의 순서를 지정할 때
열머리글에서 하나하나 치기.
&quot;사원&quot;,&quot;대리&quot;,&quot;과장&quot;,&quot;차장&quot;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250814]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250814</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250814</guid>
            <pubDate>Thu, 14 Aug 2025 00:37:43 GMT</pubDate>
            <description><![CDATA[<h1 id="피벗테이블">피벗테이블</h1>
<h2 id="-표시없애기">+-표시없애기</h2>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/4c63a4b0-fd99-4496-9b46-0320ebffb0a5/image.png" alt=""></p>
<p>출시일의 -표기 없애는 법 : 피벗 테이블 분석 - 표시 - +-단추
<img src="https://velog.velcdn.com/images/mxnxae__/post/98308afd-3976-48ce-9fbb-a9a61b2bed9f/image.png" alt="">
잘 확인하면 바로 있다잉 </p>
<h2 id="자동-서식">자동 서식</h2>
<p>옵션 - 빠른실행도구모음 - 모든명령 - 자동서식
<img src="https://velog.velcdn.com/images/mxnxae__/post/76e4c456-6055-4694-8062-e669a0b86f66/image.png" alt="">
맨 오른쪽</p>
<h1 id="시나리오">시나리오</h1>
<p>바뀔 값을 적어두고, 요약에서 결과값 적기</p>
<h1 id="정렬">정렬</h1>
<h1 id="프로시저">프로시저</h1>
<p>계산(사칙연산 등)에 사용되는 cell값은 <strong>숫자</strong>여야하기때문에 <strong>value</strong>로 적어줄 것.</p>
<p>i = [셀].currentregion.rows.count + 셀 행 수 - 1</p>
<h1 id="입력마스크">입력마스크</h1>
<ul>
<li>L : 영문자/한자 (필수)</li>
<li>A    : 영문자·숫자(필수)</li>
<li>a    : 영문자·숫자(선택)</li>
</ul>
<h1 id="유효성검사">유효성검사</h1>
<p>값이 여러 개일 땐 In() 사용 → In(&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,...)
값이 2~3개라면 OR도 가능</p>
<h1 id="콤보상자-행-원본">콤보상자 행 원본</h1>
<p>콤보상자 행 원본에&quot;VAT&quot;, &quot;FRE&quot;만 표시되도록 설정
: 행원본유형 - 값 목록, 행 원본 = VAT<strong>;</strong>FRE
<code>;</code>인거 기억하기</p>
<h1 id="도메인-집계-함수">도메인 집계 함수</h1>
<blockquote>
<p>D(&quot;필드명&quot;,&quot;테이블명&quot;,&quot;조건&quot;)
(&quot;필드&quot;,&quot;원본&quot;,&quot;조건&quot;)</p>
</blockquote>
<p>&lt;상품정보&gt;폼에 &#39;txt총판매금액&#39;컨트롤에는 &lt;판매상세&gt;테이블에서 해당 상품코드에 대한 &#39;금액&#39;필드의 합계가 표시되도록 구현하시오
: dsum(&quot;[금액]&quot;,&quot;[판매상세]&quot;,&quot;[상품코드]=&quot;txt상품코드&quot;) -&gt; 틀림
dsum(&quot;[금액]&quot;,&quot;[판매상세]&quot;,&quot;[상품코드]= &#39;&quot; &amp; txt상품코드 &amp; &quot;&#39;&quot;)</p>
<h1 id="join">join</h1>
<p>~에는 있고 ~에는 없다</p>
<ul>
<li>not in
&lt;판매내역&gt;테이블을 이용하여 최근 매출이 없는 사원에 대해 &lt;사원&gt;테이블의 ~..
not in (select 사원코드 from 판매내역)</li>
</ul>
<ul>
<li>is null
판매 경험이 한번도 없는 직원의 ~를 조회하시오
&lt;사원&gt;,&lt;판매내역&gt;테이블 이용</li>
</ul>
<p>조인 속성에서 사원에서는 모든레코드, 판매내역에서는 일치레코드만.</p>
<p>사원테이블의 사원코드,이름,입사일을 사용하는데, 판매내역 테이블의 판매번호는 is null.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250813]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250813</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250813</guid>
            <pubDate>Wed, 13 Aug 2025 00:17:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>엑셀</p>
</blockquote>
<h1 id="기출문제-따라잡기1-3">기출문제 따라잡기[1-3]</h1>
<h2 id="기본작업">기본작업</h2>
<p>~가 아니다 = &lt;&gt;</p>
<h2 id="피벗테이블">피벗테이블</h2>
<ul>
<li>그룹화 : 행 위에서 마우스 오른쪽 - 그룹</li>
<li>열합계 : 개요설정 마친 후, 계산필드 - 행에 마우스 오른쪽</li>
<li>행 <strong>이름</strong> 제대로 확인하기!!! 이거 다르면 틀린거임!!</li>
<li>드래그로 수동움직임 가능함</li>
</ul>
<h2 id="정렬">정렬</h2>
<p>셀값을 기준으로 정렬 한 후 색깔표시
<strong>다음 기준에서 글꼴색</strong></p>
<h2 id="차트">차트</h2>
<h3 id="계열겹치기">계열겹치기</h3>
<p>데이터 계열 선택 후 데이터 계열 서식 - 계열 옵션</p>
<h2 id="데이터-유효성-검사">데이터 유효성 검사</h2>
<h3 id="목록">목록</h3>
<p>문제 : 데이터 유효성 검사 도구를 이용하여 &#39;사원, 대리, ~&#39;만 입력되도록 제한대상을 설정하시오
-&gt; 데이터 유효성 검사 목록, <code>&quot;</code>없이 텍스트만 치면 됨.</p>
<h2 id="자동필터">자동필터</h2>
<p>데이터 - 정렬 및 필터 - 필터, <strong>목록단추 선택후 숫자 - 사용자지정</strong>
날짜도 그랬듯, 시간도 10시 이후라면 &gt;=10:00로 맞춰줄것!</p>
<h2 id="vba">VBA</h2>
<h3 id="cmb에-txt-입력">cmb에 txt 입력</h3>
<ul>
<li>cmb에 텍스트를 입력
cmb등급에 &quot;vip&quot;, &quot;우수&quot;, &quot;일반&quot;이 표시되도록 프로시저를 작성하시오
하면 additem을 해주기!
cmb등급.additem &quot;vip&quot;
cmb등급.additem &quot;우수&quot;
...</li>
</ul>
<hr>
<blockquote>
<p>EXCESS</p>
</blockquote>
<h2 id="db구축">DB구축</h2>
<h3 id="기본값">기본값</h3>
<ul>
<li>새로운 레코드가 추가되는 경우 &#39;시간&#39;이라는 값이 입력되도록 설정
기본값에서 시간. <strong>형식 아님!</strong></li>
</ul>
<h3 id="ime-모드">IME 모드</h3>
<ul>
<li>해당 필드에 데이터가 입력될 때 자동적으로 &#39;영문&#39;입력상태로 변환 
영숫자반자!</li>
</ul>
<h3 id="입력마스크">입력마스크</h3>
<p><code>-</code> 표기하기 위해서 000;0;
마지막 <code>;</code>도 붙여주기!!</p>
<p>0 이상의 값 :</p>
<ul>
<li>A부터 E까지의 값만 입력되도록 설정
IN (&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;D&quot;,&quot;E&quot;)</li>
</ul>
<h2 id="입력수정">입력/수정</h2>
<h3 id="레코드-선택기">레코드 선택기</h3>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/30df00f4-a91d-43de-9cbc-e98ef5cb9519/image.png" alt=""></p>
<p>흰바탕의 개미똥꾸녕만한 삼각형이 레코드 선택기</p>
<h3 id="경고--닫기">경고 / 닫기</h3>
<ul>
<li>경고 메시지 상자 표시 후 예를 클릭할 때만 폼이 닫히도록 (docmd, msgbox, dim a)</li>
</ul>
<pre><code>dim a 
a = msgbox(&quot;내용&quot;, vbQuestion + vbYesNo, &quot;제목&quot;)
if a = vbYes then
    docmd.close
end if
</code></pre><p><strong>vbQuestion + vbYesNo
a = vbYes</strong></p>
<h3 id="추가쿼리">추가쿼리</h3>
<p>테이블에 내용 추가할 때</p>
<p>쿼리디자인 - 필요 필드 드래그 - 쿼리 디자인 보기 마우스 오른쪽, <strong>쿼리유형-추가쿼리</strong>
<img src="https://velog.velcdn.com/images/mxnxae__/post/db949450-2c78-4f6b-a56c-66342612b957/image.png" alt=""></p>
<h3 id="a테이블에-존재하지-않는-레코드만-추가">a테이블에 존재하지 않는 레코드만 추가</h3>
<p>not in (select 필드명 from a)</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/627d0e0d-d39f-43e6-9465-5a4eb4d67947/image.png" alt=""></p>
<p>이렇게 테이블을 두개 띄워놓으면 inner로 인식되기때문에, 하나만 띄울 것!</p>
<h2 id="이벤트-프로시저">이벤트 프로시저</h2>
<pre><code>Private Sub cmd조회_Click()
Me.RecordSource = &quot;select 공급업체명 from 거래물품 where 공급업체명 = &#39;&quot; &amp; txt공급업체명&amp; &quot;&#39;&quot;
End Sub</code></pre><p>안돌아감.
왜냐하면 txt<code></code>&amp;로 해야하기 때문... 띄어쓰기가 없으면 오류가 남.....</p>
<h3 id="폼닫기">폼닫기</h3>
<p>Docmd.close acForm,&quot;배치입력&quot;,acSaveYes</p>
<h2 id="하위-쿼리-작성">하위 쿼리 작성</h2>
<p>select문 사용하라는 뜻
여기서도 sql이랑 똑같다.. <strong>집계는 groupby해서 having으로 조건 넣어주기..</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250812]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250812</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250812</guid>
            <pubDate>Mon, 11 Aug 2025 14:45:20 GMT</pubDate>
            <description><![CDATA[<h1 id="폼완성">폼완성</h1>
<h2 id="도메인-집계-함수">도메인 집계 함수</h2>
<p>Dlookup, Dsum, Davg(&quot;필드&quot;,&quot;원본&quot;,&quot;조건&quot;)
원본은 테이블이나 쿼리를 의미함
꼭 전부 따옴표를 붙여주기!</p>
<table>
<thead>
<tr>
<th>용어</th>
<th>역할</th>
<th>쉽게 비유</th>
</tr>
</thead>
<tbody><tr>
<td><strong>테이블(Table)</strong></td>
<td>데이터를 저장하는 기본 표</td>
<td>엑셀의 시트</td>
</tr>
<tr>
<td><strong>필드(Field)</strong></td>
<td>테이블의 <strong>열</strong> → 데이터의 속성/종류</td>
<td>엑셀 시트의 <strong>열 제목</strong></td>
</tr>
<tr>
<td><strong>레코드(Record)</strong></td>
<td>테이블의 <strong>행</strong> → 한 건의 데이터</td>
<td>엑셀 시트의 한 줄</td>
</tr>
<tr>
<td><strong>쿼리(Query)</strong></td>
<td>테이블에 있는 데이터를 <strong>가져오거나 가공하는 도구</strong></td>
<td>엑셀의 필터, 수식, 피벗테이블 같은 기능</td>
</tr>
</tbody></table>
<ul>
<li>필드 : 가져올 필드명(열이름), 출력할 값 의미 
필드를 쓸 때는 무조건 대괄호!
표시 예 : 씨앗명 금계국의 총 입고수량이 10인 경우 → 금계국 총입고수량 10개
=[씨앗명] &amp; &quot; 총입고수량 &quot; &amp; DSum(&quot;입고수량&quot;,&quot;씨앗입고&quot;,&quot;씨앗코드=txt씨앗코드&quot;) &amp; &quot;개&quot;</li>
<li>원본 : 값을 찾을 원본(테이블명 또는 쿼리명)</li>
<li>조건 : 찾을 조건</li>
</ul>
<blockquote>
<p>Q1. 본문의 ‘txt씨앗명’ 컨트롤에는 씨앗코드가 ‘txt씨앗코드’에 해당하는 씨앗명이 표시되도록 설정하시오.</p>
</blockquote>
<blockquote>
<p>A1. Dlookup(&quot;씨앗명&quot;,&quot;씨앗&quot;,&quot;씨앗코드 = txt씨앗코드&quot;)</p>
</blockquote>
<blockquote>
<p>Q2. 씨앗코드가 ‘txt씨앗코드’에 해당하는 입고수량의 합계가 표시되도록 설정하시오.</p>
</blockquote>
<blockquote>
<p>A2. DSum(&quot;입고수량&quot;,&quot;씨앗입고&quot;,&quot;씨앗코드=txt씨앗코드&quot;)</p>
</blockquote>
<h2 id="모달">모달</h2>
<p>속성시트 - 폼 - 기타 - 모달
폼이 로드 될 때 다른 개체들이 선택되지 않도록 관련 속성을 설정 -&gt; <strong>모달 예!</strong></p>
<h2 id="함수">함수</h2>
<h3 id="string">string</h3>
<p>같은 문자를 여러 번 반복해서 만든 문자열을 반환하는 함수</p>
<p>String(number, character)
반복할 횟수, 반복할 문자. 문자는&quot;&quot;로 감쌀 것</p>
<h3 id="dateadd">dateadd</h3>
<p>DateAdd(interval, number, date)</p>
<table>
<thead>
<tr>
<th>인수</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>interval</strong></td>
<td>더하거나 뺄 <strong>단위</strong> (문자열)</td>
</tr>
<tr>
<td><strong>number</strong></td>
<td>더하거나 뺄 <strong>숫자</strong> (음수면 빼기)</td>
</tr>
<tr>
<td><strong>date</strong></td>
<td>기준이 되는 날짜/시간</td>
</tr>
</tbody></table>
<p>interval(단위) 코드</p>
<table>
<thead>
<tr>
<th>코드</th>
<th>의미</th>
<th>예시</th>
</tr>
</thead>
<tbody><tr>
<td><code>&quot;yyyy&quot;</code></td>
<td>연도</td>
<td>1년 후</td>
</tr>
<tr>
<td><code>&quot;q&quot;</code></td>
<td>분기</td>
<td>1분기 후</td>
</tr>
<tr>
<td><code>&quot;m&quot;</code></td>
<td>월</td>
<td>2개월 후</td>
</tr>
<tr>
<td><code>&quot;y&quot;</code></td>
<td>일(연도 기준)</td>
<td>5일 후</td>
</tr>
<tr>
<td><code>&quot;d&quot;</code></td>
<td>일(월·연도 무관)</td>
<td>10일 후</td>
</tr>
<tr>
<td><code>&quot;w&quot;</code></td>
<td>요일(일주일 단위)</td>
<td>1주 후</td>
</tr>
<tr>
<td><code>&quot;ww&quot;</code></td>
<td>주(연도 기준)</td>
<td>3주 후</td>
</tr>
<tr>
<td><code>&quot;h&quot;</code></td>
<td>시</td>
<td>5시간 후</td>
</tr>
<tr>
<td><code>&quot;n&quot;</code></td>
<td>분</td>
<td>30분 후</td>
</tr>
<tr>
<td><code>&quot;s&quot;</code></td>
<td>초</td>
<td>10초 후</td>
</tr>
</tbody></table>
<p><strong>날짜 이후는 크거나 같다(&gt;=)</strong></p>
<h3 id="iif">iif</h3>
<p>조건에 따라 값을 다르게 반환하는 함수(CASE WHEN 같은 역할)
IIf(<strong>조건</strong>, 참일 때 값, 거짓일 때 값)</p>
<h3 id="mod">mod</h3>
<p>괄호를 쓰지 않는다!
<code>값 Mod 나눌값</code></p>
<h3 id="choose">choose</h3>
<p>인덱스 번호를 기준으로 여러 값 중 하나를 선택해서 반환하는 함수
<strong>choose는 1부터 시작!</strong>
<code>Choose(index, 값1, 값2, 값3, ...)</code></p>
<h3 id="replace">REPLACE</h3>
<p>REPLACE(문자, 고칠문자, 새문자)</p>
<h3 id="datepart">DATEPART</h3>
<p>DATEPART(&quot;날짜형식&quot;,날짜)</p>
<h1 id="매크로">매크로</h1>
<h2 id="조건">조건</h2>
<p>[필드명] = [forms]![현재폼명]![컨트롤명]</p>
<h1 id="보고서">보고서</h1>
<h2 id="암호화">암호화</h2>
<p>‘txt전화번호’ 컨트롤에 연결된 전화번호가 <code>*</code> 형태로 표시 되도록 암호화하기 위해 입력마스크를 설정하시오.</p>
<p>데이터 - 입력마스크 - password</p>
<h1 id="이벤트-프로시저">이벤트 프로시저</h1>
<p><strong>access의 조건 : 필드명 = 컨트롤명</strong></p>
<blockquote>
<p>예제
&quot; 이름 = &#39; &quot; &amp; txt검색 &amp; &quot; &#39; &quot;(문자일경우 작은따옴표, 컨트롤에 들어가는 값을 반드시 문자라는 뜻)</p>
</blockquote>
<ul>
<li>문자는 &#39;&#39;</li>
<li>날짜는 ##</li>
<li>숫자는 아무것도 붙이지 말 것</li>
</ul>
<p>필드 = 데이터베이스의 &quot;열&quot;
레코드 = 데이터베이스의 &quot;행&quot;</p>
<p>컨트롤 = 폼/보고서에서 데이터(필드 값)를 표시하거나 조작하는 &quot;도구&quot;
txt검색, cmd해제 ...</p>
<h2 id="filter">filter</h2>
<p>me.filter = 조건
me.filteron = true</p>
<h2 id="recordsource">recordsource</h2>
<blockquote>
<p>me.recordsource = &quot;select * from 테이블 where 조건 &quot;</p>
</blockquote>
<ul>
<li><p>‘최고주문량(cmd최고주문량)’ 버튼을 클릭하면 ‘수량’의 값이 10이상 20이하인 값만 <strong>검색</strong>되도록 하시오.</p>
</li>
<li><p>‘txt월조회’ 컨트롤에 입고일자의 월을 입력하고 ‘조회(cmd조회)’ 단추를 클릭하면 입고일자의 월에 해당하는 레코드만 <strong>조회</strong>되는 이벤트 프로시저를 구현하시오.</p>
</li>
<li><p>‘txt최소수량’ 컨트롤에는 입고수량의 최소값을 입력하고 ‘txt최대수량’ 컨트롤에는 입고수량의 최대값을 입력한 후 ‘검색(cmd검색)’ 단추를 클릭하면 입고수량의 최소수량과 최대수량 사이의 레코드가 <strong>조회</strong>되도록 이벤트 프로시저를 구현하시오</p>
</li>
</ul>
<h2 id="bookmark">bookmark</h2>
<blockquote>
<p>me.recordsetclone.findfirst &quot;조건&quot;
me.bookmark = me.recordsetclone.bookmark</p>
</blockquote>
<ul>
<li>‘txt찾기’ 컨트롤에 씨앗명의 일부를 입력하고 ‘찾기(cmd찾기)’ 단추를 클릭하면 입력된 값을 포함하는 첫 번째 레코드로 <strong>이동</strong>하는 이벤트 프로시저를 구현하시오.</li>
</ul>
<h3 id="recordsource-vs-recordsetclone">recordSource vs recordSetClone</h3>
<table>
<thead>
<tr>
<th>구분</th>
<th>목적</th>
<th>비유</th>
<th>기억 키워드</th>
</tr>
</thead>
<tbody><tr>
<td><strong>RecordSource</strong></td>
<td>데이터 집합 <strong>바꾸기</strong></td>
<td>책을 통째로 갈아치움</td>
<td><strong>소스(Source) = 재료 바꾸기</strong></td>
</tr>
<tr>
<td><strong>RecordsetClone + Bookmark</strong></td>
<td>현재 데이터에서 <strong>이동</strong></td>
<td>책 페이지 넘김</td>
<td><strong>북마크(Bookmark) = 위치 표시</strong></td>
</tr>
</tbody></table>
<h2 id="orderby">orderby</h2>
<p>me.orderby = &quot;필드명 &quot;
me.orderbyon = true
** <code>=</code>, <code>&quot;</code> 붙이는거 잊지말기...**</p>
<h2 id="applyfilter">applyfilter</h2>
<p>docmd.applyfilter, &quot;조건&quot;</p>
<h2 id="openformreport">openform/report</h2>
<p>docmd.openform &quot;폼이름&quot;, acnormal
docmd.openform &quot;폼이름&quot;, acnormal,,&quot;조건&quot;
docmd.openform &quot;폼이름&quot;, acpreview,,&quot;조건&quot; -&gt; 인쇄미리보기</p>
<h2 id="gotorecord">gotorecord</h2>
<p>docmd.gotorecord acDataForm, &quot;폼이름&quot;, acNewRec 
acNewRec : 새로운 레코드로 이동</p>
<h2 id="msgbox">msgbox</h2>
<p>dim aa
aa = msgbox(내용, ybYesNo, &quot;&quot;)</p>
<p>if aa = vbYes then
do cmd.close
end if</p>
<p>if txt구매수량 &lt;= 1 then
msgbox &quot;내용&quot;
end if ~ ..</p>
<h3 id="vb">vb</h3>
<p>vbyesnocancel
acSaveYes -&gt; 자동저장(저장여부 묻지않음)</p>
<h2 id="setfocus">setfocus</h2>
<p>txt이름.setFocus
txt이름.FontBold = True</p>
<h2 id="sql구조">sql구조</h2>
<p>requery메서드 쓰라는게 이거임!</p>
<p>docmd.runsql &quot; <del>~</del> &quot;
여기서는 &quot;text주소&quot; 이런 따옴표 안함</p>
<h3 id="추가">추가</h3>
<blockquote>
<p>insert into 테이블명(필드명, 필드명 ...) values(값1, 값2, ..)
docmd.runsql &quot;insert into ~ ...&quot;</p>
</blockquote>
<pre><code>예시
DoCmd.RunSQL &quot;insert into 회원 values ( text고객ID, text이름,text전화번호,text우편번호,text주소, text이메일)&quot;
Me.Requery # 바로실행하라는 의미</code></pre><h3 id="변경업데이트">변경(업데이트)</h3>
<p>update 테이블명 set 필드명 = 값</p>
<h3 id="삭제">삭제</h3>
<p>delete from 테이블명 where 조건식</p>
<h2 id="docmd-vs-me">docmd vs me</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th><code>DoCmd</code></th>
<th><code>Me.</code></th>
</tr>
</thead>
<tbody><tr>
<td><strong>역할</strong></td>
<td>Access에 **&quot;명령&quot;**을 내리는 것</td>
<td>현재 열려 있는 <strong>폼/보고서 자기 자신</strong>을 조작</td>
</tr>
<tr>
<td><strong>의미</strong></td>
<td>&quot;Do Command&quot; → Access에 시켜서 실행</td>
<td>&quot;나(Me)&quot; → 지금 실행 중인 개체의 속성/메서드</td>
</tr>
<tr>
<td><strong>사용 범위</strong></td>
<td><strong>다른 폼, 보고서, DB 전체</strong>에 적용 가능</td>
<td>**현재 개체(폼/보고서)**에만 적용</td>
</tr>
<tr>
<td><strong>예시</strong></td>
<td><code>DoCmd.OpenForm &quot;폼이름&quot;</code> → 다른 폼 열기</td>
<td><code>Me.Filter = &quot;조건&quot;</code> → 지금 보고 있는 폼에 필터 적용</td>
</tr>
</tbody></table>
<blockquote>
<p>me</p>
</blockquote>
<ul>
<li>필터
Me.Filter = &quot;조건&quot;
Me.FilterOn = True</li>
<li>레코드 소스
Me.RecordSource = &quot;SELECT * FROM 테이블 WHERE 조건&quot;</li>
<li>레코드셋 클론 + 북마크 (특정 레코드로 이동)
Me.RecordsetClone.FindFirst &quot;조건&quot;
Me.Bookmark = me.RecordsetClone.Bookmark</li>
<li>정렬
Me.OrderBy = &quot;필드명&quot;
Me.OrderByOn = True</li>
<li>컨트롤 포커스/속성 변경
txt이름.SetFocus
txt이름.FontBold = True</li>
</ul>
<blockquote>
<p>docmd</p>
</blockquote>
<ul>
<li>필터 적용
DoCmd.ApplyFilter , &quot;조건&quot;</li>
<li>폼/보고서 열기
DoCmd.OpenForm &quot;폼이름&quot;, acNormal
DoCmd.OpenForm &quot;폼이름&quot;, acNormal, , &quot;조건&quot;
DoCmd.OpenForm &quot;폼이름&quot;, acPreview, , &quot;조건&quot;  &#39; 인쇄 미리보기</li>
<li>레코드 이동
DoCmd.GoToRecord acDataForm, &quot;폼이름&quot;, acNewRec</li>
<li>SQL 실행
DoCmd.RunSQL &quot;INSERT INTO ... &quot;</li>
</ul>
<h1 id="쿼리-작성">쿼리 작성</h1>
<h2 id="이름바꾸기">이름바꾸기</h2>
<p>바꿀이름명:<code></code>원래이름
바꿀이름 뒤에 <code>:</code> 딱붙이고, 원래 이름 앞에 한 칸 띄우는게 포인트!</p>
<p>주소지: REPLACE([주소],&quot;서울특별시&quot;,&quot;서울시&quot;)</p>
<p>주소는 원래 있던 필드니까 []로 씌워주기!</p>
<h2 id="첫글자">첫글자</h2>
<p>첫글자가 a~d로 시작 -&gt; 조건 <strong>LIKE &quot;[A-D]*&quot;</strong>
[], *, &quot;&quot;, LIKE 모두 중요함!</p>
<p>쿼리 만들때 조건에 들어가는 IN은 []안함
EX) 씨앗명이 양귀비와 메밀꽃
=&gt; 조건 IN(&quot;양귀비&quot;,&quot;메밀꽃&quot;)</p>
<h2 id="요약">요약</h2>
<p>개수, 합계, 요약, 최대/최소는 요약에 들어가서 해야함!</p>
<h2 id="매개변수">매개변수</h2>
<p>조건에 []를 이용해서 적기!
Like &quot;*&quot; &amp; [검색할 씨앗명의 일부를 입력하시오] &amp; &quot;*&quot;</p>
<h2 id="불일치쿼리">불일치쿼리</h2>
<blockquote>
<p>&lt;씨앗&gt; 테이블의 씨앗코드에는 존재하지만 &lt;주문&gt; 테이블의 씨앗코드에는 존재하지 않는 자료를 조회하는 쿼리를 작성하시오.</p>
</blockquote>
<p>조인속성</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250811]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250811</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250811</guid>
            <pubDate>Mon, 11 Aug 2025 03:02:05 GMT</pubDate>
            <description><![CDATA[<h1 id="분석작업">분석작업</h1>
<h2 id="데이터-유효성-검사">데이터 유효성 검사</h2>
<p>데이터 - 데이터 도구 - 데이터 유효성 검사</p>
<p>데이터 유효성 검사는 검사할 범위를 먼저 설정해야함.
문자로 값을 제한할 때는 제한대상을 목록으로 설정, 따옴표를 붙이면 안됨</p>
<h3 id="countif">COUNTIF</h3>
<p>COUNTIF(범위, 조건) : 범위에서 조건에 만족하는 갯수를 셈
중복값 확인할 때 1이면 중복없음</p>
<pre><code>=COUNTIF(범위(고정), 값1)=1</code></pre><h3 id="search">SEARCH</h3>
<p>SEARCH(찾을문자, 문자): 찾을문자가 문자에 몇번째에 있는가</p>
<h2 id="부분합">부분합</h2>
<p>부분합하기 전, 정렬을 먼저 해야함!</p>
<h2 id="통합">통합</h2>
<p>통합하기 전 드래그 해놔야함!</p>
<h2 id="데이터-표">데이터 표</h2>
<p>데이터 표는 행/열 구분이 반대임
그냥 가로/세로 순서라고 생각하기</p>
<h1 id="차트">차트</h1>
<h2 id="도형-스타일">도형 스타일</h2>
<p>차트도구 - 서식 - 도형 스타일 </p>
<h2 id="기본-주-세로-눈금-선">기본 주 세로 눈금 선</h2>
<p>+버튼 클릭 후 설정</p>
<h2 id="차트-종류-전체-원뿔형">차트 종류 전체 원뿔형</h2>
<p>3차원 묶은 세로 막대형 변경 - 데이터 계열 서식 - 전체 원뿔형</p>
<h2 id="데이터-표-1">데이터 표</h2>
<p>+버튼 클릭 후 데이터테이블(데이터 테이블=데이터 표)</p>
<h1 id="매크로">매크로</h1>
<p>개발도구 - 매크로기록 </p>
<h2 id="사용자-서식-지정">사용자 서식 지정</h2>
<table>
<thead>
<tr>
<th></th>
<th>구역1</th>
<th>구역2</th>
<th>구역3</th>
<th>구역4</th>
</tr>
</thead>
<tbody><tr>
<td><strong>의미</strong></td>
<td>양수</td>
<td>음수</td>
<td>0 (Zero)</td>
<td>문자 (Text)</td>
</tr>
<tr>
<td><strong>적용 예시</strong></td>
<td><code>#,##0</code> → 1,234</td>
<td><code>[빨강]-#,##0</code> → -1,234 (빨간색)</td>
<td><code>&quot;Zero&quot;</code> → 값이 0이면 Zero 출력</td>
<td><code>&quot;문자&quot;</code> → 텍스트면 &quot;문자&quot; 출력</td>
</tr>
</tbody></table>
<h2 id="너비만큼-채우기">너비만큼 채우기</h2>
<p>[조건]<code>*</code>채울문자#,##0
<code>*채울문자</code>인거 기억하기!! 별 뒤에 문자</p>
<h1 id="프로시저">프로시저</h1>
<p>개발도구 - 디자인모드</p>
<p>cmb이름.show
행 = [cell].CurrentRegion.Rows.Count + cell의 행 수</p>
<p>cmb이름.rowsource = &quot;범:위&quot;
cmb이름.column<strong>count</strong> = n (범위의 열 개수)
만약에 열이 1개밖에 없다면 굳이 안해도 됨</p>
<ol>
<li>Cells(행, 2) = cmb구분.List(cmb구분.ListIndex, 0)</li>
</ol>
<ul>
<li>.ListIndex → 콤보박스에서 현재 선택된 항목의 인덱스(0부터 시작)</li>
<li>.List(행번호, 열번호) → 콤보박스 목록에서 해당 위치의 값 가져오기</li>
</ul>
<ol start="2">
<li>Cells(행, 2) = cmb주문메뉴.Column(0)
열이 하나밖에 없다면 cmb이름.value하면 됨</li>
</ol>
<p>Cells(행, 3) = txt아동명.Value
Cells(행, 8) = (Hour(Cells(행, 7)) - Hour(Cells(행, 6))) * Cells(행, 5)</p>
<h3 id="val">val</h3>
<p>val(문자열)
문자열의 왼쪽부터 읽어서 숫자로 변환, 변환 불가능하면 0 반환</p>
<pre><code>Val(&quot;123&quot;)          &#39; 결과: 123
Val(&quot;  45.67&quot;)      &#39; 결과: 45.67   (앞 공백 무시)
Val(&quot;100원&quot;)        &#39; 결과: 100     (&quot;원&quot;에서 멈춤)
Val(&quot;온도25&quot;)       &#39; 결과: 0       (처음부터 숫자가 없으므로 0)
Val(&quot;12,345&quot;)       &#39; 결과: 12      (쉼표에서 멈춤)</code></pre><h2 id="msgbox">msgbox</h2>
<p>msgbox 내용,단추(vbokonly),제목
괄호()가 없는게 포인트! </p>
<h2 id="unload-me">unload me</h2>
<p>프로시저 종료</p>
<h2 id="now-vs-time">now vs time</h2>
<ul>
<li><p>now() : 날짜 + 시간
2025-08-11 19:50</p>
</li>
<li><p>time() : 시간
19:50:45</p>
</li>
<li><p>today() : 날짜
2025-08-11</p>
</li>
</ul>
<h2 id="font">font</h2>
<p>[b3].Font.Name = &quot;궁서체&quot;
[b3].Font.Size = 14
[b3].Font.Bold = True</p>
<h2 id="초기화">초기화</h2>
<p>폼의 모든 컨트롤의 값이 초기화 되도록 작성하라 
-&gt; 모든 컨트롤 = &quot;&quot;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250808]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250808</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250808</guid>
            <pubDate>Fri, 08 Aug 2025 05:58:12 GMT</pubDate>
            <description><![CDATA[<h1 id="배열수식">배열수식</h1>
<blockquote>
<p>📌 배열수식 특징</p>
</blockquote>
<ul>
<li>결과값을 반영할 때 Ctrl+Shift+Enter로 입력</li>
<li>조건이 두 개일 경우 AND 조건은 *, OR 조건은 +로 작성</li>
<li>결과값은 {=배열수식} 형태로 앞뒤에 중괄호가 붙는다.</li>
<li>길이가 같은 열을 계산할 수 있다.</li>
<li>조건은 범위=찾을값 형태로 작성</li>
</ul>
<h2 id="sum함수-배열수식">sum함수 배열수식</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>조건</th>
<th>배열수식</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>SUM 이용 합계</td>
<td>조건 1개</td>
<td><code>=SUM((조건1)*범위)</code></td>
<td>조건1을 만족하는 범위의 합계</td>
</tr>
<tr>
<td>SUM 이용 합계</td>
<td>조건 2개</td>
<td><code>=SUM((조건1)*(조건2)*범위)</code></td>
<td>조건1과 조건2를 동시에 만족하는 범위의 합계</td>
</tr>
<tr>
<td>SUM+IF 합계</td>
<td>조건 1개</td>
<td><code>=SUM(IF(조건1,범위))</code></td>
<td>조건1을 만족하는 범위의 합계</td>
</tr>
<tr>
<td>SUM+IF 합계</td>
<td>조건 2개</td>
<td><code>=SUM(IF((조건1)*(조건2),범위))</code></td>
<td>조건1과 조건2를 동시에 만족하는 범위의 합계</td>
</tr>
<tr>
<td>SUM 이용 개수</td>
<td>조건 1개</td>
<td><code>=SUM((조건1)*1)</code></td>
<td>조건1을 만족하는 개수</td>
</tr>
<tr>
<td>SUM 이용 개수</td>
<td>조건 2개</td>
<td><code>=SUM((조건1)*(조건2))</code></td>
<td>조건1과 조건2 모두 만족하는 개수</td>
</tr>
<tr>
<td>SUM+IF 개수</td>
<td>조건 1개</td>
<td><code>=SUM(IF(조건1,1))</code></td>
<td>조건1을 만족하는 개수</td>
</tr>
<tr>
<td>SUM+IF 개수</td>
<td>조건 2개</td>
<td><code>=SUM(IF((조건1)*(조건2),1))</code></td>
<td>조건1과 조건2 모두 만족하는 개수</td>
</tr>
</tbody></table>
<blockquote>
<p>📌 배열함수 외우는 핵심 패턴
조건 → 범위 → 함수적용 순서</p>
</blockquote>
<ul>
<li>조건 먼저: (조건)*범위</li>
<li>IF 쓰면: IF(조건, 범위)</li>
</ul>
<p>배열수식에서 조건의 경우 상대참조하지않음</p>
<h3 id="frequency">frequency</h3>
<pre><code>frequency(범위1,범위2)
FREQUENCY(data_array, bins_array)
</code></pre><p>범위1에서 범위2에 해당하는 빈도수를 구하는 것</p>
<p>data_array → 빈도수를 셀 데이터 집합</p>
<p>bins_array → 구간 경계값(기준값) 목록
bins_array의 각 값은 <strong>이 구간의 최대값</strong>을 의미
bins_array 경계값 리스트(각 값은 <strong>이 값까지</strong>라는 의미)</p>
<p>배열수식 표2, 표3, 표7 다시풀기</p>
<blockquote>
<p>작동 원리
bins_array의 각 값은 &quot;이 구간의 최대값&quot;을 의미함
data_array의 각 데이터가 어느 구간에 속하는지 계산
각 구간에 속하는 데이터 개수를 셈</p>
</blockquote>
<p>FREQUENCY 자체에 조건 기능이 없어서,
IF(조건, 데이터) 형태로 <strong>첫 번째 인수에 조건을 걸어줌</strong>
→ 특정 조건에 해당하는 데이터만 집계 가능</p>
<p><strong>마지막 구간(마지막 셀)</strong> 에는 bins_array의 최대값보다 큰 값들의 개수가 들어감</p>
<h3 id="rankeq내값-비교군-0">RANK.EQ(내값, 비교군, 0)</h3>
<h1 id="vba사용자-정의함수">VBA사용자 정의함수</h1>
<p>개발도구 - visual basic - 삽입 - 모듈</p>
<h2 id="if">if</h2>
<p>if - elseif -  else - endif
else if 안됨.
elseif여야함(띄어쓰기 주의)</p>
<p>꼭 값들은 &quot;&quot; 해주기!</p>
<h2 id="case-when">case when</h2>
<pre><code>Select Case 표현식
    Case 값1
        &#39; 값1일 때 실행할 코드
    Case 값2
        &#39; 값2일 때 실행할 코드
    Case 값3, 값4
        &#39; 값3 또는 값4일 때 실행할 코드
    Case Is &gt; 숫자
        &#39; 표현식이 숫자보다 클 때 실행
    Case Else
        &#39; 위 조건에 모두 해당하지 않을 때 실행
End Select

# 예시1
Select Case 점수
    Case Is &gt;= 90
        MsgBox &quot;A등급&quot;
    Case Is &gt;= 80
        MsgBox &quot;B등급&quot;
    Case Is &gt;= 70
        MsgBox &quot;C등급&quot;
    Case Else
        MsgBox &quot;F등급&quot;
End Select

# 예시2
Select Case score
    Case 90                &#39; 점수가 90이면 실행
        MsgBox &quot;정확히 90점&quot;
    Case Is &gt;= 80          &#39; 점수가 80 이상이면 실행
        MsgBox &quot;80점 이상&quot;
    Case Else
        MsgBox &quot;그 외&quot;
End Select
</code></pre><p>then을 쓰지 않는다!
else만 쓰면 안됨.
else case도 아님!
case else인거 기억하기</p>
<h2 id="for">for</h2>
<h3 id="for--next-문-횟수-반복">For … Next 문 (횟수 반복)</h3>
<pre><code>For 변수 = 시작값 To 끝값 Step 증가값
    반복해서 할 작업
Next 변수

For i = 1 To 5
    Print i   # 1, 2, 3, 4, 5
Next i

Public Function kp점수차트(점수)
If 점수 &gt;= 200 Then
    For a = 1 To 점수 / 200
        kp점수차트 = &quot;♣&quot; &amp; kp점수차트
    Next a
Else
    kp점수차트 = &quot;재시험&quot;
End If
End Function
</code></pre><p>시작값부터 끝값까지 변수값이 변하면서 반복
Step은 몇씩 증가할지 (생략하면 1)</p>
<p>for문 끝내는건 next로!</p>
<h3 id="for-each--next-문-모음-반복">For Each … Next 문 (모음 반복)</h3>
<pre><code>For Each 변수 In 모음
    반복해서 할 작업
Next 변수

For Each cell In Range(&quot;A1:A3&quot;)
    cell.Value = &quot;안녕&quot;
Next cell
</code></pre><p>For … Next → 숫자 범위를 반복
For Each … Next → 모음(집합)을 반복
Next 뒤에는 변수 이름을 쓰는 게 안전
반복 중 멈추려면 Exit For</p>
<h1 id="피벗테이블">피벗테이블</h1>
<h2 id="외부-데이터-가져오기">외부 데이터 가져오기</h2>
<ol>
<li>삽입 - 표 - 피벗테이블 - <strong>외부 데이터 원본</strong>에서</li>
</ol>
<p><strong>외부 데이터 원본으로</strong> ~의 데이터를 사용하시오
원본!삽입!표!</p>
<ol start="2">
<li>데이터 - 외부데이터가져오기 - 레거시마법사 - 마이크로소프트쿼리...</li>
</ol>
<p><strong>외부 데이터 가져오기 기능</strong>을 이용하여 ~.. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴활1급_250805]]></title>
            <link>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250805</link>
            <guid>https://velog.io/@mxnxae__/%EC%BB%B4%ED%99%9C1%EA%B8%89250805</guid>
            <pubDate>Tue, 05 Aug 2025 01:52:41 GMT</pubDate>
            <description><![CDATA[<p>기풍쌤이랑..레츠고</p>
<ul>
<li>조건을 비교하는 함수들은 범위-조건 순으로 작성해야한다.</li>
<li>조건을 비교하는 함수는 비교연산자를 문자열로 인식해야하기 때문에 따옴표를 써야한다.<h1 id="excel">EXCEL</h1>
<h2 id="rankeq">RANK.EQ</h2>
<pre><code>RANK.EQ(기준셀,범위,0)</code></pre>기준셀이 범위에서 몇등인지 나타냄</li>
</ul>
<p>[order]: 정렬 방식 (선택 인수)</p>
<ul>
<li>생략 또는 0: 내림차순 (기본값)</li>
<li>1: 오름차순</li>
</ul>
<h2 id="countifs">COUNTIFS</h2>
<pre><code>COUNTIFS(범위1, 조건1, 범위2, 조건2, ...)</code></pre><p>분류가 <del>이면서 담당자가</del>인 판매 건 수</p>
<h2 id="sumifs">SUMIFS</h2>
<pre><code>SUMIFS(합계범위, 범위1, 조건1, 범위2, 조건2, ...)</code></pre><p>분류가 ~ 이면서 담당자가 ~의 총 판매액
합계범위를 제일 처음 적어주고
조건이 뒤에 붙는거 기억하기
범위 - 조건 순서!</p>
<h2 id="vlookup">VLOOKUP</h2>
<pre><code>VLOOKUP(기준셀, 참조범위, 열번호, 0)</code></pre><p>0 : 정확한 값
1 : 유사한 값</p>
<p><strong>찾고자 하는 값을 열번호에</strong> 적어야함!!
<img src="https://velog.velcdn.com/images/mxnxae__/post/ec09a622-b61d-462e-8f60-cb27f60991f7/image.png" alt="">
같은 값을 찾는게 아니다.
기준셀이 직급이 되는 거고
기본급/직급수당/총액이 열번호로 나타내야 하는 값이 되는 것</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/ec20bbf3-f1d7-4429-a64b-383d425fb63a/image.png" alt="">
정확한 값이 없으니까 유사한값 1로 써주기.
크기로 뭐 어떻게 할 생각 하지 말 것</p>
<h2 id="isblank">ISBLANK</h2>
<pre><code>ISBLANK(셀)</code></pre><h2 id="median">MEDIAN</h2>
<pre><code>MEDIAN(범위)</code></pre><h2 id="column">column</h2>
<p><strong>열 번호</strong>를 알려주는 함수</p>
<pre><code>column(셀)</code></pre><p>column(c200) = 3 -&gt; c니까 </p>
<h3 id="row">row</h3>
<p>행 번호를 알려주는 함수
row(c200) = 200</p>
<h2 id="isodd">isodd</h2>
<p>홀수이면 참(0)</p>
<pre><code>isodd(숫자)</code></pre><h3 id="iseven">iseven</h3>
<p>짝수이면 참</p>
<pre><code>iseven(숫자)</code></pre><h2 id="검토">검토</h2>
<p>시트보호는 검토 - 변경 내용에 있음</p>
<h2 id="차트-잠금">차트 잠금</h2>
<p>차트 영역 서식 - 크기 및 속성 - 속성 - 잠금</p>
<h2 id="concatenate">CONCATENATE</h2>
<p>텍스트를 하나로 합침</p>
<pre><code>CONCATENATE(&quot;A&quot;,&quot;B&quot;) -&gt; AB
</code></pre><h2 id="index">INDEX</h2>
<p>범위에서 행, 열의 값</p>
<pre><code>INDEX(범위, 행, 열)</code></pre><p>EX) A1~C3의 2행 1열 값 =&gt; A2값</p>
<p>맨날 하는데 어떻게 맨날 모르냐
다섯번 해도 여섯번 모르는 내가 너무 황당.</p>
<h2 id="match">MATCH</h2>
<p>특정 값이 범위 내에 어디에 위치해있는지 위치를 반환.
범위는 같은 행 / 같은 열 내임</p>
<pre><code>MATCH(찾는 값, 범위, 0)</code></pre><p>0은 정확한 값, 1은 유사값</p>
<h2 id="text">TEXT</h2>
<p>값을 형식에 맞춰서 나타냄</p>
<pre><code>TEXT(값, &quot;형식&quot;)</code></pre><h3 id="조건부-표시-형식">조건부 표시 형식</h3>
<p>[] 사용</p>
<table>
<thead>
<tr>
<th>형식</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>[=0]없음</code></td>
<td>값이 0일 경우 &quot;없음&quot; 출력</td>
</tr>
<tr>
<td><code>[&gt;0]0원</code></td>
<td>0보다 크면 숫자 + &quot;원&quot; 출력</td>
</tr>
<tr>
<td><code>[&lt;0]</code>도 추가 가능</td>
<td>음수 처리 가능 (필요시)</td>
</tr>
</tbody></table>
<pre><code>=TEXT(값, &quot;[조건]형식;[조건]형식;[조건]형식&quot;)
</code></pre><p>Excel의 TEXT 함수에서만 가능한 특수한 사용자 지정 숫자 형식 문법
세미콜론(;)으로 최대 3가지까지 나눌 수 있고,
각 구간에 [조건]을 지정해 출력 형식을 다르게 할 수 있다</p>
<p>일반적으로 양수;음수;0 순으로 나타냄</p>
<ul>
<li>[]안에 조건 쓰기
[]안에 비교조건을 쓸 수 있고, 그 조건이 참이면 그 형식 사용함.</li>
</ul>
<table>
<thead>
<tr>
<th>문법</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>[=0]없음</code></td>
<td>값이 0이면 &quot;없음&quot; 출력</td>
</tr>
<tr>
<td><code>[&gt;0]0원</code></td>
<td>값이 0보다 크면 숫자 + &quot;원&quot; 출력</td>
</tr>
<tr>
<td><code>[&lt;0]&quot;마이너스&quot;</code></td>
<td>음수면 &quot;마이너스&quot; 출력</td>
</tr>
</tbody></table>
<p>날짜 적을때
YY/MM/DD인건 잘 했음
요일은 AAA로 표시!</p>
<h2 id="averageif">AVERAGEIF</h2>
<p>조건에 해당하는 값들의 평균</p>
<p>조건을 비교할 범위,</p>
<pre><code>AVERAGEIF(조건과 비교할 범위, 조건, 평균 낼 범위)
</code></pre><p>얘도 진짜 인덱스/매치만큼이나 모른다..</p>
<h2 id="if">IF</h2>
<pre><code>IF(조건, 참, 거짓)</code></pre><h2 id="iserror">ISERROR</h2>
<p>오류이면 참</p>
<h2 id="replace">REPLACE</h2>
<p>기존 텍스트의 일부(숫자로 바꿀 범위 나타냄)를 바꿈</p>
<pre><code>REPLACE(텍스트, 시작번호, 몇개, 바꿀텍스트)
REPLACE(&quot;abcdef&quot;, 2, 3, &quot;XYZ&quot;) 
→ &quot;aXYZef&quot;
</code></pre><h2 id="rept">REPT</h2>
<p>텍스트를 지정한 횟수만큼 반복</p>
<pre><code>REPT(&quot;텍스트&quot;,&quot;반복횟수&quot;)
REPT(&quot;★&quot;, 5) 
→ ★★★★★
</code></pre><h2 id="counta">COUNTA</h2>
<p><strong>비어있지 않은 셀</strong>의 갯수</p>
<pre><code>COUNTA(범위)</code></pre><h2 id="edate">EDATE</h2>
<p>기준 날짜에서 몇 <strong>개월</strong> 전/후의 날짜 반환</p>
<pre><code>EDATE(&quot;2025-01-31&quot;, 2) 
→ &quot;2025-03-31&quot;</code></pre><h2 id="quotient">QUOTIENT</h2>
<p>나눗셈의 정수 몫 반환</p>
<pre><code>QUOTIENT(나눌 값, 나누는 값) 
QUOTIENT(10, 3) 
→ 3</code></pre><h2 id="sumif">SUMIF</h2>
<p>범위 중 조건에 맞는 값들의 합계
** 범위-조건 순서인거 잊지말기 **</p>
<pre><code>SUMIF(범위, 조건)</code></pre><h1 id="exces">EXCES</h1>
<h2 id="입력마스크">입력마스크</h2>
<p>구역1;구역2;구역3
구역1 : 사용자 지정 기호, &gt;LAa09#
구역2 : 0 
구역3 : 화면 표시 기호</p>
<h3 id="기본-구조">기본 구조</h3>
<table>
<thead>
<tr>
<th>구역</th>
<th>역할</th>
</tr>
</thead>
<tbody><tr>
<td><strong>구역1</strong></td>
<td>입력 형식을 정의하는 <strong>마스크 문자열</strong> (<code>&gt;LAa09#</code> 등)</td>
</tr>
<tr>
<td><strong>구역2</strong></td>
<td>저장 여부 지정 (<code>0</code>: 마스크 기호 <strong>미포함</strong> 저장, <code>1</code>: <strong>포함</strong> 저장)</td>
</tr>
<tr>
<td><strong>구역3</strong></td>
<td>입력 시 표시할 <strong>자리 표시 문자</strong> (기본은 <code>_</code>)</td>
</tr>
</tbody></table>
<h3 id="구역1">구역1</h3>
<table>
<thead>
<tr>
<th>기호</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>L</code></td>
<td>영문자 또는 한글 1자 입력 <strong>필수</strong></td>
</tr>
<tr>
<td><code>?</code></td>
<td>영문자 또는 한글 1자 입력 <strong>선택</strong></td>
</tr>
<tr>
<td><code>A</code></td>
<td>영문자, 숫자 입력 <strong>필수</strong></td>
</tr>
<tr>
<td><code>a</code></td>
<td>영문자, 숫자 입력 <strong>선택</strong></td>
</tr>
<tr>
<td><code>0</code></td>
<td>숫자 입력 <strong>필수</strong></td>
</tr>
<tr>
<td><code>9</code></td>
<td>숫자 입력 <strong>선택</strong></td>
</tr>
<tr>
<td><code>#</code></td>
<td>양수/음수/소수 입력 <strong>선택</strong></td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>이후 입력을 <strong>대문자</strong>로 강제</td>
</tr>
<tr>
<td><code>&lt;</code></td>
<td>이후 입력을 <strong>소문자</strong>로 강제</td>
</tr>
<tr>
<td><code>!</code></td>
<td>입력 방향을 <strong>왼쪽 → 오른쪽</strong>으로 (기본은 반대)</td>
</tr>
</tbody></table>
<p>간단하게 요약하면..</p>
<table>
<thead>
<tr>
<th></th>
<th>영문자/한글 1자</th>
<th>영문자/숫자 1자</th>
<th>숫자 (0~9)</th>
<th>숫자/소수/부호</th>
<th>모든 문자 (공백 포함)</th>
</tr>
</thead>
<tbody><tr>
<td><strong>필수</strong></td>
<td><code>L</code></td>
<td><code>A</code></td>
<td><code>0</code></td>
<td>–</td>
<td><code>&amp;</code></td>
</tr>
<tr>
<td><strong>선택</strong></td>
<td><code>?</code></td>
<td><code>a</code></td>
<td><code>9</code></td>
<td><code>#</code></td>
<td><code>C</code></td>
</tr>
</tbody></table>
<p>L : 영문자, 한글 입력(필수)
? : 영문자, 한글 입력(선택)</p>
<h3 id="구역-2">구역 2</h3>
<p>저장형태</p>
<table>
<thead>
<tr>
<th>값</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>0</code></td>
<td>마스크에 사용된 문자(하이픈, 괄호 등) <strong>저장 안 함</strong></td>
</tr>
<tr>
<td><code>1</code></td>
<td>마스크 문자도 <strong>그대로 저장</strong> (전화번호에서 <code>-</code>도 저장됨 등)</td>
</tr>
</tbody></table>
<h3 id="구역3">구역3</h3>
<p>자리 표시 문자
사용자가 입력하지 않은 자리에 표시되는 문자
기본값은 _ (언더바)
예: <em>로 지정하면 빈 자리가 **</em>-<strong><em>-*</em></strong>처럼 보임</p>
<h2 id="instr">INSTR</h2>
<p>찾고자 하는 문자의 위치를 알려줌</p>
<pre><code>INSTR(문자, 찾는문자)</code></pre><p>공백문자 입력을 막을 때 사용 가능
유효성 검사 규칙 : INSTR([씨앗코드], &quot; &quot;) = 0 -&gt; 공백X</p>
<h2 id="in">IN</h2>
<p>포함하는 문자 찾기
SQL이랑 똑같음!</p>
<h2 id="유효성-검사-텍스트">유효성 검사 텍스트</h2>
<p>규칙 이외의 값을 입력하면 나타나는 메시지 상자</p>
<h2 id="콤보상자">콤보상자</h2>
<p>조회 - 컨트롤 표시 - 콤보상자.
콤보상자의 값을 직접 입력하기 위해서 
행 원본 유형 = 값 목록
행 원본 = 값 넣어주기
행 원본에 입력할 시 ,가 아니라 <strong>;로 작성</strong>하기</p>
<h2 id="like">LIKE</h2>
<p>포함문자 찾기. SQL이랑 다르다!</p>
<p>LIKE &quot;* *&quot; : 공백 포함</p>
<h2 id="index-1">INDEX</h2>
<p>중복 안될때 사용 가능</p>
<h2 id="날짜-데이터-표기법">날짜 데이터 표기법</h2>
<p>형식 - 보통날짜 : 25년 8월 5일</p>
<h2 id="테이블-속성">테이블 속성</h2>
<h3 id="유효성-검사-규칙">유효성 검사 규칙</h3>
<p>컬럼 2개에 관한 유효성 검사 규칙은 테이블 속성에서 작성</p>
<blockquote>
<p>EXCES는 진짜 하나도 기억이 안난다..
내일 11 다시 풀어봐야겠다 ㅠㅠ</p>
</blockquote>
<h1 id="문제">문제</h1>
<h2 id="02_함수">02_함수</h2>
<h3 id="3-text">3. TEXT</h3>
<p>[표1]의 가입나이, 코드, 미납기간, [표3]을 이용하여 추가수수료[H4:H39]를 표시하시오.
 ▶추가수수료 : 가입금액*미납기간/100
 ▶추가수수료가 0이면 ‘없음’으로 표시하고 0보다 크면 추가수수료에 ‘원’을 붙여 표시
  [표시 예 : 0 → 없음, 284 →284원]
 ▶TEXT, HLOOKUP, MATCH 함수 사용</p>
<h3 id="4-averageif">4. AVERAGEIF</h3>
<p>[표1]의 코드, 가입기간, 미납기간을 이용하여 코드별 가입기간, 미납기간의 평균을[표4]의 [L19:M22] 
영역에 계산하시오.
 ▶소수 세 번째 자리에서 버림하여 소수 둘째 자리 까지 표시 하시오.[표시예 : 1.666666 → 1.66]
 ▶ROUNDDOWN, AVERAGEIF 함수 사용</p>
<h3 id="5-countifs">5. COUNTIFS</h3>
<p> [표1]의 가입나이, 코드를 이용하여 인원수를 [표5]의 [L27:R3] 영역에 계산하시오 
▶표시 예 [ 2 → 2명]
 ▶COUNTIFS 함수, &amp;연산자 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[250612]]></title>
            <link>https://velog.io/@mxnxae__/250612</link>
            <guid>https://velog.io/@mxnxae__/250612</guid>
            <pubDate>Thu, 12 Jun 2025 13:21:18 GMT</pubDate>
            <description><![CDATA[<p>회의는 1시간 이상 하지말것</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[250611]]></title>
            <link>https://velog.io/@mxnxae__/290611</link>
            <guid>https://velog.io/@mxnxae__/290611</guid>
            <pubDate>Wed, 11 Jun 2025 12:49:15 GMT</pubDate>
            <description><![CDATA[<p>내가그렸지만..
나도해석을못하겠다..
<img src="https://velog.velcdn.com/images/mxnxae__/post/438dca60-a82f-4951-b8e2-b01db987e1d1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[250610]]></title>
            <link>https://velog.io/@mxnxae__/250610</link>
            <guid>https://velog.io/@mxnxae__/250610</guid>
            <pubDate>Tue, 10 Jun 2025 08:08:29 GMT</pubDate>
            <description><![CDATA[<hr>
<h3 id="📊-프로모션-분석-주제-전체-흐름-요약">📊 <strong>프로모션 분석 주제 전체 흐름 요약</strong></h3>
<h4 id="1-성과-지표-설정">1. <strong>성과 지표 설정</strong></h4>
<ul>
<li><p>프로모션 효과 측정 지표로:</p>
<ul>
<li><strong>전환율</strong> (Promo 사용 → 구매 완료)</li>
<li><strong>장바구니 담기율</strong></li>
<li><strong>재구매율</strong></li>
<li><strong>평균 구매 금액 (객단가)</strong>
를 확인.</li>
</ul>
</li>
<li><p>전환율은 100%로 고정 (Promo 입력 후 바로 구매 로그 기록되는 구조이므로 제외)</p>
</li>
</ul>
<hr>
<h4 id="2-고객-특성별-분석">2. <strong>고객 특성별 분석</strong></h4>
<ul>
<li><p><strong>성별, 연령대, 지역</strong> 별로 프로모션 사용 비율, 구매금액, 재구매율 분석</p>
</li>
<li><p><strong>파이차트, 바차트, 선그래프, 히트맵</strong> 등 다양한 시각화로 비교</p>
</li>
<li><p>주요 인사이트:</p>
<ul>
<li>여성이 전체 수는 많지만, 프로모션 사용 비율은 성별 간 큰 차이 없음</li>
<li>지역별 사용률은 대도시보다 중소도시에서 더 높음 → 프로모션 효과는 오프라인 대안이 적은 지역에서 큼</li>
</ul>
</li>
</ul>
<hr>
<h4 id="3-프로모션-자체-비교">3. <strong>프로모션 자체 비교</strong></h4>
<ul>
<li><strong>프로모션 코드별 전환고객 수 / 객단가 / 재구매율 비교</strong></li>
<li>피벗 + 히트맵으로 시각화</li>
<li>사용률 높은 프로모션 vs 낮은 프로모션 → 지역, 연령대 분포 차이</li>
</ul>
<hr>
<h4 id="4-상품-특성-분석">4. <strong>상품 특성 분석</strong></h4>
<ul>
<li><strong>카테고리, 브랜드</strong>별로 프로모션 사용 비율 분석</li>
<li>특정 프로모션이 특정 브랜드/카테고리에 더 집중되는 경향 확인</li>
</ul>
<hr>
<h4 id="5-핵심-질문으로-회귀">5. <strong>핵심 질문으로 회귀</strong></h4>
<ul>
<li><p>“<strong>왜 분석하는가?</strong>”</p>
<ul>
<li>어떤 고객에게 집중해야 하는가?</li>
<li>어떤 상품에 프로모션을 붙이는 게 효과적인가?</li>
</ul>
</li>
<li><p>→ 이 질문에 답하려면:</p>
<ul>
<li>단순 사용률이 아니라 <strong>결과(금액, 반복 구매)</strong> 중심으로 분석해야 함</li>
</ul>
</li>
</ul>
<hr>
<h3 id="✅-핵심-요약-정리">✅ 핵심 요약 정리</h3>
<table>
<thead>
<tr>
<th>목적</th>
<th>필요한 지표</th>
</tr>
</thead>
<tbody><tr>
<td>수익성 판단</td>
<td>평균 구매 금액(객단가)</td>
</tr>
<tr>
<td>지속성 판단</td>
<td>재구매율</td>
</tr>
<tr>
<td>타겟 고객 탐색</td>
<td>성별, 연령대, 지역별 사용 패턴</td>
</tr>
<tr>
<td>상품 타겟 결정</td>
<td>카테고리/브랜드별 사용 비율</td>
</tr>
</tbody></table>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[250609]]></title>
            <link>https://velog.io/@mxnxae__/250609</link>
            <guid>https://velog.io/@mxnxae__/250609</guid>
            <pubDate>Mon, 09 Jun 2025 12:15:22 GMT</pubDate>
            <description><![CDATA[<h1 id="플랫폼의-프로모션-마케팅">플랫폼의 프로모션 마케팅</h1>
<h2 id="프로모션-성과-분석">프로모션 성과 분석</h2>
<p>프로모션별 평균 할인율, 매출, 주요 고객 , 주요 구매된 카테고리, 결제 유형 등</p>
<h3 id="프로모-코드별-평균-할인율">프로모 코드별 평균 할인율</h3>
<ul>
<li>코드</li>
</ul>
<pre><code class="language-python"># promo_code가 있는 행만 필터링
  promo_df = transactions_df[transactions_df[&#39;promo_code&#39;] != &#39;None&#39;]
                   promo_df[&#39;promo_code&#39;].value_counts()

# 할인율 컬럼 추가
promo_df[&#39;discount_rate&#39;] = promo_df[&#39;promo_amount&#39;] / promo_df[&#39;total_amount&#39;]

# 프로모션 코드별 평균 할인율 계산avg_discount_by_code = promo_df.groupby(&#39;promo_code&#39;)[&#39;discount_rate&#39;].mean().sort_values(ascending=False)
print(avg_discount_by_code)</code></pre>
<p>transaction에서 promo_mount와 total_amount의 비율 확인해서 할인율 추정 가능 </p>
<table>
<thead>
<tr>
<th>프로모션 코드</th>
<th>사용 건수</th>
<th>평균 할인율 (%)</th>
</tr>
</thead>
<tbody><tr>
<td><code>AZ2022</code></td>
<td><strong>89,227</strong></td>
<td>1.93%</td>
</tr>
<tr>
<td><code>BUYMORE</code></td>
<td>66,835</td>
<td>1.93%</td>
</tr>
<tr>
<td><code>WEEKENDSERU</code></td>
<td>61,941</td>
<td>1.92%</td>
</tr>
<tr>
<td><code>XX2022</code></td>
<td>44,744</td>
<td>1.92%</td>
</tr>
<tr>
<td><code>LIBURDONG</code></td>
<td>20,965</td>
<td>1.91%</td>
</tr>
<tr>
<td><code>WEEKENDMANTAP</code></td>
<td>20,448</td>
<td>1.92%</td>
</tr>
<tr>
<td><code>SC2022</code></td>
<td>11,271</td>
<td><strong>3.95%</strong></td>
</tr>
<tr>
<td><code>STARTUP</code></td>
<td>11,105</td>
<td><strong>3.98%</strong></td>
</tr>
<tr>
<td>- 할인율이 높을수록 사용건수가 적음(많이 뿌릴 땐 낮은 단가로, 적게 뿌릴 땐 높은 단가로)</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- 할인율이 높을땐 특정고객에게만.(적은 인원수)</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<ul>
<li>프로모코드를 사용한 결제 유형 확인</li>
<li>코드<pre><code class="language-python"># 프로모션 코드별 + 결제수단별 건수 집계
promo_payment_counts = promo_df.groupby([&#39;promo_code&#39;, &#39;payment_method&#39;]).size().unstack(fill_value=0)
</code></pre>
</li>
</ul>
<h1 id="정렬">정렬</h1>
<p>promo_payment_counts = promo_payment_counts.sort_index()
print(promo_payment_counts)</p>
<h1 id="비율로-변환-행-기준-→-각-프로모션별-합계로-나눔">비율로 변환 (행 기준 → 각 프로모션별 합계로 나눔)</h1>
<p>percentages = promo_payment_counts.div(promo_payment_counts.sum(axis=1), axis=0) * 100</p>
<h1 id="소수점-두-자리로-포맷">소수점 두 자리로 포맷</h1>
<p>percentages = percentages.round(2)
print(percentages)</p>
<pre><code>- count

| 프로모션 코드 | Credit Card | Debit Card | Gopay | LinkAja | OVO |
                        | --- | --- | --- | --- | --- | --- |
                        | **AZ2022** | 31,339 | 14,279 | 17,934 | 7,868 | 17,807 |
                        | **BUYMORE** | 23,521 | 10,714 | 13,374 | 5,915 | 13,311 |
                        | **LIBURDONG** | 7,264 | 3,382 | 4,345 | 1,822 | 4,152 |
                        | **SC2022** | 3,955 | 1,854 | 2,284 | 990 | 2,188 |
                        | **STARTUP** | 3,861 | 1,802 | 2,281 | 1,010 | 2,151 |
                        | **WEEKENDMANTAP** | 7,263 | 3,316 | 4,038 | 1,746 | 4,085 |
                        | **WEEKENDSERU** | 21,619 | 9,884 | 12,524 | 5,532 | 12,382 |
                        | **XX2022** | 15,682 | 7,201 | 8,916 | 3,955 | 8,990 |


---        
비율로 나타내면 


| 프로모션 코드 | Credit Card | Debit Card | Gopay | LinkAja | OVO |
                | --- | --- | --- | --- | --- | --- |
                | **AZ2022** | 35.12% | 16.00% | 20.10% | 8.82% | 19.96% |
                | **BUYMORE** | 35.19% | 16.03% | 20.01% | 8.85% | 19.92% |
                | **WEEKENDSERU** | 34.90% | 15.96% | 20.22% | 8.93% | 19.99% |
                | **XX2022** | 35.05% | 16.09% | 19.93% | 8.84% | 20.09% |
                | **LIBURDONG** | 34.65% | 16.13% | 20.73% | 8.69% | 19.80% |
                | **WEEKENDMANTAP** | 35.52% | 16.22% | 19.75% | 8.54% | 19.98% |
                | **SC2022** | 35.09% | 16.45% | 20.26% | 8.78% | 19.41% |
                | **STARTUP** | 34.77% | 16.23% | 20.54% | 9.10% | 19.37% |

프로모션 코드별 결제 수단 비율이 거의 같음 
→ 프로모션 코드와 결제수단 사이에 유의미한 상관관계가 없다
(독립성 검정 해볼까? ⇒ 프로모션 코드와 결제수단은 독립적이다)

- 프로모 코드 추정
→ 구매까지 유도하는 코드로 유용한 코드인지
- `STARTUP`은 회원가입시 사용할 수 있는 코드이다.
                    - 회원가입 쿠폰이라면 join date와 created at 날짜(시간)차이가 적을 것이다.

| 프로모션 코드 | 건수 | 평균 | 표준편차 | 최소 | 25% | 중앙값 | 75% | 최대 |
                        | --- | --- | --- | --- | --- | --- | --- | --- | --- |
                        | AZ2022 | 89,227 | 658.77 | 502.23 | 0.0 | 234.0 | 563.0 | 1,005.0 | 2,209.0 |
                        | BUYMORE | 66,834 | 659.53 | 504.85 | 0.0 | 232.0 | 562.0 | 1,009.0 | 2,217.0 |
                        | WEEKENDSERU | 61,941 | 625.45 | 513.63 | 0.0 | 186.0 | 519.0 | 980.0 | 2,212.0 |
                        | XX2022 | 44,744 | 660.72 | 503.57 | 0.0 | 234.0 | 569.0 | 1,008.0 | 2,187.0 |
                        | LIBURDONG | 20,965 | 620.48 | 505.58 | 0.0 | 189.0 | 519.0 | 967.0 | 2,201.0 |
                        | WEEKENDMANTAP | 20,448 | 626.83 | 512.24 | 0.0 | 193.0 | 525.0 | 972.0 | 2,198.0 |
                        | SC2022 | 11,271 | 660.32 | 504.04 | 0.0 | 235.0 | 562.0 | 1,010.0 | 2,161.0 |
                        | **STARTUP** | 11,105 | **666.60** | 507.30 | 0.0 | 234.0 | 576.0 | 1,014.0 | 2,185.0 |

- STARTUP이 평균 **오히려 제일 큼**(가장 늦게 사용)

- 코드
```python
# aptc = Add to Promo + Transaction + Customer
                            aptc = pd.merge(apt, customer_df, how=&#39;left&#39;, on=&#39;customer_id&#39;)

# first_join_date 컬럼을 datetime 형식으로 변환
aptc[&#39;first_join_date&#39;] = pd.to_datetime(aptc[&#39;first_join_date&#39;])

# 시간대 없애기
aptc[&#39;created_at&#39;] = aptc[&#39;created_at&#39;].dt.tz_localize(None)

# 결제일 - 가입일 계산
aptc[&#39;date_diff&#39;] = (aptc[&#39;created_at&#39;] - aptc[&#39;first_join_date&#39;]).dt.days

# 프로모션별 평균 day 차이
aptc.groupby(&#39;promo_code&#39;)[&#39;date_diff&#39;].mean().reset_index().sort_values(&#39;date_diff&#39;, ascending=False)

# 프로모션별 day차이 describe
aptc.groupby(&#39;promo_code&#39;)[&#39;date_diff&#39;].describe()
</code></pre><ul>
<li>회원가입 쿠폰은 1회성이다
customer_id별로 하나씩밖에 사용을 못하는데 그렇지않음.
STARTUP promo 전체 사용자 수 = 7468명</li>
<li><em>두번 이상 사용한 사용자 수 = 2166명*</em></li>
</ul>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/23db1de7-7e0b-4f5b-ad34-42df1cafa9b0/image.png" alt=""></p>
<p>5번 사용한 99915 확인해보면 
<img src="https://velog.velcdn.com/images/mxnxae__/post/2b1e14af-b5c6-442a-ae75-27978b0bde5e/image.png" alt=""></p>
<ul>
<li>코드<pre><code class="language-python"># 고객별로 promocode 몇 번 썼는지 count
promo_usage = aptc.groupby([&#39;customer_id&#39;, &#39;promo_code&#39;]).size().reset_index(name=&#39;use_count&#39;)
</code></pre>
</li>
</ul>
<h1 id="startup-promo-몇-번-썼는지-count-promo_usagepromo_usagepromo_code--startup">startup promo 몇 번 썼는지 count promo_usage[promo_usage[&#39;promo_code&#39;] == &#39;STARTUP&#39;]</h1>
<h1 id="startup-promo를-2번-이상-썼는지-확인">startup promo를 2번 이상 썼는지 확인</h1>
<p>promo_usage[(promo_usage[&#39;promo_code&#39;] == &#39;STARTUP&#39;) &amp; (promo_usage[&#39;use_count&#39;] &gt;= 2)]</p>
<h1 id="5번-사용한-경우customer_id--99915-확인">5번 사용한 경우(customer_id = 99915) 확인</h1>
<p>aptc[(aptc[&#39;customer_id&#39;] == 99915) &amp; (aptc[&#39;promo_code&#39;] == &#39;STARTUP&#39;)][
                                [&#39;event_name&#39;, &#39;session_id&#39;, &#39;event_time&#39;, 
                                 &#39;created_at&#39;, &#39;promo_code&#39;, &#39;date_diff&#39;]].T</p>
<pre><code>

- `WEEKENDMANTAP`, `WEEKENDSERU`, `LIBURDONG`는 주말 한정(공휴일) 할인쿠폰일 것이다
- 맞음
```python
# WEEKENDMANTAP
weekend_df = aptc[aptc[&#39;promo_code&#39;] == &#39;WEEKENDMANTAP&#39;].copy()

# 사용 날짜 요일 이름으로 나타내기
weekend_df[&#39;day_of_week&#39;] = weekend_df[&#39;created_at&#39;].dt.day_name()
                        weekend_df[&#39;day_of_week&#39;].value_counts()

# WEEKENDSERU
weekend_df = aptc[aptc[&#39;promo_code&#39;] == &#39;WEEKENDSERU&#39;].copy()
weekend_df[&#39;day_of_week&#39;] = weekend_df[&#39;created_at&#39;].dt.day_name()
                        weekend_df[&#39;day_of_week&#39;].value_counts()

# LIBURDONG
libur_df = aptc[aptc[&#39;promo_code&#39;] == &#39;LIBURDONG&#39;].copy()
libur_df[&#39;day_of_week&#39;] = libur_df[&#39;created_at&#39;].dt.day_name()
libur_df[&#39;day_of_week&#39;].value_counts()</code></pre><ul>
<li>WEEKEND<strong>MANTAP</strong>
MANTAP : 짱이다, 굿, 강력하다
Sunday      10827
Saturday     9621</li>
</ul>
<ul>
<li>WEEKEND<strong>SERU</strong>
ERU : 재밌다, 흥미롭다, 신난다</li>
</ul>
<p>Sunday      32910
Saturday    29031</p>
<ul>
<li><strong>LIBURDONG</strong>
<code>Libur</code> = 휴일, <code>dong</code>은 감탄사 </li>
</ul>
<p>Sunday      11139
Saturday     9826</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/f7f68e54-b8d2-4af2-83ed-c4b20a215697/image.png" alt=""></p>
<ul>
<li><code>SC2022</code>, <code>AZ2022</code>, <code>XX2022</code> 는 특정 시기(캠페인-2022-)코드일 것이다</li>
</ul>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/3ade2323-5cc7-4470-be0d-09d7e1f78e2a/image.png" alt=""></p>
<p>2022가 있어서 2022년 특정 프로모션일 것이라 예상했는데 그것과 관계없이 꾸준히 이루어 짐을 확인할 수 있다.</p>
<ul>
<li>코드<pre><code class="language-python"># 비교할 프로모션 코드 목록을 정의
codes = [&#39;SC2022&#39;, &#39;AZ2022&#39;, &#39;XX2022&#39;]
</code></pre>
</li>
</ul>
<h1 id="전체-그래프-크기-설정">전체 그래프 크기 설정</h1>
<p>plt.figure(figsize=(12, 5))</p>
<h1 id="각-프로모션-코드에-대해-반복">각 프로모션 코드에 대해 반복</h1>
<p>for code in codes:</p>
<h1 id="해당-코드에-해당하는-행만-필터링-복사본-생성">해당 코드에 해당하는 행만 필터링 (복사본 생성)</h1>
<p>df = aptc[aptc[&#39;promo_code&#39;] == code].copy()</p>
<h1 id="created_at-날짜에서-연-월만-추출하여-새로운-month-컬럼-생성">created_at 날짜에서 &#39;연-월&#39;만 추출하여 새로운 &#39;month&#39; 컬럼 생성</h1>
<p>df[&#39;month&#39;] = df[&#39;created_at&#39;].dt.to_period(&#39;M&#39;)</p>
<h1 id="월별-사용-건수를-계산-월-순서대로-정렬">월별 사용 건수를 계산, 월 순서대로 정렬</h1>
<p>monthly_counts = df[&#39;month&#39;].value_counts().sort_index()</p>
<h1 id="인덱스를-timestamp-형식으로-바꿈">인덱스를 Timestamp 형식으로 바꿈</h1>
<p>monthly_counts.index = monthly_counts.index.to_timestamp()</p>
<h1 id="라인-그래프로-월별-사용량-시각화-monthly_countsplotlabelcode">라인 그래프로 월별 사용량 시각화 monthly_counts.plot(label=code)</h1>
<h1 id="그래프-제목-축-레이블-범례-그리드-설정">그래프 제목, 축 레이블, 범례, 그리드 설정</h1>
<p>plt.title(&quot;월별 프로모션 사용량: SC2022 / AZ2022 / XX2022&quot;)
plt.xlabel(&quot;월&quot;)
plt.ylabel(&quot;사용 건수&quot;)
plt.legend()
plt.grid(True)
plt.tight_layout()</p>
<h1 id="그래프-출력">그래프 출력</h1>
<p>plt.show()</p>
<p>```</p>
<ul>
<li><p>프로모 코드를 자주 사용하는 고객의 특성
(성별, 연령대, 지역)
customer이랑 transaction확인</p>
</li>
<li><p>프로모코드를 사용한 session의 카테고리를 확인
카테고리..어케확인할지..
이거는 근데 진짜로 ast해야겠다</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[250605]]></title>
            <link>https://velog.io/@mxnxae__/250605</link>
            <guid>https://velog.io/@mxnxae__/250605</guid>
            <pubDate>Thu, 05 Jun 2025 14:44:20 GMT</pubDate>
            <description><![CDATA[<p>오늘은 어제보다 회의 짧을줄알앗는데.........</p>
<p>23:40까지 ㅎㅐㅅ..다.....</p>
<h1 id="adsp-합격">ADSP 합격</h1>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/e67df033-87cd-49db-b5c4-0070081ffd76/image.png" alt="">
누가 60점 받으면 합격하는시험
2과목 만점씩이나.받나요?
저요 <del>~</del>
우하하.기쁘군아.</p>
<p>이걸 왜하지?의 무한반복...
왜 라는 질문을 많이 하기로했는데....
너무쉽지않다 나에겐....왜..왜에 대해 이야기하는버릇.......</p>
<p>기획안 다시 써봐야겠다..(따라써보기.. )
흐름이 어떻게 이렇게 이어지는지 따라가보자..응응</p>
<h1 id="rfm">RFM</h1>
<p>아..도메인 지식이 이래서 중요한거였지...
진짜로 도메인지식....마케팅지식.....채우자..
취업해야지......ㅜㅜ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[250604]]></title>
            <link>https://velog.io/@mxnxae__/250604</link>
            <guid>https://velog.io/@mxnxae__/250604</guid>
            <pubDate>Wed, 04 Jun 2025 12:58:06 GMT</pubDate>
            <description><![CDATA[<p>행동로그분석..이거진짜쉽지않다..
데이터가 불친절해서 더 그런듯 ㅠㅠ </p>
<p>사용자 행동로그가 찍힌 데이터셋(click_stream)에
session_id별로 시간에 따른 행동변화를 봤는데</p>
<p>session_id갯수는 4,354,849개였고
경로는 557,232개가 있다.</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/05691c69-32e1-44f9-8b7a-cd55b9a6b4fe/image.png" alt="">
<img src="https://velog.velcdn.com/images/mxnxae__/post/bf935aec-4967-48ea-801f-a725addecb9d/image.png" alt="">
<img src="https://velog.velcdn.com/images/mxnxae__/post/ecbe4539-f3de-4e6d-b271-81bc1e8ad239/image.png" alt="">
<img src="https://velog.velcdn.com/images/mxnxae__/post/4aa23fa0-2a61-4e2f-853c-2d05522f04fc/image.png" alt="">
<img src="https://velog.velcdn.com/images/mxnxae__/post/8d4b66af-ad27-453f-8c03-1b20b09753b6/image.png" alt=""></p>
<h1 id="기획안튜터링">기획안(튜터링)</h1>
<p>뭐든 기획안 쓰는게 제일 어려운것같다 ㅠㅠ
뭘 하고싶은지가 정확하게 정리가 안되는 느낌? </p>
<p>기획안 잘 쓰는법..
책을 진짜 많이 읽는 수 밖엔 없겠지?
실무 스킬을 위해서라도.. 그리고 이건 정말 어느 회사에 들어가서든
앞으로 내가 해나갈 모든 활동에서 써먹을 수 있을 것 같아서
기획안 작성 skill을 좀 키워봐야겠드아 ㅜ.ㅜ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[250602]]></title>
            <link>https://velog.io/@mxnxae__/250602</link>
            <guid>https://velog.io/@mxnxae__/250602</guid>
            <pubDate>Mon, 02 Jun 2025 06:06:08 GMT</pubDate>
            <description><![CDATA[<p>6월도 화이팅!
<img src="https://velog.velcdn.com/images/mxnxae__/post/5bb5034c-77e0-482b-a26a-fc0fecda3612/image.png" alt=""></p>
<hr>
<h1 id="ab-test">A/B test</h1>
<h2 id="👩🔬-1-ab-테스트란-무엇인가">👩‍🔬 1. A/B 테스트란 무엇인가?</h2>
<p> 두 이상의 그룹(대조군, 실험군, +@)을 비교하여 특정 변화(예: 새로운 기능, 디자인 등)가 비즈니스 목표에 미치는 영향을 측정하는 실험 방법</p>
<h3 id="ab-테스트의-핵심-요소">A/B 테스트의 핵심 요소</h3>
<ol>
<li><strong>대조군(Control Group)</strong>: 아무 변화도 주지 않은 그룹.</li>
<li><strong>실험군(Treatment Group)</strong>: 새로운 조건(예: 업데이트)을 적용한 그룹.</li>
<li><strong>평가지표(Metrics)</strong>: 실험 효과를 측정할 수 있는 기준.<ul>
<li>예: 전환율, 클릭률, 평균 구매 금액 등.</li>
</ul>
</li>
</ol>
<h2 id="🎲-2-randomization">🎲 2. Randomization</h2>
<p>실험군(Treatment Group)과 대조군(Control Group)을 실험에서 무작위로 배정하는 방법</p>
<p> 두 그룹 간의 차이는 오직 어떠한 처치(Treatment)으로 인해 발생한 것이며, 다른 외부 요인의 영향을 배제할 수 있다.
 랜덤화는 <strong>편향(Bias)을 제거</strong>하고, 두 그룹을 <strong>비교 가능</strong>하게 만들어줌</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/e302d060-8090-44d8-9d22-14a49bcc68ee/image.png" alt=""></p>
<p><strong>왜 랜덤화가 중요한가?</strong></p>
<p>랜덤화는 상관관계(Association)를 인과관계(Causation)로 해석할 수 있게 해준다. </p>
<p>아래와 같은 문제를 방지:</p>
<ul>
<li><p><strong>편향된 표본(Bias)</strong>: 특정 그룹이 실험에 과잉 대표되거나 소외되는 경우</p>
<ul>
<li>예: 온라인 학습이 오직 자기 주도적인 학생들에게서만 긍정적인 결과를 보였다면, 이 결과는 온라인 학습의 실제 효과를 반영하지 못함.</li>
</ul>
</li>
<li><p><strong>숨겨진 요인(Confounding Variables)</strong>: 처치와 결과 모두에 영향을 미치는 외부 요인이 존재하는 경우</p>
<ul>
<li>예: 부유한 가정의 학생들이 전통적 학습보다 온라인 학습을 선호하고 동시에 성적도 더 높은 경우.</li>
</ul>
</li>
</ul>
<p>랜덤화를 통해, <strong>대조군과 실험군이 잠재적으로 동일한 특성을 갖게</strong> 하여 이러한 문제를 최소화</p>
<h3 id="예시-온라인-학습-vs-대면-학습">예시: 온라인 학습 vs 대면 학습</h3>
<ul>
<li><strong>질문</strong>: 온라인 학습이 학생들의 시험 점수에 어떤 영향을 미칠까?</li>
<li><strong>잘못된 접근</strong>: 온라인 학습을 하는 학생과 대면 학습을 하는 학생들의 점수를 단순히 비교한다.<ul>
<li>이 경우, 학생들의 성향, 가정환경, 학습동기와 같은 숨겨진 요인이 영향을 줄 수 있다. 
Bias가 있을 확률 증가.</li>
</ul>
</li>
<li><strong>랜덤화 접근</strong>:<ul>
<li>학생들을 무작위로 두 그룹(온라인, 대면)으로 나눔.</li>
<li>이렇게 하면, 각 그룹의 학생들이 기본적으로 <strong>비슷한 특성</strong>을 가지며, 두 그룹의 차이는 오직 학습 방식(온라인 또는 대면)으로 인해 발생한 것으로 볼 수 있다.</li>
</ul>
</li>
</ul>
<p>랜덤화는 잠재적 결과(Potential Outcomes)를 Treatment와 독립적으로 만들어 줌. </p>
<p>랜덤화가 이루어진 실험에서는 다음이 성립:</p>
<p>$$</p>
<p>E[Y_0 | T = 1] = E[Y_0 | T = 0]
$$</p>
<ul>
<li>Y_0 : 통제 상태에서의 결과.</li>
<li>T : 실험 여부(0은 대조군, 1은 실험군)</li>
</ul>
<p>실험군과 대조군의 평균성적은 똑같아야한다.(실험전)</p>
<ul>
<li><strong>해석</strong>: 실험군이 대조군과 <strong>통계적으로 동일</strong>하므로, 그룹 간 차이는 오직 어떠한 처리 효과 때문입니다.</li>
</ul>
<p>실험 전부터 차이가 있다? -&gt; 편향이 있다. <strong>랜덤화 다시 해야함.</strong></p>
<p><strong>랜덤화가 잘 작동한 사례: 온라인 학습의 효과</strong></p>
<p>2020년 코로나 팬데믹 동안, 한 연구에서는 온라인 학습과 대면 학습이 학생들의 성적에 미치는 영향을 실험하기 위해 다음과 같은 랜덤화 설계 적용:</p>
<ol>
<li>학생들을 세 그룹으로 랜덤 배정<ul>
<li><strong>대면 학습 그룹</strong> (Face-to-face)</li>
<li><strong>온라인 학습 그룹</strong> (Online)</li>
</ul>
</li>
<li>각 그룹의 학생들에게 동일한 학습 자료와 시험을 제공</li>
<li>학기 종료 후, 각 그룹의 시험 점수를 비교</li>
</ol>
<p><strong>결과:</strong></p>
<ul>
<li>대면 학습 그룹의 평균 점수: <strong>78.54점</strong></li>
<li>온라인 학습 그룹의 평균 점수: <strong>73.63점</strong></li>
<li>온라인 수업의 효과: <strong>-4.91점</strong></li>
</ul>
<p>=&gt; 온라인 수업은 학생들이 평균적으로 약 5점 낮은 성과를 내게 한다.</p>
<p>온라인 수업을 듣는 학생들이 대면 수업을 들을 여유가 없는 더 낮은 수준의 학생일 수 있다는 점이나, 각 그룹의 학생들이 수업 방식 외의 다른 요인에서 다를 수 있다는 점도 신경 쓰지 <strong>않아도 됨</strong>(랜덤화를 했으니까, 랜덤 실험의 설계 자체가 이러한 차이를 제거하기 위해 만들어졌기 때문에)</p>
<p>랜덤화 덕분에 두 그룹의 학생들이 기본적으로 비슷한 특성을 가졌으며, 점수 차이는 학습 방식의 효과로 설명할 수 있다. </p>
<blockquote>
<p>TIP
실험에서 우리는 처리 효과를 추정하기 위해 <strong>평균의 차이</strong>를 계산.
하지만, 이 차이가 실제로 의미 있는지를 판단하려면 결과의 <strong>불확실성</strong>을 이해하는 것이 중요
=&gt; 표준 오차(Standard Error)</p>
</blockquote>
<h2 id="📋-3-standard-error">📋 3. Standard Error</h2>
<p>표준 오차(Standard Error)는 <strong>샘플 평균이 모집단 평균에서 얼마나 벗어날 수 있는지</strong>를 측정하는 값
쉽게 말해, 실험 결과가 얼마나 신뢰할 수 있는지 알려주는 지표</p>
<h3 id="moivres-equation">Moivre’s Equation</h3>
<p>$$
SE = \frac{\sigma}{\sqrt{n}}
$$</p>
<ul>
<li><em>SE</em>: 평균의 표준 오차</li>
<li>σ: 모집단의 표준편차</li>
<li>n: 샘플 크기</li>
</ul>
<p><strong>왜 표준 오차가 중요한가?</strong></p>
<ol>
<li><strong>샘플 크기가 클수록 결과가 더 신뢰할 만하다</strong>:<ul>
<li>샘플이 작으면, <strong>평균 값의 변동성</strong>이 커져서 결과가 극단적으로 나올 가능성이 높다.</li>
<li>반대로, 샘플 크기가 크면 변동성이 줄어들고, 평균이 모집단 평균에 더 가까워진다.</li>
</ul>
</li>
<li><strong>샘플 간의 차이를 비교할 때 사용</strong>:<ul>
<li>예를 들어, 두 그룹(실험군과 대조군)의 평균 차이가 있다고 해도, 그 차이가 <strong>우연</strong>일 가능성을 판단해야 한다.</li>
<li>표준 오차가 작으면 결과가 우연일 가능성이 낮고, 신뢰할 만한 결과로 볼 수 있다.</li>
</ul>
</li>
</ol>
<h3 id="학교-성적-데이터와-표준-오차">학교 성적 데이터와 표준 오차</h3>
<p>랜덤화된 실험에서 온라인 학습 그룹과 대면 학습 그룹의 시험 점수를 비교한다고 가정
두 그룹의 평균 점수를 비교하려면 <strong>표본 크기</strong>와 <strong>표준 오차</strong>가 실험 결과에 어떤 영향을 미치는지 이해해야 함 </p>
<p><strong>표본 크기가 작은 경우</strong></p>
<ul>
<li>온라인 학습 그룹에서 학생 5명의 시험 점수를 뽑았더니 평균 점수가 <strong>90점</strong></li>
<li>하지만 이 5명이 <strong>운 좋게 우수한 학생들</strong>로만 구성되어 있을 가능성</li>
<li>이 경우, <strong>샘플 크기가 작기 때문에 변동성이 크고</strong>, 평균 점수가 모집단(모든 온라인 학습 학생들)의 평균을 제대로 반영하지 못할 수 있다.</li>
<li>따라서 표준 오차(SE)가 커지고, <strong>결과의 신뢰도</strong>가 낮아짐</li>
</ul>
<p><strong>표본 크기가 큰 경우</strong>:</p>
<ul>
<li>이번에는 같은 온라인 학습 그룹에서 <strong>100명의 시험 점수</strong>를 샘플로 </li>
<li>이 표본에서도 평균 점수가 <strong>90점</strong>으로 동일하게 나왔더라도 더 <strong>다양한 학생들의 점수가 포함</strong>되었을 가능성이 높음</li>
<li>즉 샘플 크기가 크면 평균 점수가 모집단 평균에 더 가까워지며, 표준 오차(SE)는 작아짐</li>
<li>결과적으로 <strong>신뢰도</strong>가 높아짐</li>
</ul>
<p>보통 모집단의 데이터를 알 수 없기 때문에 <strong>샘플 데이터</strong>를 활용해서 모집단의 SE를 <strong>추정</strong>해서 계산</p>
<p>$$</p>
<p>\hat{\sigma} = \sqrt{\frac{1}{N-1} \sum_{i=1}^N (x_i - \bar{x})^2}
$$</p>
<p>Python 에서 pandas 의 .std() 함수로도 구현 가능</p>
<pre><code class="language-python">data = pd.read_csv(&quot;online_classroom.csv&quot;)
online = data.query(&quot;format_ol==1&quot;)[&quot;falsexam&quot;]
face_to_face = data.query(&quot;format_ol==0 &amp; format_blended==0&quot;)[&quot;falsexam&quot;]

def se(y: pd.Series):
    return y.std() / np.sqrt(len(y))

print(&quot;대면 학습 그룹의 SE:&quot;, se(face_to_face))
print(&quot;온라인 학습 그룹의 SE:&quot;, se(online))</code></pre>
<ul>
<li>대면 학습 그룹의 SE: <strong>0.8724</strong></li>
<li>온라인 학습 그룹의 SE: <strong>1.537</strong></li>
</ul>
<h2 id="📊-4-confidence-interval신뢰구간">📊 4. Confidence Interval(신뢰구간)</h2>
<p>신뢰 구간은 우리가 계산한 평균(또는 다른 추정치)에 대해 “이 추정치가 어느 범위 안에 있을 가능성이 높다”는 것을 나타냄.
일반적으로, <strong>95% 신뢰 구간</strong>은 우리가 같은 실험을 여러 번 반복한다면, 그 중 <strong>95%의 경우 모집단 평균이 이 구간 안에 포함될 것</strong>임을 의미</p>
<p><strong>왜 신뢰 구간이 중요한가?</strong></p>
<ol>
<li><strong>불확실성을 정량화</strong>:<ul>
<li>표본이나 실험 데이터는 모집단의 일부에 불과하므로, 추정치에는 항상 불확실성이 존재하는데, 신뢰 구간은 이 불확실성을 수치로 표현함</li>
</ul>
</li>
<li><strong>결과의 신뢰성 판단</strong>:<ul>
<li>두 그룹의 신뢰 구간이 겹치지 않는다면, 두 그룹 간의 차이는 우연일 가능성이 낮음    (통계적으로 유의미)</li>
</ul>
</li>
</ol>
<h3 id="중앙극한정리central-limit-theorem">중앙극한정리(Central Limit Theorem)</h3>
<ul>
<li>모집단의 분포가 어떤 형태이든 관계없이, 동일한 크기의 표본을 여러 번 추출하여 각 표본의 평균을 계산하면, 이 표본 평균들의 분포는 점점 정규분포에 가까워집니다.</li>
<li>정규 분포의 95%는 평균에서 약 <strong>1.96 표준편차</strong> 안에 포함됨</li>
</ul>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/ef71c868-e1a8-436b-905c-eb8b79b4cc10/image.png" alt=""></p>
<h3 id="신뢰-구간-계산-방법">신뢰 구간 계산 방법</h3>
<p>$$</p>
<p>CI = \bar{x} \pm z \cdot SE
$$</p>
<ul>
<li>x̄: 샘플 평균</li>
<li>z : 신뢰 수준에 따른 임계값 (95% 신뢰 구간에서는  Z ≈ 1.96 )</li>
<li>SE : 표준 오차</li>
</ul>
<p><strong>예시: 온라인 학습 vs 대면 학습</strong></p>
<p>실험 결과로, 다음과 같은 평균과 표준 오차가 계산되었다고 가정해봅니다. </p>
<p><strong>대면학습 그룹</strong></p>
<ul>
<li><p>평균 점수: <strong>78.54점</strong></p>
</li>
<li><p>SE: <strong>0.8724</strong></p>
</li>
<li><p>95% 신뢰 구간:</p>
<p>  $$</p>
<p>  CI_{대면학습} = 78.54 \pm 0.8724 \cdot 1.96 = (76.83, 80.25)
  $$</p>
</li>
</ul>
<p><strong>온라인 학습 그룹</strong></p>
<ul>
<li><p>평균 점수: <strong>73.63점</strong></p>
</li>
<li><p>SE: <strong>1.537</strong></p>
</li>
<li><p>95% 신뢰 구간:</p>
<p>  $$</p>
<p>  CI_{온라인학습} = 73.64 \pm 1.96 \cdot 1.537 = (70.63, 76.65)
  $$</p>
</li>
</ul>
<p>두 그룹의 신뢰 구간이 <strong>겹치지 않는다</strong>는 점에서, 
대면 학습이 온라인 학습보다 시험 점수에 긍정적인 영향을 미친다는 것을 통계적으로 유의미하게 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/mxnxae__/post/ab34ee19-f8d8-4d48-ba0a-7f2b1532f76f/image.png" alt=""></p>
<p><strong>신뢰 구간의 실제 의미</strong></p>
<ul>
<li><strong>95% 신뢰 구간</strong>이 의미하는 것은, 우리가 같은 실험을 여러 번 반복한다면, 그 실험들 중 <strong>95%의 신뢰 구간이 모집단 평균을 포함할 것</strong>이라는 뜻</li>
<li>특정 신뢰 구간 하나가 모집단 평균을 포함할 확률이 95%라는 뜻x
특정 신뢰 구간은 <strong>포함하거나(100%) 포함하지 않거나(0%)</strong> 둘 중 하나</li>
</ul>
<h2 id="⚡-tldr">⚡ TL;DR</h2>
<p><strong>주제</strong>: A/B 테스트를 통해 인과 관계를 검증하며, 실험 설계와 통계적 신뢰(표준 오차, 신뢰 구간)의 개념 학습</p>
<p><strong>핵심 내용</strong></p>
<ol>
<li><strong>A/B 테스트란?</strong><ul>
<li>두 그룹(대조군 vs 실험군)을 비교하여 변화의 영향을 측정하는 실험</li>
<li>랜덤화를 통해 두 그룹의 비교 가능성을 확보하고 외부 요인에 의한 편향을 최소화</li>
</ul>
</li>
<li><strong>표준 오차(Standard Error)</strong><ul>
<li>실험 데이터의 신뢰도를 평가하는 지표</li>
<li>샘플 크기가 클수록 표준 오차는 줄어들며, 평균 추정치의 정확성이 높아짐</li>
</ul>
</li>
<li><strong>신뢰 구간(Confidence Interval, CI)</strong><ul>
<li>실험 결과의 불확실성을 정량화</li>
<li>95% 신뢰 구간은 동일 실험 반복 시 모집단 평균이 해당 범위에 포함될 확률이 95%임을 의미</li>
<li>예: 대면 학습의 CI는 (76.83, 80.25), 온라인 학습의 CI는 (70.63, 76.65). 두 CI가 겹치지 않아 대면 학습의 시험 점수가 유의미하게 높음을 확인함.</li>
</ul>
</li>
</ol>
<p><strong>결론</strong>: 랜덤화와 통계적 신뢰 지표(SE, CI)를 활용해 실험 결과의 신뢰성을 평가하고 인과 관계를 명확히 할 수 있다.</p>
]]></description>
        </item>
    </channel>
</rss>