이전에 다낭, 디즈니랜드, 홍콩 3군데의 여행이미지 분석을 해보았습니다.
휴양지에 가장 가까운 곳은 다낭(40점)이었는데요,
이번에는 각 여행이미지의 라벨들을 전부 추출해서 판다스 데이터프레임으로 저장하고 CSV파일로 만드는 것을 해보겠습니다.
전세계 여행이미지 50장을 가지고 분석을 해보죠.
지난 번 점수화했던 라벨들을 raw하게 출력했습니다.
보면 많은 key값들이 있는데 우리가 집중할 것은 라벨인 description과 유사한 정도인 score 2개입니다.
여행지,라벨_score딕셔너리, 라벨 길이 각각을 뽑아서 리스트화 하는 작업은 다음과 같습니다.
여행지 이름에 .jpg와 같은 확장자 제거 전처리를 해주었고, score에는 소수점 2자리에서 반올림하도록 전처리 해주었습니다.
이제 각각의 리스트들이 만들어졌네요. 이들을 출력해서 확인해보겠습니다.
여행지 50곳을 선정한 결과이므로, 여행지이름인 Alberobello1부터 시작해서 Venice1까지 place_list가 만들어졌고,
label_list의 길이는 50으로 나옵니다.
그리고 label_list에는 각각 딕셔너리로 처리된 여행지의 라벨들이 들어가 있습니다.
이 라벨들이 얼마나 있는지 확인하게 위해 len_list에는 라벨의 갯수를 넣어두었습니다. 이 라벨의 갯수가 길수록 이미지가 담고 있는 의미가 많다는 것이겠죠.
리스트들을 합쳐서 판다스 데이터프레임으로 모아보았습니다.
그런데 이 테이블 형식은 라벨들이 딕셔너리 형태로 들어가 있어서 여행지별 라벨을 확인하기가 힘듭니다. 그래서 라벨을 판다스 형태로 바꿔서 좀 더 가독성이 좋게 만들어 보겠습니다.
위에서처럼 pd.DataFrame.from_dict 함수를 사용하면 딕셔너리를 판다스 데이터프레임으로 바꿀 수 있습니다.
index는 이미지 50장이고, column에 라벨이 들어가 있습니다. 각각 score가 있는 것들은 값이 있고, 없는 것들은 NaN으로 표시되어 있습니다.
이 데이터프레임을 여행지 이름마다 label, score 형태로 변경해서 필터를 걸 수 있도록 해보겠습니다.
우선 빈 판다스 데이터프레임을 하나 만들어두고, 여기에 데이터를 차곡차곡 넣으면 됩니다.
for문이 돌아가는 시간을 확인하기 위해서 tqdm 라이브러리를 사용했습니다. 이번에는 50장으로 소단위여서 시간이 초단위로 진행되었지만, 만약 이미지 갯수가 몇백장으로 늘어나게 되면 라벨의 수도 같이 늘어나므로 시간이 훨씬 오래 걸리게 됩니다. 그 때 tqdm은 필수입니다.
비어있는 label_table의 각각의 위치를 iloc함수를 이용해서 지정하고 이중 for문으로 이를 반복시킵니다. 이로써 label_table에 데이터가 채워지게 되지만 결측치가 매우 많습니다. 마지막으로 결측치를 제거해줍니다.
총 1,274개의 row로 이루어진 판다스 데이터프레임이 만들어졌습니다.
이는 이미지 50장에 각각의 label과 score를 매칭한 것인데요, 장점은 엑셀로 열어서 필터로 필요한 label만 확인이 가능하다는 것입니다. 또한 score의 기준을 두고 높은 정확도를 가진 label들로만 데이터 분석을 진행할 수도 있습니다.
<결론>
데이터 분석을 할 때 데이터 전처리가 많은 비중을 차지한다고 합니다. 그 이유는 이번 데이터분석에서 보듯이 데이터의 용도에 따라 형태를 다르게 해야 하기 때문입니다. 처음 라벨_딕셔너리 형태는 DB에 저장하고 key:value로 인덱싱할 때 좋습니다. 그리고 두번째 라벨_테이블 형태는 csv파일로 저장해두고 엑셀을 활용해서 필터를 활용해서 데이터를 살펴보는데 좋습니다. 데이터 전처리를 잘 해두면 상황에 따라 데이터를 적절히 사용하기 편리하겠죠.
이번에 전처리한 이미지 데이터를 가지고 다양한 비즈니스 활동을 해볼 수 있을 것 같습니다. 프롤로그에서도 말했듯이 데이터는 요리의 재료와 비슷하다고 생각합니다. 똑같은 재료지만 요리사에 따라 그 용도는 천차만별이겠죠. 저는 이 이미지 라벨 데이터 재료를 어떻게 사용하게 될까요? 나중에 공개됩니다 :)
'실전 프로젝트 > 구글 API - 여행이미지 분석' 카테고리의 다른 글
[Google Vision API] 1.해외여행지 이미지분석(Image analysis with Google Vision API) (0) | 2019.02.19 |
---|