Data Science and Data Proicessing

파이썬 프로그래밍

Python 개발자를위한 10 가지 멋진 프로젝트 아이디어

Python 기술에 도전하는 미친 프로젝트 아이디어

Image for post
~의 사진사이먼 아 브람스의 위에Unsplash

알고 계십니까파이썬로 알려져 있습니다다재다능한 프로그래밍 언어?

예, 그렇습니다모든 단일 프로젝트에서 사용해서는 안됩니다.,

이를 사용하여 데스크톱 응용 프로그램, 게임, 모바일 앱, 웹 사이트 및 시스템 소프트웨어를 만들 수 있습니다. 구현에 가장 적합한 언어이기도합니다.인공 지능기계 학습알고리즘.

그래서 지난 몇 주 동안유니Python 개발자를위한 ue 프로젝트 아이디어. 이 프로젝트 아이디어는이 놀라운 언어에 대한 귀하의 관심을 다시 불러 일으킬 것입니다. 가장 좋은 점은 재미 있지만 도전적인 프로젝트를 통해 Python 프로그래밍 기술을 향상시킬 수 있다는 것입니다.

하나씩 살펴 보겠습니다.

1- 음성 명령을 사용하여 소프트웨어 GUI 만들기

Image for post
상호 작용 샘플 — 님의 사진전진의 위에Unsplash— 저자 편집

These days, massive progress has been made in the field of desktop application development. You will see many drag & drop GUI builders and speech recognition libraries. So, why not join them together and create a user interface by talking with the computer?

이것은 순전히 새로운 개념이며 몇 가지 연구 끝에 아무도 그것을 시도하지 않았다는 것을 알았습니다. 따라서 아래에 언급 된 것보다 조금 더 어려울 수 있습니다.

다음은 Python을 사용하여이 프로젝트를 시작하기위한 몇 가지 지침입니다. 우선, 다음 패키지가 필요합니다.

이제 아이디어는 다음과 같은 일부 음성 명령을 하드 코딩하는 것입니다.

Image for post

당신은 요점을 알고 있습니까? 이와 같은 명령을 더 추가하는 것은 매우 간단하고 간단합니다.

이것이 될 것이므로최소 실행 가능 제품 (MVP). 따라서 많은 조건문 (예 : if… else)을 하드 코딩해야한다면 완전히 괜찮을 것입니다.

몇 가지 기본 명령을 설정 한 후에는 코드를 테스트 할 차례입니다. 지금은 창에서 매우 기본적인 로그인 양식을 만들 수 있습니다.

이 아이디어의 가장 큰 유연성은 게임 개발, 웹 사이트 및 모바일 앱에 대해 구현할 수 있다는 것입니다. 다른 프로그래밍 언어에서도.

2- AI 베팅 봇

Image for post
테니스 경기 — 님의 사진Moises Alex의 위에Unsplash

베팅은 사람들이 결과를 예측하고 옳다면 그 대가로 보상을받는 활동입니다. 이제 지난 몇 년 동안 인공 지능 또는 기계 학습에서 발생한 많은 기술 발전이 있습니다.

예를 들어, 다음과 같은 프로그램에 대해 들어 보셨을 것입니다.AlphaGo 마스터,알파 고 제로, 및AlphaZero재생할 수 있습니다Go (게임)어떤 프로 인간 선수보다 낫습니다. 당신은 심지어 얻을 수 있습니다소스 코드Leela Zero라는 유사한 프로그램의

제가 전하고 싶은 것은 AI가 우리보다 더 똑똑해지고 있다는 것입니다. 모든 가능성을 고려하여 더 나은 것을 예측하고 과거의 경험에서 배울 수 있음을 의미합니다.

Python에서지도 학습 개념을 적용하여 AI Betting Bot을 만들어 보겠습니다. 시작하는 데 필요한 라이브러리는 다음과 같습니다.

처음에는 결과를 예측하기 위해 게임 (예 : 테니스, 축구 등)을 선택해야합니다. 이제 모델 학습에 사용할 수있는 이전 일치 결과 데이터를 검색합니다.

예를 들어 테니스 경기의 데이터는 다음 사이트에서 .csv 형식으로 다운로드 할 수 있습니다.tennis-data.co.uk 웹 사이트.

베팅에 익숙하지 않은 경우 방법은 다음과 같습니다.

  • $ 10을 베팅하고 싶습니다.로저 페더러1.3의 배당률로.
  • 그가 이기면 $ 10 (실제 금액)과 $ 3 (수익)을 받게됩니다.
  • 그가지면 당신의 돈 (예 : $ 10)도 잃게됩니다.

모델을 훈련 한 후에는신뢰 수준각 예측에 대해 예측이 옳은 횟수를 확인하여 봇의 성능을 확인하고 마지막으로 주시해야합니다.투자 수익 (ROI).

유사한 오픈 소스 다운로드AI 베팅 봇 프로젝트에두아르 토마스.

3- 트레이딩 봇

Image for post
무역 — 님의 사진닉 총의 위에Unsplash

Trading Bot은 예측을 위해 AI도 필요하기 때문에 이전 프로젝트와 매우 유사합니다.

이제 질문은 AI가 주가의 변동을 정확하게 예측할 수 있는지 여부입니다.

그리고 대답은 예입니다.

시작하기 전에 거래 봇을 개발하기위한 데이터가 필요합니다.

Investopedia의 이러한 리소스는 봇 교육에 도움이 될 수 있습니다.

이 두 기사를 모두 읽은 후에는 주식을 구매할 때와 구매하지 않을 때를 더 잘 이해할 수 있습니다. 이 지식은 자동으로 결정을 내리는 Python 프로그램으로 쉽게 변환 될 수 있습니다.

이 오픈 소스 거래 봇에서 참조 할 수도 있습니다.freqtrade. Python을 사용하여 빌드되고 여러 기계 학습 알고리즘을 구현합니다.

4- Iron Man Jarvis (AI 기반 가상 도우미)

Image for post
Ai 도우미 인터페이스 — 님의 사진조슈아 소르 티노의 위에Unsplash

이 아이디어는 할리우드 영화 시리즈에서 가져온 것입니다.아이언 맨. 영화는 기술, 로봇, AI를 중심으로 전개됩니다.

여기에서 Iron Man은 인공 지능을 사용하여 가상 비서를 구축했습니다. 이 프로그램은자비스아이언 맨의 일상적인 작업을 도와줍니다.

Iron Man은 간단한 영어를 사용하여 Jarvis에게 지침을 제공하고 Jarvis도 영어로 응답합니다. 이는 우리 프로그램이 음성 인식과 텍스트 음성 변환 기능이 필요하다는 것을 의미합니다.

다음 라이브러리를 사용하는 것이 좋습니다.

지금은 다음과 같은 음성 명령을 하드 코딩 할 수 있습니다.

다음과 같은 수많은 다른 작업에 Jarvis를 사용할 수도 있습니다.

  • 모바일에서 알람을 설정합니다.
  • 지속적으로 홈 보안 카메라를 확인하고 누군가가 밖에서 기다리고있을 경우 알려줍니다. 얼굴 인식 및 인식과 같은 더 많은 기능을 추가 할 수 있습니다. 누가 또는 얼마나 많은 사람들이 있는지 알아내는 데 도움이됩니다.
  • 방 창문을 열거 나 닫습니다.
  • 조명을 켜거나 끕니다.
  • 이메일에 자동으로 응답합니다.
  • 작업을 예약합니다.

Facebook의 창립자 인 "Mark Zuckerberg"조차도자비스사이드 프로젝트로.

5- 다가오는 아티스트 콘서트에 대한 정보를 얻기 위해 웹 사이트 모니터링

Image for post
티켓 — 님의 사진앤디 리의 위에Unsplash

송킥다가오는 콘서트에 대한 정보를 제공하는 매우 인기있는 서비스입니다. 이것의API다음과 같은 방법으로 예정된 콘서트를 검색하는 데 사용할 수 있습니다.

  • 예술가
  • 위치
  • 장소
  • 날짜와 시간

Songkick의 API를 사용하여 매일 특정 콘서트를 계속 확인하는 Python 스크립트를 만들 수 있습니다. 마지막으로 콘서트가 열릴 때마다 자신에게 이메일을 보내십시오.

때때로 Songkick은표를 사다그들의 웹 사이트에 링크. 그러나이 링크는 다른 콘서트를 위해 다른 웹 사이트로 이동할 수 있습니다. 이는 웹 스크래핑을 이용하더라도 자동으로 티켓을 구매하기가 매우 어렵다는 것을 의미합니다.

대신 수동 조치를위한 애플리케이션에있는 그대로 티켓 구매 링크를 표시 할 수 있습니다.

6- 무료 Let ’s Encrypt SSL 인증서 자동 갱신

Image for post
Let ’s Encrypt 로고 —https://letsencrypt.org/

암호화하자무료 SSL 인증서를 제공하는 인증 기관입니다. 그러나 문제는이 인증서가 90 일 동안 만 유효하다는 것입니다. 90 일 후에는 갱신해야합니다.

제 생각에는 이것은 Python을 사용한 자동화를위한 훌륭한 시나리오입니다. 만료되기 전에 웹 사이트 SSL 인증서를 자동으로 갱신하는 코드를 작성할 수 있습니다.

이것을 확인하십시오GitHub의 코드영감을 위해.

7- 군중 속의 개인 인식

Image for post
얼굴 인식 — 님의 이미지 the Author

요즘 정부는 시민의 보안을 강화하기 위해 공공 장소에 감시 카메라를 설치했습니다. 이러한 카메라의 대부분은 단순히 비디오를 녹화하기위한 것이므로 법의학 전문가는 개인을 수동으로 인식하거나 추적해야합니다.

카메라에있는 각 사람을 실시간으로 인식하는 Python 프로그램을 만들면 어떨까요? 우선, 우리가 가지고 있지 않은 국가 ID 카드 데이터베이스에 액세스해야합니다.

따라서 쉬운 옵션은 가족 구성원의 기록으로 데이터베이스를 만드는 것입니다.

그런 다음얼굴 인식라이브러리를 만들고 카메라의 출력과 연결합니다.

8- 접촉 추적

Image for post
추적 응용 프로그램에 문의 — 님의 사진Markus Winkler의 위에Unsplash

연락처 추적은 특정 기간 동안 서로 연락 한 모든 사람을 식별하는 방법입니다. COVID-19 또는 HIV와 같은 전염병에 주로 유용합니다. 감염된 사람에 대한 데이터가 없으면 확산을 막을 수 없기 때문입니다.

Python은 다음과 같은 기계 학습 알고리즘과 함께 사용할 수 있습니다.DBSCAN (노이즈가있는 애플리케이션의 밀도 기반 공간 클러스터링)연락처 추적을 위해.

이것은 부수적 인 프로젝트이므로 공식 데이터에 액세스 할 수 없습니다. 지금은 다음을 사용하여 현실적인 테스트 데이터를 생성하는 것이 좋습니다.모카 루.

당신은 볼 수 있습니다이 기사특정 코드 구현을 위해.

9- 한 폴더에서 다른 폴더로 파일 자동 이동

Image for post
우분투에서 노틸러스 파일 관리자 — 님의 사진 the Author

이것은 폴더를 계속 모니터링하는 매우 기본적인 Python 프로그램입니다. 해당 폴더에 파일이 추가 될 때마다 유형을 확인하고 그에 따라 특정 폴더로 이동합니다.

예를 들어 다운로드 폴더를 추적 할 수 있습니다. 이제 새 파일을 다운로드하면 파일 유형에 따라 자동으로 다른 폴더로 이동합니다.

.exe 파일은 대부분 소프트웨어 설정이므로 "software"폴더로 이동하십시오. 반면,“images”폴더 안에있는 움직이는 이미지 (png, jpg, gif).

이렇게하면 빠른 액세스를 위해 다양한 유형의 파일을 구성 할 수 있습니다.

10- YouTube에서 경력 경로 비디오 수집

Image for post
Youtube 홈페이지 — 님의 사진콘 카람 펠라 스의 위에Unsplash

경력을 위해 배워야하는 기술의 이름을 받아들이는 응용 프로그램을 만듭니다.

예를 들어 웹 개발자가 되려면 다음을 배워야합니다.

  • HTML5
  • CSS3
  • 자바 스크립트
  • 백엔드 언어 (PHP, Node.js, Python, ASP.NET 또는 Java)
  • 부트 스트랩 4
  • 워드 프레스
  • 백엔드 프레임 워크 (Laravel, Codeigniter, Django, Flask 등)
  • 기타

스킬을 입력하면"경력 경로 생성"단추. 프로그램에 검색을 지시합니다.유튜브각 기술에 따라 관련 비디오 / 재생 목록을 선택합니다. 스킬에 대한 유사한 동영상이 많은 경우 조회수, 댓글, 좋아요 등이 가장 많은 동영상을 선택합니다.

그런 다음 프로그램은 이러한 비디오를 기술에 따라 그룹화하고 GUI에 썸네일, 제목 및 링크를 표시합니다.

또한 각 비디오의 길이를 분석하고 집계 한 다음이 경력 경로를 배우는 데 걸리는 시간을 알려줍니다.

이제 사용자로서 우리는이 커리어의 마스터가되기 위해 단계적으로 주문되는 이러한 비디오를 볼 수 있습니다.

결론

고유 한 프로그래밍 프로젝트에 도전하면 활동성을 유지하고 기술을 향상 시키며 새로운 가능성을 탐색하는 데 도움이됩니다.

위에서 언급 한 프로젝트 아이디어 중 일부는마지막 해 프로젝트.

Python 프로그래밍 언어로 창의성을 보여주고 이러한 아이디어를 자랑스럽게 생각할 때입니다.

읽어 주셔서 감사합니다!

7 가지 멋진 명령 줄 도구

익숙한 도구와 아직 시도하지 않은 도구

8 월 24 일 · 6최소 읽기
Image for post
~의 사진맥스웰 넬슨의 위에Unsplash.

터미널 / 명령 줄은 개발자가 벨트 아래에있는 신성한 도구입니다. 프로그래머에게 가장 많이 사용되는 도구입니다. 나는 그것이 얼마나 가볍고 당신이 그것으로 할 수있는 믿을 수없는 양 때문이라고 믿는다. 일부 개발자는 터미널 내부에서 모든 작업을 수행하기 위해 추가 작업을 수행하기도합니다. 그들에 대한 명성.

개인적으로 훌륭하다고 생각하고 매일 거의 사용하는 CLI (Command-Line Interface) 도구를 몇 가지 보여 드리겠습니다. 물론, 명령 줄을위한 도구가 너무 많아이 목록이 표면을 거의 긁지 않습니다.

1. 정력

포함되지 않는 터미널 목록의 종류정력? 여부에 대한 수많은 논쟁이 있습니다.정력이다그만큼 프로그래밍을위한 편집자이거나 미치광이를 위해 고안된 도구라면 여기에서 논의하지 않겠습니다.

익숙하지 않은 분들을 위해정력, 기본적으로 향상되는 텍스트 편집기입니다.vi모든 UNIX 시스템과 함께 제공되는 도구입니다. 터미널을 통해 파일을 편집하거나 만들 수 있습니다.

Image for post
vim의 기본 사용법.

이 도구는 터미널에있는 동안 신속하게 파일을 편집하고 IDE 또는 VSCode 또는 Sublime Text와 같은 GUI 텍스트 편집기를 열지 않으려는 경우에 유용합니다.

많은 단축키가 현대의 텍스트 편집기만큼 직관적이지 않기 때문에이 도구는 처음 학습 할 때 사용하기가 조금 까다로울 수 있습니다. 그러나 학습에 시간을 투자한다면정력, 개발자에게 매우 강력 할 수 있습니다. 이는 이유정력거대한 커뮤니티가 있습니다. 이 커뮤니티는 규모가 너무 커서 개발자가 인기있는 IDE 및 텍스트 편집 기용 플러그인을 만들어정력경험.

2. vtop

상단시스템이 실행중인 프로세스에 대한 정보와 시스템의 메모리 및 CPU 사용량에 대한 일반 정보를 표시하기 위해 터미널 내에서 사용되는 매우 일반적인 명령입니다. 사용한 적이 있다면상단,보기에는 약간 혼란 스러울 수 있습니다. 그렇다면이 정보를 좀 더 쉽게 처리 할 수있는 방법은 무엇입니까? 소개vtop, 구현상단그래프가 있습니다!

Image for post
행동하는 vtop.

나는 모든 것에 대한 시각적 가이드가 있고상단정보는 살인자입니다. 시스템 부하를 주시 할 수 있도록 하루 종일이 작업을 실행합니다.

당신은 필요합니다npm이 도구를 위해.

3. fzf

다음은 정말 멋진 도구입니다. 라고 불린다fzf. 입력 한 내용에 따라 파일을 찾을 수있는 범용 명령 줄 퍼지 파인더입니다. 그 자체로는 OK 도구입니다. 현재 디렉토리에있는 모든 다른 파일을 나열합니다. Spotlight 검색이라고 생각할 수 있지만 터미널에 있습니다.

Image for post
내 집에서 퍼지 찾기.

이제이 도구의 진정한 힘은fzf같은 다른 기존 명령과 함께죽임또는고양이. 이렇게하려면 패키지와 함께 제공되거나 저장소 내부에서 제공되는 설치 스크립트를 실행해야합니다.

/usr/local/opt/fzf/installor~/.fzf/install

터미널을 다시 시작하거나출처너의.bashrc. 몇 가지 질문을하고 모든 질문에 답하면 잠금이 해제됩니다.fzf의 최대 잠재력.

이제 다음과 같은 명령을 실행할 수 있습니다.

cat **[TAB]
vim **[TAB]
ssh **[TAB]

fzf다음 명령으로 작동 할 수있는 가능한 모든 항목을 찾습니다.

Image for post
IDE를 찾는 파일과 유사합니다.

이것의 또 다른 멋진 응용 프로그램은죽임명령. 이것은 아마도 내가 가장 많이 사용하는 것입니다. 타이핑의 시대ps -ef | grep [프로세스 이름]죽일 프로세스 ID를 수동으로 입력하거나 복사하는 것은 오래 전부터 사라졌습니다. 대신 실행할 수 있습니다.죽이기 [탭]또는kill -9 [탭]. 죽이려는 프로세스를 퍼지 찾고 Enter를 누르십시오. 프로세스 ID가 자동으로 채워집니다.

Image for post
멋진 사용 사례.

제가 살펴볼 수있는 다른 사용 사례가 많이 있지만 이것이 제가 지적하고 싶은 주요 사용 사례입니다.

4. 쓰레기 CLI

이제까지rm -rf영구적으로 삭제하고 싶은 것이 아님을 즉시 깨달으셨습니까? 나는 이것이 나만이 아니기를 바랍니다. 그런 종류의 불안감에 대처하고 싶지 않다면쓰레기 CLI.

이 도구는 기본적으로 항목을 존재에서 완전히 지우는 대신 시스템의 휴지통에 넣습니다.

Image for post
파일을 망각 대신 휴지통으로 이동합니다.

입력하는 대신폐물, 내 별칭이 있습니다..bashrc그 대체rm명령:

alias rm=trash

이제 무언가를 사용하여 삭제하면rm, 영원히 사라지는 것에 대해 걱정할 필요가 없습니다. 원하는 경우 휴지통에서 간단히 검색 할 수 있습니다. 그리고 예, 이것은 다른 플래그와 함께 작동합니다.rm제공합니다.

5. 속도 테스트

이것은 매우 간단합니다. Chrome을 열지 않고도 인터넷 속도를 확인하려면속도 테스트당신을위한 것입니다.

Image for post
내 모든 끔찍한 속도를 보여주지는 않습니다. 당신은 아이디어를 얻습니다.

이것은 제가 자주 사용하는 도구이며 Chrome에서 추가 리소스를 씹을 필요가 없도록 뒷주머니에 항상 넣고 싶습니다. 또한 터미널에서하는 것도 꽤 멋지다.

당신은 필요합니다npm이 도구를 위해.

6. 위킷

이것은 훨씬 작은 저장소이며 나는 그것을 좋아합니다. iTerm2를 통해 하루 종일 터미널을 열어 두었 기 때문에 Wikipedia를 검색 할 수 있다는 것은 대단합니다.위킷터미널에서 할 수 있습니다. 내가 매일 이것을 얼마나 자주 사용하는지에 놀라실 것입니다.

Image for post
Apple을 검색하려면 "wikit apple company".

당신은 필요합니다npm이 도구를 위해.

7. 코인 탑

이 마지막은 모든 사람을위한 것은 아니지만 매일 사용합니다. 암호 화폐 세계에있는 분들은이 도구에 대해 이미 알고있을 것입니다.

저는 여기저기서 암호 화폐를 다루고 있으며 가격은 말할 것도없고 다양한 종류의 동전을 따라가는 것은 지칠 수 있습니다. 암호 화폐 세계에서 가격이 너무 빨리 움직이면서코인 탑생명의 은인입니다.

코인 탑에 연극이다상단명령. 그러나 시스템 정보를 표시하는 대신코인 탑암호 화폐에 대한 정보를 표시합니다.

Image for post
스턴 크

결론

매일 사용하는 CLI 도구가 훨씬 더 많지만이 도구는 내 툴킷에서 눈에 띄는 도구입니다. CLI 도구에 대해 영원히 갈 수 있습니다. 소프트웨어 세계에서 제가 가장 좋아하는 것들 중 하나입니다. 아주 사소한 작업을 수행 할 수있는 새로운 CLI 도구를 찾을 때마다 항상 흥분됩니다.

또한 이러한 도구의 대부분이 커뮤니티 기반이라는 사실이 마음에 듭니다. 많은 개발자들이 깔끔하다고 생각하기 때문에 작은 도구를 작업하고 있습니다.

다음 시간에서 만나요!

이 4 가지하지 말아야 할 사항으로 Python Lambda 함수 마스터

람다를 사용하되 오용하지 마십시오.

9 월 25 일 · 최소 읽기
Narrow stairs leading to a beach on a sunny day.
~의 사진카칙 시모니 안의 위에Unsplash.

Lambda 함수는 Python의 익명 함수입니다. 소규모 작업을 수행해야 할 때 로컬 환경에서 사용하면 편리한 기술입니다. 어떤 사람들은 단순히 람다라고 부르며 다음 구문을 사용합니다.

lambda arguments: expression

람다 함수의 생성은람다키워드 다음에 인수 목록과 콜론으로 구분 된 단일 표현식이옵니다. 예를 들어람다 x : 2 * x단순히 입력 된 숫자에 2를 곱하는 반면람다 x, y : x + y단순히 두 숫자의 합을 계산합니다. 구문은 매우 간단합니다. 그렇죠?

람다 함수가 무엇인지 알고 있다는 가정하에이 문서는 람다 함수를 올바르게 사용하는 방법에 대한 몇 가지 일반적인 지침을 제공하기위한 것입니다.

1. 값을 반환하지 마십시오

구문을 살펴보면 람다 함수에 대해 아무것도 반환하지 않는 것을 알 수 있습니다. 람다 함수는 하나의 표현식 만 포함 할 수 있기 때문입니다. 그러나 사용반환keyword는 아래와 같이 필수 구문과 호환되지 않는 명령문을 구성합니다.

람다로 돌아 오지 않음

이 실수는 아마도 표현과 진술을 구별 할 수 없기 때문에 발생합니다. 다음과 같은 진술반환,시험,, 및만약특정 작업을 수행합니다. 그러나 표현식은 숫자 또는 기타 Python 객체와 같은 단일 값으로 평가할 수있는 표현식입니다.

람다 함수를 사용하면 단일 표현식은 다음에 사용되는 단일 값을 평가합니다.분류함수.

2. 더 나은 대안을 잊지 마세요

가장 일반적인 사용 사례 중 하나는 람다 함수를다음과 같은 일부 내장 유틸리티 함수의 인수정렬 됨 ()max (), 위에 표시된대로. 상황에 따라 다른 대안을 사용할 수 있습니다. 다음 예를 고려하십시오.

내장 기능 사용

데이터 과학에서 많은 사람들이판다데이터를 처리하는 라이브러리. 람다 함수를 사용하여 기존 데이터에서 새 데이터를 만들 수 있습니다.지도()기능, 아래와 같이. 람다 함수를 사용하는 대신 Pandas에서 지원되기 때문에 산술 함수를 직접 사용할 수 있습니다.

시리즈의 Lambda 함수

3. 변수에 할당하지 마십시오

일부 사람들은 람다 함수가 간단한 함수를 선언하는 다른 방법이라고 잘못 생각하는 것을 보았으며 사람들이 다음을 수행하는 것을 보았을 것입니다.

람다 함수 이름 지정

람다 함수 이름 지정의 유일한 용도는 아마도 람다 함수가 실제로 다른 함수와 마찬가지로 호출되고 함수 유형을 갖는 함수임을 보여주기위한 교육 목적 일 것입니다. 그 외에는 람다 함수를 변수에 할당하면 안됩니다.

람다 함수 이름 지정의 문제점은 디버깅이 덜 간단하다는 것입니다. 일반 기능을 사용하여 생성되는 다른 기능과 달리데프키워드, 람다 함수에는 이름이 없으므로 익명 함수라고도합니다. 이 뉘앙스를 확인하려면 다음과 같은 간단한 예를 고려하십시오.

람다 함수 디버깅
  • 코드에 람다 함수에 문제가있는 경우 (예 :inversive0),역 추적오류 정보는 람다 함수에 버그가 있음을 알려줄 수 있습니다.
  • 반대로 정기적으로 정의 된 함수를 사용하면역 추적문제가있는 기능 (예 :inversive1).

이와 관련하여 람다 함수를 두 번 이상 사용하려는 유혹이있는 경우 가장 좋은 방법은 다음을 사용하여 일반 함수를 사용하는 것입니다.데프이 키워드는 독 스트링을 가질 수도 있습니다.

4. 목록 이해를 잊지 마세요

어떤 사람들은 다음과 같은 고차 함수와 함께 람다 함수를 사용하기를 좋아합니다.지도또는필터. 이 사용법에 대한 다음 예를 고려하십시오.

지도 및 필터 기능

람다 함수를 사용하는 대신 가독성이 더 좋은 목록 이해를 사용할 수 있습니다. 아래와 같이 목록 이해력을 사용하여 동일한 목록 개체를 만듭니다. 보시다시피 이전 사용지도필터람다 함수가있는 함수는 목록 이해에 비해 더 복잡합니다. 따라서 고차 함수를 포함하는 목록을 만들 때 목록 이해력 사용을 고려해야합니다.

목록 이해

결론

이 기사에서는 누군가가 람다 함수로 할 수있는 4 가지 일반적인 실수를 검토했습니다. 이러한 실수를 피하면 코드에서 람다 함수를 올바르게 사용할 수 있습니다.

람다 함수를 사용하는 경험 법칙은 단순하게 유지하고 로컬에서 한 번만 사용하는 것입니다.

하나의 추가 문자로 Python 코드 작성 방식 변경

작은 구문 변경 하나, 코딩 기술을위한 하나의 큰 단계

5 월 23 일 · 최소 읽기
Image for post
~의 사진안젤리나 키추 코바의 위에Unsplash

구문 언어

공 구르기

별표는 어디에 있습니까?

Image for post
~의 사진이바나 카지나의 위에Unsplash
포장 풀기의 힘

다른 사람의 코드를 위반하지 마십시오

Image for post
~의 사진다니엘 타 피오르의 위에Unsplash

Args, Kwargs

작업 코드와 깨는 코드

요약하면

Python을 사용한 데이터 전처리

데이터를 이해하기 쉽게 만들기

Image for post
~의 사진루크 체서의 위에Unsplash

고품질 데이터가 더 나은 예측으로 이어진다는 사실을 고려할 때 데이터 전처리는 데이터 과학 및 기계 학습의 기본 단계가되었습니다. 데이터 처리의 중요성에 대해 이야기하고 다양한 접근 방식을 순서대로 논의합니다.

데이터 전처리 란?

원시 데이터를 이해할 수있는 형식으로 변환하는 기술입니다. 실제 데이터 (원시 데이터)는 항상 불완전하며 특정 오류가 발생할 수 있으므로 모델을 통해 데이터를 전송할 수 없습니다. 이것이 모델을 통해 데이터를 보내기 전에 데이터를 전처리해야하는 이유입니다.

내가 따라온 단계는 다음과 같습니다.

  1. 라이브러리 가져 오기
  2. 데이터 세트 읽기
  3. 데이터 세트를 독립 및 종속으로 분할
  4. 결 측값 처리
  5. 범주 형 값 처리
  6. 표준화 / 기능 확장

1 단계 : 라이브러리 가져 오기

첫 번째 단계는 일반적으로 프로그램에 필요한 라이브러리를 가져 오는 것입니다. 라이브러리는 기본적으로 호출 및 사용할 수있는 모듈 모음입니다. 여기서 우리는

판다: 데이터 조작 및 데이터 분석을 위해 팬더를 사용합니다.
Numpy: Python을 사용한 과학 컴퓨팅을위한 기본 패키지입니다.

2 단계 : 데이터 세트 가져 오기

대부분의 데이터 세트는 .csv (쉼표로 구분 된 값) 형식으로 제공됩니다. 데이터 세트를 프로그램과 동일한 폴더에 보관하고 다음과 같은 방법을 사용하여 읽는 것이 중요합니다.read_csv라이브러리에서 찾을 수 있습니다.판다.

3 단계 : 데이터를 독립 및 종속 기능으로 분할

독립 변수 (X)와 종속 변수 (Y)를 만들어 데이터 세트에 특성 행렬을 만들겠습니다. 열을 읽으려면 다음을 사용합니다.iloc판다[행 선택, 열 선택]이라는 두 개의 매개 변수를 사용합니다.

: 매개 변수로 데이터의 모든 행을 선택합니다. 열의 경우 마지막 열을 제외한 모든 열이 선택됨을 의미하는 -1이 있습니다.

Image for post
~의 사진미리 암 제시어의 위에Unsplash

4 단계 : 결 측값 처리

때때로 우리는 데이터 세트에서 일부 데이터가 누락 된 것을 발견합니다. 누락 된 값은 성능 매트릭스 및 예측의 품질을 저하 시키므로 신중하게 처리해야합니다. 어떤 모델도 이러한 NULL 또는 NaN 값을 자체적으로 처리 할 수 ​​없으므로 처리해야합니다. 먼저 데이터 세트에 null 값이 있는지 여부를 확인해야합니다. isnull () 메소드를 사용하여이를 수행 할 수 있습니다.

누락 된 값을 처리하는 방법에 대한 올바른 결정을 내리면 강력한 데이터 모델이 생성되므로 분석가가 직면 한 가장 큰 문제 중 하나입니다. 결 측값을 대치하는 다양한 방법을 살펴 보겠습니다.

행 삭제

가장 일반적으로 사용되는 방법입니다. null 값이있는 행과 누락 된 값의 60 % 이상이있는 경우 특정 열을 삭제합니다. 이 방법은 해당 열이 해당 특성이 모델 예측에 대해 덜 중요하거나 중요하지 않은 모델의 예측에 영향을 미치지 않는 경우에만 사용됩니다.

평균 / 중앙값 / 모드로 바꾸기

이 방법은 수치 데이터로 구성된 기능에 적용 할 수 있습니다. 특성의 평균, 중앙값 또는 최빈값을 계산하고이를 누락 된 값으로 바꿀 수 있습니다. 이 방법은 행과 열을 제거하는 것에 비해 더 나은 결과를 제공합니다.

범주 형 데이터 처리

때때로 우리의 데이터는 텍스트 형식입니다. 텍스트 형식으로 카테고리를 찾을 수 있습니다. 모델이 수학 방정식과 계산을 기반으로하기 때문에 기계가 텍스트를 이해하고 처리하는 것은 복잡해집니다. 따라서 데이터를 숫자로 인코딩해야합니다.

이를 위해 우리는scikit-learn의 LabelEncoder작업에 사용할.해당 클래스의 객체를 생성합니다. 객체 labelencoder_X를 호출합니다.fit_transformLabelEncoder 클래스의 메서드가 도움이 될 것입니다.

이제 텍스트가 숫자로 대체되었습니다. 카테고리가 세 개 이상인 경우 다른 카테고리에 정수를 계속 할당하여 혼란을 유발합니다. 4 개의 범주가 있고 첫 번째 범주에 0을 할당하고 마지막 범주에 3을 할당한다고 가정합니다. 그러나 1은 0보다 크고 3은 1보다 크기 때문에 모델의 방정식은 3이 0보다 우선 순위가 가장 높다고 생각합니다. 이 문제를 해결하기 위해 n 개의 범주에 대해 n 개의 열이있는 더미 변수를 사용합니다.OneHotEncoder.

우리는 다른 클래스를 가져올 것입니다scikit의 OneHotEncoder가 학습합니다.우리는 해당 클래스의 객체를 생성하고 열의 인덱스 값을 취하고 OneHotEncoding에도 fit_transform ()을 사용하는 categorical_features라는 매개 변수를 고려할 것입니다.

ColumnTransformer를 사용하면 입력을 별도로 변환하고 생성 된 기능을 연결하여 단일 공간을 형성 할 수 있습니다. 이기종 데이터 변환에 유용합니다.

기능 확장

독립 변수의 값을 표준화하는 데 사용됩니다. 변수의 범위를 제한하여 쉽게 비교할 수 있도록하는 방법입니다.

왜 필요한가요?

대부분의 기계 학습 모델은 유클리드 거리를 기반으로합니다. 훨씬 큰 값에 비해 낮은 값의 제곱 차이는 거의 존재하지 않는 것처럼 처리됩니다. 우리는 그런 일이 일어나기를 원하지 않습니다. 그렇기 때문에 모든 변수를 동일한 척도로 변환해야합니다.

대부분의 기계 학습 모델은 유클리드 거리를 기반으로합니다. (x2-x1)의 제곱근 값이 (y2-y1)보다 크면 (y2-y1)은 무시됩니다. 우리는 이런 일이 일어나기를 원하지 않습니다. 그렇기 때문에 모든 변수를 동일한 척도로 변환해야합니다. 이를 수행 할 수있는 두 가지 방법이 있습니다.

표준화

정규화를 통해 0.0에서 1.0 사이의 특성 값을 조정합니다.

Image for post

표준화

평균이 0이고 표준 편차가 1이되도록 특성을 확장합니다.

Image for post

scikit 전처리 라이브러리에서 StandardScaler를 가져 와서 해당 클래스의 객체를 만들어야합니다.

이제 X_train 세트를 맞추고 변형 할 때입니다. 훈련 및 테스트 세트에 표준 스케일러를 적용 할 때. 훈련 세트에만 맞추고 변환해야합니다. 테스트 세트의 경우 변환해야합니다. 테스트 세트에 맞출 필요가 없습니다. 이렇게하면 모든 값이 표준화 된 척도로 변환됩니다.

제 기사를 읽어 주셔서 감사합니다. 여러분의 의견을 듣게되어 기쁩니다. 최신 기사에 대한 업데이트를 받으려면 Medium에서 저를 팔로우하십시오. 당신은 또한 나와 연결할 수 있습니다Linkedin트위터.Machine Learning 및 Deep Learning에 대한 내 블로그를 확인하십시오.

고급 Python : 클래스를 정의 할 때 적용 할 9 가지 모범 사례

코드를 더 읽기 쉽고 유지 관리하기 쉽게 만드는 방법

8 월 12 일 · 11최소 읽기
Image for post
~의 사진FERESHTEH AZADI의 위에Unsplash

핵심에서 Python은 객체 지향 프로그래밍 (OOP) 언어입니다. OOP 언어이기 때문에 Python은 객체 중심의 다양한 기능을 지원하여 데이터와 기능을 처리합니다. 예를 들어 데이터 구조는 일부 다른 언어에서 객체로 간주되지 않는 기본 유형 (예 : 정수 및 문자열)을 포함한 모든 객체입니다. 또 다른 예로, 함수는 모든 객체이며, 정의 된 다른 객체 (예 : 클래스 또는 모듈)의 속성 일뿐입니다.

기본 제공 데이터 유형을 사용하고 사용자 지정 클래스를 만들지 않고도 여러 함수를 작성할 수 있지만 프로젝트 범위가 커지면 코드를 유지 관리하기가 더 어려워 질 수 있습니다. 이러한 개별 부분에는 공유 된 테마가 없으며 많은 정보가 관련되어 있지만 이들 간의 연결을 관리하는 데 많은 번거 로움이 있습니다.

이러한 시나리오에서는 관련 정보를 그룹화하고 프로젝트의 구조 설계를 개선 할 수 있도록 고유 한 클래스를 정의하는 것이 좋습니다. 더 중요한 것은 코드 조각이 덜 조각 된 코드를 다루게되므로 코드베이스의 장기적인 유지 관리 가능성이 향상된다는 것입니다. 그러나 한 가지 문제가 있습니다. 이것은 사용자 정의 클래스를 정의하는 이점이 관리 오버 헤드보다 클 수 있도록 클래스 선언이 올바른 방식으로 수행 된 경우에만 해당됩니다.

이 기사에서는 사용자 정의 클래스에 적용 할 수있는 9 가지 중요한 모범 사례를 검토하고자합니다.

1. 좋은 이름

자신 만의 클래스를 정의 할 때 코드베이스에 새로운 아기를 추가하는 것입니다. 수업에 아주 좋은 이름을 지정해야합니다. 클래스 이름의 유일한 제한은 합법적 인 Python 변수의 규칙 (예 : 숫자로 시작할 수 없음)이지만 클래스 이름을 지정하는 데 선호되는 방법이 있습니다.

  • 발음하기 쉬운 명사를 사용하십시오.팀 프로젝트에서 작업하는 경우 특히 중요합니다. 그룹 프레젠테이션 중에 "이 경우에는 Zgnehst 클래스의 인스턴스를 만듭니다."라고 말하는 사람이되고 싶지 않을 것입니다. 또한 발음하기 쉽다는 것은 이름이 너무 길어서는 안된다는 의미이기도합니다. 클래스 이름을 정의하기 위해 3 개 이상의 단어를 사용해야하는 경우는 거의 생각할 수 없습니다. 한 단어가 가장 좋고 두 단어가 좋고 세 단어가 한계입니다.
  • 저장된 데이터와 의도 한 기능을 반영합니다.마치 우리의 실제 생활과 같습니다. 소년에게는 소년 이름이 주어집니다. 남자 아이 이름을 보면 아이들이 남자 일 것으로 예상합니다. 클래스 이름 (또는 일반적으로 다른 변수)에도 적용됩니다. 규칙은 간단합니다 — 사람들을 놀라게하지 마십시오. 학생의 정보를 다루는 경우 수업 이름은 Student로 지정해야합니다. KiddosAtCampus는 가장 상식적인 말이 아닙니다.
  • 명명 규칙을 따르십시오.GoodName과 같은 클래스 이름에는 대문자 낙타 스타일을 사용해야합니다. 다음은 goodName, Good_Name, good_name 및 GOodnAme와 같은 비 전통적인 클래스 이름의 불완전한 목록입니다. 명명 규칙을 따르는 것은 의도를 명확하게하는 것입니다. 사람들이 코드를 읽을 때 GoodName과 같은 이름을 가진 객체가 클래스라고 안전하게 가정 할 수 있습니다.

속성 및 함수에 적용되는 명명 규칙 및 규칙도 있습니다. 아래 섹션에서 해당되는 경우 간략하게 언급하지만 전체 원칙은 동일합니다. 유일한 경험 법칙은 간단합니다. 사람들을 놀라게하지 마십시오.

2. 명시 적 인스턴스 속성

대부분의 경우 자체 인스턴스 초기화 방법 (예 :__init__). 이 메서드에서는 새로 생성 된 클래스 인스턴스의 초기 상태를 설정합니다. 하지만 Python은 커스텀 클래스로 인스턴스 속성을 정의 할 수있는 위치를 제한하지 않습니다. 즉, 인스턴스가 생성 된 후 이후 작업에서 추가 인스턴스 속성을 정의 할 수 있습니다. 다음 코드는 가능한 시나리오를 보여줍니다.

초기화 방법

위와 같이 인스턴스를 만들 수 있습니다.학생학생의 이름과 성을 지정하여 수업. 나중에 인스턴스 메서드를 호출 할 때 (즉,verify_registration_status),학생인스턴스의 상태 속성이 설정됩니다. 그러나 이것은 원하는 패턴이 아닙니다. 전체 클래스에 다양한 인스턴스 속성을 분산하면 인스턴스 객체가 어떤 데이터를 보유하고 있는지 클래스가 명확하게 할 수 없기 때문입니다. 따라서 모범 사례는 인스턴스의 속성을__init__메소드를 사용하면 아래와 같이 코드 리더가 클래스의 데이터 구조를 알 수있는 단일 위치를 갖게됩니다.

더 나은 초기화 방법

처음에 설정할 수없는 인스턴스 속성의 경우 다음과 같은 자리 표시 자 값으로 설정할 수 있습니다.없음. 그다지 문제가되지 않지만이 변경 사항은 일부 인스턴스 메서드를 호출하여 해당 인스턴스 속성을 설정하는 것을 잊었을 때 발생할 수있는 오류를 방지하는데도 도움이됩니다.AttributeError(‘학생’개체에‘status_verified’속성이 없습니다.).

이름 지정 규칙과 관련하여 속성은 소문자를 사용하여 이름을 지정하고 뱀 케이스 스타일을 따라야합니다. 즉, 여러 단어를 사용하는 경우 밑줄로 연결해야합니다. 또한 모든 이름에는 보유한 데이터에 대한 의미있는 표시가 있어야합니다 (예 :이름~보다 낫다fn).

3. 속성 사용-그러나 간결하게

어떤 사람들은 자바와 같은 다른 OOP 언어의 기존 배경으로 Python 코딩을 배우고 인스턴스 속성에 대한 getter 및 setter를 만드는 데 사용됩니다. 이 패턴은 Python에서 속성 데코레이터를 사용하여 모방 할 수 있습니다. 다음 코드는 속성 데코레이터를 사용하여 getter 및 setter를 구현하는 기본 형식을 보여줍니다.

부동산 데코레이터

이 속성이 생성되면 내부 함수를 사용하여 구현되지만 점 표기법을 사용하여 일반 속성으로 사용할 수 있습니다.

속성 사용

아시다시피 속성 구현을 사용하는 이점에는 적절한 값 설정 (정수가 아닌 문자열이 사용되는지 확인) 및 읽기 전용 액세스 (setter 메서드를 구현하지 않음)가 포함됩니다. 그러나 속성을 간결하게 사용해야합니다. 사용자 정의 클래스가 아래와 같이 보이면 매우 산만해질 수 있습니다. 속성이 너무 많습니다!

재산 남용

대부분의 경우 이러한 속성은 인스턴스 속성으로 대체 될 수 있으므로 이러한 속성에 액세스하여 직접 설정할 수 있습니다. 논의 된대로 속성 사용의 이점 (예 : 값 확인)에 대한 특정 요구 사항이없는 경우 속성을 사용하는 것이 Python에서 속성을 만드는 것보다 선호됩니다.

4. 의미있는 문자열 표현 정의

파이썬에서는 이름 앞뒤에 이중 밑줄이있는 함수를 특수 또는 매직 메서드라고하며 어떤 사람들은이를 dunder 메서드라고합니다. 그들은 다음을 포함하여 통역사의 기본 작업에 특별한 용도가 있습니다.__init__이전에 다룬 방법입니다. 두 가지 특별한 방법,__repr____str__는 사용자 정의 클래스의 적절한 문자열 표현을 만드는 데 필수적이며 코드 판독기에게 클래스에 대한보다 직관적 인 정보를 제공합니다.

그들 사이의 주요 차이점은__repr__메소드는 문자열을 정의합니다.이를 사용하여 다음을 호출하여 객체를 다시 만들 수 있습니다.eval (repr ( "repr")), 동안__str__메소드는 더 설명적이고 더 많은 사용자 정의를 허용하는 문자열을 정의합니다. 즉, 정의 된 문자열이__repr__방법은 개발자가 보는 동안__str__방법은 일반 사용자가 볼 수 있습니다. 다음은 예를 보여줍니다.

문자열 표현의 구현

양해 해주십시오.__repr__메서드 구현 (7 행), f- 문자열은!아르 자형올바른 형식의 문자열로 인스턴스를 구성하는 데 필요하기 때문에 따옴표로 이러한 문자열을 표시합니다. ! r 형식이 없으면 문자열은학생 (John, Smith)을 구성하는 올바른 방법이 아닙니다.학생예. 이러한 구현이 문자열을 어떻게 보여 주는지 살펴 보겠습니다. 특히__repr__대화 형 인터프리터에서 개체에 액세스 할 때 메서드가 호출되고__str__메서드는 개체를 인쇄 할 때 기본적으로 호출됩니다.

문자열 표현

5. 인스턴스, 클래스 및 정적 메서드

클래스에서 우리는 인스턴스, 클래스, 정적 메서드의 세 종류의 메서드를 정의 할 수 있습니다. 관심있는 기능에 어떤 방법을 사용해야하는지 고려해야합니다. 다음은 몇 가지 일반적인 지침입니다.

예를 들어 메서드가 개별 인스턴스 개체와 관련된 경우 인스턴스의 특정 속성에 액세스하거나 업데이트해야합니다.이 경우 인스턴스 메서드를 사용해야합니다. 이러한 메서드에는 다음과 같은 서명이 있습니다.def do_something (self) :, 여기서본인인수는 메서드를 호출하는 인스턴스 개체를 참조합니다. 에 대해 더 알고본인인수, 당신은 참조 할 수 있습니다내 이전 기사이 주제에.

메서드가 개별 인스턴스 개체와 관련이없는 경우 클래스 또는 정적 메서드 사용을 고려해야합니다. 두 방법 모두 적용 가능한 데코레이터로 쉽게 정의 할 수 있습니다.classmethodstaticmethod. 이 두 가지의 차이점은 클래스 메서드를 사용하면 클래스와 관련된 속성에 액세스하거나 업데이트 할 수 있지만 정적 메서드는 인스턴스 또는 클래스 자체와 독립적이라는 것입니다. 클래스 메서드의 일반적인 예는 편리한 인스턴스화 메서드를 제공하는 반면 정적 메서드는 단순히 유틸리티 함수일 수 있습니다. 다음 코드는 몇 가지 예를 보여줍니다.

다른 종류의 방법

비슷한 방식으로 클래스 속성을 만들 수도 있습니다. 앞에서 논의한 인스턴스 속성과 달리 클래스 속성은 모든 인스턴스 객체에서 공유되며 개별 인스턴스 객체와 독립적 인 일부 특성을 반영해야합니다.

6. 개인 속성을 사용한 캡슐화

프로젝트를위한 사용자 정의 클래스를 작성할 때 특히 다른 사람들이 클래스를 사용할 것으로 예상되는 경우 캡슐화를 고려해야합니다. 클래스의 기능이 커지면 일부 함수 또는 속성은 클래스 내의 데이터 처리에만 관련됩니다. 즉, 클래스 외부에서는 이러한 함수가 호출되지 않으며 클래스의 다른 사용자는 이러한 함수의 구현 세부 사항에 대해 신경 쓰지 않습니다. 이러한 시나리오에서는 캡슐화를 고려해야합니다.

캡슐화를 적용하는 한 가지 중요한 방법은 규칙에 따라 밑줄 또는 두 개의 밑줄을 접두사로 속성 및 함수에 추가하는 것입니다. 미묘한 차이점은 밑줄이있는 항목은보호, 두 개의 밑줄이있는 항목은은밀한, 생성 후 이름 변경이 포함됩니다. 이 두 범주를 구별하는 것은이 기사의 범위를 벗어납니다.내 이전 기사 중 하나그들을 덮었습니다.

본질적으로 속성과 함수의 이름을 이렇게 지정하면 IDE (예 : PyCharm과 같은 통합 개발 환경)에 실제 개인 속성이 존재하지 않더라도 클래스 외부에서 액세스하지 않을 것임을 알립니다. 파이썬. 즉, 우리가 선택하면 여전히 액세스 할 수 있습니다.

캡슐화

위의 코드는 캡슐화의 간단한 예를 보여줍니다. 학생의 경우 평균 GPA를 아는 데 관심이있을 수 있으며 다음을 사용하여 점수를 얻을 수 있습니다.get_mean_gpa방법. 사용자는 평균 GPA가 어떻게 계산되는지 알 필요가 없습니다. 따라서 함수 이름 앞에 밑줄을 추가하여 관련 방법을 보호 할 수 있습니다.

이 모범 사례의 핵심 사항은 사용자가 코드를 사용하는 데 필요한 최소한의 공용 API 만 노출한다는 것입니다. 내부적으로 만 사용되는 경우 보호 또는 개인 방법으로 만드십시오.

7. 별도의 우려 사항 및 분리

프로젝트를 개발하면서 더 많은 데이터를 처리하고 있다는 사실을 알게되었으며, 하나의 클래스를 고수하는 경우 클래스가 번거로울 수 있습니다. 예를 들어 계속하겠습니다.학생수업. 학생들이 학교에서 점심을 먹고 각자 식사 비용을 지불하는 데 사용할 수있는 식사 계정을 가지고 있다고 가정합니다. 이론적으로는 계정 관련 데이터 및 기능을 다룰 수 있습니다.학생아래와 같이 클래스.

혼합 기능

위의 코드는 계정 잔액을 확인하고 계정에 돈을로드하는 데 대한 의사 코드를 보여줍니다. 둘 다학생수업. 분실 된 카드 일시 중지, 계정 통합과 같이 계정과 관련 될 수있는 더 많은 작업이 있다고 상상해보십시오. 이러한 작업을 모두 구현하면학생클래스가 점점 커지면서 점차 유지하기가 더 어려워집니다. 대신 이러한 책임을 분리하고학생이러한 계정 관련 기능에 대해 무책임한 클래스 — 다음과 같은 디자인 패턴디커플링.

분리 된 우려

위의 코드는 추가로 데이터 구조를 설계하는 방법을 보여줍니다.계정수업. 보시다시피 모든 계정 관련 작업을계정수업. 학생의 계정 정보를 검색하려면학생클래스는 정보를 검색하여 기능을 처리합니다.계정수업. 클래스와 관련된 더 많은 기능을 구현하려면 간단히 업데이트 할 수 있습니다.계정수업 만.

디자인 패턴의 주요 요점은 개별 수업에 별도의 문제가 있기를 원한다는 것입니다. 이러한 책임을 분리하면 더 작은 코드 구성 요소를 다루게되므로 클래스가 더 작아지고 향후 변경이 더 쉬워집니다.

8. 최적화를 위해 __slots__ 고려

클래스가 데이터 만 저장하기위한 데이터 컨테이너로 주로 사용되는 경우__ 슬롯 __수업의 성능을 최적화합니다. 속성 액세스 속도를 높일뿐만 아니라 메모리도 절약하므로 수천 개 이상의 인스턴스 객체를 만들어야하는 경우 큰 이점이 될 수 있습니다. 그 이유는 일반 클래스의 경우 인스턴스 속성이 내부적으로 관리되는 사전을 통해 저장되기 때문입니다. 대조적으로,__ 슬롯 __, 인스턴스 속성은 내부적으로 C를 사용하여 구현 된 어레이 관련 데이터 구조를 사용하여 저장되며 성능은 훨씬 더 높은 효율성으로 최적화됩니다.

클래스 정의에서 __slots__ 사용

위의 코드는 우리가 어떻게 구현하는지에 대한 간단한 예를 보여줍니다.__ 슬롯 __수업에서. 특히 모든 속성을 시퀀스로 나열하면 더 빠른 액세스와 적은 메모리 소비를 위해 데이터 저장소에서 일대일 일치가 생성됩니다. 방금 언급했듯이 일반 클래스는 속성 액세스를 위해 사전을 사용하지만__ 슬롯 __구현되었습니다. 다음 코드는 그러한 사실을 보여줍니다.

__slots__ 클래스에 __dict__ 없음

사용에 대한 자세한 설명__ 슬롯 __에 대한 좋은 답변에서 찾을 수 있습니다.스택 오버플로, 그리고 당신은 공식에서 더 많은 정보를 찾을 수 있습니다선적 서류 비치. 더 빠른 액세스와 절약 된 메모리의 이점에 관해서는최근 매체 기사아주 좋은 시연이 있습니다. 여기에 대해 자세히 설명하지 않겠습니다. 그러나 한 가지 주목할 점은__ 슬롯 __부작용이 있습니다. 이는 추가 속성을 동적으로 생성하지 못하게합니다. 어떤 사람들은 클래스의 속성을 제어하는 ​​메커니즘으로이를 제안하지만 디자인 방식이 아닙니다.

9. 문서

마지막으로, 수업 문서에 대해 이야기해야합니다. 가장 중요한 것은 문서 작성이 코드를 대체하는 것이 아니라는 점을 이해해야한다는 것입니다. 수많은 문서를 작성한다고해서 코드의 성능이 향상되는 것은 아니며 반드시 코드를 더 읽기 쉽게 만드는 것도 아닙니다. 코드를 명확히하기 위해 독 스트링에 의존해야하는 경우 코드에 문제가있을 가능성이 큽니다. 나는 당신의 코드가 그 자체로 모든 것을 말해야한다고 진정으로 믿습니다. 다음 코드는 일부 프로그래머가 할 수있는 실수를 보여줍니다. 불필요한 주석을 사용하여 잘못된 코드를 보완합니다 (즉,이 경우 의미없는 변수 이름). 반대로 좋은 이름을 가진 좋은 코드는 주석이 필요하지 않습니다.

잘못된 댓글 예

댓글과 독 스트링 작성에 반대한다는 말은 아니지만 실제로 사용 사례에 따라 다릅니다. 여러 사람이 코드를 사용하거나 두 번 이상 사용하는 경우 (예 : 코드에 액세스하는 유일한 사람이지만 여러 번) 좋은 댓글 작성을 고려해야합니다. 자신이나 팀원이 코드를 읽는 데 도움을 줄 수 있지만, 코드가 주석에서 말한대로 정확하게 작동한다고 가정해서는 안됩니다. 즉, 좋은 코드를 작성하는 것이 항상 명심해야 할 최우선 순위입니다.

최종 사용자가 코드의 특정 부분을 사용하는 경우 해당 사용자가 관련 코드베이스에 익숙하지 않기 때문에 독 스트링을 작성하는 것이 좋습니다. 그들이 알고 싶은 것은 관련 API를 사용하는 방법 뿐이며, docstring은 도움말 메뉴의 기초를 형성합니다. 따라서 프로그램 사용 방법에 대한 명확한 지침을 제공하는 것은 프로그래머의 책임입니다.

결론

이 기사에서는 자신의 클래스를 정의 할 때 고려해야 할 중요한 요소를 검토했습니다. Python이나 일반적인 프로그래밍을 처음 접한다면 지금까지 논의한 모든 측면을 완전히 이해하지 못할 수도 있습니다. 괜찮습니다. 더 많이 코딩할수록 클래스를 정의하기 전에 이러한 원칙을 염두에 두는 것의 중요성을 더 많이 알게 될 것입니다. 좋은 디자인은 나중에 개발 시간을 많이 절약 할 수 있기 때문에 클래스 작업을 할 때 이러한 지침을 계속해서 연습하십시오.

자습서 : 명령 줄에서 Jupyter 노트북 실행 중지

독립형 웹 앱으로 Jupyter Notebook 실행

Image for post
Justin Jairam 님이 찍은 사진뿡 빵뀨(허가)

Jupyter Notebook은 코드, 방정식, 분석 및 설명이 포함 된 사람이 읽을 수있는 문서를 생성 할 수있는 훌륭한 플랫폼을 제공합니다. 일부는 NBDev와 결합 할 때 강력한 개발이라고 생각합니다. 이러한 통합 도구의 경우 즉시 시작하는 것이 최선이 아닙니다. 사용할 때마다 명령 줄에서 Jupyter 웹 애플리케이션을 시작하고 토큰 또는 비밀번호를 입력해야합니다. 전체 웹 애플리케이션은 열려있는 해당 터미널 창에 의존합니다. 일부는 프로세스를 "악화"한 다음안돼터미널에서 분리 할 수 ​​있지만 가장 우아하고 유지 관리가 쉬운 솔루션은 아닙니다.

우리에게 Jupyter는 지속 가능한 웹 애플리케이션으로 실행되고 사용자 인증이 내장 된 Jupyter Notebook의 확장을 출시함으로써 이미이 문제에 대한 해결책을 제시했습니다. 맨 위에 체리를 추가하려면 Docker를 통해 관리하고 유지하여 격리 된 개발 환경을 허용 할 수 있습니다.

이 게시물이 끝날 때까지 JupyterHub의 기능을 활용하여 터미널없이 네트워크 내의 여러 장치에서 액세스 할 수있는 Jupyter Notebook 인스턴스 및보다 사용자 친화적 인 인증 방법에 액세스 할 것입니다.

전제 조건

Docker 및 명령 줄에 대한 기본 지식이 있으면이를 설정하는 데 도움이됩니다.

가지고있는 가장 강력한 장치와 하루 종일 켜져있는 장치에서이 작업을 수행하는 것이 좋습니다. 이 설정의 장점 중 하나는 네트워크의 모든 장치에서 Jupyter Notebook을 사용할 수 있지만 구성한 장치에서 모든 계산이 수행된다는 것입니다.

Jupyter 허브 란?

JupyterHub는 사용자 그룹에 노트북의 강력한 기능을 제공합니다. JupyterHub의 아이디어는 Jupyter 노트북의 사용을 기업, 강의실 및 대규모 사용자 그룹으로 확장하는 것이 었습니다. 그러나 Jupyter Notebook은 단일 개발자가 단일 노드에서 로컬 인스턴스로 실행해야합니다. 안타깝게도 JupyterHub의 유용성 및 확장 성과 로컬 Jupyter 노트북 실행의 단순성을 가질 수있는 중간 지점이 없었습니다. 즉, 지금까지입니다.

JupyterHub에는 기술적 복잡성의 오버 헤드가 거의 또는 전혀없이 단일 노트북을 생성하는 데 활용할 수있는 사전 빌드 된 Docker 이미지가 있습니다. Docker와 JupyterHub의 조합을 사용하여 언제 어디서나 동일한 URL에서 Jupyter Notebook에 액세스 할 것입니다.

건축물

JupyterHub 서버의 아키텍처는 JupyterHub 및 JupyterLab의 2 가지 서비스로 구성됩니다. JupyterHub는 진입 점이되고 모든 사용자에 대한 JupyterLab 인스턴스를 생성합니다. 이러한 각 서비스는 호스트에서 Docker 컨테이너로 존재합니다.

Image for post
JupyterLab 아키텍처 다이어그램 (작성자 별 이미지)

Docker 이미지 빌드

To build our at-home JupyterHub server we will use the pre-built Docker images of JupyterHub & JupyterLab.

Dockerfiles

JupyterHub Docker 이미지는 간단합니다.

FROM jupyterhub/jupyterhub:1.2# Copy the JupyterHub configuration in the container
COPY jupyterhub_config.py .
# Download script to automatically stop idle single-user servers
COPY cull_idle_servers.py .
# Install dependencies (for advanced authentication and spawning)
RUN pip install dockerspawner

사전 구축 된 JupyterHub Docker Image를 사용하고 자체 구성 파일을 추가하여 유휴 서버를 중지합니다.cull_idle_servers.py. 마지막으로 Docker를 통해 JupyterLab 인스턴스를 생성하기 위해 추가 패키지를 설치합니다.

Docker 작성

모든 것을 하나로 모으기 위해docker-compose.yml배포 및 구성을 정의하는 파일입니다.

version: '3'services:
# Configuration for Hub+Proxy
jupyterhub:
build: . # Build the container from this folder.
container_name: jupyterhub_hub # The service will use this container name.
volumes: # Give access to Docker socket.
- /var/run/docker.sock:/var/run/docker.sock
- jupyterhub_data:/srv/jupyterlab
environment: # Env variables passed to the Hub process.
DOCKER_JUPYTER_IMAGE: jupyter/tensorflow-notebook
DOCKER_NETWORK_NAME: ${COMPOSE_PROJECT_NAME}_default
HUB_IP: jupyterhub_hub
ports:
- 8000:8000
restart: unless-stopped
# Configuration for the single-user servers
jupyterlab:
image: jupyter/tensorflow-notebook
command: echo
volumes:
jupyterhub_data:

주목할 주요 환경 변수는 다음과 같습니다.DOCKER_JUPYTER_IMAGEDOCKER_NETWORK_NAME. JupyterHub는 환경 변수에 정의 된 이미지로 Jupyter Notebook을 만듭니다. Jupyter 이미지 선택에 대한 자세한 내용은 다음 Jupyter를 참조하세요.선적 서류 비치.

DOCKER_NETWORK_NAME서비스에서 사용하는 Docker 네트워크의 이름입니다. 이 네트워크는 Docker Compose에서 자동 이름을 가져 오지만 허브는 Jupyter 노트북 서버를 여기에 연결하기 위해이 이름을 알아야합니다. 네트워크 이름을 제어하기 위해 약간의 해킹을 사용합니다. 환경 변수 COMPOSE_PROJECT_NAME을 Docker Compose에 전달하고 _default를 추가하여 네트워크 이름을 얻습니다.

라는 파일을 만듭니다..env같은 디렉토리에docker-compose.yml파일을 열고 다음 내용을 추가하십시오.

COMPOSE_PROJECT_NAME=jupyter_hub

유휴 서버 중지

이것이 홈 설정이므로 유휴 인스턴스를 중지하여 시스템의 메모리를 보존 할 수 있기를 원합니다. JupyterHub에는 함께 실행할 수있는 서비스가 있으며 그중 하나는jupyterhub-idle-culler. 이 서비스는 장기간 유휴 상태 인 모든 인스턴스를 중지합니다.

이 서비스를 추가하려면 다음 이름의 새 파일을 만드십시오.cull_idle_servers.py내용을 복사하십시오.jupyterhub-idle-culler 프로젝트그것에.

`cull_idle_servers.py`가 Dockerfile과 동일한 폴더에 있는지 확인합니다.

JupyterHub 서비스에 대해 자세히 알아 보려면 공식선적 서류 비치그들에.

Jupyterhub 구성

마무리하려면 JupyterHub 인스턴스에 대한 볼륨 마운트, Docker 이미지, 서비스, 인증 등과 같은 구성 옵션을 정의해야합니다.

아래는 간단합니다jupyterhub_config.py내가 사용하는 구성 파일.

import os
import sys
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'
c.DockerSpawner.image = os.environ['DOCKER_JUPYTER_IMAGE']
c.DockerSpawner.network_name = os.environ['DOCKER_NETWORK_NAME']
c.JupyterHub.hub_connect_ip = os.environ['HUB_IP']
c.JupyterHub.hub_ip = "0.0.0.0" # Makes it accessible from anywhere on your network
c.JupyterHub.admin_access = Truec.JupyterHub.services = [
{
'name': 'cull_idle',
'admin': True,
'command': [sys.executable, 'cull_idle_servers.py', '--timeout=42000']
},
]
c.Spawner.default_url = '/lab'notebook_dir = os.environ.get('DOCKER_NOTEBOOK_DIR') or '/home/jovyan/work'
c.DockerSpawner.notebook_dir = notebook_dir
c.DockerSpawner.volumes = {
'/home/sidhu': '/home/jovyan/work'
}

다음 구성 옵션에 유의하십시오.

  • '명령': [sys.executable, 'cull_idle_servers.py', '--timeout = 42000']: 제한 시간은 유휴 Jupyter 인스턴스가 종료 될 때까지의 시간 (초)입니다.
  • c.Spawner.default_url = '/ lab': Jupyter Notebook 대신 Jupyterlab을 사용합니다. Jupyter Notebook을 사용하려면이 줄을 주석 처리하십시오.
  • '/ home / sidhu': '/ home / jovyan / work': 데스크탑에있는 모든 프로젝트와 노트북에 액세스 할 수 있도록 홈 디렉토리를 JupyterLab 홈 디렉토리에 마운트했습니다. 이를 통해 새 노트북을 생성하고 로컬 머신에 저장하고 Jupyter 노트북 Docker 컨테이너를 삭제해도 삭제되지 않는 경우에도 지속성을 확보 할 수 있습니다.

홈 디렉토리를 마운트하지 않으려면이 줄을 제거하고 변경하는 것을 잊지 마십시오.시두사용자 이름에.

서버 시작

서버를 시작하려면 다음을 실행하십시오.도커 구성 -d, 로 이동localhost : 8000브라우저에서 JupyterHub 방문 페이지를 볼 수 있습니다.

Image for post
JupyterHub 랜딩 페이지 스크린 샷 (작성자 별 이미지)

va 노트북, iPad 등과 같은 네트워크의 다른 장치에서 액세스하려면 다음을 실행하여 호스트 컴퓨터의 IP를 식별하십시오.ifconfig on Unix machines & ipconfigWindows에서.

Image for post
Ipconfig (작성자 별 이미지)

다른 장치에서 포트 8000에서 찾은 IP로 이동합니다.http : // IP : 8000JupyterHub 방문 페이지가 표시됩니다!

인증 중

그러면 서버에 인증하는 마지막 작업이 남습니다. LDAP 서버 또는 OAuth를 설정하지 않았으므로 JupyterHub는 PAM (Pluggable Authentication Module) 인증을 사용하여 사용자를 인증합니다. 즉, JupyterHub는 호스트 시스템의 사용자 이름과 비밀번호를 사용하여 인증합니다.

이를 활용하려면 JupyterHub Docker 컨테이너에 사용자를 만들어야합니다. 컨테이너에 스크립트를 배치하고 컨테이너를 시작할 때 실행하는 것과 같은 다른 방법이 있지만 연습으로 수동으로 수행합니다. 컨테이너를 해체하거나 다시 빌드하는 경우 사용자를 다시 만들어야합니다.

사용자 자격 증명을 스크립트 또는 Dockerfile에 하드 코딩하지 않는 것이 좋습니다.

1) JupyterLab 컨테이너 ID를 찾습니다.도커 ps -a

Image for post
JupyterLab 컨테이너 ID (작성자 별 이미지)

2) 컨테이너에 "SSH":docker exec -it $ YOUR_CONTAINER_ID bash

3) 사용자를 만들고 터미널 프롬프트에 따라 암호를 만듭니다.useradd $ YOUR_USERNAME

4) 자격 증명으로 로그인하면 설정이 완료됩니다!

이제 모든 장치에서 손 안에서 액세스 할 수있는 Jupyter Notebook 서버를 사용할 준비가되었습니다. 행복한 코딩!

피드백

내 게시물과 튜토리얼에 대한 모든 피드백을 환영합니다. 나에게 메시지를 보낼 수 있습니다.트위터또는 sidhuashton@gmail.com으로 이메일을 보내주십시오.

알아야 할 7 가지 파이썬 트릭

유용한 팁과 요령으로 친구들에게 깊은 인상을 남기세요

Image for post
~의 사진마이클지지 치의 위에Unsplash

유용한 Python 도움말과 유용한 정보가 온라인에 있습니다. 다음은 Python 게임을 강화하는 데 사용할 수있는 재미 있고 멋진 트릭입니다.동시에 친구들에게 깊은 인상을 남기십시오. 한 돌로 두 마리의 새를 죽이십시오.

더 이상 고민하지 않고 바로 시작하겠습니다.

1. YouTube-DL로 YouTube 동영상 다운로드

YouTube 동영상 (다른 많은 웹 사이트의 동영상) 사용유튜브 -dl Python의 모듈.

먼저 pip를 사용하여 모듈을 설치하겠습니다.

pip install youtube-dl

설치가 완료되면 다음 한 줄 명령을 사용하여 터미널 또는 명령 프롬프트에서 직접 비디오를 다운로드 할 수 있습니다.

youtube-dl <Your video link here>

또는 이후유튜브 -dlPython에 대한 바인딩이 있으면 프로그래밍 방식으로 동일한 작업을 수행하는 Python 스크립트를 만들 수 있습니다.

모든 링크가 포함 된 목록을 만들고 아래의 빠르고 더러운 스크립트를 사용하여 비디오를 다운로드 할 수 있습니다.

Sample code to create a list with all the links and download the videos using the youtube-dl module
작성자 별 이미지

이 모듈을 사용하면 비디오뿐만 아니라 전체 재생 목록, 메타 데이터, 섬네일, 자막, 주석, 설명, 오디오 등을 쉽게 다운로드 할 수 있습니다.

이를 달성하는 가장 쉬운 방법은 이러한 매개 변수를 사전에 추가하고이를 사전에 전달하는 것입니다.YoutubeDL객체 생성자.

아래 코드에서 사전을 만들었습니다.ydl_options, 일부 매개 변수와 함께 생성자에 전달했습니다.

Sample code to use youtube-dl with a number of parameters passed as options
작성자 별 이미지
1. 'format':'bestvideo+bestaudio' #Dowloads the video in the best available video and audio format.2. 'writethumbnail':'writethumbnail' #Downloads the thumbnail image of the video.3. 'writesubtitles':'writesubtitles' #Downloads the subtitles, if any.4. 'writedescription':'writedescription' #Writes the video description to a .description file.

노트 :터미널이나 명령 프롬프트에서 직접 모든 작업을 수행 할 수 있지만 Python 스크립트를 사용하는 것이 유연성 / 재사용 가능성으로 인해 더 좋습니다.

여기에서 모듈에 대한 자세한 내용을 찾을 수 있습니다.Github : youtube-dl.

2. Pdb로 코드 디버그

Python에는 pdb라는 자체 내장 디버거가 있습니다. 디버거는 프로그래머가 변수와 프로그램 실행을 한 줄씩 검사하는 데 도움이되는 매우 유용한 도구입니다. 디버거는 프로그래머가 코드에서 성가신 문제를 찾으려고 노력할 필요가 없음을 의미합니다.

pdb의 좋은 점은 표준 Python 라이브러리에 포함되어 있다는 것입니다. 결과적으로이 아름다움은 Python이 설치된 모든 컴퓨터에서 사용할 수 있습니다. 이것은 바닐라 Python 설치 위에 추가 기능을 설치하는 데 제한이있는 환경에서 유용합니다.

pdb 디버거를 호출하는 방법에는 여러 가지가 있습니다.

In-line breakpoint
pdb.set_trace()
In Python 3.7 and later
breakpoint()
pdb.py can also be invoked as a script to debug other scripts
python3 -m pdb myscript.py

다음은 다음을 사용하여 pdb를 호출하는 Python 3.8의 샘플 코드입니다.중단 점 ()함수:

Image for post
작성자의 이미지

다음은 디버깅 모험에 도움이되는 몇 가지 유용한 명령입니다.

  • : 현재 함수의 다음 줄에 도달하거나 반환 될 때까지 실행을 계속합니다.
  • : 목록 코드
  • j <line>: 줄로 이동
  • b <line>: breakpoint () 설정
  • : 중단 점까지 계속
  • : 종료

노트 :일단 pdb에 있으면,,,, 및예약 된 키워드가됩니다. 마지막 변수는 이름이 변수 인 경우 pdb를 종료합니다.귀하의 코드에서.

여기에서 자세한 내용을 확인할 수 있습니다.pdb — 파이썬 디버거

3. PyInstaller를 사용하여 Python 코드를 실행 파일로 만들기

많은 사람들이 이것을 아는 것은 아니지만 Python을 변환 할 수 있습니다. 스크립트를 독립 실행 형 실행 파일로 변환합니다. 이것에 대한 가장 큰 이점은 Python 스크립트 / 애플리케이션이 Python (및 필요한 타사 패키지)이 설치되지 않은 컴퓨터에서 작동 할 수 있다는 것입니다.

PyInstaller는 Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris 및 AIX를 포함한 거의 모든 주요 플랫폼에서 작동합니다.

설치하려면 pip에서 다음 명령을 사용하십시오.

pip install pyinstaller

그런 다음 프로그램이있는 디렉토리로 이동하여 다음을 실행하십시오.

pyinstaller myscript.py

그러면 실행 파일이 생성되어 다음과 같은 하위 디렉토리에 저장됩니다.dist.

PyInstaller는 사용자 정의를위한 다양한 옵션을 제공합니다.

pyinstaller --onefile --icon [icon file] [script file]# Using the --onefile option bundles everything in a single executable file instead of having a bunch of other files. 
# Using the --icon option adds a custom icon (.ico file) for the executable file

Pyinstaller는 Django, NumPy, Matplotlib, SQLAlchemy, Pandas, Selenium 등 대부분의 타사 패키지와 호환됩니다.

Pyinstaller가 제공하는 모든 기능과 다양한 옵션에 대해 알아 보려면 Github의 해당 페이지를 방문하십시오.Pyinstaller.

4. Tqdm으로 진행률 표시 줄 만들기

TQDM 라이브러리를 사용하면 Python 및 CLI에 대한 빠르고 확장 가능한 진행률 표시 줄을 만들 수 있습니다.

먼저 pip를 사용하여 모듈을 설치해야합니다.

pip install tqdm

몇 줄의 코드로 Python 스크립트에 스마트 진행률 표시 줄을 추가 할 수 있습니다.

tqdm working directly inside Terminal
작성자 별 GIF

TQDM은 Linux, Windows, Mac, FreeBSD, NetBSD, Solaris / SunOS와 같은 모든 주요 플랫폼에서 작동합니다. 뿐만 아니라 모든 콘솔, GUI 및 IPython / Jupyter 노트북과 원활하게 통합됩니다.

tqdm working in Jupiter notebooks
의 GIFTQDM

tqdm의 모든 트릭에 대한 자세한 내용을 보려면 여기 공식 페이지를 방문하십시오.tqdm.

5. Colorama를 사용하여 콘솔 출력에 색상 추가

Colorama는 콘솔 출력에 색상을 추가하는 멋진 크로스 플랫폼 모듈입니다. pip를 사용하여 설치해 보겠습니다.

pip install colorama

Colorama는 다음과 같은 서식 상수를 제공합니다.

Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Style: DIM, NORMAL, BRIGHT, RESET_ALL

다음은 Colorama를 사용하는 샘플 코드입니다.

Sample code to color the console output using Colorama
작성자 별 이미지

위의 코드는 다음 출력을 생성합니다.

Image for post
작성자 별 이미지

스타일 .RESET_ALL전경, 배경 및 밝기를 명시 적으로 재설정합니다. 그러나 Colorama는 프로그램 종료시이 재설정을 자동으로 수행합니다.

Colorama에는 여기에서 찾을 수있는 다른 기능이 있습니다.Colorama 웹 사이트.

6. Tabulate를 사용하여 예쁜 2D 목록 인쇄

종종 Python에서 표 형식의 출력을 처리하는 것은 고통입니다. 그 때의표로 만들다구조하러 온다. "출력이 나에게 상형 문자처럼 보입니까?"에서 출력을 변환 할 수 있습니다. "와, 예쁘 네요!" 음, 마지막 부분은 약간 과장된 것일 수도 있지만 출력의 가독성을 향상시킵니다.

먼저 pip를 사용하여 설치합니다.

pip install tabulate

다음은 tabulate를 사용하여 2D 목록을 표로 인쇄하는 간단한 스 니펫입니다.

Image for post
작성자 별 이미지

아래 GIF는 위 코드의 출력이 표로 표시되거나 표시되지 않는 모습을 보여줍니다. 두 출력 중 어느 것이 더 읽기 쉬운 지 추측하는 것에 대한 보상은 없습니다!

Image for post
작성자 별 GIF

Tabulate는 다음 데이터 유형을 지원합니다.

1. list of lists or another iterable of iterables
2.
list or another iterable of dicts (keys as columns)
3. dict of iterables (keys as columns)
4. two-dimensional NumPy array
5. NumPy record arrays (names as columns)
6. pandas.DataFrame
Source: https://pypi.org/project/tabulate/

다음은 사전에서 작동하는 예입니다.

Image for post
작성자 별 이미지

이것은 사전을 예쁘게 인쇄합니다.

+-------+-----+
| item | qty |
+-------+-----+
| spam | 42 |
| eggs | 451 |
| bacon | 0 |
+-------+-----+

여기에서 라이브러리에 대한 자세한 내용을 찾을 수 있습니다.표로 만들다.

7. Ptpython을 사용하여 표준 Python 셸 꾸미기

내 Python 셸이 내 Python 셸보다 섹시한 이유가 궁금한 경우 사용자 지정 Python 셸을 사용하고 있기 때문입니다. 이 껍질,ptpython, 표준 Python 셸에 비해 많은 개선 사항이 있습니다. 기본적으로 표준 Python 셸과 ptpython이 쌍둥이 인 경우 후자는 두 형제 중 더 예쁘고 더 성공적 일 것입니다.

pip를 통해 ptpython을 설치할 수 있습니다.

pip install ptpython

설치되면 다음을 입력하여 호출 할 수 있습니다.ptpython표준 셸에서.

표준 셸에 비해 몇 가지 기능이 있습니다.

1. Code indentation
2. Syntax highlighting
3. Autocompletion
4. Multiline editing
5. Support for color schemes
... and many other things

아래 GIF에서 작동중인 기능 1 ~ 3을 볼 수 있습니다.

Image for post
작성자 별 GIF

기능에 대해 자세히 알아 보려면 다음 웹 사이트를 방문하십시오.ptpython.

기사를 즐겁게 읽고 그 과정에서 새로운 것을 배웠기를 바랍니다.

멋진 파이썬 트릭이 있습니까? 의견에 귀하의 의견을 들려주세요.

고급 Python : Python 함수를 정의 할 때 고려할 10 가지 요소

Python의 함수 선언, 특히 공용 API에 대한 모범 사례

8 월 26 일 · 12최소 읽기
Image for post
~의 사진리카르도 프란츠의 위에Unsplash

프로그래밍 언어가 사용하는 구현 메커니즘에 관계없이 모두 기능을위한 예약 된 자리를 가지고 있습니다. 함수는 데이터 준비 및 처리와 사용자 인터페이스 요소 구성을 담당하므로 모든 코드 프로젝트의 필수 부분입니다. 예외없이 Python은 객체 지향 프로그래밍 언어로 자리를 잡았지만 데이터 관련 작업을 수행하는 함수에 의존합니다. 따라서 좋은 함수를 작성하는 것은 탄력적 인 코드 기반을 구축하는 데 중요합니다.

작은 프로젝트에서 몇 가지 간단한 기능을 정의하는 것은 간단합니다. 프로젝트 범위가 확대됨에 따라 기능이 훨씬 더 복잡해질 수 있으며 더 많은 기능에 대한 필요성이 기하 급수적으로 증가합니다. 모든 기능을 혼동없이 함께 작동시키는 것은 숙련 된 프로그래머에게도 골칫거리가 될 수 있습니다. 프로젝트 범위가 커짐에 따라 함수 선언에 모범 사례를 적용하는 것이 더욱 중요해집니다. 이 기사에서는 함수 선언에 대한 모범 사례, 즉 수년간 코딩을 통해 쌓아온 지식에 대해 이야기하고 싶습니다.

1. 일반 지침

이러한 일반 지침에 익숙 할 수 있지만 많은 프로그래머가 인정하지 않는 높은 수준의 우수 사례이므로 먼저 논의하고 싶습니다. 개발자가 이러한 지침을 따르지 않으면 대가를 지불해야합니다. 코드를 유지 관리하기가 매우 어렵습니다.

기능에 의미있는 이름을 부여해야합니다. 아시다시피 함수는 파이썬의 객체이기도하므로 함수를 정의 할 때 기본적으로 함수 유형의 변수를 만듭니다. 따라서 변수 이름 (즉, 함수 이름)은 수행하는 작업을 반영해야합니다.

현대 코딩에서는 가독성이 더욱 강조되었지만 대부분 주석과 관련하여 논의되고 있으며 코드 자체와 관련하여 논의되는 빈도는 훨씬 적습니다. 따라서 함수를 설명하기 위해 광범위한 주석을 작성해야하는 경우 함수에 좋은 이름이 없을 가능성이 큽니다. 긴 함수 이름에 대해 걱정하지 마십시오. 거의 모든 최신 IDE에는 뛰어난 자동 완성 힌트가 있으므로 전체 긴 이름을 입력하지 않아도됩니다.

기능 명

좋은 명명 규칙은 함수의 인수와 함수 내의 모든 지역 변수에도 적용되어야합니다. 주목해야 할 또 다른 점은 함수가 클래스 또는 모듈 내에서 사용되도록 의도 된 경우 이름 앞에 밑줄을 붙여야 할 수 있다는 것입니다 (예 :def _internal_fun () :)는 이러한 함수가 비공개 용도이며 공개 API가 아님을 나타냅니다.

작고 단일 목적

기능은 작게 유지해야 관리하기 쉽습니다. 집을 짓고 있다고 상상해보십시오 (저택이 아님). 그러나 사용중인 벽돌은 1 미터 큐브입니다. 사용하기 쉽습니까? 아마 아닐 것입니다. 너무 큽니다. 기능에도 동일한 원칙이 적용됩니다. 기능은 프로젝트의 벽돌입니다. 기능의 크기가 모두 방대하다면 건설이 원활하게 진행되지 않습니다. 크기가 작 으면 다양한 장소에 더 쉽게 맞출 수 있으며 필요에 따라 이동합니다.

또한 기능이 단일 목적을 수행하는 것이 중요하므로 기능을 작게 유지하는 데 도움이됩니다. 단일 목적 함수의 또 다른 이점은 이러한 함수의 이름을 훨씬 쉽게 지정할 수 있다는 것입니다. 의도 된 단일 목적에 따라 함수의 이름을 간단하게 지정할 수 있습니다. 다음은 함수를 리팩토링하여 각 함수가 각각 하나의 목적에만 사용되도록하는 방법입니다. 주목해야 할 또 다른 사항은 모든 함수 이름이 이야기를 전달하기 때문에 작성해야하는 주석을 최소화 할 수 있다는 것입니다.

단일 목적

필요한 모든 작업에 대해 함수를 작성하는 데 무제한의 에너지와 시간이 필요하지 않으므로 표준 라이브러리의 공통 함수에 익숙해지는 것이 중요합니다. 자신의 기능을 정의하기 전에 특정 비즈니스 요구가 일반적인 것인지 생각해보십시오. 그렇다면 이러한 특정 및 관련 요구가 이미 해결되었을 가능성이 높습니다.

예를 들어 CSV 형식의 데이터로 작업하는 경우 다음에서 기능을 살펴볼 수 있습니다.CSV 모듈. 또는팬더 라이브러리CSV 파일을 정상적으로 처리 할 수 ​​있습니다. 또 다른 예로, 목록의 요소를 계산하려면 다음을 고려해야합니다.카운터이러한 작업을 위해 특별히 설계된 collections 모듈의 클래스입니다.

2. 기본 인수

함수를 처음 정의 할 때 일반적으로 특정 목적에 사용됩니다. 그러나 프로젝트에 더 많은 기능을 추가하면 밀접하게 관련된 일부 기능이 병합 될 수 있음을 알 수 있습니다. 유일한 차이점은 병합 된 함수의 호출에는 때때로 다른 인수를 전달하거나 약간 다른 인수를 설정해야한다는 것입니다. 이 경우 인수에 기본값을 설정하는 것을 고려할 수 있습니다.

또 다른 일반적인 시나리오는 함수를 선언 할 때 함수가 차등 매개 변수를 사용하는 함수 호출과 함께 여러 목적을 제공 할 것으로 예상하는 반면 일부 다른 매개 변수는 약간의 변형이 필요하다는 것입니다. 기본값을 덜 가변적 인 인수로 설정하는 것을 고려해야합니다.

기본 인수 설정의 이점은 간단합니다. 대부분의 경우 불필요한 인수 설정을 처리 할 필요가 없습니다. 그러나 이러한 매개 변수를 함수 시그니처에 유지할 수 있으므로 필요할 때 함수를 더 유연하게 사용할 수 있습니다. 예를 들어, 내장정렬 됨 ()함수를 호출하는 방법에는 여러 가지가 있지만 대부분의 경우 기본 형식 만 사용합니다.정렬 됨 (the_iterable), 오름차순 사전 순으로 iterable을 정렬합니다. 그러나 오름차순이나 기본 사전 순서를 변경하려는 경우 다음을 지정하여 기본 설정을 재정의 할 수 있습니다.역전인수.

우리 자신의 함수 선언에 동일한 방법을 적용해야합니다. 어떤 값을 설정해야하는지에 관해서는 대부분의 함수 호출에 사용할 기본값을 선택해야합니다. 이것은 선택적 인수이기 때문에 귀하 (또는 귀하의 API 사용자)는 대부분의 상황에서이를 설정하고 싶지 않습니다. 다음 예를 고려하십시오.

기본 인수

기본 인수를 설정하는 방법이 있습니다. 인수가 변경 가능한 객체 인 경우 기본 생성자를 사용하여 설정하지 않는 것이 중요합니다. 함수는 Python의 객체이며 정의 될 때 생성되기 때문입니다. 부작용은 함수 선언시 기본 인수가 평가되므로 기본 가변 객체가 생성되고 함수의 일부가된다는 것입니다. 기본 개체를 사용하여 함수를 호출 할 때마다 기본적으로 함수와 연결된 동일한 변경 가능한 개체에 액세스하게됩니다.하지만 의도적으로 새로운 개체를 만드는 함수가있을 수 있습니다. 다음 코드 스 니펫은 기본 변경 가능 인수 설정의 원치 않는 부작용을 보여줍니다.

기본 변경 가능 개체

위에서 볼 수 있듯이 두 개의 개별 쇼핑 목록을 만들려고했지만 두 번째 함수 호출은 여전히 ​​동일한 기본 개체에 액세스하여축구동일한 목록 개체에 추가 된 항목. 문제를 해결하려면 다음 구현을 사용해야합니다. 구체적으로는없음변경 가능한 인수의 기본값으로 :

변경 가능한 인수의 기본값으로 없음

3. 여러 값 반환 고려

함수가 복잡한 작업을 수행 할 때 이러한 작업이 두 개 이상의 개체를 생성 할 수 있으며,이 모든 개체는 후속 데이터 처리에 필요합니다. 이론적으로는 함수가 클래스 인스턴스를 출력으로 반환 할 수 있도록 이러한 객체를 래핑하는 클래스를 만들 수 있습니다. 그러나 Python에서는 함수가 여러 값을 반환 할 수 있습니다. 보다 정확하게 말하면 이러한 여러 값은 튜플 객체로 반환됩니다. 다음 코드는 간단한 예를 보여줍니다.

여러 반환 값

위에 표시된 것처럼 반환 된 값은 쉼표로 구분됩니다. 기본적으로 튜플 객체를 생성합니다.유형()함수.

한 가지 주목할 점은 Python 함수가 여러 값을 반환 할 수 있지만이 기능을 남용해서는 안된다는 것입니다. 하나의 값 (함수가 명시 적으로 아무것도 반환하지 않으면 실제로없음모든 것이 간단하고 대부분의 사용자는 일반적으로 함수가 하나의 값만 반환하기를 기대하기 때문입니다. 경우에 따라 두 개의 값을 반환하는 것이 좋으며 세 개의 값을 반환하는 것도 괜찮지 만 네 개의 값을 반환하지 마십시오. 어떤 사용자에게 많은 혼란을 줄 수 있습니다. 이런 일이 발생하면 함수를 리팩토링해야 함을 나타내는 좋은 표시입니다. 함수는 여러 용도로 사용되며 더 많은 전용 책임이있는 작은 함수를 만들어야합니다.

4. Try… Except 사용

함수를 공개 API로 정의 할 때 사용자가 원하는 매개 변수를 함수에 설정했다고 항상 가정 할 수는 없습니다. 우리가 직접 함수를 사용하더라도 일부 매개 변수가 우리의 통제를 벗어나 생성되어 우리의 함수와 호환되지 않을 수 있습니다. 이 경우 함수 선언에서 무엇을해야합니까?

첫 번째 고려 사항은시도…일반적인 예외 처리 기술입니다. 잘못 될 수있는 코드 (예 : 특정 예외 발생)를시험절과 가능한 예외는절.

다음 시나리오를 살펴 보겠습니다. 특정 비즈니스 요구 사항은 함수가 파일 경로를 사용하고 파일이 존재하고 성공적으로 읽힌 경우 함수가 파일에 대해 일부 데이터 처리 작업을 수행하고 결과를 반환하고 그렇지 않으면 반환하는 것입니다.-1. 이러한 요구를 구현하는 방법에는 여러 가지가 있습니다. 아래 코드는 가능한 솔루션을 보여줍니다.

시도… 문 제외

즉, 함수 사용자가 코드에서 예외를 발생시키는 일부 인수를 설정할 수 있다고 예상하는 경우 이러한 가능한 예외를 처리하는 함수를 정의 할 수 있습니다. 그러나 예에 표시된 기능의 일부가 아닌 한 사용자에게 명확하게 전달해야합니다 (return-1파일을 읽을 수없는 경우).

5. 인수 유효성 검사 고려

사용하는 이전 기능시도…선언문은 EAFP (허가보다 용서를 쉽게 구하기) 코딩 스타일이라고도합니다. LBYL (Look Before You Leap)이라는 또 다른 코딩 스타일이 있는데, 특정 코드 블록을 실행하기 전에 온 전성 검사를 강조합니다.

앞의 예에 따라 LBYL을 함수 선언에 적용 할 때 다른 고려 사항은 함수의 인수를 확인하는 것입니다. 인수 유효성 검사의 일반적인 사용 사례 중 하나는 인수가 올바른 데이터 유형인지 확인하는 것입니다. 우리 모두 알다시피 Python은 동적 유형 언어로 유형 검사를 시행하지 않습니다. 예를 들어 함수의 인수는 정수 또는 부동 소수점 숫자 여야합니다. 그러나 문자열 (호출 자체)을 설정하여 함수를 호출하면 함수가 실행될 때까지 오류 메시지가 표시되지 않습니다.

다음 코드는 코드를 실행하기 전에 인수의 유효성을 검사하는 방법을 보여줍니다.

인수 검증

EAFP 및 LBYL은 함수 인수를 처리하는 것 이상으로 적용될 수 있습니다. 기능의 어느 곳에 나 적용 할 수 있습니다. EAFP는 Python 세계에서 선호되는 코딩 스타일이지만 사용 사례에 따라 EAFP 스타일로 얻는 일반적인 기본 제공 오류 메시지보다 더 사용자 친화적 인 함수 별 오류 메시지를 제공 할 수있는 LBYL 사용을 고려해야합니다. .

6. Lambda 함수를 대안으로 고려

일부 함수는 특정 작업을 수행하기 위해 다른 함수 (또는 일반적인 용어로 호출 가능)를 사용할 수 있습니다. 예를 들어정렬 됨 ()기능에는더 많은 사용자 지정 정렬 동작을 정의 할 수있는 인수입니다. 다음 코드 스 니펫은 사용 사례를 보여줍니다.

함수를 사용한 맞춤 정렬

특히sorting_grade함수는 한 번만 사용되었으며 간단한 함수입니다.이 경우 람다 함수 사용을 고려할 수 있습니다.

람다 함수에 익숙하지 않은 경우 다음은 간단한 설명입니다. 람다 함수는 lambda 키워드를 사용하여 선언 된 익명 함수입니다. 0 개 이상의 인수가 필요하며 다음 형식의 적용 가능한 작업에 대해 하나의 표현식이 있습니다.람다 인수 : 표현식. 다음 코드는 람다 함수를 사용하는 방법을 보여줍니다.정렬 됨 ()위의 솔루션보다 약간 깔끔해 보이는 함수 :

Lambda를 사용한 사용자 지정 정렬

많은 데이터 과학자와 관련된 또 다른 일반적인 사용 사례는 Pandas 라이브러리로 작업 할 때 람다 함수를 사용하는 것입니다. 다음 코드는 간단한 예입니다.람다함수는 다음을 사용하여 데이터 조작을 지원합니다.지도()팬더의 각 항목을 작동하는 함수시리즈목적:

데이터 조작지도()람다

7. 데코레이터 고려

데코레이터는 핵심 기능에 영향을주지 않고 다른 기능의 동작을 수정하는 기능입니다. 즉, 장식적인 수준에서 장식 된 기능을 수정합니다. 데코레이터에 대해 잘 모르시 겠다면 이전 기사를 참조하십시오 (1,2, 및). 다음은 데코레이터가 Python에서 작동하는 방식에 대한 간단한 예입니다.

기본 데코레이터

표시된대로 데코레이터 함수는 단순히 데코 레이팅 된 함수를 두 번 실행합니다. 데코레이터를 사용하려면 데코레이터 함수 이름을 데코 레이팅 된 함수 위에@접두사. 알 수 있듯이 데코 레이팅 된 함수는 두 번 호출되었습니다.

예를 들어 유용한 데코레이터 중 하나는 사용자 정의 클래스에서 사용할 수있는 속성 데코레이터입니다. 다음 코드는 작동 방식을 보여줍니다. 본질적으로@특성데코레이터는 인스턴스 메서드를 변환하여 점 표기법을 사용하는 액세스를 허용하는 일반 속성처럼 작동하도록합니다.

데코레이터 : 속성

데코레이터의 또 다른 사소한 사용 사례는 시간 로깅 데코레이터로, 함수의 효율성이 중요한 경우 특히 유용 할 수 있습니다. 다음 코드는 이러한 사용법을 보여줍니다.

로깅 시간

8. * args와 ** kwargs를 사용하라 — 그러나 간결하게

이전 섹션에서* args** kwargs데코레이터 함수를 정의 할 때 데코레이터 함수를 사용하여 모든 함수를 데코레이션 할 수 있습니다. 본질적으로 우리는* args모든 (또는 더 일반적으로 결정되지 않은 수의) 위치 인수를 캡처하는 동안** kwargs모든 (또는 더 일반적으로 결정되지 않은 수의) 키워드 인수를 캡처합니다. 특히 위치 인수는 함수 호출에서 전달 된 인수의 위치를 ​​기반으로하는 반면, 키워드 인수는 매개 변수를 특별히 명명 된 함수 인수로 설정하는 것을 기반으로합니다.

이러한 용어에 익숙하지 않은 경우 여기에서 기본 제공의 서명을 간단히 살펴볼 수 있습니다.정렬 됨 ()함수:정렬 됨 (반복 가능,*,key = 없음,reverse = 거짓). 그만큼반복 가능인수는 위치 인수이고역전인수는 키워드 인수입니다.

사용의 주요 이점* args** kwargs동일한 문제에 대해 함수 선언을 깨끗하게하거나 덜 시끄럽게 만드는 것입니다. 다음 예는 다음의 합법적 인 사용을 보여줍니다.* arg함수 선언에서 함수가 임의의 수의 위치 인수를 허용하도록합니다.

* args 사용

다음 코드는 합법적 인 사용을 보여줍니다.** kwargs함수 선언에서. 마찬가지로** kwargs사용자가 원하는 수의 키워드 인수를 설정하여 함수를보다 유연하게 만들 수 있습니다.

** kwargs 사용

그러나 대부분의 경우 사용할 필요가 없습니다.* args또는** kwargs. 선언을 좀 더 깔끔하게 만들 수 있지만 함수의 서명을 숨 깁니다. 즉, 함수 사용자는 함수가 취하는 매개 변수를 정확히 파악해야합니다. 그러니 제 충고는 필요하지 않으면 사용하지 않는 것입니다. 예를 들어 사전 인수를 사용하여** kwargs? 마찬가지로 목록 또는 튜플 객체를 사용하여* args? 대부분의 경우 이러한 대안은 문제없이 작동합니다.

9. 인수에 대한 유형 주석

앞서 언급했듯이 Python은 동적 형식의 프로그래밍 언어이자 해석 언어이며, 이는 Python이 코딩 시간 동안 형식 호환성을 포함한 코드 유효성을 확인하지 않는다는 의미입니다. 코드가 실제로 실행될 때까지 함수와 호환되지 않는 유형을 입력합니다 (예 : 정수가 예상 될 때 함수에 문자열 전송).

이러한 이유로 Python은 입력 및 출력 인수 유형의 선언을 시행하지 않습니다. 즉, 함수를 만들 때 어떤 유형의 매개 변수가 있어야하는지 지정할 필요가 없습니다. 그러나 최근 Python 릴리스에서는 그렇게 할 수있게되었습니다. 유형 주석을 사용할 때의 주요 이점은 일부 IDE (예 : PyCharm 또는 Visual Studio Code)에서 주석을 사용하여 유형 호환성을 확인할 수 있으므로 사용자 또는 다른 사용자가 함수를 사용할 때 적절한 힌트를 얻을 수 있다는 것입니다.

또 다른 관련 이점은 IDE가 매개 변수 유형을 알고있는 경우 적절한 자동 완성 제안을 제공하여 더 빠르게 코딩 할 수 있다는 것입니다. 물론 함수에 대한 독 스트링을 작성할 때 이러한 유형 주석은 코드의 최종 개발자에게도 유익합니다.

Image for post
유형 주석 (PyCharm)이있는 유용한 정보

10. 책임있는 문서

나는 좋은 문서를 책임감있는 문서와 동일시합니다. 함수가 사적인 용도로 사용되는 경우 매우 철저한 문서를 작성할 필요가 없습니다. 코드가 스토리를 명확하게 전달한다고 가정 할 수 있습니다. 어느 곳에서나 약간의 설명이 필요한 경우 코드를 재검토 할 때 자신이나 다른 독자에게 알림 역할을 할 수있는 매우 간단한 주석을 작성할 수 있습니다. 여기에서 책임있는 문서에 대한 논의는 공용 API로서의 함수의 독 스트링과 더 관련이 있습니다. 다음 측면이 포함되어야합니다.

  • 함수의 의도 된 작업에 대한 간략한 요약입니다.이것은 매우 간결해야합니다. 대부분의 경우 요약은 한 문장 이상이어서는 안됩니다.
  • 입력 인수 : 유형 및 설명.입력 인수의 유형과 특정 옵션을 설정하여 수행 할 수있는 작업을 지정해야합니다.
  • 반환 값 : 유형 및 설명.입력 인수와 마찬가지로 함수의 출력을 지정해야합니다. 아무것도 반환하지 않는 경우 선택적으로없음반환 값으로.

결론

코딩 경험이 있다면 대부분의 시간이 함수 작성 및 리팩토링에 소비된다는 것을 알게 될 것입니다. 결국 데이터는 일반적으로 너무 많이 변경되지 않으며 데이터를 처리하고 조작하는 기능입니다. 데이터를 신체의 줄기라고 생각하면 기능은 사용자를 움직이는 팔과 다리입니다. 따라서 우리는 프로그램을 민첩하게 만들기 위해 좋은 함수를 작성해야합니다.

이 기사가 코딩에 사용할 수있는 유용한 정보를 전달했으면합니다.

읽어 주셔서 감사합니다.

데이터 과학,기계 학습

ROCKET : 빠르고 정확한 시계열 분류

Python을 사용한 시계열 분류를위한 최신 알고리즘

이미지OpenClipart- 벡터...에서pixabay
  • ROCKET의 작동 원리 설명
  • Python 코드 예제 제공

대안은 무엇입니까?

시계열 분류를위한 다른 방법은 일반적으로 모양, 빈도 또는 분산과 같은 특정 시리즈 표현에 의존합니다. ROCKET의 컨볼 루션 커널은이 엔지니어링 된 기능 추출을 동일한 기능을 많이 캡처 할 수있는 단일 메커니즘으로 대체합니다.

시계열 분류 조사

시계열 변환은 시계열 분류의 기본 아이디어입니다.많은 시계열 특정 알고리즘은 변환 된 시계열과 기존 분류 알고리즘의 구성입니다., scikit-learn에있는 것과 같은.

경쟁 SOTA 방법

다음 방법은에 설명 된 알고리즘의 속도와 정확성을 개선하기 위해 노력합니다.서베이위.

  • TS-CHIEF사전 기반 및 간격 기반 분할 기준을 사용하여 Proximity Forest를 확장합니다.
  • InceptionTimeInception 아키텍처를 기반으로하는 5 개의 deep CNN의 앙상블입니다.
  • 미스터 씰시계열 (SAX, SFA)의 기호 표현으로 추출 된 특징에 선형 분류기를 적용합니다.
  • cBOSS 또는 계약 가능한 BOSS는 SFA 변환을 기반으로하는 사전 기반 분류기입니다.
  • catch22분류기에 전달할 수있는 22 개의 미리 선택된 시계열 변환 집합입니다.

ROCKET은 어떻게 작동합니까?

ROCKET은 먼저 컨볼 루션 커널을 사용하여 시계열을 변환하고 두 번째는 변환 된 데이터를 선형 분류기에 전달합니다.

컨볼 루션 커널

컨벌루션 신경망에서 발견 된 것과 동일한 컨볼 루션 커널은 임의의 길이, 가중치, 편향,팽창, 패딩. 보다종이랜덤 매개 변수가 샘플링되는 방법에 대해 설명합니다. ROCKET의 일부이며 샘플링을 조정할 필요가 없습니다. 보폭은 항상 하나입니다. ROCKET은 결과 기능에 ReLU와 같은 비선형 변환을 적용하지 않습니다.

컨볼 루션 커널 변환

각 커널은 각 시계열과 컨볼 루션되어 기능 맵을 생성합니다. 커널의 기능 맵은 통합되어 커널 당 두 가지 기능을 생성합니다.최대 값양수 값의 비율.

Image for post
zi는 회선 연산의 출력입니다.

선형 분류

더 작은 데이터 세트의 경우, 저자는능선 회귀 분류기정규화 매개 변수의 빠른 교차 검증과 다른 초 매개 변수가 없기 때문입니다.

ROCKET을 Python과 함께 사용하는 방법은 무엇입니까?

ROCKET 변환은sktime파이썬 패키지.

import numpy as np
from sklearn.linear_model import RidgeClassifierCV
from sktime.datasets import load_arrow_head # univariate dataset
from sktime.transformers.series_as_features.rocket import Rocket
X_train, y_train = load_arrow_head(split="test", return_X_y=True)
X_test, y_test = load_arrow_head(split="train", return_X_y=True)
print(X_train.shape, X_test.shape)
>> (175, 1) (36, 1)
Image for post
rocket = Rocket(num_kernels=10,000, random_state=111) 
rocket.fit(X_train)
X_train_transform = rocket.transform(X_train)
X_train_transform.shape
>> (175, 20000)
classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 10), normalize=True)
classifier.fit(X_train_transform, y_train)
X_test_transform = rocket.transform(X_test)
classifier.score(X_test_transform, y_test)
>> 0.9167

소환

Dempster, A., Petitjean, F. & Webb, G.I. ROCKET : 랜덤 컨볼 루션 커널을 사용한 매우 빠르고 정확한 시계열 분류.데이터 최소 지식 디스크 34,1454–1495 (2020).https://doi.org/10.1007/s10618-020-00701-z

+ Recent posts