クマ類の捕獲数(許可捕獲数)について [速報値]【都道府県(知事許可等)】【地方環境事務所等(大臣許可)】のデータを見つけた。

https://www.env.go.jp/nature/choju/effort/effort12/capture-qe.pdf

これを都道府県別比較、推移データとしてわかるようにDjangoで処理。

https://bears.itsagent.net/

目的は、

  • PDFのデータをDjangoで使えるようにjsonデータに加工する。
  • DjangoでChartを表示する。

jsonデータへの加工はPDFをコピーしてメモ帳に貼り付けてテキストファイルとした。
項目は半角スペースで区切られるので、VBAで読み込んでSplitして得た配列をエクセルデータとして取得。
ワークシート関数でJson形式にして、VSCODEに貼り付けて整形。

{
    "year": "2008",
    "pref": [
      {
        "name": "北海道",
        "data": {
          "total": "355",
          "ck": "351",
          "nk": "4"
        }
      },
      {
        "name": "青森",
        "data": {
          "total": "47",
          "ck": "47",
          "nk": "0"
        }
      },
…

チャートは matplotlib をimportして使ったがXServerでは無言でエラーになる。
皆目わからなかったけど、良い記事のおかげで動作できた。
index.cgiの修正が必要。

import os
os.environ['OPENBLAS_NUM_THREADS'] = "1"

意味はわからないけど、「NumPyなどの数値計算ライブラリが内部で使用する「スレッド数(並列処理数)」を1つに制限するための設定」とのこと。
悪いことはしません、と宣言しないと門前払いされる、みたいな。

複数の折れ線グラフは2回書くだけ。

plt.plot(t_list, x_list, label="x", marker ='o', color="darkgreen")
plt.plot(t_list, c_list, label="x", marker ='x', color="black")

おまじないで、

fig, ax = plt.subplots()

としておいたら、ラインのエリアを塗りつぶせる。

ax.fill_between( t_list, x_list, color="lime", alpha=0.9)

後から書いたほうで上書きされるので、捕獲数を先に描いて、捕殺数を後から描くと上部の差の部分が非捕殺数として強調される。

積み上げ棒グラフも2回描くだけ。
2回目はbottomに先のデータを指定する。

plt.bar(t_list, x_list, label="capture",facecolor = "dimgray", edgecolor="black")
plt.bar(t_list, r_list,  bottom=x_list,facecolor = "lime", edgecolor="black")

チャートのx軸の項目で都道府県名を表示するが、横書きになってしまう。

plt.xticks(rotation=90)

で回転できるが、首を
「うんちょこちょこちょこぴー」
としないと読みにくい。

調べたら、1字ずつ改行キーを入れると良いとのこと。
Pythonでは文字列もLoopできる。

tmpname = ""
for char in p['name']:
    tmpname=tmpname + char+"\n"

これだと最後に不要な改行キーがついてしまうが、表示上は問題ない。