ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스파르타]파이썬 데이터 분석 - 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년 전에는 이렇게 데이터 분석이 상용화되지 않았을 때니 훨씬 복잡하고 어려운 과정을 거쳤겠지만 어쨌든 나도 만들 수 있다는 것에 만족감을 느낀다.

    댓글