- 1990년대 후반 CNRI에 있던 Barry Warsaw(배리 워쇼우)가 많은 제안들을 Guido가 살펴볼 수 있도록 프로세스 도입 - RFC(Request for Comments, 인터넷 기술 및 표준에 관한 문서) 프로세스를 참조하여 (제안 → 토론 → 결론) 체계 수립
다양하게 파생된 '-EP' 문서들
▶ PEP 0 - Index of Python Enhancement Proposals (PEPs)
- PEPs로 알려진 모든 PEP 목록을 살펴볼 수 있게 제공해준다. - 다양한 기준으로 PEP 목록을 제공해준다.
▶ PEP 8 – Style Guide for Python Code
- 파이썬 답게 코드를 작성하기 (Pythonic Code)
- PEP 중에서 가장 유명하고, 필독해야 하는 문서
- 들여쓰기는 4개의 공백(space)을 사용해야 한다는 것과 같은 코드 스타일 가이드 이다.
▶ PEP 572 – Assignment Expressions
- Guido를 독재자에서 사임하게 만들었던 문제의 그 PEP
- 일명 바다코끼리 연산자(walrus operator) ":=" 도입 . 할당 표현식(assignment expression) . Python 3.8에 포함
- Guido가 제안한 내용이고 도입을 하자는 입장이었고, 커뮤니티는 파이썬 답지 않고, 간결성을 해친다며 반대
- 결국은 승인되어 파이썬 3.8에 도입되었지만, Guido는 BDFL 모델을 내려놓게 되었고
이후 "The Steering Council Model"을 통해 의사결정 하기로 함 (PEP 8016)
▶ PEP 20 – The Zen of Python
- 파이썬의 선 (파이썬이 추구하는 철학)
아름다운 것이 못생긴 것보다 좋습니다. 명시적인 것이 암시적인 것보다 좋습니다. 단순한 것이 복잡한 것보다 좋습니다. 복합적인 것이 복잡한 것보다 좋습니다. 납작한 것이 중첩된 것보다 좋습니다. 흩뿌려진 것이 모인 것보다 좋습니다. 가독성은 중요합니다. 특별한 상황이, 규칙을 깰 만큼 특별하단 얘기는 아닙니다. 실용성이 순수함을 이길 때까지는 말이죠. 에러는 조용히 넘어가서는 안됩니다. 명시적으로 조용히 만들지 않는 한. 모호한 상황이라면, 추측하려 하지 마세요. 문제를 풀 수 있는 (바람직하고 유일한) 분명한 방법이 있어야 합니다. 하지만 네덜란드 인이 아닌 이상 처음에는 분명하지 않을 수 있습니다. 지금 하는 게 하지 않는 것보단 좋습니다. 하지만 지금 당장 하는 것보다 안 하는 게 나을 때도 있습니다. 구현 방식이 설명하기 어렵다면, 그것은 좋지 않은 생각입니다. 구현 방식이 설명하기 쉽다면, 그것은 아마 좋은 생각일 겁니다. Namespaces는 쩌는 생각입니다. 더욱 이런 것들을 해봅시다!
- 1970 ~ 1980년대에 배우기 쉽고, 사용하기 쉬운 언어를 만들기 위해 개발된 프로그래밍 언어 (BASIC 언어 대체로 고안) - CWI(Centrum voor Wiskunde en Informatica, 네덜란드 국가 수학 및 컴퓨터 과학 연구소)의 프로젝트로 진행 - Leo Geurts(레오 회르츠), Lambert Meertens(람베르트 메르텐스) 및 Steven Pemberton(스티븐 펨버턴) 주도 - Guido van Rossum(귀도 반 로섬)이 1980년대초 구현자로써 참여함
생김새를 보면 정말 뭔가 상당히 친숙하다
▶ Python Created
- Guido van Rossum(귀도 반 로섬)은 1986년 CWI에서 Amoeba(아메바)라는 분산 운영체제 프로젝트로 부서 이동 - 1989년 예외 처리 및 확장에 강점을 갖는 ABC 언어와 비슷한 스크립팅 언어 개발 착수 - 1991년 2월, 유즈넷에 공개 (그 전에는 Amoeba 프로젝트에 적용하면서 계속 개발)
진짜 개발자가 명품을 만드는 것은, 보통 휴가 때 이루어지곤 한다 … (뭔가 현타가....)
▶ Guido Van Rossum
- 파이썬의 아버지이자 엄마, 시조새, 창조자, 신 !!!
- CWI, NIST, CNRI 같은 여러 연구 기관에서 근무 - 2000년 5월 기술 스타트업 BeOpen.com → 10월 파산 - 2000년 말 ~ 2003년 Zope Corporation 근무 (파이썬 기반 웹 어플 서버/커뮤니티) - 2003년 ~ 2005년 Elemental Security (회사 맞춤형 프로그래밍 언어 개발) - 2005년 ~ 2012년 Google (50% 파이썬 언어 개발, 사내 개발 도구 개발) - 2013년 ~ 2019년 DropBox (클라우드 스토리지) - 은퇴 선언 → 은퇴 번복 - 2020년 ~ Microsoft 개발 부서, 현재 명예 엔지니어 직책
2006년 OSCON
2024년 PyCon
▶ MISC
- Python 어원: Monty Python's Flying Circus(몬티 파이튼의 비행 서커스) . BBC에서 1969년~1974년 방영된 스케치 코미디 TV 쇼 . Monty Python: 영국 코미디 그룹으로 TV쇼 및 영화, 극장 공연 등 다양한 활동 - 자비로운 종신독재자(BDFL, Benevolent Dictator for Life) . 커뮤니티 논쟁이 있을 때 최종 결론을 내려줄 수 있는 역할로 소수의 오픈소스 개발 리더에게 부여 . 1995년 Python 창시자 Guido Van Rossum 호칭으로 처음 사용됨 . 2018년 7월 12일 BDFL에서 사임한다고 Guido Van Rossum이 선언 → PEP(Python Enhancement Proposal) 572 개선 제안 논란 이슈로 사임
미국의 등급 시스템을 기준으로 묶어주면 되는데, 'age_group' 명칭의 column으로 생성해보도록 하겠다.
매핑하기 위한 딕셔너리를 작성하고, map()을 돌리면 잘 분류되어 값이 추가된 것을 볼 수 있다.
지금까지 작업한 내역들을 CSV 파일로 저장까지 하면서 일단 마무리 해보자.
⑸ Visualization
Graph를 그릴 기본 준비를 해보자.
원하는 정보를 검색하는 것을 해보자.
이번에는 'type' column의 내역을 한 번 살펴보자.
해당 데이터를 가지고 파이 차트를 그려보자.
이번에는 장르 정보를 담고 있는 'listed_in' column을 살펴보자.
여러 장르에 속하는 경우 ", "로 여러 항목이 나열되어 있는 것을 볼 수 있다.
", "로 split을 하는데 'expand=True' 옵션이기에 column을 확장한다.
그런다음 다시 'stack()'으로 세로 방향으로 변환(column 하나로 합치기)해서 value_counts() 한다.
이제 막대 그래프로 그려보자.
이 그래프를 보고 얻을 수 있는 인사이트는 다음과 같다고 한다.
"넷플릭스는 드라마와 국제 영화에 집중하고 있습니다. 글로벌한 콘텐츠 제공과 깊이 있는 스토리 라인으로 시청자들의 다양한 취향을 만족시키려 하려는 것 같습니다. 또한, 다양한 영화 장르의 제공을 통해 시청자들에게 보다 풍부한 선택지를 제공합니다. 정리하자면, 넷플릭스의 전략은 장르 다양성과 글로벌 사용자들의 요구를 동시에 충족시키기 위한 방향으로 나아가고 있음을 알 수 있습니다."
이번에는 나이 그룹별 국가별 콘텐츠를 살펴보자.
'country' column의 경우에도 ', '로 구분된 여러 나라가 입력되어 있음을 알 수 있다.
일단, split() 해보자.
pandas의 옵션을 설정하는 기능을 활용해서 출력 값의 개수 제한을 풀어봤다. (유용해 보이지는 않는다)
list 형태로 되어있는 'country' column을 기준으로 row를 분리해보자.
7번 index를 보면 row가 분리된 것을 확인할 수 있다.
더 자세히 살펴보자.
각 연령대별로 국가의 개수를 count하고 이를 표 형태로 살펴보자.
'.groupby('age_group')' 연령대로 그룹핑을 하고, '['country'].value_counts()' 국가의 개수를 센 뒤, '.unstack()'를 통해 세로로 정리된 데이터를 가로 형태로 변환을 했다.
우리가 사용할 항목들만 선별해서 정리해보자.
결측치 값이 보인다. 0으로 채우자.
지금 보이는 값으로는 서로간의 값 비교를 하기가 쉽지 않다.
비율로 값들을 변경해보자.
'.sum(axis=0)'을 통해 각 열의 합을 계산함 → 국가별 sum() 값을 구함
'.div(..., axis=1)'을 통해 각 연령대듸 값들을 국가(column)의 총합으로 나누어 비율을 계산
지금까지 진행한 내용을 가지고 히트맵을 그려보자.
위 그래프를 보고 얻을 수 있는 인사트는 다음과 같다고 한다.
"United States/Canada는 모든 나이 그룹에서 골고루 이용자를 가지고 있기에 넷플릭스가 다양한 연령층에 걸쳐 널리 사용되고 있음을 나타내고 있다. 그리고 모든 국가에서 성인 이용자가 가장 많은데, 이는 넷플릭스의 콘텐츠가 성인들의 관심사와 취향을 충족시키는 데 중점을 두고 있다는 것을 보여준다. 성인층의 높은 비율은 넷플릭스의 다양한 장르와 깊이 있는 콘텐츠가 성인 이용자들에게 특히 매력적임을 시사한다. 한편 India/Japan은 Older Kids의 비율이 꽤 높은데 이는 해당 국가들에서 넷플릭스가 어린이와 가족 단위의 콘텐츠를 많이 제공하고 있음을 나타낸다. 이러한 결과는 각국의 문화적 특성과 콘텐츠 선호도가 넷플릭스 이용 패턴에 영향을 미친다는 것을 시사한다. 이러한 분석을 통해 넷플릭스는 각 국가별로 이용자의 연령대에 맞춘 컨텐츠와 교육적인 프로그램을 강화할 수 있으며, 성인 비율이 높은 국가에서는 성인 대상의 드라마/영화/다큐멘터리 등을 더욱 강조할 수 있다."