이전 글에서 문제가 있었던 한글 키워드로 트위터를 크롤링하는 경우 함수에서 한글 키워드를 인식하지 못하는 점을 해결하였다. 처음에는 .encode('utf-8')을 통해 한글 문자를 인코딩하여 인자로 넘겨주어어야 하지 않을까 생각을 해보았지만 찾아보다 보니 파이썬은 기본적으로 문자열을 unicode로 인식을 한다. 기본적인 한글 문자열을 입력하지 않고 unicode형식으로 인자를 넘겨주면 문제가 해결 될 것 같아서 u'한글'의 형식으로 수정을 하였더니 원하던 대로 정상적인 작동을 하였다.

# -*- coding: utf-8 -*-
# 한글 주석을 사용하기 위함
import tweepy

consumer_key = 'consumer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

file = open('crawlData.txt', 'a')

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

dataLenght = 0

class MyStreamLstener(tweepy.StreamListener): #기존 tweepy의 streamListener의 오버라이딩
def on_status(self, status):
if dataLenght==1000000: #원하는 데이터의 수를 지정하기 위한 조건문
return
dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

def on_error(self, status_code):
if status_code == 420: #stream에 연결을 하지 못하는 에러가 발생하는 경우 False를 반환
return False

if __name__ == '__main__':
myStreamListener = MyStreamLstener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
#트위터 stream 중에 []배열 안에 들어간 단어들이 있는 문장만을 필터링 해줌
#파이썬은 기본적으로 문자열을 unicode로 인식함
#키워드를 u'한글'으로 하게 되면 기본적으로 인식하는 문자 형태인 unicode로 변환하여 읽음
#사용자들 간에 대화에서 많이 등장 할 만한 단어들인 "근데", "그냥", "했어"를 포함하는 트윗들을 읽어옴
myStream.filter(track=[u'근데', u'그냥', u'했어'])

추가적으로 

       dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

이 부분에서 파일에 출력을 할 때 dataStr로 하면 에러가 났었다. 그래서 status.text를 확인해 보았더니 unicode형식인 status를 .text 모듈을 통해 해석을 하여 콘솔창에 출력을 해주는 것이었다. Unicode형식의 문자열인 DataStr을 'utf-8'형식으로 인코딩을 하여야 파일에 정상적인 출력이 된다.


파일에 출력된 결과물은 아래의 사진과 같이 나타난다.

대량의 구어체 데이터를 수집할 수 있어 좋지만 트위터의 특성상 은어 및 비속어도 많은 문제점들이 있어서 학습에 사용할 수 있을 지는 좀 미지수이다. 데이터를 정제하는 방법을 사용하던지 등의 해결책을 구해야 할 것 같다.

반응형

 Python에서 트위터 API를 사용하기 위해서는 Tweepy 모듈을 설치하여야 한다. 터미널창에서 

$pip install tweepy

 명령어를 통해 Tweepy 모듈을 설치한다.


 위의 사진과 같이 모듈 설치가 완료되면 각자 사용하는 파이썬 편집기에서 import tweepy를 통해 정상적으로모듈을 사용할 수 있다.



 이전 글에서는 사용자가 업로드한 트윗들을 출력하는 예제 프로그램이었지만 이번에는 실질적으로 데이터를 수집하기 위하여 원하는 단어가 있는 트윗들을 크롤링하는 코드를 짜보고자 한다. 우리 팀이 원하는 데이터인 구어체가 많이 포함 할 만한 단어로 "그냥", "근데", "했어"이 세가지 단어를 포함하는 트윗들을 크롤링 하고자 한다. (tweepy github를 참조 - https://github.com/tweepy/tweepy)

# -*- coding: utf-8 -*-
# 한글 주석을 사용하기 위함
import tweepy

consumer_key = 'consumer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

class MyStreamLstener(tweepy.StreamListener): #기존 tweepy의 streamListener의 오버라이딩
def on_status(self, status):
print (status.text)

def on_error(self, status_code):
if status_code == 420: #stream에 연결을 하지 못하는 에러가 발생하는 경우 False를 반환
return False

if __name__ == '__main__':
myStreamListener = MyStreamLstener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
myStream.filter(track=['hungry']) #트위터 stream 중에 []배열 안에 들어간 단어들이 있는 문장만을 필터링 해줌


 위의 코드를 통해 원하는 keyword가 포함된 트윗들을 크롤링 할 수 있다. 아직 예제코드를 사용하여 크롤링을 하여 영어 키워드로만 크롤링을 하였다. 우리가 필요로 하는 데이터는 한글 데이터이므로 한글 keyword를 입력하니 예상대로 문제가 발생하였다. 인코딩으로 이 문제를 해결 할 수 있을 것 같으나 이 부분에 대해서 아직 해결을 하지 못하여서 더 찾아보고 공부가 필요하다. 그리고 한글을 사용하게 되면 지난 인턴기간 동안 있었던 인코딩 문제를 해결해야 할 것으로 예상이 된다.

반응형

작년에 수업을 들으면서 배웠던 개념들이 시간이 지나서 헷갈려서 다시 정리를 해보려고 한다. 지극히 내 중심의 개념정리라서 나에게 필요한 부분들만 후에 다시 확인하기 쉽도록 적어 놓으려 한다.



기본 용어

   개체(Entity) 

: 표현하려는 유무형 정보의 객체, 정보의 단위, 하나 이상의 속성(Attribute)로 구성

- 개체 타입(열들의 이름의 집합 개념), 개체 인스턴스(튜플 하나하나), 개체 집합(튜플들의 집합)


   관계(Relation) 

: 두 개 이상의 개체들 사이의 연관성을 의미

- 속성 관계(개체 내의 관계), 개체 관계(개체 간의 관계)

- 1:1 관계, 1:N 관계, N:M관계


   속성(Property) 

: 개체의 특성을 표현



스키마

   외부 스키마(external schema)

- 개개 사용자의 데이타베이스 정의

- 전체 데이타베이스의 한 논리적인 부분

- subschema


   개념 스키마(conceptual schema)

- 기관 전체적인 데이타베이스 정의

- 모든 응용에 대한 전체적인 통합된 데이타 구조

- schema


   내부 스키마(internal schema)

- 저장 장치 관점에서 표현

- 개념 스키마의 저장구조를 정의



데이타언어

   데이타 정의어(DDL, Data Definition Language)

: 데이타베이스의 정의 및 수정

- 요소 : 논리적 데이타 구조의 정의, 물리적 데이타 구조의 정의, 논리적 데이타 구조와 물리적 데이타 구조 간의 사상 정의


   데이타 조작어(DML, Data Manipulation Language)

: 사용자(응용 프로그램)와 DBMS 사이의 통신 수단

- 절차적 DML : 저급어, what & how를 명세, 한번에 하나의 레코드만 처리, 응용 프로그램 속에 삽입 되어 사용, DML 예비 컴파일러

- 비절차적 DML : 고급어, what만 명세, 한번에 여러개의 레코드 처리, 독자적 & 대화식 사용(Query Language)


   데이타 제어어(DCL, Data Control Language)

: 공용 데이타베이스 관리를 위한 데이타 제어를 정의하고 기술하는 언어

- 데이타를 관리하기 위한 도구 : 보안, 무결성, 회복, 병행수행



ER다이어그램

   데이터 모델링 과정에서 현실 세계를 개체 타입과 관계 타입을 통해 개념적으로 표현을 한다. 특정 DBMS을 고려 하는 것은 아님.



데이타베이스의 종류

   계층형 데이타베이스

 : 데이터 관계를 트리 구조로 정의하여 부모, 자식 형태를 갖는 구조이다. 각 데이터 개체들은 상하 관계를 나타내는 링크로 구성된다.(상위 레코드가 복수의 하위 레코드를 갖는 구조) 데이터의 중복 문제가 생길 수 있는 단점이 있다.


   네트워크형 데이타베이스

 : 그래프 구조를 기반으로 하여 개체와 개체 관계를 그래프 구조로 연결한다. 계층형 데이타베이스와는 다르게 상위 개체를 여러개를 가질 수 있는 차이점이 있다. 계층형 데이타베이스의 중복 문제를 해결하였으나 구조가 복잡하여 추후에 구조를 변경하기 복잡한 단점이 있다.


   관계형 데이타베이스

 : 관계형 데이타 모델을 사용하며 현재까지 가장 안정적이고 효율적으로 여겨저 가장 많이 사용되는 데이타 베이스이다. Column과 Row(레코드 혹은 튜플로 불림)로 구성된 하나 이상의 테이블간의 관계를 나타낼 때 사용한다. 고유 키(Primary key)가 각 Row를 구분할 수 있도록 한다. 각 테이블/관계는 하나의 엔티티 타입을 대표하며 Row는 그 엔티티 종류의 인스턴스를 대표하고 Column은 그 인스턴스의 속성이 되는 값들을 나타낸다.


   NoSql 데이타베이스
: Not Only Sql의 약자인 NoSql은 모든 비관계형 데이타베이스 제품군을 설명하는데 사용되는 용어이다. 기존 관계형 데이타베이스는 스키마 수정이 용이하지 못하는 등 확장성이 떨어지는 등의 단점을 보완한 데이타베이스이다. 관계형 모델을 사용하지 않고 클러스터에서 잘 동작하며 빅데이터가 주를 이루는 웹 환경을 위해 구축되었고 스키마가 없는 특징을 가졌다. NoSql은 대부분이 오픈소스라는 특징도 가지고 있다.




반응형

 졸프팀에서 필요로하는 데이터는 우리가 일상생활에서 사용하는 줄임말  등의 일반 사용자들이 사용할만한 말들이 들어있는 구어체 데이터이다. 그러나 세종말뭉치 등의 데이터에서는 우리가 원하는 데이터를 얻기가 힘들었다. 사용자가 일상생활에서 사용하는 구어체 데이터를 얻기 위해 우리는 SNS를 활용하기로 하였다. 겨울방학동안 인턴 경험에서 배운 웹 크롤링 기술을 통해 데이터를 확보하고자 하였다. 우리가 사용했던 Scrapy나 Beautiful Soup을 사용 할 수도 있지만 트위터 같은 경우는 API를 제공하여 주기 때문에 Python에서 사용할 수 있는 API인 Tweepy를 사용하고자 한다.


 먼저 트위터 API를 사용하기 위한 권한을 얻기 위해 https://dev.twitter.com/index 에서 API Key를 발급받는 과정을 설명하려 한다.


1. 트위터 개발자 홈페이지에 접속하여 하단의  Tools 메뉴의 Manage my apps를 클릭한다. (https://dev.twitter.com/index)



 2. Create New App 버튼을 눌러서 새로운 App을 생성한다. (API Key를 발급 받은 적이 없으면 아무것도 나타나지 않는다.)


3. Application을 만들기 위한 정보들을 입력한다.




4. API Key 발급 완료.


 위와 같은 창이 나오면 API Key가 제대로 발급된 것이다. Python에서 Tweepy모듈을 사용하기 위해서 필요한 Consumer key와 access token을 확인하기 위해서는 Keys and Access Tokens메뉴를 들어가서 확인할 수 있다.

Access token은 처음엔 확인을 할 수 없다.

위의 화면에서 Create my access token을 클릭하면 확인 할 수 있다.



발급받은 API Key를 통해서 사용자가 twitter에 작성한 글들을 출력하는 간단한 예제를 만들어 보았다.

import tweepy

consumer_key = 'consemer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

public_tweets = api.home_timeline()
for tweet in public_tweets:
print tweet.text

반응형

두번째 숙제인 외부에서 데이터를 저장해주기 위해 MySql에 접근할 수 있는 계정을 만드는 과정을 써보고자 한다.


신기하게도 첫 시작인 MySql에 접속하는 부분에서 부터 문제가 생겼다....(ㅠㅠ)

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

이런 에러 메세지가 출력되었다. 구글링을 해보니 나처럼 MySql을 설치한 후인 경우에는 MySql 클라이언트만 설치 된 경우와 MySql이 시작되지 않는 두가지의 상황에 의해서 상황이 발생한다고 한다.

MySql을 설치할 때 MySql-server도 같이 설치를 했었으나 혹시 몰라서  

rpm -qa | grep ^mysql

 명령어를 통해서 확인 해봤더니 

community-server-5.6.36-2.el7.x86_64

버전이 깔려있음을 확인할 수 있었다. 그러므로 나의 경우에 맞는 MySql이 시작되지 않은 경우의 방법으로 생각을 해보고 해결해 보고자 하였다.

service mysqld start 

명령어를 통해서 MySql 서비스를 시작하니 mysql -u root -p 명령어를 통해 MySql에 접속을 할 수 있었다.



 이제 본격적으로 MySql에 접근할 수 있는 계정을 등록하는 과정을 진행해보려 한다. 나는 항상 내가 잘못을 하는 건지 온갖 에러들이 나는데 이번에도 역시 이슈들이 생겼다!

우선 현재 데이터베이스의 사용자를 확인하기 위해 MySql database를 선택하여 host, user password를 확인해보려 한다.

select host, user, password from user;

현재 아무 계정도 등록을 안해서 local과 관련된 루트계정만 떴다. 이제부터 외부에서 접근을 할 수 있는 계정을 생성을 한다. MySql에 접근을 하는 계정을 만드는 명령어는 create user이라는 명령어를 사용한다.

create user userID;

userID부분에 자신이 원하는 ID를 넣어주면 된다. 그리고 아이디에 대하여 로컬계정인지, 외부 계정인지 를 설정하고, 비밀번호를 설정해 주도록 해줘야 하는데 이 부분에서 이슈가 하나 발생하였다. 

create user 'userID'@'%' identified by 'password';

//'%'는 외부에서 접근하기 위한 계정임을 나타내는 것, 내부에서 접근하기 위한 계정은 localhost를 써준다

ERROR 1396 (HY000): Operation CREATE USER failed for 'accessId'@'%'

위처럼 에러가 났다. 구글링을 해보니 stackoverflow에 비슷한 에러가 올라왔다. 대강 해석해보면 이미 userID로 아이디를 만들고 다시 userID로 만들어서 설정을 하려해서 충돌이 난 것 같다. 해결 방법으로는 userID를 drop 명령어를 통해 삭제하고, mysql privilege를 flush 해주어야 한다. privilege flush는 사용자를 추가, 삭제, 권한을 변경했을 때 MySql에 변경사항을 업데이트하기 위한 명령어이다. 이 과정을 명령어로 보게 되면 아래와 같다.

drop user 'userID';

flush privileges;

create user 'userID'@'%' identified by 'password';

위의 과정을 끝내고 host, user, password from user을 다시 확인해보면 host가 %인 user가 보이게 될 것이다. 외부에서 접근이 가능한지 확인하기 위해서 새로운 터미널창에서 명령어를 통해 접근을 해보았다.

mysql -h서버주소 -u아이디 -p패스워드

위의 명령어를 통해 접속을 하면 아래와 같이 정상적으로 접속이 됨을 확인할 수 있다. 접속이 정상적으로 되면 외부에서 접속 가능한 계정을 성공적으로 만든 것이다.

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 13

Server version: 5.6.36 MySQL Community Server (GPL)


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

반응형

'Dev > MySql' 카테고리의 다른 글

[MySql] 테이블의 character set 확인 및 변경  (0) 2017.10.11
Linux(Redhat)에 MySql 설치하기  (0) 2017.04.29

20170404 node.js 서버구축 해결
-> 지금까지
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE

이러한 unhandled 'error'가 여러개 났음
-> port번호 충돌 때문
-> security group에서 inbound 규칙에서 http 규칙을 추가하여 해결 (:443 node.js서버 / :80 php서버)

php서버를 구축하기 전에는 서버가 잘 돌아가도 external에서 접근이 어려웠던 이유는 아직 궁금함....




20170405
AWS 웹 북
AWS ubuntu서버에 tensorflow설치
-> 에러나는데 이유를 모르겠음




20170406
tensorflow anaconda위에 설치 중 에러발생 -> 내일 완전 처음부터 다시
안드로이드와 통신 공부 -> 소켓 통신서버 예상(http 통신 해야할듯)
-> 문제점 : 텐서플로우는 파이썬인데 node.js로 서버를 생성하면 텐서에서 데이터 어떻게 받아올지?.... 좀 더 생각해봐야 할듯 (차선으로 장고 파이썬서버를 만드는 건?)


socket통신 관련 설명
GPU서버 js파일 위치 : ~/Okey_server
->일단 testapp.




20170407
tensorflow 환경설정중
cuda설치 에러가 발생
해결
-> ubuntu16.x버전에 지원하는 cuda가 다름
-> cuda-repo-ubuntu1604_8.0.61-1_amd64.deb 설치로 해결
cuDNN설치 에러 발생




20170410
cuDNN 설치 에러 해결
-> 우분투 버전에는 맞게 설치하였으나 cuDNN을 scp -i 명령어로 mac terminal에서 전송과정에서 cuDNN파일을 .tgz확장자까지 다 안쓰고 전송하여 에러가 났던 것이었음


Tensorflow
설치는 다 한 것 같으나 텐서플로우 라이브러리를 import하면 에러발생


node.js 웹서버를 백그라운드로 계속 켜놓는 방법을 사용해보려고 했으나 잘 안됨





20170412
클라이언트
{"request" : ["spacing", "modified"],
"spacingData" : "수정할 스트링1",
"modifiedData" : "수정할 스트링2"}

서버
{"response" : ["spacing", "modified"],
"spacing" : "띄어쓰기 된 스트링"
"modified" : {"수정해야할 오타1":
["공백단위 순번","추천단어1","추천단어2",…],
"수정해야할 오타2":
[…],

}
}


자동 띄어쓰기 모델인 파이썬 코드를 불러오는 불러오는 과정에서 에러.
일단 임의의 json string으로 시도중




20170413
tensorflow는 모델이 아직 구축되지 않았으므로 환경설정은 잠시 멈춤
자동 띄어쓰기 모델을 불러오기 성공
rpc가 아닌 chile_process 중 spawn을 사용해 python코드의 자동완성이 완료된 string을 stdout으로 받아와 json format으로 변환하여 애플리케이션에게 보내줌
node.js에서 json 사용하는 법



 일단 Trello에 올렸던 이슈들이다.  정리를 해보고 싶지만..... 이미 지나간 일들. ㅎ

 앞으로를 정리해 보자. 일단 Tensorflow 환경설정 문제는 해결이 안되었다. 인스턴스를 새로 만들어서 다시 처음부터 시작하는 것이 좋을듯. Cuda나 cuDNN버전이 여러개가 설치되어 있는데 이 부분에서도 충돌이 일어나는 것인지, 계속해서 에러가 나는데 구글링, 스택오버플로우 등에서도 답을 찾지 못하고 몇일을 버렸었다... 어차피 Tensorflow팀이 python 3.5버전 이상을 쓰기로 확정하였고, 이에 맞춰서 처음부터 하는 것이 좀더 시간낭비를 줄일 수 있는 방법이라 판단된다.

 Node.js는 어플리케이션과 통신을 하고, Python 코드를 'child_access'모듈을 통해서 불러오는 방법을 사용하였었는데, 앞으로 올라오게 될 코드들이 바뀌게 되면 방법이 바뀔 수도 있을 것 같다. 이 부분에 대해서는 다시 수정이 들어가야 할듯하다.

반응형

AWS 인스턴스를 받게 되었다. Linux 버전을 확인 해보니(grep . /etc/*-release 명령어를 사용하면 확인할 수 있음) Red Hat 7.2 버전이었다. 처음 사용해 봐서 찾아보니 나한테 익숙한 Ubuntu와는 다른 계열이었다. CentOs와 같은 계열이라 하니 CentOs 명령어로 사용하면 될듯하다.

첫번째 숙제인 MySql을 설치하는 과정, 그 과정에서의 이슈들을 적어보려 한다.

먼저 MySql 홈페이지에 나와있는 방식 대로(https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/) wget 명령어를 설치하고, wget 명령어로 rpm파일을 다운받은 후 설치를 진행하려 하였으나 wget 명령어로 rpm파일이 제대로 다운이 되지 않아서 yum install 명령어를 통해 진행을 하고자 하였다.

root 계정에서 설치를 하기 위해 sudo yum install mysql mysql-server  명령어를 통하여 설치를 하였다.

MySql의 버전을 확인하여 설치가 완료된 것을 확인할 수 있다. 설치를 완료하고 MySql 서비스를 실행하였다가 종료를 한 뒤 status를 확인하였는데(28일 오전)

위의 사진처럼 로그가 27일로 찍히는 점이 의아했었다. 확인해보니 instance 기준이 EDT로 잡혀서 그렇게 되었던 것 같다. 영향을 받는 것은 아니지만 그래도 궁금했던 점이어서 확인을 하고 넘어갔는데 후에 도쿄 서버를 기준으로 생성했던 instance로 확인을 한번 더 해봐야겠다.


다른 Tistory 블로그들을 보면 Trello처럼 문단을 나누는 선? 들이나 코드를 박스에 보여주는 기능들이 있는 것 같던데 아직 못 찾아서 천천히 찾아보면서 포스팅 퀄리티를 높이고싶다!


반응형

+ Recent posts