오억년만에 나타나서 처음 쓰는 글은 pd.read_csv할 때 utf-8, utf-16, 심지어는 cp949까지도 오류날 때 해결하는 방법이다.

 

 

[python] 파이썬 공공데이터 csv 파일 읽어오기_인코딩 에러 해결

회사에서 진행하는 데이터분석 아카데미 프로젝트 마감이 얼마 남지 않았다. 데이터 수집은 다했는데 전처리가 관건일듯.. 공공데이터 포털사이트에서 다운받은 cvs 파일을 pandas 모듈을 이용해

javagirl.tistory.com

 

위의 블로그가 엄청 큰 도움이 됐는데, 걍 결론적으로 엑셀 파일을 csv로 저장할 때 애초에 인코딩을 utf-8로 하는것이었다.

 

엑셀에서 엄청 긴 숫자를 입력하면 얘가 자동적으로 숫자로 인식해서 막 16e+06 이런식으로 지멋대로 숫자로 변환하는데 그게 싫어서 full 숫자로 저장하게 하려고 csv로 저장해서 python에서 불러오는 걸 하려고 했었다.

 

내가 현재 일하고 있는 회사에서는 이런식으로 숫자가 엄청 길게 기재되는 경우가 매우 빈번해서 이런 아주 간단한 부분을 확실히 알고 넘어가야 했다.

 

엑셀을 csv로 저장할 때 인코딩 오류로 열리지 않을 때는 애초에 엑셀에서 엑셀 메뉴 > 파일 > 다른이름으로 저장 > 파일형식 : csv utf8(쉼표로분리)로 저장 하면 된다.

 

멍청한 나는 for문에 너무 집착한 나머지 1시간 동안 머리를 싸매다가 결국 Discuss를 보고 말았다.

while문이 무한루프를 도는 경우가 싫어서 왠만해선 for문을 써왔었는데 최근 Leetcode 문제들을 풀어보면 while이 그렇게 나쁜것도 아니고, 오히려 굉장히 실용적이라는 느낌도 들었다. 코딩문제를 풀때 while도 많이 애용해 봐야겠다고 생각했다.

 

 

 

 

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        MAX = 0 
        x = len(height) - 1
        y = 0
        while x != y:
            if height[x] > height[y]:
                area = height[y] * (x - y)
                y += 1
            else:
                area = height[x] * (x - y)
                x -= 1
            MAX = max(MAX, area)
        return MAX

 

이걸 for문으로 하려면 아주 난리를 쳐야했는데 만들면서도 굉장히 잘못됐다고 느꼈었다ㅋㅋㅋㅋ,,, while... 애용합시다!

 

 

 

 

 

 

킹갓 tqdm을 아는가? 나만 몰랐던 이야기라면 그건 좀 아쉽군...

 

tqdm

 

파이썬 반복문 어디까지 진행되었는지 표시하기: tqdm 라이브러리

반복문을 돌리면 작업이 어디까지 진행된 건지, 되고는 있는 건지 궁금할 때가 많이 있습니다. 주피터 노트북 화면을 바라보며 반복문을 돌린 셀의 별표가 사라지길 계속 기다리기도 조금 답답

hogni.tistory.com

 

for문에 tqdm을 사용하면 이 친구가 언제 다 돌아가는지 확인할 수 있어서 매우 유용하다. 

 

import fitz, os
import pandas as pd
from tqdm import tqdm

path_dir = './'
file_list = os.listdir(path_dir)
# print(file_list) # 현재폴더(./) 안에 있는 파일명들이 리스트화되어 들어가 있다.

for data in tqdm(file_list) :
    if '.pdf' in data :
        doc = fitz.open('./{}'.format(data))
        page = doc.loadPage(0)
        pix = page.getPixmap()
        output = "../pdf2png/{}.png".format(data.replace('.pdf',''))
        pix.writePNG(output)

그럼 이런식으로 볼 수 있음

 

따봉 tqdm아 고마워!

 

 

 

pdf2image라는 모듈이 있으나 poppler에서 계속 오류가 났던 나는 차선책을 찾게 되었는데, 속도 면에서는 얼마나 차이가 나는지는 모르겠지만 일단 내가 PyMuPDF를 사용해 본 결론으로는 굉장히 느리다ㅋㅋ... 코드도 느릴만하긴하지만.. 그래도 PyMuPDF는 원하는 PDF 페이지만을 선택해서 이미지화 할 수도 있기 때문에 나름 유용하다.

 

사실 pdf 파일을 이미지로 바꾸기만 하면 되는거 아니겠어? pdf2image모듈을 못 사용하니 꿩 대신 닭을 사용했다.

 

PyMuPDF

 

pymupdf/PyMuPDF

Python bindings for MuPDF's rendering library. Contribute to pymupdf/PyMuPDF development by creating an account on GitHub.

github.com

pip install -U pymupdf 를 한 후,

 

요 이미지대로 수행하면 png 파일로 나온다.

 

이 방식으로 png 파일로 만들 수 있는데, 이 png 파일을 jpg 파일로 바꾸고 싶다면... Pillow를 사용해도 될거같고 사실 걍 저 확장자만 바꿔줘도 될거같기도 하고.. (그렇다 png를 jpg로 바꿔주면 또 그렇게 잘 됨 굿 ^^)

암튼! 다들 pdf2image에 고생하지 말고 나처럼 꿩대신 닭으로도 도움 얻길!

 

 

 

 

git 관련한 내용을 느낀점에 쓰는게 사실 아이러니하긴 하지만, 굳이 새롭게 git이라는 카테고리를 생성하기에는 내용이 너무 짧아서 그냥 여기에 올린다!

 

 

 

Git을 이용한 버전 관리 【Git의 기본】 | 누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하

Git을 이용한 버전 관리 【Git의 기본】 | 누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

 

여기 완전 유용하다... 다들 차례대로 따라하면 왠만하면 다 할 수 있을 것 같다.

우선 나같은 경우는 project를 새롭게 만드는게 아니라, 이미 있는 project에 branch를 새로 만들고 거기에 내가 수정한 코드들을 올리는 내용이었기 때문에 우선 그 과정에 대해 서술하도록 하겠다. 아무튼 구글링과 이 사이트라면 git은 그리 어렵지 않아!

 

 

기존의 프로젝트에서 내가 코드들을 수정한 폴더를 Project라고 하자.

이런식으로 있다는 소리

 

/Project$ 인 상태에서(Project 폴더에 들어와 있는 상태) 리눅스 환경에서 수정한 내용들을 새로운 branch에 업로드해보자.

/Project$ git init git을 쓰기 위한 준비, 새로운 저장소(repository) 만들어짐
/Project$ git add * Project 안에 있는 모든 정보(*)들을 git init에 업로드함
/Project$ git commit -m "first commit"

" " 안에 있는 내용들이 나옴

commit을 해야 정보가 init안에 들어가고 이걸 사용해서 branch를 만들 수 있음

/Project$ git branch issue#2020 issue#2020이라는 branch를 생성함
/Project$ git branch
           * master
             issue#2020
branch 종류를 알 수 있음
* 표시가 있는 부분은 현재 선택된 branch를 의미
/Project$ git checkout issue#2020 issue#2020으로 branch 변경
/Project$ git status

branch 위치를 보여주고
nothing to commit, working tree clean은
commit을 한번 한 이후 아무런 변경사항이 없음을 의미 (참고)

/Project$ git remote add origin https://github.com/~/Projectname.git

(여기서 주소는 clone할 때 사용했던 그 주소이다)

연결할 프로젝트 위치를 origin이라는 이름으로 만듦
(이름은 내 마음대로 변경 가능 origin아니고 dewy로 해도됨)
/Project$ git push origin issue#2020 연결할 프로젝트 위치를 알려주는 origin을 통해 issue#2020 branch를 업로드함

 

성공하면 github에 일케 나옴 야호!

 

그리고 추가적으로 여러개의 branch가 있는 github에서 특정 branch만 clone하는 방법은 여기를 참고하길 바란다.

큰 흐름에 대한 것을 다시 한번 remind하고 싶으면 여기를 참고하길 바란다.

 

 

'느낀점' 카테고리의 다른 글

1. 11월의 느낀점  (0) 2020.11.26

+ Recent posts