Python 実践 データ加工/可視化 100本ノック に挑戦 ノック56

Python 実践 データ加工/可視化 100本ノック」を購入したので、

一通りやっているところです。今日はノック56を行います。

資料は以下から入手できます。

Python実践 データ加工/可視化 100本ノック|サポート|秀和システム

 

ノック56 名詞と動詞を取り出そう

前回作成したMeCabのデータフレームから原型と品詞をグループ化し件数を確認します。

#タイトルと著者名の取得
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
    title = f.readline()
    author = f.readline()

title  = title.replace('\n','')
author = author.replace('\n','')

#公開日と修正日の取得
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
    content = f.readlines()

import pandas as pd

df = pd.DataFrame(content,columns=['text'])
df['text'] = df['text'].str.replace('\n','')
date = df[(df['text'].str.contains('日公開'))|(df['text'].str.contains('日修正'))].copy()

date['text'] = date['text'].str.replace('公開','')
date['text'] = date['text'].str.replace('修正','')
date['text'] = date['text'].str.replace('年','/')
date['text'] = date['text'].str.replace('月','/')
date['text'] = date['text'].str.replace('日','')

date['text'] = pd.to_datetime(date['text'])

#メイン文をbody変数に
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
    content = f.read()

content = ' '.join(content.split())
import unicodedata
content = unicodedata.normalize('NFKC',content)

import re
pattern = re.compile(r'^.+(#地から1字上げ].+#地から1字上げ]).+$')
body = re.match(pattern,content).group(1)

body=body.replace('#地から1字上げ] ------------------------------------------------------- ','')
body=body.replace(' [#地から1字上げ]','')

#ここまでのデータをデータフレーム型に
release_date = date.iat[0,0] #左側が行、右側が列 0行0列
update_date  = date.iat[1,0] #1行0列

booklist = pd.DataFrame([[title,author,release_date,update_date,body]],
            columns=['title','autor','release_date','update_date','body'])

#ノック54 形態素解析
import MeCab
body = booklist.iloc[0,4]
parsed = tagger.parse(body).split('\n')
parsed = parsed[:-2]

#ノック55
*values, = map(lambda s: re.split(r'\t|,',s),parsed)
columns = ['表層形','品詞','品詞細分類1','品詞細分類2','品詞細分類3','活用型','活用形','原形','読み','発音']
mecab_df=pd.DataFrame(data=values,columns=columns)

#ノック56

print(mecab_df.groupby(['原形','品詞']).size().sort_values(ascending=False))

 

ascending=Falseは降順に並べる場合に使用します。

 

実行結果

原形  品詞
、   記号    555
。   記号    458
は   助詞    268
て   助詞    237
の   助詞    225
         ...
国王  名詞      1
囲み  名詞      1
困憊  名詞      1
四肢  名詞      1
齧る  動詞      1
Length: 1325, dtype: int64

 

実行結果から記号や助詞が多く出現していることがわかりました。

 

品詞を名詞にし、実行してみます。

print(mecab_df.loc[mecab_df['品詞']=='名詞'])

 

実行結果

          表層形  品詞 品詞細分類1 品詞細分類2 品詞細分類3 活用型 活用形  原形     読み     発音
0         メロス  名詞     一般      *      *   *   *   *   None   None
2          激怒  名詞   サ変接続      *      *   *   *  激怒    ゲキド    ゲキド
9          邪智  名詞     一般      *      *   *   *  邪智    ジャチ    ジャチ
10         暴虐  名詞     一般      *      *   *   *  暴虐  ボウギャク  ボーギャク
13    ゃちぼうぎゃく  名詞   固有名詞     組織      *   *   *   *   None   None
...       ...  ..    ...    ...    ...  ..  ..  ..    ...    ...
6691        皆  名詞    代名詞     一般      *   *   *   皆     ミナ     ミナ
6695        の  名詞    非自立     一般      *   *   *   の      ノ      ノ
6700        の  名詞    非自立     一般      *   *   *   の      ノ      ノ
6704       勇者  名詞     一般      *      *   *   *  勇者   ユウシャ   ユーシャ
6708       赤面  名詞   サ変接続      *      *   *   *  赤面   セキメン   セキメン

 

「ゃちぼうぎゃく」のように正しく名詞と認識できなかったものがあることがわかります。

さらに動詞も表示します。

locを使用して品詞=名詞である行と品詞=動詞である行を抜粋します。

 

print(mecab_df.loc[(mecab_df['品詞']=='名詞') | (mecab_df['品詞']=='動詞')])

 

実行結果

表層形  品詞 品詞細分類1 品詞細分類2 品詞細分類3    活用型  活用形  原形     読み     発音
0     メロス  名詞     一般      *      *      *    *   *   None   None
2      激怒  名詞   サ変接続      *      *      *    *  激怒    ゲキド    ゲキド
3       し  動詞     自立      *      *  サ変・スル  連用形  する      シ      シ
9      邪智  名詞     一般      *      *      *    *  邪智    ジャチ    ジャチ
10     暴虐  名詞     一般      *      *      *    *  暴虐  ボウギャク  ボーギャク
...   ...  ..    ...    ...    ...    ...  ...  ..    ...    ...
6695    の  名詞    非自立     一般      *      *    *   の      ノ      ノ
6700    の  名詞    非自立     一般      *      *    *   の      ノ      ノ
6704   勇者  名詞     一般      *      *      *    *  勇者   ユウシャ   ユーシャ
6708   赤面  名詞   サ変接続      *      *      *    *  赤面   セキメン   セキメン
6709    し  動詞     自立      *      *  サ変・スル  連用形  する      シ      シ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/* -----codeの行番号----- */