https://park-dev-diary.tistory.com/21
Eventsim 빌드 및 실행하기
이 모든 과정은 MacOS 기준을 작성되었습니다! 1. JAVA 설치하기 터미널에서 java -version 명령어로 설치되었는지 확인 후 없다면 아래 사이트를 참고하여 설치하면 좋을 것 같습니다. https://llighter.gith
park-dev-diary.tistory.com
위 포스팅에서 Eventsim를 빌드하는 과정을 정리해본 적이 있다.
이 Eventsim를 활용하면 수천만개의 음악사이트 유저들의 로그들을 생성할 수 있다.
몇몇 생성된 로그데이터들을 아래와 같은 형식으로 나타난다.
{"ts":1433116803000,"userId":"8932","sessionId":8339,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"paid","itemInSession":11,"location":"Washington-Arlington-Alexandria, DC-VA-MD-WV","userAgent":"\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36\"","lastName":"Adams","firstName":"Jacob","registration":1426041922000,"gender":"M","tag":"test","artist":"Weezer","song":"Island In The Sun","length":199.94077}
{"ts":1433116803000,"userId":"6332","sessionId":996,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":0,"location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","userAgent":"\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\"","lastName":"Harris","firstName":"Dustyn","registration":1432087788000,"gender":"M","tag":"test","artist":"Royksopp","song":"You Don't Have A Clue","length":275.48689}
{"ts":1433116823000,"userId":"10135","sessionId":4799,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"paid","itemInSession":13,"location":"Dallas-Fort Worth-Arlington, TX","userAgent":"\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36\"","lastName":"Noble","firstName":"Jaelyn","registration":1430386583000,"gender":"F","tag":"test","artist":"Coldplay","song":"Yellow","length":268.30322}
위 데이터들을 정리하자면 이렇다.
- ts: 타임스탬프, 이벤트 발생 시간
- userId: 사용자의 고유 식별자.
- sessionId: 세션의 고유 식별자, 하나의 세션은 여러 이벤트
- page: 사용자가 방문한 페이지의 종류
- auth: 사용자의 인증 상태
- method: HTTP 메소드
- status: HTTP 상태 코드
- level: 사용자의 구독 레벨
- itemInSession: 세션 내의 이벤트 순서
- location: 사용자의 지리적 위치
- userAgent: 사용자의 브라우저와 운영체제 정보
- lastName: 사용자의 성
- firstName: 사용자의 이름
- registration: 사용자의 가입 시간을 나타내는 타임스탬프
- gender: 사용자의 성별
- tag: 추가적인 태그 정보
- artist: 재생된 음악의 아티스트
- song: 재생된 음악의 제목
- length: 음악의 길이(초 단위)
위 데이터들을 통해 유의미한 시각화 자료를 만들 수 있을 것 같다.
1. 사용자의 지역별 플레이한 음악 시각화( Map )
location를 통해 각 지역에서 사용자들의 플레이한 음악을 통계내어 시각화 자료로 표현할 수 있을 것 같다.
2. 시간별 유저들의 플레이한 음악 카운트( Bar )
ts와 userId를 통해, 몇시에 가장 많이 음악을 플레이를 하는지에 대해 시각화 자료로 표현해볼 수 있을 것 같다.
3. 가장 많이 들은 아티스트의 여성,남성의 비율( 테이블 )
artist 기준으로 group by하여 그 중 여성과 남성의 비율을 체크하여 이를 시각화 자료로 표현해볼 수 있을 것 같다.
이렇게 작업을 계획하고 시작했다. 그리고 위 데이터들이 시각화되기 위해서는 데이터베이스로 옮겨야 하는 작업이 필요하다.
여기에서 사용된 데이터베이스는 MySQL를 사용하였고, Docker로 이미지로 빌드하였다.
위에서 생성된 로그.json 를 MySQL를 넣기 위해서, Python의 Pandas를 활용해 MySQL에 INSERT 작업을 해주었습니다.
import pandas as pd
from sqlalchemy import create_engine, types
import time
# 시작 시간 기록
start_time = time.time()
# JSON 파일 로드
file_path = 'test.data.json' # JSON 파일 경로
df = pd.read_json(file_path, lines=True)
# 데이터 정제 및 전처리 (예시)
# df['new_column'] = df['existing_column'].apply(some_function) # 새로운 컬럼 추가 또는 변환
# MySQL 데이터베이스 연결
database_username = 'root'
database_password = 'my-secret-pw'
database_ip = 'localhost'
database_name = 'mydatabase'
database_connection = create_engine(f'mysql+pymysql://{database_username}:{database_password}@{database_ip}/{database_name}')
table_name = 'user_song_count'
dtype={
'ts': types.BigInteger,
'userId': types.VARCHAR(length=255),
'sessionId': types.Integer,
'page': types.VARCHAR(length=255),
'auth': types.VARCHAR(length=255),
'method': types.VARCHAR(length=255),
'status': types.Integer,
'level': types.VARCHAR(length=255),
'itemInSession': types.Integer,
'location': types.VARCHAR(length=255),
'userAgent': types.VARCHAR(length=255),
'lastName': types.VARCHAR(length=255),
'firstName': types.VARCHAR(length=255),
'registration': types.BigInteger,
'gender': types.VARCHAR(length=255),
'tag': types.VARCHAR(length=255),
'artist': types.VARCHAR(length=255),
'song': types.VARCHAR(length=255),
'length': types.Float
}
# 데이터베이스에 데이터 저장
try:
df.to_sql(con=database_connection, name=table_name, if_exists='replace', index=False, dtype=dtype) # dtype에 각 컬럼의 데이터 타입 지정
print("Data successfully saved to database.")
except Exception as e:
print(f"Error occurred: {e}")
# 실행 완료 후 경과 시간 출력
end_time = time.time()
print(f"Time taken: {end_time - start_time} seconds")
위 작업으로 Pandas를 활용하여 MySQL에 Eventsim의 데이터들을 마이그레이션(?)이 되었다면,
Superset를 활용하여 시각화작업을 진행해볼 수 있을 것 같습니다.
시각화하는 방법은 다음에 진행해보겠습니다!
'오픈소스' 카테고리의 다른 글
| Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(3) (0) | 2023.12.03 |
|---|---|
| Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(2) (0) | 2023.11.25 |
| SuperSet 설치하면서 발생한 오류들 (1) | 2023.11.12 |
| [Mac] M1 Docker Ubuntu에서 C -m32 실행안될 때 (0) | 2023.11.10 |
| Eventsim 빌드 및 실행하기 (1) | 2023.10.24 |