인덱스 (데이터베이스)

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

인덱스(영어: 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

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

에러 문구는 아래와 같다.



"...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

구글의 인공지능 플로우, tensorflow를 활용하여 나도 인공지능을 만들어보자.


구글의 오픈소스인 tensorflow 알파고의 시작 점이라고 볼 수 있겠죠??


텐서플로우를 활용하기 위해 설치부터 하겠습니다.


제가 경험해본 그대로 올리기 때문에 부족한 점은 언제나 남겨주시면,


저도 다시 한번 해보고 말씀 드리겠습니다.


저는 리눅스 ubuntu 16.04 서버 버전 및 클라이언트 버전에서 설치를 해봤습니다.


물론 두가지 모두 설치 방법은 동일합니다.


가장 간단한 방법으로 설치하겠습니다.


tensorlfow.org 로 들어가면 여러가지 설치 방법이 나오지만 저는 pip설치 방법을 활용하겠습니다.


가상으로 설치하는 방법, 도커, 쿠다 등의 방법을 제시해주고 있지만, 개인적으로 pip설치가 가장 원활하고 쉽기 때문에 선택하였습니다.


지금부터 설명하겠습니다. 


1. 가장 먼저 업그레이드 부터 실시하겠습니다. 최신버전은 거의 대부분 오류 or 버그를 수정해서 나오기 때문입니다.ㅎㅎㅎㅎ 개인적인 소견 ㅋㅋㅋ



sudo apt-get install python-pip python-dev

pip version이 낮다고 경고문구가 나온 적이 있기 때문에, 방지하는 차원에서 최신버전으로 업그레이드 실시.


pip install –upgrade pip



2.  제 PC는 내장 그래픽 이기 때문에, 별도의 그래픽 카드가 없고, 사용하는 python2.7이기 때문에 첫 번째 명령어 사용


  3.0 일 경우에는 두번째 명령어를 실행해주시면 됩니다.


혹시! 좋은 그래픽 카드를 가지고 계신다면, 3 ,4 번째 명령어를 실행해주시면 됩니다.

$ pip install tensorflow      # Python 2.7; CPU support (no GPU support)
 $ pip3 install tensorflow     # Python 3.n; CPU support (no GPU support)
 $ pip install tensorflow-gpu  # Python 2.7;  GPU support
 $ pip3 install tensorflow-gpu # Python 3.n; GPU support

 

3. 끝.




설치는 항상 install 끝.인것처럼 별거없이 끝났습니다.

하지만 활용도는 너무 넓고 우수한 tensorflow 다음에 또 글을 남기겠지만, 저랑 함께 발전해 가보시죠.

다음글을 항상 기다려주세요. 감사합니다.


다시 본론으로 들어와서,


설치가 너무 간단하죠? 언제나 그렇듯 제대로 설치되어있는지 한번 확인해보고 싶으시죠?






Python 안으로 들어가, tensorflow를 호출 합니다.

python 3.0 버전이신 분들은

python 대신에 python3 아시죠??

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

출력이 완료되었습니다. 결과로,

Hello, TensorFlow!





python을 배운적은 없지만, 모든 컴퓨터 언어가 그렇듯이, 각 언어의 따른 문법적 특징이 있는 것 같습니다. ㅎㅎ


리눅스 환경 설정

 

원격 접속을 하기 위해선 SSH가 필요합니다. 설치 방법은 아래를 따라하면 손 쉽게 설치 및 활용이 가능합니다.

우분투 설치가 끝난 후에 terminal를 이용하여 아래의 방식대로 따라오시면 됩니다.

 

저는 우분투 설치 한 PC의 마우스가 없기 때문에... 혹시나 저 같은 사람이 있을 수도 있어서

터미널 여는 단축키는 컨트롤 + 알트 + T

입니다.

 

개인 사용자 아이디 및 패스워드 입력 후 최초 로그인을 합니다.


이후 , 


sudo apt-get install ssh 명령을 입력해 우분투에 ssh 설치해야합니다.



자동 설치 중 물음이 나오면 Y 나 y 를 입력합니다.



SSH 설치하면서 아마 openssh-server가 설치가 됩니다.

하지만 혹시 안되었을 수도 있으니 확인겸 명령어를 날리도록 하겠습니다.

 

 sudo apt-get install openssh-server 명령어를 입력해 openssh-server 설치해줍니다.


already the newest version 같은 메시지가 출력되는  보면 이미 설치가 되었습니다.


윈도우와 명령어가 비슷하면서도 다릅니다. 오타 주의하세요~


ifconfig 명령어를 통해 자신의 ip주소를 확인을 할 수 있습니다.


일반적인 버츄어박스에서는 내부 IP를 10.0.2.15로 제공을 해 줍니다.


아래에서 보시면 ip주소 형식을 따르는 inet addr가 10.0.2.15,

      127.0.0.1 개가 존재합니다. 하지만 여기서 저희에게 필요한 주소는 Link encap:Local Loopback 바로 밑에 있는 127.0.0.1 입니다.

      (127.0.0.1 루프백 주소라고 하는데요. 자기 자신에게 패킷을 보낼 사용하는 주소라고 생각하시면 됩니다.)


혹시 자신의 PC가 내부 네트워크 망이고, 고정 IP를 사용하신다면 밑의 포트포워딩 부분에서 IP주소를 자신의 PC로 바꾸어 주셔도 됩니다.

오히려 그게 더 내부 망에서 상호 통신하기에는 편리 합니다.



 포트 포워딩은 설정은 virtualbox에서 해야합니다.

 virtualbox에서 설치한 우분투를 오른쪽 클릭하면 설정으로 들어가실 있는데요.

 거시서 네트워크 탭을 선택하시면 아래와 같은 화면의 중앙 아래쪽에서 포트 포워딩이라는 버튼을 보실 있습니다.(클릭해주세요.)

 



 



 그러면 + 버튼을 눌러 포트 포워딩 규칙을 추가해주시고 호스트 ip는 127.0.0.1, 호스트 포트는 22, 게스트 포트는 22를 입력해줍니다.


저는 내부 네트워크 및 고정 IP인 제 PC를 입력한 예제를 보여 드렸습니다. 호스트 포트는 10022를 사용한 이유는 다른 포트들과 충돌을 최대한 피하기 위해서 임의로 지정한 포트입니다. 

개인적으로? 통상 가상으로 들어갈때 포트 번호의 100을 더 붙여서 10080, 10088 이런방식의 접근을 선호합니다. ㅎㅎ 


물론 22포트로 지정하셔도 무방합니다.

 


푸티(Putty)를 이용한 접속

 

putty 다운로드는 구글에 검색하시면 많이 나오기 때문에 지나가겠습니다.


putty검색해 보세요~ 별도의 다운만 받으시면 install과정 없이 실행됩니다.

 

 푸티를 실행하면 아래와 같은 화면이 나오게 되는데 host name(ip address)과 port, connection type을 아래와 같이 설정해주시고 Open 버튼을 클릭해 우분투에 접속해주시면 됩니다.(물론 우분투는 virtualbox를 통해 실행되어있는 상태여야 합니다.)

 


 Port는 버추어 박스에서 지정한 호스트 포트를 입력해주셔야 합니다.


맨처음 연결 시도에는 인증 키를 주고 받은 메세지 창을 확인할 수 있습니다.



읽어보시면 아시겠지만... 저는 그냥 무조건 Y를 클릭합니다... ㅎㅎ


이렇게 하시면 자율적으로 원격으로 우분투에 접근할 수가 있습니다!.


저는 마우스가 없기 때문에 마우스가 붙어있는 윈도우  PC에서 원격으로 관리를 주로 하고 있습니다.


많은 도움이 되셨으면 합니다. 그럼 이만.

+ Recent posts