당신은 주제를 찾고 있습니까 “카카오톡 대화 분석 파이썬 – 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)“? 다음 카테고리의 웹사이트 https://you.pilgrimjournalist.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.pilgrimjournalist.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 남박사 이(가) 작성한 기사에는 조회수 15,168회 및 좋아요 222개 개의 좋아요가 있습니다.
Table of Contents
카카오톡 대화 분석 파이썬 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) – 카카오톡 대화 분석 파이썬 주제에 대한 세부정보를 참조하세요
#핫딜,#카톡알림,#파이썬프로그래밍
핫딜 사이트를 크롤링 하여 원하는 상품의 핫딜이 뜨면 카카오톡으로 메세지를 보내주는 파이썬 프로그래밍 강좌 입니다.
전체 코드가 73줄 밖에 안되지만 초보를 위해 상세히 설명하느라 3편으로 분할 합니다.
소스코드: https://github.com/doctornam/PythonProject/tree/master/SlickClawler
남박사의 인프런강좌: https://www.inflearn.com/course/파이썬-활용
카카오톡 대화 분석 파이썬 주제에 대한 자세한 내용은 여기를 참조하세요.
파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 …
이번 포스팅은 카카오톡의 대화을 분석하는 방법에대해서 이야기를 해보고자 합니다. 게임을 하던지, 아니면 다른 업무를 하던지 카카오톡 단체대화를 …
Source: appia.tistory.com
Date Published: 5/19/2022
View: 8843
카톡 분석 : 파이썬 – 박범준의 일상로그
재미를 목적으로 만든 카카오톡 대화 분석기입니다. 우리 단톡방은 언제 말이 많았고, 누가 어떤 말을 많이 사용하는지 알 수 있었네요.
Source: 95pbj.tistory.com
Date Published: 12/22/2021
View: 3943
[파이썬] 카카오톡 대화 내용 분석 2: 대화방에서 가장 많이 사용 …
카카오톡 PC에서 대화 내용을 내보내기하여 받은 .txt 파일을 분석한다. 추출한 챗 로그 텍스트 파일은 2019년 11월 기준으로 아래처럼 생겼다.
Source: is-this-it.tistory.com
Date Published: 1/22/2022
View: 1050
Python으로 단톡방 채팅 내용 키워드 분석하기
단톡방 대화내용 확보; 대화내용을 화자별로 구분하여 저장; 각 문장에서 단어를 추출하여 사용 빈도가 높은 순서대로 정렬. PC카톡 기준.
Source: nookpi.tistory.com
Date Published: 11/24/2021
View: 1728
PC 카카오톡 오픈채팅 대화분석기 – 카카오 오톡팍 ver 1.0.0
1.카카오톡 PC 버전에서 해당 오픈채팅방 대화 내보기를 합니다. ※ 모바일 버전 불가능!! ※ 모든 기준은 대화내용 파일이므로. 최초 생성한 방장 및 대화 …
Source: blog.naver.com
Date Published: 11/1/2022
View: 6396
파이썬 크롤링(웹스크래핑) – 카톡 대화 워드클라우드로 만들기
오늘은 ‘파이썬으로 카카오톡 대화 내용을 읽고 편집하여 워드 … 비속어가 몇 번 나오는지도 분석할 수 있고, 친구 관계도 분석해볼 수 있고, …
Source: creatorjo.tistory.com
Date Published: 12/14/2022
View: 5405
Python 카카오톡 대화 분석기 프로그램 – LOU
Python 카카오톡 대화 분석기 프로그램 … 파이썬 3.0 코드이다. 카톡대화 추출한 파일을 이름을 talk.txt로 고치고 실행하면 output.txt 생성되면서 누가 …
Source: jizard.tistory.com
Date Published: 11/23/2021
View: 880
주제와 관련된 이미지 카카오톡 대화 분석 파이썬
주제와 관련된 더 많은 사진을 참조하십시오 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 카카오톡 대화 분석 파이썬
- Author: 남박사
- Views: 조회수 15,168회
- Likes: 좋아요 222개
- Date Published: 2019. 4. 10.
- Video Url link: https://www.youtube.com/watch?v=eJAC596oHSA
파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 하기
반응형
파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 하기
파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 하기
이번 포스팅은 카카오톡의 대화을 분석하는 방법에대해서 이야기를 해보고자 합니다. 게임을 하던지, 아니면 다른 업무를 하던지 카카오톡 단체대화를 많이 사용합니다. 이럴 경우, 카카오톡에서 대화를 추출하여 분석작업을 하곤 합니다. 그래서 이번 포스팅에서는 카카오톡에서 추출된 대화를 바탕으로 사용자마다 몇회 이야기를 했는지에 대해서 분석해보도록 하겠습니다.
먼저 다음 포스팅을 하기 위해서는 카카오톡 대화를 추출하셔야 합니다. 관련해서는 다음 링크에보이는 부분을 참조하여 주시길 바랍니다.
[윈도우10 Windows10]카카오톡 대화방 대화내용 추출하기그럼 먼저 대화를 추출하시면 다음과 같은 화면을 볼 수 있습니다.
카카오톡 대화 내용 추출 결과
보시는 바와 같이 다음과 같은 형태로 대화가 추출이됩니다.
[아이디] [시간] 내용그럼 위의 부분을 바탕으로 파일로 추출되어 있는 카카오톡 내용을 추출해보도록 하겠습니다. 먼저 전체 코드를 살펴보겠습니다.
import re def reading_source(path): list = [] listv = {} sourcecode = open(path,”r+”, encoding=’utf-8′) data=sourcecode.readlines() condition = 0 for idata in data : if idata[0] ==”[” : name = idata.split(‘]’) name = name[0][1:] print(name) if name not in list: print(name + ” 추가되었습니다.”) list.append(name) listv[name]= 1 else : listv[name] = listv[name] +1 for i in listv : print(i +”\t” + str(listv[i])) print(listv) if __name__ == ‘__main__’: mylist = r”C:\Users\Appia\Desktop\0820.txt” reading_source(mylist)
먼저 파일을 불러와서, 파일을 realines을 이용하여 각 내용을 줄단위로 읽어옵니다. 그런 후에 첫 부분이 “[“부분을 선별하고, 그런후에 “]”기반으로 분리합니다. 그럼 첫번째 맴버가 다음과 같은 형태가 될 것입니다.
[아이디이 때 name[0][1:] 부분을 이용하여 이름을 추출합니다. 그런후에 이름 여부를 확인하여 딕셔너리에 선언하고 그렇지 않을 경우에 해당 name부분을 키로 이용하여 해당 값에 1을 추가해줍니다.
list = [] … if name not in list: # 리스트 포함 여부 확인 (없을 경우) print(name + ” 추가되었습니다.”) list.append(name) # 리스트 맴버 추가 listv[name]= 1 #딕서너리 값 추가 else : listv[name] = listv[name] +1 (해당 이름이 존재하면 그쪽으로 값을 한개씩 추가)
이와 같은 방법으로 해당 코드를 카운트를 하게 됩니다. 그런 결과를 보면 다음과 같은 결과를 얻을 수 있습니다.
결과
이와 같이 각 아이디마다 사람수의 카톡이 명시가 됩니다.
[윈도우10 Windows10]카카오톡 대화방 대화내용 추출하기이번 포스팅에서는 파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 하기라는 주제로간단히 포스팅을해봤습니다. 단체카톡이나, 단체톡에 내용에 대해서 사용해보면 약간의 재미를 느낄 수 있습니다. 혹 궁금하신 점이나 무의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.
반응형
카톡 분석 : 파이썬
반응형
재미를 목적으로 만든 카카오톡 대화 분석기입니다.
우리 단톡방은 언제 말이 많았고, 누가 어떤 말을 많이 사용하는지 알 수 있었네요.
(개인신상과 관련된 부분은 가렸습니다.)
파이썬+주피터를 사용했습니다.
카카오톡 단톡방 분석
분석 목차
연도별 메시지 개수
월별 메시지 개수
요일별 메시지 개수
시간별 메시지 개수
중간 정리
보낸 사람 별 메시지 개수
이모티콘 사용 순위
사진 보내기 순위
욕설 순위
욕설 순위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.year 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.contains(“invited”)] df=df[~df[“Message”].str.contains(“나갔습니다.”)] # ### 결측값 제거 # In[ ]: df.isnull().sum() # In[ ]: df[“User”]=df[“User”].fillna(“(알 수 없음)”) # ## 분석 # 기간 : 2014-02-13 ~ 2019-08-23(약 6년) # 메시지 개수 : 213,047건 # – 날짜 # – 연도별 메시지 개수 # – 월별 메시지 개수 # – 요일별 메시지 개수 # – 시간별 메시지 개수 # – 내용 # – 보낸 사람별 메시지 개수 # – 이모티콘 사용 순위 # – 사진 보내기 순위 # – 욕설 순위 # – ㅅㅂ # – ㅂㅅ # – ㅁㅊ # – 감탄 순위 # – 우와 # – 웃음 순위 # – ㅋ # – 눈물 순위 # – ㅠ # – 강조 순위 # – ! # – 의문 순위 # – ? # # – ㅋㅋ이 가장 많은 대화(예정) # # ### 날짜 # #### 연도별 메시지 개수 # In[ ]: df.groupby(“year”)[“Message”].count() # In[ ]: df.groupby(“year”)[“Message”].count().plot(kind=”pie”) # #### 월별 메시지 개수 # In[ ]: df.groupby(“month”)[“Message”].count() # In[ ]: df[df[“year”]==2014].groupby(“month”)[“Message”].count().plot(kind=”pie”); # In[ ]: df[df[“year”]==2019].groupby(“month”)[“Message”].count().plot(kind=”pie”); # #### 요일별 메시지 개수 # In[ ]: df.groupby(“weekday”)[“Message”].count().sort_values(ascending=False) # In[ ]: df[df[“year”]==2014].groupby(“weekday”)[“Message”].count().sort_values(ascending=False).plot(“pie”); # In[ ]: df[df[“year”]==2019].groupby(“weekday”)[“Message”].count().sort_values(ascending=False).plot(“pie”); # #### 시간별 메시지 개수 # In[ ]: df.groupby(“hour”)[“Message”].count() # In[ ]: df[df[“year”]==2014].groupby(“hour”)[“Message”].count().plot(“pie”); # In[ ]: df[df[“year”]==2019].groupby(“hour”)[“Message”].count().plot(“pie”); # ### 내용 # #### 보낸사람별 메시지 개수 # In[ ]: df.groupby(“User”)[“Message”].count().sort_values(ascending=False) # In[ ]: df.groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 이모티콘 사용 순위 # In[ ]: df[df[“Message”]==”이모티콘”].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”]==”이모티콘”].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 사진 보내기 순위 # In[ ]: df[df[“Message”]==”사진”].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”]==”사진”].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 욕설 순위 # ##### ㅅㅂ # In[ ]: df[(df[“Message”].str.contains(“ㅅㅂ”))|(df[“Message”].str.contains(“시발”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.contains(“ㅅㅂ”))|(df[“Message”].str.contains(“시발”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-10:].plot(kind=”barh”,grid=True); # ##### ㅂㅅ # In[ ]: df[(df[“Message”].str.contains(“ㅂㅅ”))|(df[“Message”].str.contains(“병신”))].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.contains(“ㅂㅅ”))|(df[“Message”].str.contains(“병신”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-10:].plot(kind=”barh”,grid=True); # ##### ㅁㅊ # In[ ]: df[(df[“Message”].str.contains(“ㅁㅊ”))|(df[“Message”].str.contains(“미친”))].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:5] # In[ ]: df[(df[“Message”].str.contains(“ㅁㅊ”))|(df[“Message”].str.contains(“미친”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 감탄 순위 # ##### 우와 # In[ ]: df[df[“Message”].str.contains(“우와”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:5] # In[ ]: df[df[“Message”].str.contains(“우와”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # #### 웃음 순위 # ##### ㅋ # In[ ]: df[df[“Message”].str.contains(“ㅋ”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“ㅋ”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # ##### ㅎ # In[ ]: df[df[“Message”].str.contains(“ㅎ”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“ㅎ”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # #### 눈물 순위 # ##### ㅠ # In[ ]: df[df[“Message”].str.contains(“ㅠ”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“ㅠ”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # ##### ㅜ # In[ ]: df[df[“Message”].str.contains(“ㅜ”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“ㅜ”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # #### 강조 순위 # ##### ! # In[ ]: df[df[“Message”].str.contains(“!”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“!”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # #### 의문 순위 # ##### ? # In[ ]: df[df[“Message”].str.contains(“\?”)].groupby(“User”)[“Message”].count().sort_values(ascending=False)[:10] # In[ ]: df[df[“Message”].str.contains(“\?”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:-1].plot(kind=”barh”,grid=True); # ### 번외 # #### 사과 순위 # In[ ]: df[df[“Message”].str.contains(“미안”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 존나 순위 # In[ ]: df[(df[“Message”].str.contains(“ㅈㄴ”))|(df[“Message”].str.contains(“존나”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 감사 순위 # In[ ]: df[(df[“Message”].str.contains(“ㄱㅅ”))|(df[“Message”].str.contains(“감사”))|(df[“Message”].str.contains(“고마워”))|(df[“Message”].str.contains(“고맙”)) ].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True); # #### 굿 순위 # In[ ]: df[df[“Message”].str.contains(“굿”)].groupby(“User”)[“Message”].count().sort_values(ascending=True)[-11:].plot(kind=”barh”,grid=True);
자유롭게 사용하시고
도움이 되었다면 공감이나 댓글 부탁드립니다!
반응형
[파이썬] 카카오톡 대화 내용 분석 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 Words import re from collections import Counter words = [] open (r ‘C:\Users\카카오톡 대화 내용 텍스트 파일.txt’ ‘r’ , encoding = ‘utf-8’ ) as f: with(r, encoding) as f: for line in f: = re.search(r “^.*?\[\d\d:\d\d\]\s*(.+)$” , line) , line) if m: words.extend(re.split(r “\s+” , m.group( 1 ))) , m.group())) for word, freq in Counter(words).most_common( 10 ): print ( “{0:10s} : {1:3d}” . format (word, 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+.\d\d:\d\d\]\s*.+$” 로 수정해야함
반응형
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 = [‘사진’,’샵검색’,’이모티콘’,’동영상’] # 일반적인 채팅 내용이 아닌 것들은 예외처리를 해주기 위해 리스트에 넣는다 while True: line = chat.readline() #채팅 내용에서 한 줄씩 가져와준다 #print(line) if not line: break #더 가져올 줄이 없으면 break isOk = True #예외처리에 필요한 변수 하나 선언 for item in nonchating: #아이템 안에 들어있는 요소들마다 if item in line: #줄에 그 내용이 있으면 isOk = False #다음 단계로 넘기지 마 break if isOk: #문제가 없으면 Keep Going~ if mh in line: #mh라는 친구가 한 말이면 line = line.split(” : “)[1] #split으로 대화 내용만 추출한다. mhchat.write(line) #mhchat파일에 추출한 대화 내용을 써준다. elif sik in line: line = line.split(” : “)[1] sikchat.write(line) elif ins in line: line = line.split(” : “)[1] inschat.write(line) elif zing in line: line = line.split(” : “)[1] zingchat.write(line) elif me in line: line = line.split(” : “)[1] mechat.write(line) #python에는 스위치문이 없어서 elif나 아니면 딕셔너리를 사용한다고 한다. chat.close() mhchat.close() sikchat.close() inschat.close() zingchat.close() mechat.close() #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 = {} # 단어와 빈도를 저장할 딕셔너리 생성 while True: line = chat_file.readline() if not line: break #읽어오는 부분은 동일하다 lines = line.split(” “) #공백으로 단어를 구분한다 for i in lines: #구분한 단어들을, i = i.replace(‘
‘, ”) #개행문자를 제거한 후 count = freq.get(i, 0) #기존에 저장된 빈도 딕셔너리에서 가져온다 #없는 값이라면(처음 보는 값이라면) 0과 함께 저장 freq[i] = count + 1 #이렇게 하면 i라는 단어의 value는 기존에 존재했다면 +1, 처음이라면 1이 저장된다 frequency_list = sorted(freq.items(), key=operator.itemgetter(1), reverse=True) #저장된 딕셔너리의 값을 빈도수가 높은 순서대로 재정렬 해준다. 낮은 순서대로 하려면 reverse=False ”’ # sorted(dict.items(), key=operator.itemgetter(0)) # key=operator.itemgetter(0)는 정렬하고자 하는 키 값을 0번째 인덱스로 한다. # 딕셔너리 자료형에서 0번째 인덱스는 Key. # 1번째 인자는 Value니까 1로 해야한다. ”’ for words in frequency_list: out_file.write(words[0] + ” : ” + str(words[1]) + ”
“) #정렬된 딕셔너리 자료형을 보기 좋게 {단어} : {빈도}
로 저장한다. chat_file.close() out_file.close() get_freq(mhchat, mhchatfreq) get_freq(sikchat, sikchatfreq) get_freq(inschat, inschatfreq) get_freq(zingchat, zingchatfreq) get_freq(mechat, mechatfreq) #5명 반복
실행 후 결과를 까보도록 하자.
빈도가 높은 단어 순서대로 {단어} : {빈도수} 확인이 가능하다.
저 공백 부분은 예외처리를 해줘야겠다.
아무튼 끝~
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: lines = f.readlines() for line in lines: print(line)
그럼 아까 만든 test_review.txt파일에 있는 글을 라인별로 읽어온 뒤 프린트 해주게 된다.
아까
으로 엔터효과 + print()의 엔터까지 더해짐.
2. 카카오톡 텍스트파일 저장하고 읽기
카카오톡의 원하는 카톡방에 들어가서 ‘더보기 > 대화 내용 > 대화 내보내기’를 클릭한다.
파일명은 간단하게 kakao.txt로 바꾸어준 뒤 작업하는 폴더에 넣어주어야한다.
kakao.txt파일을 파이썬으로 읽어보자.
text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines: text+=line print(text)
3. 데이터 클렌징
‘데이터 클렌징’이란 데이터에서 불완전, 비정확, 관련 없는 부분을 찾아 삭제하거나 수정하는 것을 말한다.
카톡 대화 내용을 워드 클라우드로 만들 것이기 때문에 날짜, 시간, 프로필 이름, 카톡방 이름, 저장한 날짜 등은 없어도 된다.
1) 일단 맨 위 5줄은 필요없기에 6번째 줄부터 들어가도록 한다.
text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: text+=line print(text)
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번을 불러오면 대화 내용만 불러오는 것이다.
text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2] print(text)
4) 카톡 대화를 다운로드받으면 이모티콘은 ‘이모티콘’이라고 한 줄로 나온다. 사진은 ‘사진’이라고 나온다.
이모티콘, 사진, ㅋ, ㅠ, ㅜ 등은 지워버리자.
이모티콘과 사진은
으로 줄바꿈까지 포함되었기에 replace(‘사진
‘, ”)이렇게 적어줘야한다.
아래 코드처럼 적으면 완성!
text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].replace(‘ㅋ’,”).replace(‘ㅠ’,”).replace(‘ㅜ’,”).replace(‘사진
‘,”).replace(‘이모티콘
‘,”).replace(‘삭제된 메시지입니다’,”) print(text)
4. 워드 클라우드 패키지 깔고 폰트 적용하기
1) wordcloud 패키지를 설치한다.
2) 파이썬에서 그림을 그릴 때 한글 폰트를 지원하지 않는 경우가 많아서 직접 폰트 파일이 저장되어 있는 경로를 찾아 넣어주어야한다.
컴퓨터에 있는 폰트 중 고딕 폰트를 출력하여 적용해보자.
ctrl + / 를 눌르서 코드들을 주석처리해주고
고딕 폰트를 검색해서 마음에 드는 것을 고른 뒤 경로를 복사해서 font_path를 써준다.
# text = “” # # with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: # lines = f.readlines() # for line in lines[5:]: # if ‘] [‘ in line: # text+=line.split(‘] ‘)[2].replace(‘ㅋ’,”).replace(‘ㅠ’,”).replace(‘ㅜ’,”).replace(‘사진
‘,”).replace(‘이모티콘
‘,”).replace(‘삭제된 메시지입니다’,”) import matplotlib.font_manager as fm # 이용 가능한 폰트 중 ‘고딕’만 선별 for font in fm.fontManager.ttflist: if ‘Gothic’ in font.name: print(font.name, 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, height=400) wc.generate(text) wc.to_file(“result.png”)
4) 변형하여 원래 코드에 적용시켜보자.
kakao.txt를 읽고 데이터 클렌징을 해서 result_Review.png파일로 워드 클라우드 그림 파일을 만드는 것이다!
from wordcloud import WordCloud text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].replace(‘ㅋ’,”).replace(‘ㅠ’,”).replace(‘ㅜ’,”).replace(‘사진
‘,”).replace(‘이모티콘
‘,”).replace(‘삭제된 메시지입니다’,”) font_path = ‘C:/Windows/Fonts/malgun.ttf’ wc = WordCloud(font_path=font_path, background_color=”white”, width=600, height=400) wc.generate(text) wc.to_file(“result_review.png”)
5) ‘저는’ ‘넹넹’ ‘ㅎ’ ‘저도’ 제가’ 이런 글자는 지워봐야겠다.
5. 원하는 모양의 워드클라우드 만들기
원하는 어떤 모양이든 흰색 배경의이미지가 있느면 만들 수 있다.
일단 흰 배경에 하트 그림이 있는 파일을 다운로드 받고 이름을 love.png로 바꾸어 작업하는 폴더에 넣어주었다.
love.png 0.02MB
1) 마스킹된 워드 클라우드를 만들기 위한 코드를 써준다.
아래의 코드를 변형하여 사용하면 된다.
from PIL import Image import numpy as np mask = np.array(Image.open(‘love.png’)) wc = WordCloud(font_path=font_path, background_color=”white”, mask=mask) wc.generate(text) wc.to_file(“result_review_2.png”)
2) 변형하여 원래 코드에 적용시켜보자.
replace가 많아서 가로로 길어졌다.
아래 코드처럼하면 끝!
from wordcloud import WordCloud from PIL import Image import numpy as np text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() for line in lines[5:]: if ‘] [‘ in line: text+=line.split(‘] ‘)[2].replace(‘ㅋ’,”).replace(‘ㅠ’,”).replace(‘ㅜ’,”).replace(‘사진
‘,”).replace(‘이모티콘
‘,”).replace(‘삭제된 메시지입니다’,”).replace(‘저도’,”).replace(‘ㅎ’,”).replace(‘제가’,”).replace(‘넹’,”).replace(‘저는’,”) font_path = ‘C:/Windows/Fonts/malgun.ttf’ mask = np.array(Image.open(‘love.png’)) wc = WordCloud(font_path=font_path, background_color=”white”, mask = mask) wc.generate(text) wc.to_file(“result_review_2.png”)
6. 전체 코드 다시 살펴보기
from wordcloud import WordCloud from PIL import Image import numpy as np text = “” with open(“kakao.txt”, “r”, encoding=”utf-8″) as f: lines = f.readlines() #6번째 줄부터 읽기 for line in lines[5:]: #시스템 메시지 삭제 if ‘] [‘ in line: #split으로 대화내용만 불러오고 replace로 필요없는 글자 없애기 text+=line.split(‘] ‘)[2].replace(‘ㅋ’,”).replace(‘ㅠ’,”).replace(‘ㅜ’,”).replace(‘사진
‘,”).replace(‘이모티콘
‘,”).replace(‘삭제된 메시지입니다’,”).replace(‘저도’,”).replace(‘ㅎ’,”).replace(‘제가’,”).replace(‘넹’,”).replace(‘저는’,”) #폰트 찾아서 설정 font_path = ‘C:/Windows/Fonts/malgun.ttf’ #love.png라는 파일에 마스킹해줄것임 mask = np.array(Image.open(‘love.png’)) #result_review_2.png파일로 하트모양 워드클라우드 저장 wc = WordCloud(font_path=font_path, background_color=”white”, mask = mask) wc.generate(text) wc.to_file(“result_review_2.png”)
카카오톡 대화 내용을 읽어서 워드 클라우드로 만들기도 끝!!!!
이렇게 스파르타코딩 파이썬 혼자 놀기 수업이 끝났다!
이미지 크롤링, 기사 크롤링, txt파일 읽고 편집해서 워드클라우드로 만들기까지 알차게 배웠다!
배운 내용은 복습하고 발전시켜서 좋은 아이디어를 실현시켜봐야겠다!!
Python 카카오톡 대화 분석기 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # – * – coding: utf – 8 – * – import sys from collections import Counter wordDict = Counter() f = open( ‘talk.txt’ , ‘r’ ) i = open( ‘output.txt’ , ‘w’ ) sentences = f.readlines() for stc in sentences : for word in stc. split () : wordDict[word] + = 1 for word, freq in wordDict.most_common( 80 ): x = word + ‘==’ + str(freq) + ‘
‘ print word, “::::” ,freq i.write( x ) input() Colored by Color Scripter cs
파이썬 3.0 코드이다.
카톡대화 추출한 파일을 이름을 talk.txt로 고치고 실행하면 output.txt 생성되면서 누가 제일 말 많이하는지 어떤말을 많이 하는지 대-강 알수있다.
‘ㅋㅋㅋㅋㅋㅋ’ 가 대부분…ㅠ
키워드에 대한 정보 카카오톡 대화 분석 파이썬
다음은 Bing에서 카카오톡 대화 분석 파이썬 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3)
- 파이썬
- 파이썬프로그래밍
- 파이썬강좌
- 핫딜
- 크롤링
- 카톡알림
핫딜이 #뜨면 #카톡으로 #알림! #파이썬 #프로그래밍 #(1/3)
YouTube에서 카카오톡 대화 분석 파이썬 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 핫딜이 뜨면 카톡으로 알림! 파이썬 프로그래밍 (1/3) | 카카오톡 대화 분석 파이썬, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.