본문 바로가기

파이썬

(19)
나의 파이썬 환경 구축기 1 - 써본 것들에 대한 생각 언젠간 한 번쯤은 나의 파이썬 개발 환경에 대해 글을 쓰려했었다. anaconda, virtualenv, pyenv 등등 지금까지 이것저것 다 써본 뒤... 이제 때가 왔다. 이번 글에서 내 맥북에 내가 어떻게 파이썬 개발 환경을 만들었는지 차례대로 적어볼 것이다. 다음과 같은 분들에게 이 글이 흥미가 있지 않을까 싶다. 주로 파이썬으로 개발하는 개발자 (분석가 아니다.) 파이썬 버전에 민감하게 반응하시는 분 (특히 새로운 파이썬 버전을 적극적으로 사용하려고 허시는 분) 깔끔하고 트렌디하게 파이썬 개발 환경 구축하고 싶은 분 거두절미하고, 이 글의 결론은 다음과 같다. 파이썬 버전 관리는 pyenv로, 가상 환경, 패키지 설치 및 관리는 poetry로 하자. 아, 난 맥을 쓰므로 맥을 쓴다는 것을 전제로..
[지도 데이터 시각화] Part 4. Folium 살펴보기 첫 번째로 살펴볼 시각화 패키지는 Folium 입니다. leaflet.js 기반으로 지도를 그려주고, 모바일에서도 쓸 수 있을만큼 가볍습니다. 나온지도 다른 라이브러리들에 비해 상대적으로 오래된 패키지입닌다만, 그만큼 안정적입니다. 한편, 분석 프레임워크로 가장 많이쓰는 pandas 와 쉽게 연동되어 간편하게 시각화가 가능합니다. 파이썬에서 지도 시각화 하면 가장 유명한 패키지일지도 모르겠습니다. 자 그럼 시작해보겠습니다. 1. 설치 먼저 pip install 로 folium 을 설치하고 임포트해줍니다. pip install foliumimport folium folium.__version__ '0.9.0'2. 샘플 하나 해보기 https://python-visualization.githu..
[프로그래머스] 방문 길이 문제 방문 길이 (https://programmers.co.kr/learn/courses/30/lessons/49994) 풀이 1. 문제 조건 해석 문제도 직관적이고, 변수 조건도 무난, 아주 심플하다. 2. 알고리즘 U, L, D, R 을 하나씩 입력받으며, 그냥 순차적으로 트래킹하면 된다. visited 를 set 자료구조로 두어, 이미 지나간 길인지 아닌지 체크하면 된다. 주의해야할 점은, 트래킹에는 '단방향성' 이 존재하지만, 길 자체는 '양방향' 이라는 점이다. 3. 코드 def solution(dirs): dxs, dys = [-1, 0, 1, 0], [0, -1, 0, 1] d = {"U": 0, "L":1, "D":2, "R": 3} visited = set()..
[프로그래머스] 가장 먼 노드 문제 가장 먼 노드 (https://programmers.co.kr/learn/courses/30/lessons/49189?language=python3) 풀이 1. 문제조건 해석 먼저, 현재 노드로부터 가장 멀리 떨어진 노드와의 최단거리를 찾는다. 이 최단거리들 중, 가장 큰 값을 가지는 거리의 개수를 찾는 문제다. 2. 알고리즘 전형적인 BFS 문제다. 그냥 다 탐색하면서 거리를 잰 뒤, 마지막에 거리 중 가장 큰 거 개수 세면된다. 진짜 그냥 주어진대로 하면 됨. 3. 코드 from collections import defaultdict, deque def solution(n, edge): dists = {i:0 for i in range(1, n+1)} # 노드 1과 다른 노드들 사이의 거리를 담..
[프로그래머스] 야근 지수 문제 야근지수 (https://programmers.co.kr/learn/courses/30/lessons/12927) 풀이 1. 초기 접근 문제 조건 해석 n은 1,000,000 이하인 자연수입니다. -> 뭔가를 해도, O(n log n) 안으로 끝내야 한다. (for 효율성 테스트) 사실 문제자체는 엄청 간단하다. 직관적으로, 누가 봐도 정렬 후 가장 큰 값만 계속 1씩 빼야될 것 같은데, 문제는, 리스트 내 가장 큰 값을 n 번 루프동안 어떻게 계속해서 찾아낼 것인가다. 리스트로는 택도없다. 왜냐하면 반복문 돌 때마다 정렬할 것인가? 시간복잡도 루프 O(n) 내, 정렬에 O(n log n) 이 나온다. 따라서 불가능. 주목 해야할 것에만 주목하자. 리스트 내 '최대값' 만 필요하다는 ..
이제는 matplotlib 말고, Plotly 를 쓰자. 세련된 데이터 시각화 패키지, Plotly. matplotlib, seaborn 만 사용하다가, 최근에 훨씬 세련된 데이터 시각화 툴을 찾았습니다. plotly 인데, 웹 시각화 라이브러리인 d3.js 를 이용하여 보다 interactive 하게 그래프를 만들어줍니다. 그만큼, 굉장히 잘되어있고, 앞으로도 많이 발전할 라이브러리라는 생각이 듭니다. 예를 들어, 다음과 같은 그래프를 만들 수 있습니다. data = pd.Series(range(10)) data.iplot(kind='bar', title="제목", xTitle="x축", yTitle="y축") 코드만 봐도, matplotlib 보다 훨씬 간결함이 보입니다. 시각화 된 그래프 역시 훨씬 세련된게 느껴집니다. 또한, 우측 하단 Export to..
파이썬 정렬, 다중 조건으로 한 번에 하기. 파이썬으로 문제를 풀다보면, 여러 조건으로 소팅을 해야하는 경우가 있다. 일반적인 소팅은 다음과 같이 sorted() 혹은 .sort() 를 사용한다. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted() 를 찬찬히 살펴보면 다음과 같다. a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)] # 인자없이 그냥 sorted()만 쓰면, 리스트 아이템의 각 요소 순서대로 정렬을 한다. b = sorted(a) # b = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)] # key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다. c = sorted(a, key = lambd..
[BOJ] 14891. 톱니바퀴 문제 톱니바퀴 (https://www.acmicpc.net/problem/14891) 풀이 1. 초기 접근 문제조건 해석 각 스텝에 따라, 기존 자료구조의 값이 바뀌는데, 바뀌는게 연쇄적이다. 시뮬레이션 + DFS 문제다. 알고리즘 문제 조건에서, 많은걸 알려주는데, 일단 톱니바퀴를 리스트로 표현할 수 있음을 알 수 있다. 그리고 톱니바퀴의 회전은 리스트 요소들을 왼쪽 혹은 오른쪽으로 시프트하는 것임을 알 수 있다. deque 의 .rotate() 가 있다! 회전 조건은, 정해진 인덱스를 비교하면 된다. 코드 from collections import deque from sys import setrecursionlimit setrecursionlimit(10**8) def dfs(no, di, visit..