728x90
728x90
728x90
728x90

[Elastic Search란?]

간단히 말하면, 다양한 데이터를 위한 검색 엔진이다. 

검색엔진이란 무엇일까? 우리가 흔하게 알고 있는 관계형DB와 비교해서 생각해보자.

관계형 DB는 테이블 안에 행, 열에 맞게 데이터를 쪼개서 넣고 쿼리문으로 데이터를 선별한다.

이와 비교해서 검색엔진은 보다 유연하게 데이터를 넣고, 검색할 수 있다. 

 

[Elastic Search의 필요성]

시스템을 운영하다 보면, 운영 안정성 향상 및 이슈 대응을 위해 로그를 수집하고 분석해야 하는 일이 잦다.  

그러나 발생하는 로그는 비정형 데이터인 경우가 많으며, 그 양도 많아 많은 양의 로그에서 인사이트를 도출하는 것이 필요한데

이 때 유용하게 사용할 수 있는 것이 Elastic Search 툴이다. 

 

[ELK Stack이란?]

 

- Elasticserach : Storage 역할 - 데이터 저장/분석/관리

- Logstash : Data Processing 역할 - 서버 내 로그, 웹 등 다양한 소스에서 데이터 수집하여 입력, 데이터 변환/구조 구척, 데이터 출력/송신

- Kibana : Visualize 역할 - Dashboard를 이용한 탐색

[Elastic Search의 핵심 기능]

=> Inverted Index(역색인) & 형태소 분석 

: 빠르게 문서 탐색 가능

* 역색인의 단점 : 대다수의 문서에서 등장하는 단어라면, 오히려 속도가 떨어짐 -> Stopword(불용어)로 등록하면 인덱스에서도 제겋하고 검색어에 등장해도 무시하도록 되어 있음. 

 

역색인 참고 (https://www.skyer9.pe.kr/wordpress/?p=1002)

 

 

[RDBMS 와 Elastic serach 비교]

1. 문법

구분 Elastic search RDBMS
문법 GET SELECT
PUT INSERT
POST UPDATE, SELECT
DELETE DELETE
HEAD(인덱스 정보 확인)  
     
용어 인덱스(Index) 데이터베이스(DB)
샤드(Shard) 파티션(Partition)
타입(Type) 테이블(Table)
도큐먼트
필드
Mapping 스키마
Query DSL SQL

참고 1) 6.0이하 버전의 엘라스틱서치에서는 하나의 인덱스 내부 기능에 따라 데이터 분류 후에 여러 개의 타입을 만들어 사용했지만 현재는 하나의 인덱스에 하나의 타입만을 구성해야 합니다.

참고 2) 매핑은 필드의 구조와 제약조건에 대한 명세를 말하며 관계형 DB의 스키마와 같습니다.

참고 3) 관계형 DB와 엘라스틱서치는 인덱스라는 개념을 다르게 사용하는데, 관계형 DB에서 인덱스는 그저 Where절의 쿼리와 Join을 빠르게 만들어주는 보조데이터의 도구로 사용됩니다.

 

 

[Elastic Search 설치]

https://www.elastic.co/kr/downloads/elasticsearch

 

Download Elasticsearch

Download Elasticsearch or the complete Elastic Stack (formerly ELK stack) for free and start searching and analyzing in minutes with Elastic....

www.elastic.co

 

24.04.21 기준으로 가장 최신 버젼은 8.13.2 버젼이다.

 

그러나 해당 버젼 설치 시 아래 파일이 실행되지 않는 문제가 있었다. 재설치 / 시스템 환경 설정 - 보안 및 개인정보 보호 / Control + 열기를 해도 실행이 되지 않아, 8.11.2 로 다시 재설치하니 오류가 해결되었다. (Monterey 의 버그인가?)

 

무튼 위 파일을 실행하고 정상 여부를 확인하기 위해서는 localhost:9200로 접속을 해야한다.

최신 버젼의 elastic은 http가 아닌 https://localhost:9200 으로 접속해야 한다!

위 링크로 접속을 하게 되면 ID와 PW를 입력해야 하는데, 아래 파일일 열리지 않아서 그냥 yml 파일을 수정해버렸다. 

 

 

elasticsearch-8.11.2/config/elasticsearch.yml을 실행시키고

xpack.security.enabled: false

xpack.security.enrollment.enabled: false

true -> false 로 바꿔준다. 

 

그리고나서 elastic search를 재시작 후 localhost 로 접속하면 아래와 같이 정상 접속을 확인할 수 있다. 

 

 

 

 

[Kibana 설치]

아래 링크에서 Kibana를 다운한다. 

https://www.elastic.co/kr/downloads/past-releases/elasticsearch-8-11-2

 

Elasticsearch 8.11.2 | Elastic

Release Notes View the detailed release notes here.

www.elastic.co

 

설치 후 아래 경로에서 Contol을 누르고 열기를 클릭하여 파일을 실행한다. 

bin/kibana

 

 

*주의 ) Elastic Searh와 버젼이 다르면 아래와 같이 뜬다. 버젼을 맞추도록 하자. 

[2024-04-21T13:47:26.658+09:00][ERROR][elasticsearch-service] This version of Kibana (v8.13.2) is incompatible with the following Elasticsearch nodes in your cluster: v8.11.2 @ 192.168.0.2:9200 (127.0.0.1)

 

실행 후, http://localhost:5601 로 접속해보자. 

 

 

 

 

 

[실습]

Sample Data를 활용해보자. 이커머스 주문 데이터를 Add 해보았다. 

 

 

View Data > Discover 를 클릭한다. 

 

 

 

 

확장 버튼을 누르면 세부 내용을 볼 수 있다. Field(RDBMS의 열) 를 확인할 수 있고, 각 Field 값의 Value도 확인 가능하다.

RDBMS에서는 하나의 열에 하나의 데이터 타입만 가질 수 있었지만, Elastic에서의 필드는 동적이라, 여러개의 데이터 타입을 가질 수 있다. 

 

 

JSON 데이터도 확인 가능하다. 

 

{
  "_index": "kibana_sample_data_ecommerce",
  "_id": "G8JI_44BBQw1fKj0hGME",
  "_version": 1,
  "_score": 0,
  "_source": {
    "category": [
      "Men's Accessories",
      "Men's Shoes"
    ],
    "currency": "EUR",
    "customer_first_name": "Samir",
    "customer_full_name": "Samir Moss",
    "customer_gender": "MALE",
    "customer_id": 34,
    "customer_last_name": "Moss",
    "customer_phone": "",
    "day_of_week": "Sunday",
    "day_of_week_i": 6,
    "email": "samir@moss-family.zzz",
    "manufacturer": [
      "Oceanavigations",
      "Low Tide Media"
    ],
    "order_date": "2024-04-21T05:35:31+00:00",
    "order_id": 564237,
    "products": [
      {
        "base_price": 20.99,
        "discount_percentage": 0,
        "quantity": 1,
        "manufacturer": "Oceanavigations",
        "tax_amount": 0,
        "product_id": 19840,
        "category": "Men's Accessories",
        "sku": "ZO0311203112",
        "taxless_price": 20.99,
        "unit_discount_amount": 0,
        "min_price": 10.29,
        "_id": "sold_product_564237_19840",
        "discount_amount": 0,
        "created_on": "2016-12-11T05:35:31+00:00",
        "product_name": "Watch - black",
        "price": 20.99,
        "taxful_price": 20.99,
        "base_unit_price": 20.99
      },
      {
        "base_price": 32.99,
        "discount_percentage": 0,
        "quantity": 1,
        "manufacturer": "Low Tide Media",
        "tax_amount": 0,
        "product_id": 13857,
        "category": "Men's Shoes",
        "sku": "ZO0395703957",
        "taxless_price": 32.99,
        "unit_discount_amount": 0,
        "min_price": 17.15,
        "_id": "sold_product_564237_13857",
        "discount_amount": 0,
        "created_on": "2016-12-11T05:35:31+00:00",
        "product_name": "Trainers - beige",
        "price": 32.99,
        "taxful_price": 32.99,
        "base_unit_price": 32.99
      }
    ],
    "sku": [
      "ZO0311203112",
      "ZO0395703957"
    ],
    "taxful_total_price": 53.98,
    "taxless_total_price": 53.98,
    "total_quantity": 2,
    "total_unique_products": 2,
    "type": "order",
    "user": "samir",
    "geoip": {
      "country_iso_code": "AE",
      "location": {
        "lon": 55.3,
        "lat": 25.3
      },
      "region_name": "Dubai",
      "continent_name": "Asia",
      "city_name": "Dubai"
    },
    "event": {
      "dataset": "sample_ecommerce"
    }
  },
  "fields": {
    "products.manufacturer": [
      "Oceanavigations",
      "Low Tide Media"
    ],
    "products.base_unit_price": [
      20.984375,
      33
    ],
    "products.discount_amount": [
      0,
      0
    ],
    "type": [
      "order"
    ],
    "products.discount_percentage": [
      0,
      0
    ],
    "products._id.keyword": [
      "sold_product_564237_19840",
      "sold_product_564237_13857"
    ],
    "day_of_week_i": [
      6
    ],
    "total_quantity": [
      2
    ],
    "taxless_total_price": [
      53.96875
    ],
    "total_unique_products": [
      2
    ],
    "geoip.continent_name": [
      "Asia"
    ],
    "sku": [
      "ZO0311203112",
      "ZO0395703957"
    ],
    "customer_full_name.keyword": [
      "Samir Moss"
    ],
    "category.keyword": [
      "Men's Accessories",
      "Men's Shoes"
    ],
    "products.taxless_price": [
      20.984375,
      33
    ],
    "products.quantity": [
      1,
      1
    ],
    "customer_first_name": [
      "Samir"
    ],
    "products.price": [
      20.984375,
      33
    ],
    "customer_phone": [
      ""
    ],
    "geoip.region_name": [
      "Dubai"
    ],
    "customer_full_name": [
      "Samir Moss"
    ],
    "geoip.country_iso_code": [
      "AE"
    ],
    "order_id": [
      "564237"
    ],
    "products._id": [
      "sold_product_564237_19840",
      "sold_product_564237_13857"
    ],
    "products.product_name.keyword": [
      "Watch - black",
      "Trainers - beige"
    ],
    "products.product_id": [
      19840,
      13857
    ],
    "products.category": [
      "Men's Accessories",
      "Men's Shoes"
    ],
    "products.manufacturer.keyword": [
      "Oceanavigations",
      "Low Tide Media"
    ],
    "manufacturer": [
      "Oceanavigations",
      "Low Tide Media"
    ],
    "products.unit_discount_amount": [
      0,
      0
    ],
    "customer_last_name": [
      "Moss"
    ],
    "geoip.location": [
      {
        "coordinates": [
          55.3,
          25.3
        ],
        "type": "Point"
      }
    ],
    "products.product_name": [
      "Watch - black",
      "Trainers - beige"
    ],
    "products.tax_amount": [
      0,
      0
    ],
    "manufacturer.keyword": [
      "Oceanavigations",
      "Low Tide Media"
    ],
    "products.min_price": [
      10.2890625,
      17.15625
    ],
    "currency": [
      "EUR"
    ],
    "products.taxful_price": [
      20.984375,
      33
    ],
    "products.base_price": [
      20.984375,
      33
    ],
    "email": [
      "samir@moss-family.zzz"
    ],
    "day_of_week": [
      "Sunday"
    ],
    "customer_last_name.keyword": [
      "Moss"
    ],
    "products.sku": [
      "ZO0311203112",
      "ZO0395703957"
    ],
    "products.category.keyword": [
      "Men's Accessories",
      "Men's Shoes"
    ],
    "geoip.city_name": [
      "Dubai"
    ],
    "customer_first_name.keyword": [
      "Samir"
    ],
    "order_date": [
      "2024-04-21T05:35:31.000Z"
    ],
    "products.created_on": [
      "2016-12-11T05:35:31.000Z",
      "2016-12-11T05:35:31.000Z"
    ],
    "category": [
      "Men's Accessories",
      "Men's Shoes"
    ],
    "customer_id": [
      "34"
    ],
    "user": [
      "samir"
    ],
    "customer_gender": [
      "MALE"
    ],
    "event.dataset": [
      "sample_ecommerce"
    ],
    "taxful_total_price": [
      53.96875
    ]
  }
}

 

 

Dashboard 에서 다양한 Summary 데이터를 확인할 수 있다. 

 

 

 

이제 실습을 해보자. 

  • took : 검색 응답 시간
  • time_out : 검색이 time out 되었는지 여부
  • _shards : 검색을 수행한 샤드 정보
  • total : 검색을 수행한 총 샤드 수
  • successful : 검색 수행을 성공한 샤드 수
  • failed : 검색 수행을 실패한 샤드 수
  • hits
  • total : 검색 매칭에 성공한 도큐먼트 수
  • max_score : 매칭에 성공한 도큐먼트중 가장 높은 점수

 

 

 

 

=======================

 

참고

- https://velog.io/@jakeseo_me/%EC%97%98%EB%9D%BC%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-2-DB%EB%A7%8C-%EC%9E%88%EC%9C%BC%EB%A9%B4-%EB%90%98%EB%8A%94%EB%8D%B0-%EC%99%9C-%EA%B5%B3%EC%9D%B4-%EA%B2%80%EC%83%89%EC%97%94%EC%A7%84

 

https://kok202.tistory.com/100

728x90
728x90
728x90
728x90

출처 : https://www.youtube.com/watch?v=yR8_v58kN2c&list=PLvbX4wFD7b734CdVXEgCW5uU91gUX_RVu

 
 
 

엑셀 기초 4시간 완성 원데이 챌린지 - 실습파일.zip
0.00MB

1. 자동 채우기

  • 매출 채우기 : 드래그 또는 더블클릭
  • 날짜 채우기 : 격일 단위 또는 평일만 (옵션 사용)

2. 빠른 채우기

  • 단축키 : Ctrl + E
  • Ex. 치즈크러스트 - 페퍼로니 피자

3. 가로 표 글자 크기 맞추기 

  • 셀 너비 맞추기 : 범위의 머리글 클릭 -> 셀 세로 선 위에 마우스 놓고 너비 전체 셀 조정 가능
  • 글자 크기 맞추기 : 해당 셀 전체 선택 -> 셀 서식(Ctrl + 1) ->  맞춤 탭 -> 텍스트 조정 -> 셀에 맞춤 

4. 그룹 (숨기기 대신)

  • 숨기고 싶은 열 드래그 -> 데이터 탭 -> 그룹 클릭
  • 단축키 : 드래그 후 Alt + Shift + -> (그룹 삭제는 Alt + Shift + <- )

5. 테두리 채우기

  • 단축키 : 드래그 후 ALT + HBA (각각 누름)
  • 태두리 빼기 :Ctrl + Shift + (-)

6. 하이퍼링크 /  한/영 바뀜 설정 변경

  • 파일 -> 옵션 -> 언어교정 ->
  1. 자동교정 옵션 -> 입력할 때 자동 서식 -> 하이퍼링크 해제
  2. 자동고침 -> 한/영 자동교청 해제
  3. 문장의 첫 글자를 대문자로 해제

7. 빠른 실행 도구모음

  • 안 보이면 상단 타이틀 우 클릭 후 빠른 실행 도구 모음 표시 클릭
  • 잘 쓰는 오름차순/내림차순 등 추가 가능
  • ALT 누르면 번호가 뜨면서 단축키 확인 가능
  • 화살표 클릭 후 기타 명령에서 개인에 맞게 잘 쓰는 기능 추가 (셀 병합.. 등)

8. 값 빠르게 편집하는 F2

  • 더블클릭 할  필요 없음

9. 행 위치 교체 Shift

 
10. 인접 셀 전체 선택
단축키 : 범위 내 셀 하나 클릭 후 Ctrl + A  
 
11. 표 전체 복사 후 너비 조절
단축키 : Ctrl 누르고 나서 떼고 W 누르기 
 
12. 상태 표시줄
실시간으로 평균 /선택 행 개수 / 합계 손쉽게 확인 가능
화살표 클릭하여 원하는 값 (Min, Max 등) 추가 가능

13. 셀 병합 문제 해결
셀 병합 시 컬럼 선택하면 병합된 머리글 셀 때문에 열 선택 안 되는 문제 있음
-> 셀 병합 해제 후 다시 셀 범위 선택하고 셀 서식-> 맞춤 -> 선택한 영역의 가운데로 클릭
(겉으로는 병합되는 것처럼 보임)

728x90
728x90
728x90
728x90

 

 

1. [What is Machine Learning?]

 

<머신러닝의 정의>

1. Arthur Samuel

- 컴퓨터가 명시적(explict) 프로그램 없이도 스스로 학습할 수 있는 능력을 연구하는 학문 분야.

- 체커 게임

 

2. Tom Mitchell

- Well-posed learning problem (학습 과제)

- 프로그램이 일정 수준의 작업 성능(P)을 가지고 작업(T)을 수행한다고 했을 때, 경험(E)이 증가함에 따라 작업(T)를 수행하는 성능(P)이 향상될 수 있다.이 때 프로그램이 경험(E)으로부터 학습(learn)을 했다고 표현한다.

- 체커스에서 경험(E)는 ‘같은 게임을 수만 번 반복하는 과정’, 작업(T)는 체커 게임을 수행하는 행위, 작업 성능(P)는 프로그램이 다음 판을 새로운 상대로 했을 때 그 판을 이길 확률(probability).

 

 

 

<머신 러닝 알고리즘>

1. 지도 학습(Supervised learning) : 작업 수행 방법을 컴퓨터에게 가르침

2. 비도 학습(Unsupervised learning) : 컴퓨터가 스스로 학습하도록 유도

3. Others : 강화 학습(Reinforcement Learning) , 추천 시스템(Recommender system)

 

 


 

2. [Supervised Learning]

<Supervised Learning >

: 알고리즘에 “정답이 포함 된” 데이터 집합을 줌. 즉, 데이터 집합 안의 모든 예시에 대해 알고리즘이 예측했으면 하는 정답이 우리에게 주어지는 것.

 

Q1 . 주택 가격을 어떻게 예측할까?

  • 각 집 마다 정확한 가격이 명시 된 데이터 집합을 줌.
  • 데이터를 통과하는 직선 혹은 이차함수를 그려 결과를 예측해 볼 수 있다.

=> 회귀 문제(regression problem)라고도 할 수 있다.

  • 회귀 : 연속 된 값을 가진 결과를 예측하는 것.
  • 집 가격은 스칼라 값이지만 연속된 값을 가진 숫자로 가정하자.

Q2 . 종양의 크기가 주어졌을 때 그 종양이 악성일 가능성은?

=> 분류 문제(classification problem)라고도 할 수 있다.

  • 분류 : 불연속적인 결과값을 예측하는 것.
  • ex) 종양의 크기가 주어졌을 때 어떤 종류의 종양인지. 이때 종양의 종류는 이산적이다.

 

<머신러닝의 궁극적인 목표>

: 주어진 어떠한 특성에 따라 결과 값을 도출하는 것.

  • 주어진 특성은 매우 다양할 수밖에 없다.
  • 이때 특성이 무한하다면? 메모리 해결 방안은?
  • Support Vector Machine 알고리즘 이용.

 


 

3. [Unsupervised Learning]

Unsupervised Learning에 주어진 데이터 집합의 특징 :

  • 데이터가 어떠한 의미를 갖는지 우리는 알 수 없음.
  • 데이터 집합의 예시에 대해 정답을 제시해주지 않음.
  • 데이터 집합에서 어떠한 구조를 찾을 수 있는지 분석하는 것.
  • 데이터 집합이 클러스터(cluster)로 나뉨.
  • 클러스터링 알고리즘(Clustering Alogrithm) 에 데이터 집합을 주어 Unspervised Learning을 시킴.

 

<클러스터링 알고리즘의 이용>

  • 구글 뉴스 : 수천 가지의 새로운 기사들을 조사하여 연관성 있는 기사들끼리 묶어 링크시킨다.
  • 유전학적 자료 : 각 사람의 유전자 발현 정도를 분석하여 사람들을 서로 다른 타입으로 묶을 수 있다.(클러스터링 함)
  • Organize computing clusters : 수많은 컴퓨터 중 어떠한 기기들끼리 같이 사용되는지 클러스터링하여 효율을 높인다.
  • Social network analysis : 어떠한 그룹이 사용자에게 적절한 친구 그룹인지 추천해준다.
  • Market segmentation : 수많은 고객들의 정보를 분석하여 세분화된 시장을 찾아내고 각 고객에 맞게 시장에서 판매와 영업을 효율적으로 진행할 수 있다.
  • Astronomical data analysis : 은하계 생성과 관련된 이론 도출.

 

<Cocktail party problem>

Q 1. 칵테일 파티 효과란?

A 1. 칵테일 파티 효과(cocktail party effect)는 파티의 참석자들이 시끄러운 주변 소음이 있는 방에 있음에도 불구하고 대화자와의 이야기를 선택적으로 집중하여 잘 받아들이는 현상에서 유래한 말이다. (출처 — 위키백과)

 

Q 2. 칵테일 파티 문제란?

A 2. 관심있는 소리만 선택적으로 받아들이는게 로봇이나 인공지능 기술에서는 불가능한 것.

 

Q 3. 노래와 사람의 음성을 동시에 마이크에 녹음한 후 cocktail party algorithm을 이용하여 둘을 분리할 수 있을까?

A 3. [W,s,v] = svd((repmat(sum(x.*x,1)size(x,1),1).*x)*x’);

=> 주어진 음성을 유사성에 따라 클러스터링.

  • svd함수 : 특이값 분해 (Singular value decomposition)의 약자.
  • Octave or Matlab 은 머신러닝 알고리즘 구현에 용이함. => 이를 이용해서 먼저 머신러닝 알고리즘의 프로토타입을 만들어 본 후 c++ or java 로 구현해 보는것이 좋다.
728x90
728x90
728x90
728x90

 

선언

int arr[100];

 

 

0으로 초기화

1) 선언과 동시에

int arr[100] = {};

int arr[100] = {0};

int arr[100] = {0,};

 

단, 0이 아닌 다른 수로 초기화할때는 fill_n() 또는 for문을 이용하자.

 

 

2) memset()

memset() 는 빠르지만 0 또는 -1로 초기화 할 때만 쓸 수 있다. (1byte 단위로 초기화 하기 때문)

#include<string.h>

memset(arr, 0, sizeof(arr));

memset(arr, -1, sizeof(arr));

 

 

 

int arr[100] = {-1, };

주의) 만약 이렇게 하면 arr[0]만 -1 이고 arr[1] ~ arr[99] 는 0이 된다.

 

 

0 이외의 수로 초기화

#include <algorithm>

fill_n(arr, 100, -1);		//arr[0] ~ arr[99] 를 -1로 초기화


fill_n(arr+1, 50, -1);		//arr[1] ~ arr[51] 을 -1로 초기화

 

혹은 for문으로!

 

 

참고 : www.uwangg.com/36

 

 

 

 

 

 

 

 

 

 

728x90
728x90
728x90
728x90

안드로이드 스튜디오에서 로그인 화면을 만드는 도중에, 버튼 색을 지정하기 위해 주어진 버튼 색의 핵사값을 알아내야 했다.

 

Pixlr Editor 로 임의의 색깔의 핵사값을 알아내보자.

 

Step 1)부터 하면 문제가 발생하니 Step 3) -> Step2) Step 4) 순서로 진행하면 된다.

 

Step 1) 알아내고자 하는 색이 포함된 이미지의 url 복사

 

  • 링크를 복사한다.

 

 

Step 2) pixlr editor 오픈

 

 

 

Step 3) step 1에서 복사한 url 붙여넣기

OPEN IMAGE FROM URL 을 클릭한다.

  • IOErrorEvent type="ioError" bubbles=false cancleable=false eventPhase=2 text="Error
  • 에러가 발생했다.

 

 

 

  • 새 탭을 열어서 이미지 주소를 복사한다.

위의 방법으로 하면 문제가 해결된다. 

 

 

 

 

Step 4) 색상코드 추출

  • 왼쪽의 스포이드 모양의 아이콘을 클릭하고 “Log in” 버튼 컬러를 클릭한다.

  • 왼쪽의 박스 색이 바뀌고 이를 클릭하면 위와 같이 창이 뜬다.
  • #00b2ed이 Log in 버튼의 색이다.
728x90
728x90

+ Recent posts