본문 바로가기
Data Science/Data Science

[Data Science] 데이터 형변환

by m2162003 2021. 1. 17.

1. 딕셔너리

 

딕셔너리는 key와 value로 이루어진 자료구조이다.

한 번 선언한 key는 변경이 불가능하다.

 

선언하는 방법은 리스트와 달리 중괄호{} 이다.

id_pass = ("hello", "pw123")
accounts = {
	id_pass: ('hello', ...),
}
# {(id, 비밀번호): 계정정보 }

 

딕셔너리에 값을 집어넣는 방법은 단순하다. dic[key] = val하면 값이 생긴다.

 user_to_titles = {}
    with open(filename) as file:
        for line in file:
            user, title = line.strip().split(':') #strip은 앞 뒤 공백을 제거해주는 함수
            user_to_titles[user] = title # 딕셔너리에 값 추가

 

 

딕셔너리를 순회하기 위한 방법은 다음과 같다.

for id, password in accounts.items():
	print(id + "-" password)

 

딕셔너리 안에 키가 있는지 확인하는 방법은 다음과 같다.

 accounts = {
 	"kdhong": "Killdong Hong",
}

print("kdhong" in accounts) # True
print("elice" in accounts) # False

 

2. JSON

API 개발하면 매번 쓰는 바로 그 JSON이다. 매번 loads인지 dumps인지 헷갈렸는데 이번 기회에 확실히 배워보도록 하자.

파이썬의 딕셔너리와 json 형태는 유사하여 쉽게 형변환이 가능하다. 기억해야 할 점은 JSON은 기본적으로 문자열이라는 것이다. 

 

loads() 

: JSON 형태의 문자열을 딕셔너리로 변환합니다. 이 때 딕셔너리의 모든 원소는 문자열 타입으로 설정됩니다.

 

dumps()

: 딕셔너리를 JSON 형태의 문자열로 변환합니다.

 

# 파일을 읽어서 딕셔너리 형태로 바꾸는 예시
with open(filename) as file:
        json_string = file.read() # JSON형태의 파일을 읽는다.
        data = json.loads(json_string) # 딕셔너리로 변환한다.
        return data

 

# JSON 파일을 읽고 딕셔너리를 JSON 형태의 문자열로 변환
def create_json(dictionary, filename):
    with open(filename, 'w') as file:
        file.write(json.dumps(dictionary))

 

3. 집합

집합은 수학에서 배웠던 집합 생각하면 된다. 중복이 없고 순서가 없는 것이 특징이다.

집합을 선언하는 법은 간단하다.

my_set = set([1,2,3]) # 집합 선언1
my_set2 = {1,2,3,4} # 집합 선언2

s1 = my_set.copy() # 셋을 복사

my_set.add(7) # 셋에 원소를 추가

new_numbers = [1, 2, 3, 4, 5]
my_set.update(new_numbers) # 리스트의 원소를 my_set에 추가

# my_set에서 짝수를 모두 제거
my_set = {num for num in my_set if num%2 == 1}

print(6 in my_set) # 원소 유무를 확인하는 방법은 딕셔너리와 동일하다.

 

집합이므로 합집합 |, 차집합 -, 교집합 & 구하기도 가능하다.

 

4. matplotlib

 

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

from elice_utils import EliceUtils
elice_utils = EliceUtils()

# 날짜 별 온도 데이터를 세팅합니다.
dates = ["1월 {}일".format(day) for day in range(1, 32)]
temperatures = list(range(1, 32))

# 막대 그래프의 막대 위치를 결정하는 pos를 선언합니다.
pos = range(len(dates))

# 한국어를 보기 좋게 표시할 수 있도록 폰트를 설정합니다.
font = fm.FontProperties(fname='./NanumBarunGothic.ttf')

# 막대의 높이가 빈도의 값이 되도록 설정합니다.
plt.bar(pos, temperatures, align='center')

# 각 막대에 해당되는 단어를 입력합니다.
plt.xticks(pos, dates, rotation='vertical', fontproperties=font)

# 그래프의 제목을 설정합니다.
plt.title('1월 중 기온 변화', fontproperties=font)

# Y축에 설명을 추가합니다.
plt.ylabel('온도', fontproperties=font)

# 단어가 잘리지 않도록 여백을 조정합니다.
plt.tight_layout()

# 그래프를 표시합니다.
plt.savefig('graph.png')
elice_utils.send_image('graph.png')

 

실행결과

 

댓글