<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>💖✨🫧🌱🌨️</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 23 Dec 2025 10:59:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>💖✨🫧🌱🌨️</title>
            <url>https://velog.velcdn.com/images/ohmynoon__/profile/6e96ab24-401f-4e98-b41e-3dfd406471b0/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 💖✨🫧🌱🌨️. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ohmynoon__" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[GitHub 사용법(2) - branch]]></title>
            <link>https://velog.io/@ohmynoon__/GitHub-%EC%82%AC%EC%9A%A9%EB%B2%952-branch</link>
            <guid>https://velog.io/@ohmynoon__/GitHub-%EC%82%AC%EC%9A%A9%EB%B2%952-branch</guid>
            <pubDate>Tue, 23 Dec 2025 10:59:04 GMT</pubDate>
            <description><![CDATA[<h1 id="브랜치-운영-원칙">브랜치 운영 원칙</h1>
<p><img src="https://velog.velcdn.com/images/ohmynoon__/post/ed458efc-05aa-43ec-920f-fa8dddc283ef/image.png" alt=""></p>
<ul>
<li><p><code>main</code>: 최종 배포를 위한 안정적인 상태를 유지하며, 직접적인 코딩 실행 x</p>
</li>
<li><p><code>dev</code>: 개발의 중심이 되는 브랜치</p>
</li>
<li><p><code>feature</code> (작업 브랜치): 각 기능이나 버그 수정을 위해 dev에서 생성한 독립적인 작업 공간</p>
</li>
</ul>
<h1 id="명령어">명령어</h1>
<h2 id="브랜치-생성하기">브랜치 생성하기</h2>
<pre><code>git branch 브랜치명</code></pre><h2 id="생성한-브랜치로-작업-공간-전환">생성한 브랜치로 작업 공간 전환</h2>
<pre><code>git switch 브랜치명</code></pre><h2 id="내-브랜치ex-featureragv2-에-있을-때">내 브랜치(ex. feature/rag/v2) 에 있을 때</h2>
<p><img src="https://velog.velcdn.com/images/ohmynoon__/post/6ac93239-d05c-474b-b8dd-06b4aa770ab4/image.png" alt=""></p>
<ol>
<li><strong>작업 브랜치 변경사항 반영 (Push)</strong></li>
</ol>
<pre><code class="language-yaml">git add .                  # 변경된 모든 파일 스테이징 (특정 파일은 git add 파일명)
git commit -m &quot; commit 메시지&quot; # 커밋 메시지 작성
git push origin 브랜치명      # 원격 저장소에 해당 브랜치 전송</code></pre>
<ol start="2">
<li><strong>브랜치 확인 및 전환 (Switch)</strong></li>
</ol>
<pre><code class="language-yaml">git branch -r     # 원격 브랜치 목록 확인
git switch dev    # 작업 위치를 dev 브랜치로 전환</code></pre>
<ol start="3">
<li><strong>기준 브랜치(dev) 최신화 (Pull)</strong></li>
</ol>
<pre><code class="language-yaml">git pull origin dev</code></pre>
<ol start="4">
<li><strong>브랜치 병합 (Merge)</strong></li>
</ol>
<ul>
<li><strong>💡 참고</strong>: 반드시 <code>dev</code> 브랜치가 최신 상태인지 확인한 후 병합을 진행하기</li>
</ul>
<pre><code class="language-yaml">git merge 브랜치이름</code></pre>
<ol start="5">
<li><strong>병합 결과 원격 반영 (Push)</strong></li>
</ol>
<ul>
<li>이 과정을 거쳐야 최신 코드가 공유 가능함</li>
</ul>
<pre><code class="language-yaml">git push origin dev</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹크롤링을 위한 선택자]]></title>
            <link>https://velog.io/@ohmynoon__/%EC%9B%B9%ED%81%AC%EB%A1%A4%EB%A7%81%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%83%9D%EC%9E%90</link>
            <guid>https://velog.io/@ohmynoon__/%EC%9B%B9%ED%81%AC%EB%A1%A4%EB%A7%81%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%83%9D%EC%9E%90</guid>
            <pubDate>Mon, 17 Nov 2025 03:17:02 GMT</pubDate>
            <description><![CDATA[<h2 id="선택자">선택자</h2>
<ul>
<li><code>선택자(Selector)</code> : 어떤 것을 적용할 HTML 요소를 선택하는 방법<h3 id="css-선택자">CSS 선택자</h3>
</li>
<li>아이디 : <code>#아이디명</code>
ex) <code>#restaurant{color:red;}</code></li>
<li>클래스 : <code>.클래스명</code>
ex) <code>.food{color:red;}</code></li>
<li>태그 : <code>태그명</code>
ex) <code>a{color:red;}</code></li>
<li>전체 : <code>*</code><h3 id="계층-선택자">계층 선택자</h3>
</li>
<li>부모 선택자 : <code>&gt;</code>
ex) <code>선택자&gt;자식 선택자</code>    </li>
<li>자손 선택자 : <code>(공백)</code>
ex) <code>선택자 자손선택자</code></li>
</ul>
<h3 id="가상-선택자">가상 선택자</h3>
<ul>
<li><code>태그:first-child</code> : 태그 중 첫번째 요소에 해당 CSS를 적용</li>
<li><code>태그:last-child</code> : 태그 중 마지막에 해당 CSS를 적용</li>
<li><code>태그:nth-child(n)</code> : 태그 중 n번째 요소에 해당 CSS를 적용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[12세 이하인 여자 환자 목록 출력하기
]]></title>
            <link>https://velog.io/@ohmynoon__/12%EC%84%B8-%EC%9D%B4%ED%95%98%EC%9D%B8-%EC%97%AC%EC%9E%90-%ED%99%98%EC%9E%90-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4</link>
            <guid>https://velog.io/@ohmynoon__/12%EC%84%B8-%EC%9D%B4%ED%95%98%EC%9D%B8-%EC%97%AC%EC%9E%90-%ED%99%98%EC%9E%90-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4</guid>
            <pubDate>Thu, 29 May 2025 05:27:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<p><strong>문제</strong>
PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, &#39;NONE&#39;으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.</p>
<pre><code>SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO,&#39;NONE&#39;)

FROM PATIENT

WHERE AGE &lt;= 12 AND GEND_CD=&#39;W&#39;

ORDER BY AGE DESC, PT_NAME ASC;</code></pre><ul>
<li>IFNULL(컬럼명, &#39;NULL일 경우 대체할 값&#39;)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ADsP 3과목 요약정리]]></title>
            <link>https://velog.io/@ohmynoon__/ADsP-3%EA%B3%BC%EB%AA%A9</link>
            <guid>https://velog.io/@ohmynoon__/ADsP-3%EA%B3%BC%EB%AA%A9</guid>
            <pubDate>Sat, 17 May 2025 12:39:39 GMT</pubDate>
            <description><![CDATA[<h1 id="통계분석">통계분석</h1>
<h3 id="용어">용어</h3>
<ul>
<li><p>SSE : 잔차들이 자신의 표본평균으로부터 벗어난 편차의 제곱 (오차제곱합)</p>
</li>
<li><p>SSR : 표본평균과 종속변수값 중 독립변수에 의해 설명된 부분과의 차이를 제곱하여 합한 값(회귀제곱합)</p>
</li>
<li><p>SST : 종속변수의 관측값과 표본의 평균의 평균의 차이를 제곱하여 합한 값(총제곱합)</p>
</li>
<li><p>SST = SSR +SSE</p>
</li>
<li><p>오차: 모집단 회귀식의 예측값과 실제값의 편차</p>
</li>
<li><p>잔차: 표본집단 회귀식의 예측값과 실제값의 편차</p>
</li>
<li><p>MSE (Mean Squared Error): 평균 제곱 오차</p>
<ul>
<li>실제 값과 예측된 값의 차이를 제곱한 값들의 평균</li>
<li>값이 <strong>작을수록</strong> 모델의 예측 정확도가 <strong>높음</strong></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><strong>p-value(유의확률)</strong><ul>
<li>귀무가설을 지지하는 정도</li>
</ul>
</li>
<li><strong>α (1종 오류)</strong><ul>
<li>가설검정에서 귀무가설이 참인데, 이를 기각할 확률</li>
</ul>
</li>
<li><strong>β(2종 오류)</strong><ul>
<li>가설 검정에서 대립가설이 참인데, 이를 기각할 확률</li>
</ul>
</li>
</ul>
<h3 id="검정">검정</h3>
<p>모수검정</p>
<p><strong>비모수검정</strong></p>
<ul>
<li><p>표본의 수가 적을 때</p>
</li>
<li><p>모집단에 대한 가정을 할 수 없을 때</p>
</li>
<li><p>부호 검정, 순위 검정</p>
</li>
<li><p>서열 척도에 대한 검정</p>
<ul>
<li>숫자로는 표현되지만 수량화가 불가능</li>
</ul>
</li>
<li><p>일 표본 t 검정</p>
<ul>
<li>ex) 수컷 호랑이 성체의 평균 몸무게는 250kg 이다.</li>
</ul>
</li>
<li><p>이 표본 t 검정</p>
<ul>
<li>ex) 사자와 호랑이의 무게는 같을 것이다.</li>
</ul>
</li>
<li><p>동질성 검정</p>
<ul>
<li>두 개 이상의 모집단에 대한 구성 비율이 같은지 다른지를 검정</li>
<li>ex) 두 학교의 학년의 분포 비율은 같다</li>
</ul>
</li>
<li><p>상관분석</p>
<ul>
<li>ex) 두 변수의 상관계수는 0이다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분산분석">분산분석</h3>
<ul>
<li>ANOVA : 세 개 이상의 모집단이 있을 경우에 여러 집단 사이의 평균을 비교하는 검정방법</li>
<li>귀무가설 H₀: 모든 집단 간 평균은 같다</li>
<li><code>aov(연속형~범주형)</code><ul>
<li>종속변수: 연속형 데이터</li>
<li>독립변수: 범주형 데이터</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분산분석-가정사항">분산분석 가정사항</h3>
<ul>
<li>정규성</li>
<li>등분산성</li>
<li>독립성</li>
</ul>
<hr>
<h3 id="상관분석">상관분석</h3>
<ul>
<li>두 변수 간의 선형적 관계가 존재하는지 알아보는 분석 방법</li>
<li>+1 에 가까우면 강한 양의 상관관계</li>
<li>-1에 가까우면 강한 음의 상관관계</li>
<li>0에 가까울수록 상관관계가 존재하지 x</li>
<li>p-value가 0.05(유의수준)보다 작으면 귀무가설 기각</li>
<li>명목척도에 대해서는 상관계수를 구할 수 x</li>
</ul>
<hr>
<h3 id="상관분석의-종류">상관분석의 종류</h3>
<p><strong>&lt;피어슨 상관분석&gt;</strong></p>
<ul>
<li>모수적 방법</li>
<li>선형적인 상관관계</li>
<li>두 변수가 모두 정규분포를 따른다.</li>
<li>등간척도, 비율척도</li>
</ul>
<p><strong>&lt;스피어만 상관분석&gt;</strong></p>
<ul>
<li>비모수적 방법</li>
<li>비선형적인 상관관계</li>
<li>서열척도</li>
</ul>
<h3 id="회귀분석">회귀분석</h3>
<ul>
<li>하나 이상의 독립변수들이 종속변수에 얼마나 영향을 미치는지 추정</li>
<li>기본적으로 변수가 연속형 변수일 때 사용</li>
</ul>
<h3 id="회귀모형">회귀모형</h3>
<ul>
<li><strong>선형회귀모형</strong><ul>
<li>x와 y가 1차식으로 나타나는 모형</li>
<li><code>lm</code></li>
</ul>
</li>
<li><strong>단순선형회귀모형</strong><ul>
<li>독립변수 1개</li>
</ul>
</li>
<li><strong>최소제곱법</strong> - 측정값과 함수값 차이를 제곱한 값의 합이 최소가 되도록 하는 y = f(x) 를 구하는 것<ul>
<li>(측정값 - 함수값)^2의 합이 최소가 되는 직선의 그래프</li>
<li>회귀계수 추정(오차가 작을수록 가장 합리적)</li>
<li><em>각 독립변수에 대한 회귀계수를 추정하기 위한 방법으로 잔차의 제곱합이 최소가 되는 회귀식을 찾는 방법이다.</em></li>
</ul>
</li>
<li><strong>다중선형회귀모형</strong><ul>
<li>독립변수가 2개 이상</li>
<li>통계적으로 유의한 것들을 독립변수로 회귀분석 재수행(권장)</li>
</ul>
</li>
</ul>
<hr>
<h3 id="회귀분석의-가정">회귀분석의 가정</h3>
<ul>
<li><strong>선형성</strong><ul>
<li>독립변수와 종속변수가 선형관계를 가지고 있어야 한다.</li>
</ul>
</li>
<li><strong>독립성</strong><ul>
<li>오차항과 독립변수는 독립관계에 있어 상호 연관을 주어서는 안된다.</li>
</ul>
</li>
<li><strong>등분산성</strong><ul>
<li>오차항이 일정한 분산을 가져야 한다.</li>
</ul>
</li>
<li><strong>정규성</strong><ul>
<li>오차항이 정규분포 형태를 가져야 한다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="회귀모형-해석">회귀모형 해석</h3>
<ul>
<li><p>귀무가설: 회귀계수가 0이다.</p>
</li>
<li><p>대립가설: 회귀계수가 0이 아니다.</p>
</li>
<li><p>T 검정</p>
<ul>
<li>t-통계량: $\frac{회귀계수}{표준오차}$<ul>
<li>t-통계량이 크다 = 표준오차가 작다 = <a href="https://www.notion.so/ADsP-1f64b062a3d68049b015c9416beb1fde?pvs=21">회귀계수가 크다</a></li>
</ul>
</li>
<li><em>전체 p-value (추정식으로부터 도출) 가 0.05보다 작으면, 통계적으로 유의!</em></li>
<li><em>각 독립변수에 대한 p-value가 0.05보다 작으면 통계적으로 유의!</em></li>
</ul>
</li>
<li><p>F 검정</p>
<ul>
<li><p>분산의 차이를 확인할 때 사용</p>
<ul>
<li>분산의 차이가 크다 = 회귀계수가 크다</li>
</ul>
</li>
<li><p>F 값이 크다 = 회귀계수가 크다 = 가파르다 = 유의미한 인과관계 = 회귀계수가 유의미함</p>
<p>→ P 값은 상대적으로 작아짐(0.05보다 작으면 유의미한 인과관계) </p>
</li>
</ul>
</li>
<li><p><strong>결정계수</strong>( $R^2)$ = $\frac{SSR}{SST}$ = $\frac{SST-SSE}{SST}$</p>
<ul>
<li>0~1의 값을 가지고, <strong>높을수록</strong> 추정된 회귀식의 설명력이 <strong>높음</strong></li>
</ul>
</li>
<li><p>수정된 결정계수</p>
<ul>
<li>다중공선성 문제 해결 O</li>
</ul>
</li>
</ul>
<hr>
<h3 id="다중공선성">다중공선성</h3>
<ul>
<li>독립변수가 2개 이상일 때 다중공선성 유의(독립변수 간에 강한 상관관계가 나타나는 문제)</li>
<li>다중회귀분석에서 설명변수들 사이에 선형관계가 존재 → 회귀계수 추정이 곤란</li>
<li><em>중요도가 낮으면서 상관관계가 높은 변수 제거</em></li>
<li><em>변수들을 정규화 또는 표준화를 수행함으로써 간접적으로 다중공선 감소 가능</em></li>
<li><em>다중공선성이 존재하면 상관계수 값을 낮추기 위해 변수 값을 조정(X)</em></li>
<li>VIF 값이 <strong>10이 넘으면</strong> 다중공선성이 존재한다고 봄<ul>
<li>VIF(Variance Inflation Factor): $VIF = \frac {1}  {1-R^2}$</li>
</ul>
</li>
<li>해결방법<ul>
<li>변수 제거</li>
<li>변수 차원 축소 - PCA(주성분분석)</li>
<li>차원 축소 - LDA, t-SNE, SVD</li>
<li>주성분 개수 선택 - Scree plot</li>
</ul>
</li>
</ul>
<hr>
<h3 id="단계적-변수선택">단계적 변수선택</h3>
<p>전진선택법</p>
<ul>
<li>설명력이 높은 설명변수부터 시작해 하나씩 모형에 추가</li>
<li>유의성 검정한 후 더 이상 유이ㅡ하지 않은 경우 변수 추가 x</li>
</ul>
<p>후진제거법</p>
<ul>
<li>가장 적은 영향을 주는 변수부터 하나씩 제거</li>
<li>변수의 개수가 너무 많은 경우에는 적용 힘듦</li>
<li><em>상수항만 남을 때까지 변수 제거(X)</em></li>
<li><em>벌점이 감소하지 않을 때 변수 제거를 멈춤</em></li>
</ul>
<p>단계선택법</p>
<ul>
<li><p>추가될 때 예상되는 벌점 값과 변수가 제거될 때 예상되는 벌점 값이 가장 작도록 만들어 나감</p>
</li>
<li><p><code>direction = ‘forward’, backward’, ‘both’</code> 키워드 사용</p>
</li>
</ul>
<hr>
<h3 id="변수-선택-방법에-쓰이는-성능지표">변수 선택 방법에 쓰이는 성능지표</h3>
<p>→ 회귀모형은 변수의 수가 증가할수록 편향은 <strong>작아지고</strong> 분산은 <strong>커진다</strong>. </p>
<ul>
<li>AIC<ul>
<li>MSE에 변수 수 만큼 penalty</li>
<li>표본 n이 커질 때 부정확해짐</li>
</ul>
</li>
<li>BIC<ul>
<li>표본이 커질 때 조금 더 정확함</li>
</ul>
</li>
</ul>
<p>→ 편향과 분석이 최적이 되는 균형점 제안</p>
<hr>
<h3 id="정규화-선형회귀">정규화 선형회귀</h3>
<ul>
<li>과적합을 방지하기 위해 계수의 크기를 제한하는 방법</li>
</ul>
<p>&lt;정규화 선형회귀의 종류&gt;</p>
<ul>
<li>라쏘<ul>
<li>L1 규제</li>
<li>가중치들의 절댓값의 합 최소화</li>
</ul>
</li>
<li>릿지<ul>
<li>L2 규제</li>
<li>가중치들의 제곱합을 최소화</li>
</ul>
</li>
<li>엘라스틱넷<ul>
<li>가중치들의 절댓값의 합과 제곱합을 동시에 제약조건으로 가짐</li>
</ul>
</li>
</ul>
<hr>
<h3 id="일반화-선형회귀">일반화 선형회귀</h3>
<ul>
<li>종속변수가 범주형 자료이거나, 정규성을 만족하지 못하는 경우에 사용</li>
</ul>
<p>&lt;일반화 선형회귀의 종류&gt;</p>
<ul>
<li>로지스틱 회귀<ul>
<li>종속변수가 범주형 자료일 때</li>
</ul>
</li>
<li>포아송 회귀<ul>
<li>종속변수가 정규분포를 따르지 않거나 등분산성을 만족하지 못하는 경우</li>
</ul>
</li>
</ul>
<h3 id="다변량분석">다변량분석</h3>
<h3 id="다차원-척도법-mds">다차원 척도법 (MDS)</h3>
<ul>
<li>데이터를 <strong>축소</strong>하는 목적</li>
<li>실제 거리와 추정된 거리 사이의 적합도를 측정하기 위해 stress 척도 사용<ul>
<li>stress는 0~1 사이의 값을 가짐</li>
<li>stress는 0에 가까울 수록 적합도가 높다 <em>(스트레스가 적어야 좋은거다..)</em></li>
</ul>
</li>
<li><em>데이터에 잠재해 있는 패턴이나 구조를 파악</em></li>
<li><em>발견한 특징을 저차원의 그래프에 기하학적으로 표현</em></li>
<li>연속형 변수 또는 서열척도</li>
<li><em>데이터들간의 상대적 거리를 보존할 수 있다(X)</em><ul>
<li>데이터들 간의 상대적 거리를 완전히 보존x → stress 활용</li>
</ul>
</li>
</ul>
<hr>
<h3 id="다차원-척도법의-종류">다차원 척도법의 종류</h3>
<ul>
<li><p>계량적 MDS</p>
<ul>
<li>구간척도, 비율척도</li>
<li>유클리디안 거리 행렬</li>
<li><code>cmdscale</code></li>
</ul>
</li>
<li><p>비계량적 MDS</p>
<ul>
<li>서열척도</li>
<li>서열척도를 거리속성값으로 변환하여 사용</li>
<li><code>isoMDS</code></li>
</ul>
</li>
</ul>
<hr>
<h3 id="주성분분석">주성분분석</h3>
<ul>
<li>여러 개의 변수 중 서로 상관성이 높은 변수들의 선형결합으로 새로운 변수를 반들어서 기존 변수를 요약 및 <strong>축소</strong>하는 방법</li>
<li>다중공선성 문제 해결</li>
<li>군집분석 시 모형의 성능 높일 수 있음</li>
<li>데이터 손실이 발생할 수 밖에 없음<ul>
<li><strong>분산</strong>이 가장 <strong>큰</strong> 축(= 손실이 가장 작은 축)을 찾아 새로운 변수로 만드는 방법</li>
</ul>
</li>
<li>평균 고윳값 방법<ul>
<li><strong>고윳값</strong>이 평균보다 <strong>작은</strong> 값을 갖는 주성분을 제거</li>
</ul>
</li>
<li>Scree plot<ul>
<li>최적의 주성분 개수 파악</li>
</ul>
</li>
<li>Biplot<ul>
<li>첫 번째 주성분과 두 번째 주성분을 축으로 함</li>
</ul>
</li>
</ul>
<hr>
<h3 id="시계열분석">시계열분석</h3>
<ul>
<li>일정 시간 간격으로 기록된 자료들에 대한 특성 파악, 미래 예측</li>
<li>대부분 비정상성 시계열 자료이기 때문에 정상성 시계열 자료로 변환</li>
<li><code>ts</code></li>
</ul>
<hr>
<h3 id="용어-1">용어</h3>
<ul>
<li>공분산<ul>
<li>두 개의 확률 변수의 선형관계 나타냄</li>
<li>두 개의 확률 변수의 증감 경향에 대한 측도 (=확률 변수의 흩어진 정도)</li>
<li>공분산 → 상관성 여부 파악 가능</li>
<li>공분산이 0 = 자기상관성 x = 독립적인 확률변수</li>
<li>공분산값을 정규화한 것 = <strong>상관계수</strong></li>
</ul>
</li>
<li>상관계수<ul>
<li><em>상관계수는 -1과 1 사이의 값을 갖는다</em></li>
<li><em>상관계수는 두 변수의 공분산을 각각의 표준편차로 나눈 값이다</em></li>
<li><em>상관계수의 단위는 존재하지 않는다</em></li>
<li>상관계수는 두 변수의 독립 여부와는 아무런 관계가 없다<ul>
<li><em>상관계수값이 0이면 두 변수의 독립을 의미함(X)</em></li>
</ul>
</li>
</ul>
</li>
<li>자기상관성<ul>
<li>서로 이웃하는 자료들끼리 상관관계를 가진다</li>
</ul>
</li>
<li>백색잡음<ul>
<li>공분산과 자기공분산이 모두 0인 시계열 자료</li>
<li>현재의 시점이 이전 시점과의 상관관계가 존재하지 않는다</li>
</ul>
</li>
</ul>
<hr>
<h3 id="시계열-자료의-정상성-조건">시계열 자료의 정상성 조건</h3>
<p><strong>평 차 분 변</strong> </p>
<ul>
<li>일정한 평균 → <strong>차분</strong>을 통해 정상화</li>
<li>일정한 분산 → <strong>변환</strong>을 통해 정상화</li>
<li>공분산은 시차에만 의존하고 시점에는 의존하지 않는다 (= 시차에만 의존)</li>
<li><em>모수가 시점에 의존하지 않는다</em></li>
</ul>
<hr>
<h3 id="시계열-분석기법">시계열 분석기법</h3>
<ul>
<li><strong>이동평균법</strong><ul>
<li>특정 기간들의 평균들의 변화를 파악하여 다음 시점의 자료 예측</li>
<li>장기적인 변동 추세 파악</li>
</ul>
</li>
<li><strong>지수평활법</strong><ul>
<li>과거자료보다 현재자료가 더 많은 정보를 가지고 있다고 가정</li>
<li>최근 자료에 더 큰 가중치</li>
</ul>
</li>
</ul>
<hr>
<h3 id="시계열-모형">시계열 모형</h3>
<ul>
<li><strong>자기회귀모형(AR)</strong><ul>
<li>t라는 시점에서의 값 yₜ는 이전 시점들 n개에 의해 설명</li>
<li>선형결합</li>
<li>부분자기상관함수 사용</li>
</ul>
</li>
<li><strong>이동평균모형(MA)</strong><ul>
<li><em>이전 시점의 <a href="https://www.notion.so/ADsP-1f64b062a3d68049b015c9416beb1fde?pvs=21">백색잡음</a>들의 선형 결합</em></li>
<li>자기상관함수 사용</li>
</ul>
</li>
<li><strong>자기회귀 누적이동평균 모형(ARIMA)</strong><ul>
<li>비정상 시계열이기 때문에 차분이나 변환을 통해 정상화</li>
<li>ARIMA(p,d,q)<ul>
<li>p: AR(자기회귀모형)의 차수</li>
<li>d: 시계열 자료를 정상화하기 위한 필요 차분 횟수</li>
<li>q: MA(이동평균모형)의 차수</li>
</ul>
</li>
<li><em>IMA 모형이 되기 위해서는 p = 0 이 되어야 함</em></li>
</ul>
</li>
<li>분해시계열<ul>
<li>추세, 순환, 계절, 불규칙 중 특정 요인만 분리해서 분석하거나 제거하는 작업</li>
<li>회귀분석과 함께 사용<ul>
<li>Zₜ = f(Tₜ , Sₜ , Cₜ , Iₜ)<ul>
<li>Tₜ : 시계열 자료의 증가 또는 감소 추세</li>
<li>Sₜ : 시간, 계절과 같은 원인으로 인한 주기를 두고 변동하는 자료</li>
<li>Cₜ : 알 수 없는 원인으로 인한 주기를 두고 변동하는 자료</li>
<li>Iₜ : 설명할 수 없는 오차</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="시계열의-구성요소">시계열의 구성요소</h3>
<ul>
<li>추세요인<ul>
<li>장기간 일정한 방향으로 상승 또는 하락</li>
</ul>
</li>
<li>순환요인<ul>
<li>정확히 알려진 이유 없음</li>
<li>주기가 일정하지 않은 변동</li>
<li>상하로 반복 운동하는 형태</li>
</ul>
</li>
<li>계절요인<ul>
<li>일정한 주기를 가짐</li>
<li>상하 반복의 규칙적인 변동</li>
</ul>
</li>
<li>불규칙요인<ul>
<li>설명하지 못하는 오차</li>
<li>규칙성 없이 우연히 발생</li>
</ul>
</li>
</ul>
<hr>
<h1 id="데이터-마이닝">데이터 마이닝</h1>
<h3 id="데이터-마이닝-1">데이터 마이닝</h3>
<ul>
<li>가설과 검정이 필요하지 않음</li>
</ul>
<hr>
<h3 id="데이터-마이닝-방법에-따른-분류">데이터 마이닝 방법에 따른 분류</h3>
<p><strong>지도학습</strong></p>
<ul>
<li><p>정답이 있음</p>
<ul>
<li>선형회귀분석</li>
<li>의사결정나무(회귀트리모형)</li>
<li>SVR, 신경망 모형, 릿지, 라쏘</li>
</ul>
<hr>
<ul>
<li>로지스틱회귀분석</li>
<li>신경망 모형</li>
<li>의사결정나무(분류트리모형)</li>
<li>k-NN, 앙상블모형, SVM, 나이브 베이즈 분류</li>
</ul>
</li>
</ul>
<p><strong>비지도학습</strong></p>
<ul>
<li><p>정답이 없고 숨겨진 패턴을 찾아내야 함</p>
<ul>
<li>K-means</li>
<li><em>SOM</em></li>
<li>DBSCAN</li>
<li>병합군집, 계층군집</li>
</ul>
<hr>
<ul>
<li>Apriori</li>
</ul>
<hr>
<ul>
<li>PCA, LDA, SVD, MDS</li>
</ul>
</li>
</ul>
<hr>
<h3 id="데이터-마이닝의-프로세스">데이터 마이닝의 프로세스</h3>
<ul>
<li>목적 정의</li>
<li>데이터 준비</li>
<li>데이터 가공</li>
<li>데이터 마이닝 기법 적용</li>
<li>검증</li>
</ul>
<hr>
<h3 id="데이터-분할">데이터 분할</h3>
<h3 id="데이터-분할-1">데이터 분할</h3>
<ul>
<li>훈련용(train)</li>
<li>검정용(validation)</li>
<li>평가용(test)</li>
</ul>
<h3 id="데이터-분할을-통한-검증">데이터 분할을 통한 검증</h3>
<ul>
<li><strong>홀드아웃</strong><ul>
<li>전체 데이터를 랜덤하게 추출하여 학습 데이터(80%) 와 테스트 데이터(20%)로 분리</li>
<li>테스트 데이터는 성과 평가만을 위해 사용</li>
</ul>
</li>
<li><strong>K-Fold 교차검증</strong><ul>
<li>전체 데이터를 k개의 집단으로 구분</li>
<li>k-1 를 훈련 데이터로, 나머지 1개를 테스트 데이터로 사용</li>
<li>모델의 정확도 향상</li>
<li>과적합 및 과소적합 모두 방지</li>
<li>데이터가 적을 경우에는 과적합 방지 어려움</li>
<li>많은 시간 필요(=느리다)</li>
</ul>
</li>
<li><strong>붓스트랩</strong><ul>
<li>표본을 복원 추출하는 방법</li>
<li>신뢰도를 높여 성능 개선</li>
<li>과적합 발생 가능성 낮출 수 있음</li>
<li>붓스트랩에 한번도 선정되지 않을 확률: 약 <strong>36.8%</strong></li>
</ul>
</li>
<li>계층별 k-겹 교차검증<ul>
<li>각 폴드가 가지는 레이블의 분포가 유사하도록 폴드를 추출해서 교차검증 실시</li>
</ul>
</li>
<li><strong>오버샘플링</strong><ul>
<li>특정 범주가 적은 데이터를 데이터 셋의 크기를 확장</li>
</ul>
</li>
<li><strong>언더샘플링</strong><ul>
<li>특정 범주가 많은 데이터를 데이터의 셋을 축소</li>
</ul>
</li>
</ul>
<hr>
<h1 id="분류분석">분류분석</h1>
<ul>
<li>(지도학습) 어느 그룹에 속하는지 판별하고자 하는 분석기법</li>
</ul>
<h3 id="로지스틱-회귀분석">로지스틱 회귀분석</h3>
<ul>
<li>각 범주에 포함될 확률값을 반환하여 분류</li>
<li>독립변수가 연속형, 종속변수가 범주형</li>
<li>독립변수가 어떤 값을 가지든 상관없이 종속변수는 확률값을 가짐<ul>
<li>종속변수 : 0과 1 사이의 값</li>
</ul>
</li>
<li><code>family = ‘binomial’</code> : 로지스틱 회귀분석으로 사용!</li>
</ul>
<p><strong>&lt;로지스틱 회귀분석의 알고리즘&gt;</strong></p>
<ul>
<li>오즈<ul>
<li>$\frac{성공}{실패}$ (실패할 확률 대비 성공할 확률</li>
<li>음수값을 가질 수 없다</li>
<li>확률값과 오즈의 그래프가 비대칭성을 띤다</li>
</ul>
</li>
<li>로짓변환<ul>
<li>오즈의 한계 극복 (오즈에 로그값)</li>
</ul>
</li>
<li>시그모이드 함수<ul>
<li>입력 신호를 받아서 출력신호로 연결</li>
</ul>
</li>
</ul>
<hr>
<h3 id="의사결정나무">의사결정나무</h3>
<p><strong>장점</strong></p>
<ul>
<li>모델이 직관적이고 해석에 용이함</li>
<li>데이터 정규화 및 단위 변환 필요 x</li>
<li>다른 기법에 비해 전처리 작업 어렵지 않음</li>
<li>이산형변수, 연속형변수에 모두 사용 O</li>
<li>데이터의 선형성, 정규성 등 가정 x</li>
<li><strong>이상값에 민감하지 x</strong></li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>독립변수들 사이의 중요도 판단 △</li>
<li>분류 경계선 근처의 자료에 대해 오차가 큼</li>
<li>과적합 발생 가능성 ↑</li>
</ul>
<hr>
<p>종속변수가 <strong>이산형</strong></p>
<ul>
<li>분류트리<ul>
<li>카이제곱 검정(CHAID)</li>
<li>지니지수(CART)<ul>
<li><em>지니지수 값이 0일 때 순수도는 최대, 불순도가 최소</em></li>
</ul>
</li>
<li>엔트로피지수(C4.5)<ul>
<li><em>불순도의 측도로 log 활용</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<p>종속변수가 <strong>연속형</strong></p>
<ul>
<li>회귀트리<ul>
<li>F 통계량(CHAID)</li>
<li>분산의 감소량(CART)</li>
</ul>
</li>
</ul>
<hr>
<h3 id="앙상블-분석">앙상블 분석</h3>
<ul>
<li><strong>배깅</strong><ul>
<li>여러 개의 붓스트랩을 집계(모집단의 크기와 <em>동일한 크기</em>를 갖는 표본집단으로) → 복원추출 진행</li>
<li>분류기(classifier): 각각의 모델<ul>
<li>분류기가 독립적임</li>
</ul>
</li>
<li>보팅(voting): 최종 결괏값을 선정</li>
<li>분산이 작고 좋은 예측력을 보여줌</li>
<li>모든 마디가 불순도가 제일 작아지는 최적의 분할 실시</li>
</ul>
</li>
<li><strong>부스팅</strong><ul>
<li>분류기가 독립적이지 않다</li>
<li>이전 분류기에 의해 잘못 분류된 데이터에 더 큰 가중치를 주어 붓스트랩 구성</li>
<li>약한 모델들을 결합 → 점차적으로 강한 분류기가 됨</li>
<li>훈련 오차를 빠르게 줄일 수 있고 성능이 뛰어남</li>
</ul>
</li>
<li><strong>랜덤 포레스트</strong><ul>
<li>서로 상관성이 없는 나무들로 이뤄진 숲</li>
<li>여러 개의 약한 트리들의 선형 결합</li>
<li>표본추출 과정이 한 번 더 반복되어 추출된 표본을 대상으로 최적의 분할 실시</li>
<li>분산을 감소시킴</li>
<li>모든 분류기들이 높은 비상관성 → 일반화의 성능  향상</li>
<li>이상값에 민감하지 x</li>
</ul>
</li>
<li>스태킹<ul>
<li>보팅 방식 x → 여러 분류기 간의 결과를 다시 훈련용 데이터로 사용</li>
<li>서로 다른 모델 → 높은 예측력</li>
<li>높은 복잡도, 오랜 학습 시간 필요, 결과의 해석 어려움</li>
</ul>
</li>
</ul>
<hr>
<h3 id="인공신경망">인공신경망</h3>
<ul>
<li>퍼셉트론<ul>
<li>인공신경망을 구성하는 가장 작은 단위</li>
<li>여러 개의 입력층 + 하나의 활성화 함수 + 하나의 출력값</li>
</ul>
</li>
</ul>
<p><strong>장점</strong></p>
<ul>
<li>비선형적인 문제 분석하는데 유용</li>
<li>스스로 가중치를 학습하기 때문에 다양하고 많은 데이터에 효과적</li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>초기 가중치에 따라 전역해가 아닌 지역해로 수렴할 수 o</li>
<li>추정한 가중치의 신뢰도 ↓</li>
<li>결과에 대한 해석 쉽지 않음</li>
<li>은닉층의 수와 은닉 노드의 수를 결정하기 어려움</li>
</ul>
<h3 id="인공신경망-활성함수">인공신경망 활성함수</h3>
<ul>
<li><strong>Step 함수</strong><ul>
<li>0 또는 1 반환</li>
<li>역전파 알고리즘에 활용할 수 x</li>
</ul>
</li>
<li><strong>Sigmoid 함수</strong><ul>
<li>0 과 1 사이의 값 반환</li>
<li>기울기 소실 문제 발생 o</li>
</ul>
</li>
<li><strong>Sign 함수</strong><ul>
<li>-1 또는 1 반환</li>
<li>역전파 알고리즘에 활용할 수 x</li>
</ul>
</li>
<li><strong>tanh 함수</strong><ul>
<li>중심값은 0이고, -1과 1 사이의 값 출력</li>
<li>기울기 소실 문제 발생 o</li>
</ul>
</li>
<li><strong>ReLu 함수</strong><ul>
<li>입력값과 0 반환</li>
<li>기울기 소실 문제 해결 가능</li>
</ul>
</li>
<li><strong>Softmax 함수</strong><ul>
<li>표준화지수 함수</li>
<li>출력값이 다범주인 경우에 사용</li>
<li>각 범주에 속할 확률값 반환</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분류-모형-성과평가">분류 모형 성과평가</h3>
<h3 id="오분류표"><strong>오분류표</strong></h3>
<p><img src="attachment:181c6dc4-7ccf-4f38-801f-0bfbc87c4a27:image.png" alt="image.png"></p>
<ul>
<li>민감도(Sensitivity) = $\frac{TP}{TP+FN}$</li>
<li>특이도(Specifity) = $\frac{TN}{FP+TN}$</li>
<li>오분류율(Error Rate) = $\frac{FN+FP}{TP+FN+FP+TN}$</li>
<li>정밀도(Precision) = $\frac{TP}{TP+FP}$</li>
<li>정분류율(Accuracy) = $\frac{TP+TN}{TP+FN+FP+TN}$</li>
<li>F1 score = $\frac{2<em>Precision</em>Recall}{Precision+Recall}$</li>
<li><em>F - beta Score 에서 베타값이 0과 1 사이일 때는 precision에 가중치를 두게 된다.</em></li>
</ul>
<h3 id="roc-커브"><strong>ROC 커브</strong></h3>
<ul>
<li>x축: FPR(1-특이도)</li>
<li>y축: TPR(민감도)</li>
<li>이진분류 모형의 성능을 평가하기 위해 사용</li>
<li><strong>1에 가까울수록</strong> 모형의 성능이 우수</li>
</ul>
<h3 id="이익도표"><strong>이익도표</strong></h3>
<ul>
<li>모델의 성능을 판단하기 위해 작성</li>
<li>목표범주에 속할 확률을 내림차순으로 정렬하여 몇 개의 구간으로 나누어 각 구간에서의 성능을 판단하고 랜덤 모델보다 얼마나 더 뛰어난 성능을 보이는지 판단</li>
</ul>
<h3 id="향상도-곡선"><strong>향상도 곡선</strong></h3>
<ul>
<li>랜덤 보델과 비교하여 해당 모델의 성과가 얼마나 향상되었는지 구간별로 파악</li>
<li>좋은 모델일수록 큰 값에서 시작하여 급격히 감소</li>
<li>오분류표, ROC 커브, 이익도표 , 향상도 곡선</li>
</ul>
<hr>
<h1 id="군집분석">군집분석</h1>
<ul>
<li>(비지도학습) 데이터들 사이의 유사성을 측정하여 유사성이 높은 객체끼리 하나의 그룹으로 묶기 위한 분석기법</li>
</ul>
<h3 id="거리-측도">거리 측도</h3>
<p><strong>변수가 범주형</strong></p>
<ul>
<li>단순 일치 계수</li>
<li>자카드 지수</li>
<li>자카드 거리</li>
<li>코사인 유사도<ul>
<li>두 벡터 간의 유사도 측정하기 위해 벡터 간 이루는 각도를 활용</li>
</ul>
</li>
<li>코사인 거리</li>
<li>순위 상관계수</li>
</ul>
<p><strong>변수가 연속형</strong></p>
<ul>
<li>유클리디안 거리</li>
<li>맨하튼 거리<ul>
<li>변수들의 차이를 단순합으로</li>
</ul>
</li>
<li>체비셰프 거리<ul>
<li>변수 간의 거리 차이 중 최댓값</li>
</ul>
</li>
<li>표준화 거리</li>
<li>마할라노비스 거리<ul>
<li><em>변수의 표준화</em></li>
<li><em>변수의 상관성 고려</em></li>
</ul>
</li>
<li>민코프스키 거리</li>
</ul>
<hr>
<h3 id="군집-간-거리-측정-방법">군집 간 거리 측정 방법</h3>
<ul>
<li>단일연결법<ul>
<li>최단연결법</li>
<li>기존 데이터들의 거리를 가장 가까운 거리로 계산</li>
</ul>
</li>
<li>완전연결법<ul>
<li>최장연결법</li>
<li>기존 데이터들의 거리를 가장 먼 데이터로 계산</li>
</ul>
</li>
<li>평균연결법<ul>
<li>평균 데이터로 계산 → 계산량이 불필요하게 많아질 수 있음</li>
<li>이상치에 덜 민감</li>
</ul>
</li>
<li>중심연결법<ul>
<li>각 군집의 중심점 사이의 거리를 거리로 정의</li>
<li>딱 한 번만 계산</li>
</ul>
</li>
<li>와드연결법<ul>
<li>오차가 최소가 되는 데이터로 계산</li>
<li>비슷한 크기의 군집끼리 병합</li>
</ul>
</li>
</ul>
<hr>
<h3 id="비계층적-군집분석">비계층적 군집분석</h3>
<ul>
<li><p>구하고자 하는 군집의 수를 사전에 정의 → 정해진 군집의 수만큼 형성</p>
<ul>
<li><p>k-means 군집</p>
<ul>
<li><p>집단 내 동질성, 집단 간 이질성이 모두 높게 전체 데이터를 k의 군집으로 분할</p>
</li>
<li><p>군집의 수 k 초깃값 설정</p>
</li>
<li><p>k개의 군집 각각을 설명할 변수의 값을 임의로 설정 or 데이터 중에서 k 선택</p>
</li>
<li><p>seed : 임의로 설정된 k 개의 데이터</p>
</li>
<li><p><em>장점*</em></p>
</li>
<li><p>분석 기법의 적용이 비교적 단순하고 빠름</p>
</li>
<li><p>다양한 데이터에서 사용</p>
</li>
<li><p><em>단점*</em></p>
</li>
<li><p>초깃값 k개의 설정이 어려움</p>
</li>
<li><p>결과 해석에 어려움이 있음</p>
</li>
<li><p>데이터의 변수가 연속형 변수</p>
</li>
<li><p>최적의 보장은 없음</p>
</li>
<li><p>이상값에 민감하게 반응</p>
</li>
</ul>
</li>
<li><p>DBSCAN</p>
<ul>
<li>개체들이 밀집한 정도에 기초해 군집 형성</li>
<li><em>밀도기반 군집분석 알고리즘</em></li>
<li>데이터의 분포가 기하학적이고 노이즈가 포함된 데이터셋에 대해서도 효과적으로 군집 형성 가능</li>
<li>초기 군집의 수 설정 x</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="혼합분포-군집">혼합분포 군집</h3>
<ul>
<li>여러 개의 확률분포로부터 추출되었다는 가정</li>
<li>같은 확률분포에서 추출된 데이터들끼리 군집화</li>
<li><code>normalmixEM</code></li>
</ul>
<h3 id="em-알고리즘-expectation-maximization">EM 알고리즘 (Expectation Maximization)</h3>
<ul>
<li>최대가능도를 갖는 모수와 함께 그 확률모델의 가중치 추정</li>
</ul>
<hr>
<h3 id="자기조직화지도som">자기조직화지도(SOM)</h3>
<ul>
<li><strong>축소</strong>와 <strong>군집화</strong> 목적</li>
<li>저차원의 지도 생성 → 가시화</li>
<li>은닉층 없음</li>
<li>입력층의 모든 데이터는 경쟁층의 모든 노드와 완전 연결</li>
<li><strong>순전파</strong> 방식만 사용 → 속도가 빠름</li>
</ul>
<h1 id="연관분석">연관분석</h1>
<ul>
<li>(비지도학습) 데이터의 연관성을 파악하는 분석방법</li>
<li>IF ~ THEN</li>
</ul>
<h3 id="연관분석의-측도">연관분석의 측도</h3>
<ul>
<li>지지도<ul>
<li>$P(A\cap B) = \frac{A와 B가 동시에 포함된 거래수}{전체 거래수}$</li>
</ul>
</li>
<li>신뢰도<ul>
<li>신뢰도 A → B : $P(B|A) = \frac{P(A\cap B)}{P(A)}$</li>
<li>신뢰도 B → A : $P(A|B) = \frac{P(A\cap B)}{P(B)}$</li>
</ul>
</li>
<li>향상도<ul>
<li>향상도 A→B = B→A = $\frac{P(A\cap B)}{P(A))P(B}$</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ADsP 2과목 요약정리]]></title>
            <link>https://velog.io/@ohmynoon__/ADsP-2%EA%B3%BC%EB%AA%A9-h1iavh04</link>
            <guid>https://velog.io/@ohmynoon__/ADsP-2%EA%B3%BC%EB%AA%A9-h1iavh04</guid>
            <pubDate>Sat, 17 May 2025 12:38:44 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터-분석-기획">데이터 분석 기획</h3>
<h3 id="분석-기획">분석 기획</h3>
<ul>
<li><strong>분석 대상과 그 방법에 따른 4가지 분석 주제</strong><ul>
<li>최적화<ul>
<li>분석대상 o /  분석방법 o</li>
</ul>
</li>
<li>솔루션 <em>(나 누구한테 할지는 아는데 방법을 모르겠어.. 솔루션이 필요해!)</em><ul>
<li>분석대상o / 분석방법 x</li>
</ul>
</li>
<li>통찰력 <em>(어떻게 할지는 아니까.. 대상을 인사이트로 잘 정해보자???)</em><ul>
<li>분석대상x / 분석방법 o</li>
</ul>
</li>
<li>발견 <em>(무에서 유를 .. 발견하기)</em><ul>
<li>분석대상 x / 분석방법 x</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분석-기획-시-고려사항">분석 기획 시 고려사항</h3>
<ul>
<li>가용 데이터 고려</li>
<li>적절한 활용 방안과 유스케이스 탐색</li>
<li>장애요소에 대한 사전 계획 수립</li>
</ul>
<hr>
<h3 id="분석-방법론">분석 방법론</h3>
<ul>
<li>방법론 구성 요소<ul>
<li><strong>상세한 절차</strong></li>
<li><strong>방법</strong></li>
<li><strong>도구와 기법</strong></li>
<li><strong>탬플릿과 산출물</strong><ul>
<li>WBS (업무 분업 구조)</li>
<li>ERD (개체 - 관계 다이어그램)</li>
</ul>
</li>
<li><em>분석 모델 (X)</em></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>분석 방법론이 적용되는 모델<ul>
<li>폭포수 모델<ul>
<li>순차적으로 진행</li>
<li><em>이전 단계가 완료되어야 다음 단계로 진행</em></li>
<li>문제나 개선사항이 발견될 경우 이전 단계 돌아가기 가능</li>
</ul>
</li>
<li>프로토타입 모델<ul>
<li>사용자 중심의 개발 방법 (고객의 요구를 완전히 이해하지 못할 때 사용)</li>
<li>일부분 먼저 개발 → 점진적으로 개선</li>
</ul>
</li>
<li>나선형 모델<ul>
<li>점진적으로 개발</li>
<li>위험요소를 사전에 제거</li>
<li>관리 체계를 효과적으로 갖추지 못하면 복잡도 상승</li>
</ul>
</li>
<li>계층적 프로세스 모델<ul>
<li>하나의 단계는 여러 개의 태스크로 구성</li>
<li>하나의 태스크는 여러 개의 스탭(입력 → 처리 및 도구 → 출력) 으로 구성</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분석-방법론-두-가지">분석 방법론 두 가지</h3>
<ul>
<li><strong>KDD 분석 방법론</strong><ul>
<li>데이터셋 선택</li>
<li>데이터 전처리</li>
<li>데이터 변환</li>
<li>데이터 마이닝</li>
<li>해석과 평가</li>
</ul>
</li>
<li><strong>CRISP - DM 분석 방법론</strong><ul>
<li>업무 이해</li>
<li>데이터 이해</li>
<li>데이터 준비</li>
<li>모델링</li>
<li>평가</li>
<li>전개</li>
</ul>
</li>
</ul>
<hr>
<h3 id="빅데이터-분석-방법론">빅데이터 분석 방법론</h3>
<ul>
<li><strong>분석 기획 <em>(순서!!!!!)</em></strong></li>
</ul>
<p><strong><em>→ 이해하고 얼마나 할지 설정 - 정의하고 계획 수립(구체적이지?) - 뭐가 위험한지까지 마지막~!</em></strong> </p>
<ul>
<li>비즈니스 이해 및 범위 설정<ul>
<li><em>프로젝트 범위 정의서</em></li>
</ul>
</li>
<li>프로젝트 정의 및 계획 수립</li>
<li>프로젝트 위험 계획 수립</li>
<li><strong>데이터 준비</strong><ul>
<li>필요 데이터 정의</li>
<li>데이터 스토어 설계</li>
<li>데이터 수집 및 정합성 검정</li>
</ul>
</li>
<li><strong>데이터 분석</strong><ul>
<li>분석용 데이터 준비</li>
<li>텍스트 분석</li>
<li>탐색적 분석</li>
<li>모델링</li>
<li>모델 평가 및 검증</li>
</ul>
</li>
<li><strong>시스템 구현</strong><ul>
<li>설계 및 구현</li>
<li>시스템 테스트 및 운영</li>
</ul>
</li>
<li><strong>평가 및 전개</strong><ul>
<li>모델 발전 계획</li>
<li>프로젝트 평가 및 보고</li>
</ul>
</li>
</ul>
<hr>
<h3 id="위험-대응-계획-수립">위험 대응 계획 수립</h3>
<ul>
<li><strong>회</strong>피<ul>
<li>위험 자체를 피하는 방법</li>
</ul>
</li>
<li><strong>전</strong>이<ul>
<li>위험을 다른 주체에게 이전하는 방법</li>
</ul>
</li>
<li><strong>수</strong>용<ul>
<li>위험을 받아들이고 대비하는 방법</li>
</ul>
</li>
<li><strong>완</strong>화<ul>
<li>위험의 영향을 줄이는 방법</li>
</ul>
</li>
</ul>
<p>→ <strong>회전</strong>하는 <strong>수완</strong>(백조…)</p>
<h3 id="분석-과제-발굴">분석 과제 발굴</h3>
<h3 id="하향식-접근법">하향식 접근법</h3>
<p>→ 분석 대상을 알고 있을 때 사용</p>
<ul>
<li><em>유스케이스 활용</em></li>
<li><em>탐색 가능한 모든 문제 도출</em></li>
<li><em>시장 니즈 파악 중요</em></li>
</ul>
<hr>
<ul>
<li>비즈니스 모델 캔버스 9가지 → 5가지<ul>
<li>업무</li>
<li>제품</li>
<li>고객</li>
<li>규제와 감사</li>
<li>지원 인프라(IT, HR)</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>문제 <strong>탐색</strong> 단계<ul>
<li>비즈니스 모델 탐색 기법</li>
<li>분석기회 발굴 및 범위 확장</li>
<li>외부 참조 모델 기반 문제 탐색</li>
<li>분석 유스케이스</li>
</ul>
</li>
<li>문제 <strong>정의</strong> 단계<ul>
<li>식별된 비즈니스 문제를 데이터 문제로 변환하여 과제를 정의</li>
<li>최종 사용자 관점에서 이뤄줘야 함</li>
</ul>
</li>
<li><strong>해결 방안</strong> 탐색 단계<ul>
<li>과제 정의 후 어떻게 해결할 것인지 그 방안 탐색(분석 기법, 시스템)</li>
</ul>
</li>
<li><strong>타당성 검토</strong> 단계<ul>
<li>경제적 타당성, 기술적 타당성</li>
</ul>
</li>
</ul>
<hr>
<h3 id="상향식-접근법">상향식 접근법</h3>
<p>→ 분석 대상을 모를 때  때 사용</p>
<ul>
<li>지도, 비지도 학습</li>
<li>프로토타입<ul>
<li>시행착오 해결법</li>
</ul>
</li>
</ul>
<h3 id="분석-프로젝트">분석 프로젝트</h3>
<h3 id="분석-과제를-관리할-때-고려해야-할-5가지-속성">분석 과제를 관리할 때 고려해야 할 5가지 속성</h3>
<ul>
<li>데이터의 <strong>양 (=규모)</strong><ul>
<li>데이터 양이 많을 경우, 데이터 관리를 위한 다양한 기술적, 환경적 요소가 뒷받침되어야 하니까 프로젝트 비용과 직결됨</li>
</ul>
</li>
<li>데이터 <strong>복잡도</strong><ul>
<li>분석의 대상이 되는 데이터 유형도 프로젝트 비용에 직결됨</li>
</ul>
</li>
<li>분석의 <strong>속도</strong><ul>
<li>결과를 얼마나 신속하게 도출할 수 있는지 알아야 프로젝트 일정 및 분석 모델의 실용성과 연결 → 프로젝트 성공 여부에 직결됨</li>
</ul>
</li>
<li>분석 <strong>복잡도</strong><ul>
<li>필요한 리소스, 시간, 전문성 수준 등을 결정하는데 영향을 줌 → 프로젝트 성공 여부에 직결됨</li>
</ul>
</li>
<li><strong>정확도</strong>&amp;<strong>정밀도</strong><ul>
<li>분석 결과의 품질과 신뢰성을 결정하는 중요한 요소 → 프로젝트 성공 여부에 직결</li>
</ul>
</li>
</ul>
<hr>
<h3 id="분석-프로젝트-관리-영역-10가지">분석 프로젝트 관리 영역 10가지</h3>
<ul>
<li>통합</li>
<li>이해관계자</li>
<li>범위</li>
<li>자원</li>
<li>시간</li>
<li>원가</li>
<li>리스크</li>
<li>품질</li>
<li>조달<ul>
<li><em>하나의 프로젝트 목적에 맞게 적절한 아웃소싱</em></li>
</ul>
</li>
<li>의사소통</li>
</ul>
<hr>
<h3 id="분석-준비도의-평가-요소">분석 준비도의 평가 요소</h3>
<ul>
<li>분석 문화</li>
<li>분석 데이터</li>
<li>IT 인프라</li>
<li>분석 기법</li>
<li>분석 업무</li>
<li>분석 인력 및 조직</li>
</ul>
<h3 id="분석-거버넌스">분석 거버넌스</h3>
<h3 id="분석-거버넌스-체계-구성-요소">분석 거버넌스 체계 구성 요소</h3>
<ul>
<li>조직(Organization)</li>
<li>과제 기획 및 운영 프로세스(Process)</li>
<li>분석 관련 시스템(System)</li>
<li>데이터(Data)</li>
<li>분석 관련 교육 및 마인드 육성 체계(HR)</li>
</ul>
<hr>
<h3 id="데이터-거버넌스의-구성요소">데이터 거버넌스의 구성요소</h3>
<ul>
<li><em>원칙, 조직, 프로세스</em></li>
</ul>
<h3 id="마스터플랜">마스터플랜</h3>
<h3 id="분석-마스터플랜-수립-프레임워크">분석 마스터플랜 수립 프레임워크</h3>
<ul>
<li><strong>우선순위 고려요소</strong><ul>
<li><em>전략적 중요도</em></li>
<li><em>비즈니스 성과 / ROI</em></li>
<li><em>실행 용이성</em></li>
</ul>
</li>
<li>적용 범위  / 방식 고려 요소<ul>
<li>업무 내재화 적용 수준</li>
<li>분석 데이터 적용 수준 (내부 데이터로 한정? 외부 데이터까지 포함?)</li>
<li>기술 적용 수준</li>
</ul>
</li>
</ul>
<hr>
<h3 id="빅데이터의-특징을-고려한-분석-roi-요소">빅데이터의 특징을 고려한 분석 ROI 요소</h3>
<ul>
<li>투자비용 요소<ul>
<li>크기(Volume)</li>
<li>다양성(Variety)</li>
<li>속도(Velocity)</li>
</ul>
</li>
<li>비즈니스 효과 요소<ul>
<li>가치(Value)</li>
</ul>
</li>
</ul>
<h3 id="조직구조">조직구조</h3>
<ul>
<li>고객 중심 조직구조</li>
<li>기능 중심 조직구조<ul>
<li>분석 조직 없이 각 업무 부서에서 <em>직접</em> 분석 수행</li>
<li>업무 중복과 업무 이원화 문제 발생</li>
</ul>
</li>
<li>집중형 조직구조<ul>
<li>독립적인 분석 전담 조직이 모든 분석 수행</li>
</ul>
</li>
<li>분산형 조직구조<ul>
<li><em>전사 내에 별도의 분석조직을 보유</em></li>
<li><em>분석조직의 인력을 협업 부서로 배치하여 분석 업무 수행</em></li>
<li><em>전사적 관점에서 분석과제의 우선순위 선정이 가능</em></li>
</ul>
</li>
</ul>
<h3 id="분석-성숙도-모델">분석 성숙도 모델</h3>
<ul>
<li>도입단계<ul>
<li>기본적인 실적 분석 및 통계 수행</li>
<li>일부 부서에서만 분석 수행</li>
<li>IT 부문에서는 데이터 웨어하우스, 데이터 마트 등 기본적인 인프라 구축</li>
</ul>
</li>
<li>활용단계<ul>
<li>미래 결과 예측, 시뮬레이션 수행</li>
<li>전문 담당 부서에서 분석 수행</li>
<li>IT 부문에서 실시간 대시보드, 통계분석 환경 등 구축</li>
</ul>
</li>
<li>확산 단계<ul>
<li>전사 차원에서 분석 관리 및 공유</li>
<li>전사 모든 부서에서 분석 수행</li>
<li>분석 COE(Center Of Excellence) 운영</li>
<li>IT 부문에서 <em>빅데이터 관리 환경, 시뮬레이션, 최적화, 비주얼 분석, 분석 전용 서버 등 구축</em></li>
</ul>
</li>
<li>최적화 단계<ul>
<li>실시간 분석, 외부 환경 분석 활용</li>
<li>비즈니스 모델 진화에 분석 활용</li>
<li>IT 부문에서 분석 협업 환경, 빅데이터 분석 등 고도화된 환경 구축</li>
<li><em>분석을 진화시키고 혁신 및 성과 향상에 기여</em></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ADsP 1과목 요약정리]]></title>
            <link>https://velog.io/@ohmynoon__/ADsP-1%EA%B3%BC%EB%AA%A9-%EC%9A%94%EC%95%BD%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@ohmynoon__/ADsP-1%EA%B3%BC%EB%AA%A9-%EC%9A%94%EC%95%BD%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sat, 17 May 2025 12:37:45 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터">데이터</h3>
<ul>
<li>데이터의 특성<ul>
<li>존재적 특성: 데이터는 있는 그대로의 객관적 사실</li>
<li>당위적 특성: 데이터는 추론, 예측, 전망, 추정을 위한 근거</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><p>데이터의 유형</p>
<ul>
<li>정량적 데이터: 언어, 문자 등</li>
<li>정성적 데이터: 수치, 도형, 기호 등</li>
</ul>
<hr>
<ul>
<li>정형 데이터: 정형화된 틀이 있고 연산이 가능한 데이터 (ex. CSV, 엑셀)</li>
<li>비정형 데이터: 정형화된 틀이 없고 연산이 불가능(ex. 소셜 데이터, 댓글, 영상, 음성)</li>
<li>반정형 데이터: 형태는 있지만 연산은 불가능 (ex. XML, JSON)</li>
</ul>
<hr>
<ul>
<li>암묵지: 개인에게는 습득되어 있지만, 겉으로는 드러나지 않는 상태의 지식<ul>
<li>내면화</li>
<li>공통화</li>
</ul>
</li>
<li>형식지: 외부로 표출되어 여러 사람이 공유할 수 있는 지식<ul>
<li>표출화</li>
<li>연결화</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>DIKW 피라미드<ul>
<li>데이터 : 의미가 중요하지 않은 객관적인 사실<ul>
<li>A는 100원, B는 200원에 연필을 판매한다.</li>
</ul>
</li>
<li>정보 : 데이터의 가공, 처리를 통해 데이터 간의 관계에서 도출된 의미<ul>
<li>A 연필이 더 저렴하다.</li>
</ul>
</li>
<li>지식 : 정보에 개인적인 경험을 결합해 고유의 지식으로 내재화한 것<ul>
<li>더 저렴한 A로부터 연필을 사야겠다.</li>
</ul>
</li>
<li>지혜 : 지식의 축적과 아이디어가 결합된 창의적 산물<ul>
<li><em>데이터를 가공 및 처리하여 얻을 수 있는 것으로 사람에게 가장 깊숙이 내재되어 있음</em></li>
<li>A의 다른 물건도 저렴할 것이다. <em>(아하!)</em></li>
</ul>
</li>
<li><em>인사이트(X)</em> , <em>도형(X)</em></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>데이터베이스의 일반적인 특징<ul>
<li>통합된 데이터 : 동일한 내용의 데이터 중복 x</li>
<li>저장된 데이터 : 컴퓨터 매체가 접근할 수 있는 저장 매체에 저장</li>
<li>공용 데이터 : 여러 사용자가 공유</li>
<li>변화하는 데이터: 삽입, 수정, 삭제를 통해 항상 최신의 정확한 데이터 유지</li>
</ul>
</li>
</ul>
<hr>
<h3 id="용어">용어</h3>
<ul>
<li>인하우스 DB → ERP (전사자원관리시스템)으로 확대</li>
<li>ERP(Enterprise Resource Planning)<ul>
<li>여러 자원 및 업무가 하나로 통합된 시스템으로 재구축</li>
</ul>
</li>
<li>OLTP(Online Transaction Processing)<ul>
<li>거래 단위에 초점</li>
<li>ex. 주문 입력</li>
</ul>
</li>
<li>OLAP(Online Analytical Processing)<ul>
<li>적재된 데이터에 초점</li>
<li><em>다차원의 데이터를 대화식으로 분석하기 위한 소프트웨어</em></li>
<li>ex. 데이터의 분석</li>
</ul>
</li>
<li>CRM(Customer Relationship)<ul>
<li>기업 내 외부적인 분석을 통해 마케팅 측면에서 신규 고객 창출 또는 기존 고객의 이탈을 방지하는 목적</li>
</ul>
</li>
<li>SCM(Supply Chain Management)<ul>
<li>원자재에서부터 기업을 거쳐 고객에게 도달할 때까지 유통 단계를 최적화하여 고객에게 제공하는 것이 목적</li>
</ul>
</li>
<li>EAI(Enterprise Application Integration)<ul>
<li>기업들 간의 서비스 연계</li>
</ul>
</li>
<li>BI(Business Intelligence)<ul>
<li>데이터를 수집, 정리, 분석하여 효율적인 의사결정을 지원하는 리포트 중심의 기술</li>
<li><em>여러 데이터베이스의 활용 방법 중 데이터를 통합, 분석하여 기업 활동에 연관된 의사결정을 돕는 프로세스</em></li>
</ul>
</li>
<li>BA(Business Analytics)<ul>
<li>데이터와 통계를 기반으로 성과에 대한 이해와 비즈니스 통찰력에 초점을 둔 분석 방법</li>
<li><em>경영 의사결정을 위한 통계적이고 수학적인 분석에 초점을 둔 기법</em></li>
</ul>
</li>
</ul>
<hr>
<h3 id="데이터베이스">데이터베이스</h3>
<ul>
<li>RDB(관계형 데이터베이스)<ul>
<li>데이터를 행과 열로 이뤄진 테이블에 저장</li>
<li>정형 데이터를 다루는데 특화</li>
</ul>
</li>
<li>NoSQL (Not only SQL / Non-Relational)<ul>
<li>비관계형</li>
<li>기존의 RDB의 SQL을 보완 및 개선</li>
<li>비정형 데이터, 대용량 데이터 분석 및 분산처리에 용이</li>
</ul>
</li>
</ul>
<h3 id="빅데이터">빅데이터</h3>
<h3 id="빅데이터의-출현-배경">빅데이터의 출현 배경</h3>
<ul>
<li>기업의 방대한 양의 고객 데이터 축적</li>
<li>스마트폰 및 인터넷 보급을 통한 기하급수적인 데이터 양의 증가</li>
<li>기술의 발전을 통한 저장 및 분석 비용의 감소</li>
<li><em>데이터의 정형화를 통한 관리의 용이성(X)</em></li>
</ul>
<hr>
<ul>
<li>클라우딩 컴퓨팅 → 빅데이터의 처리 비용 ↓</li>
</ul>
<hr>
<h3 id="더그래니의-3v">더그래니의 3V</h3>
<ul>
<li>Volume : 데이터의 양</li>
<li>Variety : 데이터의 다양성, 유형</li>
<li>Velocity : 데이터 수집과 처리 측면에서의 속도</li>
</ul>
<hr>
<h3 id="4v">4V</h3>
<ul>
<li>Value (가치) → 투자비용 요소에 해당 x</li>
<li>Veracity (정확성)</li>
</ul>
<hr>
<h3 id="빅데이터의-기능">빅데이터의 기능</h3>
<ul>
<li>산업혁명의 석탄, 철<ul>
<li>혁명적인 변화를 가져올 것</li>
</ul>
</li>
<li>21세기 원유<ul>
<li>새로운 범주의 산업을 만들어 낼 것</li>
</ul>
</li>
<li>렌즈<ul>
<li>큰 영향을 줄 것</li>
</ul>
</li>
<li>플랫폼<ul>
<li>공동 활용을 목적으로 구축</li>
<li><em>수집된 데이터를 가공, 처리, 저장해 두고 이 데이터에 접근할 수 있음</em></li>
</ul>
</li>
</ul>
<hr>
<h3 id="빅데이터가-만들어내는-변화">빅데이터가 만들어내는 변화</h3>
<ul>
<li>사전 처리 → 사후 처리</li>
<li>전수조사<ul>
<li><em>표본조사 (X)</em></li>
</ul>
</li>
<li>질 → 양</li>
<li>인과관계 → 상관관계</li>
</ul>
<hr>
<h3 id="빅데이터-활용-기본-테크닉">빅데이터 활용 기본 테크닉</h3>
<ul>
<li>연관 규칙 학습<ul>
<li>주목할 만한 상관 관계가 있는지 찾아냄</li>
</ul>
</li>
<li>유형 분석<ul>
<li>새로운 사건이 속할 범주를 찾아내는 방법</li>
</ul>
</li>
<li>유전 알고리즘<ul>
<li>최적화가 필요한 문제의 해결책을 점진적으로 진화</li>
</ul>
</li>
<li>기계학습 = 머신러닝<ul>
<li>데이터로부터 규칙을 찾고 이를 활용해 예측</li>
</ul>
</li>
<li>회귀분석<ul>
<li>독립변수를 조작하면서 종속변수가 어떻게 변하는지를 보며 수치형으로 이뤄진 두 변인의 관계를 파악</li>
</ul>
</li>
<li>감정분석<ul>
<li>특정 주제에 대해 말하거나 글을 쓴 사람의 감정을 분석하는 방법</li>
</ul>
</li>
<li>소셜 네트워크 분석<ul>
<li>SNS 같은 온라인 공간에서 관계를 분석</li>
</ul>
</li>
</ul>
<hr>
<h3 id="빅데이터의-위기요인과-통제-방안">빅데이터의 위기요인과 통제 방안</h3>
<p><strong>위기 요인</strong></p>
<ul>
<li>사생활 침해</li>
<li>책임 원칙 훼손</li>
<li>데이터 오용</li>
</ul>
<p><strong>통제 방안</strong></p>
<ul>
<li>동의에서 책임으로</li>
<li>결과 기반 책임 원칙 고수</li>
<li>알고리즘 접근 허용</li>
</ul>
<hr>
<h3 id="용어-1">용어</h3>
<ul>
<li>스태밍(Stemming)<ul>
<li>단어의 어원을 찾는 작업</li>
</ul>
</li>
<li>코퍼스(Corpus)<ul>
<li>텍스트 분석을 위해 모아놓은 단어 또는 문장을 보유한 저장소</li>
<li>특정 단어가 어떤 단어들과 주로 어울리는지 사용</li>
</ul>
</li>
<li>토큰화(Tokenization)<ul>
<li>문장 또는 코퍼스를 여러 개의 뜻을 가진 가장 작은 단위의 단어들로 나누는 작업</li>
</ul>
</li>
<li>임베딩(Embedding)<ul>
<li>토큰화가 수행된 단어 집합에 대해서 벡터로 변환</li>
</ul>
</li>
</ul>
<hr>
<h3 id="가치-패러다임의-변화">가치 패러다임의 변화</h3>
<ul>
<li>디지털화<ul>
<li>아날로그 세상을 어떻게 효과적으로 디지털화하는가</li>
</ul>
</li>
<li>연결(Connection)<ul>
<li>디지털화된 정보와 대상들이 서로 연결되어 이 연결이 얼마나 효과적이고 효율적으로 제공하느냐</li>
</ul>
</li>
<li>에이전시<ul>
<li>사물인터넷의 성숙과 함꼐 연결이 증가하고 복잡해짐</li>
<li>복잡한 연결을 얼마나 효과적이고 신뢰감 있게 관리하는가</li>
<li>데이터 사이언스의 역량에 따라 좌우됨</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[딕셔너리]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</link>
            <guid>https://velog.io/@ohmynoon__/%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</guid>
            <pubDate>Wed, 14 May 2025 08:57:04 GMT</pubDate>
            <description><![CDATA[<ul>
<li>사전에서 단어를 찾듯이 값을 가져올 수 있음</li>
</ul>
<h2 id="딕셔너리-만들기">딕셔너리 만들기</h2>
<h3 id="형태">형태</h3>
<ul>
<li><code>변수명 = { key1 : value1, key2 : value2 }</code></li>
</ul>
<h3 id="키의-중복">키의 중복</h3>
<ul>
<li>키가 중복되면 가장 뒤에 있는 값만 사용</li>
</ul>
<pre><code class="language-python">lux = {&#39;health&#39; : 490, &#39;health&#39; : 800}
&gt;&gt;lux[&#39;health&#39;]
800</code></pre>
<ul>
<li>중복되는 키는 출력되지 않음</li>
</ul>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;health&#39;: 800, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
lux

#{&#39;health&#39;: 800, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<h3 id="딕셔너리-키의-자료형">딕셔너리 키의 자료형</h3>
<ul>
<li>모든 자료형 사용 가능하고, 섞어서 사용도 가능</li>
<li>단, 키에는 리스트와 딕셔너리 사용은 불가능</li>
</ul>
<pre><code class="language-python">x = {[10, 20]: 100}

#TypeError: unhashable type: &#39;list&#39;</code></pre>
<h3 id="빈-딕셔너리-만들기">빈 딕셔너리 만들기</h3>
<ul>
<li><code>딕셔너리 = { }</code></li>
<li><code>딕셔너리 = dict()</code></li>
</ul>
<h3 id="dict로-딕셔너리-만들기">dict로 딕셔너리 만들기</h3>
<ul>
<li><code>딕셔너리 = dict(키1 = 값1, 키2 = 값2)</code>  : 키 - 값 형식으로 딕셔너리 만듦</li>
</ul>
<pre><code class="language-python">lux1 = dict(health=490, mana=334, melee=550, armor=18.72) 
lux1

# {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<ul>
<li><code>딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))</code> : zip 함수로 키와 값 리스트를 묶음</li>
</ul>
<pre><code class="language-python">lux2 = dict(zip([&#39;health&#39;, &#39;mana&#39;, &#39;melee&#39;, &#39;armor&#39;], [490, 332, 550, 18.72]))
lux2

# {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<ul>
<li><code>딕셔너리 = dict([(키1, 값1), (키2, 값2)])</code> : (키, 값) 형식의 튜플로 딕셔너리를 만듦</li>
</ul>
<pre><code class="language-python">lux3 = dict([(&#39;health&#39;, 490), (&#39;mana&#39;, 332), (&#39;melee&#39;, 550), (&#39;armor&#39;, 18.72)])
lux3 

# {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<ul>
<li><code>딕셔너리 = dict({키1:값1, 키2:값2})</code></li>
</ul>
<pre><code class="language-python">lux4 = dict({&#39;health&#39;: 490, &#39;mana&#39;: 332, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72})
lux4

# {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<h2 id="딕셔너리의-키에-접근하고-값-할당하기">딕셔너리의 키에 접근하고 값 할당하기</h2>
<h3 id="딕셔너리-키에-접근">딕셔너리 키에 접근</h3>
<ul>
<li><code>딕셔너리 [키]</code></li>
</ul>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
lux[&#39;health&#39;]

# 490</code></pre>
<ul>
<li>딕셔너리에 키를 지정하지 않은 상태 = 해당 딕셔너리 전체</li>
</ul>
<pre><code class="language-python">lux

#{&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
<h3 id="딕셔너리-키에-값-할당">딕셔너리 키에 값 할당</h3>
<ul>
<li><p><code>딕셔너리[키] = 값</code></p>
<ul>
<li><p>기존에 있던 값을 변경</p>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
lux[&#39;health&#39;] = 300
lux

#{&#39;health&#39;: 300, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}</code></pre>
</li>
<li><p>딕셔너리에 없는 키에 값을 할당하는 경우 - 해당 키가 추가된 후에 값이 할당</p>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
lux[&#39;mana_regen&#39;] = 3.28
lux

# {&#39;health&#39;: 300, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72, &#39;mana_regen&#39; : 3.28}</code></pre>
</li>
</ul>
</li>
</ul>
<ul>
<li>만약 없는 키에서 값을 가져오려고 할 때에는 Error 발생</li>
</ul>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
lux[&#39;attack_speed&#39;] 

# KeyError: &#39;attack_speed&#39;</code></pre>
<h3 id="딕셔너리에-키의-유무-파악">딕셔너리에 키의 유무 파악</h3>
<ul>
<li>결과값은 boolean (True / False)</li>
<li><code>키 in 딕셔너리</code></li>
</ul>
<pre><code class="language-python">lux = {&#39;health&#39;: 490, &#39;mana&#39;: 334, &#39;melee&#39;: 550, &#39;armor&#39;: 18.72}
&#39;health&#39; in lux
# True

&#39;attack_speed&#39; in lux
#False</code></pre>
<ul>
<li><code>키 not in 딕셔너리</code></li>
</ul>
<pre><code class="language-python">&#39;attack_speed&#39; not in lux
# True

&#39;health&#39; not in lux
# False</code></pre>
<hr>
<p><a href="https://dojang.io/course/view.php?id=7">코딩도장</a> 에서 학습하면서 기록하고 있습니다😉</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[콜라츠 수열 만들기]]></title>
            <link>https://velog.io/@ohmynoon__/%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%88%98%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@ohmynoon__/%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%88%98%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 05 Aug 2024 16:08:35 GMT</pubDate>
            <description><![CDATA[<p>오늘은 .. 그래도 좀 신박한 걸 시도해보았는데~! </p>
<p>** 문제 설명**</p>
<blockquote>
<p>모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.</p>
</blockquote>
<pre><code>def solution(n):
    answer = []
    while n != 1:
        answer.append(n)
        if n %2 == 0:
            n = n //2
        else:
            n = 3*n+1
    answer.append(1)

    return answer</code></pre><p>1) 우선 n이 1이 아니라면, answer에 n을 붙인다. </p>
<pre><code>while n != 1:
        answer.append(n)</code></pre><p>2) 그리고 n 이 짝수이면 2로 나눈다.</p>
<pre><code>if n %2 == 0:
            n = n //2</code></pre><p>3) n이 홀수이면 <code>3*n+1</code>을 한다. 이때 짝수와 홀수인 경우 밖에 없기 때문에, <code>else</code> 를 사용하였다. </p>
<pre><code>else:
            n = 3*n+1</code></pre><p>4) 마지막에는 x가 1이 되어야 하기 때문에, 1을 붙여준다.</p>
<pre><code>answer.append(1)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[대문자와 소문자]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%8C%80%EB%AC%B8%EC%9E%90%EC%99%80-%EC%86%8C%EB%AC%B8%EC%9E%90</link>
            <guid>https://velog.io/@ohmynoon__/%EB%8C%80%EB%AC%B8%EC%9E%90%EC%99%80-%EC%86%8C%EB%AC%B8%EC%9E%90</guid>
            <pubDate>Mon, 05 Aug 2024 02:59:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>문제 설명</strong>
문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.</p>
</blockquote>
<h4> 처음에 시도해본 코드</h4>
```
def solution(my_string):
    answer = ''
    if my_string.isupper():
        answer = my_string.lower()
    elif my_string.islower():
        answer = my_string.upper()
    return answer
```
틀린 이유 : 만약  my_string 안의 문자열이 모두 소문자이거나, 모두 대문자일 때에는 코드가 잘 작동할 지 모르겠지만, ```my_string= aBoos``` 이런 식으로 소문자와 대문자가 섞여있을 때는 코드가 작동하지 않는다. 따라서 my_string 내의 문자열을 골라서 하나씩 변환해야 한다. 

<pre><code>def solution(my_string):
    answer = &#39;&#39;
    for i in my_string:
        if i.isupper():
            answer += i.lower()
        elif i.islower():
            answer += i.upper()
        else:
            answer += i
    return answer</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[n개 간격의 원소들]]></title>
            <link>https://velog.io/@ohmynoon__/n%EA%B0%9C-%EA%B0%84%EA%B2%A9%EC%9D%98-%EC%9B%90%EC%86%8C%EB%93%A4</link>
            <guid>https://velog.io/@ohmynoon__/n%EA%B0%9C-%EA%B0%84%EA%B2%A9%EC%9D%98-%EC%9B%90%EC%86%8C%EB%93%A4</guid>
            <pubDate>Tue, 23 Jul 2024 15:44:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.</p>
</blockquote>
<pre><code>def solution(num_list, n):
    return num_list[0::n]</code></pre><p>파이썬의 슬라이싱 기능</p>
<pre><code>list[start:stop:step]</code></pre><p>1) start : 시작하는 인덱스
2) stop : 끝나는 인덱스 (포함되지 않는다) 
3) step : 간격</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[간단한 식 계산하기]]></title>
            <link>https://velog.io/@ohmynoon__/%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8B%9D-%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ohmynoon__/%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8B%9D-%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 22 Jul 2024 16:18:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>문제 설명</strong>
문자열 binomial이 매개변수로 주어집니다. binomial은 &quot;a op b&quot; 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 &#39;+&#39;, &#39;-&#39;, &#39;*&#39; 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.</p>
</blockquote>
<pre><code>def solution(binomial):
    parts = binomial.split()
    a = int(parts[0])
    op = parts[1]
    b = int(parts[2])
    if op == &quot;+&quot;:
        answer = a + b
    elif op == &quot;-&quot;:
        answer = a - b
    elif op == &quot;*&quot;:
        answer = a * b
    return answer</code></pre><p>1) 우선 bionomial을 공백을 기준으로 나눈 후에 parts 라는 변수에 넣어준다. </p>
<pre><code>parts = binomial.split()</code></pre><p>예를 들어  bionomial이 &quot;41 + 1&quot; 이었을 때, parts 는 [&quot;41&quot;, &quot;+&quot;, &quot;1&quot;] 이렇게 분리되는 것이다. </p>
<p>2) parts의 0번째를 숫자형으로 바꾸어서 a 에 넣어준다. </p>
<pre><code>    a = int(parts[0])</code></pre><p>3) parts의 1번째를 op 변수에 넣어준다. </p>
<pre><code>    op = parts[1]</code></pre><p>즉, 부호에 해당하는 것들(+, -, *) 은 parts의 1번째가 되는 것이다. </p>
<p>4) parts의 2번째를 숫자형으로 바꾸어서 b 에 넣어준다. </p>
<pre><code>    b= int([parts[2])</code></pre><p>5) 마지막으로, 각각 부호에 해당할 때, 알맞는 연산을 할 수 있는 조건문을 작성한다. </p>
<pre><code>if op == &quot;+&quot;:
        answer = a + b
    elif op == &quot;-&quot;:
        answer = a - b
    elif op == &quot;*&quot;:
        answer = a * b</code></pre><p>+) 추가적으로 예기치 않은 연산자가 주어졌을 때 예외처리도 가능하다. </p>
<pre><code>    else:
      raise ValueError(&quot;Invalid operator&quot;)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[배열에서 문자열 대소문자 변환하기]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%B0%B0%EC%97%B4%EC%97%90%EC%84%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ohmynoon__/%EB%B0%B0%EC%97%B4%EC%97%90%EC%84%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 21 Jul 2024 15:36:58 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>문제 설명</strong>
문자열 배열 strArr가 주어집니다. 모든 원소가 알파벳으로만 이루어져 있을 때, 배열에서 홀수번째 인덱스의 문자열은 모든 문자를 대문자로, 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환하는 solution 함수를 완성해 주세요.</p>
</blockquote>
<pre><code>def solution(strArr):
    answer = []
    for i in range(len(strArr)):
        if i % 2 == 0: 
            answer.append(strArr[i].lower()) 
        else:
            answer.append(strArr[i].upper()) 
    return answer</code></pre><p>1) 우선 strArr의 길이만큼의 범위에서 i 가 순환한다.
즉, 배열이니까 [&quot;0번째 i&quot;, &quot;1번째 i&quot;, &quot;2번째 i&quot; ... ] 이렇게 생긴 것! </p>
<pre><code>for i in range(len(strArr)):</code></pre><p>2) i가 만약 짝수번째 index라면 </p>
<pre><code> if i % 2 == 0:</code></pre><p>3) str[i]  번째의 문자열을 소문자로 만들고</p>
<pre><code>strArr[i].lower()</code></pre><p>4) 그것을 answer 에 붙인다.</p>
<pre><code> answer.append( )</code></pre><p>5) 홀수 번째도 동일하게 해준다. </p>
<pre><code> else:
    answer.append(strArr[i].upper()) </code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[원하는 문자열 찾기]]></title>
            <link>https://velog.io/@ohmynoon__/%EC%9B%90%ED%95%98%EB%8A%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B0%BE%EA%B8%B0-281h5h3a</link>
            <guid>https://velog.io/@ohmynoon__/%EC%9B%90%ED%95%98%EB%8A%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B0%BE%EA%B8%B0-281h5h3a</guid>
            <pubDate>Sun, 21 Jul 2024 15:29:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>문제 설명</strong>
알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.
단, 알파벳 대문자와 소문자는 구분하지 않습니다.</p>
</blockquote>
<pre><code>def solution(myString, pat):
    answer = 0
    l_string = myString.lower()
    l_pat = pat.lower()
    if l_pat in l_string:
        return 1
    else:
        return 0</code></pre><p>1) 우선 myString과 pat을 소문자로 바꾼다. </p>
<pre><code>l_string = myString.lower()
    l_pat = pat.lower()</code></pre><p>2) 그리고 l_string 안에 l_pat이 있는지 확인한다.</p>
<pre><code>if l_pat in l_string:</code></pre><p>3) 마지막으로, 있으면 1을 return 하고 없으면 0을 return 한다.</p>
<pre><code>return 1
    else:
        return 0</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[공백으로 구분하기 1]]></title>
            <link>https://velog.io/@ohmynoon__/%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C-%EA%B5%AC%EB%B6%84%ED%95%98%EA%B8%B0-1</link>
            <guid>https://velog.io/@ohmynoon__/%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C-%EA%B5%AC%EB%B6%84%ED%95%98%EA%B8%B0-1</guid>
            <pubDate>Wed, 17 Jul 2024 16:59:52 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.</p>
</blockquote>
<hr>
<pre><code>def solution(my_string):
    answer = []
    if &quot; &quot; in my_string:
        answer = my_string.split(&quot; &quot;)
    else:
        answer = [my_string]
    return answer</code></pre><hr>
<p> .split( )</p>
<p> ( ) 안에 있는 것을 기준으로 단어를 나눠라</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[문자열 바꿔서 찾기]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B0%94%EA%BF%94%EC%84%9C-%EC%B0%BE%EA%B8%B0</link>
            <guid>https://velog.io/@ohmynoon__/%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B0%94%EA%BF%94%EC%84%9C-%EC%B0%BE%EA%B8%B0</guid>
            <pubDate>Tue, 16 Jul 2024 16:02:25 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>문자 &quot;A&quot;와 &quot;B&quot;로 이루어진 문자열 myString과 pat가 주어집니다. myString의 &quot;A&quot;를 &quot;B&quot;로, &quot;B&quot;를 &quot;A&quot;로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.</p>
</blockquote>
<pre><code>def solution(myString, pat):
    answer = 0
    temp = myString.replace(&#39;B&#39;,&#39;C&#39;)
    replaced = temp.replace(&#39;A&#39;, &#39;B&#39;).replace(&#39;C&#39;, &#39;A&#39;)
    if pat in replaced:
        result = 1
    else:
        result = 0
    return result</code></pre><p>1) B를 바로 A로 바꿔버리면 replaced 에서 A를 B로 바꿀 때 B에서 A로 바뀐 건지, 아니면 원래 A인지 모르기 때문에 이를 구분하기 위해서 B를 우선 C 로 바꾼다.</p>
<pre><code>    temp = myString.replace(&#39;B&#39;,&#39;C&#39;)</code></pre><p>2) 그리고 난 후에, A를 B로 바꾸고, C로 바꿨던 것을 A로 바꾼다. </p>
<pre><code>    replaced = temp.replace(&#39;A&#39;, &#39;B&#39;).replace(&#39;C&#39;, &#39;A&#39;)</code></pre><p>3) replaced 에 pat이 포함되어 있으면 1을 출력하고</p>
<pre><code>if pat in replaced:
        result = 1</code></pre><p>4) replaced 에 pat이 포함되어 있지 않으면 0을 출력한다. </p>
<pre><code>else:
        result = 0</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[rny_string]]></title>
            <link>https://velog.io/@ohmynoon__/rnystring</link>
            <guid>https://velog.io/@ohmynoon__/rnystring</guid>
            <pubDate>Mon, 15 Jul 2024 16:58:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>&#39;m&#39;과 &quot;rn&quot;이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 &#39;m&#39;을 &quot;rn&quot;으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.</p>
</blockquote>
<hr>
<pre><code>def solution(rny_string):

    return rny_string.replace(&#39;m&#39;, &#39;rn&#39;)
</code></pre><hr>
<p><strong>.replace(&#39;m&#39;, &#39;rn&#39;)</strong></p>
<p>1) &#39;m&#39;: 첫 번째 인수로, 대체될 문자입니다. 여기서는 문자열 내에서 모든 &#39;m&#39; 문자를 찾습니다.
2) &#39;rn&#39;: 두 번째 인수로, 대체할 문자열입니다. 여기서는 모든 &#39;m&#39;을 &quot;rn&quot;으로 대체합니다.</p>
<p>즉, <em><strong>.replace</strong></em>(&#39;대체될 문자&#39;, &#39;대체할 문자열&#39;) </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[부분 문자열인지 확인하기]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B8%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-q96q0uq2</link>
            <guid>https://velog.io/@ohmynoon__/%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B8%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-q96q0uq2</guid>
            <pubDate>Thu, 11 Jul 2024 16:57:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>** 문제 설명
**부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 &quot;ana&quot;, &quot;ban&quot;, &quot;anana&quot;, &quot;banana&quot;, &quot;n&quot;는 모두 문자열 &quot;banana&quot;의 부분 문자열이지만, &quot;aaa&quot;, &quot;bnana&quot;, &quot;wxyz&quot;는 모두 &quot;banana&quot;의 부분 문자열이 아닙니다.
문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.</p>
</blockquote>
<pre><code>def solution(my_string, target):
    answer = 0
    if target in my_string:
        answer = 1
    else:
        anser = 0
    return answer</code></pre><hr>
<p>--- in --- 구문 활용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[부분 문자]]></title>
            <link>https://velog.io/@ohmynoon__/%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90</link>
            <guid>https://velog.io/@ohmynoon__/%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90</guid>
            <pubDate>Wed, 10 Jul 2024 17:14:34 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다. 예를 들어 문자열 &quot;abc&quot;는 문자열 &quot;aabcc&quot;의 부분 문자열입니다.</p>
</blockquote>
<p>문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면 1을 부분 문자열이 아니라면 0을 return하도록 solution 함수를 완성해주세요.</p>
<hr>
<p><img src="https://velog.velcdn.com/images/ohmynoon__/post/386be622-1439-47ce-871f-854cb6b49008/image.png" alt=""></p>
<h5>로직</h5>
str2 안에 str1이 있다면 1,
str2 안에 str1이 없다면 0

<hr>
<p>python에는 .includes 함수가 내장되어있지 않다. </p>
<p>그렇게 때문에 --- in --- 이렇게 써주면 된다. </p>
<p>여기에서는 str2안에 str1이 있다면? 이라고 해야하니,</p>
<p>str1 in str2 라고 작성하였다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[qr code]]></title>
            <link>https://velog.io/@ohmynoon__/qr-code</link>
            <guid>https://velog.io/@ohmynoon__/qr-code</guid>
            <pubDate>Tue, 09 Jul 2024 16:20:24 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>문제 설명
*</em>
두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.</p>
</blockquote>
<pre><code>def solution(q, r, code):
    answer = &#39;&#39;

    for i in range(len(code)):
        if i % q == r:
            answer += code[i]
    return answer</code></pre><hr>
<h5>로직</h5>

<p>q가 3이고 r이 1인 경우 
= index의 번호를 3으로 나눴을 때 나머지가 1이다. 
= index 번호가 1,4,7... index의 번호 % q = r</p>
<p>code의 index 번호가 0일 때 -&gt; 0 q
code의 index 번호가 1일 때 -&gt; 1 j ^
code의 index 번호가 2일 때 -&gt; 2 n
code의 index 번호가 3일 때 -&gt; 0 w
code의 index 번호가 4일 때 -&gt; 1 e ^
code의 index 번호가 5일 때 -&gt; 2
code의 index 번호가 6일 때 -&gt; 0 ... </p>
<hr>
<p>code 문자열 길이만큼 for 문을 돌리고,
i는 code의 index 번호니까 그 index 번호를 q로 나눴을 때 나머지가 1인 index 번호에 해당하는 그 문자열을 더해준다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQLD_서브쿼리]]></title>
            <link>https://velog.io/@ohmynoon__/SQLD%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC</link>
            <guid>https://velog.io/@ohmynoon__/SQLD%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC</guid>
            <pubDate>Fri, 24 Nov 2023 04:19:40 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ohmynoon__/post/96c11ae5-ce52-46cf-a766-dc0c60cc9c4c/image.png" alt=""></p>
<p>📗<strong>서브쿼리</strong>: 하나의 SQL문에 포함되어 있는 내부 SQL문
※ SELECT절, FROM절, WHERE절, HAVING절, ORDER BY절, INSERT문의 VALUES절, UPDATE문의 SET절에서 사용 가능</p>
<h4 id="서브쿼리의-유형">&lt;서브쿼리의 유형 &gt;</h4>
<p>▸ <strong>실행 결과</strong>에 따른 서브쿼리
( 1 ) 단일행 서브쿼리  </p>
<ul>
<li>실행 결과가 1건 이하인 서브쿼리</li>
<li>단일 행 비교 연산자와 함께 사용되며, =, &lt;, &lt;=, &gt;, &gt;=, &lt;&gt; 사용</li>
</ul>
<p>( 2 ) 다중행 서브쿼리 </p>
<ul>
<li>실행 결과로 다수의 로우를 반환하는 서브쿼리
✅ 다중 행 비교 연산자
1 ) IN : 서브쿼리 결과에 부분적으로 포함되는 조건 
2 ) ALL : 비교 연산 수행 시 서브 쿼리 결과와 모든 값을 만족하는 조건 
3 ) ANY : 비교 연산 수행 시 서브 쿼리 결과의 임의 값을 만족하는 조건
4 ) EXISTS : 서브 쿼리 결과를 만족하는 값이 있는지 확인하는 조건</li>
</ul>
<p>( 3 ) 다중컬럼 서브쿼리 </p>
<ul>
<li>실행 결과로 다수의 컬럼을 반환하는 서브쿼리</li>
</ul>
<p>▸ 메인쿼리 <strong>연관성</strong></p>
<p>( 1 ) 연관 서브쿼리 </p>
<ul>
<li>메인쿼리의 컬럼을 가지고 있는 서브쿼리</li>
</ul>
<p>▸ <strong>SQL 위치</strong>에 따른 서브쿼리</p>
<p>( 1 ) 스칼라 서브쿼리  </p>
<ul>
<li>SELECT절에서 주로 사용하는 서브쿼리</li>
<li>1 ROW, 1 COLUMN만을 반환</li>
</ul>
<p>( 2 ) 인라인 뷰 </p>
<ul>
<li>FROM 절에서 사용하는 서브쿼리</li>
</ul>
<p>📗<strong>뷰</strong>
: 하나 이상의 테이블에서 사용자에게 데이터를 보여주기 위해 재정의한 가상테이블
※ 테이블은 실제 데이터를 가지고 있지만 뷰는 <strong>실제 데이터를 가지지 않는다.</strong></p>
<h4 id="뷰의-특징">&lt;뷰의 특징&gt;</h4>
<ul>
<li>독립성 : 테이블 구조가 변경되어도 뷰를 재정의하면 되기 때문에, 애플리케이션을 변경할 필요가 없음</li>
<li>편리성 : 뷰를 사용하면 복잡한 SQL문을 단순한 형태로 변환 가능</li>
<li>보안성 : 민감한 정보를 제외하여 뷰를 정의하면 보안이 강화됨</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>