蟹の種類と数をPythonで数えてみよう

先日、完結編と銘打って、蟹の種類と数を数えてみた。
infoment.hatenablog.com

今回は、これをPythonでやってみた。
f:id:Infoment:20200509214035p:plain

今回新たに学んだ内容は、以下のとおり。

  1. Pythonにおける正規表現
  2. Pythonにおける連想配列

既にVBAで実現したものをPythonに翻訳するわけだから、処理の流れが既に完成しているという点では、今回も割とスムーズに実現できた(もっとも、さらに高度な処理となれば、簡単にはいかないだろう)。

import re
def crab_dict(source):    
    exclusion_array=['アフガニスタン','カニカマ']
    for exclusion in exclusion_array:
        source=source.replace(exclusion,'')

    pattern='(.+?)(ガニ|蟹)'
    re_pattern=re.compile(pattern)
    results=re_pattern.findall(source)

    temp_dict={}
    for result in results:
        mykey=result[0]+result[1]
        if (mykey in temp_dict)==True:
            temp_dict[mykey]=temp_dict[mykey]+1
        else:
            temp_dict[mykey]=1
    
    return temp_dict
source='タラバガニ毛ガニカニカマ毛ガニ越前蟹タラバガニ花咲蟹越前蟹カニカマ越前蟹ズワイガニアフガニスタン越前蟹アフガニスタンカニカマ'

#count_crab
d=crab_dict(source)
for mykey in d.keys():
    print(mykey+':'+str(d[mykey])+'匹')
print('※蟹は全部で '+str(len(d))+' 種類(生物学上の分類不問)。')
print('※同種でも産地別の呼び名があれば、別種として扱う。')

結果は ↓ こちら。
f:id:Infoment:20200509214654p:plain

再現に拘ったため同じ表現としたが、実際(後半部分)はこれでも充分な気がする。

source='タラバガニ毛ガニカニカマ毛ガニ越前蟹タラバガニ花咲蟹越前蟹カニカマ越前蟹ズワイガニアフガニスタン越前蟹アフガニスタンカニカマ'

#count_crab
print(crab_dict(source))

結果は ↓ こちら。
f:id:Infoment:20200509215438p:plain

参考まで。