Python 2020. 3. 18. 22:21

흔히 말하는 Big data 크기의 데이터를 다룰 일이 거의 없다보니 pandas를 이용해서 data를 load 하고 사용하는데 크게 불편한적은 없었다. 다만 이것저것 준비하는 과정에서 수십기가짜리 csv파일을 read_csv로 그냥 호출하면 메모리가 터지는 경우를 자주 볼 수 있었다. 그러다 찾은것이 바로 chunk size!

 

pandas에 read_csv를 보면 chunksize라는 파라미터가 있다. 

import pandas as pd
df_chunk = pd.read_csv(r'/inputpath/file.csv', iterator=True, chunksize=1000000)

df = pd.concat([chunk for chunk in df_chunk])

 

아래 사이트에서 잘 설명중

http://acepor.github.io/2017/08/03/using-chunksize/

 

Using Chunksize in Pandas

Yet another blog about NLP, machine learning and programming

acepor.github.io

 

posted by 초코렛과자
:
Python 2020. 3. 9. 22:36

dictionary를 pandas dataframe으로 만들 때 종종 나는 error.

 

이유는 모든 value가 scala로 되어있기 때문이라고 한다.

간단히 pd.DataFrame(target_dict, index=[0])

이걸 넣어주면 해결. 그 외에 다른 방법은 아래 블로그에 잘 설명되어있음

 

https://rfriend.tistory.com/482

 

[Python] pandas DataFrame: ValueError: If using all scalar values, you must pass an index 에러 해결 방법

이번 포스팅에서는 Python pandas DataFrame을 만들려고 할 때 "ValueError: If using all scalar values, you must pass an index" 에러 해결 방안 4가지를 소개하겠습니다. 아래의 예처럼 dictionary로 키, 값..

rfriend.tistory.com

 

posted by 초코렛과자
:
Python 2020. 2. 29. 21:20

https://datascienceschool.net/view-notebook/3e7aadbf88ed4f0d87a76f9ddc925d69/

 

Data Science School

Data Science School is an open space!

datascienceschool.net

 

 

 

posted by 초코렛과자
:
Python 2020. 2. 29. 21:09

1. remove URL 

example="New competition launched :https://www.kaggle.com/c/nlp-getting-started"
def remove_URL(text):
    url = re.compile(r'https?://\S+|www\.\S+')
    return url.sub(r'',text)

remove_URL(example)

2. remove HTML

example = """<div>
<h1>Real or Fake</h1>
<p>Kaggle </p>
<a href="https://www.kaggle.com/c/nlp-getting-started">getting started</a>
</div>"""

def remove_html(text):
    html=re.compile(r'<.*?>')
    return html.sub(r'',text)
print(remove_html(example))

3. remove emoji

def remove_emoji(text):
    emoji_pattern = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)
    return emoji_pattern.sub(r'', text)

remove_emoji("Omg another Earthquake 😔😔")

4. remove punctuations

import string
def remove_punct(text):
    table=str.maketrans('','',string.punctuation)
    return text.translate(table)

example="I am a #king"
print(remove_punct(example))
posted by 초코렛과자
:
Python 2019. 8. 25. 12:45

3. 설계 철학

 KoNLPy 파이썬 프로그래밍 언어로 한국어 정보처리를 할 수 있게 한다. 파이썬을 이용해 한국어 정보처리를 지원하는 것은 다음의 이점을 가진다.

 

 첫째, 프로그래밍 초심자도 쉽게 시작할 수 있다. 1999년 파이썬을 발명한 귀도 반 로썸(Guido van Rossum)이 DARPA에 보낸 서신만 봐도 알 수 있듯, 파이썬은 애초에 교육용으로 고안된 소프트웨어이다. 그만큼 중고등학생이나 컴퓨터 비전공 학생도 쉽게 습득하고 사용할 수 있도록 설계단계에서부터 고안되었다는 것이다. "실행 가능한 의사코드(executable pseudocode)"라는 별명을 가지고 있을 정도로 코드가 직관적이며, 최근 이러한 이점 때문에 미국 상위권 대학을 중심으로 초심자 대상의 프로그래밍 교육을 파이썬으로 하기 시작했다는 보고도 있다. 한국어 정보처리 소프트웨어는 실제로 전산언어학 전공자 뿐 아니라 언어학, 교육학, 사회학, 정치학 등의 연구에도 널리 사용된다. 이 때, 비전공자가 프로그래밍 언어, 혹은 패키지 사용법을 학습하는데 투자하는 시간을 줄여줄수록, 연구 분야 자체에 투자할 수 있는 시간은 많아진다.

 둘째, 빠른 스크립팅이 가능하다. 특히 연구자들의 경우 환경과 파라미터를 다양하게 바꾸가며 실험을 해야하는데, 스크립팅이 용이하고 인터프리터로 직접 코드를 돌릴 수 있는 환경은 연구자의 시간을 아껴준다. 뿐만아니라, OOP를 지원하면서도 그것을 강제하지 않는 것은 큰 이점이다.

 셋째, PyPI에 공개된 파이썬의 풍부한 라이브러리들덕에 다양한 태스크를 하나의 언어로 모두 처리할 수 있다는 장점을 가지고 있다. 가령 requests, lxml 등의 라이브러리를 이용해 웹문서를 크롤링 해온 후, KoNLPy를 이용해 한국어 처리를 해서, matplotlib 등의 시각화 라이브러리로 그래프를 그릴 수 있다.

 KoNLPy는, 이와 같은 파이썬의 이점 위에 다음의 설계철학을 바탕으로 개발되었다.

 쉽고 간단한 사용법. 직관적인 함수명을 사용한다. 매뉴얼을 따로 읽는데 많은 시간을 보내지 않아도 설치를 받자마자 바로 실행해서 결과를 볼 수 있게 한다.

 확장가능성. 형태소 분석기 뿐 아니라 다양한 자연어처리기능과 말뭉치를 포괄하는 것을 목표로 하며, 따라서 말뭉치, 메소드 등이 추가되는 것을 감안하여 개발을 진행한다. NLTK가 다양한 스테머(stemmer)를 지원하는 것과 마찬가지로, 여러 형태소 분석기 중에서 목적과 취향에 맞는 것을 쉽게 선택할 수 있도록 한다.

 친절하고 상세한 문서. 패키지에서 중요도가 다소 저평가될 수 있는 부분이 문서화인데, 사실 상게한 문서와 풍부한 예제는 초심자에게 가장 큰 도움이 되는 부분이기도 하다. 특히 NLTK, Gensim[10] 등 다른 파이썬 패키지들과 함께 사용할 때, 어떻게 응용하여 사용할 수 있는지 보여주는 것도 중요하다.

 개방과 공유. 패키지는 사용 환경이 계속 변할 수 있기 때문에 지속가능성(sustainability)을 유지할 수 있는지가 중요하다. 또한, 실질적인 사용자의 니즈(needs)를 파악하기 위해서는 누구나 개발에 참여를 할 수 있게 하는 것도 중요하다. 따라서 본 패키지의 소스는 온라인에 공개하여 참여를 독려하고 있다.

 

 

4. 간단한 한국어 정보처리

4.1. 용례검색

 KoNLPy에서 특정 문구의 용례를 찾는 방법은 아래와 같다. 아래는 대한민국 헌법에서 "대한민국"이라는 문구가 어디에서 등장하는지 찾는 코드이다. 이는 konlpy.utils 안에서 concordance 메소드를 통해 찾을 수 있다. kolaw는 실험적 용도로 KoNLPy에 내장된 대한민국 법률 말뭉치이며, 대한민국 헌법이 'constitution.txt'라는 파일로 들어있다.

from konlpy.corpus import kolaw
from konlpy.utils import concordance
doc = kolaw.open('constitution.txt').read()
concordance(u'대한민국', doc, show=True)

4.2 형태소 분석과 품사 태깅

 KoNLPy 0.3.3.에서는 꼬꼬마, 한나눔, MeCab-ko 등 세가지 형태소 분석기를 사용할 수 있다. 각각 konlpy.tag에서 Kkma, Hannanum, Mecab 클래스를 호출하여 사용할 수 있으며, 모두 동일한 형태의 입력을 받아 동일한 형태의 출력을 받을 수 있도록 통일된 인터페이스를 사용한다. 다음은 그 중에서 꼬꼬마를 사용한 예시이다.

from konlpy.tag import Kkma
from konlpy.utils import pprint
kkma = Kkma()
pprint(kkma.pos(u'한국어 분석은 재밌습니다!'))

4.3 최빈 형태소 찾기

 형태소 찾기를 하고 나면 가장 빈번하게 등장하는 형태소가 뭔지 찾고 싶을 수 있다. 이럴 때는 coillections의 Counter 클래스를 이용할 수 있다.

from collections import Counter
import konlpy
doc = konlpy.corpus.kolaw.open('constitution.txt').read()
pos = konlpy.tag.Hannanum().pos(doc)
cnt = Counter(pos)
konlpy.utils.pprint(cnt.most_common(5))

5. KoNLPy와 다른 패키지 함께 사용하기

 파이썬의 패키지 인덱스인 PyPI에는 KoNLPy를 비롯하여 상당수의 서드파티 라이브러리들이 있다. 다국어 분석이 가능한 NLTK나, 토픽모델링에 사용되는 Gensim, 시각화를 위한 matplotlib는 그 중 일부일 뿐이다. 이들은 KoNLPy와 동시에 활용하면 더욱 다양한 분석을 할 수 있다.

 여기서는 KoNLPy의 Mecab 클래스를 이용해 제 25회 한글 및 한국어 정보처리 학술대회 논문집 (2013) 본문에서 명사를 추출하여 pytagcloud 패키지를 이용해 30줄 이내의 파이썬 스크립트로 [그림 1]의 위드클라우드를 생성한다.

from collections import counter
import random; random.seed(0)
import webbbrowser
from konlpy.tag import Mecab
import pytagcloud

r = lambda: random.randint(0,255)
color = lambda: (r(), r(), r())

# Read file
with open('2013-hclt.txt', 'r') as f:
    text = f.read().decode('utf-8')
# Get nouns and count
m = Mecab()
nouns = m.nouns(text)
count = counter (nouns)

# Draw word colud
tags = [{'color':color(), 'tag': n, 'size':c/10}\
                  for n, c in count.most_common(50)]
pytagcloud.create_tag_image(\
      tags, 'wordcloud.png', size=(800, 600),
      fontname='Noto Sans CJK')
webbrowser.open('wordcloud.png')

줄 2-6에서 관련 패키지를 불러온 후 , 줄 8-9에서 색을 댄덤으로 생성하는 함수를 선언한다. 그 후 줄 11-13에서 텍스트 파일을 불러와, 줄 16-18에서 빈도 높은 명사를 찾는다. 여기서는 KoNLPy의 Mecab 클래스를 사용했지만, Kkma, Hannanum 클래스로 바꿔 사용하여 결과물을 손쉽게 비교해볼 수도 있다. 줄 21-22에서는 상위 빈도 50개의 명사를 pytagcloud에 맞는 포맷으로 변환하는 과정이며, 색, 태그(명사), 태그의 크기를 전달한다. 마지막으로 줄 23-26에서 pytagcloud를 이용해 이미지를 생성한 후, 사용자의 화면에 생성된 이미지를 띄운다.

 

 

 

[출처]  http://dmlab.snu.ac.kr/~lucypark/docs/2014-10-10-hclt.pdf

 

posted by 초코렛과자
:
Python 2019. 2. 11. 22:12

pip install apscheduler

 

파이썬 scheduler는 apscheduler를 많이 이용한다

 

date: 한번 특정 시점에 실행할 때 사용

interval: 특정 주기로 연속 실행할 때 사용

cron: Crontab 형식으로 예약할 때 사용

 

다른건 잘 모르겠고 interval을 주로 사용

from apscheduler.schedulers.background import BackgroundScheduler

def function_1():
	print('scheduler test')
	sched = BackgroundScheduler()
	sched.add_job(function_1, 'interval', seconds=10)
	sched.start()

종료시에는 sched.shutdown()

 

posted by 초코렛과자
: