[用途]へのBoWを使ったエンコード。Ni-sla Post#5

Bag of Words

  • 用途に関して、ユニーク数が205件あります。実際見ていると10個程度の単語の組み合わせてでしたので、BoWを使って単語の特徴量を作成しました。
  • ご参考までに掲載いたしまします。
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import MeCab
tagger = MeCab.Tagger()
train_df=pd.read_csv('../input/train_data.csv')
test_df=pd.read_csv('../input/test_data.csv')
price=pd.read_csv('../input/published_land_price.csv')
train_df['flag']=1
test_df['flag']=0
data=pd.concat([train_df,test_df],axis=0)
data.nunique()
flag               2
id            356344
y                493
今後の利用目的            6
前面道路:幅員(m)       380
前面道路:方位            9
前面道路:種類           14
取引の事情等            25
取引時点              55
土地の形状              9
地区名             1454
地域                 4
容積率(%)            17
市区町村コード           59
市区町村名             59
延床面積(㎡)          130
建ぺい率(%)            6
建物の構造             26
建築年               75
改装                 2
最寄駅:名称           656
最寄駅:距離(分)         34
用途               205
種類                 5
都市計画              16
都道府県名              1
間取り               48
間口               476
面積(㎡)            157
dtype: int64
def preNLP(data,c):
    data[c] = data[c].str.replace(' ','')
    data[c] = data[c].str.replace(' ','')
    data[c] = data[c].str.replace('\(.+?\)','',regex=True)
    data[c] = data[c].str.replace('\(.+?\)','',regex=True)
    data[c] = data[c].str.replace('\n','')
    data[c] = data[c].str.replace('\n','',regex=True)
    return data
data=preNLP(data,'用途')
data['用途_length']=data['用途'].str.len()
data['用途_length'].hist()#だいたい3文字に集中している。
<matplotlib.axes._subplots.AxesSubplot at 0xb316df940>
data['用途']=data['用途'].fillna('秘密')#欠損があると処理できないので、あらかじめ文字で埋めておく
data['用途'].unique()
array(['秘密', '住宅', '住宅、事務所、店舗', 'その他', '事務所、倉庫', '事務所', '事務所、倉庫、駐車場、その他',
       '駐車場', '共同住宅', '共同住宅、店舗', '事務所、店舗', '住宅、店舗', '共同住宅、事務所、倉庫、店舗',
       '住宅、作業場、店舗', '共同住宅、事務所、店舗', '住宅、事務所', '事務所、倉庫、駐車場', '住宅、事務所、その他',
       '店舗', '事務所、その他', '事務所、倉庫、店舗', '住宅、倉庫、店舗、その他', '住宅、事務所、倉庫、店舗',
       '事務所、作業場、倉庫', '事務所、駐車場', '工場', '住宅、倉庫', '住宅、共同住宅、工場、倉庫', '倉庫',
       '事務所、駐車場、店舗', '住宅、工場、事務所', '共同住宅、事務所、倉庫、駐車場', '住宅、事務所、倉庫',
       '住宅、作業場', '共同住宅、事務所', '住宅、事務所、店舗、その他', '住宅、駐車場、店舗', '住宅、工場',
       '住宅、事務所、駐車場', '事務所、倉庫、その他', '住宅、その他', '住宅、作業場、倉庫、店舗',
       '住宅、共同住宅、事務所、店舗', '共同住宅、事務所、倉庫', '事務所、店舗、その他', '店舗、その他',
       '住宅、事務所、倉庫、駐車場', '共同住宅、その他', '住宅、事務所、作業場', '作業場、倉庫、駐車場', '工場、事務所',
       '住宅、共同住宅、工場、事務所', '住宅、作業場、倉庫', '倉庫、店舗', '事務所、作業場、店舗',
       '住宅、事務所、駐車場、店舗', '共同住宅、駐車場', '共同住宅、作業場', '住宅、店舗、その他', '住宅、倉庫、店舗',
       '住宅、事務所、作業場、店舗', '住宅、共同住宅、事務所、倉庫', '共同住宅、事務所、作業場', '住宅、駐車場',
       '住宅、倉庫、その他', '住宅、共同住宅、店舗', '事務所、駐車場、その他', '住宅、共同住宅、作業場',
       '住宅、共同住宅、工場、事務所、作業場、倉庫', '共同住宅、工場、事務所、駐車場', '住宅、共同住宅、駐車場',
       '事務所、作業場', '住宅、倉庫、駐車場、店舗', '共同住宅、工場、事務所', '共同住宅、駐車場、店舗',
       '共同住宅、事務所、倉庫、駐車場、店舗', '住宅、共同住宅、作業場、店舗', '共同住宅、倉庫、駐車場',
       '共同住宅、事務所、駐車場', '住宅、共同住宅', '駐車場、店舗', '共同住宅、倉庫、店舗',
       '住宅、共同住宅、事務所、作業場', '駐車場、その他', '住宅、倉庫、駐車場', '住宅、共同住宅、駐車場、その他',
       '事務所、倉庫、駐車場、店舗', '工場、作業場', '共同住宅、工場', '共同住宅、倉庫', '共同住宅、事務所、その他',
       '住宅、事務所、倉庫、駐車場、店舗', '共同住宅、事務所、駐車場、店舗', '共同住宅、工場、店舗',
       '住宅、作業場、倉庫、駐車場', '住宅、事務所、倉庫、店舗、その他', '住宅、工場、事務所、店舗', '工場、事務所、その他',
       '共同住宅、作業場、店舗', '住宅、共同住宅、事務所、倉庫、駐車場', '共同住宅、店舗、その他', '共同住宅、作業場、倉庫',
       '工場、倉庫', '共同住宅、工場、倉庫', '工場、事務所、作業場、駐車場', '住宅、事務所、作業場、駐車場',
       '倉庫、駐車場', '住宅、工場、店舗', '事務所、作業場、倉庫、駐車場', '住宅、共同住宅、店舗、その他',
       '住宅、共同住宅、事務所、駐車場', '住宅、共同住宅、事務所', '共同住宅、駐車場、その他', '作業場',
       '共同住宅、事務所、作業場、倉庫', '住宅、共同住宅、倉庫、店舗', '住宅、工場、倉庫',
       '共同住宅、事務所、作業場、駐車場、店舗', '住宅、工場、事務所、倉庫', '住宅、事務所、駐車場、その他',
       '住宅、事務所、作業場、倉庫、駐車場', '住宅、共同住宅、工場、事務所、倉庫', '住宅、事務所、作業場、倉庫',
       '住宅、共同住宅、作業場、倉庫', '住宅、共同住宅、工場', '工場、事務所、倉庫', '工場、事務所、倉庫、店舗',
       '共同住宅、倉庫、その他', '住宅、共同住宅、倉庫', '住宅、作業場、駐車場', '事務所、作業場、駐車場、その他',
       '住宅、作業場、その他', '事務所、作業場、その他', '共同住宅、工場、事務所、倉庫', '共同住宅、倉庫、店舗、その他',
       '工場、作業場、その他', '住宅、工場、その他', '工場、店舗', '住宅、駐車場、その他', '共同住宅、作業場、倉庫、店舗',
       '住宅、事務所、駐車場、店舗、その他', '共同住宅、工場、駐車場', '作業場、倉庫', '工場、事務所、倉庫、駐車場',
       '工場、事務所、倉庫、駐車場、店舗', '住宅、共同住宅、その他', '共同住宅、事務所、倉庫、店舗、その他', '作業場、店舗',
       '事務所、駐車場、店舗、その他', '共同住宅、倉庫、駐車場、店舗、その他', '住宅、共同住宅、倉庫、駐車場',
       '住宅、駐車場、店舗、その他', '事務所、作業場、店舗、その他', '作業場、その他', '住宅、工場、事務所、その他',
       '共同住宅、事務所、作業場、店舗', '工場、事務所、駐車場、店舗', '作業場、倉庫、店舗', '事務所、作業場、駐車場',
       '共同住宅、事務所、作業場、倉庫、店舗', '工場、作業場、倉庫', '事務所、作業場、倉庫、店舗',
       '住宅、事務所、作業場、倉庫、店舗', '共同住宅、駐車場、店舗、その他', '共同住宅、事務所、店舗、その他',
       '共同住宅、事務所、作業場、倉庫、駐車場', '住宅、共同住宅、作業場、駐車場', '工場、事務所、駐車場',
       '事務所、倉庫、店舗、その他', '倉庫、その他', '共同住宅、倉庫、駐車場、店舗', '共同住宅、事務所、倉庫、その他',
       '工場、その他', '工場、事務所、店舗', '共同住宅、工場、倉庫、その他', '共同住宅、作業場、倉庫、駐車場',
       '工場、事務所、作業場', '工場、倉庫、駐車場', '共同住宅、作業場、駐車場', '住宅、工場、倉庫、店舗',
       '住宅、共同住宅、事務所、倉庫、店舗', '共同住宅、事務所、作業場、倉庫、その他', '工場、事務所、作業場、倉庫',
       '工場、事務所、倉庫、その他', '共同住宅、工場、事務所、倉庫、その他', '共同住宅、工場、事務所、その他',
       '共同住宅、作業場、その他', '住宅、工場、作業場', '住宅、工場、事務所、作業場', '倉庫、駐車場、店舗',
       '作業場、駐車場、店舗、その他', '住宅、工場、事務所、駐車場', '駐車場、店舗、その他',
       '住宅、事務所、倉庫、駐車場、その他', '住宅、共同住宅、駐車場、店舗', '住宅、事務所、倉庫、その他', '工場、倉庫、店舗',
       '住宅、共同住宅、工場、店舗', '共同住宅、工場、事務所、駐車場、店舗', '事務所、作業場、倉庫、その他',
       '事務所、作業場、倉庫、駐車場、その他', '作業場、店舗、その他', '倉庫、店舗、その他', '住宅、作業場、倉庫、その他',
       '共同住宅、事務所、作業場、駐車場', '住宅、共同住宅、倉庫、店舗、その他'], dtype=object)
from tqdm import tqdm
tagger = MeCab.Tagger()
join=data
stop_words=['の','し','いき','こと','さん']
parts = ["名詞"]
all_words_df = pd.DataFrame()
result = []

for n in tqdm(range(len(join))):
    text = join["用途"].iloc[n]
    words = tagger.parse(text).splitlines()
    words_df = pd.DataFrame()
    for i in words:
        if i == "EOS" or i == "": continue
        word_tmp = i.split()[0]
        part = i.split()[1].split(",")[0]
        if not (part in parts):continue
        if word_tmp in stop_words:continue
        words_df[word_tmp] = [1]#単語を列として定義して、数値の1を代入。それを1つの項目ごとに行う
    all_words_df = pd.concat([all_words_df, words_df] ,ignore_index=True)
all_words_df.head()
100%|██████████| 391188/391188 [1:42:48<00:00, 63.42it/s]
その他 事務所 住宅 作業場 倉庫 共同 工場 店舗 秘密 駐車
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
2 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN 1.0 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN
all_words_df=all_words_df.drop('場',axis=1)#駐車場の場がわかれたため削除
all_words_df.to_csv('../input/all_words_df.csv',index=False)
all_words_df.sum(axis=0)
その他      1573.0
事務所      9536.0
住宅     288670.0
作業場      1276.0
倉庫       2939.0
共同      16105.0
工場       1050.0
店舗       9262.0
秘密      93195.0
駐車       1966.0
dtype: float64
all_words_df
その他 事務所 住宅 作業場 倉庫 共同 工場 店舗 秘密 駐車
0 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
2 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
4 NaN 1.0 1.0 NaN NaN NaN NaN 1.0 NaN NaN
... ... ... ... ... ... ... ... ... ... ...
391183 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
391184 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
391185 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
391186 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
391187 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN

391188 rows × 10 columns

ご意見、コードのミスなどありましたらご指摘のほど宜しくお願い致します。

添付データ

  • BoW_preprocess.ipynb?X-Amz-Expires=600&X-Amz-Date=20200712T163837Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIP7GCBGMWPMZ42PQ
  • Favicon
    new user
    コメントするには 新規登録 もしくは ログイン が必要です。