22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python]生命保険会社の苦情件数を棒グラフで表現

Posted at

概要

  • 最近、知り合いから生命保険を進められて加入しました。
  • でも、その保険会社は本当に信用できるのかな??と思い、このサイトで苦情件数をみてみました。
  • 苦情件数がたくさんあるし、保険会社もたくさんあってわかりづらい…
  • Pythonのmatplotlibを使って苦情件数を棒グラフで表現してみました。

苦情件数(件)を棒グラフで表現

棒グラフ

  • 株式会社かんぽ生命保険が一番苦情が多く見える!
  • でも、元から契約件数が多い保険会社だったら、苦情件数も大きくなるのでは???

コード

from bs4 import BeautifulSoup
import pandas as pd
import re
import matplotlib.pyplot as plt
import requests


url = requests.get("https://www.seiho.or.jp/member/complaint/")
url.raise_for_status()
bs = BeautifulSoup(url.text, "html.parser")


# 苦情件数(件)を棒グラフで表現

# 保険会社の名前
# 名前が長いので「生命保険株式会社」を消す
company_name_list = [re.sub('生命保険株式会社','',i.get_text().replace('\n','') )
                      for i in bs.select('div.headMod04.mt30')]
# 苦情件数(件)
claim_count_list = [int(((j.get_text())[:-1]).replace(',','')) 
                    for i in bs.select('table.tblMod02.tblP2.mt10') 
                    for j in i.select('td.vaM.taR')]
# グラフ作成
plt.title("苦情件数")  
plt.xlabel('生命保険株式会社の名前')
plt.ylabel('')
plt.xticks(rotation=90, fontsize=8)
plt.bar(company_name_list,claim_count_list)
plt.show()

苦情の割合を棒グラフで表現

棒グラフ

  • カーディフ生命保険株式会社が苦情の割合が多い!
  • でも、契約件数も苦情件数も全体と比べて少ないから、単純に苦情の多い保険会社として決めつけるのは微妙…
  • 株式会社かんぽ生命保険とライフネット生命保険株式会社の苦情の割合が結構大きい…、

コード

from bs4 import BeautifulSoup
import pandas as pd
import re
import matplotlib.pyplot as plt
import requests


url = requests.get("https://www.seiho.or.jp/member/complaint/")
url.raise_for_status()
bs = BeautifulSoup(url.text, "html.parser")

# 苦情の割合を棒グラフで表現

# 保険会社の名前
# 名前が長いので「生命保険株式会社」を消す
company_name_list = [re.sub('生命保険株式会社','',i.get_text().replace('\n','') )
                      for i in bs.select('div.headMod04.mt30')]
# 会社に寄せられた苦情件数(件)
claim_count_list = [int(((j.get_text())[:-1]).replace(',','')) 
                    for i in bs.select('table.tblMod02.tblP2.mt10') 
                    for j in i.select('td.vaM.taR')]
# 個人保険保有契約件数(件)
guest_number_list = [int((j.get_text())[:-1].replace(',','')) 
                      for i in bs.select('table.tblMod02.tblP2.mt15') 
                      for j in i.select('td.vaM.taR')]
guest_number_list = [guest_number_list[i] for i in range(len(guest_number_list)) if i%2 == 0]

# 苦情の割合(%)
claim_rate_list = [(i/j) * 100 for i,j in zip(claim_count_list,guest_number_list)]

plt.title("苦情の割合")  
plt.xlabel('生命保険株式会社の名前')
plt.ylabel('')
plt.xticks(rotation=90, fontsize=8)
plt.bar(company_name_list,claim_rate_list)
plt.show()
        

苦情の内訳を積み上げ棒グラフで表現

棒グラフ

  • 苦情の内訳は、全体的に同じ感じに見える

コード

from bs4 import BeautifulSoup
import pandas as pd
import re
import matplotlib.pyplot as plt
import requests


url = requests.get("https://www.seiho.or.jp/member/complaint/")
url.raise_for_status()
bs = BeautifulSoup(url.text, "html.parser")


# 苦情の内訳を積み上げ棒グラフで表現

# 保険会社の名前
# 名前が長いので「生命保険株式会社」を消す
company_name_list = [re.sub('生命保険株式会社','',i.get_text().replace('\n','') )
                      for i in bs.select('div.headMod04.mt30')]
# 当該項目件数の内容
claim_detail = ['新契約関係','収納関係','保全関係','保険金関係','その他']
# 苦情の内訳(当該項目件数/苦情件数)
claim_detail_list = [float((j.get_text())[:-1]) 
                      for i in bs.select('table.tblMod02.tblP2.mt10') 
                      for j in i.select('td.taR') 
                      if "%" in j.get_text()]
# claim_detail_listを当該項目件数の内容5つにわける
def list_(num):
    return [claim_detail_list[i] 
            for i in range(len(claim_detail_list)) 
            if i%5==(num - 1)]
# 5つ別のリスト
all_list = [list_(1),list_(2),list_(3),list_(4),list_(5)]

dataset = pd.DataFrame(all_list,
                        index=claim_detail,
                        columns=company_name_list)
# グラフ作成
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
    ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
ax.set(xlabel='生命保険株式会社の名前', ylabel='苦情の内訳')
plt.title("苦情の内訳")  
plt.xticks(rotation=90, fontsize=12)
ax.legend(dataset.index)
plt.show()

まとめ

  • 生命保険を選ぶときに、参考にしていただけるとありがたいです!!
  • でもグラフだけで決めつけず、実際にHPを見たりして保険を決めてほしいです!(逃げの言い訳)

参考

Pythonのmatplotlibで積み上げ棒グラフを作成しデータラベルを追加してみた
生命保険各社の苦情受付情報・保険金等お支払情報について

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?