머신러닝을 위해 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 |