프로젝트 - Image Tag Analysis Project

KDG·2021년 1월 23일
1

Image Tag Analysis Project

  • 소셜 이커머스 1위인 쿠팡의 과일 이미지를 크롤링하여 이미지 기반 분석 프로그램을 제작함
  • 개발 인원 : 손기훈 김동건 유주아 김은찬 (4명)
  • 개발 기간 : 2020년 12월 22일 ~ 2021년 1월 10일
  • Github 링크

DEMO

적용 기술

  • 개발언어 : Python
  • 크롤링 : Beautifulsoup
  • 데이터베이스 : MongoDB Atlas
  • 분석 및 시각화 : Pandas, matplotlib, seaborn
  • Gui tool : PyQT
  • Git, Github

Workflow

Features

  • crawling.py : 이미지와 제목을 크롤링하고 크롤링한 이미지를 폴더에 저장
  • dict_json.py : dict에서 json으로 변경 list에서 dict로 변경
  • fruit_dict.py : 과일사전
  • pyqt_gui.py : GUI 환경을 구현
  • img_to_mongo.py : DB에 이미지 파일을 저장
  • tagdata.py : DB에 태깅된 데이터를 저장
  • kakao.py : 크롤링한 이미지를 카카오 API에 넣고 태깅한 값을 받아 list로 변환
  • google_api.py : 크롤링한 이미지를 구글 API에 넣고 태깅한 값을 받아 list로 변환
  • main : 전체적인 모듈을 실행하는 파일
  • visualization
    • Time_series_chart.py : 전체 날짜별 과일 수 시계열 분석 그래프
    • correct_answerd.py : 카카오 API, 구글 API 성능 비교 분석 그래프
    • fruit_statistics.py : 특정 날짜별 과일 빈도 수 분석 그래프
    • fruit_statistics_all.py : 전체 과일 빈도 수 분석 그래프

프로젝트에서 맡은 역할

  • main 파일 제작
  • 과일 사전 제작
  • 전체 날짜별 과일 수 시계열 분석 그래프 코드 작성
  • 카카오 API, 구글 API 성능 비교 분석 그래프 코드 작성
  • 특정 날짜별 과일 빈도 수 분석 그래프 코드 작성

기록하고 싶은 코드

1. 전체 날짜별 과일 수 시계열 분석 그래프


전체 날짜별 과일 수 시계열 분석 그래프는 크롤링한 전체 날짜의 과일 빈도 수를 날짜별 그래프(시계열 그래프)로 나타낸 것이다.
이번 프로젝트에서 시간을 제일 많이 쏟았다. 일단 시계열 데이터 분석은 처음 해본 거라 어떤식으로 접근해야 할 지 막막했기 때문이다.
한 이틀에 걸쳐 해결했는데 데이터를 받아와서 데이터프레임으로 만든 후 날짜와 과일 종류를 그룹으로 묶은 다음 각각의 과일 종류를 개수로 나타내고 피벗테이블로 만든 후 그래프로 시각화했다.
처음에 그룹으로 묶어야 된다라는 생각을 못했기 때문에 헤맸고, 피벗테이블까지 만들었는데 개수가 많은 순으로 정렬을 못해 헤맸다. 결국 정렬은 해결하지 못했고, 첫번째 날짜의 개수로 정렬을하고 15개만 뽑았다. 그래도 해결을 못하다가 해결을 했기 때문에 가장 기억에 남는 코드이다.

2. 카카오 API, 구글 API 성능 비교 분석 그래프


카카오 API, 구글 API 성능 비교 분석 그래프는 카카오 비전 API와 구글 비전 API를 이용했다.
크롤링한 이미지를 카카오, 구글 API에 적용시킨 후 나온 태그를 DB에 저장하고 저장된 태그와 텍스트를 과일 사전에 적용시켜 나온 태그와 비교했다. 비교 후 같으면 카운트를 해 백분율로 정답률을 나타냈다.
API 성능을 비교해본 거에 재미가 있었고, 만들면서 기억에 남았다.

3. 특정 날짜별 과일 빈도 수 분석 그래프


특정 날짜별 과일 빈도 수 분석 그래프는 특정 날짜의 과일 빈도 수를 그래프로 나타낸 것이다. 이 그래프를 만드는게 가장 쉬웠다. 특정 날짜를 매개인자로 받고 특정 날짜에 해당하는 데이터들만 가져와서 데이터 프레임으로 만든 다음 과일 종류별 개수를 구한다음 개수가 많은 순으로 정렬하고 그래프를 만들면 된다.
빈도 수를 구하기만 하면 되는거라 어렵지 않았지만 만드는데 재밌었고, 처음 해보는 거라 기억에 남는다.

4. 과일 사전


과일사전 코드는 크롤링한 텍스트들에서 특정 과일 이름이 존재하면 태그로 분류하는 기능을 가진 코드이다. 코드라고 하기엔 정말 별거없고 노가다 코드이지만 데이터 전처리 할 때 필요한 사전을 처음 만들어보기도 하고, 만들 때 과일 하나하나를 다 찾아가면서 지정을 해줄때 나름 재미를 느껴서 기억에 남는다.

느낀점

1. 잘한점

  • 오랜만에 하는 팀 프로젝트였는데 팀 멤버간에 불화없이 웃으면서 좋은 분위기로 프로젝트를 진행했고, 각자 맡은 바를 최선을 다했고, 목표했던 기능들을 기간내에 완성했다.

  • 코드를 짜면서 막히는 부분이 생겨 며칠간 고생했던 적이 있다. 그때 포기하지않아서 결국 원하는 코드를 짰고, 완성했다.

  • pandas로 데이터프레임 만들기, 그래프 만들기 등을 처음으로 해봤고, 배운 것(크롤링, api사용, pandas, 그래프 등)을 활용해봤다.

  • git과 github을 이용해 코드를 팀과 공유한 점

2. 아쉬운점

  • 각자 맡은 부분에 치중해서 다른 팀원이 맡은 GUI부분을 공부하지 못했고, 신경 쓰지 못한 점이 아쉽다.

  • 이번에 시행한 분석이 간단한 빈도 분석이 많아서 어려운 분석을 제대로 해보지 못한 점, 배운 numpy와 pandas의 기능들을 더 많이 활용하지 못한 점이 많이 아쉽다.

  • 시계열 그래프를 만들때 지금은 첫째 날짜의 과일 종류만 나오는게 문제다. 날짜별로 과일 종류별 개수가 많은 순으로 15개만 뽑아야 한다. 분명히 하는 방법이 있을텐데 그걸 해결하지 못했다.

  • 코로나가 심각해짐에 따라 프로젝트를 온라인으로 진행했다. 온라인으로 진행한 것도 생각보다 나쁘진 않았는데 오프라인보다 소통이 안됐고, 동기부여, 집중력 등의 문제점이 있었다.

3. 해결 / 개선 방법

  • 프로젝트를 종료하고 시간을 내서 다른 팀원이 작성한 코드도 다시 보고, 공부하기

  • numpy, pandas의 기능을 제대로 활용하지 못한 점은 내가 제대로 알지 못해서 활용하지 못한것이다. 다시 기초부터 공부해서 다음에는 필요한 상황에 바로바로 활용할 수 있도록 해야겠다.

  • 언제 코로나가 잠잠해질지 모르기 때문에 좀 더 집중하는 방법 밖에 없다.

0개의 댓글