머신러닝에 대해서 공부를 한다고 하면,

예전에는 (아직도) R 등과 같은 수학에 맞춰진 언어를 소개하기도 하지만 대부분은 Python을 추천한다.


사실은 Python이라는 언어 자체가 중요한 것이 아니라

머신러닝을 할 때 필요한 많은 기능(?)들을 제공해주는 라이브러리들이 중요한데

Pandas, Numpy 라이브러리가 워낙에 잘 되어 있어서 Python을 사용하라고 하는 것이다.

물론 Python이라는 언어 자체도 매력적이긴 하지만...



이에 대해서 공부를 하고자 하는 분들에게 드리는 좋은 정보~


Google에서 무려 한국어로 제공해주는 "머신러닝 단기집중과정" 온라인 강좌

https://developers.google.com/machine-learning/crash-course


그 중에서도 Pandas에 대해서 직접 실습해가며 배울 수 있는 정말 멋진 과정

- https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=pandas-colab&hl=ko



그런데, 위의 내용 말고도 좋은 강좌가 하나 더 있다.

머신러닝에 대해서 공부하다보면 누구나 알게 되는 Kaggle !!


 Kaggle에서도 Pandas에 대해서 친절한 강좌를 제공해준다.

https://www.kaggle.com/learn/pandas


4시간이면 끝낼 수 있단다~!! ^^ (필자는 멍청해서 4일은 걸릴듯... ㅠㅜ)




모두들 즐거운 머신러닝 공부시간 되세요~


반응형


솔직히 퀸덤을 보기 전까지 "(여자)아이들"이라는 걸그룹을 잘 몰랐다.


노래를 듣고는 '아! 이 노래!!' 했었는데...


퀸덤을 보면서 실력도 좋고, 매력이 있네~ 하던 중!!!





"싫다고 말해(Nightmare Ver.)"


정말 짱이다!!!



앞뒤 스토리까지 보고 싶은 분들은 아래 영상으로...






이런(nightmare) 컨셉 자체가 흔하지 않은데

이걸 너무나 열심히 그것도 잘 소화해버렸다.


걸그룹인데... 맨발로... 화장을 지워가며... 이런 댄스를...

거기에 중간 중간 연기를 보면 정말 소름 그 자체다!!!


이건 정말이지... 전국민이 봐야할 영상이다 !!!



사실.. 솔직히...

중간의 소연의 랩 부분이 조금 아쉬웠지만

약간 날 것 그대로의 발성도

나름의 컨셉일 수 있으니...



이 노래를 보고 듣고

(여자)아이들의 팬이 되기로 했다 !!!




정말 간만에 느낀 감동있었다!!!


14년도 불후의 명곡

알리(Ali) - 내 생애 단 한번만

이후로 이 정도의 감동은 정말이지...



가창력

연기력

퍼포먼스

몰입감

독창성

...


무조건 강추!!!


반응형


옛날 옛날 한 옛날에.... 잠시 궁금했던 git clone 옵션들... [ bare / mirror ]


한 번 테스트 해본다고 마음 먹은지 몇 년만에 갑자기 하고 싶다는 의욕이 불끈! ... 은 거짓말이고

회사 업무 中 [ bare / mirror ]  옵션의 차이에 대한 문의가 있었고

이에 대해서 한 번 살펴보고 싶어졌다!!!


0. clone

    - 일단 무조건 clone 해봤다.

$ git clone git@github.com:tensorflow/tensorflow.git ./tensorflow-normal

Cloning into './tensorflow-normal'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 453.08 MiB | 8.29 MiB/s, done.

Resolving deltas: 100% (643770/643770), done.

Checking out files: 100% (19052/19052), done.


$ du -hs ./tensorflow-normal
690M    ./tensorflow-normal


$ git clone --no-checkout git@github.com:tensorflow/tensorflow.git ./tensorflow-no

Cloning into './tensorflow-no'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 453.51 MiB | 8.85 MiB/s, done.

Resolving deltas: 100% (643732/643732), done.


$ du -hs ./tensorflow-no
475M    ./tensorflow-no


$ git clone --bare git@github.com:tensorflow/tensorflow.git ./tensorflow-bare

Cloning into bare repository './tensorflow-bare'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 796000 (delta 0), reused 3 (delta 0), pack-reused 795997

Receiving objects: 100% (796000/796000), 455.34 MiB | 8.28 MiB/s, done.

Resolving deltas: 100% (643815/643815), done.


$ du -hs ./tensorflow-bare
477M    ./tensorflow-bare


$ git clone --mirror git@github.com:tensorflow/tensorflow.git ./tensorflow-mirror

Cloning into bare repository './tensorflow-mirror'...

remote: Enumerating objects: 1124, done.

remote: Counting objects: 100% (1124/1124), done.

remote: Compressing objects: 100% (1116/1116), done.

remote: Total 1055983 (delta 805), reused 21 (delta 8), pack-reused 1054859

Receiving objects: 100% (1055983/1055983), 1.09 GiB | 8.69 MiB/s, done.

Resolving deltas: 100% (783532/783532), done.


$ du -hs ./tensorflow-mirror
1.2G    ./tensorflow-mirror



1. 정리

    - 위 내용을 표로 정리하면 아래와 같다.


구분 

 normal

 --no-checkout

--bare 

--mirror 

objects 

796,000 

796,000 

796,000 

1,055,983 

Receiving Size 

453.08 MiB 

453.51 MiB 

455.34 MiB 

1.09 GiB 

du Size 

690 M 

475 M 

477 M 

1.2 G 



2. 도식화

    - 위의 상황을 그림으로 설명해보면 아래와 같다.




3. 설명

    - normal

        . 당연히 commit 이력을 모두 담고 있고, 거기에다가 기본 branch로 설정된 소스코드가 working tree에 존재하게 된다.

    - no-checkout

        . commit 이력을 모두 담고 있고, 아직은 working tree에 소스코드를 넣어놓지는 않은 상태다.

    - bare

        . commit 이력만 담고 있다

    - mirror

        . 일반적인 commit 이력뿐만 아니라, 숨어있는(?) 모든 이력들을 담고 있다.


    # 적고나니 이게 뭔 설명인가 싶네.... ^^



4. 차이점 살펴보기

    - normal vs no-checkout

        . HEAD가 가리키는 기본 branch의 latest commit으로 checkout 했냐/안했냐의 차이만 있다.

        . no-checkout으로 clone 한 뒤에 "git checkout -b master"를 하면 결국 똑같다.


    - normal vs bare

        . bare 옵션으로 clone을 하는 것은 개발을 하고자 하는 용도가 아니다. 그러므로 working tree는 없다.

        . normal clone을 했을 때 ".git" 디렉토리 부분만 있는 것이 bare 옵션이기 때문이다.

$ diff ./tensorflow-bare/config ./tensorflow-normal/.git/config

4c4,5

<       bare = true

---

>       bare = false

>       logallrefupdates = true

6a8,11

>       fetch = +refs/heads/*:refs/remotes/origin/*

> [branch "master"]

>       remote = origin

>       merge = refs/heads/master

        . 위의 차이를 보면 알겠지만, bare 옵션으로 clone을 하게 되면 remote를 바라보지 않는다


    - bare vs mirror

        . mirror 옵션은 현재 서버에 기록된(?) 모든 사항을 전부 가져오게 된다.

$ nano ./tensorflow-mirror/packed-refs

# pack-refs with: peeled fully-peeled sorted

4be56f381cd000e91f79209aaf150636db6fb840 refs/heads/0.6.0

...

45e1e4598d3ebab316bf87df9160656f524af36c refs/heads/master

e1c85596366f3133c797f153dac34e01589a231f refs/pull/10000/head

c2d4f5e964503d17107123e51139aa8bbf27c57c refs/pull/10007/head

29d57e0360306de6bc9021eec4b633e96f3549f5 refs/pull/10008/head

ad9e6a95e53a4407db44e0436fc5318522e832cf refs/pull/10011/head

...

        . bare 옵션의 경우에는 "refs/heads/*" 항목만 보이지만,

        . mirror 옵션의 경우에는 "refs/pull/*" 항목도 보인다.

        . GitHub에서 Pull-Request를 할 때 사용되는 commit들이 기록되는 위치가 바로 "refs/pull/*" 이다.



위의 내용에 대해서 잘 생각해보고 용도에 맞춰서 잘 사용하기 바란다~


반응형


Ubuntu에서 Python3 환경 셋업을 한 뒤에 (https://www.whatwant.com/entry/Python3-환경-만들기-버전-변경하기-in-Ubuntu)

pandas를 사용해보고자 했더니, 에러가 발생...


Traceback (most recent call last):

  File "./test.py", line 4, in <module>

    import pandas as pd

ModuleNotFoundError: No module named 'pandas'




0. 현재 환경


    - 아래 작업을 실행한 환경은 다음과 같다


$ lsb_release -a


No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.3 LTS

Release:        18.04

Codename:       bionic



$ python --version


Python 3.6.9


    - Python 3.7 버전으로 했을 경우에는 아래와 같이 진행하면 충돌(?)이 있다. 3.6 버전으로 진행하길...




1. pandas 설치하기


    - 뭔가 무지막지하게 많이 설치된다.


$ sudo apt-get install python3-pandas


Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  blt fonts-lyx javascript-common libaec0 libblas3 libblosc1 libgfortran4 libhdf5-100 libjbig0 libjpeg-turbo8 libjpeg8 libjs-jquery libjs-jquery-ui liblapack3 liblcms2-2 libsnappy1v5 libsz2 libtcl8.6 libtiff5 libtk8.6 libwebp6 libwebpdemux2

  libwebpmux3 libxft2 libxrender1 libxss1 python-matplotlib-data python-tables-data python3-bs4 python3-cycler python3-dateutil python3-decorator python3-html5lib python3-lxml python3-matplotlib python3-numexpr python3-numpy python3-olefile

  python3-pandas-lib python3-pil python3-pyparsing python3-scipy python3-tables python3-tables-lib python3-tk python3-tz python3-webencodings tk8.6-blt2.5 ttf-bitstream-vera x11-common

Suggested packages:

  blt-demo apache2 | lighttpd | httpd libjs-jquery-ui-docs liblcms2-utils tcl8.6 tk8.6 python-cycler-doc python3-genshi python3-lxml-dbg python-lxml-doc dvipng ffmpeg gir1.2-gtk-3.0 ghostscript inkscape ipython3 librsvg2-common

  python-matplotlib-doc python3-cairocffi python3-gi-cairo python3-gobject python3-nose python3-pyqt4 python3-sip python3-tornado texlive-extra-utils texlive-latex-extra ttf-staypuft gfortran python-numpy-doc python3-dev python3-numpy-dbg

  python-pandas-doc python-pil-doc python3-pil-dbg python-pyparsing-doc python-scipy-doc python-tables-doc python3-netcdf4 vitables tix python3-tk-dbg

The following NEW packages will be installed:

  blt fonts-lyx javascript-common libaec0 libblas3 libblosc1 libgfortran4 libhdf5-100 libjbig0 libjpeg-turbo8 libjpeg8 libjs-jquery libjs-jquery-ui liblapack3 liblcms2-2 libsnappy1v5 libsz2 libtcl8.6 libtiff5 libtk8.6 libwebp6 libwebpdemux2

  libwebpmux3 libxft2 libxrender1 libxss1 python-matplotlib-data python-tables-data python3-bs4 python3-cycler python3-dateutil python3-decorator python3-html5lib python3-lxml python3-matplotlib python3-numexpr python3-numpy python3-olefile

  python3-pandas python3-pandas-lib python3-pil python3-pyparsing python3-scipy python3-tables python3-tables-lib python3-tk python3-tz python3-webencodings tk8.6-blt2.5 ttf-bitstream-vera x11-common

0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded.

Need to get 35.7 MB of archives.

After this operation, 160 MB of additional disk space will be used.

Do you want to continue? [Y/n]




2. 테스트 코드


    - 잘 동작하는지 살펴보자. 샘플은 Kaggle의 내용을 참조했다.


import pandas as pd

import pprint


pp = pprint.PrettyPrinter(indent=4)


if __name__ == "__main__":


    fruits = pd.DataFrame( [[30, 21]], columns=['Apples', 'Bananas'] )

    pp.pprint( fruits )


    exit(0)


파이팅~!!!

반응형


Billie Eilish - bad guy






라이브





비긴어게인






비긴어게인3을 보다가 어디서 많이 들어본 노래인데... 갑자기 확 끌려서 찾아본 노래...

빌리 아일리쉬라는 2001년생 미국 여성 가수의 노래.


상당히 독특한 캐릭터를 갖고 있는 가수다.

신체 이형 장애, 투렛 증후군, 유당 불내증, 글루텐 알러지 등의 많은 병을 갖고 있고

학업도 홈스쿨링으로 하고 있다.

이러한 배경에다가 공포 영화를 좋아하는 취향 덕분인지

음악에도 이러한 색깔이 많이 묻어나있으며

특히 뮤비는... 정말이지...



반응형


Python version.2 지원이 끝난다고 하니

이제는 Python version.3 환경을 기본으로 사용해야할 것 같다.


Ubuntu를 설치하면 기본적으로 셋팅되어 있는 Python은 version.2 이다.


이를 변경하여 Python version.3 환경으로 꾸며 보고자 한다.




0. 기본 환경


    - Ubuntu 설치가 된 깨끗한(?) 환경이다.


$ lsb_release -a


No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.3 LTS

Release:        18.04

Codename:       bionic



$ python --version


Python 2.7.17




1. python3 상태 확인


    - 어?! 그런데, 살펴보면 python3도 이미 설치되어 있다.


$ python3 --version


Python 3.6.9


    - 뭐뭐가 있는지 한 번 보자


$ ls /usr/bin/ | grep python


dh_python2

python

python-config

python2

python2-config

python2.7

python2.7-config

python3

python3.6

python3.6m

python3m

x86_64-linux-gnu-python-config

x86_64-linux-gnu-python2.7-config




2. python 3.7 설치하기


    - 추가로 Python 3.7 버전을 설치해보자


$ sudo apt-get install python3.7


Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  libpython3.7-minimal libpython3.7-stdlib python3.7-minimal

Suggested packages:

  python3.7-venv python3.7-doc binfmt-support

The following NEW packages will be installed:

  libpython3.7-minimal libpython3.7-stdlib python3.7 python3.7-minimal

0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.

Need to get 4,282 kB of archives.

After this operation, 22.5 MB of additional disk space will be used.

Do you want to continue? [Y/n]


    - 잘 설치되어 있는지 확인 !


$ python3.7 --version


Python 3.7.5



$ ls /usr/bin/ | grep python


dh_python2

python

python-config

python2

python2-config

python2.7

python2.7-config

python3

python3.6

python3.6m

python3.7

python3.7m

python3m

x86_64-linux-gnu-python-config

x86_64-linux-gnu-python2.7-config




3. Python 버전 등록


    - 기본적인 설정이 등록되어 있는지 확인하여 보자


$ sudo update-alternatives --config python


update-alternatives: error: no alternatives for python


    - 기본 정보를 차례대로 등록해보자


$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1


update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode



$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2


update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode



$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3


update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python (python) in auto mode




4. Python 버전 설정


    - 위에서 기본적으로 등록을 했으니... 실제 확인


$ sudo update-alternatives --config python


There are 3 choices for the alternative python (providing /usr/bin/python).


  Selection    Path                Priority   Status

------------------------------------------------------------

* 0            /usr/bin/python3.7   3         auto mode

  1            /usr/bin/python2.7   1         manual mode

  2            /usr/bin/python3.6   2         manual mode

  3            /usr/bin/python3.7   3         manual mode


Press <enter> to keep the current choice[*], or type selection number: 0



$ python --version


Python 3.7.5


    - 이제, "python" 이라는 이름으로 버전 확인을 하면 '3.7.5'가 나온다 !!!



그런데, 3.7 버전으로 했을 경우에.... 뭔가 신경써야할 것들이 많은 것 같다 !! (라이브러리 관리가 쉽지 않다는...)

Ubuntu에서는 현재 3.6 버전을 기본으로 제공하고 있으니 이를 따라서 3.6 버전으로 가는 것을 추천한다.



모두 수고하셨어욥~!!


반응형


레트로 트랜드에 따라 (응?! 핑계?! 으..응?!)

오래전 PS2 게임들을 하나씩 해보고 있다.



이번 주에 해본 게임은 "Fatal Frame (영 제로)"




너무나 잘 정리되어 있는 나무위키

    https://namu.wiki/w/영%20제로




오래전 PS2 작품이라서 그런지 해상도가 안습이지만... 그래도 트레일러도 있다!!!






한글판 발매를 한 착한 타이틀이다.


2002년 08월 31일에 자막 한글화로 발매!!!




게임의 스토리는 뭐 이렇다.


은사님이 행방불명 되어 한 남성이 어떤 무서운 집에 찾아갔는데,

그 남성도 행방불명이 되어

그 남성의 여동생이 오빠를 찾아 그 무서운 집에 찾아갔다는...



난 처음에 나온 그 남자가 여자인줄로만 알았다 ^^

(트레일러 영상의 앞 부분을 보면 무슨 말인줄 알 수 있을거다!!)





잘 하지도 않는것 괜히 사놓고 먼지만 쌓인다고

와이프님이 타박하던

나의 PS2 게임기~~~!!!



그런데, 거실에서 하자니 영~ 눈치가 보여서...



그래서, PCSX2 에뮬레이터로 실행해봤다.



우와~~~ 엄청 잘 된다 !!!



누가봐도 여성 캐릭터로 보이지 않나!?


하지만,

오빠다!!!




에뮬레이터로 잘 안되면

PS2 본체를

내 방으로 가져와 모니터 연결하려고 했더니...


PCSX2 ... 너무 훌륭하다!!!




거기에다가 예전에 알리익스프레스로 구매한 조이스틱까지 연결을 하니까...

이건 너무나 훌륭한 환경 !!!


(물론 조이스틱의 상태가 조금 이상하긴 하지만...^^)





다시 게임 이야기로 좀 돌아가보자



"영 제로"

테크모에서 만든 아주 유명한 호러 게임인데...


그냥 호러 게임이 아니라


"셔터 호러" 장르로 불리운다



게임에 귀신이 나오면 사진기로 찍어서 무찌르기 때문이다.



사실은 출시할 때 광고 문구가

"절체절명 셔터 호러"

였기 때문에... ^^



게임에서

"사영기"

라는 이름으로 불리우는

사진기를 가지고

원령들도 물리치고

힌트도 얻으며 진행하면 된다.




게임은 자유도 거의 없는 스토리대로 진행하는 방식이고

원령들 나오면 액션 게임처럼 사진 찍어대고...

중간 중간 나오는 퍼즐 풀고 하면서 진행하면 된다.


엔딩이 멀티엔딩이라고 한다.

108 원령을 다 모으기도 있다는...



음... 꾸준히 한 번 해볼 계획이다~!!




반응형


Git 저장소를 오래 운영하다보니

호스팅하고 있는 서버의 스토리지가 부족한 일이 종종 발생한다. (Gerrit 또는 GitHub Enterprise)


(대체 왜 자꾸 바이너리를 올리는 것인지... 우이쒸~!!)



스토리지를 팍팍 늘리면 좋겠지만... 우리는 가난하기에.. ^^



이럴 때 보통 "git gc"를 실행하곤 하는데...

이게 성능/효과가 얼마나 있는지 실험을 해보고 싶었다!!!



0. target


    - 실험할 repo가 필요해서 찾던 中 최근 유명한 tensorflow를 대상으로 정했다.


$ git clone --bare https://github.com/tensorflow/tensorflow.git


    - 저장공간을 줄이는 것에 대한 실험이니만큼 "--bare" 옵션으로 clone 하였다.


$ du -hs ./

455M    ./


    - 기본 저장 공간은 "455M"




1. [ git gc --aggressive ]


    - 가장 기본적으로 사용하는 옵션으로 해봤다. (오래걸렸다)


$ time git gc --aggressive

Counting objects: 769698, done.

Compressing objects: 100% (760700/760700), done.

Writing objects: 100% (769698/769698), done.

Total 769698 (delta 636704), reused 111483 (delta 0)

Checking connectivity: 769698, done.


real    41m45.048s

user    28m54.865s

sys     0m3.769s


$ du -hs ./

243M    ./







2. [ git gc --aggressive --prune=now ]


    - 구글링을 했더니, 안전하게 그리고 확실하게 gc를 하는 방법이라고 되어있는 2단계 실행법이다.

        . reflog는 "git rebase" 같은 작업을 하다가 발생하는 끈 떨어진(?) log들에 대한 정보이다.


$ git reflog expire --expire=now --all


$ time git gc --aggressive --prune=now

Counting objects: 769698, done.

Compressing objects: 100% (760700/760700), done.

Writing objects: 100% (769698/769698), done.

Total 769698 (delta 636704), reused 111483 (delta 0)

Checking connectivity: 769698, done.


real    41m17.315s

user    28m51.873s

sys     0m3.522s


$ du -hs ./

243M    ./






뭐 결론은 2번 방법으로 실행하면 되겠다~!!!

안전한게 짱이지~!!


조금은 실망~


반응형

+ Recent posts