인덱스 (데이터베이스)

위키백과, 우리 모두의 백과사전.

인덱스(영어: index)는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. (왜냐하면 보통 인덱스는 키-필드만 갖고 있고, 테이블의 다른 세부 항목들은 갖고 있지 않기 때문이다.) 관계형 데이터베이스에서는 인덱스는 테이블 부분에 대한 하나의 사본이다.

인덱스는 고유 제약 조건을 실현하기 위해서도 사용된다. 고유 인덱스는 중복된 항목이 등록되는 것을 금지하기 때문에 인덱스의 대상인 테이블에서 고유성이 보장된다.



+ 인덱스는 특정 칼럼 값을 가지고 있는 열 혹은 값을 빠르게 찾기 위해서 사용된다. 

+ MySQL은 첫 번째 열부터 전체 테이블에 걸쳐서 연관된 열을 검색하기 때문에 테이블이 크면 클 수록 비용이 엄청나게 늘어난다. 

+ 만약 테이블이 쿼리에 있는 컬럼에 대한 인텍스를 가지고 있다면, 

+ MySQL은 모든 데이터를 조사하지 않고도 데이터 파일의 중간에서 검색위치를 빠르게 잡아낼 수 있다. 

+ 인덱스 위주 검색 후, 관련된 혹은 원하는 데이터들을 가져올 수 있다고 생각할 수도 있다.



인덱스를 사용하는 이유 

WHERE 구문과 일치하는 열을 빨리 찾기 위해서.

열을 고려 대상에서 빨리 없애 버리기 위해서. 

조인 (join)을 실행할 때 다른 테이블에서 열을 추출하기 위해서.

특정하게 인덱스된 컬럼을 위한 MIN() 또는 MAX() 값을 찾기 위해서.

사용할 수 있는 키의 최 좌측 접두사 (leftmost prefix)를 가지고 정렬 및 그룹화를 하기 위해서.

데이터 열을 참조하지 않는 상태로 값을 추출하기 위해서 쿼리를 최적화 하는 경우에.


인덱스를 사용해야 하는 경우 

데이터 양이 많고 검색이 변경보다 빈번한 경우

인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우 


   인덱스의 사용 


  기존의 테이블에 인덱스를 추가하기 

ALTER TABLE  테이블명 ADD INDEX(필드명(크기));


mysql> ALTER TABLE temp ADD INDEX(keyword(20));

Query OK, 554604 rows affected (1.31 sec)

Records: 554604  Duplicates: 0  Warnings: 0



  테이블 생성시 인덱스 추가하기 
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기), 
INDEX(필드명(크기)) ENGINE MyISAM; 

mysql> CREATE TABLE test (
    -> keyword varchar(20),
    -> INDEX(keyword(20)))
    -> ENGINE MyISAM;
Query OK, 0 rows affected (0.11 sec)


  FULLTEXT 인덱스 만들기 
일반적인 인덱스와는 달리 MySQL의 FULLTEXT는 매우 빠르게 모든 텍스트 열을 검색한다. 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장하기 때문이다. 

참고사항 
FULLTEXT 인덱스는 MySQL의 기본 저장 엔진 타입인 MyISAM 테이블에만 사용된다. 
만약 테이블을 MyISAM 으로 변경해야 된다면 
ALTER TABLE 테이블명 ENGINE = MyISAM; 
FULLTEXT 인데스는 CHAR 와 VARCHAR, TEXT 열로만 생성 가능하다.

ALTER TABLE 테이블명 ADD FULLTEXT(필드명)

mysql> ALTER TABLE temp ADD FULLTEXT(keyword);
Query OK, 554604 rows affected (1.49 sec)
Records: 554604  Duplicates: 0  Warnings: 0


  인덱스의 효과 
인덱스를 걸게 되면, 테이블 생성시에 인덱스의 정보도 만들게되므로 생성속도가 느려진다. 


비교를 위해서 두개의 테이블을 생성하였다. 하나는 인덱스가 걸려있는 테이블 (test_index) 와 걸려 있지 않은 테이블 (test)이다. 그림을 보면 생성 속도에서 차이가 꽤 나는 것을볼 수 있다. 

이런데도 인덱스를 거는 이유는 바로 조건문 등에 대한 SELECT 속도 등에서 차이가 나기 때문이다. 

위 테이블의 데이터는 약 55만개의 데이터가 저장되어있다. 그 중에서 '가'로 시작되는 데이터들을 뽑아 오자 .

SELECT * FROM test WHERE keyword LIKE '가%' ; 
5056 rows in set (0.08 sec) 

SELECT * FROM test_index WHERE keyword LIKE '가%' ; 
5056 rows in set (0.01 sec) 



출처: http://ra2kstar.tistory.com/96 [초보개발자 이야기.]


++++

프로시져 내부에서 인덱스를 사용하여 속도 향상을 시켜 보자.

프로시져를 이용하여 2년치의 데이터를 가져올 때, 30초의 대기 시간을 부여한 결과 TimeOut의 결과를 가져왔다.


따라서 프로시져 내부에 인덱스를 부여한 결과 놀라운 속도의 차이를 가져왔다.


프로시져 내용은 

create temporary table tmptbl (cons char(10), custm varchar(60), phone char(50), group char(2), use char(4), 

                               inspe char(8), cd char(8), consl char(5),

                               status char(1), no char(12), reque char(8), INDEX `index1` (consl_no)); 


프로시져 내에서 update 구문이 있어서, 더 오래 걸린 이유도 되었습니다.


하지만 인덱스를 추가한 이후 연관된 데이터의 업데이트 및 select 문이 빠르게 이루어지기 때문에,

타임아웃에도 안걸리고 속도는 향상되는 결과를 얻을 수 있었습니다.


update tmptbl a, something b set a.reque = b.reque,

                     where a.consl_no=b.consl_no;


이처럼 Index는 조건절에 따른 구분이 들어가 있는 것을 선택할 수록 효과는 더 좋습니다.


---

직접 느껴 본 것만 적다 보니깐, 이론적으로 안 맞는 경우도 있는데, 

제가 놓친 정확한 정보와 지식은 댓글로 남겨주시면 감사하겠습니다.










반응형

'Computer_IT > MySQL' 카테고리의 다른 글

[MySql]Column count doesn't match value count at row 1 에러  (0) 2017.05.31

TensorFlow 시작하기(설치 이후 첫 튜토리얼)


이 블로그는 첫 번째 튜토리얼을 번역 후 필요에 따라 중간중간 설명을 첨가하였습니다.

원본 글은 https://www.tensorflow.org/ 에 포함되어 있습니다.


이 튜토리얼은 TensorFlow에서 프로그래밍을 시작하도록 안내합니다.

이 게시글을 읽기 전에 TensorFlow를 설치하십시오. 설치 방법은 이전 글에 있습니다.


이 가이드를 최대한 활용하려면 다음 사항을 알아야합니다.

파이썬으로 프로그래밍하는 법. (C#, Java는 해봤었습니다. 뭔가 유저 친화적이지만, 배우지 않았었기 때문에, 미흡한 점은 많습니다만, 구글링 및 튜토리얼 따라하면서 많이 배워가고 있습니다.

처음 하시는 분들도 두려워말고 도전하실 수 있습니다.)

최소한 배열에 대해서는.

이상적으로는 기계 학습에 관한 것입니다. 그러나 기계 학습에 대해 거의 또는 전혀 알지 못하는 경우에도 여전히 읽어야 할 첫 번째 가이드입니다.


TensorFlow는 여러 API를 제공합니다. 최저 수준의 API 인 TensorFlow Core는 완벽한 프로그래밍 제어 기능을 제공합니다. TensorFlow Core는 기계 학습 연구자 및 모델을 미세하게 제어해야하는 사람들에게 권장됩니다. 높은 수준의 API는 TensorFlow Core 위에 구축됩니다. 이러한 상위 수준의 API는 일반적으로 TensorFlow Core보다 배우고 사용하기가 쉽습니다. 또한 상위 수준의 API는 반복적 인 작업을 여러 사용자간에보다 쉽고 일관되게 만듭니다. tf.contrib.learn과 같은 고급 API를 사용하면 데이터 세트, 견적 도구, 교육 및 추론을 관리 할 수 ​​있습니다. 메소드 이름에 contrib가 포함 된 상위 수준의 TensorFlow API 중 일부는 아직 개발 중입니다. 이후의 TensorFlow 릴리스에서 일부 contrib 메소드가 변경되거나 더 이상 사용되지 않을 수도 있습니다. 이 가이드는 TensorFlow Core에 대한 자습서로 시작됩니다. 나중에 tf.contrib.learn에서 동일한 모델을 구현하는 방법을 보여줍니다. TensorFlow를 아는 것보다 핵심적인 API를 사용할 때 핵심 원칙을 통해 내부적으로 일하는 방식에 대한 훌륭한 정신적 모델을 얻을 수 있습니다.


Tensor

TensorFlow에서 데이터의 중심 단위는 텐서입니다. 텐서는 임의의 수의 차원으로 배열 된 프리미티브 값 집합으로 구성됩니다. 텐서의 랭크는 차원 수입니다. 다음은 텐서 (tensors)의 몇 가지 예입니다.

3 # a rank 0 tensor; this is a scalar with shape []
[1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]

+ 기존의 알고 있던 데이터 배열과는 살짝 다른 느낌입니다. 즉 집합의 개념으로 사용됩니다.

+ 텐서의 랭크는 차원의 수 라고 되어있는 것 처럼, 각 [ ] 괄호를 주의 깊게 보시면 대략적인 이해에 도움이 될 것입니다.


TensorFlow 핵심 자습서

TensorFlow 가져 오기


TensorFlow 프로그램에 대한 표준 import 문은 다음과 같습니다.


python

>>>  import tensorflow as tf

+ 입력 후 ">>>"가 안보인다면, tensorflow 설치를 완료 안했을 경우가 많습니다. 



이렇게하면 파이썬에서 TensorFlow의 모든 클래스, 메소드 및 심볼에 액세스 할 수 있습니다. 대부분의 문서에서는 이미이 작업을 수행했다고 가정합니다.



The Computational Graph


TensorFlow Core 프로그램은 두 개의 개별 섹션으로 구성되어 있다고 생각할 수 있습니다.


1.계산 그래프 작성. (Building the computational graph.)

2.전산 그래프를 실행합니다. (Running the computational graph.)

계산 그래프는 일련의 TensorFlow 작업을 노드 그래프로 배열 한 것입니다. 간단한 전산 그래프를 작성해 봅시다. 각 노드는 0 이상의 텐서를 입력으로 사용하고 텐서를 출력으로 생성합니다. 노드의 한 유형은 상수입니다. 모든 TensorFlow 상수와 마찬가지로 입력을받지 않으며 내부적으로 저장하는 값을 출력합니다. 다음과 같이 두 개의 부동 소수점 Tensors node1과 node2를 만들 수 있습니다.


node1 = tf.constant(3.0, tf.float32)
node2
= tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)


마지막 print 서술문은


Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)


Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

예상대로 노드 인쇄는 3.0과 4.0 값을 출력하지 않습니다. 대신 평가할 때 각각 3.0과 4.0을 생성하는 노드입니다. 노드를 실제로 평가하려면 세션 내에서 계산 그래프를 실행해야합니다. 세션은 TensorFlow 런타임의 컨트롤과 상태를 캡슐화합니다.


다음 코드는 Session 객체를 만든 다음 run 메소드를 호출하여 node1과 node2를 계산할 수있는 계산 그래프를 실행합니다. 다음과 같이 세션에서 전산 그래프를 실행합니다.

sess = tf.Session()
print(sess.run([node1, node2]))

3.0과 4.0의 예상 값을 봅니다.


Tensor 노드를 연산과 결합하여 더 복잡한 계산을 할 수 있습니다 (연산도 노드입니다). 예를 들어 두 개의 상수 노드를 추가하고 다음과 같이 새 그래프를 생성 할 수 있습니다.

node3 = tf.add(node1, node2)
print("node3: ", node3)
print("sess.run(node3): ",sess.run(node3))

+ 위의 결과되로 표시 되었다면 노드의 값을 tf.add를 통해 합쳐진 것을 볼 수 있습니다.

TensorFlow는 전산 그래프의 그림을 표시 할 수있는 TensorBoard라는 유틸리티를 제공합니다. 다음은 TensorBoard가 그래프를 시각화하는 방법을 보여주는 스크린 샷입니다.

TensorBoard screenshot

+텐서보드의 설치 및 활용 법은 추후 게시글에 올리도록 하겠습니다. 데이터의 흐름도의 이해를 위해 스크린샷 처럼 표시되는구나 정도로 일단 이해하시고 넘어가시면 됩니다.


이 도표는 항상 일정한 결과를 산출하기 때문에 특히 흥미 롭지 않습니다. 자리 표시 자라고하는 외부 입력을 허용하도록 그래프를 매개 변수화 할 수 있습니다. 자리 표시자는 나중에 값을 제공하겠다는 약속입니다.

a = tf.placeholder(tf.float32)
b
= tf.placeholder(tf.float32)
adder_node
= a + b  # + provides a shortcut for tf.add(a, b)

앞의 세 줄은 함수 또는 람다와 비슷하지만 두 개의 입력 매개 변수 (a 및 b)를 정의한 다음 해당 매개 변수에 대한 연산을 정의합니다. feed_dict 매개 변수를 사용하여 이러한 입력란에 구체적인 값을 제공하는 Tensors를 지정하여이 그래프를 여러 입력으로 평가할 수 있습니다.

print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))


+ 출력 결과 물은 봣을 때 첫 번쨰 명령 문의 계산식은

3+ 4.5 이고

두번째 계산은

a: 1 + b: 2  = 3

a: 3 + b: 4 = 7

의 결과값을 표현하는 것입니다.


In TensorBoard, the graph looks like this:

TensorBoard screenshot


다른 연산을 추가하여 계산 그래프를 더 복잡하게 만들 수 있습니다. 예를 들어,

add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))
add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))
add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))

+ 연산 : (3+4.5)*3


The preceding computational graph would look as follows in TensorBoard:

TensorBoard screenshot

기계 학습에서 우리는 전형적으로 위와 같은 임의의 입력을 취할 수있는 모델을 원할 것입니다. 모델을 학습 가능하게 만들려면 동일한 입력으로 새로운 출력을 얻기 위해 그래프를 수정할 수 있어야합니다. 변수를 사용하면 그래프에 학습 가능한 매개 변수를 추가 할 수 있습니다. 그것들은 타입과 초기 값으로 구성됩니다 :

W = tf.Variable([.3], tf.float32)
b
= tf.Variable([-.3], tf.float32)
x
= tf.placeholder(tf.float32)
linear_model
= W * x + b

상원 의원은 제소자를 호출 할 때 값이 변하지 않을 것입니다. 반대로 할 수 없습니다. TensorFlow 프로그램의 모든 변수를 다음과 같이 사용하십시오.

init = tf.global_variables_initializer()
sess
.run(init)

init이 모든 전역 변수를 초기화하는 TensorFlow 하위 그래프의 핸들임을 인식하는 것이 중요합니다. sess.run을 호출 할 때까지 변수는 초기화되지 않습니다.


x는 자리 표시 자이므로 다음과 같이 x의 여러 값에 대해 linear_model을 동시에 평가할 수 있습니다.


print(sess.run(linear_model, {x:[1,2,3,4]}))


+ x를 순차적으로 대입하면서 출력하는 것을 볼 수 있습니다.


우리는 모델을 만들었지 만 아직 얼마나 좋은지 모릅니다. 훈련 데이터에 대한 모델을 평가하려면 원하는 값을 제공하기 위해 y 자리 표시자가 필요하며 손실 함수를 작성해야합니다.



손실 함수는 제공된 모델로부터 현재 모델이 얼마나 떨어져 있는지를 측정합니다. 현재 모델과 제공된 데이터 사이의 델타의 제곱을 합한 선형 회귀에 표준 손실 모델을 사용합니다. linear_model - y는 각 요소가 해당 예제의 오류 델타 인 벡터를 만듭니다. tf.square를 호출하여 오류를 제곱합니다. 그런 다음 모든 제곱 된 오류를 합하여 tf.reduce_sum을 사용하여 모든 예제의 오류를 추상화하는 단일 스칼라를 만듭니다.


y = tf.placeholder(tf.float32)
squared_deltas
= tf.square(linear_model - y)
loss
= tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))




W와 b의 값을 -1과 1의 완벽한 값으로 재 할당하여 수동으로 향상시킬 수 있습니다. 변수는 tf.Variable에 제공된 값으로 초기화되지만 tf.assign과 같은 연산을 사용하여 변경할 수 있습니다. 예를 들어, W = -1 및 b = 1은 우리 모델에 대한 최적의 매개 변수입니다. 그에 따라 W와 B를 변경할 수 있습니다.


fixW = tf.assign(W, [-1.])
fixb
= tf.assign(b, [1.])
sess
.run([fixW, fixb])
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

마지막 인쇄는 손실이 0임을 보여줍니다.


우리는 W와 B의 "완벽한"값을 추측했지만 기계 학습의 요점은 올바른 모델 매개 변수를 자동으로 찾는 것입니다. 다음 섹션에서이를 수행하는 방법을 보여줄 것입니다.




+ 지금은 손실이 0 인 것인 것처럼 간단한 계산식으로 했지만, 나중에 갈 수록 소수도 나오고 손실율도 커서 더 정확한 모듈을 만들기 위한 작업을 하겠습니다.


+ 일단 이번 글에서는 간단한 이해 및 원리만 이해하시면 되겠습니다.



반응형

우커머스를 활용하시면서 영어로 되어 있으면 사용자들이 많은 불편함을 가질 수도 있습니다.

상품에 add to cart 로 표시되는 것을 한국인 언어인 한글로 표시 하도록 하겠습니다.

장바구니 아래의 결과물부터 확인하시죠.








워드프레스, 그누보드5 등 다양한 것을 사용하였습니다. 이번기회에 워드프레스를 적극적으로 활용하기 위해 글을 남깁니다.

처음 사용하다 보니깐 미숙한점이 많습니다. 

이제 영어 좀 그만보고 싶어서. 한글로 변환하는 법을 소개드리고자합니다.


우커머스 플러그인은 쇼핑몰 구성도 잘 되어있고, 결제 연동이 원활한 것으로 알려져 있습니다. 또한, 많은 테마와 플러그인의 호환성을 봣을 땐, 간편히 구축할 수 있습니다.


우커머스를 플러그인을 통해 처음 설치하였으면, 기본언어가 영문으로 제공되어 있습니다. 

윗 화면이 아닌 Add To Cart로 보여지게 됩니다. 아무래도 한글에 비해서 고객들에게 불편함?까지는 아니지만, 친숙하지는 않을 것같아 UI측면에서 한글화를 시키도록 하겠습니다.



오늘 현재 최신버전에서 우커머스 번역은 53% 완료 되었습니다. 홈페이지를 참조하시면 얼만큼 번역이 완료되었고, 언제 업데이트 됬는지를 알 수 있습니다.


우커머스 파일은 계속 버전이 업그레이드 되어 번역의 수정 또는 추가작업이 지속적으로 필요하다.

번역은 우커머스 개발팀이 주도하지 않고 각 커뮤니티에서 자발적으로 번역작업을 수행한다.


위와 같은 환경과 맞물려 한글화가 모두 지원되지 않을수 있습니다. 하지만 개인의 노력을 더 하여 추가적으로 번역파일을 자신이 번역할 수 있습니다. 올려주시면 저도 감사히 사용하겠습니다...ㅎㅎ


그러면 이제 진행 법을 소개 시켜 드리겠습니다.


1. 번역 파일 준비하기


우커머스는 번역파일을 워드프레스 translate 사이트 에서 운용합니다.

https://translate.wordpress.org/projects/wp-plugins/woocommerce 

를 복사하셔서 이동하시면 각 언어들의 번역 완료 퍼센테이지가 나옵니다.


Ctril + F 를 활용하여 Korean을 검색하셔서 손 쉽게 이동하도록 합니다.


Korean 을 클릭 합니다. 


클릭 후 이동한 페이지에서 2번쨰 란에 보이는 Stable을 다운받을 것입니다.


여기서 Stable(Latest Release)를 클릭하여 이동합니다.



위 화면처럼 하단의 “Export” 를 클릭하여 파일로 다운로드 받아야 하며 Portable ~(.po) 파일과 (.mo) 파일을 각각 다운로드 받습니다. 


총 2개의 파일을 다운 받습니다. 


이후 파일명을 수정하셔야합니다.

복사 붙여넣기를 추천드립니다. 파일명이 다르면 적용이 안됩니다...


wp-plugins-woocommerce-stable-ko.mo  => woocommerce-ko_KR.mo


wp-plugins-woocommerce-stable-ko.po    => woocommerce-ko_KR.po


(대소문자와 “-“등의 입력과 확장자등을 주의해서 꼭 위와같은 이름으로 업로드하여야 정상적으로 적용됩니다!)


이제 파일 위치를 워드프레스 설치 디렉토리 /wp-content/languages/plugins/폴더 안에 업로드해야 합니다. woocommerce-ko_KR.mo, woocommerce-ko_KR.po 파일 모두 위 디렉토리에 업로드합니다.


이제 확인 해 보시면 위에 제 홈페이지처럼 한글로 바뀐것을 확인 하실 수 있습니다.


반응형

PowerPoint에서 이 Embed 코드로 이루어진 비디오를 삽입할 수 없다는 오류 발생시!!


파워포인트 메뉴의


[삽입] - 동영상 버튼을 눌러 추가 할 경우 아래의 오류 버튼이 뜰 수 있습니다.


제가 현재 사용하고있는 PowerPoint 정보를 알려드리겠습니다.


PowerPoint 2013 (15.0.4420.1017)  32비트 를 활용하고 있습니다.





이런 경고창을 보실 수 있습니다.


먼저 급한대로 해결 방법부터 나열하도록 하곘습니다.


Youtube 사이트에서 해당 동영상의  공유하기 버튼을 클릭합니다.


주소 말고 IFRAME의 코드를 복사를 합니다.


Iframe의 코드를 Embed 코드로 바꿔주는 작업이 필요합니다. 따라서 저는 구글에 


iframe to embed 로 검색을 했더니 여러 변환 사이트들이 나왔습니다.


개인적으로 활용한 사이트는 가장 처음에 나온 ㅎㅎ

https://nuridol.net/ut_convert.html

주소입니다.


아까 복사한 iframe코드를 복사하고 

Convert를 클릭하면 embed코드로 변환됩니다.


embed코드를 복사해서


동영상 삽입의 youtube가 아닌 3번째 란인 embed코드 부분에 입력하고 Enter를 클릭하시면
동영상이 들어가게 됩니다.


아 참! 복사할 때... 감사히 잘 사용은 했지만.. herf부분은 복사할 필요가없습니다~


예시로

<div><object width="560" height="315"><param name="movie" value="https://www.youtube.com/v/zlskcG6CLAY?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/zlskcG6CLAY?version=3" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>

이 부분 까지만 복사하셔도 충분합니다.


-------------------

최신 파워포인트 버전에서는 그냥 들어가집니다... 업데이트 자주 합시다! ㅎㅎ

추가 업데이트 경로는


클릭



추가 하였습니다. 


반응형

일단 Pyhton 에서 requests를 이용한 예제이기 때문에,

설치를 하도록 하겠습니다.

OS는 

linux 16.04버전입니다.

root 권한이 아니신 분들은

sudo pip install requests

명령어를 사용하시면 됩니다.

Pip Install Requests

To install Requests, simply run this simple command in your terminal of choice:

$ pip install requests



설치가 완료되었습니다. 예제 실행화면입니다.


아래에 추가 글 남기겠습니다.



웹 페이지를 긁어 내려면 먼저 페이지를 다운로드해야합니다.

라이브러리를 활용하기 위하여 Requests를 먼저 설치 한 것입니다.

 Python requests 라이브러리를 사용하여 페이지를 다운로드 할 수 있습니다. 웹 서버에 GET 요청을 보내고, 

웹 서버는 주어진 웹 페이지의 HTML 콘텐츠를 다운로드합니다. 

라이브러리를사용하여 만들 수있는 여러 가지 유형의 요청이 있으며 그 중 GET은 하나뿐입니다. 자세한 내용은 API를 확인하십시오.

API확인 경로는 : https://www.dataquest.io/blog/python-api-tutorial/              입니다.


외국 블로거의 github입니다. ㅎㅎㅎ

간단한 샘플 웹 사이트 http://dataquestio.github.io/web-scraping-pages/simple.html을 다운로드 해 봅니다. 

먼저 request.get 메소드를 사용하여 다운로드해야합니다.


구글로 했다가.. content보이시죠?? 엄청 많은 것... 나중에 분석하면 수정해서 다시 올리겠습니다.. ㅎㅎㅎ



일단 Get하는 python 소스입니다.


Python 으로 먼저 진입하시고


import requests

page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html")



실행 한 후 Response 객체를 얻습니다. 이 객체에는 페이지가 성공적으로 다운로드되었는지 나타내는 status_code 속성이 있습니다.

확인 명령어는



page.status_code



결과는 200이 나오면 정상입니다.



status_code가 200이면 페이지가 성공적으로 다운로드되었음을 의미합니다. 여기서는 상태 코드를 완전히 다루지는 않지만 2로 시작하는 상태 코드는 일반적으로 성공을 나타내고 4 또는 5로 시작하는 코드는 오류를 나타냅니다. (추후 발생하면 분석하고 수정 글 올리겠습니다.)



content 속성을 사용하여 페이지의 HTML 콘텐츠를 인쇄 할 수 있습니다.

확인 명령어는


page.content


소스 코드는 간단한 결과를 확인할 수 있습니다.


하지만 구글로 한다면??... 더 분석이 필요하게 됩니다.ㅎㅎ 


오늘은 일단 여기까지 하고 추후 글을 더 나누도록 하겠습니다.

반응형

'Computer_IT > Python' 카테고리의 다른 글

No module named _tkinter, please install the python-tk package  (0) 2017.06.08

인터넷 검색 및 데이터 수집을 하고 싶다...

라는 생각에 기술을 알아보는 중 

크롤링이라는 기술이 있다고 한다.


크롤링이란 무엇 일까?

Web Scraping(웹 크롤링) 이란?

[펌] 네이버 블로그
(http://m.blog.naver.com/potter777777/220605598446)

컴퓨터 업계에서 일하는 사람들은 "크롤링", "크롤러", "크롤링 알바" 이런 말을 들어본 적이 있을 겁니다. 저도 친구들이나 선배들이 회사에서 크롤링하는 알바를 했다는 경험담을 많이 들었습니다. 개인 프로젝트를 하면서 혹은 팀 프로젝트를 하면서 크롤링 할 일이 있었습니다. 하지만, 어떻게 하는지 몰랐죠.

 여러 사람들에게 조언을 구하고 구글의 힘을 빌려서 제가 원하는 정보를 파싱해서  DB에 넣는 데에 성공했습니다. 원하는 데이터가 잘 나와서 눈물이 앞을 가리더군요. 사람들에게 스크린샷을 찍어서 보내면서 "내가 한거라고 ㅠㅠ" 3일 밤을 새면서 고생했어요. "잘했어... (토닥토닥)" 아 논지를 벗어 났군요.

우리가 흔히 부르는 웹 크롤러 크롤링의 정식명칭은 'Web Scraping' 입니다. 외국 자료를 찾으려고 하니까 'Web Crawling' 보다는 'Web Scraping' 이라는 용어를 자주 사용하더군요.

"Web scraping is a computer software technique of extracting information from websites."
-> 웹 크롤링이란 컴퓨터 소프트웨어 기술로 웹 사이트들에서 원하는 정보를 추출하는 것을 의미합니다.

 웹 크롤러란 인터넷에 있는 웹페이지를 방문해서 자료를 수집하는 일을 하는 프로그램을 말합니다. 이때 한 페이지만 방문하는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대로 방문하고 이처럼 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷하다고 해서 스파이더라고 부르기도 합니다. 엄청난 분량의 웹문서를 사람이 일일 구별해서 모으는 일은 불가능에 가깝습니다. 때문에 웹 문서 검색에서는 사람이 일일이 하는 대신 이를 자동으로 수행해 줍니다. 

예를 들면, "멜론 사이트에서 현재 음악 차트 순위 자료가 필요하다."고 해보겠습니다. 물론, 사이트에 가서 일일이 보고, 엑셀에 값을 넣고 정리해서 상사에게 보고하는 사람들도 있을 겁니다. 하지만 이 데이터를 다른 프로그램이나 무언가를 만들 때 사용하려면 DB 형태로 저장해 놓을 필요가 있습니다.

카테고리, 순위, 발매일, 제목, 앨범제목, 그룹이름 등등... 차트에도 여러 정보가 있겠죠.

 웹은 기본적으로 HTML 형태로 되어 있는 건 다들 아실 겁니다. 저희가 눈으로 볼 수 있다면, 해당 정보가 HTML 형태로 어떻게 보여지는지도 '페이지 소스 보기' 또는 '개발자 검사' 로 볼 수 있습니다. 이런 소스들은 보통 개발자들이 어떤 정형화된 형태로 관리하고 있습니다. 때문에 규칙이 생기죠. 이런 규칙을 분석해서 우리가 원하는 정보들만 뽑아오는 것을 웹 크롤링 작업이라고 생각하시면 됩니다.

 한국에서도 웹 크롤링 할 일이 많기 때문에 알바를 구하는 구인 광고도 본 적이 있고 네이버, 다음, 구글 등등 여러 포털 사이트 블로그에 크롤링 하는 방법을 치면 나오는 정보들도 많습니다. 가장 많이 나오는 것이 Python으로 크롤링 하는 소스들이 제일 흔하죠. 현재 파이썬이 가장 떠오르는 언어이죠? 하지만 저는 파이썬보다는 현재 루비와 레일즈를 주로 공부하고 있어서 루비로 크롤러 개발을 할 수 있는 방법을 찾아보았습니다.

 저는 다음 블로그 포스팅부터 몇 차례에 걸쳐서 제가 주로 포스팅하는 언어인 'Ruby' 와 'Rails' 그리고 'nokogiri' 라는 잼(gem)을 이용하여 크롤링하는 방법에 대해서 포스팅 할 예정입니다. 한국에서 nokogiri로 스크래핑하는 것에 대한 방법을 기술한 자료는 그렇게 많지 않았습니다. 일주일 내내 찾아도 제대로 된 것이 2개? 1개? 정도 였고 정보도 통틀어 10개를 넘지를 않았습니다. 그래서 루비와 노코기리로 크롤링 하는 방법을 찾는 분들을 위해서 노코기리 잼 분석부터 레일즈로 띄우는 방법까지 자세히 포스팅하겠습니다.

자세한 웹 크롤링에 대한 정의는 아래 '위키 피디아를 참조'하시기 바랍니다.
https://en.wikipedia.org/wiki/Web_scraping

그리고 외국 자료들이 더 정확하고 유용하니, 웹 크롤링 웹 크롤러로 검색하기 보다는 "Web Scraping with something" 이런 식으로 검색하여 원하는 정보를 찾아서 활용하시기 바랍니다.



위 블로그 분의 좋은 이야기를 듣고, 

내가 필요한 Scraping을 만들기 위해


Python으로 작성을 시도해 볼려고 한다.

반응형
SBS 로봇기자, 나리

지난 9일, 제19대 대통령 선거가 치러졌습니다. 많은 분들이 인터넷에서 선거 관련 기사를 찾아보셨을 텐데요. 여러분이 읽은 기사들 중 일부는 사람이 아닌 ‘로봇’이 썼다는 것, 혹시 알고 계셨나요? 과연 어떤 기사인지, 어떻게 로봇이 기사를 썼는지 살펴보도록 해요.

SBS는 19대 대선에서 인공지능(AI)를 활용한 로봇 기사를 선보였습니다. 나리(NARe)로 명명된 로봇기자는 인공지능 로봇기자(News by Artificial intelligence Reporter)의 약자로, SBS 뉴스와 서울대 로봇저널리즘팀(이준환, 서봉원 교수)이 공동 개발했습니다.

사람보다 빠르고 정확했다

인공지능 로봇기자 나리(NARe)는 중앙선거관리위원회가 실시간으로 제공하는 데이터를 계산하고 분석해 자동으로 기사를 작성했습니다. 실시간 전국 투·개표율과 지역별 상세 투·개표 상황 등 특정한 조건이 달성됐을 때 유형별로 수십 개에 달하는 기사를 순식간에 작성해 냈습니다. 데이터를 바탕으로 사실을 전달하는 ‘스트레이트 기사’는 문장 구조에 맞게 데이터만 배치하면 작성이 가능합니다.

출처: SBS 뉴스 기사

나리가 작성한 기사는 사람이 일일이 수치를 계산하고 입력해 기사를 작성하는 것보다 훨씬 신속하고 정확했다고 하는데요. 문장 역시 로봇이 썼다고 믿을 수 없을 만큼 자연스러웠습니다. 나리가 쓴 기사는 SBS 뉴스 홈페이지와 포털사이트 등에서 확인할 수 있습니다.

기자 알파고, 점차 늘어날 것

사실 인공지능 기자가 신문기사를 쓰기 시작한 것은 이미 몇 년이 되었습니다. 미국의 LA 타임스, 로이터, AP통신, 블룸버그 등의 외신은 일찍부터 로봇 기자 시스템을 도입했습니다. LA 타임스는 지진 발생 보도에 로봇을 활용하는데요, 미국 지리조사청이 지진 정보를 감지하고 데이터를 제공하면, LA 타임스의 로봇이 데이터를 바탕으로 즉시 기사를 작성합니다. 2014년 3월 LA에서 강도 4.4의 지진이 발생했을 때, LA 타임스는 8분 만에 속보를 낼 수 있었습니다.

출처: LA타임스

앞으로 단순하거나 건조한 기사는 로봇 기자가 작성하는 것으로 대체될 텐데요, 다만 기자라는 직업이 사라지지는 않을 것입니다. 로봇 기자가 데이터를 기반으로 한 기사를 작성할 때, 인간 기자는 기획 기사나 심층 기사, 논설 등을 작성할 수 있을 것입니다. 기사 작성 시 필요한 정보 수집과 분석을 인공지능에게 맡기고, 고품질 기사로 경쟁력을 높이는 사례도 늘어날 것으로 전망됩니다.

출처 : http://naver.me/GgMopgEx

반응형

안드로이드 스튜디오 빌드 중 갑자기 에러가 발생되었다. 

에러 문구는 아래와 같다.



"...Crunching Crunsher ...png failed"


클린 프로젝트 및 리 빌드를 해도


같은 에러가 반복된다...



나의 에러 수정 방법은 매우 간단하였다...


폴더의 폴더의 폴더로 들어간 경로를 단순하게


폴더 길이를 줄여서 짧게 바꾸고, 빌드 시켰더니 해결..


ex : 


from:

D:/Android/Apps/AndroidStudioProject/AppName

to

D:/Android/AppName


에러의 원인이 Android studio 에서 파일명이 일정길이 넘어가면 참조를 할 수 없는 것 같다.

반응형

리눅스에서 Zip 압축 해제

 


데비안 / 우분투에서는 다음 명령을 사용하여 zip / unzip 설치할 있습니다 :

sudo apt-get install zip unzip

 

파일이나 디렉토리 (photos.zip) 압축을 풀려면 다음을 사용하십시오 :

unzip photos.zip

 

 

 

 

압축해제 시 옵션들

unzip 명령을 사용할  주의해야   가지 옵션이 있습니다.
우리가 photos.zip에서 하나의 image1.png 원한다고 가정  봅시다.

unzip photos.zip image1.png

 

파일을 다른 디렉토리 (./directory/) 압축을 풀려면 어떻게?

unzip photos.zip -d ./directory/

 

zip 파일의 무결성을 확신하지 못하고 테스트하려는 경우 -t 플래그를 사용할  있습니다

unzip -t photos.zip

 


zip 파일에 파일을 나열하려면 간단한 명령을 사용하면됩니다.

unzip -l photos.zip

 


문제가 생기면, 압축 해제 man 페이지는 참고 자료가 됩니다.

man unzip

반응형

일단 mariaDB로 작업을 하던 중...


워드프레스 등 기타 mysql로 방향을 바로 가맄는 것에 대해서.. 정확한 분석을 못한 결과


차라리 기존 의 mysql 로 재설치 하는 방법이 빠르다는 판단이 들었다..


그래서


혹시나 설치 잘 못 하시거나 삭제 후 재 설치하시는 분들을 위해


재설치하는 명령어를 올리겠습니다.


root권한이 아닌신분들은


명령어 앞에


sudo


를 붙여주세요.


apt-get autoremove

apt-get remove --purge mysql*

apt-get autoclean

deluser mysql

rm -rf /var/log/mysql

rm -rf /var/lib/mysql

rm -rf /etc/mysql






 마이에스큐엘 설치 방법입니다.


갑자기 영어가 깨지는 바람에... 한글로 ㅠㅠ mysql..마이에스큐엘 왜 이러지...ㅋㅋㅋ



·         sudo apt-get update

·          

·         sudo apt-get install mysql-server

반응형

+ Recent posts