파이썬을 활용한 JSON 파일 입출력 예제 with faker
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
개요
- JSON은 (JavaScript Object Notataion)의 약자이며, 주로 API 호출 시에 사용한다.
- JSON 데이터를 개별적인 파일 형태로 저장하기도 한다.
- json 라이브러리를 활용하여 입출력을 진행하고, pandas 라이브러리를 통해서도 직접 불러오도록 한다.
JSON 파일 쓰기 전체 코드
- 파일은
wirtejson.py
형태로 저장한다.
from faker import Faker
import json
output=open('data.json','w')
fake=Faker()
all_df={}
all_df['records']=[]
for x in range(1000):
data={"name":fake.name(),
"age":fake.random_int(min=18, max=80, step=1),
"street":fake.street_address(),
"city":fake.city(),
"state":fake.state(),
"zip":fake.zipcode(),
"lng":float(fake.longitude()),
"lat":float(fake.latitude())}
all_df['records'].append(data)
json.dump(all_df,output)
faker
라이브러리 설명은 파이썬을 활용한 파일 입출력 예제 with faker 에서 확인한다.all_df
는 빈(empty) 딕셔너리 형태로 저장한다.all_df["records"]
라는 이름의 key 값에 각 레코드들의 배열을 담도록 하였다.json.dump
로 표현하도록 한다.- 이제 파일을 실행하여 json을 내보낸뒤 결과물을 확인하도록 한다.
(venv) $ python3 ch01_writejson.py
(venv) $ ls
... data.json
data.json
파일을 열어서 확인하면 아래와 같이 깔끔하게 정렬된 json 데이터를 확인할 수 있을 것이다.
JSON 파일 불러오기
- 이번에는
json
파일을 불러오도록 한다. with open()
형태로 불러오는 것과pandas
로 불러오는 경우 2가지로 살펴본다.- 먼저 첫번째 경우를 살펴본다.
import json
# export
with open("data.json","r") as f:
data=json.load(f)
print("with open:", type(data))
print("with open:", data['records'][0]['name'])
- 결과는 다음과 같다.
with open: <class 'dict'>
with open: Monica Walters
- 이번에는
pandas
라이브러리를 통해서 불러오도록 해본다.
import pandas.io.json as pd_JSON
import pandas as pd
# case 2
f = open('data.json', 'r')
data = pd_JSON.loads(f.read())
df = pd.json_normalize(data, record_path="records")
print(df.head(5))
name age street city state zip lng lat
0 Monica Walters 29 479 Daniels Villages Madisonport Florida 01729 -133.452379 -84.851045
1 Jennifer Hall 54 264 Cunningham Vista Estesview Mississippi 06938 88.203101 60.552152
2 Stacey Washington 36 8881 Stacy Crossing Port Susan Alaska 72777 94.239254 76.287432
3 Raven Porter 30 6527 Brown Unions Suite 973 Lake Tinamouth New Mexico 69288 -82.938720 74.397527
4 Yvette Wilkerson 57 665 Brandon Throughway Apt. 559 North Steven North Dakota 62647 -77.378974 -49.583430
pandas 데이터프레임에서 json으로의 변환
- 이 때에는
to_json()
형태로 변환한다. - orient를 지정하기전과 한 후의 결괏값 차이가 어떻게 다른지 확인해본다.
print("----Default TO_JSON----")
print("Default of to_json():", df.head(2).to_json())
print("----Orient TO_JSON----")
print("set orient param of to_json():", df.head(2).to_json(orient="records"))
----Default TO_JSON----
Default of to_json(): {"name":{"0":"Monica Walters","1":"Jennifer Hall"},"age":{"0":29,"1":54},"street":{"0":"479 Daniels Villages","1":"264 Cunningham Vista"},"city":{"0":"Madisonport","1":"Estesview"},"state":{"0":"Florida","1":"Mississippi"},"zip":{"0":"01729","1":"06938"},"lng":{"0":-133.452379,"1":88.203101},"lat":{"0":-84.851045,"1":60.5521525}}
----Orient TO_JSON----
set orient param of to_json(): [{"name":"Monica Walters","age":29,"street":"479 Daniels Villages","city":"Madisonport","state":"Florida","zip":"01729","lng":-133.452379,"lat":-84.851045},{"name":"Jennifer Hall","age":54,"street":"264 Cunningham Vista","city":"Estesview","state":"Mississippi","zip":"06938","lng":88.203101,"lat":60.5521525}]
References
- Data Engineering with Python by Paul Crickard, https://www.packtpub.com/product/data-engineering-with-python/9781839214189