エンジニアの求職者が弊社HPを訪れた場合必ず立ち寄るであろう、
[お仕事案件ページ]
(https://ritsuan.com/job/)
ここの更新頻度が非常に低く、古い案件も埃を被ったままメンテナンスがされていないのである。
駄目だこいつ…早くなんとかしないと…
そんな事を思いながらしばらくネット上を徘徊していたらこんなのを見つけてしまった。
[県別データの可視化]
(https://qiita.com/SaitoTsutomu/items/6d17889ba47357e44131)
お仕事案件ページの県別案件数を可視化して更新を促してやろう!
最近事業範囲拡大してるようだし、日本全国主要都市周りの案件数が多い結果になるんだろうな!(前フリ)
ひらめいたこと
- お仕事案件情報を都道府県名でスクレイピング
- 都道府県別に案件数をリスト化
- 案件数に応じてjapanmapでコロプレス図表示
- そろそろQiitaに投稿しないと忘れられちゃう(切実)
環境
- Windows10
- python : 3.6.3
- japanmap : 0.0.21
- requests : 2.22.0
- beautifulsoup4 : 4.7.1
- matplotlib : 3.1.3
- pandas : 0.25.3
案件数可視化
試行錯誤してとりあえず出来上がったのがこちら。
※jupyter notebook上で表示している為、記事上一部不要なコードあり。
改善点があれば諸先輩方には是非ともご指摘いただきたい。
import requests
from bs4 import BeautifulSoup
from japanmap import pref_names, picture
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plis=[]
for y in range(47):
plis.append(0)
for z in range(50):
r = requests.get('https://ritsuan.com/job/page/{}'.format(z+1))
bs = BeautifulSoup(r.text, 'html.parser')
for i in range(47):
pnlist = pref_names[i+1]
for j in bs.select("div[class=main_container] h2"):
pc = j.text
if pnlist in pc:
plis[i] += 1
dic={}
for k in range(47):
pdic = pref_names[k+1]
dic[pdic] = plis[k]
cmap = plt.get_cmap("Reds")
df = pd.DataFrame.from_dict(dic, orient="index", columns=["案件数"])
norm = plt.Normalize(vmin=df.min(), vmax=df.max())
fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()
plt.rcParams['figure.figsize'] = 20, 20
plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.imshow(picture(df.案件数.apply(fcol)))
結果
こうなった。
なんだこれは。関東~東海地域だけがやたらと濃い。
本社が静岡県である以上こうなるのは予想していたが、事業範囲はもっと拡大しているのではなかったのか。
そうか、一部地域が突出しているせいで他の地域が埋もれて薄く見えてしまっているんだな。
早速確認だ。リスト化しよう。
df = pd.DataFrame.from_dict(dic, orient="index", columns=["案件数"])
df.to_excel("job_list.xlsx", sheet_name="job_list")
都道府県 | 案件数 | 都道府県 | 案件数 | 都道府県 | 案件数 |
---|---|---|---|---|---|
北海道 | 0 | 石川県 | 0 | 岡山県 | 0 |
青森県 | 1 | 福井県 | 0 | 広島県 | 2 |
岩手県 | 0 | 山梨県 | 2 | 山口県 | 0 |
宮城県 | 1 | 長野県 | 0 | 徳島県 | 0 |
秋田県 | 0 | 岐阜県 | 3 | 香川県 | 0 |
山形県 | 0 | 静岡県 | 62 | 愛媛県 | 0 |
福島県 | 0 | 愛知県 | 90 | 高知県 | 0 |
茨城県 | 12 | 三重県 | 7 | 福岡県 | 2 |
栃木県 | 1 | 滋賀県 | 4 | 佐賀県 | 0 |
群馬県 | 7 | 京都府 | 0 | 長崎県 | 0 |
埼玉県 | 9 | 大阪府 | 3 | 熊本県 | 0 |
千葉県 | 2 | 兵庫県 | 1 | 大分県 | 1 |
東京都 | 133 | 奈良県 | 0 | 宮崎県 | 0 |
神奈川県 | 60 | 和歌山県 | 0 | 鹿児島県 | 0 |
新潟県 | 0 | 鳥取県 | 0 | 沖縄県 | 2 |
富山県 | 0 | 島根県 | 0 |
oh...
申し訳なさ程度に案件数一桁の地域があるが、これは本当に存在しているのだろうか。
該当地域の求職者の方が見たらあのセリフが聞こえてきそうだ。
「うわっ…私の地域案件少なすぎ…?」
これではコロプレス図で可視化してもほぼ表示されないわけだ。
さて、日本全国主要都市に案件数が多い結果になるというはずだったが、予想を大幅に覆す結果となり驚愕している。(回収)
関西にも事業所があると聞いていたが、やはり更新されてないようだ。
これでエビデンス(?)も揃ったので、更新を煽ることができる。
想定外だったこと
今回、お仕事案件リストにある【〇〇県~】の部分を検索しているのだが、この中に企業名や複数の地域名が記載されているパターンがあり検索数としてカウントされていない。このような統一性のない記載方法は世間的に受け入れられないだろう。検索できないので早急に直すべきである。
尚、「住所」欄で検索しようと試みてはみたが、htmlの記述内容から手間がかかりそうだったので実施していない。
今後調整したい内容
- 地域毎の業種の偏り
- お仕事案件情報最終ページ認識と終了
最後に
matplotlibのcolormapには沢山の種類があり、今回全種類試してみたので掲載しておく。
完全に趣味の領域であるがのんびりとご覧いただきたい。
viridis
## *plasma*inferno
magma
cividis
Greys
Purples
Blues
Greens
Oranges
Reds
YlOrBr
YlOrRd
OrRd
PuRd
RdPu
BuPu
GnBu
PuBu
YlGnBu
PuBuGn
BuGn
YlGn
binary
gist_yarg
gist_gray
gray
bone
pink
spring
summer
autumn
winter
cool
Wistia
hot
afmhot
gist_heat
copper
PiYG
PrGn
BrBG
PuOr
RdGy
RdBu
RdYlBu
RdYlGn
Spectral
coolwarm
bwr
seismic
twilight
twilight_shifted
hsv
Pastel1
Pastel2
Paired
Accent
Dark2
Set1
Set2
Set3
tab10
tab20
tab20b
tab20c
flag
prism
ocean
gist_earth
terrain
gist_stern
gnuplot
gnuplot2
CMRmap
cubehelix
brg
gist_rainbow
rainbow
jet
nipy_spectral
gist_ncar
ここまでスクロールしたあなたも物好きな方と見受けられる。
エンジニアにはこのような遊び心も時には大事だろう。