[sparta] 15일 메이킹챌린지 #2

정보구니·2021년 10월 6일
0

sparta

목록 보기
11/13
post-thumbnail

시작의 한마디

오늘은 메이킹챌린지를 시작한지 14일차이다.

매일매일 팀원분들과 함께 모여 회의하고 코드작성하고 수많은 수정을 거치다보니
점점 결과물이 만들어져 가고 있다. 뿌듯 ✌🏻

첫 프로젝트에서 너무 좋은 팀원분들과 함께 할 수 있어서 감사하다.

그러므로 오늘은 반드시 워드클라우드를 완성할 수 있도록...!!! 아자

개발 업무내용

✔ 몽고디비 데이터를 이용하여 워드클라우드 만들기

업무 중 이슈/고민 ... 해결내용

문제 1

📌 db에 저장되있는 데이터 목록중에 place, title, comment 항목만 가져오고 싶은데 딕셔너리 형태의 데이터에서 일부분만 find()해오는 방법을 못찾음

texts = list(db.travelLog.find({},{'_id':False}))
for text in texts:
    print(text)

# 결과
{'writer': '르탄이', 'numbers': '8523', 'place': '제주', 'title': '가고 싶다', 'date': '2021-10-03', 'weather': '', 'comment': '갔다 왔지만, 또 가고 싶다.'}
{'writer': '되는지 테스트', 'numbers': 'undefined', 'place': '부산스', 'title': '호호', 'date': '2021-10-04', 'weather': '', 'comment': '너만 믿는다!'}
{'writer': '일이삼사', 'numbers': 'undefined', 'place': '부산', 'title': '맛집 투어', 'date': '2021-10-04', 'weather': '', 'comment': '부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라'}

일단 역으로 필요없는 데이터들을 모두 false값으로 넣어보았다.

texts = list(db.travelLog.find({},{'_id':False,'writer':False,'numbers':False,'date':False,'weather':False}))
for text in texts:
    print(text)

# 결과
{'place': '제주', 'title': '가고 싶다', 'comment': '갔다 왔지만, 또 가고 싶다.'}
{'place': '부산스', 'title': '호호', 'comment': '너만 믿는다!'}
{'place': '부산', 'title': '맛집 투어', 'comment': '부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라'}

원하는 결과가 나오기는 했지만, 효율적인 방법은 아닌거 같다.
디비에 더 많은 목록이 있다면 하나하나 false값으로 지정해주기는 너무 노가다일 것 같단 말이지...

이 부분은 추후에 더 좋은 방법을 찾아봐야할 것 같다.

문제 2

📌 데이터는 잘 받아와지는데 textkey:value 형태로 출력되는 상태, 워드클라우드를 만드려면 value에 해당하는 부분만 추출해와야하는데 잘 안되는 상황.

texts = list(db.travelLog.find({},{'_id':False,'writer':False,'numbers':False,'date':False,'weather':False}))
for text in texts:
    print(text)

# 결과
{'place': '제주', 'title': '가고 싶다', 'comment': '갔다 왔지만, 또 가고 싶다.'}
{'place': '부산스', 'title': '호호', 'comment': '너만 믿는다!'}
{'place': '부산', 'title': '맛집 투어', 'comment': '부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라'}

반복문은 항상 list와 함께 쓰인다는 생각을 하고보니 [' ']을 붙여서 해당 list만 불러오는 방법을 생각했다.

texts = list(db.travelLog.find({},{'_id':False,'writer':False,'numbers':False,'date':False,'weather':False}))
for text in texts:
    print(text['place'], text['title'], text['comment'])

# 결과
제주 가고 싶다 갔다 왔지만, 또 가고 싶다.
부산스 호호 너만 믿는다!
부산 맛집 투어 부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라

결과는 성공적 !!! 너무 기쁘다..!!!

그런데 저 텍스트를 하나의 변수에 담고 싶은데... 그건 어떻게 하지....?

시도1. def 함수로 return 시키기

texts = list(db.travelLog.find({},{'_id':False,'writer':False,'numbers':False,'date':False,'weather':False}))
for text in texts:
    def cloud():
        return text['place'], text['title'], text['comment']
    print(cloud())

# 결과
('제주', '가고 싶다', '갔다 왔지만, 또 가고 싶다.')
('부산스', '호호', '너만 믿는다!')
('부산', '맛집 투어', '부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라')

여기서 조금 코드를 보기 좋게 하기 위해서 place, title, comment 변수를 각각 선언해주었고,
!,.과 같은 특수문자를 제거해주기 위해서 .replace를 사용하여 데이터클렌징을 해주었다.

texts = list(db.travelLog.find({}, {'_id': False, 'writer': False, 'numbers': False, 'date': False, 'weather': False}))
for text in texts:
    place = text['place']
    title = text['title'].replace('!','').replace('~','').replace('.','')
    comment = text['comment'].replace('!','').replace('~','').replace('.','').replace(',','').replace('\n','')

    def cloud():
        return place, title, comment
    print(cloud())

# 결과
('제주', '가고 싶다', '갔다 왔지만, 또 가고 싶다.')
('부산스', '호호', '너만 믿는다!')
('부산', '맛집 투어', '부산에는 맛집이 진짜 많다. 맨날 가서 먹다만 와도 시간이 모자라')

그런데 함수로 값을 return해주니 ''안에 텍스트가 들어가 있는 형태로 추출이 된다.

어떻게 하면 텍스트만 깔끔하게 가져올까 고민 중에 우리 팀원분의 아이디어로 return 할때 +를 이용해 수정을 해보았다 !

texts = list(db.travelLog.find({}, {'_id': False, 'writer': False, 'numbers': False, 'date': False, 'weather': False}))
for text in texts:
    place = text['place']
    title = text['title'].replace('!','').replace('~','').replace('.','')
    comment = text['comment'].replace('!','').replace('~','').replace('.','').replace(',','').replace('\n','')

    def cloud():
        return place + title + comment
    print(cloud())

# 결과
제주가고 싶다갔다 왔지만 또 가고 싶다
부산스호호너만 믿는다
부산맛집 투어부산에는 맛집이 진짜 많다 맨날 가서 먹다만 와도 시간이 모자라

결과는 success🤩
드디어 텍스트만 깔끔하게 출력되었다. 별거 아닐지 몰라도 나 나름대로는 여러 고민들 끝에 얻어낸 결과라 너무 뿌듯했다. +를 이용하는건 생각지도 못했는데, 다시 한번 파이썬은 정말 직관적이구나... 생각이 들었다.

to do list

✔ 완성시킨 워드클라우드 png 파일 서버에 띄우기
✔ 워드클라우드 폰트색상 변경 방법 찾아보기
✔ 워드클라우드 모양 찾아보기

0개의 댓글

관련 채용 정보