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

ノック55:分割したデータをデータフレームで保持しよう

単語に分割されたデータをデータフレーム型にし保存します。

#タイトルと著者名の取得
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)
print(values[:4])

 

map(lambda 引数 : 処理, シーケンス)

引数はs、処理は re.split(r'\t,',s)、シーケンスはpasedとなります。

re.split(r'\t,',s) はタブまたはカンマがある場合はカンマに置換する処理です。

mapはparsedを1行ずつ処理し、その結果をリストとして保持していきます。

*values=で、結果をvaluesに格納しています。アスタリスクがついているので、

中身を分割してもつことになります。

mecab_df=pd.DataFrame(data=values,columns=columns)
print(len(mecab_df))
print(mecab_df.head(3))

 

実行結果

6712
   表層形  品詞 品詞細分類1 品詞細分類2 品詞細分類3 活用型 活用形  原型    読み    発音
0  メロス  名詞     一般      *      *   *   *   *  None  None
1    は  助詞    係助詞      *      *   *   *   は     ハ     ワ
2   激怒  名詞   サ変接続      *      *   *   *  激怒   ゲキド   ゲキド

 

 

 

 

 

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