python basic(2021-07-22)

Hyunjeong Lee·2021년 7월 22일
0

1.실제데이터 보는 방법
2.가설을 세우는 방법
3.데이터에 기반해서 문제를 해결하는 방법

[문제1] 수강데이터 불러오기 & 살펴보기

라이브러리 불러오기
import pandas as pd

분석할 데이터 불러오기
enroll = pd.read_csv('./data/enrolleds_detail.csv')
enroll
enroll_detail = enroll.groupby('lecture_id')['user_id'].count()
enroll_detail

데이터 살펴보기
enroll_detail = enroll.groupby('lecture_id')['user_id'].count()
enroll_detail

[문제1] 어려운 지점 파악하기

그래프 그리기
import matplotlib.pyplot as plt

Apple은 'AppleGothic', Windows는 'Malgun Gothic'을 추천
plt.rcParams['font.family'] = "Malgun Gothic"

plt.figure(figsize= (22,5)) # 그래프의 사이즈
plt.bar(enroll_detail.index,enroll_detail)
plt.title('강의에 따른 수강완료 수의 합계') # 그래프의 제목
plt.xticks(rotation=90)
plt.show() # 그래프 그리기

강의 제목 불러오기
lectures = pd.read_csv('./data/lectures.csv')
lectures.tail(5)

강의제목과 연결하기
#인덱스 리인덱싱 작업
lecture_count = pd.DataFrame(enroll_detail)
lecture_count = lecture_count.reset_index()
lecture_count = lecture_count.rename(columns = {'user_id':'count'})
lecture_count.tail(5)

lectures = lectures.set_index('lecture_id')
full_lecture = lecture_count.join(lectures, on='lecture_id')
full_lecture.tail(5)

강의 제목과 연결된 바 그래프 그리기
plt.figure(figsize=(20, 5))
plt.bar(full_lecture['title'], full_lecture['count'])
plt.title('강의에 따른 수강완료 수의 합계') # 그래프의 제목
plt.xlabel('강의명')
plt.xticks(rotation=90)
plt.show()

[문제2] 강의자막으로 워드클라우드 만들기

라이브러리 불러오기
워드클라우드 설치하기
conda install -c conda-forge wordcloud
라이브러리 불러오기
import numpy as np
from PIL import Image
from wordcloud import WordCloud
import matplotlib.pyplot as plt

데이터 불러오기
result = ""

for number in range(1,15):
index = '{:02d}'.format(number)
filename = "Sequence_" +index + ".txt"
print(filename)
text = open("./data/"+filename, 'r', encoding='utf-8-sig')
result += text.read().replace("\n", " ")

import re

pattern = '[^\w\s]' # 특수 기호 제거
text = re.sub(pattern=pattern, repl='', string=result)
text

[문제2]나만의 워드 클라우드 만들기

한글설정
import matplotlib.font_manager as fm

#이용 가능한 폰트 중 '고딕'만 선별
for f in fm.fontManager.ttflist:
if 'Gothic' in f.name:
print(f.fname)

검색결과 이용
font_path = '/System/Library/Fonts/Supplemental/AppleGothic.ttf'
wc = WordCloud(font_path=font_path, background_color="white")
wc.generate(text)
plt.figure(figsize=(50,50))
plt.axis("off")
plt.imshow(wc)
plt.show()

  • font_path : 한글 폰트 설정 경로
  • background_color : 배경색상

나만의 워드 클라우드 만들기
#Generate a word cloud image
mask = np.array(Image.open('./data/sparta.png'))
wc = WordCloud(font_path=font_path, background_color="white", mask=mask)
wc.generate(text)

f = plt.figure(figsize=(50,50))
f.add_subplot(1,2, 1)
plt.imshow(mask, cmap=plt.cm.gray)
plt.title('Original Stencil', size=40)
plt.axis("off")
f.add_subplot(1,2, 2)
plt.imshow(wc, interpolation='bilinear')
plt.title('Sparta Cloud', size=40)
plt.axis("off")
plt.show()

워드클라우드 이미지 저장
mask = np.array(Image.open('./data/sparta.png'))
wc = WordCloud(font_path='/System/Library/Fonts/Supplemental/AppleGothic.ttf', background_color="white", mask=mask)
wc.generate(text)

f = plt.figure(figsize=(50,50))
plt.imshow(wc, interpolation='bilinear')
plt.title('Twitter Generated Cloud', size=40)
plt.axis("off")
plt.show()
f.savefig('./data/wordcloud_ex1.png')

[문제3]날짜데이터 전처리하기

시간데이터 포맷 바꾸고 쪼개주기
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['done_date_time'] = pd.to_datetime(sparta_data['done_date'], format=format)

sparta_data['done_date_time_weekday'] = sparta_data['done_date_time'].dt.day_name()

요일별 수강완료 수강생 수 전처리
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('done_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)

그래프
plt.figure(figsize=(10,5))
plt.bar(weekdata.index, weekdata)
plt.title('요일별 수강 완료 수강생 수')
plt.xlabel('요일')
plt.ylabel('수강생(명)')
plt.xticks(rotation=90)
plt.show()

시간데이터 추출
sparta_data['done_date_time_hour'] = sparta_data['done_date_time'].dt.hour

시간별 수강완료 수강생 수 전처리
hourdata = sparta_data.groupby('done_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()

라인그래프
plt.figure(figsize=(10,5))
plt.plot(hourdata.index, hourdata)
plt.title('시간별 수강 완료 사용자 수')
plt.xlabel('시간')
plt.ylabel('사용자(명)')
plt.xticks(np.arange(24))
plt.show()

요일별 종료시간

피벗테이블
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['done_date_time_weekday'],
columns=['done_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table

pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, margins_name='All')
data: 분석할 데이터
values: 분석할 수
index: 행 인덱스
columns: 열 인덱스
aggfunc: 분석 방법

히트맵
plt.figure(figsize=(14,5))
plt.pcolor(sparta_data_pivot_table)
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
plt.title('요일별 종료 시간 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.colorbar()
plt.show()

요일별 비교(월,화)
sparta_data_monday = sparta_data[sparta_data['done_date_time_weekday']== 'Monday']
sparta_data_monday = sparta_data_monday.groupby('done_date_time_hour').count()['user_id']

sparta_data_tuesday = sparta_data[sparta_data['done_date_time_weekday']== 'Tuesday']
sparta_data_tuesday = sparta_data_tuesday.groupby('done_date_time_hour').count()['user_id']

import matplotlib.pyplot as plt

plt.figure(figsize=(10,5))
plt.plot(sparta_data_monday.index, sparta_data_monday)
plt.plot(sparta_data_tuesday.index, sparta_data_tuesday)
plt.title('시간별 수강 완료자 수')
plt.xticks(np.arange(24))

0개의 댓글