투빅스 11기&12기 7주차 알고리즘(2) - 김효은

by 김효은 posted Sep 17, 2019
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

+ - Up Down Comment Print

첨부파일 : week7_2_김효은.html



0. 데이터 불러오기


1
2
3
4
5
6
7
8
import pandas as pd
from tqdm import tqdm, tqdm_notebook
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
 
df = pd.read_csv('study_room_HMS.csv')
del df['Unnamed: 0']
 
cs




1. 이용자 dict 구하기

1
2
3
4
5
6
7
8
9
10
11
12
len_user = len(user_dict)
 
user_dict = {}
cnt = 0
 
for hashed in tqdm(df['hashed']):
    for user in hashed.split(','):
        if user in user_dict:
            continue
        user_dict[user] = cnt
        cnt += 1
 
cs




2. 이용횟수 구하기

1
2
3
4
5
freq = [0* len(user_dict)
 
for hashed in tqdm(df['hashed']):
    for user in hashed.split(','):
        freq[user_dict[user]] += 1

cs




3. 총 이용일수, 평균 이용일 수 구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 이용일수 구하기
 
df['study_day'= df['study_end_day'- df['study_start_day'+ 1
use_days = [0* len_user
 
# hashed를 index와 같이 받은 후
# 이 index를 df.study_day에 접근하는 데 사용
for idx, hashed in tqdm(enumerate(df['hashed'])):
    for user in hashed.split(','):
        use_days[user_dict[user]] += df.study_day[idx]
 
# 한 번 당 평균 이용일수 (= 이용일수/이용횟수)
 
average_use_days = [0]*len_user
 
for i in range(len_user):
    average_use_days[i] = use_days[i] / freq[i]

cs




4. 평균 함께 사용한 인원 구하기

1
2
3
4
5
6
7
8
9
10
11
12
# 평균적으로 함께 사용한 인원
 
with_people = [0]*len_user
average_with_people = [0]*len_user
 
for idx, hashed in tqdm(enumerate(df['hashed'])):
    people = len(hashed.split(','))
    for user in hashed.split(','):
        with_people[user_dict[user]] += people
        
for i in range(len_user):
    average_with_people[i] = with_people[i] / freq[i]

cs




5. 총이용시간, 평균이용시간 구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 문자를 datetime으로 만들기
# ms 단위는 제외하였다
study_start_time2 = df.study_start_time.apply(lambda x:datetime.strptime(x[:-4], "%H:%M:%S"))
study_end_time2   = df.study_end_time.apply(lambda x:datetime.strptime(x[:-4], "%H:%M:%S"))
 
# df에서 행 별로 대여시간 구하기
 
study_day_list = [0]*df.shape[0]
for index, study_day in tqdm(enumerate(df.study_day)):
    # 하루만 이용한 경우 study_end_time - study_start_time으로 이용시간 계산
    if study_day == 1:
        study_day_list[index] = study_end_time2[index] - study_start_time2[index]
    # 이틀이상 이용한 경우 이용일자를 고려하여 이용시간 계산
    else:
        study_day_list[index] = study_end_time2[index] + timedelta(days=(study_day-1)) - study_start_time2[index]
        
# df에 새로운 feature로 추가
df['study_time'= study_day_list
 
# 잘 계산되었는지 확인해보자
df.head()
cs



1.JPG










1
2
# 이용일자가 이틀 이상인 경우도 잘 계산되었다.
df.loc[[1491, 1519]]
cs


2.JPG


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# user_id 별 총이용시간 구하기
 
study_time = [timedelta(0)] * len_user
for idx, hashed in tqdm(enumerate(df['hashed'])):
    # 행마다 study_time 저장
    time = df.study_time[idx]
    # 그 행에 속한 hashed 각각 study_time 누적
    for user in hashed.split(','):
        study_time[user_dict[user]] += time
 
# 평균 이용 시간 = 총 이용시간 / 총 이용횟수
 
average_study_time = [0* len_user
for i in range(len_user):
    average_study_time[i] = study_time[i]/freq[i]
cs




6. 마지막 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 각 사람별로 파생변수 만든 것을 pd.DataFrame으로 만들기
 
user_list = list(user_dict.keys())
 
df2 = pd.DataFrame({
        'user_id':user_list,
        'total_use_freq':freq,
        'total_use_days':use_days,
        'average_use_days':average_use_days,
        'average_with_people':average_with_people,
        'total_study_time':study_time,
        'average_study_time':average_study_time
})
 
df2.head(30)
cs


3.JPG



Articles

2 3 4 5 6 7 8 9 10 11

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5