<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>zero__.log</title>
        <link>https://velog.io/</link>
        <description>코딩 일기</description>
        <lastBuildDate>Mon, 31 Oct 2022 02:28:18 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>zero__.log</title>
            <url>https://images.velog.io/images/zero__/profile/f491f77b-8206-4e4a-952d-8b4ee8fcf570/KakaoTalk_Photo_2022-03-27-19-43-58.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. zero__.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/zero__" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[아이디어 공모전 출전 시 주의사항]]></title>
            <link>https://velog.io/@zero__/%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B6%9C%EC%A0%84-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</link>
            <guid>https://velog.io/@zero__/%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B6%9C%EC%A0%84-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</guid>
            <pubDate>Mon, 31 Oct 2022 02:28:18 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>아이디어 공모전 출전 전, 반드시 체크해야 할 주의사항 다섯 가지</p>
</blockquote>
<p align="center"><img src="https://velog.velcdn.com/images/zero__/post/320980a0-7884-4a02-a882-12dd15918aff/image.png" width=300 height=30></p>

<p>2022년 07월, 아이디어 공모전에 나가서 우수상을 받은 적이 있다.</p>
<p>공모전에 참여하는 과정 속, 많은 일들이 있었고
나의 경험이 많은 사람들에게 도움이 될 것이라 생각하여 이 글을 쓰게 되었다.</p>
<hr>
<h2 id="1아이디어는-항상-실현가능성이-있어야-한다">1.아이디어는 항상 실현가능성이 있어야 한다.</h2>
<br>
만약, 지원자가 제출한 아이디어가 뜬구름만 잡는다면 심사위원의 입장에선 아이디어를 재고할 가치가 없다고 생각할 것이다.

<p>아이디어 뿐만 아니라, <span style="color: #7878FF">내가 짠 모델의 알고리즘도 현실에서 실현 가능성</span>이 있어야 한다.</p>
<p>예를 들어, 휠체어가 지나갈 수 있는 도로인지 가늠할 수 있는 알고리즘을 구상했을 때, 
경사로와 불법 주정차와 같은 장애물이 있어도 문제가 없는지 확인해야 한다.
(필자는 실제로 이 질문을 가장 많이 받았다)</p>
<hr>
<h2 id="2아이디어-중복-표절에-주의해야-한다">2.아이디어 중복, 표절에 주의해야 한다.</h2>
<br>
표절과 아이디어 중복은 <span style="color: #7878FF">저작권 침해와 직결되는 문제</span>이기에 주최 기관은 특히 민감하다.

<p>아이디어 중복.... 생각만해도 속이 좀 쓰리다.
필자도 아이디어 중복 문제로 머리가 아팠던 적이 있었다ㅜㅜ</p>
<p><a href="https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-3">썰 궁금하면 클릭</a></p>
<p>아이디어 중복 / 표절이라 판정이 나면 바로 탈락이기에 그 동안의 노력이 없던 일이 되기도 하고,
아니라는 사실을 증명하는 과정이 너무 힘들었던 기억이 난다.
서칭해도 나오지 않는 자료를 찾아야 하고 겨우 찾더라도 변호사, 변리사 앞에서 표절이 아님을 증명하는 것도 여간 스트레스 받는 일이 아니었다.</p>
<p>그러니 제발! 기획 단계에서 똑같은 서비스가 있는지에 대한 <span style="color: #7878FF">자료조사를 충분히</span> 하자.
만약 비슷한 서비스가 존재한다면, 우리팀의 <span style="color: #7878FF">차별성이 무엇인지 명확히</span> 해야한다.</p>
<hr>
<h2 id="3비즈니스-모델-즉-수익구조도-충분히-구상해야-한다">3.비즈니스 모델, 즉 수익구조도 충분히 구상해야 한다.</h2>
<br>
처음 아이디어 공모전에 참가 할 때, 창업할 생각이 없어 우린 비즈니스 모델과 수익성에 대한 구상을 소홀히 했었다.

<p>그러나 주최 기관은 이 기획서를 가지고 <span style="color: #7878FF">실제로 창업을 할 것이라 생각하고 평가</span>한다.
그래서 기획서 첨삭과 발표 면접 때 <span style="color: #7878FF">수익을 어떻게 낼 것인가에 대한 질문</span>을 받았었다. 
당시 질문에 대한 대답은 했으나, 개인적으로는 이 부분을 더 공부해서 구상을 해뒀으면하는 아쉬움이 남아있다.</p>
<p><del>이 부분까지 완벽했으면 우리 팀은 1등 했을 지도....?ㅋㅋㅋ</del></p>
<hr>
<h2 id="4서비스를-사용할-사람이-있어야-한다">4.서비스를 사용할 사람이 있어야 한다.</h2>
<br>
아무리 예쁜 물건도 필요가 없으면 팔리지 않는다.
예쁘다는 이유로 사는 사람이 있겠지만, 그건 소수일 뿐이다.
아이디어도 마찬가지라고 생각한다.

<p>좋은 아이디어는 <span style="color: #7878FF">타겟이 확실</span>하고, 그들이 이 <span style="color: #7878FF">서비스를 이용할 것이라는 확신</span>이 있어어야 한다.</p>
<p>이 부분은 자료조사를 탄탄히 하면 될 것이다.
뉴스나 논문, SNS를 둘러보며 사람들이 어떤 문제에 어떤 어려움을 겪고 있는지를 파악하면 될 것이다.
혹은 자신이 겪은 어려움을 다른 사람도 똑같이 생각하고 있으며, 이를 개선시키기 위한 아이디어도 좋다.</p>
<hr>
<h2 id="5발표-준비를-충분히-해야-한다">5.발표 준비를 충분히 해야 한다.</h2>
<br>
아이디어의 참신함, 목적성, 실현가능성 등도 중요하지만,
<span style="color: #7878FF">발표자의 자세도 매우 중요하다</span>고 생각한다.

<p>필자가 참여한 공모전에서는 발표 시간도 지키지 않고, 기획안을 그냥 읽은 참가자가 있었던 것 같다.
그 모습이 성의가 없어보였다며 발표 직전에 발표 시간 엄수와 기획안을 그냥 읽는 발표는 지양해달라는 안내를 받았었다.</p>
<p>사실 그 말을 들은 후에 조금 충격을 받았었다.
공모전 발표 심사는 아이디어를 어필하는 동시에 
발표자도 믿을 만한 사람임을 보여주어야 하는 자리인데 기본적인 사항 조차 지키지 않았다니...</p>
<p>사소하다고 생각될지라도, 
사전에 발표 시간은 몇 분인지 확인하고 발표 대본도 숙지하는 등
<span style="color: #7878FF">최소한의 성의</span>를 보여주도록 하자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[🔥도전🔥 글쓰기 챌린지]]></title>
            <link>https://velog.io/@zero__/%EB%8F%84%EC%A0%84-%EA%B8%80%EC%93%B0%EA%B8%B0-%EC%B1%8C%EB%A6%B0%EC%A7%80</link>
            <guid>https://velog.io/@zero__/%EB%8F%84%EC%A0%84-%EA%B8%80%EC%93%B0%EA%B8%B0-%EC%B1%8C%EB%A6%B0%EC%A7%80</guid>
            <pubDate>Mon, 24 Oct 2022 09:50:29 GMT</pubDate>
            <description><![CDATA[<h1 id="개발자란-어떤-직업일까">개발자란 어떤 직업일까?</h1>
<p>하는 생각을 해본 적이 있다.
<br>
개발자란,
꼼꼼하고
성실하고
소통을 잘 해야 하고
남을 잘 설득해야 한다고 생각한다.
<br></p>
<p>하지만 이 모든 조건을 충족하기 위해선 하나의 전제조건이 필요하다.</p>
<p>그것은 바로, <span style="color:#F7D358">전달력</span>.</p>
<br>
앞서 언급한 것들은 일과 공부를 통해 발전할 수 있으나,
전달력은 발표, 작문 시간을 따로 투자해야 한다.

<p>발표는 따로 기회가 주어진 순간에만 가능하지만, 작문은 언제 어디서나 가능하다. 그러나 나는 내 의지로 매일 작문을 할 수 있는 사람이 아니라는 것을 안다.
<br>
그리고 나의 약점은, 책을 읽은 만큼 말을 잘하지 못한다는 것이다.
<br>
<span style="color:#F7D358">그래서 나는 글쓰기 챌린지에 도전하기로 했다.</span>
<br></p>
<p>글을 쓰는 동안 나는 아래의 세 가지 규칙을 지킬 것이다.</p>
<blockquote>
<ol>
<li>글을 쓴 후 독자의 입장에서 다시 읽어본다.</li>
<li>맞춤법과 이상한 표현이 없는지 더블체크해본다.</li>
<li>하루에 몰아서 쓰는 것이 아니라 매일 조금씩 한 줄이라도 쓴다.</li>
</ol>
</blockquote>
<p>한 달 후면 발전된 나의 모습을 기대하며 이번 글은 여기서 마치도록 하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Error 일기] SQL pk를 fk로 연동하기]]></title>
            <link>https://velog.io/@zero__/Error-%EC%9D%BC%EA%B8%B0-SQL-pk%EB%A5%BC-fk%EB%A1%9C-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@zero__/Error-%EC%9D%BC%EA%B8%B0-SQL-pk%EB%A5%BC-fk%EB%A1%9C-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 18 Aug 2022 14:49:56 GMT</pubDate>
            <description><![CDATA[<h2 id="이슈-발생">이슈 발생</h2>
<p><img src="https://velog.velcdn.com/images/zero__/post/18aee528-31b2-46c3-b965-7a17c1bcfc01/image.png" alt=""></p>
<p> 위의 코드로 foreign key로 지정하려니 error가 떴다.</p>
<h2 id="해결">해결</h2>
<pre><code>alter table [테이블명] 
add foreign key( [컬럼명] ) 
references [참조한 테이블]( [참조할 컬럼명] ) [옵션];</code></pre><blockquote>
<p>&lt;&lt;제약조건&gt;&gt;</p>
</blockquote>
<ol>
<li>CASCADE <br><ul>
<li>참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다. <br></li>
</ul>
</li>
<li>SET NULL <br><ul>
<li>참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.<br></li>
</ul>
</li>
<li>NO ACTION<br><ul>
<li>참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.<br></li>
</ul>
<ol start="4">
<li>SET DEFAULT<br></li>
</ol>
<ul>
<li>참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.<br></li>
</ul>
<ol start="5">
<li>RESTRICT<br></li>
</ol>
<ul>
<li>참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.<br><blockquote>
<blockquote>
<p>출처 : <a href="https://prinha.tistory.com/entry/MySQL-PRIMARY-KEY-FOREIGN-KEY-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EB%8B%A4%EC%96%91%ED%95%9C-%EB%B0%A9%EB%B2%95">https://prinha.tistory.com/entry/MySQL-PRIMARY-KEY-FOREIGN-KEY-설정하는-다양한-방법</a></p>
</blockquote>
</blockquote>
</li>
</ul>
</li>
</ol>
<br>

<pre><code class="language-sql"># 니의 코드
create table orders (
    ordnum int primary key auto_increment,
    id varchar(20) not null,
    orddate timestamp not null,
    pnum int not null,
    ispay bool not null,
    pamount int not null
);

alter table orders
 add foreign key( id ) references member(id)
 on delete cascade on update cascade;

alter table orders
 add foreign key( pnum ) references product(pnum)
 on delete cascade on update cascade;</code></pre>
<p>테이블을 우선 생성하고, 수정하면 되는 일이었다.</p>
<p>에러가 뜨지도 않고, order table과  product table 사이에 연동도 잘되더라.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Error 일기] Flask - MySQL 연동하기]]></title>
            <link>https://velog.io/@zero__/Error-%EC%9D%BC%EA%B8%B0-Flask-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@zero__/Error-%EC%9D%BC%EA%B8%B0-Flask-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 18 Aug 2022 14:38:41 GMT</pubDate>
            <description><![CDATA[<p>flask에서 sqlalchemy 연동에 애를 먹어 까먹지 않기 위해 기록</p>
<p>pycharm이 아닌 local terminal  조작</p>
<p>터미널은 해당 경로에 들어가 있을 것.</p>
<pre><code>cd [flask 폴더 경로]</code></pre><h2 id="import">Import</h2>
<pre><code>pip install flask-sqlalchemy</code></pre><h2 id="db-연동-mysql은-아래에-있음">DB 연동 &lt;Mysql은 아래에 있음&gt;</h2>
<pre><code>python3
&gt;&gt; from market import db
&gt;&gt; db.create_all()
&gt;&gt; from market import Product
&gt;&gt; product1 = Product(pname=&quot;Banana&quot;, detail=&quot;This is a Banana&quot;, price=500, image=&quot;no img&quot;)
&gt;&gt; db.session.add(product1)
&gt;&gt; db.session.commit()</code></pre><p>✅  market : python file 이름</p>
<p>✅  Product : Model 이름</p>
<h2 id="db-내부-확인">DB 내부 확인</h2>
<pre><code>Product.query.all()</code></pre><h2 id="연동-후">연동 후</h2>
<pre><code>db.session.close()</code></pre><h2 id="🔥이슈-발생">🔥이슈 발생</h2>
<h3 id="상황-1"><strong>상황 1)</strong></h3>
<p>terminal에서 “db.create_all()”을 입력하면, flask에 자동으로 db가 생성된다.
<img src="https://velog.velcdn.com/images/zero__/post/9ea38cfc-a1a4-4d6c-914a-52fdec9efefd/image.png" alt=""></p>
<p>그런데 자동으로 생성된 DB의 인코딩에 문제가 생긴건지 위의 사진처럼 나온다.</p>
<h3 id="상황-2">상황 2)</h3>
<p>product DB에,</p>
<p>product1 = Product(pname=&quot;Banana&quot;, detail=&quot;This is a Banana&quot;, price=500, image=&quot;no img&quot;)
product2 = Product(pname=&quot;Lime&quot;, detail=&quot;This is a Lime&quot;, price=750, image=&quot;no img&quot;)</p>
<p>를 넣었으나, commit을 하는 것은 product1 뿐이고, product2를 넣었을 땐,</p>
<pre><code>[SQL: INSERT INTO product (pname, detail, price, image) VALUES (?, ?, ?, ?)]
[parameters: (&#39;Lime&#39;, &#39;This is a Lime&#39;, 750, &#39;no img&#39;)]
(Background on this error at: https://sqlalche.me/e/14/gkpj)</code></pre><p>에러가 뜬다.</p>
<h3 id="상황-3">상황 3)</h3>
<pre><code class="language-python">class Product(db.Model):
    pnum   = db.Column(db.Integer(), primary_key=True)
    pname  = db.Column(db.String(length=30), nullable=False, unique=True)
    detail = db.Column(db.String(length=1024), nullable=False, unique=True)
    price  = db.Column(db.Integer(), nullable=False)
    image  = db.Column(db.String(length=1024), nullable=False, unique=True)

    def __rerp__(self):
        return f&quot;Product {self.pname}&quot;</code></pre>
<p><code>__rerp__</code> 를 실행하면 pname이 보여야 정상인데, 여전히 product1이 보인다.</p>
<hr>
<h2 id="나의-시도">나의 시도</h2>
<h3 id="1-db를-먼저-짜지-않아-일어난-일로-생각하여-db를-먼저-짜보았다">1. DB를 먼저 짜지 않아 일어난 일로 생각하여, DB를 먼저 짜보았다.</h3>
<p>⇒ 같은 에러가 뜨며,</p>
<pre><code>2.1 Error: Could not locate a Flask application. 
You did not provide the &quot;FLASK_APP&quot; environment variable, 
and a &quot;wsgi.py&quot; or &quot;app.py&quot; module was not found in the current directory.</code></pre><p>가 뜬다.</p>
<h3 id="2-flask-경로를-다시-지정해주었다">2. Flask 경로를 다시 지정해주었다.</h3>
<p>⇒  Integrity Error가 뜬다.</p>
<h3 id="3-integrity-error-해결을-위해-try--excxept문-사용하기">3. Integrity Error 해결을 위해 try / excxept문 사용하기</h3>
<pre><code class="language-python">from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import session

try:
    session.flush()
except IntegrityError:
    session.rollback()</code></pre>
<pre><code>AttributeError: module &#39;sqlalchemy.orm.session&#39; has no attribute &#39;flush&#39;</code></pre><p>⇒ 다시 에러</p>
<p>&lt;그 외에도 몇번의 시도를 했으나 작성하지 못했다ㅜㅜ&gt;</p>
<hr>
<h3 id="4-sql-프로그램-체크-⇒-해결">4. SQL 프로그램 체크 ⇒ 해결</h3>
<p>튜토리얼 무조건 따라하다가 12시간이 사라지는 magic을 경험했다.</p>
<pre><code class="language-python">app.config[&#39;SQLALCHEMY_DATABASE_URI&#39;] = &#39;sqlite:///market_db.db&#39;</code></pre>
<p>sqlite가 아니라… mysql을 연동했어야 맞다.</p>
<pre><code># pymysql 설치
pip3 install pymysql

# project source에서 가장 top level file __init__.py에 아래 code 를 넣어주면 된다.
import pymysql
pymysql.install_as_MySQLdb()</code></pre><pre><code class="language-python">app.config[&#39;SQLALCHEMY_DATABASE_URI&#39;] = &#39;mysql://root:[비밀번호]@localhost:[root번호]/[db이름]&#39;</code></pre>
<p>그래서 terminal 실행도 달라진다.</p>
<p><img src="https://velog.velcdn.com/images/zero__/post/139ec61d-da41-4a6a-88a8-428535da6452/image.png" alt=""></p>
<p>sql에도 예쁘게 연동 끝!!!!!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[pandas - 데이터 프레임 조작하기]]></title>
            <link>https://velog.io/@zero__/pandas-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%94%84%EB%A0%88%EC%9E%84-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@zero__/pandas-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%94%84%EB%A0%88%EC%9E%84-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 12 Aug 2022 08:28:06 GMT</pubDate>
            <description><![CDATA[<p>프로젝트를 진행하다, 
잊고싶지 않아 이곳에 기록해둔다.</p>
<h1 id="1-문제">1. 문제</h1>
<p>kaggle에 올라온 데이터프레임을 전처리하다,
데이터프레임에 담긴 list가 String으로 저장되어있는 문제를 마주했다.</p>
<blockquote>
<p>&quot;[&#39;make a choice and proceed with recipe&#39;, &#39;dep...&quot;</p>
</blockquote>
<p>팀원분이 해결하다가 안돼서 나한테 도움을 요청한 것이었다.</p>
<p>이게 왜 문제냐?</p>
<pre><code class="language-python">recipe[&#39;steps&#39;][0][0]</code></pre>
<p>위의 코드를 찍으면 한 문장이 찍히는 것이 아니라,</p>
<blockquote>
<p>&quot;[&quot;, &quot;&#39;&quot;, &quot;m&quot;</p>
</blockquote>
<p>위와 같이 문자열 하나하나가 찍히게 된다.
이러면.... 진도가 되지 않기에 수정이 필요했다.</p>
<p><span style = "color: #b4b4b4;">사실 저번에도 이런 문제가 있었는데,
당시엔 해결 방법이 보이지 않아, 다른 데이터로 대체했었다.</span>
<br>
하 지 만,
<span style = "color: #FF3232;"><strong>이번에는 무슨 일이 있어도 해결하고 싶다는 승부욕🔥</strong>이 불타올라 </span>
팀원 중 한 분인 보람님과 여러 시도를 해보았고,
문제를 해결했다.
(보람님이 나보다 조금 더 빨리 문제를 해결하여 도움을 조금 받았다ㅎ)</p>
<hr>
<h1 id="2-해결법">2. 해결법</h1>
<pre><code class="language-python"># 데이터 프레임의 리스트가 통으로 문자열인 경우
# 내가 생각한 방법 : list로 하나씩 꺼내서 다시 dataframe에 넣기
# 나의 의도 : 데이터 프레임에서 list 형식으로 꺼낸 후, 전처리를 하고 다시 데이터프레임으로 넣기

rpt = recipe[&#39;steps&#39;][0]
rpt_tmp = rpt.split(&quot;&#39;,&quot;)

rpt_lst = []
for rpt in rpt_tmp:
  tmp1 = rpt.replace(&quot;[&#39;&quot;, &quot;&quot;)
  tmp2 = tmp1.replace(&quot;&#39;]&quot;, &quot;&quot;)
  tmp3 = tmp2.replace(&quot;&#39;&quot;, &quot;&quot;)
  rpt_lst.append(tmp3)
print(rpt_lst)

# 결과
rpt_lst[1]
#  depending on size of squash , cut into half or fourths</code></pre>
<p>테스트로 코드를 짠 것은 성공했었다.
그러나 전체 데이터프레임에 적용하기엔 시간이 너무 오래 걸리고,
GPU도 많이 잡아먹을 것 같아 조금 막막했다.</p>
<p>내가 짠 테스트 코드가 성공했음과 동시에,
보람님께서 풀었다고 톡을 보냈다.</p>
<p>훨씬 간결하고 좋은 방법이었다.</p>
<pre><code class="language-python"># 조원 언니의 방법 : df에서 바로 replace로 바꾼 후, 호출 시 split하기
# 방법이 다른 이유 : ingredient는 재료의 나열로, 단순 &quot;,&quot;로 나눌 수 있음.

recipe[&#39;ingredients&#39;] = recipe[&#39;ingredients&#39;].str.replace(&#39;[&#39;,&#39;&#39;)
recipe[&#39;ingredients&#39;] = recipe[&#39;ingredients&#39;].str.replace(&quot;&#39;&quot;,&#39;&#39;)

print(recipe[&#39;ingredients&#39;][1].split(sep=&#39;,&#39;)[0])
# 결과 : prepared pizza crust</code></pre>
<p>나는 이 코드를 참조하며 내 코드를 바로 리팩토링하였다.
까먹으면 안되니까ㅎㅎ</p>
<pre><code class="language-python"># 나의 코드 리팩토링 하기
# &quot;[&quot;, &quot;]&quot;를 replace를 한 후, 데이터프레임의 요소를 확인해보면, _&#39;for sweet&#39;으로 나옴
# 따라서 &quot;_&#39;&quot;를 replace 하고 
# 필요한 요소를 &quot;&#39;,&quot; 기준으로 split하여 조회하면 알맞게 나옴

recipe[&#39;steps&#39;] = recipe[&#39;steps&#39;].str.replace(&quot;[&quot;,&quot;&quot;)
recipe[&#39;steps&#39;] = recipe[&#39;steps&#39;].str.replace(&quot;]&quot;,&quot;&quot;)
recipe[&#39;steps&#39;] = recipe[&#39;steps&#39;].str.replace(&quot; &#39;&quot;,&quot;&quot;)

print(recipe[&#39;steps&#39;][0].split(sep=&quot;&#39;,&quot;)[5])
# 결과 : for sweet squash , drizzle melted honey , butter , grated piloncillo over each cut squash piece</code></pre>
<p>해결했다.</p>
<p>오늘도 발전했다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[넷플릭스 프라이즈 요점 정리]]></title>
            <link>https://velog.io/@zero__/%EB%84%B7%ED%94%8C%EB%A6%AD%EC%8A%A4-%ED%94%84%EB%9D%BC%EC%9D%B4%EC%A6%88-%EC%9A%94%EC%A0%90-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@zero__/%EB%84%B7%ED%94%8C%EB%A6%AD%EC%8A%A4-%ED%94%84%EB%9D%BC%EC%9D%B4%EC%A6%88-%EC%9A%94%EC%A0%90-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 29 Jul 2022 14:09:05 GMT</pubDate>
            <description><![CDATA[<p>Netflix Prize?
→ 2006년 10월부터 2009년 7월까지 약 3년에 걸쳐 이어진 기계학습을 통한 영화 평가 데이터 예측 대회
→ <strong><a href="http://en.wikipedia.org/wiki/Collaborative_filtering">‘collaborative filtering’</a>,</strong> <a href="http://en.wikipedia.org/wiki/Singular_value_decomposition">SVD</a>를 활용한 <a href="http://research.yahoo.com/files/kdd08koren.pdf">SVD++</a>는 이후 굉장히 많은 분야에서 활용</p>
<p><strong>Cinematch 알고리즘보다 10% 이상 성능 향상이 대회의 주된 목표</strong></p>
<hr>
<h1 id="영화-추천시스템-성능-평가-방법--rmse">영화 추천시스템 성능 평가 방법 : RMSE</h1>
<ul>
<li>RMSE</li>
<li>실제값과 예측값의 차이를 제곱해 평균을 구한 후, 루트를 씌운 것</li>
</ul>
<p><img src="https://velog.velcdn.com/images/zero__/post/7f7696cf-ea9c-462c-9b0a-2e0ecf374e11/image.png" alt=""></p>
<ul>
<li>error를 최소화하는 방향으로 알고리즘이 예측 →RMSE 점수가 낮을수록 성능이 좋음</li>
<li>한 유저가 ‘Forest Gump’에 별점을 4.0점을 줄 것이라 예상 → 실제로 3.7을 주었다고 함.</li>
<li><span style = "color: #FF6A89;">추천 서비스를 제공하는데 최적화된 방법은 아님</span>
→ 안 본 영화에 대한 별점을 예측하는 것보다는 어떤 영화를 가장 재미있게 볼지를 예측하는 것이 넷플릭스 프라이즈의 포인트였기 때문.</li>
</ul>
<hr>
<h1 id="svd-singular-value-decomposition"><strong>SVD (Singular Value Decomposition)</strong></h1>
<ul>
<li>SVD</li>
<li>대표적인 차원 축소 알고리즘.</li>
<li>이미지나 텍스트에서 차원축소를 통해 잠재적인 의미를 찾아주는데 활용되고 있음.</li>
<li>Cinematch 알고리즘보다 <span style = "color: #FF6A89;">5% 수준의 성능향상</span></li>
<li>단일 알고리즘으로서 <span style = "color: #FF6A89;">가장 좋은 성능</span>을 보임</li>
<li><strong>SVD</strong>는 선형대수에서 쓰이는 <span style = "color: #FF6A89;"><strong>Matrix Factorization</strong></span> 기법 중 하나로 이미 유명</li>
<li>하지만, 데이터에 알 수 없는 값들이 대부분인 경우 그대로 적용할 수 없음</li>
<li>과적합(Overfitting)의 문제</li>
<li>Gradient Descent 방법을 통해 어떻게 SVD를 Netflix Prize 문제에 적합하게 <strong>SVD</strong>를 구현할 수 있는지 코드와 방법 공개</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 공모전 참여에서 우수상을 받다 - 4]]></title>
            <link>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-4</link>
            <guid>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-4</guid>
            <pubDate>Wed, 27 Jul 2022 06:31:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 2022년 05월 20일 ~ 7월 20일까지의 정리글입니다.</p>
</blockquote>
<h1 id="목차">목차</h1>
<ol>
<li>PPT 발표 심사</li>
<li>시상식</li>
</ol>
<hr>
<h1 id="1-ppt-발표-심사">1. PPT 발표 심사</h1>
<p>중복 심사 준비 때문에 ppt 발표를 준비할 시간은 단 이틀 밖에 없었다.
그래도 우린 최선을 다해 끝까지 준비하기로 했다.</p>
<p>인터뷰 심사를 통과하면서 이미 장려상은 확보해둔 탓에, 우수상이나 최우수상만 받을 수 있으면 좋겠다고 생각하며 또 밤을 새며 피피티를 제작했다.</p>
<p>끝이 보인다고 생각하니 피곤한 것도 모르고 다들 즐겁게 준비했던 것 같다.</p>
<p>발표를 어떻게할지 고민하다, 우리는 발표의 대가인 <span style = "color: #A5D8FA;">스티브 잡스</span>의 방법을 차용하자는 의견이 나왔다.</p>
<blockquote>
<p>피피티는 최대한 시각적인 자료 위주로,
설명은 최대한 핵심만 간략하게 전달하기</p>
</blockquote>
<p>&lt;제작한 피피티의 표지&gt;
<img src="https://velog.velcdn.com/images/zero__/post/daceb0d2-0004-4c23-87e1-9570882f017f/image.png" alt=""></p>
<p>위의 피피티를 제출하고 이번에도 네명 다 발표 심사에 참여했다.
워낙 깔끔하게 발표한 탓에 심사위원의 표정도 흡족한 표정이었고,
우리 사업의 장점을 많이 언급해주셔서 감사했다.
(인터뷰 심사 때의 무례한 심사위원은 더이상 오지 않나보다)</p>
<p>발표를 마치고 나올 때, 넷 다 <span style = "color: #FF6A89;">&quot;됐다!!&quot;</span>라고 외쳤다.
이유없이 3등 ~ 5등 사이일 것이라 예상하며 기분좋게 점심을 먹고 집으로 향했다.</p>
<hr>
<p>다음 날, 메일이 왔다.</p>
<p><img src="https://velog.velcdn.com/images/zero__/post/261f8614-07b3-40f1-aef3-0fed5437e8c3/image.png" alt=""></p>
<p>이제 남은 일은  <span style = "color: #FF6A89;">🔥🔥우수상🔥🔥</span>을 받는 일 뿐이었다.</p>
<p>이 모든 일을 겪고 우수상을 받으려니 꿈 같기도하고,
우리가 약 50일간 열심히 달려왔다는 사실이 느껴졌다.</p>
<blockquote>
<p>처음으로 나간 공모전에서,
그것도 <span style = "color: #FF6A89;">76팀 중 5등</span> 안에 들었다는 사실이 너무 뿌듯했다.</p>
</blockquote>
<p>들뜬 우리는 시상식 당일 드레스코드를 입기로 했다.
예쁘게 사진 찍히기 위해 흰색을 드레스코드로 정했다.</p>
<hr>
<h1 id="2-시상식">2. 시상식</h1>
<p>학원 사람들 모두의 축하를 받으며 7월 20일 시상식에 참여했다.</p>
<p>사회자가 1차 서류 심사부터 시상식까지의 과정들을 쭉 나열하는데,
내내 꿈같던 사실이 진짜처럼 느껴지기 시작했다.</p>
<blockquote>
<p>와... 나 진짜, 우리 진짜 상 받는 구나!!!</p>
</blockquote>
<p>우리는 시상식날 꽃다발 대신 조금 특별한걸 준비했다.
그것은 바로, <span style = "color: #FF6A89;">양</span><span style = "color: #A5D8FA;">말</span><span style = "color: #FFB900;">다</span><span style = "color: #82EB5A;">발</span>⭐️</p>
<p><img src="https://velog.velcdn.com/images/zero__/post/b7b0cf7b-7109-4f46-9361-bffa862e3d17/image.png" alt=""></p>
<p>다른팀과 달리 양말을 받아 더 재밌는 시상식이었다😆</p>
<blockquote>
<p>재희님, 양말 감사합니닿ㅎ</p>
</blockquote>
<p>&lt;우리팀 사진&gt;
<img src="https://velog.velcdn.com/images/zero__/post/91d22e1b-61a3-4c51-8c17-fb27c2395e98/image.png" alt=""></p>
<p>역시 드레스코드 맞추길 잘했다🥰
상금으로 300만원 받은 건 안비밀!!</p>
<p>시상식이 끝남과 동시에 기사도 올라왔다.
<a href="https://n.news.naver.com/article/030/0003031888?sid=102">✅ 기사는 여길 클릭</a></p>
<p>&lt;우수상 사진&gt;
<img src="https://velog.velcdn.com/images/zero__/post/522003d0-f944-428b-a59f-dc61034da9ae/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 공모전 참여에서 우수상을 받다 - 3]]></title>
            <link>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-3</link>
            <guid>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-3</guid>
            <pubDate>Wed, 27 Jul 2022 05:21:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 2022년 05월 20일 ~ 7월 20일까지의 정리글입니다.</p>
</blockquote>
<h1 id="목차">목차</h1>
<ol>
<li>아이디어 중복 심사</li>
</ol>
<hr>
<h1 id="1-아이디어-중복심사">1. 아이디어 중복심사</h1>
<p>보람님과 재희님이 남아서 이야기를 들어보니,
표절이 아닌, <span style = "color: #FF6A89;">아이디어 중복</span>이었다.</p>
<p>처음에는 우리가 열심히 준비했는데 아이디어 중복으로 심사를 받아야한다는 소식에 힘이 빠졌다.</p>
<p>다음 발표 심사 준비만으로도 시간이 부족한데,
우리는 아이디어 중복 심사까지 준비해야했기 때문이다.</p>
<p>그러나, <span style = "color: #A5D8FA;">팀원들의 초긍정파워</span>🔥 덕분에 <span style = "color: #A5D8FA;">이번에도 이겨낼 수 있다!!</span>는 마음가짐으로 중복심사 준비를 시작하였다.</p>
<hr>
<h2 id="1-1-중복심사-준비-과정">1-1. 중복심사 준비 과정</h2>
<p>우리팀은 노션에 모든 것을 다 기록해놓고 정리하며 공모전을 준비했었다.
(노션은 아이디어 노출 때문에 공개하지 않았다)</p>
<p>이번에도 우리는 노션에 우리랑 중복이라는 사업과 아이디어들을 정리하기 시작했다.
그런데 이 과정도 쉽지 않았다.</p>
<p><span style = "color: #FFB900;">인터넷 뉴스 기사 단 6줄</span>만 보고 심지어<span style = "color: #FFB900;"> 대만팀에서 기획한 아이디어</span>가 중복이라고 주장한 것도 있었기 때문이다.</p>
<p>대만팀이 기획한 아이디어 대해 아는 정보가 하나도 없어서 이틀간 인터넷이란 인터넷은 다 검색했었다.
나는 심지어 영어로도 검색했었다.
그래도 더 자세한 정보가 나오질않아 겨우 찾은 대만팀 팀장의 인스타 아이디로 DM을 보냈었다.</p>
<blockquote>
<p>그들은 사업화를 한 것도 아니고, 대만과 한국의 지역적 차이, 데이터의 기반이 다르니 아이디어 중복에 대한 걱정은 하지않아도 좋다고 하였다.</p>
</blockquote>
<p>(직접 주고받은 DM)
<img src="https://velog.velcdn.com/images/zero__/post/3e17adfc-fcf1-40de-8a4e-b470db0a5714/image.png" alt=""></p>
<p>다른 사업들도 우리가 구상한 것들과는 다르다는 점을 노션에 잘 정리해두었고,
소명서를 작성하여 사회보장정보원에 제출하였다.
이제 설명만 잘 하면 중복 심사에서 통과를 할 수 있겠다는 희망도 보였다.</p>
<hr>
<h2 id="1-2-아이디어-중복-심사">1-2. 아이디어 중복 심사</h2>
<p>이번 중복심사는 우리 팀원 전원이 갔다.
혼자 가기엔 너무 떨리는 자리니까 다 같이 가서, 적극적으로 해명하기 위함이었다.</p>
<p>아이디어 중복 심사는 이전의 분위기와는 다르게 화기애애했다.</p>
<p>마치 우리의 얘기를 다 들어줄테니 하고싶은 말은 다 해보라는 느낌이 들어 편안하게 발표를 했었다.</p>
<p>심사위원의 질문도 우리가 다 대비한 것들이라 <span style = "color: #FF6A89;">정확한 수치를 언급</span>해가며 답변을 했다.</p>
<p>중복 심사가 끝난 후, 우리는 홀가분한 마음으로 점심을 먹으러 갔다.
사실, 이번이 끝일 줄 알고 또 술 마시러 갔다ㅋㅋㅋㅋㅋ</p>
<p>그리고 결과는 중요하지 않으니 이번 공모전을 참여를 후회하지 말자는 이야기를 나눴다.</p>
<hr>
<blockquote>
<p>그리고 다음날 결과는, 통과였다.</p>
</blockquote>
<p>나는 당연한 결과라 생각했다.
우리팀이 좀 합니다😝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 공모전 참여에서 우수상을 받다 - 2]]></title>
            <link>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-2</link>
            <guid>https://velog.io/@zero__/%EC%B2%AB-%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC%EC%97%90%EC%84%9C-%EC%9A%B0%EC%88%98%EC%83%81%EC%9D%84-%EB%B0%9B%EB%8B%A4-2</guid>
            <pubDate>Wed, 27 Jul 2022 01:24:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 2022년 05월 20일 ~ 7월 20일까지의 정리글입니다.</p>
</blockquote>
<h1 id="목차">목차</h1>
<ol>
<li>1차 컨설팅</li>
<li>인터뷰 심사</li>
<li>2차 컨설팅</li>
</ol>
<hr>
<p><img src="https://velog.velcdn.com/images/zero__/post/8423400f-0abe-4206-9b46-563f96ca5d54/image.jpeg" alt=""></p>
<p>공모전에 출전했다는 것 조차 잊고 수업을 듣는 중,
팀장을 맡았던 보람님에게 연락이 왔다.</p>
<blockquote>
<p><span style = "color: #A5D8FA;">&quot;우리 합격했어요!!&quot;</span>🥳</p>
</blockquote>
<p>그 날, 우리팀은 오후 수업은 뭘 들었는지 기억도 안 날 정도로 신났었다.
그러나 2주 안에 기획서를 수정하고 인터뷰심사를 준비해야해, 자축 시간은 짧게 가졌다.</p>
<hr>
<h1 id="1-1차-컨설팅">1. 1차 컨설팅</h1>
<p>팀원 모두 공모전 참가는 처음이라 어디서부터 수정을 해야하고, 인터뷰 심사는 어떻게 준비를 해야 할 지 막막했다.
다행히도 주최측에서 기획서 컨설팅을 받을 수 있게 도와주어, 나와 성록님이 대표로 컨설팅을 받으러 갔었다.
컨설턴트는 <span style = "color: #FFB900;">롯데벤처스</span>에서 나왔었다.</p>
<br>
우리팀 기획안의 수정사항은

<blockquote>
<p>&lt;수정사항&gt;</p>
</blockquote>
<ol>
<li>교통약자의 시장이 작다.</li>
<li>수익성이 나올 수 있는 구조가 아니다.</li>
</ol>
<p>그러나 위의 단점은 다른팀도 모두 똑같이 받은 피드백이었기에,
우리에게 크게 도움이 되는 조언을 얻지 못했다. 😥
<br>
그러나 우리에겐 <span style = "color: #FF6A89;">두번째 기회</span>가 있었다.</p>
<p>노인일자리 창출을 위주로 기획안을 작성한 사람들을 위해 <span style = "color: #FFB900;">노인인력개발원</span>에서도 컨설턴트도 그 자리에 온 것이었다.
성록님과 나는 피드백을 더 얻기 위해 양해를 구한 후, 우리의 기획안도 봐달라고 요청하였다.
인력개발원에서 오신 분들은 우리의 장점을 부각하는 방법을 알려주셨다.</p>
<blockquote>
<p>&lt;부각할 측면&gt;</p>
</blockquote>
<ol>
<li>도로상태 상태 실시간 반영 및 장애인 시설 점검을 위한 노인일자리 창출</li>
<li>신노년세대를 위한 일자리 창출 방안</li>
</ol>
<p>그래서 우리는 위의 두 가지를 부각하자는 계획을 세웠다.</p>
<hr>
<h2 id="1-1-협업제의">1-1. 협업제의</h2>
<p>피드백을 받을 때, 우리와 같은 주제의 팀이 있었다.
우리팀의 아이디어와 그 팀의 아이디어가 서로의 단점을 보완해줄 것이라 생각했는지,</p>
<blockquote>
<p>&quot;나중에 같이 창업해요. 연락할게요&quot;</p>
</blockquote>
<p>라는 말을 들으며, 한 개발자와 번호 교환을 하였다.</p>
<p>우리의 아이디어가 매력이 있다는 생각과
예상 외의 인맥을 쌓은 것 같아 기분이 좋았다.☺️ 야호~</p>
<hr>
<h2 id="1-2-이대로는-아쉬우니-다른-피드백도-받아보자">1-2. 이대로는 아쉬우니 다른 피드백도 받아보자.</h2>
<p>시간내서 간 컨설팅이 생각보다 많은 도움이 되지 않아,
우리는 각자 믿을 만한 사람들에게 피드백을 더 받기로 했다.
적극적인 자세는 항상 중요하니까!😆</p>
<blockquote>
<ol>
<li>사회복지사로 일하고 있는 사람</li>
<li>공모전 출전 경험이 있는 사람</li>
<li>모두의 연구소 개발자들</li>
</ol>
</blockquote>
<p>다양한 사람에게 다양한 피드백을 받으며 인맥도 쌓았다.
우리는 다양한 피드백을 수용하며 기획안 수정과 함께 인터뷰 심사를 준비하였다.</p>
<hr>
<h1 id="2-인터뷰심사">2. 인터뷰심사</h1>
<p>인터뷰심사 발표는 내가 했고, 성록님이 함께 참여했었다.
처음엔 긴장돼서 심장이 터질 것만 같았는데, 시간이 지날수록 긴장이 풀려 생각보다 잘한 것 같았다.</p>
<p>그런데, 심사위원 중 한 분이 되게 당황스러웠다.</p>
<blockquote>
<p>&quot;지금 이런 아이디어 때문에 제가 여기 앉아있는 거에요?!&quot;
&quot;이거 안 돼, 안 돼. 말이 되는 소릴 하고있어!&quot;</p>
</blockquote>
<p>라는 말을 면전에 대고 하는 것이었다.</p>
<p>질문을 받는 15분 내내, 
이건 무슨 상황인 건지, 왜 여기서 무례한 말들을 들어야하는 것인지 조금 혼란스러웠다.
하지만 우리의 임무는 기획안을 어필하는 것이라는 생각을 하며 질문에 차분하게 대답했다.</p>
<blockquote>
<p>&quot;그렇게 터무니없는 아이디어는 아니다.
우리가 직접 시현을 한 케이스를 보았고, 다른 분들의 피드백도 받은 부분이다.
자료조사도 꼼꼼히 하였으며 저상버스 예약은 실제로 우리가 구현 중에 있다.
우리 사업을 긍정적으로 검토해달라.&quot;</p>
</blockquote>
<p>무례했던 심사위원은 끝까지 이유없이 우리팀에게 화를 냈고,
나와 성록님은 이렇게 탈락하는구나했다.</p>
<p>그래도 처음 나간 공모전에서 인터뷰 심사까지 간 것 만으로도 자랑스럽다며,
맛있는 보쌈이나 먹으러 가자며 둘이서 회식을 했다.</p>
<p><img src="https://velog.velcdn.com/images/zero__/post/277af651-8ed8-443f-a192-0662f147abc5/image.jpeg" alt=""></p>
<p>사실, 우리 때문에 탈락하는 것은 아닐까하는 걱정때문에
속이 좀 쓰려 낮술도 조금 했다ㅋㅋㅋㅋ😜</p>
<hr>
<p>그리고 다음 날, 문자가 왔다.
<img src="https://velog.velcdn.com/images/zero__/post/aaac9ba1-1d85-4878-976f-47b15468ed57/image.jpeg" alt=""></p>
<p>오예, 또 합격이다🥳</p>
<hr>
<h1 id="3-2차-컨설팅">3. 2차 컨설팅</h1>
<p>우리는 곧바로 PPT 발표 심사를 준비하기 위해
며칠밤을 새며 부족한 부분을 보완하고 피피티를 만들었다.</p>
<p>2차 컨설팅은 PPT 발표 위주로 컨설팅을 해준다고 하였다.
이번에도 내가 수업을 빠질 순 없어, 보람님과 재희님이 참석하기로 하였다.</p>
<p>이번엔 어떤 피드백을 받을지 궁금해하며, 컨설팅 결과를 기다리는 중이었다.
그런데, 이번에도 팀장인 보람님께 연락이 왔다.</p>
<blockquote>
<p><span style = "color: #FF6A89;">우리 큰일났어요. 누가 우리 아이디어 표절 제기 했대요. 남아서 얘기 듣기로 했어요.</span></p>
</blockquote>
<p>수업을 듣다 눈 앞이 아득해지고, 아무 생각도 할 수 없었으며 심장이 멈추는 줄 알았다.
표절이라니.
우리가 얼마나 고생했는데.
표절이라니.
이럴 순 없어.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 공모전 참여에서 우수상을 받다 - 1]]></title>
            <link>https://velog.io/@zero__/%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC-%EA%B3%BC%EC%A0%95</link>
            <guid>https://velog.io/@zero__/%EA%B3%B5%EB%AA%A8%EC%A0%84-%EC%B0%B8%EC%97%AC-%EA%B3%BC%EC%A0%95</guid>
            <pubDate>Tue, 26 Jul 2022 07:59:11 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 2022년 05월 20일 ~ 7월 20일까지의 정리글입니다.</p>
</blockquote>
<h2 id="목차">목차</h2>
<ol>
<li>프로젝트 참여 과정</li>
<li>프로젝트 주제</li>
<li>팀 이름 선정</li>
</ol>
<hr>
<p>꼬우~</p>
<h1 id="1-프로젝트-참여-과정">1. 프로젝트 참여 과정</h1>
<blockquote>
<p>&quot;저 사회복지사로 일했었어요!! 같이 하실래요?!&quot;</p>
</blockquote>
<p>나는 현재 부트캠프 인공지능 과정을 듣고 있다.
학원 학생들이 만든 게더타운에서 수업 복습을 하다, 한 팀이 <span style = "color: #FFB900;">사회보장정보원 창업경진대회</span>에 나갈 것이라는 대화를 들었다.</p>
<p>전에 장애인복지관에서 내가 맡았던 사업이 사회보장정보원에서 진행하는 사업이었기에 그 이름이 반갑기도했고,
<span style = "color: #FFB900;">사회복지의 관점이 들어가면 더 재밌을 것 같아</span>,
내가 사회복지사였다며 도움을 주겠다고 먼저 제안하였다.</p>
<h2 id="1-1-팀-구성-과정">1-1. 팀 구성 과정</h2>
<p>팀은 원래 같이 하기로했던 재희님, 보람님이 있었다.
평소 사회복지에 관심이 많았던 성록님과 내가 합류 하여 4명의 팀이 만들어졌다.</p>
<hr>
<h1 id="2-프로젝트-주제">2. 프로젝트 주제</h1>
<h3 id="타겟--서울시에-거주-중인-교통약자-중-스마트폰을-사용가능한-휠체어-이용자">타겟 : 서울시에 거주 중인 교통약자 중, 스마트폰을 사용가능한 휠체어 이용자</h3>
<h3 id="주제--교통약자-맞춤형-경로-안내">주제 : 교통약자 맞춤형 경로 안내</h3>
<h3 id="세부내용-">세부내용 :</h3>
<ul>
<li>휠체어 이용자에게 최적화된 국내 지도를 내재하여 편의성 증진</li>
<li>저상버스와 장애인콜택시 예약 기능 탑재<br>
</li>
</ul>
<hr>
<h2 id="2-1-세부내용-조율-과정">2-1. 세부내용 조율 과정</h2>
<blockquote>
<p>실현 가능성이 있는 아이디어의 포인트! <span style = "color: #FFB900;">&quot;스케일을 줄여라!&quot;</span></p>
</blockquote>
<p><span style = "color: #A5D8FA;"> 교통약자를 위한 길 안내 서비스</span>를 만들자는 생각은 보람님과 재희님이 어느정도 정해놓은 상태였다.</p>
<p>그러나, 두 분이 구상한 아이디어를 들었을 때, 조금 당황했었다. 아래의 두 가지 이유로 실현가능성이 없었기 때문이다.</p>
<blockquote>
<p>&lt;합류했을 때의 개선점&gt; </p>
</blockquote>
<ol>
<li>전국을 대상으로 한 길찾기 기능</li>
</ol>
<p>-&gt; 데이터가 너무 방대하고 원하는 데이터를 구하기가 힘들다. <br>
2. 불명확한 타겟 선정 : 휠체어 이용자 전 연령
-&gt; 아동부터 노인까지 모두를 위한 서비스를 구현하기 위한 조건이 매우 까다롭다.</p>
<p>서비스 구상 혹은 개발에 있어 실현가능성이 가장 중요하다고 생각하여,
스케일을 줄이자는 말과 함께 나는 두가지를 제시하였다.</p>
<blockquote>
<p>&lt;제시한 사항&gt; </p>
</blockquote>
<ol>
<li>데이터 수집이 용이한 서울 먼저 서비스를 시행하자 <br></li>
<li>20대 ~ 60대의 스마트폰 이용이  가능한 사람들을 타겟으로 하여 더 다양한 기능을 넣자</li>
</ol>
<p>몇 차례의 회의 끝에, 길찾기 기능만 있는 것은 다른 사업들과는 차별성이 없어,
<span style = "color: #A5D8FA;">저상버스와 장애인콜택시 예약 기능</span>도 넣기로 했다.
장애인복지관에서 일할 때, 장애인콜택시 예약에 어려움을 겪는 사람을 많이 보았기 때문이다.</p>
<hr>
<h1 id="3-팀-이름-선정">3. 팀 이름 선정</h1>
<blockquote>
<p>어디 갈래 ?</p>
</blockquote>
<p>팀과 서비스 이름에 가장 많은 고민을 했다.
우리 서비스의 특색을 살리면서도, 장애인의 인식개선에도 도움을 주고 싶었기 때문이다.</p>
<p>같이 갈래?
놀러 가자
한 큐에
....</p>
<p>등등 많은 후보가 있었지만, 우리 팀은 <span style = "color: #FFB900;">어디갈래?</span>로 결정하였다.</p>
<ol>
<li>대중교통을 타고 어디든 갈 수 있다는 점 어필</li>
<li>교통약자도 독립적으로 목적지를 정하고, 혼자 움직일 수 있다는 점 어필</li>
</ol>
<hr>
<p>기본적인 사항들을 다 정한 우리팀은 참가에 의미를 두고 빠르게 기획안을 작성하고 제출하였다.</p>
<p>앞으로 무슨 일이 벌어질 줄도 모르고,
끝났다며 마냥 좋아했었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python] web crawling]]></title>
            <link>https://velog.io/@zero__/python-web-crawling</link>
            <guid>https://velog.io/@zero__/python-web-crawling</guid>
            <pubDate>Tue, 17 May 2022 07:04:06 GMT</pubDate>
            <description><![CDATA[<p>프로젝트 준비 덕분에
네이버쇼핑 선물하기 빠른배송 웹 크롤링을 해보았다.</p>
<p><strong>&#39;나도코딩&#39;의 네이버 항공권 웹크롤링 영상 시청 후, 
혼자 응용한 것이다.</strong></p>
<pre><code class="language-python"># 필요한 모듈 불러오기
import time
from selenium import webdriver
import pandas as pd</code></pre>
<pre><code class="language-python"># url 띄우기, path, browser 저장
PATH = &#39;/Users/j/Desktop/ITStudy/Project01/chromedriver&#39;
browser = webdriver.Chrome(PATH)
url =  &#39;https://m.shopping.naver.com/gift/plans/570448&#39;
browser.get(url)
browser.maximize_window()</code></pre>
<p>webdriver가 잘 작동되지않아, 절대경로로 지정하였다.</p>
<pre><code class="language-python"># selenium 잘 동작하는지 확인

print(browser.find_element_by_xpath(&#39;//*[@id=&quot;content&quot;]/div/div[2]/div/ul/li[1]&#39;).text)</code></pre>
<p>결과는 아래와 같이 성공적으로 잘 나왔다.</p>
<pre><code>찜하기
17,000원
할인율
15%
[본사직영] 오설록 구움과자(마들렌,휘낭시에) 세트
상품 자세히보기</code></pre><pre><code class="language-python"># 빠른 배송 가능한 목록 불러오기

file_list = browser.find_elements_by_xpath(&#39;//*[@id=&quot;content&quot;]/div/div[2]/div/ul/li&#39;)
item_list = [i.text for i in file_list]

# 창 닫기
browser.quit()</code></pre>
<p>해당 xpath에 존재하는 text들을 for문을 돌려 뽑아낸 후, 
item_list라는 list를 만들어주었다.</p>
<p>저기서 바로 DataFrame으로 만들어주려 했으나...
아래와 같이 패턴이 다른 요소들이 있어,</p>
<pre><code>([&#39;17,000원&#39;, &#39;할인율&#39;, &#39;15%&#39;, &#39;[본사직영] 오설록 구움과자(마들렌,휘낭시에) 세트&#39;],
 [&#39;18,000원&#39;, &#39;할인율&#39;, &#39;10%&#39;, &#39;[본사직영] 오설록 다쿠아즈 세트&#39;],
 [&#39;29,900원&#39;, &#39;[구매확정2,000원+리뷰5,000원][매일유업] 키즈부스트 밀크 750g 1캔&#39;])</code></pre><p>전처리를 해주었다.</p>
<pre><code class="language-python"># 데이터프레임화 시키기 위해 아이템 별로 리스트화
# 필요없는 element 삭제 : 찜하기, 자세히보기, 할인율

item = []
for i in range(0,len(item_list)):
    item.append(item_list[i].split(&#39;\n&#39;))
    item[i].remove(&quot;찜하기&quot;)
    item[i].remove(&quot;상품 자세히보기&quot;)

    # 패턴이 다른 element 같게 만들기
    if item[i][1] != &#39;할인율&#39;:
        item[i].insert(1,&quot;---&quot;)
        item[i].insert(1,&quot;---&quot;)</code></pre>
<p>그 결과 리스트가 예쁘게, 내가 원하는 요소들로 정리되어,
DataFrame으로 만들어주었다.</p>
<pre><code class="language-python">item_df = pd.DataFrame(item)
item_df</code></pre>
<p>그리고, 다른 페이지도 똑같은 순서로 반복하여 두개의 데이터프레임을 더 만들어내,
3개의 dataframe을 합쳤다.
(웹 크롤링은 똑같은 코드라 생략)</p>
<pre><code class="language-python">naver_quick = pd.concat([item_df,item_df2,item_df3], ignore_index=True)
naver_quick</code></pre>
<p>마지막으로 csv 파일로 만든 후, 
웹 크롤링의 기초 과정을 끝냈다.</p>
<pre><code class="language-python">naver_quick.to_csv(&quot;naver_quick.csv&quot;, mode=&#39;w&#39;)</code></pre>
<br>
<br>

<p>웹크롤링 어렵게만 느껴졌었는데,
막상 해보니까 너무 재밌었다.</p>
<p>그런데 카테고리 별로 크롤링을 하다보니, 같은 과정을 계속해서 반복하는 것이 좀 비효율적으로 느껴져서
함수 등을 이용해 코드를 좀 더 짧고 간단하게 짜는 방법을 연구해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQLZOO] More JOIN operations]]></title>
            <link>https://velog.io/@zero__/SQLZOO-More-JOIN-operations</link>
            <guid>https://velog.io/@zero__/SQLZOO-More-JOIN-operations</guid>
            <pubDate>Wed, 20 Apr 2022 13:24:19 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>1962 movies
List the films where the yr is 1962 [Show id, title]</p>
<pre><code class="language-sql">SELECT id, title
FROM movie
WHERE yr=1962</code></pre>
<br>
</li>
<li><p>When was Citizen Kane released?
Give year of &#39;Citizen Kane&#39;.</p>
<pre><code class="language-sql">select yr
from movie
where title like &#39;Citizen Kane&#39;;</code></pre>
<br>

</li>
</ol>
<p>3.Star Trek movies
List all of the Star Trek movies, include the id, title and yr (all of these movies include the words Star Trek in the title). Order results by year.</p>
<pre><code class="language-sql">select id, title, yr
 from movie
 where title like &#39;Star Trek%&#39;;</code></pre>
<br>

<ol start="4">
<li><p>id for actor Glenn Close
What id number does the actor &#39;Glenn Close&#39; have?</p>
<pre><code class="language-sql">select id
from actor
where name like &#39;Glenn Close&#39;;</code></pre>
<br>
</li>
<li><p>id for Casablanca
What is the id of the film &#39;Casablanca&#39;</p>
<pre><code class="language-sql">select id
from movie
where title like &#39;Casablanca&#39;;</code></pre>
<br>
</li>
<li><p>Cast list for Casablanca
Obtain the cast list for &#39;Casablanca&#39;.</p>
</li>
</ol>
<pre><code class="language-sql">SELECT actor.name
FROM actor JOIN casting
ON casting.actorid = actor.id
join movie
on casting.movieid = movie.id
WHERE movie.title = &#39;casablanca&#39;;</code></pre>
<br>

<ol start="7">
<li><p>Alien cast list
Obtain the cast list for the film &#39;Alien&#39;</p>
<pre><code class="language-sql">select actor.name
from actor join casting
on casting.actorid = actor.id
where casting.movieid = (select id 
                       from movie 
                       where title = &#39;Alien&#39;);</code></pre>
<br>
</li>
<li><p>Harrison Ford movies
List the films in which &#39;Harrison Ford&#39; has appeared</p>
<pre><code class="language-sql">select a.title
from movie a
join casting b on a.id = b.movieid
join actor c on b.actorid = c.id
where c.name = &#39;Harrison Ford&#39;;</code></pre>
<br>
</li>
<li><p>Harrison Ford as a supporting actor
List the films where &#39;Harrison Ford&#39; has appeared - but not in the starring role. 
[Note: the ord field of casting gives the position of the actor. If ord=1 then this actor is in the starring role]</p>
<pre><code class="language-sql">select a.title
from movie a
join casting b on a.id = b.movieid
join actor c on b.actorid = c.id
where c.name = &#39;Harrison Ford&#39;
and b.ord != 1;</code></pre>
<br>
</li>
<li><p>Lead actors in 1962 movies
List the films together with the leading star for all 1962 films.</p>
<pre><code class="language-sql">select a.title, c.name
from movie a
join casting b on a.id = b.movieid
join actor c on b.actorid = c.id
where a.yr = 1962
and b.ord = 1;</code></pre>
<br>
</li>
<li><p>Busy years for Rock Hudson
Which were the busiest years for &#39;Rock Hudson&#39;, show the year and the number of movies he made each year for any year in which he made more than 2 movies.</p>
<pre><code class="language-sql">select yr,COUNT(title) 
from movie 
join casting on movie.id=movieid
join actor   on actorid=actor.id
where name=&#39;Rock Hudson&#39;
group by yr
having count(title) &gt; 1;</code></pre>
<br>
</li>
<li><p>Lead actor in Julie Andrews movies
List the film title and the leading actor for all of the films &#39;Julie Andrews&#39; played in.</p>
</li>
</ol>
<pre><code class="language-sql">SELECT movie.title, actor.name 
FROM movie 
JOIN casting ON movie.id = casting.movieid
JOIN actor ON actor.id = casting.actorid
WHERE movie.id IN 
(SELECT casting.movieId FROM casting JOIN actor ON casting.actorid = actor.id
where actor.name = &#39;Julie Andrews&#39;)
AND casting.ord = 1

/*제일 어려웠던 문제
서브쿼리를 이용하여 JA가 출연한 영화의 리스트를 먼저 뽑으면 의외로 쉽게 풀렸다.
이걸로 이틀 고민한건 안비밀 */</code></pre>
<br>

<ol start="13">
<li><p>Actors with 15 leading roles
Obtain a list, in alphabetical order, of actors who&#39;ve had at least 15 starring roles.</p>
<pre><code class="language-sql">select actor.name
from casting 
join actor
on actor.id = casting.actorid
where ord = 1
group by actor.name
having count(ord) &gt;= 15</code></pre>
<br>
</li>
<li><p>List the films released in the year 1978 ordered by the number of actors in the cast, then by title.</p>
</li>
</ol>
<pre><code class="language-sql">select movie.title, count(casting.ord)
from movie
join casting
on casting.movieid = movie.id
where movie.yr = 1978
group by movie.title
order by count(casting.ord) desc, movie.title;</code></pre>
<br>

<ol start="15">
<li>List all the people who have worked with &#39;Art Garfunkel&#39;.<pre><code class="language-sql">select distinct actor.name
from casting
join actor on casting.actorid = actor.id
where casting.movieid in (select casting.movieid
                       from casting
                       join actor on casting.actorid = actor.id
                       where actor.name = &#39;Art Garfunkel&#39;)
and actor.name != &#39;Art Garfunkel&#39;
order by actor.name;
</code></pre>
</li>
</ol>
<p>// &#39;Art Garfunkel&#39; 이름은 써주기</p>
<pre><code>
&lt;느낀점&gt;
sql은 python처럼 정해진 형식이 없어서
문제를 풀 때 마다 내가 조금씩 다른 형식으로 코드를 짠다는 걸 느꼈다.
코드를 일관성있게 통일하고, 대문자/소문자를 구분하는 연습도 해야겠다.









</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] list vs array]]></title>
            <link>https://velog.io/@zero__/Python-list-vs-array</link>
            <guid>https://velog.io/@zero__/Python-list-vs-array</guid>
            <pubDate>Tue, 19 Apr 2022 14:21:24 GMT</pubDate>
            <description><![CDATA[<p>list와 array는 생긴게 똑같아 공부를 하다 항상 헷갈리곤한다.
따라서 오늘은 이 둘의 차이점에 대해 알아보도록 하겠다.</p>
<h1 id="list">list</h1>
<ul>
<li>인덱스는 존재하나 몇 번째 데이터인지 구분하는 용도</li>
<li>메모리 주소가 <strong>연속적이 아닐</strong> 가능성이 있음</li>
<li><strong>다양한 자료형</strong>으로 구성 가능</li>
<li>값을 추가하고 제거에 용이</li>
<li>연산은 곱셈, 덧셈 가능</li>
</ul>
<h3 id="list의-덧셈과-곱셈">list의 덧셈과 곱셈</h3>
<h4 id="덧셈">덧셈</h4>
<pre><code class="language-python">list1 = [2,4,6,8]
list2 = [1,3,5,7]
list1 + list2

&gt;&gt;[2, 4, 6, 8, 1, 3, 5, 7]</code></pre>
<p>list1과 list2의 각 요소(elements)가 더해지는게 아니라 ,
list1을 기준으로 extend가 되었다.
이를 통해 list의 크기 변경이 가능한 <strong>동적배열</strong>임을 알 수 있다.</p>
<h4 id="곱셈">곱셈</h4>
<pre><code class="language-python">list1 * 4

&gt;&gt; [2, 4, 6, 8, 2, 4, 6, 8, 2, 4, 6, 8, 2, 4, 6, 8]</code></pre>
<p>list1의 요소들이 곱해지는 것이 아닌,
list1을 총 4번 나열했음을 알 수 있다.</p>
<h1 id="array">Array</h1>
<ul>
<li>Numpy 패키지 중 하나로 수치 계산이 가능하여 <strong>다차원 배열에 사용</strong></li>
<li>문법이 간단하여 효율적임.</li>
<li>인덱스 값이 존재함</li>
<li>연속적으로 메모리 관리에 용이 + cache hit의 가능성이 높음</li>
<li><strong>같은 자료형으로 이루어져있음</strong></li>
<li>array 끼리의 연산 가능</li>
<li>전체 연산 가능</li>
</ul>
<blockquote>
<p><strong>cache(캐시)</strong>
자주 사용하는 데이터나 값을 빠르게 꺼내 쓸 수 있도록 미리 복사해 놓는 임시 장소
<strong>cache hit(캐시 히트)</strong>
CPU가 참조하고자 하는 메모리가 캐시에 존재</p>
</blockquote>
<h3 id="array의-연산">Array의 연산</h3>
<h4 id="덧셈-1">덧셈</h4>
<pre><code class="language-python">import numpy as np # array를 사용하기 위해 numpy import

arr1 = np.array([2,4,6,8])
arr2 = np.array([1,3,5,7])
arr1 + arr2

&gt;&gt; array([ 3,  7, 11, 15])</code></pre>
<p>같은 위치에 있는 요소들끼리 더해졌음을 알 수 있다.
이를 통해 array는 크기가 변하지 않는 <strong>정적배열</strong>임을 알 수 있다.</p>
<h4 id="곱셈-1">곱셈</h4>
<pre><code class="language-python">arr1 * arr2

&gt;&gt; array([ 2, 12, 30, 56])</code></pre>
<p>같은 위치에 있는 요소들이 곱해진 것을 알 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PANDAS : loc, iloc]]></title>
            <link>https://velog.io/@zero__/PANDAS-loc-iloc</link>
            <guid>https://velog.io/@zero__/PANDAS-loc-iloc</guid>
            <pubDate>Sun, 17 Apr 2022 06:51:43 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>LOC : 데이터프레임의 행(columns)과 열(rows)의 label 값, <strong>즉 행과 열의 이름</strong>으로 접근
ILOC : 데이터프레임의 index값, <strong>즉 slicing을 할 때의 위치</strong>를 기준으로 접근</p>
</blockquote>
<br>

<h2 id="dataframe-만들기">dataframe 만들기</h2>
<pre><code class="language-python"># 데이터프레임을 만들기 위해 판다스 import
import pandas as pd

# 데이터 만들기
data = {&#39;fruits&#39; : [&#39;banana&#39;, &#39;strawberry&#39;, &#39;apple&#39;],
        &#39;dessert&#39; : [&#39;macaron&#39;, &#39;cake&#39;, &#39;donut&#39;],
        &#39;beverage&#39; : [&#39;coffee&#39;, &#39;beer&#39;, &#39;coke&#39;],
        &#39;food&#39; : [&#39;pizza&#39;, &#39;burger&#39;, &#39;pasta&#39;]}

# 위의 데이터를 dataframe 형식으로 바꾸기
data = pd.DataFrame(data)
data</code></pre>
<table>
<thead>
<tr>
<th></th>
<th>fruits</th>
<th>dessert</th>
<th>beverage</th>
<th>food</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>banana</td>
<td>macaron</td>
<td>coffee</td>
<td>pizza</td>
</tr>
<tr>
<td>1</td>
<td>strawberry</td>
<td>cake</td>
<td>beer</td>
<td>burger</td>
</tr>
<tr>
<td>2</td>
<td>apple</td>
<td>donut</td>
<td>coke</td>
<td>pasta</td>
</tr>
<tr>
<td><br></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<ul>
<li>현재의 index값은 0,1,2.</li>
<li>index 값을 바꾸고 싶을 땐, <code>(데이터명).index = {(바꿀 index명)}</code>으로 바꿔주기<br>
<br>

</li>
</ul>
<h2 id="loc-알아보기">LOC 알아보기</h2>
<pre><code class="language-python">(데이터명).loc[(행의 이름) : (행의 이름), (열의 이름) : (열의 이름)]</code></pre>
<br>

<h4 id="example-1">&lt;example 1&gt;</h4>
<pre><code class="language-python">data.loc[0:2,&#39;beverage&#39;:&#39;food&#39;]</code></pre>
<table>
<thead>
<tr>
<th>beverage</th>
<th>food</th>
</tr>
</thead>
<tbody><tr>
<td>coffee</td>
<td>pizza</td>
</tr>
<tr>
<td>beer</td>
<td>burger</td>
</tr>
<tr>
<td>coke</td>
<td>pasta</td>
</tr>
</tbody></table>
<p> 행의 이름이 &#39;0&#39;부터 &#39;2&#39;까지와  &#39;beverage&#39;열 부터 &#39;food&#39;열까지 출력되었다.</p>
<h4 id="example-2">&lt;example 2&gt;</h4>
<pre><code class="language-python">data.loc[1:2,&#39;dessert&#39;:&#39;beverage&#39;]</code></pre>
<table>
<thead>
<tr>
<th>dessert</th>
<th>beverage</th>
</tr>
</thead>
<tbody><tr>
<td>cake</td>
<td>beer</td>
</tr>
<tr>
<td>donut</td>
<td>coke</td>
</tr>
<tr>
<td><br></td>
<td></td>
</tr>
<tr>
<td>행의 이름이 &#39;1&#39;부터 &#39;2&#39;까지와  &#39;dessert&#39;열 부터 &#39;beverage&#39;열까지 출력되었다.</td>
<td></td>
</tr>
</tbody></table>
<br>
<br>

<h2 id="iloc-알아보기">ILOC 알아보기</h2>
<pre><code class="language-python">(데이터명).iloc[(행의 위치 슬라이싱), (열의 위치 슬라이싱)]</code></pre>
<br>

<h4 id="exampe-1">&lt;exampe 1&gt;</h4>
<pre><code class="language-python">data.iloc[:, 2:]</code></pre>
<table>
<thead>
<tr>
<th>beverage</th>
<th>food</th>
</tr>
</thead>
<tbody><tr>
<td>coffee</td>
<td>pizza</td>
</tr>
<tr>
<td>beer</td>
<td>burger</td>
</tr>
<tr>
<td>coke</td>
<td>pasta</td>
</tr>
</tbody></table>
<p>0행 ~ 끝까지 슬라이싱, 2열부터 끝까지 슬라이싱된 값이 출력되었다. </p>
<h4 id="example-2-1">&lt;example 2&gt;</h4>
<pre><code class="language-python">data.iloc[1:3, 1:3]</code></pre>
<table>
<thead>
<tr>
<th>dessert</th>
<th>beverage</th>
</tr>
</thead>
<tbody><tr>
<td>cake</td>
<td>beer</td>
</tr>
<tr>
<td>donut</td>
<td>coke</td>
</tr>
</tbody></table>
<p>1행부터 3행 슬라이싱, 1열부터 3열까지 슬라이싱 된 값이 출력되었다.</p>
<hr>
<p>만약, 데이터프레임의 정보를 보고싶다면, </p>
<pre><code>(데이터명).iloc[(행의 위치 슬라이싱), (열의 위치)]</code></pre><pre><code class="language-python">data.iloc[0:, 3]</code></pre>
<p>0     pizza
1    burger
2     pasta
Name: food, dtype: object</p>
<p>위와 같이 확인하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PYTHON ERROR : unexpected EOF while parsing]]></title>
            <link>https://velog.io/@zero__/PYTHON-ERROR-unexpected-EOF-while-parsing</link>
            <guid>https://velog.io/@zero__/PYTHON-ERROR-unexpected-EOF-while-parsing</guid>
            <pubDate>Sun, 17 Apr 2022 05:51:52 GMT</pubDate>
            <description><![CDATA[<p>코딩을 하면서 수많은 에러를 마주친다.
오늘은 내가 공부를 하다가 처음 겪어본 에러가 있어 이곳에 기록을 하려한다.
<br></p>
<pre><code class="language-python">q1 = df[&#39;slag&#39;].quantile(0.25)
q2 = df[&#39;slag&#39;].quantile(0.5)
q3 = df[&#39;slag&#39;].quantile(0.75)

iqr = q3 - q1
n = (df.slag &lt; q1 - (1.5 * iqr) | (df.slag &gt; q3 + (1.5 * iqr))</code></pre>
<ul>
<li>참고로 위의 코드는 데이터의 이상치를 확인하는 코드이다.<br>
결과는, 
<span style="color:Crimson">SyntaxError: unexpected EOF while parsing</span>
<br>
## SyntaxError</li>
<li>구문 오류</li>
<li>파이썬 문법을 지키지않아 일어나는 에러.</li>
</ul>
<h2 id="unexpected-eof-while-parsing">unexpected EOF while parsing</h2>
<ul>
<li>프로그램의 구문이 잘못됨.</li>
<li>따옴표(&#39;&#39;.&quot;&quot;)나 괄호((),{}) 등을 확실히 여닫지 않아 생기는 에러.</li>
</ul>
<h2 id="에러가-일어난-이유">에러가 일어난 이유</h2>
<ul>
<li>맨 마지막에 괄호를 제대로 닫지 않아서 생김.</li>
</ul>
<pre><code class="language-python">q1 = df[&#39;slag&#39;].quantile(0.25)
q2 = df[&#39;slag&#39;].quantile(0.5)
q3 = df[&#39;slag&#39;].quantile(0.75)

iqr = q3 - q1
n = (df.slag &lt; q1 - (1.5 * iqr)) | (df.slag &gt; q3 + (1.5 * iqr))
   # 괗호를 제대로 닫아주면 해결되는 문제였다.</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[2016년]]></title>
            <link>https://velog.io/@zero__/2016%EB%85%84</link>
            <guid>https://velog.io/@zero__/2016%EB%85%84</guid>
            <pubDate>Tue, 12 Apr 2022 13:13:54 GMT</pubDate>
            <description><![CDATA[<h3 id="문제-설명">문제 설명</h3>
<p>2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 &quot;TUE&quot;를 반환하세요.</p>
<h3 id="제한-조건">제한 조건</h3>
<p>2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)</p>
<h3 id="입출력-예">입출력 예</h3>
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>5</td>
<td>24</td>
<td>&quot;TUE&quot;</td>
</tr>
<tr>
<td><br></td>
<td></td>
<td></td>
</tr>
<tr>
<td><br></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h3 id="나의-코드">&lt;나의 코드&gt;</h3>
<p><strong>오답주의</strong></p>
<pre><code class="language-python">import datetime

def solution(a, b):
    today = date(2016, a, b)
    week_day = today.weekday()
    if week_day == 0:
      return &quot;MON&quot;
    elif week_day == 1:
      return &quot;TUE&quot;
    elif week_day == 2:
      return &quot;WED&quot;
    elif week_day == 3:
      return &quot;THU&quot;
    elif week_day == 4:
      return &quot;FRI&quot;
    elif week_day == 5:
      return &quot;SAT&quot;
    elif week_day == 6:
      return &quot;SUN&quot;  </code></pre>
<pre><code>채점 결과
정확성: 0.0
합계: 0.0 / 100.0</code></pre><ol>
<li>datetime을 불러온다</li>
<li>weekday 함수를 이용해 0~6이 나왔을 때의 요일을 각각 정해준다.</li>
</ol>
<p>어떻게든 나의 지식 안에서 해결하려고 위처럼 코드를 작성하였다.
Google Colab에선 작동이 잘 되던데...
코딩테스트는 <strong>런타임에러</strong>로 오답이라고 한다.</p>
<br>
<br>

<h3 id="다른-사람의-코드">&lt; 다른 사람의 코드 &gt;</h3>
<pre><code class="language-python">from datetime import date

def solution(a, b):
    dayOfTheWeek = [&#39;MON&#39;,&#39;TUE&#39;,&#39;WED&#39;,&#39;THU&#39;,&#39;FRI&#39;,&#39;SAT&#39;,&#39;SUN&#39;]
    return dayOfTheWeek[date(2016, a, b).weekday()]
</code></pre>
<p>datetime을 import 한다면 위의 식이 알맞은 것이었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQLZOO : SELECT from Nobel Tutorial]]></title>
            <link>https://velog.io/@zero__/SQLZOO-SELECT-from-Nobel-Tutorial</link>
            <guid>https://velog.io/@zero__/SQLZOO-SELECT-from-Nobel-Tutorial</guid>
            <pubDate>Tue, 12 Apr 2022 11:33:56 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>sqlzoo에 나오는 문제들이다.
자세한 사항은 아래의 링크를 클릭해보자.</p>
<blockquote>
<p><a href="https://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial">https://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial</a></p>
</blockquote>
</blockquote>
<ol>
<li><p>Winners from 1950</p>
<pre><code class="language-sql">select * from nobel
where yr = 1950;</code></pre>
</li>
<li><p>1962 Literature</p>
<pre><code class="language-sql">select winner
from nobel
where yr = 1962
and subject =&#39;Literature&#39;;</code></pre>
</li>
<li><p>Albert Einstein</p>
<pre><code class="language-sql">select yr, subject 
from nobel
where winner = &#39;Albert Einstein&#39;;</code></pre>
</li>
<li><p>Recent Peace Prizes</p>
<pre><code class="language-sql">select winner
from nobel
where subject = &#39;peace&#39;
and yr &gt;= 2000;</code></pre>
</li>
<li><p>Literature in the 1980&#39;s</p>
<pre><code class="language-sql">select *
from nobel
where subject = &#39;literature&#39;
and yr between 1980 and 1989;</code></pre>
</li>
<li><p>Only Presidents</p>
<pre><code class="language-sql">select *
from nobel
where winner in (&#39;Theodore Roosevelt&#39;, &#39;Woodrow Wilson&#39;, &#39;Jimmy Carter&#39;, &#39;Barack Obama&#39;);</code></pre>
</li>
<li><p>John</p>
<pre><code class="language-sql">select winner
from nobel
where winner like &#39;john%&#39;;</code></pre>
</li>
<li><p>Chemistry and Physics from different years</p>
<pre><code class="language-sql">SELECT *
FROM nobel
WHERE (subject = &#39;physics&#39; and yr = 1980) or (subject = &#39;chemistry&#39; and yr = 1984);</code></pre>
</li>
<li><p>Exclude Chemists and Medics</p>
<pre><code class="language-sql">select *
from nobel
where yr = 1980
and subject not in (&#39;chemistry&#39;, &#39;medicine&#39;);</code></pre>
</li>
<li><p>Early Medicine, Late Literature</p>
<pre><code class="language-sql">select *
from nobel
where (subject = &#39;medicine&#39; and yr &lt; 1910)
or (subject = &#39;literature&#39; and yr &gt;= 2004);</code></pre>
</li>
<li><p>Umlaut</p>
<pre><code class="language-sql">select *
from nobel
where winner like &#39;peter%&#39;
and winner like &#39;%berg&#39;</code></pre>
</li>
<li><p>Apostrophe</p>
<pre><code class="language-sql">select *
from nobel
where winner like &#39;EUGENE%&#39;
and winner like &#39;%neill&#39;;</code></pre>
</li>
<li><p>Knights of the realm</p>
<pre><code class="language-sql">select winner, yr, subject
from nobel
where winner like &#39;sir%&#39;
order by yr desc, winner;</code></pre>
</li>
<li><p>Chemistry and Physics last
The expression subject IN (&#39;Chemistry&#39;,&#39;Physics&#39;) can be used as a value - it will be 0 or 1.</p>
</li>
</ol>
<p>Show the 1984 winners and subject ordered by subject and winner name; but list Chemistry and Physics last.</p>
<pre><code class="language-sql">select winner, subject
 from nobel
where  yr = 1984
order by subject in (&#39;physics&#39;, &#39;chemistry&#39;), subject, winner;</code></pre>
<p>14번 문제... 분명 맞게 썼는데 정답처리는 안해줬다...
왜지...?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MySQL : in 연산자와 비교연산자 " ="]]></title>
            <link>https://velog.io/@zero__/MySQL-in-%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@zero__/MySQL-in-%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Fri, 08 Apr 2022 15:34:18 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>SQL 연습 가능한 사이트</p>
<blockquote>
<p><a href="https://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial#nobel_Nobel_Laureates">https://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial#nobel_Nobel_Laureates</a></p>
</blockquote>
</blockquote>
<p>SQL은 이론을 보고 코드를 볼 줄 아는 것도 중요하지만,
<strong>실전이 더 중요하다</strong></p>
<p>그래서 &#39;sqlzoo&#39;의 SELECT from Nobel Tutorial 3번 아인슈타인 문제를 풀다가 헷갈리는 개념이 있어 가져와봤다.</p>
<h3 id="문제">문제</h3>
<p>Show the year and subject that won &#39;Albert Einstein&#39; his prize.
(&#39;알버트 아인슈타인&#39;이 우승한 년도와 수상부문을 출력하세요)</p>
<pre><code class="language-mysql">select yr, subject 
 from nobel
 where winner in &#39;Albert Einstein&#39;;

&gt;&gt;Error: Incorrect syntax near &#39;Albert Einstein&#39;.</code></pre>
<br>
<br>
문제는 간단했다.
'Albert Einstein'이 있는 행을 찾아 출력하면 되는 것이니까.

<p>그런데 in 연산자를 썼더니 계속 틀리다고 나왔다.
<em>where column name in (value1, value2,...)</em> 가 맞는데 아니어서 당황했었다.</p>
<p>그런데 다시 알아보니,</p>
<blockquote>
<p>in 연산자 : 찾고자 하는 값이 복수 일 때
비교연산자 &#39;=&#39; : 두 개의 값이 같은지 확인</p>
</blockquote>
<p>비교하고자하는 값이 하나니까 비교연산자 &#39;=&#39; 를 써야했다.</p>
<p>아래는 올바른 연산자를 쓴 것이다.</p>
<pre><code class="language-mysql">select yr, subject 
 from nobel
 where winner = &#39;Albert Einstein&#39;;

 &gt;&gt;  yr      subject
    1921  Physics</code></pre>
<p>SQL은 python과 달리 문법이 매우 직관적이나,
비슷한 연산자들이 많아서 헷갈린다.</p>
<p>코드를 많이 짜보면서 연습을 하는 것 말고는 답이 없는 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[같은 숫자는 싫어]]></title>
            <link>https://velog.io/@zero__/%EA%B0%99%EC%9D%80-%EC%88%AB%EC%9E%90%EB%8A%94-%EC%8B%AB%EC%96%B4</link>
            <guid>https://velog.io/@zero__/%EA%B0%99%EC%9D%80-%EC%88%AB%EC%9E%90%EB%8A%94-%EC%8B%AB%EC%96%B4</guid>
            <pubDate>Wed, 06 Apr 2022 23:10:06 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/cloudflare/zero__/f67bd377-597d-4c3e-af47-8b82eedcab89/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-04-07%20%EC%98%A4%EC%A0%84%207.48.25.png" alt=""></p>
<p>&lt;나의 풀이&gt;</p>
<pre><code class="language-python">def solution(arr):
  answer = []
  for i in range(len(arr)):
    if i == 0:
      answer.append(arr[i])
    elif arr[i] != arr[i-1]:
      answer.append(arr[i])
  return answer</code></pre>
<pre><code>채점 결과
정확성: 71.9
효율성: 28.1
합계: 100.0 / 100.0</code></pre><p>처음 생각 할 때 0번째 배열을 추출 후 앞뒤가 다른 배열만 추출하도록 했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[가운데 글자 가져오기]]></title>
            <link>https://velog.io/@zero__/%EA%B0%80%EC%9A%B4%EB%8D%B0-%EA%B8%80%EC%9E%90-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@zero__/%EA%B0%80%EC%9A%B4%EB%8D%B0-%EA%B8%80%EC%9E%90-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Wed, 06 Apr 2022 22:41:38 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/cloudflare/zero__/9e78a0f1-1d87-4e77-b7ea-cd39254eae86/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-04-07%20%EC%98%A4%EC%A0%84%207.19.31.png" alt=""></p>
<pre><code class="language-python">def solution(s):
  if len(s) % 2 != 0:
    return s[round(len(s)/2)]
  elif len(s) % 2 == 0:
    return s[int(len(s)/2)-1 : int(len(s)/2)+1]</code></pre>
<pre><code>채점 결과
정확성: 93.8
합계: 93.8 / 100.0</code></pre><p>풀이 해석</p>
<ol>
<li>s의 길이를 구한다.</li>
<li>len(s)가 홀수면 2로 나눈 후 반올림한 수 인덱싱</li>
<li>len(s)가 짝수면 앞뒤글자를 슬라이싱한다.</li>
</ol>
<p>하지만 테스트 5번에서 실패가 나왔다.</p>
<p>&lt;수정&gt;</p>
<pre><code class="language-python">def solution(s):
  if len(s) % 2 != 0:
    return s[round(len(s)//2)]
  elif len(s) % 2 == 0:
    return s[int(len(s)//2)-1 : int(len(s)//2)+1]</code></pre>
<p>알고보니 인덱싱을 할 때 정수 부분의 수만 구하면 되기에 // 연산자를 써야 하는 것이었다.</p>
<p>&lt;다른 사람의 풀이&gt;</p>
<pre><code class="language-pyhon">def solution(s):
    return s[(len(s)-1)//2:len(s)//2+1]</code></pre>
<p>위의 식을 이용하면 힘들게 짝수와 홀수를 구분하지 않아도 된다.</p>
]]></description>
        </item>
    </channel>
</rss>