파이썬에서 데이터를 읽을때, 보통은 모든 데이터를 메모리에 올리고 사용하는 경우가 많다.
하지만, 작은 사이즈의 데이터는 가능하지만 큰 사이즈의 데이터를 메모리에 올리고 사용하는게 가능하다면?
피시에 감사하자. 큰 데이터셋을 사용하는 경우인 데이터 학습 시킬 학습 데이터, 통계를 낼때 데이터 등등..
이때는 데이터를 built-in 함수인 iterator, generator를 이용을 해야만 한다. MUST!!

Iterator, Generator

자 interation을 어떻게 쓰는게 좋은가?

python for x in range(10): print x

range(10)은 리스트를 생성하는것과 동일하다. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] list를 iteration object로 생성이 가능한데,

iteration = iter(range(10))

만약 위의 값을 for문으로 돌리면 아래와 같이 사용이 가능하다.

으로 FIFO으로 출력이 가능하다.

여기서 중요한게 있는데, 파일입출력을 예로 들어보겠다. 만약에 파일입출력을 해서 간단한 for-loop을 돌리는 프로그램을 작성한다고 가정할때, 위의 range를 통해서는 모든 파일의 내용을 메모리에 올려야하기 때문에 OOM이 날 가능성이 높다.

보통 large dataset을 사용하는 Tensorflow나 Keras와 같은 플랫폼에서도 데이터를 iteration을 통해 읽는 경우가 많다. (학습하는 데이터의 양이 매우 많은 경우)

그렇다면 range를 사용하지 않고, 어떻게 모든 파일을 처리할수 있을까? 그 답은 generator를 사용하면 된다.

위에서 사용한것처럼 g의 object를 사용하면 되는데, next(g)를 통해서 큐형식으로 데이터를 뺄수도 있다.

위에서 사용한 yield는 데이터를 주고, 받는 역할을 한다고 생각하면 된다. 하나의 통로가 있고 그 통로에 데이터를 밀어넣어주고 받아주는 역할 위에서 for문 내부에 있는 yield를 통해서 i+3의 값을 어딘가 버퍼에 넣어주고, generator를 통해서 하나씩 값을 던져준다.

위 예제에서 만약 for-loopwhile-loop으로 교체하면 어떻게 될까? 위에서 언급하듯이 yield는 값을 가져다 주기도 하지만, 넣기도 가능하다. 하지만 사용시에 주의해야할 점이 있는데 일단 아래와 같이 작성하면 결과는 잘 나온다.

위에서 만약 next(g)를 사용하지 않고 g.send(2)를 바로 사용하면 어떻게 될까? TypeError: can't send non-None value to a just-started generator 이런 에러가 난다. 그 이유는 yield에 이미 1이라는 값이 들어있고, 그 값을 내보내기 위해서 대기하고 있습니다. 근데 그 상태에서 g.send(2)를 해버리면, 이미 yield의 1이 들어있기 때문에 에러가 난다. 그렇기 때문에 next(g)를 한번 수행하고, 그 이후에 While-loop을 사용하기 때문에 g.send(2)를 무수히 수행이 가능!

파일 읽기

보통 작은 파일은 아래와 같이 데이터를 읽을 수 있다. 간단하게 읽기가 가능한데, 극단적으로 나의 메모리 사이즈가 4GB라고 할때, 1GB의 데이터를 읽을때 아마도 OOM이 날것이다.

```python f_in = file('text.txt', 'r')

for line in f_in.readlines(): print line[:-1] # 강제개행이 들어가니까... ```

위 문제를 해결하기 위해서는 generator를 이용해서 파일을 읽으면 OOM없이 파일을 쉽게 읽을 수 가 있다. large dataset을 읽을때도 거의 모든 방법이 아래와 같다. 전체의 데이터를 메모리에 올리지 않고, 한줄 씩 읽는 방법이니, 큰 데이터는 아래와 같이 사용하자.




[부동산 데이터 분석] #3. 실거래데이터 쌓기 (데이터를 꼭 DB에 저장해야 한다는 생각을 버려~ 노하우 공유!!)


# 주제

부동산 데이터 분석

[부동산 데이터 분석] #1.데이터의 출처 어디일까? 공공데이터 포털의 실체 (feat. Postman) 내집마련이 시급하다!

[부동산 데이터 분석] #2.재료만들기 (“11110” 아는사람은 Skip, 모르면 드루와)


에 이어서 실거래 매매 데이터 쌓기 최종회!
어떻게 함수형태로 구성하고 데이터를 저장할까~?

# 오늘 다루는 주제

* 이전 영상 리뷰
* 파이썬 함수형태
* 어떻데 유니크한값을 찾을까?
* 데이터 저장할때 어떻게 효율적으로? 데이터 저장구조
* 날짜데이터는 어떻게 생성할까? (datetime)
* 주피터랩 (JuipyterLab)
* https://www.youtube.com/watch?v=sqMYhAIaYZQ

# URLs

* https://pandas.pydata.org
* https://jupyterlab.readthedocs.io/en/stable/

# 블로그 (http://ourcstory.tistory.com)

* 영상을 보시고 궁금한점이 있으면 아래 댓글로 남겨주시면 답변 할께요!
* 이것이 알고싶다! 하시는 내용이 있으면 말씀해주세요~
(ex: 매크로는 어떻게 만들어요? OO할때 사용하는 툴은 뭐예요?, 데이터 분석이 뭘까요?, 영상에서 언급한 OO에 대해서 더 자세하게 설명해주세요)




유투브 바로가기

# 주제

안녕하세요 동화입니다.
네이버 댓글 봇, 야구자동예매, 웹클롤러는 어떻게 만들어질까?
브라우저에서 하는 작업을 모든것을 자동화할 수 있습니다.
잘못 사용하면 악용이 될 수 있습니다.

# 오늘 다루는 주제

* 네이버 댓글 논란! 어떻게 만들어지는 걸까 ?
* 나보다 빠른 예매, 야구 공연 티켓을 어떻게 할까?
* 데이터를 모으는 크롤링(Crawling)은 어떻게 할까?
* Selenium, WebDriver를 설치하고, 실습까지!!
* 브라우저에서 하는 모든 작업은 자동화가 가능합니다!

# URLs

* https://selenium-python.readthedocs.io/
*http://chromedriver.chromium.org/downloads
* http://ourcstory.tistory.com/227


# 블로그 (http://ourcstory.tistory.com)

* 영상을 보시고 궁금한점이 있으면 아래 댓글로 남겨주시면 답변 할께요!
* 이것이 알고싶다! 하시는 내용이 있으면 말씀해주세요~
(ex: 매크로는 어떻게 만들어요? OO할때 사용하는 툴은 뭐예요?, 데이터 분석이 뭘까요?, 영상에서 언급한 OO에 대해서 더 자세하게 설명해주세요)


Neural Factorization Machines for Sparse Predictive Analytics

Abstract

  • web applications의 predictive tasks는 categorical variables을 modeling하는게 필요하다.
  • categorical data
    • user IDs
    • demographics
    • genders
    • occupations
  • standard machine learning에서는 binary features의 set으로 변환을 했다 (one-hot encoding). 결과적으로 feature vector는 highly sparse한 결과물이 생긴다. 이러한 sparse data를 효과적으로 학습하기 위해서는 features 사이에 interactions를 설명하는게 중요하다.

  • Factorization Machines(FMs)는 second-order feature interations을 효율적으로 사용하는 유명한 솔루션이다. 그러나 FM은 feature interactions을 linear way로만 학습을 할 수 있고, real-world data의 non-linear와 complex inherent structure를 capturing하기 충분하지 못하다.

  • deep neural networks는 최근 non-linear feature interactions를 학습하는데 적합하다.
    • Wide & Deep (google)
    • DeepCross (Microsoft)
  • deep structure는 그동안 train하는게 어렵다.

  • Neural Factorization Machine (NFM)을 제안 sparse settings에서.

  • NFM은 seamlessly combine
    • linearity of FM in modeling second-order feature ineteractions
    • non-linearity of neural network in modeling higher-order feature interactions
  • 기존 알고리즘과 비교했을때 shallower structure, better performance, much easier to train and tune in practice

Introduction

  • Predictive analytis는 most important techniques information retrieval(IR), data mining(DM), ranking from recommendation systems, targeted advertising to search ranking, visual anlaysis, and event detection
  • predictive는 estimating a function으로서 formulated하는 task를 말한다. 예를 들면 real value는 regression, classification은 categorical target. continuous predictor variables는 images, audio
  • web applications에서는 대부분 discrete and categorical 데이터

    • online advertising
    • predict how likely (target) a user (first predictor variable) of a particular occupation (second predictor variable) will click on an ad (third predictor variable)
    • predictive models을 build 하기 위해서는 공통적으로 categorical variable을 a set of binary features으로 변경을 해야 한다.(a.k.a feature vector) - one hot encoding

    • 그 이후에 standard machine learning에 적용을 한다.

  • possible value of categorical predictor variables에 따라 generated feature vector는 sparse하지만, 매우 높은 dimension을 가질 수 있다.
  • sparse data로 효율적으로 ML models을 build 하기 위해서는 features 사이의 interactions을 설명하는게 가장 중요하다.
  • crafting combinatorical features
    • cross features: constructing new features by combining multiple predictor variables
    • occupation = {banker, docker}, gender = {M, F} ---> occupationgender = {bankerM, bankerF, dockerM, docker_F}
  • crafting combinatorical features는 high cost로 heavy engineering efforts, useful domain knowledge to design effective features가 요구 된다. 이 말은 즉 solutions은 새로운 문제 또는 도메인에서 generalize하는게 어렵다

  • argumenting(늘리다) feature vectors 대신에 다른 솔루션으로 ML model을 디자인 하기 위한것으로 raw데이터 에서 feature interfactions을 자동으로 배운다. factorization machines (FMs)는 embededs features를 latent space와 embedding vectors의 inner product를 통해서 features 사이의 interactions을 모델링 한다.

  • FM의 성능은 linearity에서 한계가 있다. (modeling of pairwise feature interactions only)
  • real-world data는 complex, non-linear underlying structure를 갖고 있다. 결과적으로 FM은 충분히 real-word의 데이터를 표현하기에는 부족함이 있을 것이다. higher-order FMs가 제안되긴 했지만, 그것은 여전히 linear models에 속할 것이고, estimate하는데 어려움이 있을 것이다. higher-order FMs은 FM보다 더 좋은 성능을 보여주고 있다고 주장을 하지만, linear way의 higher-order interactions을 lineary way로 modeling했기 때문이라고 주장하고 있다.

  • sparse data prediction인 Neural Factorization Machiens (NFMs)을 제안한다.

    • modeling higher-order and non-linear feature ineteractions
  • Bilinear Interaction (Bi-Interaction) pooling 의 새로운 operation을 devising했다.
  • FM을 neural network framework에서 첫번째로 위치 시켰다.
  • Bi-Interaction layer위에 non-linear lyaers를 stacking을 shallow linear FM을 deepen 할 수 있었다.
  • higher-order and non-linear feature interactions은 FM의 표현을 증가시킬 수 있었다.
  • traditional deep learning methods 방식인 low level에서 concatenate, average embedding vectors와 반대로 이 논문에서는 Bi-Interaction pooling informative feature interactions을 encodes 했다. Bi-Interaction은 따라오는 deep layers에서 meaningful information을 배우기 수월하게 해준다.

  • Contributions

    • Bi-Interaction pooling operation
    • FM아래 neural network framework를 deep하게 해서 higher-order, non-linear interactions을 학습시킨것
    • extensive experiments

Modeling Feature Interactions

  • large space of combinatorical features의 이유로 feature enginerring을 하거나, feature selection techniques(boosted decision tree to select imprortant feature interactions)을 사용했다.
    • 위 솔루션은 tarining data에서 갖고 있지 않은 combinatorical features을 generalize 할 수 없다.
    • 데이터가 많으면 문제 해결이 아닌가?
  • 최근 embedding-based methods가 popular한데, raw data로 부터 feature interactions을 학습한다.
  • high-dimensional sparse features를 low-demensional latent space로 embedding을 하면 model은 unseen feature combinations을 generalize를 할 수 있다.
  • domain과 상관없이 factorization machine-based linear models, neural network based non-linear models에 적용이 가능하다.

Factorization Machines

  • factorization machines은 collaborative recommendation을 위해서 제안된 방법
  • FM은 모든 feature의 interactions에 대해서 학습을 한다.
  • matrix factorization (MF)와 반대로 FM은 오직 두개의 entities의 관계를 모델링
  • FM은 linear/logistic regression (LR)과 함께 second-order factorized interactions between features.
  • FM은 sparse data prediction을 위한 effective embedding methods

Expressiveness Limitation of FM

  • FM의 성능은 좋지만, FM은 linear models이다. 다른말로 target은 linear 모델로 설명이 가능하다.
  • FM을 pre-training해서 사용하면 성능이 더 좋음

Deep Neural Networks

  • speech recognition, computer vision, natural language processing에 deep learning이 사용이 되고 있는데, IR과 DM에서는 많이 사용을 안하고 있는데, 그 이유는 대부분의 데이터가 sparse하기 때문이다.
  • DNNs이 dense data로 부터 patterns을 학습하는데 강력한 능력을 갖고 있지만, sparse data에서는 less scrutiny(정밀한 조사)이고, sparse settings에서 feature interactions을 효율적으로 learning하기 위해 어떻게 employ해야하는지 모른다.
  • 최근들어서 DNNs을 sparse predictive analytics에서 사용하기 시작했다.
    • neural collaborative filtering framework는 users와 items의 관계를 interactions을 학습한다. 이후에 model attribute interactions을 위해서 CF가 등장. 그러나 이 방법들은 두개의 entities의 관계만을 학습하고, general settings of supervised learnings을 직접적으로 지원하지 않는다.
    • FM-supported Neural Network(FNN), FM으로 feature embeddings을 사용해서 DNNs을 초기화
    • Wide & Deep, Multi-layer perceptron, concatentation of feature embeddings vectors to learn feature interactions
    • DeepCross
    • Wide & Deep 과 유사하고, MLP를 residual network로 변경

Optimization Difficulties of DNN

  • neural network-based approaches의 공통된 structure
    • stacking multiple layers above the concatenation of embedding vectors to learn feature interactions
  • implicit way의 combinatorical features of arbitary orders 을 배울수 있는 multiple layers
  • 단순하게 concatenating feature embedding vectors는 too little information about feature ineteractions in the low level
    • item, user를 단순하게 concatenating을 하면 embedding vectors는 collaboriative filtering에서 very poor results를 가져다 준다.
  • 위 문제를 해결하기 위해서, deep layers을 사용해 meaningful interaction function을 학습하는 방법이 있다. multiple non-linear layers는 feature inteactions을 잘 학습할 수 있다.
  • deep architecture는 vanishing/exploding gradients, overfitting, degradation, among otehrs의 notorious(유명한) problems으로 optimize하는게 어렵다.

  • DNNs의 optimzation의 어려움을 설명하기 위해서, training, test error를 each epoch에 plot을 했다.

  • 실제 실험에 사용한 parameters와 architectures를 사용했다.
    • Wide&Deep 3 layers, DeepCross 10-layer residual network
  • Wide&Deep에서 training error는 상대적으로 높았다. 이 문제를 degradation problem 때문
    • pre-training 해서 degradation problem을 해결
  • DeepCross에서는 낮은 training error를 보여주었지만, high test error를 보여줬다. overfitting
    • pre-training을 해도, overfitting 을 해결할 수 없었음
  • FNN으로 pre-train을 하고, DNNs을 initialize했다. (11%의 성능향상)
  • concatenating feature embedding vectors, Bi-Interaction operation을 적용
    • informative representation이 더 높음
    • higher-order interactions을 학습하기 위해 subsequent non-linear layers를 도와준다.

Neural Factoriaztion Machines

  • NFM은 sparse data modeling을 하기 위해서 FMs와 neural networks를 합쳤다
  • 거기에 플러스로 dropout, batch normalization을 사용

The NFM Model

  • factorization machines과 유사하게 NFM은 general machine learner
  • sparse Vector가 input으로 들어올때, xi=0은 i-th feature의 값은 존재하지 않는다를 의미
  • f(x)는 NFM의 core component로서 feature interactions을 modlieng하기 위한 것. (multi-layered feed forward neural network)

  • Embedding Layer

    • 임베딩 레이어. 임베디드 레이어는 각 기능을 밀집된 벡터 표현으로 투사하는 완전히 연결된 레이어입니다. 공식적으로, vi ∈ Rk를 i 번째 피쳐에 대한 임베딩 벡터 라하자. 우리는 임베딩 벡터 Vx = {x1v1, ..., xnvn}의 집합을 얻어서 입력 특징 벡터 x를 표현한다. x의 드문 드문 한 표현 때문에 비 - 제로 피처, 즉 Vx = {xi vi}에 대해 임베딩 벡터를 포함하기 만하면됩니다. 여기서 xi는 0입니다. 단순히 입력 특성 값으로 매립 벡터를 재조정했습니다 실제 가치있는 기능을 설명하기 위해 임베딩 테이블 조회
    • embedding layer는 fully connected layer로 각 feature를 dense vector representation으로 project
    • vi는 i-th feature에 embedding vector
    • embedding 이후에 input feature vector x를 나타내기 위해 embedding vectors의 set을 얻게 된다. Vx = {x1v1, ... ,xnvn}
    • x의 sparse representation 때문에, non-zero features를 위한 embedding vectors를 포함해야 한다.
  • Bi-Interaction Layer
    • embedding set Vx를 Bi-Interaction layer에 feed
    • pooling operation (set of embedding vectors을 one vector로 converts)
    • embedding space에서 features사이에 second-order interactions를 encodes -> k-dimension vector로 Bi-interaction pooling
    • Bi-Interaction pooling은 extra model parameter가 필요하지 않고, linear time에 효율적으로 계산이 가능하다.
    • 이 property는 average/max pooling, concatenation과 같다.
    • pairwise feature interactions modeling을 하는데 추가적인 코스트가 필요 없다.
  • Hidden Layers
    • 위에서 Bi-Interaction pooling layer는 stack of fully connected layer로, features 사이에 higher order interactions을 학습할 수 있다.
  • Prediction Layer

    • last hidden layer Zl은 final prediction score로 변환되는 ouput vector
  • NFM Generalize FM

    • FM은 shallow, linear model, hidden layer가 없는 NFM의 special case에서 볼 수 있다.
    • L에 zero를 세팅하고 Bi-Interaction pooling to prediction score (L은 hidden layer의 개수)
    • neural network framework의 아래에서 FM의 표현력을 확인할 수 있다.
    • FM에서 learning, generalization ability를 향상시키기 위해서 다양한 neural network techniques를 사용했다.
    • dropout을 써서 overfitting을 prevent
    • Bi-Interaction layer는 regularize FM을 하기 위한 방법으로 사용, conventional L2 regularization보다 더 효과적인 것을 찾아 냈음.
  • Relation to Wide&Deep and DeepCross

    • NFM은 여러 유사한 deep learning 솔루션과 유사하게 multi-layered neural architecture를 갖고 있다.
    • key difference는 Bi-Interaction pooling component는 NFM에서 만 사용하고 있다.
    • Bi-Interaction pooling을 concatenation과 변경하고 MLP(residual units)에 적용하면 Wide&Deep (DeepCross)
    • concatentation operation의 분명한 한계는 features 사이의 어떤 interactions은 해결을 할 수 없다. 그 처럼 이 deep learning approaches는 deep layers에서 meaningful feature ineteractions을 배워야 하는데, 실제 train하는게 매우 어렵다.
    • low level에서 Bi-Interaction pooling captures second-order feature ineteractions은 concatenation operation보다 더 informative하다.
    • NFM의 subsequent hidden-layers가 수월하게 useful higher-order feature ineteractions을 더 쉽게 가능
  • Time Complexity Analysis

    • Bi-interaction pooling은 O(kNx)time에 효율적으로 계산이 가능하다. (=FM)
    • hidden layers에서 추가적인 비용이 발생한다.
    • hidden layer l은 O(dl-1 dl) > 다 필요없고 그냥 좋다. Wide&Deep, DeepCross와 같다.

Learning

  • NFM은 다양한 prediction tasks에 적용이 가능하다. (regression, classification, ranking)
    • regression - squared loss object function을 사용
    • classification - hinge loss, logloss를 사용
    • ranking task - pairwise personalized ranking loss, contrastive max-margin loss
  • 본 논문에서는 regression에 초점을 맞췄지만, ranking/classifiation도 같은 방법으로 진행하면 된다.
  • Stochastic gradient descent (SGD)은 neural network models을 최적화 하기 위한 universal solver

  • Dropout

    • dropout는 estimating할때 사용하는 전체 네트워크에서는 disable 되어야만 한다.
  • Batch Normalization
    • multilayered neural network의 어려움중 하나는 fact of covariance shift의 원인
    • 각 layers의 inputs의 distribution이 training하는 중에 이전 layers의 변화의 파라미터로서 변화된다.
    • 그 결과 later layer은 이 변화(noisy)들에 대해서 자신들의 parameters의 업데이트할때 adapt할 필요가 필요하다.
    • 반대로 training 이 slow down
    • 위 문제를 해결하가기 위해 batch normalization (BN)이 등장!,
    • layer inputs을 normalizae한다 zero-mean unit-variance Gaussian distribution 각 mini-batch training에서
    • faster covergence, better performance의 결과를 준다.

Experiments

  • Bi-Interaction pooling이 효율적으로 second order feature ineteractions을 찾을 수 있는지?
  • 어떻게 dropout과 batchnormalization으로 Bi-Interaction pooling에 적용하는지
  • FM보다 features사이에 higher order interactions을 찾을 수 있는지?
  • Wide&Deep, DeepCross와 비교했을때 더 좋은지?

Experimental Settings

datasets

  • frappe
  • movielens
  • Dataset, Instance #, Feature #, User #, Item #
  • 70% training, 20% validation, 10% testA

Evaluation Protocols

  • RMSE를 evaluate performance하는데 사용하고, explicit ratings와 함께 recommendations, click-through rate prediction 과같은 regression task에서 많이 사용된다.

Baseline

  • sparse data prediction에 design된 embedding-based models과 비교
  • LibFM
  • HOFM
  • Wide&Deep
  • DeepCross

Parameter Settings

  • learning rate 모든 method에 대해서 [0.005, 0.01, 0.02, 0.05]
  • regularization (prevent overfitting)
    • LibFM, HOFM에는 overfitting을 피하기 위해서 regularization
    • Wide&Deep, DeepCross, NFM에서는 drop out [0, 0.1, 0.2, ... ,0.9]
    • DeepCross에서는 regluarize가 잘 되지 않았음 (residual units)
  • batch size
    • batch size가 클수록 training time이 줄어들고 convergence rate가 줄어든다.
  • embedding size는 64로

Study of Bi-Interaction Pooling (RQ1)

  • Bi-Interaction pooling operation의 성능을 비교하기 위해서 hidden layer가 없이 prediction socre를 계산! (NFM-0)
  • NFM-0은 다른 모델의 expressiveness에 영향을 받지 않아 FM과 동일하다고 생각하면 된다.
  • drop out을 L2 regularization, batch normalization impact를 비교!

Dropout Improves Generalization

  • LR, reg, drouput을 각각 비교했을때, dropout을 한 결과가 더 좋았음.
  • L2 reg보다 dropout의 generalization이 좋은 이유
    • L2 regularization은 values of parameters를 only suppresses 하기 때문에, 반면 dropout은 ensembling multiple sub-models

쥬피터(Jupyter) Notebook에서 Slack 메시지를 보내는 방법

데이터 분석일을 하다보니 작업을 돌려놓고, 다른 업무를 보는 일이 많다.
여러개를 병렬적으로 돌려야 하다보니, 언제 어떤 작업이 완료했는지 알람을 받는게 필요했다.
일단 단계는 4단계로 크게 나누어 봤다.

  • sendlogto_slack 의 python 코드 작성
  • sendlogto_slack을 bashrc에 alias로 지정
  • ipython에서 alias를 추가하는 부분 코드 작성 및 startup 스크립트 작성
  • ipython에서 alias로 메시지보내기 사용

sendlogto_slack 파이썬 코드 작성하기

bashrc에 alias로 등록

bashrc에 아래 코드 추가 alias msg="python send_log_to_slack.py" $1 $ msg "THE END"

ipython에서 alias 추가 코드 작성 및 startup 스크립트 작성

  • /home/username/.ipython/profile_default/startup/alias.py

ipython에서 alias로 메시지 보내기

In [ ]: msg "작업완료" In [ ]: text = "안녕하세요" In [ ]: msg $text

파이썬에서 pickle을 이용해 dictionary를 저장하고 로드하는 방법

중간 결과를 저장하거나, 최정 결과를 저장하기 위해 dictionary의 객체를
그대로 로컬의 디스크로 저장하는 방법은 자주 필요하다.
key, map을 만드는 경우에도 중간 데이터를 생성해 놓은 뒤에,
이미 데이터가 있는 경우에는 로드해서 바로 사용하면 효율적이다.

코드

pickle을 이용해 데이터의 사이즈를 줄이고, 기존 textfile로 저장, 로드의 시간 소요가 절약된다.

python에서 dataframe을 사용하다 보면, 결과가 ...으로 나오는 경우가 있다.

전체적인 결과를 보고 싶을때는 간단하게 pd에 option을 세팅해주면 된다. (display all text in a cell without truncation)

pd.set_option('display.max_colwidth', -1)

그 외에도 다양하게 option을 변경해서, rows, heights을 변경할 수 있다.

HTML코드도 출력이 가능하다. 아래 참고

  • 참고
    • http://songhuiming.github.io/pages/2017/04/02/jupyter-and-pandas-display/

Jupyter를 사용하면, 셀마다 출력을 하기 때문에,

df.head(10)으로 하면, 화면에 예쁘게(?) 출력이 된다. 하지만 여러개의 dataframe을 출력하게 되면, 위 처럼 결과가 출력되지 않는다.

사실 구조적으로 df.head(10)은 interactive할때만 출력되기 때문에, print df.head(10) 이 문법이 맞다.

df.head(10)의 결과는 df와 동일한 Dataframe의 결과를 돌려주기 때문에! 그래서 별도의 처리가 필요하다.

Python에서 DataFrame을 임시 데이터를 저장하는 방법

loc2countdf.tocsv('loc_count.csv')

def getdf(cols, filename, sep='\t'): # filename = 'tschkeywordfreq.tsv' itercsv = pd.readcsv(filename,iterator=True, chunksize=1000, sep=sep, names=cols) # df = pd.concat([chunk[chunk['field'] > constant] for chunk in itercsv]) df = pd.concat([chunk for chunk in itercsv]) return df

파이썬 쥬피터(juypter) 한글 깨짐 현상

파이썬에서 주로 사용하는 jupyter notebook에서 한글을 설정 안하면 깨진다. 'ㅁㅁㅁㅁ'로 표시 되기 때문에 한글을 설치하고, 세팅하는 작업이 필요하다

Centos에 한글 나눔 글씨체 설치

``` $ cd /usr/share/fonts/ $ wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFontTTFALL.zip

$ unzip NanumFontTTFALL.zip -d NanumFont $ rm -f NanumFontTTFALL.zip ```

[참고] 2017.02.20 - Centos 나눔글씨체 설치하는 방법 http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4%EB%82%98%EB%88%94%ED%8F%B0%ED%8A%B8%EC%84%A4%EC%B9%98

코드에서 한글 세팅


+ Recent posts