본문 바로가기

분류 전체보기

Parquet 파일 받았는데 더블클릭해도 안 열립니다, 파이썬과 비전공자용 방법까지 데이터 분석을 하는 동료에게 자료를 받았더니 확장자가 .parquet인 파일이 와 있습니다. 평소처럼 더블클릭했는데 열리는 프로그램이 없거나, 메모장으로 억지로 열면 깨진 기호만 잔뜩 나옵니다.파일이 망가진 것이 아닙니다. Parquet는 사람이 눈으로 읽으라고 만든 형식이 아니라, 프로그램이 빠르게 읽도록 압축해 둔 데이터 파일입니다. 그래서 여는 방법이 따로 있습니다. 코드로 여는 법과, 코딩을 모르는 분을 위한 방법을 차례로 보여 드리겠습니다. 왜 메모장으로는 안 보일까먼저 이 점부터 짚고 가면 나머지가 쉬워집니다. CSV는 글자를 그대로 적어 둔 텍스트 파일이라 메모장으로도 읽힙니다. Parquet는 다릅니다. 값을 열(컬럼) 단위로 모아 압축하고, 맨 앞과 맨 뒤에 표식을 붙인 바이너리(이진) .. 더보기
화질은 지키고 용량만 줄이기, 사진 한 장으로 두 방법을 실측해 봤습니다 이메일에 사진을 첨부하려는데 "첨부 용량 초과"가 뜨거나, 게시판에 올리려다 "한 장당 5MB까지"에 막히는 일이 자주 있습니다. 요즘 스마트폰 사진은 한 장이 5MB를 가볍게 넘기 때문입니다.사진을 다시 찍을 수는 없으니 이미 있는 파일의 용량만 줄여야 합니다. 용량을 줄이는 지렛대는 크게 둘입니다. 하나는 해상도 축소(가로세로 픽셀 수를 줄이기), 다른 하나는 저장 품질 낮추기(JPEG 압축률 조정)입니다. 이 둘이 각각 얼마나 효과가 있는지 사진 한 장으로 직접 재 보았습니다. 측정에 쓴 사진과 환경휴대폰 사진과 비슷하게, 가로 4000 세로 3000 픽셀(약 1,200만 화소)에 색이 부드럽게 변하는 그라데이션과 잡티(노이즈)를 섞은 테스트 이미지를 만들었습니다. 노이즈를 넣은 이유는 단색 이미지.. 더보기
확장자가 .jsonl인데 JSON이 깨진 게 아닙니다, JSON Lines(NDJSON) 정체와 일반 JSON과의 차이 데이터를 내려받았더니 확장자가 .jsonl이거나, 메모장으로 열어 보니 줄마다 중괄호로 시작하는 객체가 따로따로 적혀 있어 당황하는 경우가 있습니다. 평소 보던 JSON처럼 맨 앞에 대괄호 [가 없고, 객체 사이를 쉼표로 잇지도 않아서 깨진 파일로 오해하기 쉽습니다.이건 망가진 JSON이 아니라 JSON Lines라는 정상 형식입니다. NDJSON(Newline Delimited JSON)이라고도 부릅니다. 규칙은 단순합니다. 한 줄에 완결된 JSON 객체 하나를 넣고, 객체와 객체는 쉼표가 아니라 줄바꿈으로 구분합니다. 한 줄로 말하면일반 JSON 배열은 데이터를 하나의 큰 덩어리 [ {...}, {...} ]로 묶습니다. JSON Lines는 그 묶음을 풀어 객체마다 한 줄씩 세워 둔 것입니다. 그래.. 더보기
받은 JSON을 엑셀로 봐야 할 때, XLSX로 변환하는 가장 깔끔한 방법 API에서 내려받은 데이터나 동료가 보내 준 파일이 .json인데, 정작 검토는 엑셀로 해야 하는 상황이 자주 생깁니다. 메모장으로 열면 중괄호와 따옴표가 빽빽해서 어디가 한 행인지조차 가늠이 안 됩니다.JSON을 엑셀(XLSX)로 바꾸는 일 자체는 코드 몇 줄이면 끝납니다. 다만 JSON이 평평한 표 모양이냐, 값 안에 또 값이 들어 있는 중첩 구조냐에 따라 결과가 크게 갈립니다. 실제로 변환해서 어떤 엑셀이 만들어지는지 직접 보여 드리겠습니다. 변환에 쓴 환경아래 모든 결과는 직접 돌려서 나온 값입니다. 측정 환경은 윈도우 11, 파이썬 3.14.3이고, 라이브러리는 pandas 3.0.1과 엑셀 기록 엔진인 openpyxl 3.1.5를 썼습니다. 두 라이브러리는 한 번만 설치하면 됩니다.pip in.. 더보기
JSON "Expecting property name", "Expecting ',' delimiter" 오류, 증상별로 원인 찾고 고치기 JSON 파일을 읽히려는데 빨간 글씨로 이런 메시지가 뜬 적이 있을 것입니다.Expecting property name enclosed in double quotes: line 1 column 2 (char 1)Expecting ',' delimiter: line 1 column 15 (char 14)Illegal trailing comma before end of object: line 1 column 26 (char 25)웹에서는 흔히 "Unexpected token"으로, 파이썬에서는 위처럼 표시됩니다. 표현은 달라도 원인은 거의 정해져 있습니다. JSON은 문법이 까다로워서, 사람이 손으로 고치다 보면 쉼표 하나, 따옴표 하나에서 어긋나기 때문입니다.이 글은 자주 나오는 잘못된 JSON을 실제로 .. 더보기
CSV를 Parquet로 변환하기, 특별한 프로그램 없이 pandas 한 줄이면 됩니다 Parquet라는 이름을 처음 보면 전용 변환 프로그램이나 빅데이터 도구를 따로 깔아야 한다고 짐작하기 쉽습니다. 그래서 변환 자체를 어렵게 느끼고 미뤄 두는 경우가 많습니다.실제로는 파이썬의 pandas 라이브러리만 있으면 됩니다. CSV를 읽어 한 줄로 Parquet로 저장하면 끝이고, 별도 변환기는 필요 없습니다. 아래 단계를 그대로 따라 하면 한글이 섞인 CSV도 데이터 손실 없이 변환됩니다. 준비물부터 짧게변환에 쓰는 라이브러리는 두 개입니다. 표를 다루는 pandas, 그리고 Parquet 파일을 실제로 쓰고 읽는 엔진인 pyarrow입니다. 둘 다 한 번만 설치하면 됩니다.pip install pandas pyarrow이 글의 모든 수치는 윈도우 11, 파이썬 3.14.3, pandas 3... 더보기
같은 데이터를 CSV와 Parquet로 저장하면 용량과 읽기 속도가 얼마나 차이 날까 데이터 분석을 하다 보면 "그냥 CSV로 저장하면 되지, 왜 굳이 Parquet를 쓰지?"라는 의문이 들 때가 있습니다. 둘 다 표 형태 데이터를 담는 파일인데, 한쪽은 메모장으로도 열리고 한쪽은 그렇지도 않으니 더 그렇습니다.그렇다면 정확히 무엇이 다를까요. 용량은 얼마나 줄고, 읽는 속도는 얼마나 빨라질까요. 말로만 "Parquet가 효율적"이라고 하기보다, 같은 데이터를 두 형식으로 저장해 직접 재 봤습니다. 10만 행을 직접 만들어 두 형식으로 저장했습니다숫자 컬럼과 반복되는 문자 컬럼을 섞은 10만 행 데이터를 만들었습니다. 컬럼은 6개입니다. id(연번), amount(금액), score(점수), 그리고 도시, 등급, 부서처럼 같은 값이 계속 반복되는 범주형 문자 컬럼 3개입니다. 실제 업무 .. 더보기
CSV를 UTF-8로 저장하는 법, 엑셀과 메모장과 파이썬에서 각각 동료에게 받은 CSV를 웹 업로드 양식에 올렸더니 "UTF-8로 저장해서 다시 올려 주세요"라는 안내가 떴습니다. 분명 엑셀에서 멀쩡히 열리던 파일인데, 시스템이 요구하는 인코딩이 따로 있는 상황입니다.이럴 때 필요한 건 한 가지입니다. 파일을 UTF-8로 다시 저장하는 것. 도구마다 방법이 조금씩 다르고, 같은 UTF-8이라도 두 종류가 있어 헷갈리기 쉽습니다. 메모장, 엑셀, 파이썬 순으로 가장 빠른 길을 정리하고, 두 종류의 UTF-8 차이를 실제 바이트로 확인해 보겠습니다. 먼저 알아둘 것: UTF-8은 사실 두 종류입니다저장 옵션에서 흔히 보이는 이름이 UTF-8과 UTF-8 (BOM 포함)입니다. 둘의 실제 내용은 거의 같고, 차이는 파일 맨 앞에 붙는 3바이트짜리 표식 하나뿐입니다. 이 표식.. 더보기