카테고리 보관물: 컴퓨터언어

Python 에러 해결 – TypeError: a bytes-like object is required, not ‘str’

이 에러는 아는 사람에게는 너무 쉽고 해결하기에 간단한 것이지만 모르면 삽질하기 쉬운 에러입니다.

참고를 위해서 포스팅합니다.

파이썬에서 문자열을 다루다 보면 이런 에러가 나올 때가 있습니다.

TypeError: a bytes-like object is required, not ‘str’

이 에러는 사용하려고 하는 곳에는 bytes-likes 오브젝트가 필요하니 str 타입을 넣지 말고 bytes 타입의 변수를 넣으라는 뜻입니다.

즉 bytes 타입의 변수를 전달해줘야 하는 곳에 str 타입을 줬기 때문입니다.

이 에러는 DB나 다른 플랫폼, 시스템에서 당겨온 데이터안의 문자열을 처리하다보면 만날 때가 있습니다.

bytes와 str은 다음과 같은 관계가 있습니다. 바꾸는 방법입니다.

  • str –> 디코딩 –> bytes
  • bytes –> 인코딩 –> str

코드로 바꾸면 이렇게 하면 됩니다.

text = "안녕"  # text는 str이 됩니다.
text_byte = text.encode('utf-8')
text_str = text_byte.decode('utf-8')

에러메세지에 bytes라는 단어가 보이면 대부분 문자열 인코딩, 디코딩과 관련이 있을 것이라고 기억하면 됩니다.

VS code나 Pycharm 같은 개발툴에서 지원하는 힌트를 보고 어떤 타입의 변수가 필요한지 확인하고 적절한 에러를 처리해 주는 것도 좋은 습관입니다.

R로 블로그 만들기 – blogdown

blogdown 패키지를 이용해서 돈들이지 않고 블로그 사이트를 만드는 것을 소개합니다. 매우 쉽습니다.

배경 소개

Reproducible Research (재현가능 연구)라는 것이 대두되면서 기술 문서를 공개할 때 소스코드, 문서자체의 원본, 데이터까지 제공해서 누구나 검증할 수 있게 투명하게 하는 것이 시작되었습니다.

이것은 거창하게 말하면 기술, 연구의 윤리와도 관련이 있지만 여기서 자세히 설명하지는 않을께요.

R로 블로그 또는 위키를 만드는 것은 오래된 유행입니다. 하지만 여전히 많은 사람들이 데이터과학 블로그, 데이터분석 블로그, 과학 기술 블로그를 R로 작성하고 있습니다.

처음에는 Jekyll과 같은 연동형 툴이 유행했지만 지금은 R과 Rstudio만을 이용해서 블로그를 생성하고 배포하는 방식으로 발전했습니다.

간단한 개념 설명

한줄 요약

blogdown 패키지를 사용하면 스태틱 블로그를 생성해서 무료로 github에 블로그 사이트를 만들 수 있습니다.

세줄 요약

  • Blogdonw을 사용하면 Rmarkdown (Markdown + R의 코드연동 지원)으로 작성된 문서로 쉽게 블로그, 위키 등을 만들 수 있습니다.
  • workdpress나 dokuwiki, tistory 같은 백엔드가 따로 더 필요한 방식이 아니고 html 파일을 생성한 뒤에 그 결과물을 배포합니다. 이것을 스태틱 블로그(static blog)라고 합니다.
  • 스태픽 블로그는 github에서 지원하는 웹서비스를 사용해서 {자기의 githubid}.github.io 와 같은 도메인으로 무료로 블로그를 서비스할 수 있습니다. 그리고 도메인을 별도로 구매하면 github에 도메인을 붙여서 서비스할 수 있습니다. https://r-visualization.com 도 그렇게 제공하고 있는 것입니다.

순서 설명

  1. Rstudio를 실행한 뒤에 blogdown을 설치합니다. 이미 설치되었으면 통과.
  2. Blogdown 프로젝트를 하나 생성합니다. 생성할 때 테마를 선택해야 하는데 기본 테마를 사용해도 되고 테마를 고르고 시작해도 됩니다.
  3. 프로젝트가 생성되면서 파일이 몇개 생성됩니다. 수정, 추가를 해서 블로그의 내용물을 채웁니다.
  4. Rstudio의 Addons 메뉴를 눌러서 “Serve Site”를 선택하면 “Viewer”창에 생성된 블로그가 보입니다.
  5. 생성된 파일중에 index.html을 웹브라우저로 열어도 됩니다.

순서 설명 스크린샷

그림보고 따라 하시면 되요.

패키지 설치

install.packages("blogdown")

새 프로젝트 만들기

프로젝트 종류에서 “Website using Blogdown”을 선택

디렉토리 이름과 프로젝트 이름 입력

index.Rmd 파일과 content 폴더가 생긴것을 확인

Addons에서 Serve Site를 선택해서 사이트 빌드

내용 수정해서 블로그 완성하기

테마

blogdown은 hugo의 테마를 이용합니다. 아래 사이트를 방문해서 테마를 고르면 됩니다. 예쁜 것 많습니다.

프로젝트를 생성할 때 선택할 수도 있고 다운로드 받은 후에 theme 폴더에 넣고 설정을 변경해주면 됩니다.

https://themes.gohugo.io/

github 에 push 할때 인증창 안뜨게 하기

github에 있는 레파지토리를 클론할 때 레파지토리 주소에 사용자 아이디와 패쓰워드를 넣어두면 pull이나 push가 인증을 한다거나 매번 비밀번호를 물어본다거나 하는 일이 없어져서 편해집니다.

방법은
레파지토리에 주소에 사용자 아이디 패쓰워드 추가하면 됩니다.

특히 Github에 커밋할때마다 비밀번호를 물어보거나 인증을 했는데도 다음번에 또 물어보거나 하는 현상을 없앨 수 있습니다.

방법은 이렇습니다.

클로닝(cloning)할 것헙 레파지토리(repository) 주소

https://github.com/microsoft/vscode.git

위의 주소를 고쳐서 이렇게 해줍니다.

https://사용자아이디:사용자패쓰워드@github.com/microsoft/vscode.git

github.com앞에 @를 붙이고 그 앞에 사용자아이디 그리고 콜론 사용자 패쓰워드를 입력하면 됩니다.

패쓰워드가 드러나게 되니까 이 주소가 유출되지 않게 해야 합니다.

비밀번호에 @가 포함된 경우 해결 방법

비밀번호에 @가 있으면 github.com 앞의 구분자 @와 충돌합니다.

이때는 @를 %40으로 바꾸면 됩니다. 예를 들어

사용자아이디: user

비밀번호: pass!@#

라면

https://user:pass!%40#@github.com/microsoft/vscode.git

이 됩니다.

비밀번호가 노출되는 것이 싫어요. 대신 토큰 사용하기

https를 사용하기 때문에 네트워크에서 비밀번호가 새나갈 위험은 없습니다만 그래도 비밀번호를 그대로 적어서 저장하는 것은 위험합니다.

비밀번호를 적는 것이 걱정된다면 github에서 토큰을 받아서 비민번호대신 넣어줘도 됩니다. 자신의 토큰은 깃헙에서 받을 수 있습니다.

토큰 메뉴는 Settings -> Developers setting 에 있습니다.

참고

https://stackoverflow.com/questions/6172719/escape-character-in-git-proxy-password

tqdm 파이썬 텍스트 프로그레스 바 패키지, Python progress bar

tqdm이라는 것이 있습니다.

터미널의 텍스브 모드에서 간단하게 특수기호를 이용해서 프로그레스파를 반들어주는 것을 볼 수 있습니다.

파이썬 패키지 중에 tqdm이라는 것이 있는데 tqdm은 터미널커맨드도 지원하고 파이썬 코드내에서도 쓸 수 있습니다.

쉽고 편하고 깔끔합니다. 그림을 보세요.

Screenshot

자세한 내용은 tqdm의 github을 참고하세요.

https://github.com/tqdm/tqdm

데이터과학하려면 R과 Python 중 어떤 걸 배워야 하나?

요즘 추세로 본다면 데이터과학, 데이터분석, 딥러닝, 기계학습 등을 하려면 R과 Python 중 하나를 선택해야 합니다.

R과 Python은 둘 다 모두 스크립트(script) 언어이면서 둘다 대화형 언어(Interpretor)이기도 합니다.

스크립트 언어라는 것은 C++이나 Java 처럼 컴파일을 하거나 중간코드를 빌드하지는 않는 것을 말하는 것이고 대화형 언어라는 것은 코드를 입력하고 그 결과를 즉시 확인할 수 있다는 것입니다.

그래서 가능하다면 R과 Python을 둘 다 하는 것이 훨씬 좋습니다. 하지만 R이 PYthon보다는 학습장벽이 매우 높기 때문에 둘 중에 어떤 것을 먼저해야 하냐고 묻는다면

대답은 Python 입니다.
현재는 Python을 먼저 선택하는 것이 대체로 유리합니다.

그럼 R은 생각할 필요도 없는 것인가? 라고 묻는다면 당연히 그렇지 않습니다. 자신이 어떤 쪽의 일을 할 것인지 하고 있는지, 어떤 스타일로 하는지에 따라 달라질 수 있습니다.

데이터과학 랭귀지를 선택할 때 고려할 것

선택을 할 때 아래와 같은 간단한 체크 리스트를 만들어 봤습니다.

  • 앞으로 통계 분석을 더 많이 하게 될 것 같다. R
  • 시각화가 편하고 빠르면 좋겠다. R
  • 일괄 처리 작업이나 텍스트마이닝 같은 처리도 하고 싶다. Python
  • 기계학습 모델을 자주 만들고 많이 만들것 같다. Python
  • 데이터 전처리와 이관, 자동화 같은 것도 해야 한다. Python
  • 최신 통계 패키지(새 알고리즘, 기법같은 것들)가 많아야 한다. R
  • 최신 기계학습 패키지가 많아야 한다. Python
  • 딥러닝을 해야 한다. Python
  • IOT도 해야 하고 로그 분석도 해야한다. Python
  • 시계열 분석, 수리 통계, 금융 분석 이런 고급 통계나 수학과 관련된 것을 앞으로 할 것이다. R
  • 빅데이터 플랫폼들에 접속해서 비정형 데이터를 가져오거나 처리해야 한다. Python
  • 나는 금융공학에 관심이 있다. Python
  • UI가 있는 웹개발도 좀 해야 한다. Python
  • 웹개발도 해야하긴 하지만 복잡한 것은 안하고 위젯 정도나 간단한 시각화 수준이면 된다. R (Shiny가 있으므로)
  • 주로 연구하고 논문쓰는 일을 많이 할 것 같다. R
  • 나는 의사이고 실험을 많이 한다. R
  • 분석 리포트를 많이 쓰거나 논문을 많이 써야 한다. R
  • 바이오인포메틱스이고 유전자 데이터 이런 일과 관련이 있다. Python
  • 앞으로 클라우드의 자원 활용도 많이 하게될 것 같다. Python
  • 범접할 수 없는 레벨의 과학자처럼 보여지고 싶다. R
  • 데이터과학의 귀재로 보여지고 싶다. Python

대부분 R과 Python 둘다 가능한 것이지만 둘 중에 더 유리한 것 하나를 답으로 적어두었습니다. 경험을 바탕으로 적은 것입니다. 의견의 차이가 있을 수 있지만 무분별한 비난은 사절합니다.

위의 목록을 쭉 훑어보면 대체로 PYthon이 답인 경우가 많으니 그냥 Python 선택하면 된다는 쪽으로 보여집니다만 위에 열거한 것들에서 선택된 것의 숫자만 보고 그렇게 판단하면 안됩니다.

R의 좋은 점

R을 옹호하는 입장이 되서 장점을 어필해 보겠습니다.

R의 강점은 커뮤니티와 커뮤니티에서 제공되는 패키지가 있습니다. 최신 통계 분석, 알고리즘이나 기법들이 패키지가 가장 빨리 제공되고 있으며 품질도 상당히 좋습니다.

대부분 패키지를 만들어서 제공하시는 분들이 그 분야의 석박사이거나 교수들입니다. 100% 믿을 수 있는 것은 아니지만 보통은 쓰는 사라들보다 그 부분에 대해서는 훨씬 전문적인 분들이라서 믿고 쓸 수 있습니다.

또 패키지가 중앙집중식으로 엄격하게 관리되고 있습니다. 패키지가 등록될 때 절차도 까다롭고 검증도 까다롭습니다. 그래서 패키지가 작동하지 않는다거나 하는일이 거의없고 오래된 패키지들도 비교적 관리가 잘됩니다.

Python의 좋은 점

Python을 옹호하는 입장에서 장점을 어필해보면.

Python을 쓰는 사람이 워낙 많아서 자료를 구하기 쉽고 샘플 코드를 구하기도 쉽습니다. 사용자 층이 두텁다고 하죠. 이제 가장 사용자가 많은 랭귀지가 되었습니다.

Python은 다런 언어에 비해 배우기 쉬운 편입니다. 물론 그렇다고 해서 책 한 권 읽고 바로 할 수 있을 만큼 정말 쉽다는 얘기는 또 아닙니다. 다른 랭귀지에 비해서 비교적 쉽다는 거입니다.

직군별로 간단하게 선택하는 방법

“하는 일” 또는 “하려고 하는 일”의 직군을 보고 간단하게 선택할 때는 이렇게 하면 됩니다.

  • 엔지니어, 개발자 쪽에 가깝다면 Python
  • 분석가, 연구원에 가깝다면 R
  • 그냥 과학자라면 아무렇게나 하세요. 아마 둘 다 안 쓸 가능성이 큽니다.

기획자, 세일즈, 비즈니스 직군인데 분석용 언어를 배워보려면 어떤 것을 써야 하나?

데이터분석이나 데이터과학을 하려고 하는데 그 일이 꼭 컴퓨터랭귀지를 쓰지 않아도 엑셀이나 다른 도구로 할 수 있는 것이 아닌지 먼저 확인해 보세요. 대부분 간단한 것은 다 할 수 있습니다.

그럼에도 불구하고 취미이든, 도전이든, 자기계발이든, 미래를 위해서 이든, 컴퓨터 언어를 하나 배우고 싶다면?

Python을 선택하면 됩니다.

왜냐면 R이 더 안좋아서가 아니라 배우기 더 어렵기 때문입니다.

그다지 궁금하지 않겠지만 이 포스트를 보고 또 Python에 너무 편향된 것이 아니냐고 하실 분들이 있을 것 같아서 마지막으로 말씀드리면 저는 Python 보다는 R을 더 좋아합니다.