日本の法人一覧をMacのコマンドで集計したら一番多い社名は「八幡神社」でした

# はじめに

[国税庁法人番号公表サイト](https://www.houjin-bangou.nta.go.jp/)では、日本の約500万社の法人番号、社名（名称、称号）、住所などがダウンロードできます。社名は重複してもOKなので、なんとなく一番多い社名を知ってみたくなり、手元のMacでコマンド叩いて集計してみました。その結果と手順をまとめます。

# 結果

タイトルに書いてしまいましたが、なんと一番多いのは「八幡神社」でした。そうなんです、神社も法人なのです。なんと4,737社もありました。

## 重複の多い法人名トップ 50（法人種別の区別あり）

以下、重複の多い法人名のトップ50です。

```sh
% head -n 50 result.txt
4737 八幡神社
2620 稲荷神社
2085 熊野神社
1880 神明社
1842 諏訪神社
1553 白山神社
1270 天満神社
1257 八幡宮
1132 神明神社
1034 八坂神社
1021 春日神社
 917 山神社
 841 日吉神社
 837 天神社
 806 愛宕神社
 740 株式会社アシスト
 736 八幡社
 734 観音寺
 704 神明宮
 640 株式会社ライズ
 581 菅原神社
 568 光明寺
 566 西光寺
 565 株式会社トラスト
 546 住吉神社
 544 諏訪社
 528 株式会社アドバンス
 523 天満宮
 522 鹿島神社
 507 株式会社フロンティア
 497 株式会社サンライズ
 464 日枝神社
 441 株式会社ネクスト
 426 若宮神社
 417 株式会社ワイズ
 416 香取神社
 394 荒神社
 391 大歳神社
 389 有限会社アシスト
 388 貴船神社
 370 株式会社エムズ
 357 有限会社サンライズ
 348 西福寺
 340 有限会社アドバンス
 338 有限会社ライズ
 336 株式会社大和
 332 株式会社クローバー
 331 株式会社プログレス
 327 株式会社アクティブ
 323 嚴島神社
```

株式会社では「株式会社アシスト」が740社もあります。そして「株式会社ライズ」、「株式会社トラスト」、「株式会社アドバンス」と続きます。

また、40位くらいには「有限会社アシスト」もありました。法人の種別（株式会社、有限会社、合名会社、合資会社、合同会社）が違う同名の会社もたくさんありそうです。

そこで、法人の種別を除いた結果でも集計してみました。

## 重複の多い法人名トップ 50（法人種別の区別なし）

以下、重複の多い法人名のトップ50です。法人種別は除いて集計しています。

```sh
% head -n 50 result2.txt
4737 八幡神社
2620 稲荷神社
2085 熊野神社
1881 神明社
1842 諏訪神社
1553 白山神社
1299 アシスト
1270 天満神社
1257 八幡宮
1165 ライズ
1132 神明神社
1041 サンライズ
1034 八坂神社
1021 春日神社
1015 アドバンス
 966 トラスト
 917 山神社
 841 日吉神社
 837 天神社
 835 フロンティア
 806 愛宕神社
 794 ワイズ
 736 八幡社
 734 観音寺
 730 ネクスト
 704 神明宮
 677 エムズ
 661 アクティブ
 648 アクト
 614 大和
 590 プログレス
 590 サンテック
 581 菅原神社
 580 アイテック
 579 アルファ
 579 アクセス
 568 光明寺
 566 クローバー
 566 西光寺
 558 さくら
 555 ウイング
 546 住吉神社
 544 諏訪社
 541 プラスワン
 540 サクセス
 531 フェニックス
 523 天満宮
 522 鹿島神社
 514 クリエイト
 506 ファースト
```

なんと「アシスト」が1,299社になりました。続く「ライズ」「サンライズ」「アドバンス」も1,000社越えです。

他にも1文字の社名、数字だけの社名、なんと145文字の社名！など、いろいろ興味深いものがたくさんあります。ご興味のある方は、ぜひお手元でもいろいろ試してみてください。国税庁のデータ200MBをダウンロードすれば、私の環境では集計そのものは数分でした。以下、私が集計した環境と手順をまとめます。

# 環境
実行環境はMacBook Proです。

| 項目   | 環境                                                 |
| :----- | :--------------------------------------------------- |
| OS     | macOS Catalina バージョン 10.15.7                    |
| ハード | MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports) |
| プロセッサ | 1.4 GHz クアッドコアIntel Core i5|
| メモリ | 16 GB 2133 MHz LPDDR3|
| グラフィックス | Intel Iris Plus Graphics 645 1536 MB|
| ディスク | APPLE SSD AP0256N|

# 集計手順

集計の手順をまとめます。なお、途中に出てくるコマンドの詳細説明は割愛します。ググるとたくさん解説がありますので、そちらをご参照ください。

## 法人種別の区別ありの集計
### 1. 法人の基本3情報のダウロード

まず、法人の基本3情報のCSVをダウンロードします。

[国税庁法人番号公表サイト](https://www.houjin-bangou.nta.go.jp/)の上部にある「ダウンロード Web-API」のタブから「基本3情報ダウンロード」を選ぶと、基本3情報のデータの中身や形式の説明が表示されます。ここから「全件データのダウンロード」を選び、「CSV形式・Unicode」で地域が「全国」の「全国 zip 197MB」を選んでダウンロードしてください。2021年5月3日時点では、ダウンロード ファイル名は`00_zenkoku_all_20210430.zip`でした。

zipファイルを解凍すると`00_zenkoku_all_20210430.csv`と`00_zenkoku_all_20210430.csv.asc`の2つのファイルになります。前者がデータ本体で1.04GBもありました。後者はPGPのデジタル署名ファイルで、ファイルが国税庁のもので改ざんされていないことを確認できます[^1]。

`00_zenkoku_all_20210430.csv`の先頭部分はこんな感じです。`head`を使えば今回のような1GBもあるようなファイルでも先頭部分がサクッと確認できて便利です。

```sh
% head 00_zenkoku_all_20210430.csv
1,1000012160153,01,1,2018-04-02,2015-10-05,"釧路検察審査会",,101,"北海道","釧路市","柏木町４－７",,01,206,0850824,,,,,,,2015-10-05,1,"Kushiro Committee for the Inquest of Prosecution","Hokkaido","4-7, Kashiwagicho, Kushiro shi",,"クシロケンサツシンサカイ",0
2,1000013050386,01,1,2018-04-02,2015-10-05,"伊達簡易裁判所",,101,"北海道","伊達市","末永町４７－１０",,01,233,0520021,,,,,,,2015-10-05,1,"Date Summary Court","Hokkaido","47-10, Suenagacho, Date shi",,"ダテカンイサイバンショ",0
3,1000013050394,01,1,2018-04-02,2015-10-05,"八雲簡易裁判所",,101,"北海道","二海郡八雲町","末広町１８４",,01,346,0493112,,,,,,,2015-10-05,1,"Yakumo Summary Court","Hokkaido","184, Suehirocho, Yakumo cho, Futami gun",,"ヤクモカンイサイバンショ",0
4,1000013050403,01,1,2018-04-02,2015-10-05,"留萌簡易裁判所",,101,"北海道","留萌市","沖見町２丁目",,01,212,0770037,,,,,,,2015-10-05,1,"Rumoi Summary Court","Hokkaido","2, Okimicho, Rumoi shi",,"ルモイカンイサイバンショ",0
5,1000013050411,01,1,2018-04-02,2015-10-05,"遠軽簡易裁判所",,101,"北海道","紋別郡遠軽町","一条通北２丁目３－２５",,01,555,0990403,,,,,,,2015-10-05,1,"Engaru Summary Court","Hokkaido","2-3-25, 1jodorikita, Engaru cho, Mombetsu gun",,"エンガルカンイサイバンショ",0
6,1000020012131,01,1,2018-04-02,2015-10-05,"苫小牧市",,201,"北海道","苫小牧市","旭町４丁目５－６",,01,213,0530018,,,,,,,2015-10-05,1,"Tomakomai City","Hokkaido","4-5-6,Asahi-machi, Tomakomai shi",,"トマコマイシ",0
7,1000020012271,01,1,2020-08-11,2015-10-05,"歌志内市",,201,"北海道","歌志内市","字本町５",,01,227,0730403,,,,,,,2015-10-05,1,"Utashinai City","Hokkaido","5,Honncho, Utashinai shi",,"ウタシナイシ",0
8,1000020013030,01,1,2018-04-02,2015-10-05,"当別町",,201,"北海道","石狩郡当別町","白樺町５８－９",,01,303,0610233,,,,,,,2015-10-05,1,"Tobetsu","Hokkaido","58-9 Shirakaba-cho, Tobetsu",,"トウベツチョウ",0
9,1000020013617,01,1,2018-04-02,2015-10-05,"江差町",,201,"北海道","檜山郡江差町","字中歌町１９３－１",,01,361,0430034,,,,,,,2015-10-05,1,"Esashi cho","Hokkaido","Nakauta cho 193-1, Hiyama gun Esashi cho",,"エサシチョウ",0
10,1000020013625,01,1,2018-04-16,2015-10-05,"上ノ国町",,201,"北海道","檜山郡上ノ国町","字大留１００",,01,362,0490611,,,,,,,2015-10-05,1,"Kaminokuni Town","Hokkaido","100,Odome, Kaminokuni cho Hiyama gun",,"カミノクニチョウ",0
```

このCSVの7カラム目が法人名です。いきなり裁判所や市区町村名が並んでいますが、こういった国の機関や地方公共団体も法人なのです。

データ数は、行数を`wc`でカウントしたところ、5,015,295件でした。

```sh
% wc -l 00_zenkoku_all_20210430.csv
 5015295 00_zenkoku_all_20210430.csv
```

### 2.法人名の抽出

このファイルから法人名のみを抽出します。`sed`を使って7カラム目だけを取り出します。

```sh
% cat 00_zenkoku_all_20210430.csv | sed -E "s/^([^,]*,){6}\"([^\"]*)\".*/\2/" > name.txt
```

30秒くらいで157.2MBの`name.txt`ができあがりました。先頭部分はこんな感じです。うまく法人名だけが取り出せている模様です。

```sh:
% head name.txt
釧路検察審査会
伊達簡易裁判所
八雲簡易裁判所
留萌簡易裁判所
遠軽簡易裁判所
苫小牧市
歌志内市
当別町
江差町
上ノ国町
```

件数は変わっていないので、欠落もなさそうです。

```sh
% wc -l name.txt
 5015295 name.txt
```

ここで`sed`のパラメーターについて少し解説します。`"s/^([^,]*,){6}\"([^\"]*)\".*/\2/"`は、「正規表現`^([^,]*,){6}\"([^\"]*)\".*`に該当した部分を`\2`（＝2つ目のグループの内容）で置換しなさい」という意味です。この正規表現の部分の意味はこんな感じです。

| 正規表現 | 意味                          |
| -------- | ----------------------------- |
| `^`      | 行の先頭から始まり、          |
| `(`      | （1つ目のグループ　始まり）   |
| &emsp;&emsp;`[^,]`   | &emsp;&emsp;`,`以外の文字が               |
| &emsp;&emsp;`*`      | &emsp;&emsp;0文字以上続き、    |
| &emsp;&emsp;`,`      | &emsp;&emsp;そして次に文字`,`がくる       |
| `)`      | （1つ目のグループ　終わり）   |
| `{6}`    | このグループが6回繰り返されて、 |
| `\"`     | 次に文字`"`がきて、           |
| `(`      | （2つ目のグループ　始まり）   |
| &emsp;&emsp;`[^\"]` | &emsp;&emsp;`"`以外の文字が |
| &emsp;&emsp;`*` | &emsp;&emsp;0文字以上続き、 |
| `)`      | （2つ目のグループ　終わり）   |
| `\"`     | 次に文字`"`がきて、           |
| `.`    |どんな文字でもいいので |
| `*`    |0文字以上続く |

もう少しスマートな書き方もあるかも知れません。識者の方のアドバイスをお待ちしております。

なお、今回はたまたま法人名の前のカラム内容に`"`や`,`などが出現しないので簡単でしたが、これらの文字が出てくると大変です。カラム全体を`"`でくくったり、さらにデータ内に`"`が出てきたら`""`でエンコードしたり……。今回は簡単なので助かりました。

### 3.重複の除去

次に、`name.txt`に対して重複を調べ、その重複数をカウントします。これは`uniq`でできますが、先に`sort`が必要です。

```sh
% cat name.txt | sort | uniq -c > uniq.txt
```
1分くらいで138.8MBの`uniq.txt`ができあがりました。先頭部分はこんな感じです。

```sh
% head uniq.txt 
   1 葵
   1 Ｙ´ｓコーポレーション株式会社
   1 ス光
   1 一言
   1 七寺
   4 七社
   3 七社
   1 三宮
   7 三社
   1 三社
```

「社」と「&#64076;」が別で集計されていますね。間違いではないので先に進みますが、用途によってはこのような異体字は同一視した方が良いかも知れません。

なお、件数は3,582,750件に減っていました。

```sh:
% wc -l uniq.txt
 3582750 uniq.txt
```

名前が重複するものが減ったことになるので、計算すると実に28.6%の法人は他社と名前が重複していることになります。ここでは法人種別を区別して集計していますので、区別しなければもっとたくさんあることになります。

### 4.降順でソート
最後に重複数を降順でソートして完了です。10秒くらいで同サイズの`result.txt`ができあがります。

```sh:
% cat uniq.txt | sort -r > result.txt
```

これがこの記事の先頭に掲載している1つ目の結果です。

## 法人種別の区別なしの集計

法人種別を区別しない集計は、前述の2.で法人名を抽出した後に、先頭や末尾にある`株式会社`、`有限会社`、`合名会社`、`合資会社`、`合同会社`を取り除いてから3.以降の手順を実施しました。少し乱暴なので、もしかしたら間違いも含まれているかも知れません。

unixのコマンドはパイプでつなげば並列動作するので、法人種別を区別しない集計は1行で実行してみます。

```sh:
% cat 00_zenkoku_all_20210430.csv | sed -E "s/^([^,]*,){6}\"([^\"]*)\".*/\2/" | sed -E "s/^(株式会社|有限会社|合名会社|合資会社|合同会社)//" | sed -E "s/(株式会社|有限会社|合名会社|合資会社|合同会社)$//" | sort | uniq -c | sort -r > result2.txt
```

1分半くらいで91.3MBの`result2.txt`ができあがりました。これがこの記事の先頭に掲載している2つ目の結果です。

なお、このコマンドでは`sed`が3回続いています。1回で書けそうなので挑戦はしたのですが、`sed`は非貪欲なマッチングや後方参照ができないので、うまく書くことができませんでした。こちらも識者の方のアドバイスをお待ちしております。

ちなみに件数は3,128,222件でした。

```sh
% wc -l result2.txt
 3128222 result2.txt
```

法人種別を区別しない場合、37.6%の法人は他社と名前が重複していることになります。日本の社名は重複しまくりですね。

集計手順は以上です。


# 注意

本記事で使用した法人情報の出典は国税庁法人番号公表サイト（国税庁）です。2021年5月3日にダウンロードしたデータに基づいています。なお、集計結果の正しさは保証できませんので、あらかじめご了承ください。

以下、気づいている点です。

- 前述のように、目的によっては「社」と「&#64076;」などの異体字の差を吸収して集計すべきかも知れません。
- 法人種別を区別しない集計はかなり乱暴です。データ内には法人種別を示すカラムもありますので、それを見て法人名から除去しないと余計なものまで除いてしまう危険があります。
- 150文字を超える法人名の場合、抽出しているカラムには先頭150文字しか入っていませんので正しくありません。

データの詳細については「基本3情報ダウンロード」のページにある「リソース定義書」をご参照ください。

# おわりに

500万件というボリュームだと現時点のExcelでは開けない[^2]ので簡単に集計できる感じがしないかも知れませんが、`sed`で正規表現を使って目的の項目が抽出できれば`sort`と`uniq`でサクッと処理できるので大変便利です。正規表現わからんという方は食わず嫌いを乗り越えて、軽くでも使い始めてみることをお薦めします。正規表現をかじっているかどうかで、この手の作業効率はすごく変わります。

あと、今回使ったデータは商用利用も可能[^3]です。例えば申し込みフォームなどで社名を入力する際にサジェストに使ったり、同名他社を識別するための質問をするようなこともできそうです。また、商号や所在地などの異動情報も差分公開されているので、蓄積していけば名寄せなどにも活用できるかも知れません。いろいろ利用できそうな感じがしました。



最後までお読みいただき、ありがとうございました。この記事が何かのお役に立てましたら幸いです。



[^1]: [国税庁法人番号公表サイト > 基本３情報ダウンロード > PGP公開鍵について](https://www.houjin-bangou.nta.go.jp/download/kokaikagi/index.html)
[^2]: [Excel の仕様と制限](https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3)
[^3]: [国税庁法人番号公表サイト > 利用規約](https://www.houjin-bangou.nta.go.jp/riyokiyaku/)