반응형

안녕하세요.

프로그래밍을 능숙하게 사용하기 위해서 그리고 조금 더 나은 코드를 작성하기 위해서 알고리즘 문제를 풀고 있습니다. 알고리즘은 leetcode에서 풀고 있는데요. 주중, 하루 한 문제씩은 풀자라는 마음으로 10번 문제를 넘겼습니다 :)

그래서 1 ~ 10번 문제까지 풀면서 든 생각과 앞으로의 다짐을 다시 다져 보고 갈려고 해요.

10번까지 풀면서 스스로 풀지 못한 문제도 더러 있었습니다. 또는 이 문제는 생각보다 쉽네라는 문제도 있었고요. 알고리즘 문제를 처음 풀 때 for문과 그리고 for문의 연속이었습니다. 물론 답은 나옵니다. 하지만 우아하지는 않았습니다. 문제를 딱 보고 그대로 생각나는 대로 로직을 작성했거든요. 답이 통과가 되면 다른 사람 풀이법을 확인했습니다. 라는 소리가 절로 나옵니다. 정말 기발하거든요. 어떻게 이렇게 생각을 하지 그리고 배웁니다. 다음번엔 나도 이런 방향으로 생각하고 이렇게 풀 수 있다면 훌륭한 방법들은 제 것이 되는 것이니까요. 성취감과 풀어가는 재미가 있습니다.

 

위와 같이 프로그래밍을 로직적으로 배우는 건 물론입니다. 더불어 문제를 풀면서 프로그래밍 언어적으로도 정말 많이 배웁니다. python 언어를 사용한다면 정렬 / 리스트 중 가장 긴 요소 / 몫과 나머지 구하기 이런 방법들을 말이죠. 처음에는 이런 언어의 테크닉적인 기술이 부족해 구글을 많이 찾았습니다. 물론 지금도 부족해서 계속 찾아보고 있습니다. 이후에 어느 정도 선에 오른다면 지금 보다는 구글 검색을 하지 않고 더욱 빠르게 작성할 것입니다. 알고리즘 문제를 푸는 이유 중 하나죠. 언어를 능수능란하게 사용하기 위해서 알고리즘 문제를 풉니다. 알고리즘 문제를 풀지 않는다면 정말 효과적으로 다양하게 언어를 사용하기가 쉽지 않습니다. 일반적인 프레임워크를 배우는 건 언어를 배우는 것과는 다르거든요.

하나의 언어를 기준으로 알고리즘 문제를 꾸준하게 풀고 필요로 하는 언어도 하나 정해서 복습도 할 겸 병행해서 풀면 더욱 효과적이겠습니다.

 

앞으로는

- 주 중 하루에 한 문제 풀기 (잘하고 있습니다)

- 1번부터 복습 시작 (반복 학습이 필요합니다. 앞에 내용을 잊고 있거든요)

- 다른 언어로 작성해보기 (다른 언어도 잘 사용하고 알고리즘 복습도 하는 효과를 봅니다)

 

취업을 위해서가 아닙니다. 프로그래밍을 업으로 살려면 알고리즘 문제 연습은 계속되어야겠습니다.

시중에 나와 있는 알고리즘 책들도 많고 강의도 많습니다. 하지만 스스로가 풀지 않으면 무슨 소용일까요? 스스로가 생각해보지 않으면 무슨 소용이 있을까요? 물론 책과 강의를 보더라도 도움이 되겠지만 스스로가 더욱 잘하고 싶고 본질적으로 볼 때 우리가 직접 코드를 작성하기를 원하니까요. 그래서 우리는 한 문제, 한 문제씩 직접 풀어 봐요^^

다음 알고리즘 점검은 30번 문제까지 풀고 이후에 하겠습니다.

감사합니다 :)

 

* 알고리즘 사이트 - leetcode

https://leetcode.com/

반응형
반응형

시리얼라이져을 통해서 반환된 값이 OrderedDict이 나왔습니다.

위의 모습은 OrderedDict가 리스트에 담겨 있는 모습입니다.

Dict를 이용하여 장고 모델에 직접 데이터 생성을 하고 싶어 OrderedDict를 Dict로 변경하는 모습을 보겠습니다.

from collections import OrderedDict

dict(OrderedDict(val))

Dict로 변경하면 아래의 모습과 같이 나옵니다 :)

그리고 Dict를 이용해서 데이터 생성을 하고 싶습니다.

Dict를 사용하면 키 값이 줄어들거나 변해도 하드코딩 없이 단 한 줄로 데이터 생성을 하실 수 있습니다.

models.Language(me=user, **dict(OrderedDict(val)))

dict값을 **딕셔너리_변수명 으로 데이터 생성을 해주시면 정말 간단하게 데이터 생성을 할 수 있습니다 :)

유저를 넘겨준 이유는 외래키가 있어 넘겨준 값입니다. (딕셔너리만 참고를 해주세요.)

유용하게 사용하시면 좋겠습니다.

감사합니다 ^^

반응형
반응형

안녕하세요.

깃을 사용하면서 작업을 하실 때는 주로 다른 브랜치를 만들어 작업을 합니다.

다른 브랜치에서 작업을 하면서도 master 브랜치는 끊임없이 작업이 되는데요.

현재 작업하시는 브랜치master 브랜치에 비해커밋이 낮아지게 됩니다.

작업하시는 브랜치를 최신화하는 방법을 살펴보겠습니다.

기존의 merge 개념이 아닌 rebase 개념을 사용을 하는데요. rebase를 하게 되면 커밋이 일자로 만들어집니다.

현재 작업하는 브랜치 상태는 다음과 같습니다.

작업 중인 브랜치와 마스터 브랜치가 다른 모습이 보입니다.

우리가 원하는 작업 브랜치는 아래와 같은 모습이 되기를 원합니다.

머지가 아닌 일자로 커밋이 정렬이 됩니다.

그럼 다음 명령어를 입력해주세요.

마스터 브랜치인지 확인을 해주시고요. 마스터 브랜치에서 깃 헙에 있는 소스를 당겨옵니다.

git branch
git checkout master
git pull upstream master

최신 소스를 받아 오셨다면 이제는 리베이스를 진행하겠습니다.

git checkout my-branch
git rebase master
git checkout master
git merge my-branch --ff

작업 브랜치로 변경해주시고요. master를 리베이스 하신 다음에, 마스터 브랜치로 변경 후 머지를 해주시면 됩니다.

그럼 작업 브랜치는 최신 소스가 반영이 되어 있는 모습을 보실 수 있겠습니다.

감사합니다 ^^

반응형
반응형

안녕하세요.

파이썬은 여러 버전을 갖고 있습니다. 라이브러리마다 사용되는 파이썬 버전이 틀린 경우도 비일비재합니다.

파이썬 버전을 낮추고 높이고 이렇게 사용하실 필요는 없습니다.

필요한 버전을 버전별로 다운로드를 하여서 사용하시면 됩니다.

 

파이썬을 여러 버전을 어떻게 사용하는지 알아보도록 하겠습니다.

현재 제 컴퓨터에는 파이썬 3.7을 사용하고 있습니다. 그리고 파이썬 3.5 버전도 같이 사용하고 싶습니다.

현재 파이썬 버전부터 확인을 하겠습니다.

파이썬 버전 확인은 cmd 창에다가 python을 입력해주시면 됩니다.

파이썬 3.7이 설치가 된 것을 확인을 했습니다.

다음으로 파이썬 3.5 버전을 다운로드를 하고 설치를 해주셔야 되는데요.

https://www.python.org/downloads/

파이썬 3.5 버전을 다운로드하여주세요.

 

다운로드 이후에 설치를 하시면서 Add to Path 체크박스에 체크를 해주세요.

설치를 하고 난 이후에 파이썬 명령어를 입력하면 3.5 버전이 나옵니다.

3.5를 설치를 했고 기존에는 3.7 버전을 사용하고 있었습니다.

이제는 파이썬을 시작할 때 -3.5 또는 -3.7을 붙여 주셔야 됩니다.

예를 들면 다음과 같습니다.

py -3.5 index.py

py -3.7 index.py

 

위의 실행은 파이썬 프로그램을 실행할 때입니다.

pip을 사용할 때-m을 붙여 주셔야 됩니다. 그리고 필요로 하는 명령어를 입력해주세요.

아래 예는 pip을 이용하여 virtualenv 설치를 진행합니다.

py -3.5 -m pip install virtualenv

파이썬 버전별로 설치할 때는 위와 같이 사용해주시면 됩니다.

혹시나 파이썬 2를 사용하고 싶으시다면 파이썬 설치 이후에 py -2를 입력해서 사용해주시면 됩니다.

 

추가적으로 가상 환경을 만들 때는 다음과 같은 예를 사용합니다.

virtualenv [가상 환경 이름] --python=[파이썬 버전]

cmd 창에 입력을 해주시면 되는데요. 참고해주세요.

virtualenv pyvenv2 --python=python2.7
virtualenv pyvenv3.5 --python=python3.5
virtualenv pyvenv3.7 --python=python3.7

 

글로벌한, 전체 위치에서는 파이썬 버전을 붙여줍니다. 조금은 번거로울 수도 있습니다.

하지만 파이썬은 가상 환경을 구동해서 프로젝트를 개발합니다.

가상 환경 내에서는 이런 버전을 붙일 필요 없습니다. 특정 버전만 사용하기 때문이죠 :)

이제는 필요로 하는 파이썬 버전을 설치하셔서 원활히 개발을 하시면 좋겠습니다.

감사합니다 ^^

반응형
반응형

데이터 분석을 위해서는 R언어도 사용이 많이 되지만 파이썬도 정말 많이 사용이 됩니다. 그중 손에 꼽는 라이브러리를 뽑자면 바로 pandas(판다스)입니다. 주식 데이터만 보더라도 2차원으로 다뤄집니다. 기존의 데이터 타입으로 보기 좋게 그리고 쉽게 쉽게 데이터 핸들을 하기에는 조금은 불편합니다.

그래서 더욱 편리하게 분석을 하기 위해서 사용되는 라이브러리입니다. 이렇게 원하는 데이터를 가공하고 보기 쉽게 인사트이를 얻기 위해서 판다스를 학습하도록 하겠습니다.

 

설치

가상환경을 켜주시고요 아래의 명령어를 입력해주세요.

pip install pandas

DataFrame

DataFrame 사용법은 딕셔너리 처럼 키(key)와 값(value)을 주면 됩니다.

from pandas import Series, DataFrame

if __name__ == '__main__':
    raw_data = {'col0': [1, 2, 3, 4],
                'col1': [10, 20, 30, 40],
                'col2': [100, 200, 300, 400]}

    data = DataFrame(raw_data)
    print(raw_data)
    print('--------------------------------')
    print(data)

raw_data 딕셔너리를 만들어 줍니다.

다음으로 DataFrame의 생성자로 넘겨주시면 되겠습니다.

위에는 raw_data 값(딕셔너리)이고 아래는 DataFrame 을 출력했습니다. DataFrame이 보기에도 깔끔합니다.

다음으로는 실제 주식 데이터를 받는다고 생각하고 데이터를 저장합니다.

from pandas import Series, DataFrame

if __name__ == '__main__':
    daeshin = {'open':  [11650, 11100, 11200, 11100, 11000],
            'high':  [12100, 11800, 11200, 11100, 11150],
            'low' :  [11600, 11050, 10900, 10950, 10900],
            'close': [11900, 11600, 11000, 11100, 11050]}

    date = ['20.03.09', '20.03.10', '20.03.11', '20.03.12', '20.03.13']
    daeshin_day = DataFrame(
                    daeshin,
                    columns=['open', 'high', 'low', 'close'],
                    index=date
                    )
    print(daeshin_day)
    print('--------------------------------')
    print(daeshin_day['open']['20.03.09'])

DataFrame에 columns이라는 인자가 보입니다. columns 인자를 입력해주면 입력되는 컬럼의 순서를 지정할 수 있습니다. index 인자를 입력해주면 맨 왼쪽에 보이시는 인덱스를 직접 입력 하실 수 있는데요. 인덱스를 입력해주시지 않으면 0, 1, 2 순번이 입력이 됩니다. columns 인자를 넘기지 않는다면 컬럼의 순서가 임의로 변경 될 수 있습니다.

흔히 다루는 DataFrame 방법입니다. 컬럼 / 인덱스 / 로우를 출력하는 모습을 보실 수 있습니다.

# Columns
print(daeshin_day.columns)
# index
print(daeshin_day.index)  
# loc
print(daeshin_day.loc['20.03.09'])

전체적인 데이터를 살펴 볼때 출력을 다음과 같이 출력을 해봅니다.

앞쪽 2개, 마지막 2개, 슬라이스로 0부터 2까지 출력하는 모습입니다.

print(daeshin_day.head(2))
print(daeshin_day.tail(2))
print(daeshin_day[0:3])

 

판다스를 다루는 방법을 익혀 봤습니다.

판다스는 기능들이 정말 많은데 이 내용은 판다스를 다루는 내용 중 기본입니다.

손에 익히고 필요로 하는 내용들은 그때그때 더욱 익히도록 해야겠습니다.

 

감사합니다.

 

* 참고자료(위키독스)

https://wikidocs.net/2873

반응형

+ Recent posts