본문 바로가기
IT, Software/Python

Python 데이터 분석 콘텐츠 추천 - json parser로 로그파싱하기

by 기타마을이장 2020. 10. 5.

Python을 활용해서 오랜만에 코드를 짜야할일이 생겨 정말 오랜만에 재미난 공부(?)를 해봤다.

우선 현재의 주업무는 코딩이 아니라서 짬짬이 진행했던 내용들이라 곧 까먹을거같아

이번에 여기저기 찾아가며 진행한 것들을 정리해둔다는 것도 있다.

이번에 하려는 프로젝트는 아래와 같이 계획했다.

 

1.

서버내 여러 사용자들이 페이지를 방문한 기록들을 json형태로 저장해둔 로그파일에서 파싱한 뒤

 

2.

각 사용자들별로 몇 번의 방문이 있었는지, 머문 시간은 얼마나 되는지를 Pandas로 데이터화한 뒤

1차 가공된 데이터를 기반으로 유사성향의 사용자들을 분류하기 위한 클러스터링을 수행하고자 한다.

 

3.

그리고 특정 사용자가 접속했을때, 해당 사용자가 속해 있는 고객군 내에서 다른 사용자들이 이용한 콘텐츠를

추천해주려는 것이 최족 목표이다.


 

그 첫단계로 서버내 저장된 json 로그 파일들을 죄다 읽어서 필요한 부분만 파싱하여

Pandas DataFrame에 저장할 수 있는 포멧으로 변경하려 한다.

그러려면 "Python 으로 json 파일을 파싱하는 방법" 과 "Pandas 사용방법" 두가지 기술을 사전 스터디해야 한다.

 

## 디렉토리안에 모든 로그파일 읽어오기

 

먼저 서버내 저장된 로그파일 폴더안에서 파일들을 모두 차례대로 읽어와서 파싱하려 한다.

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
for root, dirs, files in os.walk('folder/path'):
    for fname in files:
        full_fname = os.path.join(root, fname)
        print(full_fname)

 

 

python-디렉토리내 모든 파일읽기

python-디렉토리내 모든 파일읽기. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

위와 같이 수행한 결과는 다음과 같다.


## json Parsing 하기

디렉토리의 전체 로그파일을 가져왔으면 그 파일을 열어서 json parsing 후 필요한 정보만 수집했다.

보통은 파일이 통으로 json 파일형태이겠지만

내가 분석하려던 서버의 로그는 사용자 접속이력별로 라인하나에 json 한개를 쌓는 구조이고,

이렇게 하루동안 사용자들이 접속한 이력을 수만 라인이 쌓하 일일 로그가 저장되어 있는 형태였다.

 

데이터 샘플은 아래와 같다

[{"referer": "retrieveEpisodeList.view", "channelfg": "web", "ip": "125.180.94.107", "categoryCode": "CT004", "userNo": "227390", "pageNo": "", "timestamp": "20200601000001" }]
[{"referer": "detail.view", "channelfg": "web", "ip": "58.123.91.45", ", "categoryCode": "", "userNo": "0", "pageNo": "", "timestamp": "20200601000004" }]
[{"referer": "list.view", "channelfg": "web", "ip": "58.123.91.45", ", "categoryCode": "", "userNo": "0", "pageNo": "", "timestamp": "20200601000004" }]
[{"referer": "list.view", "channelfg": "web", "ip": "58.123.91.45", ", "categoryCode": "", "userNo": "0", "pageNo": "", "timestamp": "20200601000004" }]
[{"referer": "retrieveMyList.view", "channelfg": "web", "ip": "125.180.94.107", "categoryCode": "", "userNo": "227390", "pageNo": "", "timestamp": "20200601000004" }]


따라서, 아래와 같이 라인별 json 파싱을 진행한다.

import json

for l in log_file.readlines():
    d = json.loads(l)

 

)​그리고 파싱된 것중 내가 필요한 정보만 얻으려면 dictionary key로 값을 가져오면 된다.

addr = d["addr"]

## Pandas 사용 시작하기

 

Python으로 뭔가 상용프로젝트를 수행한지는 너무 오래되어 처음부터 공부를 해야했다.

그리고 최근 데이터 분석에 가장 많이 사용되고 있는 Pandas에 대해 스터디를 해본 결과

Pandas라는 모듈의 파워풀함에 다시한번 놀라움을 느꼇다.

 

다만 초기 진입장벽은 존재한다.

우선 완전 초보이기에 한글로 작성된 Tutorial 형태의 설명자료로 스터디를 시작했다.

 

예제로 배우는 파이썬 프로그래밍 - pandas 데이타 분석

1. pandas 개요 pandas는 데이타 분석(Data Analysis)을 위해 널리 사용되는 파이썬 라이브러리 패키지이다. pandas는 과학용 파이썬 배포판인 아나콘다(Anaconda)에 기본적으로 제공되지만, 아나콘다를 사용

pythonstudy.xyz

그리고 구글링을 통해 다양한 Pandas Example Code들을 따라하면서 어느정도 스킬을 향상시킬 수 있었다.

 

최종적으로는 Pandas 공식 Document를 심도있게 살펴보는게 필요하다.

 

API reference — pandas 1.1.2 documentation

This page gives an overview of all public pandas objects, functions and methods. All classes and functions exposed in pandas.* namespace are public. Some subpackages are public which include pandas.errors, pandas.plotting, and pandas.testing. Public functi

pandas.pydata.org

 

어느정도 Pandas에 대한 스터디를 완료했으니 위에서 json파일을 파싱한 데이터들 중 필요한 정보들을

Pandas의 DataFrame에 저장해서 원천 데이터를 만들어 보려고 한다.

Multi Index를 가진 사용자별 방문회수와 머문 시간을 저장하는 데이터를 완성했다.

 

Pandas를 이용한 데이터 완성방법은 다음 포스팅에서 계속

반응형

댓글