def make_dataframe(txt_path):
name = []
size = []
country = []
file_name = []
breeds = []
life = []
with open(txt_path, encoding='utf8') as txt:
lines = txt.read().splitlines()
for line in lines:
split_line = line.split(' ')
for i, j in enumerate(split_line):
if i == 0:
name.append(j)
elif i == 1:
size.append(j)
elif i == 2:
country.append(j)
elif i == 3:
file_name.append(j)
elif i == 4:
breeds.append(j)
elif i == 5:
life.append(j)
dic = {'name': name, 'size': size, 'country': country, 'file_name': file_name, 'breeds': breeds, 'life': life}
df = pd.DataFrame(dic)
return df
텍스트를 참조하여 데이터프레임을 만드는 함수
def sort_and_show(df, sort_by):
# 형태가 문자열로 된 숫자를 숫자형으로 형변환 (정렬을 올바르게 하기 위해)
if sort_by != 'name':
df[sort_by] = pd.to_numeric(df[sort_by])
df = df.sort_values(by=[sort_by])
file_name_list = df['file_name']
sort_by_list = list(df[sort_by])
frame_h_list = []
temp_list = []
for index, file_name in enumerate(file_name_list):
frame = cv2.imread(f"dogs/{file_name}")
if sort_by != 'name':
cv2.putText(frame, f"{index + 1}. {sort_by}: {sort_by_list[index]}", (0, 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 0), 2)
else:
cv2.putText(frame, f"{index + 1}.", (0, 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 0), 2)
temp_list.append(frame)
if index % 4 == 3:
frame_h = cv2.hconcat(temp_list)
frame_h_list.append(frame_h)
temp_list.clear()
frame_t = cv2.vconcat(frame_h_list)
cv2.imshow(f"sorted_by_{sort_by}", frame_t)
cv2.waitKey(0)
cv2.destroyAllWindows()
데이터프레임과 정렬 기준이 되는 속성(name, size, life)을 입력받아 데이터프레임을 정렬하고 그림으로 출력하는 함수
def sort_and_show_2(df, sort_by):
column_list = df[sort_by].drop_duplicates()
frame_h_list = []
for column in column_list:
file_name_list = list(df[df[sort_by] == column]['file_name'])
temp_list = []
for file_name in file_name_list:
frame = cv2.imread(f"dogs/{file_name}")
temp_list.append(frame)
frame_h = cv2.hconcat(temp_list)
cv2.putText(frame_h, f"{sort_by}: {column}", (0, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 0), 2)
frame_h_list.append(frame_h)
for index, frame_h in enumerate(frame_h_list):
cv2.imshow(f"sorted_by_{sort_by}_{index}", frame_h)
cv2.waitKey(0)
cv2.destroyAllWindows()
데이터프레임과 정렬 기준이 되는 속성(country, breeds)을 입력받아 데이터프레임을 정렬하고 그림으로 출력하는 함수
txt_path = "E:/승이/2-2/데이터시각화/강아지.txt"
sort_and_show_2(make_dataframe(txt_path), 'country') # Location
sort_and_show(make_dataframe(txt_path), 'name') # Alphabet
sort_and_show(make_dataframe(txt_path), 'life') # Time
sort_and_show_2(make_dataframe(txt_path), 'breeds') # Category
sort_and_show(make_dataframe(txt_path), 'size') # Hierarchy
'파이썬' 카테고리의 다른 글
[파이썬] 멀티 쓰레드 정리 (0) | 2021.03.31 |
---|---|
[파이썬] doc2vec 모델 학습, 저장 및 불러오기 (0) | 2020.11.24 |
[파이썬] 특수문자 비교 관련 (0) | 2020.09.11 |
[파이썬] OpenCV, OpenPose를 이용하여 사진 속 인물의 자세 추정 - Experimental Model 추가 (1) | 2020.08.14 |
[파이썬] OpenCV, YOLOv4, OpenPose를 이용하여 사진 속 객체 탐지 및 인물의 자세 추정 (1) | 2020.08.05 |