<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>venv_cinnamon.log</title>
        <link>https://velog.io/</link>
        <description>backend</description>
        <lastBuildDate>Mon, 29 Jul 2024 09:48:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. venv_cinnamon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/venv_cinnamon" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Poetry 프로젝트 만들어보기]]></title>
            <link>https://velog.io/@venv_cinnamon/Poetry-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@venv_cinnamon/Poetry-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Mon, 29 Jul 2024 09:48:10 GMT</pubDate>
            <description><![CDATA[<h2 id="poetry-프로젝트-만들기">Poetry 프로젝트 만들기</h2>
<h3 id="vs-code에-프로젝트-생성하기">VS Code에 프로젝트 생성하기</h3>
<p>일단 VS Code를 설치하고, VS Code에 Python 확장기능을 설치해준 다음이다.
좌측 툴바에서 Explorer을 선택하고 Workspace로 쓸 경로를 열어준다.
데모를 만들기 위해 새로운 폴더를 하나 생성하고 폴더에서 오른쪽 버튼을 눌러 터미널을 열어준다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/fd1e798c-dce6-4378-b17b-fdbf68b38f5f/image.png" alt="">
터미널에서 초기화를 위해 init 명령어를 수행하면, pyproject.toml 생성하는 절차를 수행하게 된다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/4a851f97-d11c-4991-ba46-ac0cec18e441/image.png" alt="">
위 사진에서 보이는 Generated file의 형태대로 pyproject.toml 파일이 생성됨을 확인할 수 있다.
이제 테스트를 위한 파일을 하나 작성해보자.
app 폴더를 생성해준 후 main.py 파일을 만들어보자.</p>
<pre><code class="language-python">def main():
    print(&quot;Hello, World!&quot;)

if __name__ == &quot;__main__&quot;:
    main()</code></pre>
<p>그리고 터미널에서 run을 하면 출력되는 것을 확인할 수 있다.</p>
<pre><code>PS C:\workspace\python_project\poetry-my-demo&gt; poetry run python ./app/main.py
Hello, World!</code></pre><h3 id="poetry에-fastapi-사용-설정하기">Poetry에 FastAPI 사용 설정하기</h3>
<p>fastapi를 이용한 웹서버 구축을 위해 프로젝트를 설정해보자.
일단 fastapi 모듈을 추가해줘야 한다.
간단하게 poetry add 명령어를 이용할 수 있다.</p>
<pre><code>poetry add fastapi uvicorn</code></pre><p>이렇게 하면 pyproject.toml에 fastapi, uvicorn의 dependency가 추가된 것을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/a3a4de18-81f3-4c45-801a-1ced833497ae/image.png" alt="">
아까 작성한 main.py 파일의 내용을 바꿔서 fastapi가 구동되도록 해보자.</p>
<pre><code class="language-python">from fastapi import FastAPI

app = FastAPI()

@app.get(&quot;/&quot;)
def read_root():
    return {&quot;Hello&quot;: &quot;World&quot;}

@app.get(&quot;/items/{item_id}&quot;)
def read_item(item_id: int, q: str = None):
    return {&quot;item_id&quot;: item_id, &quot;q&quot;: q}</code></pre>
<p>터미널에서 아래 명령어로 실행해준다.</p>
<pre><code class="language-sh">poetry run uvicorn app.main:app</code></pre>
<p><img src="https://velog.velcdn.com/images/venv_cinnamon/post/eeb91cc8-fe66-4417-a475-448626ae2d50/image.png" alt="">
postman으로 단순하게 호출해보면 Hello World가 응답됨을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/fde6086e-55b4-42ca-b4bd-d383570165e9/image.png" alt=""></p>
<h3 id="debug-모드로-띄워보기">Debug 모드로 띄워보기</h3>
<p>poetry로 프로젝트를 구축하게 되면, vscode에서 파이썬 인터프리터를 잘 잡지 못하는 경우가 있다.
나는 지금 fastapi를 설치 했는데, vscode에서 기본으로 잡히는 인터프리터는 내 pc에 깔려있는 파이썬을 바라보고 있기 때문에 fastapi 라는 모듈이 없다는 에러를 뱉는다.
이런 문제가 발생한다면, poetry가 가상환경을 프로젝트 내부에 잡도록 설정을 바꿔주고 프로젝트의 파이썬 인터프리터를 venv 폴더로 바라보게끔 해주면 된다.
터미널에서 아래와 같이 poetry 설정을 변경해주고 vscode를 재시작한다.</p>
<pre><code>poetry config virtualenvs.in-project true
poetry config virtualenvs.path &quot;./.venv&quot;
poetry install &amp;&amp; poetry update</code></pre><p>그리고 F1 키를 눌러 Python: Select Interpreter를 선택해서 프로젝트 폴더에 구성된 가상환경으로 잡아준다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/a38163cd-7a3c-4d98-8af3-a205de03cb7d/image.png" alt="">
이렇게 하고 run and debug에서 Python Debugger를 선택해준다. FastAPI로 선택하면 알아서 잘 된다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/21609b59-97c9-4ea8-a349-09dc6f527840/image.png" alt="">
이렇게 하면 디버그 모드로 서버가 구동되고, 브레이크 포인트를 하나 잡은 다음 호출해주면 디버그 모드로 잘 진입하는 것을 볼 수 있다.
<img src="https://velog.velcdn.com/images/venv_cinnamon/post/dbc0beaa-7952-4826-a4fa-563c5647ac7c/image.png" alt="">
run and debug에서 Add Configuration을 선택해서 launch.json 파일을 아래와 같이 작성해주고 Python Debugger: my-poetry-demo 를 선택해서 띄워도 된다.</p>
<pre><code class="language-json">{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: [
        {
            &quot;name&quot;: &quot;Python Debugger: my-poetry-demo&quot;,
            &quot;type&quot;: &quot;debugpy&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;cwd&quot;: &quot;${workspaceFolder}&quot;,
            &quot;module&quot;: &quot;uvicorn&quot;,
            &quot;args&quot;: [
                &quot;poetry-my-demo.app.main:app&quot;,
                &quot;--reload&quot;
            ],
            &quot;jinja&quot;: true
        }
    ]
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Poetry 개요와 설치]]></title>
            <link>https://velog.io/@venv_cinnamon/Poetry-%EA%B0%9C%EC%9A%94%EC%99%80-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@venv_cinnamon/Poetry-%EA%B0%9C%EC%9A%94%EC%99%80-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Wed, 19 Jun 2024 15:15:06 GMT</pubDate>
            <description><![CDATA[<h2 id="poetry">Poetry</h2>
<p>Poetry가 무엇인가?
<a href="https://python-poetry.org/">Poetry의 공식 홈페이지</a>에 접속해보면 바로 보이는 문구는 이것이다.</p>
<blockquote>
<p>PYTHON PACKAGING AND DEPENDENCY MANAGEMENT MADE EASY</p>
</blockquote>
<h3 id="의존성-관리">의존성 관리</h3>
<ul>
<li>프로젝트를 하다보면 각각이 사용하는 모듈이 서로 다르고, 버전을 타는 경우가 많다.</li>
<li>이 때 각 프로젝트에서 사용하고 사용하지 않는 모듈의 관리가 되지 않거나 버전 간 의존성이 있는 부분이 충돌하게 되면 말 그대로 난장판이 될 수 있다.</li>
<li>Poetry는 명시한 버전 정보를 확인하고 특정 버전 이상이 아니라면 설치를 하지 않는다. <strong>버전 차이로 인한 꼬임을 아예 막는 것이다.</strong></li>
<li>lock, pyproject.toml 파일을 자동으로 생성하고 업데이트하면서 버전 관리까지 한번에 할 수 있다.</li>
<li>pip을 사용할 때 직접 한땀한땀 작성해야 하는 requirements 파일보다 훨씬 편하겠지.</li>
</ul>
<h3 id="가상환경-관리">가상환경 관리</h3>
<ul>
<li>가상환경이 없다면 내 pc 전체에 패키지가 설치되는 것이므로 버전별로 관리할 수가 없다.</li>
<li>이럴 때 가상환경을 생성하고 관리하는 부가적인 툴(콘다, venv 등)이 필요하다.</li>
<li>poetry는 가상환경까지 한번에 관리할 수 있다.</li>
</ul>
<h3 id="통합">통합</h3>
<ul>
<li>가상환경을 만들어서 각 요구 버전의 모듈을 설치하고 이것들을 관리하는 각각의 툴이 존재해왔다.</li>
<li><strong>poetry는 이러한 것들을 한번에 셋팅할 수 있게 한다고 생각하면 된다.</strong><h2 id="poetry-설치">Poetry 설치</h2>
<h3 id="python-설치">Python 설치</h3>
poetry는 파이썬 버전 3.8 이상을 필요로 한다.
나는 3.11.9 버전이 설치되어 있는 상태이므로 넘어간다.
설치가 안되어 있다면 <a href="https://www.python.org/downloads/windows/">파이썬 공식 사이트</a>에서 다운로드 및 설치 필요.<h3 id="poetry-설치-1">Poetry 설치</h3>
<a href="https://python-poetry.org/">Poetry의 공식 홈페이지</a>에 아주 친절히 나와있다.
접속 후 우측 상단의 DOCUMENTS를 클릭하고 왼쪽 목록에서 Installation을 클릭, With the official installer 탭을 클릭해서 설치를 진행했다.
설치 가이드를 따른다면 크게 어려울 것은 없다.</li>
</ul>
<h4 id="window-기준">Window 기준</h4>
<ol>
<li>powershell을 켜서 아래 명령어를 입력, 설치를 진행한다.</li>
</ol>
<pre><code>(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -</code></pre><ol start="2">
<li>설치가 완료되면 환경변수 편집 창을 열어서 poetry 환경변수를 설정해준다.</li>
<li>1 Window의 경우 설치 경로는 %APPDATA%\pypoetry\venv\Scripts\poetry 에 위치해 있다고 문서에 나와있는데
저 경로가 없는 경우 %AppData%\Roaming\pypoetry\venv\Scripts 여기를 찾아본다.</li>
<li>2 경로 밑에 python.exe가 있으면 탐색기에서 해당 경로를 찾아서 복사해서 Path 에 추가해준다.</li>
<li>설치가 완료되면 cmd 창을 열어서 poetry --version 이라고 입력하면 설치된 버전이 출력되면 완료<h3 id="poetry-프로젝트-만들어보기">Poetry 프로젝트 만들어보기</h3>
설치를 진행한 Installation 바로 밑 목차인 Basic usage에 역시 친절하게 나와있다.
cmd에서 프로젝트를 만들 경로로 이동해준 후 아래 명령어를 수행하면 폴더를 새로 만들면서 프로젝트를 셋팅해준다.
이 떄, 파이썬 버전은 pc에 설치되어 있는 버전을 따라간다.<pre><code>poetry new poetry-demo</code></pre>이미 생성해놓은 폴더가 있다면 해당 폴더로 이동해준 후 init을 하면 된다.<pre><code>cd poetry-demo
poetry init</code></pre>생성된 폴더를 살펴보면 아래와 같은 구성으로 생성되어 있는 것을 확인할 수 있다.<pre><code>poetry-demo
├── pyproject.toml
├── README.md
├── poetry_demo
│   └── __init__.py
└── tests
 └── __init__.py</code></pre>pyproject.toml 파일에서 poetry로 관리되는 의존성 목록을 확인할 수 있다.<pre><code>[tool.poetry]
name = &quot;poetry-demo&quot;
version = &quot;0.1.0&quot;
description = &quot;&quot;
authors = [&quot;Sébastien Eustace &lt;sebastien@eustace.io&gt;&quot;]
readme = &quot;README.md&quot;
packages = [{include = &quot;poetry_demo&quot;}]
</code></pre></li>
</ol>
<p>[tool.poetry.dependencies]
python = &quot;^3.7&quot;</p>
<p>[build-system]
requires = [&quot;poetry-core&quot;]
build-backend = &quot;poetry.core.masonry.api&quot;</p>
<p>```</p>
<hr>
<h4 id="감사한-분들참고-출처">감사한 분들(참고 출처)</h4>
<ul>
<li><a href="https://velog.io/@qlgks1/python-poetry-%EC%84%A4%EC%B9%98%EB%B6%80%ED%84%B0-project-initializing-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0">https://velog.io/@qlgks1/python-poetry-설치부터-project-initializing-활용하기</a></li>
<li><a href="https://velog.io/@hj8853/Poetry%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0">https://velog.io/@hj8853/Poetry를-사용하여-가상환경-만들기</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Siebel 기동 안될 때 확인할 몇 가지]]></title>
            <link>https://velog.io/@venv_cinnamon/Siebel-%EA%B8%B0%EB%8F%99-%EC%95%88%EB%90%A0-%EB%95%8C-%ED%99%95%EC%9D%B8%ED%95%A0-%EB%AA%87-%EA%B0%80%EC%A7%80</link>
            <guid>https://velog.io/@venv_cinnamon/Siebel-%EA%B8%B0%EB%8F%99-%EC%95%88%EB%90%A0-%EB%95%8C-%ED%99%95%EC%9D%B8%ED%95%A0-%EB%AA%87-%EA%B0%80%EC%A7%80</guid>
            <pubDate>Tue, 28 Feb 2023 07:45:03 GMT</pubDate>
            <description><![CDATA[<p>Siebel 개발 서버가 간혹 배포하고 OM 재기동할 때 정상적으로 올라오지 않는 경우가 있다.
재기동되지 않는 유력한 원인 3가지를 정리해 놓는다.</p>
<h4 id="siebel-서버-프로세스에-좀비-있는지-확인">Siebel 서버 프로세스에 좀비 있는지 확인</h4>
<ol>
<li>OM 올라가있는 OS 접속</li>
<li>ps -ef | grep (Siebel admin 계정) 명령어 실행 후 실행 중인 process 리스트 확인</li>
<li>sieb로 시작하는 process 강제 kill 하고 서버 재기동 시도</li>
</ol>
<h4 id="siebel-서버-폴더-내-용량-사용-full-인지-확인">Siebel 서버 폴더 내 용량 사용 full 인지 확인</h4>
<ol>
<li>OS 접속</li>
<li>df 명령어 사용해서 설치된 폴더 경로 사용량 100% 인지 확인</li>
<li>주로 재기동 시 crack 파일들이나 로그파일들이 용량을 대부분 차지하는데, 쓸모 없는 파일은 삭제해준다.
(crack 파일들 확장자가 생각이 안남.. 후에 추가해야지)</li>
</ol>
<h4 id="siebel-기동-로그-확인오류메시지--sbl-svr-00026-공유-메모리를-할당할-수-없습니다">Siebel 기동 로그 확인(오류메시지 : SBL-SVR-00026 공유 메모리를 할당할 수 없습니다.)</h4>
<ol>
<li>OS 접속</li>
<li>게이트웨이 서버까지 모두 내린 상태에서 아래 파일 2개 제거(혹은 rename) 후 재기동 시도
설치경로/siebel/siebsrvr/sys 내 osdf.* 제일 마지막에 생성된 파일 제거 혹은 rename
설치경로/siebel/siebsrvr/admin 내 *.shm 제일 마지막에 생성된 파일 제거 혹은 rename</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[oracle 맨날 까먹어서 찾아보는 명령어 정리]]></title>
            <link>https://velog.io/@venv_cinnamon/oracle-%EB%A7%A8%EB%82%A0-%EA%B9%8C%EB%A8%B9%EC%96%B4%EC%84%9C-%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@venv_cinnamon/oracle-%EB%A7%A8%EB%82%A0-%EA%B9%8C%EB%A8%B9%EC%96%B4%EC%84%9C-%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sun, 09 Jan 2022 08:52:32 GMT</pubDate>
            <description><![CDATA[<p>오라클 alter 명령어 정리
할 때마다 찾아보는게 힘들어서 정리</p>
<h3 id="컬럼-추가">컬럼 추가</h3>
<pre><code class="language-sql">alter table table_name add(column_name data_type(size));

alter table tb_tmp add (type_cd char(5));
alter table tb_tmp add (name varchar2(30 char)); --한글데이터가 적재될 경우
alter table tb_tmp add (age number(3));</code></pre>
<h3 id="컬럼-속성-수정">컬럼 속성 수정</h3>
<pre><code class="language-sql">alter table table_name modify(column_name data_type(size));

alter tb_tmp modify (name varchar2(100 char)); 
--당연한 소리지만 기존 값들 중 바꾸려는 사이즈보다 큰 값이 존재할 경우 오류
</code></pre>
<h3 id="컬럼-삭제">컬럼 삭제</h3>
<pre><code class="language-sql">alter table table_name drop column column_name;

alter table tb_tmp drop age;</code></pre>
<h3 id="컬럼명-변경">컬럼명 변경</h3>
<pre><code class="language-sql">alter table table_name rename column original_name to new_name;

alter table tb_tmp rename type_cd to type_nm</code></pre>
<h3 id="unique-인덱스-생성하고-pk-설정하기">unique 인덱스 생성하고 pk 설정하기</h3>
<pre><code class="language-sql">create unique index tb_tmp_ux01 on tb_tmp(id);

alter table tb_tmp add primary key (id) using index;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[윈도우에서 도커 디렉토리를 보고 싶을 때]]></title>
            <link>https://velog.io/@venv_cinnamon/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-%EB%8F%84%EC%BB%A4-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC-%EB%B3%B4%EA%B3%A0-%EC%8B%B6%EC%9D%84-%EB%95%8C</link>
            <guid>https://velog.io/@venv_cinnamon/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-%EB%8F%84%EC%BB%A4-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC-%EB%B3%B4%EA%B3%A0-%EC%8B%B6%EC%9D%84-%EB%95%8C</guid>
            <pubDate>Thu, 30 Dec 2021 11:42:48 GMT</pubDate>
            <description><![CDATA[<p>윈도우에 도커를 깔았다면 도커는 wsl 위에서 돌아간다.
/var/lib... 등의 경로로 무언가 설치되는데 우리의 로컬에선 확인할 방도가 없다.</p>
<p>로컬 경로를 알 수 있긴 하다.
숨김 항목이니 해제해서 탐색기에서 찾을 수 있는 경로는 아래</p>
<blockquote>
<p>C:\Users\사용자\AppData\Local\Docker\wsl\data\ext4.vhdx</p>
</blockquote>
<p>경로의 ext4.vhdx 라는 무언가에 생성이 된다.</p>
<p><em>근데 난 이 내부의 내용을 보고 싶은데?</em></p>
<p>그럴 때는 wsl을 마운트한 도커 컨테이너를 하나 만들고 그 컨테이너에 접속해서 확인할 수 있다.</p>
<blockquote>
<p>docker run -v/:/data -it ubuntu:14.04 /bin/bash
chroot /data
ls</p>
</blockquote>
<p>이렇게 하면 내용을 확인할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[펭귄 몸무게 예측-submission]]></title>
            <link>https://velog.io/@venv_cinnamon/%ED%8E%AD%EA%B7%84-%EB%AA%B8%EB%AC%B4%EA%B2%8C-%EC%98%88%EC%B8%A1-submission</link>
            <guid>https://velog.io/@venv_cinnamon/%ED%8E%AD%EA%B7%84-%EB%AA%B8%EB%AC%B4%EA%B2%8C-%EC%98%88%EC%B8%A1-submission</guid>
            <pubDate>Wed, 29 Dec 2021 04:38:19 GMT</pubDate>
            <description><![CDATA[<h3 id="학습-데이터-불러오기-및-초기화">학습 데이터 불러오기 및 초기화</h3>
<pre><code class="language-python">import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split

df_train = pd.read_csv(&#39;C:/workspace/py_dacon/data/penguin/train.csv&#39;)

#EDA를 거쳐 안쓰기로 결정한 컬럼들 drop
df_train_drop = df_train.drop([&#39;id&#39;,&#39;Delta 15 N (o/oo)&#39;,&#39;Delta 13 C (o/oo)&#39;,&#39;Clutch Completion&#39;], axis=1, inplace=False)

#범주형, 연속형 변수명들 지정
discrete_names_drop = [&#39;Species&#39;, &#39;Island&#39;, &#39;Sex&#39;]
continuous_names_drop = [&#39;Culmen Length (mm)&#39;, &#39;Culmen Depth (mm)&#39;, &#39;Flipper Length (mm)&#39;]</code></pre>
<h3 id="전처리">전처리</h3>
<pre><code class="language-python">#범주형 변수의 one-hot 인코딩
df_train_after=pd.get_dummies(data=df_train_drop, columns=discrete_names_drop, drop_first=True)

#학습과 검증에 쓸 train, test 셋으로 분리
y_train = df_train_after[&#39;Body Mass (g)&#39;]
x_train = df_train_after.drop(&#39;Body Mass (g)&#39;, axis=1, inplace=False)

x_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.2, random_state=100)

#다음 단계에서 연속형 변수의 스케일링을 진행할 건데, 인덱스 리셋을 안해주면  NaN 값이 반환될 수 있으므로 반드시 인덱스를 리셋
x_train.reset_index(drop=True, inplace=True)
x_test.reset_index(drop=True, inplace=True)

#스케일링을 할 때는 훈련 데이터는 fit_transform으로 훈련-적용, 검증 데이터는 transform만 진행
scaler = StandardScaler()

train_scaler = scaler.fit_transform(x_train[continuous_names_drop])
x_train[continuous_names_drop] = pd.DataFrame(data=train_scaler, columns=continuous_names_drop)

test_scaler = scaler.transform(x_test[continuous_names_drop])
x_test[continuous_names_drop] = pd.DataFrame(data=test_scaler, columns=continuous_names_drop)

#전처리 완료된 데이터 확인
x_train.head()</code></pre>
<p><img src="https://images.velog.io/images/venv_cinnamon/post/ab493be5-12d7-4c50-9db3-ab995b24d62d/image.png" alt=""></p>
<h3 id="모델학습">모델학습</h3>
<pre><code class="language-python">from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV

#평가기준인 rmse 값을 리턴하는 함수
def get_rmse(model):
    pred = model.predict(x_test)
    score = np.sqrt(np.mean(np.square(y_test - pred)))

    print(model.__class__.__name__, &#39;RMSE : &#39;,np.round(score, 3))

    return score

#여러 모델의 rmse 값들을 한번에 리턴하는 함수 -&gt; 모델 비교를 통해 어떤 모델을 쓸지 확인
def get_rmses(models):
    rmses = []

    for model in models:
        rmse = get_rmse(model)
        rmses.append(rmse)

    return rmses

#릿지와 라쏘 모델에 대해 alpha 파라미터 변화를 통해 최적 값을 도출해내기 위한 함수
def print_best_params(model, params):
    grid_model = GridSearchCV(model, param_grid=params, scoring=&#39;neg_mean_squared_error&#39;, cv=5)
    grid_model.fit(x_test, y_test)
    rmse = np.sqrt(-1*grid_model.best_score_)

    print(&#39;{0} 5 CV 시 최적 평균 RMSE 값 : {1}, 최적 alpha : {2}&#39;.format(model.__class__.__name__,
                                                                np.round(rmse,4),grid_model.best_params_))

#모델에 검증 데이터로 예측 후, 해당 모델의 RMSE 값을 리턴하는 함수
def get_rmse_pred(preds):
    for key in preds.keys():
        pred_value = preds[key]
        mse = mean_squared_error(y_test, pred_value)
        rmse = np.sqrt(mse)

        print(&#39;{0} 모델의 RMSE: {1}&#39;.format(key,rmse))</code></pre>
<p>우선 학습에 쓰일 함수를 4가지 정의하고 밑에서 계속 불러서 쓸 예정</p>
<h4 id="선형회귀-릿지-라쏘">선형회귀, 릿지, 라쏘</h4>
<pre><code class="language-python">lr = LinearRegression()
lr.fit(x_train,y_train)

rid = Ridge()
rid.fit(x_train, y_train)

las = Lasso()
las.fit(x_train,y_train)

models = [lr, rid, las]
get_rmses(models)</code></pre>
<blockquote>
<p>LinearRegression RMSE :  299.574
Ridge RMSE :  282.328
Lasso RMSE :  297.308</p>
</blockquote>
<p>릿지와 라쏘가 선형회귀보다 잘 나와서 이 두 개의 알파 값을 임의로 변경해보고 최적의 알파 값을 찾도록 해본다.
변화시킬 알파 값은 맘대로 정한 것임.</p>
<pre><code class="language-python">rid_params = {&#39;alpha&#39;:[0.05, 0.1, 1,2,3,4, 5,8,10,11,12,15,20]}
las_params = {&#39;alpha&#39;:[0.001,0.005,0.008,0.05,0.03,0.1,0.5,1,2,3,4,5,10]}

print_best_params(rid, rid_params)
print_best_params(las, las_params)</code></pre>
<blockquote>
<p>Ridge 5 CV 시 최적 평균 RMSE 값 : 247.8067, 최적 alpha : {&#39;alpha&#39;: 2}
Lasso 5 CV 시 최적 평균 RMSE 값 : 267.6843, 최적 alpha : {&#39;alpha&#39;: 10}</p>
</blockquote>
<p>나온 대로 알파 값을 적용해서 다시 해보겠다.</p>
<pre><code class="language-python">rid = Ridge(alpha=2)
rid.fit(x_train, y_train)

las = Lasso(alpha=10)
las.fit(x_train,y_train)

models = [lr, rid, las]
get_rmses(models)</code></pre>
<blockquote>
<p>Ridge RMSE :  272.335
Lasso RMSE :  274.737</p>
</blockquote>
<p>쪼끔 나아짐.
다른 알고리즘들도 적용시켜보자.</p>
<pre><code class="language-python">from xgboost import XGBRegressor
from lightgbm import LGBMRegressor

xgb_params = {&#39;n_estimators&#39;:[1000]}
xgb = XGBRegressor(n_estimators=1000, learning_rate=0.05, colsample_bytree=0.5, subsample=0.8)
xgb.fit(x_train, y_train)

lgbm_params = {&#39;n_estimators&#39;:[1000]}
lgbm_reg = LGBMRegressor(n_estimators=1000, learning_rate=0.05, num_leaves=4, subsample=0.6, colsample_bytree=0.4, reg_lambda=10, n_jobs=-1)
lgbm_reg.fit(x_train,y_train)

models = [xgb, lgbm_reg]
get_rmses(models)</code></pre>
<blockquote>
<p>XGBRegressor RMSE :  398.254
LGBMRegressor RMSE :  316.298</p>
</blockquote>
<p>두 알고리즘의 파람들이 뭘 의미하는지 세부적으론 모른다.
책 예시 소스 긁어온 것임. 나중에 공부해보자.</p>
<p>위 두 모델은 &quot;회귀 트리&quot; 모델인데 릿지랑 라쏘보다는 별로인 것으로 나왔다.</p>
<p>이번엔 강력한 알고리즘인 svm을 써보자.
3개 다 써보기로 함</p>
<pre><code class="language-python">from sklearn.svm import SVR

svr_lin = SVR(kernel=&#39;linear&#39;,C=1000)
svr_lin.fit(x_train, y_train)

svr_po = SVR(kernel=&#39;poly&#39;,C=1000)
svr_po.fit(x_train, y_train)

svr_rbf = SVR(kernel=&#39;rbf&#39;,C=1000)
svr_rbf.fit(x_train, y_train)

models = [svr_lin, svr_po, svr_rbf]
get_rmses(models)</code></pre>
<blockquote>
<p>SVR RMSE :  251.619
SVR RMSE :  363.021
SVR RMSE :  337.717</p>
</blockquote>
<p>오 리니어가 제일 좋게 나왔다.
이걸로 실제 데이콘에서 준 test데이터로 만들어서 제출 완료함. </p>
<p>12/29 13시 37분 현재 기준
점수 : 304.79544
순위 : 28</p>
<p>더 고칠 수 있을 것 같긴 한데, 귀찮아서 안한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[펭귄 몸무게 예측-EDA]]></title>
            <link>https://velog.io/@venv_cinnamon/%ED%8E%AD%EA%B7%84-%EB%AA%B8%EB%AC%B4%EA%B2%8C-%EC%98%88%EC%B8%A1</link>
            <guid>https://velog.io/@venv_cinnamon/%ED%8E%AD%EA%B7%84-%EB%AA%B8%EB%AC%B4%EA%B2%8C-%EC%98%88%EC%B8%A1</guid>
            <pubDate>Wed, 29 Dec 2021 04:09:56 GMT</pubDate>
            <description><![CDATA[<h2 id="eda">EDA</h2>
<h3 id="데이터-불러오기">데이터 불러오기</h3>
<pre><code>df_train = pd.read_csv(&#39;C:/workspace/py_dacon/data/penguin/train.csv&#39;)

df_train.info()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/f4e4d602-9ece-4bb9-a227-af69561b4948/image.png" alt=""></p>
<pre><code>df_train.head()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/465dcf1b-394e-4de0-8ed1-74dbf3faeb89/image.png" alt=""></p>
<p>id는 필요 없어서 바로 drop</p>
<pre><code>df_train.drop([&#39;id&#39;], axis=1, inplace=True)</code></pre><p>범주형, 연속형 변수 컬럼명 지정</p>
<pre><code>discrete_names = [&#39;Species&#39;, &#39;Island&#39;, &#39;Clutch Completion&#39;, &#39;Sex&#39;]
continuous_names = [&#39;Culmen Length (mm)&#39;, &#39;Culmen Depth (mm)&#39;, &#39;Flipper Length (mm)&#39;, &#39;Delta 15 N (o/oo)&#39;, &#39;Delta 13 C (o/oo)&#39;]</code></pre><h3 id="결측치-체크">결측치 체크</h3>
<p>연속형 변수는 각 컬럼의 평균 값으로 넣어주고, 범주형 변수는 어차피 one-hot 인코딩 할 예정이라 그냥 둠</p>
<pre><code>df_train.isna().sum()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/45d3289a-c441-4431-895c-cc96c00d1170/image.png" alt=""></p>
<pre><code>df_train[&#39;Delta 15 N (o/oo)&#39;].fillna(value=df_train[&#39;Delta 15 N (o/oo)&#39;].mean(), inplace=True)
df_train[&#39;Delta 13 C (o/oo)&#39;].fillna(value=df_train[&#39;Delta 13 C (o/oo)&#39;].mean(), inplace=True)</code></pre><p><em>아래의 각 그래프들의 소스는 dacon의 운영자분의 코드를 참조하였음</em></p>
<h3 id="boxplot으로-이상치-확인">boxplot으로 이상치 확인</h3>
<pre><code>feature = continuous_names

plt.figure(figsize=(20,15))
plt.suptitle(&quot;Boxplots&quot;, fontsize=40)

for i in range(len(feature)):
    plt.subplot(2,3,i+1)
    plt.title(feature[i])
    plt.boxplot(df_train[feature[i]])
plt.show()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/b58b2805-fd11-4651-98ad-129f1c9e1658/image.png" alt="">
특이한 이상치는 보이지 않는 것으로 판단</p>
<h3 id="산점도">산점도</h3>
<pre><code>target = &quot;Body Mass (g)&quot;

plt.figure(figsize=(20,15))
plt.suptitle(&quot;Scatter Plot&quot;, fontsize=40)

for i in range(len(continuous_names)):
    plt.subplot(2,3,i+1)
    plt.xlabel(continuous_names[i])
    plt.ylabel(target)
    corr_score = df_train[[continuous_names[i], target]].corr().iloc[0,1].round(2)
    c = &#39;red&#39; if corr_score &gt; 0 else &#39;blue&#39;
    plt.scatter(df_train[continuous_names[i]], df_train[target], color=c, label=f&quot;corr = {corr_score}&quot;)
    plt.legend(fontsize=15)
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/0c44e43a-8fbf-4678-a1ec-5c7dd7832ab6/image.png" alt="">
0 미만의 상관값을 가진 변수는 파란색으로 나타냈는데, &#39;Culmen Depth (mm)&#39; 변수의 경우 양쪽으로 나뉘어져 있긴 하나 다른 변수와의 상관관계가 있을 것 같아 놔두고, &#39;Delta 15 N (o/oo)&#39;, &#39;Delta 13 C (o/oo)&#39; 두 변수는 너무 퍼져있어 drop할 예정</p>
<h3 id="bar-plot">bar plot</h3>
<pre><code># 히스토그램 을 사용해서 데이터의 분포를 살펴봅니다.
feature = discrete_names

plt.figure(figsize=(20,15))
plt.suptitle(&quot;Bar Plot&quot;, fontsize=40)

for i in range(len(feature)):
    plt.subplot(2,2,i+1)
    plt.title(feature[i], fontsize=20)
    temp = df_train[feature[i]].value_counts()
    plt.bar(temp.keys(), temp.values, width=0.5, color=&#39;b&#39;, alpha=0.5)
    plt.xticks(temp.keys(), fontsize=12)
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/0e9441b8-7c38-4235-bc13-edf91d7e17c3/image.png" alt="">
&#39;Clutch Completion&#39; 변수는 값의 분포가 너무 극단적이여서 drop할 예정</p>
<h3 id="heatmap">heatmap</h3>
<pre><code>from sklearn.preprocessing import LabelEncoder

corr_df = df_train.copy()
corr_df[corr_df.columns[corr_df.dtypes==&#39;O&#39;]] = corr_df[corr_df.columns[corr_df.dtypes==&#39;O&#39;]].astype(str).apply(LabelEncoder().fit_transform)

plt.figure(figsize=(15,10))

heat_table = corr_df.corr()
mask = np.zeros_like(heat_table)
mask[np.triu_indices_from(mask)] = True
heatmap_ax = sns.heatmap(heat_table, annot=True, mask = mask, cmap=&#39;coolwarm&#39;)
heatmap_ax.set_xticklabels(heatmap_ax.get_xticklabels(), fontsize=15, rotation=45)
heatmap_ax.set_yticklabels(heatmap_ax.get_yticklabels(), fontsize=15)
plt.title(&#39;correlation between features&#39;, fontsize=40)
plt.show()</code></pre><p><img src="https://images.velog.io/images/venv_cinnamon/post/d6eeb3b7-b1c5-487a-a880-4a90d6d1101e/image.png" alt="">
수치 값으로만 그릴 수 있어 범주형 변수를 라벨인코더를 통해 가공하고 확인해보면 제일 높은 상관관계를 보이는 변수는 &#39;Flipper Length (mm)&#39;임</p>
<h3 id="eda-정리">EDA 정리</h3>
<ol>
<li>각 수치형 변수들의 이상치는 딱히 없어보임</li>
<li>범주형 변수는 라벨인코딩 보다는 one-hot으로 간단하게 정리하는 것이 편할 듯</li>
<li>&#39;Delta 15 N (o/oo)&#39;, &#39;Delta 13 C (o/oo)&#39;는 산점도 확인 시, 분포가 너무 퍼져있어 drop</li>
<li>&#39;Culmen Depth (mm)&#39;는 양쪽으로 나뉘어있긴 하나, x로 활용할 수 있는 변수가 너무 적기도 하여 일단 유지</li>
<li>&#39;Clutch Completion&#39;는 값의 분포가 너무 극단적이어서 drop</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[아나콘다 설치 및 가상환경 구성]]></title>
            <link>https://velog.io/@venv_cinnamon/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1</link>
            <guid>https://velog.io/@venv_cinnamon/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1</guid>
            <pubDate>Fri, 24 Dec 2021 14:43:15 GMT</pubDate>
            <description><![CDATA[<h3 id="아나콘다-설치">아나콘다 설치</h3>
<p>설치 사이트</p>
<blockquote>
<p><a href="https://www.anaconda.com/products/individual">https://www.anaconda.com/products/individual</a></p>
</blockquote>
<h3 id="아나콘다-가상환경-설정">아나콘다 가상환경 설정</h3>
<p>Anaconda Prompot 실행 후 명령어 입력하여 가상환경을 구성할 수 있다.
가상환경을 목적별로 여러 개 구성하여 라이브러리 등을 따로 관리할 수 있다.
또한 문제가 생기면 가상환경만 삭제하면 되기 떄문에 pc에 영향도 적다.</p>
<p>1) 가상환경 생성 : 버전은 따로 입력 안해도 됨</p>
<blockquote>
<p><strong>conda create -n 가상환경이름 python=버전</strong>
conda create -n py_dacon</p>
</blockquote>
<p>2) 가상환경 목록 보기</p>
<blockquote>
<p>conda info --envs</p>
</blockquote>
<p>3) 가상환경 활성/비활성</p>
<blockquote>
<p><strong>가상환경 활성화</strong>
conda activate 활성화할 가상환경이름</p>
</blockquote>
<hr>
<blockquote>
<p><strong>가상환경 비활성화</strong>
conda deactivate</p>
</blockquote>
<p>4) 가상환경 삭제</p>
<blockquote>
<p>conda remove --name 가상환경이름 --all</p>
</blockquote>
<h3 id="아나콘다-가상환경과-jupyter-notebook-연결">아나콘다 가상환경과 Jupyter Notebook 연결</h3>
<p>보통 로컬 파이썬에 설치해서 사용하는데, 아나콘다를 통해 만든 가상환경과 연결하여 사용할 수 있음</p>
<ol>
<li>연결하고자 하는 가상환경을 활성화</li>
<li>활성화된 상태에서 주피터 노트북 설치<blockquote>
<p>conda install jupyter notebook</p>
</blockquote>
</li>
<li>가상환경 연결하기<blockquote>
<p><strong>python -m ipykernel install --user --name 가상환경이름 --display-name &quot;표시할 커널이름&quot;</strong>
python -m ipykernel install --user --name py_dacon --display-name &quot;py_dacon&quot;</p>
</blockquote>
</li>
<li>주피터 노트북 실행하기
workspace를 만들어놓고 해당 경로로 이동한 후 주피터 노트북을 실행<blockquote>
<p>jupyter notebook</p>
</blockquote>
</li>
<li>자동으로 창이 열림. 열리지 않는 경우 콘솔에 나타난 경로를 복사해 브라우저에 붙여넣기</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>