From 5ffd13dc7720ae65d4ac39d79dc36e71987c5b78 Mon Sep 17 00:00:00 2001 From: "Jay.D" Date: Sun, 10 Mar 2024 20:28:06 +0900 Subject: [PATCH 1/3] minor update for detail --- docs/blog/posts/2024-02-04-python_formatting.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/blog/posts/2024-02-04-python_formatting.md b/docs/blog/posts/2024-02-04-python_formatting.md index 6014f7e1..e34eac16 100644 --- a/docs/blog/posts/2024-02-04-python_formatting.md +++ b/docs/blog/posts/2024-02-04-python_formatting.md @@ -69,6 +69,17 @@ print(f"{a:_.2f}") 1_000.12 ``` +아래와 같이 float을 %로 간편하게 변경해 출력할 수 있다. + +```python +a = 0.12345 + +print(f"{a:.2%}") +``` +``` +12.35% +``` + ## Datetime 포메팅 아래와 같이 datetime 정보를 포메팅하여 출력할 수 있다. @@ -79,7 +90,7 @@ from datetime import datetime, timedelta, timezone KST = timezone(offset=timedelta(hours=9), name="KST") now = datetime.now(KST) -print(f"{now:%Y-%m-%d}T{now:%H:%M:%S%z}") +print(f"{now:%Y-%m-%dT%H:%M:%S%z}") ``` ``` 2024-02-28T00:26:36+0900 From 17fbe5a354525fd9d28f41a31380f2d57e9e0cd1 Mon Sep 17 00:00:00 2001 From: "Jay.D" Date: Fri, 15 Mar 2024 23:31:53 +0900 Subject: [PATCH 2/3] minor fixes for anchor --- .../2022-01-02-customize_minimal_mistakes.md | 2 +- .../2022-01-23-regression_statsmodels.md | 2 +- docs/blog/posts/2022-04-01-iqr_method.md | 2 +- ...022-05-19-linear_algebra_various_matrix.md | 8 ++++---- ...2022-05-22-linear_algebra_linear_system.md | 4 ++-- .../2022-05-23-linear_algebra_determinant.md | 6 +++--- ...022-05-28-linear_algebra_inverse_matrix.md | 6 +++--- ...06-05-linear_algebra_inner_product_norm.md | 8 ++++---- ...ear_algebra_orthogonal_qr_decomposition.md | 18 ++++++++--------- ...2-06-09-linear_algebra_various_products.md | 6 +++--- ...-06-12-linear_algebra_orthogonal_matrix.md | 4 ++-- ...near_algebra_orthogonal_diagonalization.md | 6 +++--- ...2-06-19-linear_algebra_lu_decomposition.md | 12 +++++------ docs/blog/posts/2022-07-31-date_modeling.md | 2 +- .../2022-08-07-database_normalization.md | 4 ++-- .../posts/2022-08-11-relational_database.md | 4 ++-- .../posts/2022-08-13-sql_where_groupby.md | 20 +++++++++---------- .../2022-08-18-sql_group_window_function.md | 8 ++++---- docs/blog/posts/2022-08-19-sql_procedure.md | 2 +- docs/blog/posts/2022-09-30-django_template.md | 2 +- docs/blog/posts/2022-10-01-django_mtv.md | 2 +- docs/blog/posts/2022-12-18-univariate_data.md | 10 +++++----- .../posts/2022-12-23-multivariate_data.md | 6 +++--- .../2022-12-24-statistical_probability.md | 4 ++-- ...andom_variable_probability_distribution.md | 7 ++++--- ...2-12-31-expectation_population_variance.md | 10 +++++----- ...023-01-01-probability_vector_covariance.md | 12 ++++++----- .../posts/2023-01-07-discrete_distribution.md | 14 ++++++------- .../posts/2023-02-15-sampling_distribution.md | 12 +++++------ .../posts/2023-03-24-encoding_categoric.md | 2 +- docs/blog/posts/2023-03-26-baekjoon_2480.md | 2 +- .../posts/2023-04-22-fastapi_architecture.md | 2 +- docs/blog/posts/2023-08-01-baekjoon_2738.md | 2 +- docs/blog/posts/2023-08-11-baekjoon_2798.md | 4 ++-- .../posts/2024-01-29-python_getter_setter.md | 2 +- docs/blog/posts/2024-02-18-css_specificity.md | 4 ++-- mkdocs.yml | 3 +++ 37 files changed, 115 insertions(+), 109 deletions(-) diff --git a/docs/blog/posts/2022-01-02-customize_minimal_mistakes.md b/docs/blog/posts/2022-01-02-customize_minimal_mistakes.md index 04a8e93b..9847b117 100644 --- a/docs/blog/posts/2022-01-02-customize_minimal_mistakes.md +++ b/docs/blog/posts/2022-01-02-customize_minimal_mistakes.md @@ -242,7 +242,7 @@ GitHub Pages에 수학식을 출력하는 방법은 여러 가지가 있는데, mathjax: true ``` -글 작성 시 수식 입력 방법은 [여기](2022-01-04-blog_markdown.md/#3)에서 확인할 수 있다. +글 작성 시 수식 입력 방법은 [여기](2022-01-04-blog_markdown.md/#수식-입력)에서 확인할 수 있다. ## 4. favicon 설정 diff --git a/docs/blog/posts/2022-01-23-regression_statsmodels.md b/docs/blog/posts/2022-01-23-regression_statsmodels.md index 2a7bc72b..a03543d1 100644 --- a/docs/blog/posts/2022-01-23-regression_statsmodels.md +++ b/docs/blog/posts/2022-01-23-regression_statsmodels.md @@ -227,7 +227,7 @@ res = smf.ols(formula='Lottery ~ np.log(Literacy)', data=df).fit() - BIC: AIC와 유사하나 패널티를 부여하여 AIC보다 모델 평가 성능이 더 좋으며, 수치가 낮을수록 좋음 - **coef: 변수의 coefficient(계수)**, 각 독립변수가 종속변수의 변화에 미치는 영향의 정도 -- std err: 계수의 [표준오차](2023-02-15-sampling_distribution.md/#1-3)(표본 통계량의 표준편차), 값이 작을수록 좋음 +- std err: 계수의 [표준오차](2023-02-15-sampling_distribution.md/#1-3-표본분포)(표본 통계량의 표준편차), 값이 작을수록 좋음 - t: 독립변수와 종속변수간에 선형관계(관련성)가 존재하는 정도, 값이 클수록 상관도가 큼 - t 값이 크다 = 표준편차가 작다 = 독립-종속변수 간 상관도 높음 - t 값이 작다 = 표준편차가 크다 = 독립-종속변수 간 상관도 낮음 diff --git a/docs/blog/posts/2022-04-01-iqr_method.md b/docs/blog/posts/2022-04-01-iqr_method.md index cb5030ed..ab7d53bb 100644 --- a/docs/blog/posts/2022-04-01-iqr_method.md +++ b/docs/blog/posts/2022-04-01-iqr_method.md @@ -134,7 +134,7 @@ $$ 좀 더 정확한 계산값을 사용하고 싶을 때는 $1.7$을 계수로 사용하면 정상 데이터의 범위가 $\pm 2.97 \sigma$이 되어 $\pm 3 \sigma$에 좀 더 가까운 결과가 나오게 된다. !!! note - 실제 데이터의 분포에 상관없이 표준 정규분포를 가정하고 IQR 방식을 사용할 수 있는 이유는 [중심극한정리](2023-02-15-sampling_distribution.md/#2-2)[^1]가 이론적 배경이라고 한다. 중심극한정리는 모집단이 어떤 분포를 가지고 있던지 간에 (모집단 분포가 어떤 모양이던 상관없이) 일단 표본의 크기가 충분히 크다면 표본평균들의 분포가 모집단의 모수를 기반으로한 정규분포를 이룬다는 정리이다. + 실제 데이터의 분포에 상관없이 표준 정규분포를 가정하고 IQR 방식을 사용할 수 있는 이유는 [중심극한정리](2023-02-15-sampling_distribution.md/#2-2-중심극한정리)[^1]가 이론적 배경이라고 한다. 중심극한정리는 모집단이 어떤 분포를 가지고 있던지 간에 (모집단 분포가 어떤 모양이던 상관없이) 일단 표본의 크기가 충분히 크다면 표본평균들의 분포가 모집단의 모수를 기반으로한 정규분포를 이룬다는 정리이다. [^1]: [위키피디아 - 중심 극한 정리](https://ko.wikipedia.org/wiki/%EC%A4%91%EC%8B%AC_%EA%B7%B9%ED%95%9C_%EC%A0%95%EB%A6%AC) diff --git a/docs/blog/posts/2022-05-19-linear_algebra_various_matrix.md b/docs/blog/posts/2022-05-19-linear_algebra_various_matrix.md index 41108522..6e066806 100644 --- a/docs/blog/posts/2022-05-19-linear_algebra_various_matrix.md +++ b/docs/blog/posts/2022-05-19-linear_algebra_various_matrix.md @@ -109,7 +109,7 @@ Python으로 대칭 행렬 여부를 확인하려면 아래와 같이 앞서 만 ### 반대칭 행렬 -아래와 같이 [전치 행렬](#1)이 원래 행렬에 $-1$을 곱한 행렬일 경우 행렬 $A$를 **반대칭 행렬(skew-symmetric matrix)**이라고 한다. +아래와 같이 [전치 행렬](#1-전치-행렬)이 원래 행렬에 $-1$을 곱한 행렬일 경우 행렬 $A$를 **반대칭 행렬(skew-symmetric matrix)**이라고 한다. $$ A^{T} = -A @@ -259,7 +259,7 @@ $$ ## 4. 단위 행렬 -**단위 행렬(identity matrix)**은 아래와 같이 주 대각 원소가 1이고 그 외 나머지 원소는 모두 0인 [대각 행렬](#3)을 의미한다. $I$로 표기하며, **항등 행렬**이라고도 부른다. +**단위 행렬(identity matrix)**은 아래와 같이 주 대각 원소가 1이고 그 외 나머지 원소는 모두 0인 [대각 행렬](#3-대각-행렬)을 의미한다. $I$로 표기하며, **항등 행렬**이라고도 부른다. $$ I = \begin{bmatrix} @@ -440,7 +440,7 @@ $$ ## 8. 하우스홀더 행렬 -**하우스홀더 행렬(householder matrix)**은 모든 열이 [정규 직교(orthonormal)](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#1)하는 정사각 행렬로, 아래와 같은 수식을 따르는 행렬 $H$를 말한다. +**하우스홀더 행렬(householder matrix)**은 모든 열이 [정규 직교(orthonormal)](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#1-직교-공간)하는 정사각 행렬로, 아래와 같은 수식을 따르는 행렬 $H$를 말한다. $$ \textbf{v} = \begin{bmatrix} @@ -452,7 +452,7 @@ v_{n} \to H = I - 2\frac{\textbf{vv}^{T}}{\textbf{v}^{T}\textbf{v}} $$ -${\textbf{vv}^{T}}$은 [벡터의 외적](2022-06-09-linear_algebra_various_products.md/#1), ${\textbf{v}^{T}\textbf{v}}$은 [벡터의 내적](2022-06-05-linear_algebra_inner_product_norm.md/#1)을 뜻하기 때문에 하우스홀더 행렬 공식을 Python으로 구현하기 위해서는 벡터의 내적과 외적의 함수를 먼저 구현해야 한다. +${\textbf{vv}^{T}}$은 [벡터의 외적](2022-06-09-linear_algebra_various_products.md/#1-외적), ${\textbf{v}^{T}\textbf{v}}$은 [벡터의 내적](2022-06-05-linear_algebra_inner_product_norm.md/#1-내적)을 뜻하기 때문에 하우스홀더 행렬 공식을 Python으로 구현하기 위해서는 벡터의 내적과 외적의 함수를 먼저 구현해야 한다. === "Python" diff --git a/docs/blog/posts/2022-05-22-linear_algebra_linear_system.md b/docs/blog/posts/2022-05-22-linear_algebra_linear_system.md index 8452e5e9..081c066b 100644 --- a/docs/blog/posts/2022-05-22-linear_algebra_linear_system.md +++ b/docs/blog/posts/2022-05-22-linear_algebra_linear_system.md @@ -19,7 +19,7 @@ tags: ## 1. 선형 방정식 -**선형 방정식(linear equation)**이란 아래와 같이 변수인 $x_{n}$과 상수인 $\beta_{n}$이 [선형 결합](2022-05-29-linear_algebra_basis_dimension.md/#3)되어 **선형(linear)**으로 표현 되는 1차 방정식을 말한다. +**선형 방정식(linear equation)**이란 아래와 같이 변수인 $x_{n}$과 상수인 $\beta_{n}$이 [선형 결합](2022-05-29-linear_algebra_basis_dimension.md/#3-선형-결합과-선형-독립)되어 **선형(linear)**으로 표현 되는 1차 방정식을 말한다. $$ \beta_{0} + \beta_{1}x_{1} + \beta_{2}x_{2} + \cdots + \beta_{n}x_{n} = y @@ -182,7 +182,7 @@ $$ ### 가우스-조르단 소거법 -주어진 선형 시스템을 [기본 행 연산](2022-05-23-linear_algebra_determinant.md/#_4)을 통해 기약 행사다리꼴 행렬의 형태로 만들어 방정식의 해를 구하는 방법을 **가우스-조르단 소거법(Gauss Jordan elimination)**이라고 한다. +주어진 선형 시스템을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 통해 기약 행사다리꼴 행렬의 형태로 만들어 방정식의 해를 구하는 방법을 **가우스-조르단 소거법(Gauss Jordan elimination)**이라고 한다. [Wolfram](https://mathworld.wolfram.com/Gauss-JordanElimination.html)에 따르면 가우스-조르단 소거법은 [역행렬](2022-05-28-linear_algebra_inverse_matrix.md)을 구하기 위한 방법이지만 응용해서 선형 시스템을 해를 구할 때도 사용할 수 있다. 아무튼 Python으로 구현하면 아래와 같다. diff --git a/docs/blog/posts/2022-05-23-linear_algebra_determinant.md b/docs/blog/posts/2022-05-23-linear_algebra_determinant.md index a11d38a0..b8fcc66b 100644 --- a/docs/blog/posts/2022-05-23-linear_algebra_determinant.md +++ b/docs/blog/posts/2022-05-23-linear_algebra_determinant.md @@ -106,13 +106,13 @@ $$ ### 특이한 행렬의 행렬식 -[삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6), [대각 행렬](2022-05-19-linear_algebra_various_matrix.md/#3)의 행렬식은 주 대각 원소의 곱과 같다. +[삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬), [대각 행렬](2022-05-19-linear_algebra_various_matrix.md/#3-대각-행렬)의 행렬식은 주 대각 원소의 곱과 같다. $$ \det(A) = a_{11} a_{22} \cdots a_{nn} $$ -[전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1)의 행렬식: 행렬 $A$가 정사각 행렬일 경우 행렬 $A$와 그 전치 행렬 $A^{T}$의 행렬식은 동일하다. +[전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1-전치-행렬)의 행렬식: 행렬 $A$가 정사각 행렬일 경우 행렬 $A$와 그 전치 행렬 $A^{T}$의 행렬식은 동일하다. $$ \det(A) = \det(A)^{T} @@ -122,7 +122,7 @@ $$ ### 행렬의 기본 행 연산과 행렬식 -[기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#_4)에 의한 행렬식의 변경은 아래와 같다. +[기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)에 의한 행렬식의 변경은 아래와 같다. - 한 행에 영이 아닌 상수를 모두 곱한다. diff --git a/docs/blog/posts/2022-05-28-linear_algebra_inverse_matrix.md b/docs/blog/posts/2022-05-28-linear_algebra_inverse_matrix.md index 34abf168..fb9099ec 100644 --- a/docs/blog/posts/2022-05-28-linear_algebra_inverse_matrix.md +++ b/docs/blog/posts/2022-05-28-linear_algebra_inverse_matrix.md @@ -51,7 +51,7 @@ $$ ### n * n 행렬의 역행렬 -n * n 행렬의 역행렬을 구하는 방법은 행렬식에서 다룬 [수반 행렬](2022-05-23-linear_algebra_determinant.md/#_2)을 사용해야 한다. 구하는 방법은 아래와 같다. +n * n 행렬의 역행렬을 구하는 방법은 행렬식에서 다룬 [수반 행렬](2022-05-23-linear_algebra_determinant.md/#수반-행렬)을 사용해야 한다. 구하는 방법은 아래와 같다. $$ A^{-1} = \frac{\text{adj}(A)}{\det(A)} @@ -59,7 +59,7 @@ $$ ## 2. 역행렬 계산 -역행렬을 구하는 방법은 다양하지만, 앞서 다뤘던 [가우스-조르단 소거법(Gauss Jordan elimination)](2022-05-22-linear_algebra_linear_system.md/#-)을 사용하는 것이 가장 간편하다. 절차는 아래와 같다. +역행렬을 구하는 방법은 다양하지만, 앞서 다뤘던 [가우스-조르단 소거법(Gauss Jordan elimination)](2022-05-22-linear_algebra_linear_system.md/#가우스-조르단-소거법)을 사용하는 것이 가장 간편하다. 절차는 아래와 같다. - 행렬 $A$의 오른쪽에 같은 크기를 갖는 단위 행렬 $I$를 첨가해 아래와 같이 첨가 행렬 $[A \vert I]$를 만든다. @@ -71,7 +71,7 @@ $$ \end{array} \right] $$ -- 이 행렬을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#_4)을 통해 아래와 같이 $[I \vert B]$를 만든다. +- 이 행렬을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 통해 아래와 같이 $[I \vert B]$를 만든다. $$ [I|B] = \left[ \begin{array}{ccc|ccc} diff --git a/docs/blog/posts/2022-06-05-linear_algebra_inner_product_norm.md b/docs/blog/posts/2022-06-05-linear_algebra_inner_product_norm.md index 3a575e58..b70873eb 100644 --- a/docs/blog/posts/2022-06-05-linear_algebra_inner_product_norm.md +++ b/docs/blog/posts/2022-06-05-linear_algebra_inner_product_norm.md @@ -21,7 +21,7 @@ tags: ### 내적의 개념 -[벡터 공간](2022-05-29-linear_algebra_basis_dimension.md/#1)의 설명에서 언급했듯이 **내적(inner product)**이 주어진 벡터 공간을 **내적 공간(inner product space)**이라고 부르는데, 벡터의 **내적(inner product)**은 벡터를 방향이 일치하는 만큼만 곱한다는 뜻으로 아래와 같이 표기한다. +[벡터 공간](2022-05-29-linear_algebra_basis_dimension.md/#1-벡터-공간)의 설명에서 언급했듯이 **내적(inner product)**이 주어진 벡터 공간을 **내적 공간(inner product space)**이라고 부르는데, 벡터의 **내적(inner product)**은 벡터를 방향이 일치하는 만큼만 곱한다는 뜻으로 아래와 같이 표기한다. $$ \textbf{u} @@ -42,7 +42,7 @@ $$ \langle \textbf{u}, \textbf{v} \rangle = \textbf{u} \cdot \textbf{v} = \textbf{u}^{T} \textbf{v} = \sum_{i=1}^{n}u_{i}v_{i} = \vert \textbf{u} \vert \vert \textbf{v} \vert \cos \theta $$ -벡터의 내적을 Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8) 공식에서 이미 구현한 바 있다. +벡터의 내적을 Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8-하우스홀더-행렬) 공식에서 이미 구현한 바 있다. === "Python" @@ -79,7 +79,7 @@ $$ ## 2. 노름(norm) -**노름(norm)**은 벡터의 크기 또는 길이를 말하며 $\Vert \textbf{v} \Vert$로 표기한다. 내적이 정의되면 노름(norm)은 자기 자신의 [내적(inner product)](#1)의 제곱근으로 정의할 수 있다. +**노름(norm)**은 벡터의 크기 또는 길이를 말하며 $\Vert \textbf{v} \Vert$로 표기한다. 내적이 정의되면 노름(norm)은 자기 자신의 [내적(inner product)](#1-내적)의 제곱근으로 정의할 수 있다. !!! warning 그러나 노름(norm)이 있다고 해서 그에 자연스럽게 대응되는 내적이 항상 존재하는 것은 아니다. @@ -172,7 +172,7 @@ $$ ## 3. 코사인 유사도 -**[코사인 유사도(cosine similarity)](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)**는 내적 공간의 두 벡터 간의 유사한 정도를 벡터 간 각도의 코사인 값을 이용하여 측정한 것을 의미하는데, [노름(norm)](#2-norm)을 통해 정리하면 **코사인 유사도(cosine similarity)**를 다음과 같이 유도할 수 있다. +**[코사인 유사도(cosine similarity)](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)**는 내적 공간의 두 벡터 간의 유사한 정도를 벡터 간 각도의 코사인 값을 이용하여 측정한 것을 의미하는데, [노름(norm)](#2-노름norm)을 통해 정리하면 **코사인 유사도(cosine similarity)**를 다음과 같이 유도할 수 있다. $$ \text{cosine similarity} = S_{c}(\textbf{u}, \textbf{v}) = \cos \theta = \frac{\textbf{u} \cdot \textbf{v}}{\Vert \textbf{u} \Vert \Vert \textbf{v} \Vert} diff --git a/docs/blog/posts/2022-06-06-linear_algebra_orthogonal_qr_decomposition.md b/docs/blog/posts/2022-06-06-linear_algebra_orthogonal_qr_decomposition.md index 5c4005e4..89c40d6f 100644 --- a/docs/blog/posts/2022-06-06-linear_algebra_orthogonal_qr_decomposition.md +++ b/docs/blog/posts/2022-06-06-linear_algebra_orthogonal_qr_decomposition.md @@ -21,7 +21,7 @@ tags: ### 직교, 정규 직교 벡터, 정규 직교 공간, 정규화 -**직교(orthogonal)**란 두 직선 또는 두 평면이 직각을 이루며 만나는 것을 의미한다. 직교하는 두 벡터의 길이가 각 1([단위 벡터](2022-05-29-linear_algebra_basis_dimension.md/#_2))이면 **정규 직교(orthonomal)**한다고 말하고, 정규 직교 하는 벡터들을 **정규 직교 벡터(orthonormal vector)**, 정규 직교 벡터가 만드는 공간을 **정규 직교 공간(orthonormal space)**이라고 한다. 직교 벡터를 정규 직교 벡터로 **정규화(normalization)** 하는 방법은 아래와 같다. +**직교(orthogonal)**란 두 직선 또는 두 평면이 직각을 이루며 만나는 것을 의미한다. 직교하는 두 벡터의 길이가 각 1([단위 벡터](2022-05-29-linear_algebra_basis_dimension.md/#단위-벡터))이면 **정규 직교(orthonomal)**한다고 말하고, 정규 직교 하는 벡터들을 **정규 직교 벡터(orthonormal vector)**, 정규 직교 벡터가 만드는 공간을 **정규 직교 공간(orthonormal space)**이라고 한다. 직교 벡터를 정규 직교 벡터로 **정규화(normalization)** 하는 방법은 아래와 같다. $$ \textbf{v}_{n} = \frac{\textbf{u}_{n}}{\Vert \textbf{u}_{n} \Vert} @@ -150,7 +150,7 @@ $$ ### 직교 정사영 -벡터 공간 $S$의 부분 공간 $W$에서 부분 공간 $W$의 **직교 기저(orthogonal basis)**가 $U = \{ \textbf{u}_{1}, \textbf{u}_{2}, \cdots, \textbf{u}_{n} \}$일 때, $\textbf{a}$가 전체 벡터 공간 $S$의 임의의 벡터이면 $\textbf{a}$를 $W$로 정사영 시킨 벡터는 다음과 같다. [직교 벡터를 활용한 좌표 표현](#_3)을 참고하자. +벡터 공간 $S$의 부분 공간 $W$에서 부분 공간 $W$의 **직교 기저(orthogonal basis)**가 $U = \{ \textbf{u}_{1}, \textbf{u}_{2}, \cdots, \textbf{u}_{n} \}$일 때, $\textbf{a}$가 전체 벡터 공간 $S$의 임의의 벡터이면 $\textbf{a}$를 $W$로 정사영 시킨 벡터는 다음과 같다. [직교 벡터를 활용한 좌표 표현](#정규-직교-벡터를-활용한-좌표-표현)을 참고하자. $$ proj_{\textbf{w}} \textbf{a} = \frac{\langle \textbf{a}, \textbf{u}_{1} \rangle}{\Vert \textbf{u}_{1} \Vert^{2}}\textbf{u}_{1} + \frac{\langle \textbf{a}, \textbf{u}_{2} \rangle}{\Vert \textbf{u}_{2} \Vert^{2}}\textbf{u}_{2} + \cdots + \frac{\langle \textbf{a}, \textbf{u}_{n} \rangle}{\Vert \textbf{u}_{n} \Vert^{2}}\textbf{u}_{n} @@ -162,7 +162,7 @@ $$ proj_{\textbf{w}} \textbf{a} = \left\{ \frac{\langle \textbf{a}, \textbf{u}_{1} \rangle}{\Vert \textbf{u}_{1} \Vert^{2}}, \frac{\langle \textbf{a}, \textbf{u}_{2} \rangle}{\Vert \textbf{u}_{2} \Vert^{2}}, \cdots, \frac{\langle \textbf{a}, \textbf{u}_{n} \rangle}{\Vert \textbf{u}_{n} \Vert^{2}} \right\} $$ -벡터 공간 $S$의 부분 공간 $W$에서, 부분 공간 $W$의 **정규 직교 기저(orthonormal basis)**가 $\{ \textbf{v}_{1}, \textbf{v}_{2}, \cdots, \textbf{v}_{n} \}$일 때, $\textbf{a}$가 전체 벡터 공간 $S$의 임의의 벡터이면 $\textbf{a}$를 $W$로 정사영시킨 벡터는 다음과 같다. [정규 직교 벡터를 활용한 좌표 표현](#_3)을 참고하자. +벡터 공간 $S$의 부분 공간 $W$에서, 부분 공간 $W$의 **정규 직교 기저(orthonormal basis)**가 $\{ \textbf{v}_{1}, \textbf{v}_{2}, \cdots, \textbf{v}_{n} \}$일 때, $\textbf{a}$가 전체 벡터 공간 $S$의 임의의 벡터이면 $\textbf{a}$를 $W$로 정사영시킨 벡터는 다음과 같다. [정규 직교 벡터를 활용한 좌표 표현](##정규-직교-벡터를-활용한-좌표-표현)을 참고하자. $$ proj_{\textbf{w}} \textbf{a} = \langle \textbf{a}, \textbf{v}_{1} \rangle \textbf{v}_{1} + \langle \textbf{a}, \textbf{v}_{2} \rangle \textbf{v}_{2} + \cdots + \langle \textbf{a}, \textbf{v}_{n} \rangle \textbf{v}_{n} @@ -170,7 +170,7 @@ $$ ## 3. 그람-슈미트 과정 -**그람-슈미트 과정(Gram-Schmidt Process)**은 [기저(basis) 벡터](2022-05-29-linear_algebra_basis_dimension.md/#_3) $\{ \textbf{s}_{1}, \textbf{s}_{2}, \cdots, \textbf{s}_{n} \}$를 [직교 기저(orthogonal basis) 벡터](#_1) $\{ \textbf{u}_{1}, \textbf{u}_{2}, \cdots, \textbf{u}_{n} \}$로 변환하는 과정을 의미한다. 그람-슈미트 과정은 다음과 같은 단계로 진행 된다. +**그람-슈미트 과정(Gram-Schmidt Process)**은 [기저(basis) 벡터](2022-05-29-linear_algebra_basis_dimension.md/#기저-벡터) $\{ \textbf{s}_{1}, \textbf{s}_{2}, \cdots, \textbf{s}_{n} \}$를 [직교 기저(orthogonal basis) 벡터](#직교-정규-직교-벡터-정규-직교-공간-정규화) $\{ \textbf{u}_{1}, \textbf{u}_{2}, \cdots, \textbf{u}_{n} \}$로 변환하는 과정을 의미한다. 그람-슈미트 과정은 다음과 같은 단계로 진행 된다. - 1) 기존 기저 벡터 $\textbf{s}_{1}$을 통해 새로운 직교 기저 벡터 $\textbf{u}_{1}$을 정의한다. @@ -232,7 +232,7 @@ A = QR $$ 이러한 **QR분해(QR decomposition, QR factorization)**는 주어진 행렬을 직교하는 행렬로 나타내어 행렬을 다루기 편하게 만들어주며, 크기가 큰 행렬의 고유값을 구할 때 유용하게 사용된다. -[정규 직교 벡터를 활용한 좌표 표현](#_2)을 참고하면, 행렬 $A$의 각 열 벡터는 아래와 같이 나타낼 수 있다. +[정규 직교 벡터를 활용한 좌표 표현](#정규-직교-벡터를-활용한-좌표-표현)을 참고하면, 행렬 $A$의 각 열 벡터는 아래와 같이 나타낼 수 있다. $$ \begin{align*} @@ -301,9 +301,9 @@ $$ ### 하우스홀더 행렬을 이용한 QR분해 -[하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8)을 사용해서 구하는 방법도 있다. 그람-슈미트 방법과는 달리 부동소수점 연산에서도 오차가 누적되지 않기 때문에 더 많이 활용된다고 한다. 하우스홀더 행렬을 사용한 QR분해 방법은 다음과 같다. +[하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8-하우스홀더-행렬)을 사용해서 구하는 방법도 있다. 그람-슈미트 방법과는 달리 부동소수점 연산에서도 오차가 누적되지 않기 때문에 더 많이 활용된다고 한다. 하우스홀더 행렬을 사용한 QR분해 방법은 다음과 같다. -- 1) 주어진 행렬 $A$를 통해 $\textbf{v}_{1}$를 구한다. 아래 식에서 $sign$은 벡터의 첫 스칼라의 부호로, 0 이상이면 $+$, 0 미만이면 $-$가 된다. $\textbf{e}_{1}$은 [기저 벡터](2022-05-29-linear_algebra_basis_dimension.md/#_2)를 말한다. +- 1) 주어진 행렬 $A$를 통해 $\textbf{v}_{1}$를 구한다. 아래 식에서 $sign$은 벡터의 첫 스칼라의 부호로, 0 이상이면 $+$, 0 미만이면 $-$가 된다. $\textbf{e}_{1}$은 [기저 벡터](2022-05-29-linear_algebra_basis_dimension.md/#기저-벡터)를 말한다. $$ A_{1} = A = \begin{bmatrix} @@ -333,7 +333,7 @@ a_{41}\end{bmatrix}, \quad \end{align*} $$ -- 2) 위에서 구한 $\textbf{v}_{1}$를 통해서 [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8)을 구한다. +- 2) 위에서 구한 $\textbf{v}_{1}$를 통해서 [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8-하우스홀더-행렬)을 구한다. $$ \begin{align*} @@ -518,7 +518,7 @@ Python으로 구현하면 아래와 같다. h_list.append(tmp) ``` -NumPy, SciPy로 구한 값 및 위의 [그람-슈미트 과정](#-qr)을 이용해서 도출한 값과는 부호가 조금 다르게 나오는데, 마찬가지로 바뀐 부호가 $Q$와 $R$에 공통적으로 적용되어 $A = QR$이라는 최종 검산 결과를 만족하면 상관 없다고 한다. +NumPy, SciPy로 구한 값 및 위의 [그람-슈미트 과정](#3-그람-슈미트-과정)을 이용해서 도출한 값과는 부호가 조금 다르게 나오는데, 마찬가지로 바뀐 부호가 $Q$와 $R$에 공통적으로 적용되어 $A = QR$이라는 최종 검산 결과를 만족하면 상관 없다고 한다. --- ## Reference diff --git a/docs/blog/posts/2022-06-09-linear_algebra_various_products.md b/docs/blog/posts/2022-06-09-linear_algebra_various_products.md index 7f4c344e..1c167a67 100644 --- a/docs/blog/posts/2022-06-09-linear_algebra_various_products.md +++ b/docs/blog/posts/2022-06-09-linear_algebra_various_products.md @@ -25,7 +25,7 @@ $$ \textbf{u} \otimes \textbf{v} = \textbf{u} \textbf{v}^{T} $$ -Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8) 공식에서 이미 구현한 바 있다. +Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8-하우스홀더-행렬) 공식에서 이미 구현한 바 있다. === "Python" @@ -61,7 +61,7 @@ $$ ## 2. 벡터 곱 -**벡터 곱(vector product)**은 **크로스 곱(cross product)** 또는 **가위 곱**이라고 부르기도 하는데, **3차원 공간의 벡터들 간에서만 적용할 수 있는 연산**으로, 다음과 같이 [기저 벡터](2022-05-29-linear_algebra_basis_dimension.md/#_3)를 사용해 구할 수 있다. +**벡터 곱(vector product)**은 **크로스 곱(cross product)** 또는 **가위 곱**이라고 부르기도 하는데, **3차원 공간의 벡터들 간에서만 적용할 수 있는 연산**으로, 다음과 같이 [기저 벡터](2022-05-29-linear_algebra_basis_dimension.md/#기저-벡터)를 사용해 구할 수 있다. $$ \textbf{i} = \begin{bmatrix} @@ -106,7 +106,7 @@ v_{1} & v_{2} \\ \end{align*} $$ -벡터 곱 $\textbf{u} \times \textbf{v}$의 방향은 벡터 $\textbf{u}$와 $\textbf{v}$에 수직이고, 크기는 $\textbf{u}$와 $\textbf{v}$ 두 벡터가 이루는 정사각형의 넓이, 즉 벡터 $\textbf{u}$와 벡터 $\textbf{v}$의 벡터 곱의 [노름(norm)](2022-06-05-linear_algebra_inner_product_norm.md/#2-norm)과 같다. 이를 수식으로 나타내면 다음과 같다. +벡터 곱 $\textbf{u} \times \textbf{v}$의 방향은 벡터 $\textbf{u}$와 $\textbf{v}$에 수직이고, 크기는 $\textbf{u}$와 $\textbf{v}$ 두 벡터가 이루는 정사각형의 넓이, 즉 벡터 $\textbf{u}$와 벡터 $\textbf{v}$의 벡터 곱의 [노름(norm)](2022-06-05-linear_algebra_inner_product_norm.md/#2-노름norm)과 같다. 이를 수식으로 나타내면 다음과 같다. $$ \Vert \textbf{u} \times \textbf{v} \Vert = \Vert \textbf{u} \Vert \Vert \textbf{v} \Vert \vert \sin \theta \vert diff --git a/docs/blog/posts/2022-06-12-linear_algebra_orthogonal_matrix.md b/docs/blog/posts/2022-06-12-linear_algebra_orthogonal_matrix.md index ed8673c5..f5dc3b3c 100644 --- a/docs/blog/posts/2022-06-12-linear_algebra_orthogonal_matrix.md +++ b/docs/blog/posts/2022-06-12-linear_algebra_orthogonal_matrix.md @@ -19,7 +19,7 @@ tags: ## 1. 직교 행렬 -**직교 행렬(orthogonal matrix)**이란 어떤 행렬의 행 벡터와 열 벡터가 [정규 직교(orthonomal) 기저](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#1)를 이루는 행렬을 의미한다. 직교 행렬은 자기 자신의 [전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1)과 곱했을 때 [단위 행렬](2022-05-19-linear_algebra_various_matrix.md/#4)이 되는 성질이 있기 때문에 이를 통해 주어진 행렬이 직교 행렬인지 확인할 수 있다. +**직교 행렬(orthogonal matrix)**이란 어떤 행렬의 행 벡터와 열 벡터가 [정규 직교(orthonomal) 기저](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#직교-정규-직교-벡터-정규-직교-공간-정규화)를 이루는 행렬을 의미한다. 직교 행렬은 자기 자신의 [전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1-전치-행렬)과 곱했을 때 [단위 행렬](2022-05-19-linear_algebra_various_matrix.md/#4-단위-행렬)이 되는 성질이 있기 때문에 이를 통해 주어진 행렬이 직교 행렬인지 확인할 수 있다. - 행렬 $A$가 직교 행렬일 때, @@ -86,7 +86,7 @@ $$ - 행렬 $A$가 가역 행렬이라는 말은 $P^{-1}AP$가 가역 행렬이라는 말과 같다. -- 행렬 $A$와 $P^{-1}AP$의 [랭크(rank)와 널리티(nullity)](2022-05-29-linear_algebra_basis_dimension.md/#7)는 동일하다. +- 행렬 $A$와 $P^{-1}AP$의 [랭크(rank)와 널리티(nullity)](2022-05-29-linear_algebra_basis_dimension.md/#7-랭크와-널리티)는 동일하다. $$ \begin{align*} diff --git a/docs/blog/posts/2022-06-13-linear_algebra_orthogonal_diagonalization.md b/docs/blog/posts/2022-06-13-linear_algebra_orthogonal_diagonalization.md index a84b6e33..85de62d9 100644 --- a/docs/blog/posts/2022-06-13-linear_algebra_orthogonal_diagonalization.md +++ b/docs/blog/posts/2022-06-13-linear_algebra_orthogonal_diagonalization.md @@ -21,11 +21,11 @@ tags: ### 대각화 -행렬을 [대각 행렬(diagonal matrix)](2022-05-19-linear_algebra_various_matrix.md/#3)로 만드는 것을 **대각화(diagonalization)**라고 하며, $n \times n$ 행렬 $A$가 대각화 가능하려면 $n$개의 서로 다른 고유값을 가져야 한다. +행렬을 [대각 행렬(diagonal matrix)](2022-05-19-linear_algebra_various_matrix.md/#3-대각-행렬)로 만드는 것을 **대각화(diagonalization)**라고 하며, $n \times n$ 행렬 $A$가 대각화 가능하려면 $n$개의 서로 다른 고유값을 가져야 한다. ### 직교 대각화 -[직교 닮음](2022-06-12-linear_algebra_orthogonal_matrix.md/#2)인 행렬이 대각 행렬일 때, 즉 아래 식 처럼 행렬 $A$가 행렬 $P$에 의해 대각화 될 때 직교 행렬 $P$가 행렬 $A$를 **직교 대각화(orthogonal diagonalization)**한다고 말한다. +[직교 닮음](2022-06-12-linear_algebra_orthogonal_matrix.md/#2-닮음)인 행렬이 대각 행렬일 때, 즉 아래 식 처럼 행렬 $A$가 행렬 $P$에 의해 대각화 될 때 직교 행렬 $P$가 행렬 $A$를 **직교 대각화(orthogonal diagonalization)**한다고 말한다. $$ D = P^{-1}AP = P^{T}AP @@ -62,7 +62,7 @@ $$ 위 식에서 $\lambda_{1}, \lambda_{2}, \lambda_{3}$는 행렬 $A$의 고유값이고, $\textbf{u}_{1}, \textbf{u}_{2}, \textbf{u}_{3}$는 각 고유값에 해당하는 고유 벡터다. -고유벡터 구하는 함수를 Python으로 구현하면 아래와 같다. 앞서 [고유값과 고유벡터 계산](2022-06-11-linear_algebra_eigenvalue_eigenvector.md/#qr)에서 이미 구현한 바 있다. +고유벡터 구하는 함수를 Python으로 구현하면 아래와 같다. 앞서 [고유값과 고유벡터 계산](2022-06-11-linear_algebra_eigenvalue_eigenvector.md/#qr분해를-통한-고유값과-고유벡터-계산)에서 이미 구현한 바 있다. === "Python" diff --git a/docs/blog/posts/2022-06-19-linear_algebra_lu_decomposition.md b/docs/blog/posts/2022-06-19-linear_algebra_lu_decomposition.md index 9db6ac2f..d328616e 100644 --- a/docs/blog/posts/2022-06-19-linear_algebra_lu_decomposition.md +++ b/docs/blog/posts/2022-06-19-linear_algebra_lu_decomposition.md @@ -19,7 +19,7 @@ tags: ## 1. 기본 행렬 -**기본 행렬(elementary matrix)**은 단위 행렬에 [기본 행 연산](2022-05-23-linear_algebra_determinant.md/#_4)을 한 번 실행하여 얻어진 행렬을 말하며, 일반적으로 $E$로 표기한다. 기본 행렬은 아래와 같이 일반적인 행렬에 비해 역행렬을 아주 쉽게 구할 수 있다. +**기본 행렬(elementary matrix)**은 단위 행렬에 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 한 번 실행하여 얻어진 행렬을 말하며, 일반적으로 $E$로 표기한다. 기본 행렬은 아래와 같이 일반적인 행렬에 비해 역행렬을 아주 쉽게 구할 수 있다. - 기본 행렬이 대각 행렬인 경우, 1이 아닌 원소의 역수를 대입하면 된다. @@ -55,7 +55,7 @@ $$ ### LU 분해의 기본 개념 -**LU 분해(LU decomposition, LU factorization)**는 행렬 $A$를 아래와 같이 [하 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6) $L$과 [상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6) $U$로 분해하는 것을 말하며, [가우스-조르단 소거법](2022-05-22-linear_algebra_linear_system.md/#-)을 사용해 선형 시스템의 해를 구하는 것보다 컴퓨팅 리소스를 효율적으로 사용할 수 있다고 한다. +**LU 분해(LU decomposition, LU factorization)**는 행렬 $A$를 아래와 같이 [하 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬) $L$과 [상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬) $U$로 분해하는 것을 말하며, [가우스-조르단 소거법](2022-05-22-linear_algebra_linear_system.md/#가우스-조르단-소거법)을 사용해 선형 시스템의 해를 구하는 것보다 컴퓨팅 리소스를 효율적으로 사용할 수 있다고 한다. $$ \begin{align*} @@ -82,9 +82,9 @@ $$ LU 분해 방법은 아래와 같다. -- 1) 위 정리에서 $a_{11} \neq 0$ 이어야 하기 때문에, [피벗팅](2022-05-22-linear_algebra_linear_system.md/#_2)을 해준다. +- 1) 위 정리에서 $a_{11} \neq 0$ 이어야 하기 때문에, [피벗팅](2022-05-22-linear_algebra_linear_system.md/#피벗)을 해준다. -- 2) 주어진 행렬 $A$를 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#_4)을 통해 [상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6) $U$로 변환한다. +- 2) 주어진 행렬 $A$를 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 통해 [상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬) $U$로 변환한다. $$ E_{n}E_{n-1} \cdots E_{2}E_{1}A = U @@ -104,7 +104,7 @@ $$ ### 쉬운 LU 분해 방법 -[기본 행렬](#1)의 모양을 잘 관찰하면 LU 분해 과정에서 구한 기본 행렬의 역행렬을 모두 곱해서 행렬 $L$을 만드는 것은 아래와 같이 요약된다는 것을 알 수 있다. +[기본 행렬](#1-기본-행렬)의 모양을 잘 관찰하면 LU 분해 과정에서 구한 기본 행렬의 역행렬을 모두 곱해서 행렬 $L$을 만드는 것은 아래와 같이 요약된다는 것을 알 수 있다. - 행렬 $A$의 주 대각 원소를 1로 바꾸기 위해 곱하는 수의 역수는 행렬 $L$의 주 대각 원소가 됨 - 행렬 $A$의 주 대각 원소 아래에 위치한 원소를 0으로 만들기 위해 필요한 배수의 음수는 행렬 $L$의 동일한 위치의 원소가 됨 @@ -157,7 +157,7 @@ $$ p, l, u = linalg.lu(a) ``` -위 함수들을 실제로 사용해보면 LU 분해의 결과가 조금 다른 것을 알 수 있는데, LU 분해는 그 자체로 의미가 있기 보다는 [하 삼각 행렬과 상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6)로 분해한 후의 활용이 중요하기 때문에 $A = LU$의 검산만 맞으면 결과는 상관 없다. +위 함수들을 실제로 사용해보면 LU 분해의 결과가 조금 다른 것을 알 수 있는데, LU 분해는 그 자체로 의미가 있기 보다는 [하 삼각 행렬과 상 삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬)로 분해한 후의 활용이 중요하기 때문에 $A = LU$의 검산만 맞으면 결과는 상관 없다. ## 3. LU 분해를 통한 선형 시스템의 풀이 diff --git a/docs/blog/posts/2022-07-31-date_modeling.md b/docs/blog/posts/2022-07-31-date_modeling.md index f63e6551..183ace56 100644 --- a/docs/blog/posts/2022-07-31-date_modeling.md +++ b/docs/blog/posts/2022-07-31-date_modeling.md @@ -97,7 +97,7 @@ tags: ## 5. 데이터 모델링의 요소 -데이터 모델링은 [엔티티(Entity)](2022-08-06-entity_relationship_model.md/#1), [속성(Attribute)](2022-08-06-entity_relationship_model.md/#2), [관계(Relationship)](2022-08-06-entity_relationship_model.md/#3)의 3요소로 구성됨 +데이터 모델링은 [엔티티(Entity)](2022-08-06-entity_relationship_model.md/#1-엔티티), [속성(Attribute)](2022-08-06-entity_relationship_model.md/#2-속성), [관계(Relationship)](2022-08-06-entity_relationship_model.md/#3-관계)의 3요소로 구성됨 ## 6. E-R Model diff --git a/docs/blog/posts/2022-08-07-database_normalization.md b/docs/blog/posts/2022-08-07-database_normalization.md index ceb6e465..1ffe1688 100644 --- a/docs/blog/posts/2022-08-07-database_normalization.md +++ b/docs/blog/posts/2022-08-07-database_normalization.md @@ -104,13 +104,13 @@ tags: **테이블 반정규화**는 아래와 같다. - 테이블 병합 - - 1:1 관계 테이블 병합, 1:M 관계 테이블 병합, [슈퍼타입/서브타입](2022-08-08-database_architecture.md/#2-1) 테이블 병합 + - 1:1 관계 테이블 병합, 1:M 관계 테이블 병합, [슈퍼타입/서브타입](2022-08-08-database_architecture.md/#2-1-슈퍼서브타입-모델) 테이블 병합 - 테이블 분할 - 수직 분할: 칼럼 단위 분할, [트랜잭션](2022-08-11-relational_database.md/#4-tcl) 처리 유형 파악 선행 필수 - 수평 분할: 로우 단위 분할 - 테이블 추가 - 중복 테이블 추가: 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인 제거 - - 통계 테이블 추가: [집계 함수](2022-08-13-sql_where_groupby.md/#3-1)를 미리 계산하여 저장 + - 통계 테이블 추가: [집계 함수](2022-08-13-sql_where_groupby.md/#3-1-집계-함수)를 미리 계산하여 저장 - 이력 테이블 추가 - 부분 테이블 추가: 전체 칼럼 중 이용도가 높은 칼럼을 모은 별도의 테이블 추가 diff --git a/docs/blog/posts/2022-08-11-relational_database.md b/docs/blog/posts/2022-08-11-relational_database.md index deeacc14..53dd83aa 100644 --- a/docs/blog/posts/2022-08-11-relational_database.md +++ b/docs/blog/posts/2022-08-11-relational_database.md @@ -40,7 +40,7 @@ SQL 기본: 관계형 데이터베이스, DDL, DML, TCL, DCL **테이블(Table)**은 데이터를 저장하는 객체(Object)로, 관계형 데이터베이스의 기본 단위이다. 테이블의 열을 칼럼(Column), 가로 방향을 행(Row)이라고 하고, 열과 행이 겹치는 하나의 공간을 필드(Field)라고 한다. -테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것을 [정규화(Normalization)](2022-08-07-database_normalization.md/#2)라고 한다. 정규화(Normalization)를 통해 데이터의 정합성을 확보하고, 데이터 입력/수정/삭제 시 발생할 수 있는 이상 현상(Anomaly)을 방지할 수 있다. +테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것을 [정규화(Normalization)](2022-08-07-database_normalization.md/#2-정규화)라고 한다. 정규화(Normalization)를 통해 데이터의 정합성을 확보하고, 데이터 입력/수정/삭제 시 발생할 수 있는 이상 현상(Anomaly)을 방지할 수 있다. 테이블의 각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼을 **기본키(Primary Key, PK)**라고 하며, 다른 테이블의 기본 키로 사용되면서 테이블과의 관계를 연결하는 역할을 하는 칼럼을 **외부키(Foreign Key, FK)**라고 한다. @@ -465,7 +465,7 @@ DROP USER ID CASCADE; ### 5-3. 사용자 권한 관리 -사용자는 [DDL](#2-ddl) 문장은 그에 해당하는 **시스템 권한(System Privilege)**, 객체에 대한 명령어는 **오브젝트 권한(Object Privilege)**을 [`GRANT`](#5-1)를 통해 부여받아야만 SQL문을 실행할 수 있다. Oracle과 MSSQL에서 사용자의 권한을 편하게 관리하는 방법은 다음과 같다. +사용자는 [DDL](#2-ddl) 문장은 그에 해당하는 **시스템 권한(System Privilege)**, 객체에 대한 명령어는 **오브젝트 권한(Object Privilege)**을 [`GRANT`](#5-1-유저와-권한)를 통해 부여받아야만 SQL문을 실행할 수 있다. Oracle과 MSSQL에서 사용자의 권한을 편하게 관리하는 방법은 다음과 같다. #### Role을 이용한 권한 부여 diff --git a/docs/blog/posts/2022-08-13-sql_where_groupby.md b/docs/blog/posts/2022-08-13-sql_where_groupby.md index 59699117..aaac255c 100644 --- a/docs/blog/posts/2022-08-13-sql_where_groupby.md +++ b/docs/blog/posts/2022-08-13-sql_where_groupby.md @@ -111,15 +111,15 @@ SELECT TOP(4) WITH TIES job, deptno FROM emp ORDER BY job, deptno; 함수는 크게 **내장 함수(Builtin Function)**와 **사용자 정의 함수(User Defined Function)**로 나뉘며, 내장 함수의 종류는 다음과 같다. - 단일행 함수(Single-Row Function) - - [문자형 함수](#2-1) - - [숫자형 함수](#2-2) - - [날짜형 함수](#2-3) - - [변환형 함수](#2-4) - - [NULL 관련 함수](#2-6-null) + - [문자형 함수](#2-1-문자형-함수) + - [숫자형 함수](#2-2-숫자형-함수) + - [날짜형 함수](#2-3-날짜형-함수) + - [변환형 함수](#2-4-변환형-함수) + - [NULL 관련 함수](#2-6-null-관련-함수) - 다중행 함수(Multi-Row Function) - - [집계 함수(Aggregate Function)](#3-1) - - [그룹 함수(Group Function)](2022-08-18-sql_group_window_function.md/#2) - - [윈도우 함수(Window Function)](2022-08-18-sql_group_window_function.md/#3) + - [집계 함수(Aggregate Function)](#3-1-집계-함수) + - [그룹 함수(Group Function)](2022-08-18-sql_group_window_function.md/#2-그룹-함수) + - [윈도우 함수(Window Function)](2022-08-18-sql_group_window_function.md/#3-윈도우-함수) 단일행 함수(Single-Row Function)의 주요 특징은 다음과 같다. @@ -141,7 +141,7 @@ SELECT TOP(4) WITH TIES job, deptno FROM emp ORDER BY job, deptno; - `CHR/CHAR(ASCII)` - ASCII 코드를 문자로 변경 - `CONCAT('str1', 'str2')` - - 'str1'과 'str2'을 연결. [합성연산자](2022-08-11-relational_database.md/#3-5)와 동일 + - 'str1'과 'str2'을 연결. [합성연산자](2022-08-11-relational_database.md/#3-5-연산자)와 동일 - `SUBSTR/SUBSTRING('str', m, n)` - 문자열의 m 위치에서 n개의 문자 길이에 해당하는 문자를 반환. n이 생략되면 마지막 문자까지 반환 - `LENGTH/LEN('str')` @@ -315,7 +315,7 @@ ORDER BY expression1 ASC/DESC expression2; !!! tip Oracle은 `NULL`값을 가장 큰 값으로 취급하는 반면, MSSQL은 가장 작은 값으로 취급한다. -Oracle의 경우 데이터에 접근할 때 행 전체 칼럼을 메모리에 로드하기 때문에 `SELECT`절에 지정되지 않은 칼럼으로도 정렬이 가능하나, `FROM`절이 [서브쿼리](2022-08-17-sql_subquery_view.md/#1-3) 형태로 되어있을 경우(인라인 뷰)에는 불가능하다는 특징이 있다. +Oracle의 경우 데이터에 접근할 때 행 전체 칼럼을 메모리에 로드하기 때문에 `SELECT`절에 지정되지 않은 칼럼으로도 정렬이 가능하나, `FROM`절이 [서브쿼리](2022-08-17-sql_subquery_view.md/#1-3-위치에-따른-서브쿼리-분류) 형태로 되어있을 경우(인라인 뷰)에는 불가능하다는 특징이 있다. ## 5. SQL문 실행 순서 diff --git a/docs/blog/posts/2022-08-18-sql_group_window_function.md b/docs/blog/posts/2022-08-18-sql_group_window_function.md index 328aa48e..a78efb6a 100644 --- a/docs/blog/posts/2022-08-18-sql_group_window_function.md +++ b/docs/blog/posts/2022-08-18-sql_group_window_function.md @@ -23,9 +23,9 @@ SQL 활용: 그룹 함수, 윈도우 함수 ANSI/ISO SQL 표준은 데이터 분석을 위한 세 가지 종류의 함수를 정의하고 있다. -- [집계 함수(Aggregate Function)](2022-08-13-sql_where_groupby.md/#3-1) -- [그룹 함수(Group Function)](#2) -- [윈도우 함수(Window Function)](#3) +- [집계 함수(Aggregate Function)](2022-08-13-sql_where_groupby.md/#3-1-집계-함수) +- [그룹 함수(Group Function)](#2-그룹-함수) +- [윈도우 함수(Window Function)](#3-윈도우-함수) ## 2. 그룹 함수 @@ -71,7 +71,7 @@ FROM table_name; ### 3-2. 일반 집계 함수 -`GROUP BY`절의 [집계 함수](2022-08-13-sql_where_groupby.md/#3-1)와 동일하게 집계 연산을 수행하며, 종류는 다음과 같다. +`GROUP BY`절의 [집계 함수](2022-08-13-sql_where_groupby.md/#3-1-집계-함수)와 동일하게 집계 연산을 수행하며, 종류는 다음과 같다. - `SUM()`/`AVG()` - `MIN()`/`MAX()` diff --git a/docs/blog/posts/2022-08-19-sql_procedure.md b/docs/blog/posts/2022-08-19-sql_procedure.md index 86b3f83c..5f3b598f 100644 --- a/docs/blog/posts/2022-08-19-sql_procedure.md +++ b/docs/blog/posts/2022-08-19-sql_procedure.md @@ -23,7 +23,7 @@ SQL 활용: 절차형 SQL 절차형 SQL이란 일반적인 프로그래밍 언어 형식과 같이 절차적으로 명령을 수행하는 SQL문으로, 데이터에 대한 접근방식을 명시하는 SQL이다. -절차적 SQL을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 **저장 모듈(Stored Module)**을 생성할 수 있다. **저장 모듈(Stored Module)**은 SQL문을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램으로, 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램이다. 저장 모듈의 종류에는 [프로시저](#2), [사용자 정의 함수](#3), [트리거](#4)가 있다. +절차적 SQL을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 **저장 모듈(Stored Module)**을 생성할 수 있다. **저장 모듈(Stored Module)**은 SQL문을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램으로, 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램이다. 저장 모듈의 종류에는 [프로시저](#2-프로시저), [사용자 정의 함수](#3-사용자-정의-함수), [트리거](#4-트리거)가 있다. ## 2. 프로시저 diff --git a/docs/blog/posts/2022-09-30-django_template.md b/docs/blog/posts/2022-09-30-django_template.md index d9fc5d02..38f50d62 100644 --- a/docs/blog/posts/2022-09-30-django_template.md +++ b/docs/blog/posts/2022-09-30-django_template.md @@ -116,7 +116,7 @@ urlpatterns = [ {% endif %} ``` -`{% url [URL_name] %}` 태그는 [URL 매핑](#2-2-url)을 사용할 수 있도록 해준다. 자세한 내용은 [공식 문서](https://docs.djangoproject.com/en/4.1/intro/tutorial03/#removing-hardcoded-urls-in-templates)를 참고하자. +`{% url [URL_name] %}` 태그는 [URL 매핑](#2-2-url-매핑)을 사용할 수 있도록 해준다. 자세한 내용은 [공식 문서](https://docs.djangoproject.com/en/4.1/intro/tutorial03/#removing-hardcoded-urls-in-templates)를 참고하자. `templates/board_qna` 폴더에 `question_detail.html` 파일을 아래와 같이 생성해준다. diff --git a/docs/blog/posts/2022-10-01-django_mtv.md b/docs/blog/posts/2022-10-01-django_mtv.md index 2faa82ba..c0ed0a27 100644 --- a/docs/blog/posts/2022-10-01-django_mtv.md +++ b/docs/blog/posts/2022-10-01-django_mtv.md @@ -25,7 +25,7 @@ MVC(Model, View, Controller)와 MTV(Model, Template, View) 각각의 요소는 - Model - 모델은 데이터 모델을 가리키는 말로, 데이터베이스에 저장된 데이터를 가리킨다. - - [App과 ORM](2022-09-27-django_app_orm.md) 단계에서 생성한 [모델](2022-09-27-django_app_orm.md/#2-3-model)이 해당된다. + - [App과 ORM](2022-09-27-django_app_orm.md) 단계에서 생성한 [모델](2022-09-27-django_app_orm.md/#2-3-model-생성)이 해당된다. - View/Template - 뷰는 사용자에게 보여주는 화면과 정보를 가리키는 말로, 웹개발 관점에서는 프론트엔드를 가리킨다. - Django에서는 뷰 대신에 HTML 템플릿이라고 부른다. diff --git a/docs/blog/posts/2022-12-18-univariate_data.md b/docs/blog/posts/2022-12-18-univariate_data.md index a26c339b..aedd12ab 100644 --- a/docs/blog/posts/2022-12-18-univariate_data.md +++ b/docs/blog/posts/2022-12-18-univariate_data.md @@ -282,7 +282,7 @@ $$ SciPy의 경우, 이론대로 일정 비율에 따라 데이터를 잘라낸다. [공식 문서](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.trim_mean.html)에 따르면 절사할 숫자가 정수가 아닐 경우 소수점을 버린다고 한다. !!! info - 참고로 하위 $\alpha$%에 해당하는 값을 $\alpha$ 백분위수(percentile)라고 하며, $p = \alpha / 100$일 때, $p$ [분위수(quantile)](#2-2)이라고 말한다. + 참고로 하위 $\alpha$%에 해당하는 값을 $\alpha$ 백분위수(percentile)라고 하며, $p = \alpha / 100$일 때, $p$ [분위수(quantile)](#2-2-사분위(간)-범위)이라고 말한다. ### 1-2. 표본중앙값 @@ -415,7 +415,7 @@ $$ 자료를 아래와 같이 동일한 비율로 4등분 할 때의 세 위치를 **사분위수(quartile)**라하고, 사분위수를 활용한 산포 범위 계산을 **사분위(간) 범위(interquartile range, IQR)**라 한다. - 25% 지점: 제1사분위수($Q_{1}$) -- 50% 지점: 제2사분위수($Q_{2}$), [표본중앙값](#1-2)과 동일 +- 50% 지점: 제2사분위수($Q_{2}$), [표본중앙값](#1-2-표본중앙값)과 동일 - 75% 지점: 제3사분위수($Q_{3}$) 사분위(간) 범위는 아래와 같다. @@ -495,7 +495,7 @@ D(a, b) = \vert a - b \vert, \quad D(a, b) = (a - b)^{2} $$ !!! info - $D(a, b) = (a - b)^{2}$ 이 성립하는 이유는, 여기서 말하는 **거리**가 벡터의 크기([norm](2022-06-05-linear_algebra_inner_product_norm.md/#2-norm))를 의미하는 것이 아니기 때문이다. 데이터의 산포를 수학적으로 계산하기 위해서 **거리**를 사용할 때, 큰 것은 크게 작은 것은 작게 계산되는 부분에 변동이 없다면 제곱근을 하나 줄여 계산을 간결하게 하는 것이 더 좋다. + $D(a, b) = (a - b)^{2}$ 이 성립하는 이유는, 여기서 말하는 **거리**가 벡터의 크기([norm](2022-06-05-linear_algebra_inner_product_norm.md/#2-노름norm))를 의미하는 것이 아니기 때문이다. 데이터의 산포를 수학적으로 계산하기 위해서 **거리**를 사용할 때, 큰 것은 크게 작은 것은 작게 계산되는 부분에 변동이 없다면 제곱근을 하나 줄여 계산을 간결하게 하는 것이 더 좋다. 따라서 위 정리를 바탕으로 모든 관측값들 간 거리의 합을 표현하면 아래와 같다. @@ -511,8 +511,8 @@ $$ 이 때, $a$의 적절한 위치, 즉 자료를 가장 잘 대표할 수 있는 중심경향치는 **거리의 합을 최소화** 하는(편차의 합이 0인) 지점으로, 아래와 같이 정리할 수 있다. -- $L_{1}(a)$의 경우 [표본중앙값](#1-2)($a = \widetilde{x}$)에서 최소화된다. -- $L_{2}(a)$의 경우 [표본평균](#1-1)($a = \overline{x}$)에서 최소화되며, $L_{2}(a)$를 $a$에 대해 미분한 미분계수가 0이 되는$$a$ 값이 거리의 합이 최소화 되는 지점이기 때문에 아래와 같이 유도할 수 있다. +- $L_{1}(a)$의 경우 [표본중앙값](#1-2-표본중앙값)($a = \widetilde{x}$)에서 최소화된다. +- $L_{2}(a)$의 경우 [표본평균](#1-1-평균)($a = \overline{x}$)에서 최소화되며, $L_{2}(a)$를 $a$에 대해 미분한 미분계수가 0이 되는$$a$ 값이 거리의 합이 최소화 되는 지점이기 때문에 아래와 같이 유도할 수 있다. $$ \begin{gathered} diff --git a/docs/blog/posts/2022-12-23-multivariate_data.md b/docs/blog/posts/2022-12-23-multivariate_data.md index 26d5c76e..a8b2b0e8 100644 --- a/docs/blog/posts/2022-12-23-multivariate_data.md +++ b/docs/blog/posts/2022-12-23-multivariate_data.md @@ -33,7 +33,7 @@ tags: ### 2-1. 표본공분산 -**표본공분산(sample covariance)**은 아래 수식에서 볼 수 있듯이 [분산](2022-12-18-univariate_data.md/#_7) 형태의 구조를 파악하지만 하나의 변수가 아닌 두 변수를 동시에 고려하기 때문에 공분산이라고 부르며, 양수/음수일 경우 양/음의 기울기인 선분에 자료가 모여있는 것을 뜻한다. +**표본공분산(sample covariance)**은 아래 수식에서 볼 수 있듯이 [분산](2022-12-18-univariate_data.md/#표본분산) 형태의 구조를 파악하지만 하나의 변수가 아닌 두 변수를 동시에 고려하기 때문에 공분산이라고 부르며, 양수/음수일 경우 양/음의 기울기인 선분에 자료가 모여있는 것을 뜻한다. $$ c_{x, y} = \frac{1}{n - 1}\sum_{i=1}^{n}(x_{i} - \overline{x})(y_{i} - \overline{y}) @@ -84,9 +84,9 @@ $$ ### 2-2. 표본상관계수 -표본공분산은 측정 단위의 영향을 받아 그 값 자체로는 선형 관계의 정도를 알 수 없기 때문에, 이를 보정하기 위해 자료들을 [표준화](2022-12-18-univariate_data.md/#_9)하여 계산하는 **표본상관계수(coefficient of correlation)**를 사용한다. [칼 피어슨](https://en.wikipedia.org/wiki/Karl_Pearson)이 제시하였기 때문에 **피어슨 상관계수(Pearson's r)** 등으로 부르기도 한다. +표본공분산은 측정 단위의 영향을 받아 그 값 자체로는 선형 관계의 정도를 알 수 없기 때문에, 이를 보정하기 위해 자료들을 [표준화](2022-12-18-univariate_data.md/#표준화)하여 계산하는 **표본상관계수(coefficient of correlation)**를 사용한다. [칼 피어슨](https://en.wikipedia.org/wiki/Karl_Pearson)이 제시하였기 때문에 **피어슨 상관계수(Pearson's r)** 등으로 부르기도 한다. -표본상관계수는 아래와 같이 [분산](2022-12-18-univariate_data.md/#_7)을 이용해서 구할 수 있다. +표본상관계수는 아래와 같이 [분산](2022-12-18-univariate_data.md/#표본분산)을 이용해서 구할 수 있다. $$ \begin{align*} diff --git a/docs/blog/posts/2022-12-24-statistical_probability.md b/docs/blog/posts/2022-12-24-statistical_probability.md index 58d97ca5..bd62d826 100644 --- a/docs/blog/posts/2022-12-24-statistical_probability.md +++ b/docs/blog/posts/2022-12-24-statistical_probability.md @@ -122,7 +122,7 @@ $$ ### 2-3. 조합 -조합은 순서를 고려하지 않는 비복원추출의 경우에 발생하는 경우의 수로, 아래 계산식에서 볼 수 있듯이 [순열](#2-1)의 결과에서 순서로 인해 발생하는 경우의 수를 제외해준다. +조합은 순서를 고려하지 않는 비복원추출의 경우에 발생하는 경우의 수로, 아래 계산식에서 볼 수 있듯이 [순열](#2-1-순열)의 결과에서 순서로 인해 발생하는 경우의 수를 제외해준다. $$ _{n}C_{k} = \binom{n}{k} = \frac{n!}{(n - k)!k!} = \frac{_{n}P_{k}}{k!} @@ -157,7 +157,7 @@ $$ ### 2-4. 중복조합 -중복조합은 순서를 고려하지 않는 복원추출의 경우에 발생하는 경우의 수로, 아래 계산식에서 볼 수 있듯이 개수가 늘어나는 [순열](#2-1)의 결과에서 순서로 인해 발생하는 경우의 수를 제외해준다. +중복조합은 순서를 고려하지 않는 복원추출의 경우에 발생하는 경우의 수로, 아래 계산식에서 볼 수 있듯이 개수가 늘어나는 [순열](#2-1-순열)의 결과에서 순서로 인해 발생하는 경우의 수를 제외해준다. $$ _{n}H_{k} = \left(\!\!{n \choose k}\!\!\right) = \ _{n + k - 1}C_{k} = \binom{n + k - 1}{k} = \frac{(n + k - 1)!}{(n - 1)!k!} = \frac{_{n + k - 1}P_{k}}{k!} diff --git a/docs/blog/posts/2022-12-29-random_variable_probability_distribution.md b/docs/blog/posts/2022-12-29-random_variable_probability_distribution.md index 4fbe2d18..2ec6c066 100644 --- a/docs/blog/posts/2022-12-29-random_variable_probability_distribution.md +++ b/docs/blog/posts/2022-12-29-random_variable_probability_distribution.md @@ -40,7 +40,7 @@ $$ 따라서 확률변수에 대해 $X = x$ 또는 $a \leq X \leq b$ 에 대응하는 확률을 계산할 수 있다. 이 때 확률변수는 숫자로 표시되고 해당 숫자에 대한 확률을 구할 수 있기 때문에 확률변수의 값에 따라 확률이 어떤 형태로 분포되어 있는지를 말할 수 있는데, 이를 **확률분포(probability distribution)**라 하고, 확률분포를 표로 정리한 것을 확률분포표(probability distribution table)라 한다. -[상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3)에 따라 확률은 모집단의 구성 형태를 보여주기 때문에, 확률분포는 모집단을 숫자로 표현했을 때의 형태, 즉 모집단의 확률구조를 보여준다고 볼 수 있다. +[상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3-통계적-확률)에 따라 확률은 모집단의 구성 형태를 보여주기 때문에, 확률분포는 모집단을 숫자로 표현했을 때의 형태, 즉 모집단의 확률구조를 보여준다고 볼 수 있다. ## 2. 이산확률변수와 확률질량함수 @@ -90,7 +90,7 @@ $$ 확률변수가 가질 수 있는 값이 셀 수 없을 정도로 많은 경우에 **연속확률변수(continuous random variable)**라고 하며, 연속확률변수의 확률구조를 **확률밀도함수(probability density function, PDF)**를 통해 나타낼 수 있다. -[히스토그램](2022-12-17-variable_types.md/#4)에서 면적이 해당 구간에서의 비율을 의미하듯이, 확률밀도함수에서의 면적은 해당 구간에서의 확률을 의미하며, $f(x)$는 $x$에서의 확률이 아니라 그 위치에서 상대적으로 얼마나 밀집되어 있는지를 나타낸 것이다. +[히스토그램](2022-12-17-variable_types.md/#4-히스토그램과-막대-그래프의-차이)에서 면적이 해당 구간에서의 비율을 의미하듯이, 확률밀도함수에서의 면적은 해당 구간에서의 확률을 의미하며, $f(x)$는 $x$에서의 확률이 아니라 그 위치에서 상대적으로 얼마나 밀집되어 있는지를 나타낸 것이다. ### 3-1. 확률밀도함수의 성질 @@ -120,7 +120,8 @@ $$ P(X \leq x) = \int_{-\infty}^{x}f(u)du = F(x) $$ -- (주의❗) 연속확률변수에서 $X$가 **구간이 아닌 특정 값**일 확률은 0이다. +!!! warning + 연속확률변수에서 $X$가 **구간이 아닌 특정 값**일 확률은 0이다. $$ \begin{gathered} diff --git a/docs/blog/posts/2022-12-31-expectation_population_variance.md b/docs/blog/posts/2022-12-31-expectation_population_variance.md index 44e730bc..7800f610 100644 --- a/docs/blog/posts/2022-12-31-expectation_population_variance.md +++ b/docs/blog/posts/2022-12-31-expectation_population_variance.md @@ -21,13 +21,13 @@ tags: ## 1. 모평균(기대값) -[표본평균](2022-12-18-univariate_data.md/#1-1)을 [상대도수](2022-12-17-variable_types.md/#2)를 이용한 식으로 표현하면 아래와 같이 관측된 자료의 값에 각 자료가 전체 자료에서 차지하는 비율을 곱하여 더한 것으로 표현할 수 있다. +[표본평균](2022-12-18-univariate_data.md/#표본평균)을 [상대도수](2022-12-17-variable_types.md/#2-범주형-자료와-상대도수)를 이용한 식으로 표현하면 아래와 같이 관측된 자료의 값에 각 자료가 전체 자료에서 차지하는 비율을 곱하여 더한 것으로 표현할 수 있다. $$ \overline{x} = \sum_{i=1}^{n}x_{i} \frac{n_{i}}{n} = \sum_{i=1}^{n}x_{i}p_{i}, \quad p_{i} = \frac{n_{i}}{n} $$ -이 때 $n_{i}$는 도수분포에서 $i$ 번째 값의 개수이고 $p_{i}$는 $i$ 번째 값의 표본비율이므로, [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3)에 따라 위 식에서 $n$이 무한대로 발산하면 모집단에서 각 사건이 발생할 확률이 되어 이를 통해 모평균을 구할 수 있다. 이를 **[큰 수의 법칙(Law of large numbers, LLN)](https://en.wikipedia.org/wiki/Law_of_large_numbers)**이라 한다. +이 때 $n_{i}$는 도수분포에서 $i$ 번째 값의 개수이고 $p_{i}$는 $i$ 번째 값의 표본비율이므로, [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3-통계적-확률)에 따라 위 식에서 $n$이 무한대로 발산하면 모집단에서 각 사건이 발생할 확률이 되어 이를 통해 모평균을 구할 수 있다. 이를 **[큰 수의 법칙(Law of large numbers, LLN)](https://en.wikipedia.org/wiki/Law_of_large_numbers)**이라 한다. $$ \overline{x} = \sum_{i}x_{i}p_{i} \ \to \ \overline{X} = \sum_{i}x_{i}f(x_{i}) = \mu = E(X) @@ -93,19 +93,19 @@ $$ ## 2. 모분산 -[표본분산](2022-12-18-univariate_data.md/#_7)을 [상대도수](2022-12-17-variable_types.md/#2)를 이용한 식으로 표현하면 아래와 같이 표현할 수 있다. +[표본분산](2022-12-18-univariate_data.md/#표본분산)을 [상대도수](2022-12-17-variable_types.md/#2-범주형-자료와-상대도수)를 이용한 식으로 표현하면 아래와 같이 표현할 수 있다. $$ s^{2} = \frac{1}{n - 1}\sum_{i=1}^{k}n_{i}(x_{i} - \overline{x})^{2} = \frac{n}{n - 1}\sum_{i=1}^{k}(x_{i} - \overline{x})^{2}p_{i}, \quad p_{i} = \frac{n_{i}}{n} $$ -모평균과 마찬가지로 [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3)에 따라 위 식에서 $n$이 무한대로 발산하면 모집단에서의 자료의 분포에 대한 정보가 되어 아래와 같이 **모분산(population variance)**에 대한 식을 도출할 수 있다. +모평균과 마찬가지로 [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3-통계적-확률)에 따라 위 식에서 $n$이 무한대로 발산하면 모집단에서의 자료의 분포에 대한 정보가 되어 아래와 같이 **모분산(population variance)**에 대한 식을 도출할 수 있다. $$ s^{2} = \frac{n}{n - 1}\sum_{i=1}^{k}(x_{i} - \overline{x})^{2}p_{i} \ \to \ \sigma^{2} = \sum_{i=1}^{k}(x_{i} - \mu)^{2}f(x_{i}) = Var(x) $$ -모분산은 $X$가 변환된 함수이기 때문에 [변환된 확률변수](#1-1)로 표현할 수 있으며, 따라서 이산확률변수와 연속확률변수의 모분산을 아래와 같이 구할 수 있다. +모분산은 $X$가 변환된 함수이기 때문에 [변환된 확률변수](#1-1-변환된-확률변수의-기대값)로 표현할 수 있으며, 따라서 이산확률변수와 연속확률변수의 모분산을 아래와 같이 구할 수 있다. $$ \begin{align*} diff --git a/docs/blog/posts/2023-01-01-probability_vector_covariance.md b/docs/blog/posts/2023-01-01-probability_vector_covariance.md index c8ffc47b..54e3af66 100644 --- a/docs/blog/posts/2023-01-01-probability_vector_covariance.md +++ b/docs/blog/posts/2023-01-01-probability_vector_covariance.md @@ -41,7 +41,9 @@ $$ - 모든 경우의 수의 확률을 모두 더하면 1이다. -$$\sum_{x}\sum_{y}f(x, y) = 1$$ +$$ +\sum_{x}\sum_{y}f(x, y) = 1 +$$ 연속확률변수의 결합분포에 대한 **결합확률밀도함수(joint probability density function)** $f(x, y)$는 $x, y$에서의 밀도를 나타내며, 그 성질은 다음과 같다. @@ -59,7 +61,7 @@ $$ ### 1-2. 주변분포 -표본공간이 사건 $B_{1}, B_{2}, \cdots, B_{n}$로 [분할](2022-12-25-conditional_probability.md/#2-2)될 때 사건 $A$의 확률은 아래와 같다. +표본공간이 사건 $B_{1}, B_{2}, \cdots, B_{n}$로 [분할](2022-12-25-conditional_probability.md/#2-2-표본공간의-분할과-조건부-확률)될 때 사건 $A$의 확률은 아래와 같다. $$ P(X = x) = P(A) = \sum_{i=1}^{n}P(A \cap B_{i}) = \sum_{i=1}^{n}P(X = x, Y = y_{i}) @@ -130,7 +132,7 @@ $$ ### 2-2. 결합분포의 공분산 -[표본공분산](2022-12-23-multivariate_data.md/#2-1)을 상대도수를 이용한 식으로 표현하면 아래와 같다. +[표본공분산](2022-12-23-multivariate_data.md/#2-1-표본공분산)을 상대도수를 이용한 식으로 표현하면 아래와 같다. $$ \begin{align*} @@ -140,7 +142,7 @@ c_{x, y} & = \frac{1}{n - 1}\sum_{i=1}^{k1}\sum_{j=1}^{k2}n_{ij}(x_{i} - \overli \end{align*} $$ -따라서 위 식에 [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3)을 적용하면 모집단의 공분산은 아래와 같이 표현할 수 있다. +따라서 위 식에 [상대도수의 극한의 개념](2022-12-24-statistical_probability.md/#3-통계적-확률)을 적용하면 모집단의 공분산은 아래와 같이 표현할 수 있다. $$ \begin{align*} @@ -226,7 +228,7 @@ $$ ### 2-4. 결합분포의 상관계수 -[표본상관계수](2022-12-23-multivariate_data.md/#2-2)와 마찬가지로, 모집단에 대한 확률변수의 상관계수도 [표준화](2022-12-18-univariate_data.md/#_9)한 확률변수를 통해 계산한다. +[표본상관계수](2022-12-23-multivariate_data.md/#2-2-표본상관계수)와 마찬가지로, 모집단에 대한 확률변수의 상관계수도 [표준화](2022-12-18-univariate_data.md/#표준화)한 확률변수를 통해 계산한다. $$ \begin{gathered} diff --git a/docs/blog/posts/2023-01-07-discrete_distribution.md b/docs/blog/posts/2023-01-07-discrete_distribution.md index acf5c263..c4885f20 100644 --- a/docs/blog/posts/2023-01-07-discrete_distribution.md +++ b/docs/blog/posts/2023-01-07-discrete_distribution.md @@ -88,7 +88,7 @@ $$ X = X_{1} + X_{2} + \cdots + X_{n} $$ -따라서 [독립인 결합분포의 성질](2023-01-01-probability_vector_covariance.md/#2)을 바탕으로 이항분포의 기대값과 분산을 유도하면 아래와 같다. +따라서 [독립인 결합분포의 성질](2023-01-01-probability_vector_covariance.md/#2-공분산과-상관계수)을 바탕으로 이항분포의 기대값과 분산을 유도하면 아래와 같다. $$ \begin{align*} @@ -281,7 +281,7 @@ NumPy를 사용하면 초기하분포하는 표본을 쉽게 만들 수 있다. ## 4. 포아송 분포 -[이항분포](#2)에서 $n$이 매우 커지면 계산에 어려움이 생기는데, 이를 해결하기 위해 포아송 분포를 사용한다. +[이항분포](#2-이항분포)에서 $n$이 매우 커지면 계산에 어려움이 생기는데, 이를 해결하기 위해 포아송 분포를 사용한다. 확률변수 $X$가 이항분포 $B(n, p)$를 따를 때 $p$가 매우 작으면 큰 $x$에 대한 확률은 무시할 정도로 작아지는데, 이 경우의 확률분포를 **포아송 분포(Poisson distribution)**라 하며 아래와 같이 표기한다. @@ -425,7 +425,7 @@ NumPy를 사용하면 포아송 분포하는 표본을 쉽게 만들 수 있다. ## 5. 기하분포 -성공 확률이 $p$인 [베르누이 시행](#1)을 성공할 때까지 시행하는 경우 실패(시행) 횟수의 분포를 **기하분포(geometric distribution)**라 하고, 아래와 같이 표기한다. +성공 확률이 $p$인 [베르누이 시행](#1-베르누이-분포)을 성공할 때까지 시행하는 경우 실패(시행) 횟수의 분포를 **기하분포(geometric distribution)**라 하고, 아래와 같이 표기한다. $$ X \sim \text{Geo}(p) @@ -539,7 +539,7 @@ $$ Y = X + r $$ -따라서 음이항분포를 시행 횟수 $Y$에 대한 분포로 생각하면 $y - 1$ 번째 까지의 결과는 $r - 1$번 성공하는 [이항분포](#2)와 같고 마지막으로 1번 성공하는 분포이며, 실패 횟수 $X$에 대한 분포로 생각하면 $x + r - 1$ 번째 까지의 결과는 $r - 1$번 성공하고 $x$ 번 실패한 [이항분포](#2)와 같고 마지막으로 1번 성공하는 분포이다. +따라서 음이항분포를 시행 횟수 $Y$에 대한 분포로 생각하면 $y - 1$ 번째 까지의 결과는 $r - 1$번 성공하는 [이항분포](#2-이항분포)와 같고 마지막으로 1번 성공하는 분포이며, 실패 횟수 $X$에 대한 분포로 생각하면 $x + r - 1$ 번째 까지의 결과는 $r - 1$번 성공하고 $x$ 번 실패한 [이항분포](#2-이항분포)와 같고 마지막으로 1번 성공하는 분포이다. 이를 바탕으로 음이항분포의 확률질량함수를 정리하면 각각 아래와 같이 정리할 수 있다. @@ -613,7 +613,7 @@ NumPy를 사용하면 음이항분포하는 표본을 쉽게 만들 수 있다. ## 7. 다항분포 -각 시행에서 발생 가능한 결과가 $k$ 개 일 때, 각 시행에서 $i$ 번째 결과의 확률은 $p_{i}$로 고정이고 각 시행이 독립인 경우의 분포를 **다항분포(multinomial distribution)**라 한다. 즉 [이항분포](#2)에서 발생 가능한 사건의 종류가 $k$개로 늘어난 경우를 말한다. +각 시행에서 발생 가능한 결과가 $k$ 개 일 때, 각 시행에서 $i$ 번째 결과의 확률은 $p_{i}$로 고정이고 각 시행이 독립인 경우의 분포를 **다항분포(multinomial distribution)**라 한다. 즉 [이항분포](#2-이항분포)에서 발생 가능한 사건의 종류가 $k$개로 늘어난 경우를 말한다. 따라서 다항분포는 이항분포가 결합된 확률변수이기 때문에 이항분포의 확률질량함수를 기반으로 다항분포의 확률질량함수를 아래와 같이 정리할 수 있다. @@ -657,7 +657,7 @@ Var(X_{i}) & = np_{i}(1 - p_{i}) \end{align*} $$ -또한 특정 결과들($R_{i} \cup R_{j}$)에 관심이 있는 경우 아래와 같이 이항분포의 [결합분포](2023-01-01-probability_vector_covariance.md/#2)로 다룰 수 있다. +또한 특정 결과들($R_{i} \cup R_{j}$)에 관심이 있는 경우 아래와 같이 이항분포의 [결합분포](2023-01-01-probability_vector_covariance.md/#2-공분산과-상관계수)로 다룰 수 있다. $$ \begin{align*} @@ -693,7 +693,7 @@ $$ Cov(X_{11} + X_{21}, X_{12} + X_{22}) = Cov(X_{11}, X_{12}) + Cov(X_{11}, X_{22}) + Cov(X_{21}, X_{12}) + Cov(X_{21}, X_{22}) $$ - 이 때 별개의 실행인 경우는 독립인 사건이기 때문에 공분산은 0이며 따라서 [이항분포](#2)의 분산과 표준편차를 기반으로 아래와 같이 정리할 수 있다. + 이 때 별개의 실행인 경우는 독립인 사건이기 때문에 공분산은 0이며 따라서 [이항분포](#2-이항분포)의 분산과 표준편차를 기반으로 아래와 같이 정리할 수 있다. $$ \begin{align*} diff --git a/docs/blog/posts/2023-02-15-sampling_distribution.md b/docs/blog/posts/2023-02-15-sampling_distribution.md index b81890a7..85356eb7 100644 --- a/docs/blog/posts/2023-02-15-sampling_distribution.md +++ b/docs/blog/posts/2023-02-15-sampling_distribution.md @@ -54,7 +54,7 @@ $$ ### 1-3. 표본분포 -통계량의 확률분포를 **표본분포(sampling distribution)**라 하며, 통계량의 [표준편차](2022-12-18-univariate_data.md/#_8)($SD$)를 **표준 오차(standard error)**라고 한다. +통계량의 확률분포를 **표본분포(sampling distribution)**라 하며, 통계량의 [표준편차](2022-12-18-univariate_data.md/#표본표준편차)($SD$)를 **표준 오차(standard error)**라고 한다. 표본평균/표본비율, 표본분산/표본표준편차, 극한값 등 다양한 통계량이 있는데, 표본평균을 예로 들면 평균이 $\mu$, 분산이 $\sigma^{2}$인 [정규분포](2023-02-11-normal_distribution.md)에서 $n$개의 확률표본을 추출했을 때 표본평균 $\overline{X}$의 분포는 아래와 같다. @@ -83,7 +83,7 @@ $$ \end{align*} $$ -모집단이 정규분포일 때 통계량 $\overline{X}$을 [표준화](2022-12-18-univariate_data.md/#_9) 하면 아래와 같다. +모집단이 정규분포일 때 통계량 $\overline{X}$을 [표준화](2022-12-18-univariate_data.md/#표준화) 하면 아래와 같다. $$ \begin{gathered} @@ -97,9 +97,9 @@ $$ ### 2-1. 큰 수의 법칙 -위에서 확인했듯이 평균이 $\mu$, 분산이 $\sigma^{2}$인 [정규분포](2023-02-11-normal_distribution.md)에서 $n$개의 확률표본을 추출했을 때 [표본평균](2022-12-18-univariate_data.md/#1-1) $\overline{X}$의 평균과 분산은 각각 $\mu$와 $\sigma^{2}/n$이 된다. 이 때, $n$이 무한대로 발산하면 $\overline{X}$는 $\mu$로 수렴한다. +위에서 확인했듯이 평균이 $\mu$, 분산이 $\sigma^{2}$인 [정규분포](2023-02-11-normal_distribution.md)에서 $n$개의 확률표본을 추출했을 때 [표본평균](2022-12-18-univariate_data.md/#1-1-평균) $\overline{X}$의 평균과 분산은 각각 $\mu$와 $\sigma^{2}/n$이 된다. 이 때, $n$이 무한대로 발산하면 $\overline{X}$는 $\mu$로 수렴한다. -이처럼 표본집단의 크기가 커지면 그 표본평균이 모평균에 가까워지며 결과적으로 [확률분포](2022-12-29-random_variable_probability_distribution.md/#1-1)가 [통계적 확률](2022-12-24-statistical_probability.md/#3)로 수렴하는 것을 큰 수의 법칙이라고 한다. +이처럼 표본집단의 크기가 커지면 그 표본평균이 모평균에 가까워지며 결과적으로 [확률분포](2022-12-29-random_variable_probability_distribution.md/#1-1-확률분포)가 [통계적 확률](2022-12-24-statistical_probability.md/#3-통계적-확률)로 수렴하는 것을 큰 수의 법칙이라고 한다. 이러한 정리가 **큰 수의 법칙(law of large numbers)** 중 하나인 약한 큰 수의 법칙이며 아래와 같이 표현한다. @@ -137,7 +137,7 @@ $$ ### 3-1. 표본평균의 표본분포 -[이항분포](2023-01-07-discrete_distribution.md/#2)의 [표본평균](2022-12-18-univariate_data.md/#1-1)은 각각의 조건에 따라 아래와 같이 근사한다. +[이항분포](2023-01-07-discrete_distribution.md/#2-이항분포)의 [표본평균](2022-12-18-univariate_data.md/#1-1-평균)은 각각의 조건에 따라 아래와 같이 근사한다. - $n$이 크고 $p$가 작은 경우: 포아송 근사 - $n$이 크고 $p$가 큰 경우: 포아송 근사 @@ -200,7 +200,7 @@ $$ ### 3-2. 표본분산의 표본분포 -모집단이 정규분포를 따를 때, [표본분산](2022-12-18-univariate_data.md/#_7)의 표본분포는 자유도가 $n - 1$인 카이제곱분포로 근사한다. +모집단이 정규분포를 따를 때, [표본분산](2022-12-18-univariate_data.md/#표본분산)의 표본분포는 자유도가 $n - 1$인 카이제곱분포로 근사한다. $$ P(X) \simeq \chi_{n - 1}^{2} diff --git a/docs/blog/posts/2023-03-24-encoding_categoric.md b/docs/blog/posts/2023-03-24-encoding_categoric.md index 1610ab28..f3c797d2 100644 --- a/docs/blog/posts/2023-03-24-encoding_categoric.md +++ b/docs/blog/posts/2023-03-24-encoding_categoric.md @@ -21,7 +21,7 @@ tags: 데이터에 대한 수학적 분석을 통해 모델을 만드려면 반드시 모든 데이터가 숫자로 이루어져 있어야 한다. -[pandas를 직접 전처리하거나 NumPy가 제공하는 함수를 사용](2022-01-20-conditional_replace.md)해서 [범주형 자료](2022-12-17-variable_types.md/#1-1)를 수치화하는 전처리 작업을 직접 진행할 수도 있지만, scikit-learn이나 pandas에서 인코딩을 쉽게 할 수 있는 API를 제공하고 있어 정리해둔다. +[pandas를 직접 전처리하거나 NumPy가 제공하는 함수를 사용](2022-01-20-conditional_replace.md)해서 [범주형 자료](2022-12-17-variable_types.md/#1-1-자료의-분류)를 수치화하는 전처리 작업을 직접 진행할 수도 있지만, scikit-learn이나 pandas에서 인코딩을 쉽게 할 수 있는 API를 제공하고 있어 정리해둔다. ## Label 인코딩 diff --git a/docs/blog/posts/2023-03-26-baekjoon_2480.md b/docs/blog/posts/2023-03-26-baekjoon_2480.md index bd02cde2..7c5054a8 100644 --- a/docs/blog/posts/2023-03-26-baekjoon_2480.md +++ b/docs/blog/posts/2023-03-26-baekjoon_2480.md @@ -23,7 +23,7 @@ tags: --- -각각의 조건을 직접 비교해주는 방법도 있지만, 아래와 같이 [상대도수](2022-12-17-variable_types.md/#2) 개념을 사용한다면 조금 더 재미있게 해결할 수 있다. +각각의 조건을 직접 비교해주는 방법도 있지만, 아래와 같이 [상대도수](2022-12-17-variable_types.md/#2-범주형 자료와-상대도수) 개념을 사용한다면 조금 더 재미있게 해결할 수 있다. ```python d = [int(x) for x in input().split()] diff --git a/docs/blog/posts/2023-04-22-fastapi_architecture.md b/docs/blog/posts/2023-04-22-fastapi_architecture.md index 167b41da..0f8ef77a 100644 --- a/docs/blog/posts/2023-04-22-fastapi_architecture.md +++ b/docs/blog/posts/2023-04-22-fastapi_architecture.md @@ -122,7 +122,7 @@ WSGI는 기본적으로 request와 response로 이루어지는 동기 처리 방 ### 2-3. Gunicorn, Uvicorn -FastAPI 기반 백엔드 서버는 [그림에 표현된 것](#2)과 같이 Gunicorn과 Uvicorn을 동시에 사용한다. +FastAPI 기반 백엔드 서버는 [그림에 표현된 것](#2-아키텍처)과 같이 Gunicorn과 Uvicorn을 동시에 사용한다. 이 때 Gunicorn은 프로세스 매니저로서 서버에서 Master 프로세스의 역할을 하고 Worker 프로세스인 Uvicorn 프로세스를 여러 개 실행해서 관리하며, 웹 서버를 통해 브라우저의 요청이 들어오면 Uvicorn 프로세스를 통해 해당 요청을 처리한다. diff --git a/docs/blog/posts/2023-08-01-baekjoon_2738.md b/docs/blog/posts/2023-08-01-baekjoon_2738.md index be4bee86..5d753185 100644 --- a/docs/blog/posts/2023-08-01-baekjoon_2738.md +++ b/docs/blog/posts/2023-08-01-baekjoon_2738.md @@ -17,7 +17,7 @@ N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프 --- -선형대수를 공부하면서 만들었던 [아래 함수](2022-05-01-linear_algebra_vector_scalar.md/#_1)를 이용하면 여러 행렬의 합을 쉽게 구할 수 있다. +선형대수를 공부하면서 만들었던 [아래 함수](2022-05-01-linear_algebra_vector_scalar.md/#덧셈과-뺄셈)를 이용하면 여러 행렬의 합을 쉽게 구할 수 있다. ```python def add(*a): diff --git a/docs/blog/posts/2023-08-11-baekjoon_2798.md b/docs/blog/posts/2023-08-11-baekjoon_2798.md index e40c71c4..fe79061e 100644 --- a/docs/blog/posts/2023-08-11-baekjoon_2798.md +++ b/docs/blog/posts/2023-08-11-baekjoon_2798.md @@ -17,7 +17,7 @@ N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으 --- -[경우의 수](2022-12-24-statistical_probability.md/#2)를 다룰 때 나오는 [조합](2022-12-24-statistical_probability.md/#2-3)에 대한 문제로, 아래와 같이 모든 경우의 수를 찾아낸 후 조건에 맞게 결과를 출력해주면 된다. +[경우의 수](2022-12-24-statistical_probability.md/#2-경우의-수)를 다룰 때 나오는 [조합](2022-12-24-statistical_probability.md/#2-3-조합)에 대한 문제로, 아래와 같이 모든 경우의 수를 찾아낸 후 조건에 맞게 결과를 출력해주면 된다. ```python (n, m), l = ([int(x) for x in input().split()] for _ in range(2)) @@ -34,7 +34,7 @@ print( ) ``` -Python에는 [조합](2022-12-24-statistical_probability.md/#2-3)을 위한 내장 클래스 `combinations`가 있다. `combinations`를 사용하면 아래와 같이 간결하게 만들 수 있다. +Python에는 [조합](2022-12-24-statistical_probability.md/#2-3-조합)을 위한 내장 클래스 `combinations`가 있다. `combinations`를 사용하면 아래와 같이 간결하게 만들 수 있다. ```python from itertools import combinations diff --git a/docs/blog/posts/2024-01-29-python_getter_setter.md b/docs/blog/posts/2024-01-29-python_getter_setter.md index 0ea3cb55..e13200fa 100644 --- a/docs/blog/posts/2024-01-29-python_getter_setter.md +++ b/docs/blog/posts/2024-01-29-python_getter_setter.md @@ -55,7 +55,7 @@ mc = MyClass() mc.a = 1 ``` -아래와 같이 [name mangling](2024-01-28-access_modifier.md/#python)을 통해 private화 된 요소를 호출할 수 있다. +아래와 같이 [name mangling](2024-01-28-access_modifier.md/#python의-접근제한자)을 통해 private화 된 요소를 호출할 수 있다. ```python print(f"{mc.a=}") diff --git a/docs/blog/posts/2024-02-18-css_specificity.md b/docs/blog/posts/2024-02-18-css_specificity.md index 05f1a8f8..58513833 100644 --- a/docs/blog/posts/2024-02-18-css_specificity.md +++ b/docs/blog/posts/2024-02-18-css_specificity.md @@ -44,7 +44,7 @@ CSS 적용 우선순위는 MDN Web Docs의 [Specificity](https://developer.mozil ``` 1. Classes, pseudo-classes, attribute selectors - - 클래스, [가상 클래스](2024-02-11-css_selector.md/#_3), 속성 선택자로 지정한 경우 + - 클래스, [가상 클래스](2024-02-11-css_selector.md/#가상-클래스-선택자), 속성 선택자로 지정한 경우 ```css .intro { @@ -53,7 +53,7 @@ CSS 적용 우선순위는 MDN Web Docs의 [Specificity](https://developer.mozil ``` 1. Elements and pseudo-elements - - 태그, [가상 태그](2024-02-11-css_selector.md/#_4)로 지정한 경우 + - 태그, [가상 태그](2024-02-11-css_selector.md/#가상-태그-선택자)로 지정한 경우 ```css p { diff --git a/mkdocs.yml b/mkdocs.yml index b1e1f650..f7dca4fd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,6 +16,9 @@ markdown_extensions: - toc: permalink: true permalink_title: Anchor link to this section for reference + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower - admonition - abbr - footnotes From ff9424791855c918c52770820c8d85628a351429 Mon Sep 17 00:00:00 2001 From: "Jay.D" Date: Sat, 16 Mar 2024 22:33:12 +0900 Subject: [PATCH 3/3] update count_runtime add details about using timeit package --- docs/blog/posts/2022-01-08-count_runtime.md | 44 ++++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/blog/posts/2022-01-08-count_runtime.md b/docs/blog/posts/2022-01-08-count_runtime.md index fd721ef6..d1b2f572 100644 --- a/docs/blog/posts/2022-01-08-count_runtime.md +++ b/docs/blog/posts/2022-01-08-count_runtime.md @@ -73,7 +73,47 @@ with cal_time("test"): test: 0:00:01.013775 ``` +## 4. timeit 사용 + +Python의 표준 라이브러리 중 `timeit` 패키지를 사용하면 코드의 실행 시간을 측정할 수 있다. + +```python +import timeit + +SETUP_CODE = """ +import statistics + +import numpy as np + +DATA_LIST = [i for i in range(int(1e3))] +DATA_ARRAY = np.array(DATA_LIST) +""" + +STD_MEAN_WITH_LIST = """statistics.mean(DATA_LIST)""" +STD_MEAN_WITH_ARRAY = """statistics.mean(DATA_ARRAY)""" +NP_MEAN_WITH_LIST = """np.mean(DATA_LIST)""" +NP_MEAN_WITH_ARRAY = """np.mean(DATA_ARRAY)""" + + +def main(): + print(timeit.timeit(stmt=STD_MEAN_WITH_LIST, setup=SETUP_CODE)) + print(timeit.timeit(stmt=STD_MEAN_WITH_ARRAY, setup=SETUP_CODE)) + print(timeit.timeit(stmt=NP_MEAN_WITH_LIST, setup=SETUP_CODE)) + print(timeit.timeit(stmt=NP_MEAN_WITH_ARRAY, setup=SETUP_CODE)) + + +if __name__ == "__main__": + main() +``` +``` +142.78164129995275 +586.6689014999429 +35.12082770001143 +3.3709149999776855 +``` + --- ## Reference -- [Python Documentation: time — 시간 액세스와 변환](https://docs.python.org/ko/3/library/time.html)([영문](https://docs.python.org/3/library/time.html)) -- [Python Documentation: datetime — 기본 날짜와 시간 형](https://docs.python.org/ko/3/library/datetime.html)([영문](https://docs.python.org/3/library/datetime.html)) \ No newline at end of file +- [time — Time access and conversions](https://docs.python.org/3/library/time.html) +- [datetime — Basic date and time types](https://docs.python.org/3/library/datetime.html) +- [timeit — Measure execution time of small code snippets](https://docs.python.org/3/library/timeit.html) \ No newline at end of file