Skip to content
Home » 카카오톡 대화 분석 파이썬 | 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) 193 개의 정답

카카오톡 대화 분석 파이썬 | 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) 193 개의 정답

당신은 주제를 찾고 있습니까 “카카오톡 대화 분석 파이썬 – 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)“? 다음 카테고리의 웹사이트 https://ro.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://ro.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 남박사 이(가) 작성한 기사에는 조회수 15,198회 및 좋아요 223개 개의 좋아요가 있습니다.

카카오톡 대화 분석 파이썬 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) – 카카오톡 대화 분석 파이썬 주제에 대한 세부정보를 참조하세요

#핫딜,#카톡알림,#파이썬프로그래밍
핫딜 사이트를 크롤링 하여 원하는 상품의 핫딜이 뜨면 카카오톡으로 메세지를 보내주는 파이썬 프로그래밍 강좌 입니다.
전체 코드가 73줄 밖에 안되지만 초보를 위해 상세히 설명하느라 3편으로 분할 합니다.
소스코드: https://github.com/doctornam/PythonProject/tree/master/SlickClawler
남박사의 인프런강좌: https://www.inflearn.com/course/파이썬-활용

카카오톡 대화 분석 파이썬 주제에 대한 자세한 내용은 여기를 참조하세요.

카톡 분석 : 파이썬 – 박범준의 일상로그

재미를 목적으로 만든 카카오톡 대화 분석기입니다. 우리 단톡방은 언제 말이 많았고, 누가 어떤 말을 많이 사용하는지 알 수 있었네요.

+ 여기에 보기

Source: 95pbj.tistory.com

Date Published: 11/11/2021

View: 6373

Python으로 단톡방 채팅 내용 키워드 분석하기

단톡방 대화내용 확보; 대화내용을 화자별로 구분하여 저장; 각 문장에서 단어를 추출하여 사용 빈도가 높은 순서대로 정렬. PC카톡 기준.

+ 여기에 표시

Source: nookpi.tistory.com

Date Published: 2/27/2021

View: 1092

[파이썬] 카카오톡 대화 내용 분석 2: 대화방에서 가장 많이 사용 …

카카오톡 PC에서 대화 내용을 내보내기하여 받은 .txt 파일을 분석한다. 추출한 챗 로그 텍스트 파일은 2019년 11월 기준으로 아래처럼 생겼다.

+ 여기를 클릭

Source: is-this-it.tistory.com

Date Published: 11/5/2021

View: 4001

PC 카카오톡 오픈채팅 대화분석기 – 카카오 오톡팍 ver 1.0.0

1.카카오톡 PC 버전에서 해당 오픈채팅방 대화 내보기를 합니다. ※ 모바일 버전 불가능!! ※ 모든 기준은 대화내용 파일이므로. 최초 생성한 방장 및 대화 …

+ 더 읽기

Source: weblog.naver.com

Date Published: 6/13/2022

View: 8813

파이썬 크롤링(웹스크래핑) – 카톡 대화 워드클라우드로 만들기

오늘은 ‘파이썬으로 카카오톡 대화 내용을 읽고 편집하여 워드 … 비속어가 몇 번 나오는지도 분석할 수 있고, 친구 관계도 분석해볼 수 있고, …

+ 더 읽기

Source: creatorjo.tistory.com

Date Published: 9/10/2022

View: 8760

주제와 관련된 이미지 카카오톡 대화 분석 파이썬

주제와 관련된 더 많은 사진을 참조하십시오 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)
핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)

주제에 대한 기사 평가 카카오톡 대화 분석 파이썬

  • Author: 남박사
  • Views: 조회수 15,198회
  • Likes: 좋아요 223개
  • Date Published: 2019. 4. 9.
  • Video Url hyperlink: https://www.youtube.com/watch?v=eJAC596oHSA

카톡 분석 : 파이썬

반응형

재미를 목적으로 만든 카카오톡 대화 분석기입니다.

우리 단톡방은 언제 말이 많았고, 누가 어떤 말을 많이 사용하는지 알 수 있었네요.

(개인신상과 관련된 부분은 가렸습니다.)

파이썬+주피터를 사용했습니다.

카카오톡 단톡방 분석

분석 목차

연도별 메시지 개수

월별 메시지 개수

요일별 메시지 개수

시간별 메시지 개수

중간 정리

보낸 사람 별 메시지 개수

이모티콘 사용 순위

사진 보내기 순위

욕설 순위

욕설 순위2

욕설 순위3

감탄 순위

웃음 순위

눈물 순위

강조 순위

의문 순위

코드

카카오톡의 대화내용 내보내기 기능을 이용하여 추출한 csv파일을 이용했습니다.

#!/usr/bin/env python # coding: utf-8 # # 카카오톡 대화 분석기 # # In[ ]: import pandas as pd import numpy as np import matplotlib.pyplot as plt get_ipython().run_line_magic(‘matplotlib’, ‘inline’) import locale locale.setlocale(locale.LC_ALL, ‘ko_KR.UTF-8’) # In[ ]: df=pd.read_csv(“talk.csv”) # In[ ]: df.head() # ## 전처리 # – Date 변수 나누기 # – 시스템 메시지 제거 # – 초대했습니다. # – 나갔습니다. # – 결측값 처리 # ### Date 변수 나누기 # # In[ ]: df[“Date”]=df[“Date”].astype(“datetime64”) df[“year”]=df[“Date”].dt.12 months df[“month”]=df[“Date”].dt.month df[“day”]=df[“Date”].dt.day df[“hour”]=df[“Date”].dt.hour df[‘weekday’]=df[“Date”].dt.strftime(“%A”) # ### 시스템 메시지 제거 # In[ ]: df=df[~df[“Message”].str.accommodates(“invited”)] df=df[~df[“Message”].str.accommodates(“나갔습니다.”)] # ### 결측값 제거 # In[ ]: df.isnull().sum() # In[ ]: df[“User”]=df[“User”].fillna(“(알 수 없음)”) # ## 분석 # 기간 : 2014-02-13 ~ 2019-08-23(약 6년) # 메시지 개수 : 213,047건 # – 날짜 # – 연도별 메시지 개수 # – 월별 메시지 개수 # – 요일별 메시지 개수 # – 시간별 메시지 개수 # – 내용 # – 보낸 사람별 메시지 개수 # – 이모티콘 사용 순위 # – 사진 보내기 순위 # – 욕설 순위 # – ㅅㅂ # – ㅂㅅ # – ㅁㅊ # – 감탄 순위 # – 우와 # – 웃음 순위 # – ㅋ # – 눈물 순위 # – ㅠ # – 강조 순위 # – ! # – 의문 순위 # – ? # # – ㅋㅋ이 가장 많은 대화(예정) # # ### 날짜 # #### 연도별 메시지 개수 # In[ ]: df.groupby(“year”)[“Message”].rely() # In[ ]: df.groupby(“year”)[“Message”].rely().plot(form=”pie”) # #### 월별 메시지 개수 # In[ ]: df.groupby(“month”)[“Message”].rely() # In[ ]: df[df[“year”]==2014].groupby(“month”)[“Message”].rely().plot(form=”pie”); # In[ ]: df[df[“year”]==2019].groupby(“month”)[“Message”].rely().plot(form=”pie”); # #### 요일별 메시지 개수 # In[ ]: df.groupby(“weekday”)[“Message”].rely().sort_values(ascending=False) # In[ ]: df[df[“year”]==2014].groupby(“weekday”)[“Message”].rely().sort_values(ascending=False).plot(“pie”); # In[ ]: df[df[“year”]==2019].groupby(“weekday”)[“Message”].rely().sort_values(ascending=False).plot(“pie”); # #### 시간별 메시지 개수 # In[ ]: df.groupby(“hour”)[“Message”].rely() # In[ ]: df[df[“year”]==2014].groupby(“hour”)[“Message”].rely().plot(“pie”); # In[ ]: df[df[“year”]==2019].groupby(“hour”)[“Message”].rely().plot(“pie”); # ### 내용 # #### 보낸사람별 메시지 개수 # In[ ]: df.groupby(“User”)[“Message”].rely().sort_values(ascending=False) # In[ ]: df.groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 이모티콘 사용 순위 # In[ ]: df[df[“Message”]==”이모티콘”].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”]==”이모티콘”].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 사진 보내기 순위 # In[ ]: df[df[“Message”]==”사진”].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”]==”사진”].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 욕설 순위 # ##### ㅅㅂ # In[ ]: df[(df[“Message”].str.accommodates(“ㅅㅂ”))|(df[“Message”].str.accommodates(“시발”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.accommodates(“ㅅㅂ”))|(df[“Message”].str.accommodates(“시발”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-10:].plot(form=”barh”,grid=True); # ##### ㅂㅅ # In[ ]: df[(df[“Message”].str.accommodates(“ㅂㅅ”))|(df[“Message”].str.accommodates(“병신”))].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.accommodates(“ㅂㅅ”))|(df[“Message”].str.accommodates(“병신”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-10:].plot(form=”barh”,grid=True); # ##### ㅁㅊ # In[ ]: df[(df[“Message”].str.accommodates(“ㅁㅊ”))|(df[“Message”].str.accommodates(“미친”))].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.accommodates(“ㅁㅊ”))|(df[“Message”].str.accommodates(“미친”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 감탄 순위 # ##### 우와 # In[ ]: df[df[“Message”].str.accommodates(“우와”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:5] # In[ ]: df[df[“Message”].str.accommodates(“우와”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # #### 웃음 순위 # ##### ㅋ # In[ ]: df[df[“Message”].str.accommodates(“ㅋ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“ㅋ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # ##### ㅎ # In[ ]: df[df[“Message”].str.accommodates(“ㅎ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“ㅎ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # #### 눈물 순위 # ##### ㅠ # In[ ]: df[df[“Message”].str.accommodates(“ㅠ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“ㅠ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # ##### ㅜ # In[ ]: df[df[“Message”].str.accommodates(“ㅜ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“ㅜ”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # #### 강조 순위 # ##### ! # In[ ]: df[df[“Message”].str.accommodates(“!”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“!”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # #### 의문 순위 # ##### ? # In[ ]: df[df[“Message”].str.accommodates(“?”)].groupby(“User”)[“Message”].rely().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.accommodates(“?”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:-1].plot(form=”barh”,grid=True); # ### 번외 # #### 사과 순위 # In[ ]: df[df[“Message”].str.accommodates(“미안”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 존나 순위 # In[ ]: df[(df[“Message”].str.accommodates(“ㅈㄴ”))|(df[“Message”].str.accommodates(“존나”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 감사 순위 # In[ ]: df[(df[“Message”].str.accommodates(“ㄱㅅ”))|(df[“Message”].str.accommodates(“감사”))|(df[“Message”].str.accommodates(“고마워”))|(df[“Message”].str.accommodates(“고맙”)) ].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True); # #### 굿 순위 # In[ ]: df[df[“Message”].str.accommodates(“굿”)].groupby(“User”)[“Message”].rely().sort_values(ascending=True)[-11:].plot(form=”barh”,grid=True);

자유롭게 사용하시고

도움이 되었다면 공감이나 댓글 부탁드립니다!

반응형

Python으로 단톡방 채팅 내용 키워드 분석하기

일정이 붕 떠서 심심하던 차에, 문득 친구들이랑 떠드는 단톡방이나 한 번 까보고 싶어졌다.

하려는 일의 순서는 다음과 같다.

단톡방 대화내용 확보 대화내용을 화자별로 구분하여 저장 각 문장에서 단어를 추출하여 사용 빈도가 높은 순서대로 정렬

PC카톡 기준

일단 대화 내보내기를 통해 단톡방의 내용을 txt파일로 받아놓는다.

데이터가 어떻게 구성되어 있는지를 확인해야 원하는 부분을 추출할 수 있기 때문에 txt파일을 열어서 확인해본다.

데이터 맨 윗줄은 단톡방 이름, 인원, 저장된 날짜가 노출되어 있었다.

마지막 채팅 이후 새 채팅이 시작된 시점에 날짜가 지난 경우 {시간}만 노출된 데이터도 있었고,

쭉 흝어보니 대화 데이터는 {시간},{이름} : {내용} 으로 표현되어 있었다.

내가 필요로 하는 데이터는 오직 {이름},{내용} 뿐이므로 해당 내용을 추출하는 과정이 필요했다.

먼저 친구들 각각의 채팅 내용을 따로 저장하는 과정을 거쳤다.

DataExtractor.py

chat = open(“C:/Users/rejec/Documents/NLP/KakaoTalkChats.txt”, encoding=”utf-8″) #추출을 위한 채팅 원본 파일로, 읽기 모드로 가져온다. ‘r’값은 기본값이라 생략했다. mhchat = open(“C:/Users/rejec/Documents/NLP/MhChats.txt”, ‘w’, encoding=”utf-8″) sikchat = open(“C:/Users/rejec/Documents/NLP/SikChats.txt”, ‘w’, encoding=”utf-8″) inschat = open(“C:/Users/rejec/Documents/NLP/InsChats.txt”, ‘w’, encoding=”utf-8″) zingchat = open(“C:/Users/rejec/Documents/NLP/ZingChats.txt”, ‘w’, encoding=”utf-8″) mechat = open(“C:/Users/rejec/Documents/NLP/MeChats.txt”, ‘w’, encoding=”utf-8″) #각 사용자별로 새 텍스트 파일을 생성해준다. ‘w’ 쓰기모드 mh = “명룡 : ” sik = “정시기 : ” ins = “박상용 : ” zing = “징도 : ” me = “회원님 : ” # 친구들 이름 +” : ” # 해당 문자열이 들어있으면 추출해서 따로 저장할 예정 nonchating = [‘사진’,’샵검색’,’이모티콘’,’동영상’] # 일반적인 채팅 내용이 아닌 것들은 예외처리를 해주기 위해 리스트에 넣는다 whereas True: line = chat.readline() #채팅 내용에서 한 줄씩 가져와준다 #print(line) if not line: break #더 가져올 줄이 없으면 break isOk = True #예외처리에 필요한 변수 하나 선언 for merchandise in nonchating: #아이템 안에 들어있는 요소들마다 if merchandise in line: #줄에 그 내용이 있으면 isOk = False #다음 단계로 넘기지 마 break if isOk: #문제가 없으면 Keep Going~ if mh in line: #mh라는 친구가 한 말이면 line = line.break up(” : “)[1] #split으로 대화 내용만 추출한다. mhchat.write(line) #mhchat파일에 추출한 대화 내용을 써준다. elif sik in line: line = line.break up(” : “)[1] sikchat.write(line) elif ins in line: line = line.break up(” : “)[1] inschat.write(line) elif zing in line: line = line.break up(” : “)[1] zingchat.write(line) elif me in line: line = line.break up(” : “)[1] mechat.write(line) #python에는 스위치문이 없어서 elif나 아니면 딕셔너리를 사용한다고 한다. chat.shut() mhchat.shut() sikchat.shut() inschat.shut() zingchat.shut() mechat.shut() #file 객체 다 닫아줌

이렇게 하면 원하는 대로 대화내용만 쏙쏙 빼서 txt파일로 생성이 되는 부분을 확인 할 수 있다.

실제로 파일을 열어보면 대화 내용만 착하게 저장되어 있다.

이제 단어의 빈도수만 파악하면 되겠다.

띄어쓰기가 되지 않은 문장도 자연어 처리를 통해 단어로 분석할 수 있지만

그렇게까지 하긴 싫어서 그냥 공백으로 구분하였다.

import operator mhchat = open(“C:/Users/rejec/Documents/NLP/MhChats.txt”, ‘r’, encoding=”utf-8″) mhchatfreq = open(“C:/Users/rejec/Documents/NLP/MhChatsFreq.txt”, ‘w’, encoding=”utf-8″) sikchat = open(“C:/Users/rejec/Documents/NLP/SikChats.txt”, ‘r’, encoding=”utf-8″) sikchatfreq = open(“C:/Users/rejec/Documents/NLP/SikChatsFreq.txt”, ‘w’, encoding=”utf-8″) inschat = open(“C:/Users/rejec/Documents/NLP/InsChats.txt”, ‘r’, encoding=”utf-8″) inschatfreq = open(“C:/Users/rejec/Documents/NLP/InsChatsFreq.txt”, ‘w’, encoding=”utf-8″) zingchat = open(“C:/Users/rejec/Documents/NLP/ZingChats.txt”, ‘r’, encoding=”utf-8″) zingchatfreq = open(“C:/Users/rejec/Documents/NLP/ZingChatsFreq.txt”, ‘w’, encoding=”utf-8″) mechat = open(“C:/Users/rejec/Documents/NLP/MeChats.txt”, ‘r’, encoding=”utf-8″) mechatfreq = open(“C:/Users/rejec/Documents/NLP/MeChatsFreq.txt”, ‘w’, encoding=”utf-8″) #기존에 저장한 각 화자별 대화 내용을 가져오고, #단어와 빈도수를 저장할 freq파일을 생성한다. #function을 하나 만들어서 간단히 처리해보자 def get_freq(chat_file, out_file): #chat_file은 대화 내용이 담긴 텍스트 파일, out_file은 빈도를 저장할 file이다. # 생각해보니 그냥 chat_flie만 받아서 해도 되었을텐데… 또 바보같이 했다. freq = {} # 단어와 빈도를 저장할 딕셔너리 생성 whereas True: line = chat_file.readline() if not line: break #읽어오는 부분은 동일하다 strains = line.break up(” “) #공백으로 단어를 구분한다 for i in strains: #구분한 단어들을, i = i.substitute(‘

‘, ”) #개행문자를 제거한 후 rely = freq.get(i, 0) #기존에 저장된 빈도 딕셔너리에서 가져온다 #없는 값이라면(처음 보는 값이라면) 0과 함께 저장 freq[i] = rely + 1 #이렇게 하면 i라는 단어의 value는 기존에 존재했다면 +1, 처음이라면 1이 저장된다 frequency_list = sorted(freq.gadgets(), key=operator.itemgetter(1), reverse=True) #저장된 딕셔너리의 값을 빈도수가 높은 순서대로 재정렬 해준다. 낮은 순서대로 하려면 reverse=False ”’ # sorted(dict.gadgets(), key=operator.itemgetter(0)) # key=operator.itemgetter(0)는 정렬하고자 하는 키 값을 0번째 인덱스로 한다. # 딕셔너리 자료형에서 0번째 인덱스는 Key. # 1번째 인자는 Value니까 1로 해야한다. ”’ for phrases in frequency_list: out_file.write(phrases[0] + ” : ” + str(phrases[1]) + ”

“) #정렬된 딕셔너리 자료형을 보기 좋게 {단어} : {빈도}

로 저장한다. chat_file.shut() out_file.shut() get_freq(mhchat, mhchatfreq) get_freq(sikchat, sikchatfreq) get_freq(inschat, inschatfreq) get_freq(zingchat, zingchatfreq) get_freq(mechat, mechatfreq) #5명 반복

실행 후 결과를 까보도록 하자.

빈도가 높은 단어 순서대로 {단어} : {빈도수} 확인이 가능하다.

저 공백 부분은 예외처리를 해줘야겠다.

아무튼 끝~

[파이썬] 카카오톡 대화 내용 분석 2: 대화방에서 가장 많이 사용되는 단어

반응형

카카오톡 PC에서 대화 내용을 내보내기하여 받은 .txt 파일을 분석한다.

추출한 챗 로그 텍스트 파일은 2019년 11월 기준으로 아래처럼 생겼다. 몇 년 전과 달라졌다.

대화방에서 많이 사용되는 단어를 띄어쓰기를 기준으로 split하여 추출하기 때문에, 단어 뒤에 조사가 주로 붙는 한국어에 아주 적합한 코딩은 아니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # Most Frequently Used (*193*) import re from collections import Counter phrases = [] open (r ‘C:Users카카오톡 대화 내용 텍스트 파일.txt’ ‘r’ , encoding = ‘utf-8’ ) as f: with(r, encoding) as f: for line in f: = re.search(r “^.*?[dd:dd]s*(.+)$” , line) , line) if m: phrases.lengthen(re.break up(r “s+” , m.group( 1 ))) , m.group())) for phrase, freq in Counter(phrases).most_common( 10 ): print ( “{0:10s} : {1:3d}” . format (phrase, freq))

결과 예는 아래와 같다.

1 2 3 4 5 6 7 8 9 10 ㅋㅋ : 471 아 : 351 근데 : 334 ㅋㅋㅋ : 261 ㄹㅇ : 260 ㅇㅇ : 250 Photo : 207 ㅋㅋㅋㅋㅋ : 199 난 : 191 ㅋㅋㅋㅋ : 178

+ 2020년 4월 기준, 채팅 내용(메모장 파일)에서 시간 부분이 ‘[12:51]’에서 ‘[오전 12:51]’ 형식으로 바뀜.

이에 따라 정규표현식을 “^[(.+]?)[w+.dd:dd]s*.+$” 로 수정해야함

반응형

PC 카카오톡 오픈채팅 대화분석기 – 카카오 오톡팍 ver 1.0.0

악성코드가 포함되어 있는 파일입니다.

{FILENAME}

백신 프로그램으로 치료하신 후 다시 첨부하시거나, 치료가 어려우시면

파일을 삭제하시기 바랍니다.

고객님의 PC가 악성코드에 감염될 경우 시스템성능 저하,

개인정보 유출등의 피해를 입을 수 있으니 주의하시기 바랍니다.

파이썬 크롤링(웹스크래핑) – 카톡 대화 워드클라우드로 만들기

스파르타 코딩 파이썬 혼자 놀기 패키지 3일차!

오늘은 ‘파이썬으로 카카오톡 대화 내용을 읽고 편집하여 워드 클라우드로 만드는 것!’을 배웠다.

강의 내용을 정리하기 전, 다시 한 번 알게된 어마어마한 사실이 있다면 카카오톡의 대화 내용은 .txt파일로 저장이 된다는 사실!!!!

이걸 저장해서 뭘할까 싶지만 이렇게 워드 클라우드로 만들 수도 있고, 비속어가 몇 번 나오는지도 분석할 수 있고, 친구 관계도 분석해볼 수 있고, 자주쓰는말 월드컵 같은 게임도 만들어 볼 수 있고, 하루에 몇 번이나 카톡이 오고 가는지도 알 수 있고 등등

조금만 생각해보면 카톡 대화 내용으로도 꽤 할 수 있는 것이 많다.

일단, 이번 글에서는 카톡 대화를 .txt파일로 다운받은 뒤, 파이썬 워드클라우드 라이브러리를 이용해 워드클라우드로 만들 것이다.

그럼 단계별로 시작해보자.

1. 텍스트 파일 읽고 쓰기

1) 파이썬에서 텍스트 파일을 만들 수도 있는데 이걸 ‘쓴다’고 이해하면 된다.

test_review.txt 파일을 만들고 그 안에

각 줄마다 번호를 적은 파일입니다.

이것은 1번째 줄입니다.

이것은 2번째 줄입니다.

이런식으로 메모장 텍스트 파일을 만든다고 해보자.

아래 코드를 open()과 write()를 이용해서 test_review.txt파일을 만들어주고 글자를 입력했다.

with open(“test.txt”, “w”, encoding=”utf-8″) as f: f.write(“각 줄마다 번호를 적은 파일입니다.

“) for i in [1,2,3,4,5]: f.write(f”이것은 {i}번째 줄입니다.

“)

파이참으로 결과를 확인하면 이렇게 .txt파일이 만들어진 것을 볼 수 있다.

2) 이미 있는 .txt 파일을 읽을 수도 있다.

이때는 읽기 모드인 ‘r’을 적어주면 되고 줄 별로 읽은 뒤 print(line)해준다.

with open(“test_review.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains: print(line)

그럼 아까 만든 test_review.txt파일에 있는 글을 라인별로 읽어온 뒤 프린트 해주게 된다.

아까

으로 엔터효과 + print()의 엔터까지 더해짐.

2. 카카오톡 텍스트파일 저장하고 읽기

카카오톡의 원하는 카톡방에 들어가서 ‘더보기 > 대화 내용 > 대화 내보내기’를 클릭한다.

파일명은 간단하게 kakao.txt로 바꾸어준 뒤 작업하는 폴더에 넣어주어야한다.

kakao.txt파일을 파이썬으로 읽어보자.

textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains: textual content+=line print(textual content)

3. 데이터 클렌징

‘데이터 클렌징’이란 데이터에서 불완전, 비정확, 관련 없는 부분을 찾아 삭제하거나 수정하는 것을 말한다.

카톡 대화 내용을 워드 클라우드로 만들 것이기 때문에 날짜, 시간, 프로필 이름, 카톡방 이름, 저장한 날짜 등은 없어도 된다.

1) 일단 맨 위 5줄은 필요없기에 6번째 줄부터 들어가도록 한다.

textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains[5:]: textual content+=line print(textual content)

2) 시스템 메시지나 톡게시판에 공지사항으로 아주 길게 올라간 메시지 등을 지워주기 위한 처리를 해야한다.

대화 내용을 보면 각 줄에서 ] [ 가 포함되어 있다. 이걸 이용해서 if문을 써준다. ] [ 요 표시가 있어야만 대화라고 인식하고 읽는 것이다.

text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: if ‘] [‘ in line: text+=line print(text)

3) 그리고 split을 이용해서 ‘] ‘ 를 기준으로 글을 나누고 인덱스2번을 불러오면 대화 내용만 불러오는 것이다.

textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2] print(textual content)

4) 카톡 대화를 다운로드받으면 이모티콘은 ‘이모티콘’이라고 한 줄로 나온다. 사진은 ‘사진’이라고 나온다.

이모티콘, 사진, ㅋ, ㅠ, ㅜ 등은 지워버리자.

이모티콘과 사진은

으로 줄바꿈까지 포함되었기에 substitute(‘사진

‘, ”)이렇게 적어줘야한다.

아래 코드처럼 적으면 완성!

textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].substitute(‘ㅋ’,”).substitute(‘ㅠ’,”).substitute(‘ㅜ’,”).substitute(‘사진

‘,”).substitute(‘이모티콘

‘,”).substitute(‘삭제된 메시지입니다’,”) print(textual content)

4. 워드 클라우드 패키지 깔고 폰트 적용하기

1) wordcloud 패키지를 설치한다.

2) 파이썬에서 그림을 그릴 때 한글 폰트를 지원하지 않는 경우가 많아서 직접 폰트 파일이 저장되어 있는 경로를 찾아 넣어주어야한다.

컴퓨터에 있는 폰트 중 고딕 폰트를 출력하여 적용해보자.

ctrl + / 를 눌르서 코드들을 주석처리해주고

고딕 폰트를 검색해서 마음에 드는 것을 고른 뒤 경로를 복사해서 font_path를 써준다.

# textual content = “” # # with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: # strains = f.readlines() # for line in strains[5:]: # if ‘] [‘ in line: # text+=line.split(‘] ‘)[2].substitute(‘ㅋ’,”).substitute(‘ㅠ’,”).substitute(‘ㅜ’,”).substitute(‘사진

‘,”).substitute(‘이모티콘

‘,”).substitute(‘삭제된 메시지입니다’,”) import matplotlib.font_manager as fm # 이용 가능한 폰트 중 ‘고딕’만 선별 for font in fm.fontManager.ttflist: if ‘Gothic’ in font.title: print(font.title, font.fname) font_path = ‘C:/Windows/Fonts/malgun.ttf’

3) 이제 워드 클라우드 패키지를 이용해보자.

아래 코드를 변형해서 사용하면 된다.

from wordcloud import WordCloud wc = WordCloud(font_path=font_path, background_color=”white”, width=600, peak=400) wc.generate(textual content) wc.to_file(“result.png”)

4) 변형하여 원래 코드에 적용시켜보자.

kakao.txt를 읽고 데이터 클렌징을 해서 result_Review.png파일로 워드 클라우드 그림 파일을 만드는 것이다!

from wordcloud import WordCloud textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].substitute(‘ㅋ’,”).substitute(‘ㅠ’,”).substitute(‘ㅜ’,”).substitute(‘사진

‘,”).substitute(‘이모티콘

‘,”).substitute(‘삭제된 메시지입니다’,”) font_path = ‘C:/Windows/Fonts/malgun.ttf’ wc = WordCloud(font_path=font_path, background_color=”white”, width=600, peak=400) wc.generate(textual content) wc.to_file(“result_review.png”)

5) ‘저는’ ‘넹넹’ ‘ㅎ’ ‘저도’ 제가’ 이런 글자는 지워봐야겠다.

5. 원하는 모양의 워드클라우드 만들기

원하는 어떤 모양이든 흰색 배경의이미지가 있느면 만들 수 있다.

일단 흰 배경에 하트 그림이 있는 파일을 다운로드 받고 이름을 love.png로 바꾸어 작업하는 폴더에 넣어주었다.

love.png 0.02MB

1) 마스킹된 워드 클라우드를 만들기 위한 코드를 써준다.

아래의 코드를 변형하여 사용하면 된다.

from PIL import Image import numpy as np masks = np.array(Image.open(‘love.png’)) wc = WordCloud(font_path=font_path, background_color=”white”, masks=masks) wc.generate(textual content) wc.to_file(“result_review_2.png”)

2) 변형하여 원래 코드에 적용시켜보자.

replace가 많아서 가로로 길어졌다.

아래 코드처럼하면 끝!

from wordcloud import WordCloud from PIL import Image import numpy as np textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() for line in strains[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].substitute(‘ㅋ’,”).substitute(‘ㅠ’,”).substitute(‘ㅜ’,”).substitute(‘사진

‘,”).substitute(‘이모티콘

‘,”).substitute(‘삭제된 메시지입니다’,”).substitute(‘저도’,”).substitute(‘ㅎ’,”).substitute(‘제가’,”).substitute(‘넹’,”).substitute(‘저는’,”) font_path = ‘C:/Windows/Fonts/malgun.ttf’ masks = np.array(Image.open(‘love.png’)) wc = WordCloud(font_path=font_path, background_color=”white”, masks = masks) wc.generate(textual content) wc.to_file(“result_review_2.png”)

6. 전체 코드 다시 살펴보기

from wordcloud import WordCloud from PIL import Image import numpy as np textual content = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: strains = f.readlines() #6번째 줄부터 읽기 for line in strains[5:]: #시스템 메시지 삭제 if ‘] [‘ in line: #split으로 대화내용만 불러오고 replace로 필요없는 글자 없애기 text+=line.split(‘] ‘)[2].substitute(‘ㅋ’,”).substitute(‘ㅠ’,”).substitute(‘ㅜ’,”).substitute(‘사진

‘,”).substitute(‘이모티콘

‘,”).substitute(‘삭제된 메시지입니다’,”).substitute(‘저도’,”).substitute(‘ㅎ’,”).substitute(‘제가’,”).substitute(‘넹’,”).substitute(‘저는’,”) #폰트 찾아서 설정 font_path = ‘C:/Windows/Fonts/malgun.ttf’ #love.png라는 파일에 마스킹해줄것임 masks = np.array(Image.open(‘love.png’)) #result_review_2.png파일로 하트모양 워드클라우드 저장 wc = WordCloud(font_path=font_path, background_color=”white”, masks = masks) wc.generate(textual content) wc.to_file(“result_review_2.png”)

카카오톡 대화 내용을 읽어서 워드 클라우드로 만들기도 끝!!!!

이렇게 스파르타코딩 파이썬 혼자 놀기 수업이 끝났다!

이미지 크롤링, 기사 크롤링, txt파일 읽고 편집해서 워드클라우드로 만들기까지 알차게 배웠다!

배운 내용은 복습하고 발전시켜서 좋은 아이디어를 실현시켜봐야겠다!!

키워드에 대한 정보 카카오톡 대화 분석 파이썬

다음은 Bing에서 카카오톡 대화 분석 파이썬 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

See also  인디애나 폴리스 한인 마트 | 미국 인디애나주 한인마트 투어 브이로그 모든 답변
See also  Jun He Tsmc | Tsmc가 한국 기술을 훔쳤다는 소식에 백악관은 분노했다. 조 바이든 \"한국 지휘자법 65호 통과\"를 긴급 지시했다. 인기 답변 업데이트

See also  Bj 분수 쇼 | 여자들은 여기 해주면 바로 분수폭발이야 23136 명이 이 답변을 좋아했습니다

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)

  • 파이썬
  • 파이썬프로그래밍
  • 파이썬강좌
  • 핫딜
  • 크롤링
  • 카톡알림

핫딜이 #뜨면 #카톡으로 #알림! #파이썬 #프로그래밍 #(1/3)


YouTube에서 카카오톡 대화 분석 파이썬 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) | 카카오톡 대화 분석 파이썬, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.