次のような表があります。
URN Firm_Name
0 104472 R.X. Yah & Co
1 104873 Big Building Society
2 109986 St James's Society
3 114058 The Kensington Society Ltd
4 113438 MMV Oil Associates Ltd
そして、以下のような出力を得るために、Firm_Name列内のすべての単語の頻度をカウントしたいと思います。
私は次のコードを試しました:
import pandas as pd
import nltk
data = pd.read_csv("X:\Firm_Data.csv")
top_N = 20
Word_dist = nltk.FreqDist(data['Firm_Name'])
print('All frequencies')
print('='*60)
rslt=pd.DataFrame(Word_dist.most_common(top_N),columns=['Word','Frequency'])
print(rslt)
print ('='*60)
ただし、次のコードは一意のワードカウントを生成しません。
IIUIC、value_counts()
を使用
In [3361]: df.Firm_Name.str.split(expand=True).stack().value_counts()
Out[3361]:
Society 3
Ltd 2
James's 1
R.X. 1
Yah 1
Associates 1
St 1
Kensington 1
MMV 1
Big 1
& 1
The 1
Co 1
Oil 1
Building 1
dtype: int64
または、
pd.Series(np.concatenate([x.split() for x in df.Firm_Name])).value_counts()
または、
pd.Series(' '.join(df.Firm_Name).split()).value_counts()
上位Nの場合、たとえば3
In [3379]: pd.Series(' '.join(df.Firm_Name).split()).value_counts()[:3]
Out[3379]:
Society 3
Ltd 2
James's 1
dtype: int64
詳細
In [3380]: df
Out[3380]:
URN Firm_Name
0 104472 R.X. Yah & Co
1 104873 Big Building Society
2 109986 St James's Society
3 114058 The Kensington Society Ltd
4 113438 MMV Oil Associates Ltd
str.cat
with lower
最初にすべての値を1つのstring
に連結し、次に Word_tokenize
そして最後にソリューションを使用します:
top_N = 4
#if not necessary all lower
a = data['Firm_Name'].str.lower().str.cat(sep=' ')
words = nltk.tokenize.Word_tokenize(a)
Word_dist = nltk.FreqDist(words)
print (Word_dist)
<FreqDist with 17 samples and 20 outcomes>
rslt = pd.DataFrame(Word_dist.most_common(top_N),
columns=['Word', 'Frequency'])
print(rslt)
Word Frequency
0 society 3
1 ltd 2
2 the 1
3 co 1
必要に応じてlower
を削除することもできます。
top_N = 4
a = data['Firm_Name'].str.cat(sep=' ')
words = nltk.tokenize.Word_tokenize(a)
Word_dist = nltk.FreqDist(words)
rslt = pd.DataFrame(Word_dist.most_common(top_N),
columns=['Word', 'Frequency'])
print(rslt)
Word Frequency
0 Society 3
1 Ltd 2
2 MMV 1
3 Kensington 1