-
[스파르타]파이썬 데이터 분석 - 3주차(#wordcloud, pivot table, 히트맵)개발 일지/파이썬 데이터 분석 2022. 1. 5. 10:54
새로 알게 된 내용😁
1. 데이터 인덱스명 변경하기
# user_id를 count로 변경 count = lecture.rename(columns = {'user_id':'count'})
2. wordcloud 만들기
많은 데이터 중 특정 키워드가 얼마나 많이 사용되는지 직관적으로 나타내주 것이다.
1) wordcloud 설치 후 라이브러리 불러오기
# wordcloud 설치 conda install -c conda-forge wordcloud # wordcloud 라이브러리 불러오기 import numpy as np from PIL import Image from wordcloud import WordCloud import matplotlib.pyplot as plt
2) 데이터 불러오기 - 글자 외 특수 문자 제외 처리
# utf-8로 인코딩해서 읽기모드로 데이터 불러오기 text = open('./data/mysong.txt', 'r', encoding='utf-8-sig') # 개행문자를 띄어스기로 대체하기 result = text.read().replace('\n', " ") # 데이터에서 특수 기호 제거하기 import re pattern = '[^\w\s]' text = re.sub(pattern=pattern, repl='', string=result)
3) 데이터 한글 설정하기
# 데이터 한글 설정하기 import matplotlib.font_manager as fm # "Gothic" 들어간 폰트 경로 찾기 for f in fm.fontManager.ttflist: if 'Gothic' in f.name: print(f.fname) # 여러 폰트 경로 중 원하는 폰트 경로 설정하기 font_path = 'C:\Windows\Fonts\malgun.ttf'
4) 원하는 모양대로 wordcloud 그리기
# 이미지 불러오기 mask = np.array(Image.open('./data/sparta.png')) # wordcloud 그리기 wc = WordCloud(font_path=font_path, background_color="white", mask=mask) wc.generate(text) f = plt.figure(figsize=(50,50)) plt.imshow(wc, interpolation='bilinear') plt.title('Sparta Cloud', size=40) plt.axis("off") plt.show() # 이미지 저장하기 f.savefig('./data/wordcloud.png')
3. 시간, 날짜 데이터 전처리하기
%Y 연도 %m 월 %d 일 %H 시 %M 분 %S 초 %f 소숫점 T 띄어쓰기
# 문자열로 된 시간 정보 데이터를 실제 시간 데이터로 바꿔주기 format='%Y-%m-%dT%H:%M:%S.%f' # 컬럼에 추가하기 data['date_time'] = pd.to_datetime(data['date_time'], format=format)
월화수목금토일 순서대로 데이터 정렬하기
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] data = data.agg(weeks)
시간/날짜 데이터 추출하기
data['date_time_hour'] = data['date_time'].dt.hour data['date_time_weekday'] = data['date_time'].dt.day_name()
※ date_time에 {2021-12-01 18:21:05.247} 형식의 데이터가 담겨있다고 하면,
.dt.hour를 통해 {18}이 .dt.day_name()을 통해 {Wednesday}가 추출되서 각각 "date_time_hour", "date_time_weekday"라는 column에 담기게 된다.4. pivot table 만들기
행에 요일, 열에 시간을 넣어서 요일마다 시간별로 수강생 수를 구하고자 한다.
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] pivot_table = pd.pivot_table(data, values='student_count', index = ['date_time_weekday'], columns = ['date_time_hour'], aggfunc="count").agg(weeks)
※ data 분석할 데이터, index 행, columns 열, aggfunc 분석방법을 뜻한다.
위에서는 'student_count'를 요일마다 시간별로 count하는 분석 방법을 사용했고, weeks로 index 순서를 정렬시켰다.5. 히트맵 그리기
X축과 Y축을 변수로 해서 균일한 블록으로 나누어 각 칸의 수치나 빈도를 색을 통해 시각적으로 나타내는 격자형 차트이다.
plt.figure(figsize=(14,5)) plt.pcolor(pivot_table) # X축, Y축 항목 설정 plt.xticks(np.arange(0.5, len(pivot_table.columns), 1), pivot_table.columns) plt.yticks(np.arange(0.5, len(pivot_table.index), 1), pivot_table.index) plt.title('요일별 종료 시간 히트맵') plt.xlabel('시간') plt.ylabel('요일') plt.colorbar() plt.show()
※ np.ragane(눈금 위치, 눈금 갯수, 눈금 간격)
개발 업무 내용📑
최애곡 가사 wordcloud 만들기
이슈😲
최애곡 가사 wordcloud를 만드는 것은 사실 저기 비어져 있는 형태로 데이터를 넣고 싶었던 거라 내가 목표했던 것에는 달성하지 못한 채 숙제를 낸 상태라 나중에 구글링을 통해서 다시 한 번해봐야 될 것 같다.
마무리 소감😉
예전에 애정하는 프로그램인 무한도전에 빅데이터 전문가가 나와서 무한도전 관련 키워드로 wordcloud를 만들어서 보여준 적이 있었다. 물론, 그 때는 그걸 wordcloud라고 부르는건지도 몰랐지만 방송한 지 10년이 넘었는데도 여전히 뇌리 속에 선명히 박혀있었어서 wordcloud가 나왔을 때 내적 친밀감을 느꼈다.
당시에는 아주 어렵고 복잡한 과정을 거치는 줄 알았는데, 막상 해보니 생각보다 간단해서 놀라기도했다. 물론, 10년 전에는 이렇게 데이터 분석이 상용화되지 않았을 때니 훨씬 복잡하고 어려운 과정을 거쳤겠지만 어쨌든 나도 만들 수 있다는 것에 만족감을 느낀다.'개발 일지 > 파이썬 데이터 분석' 카테고리의 다른 글
[스파르타]파이썬 데이터 분석 - 4주차(#주식 데이터, heatmap, 데이터 스튜디오) (0) 2022.01.06 [스파르타]파이썬 데이터 분석 - 2주차(#folium) (0) 2022.01.04 [스파르타]파이썬 데이터 분석 - 1주차(#파이썬, 주피터노트북, pandas, matplotlib) (0) 2022.01.03