본문 바로가기

전체 글

중첩된 JSON을 엑셀에서 열리는 CSV로, 배열까지 한 줄씩 펼쳐 변환하기 API에서 받아 온 JSON을 엑셀로 열어 보려고 CSV로 바꿨더니,한 칸 안에 {'name': '김민수', 'grade': 'gold'} 같은 덩어리가통째로 들어가 버린 적이 있습니다. 표로 정리하려던 데이터가 오히려 더 읽기 어려워집니다. 원인은 JSON이 값 안에 또 다른 값을 품는 중첩 구조를 갖는 반면,CSV는 행과 열이 반듯한 평평한 표만 담을 수 있다는 데 있습니다.그래서 변환하려면 중첩을 먼저 펼쳐 줘야 합니다.실제 데이터로 단계별로 해 보겠습니다.다룰 데이터부터 보겠습니다주문 정보를 담은 JSON입니다.고객 정보는 객체 안에 들어 있고(customer),주문 항목은 여러 개라 배열로 묶여 있습니다(items). 실무에서 흔히 만나는 모양입니다.[ { "order_id": 1001,.. 더보기
Parquet 저장할 때 compression만 바꿨을 뿐인데 용량이 갈립니다, 코덱 3종 실측 비교 데이터를 Parquet로 저장하다 보면 compression 옵션에 snappy, gzip, zstd 같은 낯선 이름이 등장합니다.아무거나 골라도 열리기는 하니 대충 넘기기 쉽지만,이 한 줄이 파일 크기와 저장 속도를 꽤 크게 바꿔 놓습니다. 그래서 같은 데이터를 코덱만 바꿔 가며 실제로 저장해 크기와 시간을 재 봤습니다.결론부터 말하면 무조건 가장 작은 코덱이 정답은 아니었습니다. 30만 행을 코덱 네 가지로 저장해 봤습니다회원 명단 형태의 표 데이터 30만 행(컬럼 9개: id, name, age, city, category, status, amount, score, joined)을 만들고,같은 데이터를 코덱만 바꿔 저장했습니다.측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarr.. 더보기
CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 이름과 주소가 잘 정리돼 있던 CSV를 프로그램으로 읽었더니,주소 한 칸이 두 칸으로 쪼개지면서 그 뒤 금액까지 줄줄이 옆으로 밀려 버리는 경우가 있습니다.데이터는 멀쩡한데 표만 어긋난 것처럼 보입니다. 범인은 대개 값 안에 들어간 쉼표입니다. CSV는 쉼표로 칸을 나누는 형식이라,주소나 회사명처럼 값 자체에 쉼표가 들어 있으면그 지점에서 칸이 하나 더 생겨 버립니다. 실제로 재현하고 바로잡아 보겠습니다. 이런 데이터에서 문제가 생깁니다id, name, address, amount 네 칸짜리 CSV를 예로 들겠습니다.그런데 주소 값 안에 상세 번지를 쉼표로 붙여 놓았습니다.id,name,address,amount1,김민수,서울시 강남구 역삼동, 123-4,500002,이서연,부산시 해운대구 우동, 5-6.. 더보기
수백만 행 CSV를 pandas로 읽는 게 느릴 때, 읽기 속도를 끌어올리는 방법 수십 메가바이트가 넘는 CSV를 pd.read_csv로 불러올 때마다몇 초씩 기다리게 되면, 분석을 반복할수록 그 시간이 쌓입니다. 그런데 같은 파일이라도 읽는 방법을 조금만 바꾸면 훨씬 빨라집니다.무엇을 바꾸면 얼마나 빨라지는지 실제로 재 봤습니다.100만 행 CSV로 방법을 비교했습니다id, 도시, 금액 등 6개 열에 100만 행,약 40MB짜리 CSV를 만들어 네 가지 방법으로 읽어 시간을 쟀습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarrow입니다.각 방법을 여러 번 실행해 가장 빠른 값을 적었습니다.읽는 방법시간기본 대비기본 read_csv1.01초기준dtype 지정0.85초1.2배 빠름usecols로 필요한 3열만0.71초1.4배 빠름engine="pyarrow.. 더보기
사진 용량 줄일 때 해상도를 줄일까 화질을 낮출까, 무엇이 더 효율적인지 실측 사진 용량을 줄이는 방법은 크게 두 갈래입니다.하나는 가로세로 크기(해상도)를 줄이는 것이고,다른 하나는 크기는 그대로 두고 화질(quality)을 낮추는 것입니다. 둘 다 파일을 가볍게 만들지만,결과물의 성격은 꽤 다릅니다.어느 쪽이 더 많이 줄어드는지, 그리고 언제 무엇을 골라야 하는지 궁금해서 같은 사진 한 장으로 두 방법을 각각 적용해 용량을 재 봤습니다. 3000x2000 사진 한 장으로 실험했습니다가로 3000, 세로 2000, 약 600만 화소짜리 사진(스마트폰 사진과 비슷한 크기)을 원본으로 두고, 두 방식을 따로따로 적용했습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, 이미지 라이브러리 Pillow입니다.먼저 화질만 단계별로 낮춘 결과입니다. 크기(3000x2000)는 그대로 두.. 더보기
ZIP 압축을 풀었더니 파일명이 ║╕░φ╝¡ 처럼 깨질 때, 원인과 해결 받은 압축 파일을 풀었더니 안에 든 한글 파일명이 ║╕░φ╝¡.txt 같은 외계어나 물음표(???)로 바뀌어 있는 경우가 있습니다. 정작 파일을 열면 내용은 멀쩡한데 이름만 알아볼 수 없습니다.파일이 망가진 것이 아닙니다. ZIP이 파일명을 저장하는 방식과, 압축을 푸는 프로그램이 그 이름을 읽는 방식이 어긋났을 뿐입니다. 윈도우 11과 파이썬 3.14.3 표준 라이브러리 zipfile로 직접 만들어 확인한 결과를 근거로 풀어 보겠습니다. ZIP은 파일명을 어떻게 저장하나ZIP 안에는 각 파일의 이름이 바이트로 적혀 있고, "이 이름이 어떤 인코딩이냐"를 알려 주는 작은 표식이 따로 있습니다. ZIP 규격에서 이 표식은 일반 목적 플래그의 11번째 비트, 값으로는 0x800입니다.이 비트가 켜져 있으면 .. 더보기
같은 사진을 WebP, AVIF, JPG로 저장하면 용량이 얼마나 차이 날까 (직접 측정 후기) 웹에 사진을 올릴 때 형식 하나만 바꿔도 용량이 크게 줄어든다는 말을 자주 듣습니다. WebP가 좋다, 이제는 AVIF다, 하는 이야기 속에서 정작 "내 사진은 얼마나 줄어드는가"는 손에 잡히지 않습니다.그래서 같은 이미지 한 장을 JPG, WebP, AVIF로 똑같이 저장해 파일 크기를 직접 재 봤습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, 이미지 라이브러리 Pillow 12.2.0입니다. 결과는 흥미로웠고, 동시에 "이 숫자를 그대로 믿으면 안 되는 이유"도 함께 드러났습니다. 측정 방법부터실제 사진과 비슷하게, 색이 부드럽게 번지는 1280x853 그라데이션 이미지를 만들고 약한 노이즈를 섞은 뒤 살짝 흐림을 줬습니다. 이 한 장을 세 형식으로 같은 품질값(quality) 70, 80,.. 더보기
같은 폴더를 ZIP, 7Z, TAR.GZ로 압축하면 용량이 얼마나 다를까, 3종 직접 측정 파일 여러 개를 하나로 묶어 보낼 때 ZIP으로 할지 7Z로 할지, 아니면 개발자들이 자주 쓰는 TAR.GZ로 할지 고민한 적이 있을 것입니다. 다들 "7Z가 더 작다"고 하는데, 정말 그런지, 차이가 얼마나 나는지는 막상 숫자로 보기 어렵습니다.그래서 성격이 다른 파일을 한 폴더에 모아 세 형식으로 직접 압축해 봤습니다. 결과부터 말하면 7Z가 가장 작긴 했지만, 차이는 파일 종류에 따라 크게 흔들렸습니다. 일부러 성격이 다른 파일을 섞었습니다압축률은 묶는 파일이 무엇이냐에 따라 천차만별입니다. 그래서 한쪽으로 치우치지 않게, 잘 줄어드는 파일과 거의 안 줄어드는 파일을 일부러 함께 담았습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3이며 ZIP은 표준 라이브러리 zipfile, TAR.GZ는 t.. 더보기