셀레니움으로 크롬 드라이브를 켜보면 아래와 같이 한글이 무지막지하게 깨지는 걸 볼 수 있습니다.(쿠팡에 아무거나 들어가봤습니다) 원인은 리눅스에 한글팩이 없는 것! 한글팩을 설치해주어야 합니다. 물론 한글 설정도 해야하고요. 우분투 리눅스 한글 언어팩 설치 한글 언어팩 설치 한글 언어팩을 설치합니다. sudo apt-get install language-pack-ko 만약 unable to locate package 오류가 뜬다면 다음 포스팅을 참고해주시기 바랍니다. [우분투] unable to locate package 해결방법 locale-gen을 통해 Locale 언어 설정 sudo locale-gen ko_KR.UTF-8 한글로 설정 dpkg-reconfigure 에서 ko_KR.UTF-8 UTF..
파이썬을 이용하여 파일을 처리할 때 가장 기본적인 작업은 파일의 경로를 확인하고, 변경하는 것입니다. 또한 파일의 이름을 변경하는 것도 자주 사용되는 작업 중 하나입니다. 이번 포스팅에서는 이러한 기본적인 파일 처리에 대해서 총정리해보도록 하겠습니다. 파일 경로 확인하기 파일 경로는 파일이 저장된 디렉토리 경로와 파일 이 름을 합친 것입니다. 파이썬에서는 os 모듈을 이용하여 파일 경로를 확인할 수 있습니다. 현재 디렉토리의 파일 리스트를 출력하는 코드를 작성해보겠습니다. import os dir_path = os.getcwd() file_list = os.listdir(dir_path) print(dir_path) print(file_list) os 모듈의 getcwd() 함수는 현재 작업 중인 디렉토..
요즘 알고리즘 공부를 하고 있는데 어찌나 귀찮은지 게으른 생활이 계속되는 것 같습니다. 심심풀이로chatGPT에게 알고리즘 공부를 하는 이유를 물어보았습니다. \ 알고리즘 공부를 해야하는 이유는 무엇인가요? 한글로 해봤더니 확실히 느리고 쓰다 마네요. 타임제한이 있는 것 같습니다. 두번이나 continue를 했습니다. chatgpt는 여러가지 이유가 있지만 큰 맥락은 프로그래밍 스킬향상과 문제해결 능력 향상된다. 문제를 정의하는 기술이 생긴다는 얘기가 주였던 것 같습니다. 알고리즘 공부 하는 방법을 3가지로 요약해주세요 chatgpt에게 알고리즘 공부방법을 3가지로 얘기해달라고 했더니 다음과 같이 3가지로 얘기했습니다. 1. 연습 반복 2.책이나 강의를 통해서 배운다. 3.다른 사람과 협업하고 프로젝트 ..
ipynb를 py로 바꾸는 방법입니다. ipynb를 아무리 잘 정리한다해도 자동화를 하려면 결국 py로 바꾸어야 합니다. ipynb와 py를 동시에 만드는 툴이 있었던 것 같은데 기억이 안나네요. 일단은 ipynb 에서 py로 변환하는 툴을 당장 써야할 것 같습니다. ipynb to py 변환툴 설치 ipynb를 py 로 바꾸는 방법은 nbconvert라는모듈을 사용하면 됩니다. 참고로 코드작업은 터미널에서 일어납니다. 경로가 복잡하면 cmd에서 폴더 찾아다니면 할일이 늘어나니 쥬피터 안에서 하는 걸 추천합니다. 쥬피터 안에서 하려면 코드 앞에 !를 쓰고 작업하면 할 수 있습니다. pip install nbconvert ipynb to py 변환 방법 변환방법은 간단합니다. jupyter nbconver..
pct_change의 업그레이드 판입니다. 특정 기간동안의 증가율을 계산하고 싶거나 수치가 필요할 때 rolling apply이 유용합니다. pct_change는 바로 위아래의 값만 퍼센트(백분율)로 나와서 내 맘대로 못하는 단점이 있는데 상황이 여러가지가 있고 백분율이 아닌 수치로 바꿀려면 다시 계산을 해야하는 번거로움이 있습니다. 그리고 위 아래의 증가율만 따지기 때문에 며칠 후의 것들의 증가율을 하려고 한다면 필터를 적용한 후 pct_change를 써야하는 번거로움이 있는데요. 이런 불편함을 확실히 없앨 수 있는 방법으로 rolling apply를 써보는 게 어떨까 싶습니다. 일단 apply는 lambda 기법으로 간단한 함수를 만드는 방법이므로 당연히 커스텀마이징이 가능합니다.다시말하면, 퍼센트나..
선택정렬이란? 선택정렬은 아주 단순한 정렬 알고리즘입니다. 최소값을 찾은 후 맨 앞에 데이터와 교체하는 것을 반복하는 방법입니다. 당연히 정리가 끝난 인덱스 이후로 반복해야합니다. 다시 처음부터 하면 안됩니다. 내가 최소값을 선택한 후 그걸 맨 앞으로 끌어오는 작업만 하면 됩니다. 그래서 선택정렬이라고 하는게 아닌가 싶습니다. 출처: https://en.wikipedia.org/wiki/Selection_sort 알고리즘 구현 선택정렬은 최소값을 선택하고 지정한 리스트의 앞의 값이랑 비교를 해야합니다. 맨 앞에 있는 값과 최소값을 비교해 작으면 바꿉니다(swipping) 예를 들어, 데이터가 3개 [16,3,8]라면 처음 한 번 실행할때 [16,3,8]의 최소값인 3과 맨 앞값인 16을 앞으로 넣습니다...
파이썬 리스트에서 최대 최소값 찾는 방법입니다. 이게 왠지 리스트의 메쏘드로 있을 것 같은데 없더라고요. 리스트의 메쏘드가 아닌 파이썬 내장 함수인 min,max를 활용합니다. 리스트에서 최소값 찾기 min 함수로 리스트의 최소값을 찾습니다. data = [1,3,5,7,9] min(data) 리스트에서 최대값 찾기 max 함수로 최대값을 구합니다. data = [1,3,5,7,9] max(data)
요즘 알고리즘을 공부중인데 로직만으로는 뭔가 답답하네요 ㅜ 알고리즘 진행을 눈으로 보고 싶다는 생각이 굴뚝 같습니다. 그래서 구글링을 해봤더니 있었습니다. 정렬 알고리즘만 확인할 수 있지만 그래도 눈으로 확인할 수 있어서 속이 시원합니다. 물론 위키백과에서 정렬 알고리즘 치면 그림으로 나오긴 하는데 하나씩 봐야하는 단점이 있어서 제가 찾는 건 아니었습니다. 저는 한꺼번에 알고리즘을 보면서 비교해보고 싶었습니다. visualgo 으로 가면 알고리즘 진행과정을 확인할 수가 있습니다. 사이트 바로가기 : https://visualgo.net/en/sorting?slide=6-8 Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - Vi..
알고리즘 이론의 정렬에 대한 내용입니다. 프로그램 작성시 정렬을 세우는 건 아주 중요하고 빈번한 일입니다. 간단한 프로그램을 만들 때는 파이썬 내장 함수로 정렬이 가능하니 큰 필요성을 못 느낄 수 있는데 큰 프로그램을 만들거나 새로운 문제가 나타날 때 정렬 알고리즘을 알고 있지 않으면 역량부족으로 한참 해맬 수도 있습니다. 정렬 알고리즘은 알고리즘 파트 중에서 쉬운 편에 속해서 기초로 알고리즘이라는 분야를 입문하기 좋은 파트이므로 시간을 내서 배워보시는 것을 추천드립니다. 이번 포스팅에서는 버블 정렬에 대해 소개하겠습니다. 버블정렬 정렬은 데이터가 있을 때 이를 정해진 순서대로 나열하는 것을 의미합니다. 손으로 쓰면 너무 쉽겠지만 컴퓨터는 그게 아니라서 알고리즘을 짜서 데이터를 정렬할 수 있게 해주어야 ..
파이썬의 패키지를 터미널에서 주로 확인했었습니다. 문제는 제가 원하는 패키지가 설치되었는지 확인하려면 일일히 스크롤을 올려가며 확인해야하는 불편함이 있습니다. 물론 텍스트로 저장해서 찾아보면 할 수 있지만 파일 하나만들고 메모장 켜고 하는 시간을 줄일까 합니다. 파이썬에서 패키지 찾기 파이썬 내에서 패키지를 찾는 작업을 할 수 있는데 pkg_resorces라는 모듈을 임포트해야합니다. import pkg_resources import pandas as pd pd.DataFrame(sorted([(i.key,i.version) for i in pkg_resources.working_set])) 컬럼 0은 패키지 이름이로 컬럼1은 패키지 버전을 의미합니다. 데이터프레임으로 만들어놓으면 찾기가 쉬워집니다. 예..
재귀용법이란? 함수 안에서 동일한 함수를 호출하는 방법으로 여러 곳에서 응용되니 익숙해져야 할 용법입니다. 재귀 호출의 동작방식은 함수 내부에서의 스택이라고 볼 수 있는데 함수의 결과값 위에 또 다른 결과값을 얹히는 방식으로 알고리즘이 진행됩니다. 그후에 맨 위에 값부터 리터하고 값을 넘겨줍니다. 얹는 과정을 Call function 결과값을 리턴하는 과정을 Returning values 라 했습니다. 실제 코드가 어떻게 돌아가는지 볼 수 있는 사이트가 있는데 아래 링크로 남겨놓겠습니다. 알고리즘의 진행순서가 어떻게 되는지 살펴보시기 바랍니다. https://pythontutor.com/visualize.html#mode=display 재귀용법의 제한 재귀용법을 무한정 쓸 수 있다면 반복문은 필요하지 않..
데이터 프레임의 데이터를 많이 다루는데 범주를 만들어야 하는 경우가 있습니다. 범주를 나누는 방법을 알려드립니다. 데이터 랜덤으로 만든 int와 float를 각각 컬럼으로 하고 데이터프레임을 예제로 하겠습니다. import pandas as pd import numpy as np import random df = pd.DataFrame({'int':random.sample(range(100),30),'float':np.random.randn(30)}) df 1. 동일길이로 나누기 데이터를 동일길이로 나눌려면 pd.cut()을 사용합니다. pd.cut()은 시리즈를 input값으로 해야합니다. 파라미터는 다음과 같습니다. pandas.cut(x, bins, right=True, labels=None, re..
해쉬테이블(HashTable)은 주어진 공간에서 값을 저장하게 되면 충돌이 일어나게 됩니다. 이를 처리하는 기법 2가지를 소개합니다. 사실 더 많은 방법이 있는데 어짜피 파이썬에서는 딕셔너리로 다 커버가 되기 때문에 연습용으로 보시면 좋을 것 같습니다. 아래 내용을 보시면 공간의 제약이 거의 없는 딕셔너리의 장점이 얼마나 큰지 느끼실 수 있을겁니다. 참고로 실제 딕셔너리처럼 key값을 잘 정리하지는 않았습니다. 해쉬테이블이 충돌하는 이유 데이터는 많은데 공간은 제약되어있다면 충돌이 일어날 수밖에 없습니다. 예를 들어, 데이터가 만약 9개가 있고 공간이 8개까지밖에 없다면 해쉬테이블의 원리상 무조건 1개 이상은 충돌이 일어날 수밖에 없습니다. 공간을 넓힐 수 있다면 최대한 넓히는 게 좋지만 현실세계는 메모..
파이썬에서는 딕셔너리로 이미 구현이 되어있는 해쉬테이블을 굳이 구현해보겠습니다. 개인적인 이해를 위한 글이니 재미있게(?) 봐주셨으면 합니다. 해쉬테이블(Hash table) 해쉬테이블은 키(Key)에 데이터(Value)를 저장하는 데이터 구조입니다. 나열의 구조인 스택이나 큐와는 다르게 Key를 통해 바로 데이터를 받아올 수 있습니다. 다루기 편하고 검색 속도가 엄청나게 빨라진다는 장점이 있습니다. 파이썬에서는 딕셔너리로 구현이 되어있고 다른 언어는 공간을 확보하고 해쉬테이블을 사용하지만 파이썬은 그럴 필요는 없습니다. 해쉬테이블은 Key-Value의 함수역할을 하는 해싱 함수를 통해 데이터를 반환하는 방식입니다. 즉, 해싱함수를 h라 할 때h(Key)=Value가 됩니다. 함수역할을 하긴 하지만 va..
시리즈(Series)를 데이터프레임(DataFrame)으로 바꾸는 방법입니다. 시리즈의 차원은 1차원이고 데이터프레임은 2차원입니다. 서로 차원이 다르기 때문에 사용방법이 약간 다릅니다. 보통 데이터프레임에 익숙하기 때문에 때로는 시리즈를 데이터프레임으로 바꾸는 게 편할 때가 있습니다. 시리즈 데이터프레임으로 바꾸기 보통 groupby를 통해 톻계값을 출력하게 되면 시리즈로 바뀝니다. 값이 하나로 되면 시리즈로 바뀌게 됩니다. 이를 데이터프레임으로 바꿀 수 있습니다. 예를 보면 다음과 같습니다. import pandas as pd df = pd.DataFrame({'A':[1,30,70],'B':[2,30,80],'C':[3,40,90]}) df = df.T display(df) 통계값을 구하면 시리즈로..