전체 글 76

1.프로젝트 개요

*프로젝트명 : 날씨에 대한 실시간 데이터 분석 프로젝트 계기: 『엘라스틱 스택 개발부터 운영까지』 책을 통해서 알게 된 ELK stack에 대한 개념과 책에 있던 실습내용들을 종합해서 파이프라인을 만들어보면서 나의 ELK stack에 대한 이해와 활용 능력을 향상시키고 싶어서 프로젝트를 시작하게 되었다. 주제 선정 이유 : 처음에는 망사용료에 대한 사람들의 찬반의견에 대해서 분석해보려고 했으나 실시간 데이터가 수집되지 않아서 현재 환절기이기도 하며 변덕스러운 날씨에 대한 사람들의 실시간 트윗을 분석해보고자 한다. *파이프라인 구성 수집 - twitter api -> python -> filebeat 변환, 전송 - logstash 저장, 인덱싱 - elasticsearch 시각화 - kibana 인프라..

Elastic search 쿼리문

* Elastic search의 검색은 크게 쿼리 컨텍스트와 필터 컨텍스트로 나누어진다. 이 둘의 차이점은 쿼리 컨텍스트는 정확하게 일치하는 목록을 검색하는 것이고 필터 컨텍스트는 검색조건에 맞는지 아닌지에 대해서만 표현하는 검색 방법이다. 또한 쿼리 컨텍스트는 유사도를 기준으로 더 정확한 결과를 먼저 알려준다. GET tmdb_5000_movie3/_search # 쿼리 컨텍스트 예시 { "query": { "match": { "category": "movie" } } } GET tmdb_5000_movie3/_search #필터 컨텍스트 예시 { "query": { "bool": { "filter": {"term": { "category": "movie" } } } } } 위의 예시를 보면 필드 컨텍..

프로그래밍/ELK 2022.09.23

[프로그래머스 LV2]두 큐 합 같게 만들기

[LV2] 두 큐 합 같게 만들기 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다 www.programmers.co.kr 문제 해설 이번 문제는 문제에서 설명하는 것처럼 큐를 사용해서 서로의 크기가 같아질 때까지 삽입과 추출하는 반복문을 돌려서 두 큐의 합이 같아질지 판별하면 되는데 여기서 중요한 점은 판별을 할 때의 범위를 정해야 한다. 이때 이 범위는 큐의 길이의 3배만큼 돌리게 되면 모든 경우의 수를 반복해볼 수 있기 때문에 ..

Elastic Search 기본정리

1. 엘라스틱서치 요청과 응답 기본적으로 elastic search는 REST API를 사용한다 REST API는 http의 장점을 이용해서 리소스를 주고받는 형태이고 다음과 같은 메소드를 사용해 CRUD 작업을 진행한다 POST 리소스 추가 GET 리소스 조회 PUT 리소스 수정 DELETE 리소스 삭제 2. 시스템 상태 확인 하는법 위와 같이 시스템의 상태를 확인하는 방법으로는 cat API를 사용하면 되며 GET _cat을 사용해서 호출할 수 있다. 만약 내부 인덱스의 목록을 확인해보고 싶다면 GET _cat/indices?v를 요청하면 된다. 인덱스와 도큐먼트 도큐먼트란 엘라스틱에서 데이터가 저장되는 기본 단위로 JSON형태이다. { "name": "Jang", "age": 23, "gender"..

프로그래밍/ELK 2022.09.07

[DOCKER] ELK Stack 환경 구축하기

최근에 ELK 파이프라인을 구축해보기 위해서 책으로 공부하기 시작했다. 우선 실습을 하기 위해서 Docker를 사용하여 환경을 구축한 것을 포스팅 하려고한다. 1. docker-compose git clone으로 가져오기 git clone https://github.com/deviantony/docker-elk.git 위의 저장소를 클론하게 되면 가장 최신버전의 ELK를 clone 해오게 되는데 혹시 나처럼 elastic7 버전으로 실습환경을 구축하고 싶은 사람이라면 아래의 코드를 사용하면 될 것 같다. git clone -b release-7.x https://github.com/deviantony/docker-elk 혹시라도 다른버전을 사용하고 싶은 사람은 깃허브 저장소에 가게되면 다양한 버전의 브런..

프로그래밍/ELK 2022.09.06

[프로그래머스 LV2] 더 맵게

[LV2] 더 맵게 문제링크 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 www.programmers.co.kr 문제 해설 이번 문제는 heapq을 사용하여 최솟값을 항상 인덱스 0번에 위치시켜 조건에 맞는 식에 대입하여 다시 heapq에 넣어준 후 비교하면 되는 문제이다. import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) # 주어지는 맵기 리스트 heapq형태로 변환 while scoville[0] < K: tmp= heapq.heappop(scoville)+heapq.heappop(s..

[프로그래머스LV2] 거리두기 확인하기

[LV2] 거리두기 확인하기 문제링크 개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼 아래와 같은 규칙으로 대기실에 거리를 www.programmers.co.kr 문제 해설 이 문제는 전형적인 탐색문제이며 bfs를 활용하면 풀 수 있는 문제이다. 다만 여기서 조건은 사람이 있는 위치에서 +2칸 이내에 사람이 있으면 안된다는 것이다 이것을 활용한 코드는 다음과 같다. from collections import deque dx=[-1,1,0,0] dy=[0,0,-1,1] def bfs(loc,place): que=deque([loc]) #초기값 visited=[[False]*5 for _ in rang..

[Python] selenium multiprocessing 병렬 처리 방법

최근에 팀 토이 프로젝트를 하면서 크롤링을 하고 있는데 크롤링해야 하는 데이터 양이 많다 보니 데이터 수집하는데 시간이 너무 오래 걸리는 것을 느꼈고 방법이 없을까 하다가 문득 머릿속에 병렬 처리 방법이 떠오르게 되었다. 그래서 바로 시도해봤고 나름 성공적으로 되어서 혹시 나와 같은 사람들이 있다면 python multiprocessing을 사용하여 병렬 처리를 해보자! *예제 코드 import multiprocessing def crawling(s,e,lists): divide=[(1,6),(6,11),(11,16),(16,21),(21,26),(26,31),(31,36)] manager=multiprocessing.Manager() lists=manager.list() process=[] for st..

[Python] pandas or pyspark to_csv 테이블 깨짐현상 해결법

현재 팀 토이 프로젝트를 진행하면서 크롤링한 데이터를 데이터 테이블로 만든 후 CSV 파일로 export한 후 다시 불러와보니 아래 사진과 같은 현상이 발생했다. 사진을 보면 테이블이 밀려 깨진 것들을 볼 수 있다. 내가 찾은 문제점은 총 2개이다 기본적으로 csv는 구분자가 , 로 되어있는데 이 테이블의 review부분에 , 이 포함되어 있어서 밀렸다고 생각한다. 나는 pyspark을 사용했기 때문에 이 문제를 해결하는 코드는 다음과 같다. data_df.coalesce(1).write.option("sep","|")\ .option("header","true")\ .csv('파일경로') 2. review 데이터에 개행문자들이 많이 포함되어 있었던 게 문제가 되었던 것 같다. 이런 문제는 정규표현식을 ..

[프로그래머스LV2] 게임 맵 최단거리

[LV2] 게임 맵 최단거리 ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다. www.programmers.co.kr 문제해설 이번문제는 최단거리를 구하는 문제이며 이런 문제의 경우가 대표적인 BFS 문제라고 볼 수 있다. bfs로 풀기 위해서는 각각의 위치를 좌표화 하여 움직일 수 있는부분의 시작지점에서 부터의 거리를 현재 위치 거리의 +1을 해주면 풀 수 있고 deque를 사용하여 현재 움직일 수 있는 위치를 확인하면 된다. from collections import deque def solution(maps): answer = 0 n=len(maps) #맵의 세로길이 확인 m=len..