원쥬
원주는 공부중
원쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Django (0)
    • Vue3 (2)
    • Android (7)
    • Arduino (0)
    • JSPServlet (0)
    • CSS (0)
    • HTML (0)
    • Java (9)
      • Java (9)
      • JavaFestival (0)
    • JavaScript (0)
    • Machine Learning (5)
    • Python (2)
    • Project (1)
      • first_project (1)
      • second_project (0)
      • third_project (0)
    • Tistory (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Python
  • button
  • visible
  • v-model
  • machinelearning
  • while문 예제
  • v-on
  • invisible
  • volley
  • machine learning
  • matplotlib
  • textarea 오른쪽 하단
  • AndroidStudio
  • Ref
  • 안드로이드 스튜디오
  • JSON
  • 영화데이터
  • Vue3
  • API
  • pandas
  • vscode
  • 손글씨데이터
  • v-bind
  • while문
  • 안드로이드
  • 사라지게하기
  • 폰트바꾸기
  • while
  • android
  • Android Stuido

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
원쥬

원주는 공부중

[Machine Learning] Pandas와 Matplotlib을 사용해서 카카오톡 대화 전처리 실습
Machine Learning

[Machine Learning] Pandas와 Matplotlib을 사용해서 카카오톡 대화 전처리 실습

2022. 7. 12. 11:43

머신러닝을 위해 pandas와 matplotlib의 개념을 정립해보자


- 우리반의 대답봇이자 분위기 메이커를 알아보자  
- 6월 27일부터 7월 1일까지 카톡 빈도수 추이 확인해보자  
- 문자열 전처리를 해보자

import pandas as pd # 1,2차원의 테이블 형식 데이터를 다루는 모듈
import matplotlib.pyplot as plt # 시각화 도와주는 모듈
# 한국어 처리 - 글꼴 설정
from matplotlib import rc
rc('font',family = 'Malgun Gothic')
ai_class = pd.DataFrame([['2022-06-27','[원표] Zoom 회의 참가https://us02web.zoom.us/j/8318135592?pwd=L0RJaTA4NFlJZWtXTWJNc215bHM5Zz09'],
                          ['2022-06-27','[운비] 줌 링크 감사합니다~! 오늘은 오전 서버시험 오후 스프링 수업입니다!!!! 제가 오늘 연차라 개발원에 없을거에요! 이슈나 특이사항은 규남쌤께 연락하시면 됩니당ㅎㅎ 오늘 하루도 화이팅 하시고, 저랑은 내일 만나요 우리반💗'],
                         ['2022-06-27','[원표] 원표팀 완료'],
                             ['2022-06-27','[벼리] 벼리팀 큐알 완료요'],
                             ['2022-06-27','[혜미] 혜미팀 큐알 완료했습니다'],
                             ['2022-06-27','[규남] 우담씨..?'],
                             ['2022-06-27','[찬종] 버스에서 내렸대용'],
                             ['2022-06-27','[설아] 선생님 톰캣 서버가 오류나요ㅜㅜ'],
                             ['2022-06-27','[예지] 선생님 저도 톰캣좀 봐주세욥'],
                             ['2022-06-27','[다연] 저두용'],
                             ['2022-06-27','[예지] 쌤 저 또 안돼여.,'],
                             ['2022-06-28','[운비] 좋은 아침입니다! 일찍 오신 분들 줌 링크 공유한번 부탁드리구요~ '],
                             ['2022-06-28','[원표] 줌 로그아웃 되어있어요 ㅠㅠ'],
                             ['2022-06-28','[혜미] 헤미팀 큐알 완했습니다'],
                             ['2022-06-28','[유찬] 유찬팀 큐알 완료했습니다'],
                             ['2022-06-28','[벼리] 벼리팀 큐알완료했습니다'],
                             ['2022-06-28','[문성] 제 자리 봐주세요'],
                             ['2022-06-28','[문성] 나이숴어어어어'],
                             ['2022-06-28','[찬종] 브라보'],
                             ['2022-06-28','[예지] 철민아 그렇게 됐다'],
                             ['2022-06-28','[정민] 안전 매트 준비 해야 긋내 ~~~ '],
                             ['2022-06-29','[원표] Zoom 회의 참가 https://us02web.zoom.us/j/8318135592?pwd=L0RJaTA4NFlJZWtXTWJNc215bHM5Zz09'],
                             ['2022-06-29','[운비] 큐알 감사해요 ~ 좋은하루 되세요 !'],
                             ['2022-06-29','[혜주] 혜주팀 QR완료했습니다'],
                             ['2022-06-29','[유빈] 유빈팀 QR완료했습니다.'],
                             ['2022-06-29','[원표] 원표팀 QR완료했습니다.'],
                             ['2022-06-29','[운비] 철민,원,다연,지연 다 어디가신거죵...'],
                             ['2022-06-29','[문성] 청소~~~'],
                             ['2022-06-29','[지연] 앞이에요..!!'],
                             ['2022-06-30','[원표] Zoom 회의 참가https://us02web.zoom.us/j/8318135592?pwd=L0RJaTA4NFlJZWtXTWJNc215bHM5Zz09'],
                             ['2022-06-30','[운비] (이모티콘)줌 링크 감사합니다~ 오늘도 오전에는 스프링 오후에는 파이썬 수업입니다! '],
                             ['2022-06-30','[운비] 57분인데 큐알이 처참한 이유는 뭐죠 여러분..? 진짜 심장이 쫄깃쫄깃하네요 우리반..'],
                             ['2022-06-30','[예지] 파이썬 한시간 주시나요?'],
                             ['2022-06-30','[혜주] 혜주팀 QR완료했습니다.'],
                             ['2022-06-30','[유빈] 유빈팀 QR완료했습니다.'],
                             ['2022-06-30','[동룡] 아 김우담.....................'],
                             ['2022-06-30','[연석] 병원 간 혜미씨 빼고 연석팀 QR완료입니다'],
                             ['2022-07-01','[원표] Zoom 회의 참가https://us02web.zoom.us/j/8318135592?pwd=L0RJaTA4NFlJZWtXTWJNc215bHM5Zz09회의 ID: 831 813 5592암호: 1e21QB'],
                             ['2022-07-01','[운비] 우리 이제 2달도 안남았네요!  오늘은 오전 스프링,오후 파이썬입니다!(이모티콘)'],
                             ['2022-07-01','[운비] 59분..큐알완료는 올라오지 않고..'],
                             ['2022-07-01','[유빈] 유빈팀 QR완료했습니다.'],
                             ['2022-07-01','[혜주] 혜주팀 QR완료했습니다.'],
                             ['2022-07-01','[문성] 기강이 해이해진거같습니다 청소로 기강 부탁드립니다'],
                             ['2022-07-01','[연석] 연석팀 QR 완료했습니다'],
                             ['2022-07-01','[운비] 와...우담,원,다연 9시에 딱 찍어...멋지다..'],
                             ['2022-07-01','[우담] 저 더 빨리왓는데 까먹고 있던거에요 ..']],
                            columns = ['date','content'])
ai_class

Pandas 기본옵션 설정

- width 길이 최대로 만들기

pd.set_option('display.max_colwidth', None)


info() 로 ai_class의 정보를 확인하기

ai_class.info()

 

 

- 데이터 크기 : 46행, 2열

- Non-Null Count : 결측치를 확인

- Dtype : 데이터타입(형식) 문자열

 

str 키워드 사용 : 판다스 객체 내의 문자열 데이터 자체에 접근하는 키워드

1. data컬럼에 접근하는 세가지 방법 (열 인덱싱)

ai_class['date']
ai_class.loc[:,'date']
ai_class.iloc[:,0]

replace앞에 str 붙여주면 2022가 2023으로 잘 변하는 것을 확인할 수 있다.

ai_class['date'].replace('2022','2023')
ai_class['date'].str.replace('2022','2023')

 

사람별 카톡 빈도수 구하기 

 

 이름을 추출하여 새로운 컬럼을 추가해보기

- str을 사용하여 이름만 추출 해 보자

 

content 컬럼의 1번째부터 3번째까지가 이름에 해당하기 때문에

ai_class['name'] = ai_class['content'].str[1:3]

이름 갯수 세기

ai_class['name'].value_counts()

2번이상 채팅한 사람의 이름 찾기

먼저 불리언 인덱싱을 해주자

ai_class['name'].value_counts() >= 2

ai_class['name'].value_counts()[ai_class['name'].value_counts() >= 2]

제일 톡을 많이 보낸 운비쌤의 데이터 접근해보기

ai_class[ai_class['name'] == '운비']['content']

 

컬럼에 대괄호를 하나 더 붙이면 시리즈 형태가 아닌 df형태로 확인할 수 있다

 

ai_class[ai_class['name'] == '운비'][['content']]

사람별 카톡 빈도수 막대 그래프 그려보기

변수 tmp에

tmp = ai_class['name'].value_counts()[:10] 이친구를 담아준다

( ai_class['name'].value_counts()[ai_class['name'].value_counts() >= 2] 이 친구와 같다)

 

x에 tmp의 index를

y에 tmp의 values를 넣어준다.

x = tmp.index
y = tmp.values

그래프 그리기

 

- 그래프 사이즈 : plt.figure(figsize=(행,열))

- bar형태 그래프 그리기 : plt.bar (x축,y축)

- color 지정하고 싶으면 : plt.bar(x,y, color='brown') 

- x축 이름 정하기 : plt.xlabel('보낸사람')
- y축 이름 정하기 : plt.ylabel('보낸횟수')

- # 전체적인 title 정하기 : plt.title('IoT 카톡')

- plt.show() : 그래프 보기

plt.figure(figsize = (10,5))
plt.bar(x,y, color='brown')
plt.xlabel('보낸사람')
plt.ylabel('보낸횟수')
plt.title('IoT 카톡')

plt.show()

 

연도, 월일을 따로 추출하여 각각의 새로운 컬럼으로 추가해보기

 

- 연도 : year 컬럼에 저장
- 월/일 : m/d 컬럼에 저장

 

# 년도
ai_class['year'] = ai_class['date'].str[0:4]

# 월/일
ai_class['m/d'] = ai_class['date'].str[5:7] + ai_class['date'].str[8:10] # 첫번째 방법 인덱싱 후 더하기
ai_class['m/d'] =  ai_class['date'].str[5:].str.replace('-','') # 두번째 방법 replace 사용

 

일주일간 일자별 카톡 빈도수 그래프 그려보기

y축은 value값의 기준이 아닌 index 기준으로 정렬 해 준다

y = ai_class['m/d'].value_counts().sort_index()
x = y.index

 

선그래프 그려보기

 

- 선그래프 스타일 옵션 설정
- lw : 선의 굵기
- ls : 선의 스타일 변경  (:  --  -. )
- color : 선의 색깔 변경
- marker : 선의 지점들을 나타냄 (=  ^  >  <  *  o  ...)
- ms : 마커의 사이즈 변경
- mfc : 마커의 중간의 컬러가 바뀜
- mec : 마커의 바깥 색이 바뀜

plt.plot(x,y,lw = 2, ls = '-', color='red',marker='*', ms=10, mfc = 'green', mec='green')
plt.title('일자별 카톡 빈도수 추이')
plt.show()

apply이용하여 content 내 불필요 한 문자 제거하기

판다스 객체에 대해서 복잡한 처리가 요구될 때 

-apply()를 사용해 불필요한 문자열을 제거해보자 : 문자열 전처리

 

apply 사용 예시

1. 예시를 위해 문자열을 출력하는 함수 만들기

2. 예시를 위한 데이터프레임 만들기

def str_print(s) :
    """문자열을 출력하는 기능을 함"""
    print(s)
    
    df = pd.DataFrame({'name':['유찬','우담','다연','혜주','원표'],
                    'age':[24,26,27,20,29]})

- df.apply(함수명, axis = 0/1)

 

axis : 방향 (2차원 데이터 일 때 반드시 설정해주어야 함 디폴트 값 0)

0 행방향,열단위처리

1 열방향,행단위처리

 

df.apply(str_print, axis = 0)

df.apply(str_print, axis = 1)

1. axis = 0 

 

2. axis= 1

 

불필요한 문자 : (이모티콘), ㅜ,ㅠ 제거하기

 

- ㅜ,ㅠ,이모티콘을 제거하는 함수를 만들어주자

def txt_prepro(s) :
    if('(이모티콘)' in s) or ('ㅜ' in s) or ('ㅠ' in s) :
        result = s.replace('(이모티콘)','').replace('ㅜ','').replace('ㅠ','').strip()
        return result
    else :
        return s

전처리한 데이터 content에 덮어 담아주기

ai_class['content'] = ai_class['content'].apply(txt_prepro)

사라진 것을 확인할 수 있다

 

인덱싱을 이용하여 컬럼 순서 정리하기

ai_class= ai_class[['date','year','m/d','name','content']]

 

저작자표시

'Machine Learning' 카테고리의 다른 글

[Machine Learning] Colab사용 OpenCV 실습  (0) 2022.07.20
[Machine Learning] 손글씨데이터 활용 분류 실습  (0) 2022.07.20
[Machine Learning] 타이타닉 데이터 활용하여 생존/사망 분류 실습02  (0) 2022.07.19
[Machine Learning] 타이타닉 데이터 활용하여 생존/사망 분류 실습01  (0) 2022.07.19
    원쥬
    원쥬
    Git : https://github.com/wonjuju/

    티스토리툴바