SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

郵政公社の郵便番号CSVデータの注意点

1日1ネタをどこまで続けられるか、こっそり挑戦している、このブログです。
そろそろ1回目のネタ切れ気味な時期がやってきました。
でもがんばります!

郵政公社が配布している郵便番号CSVデータを利用したシステムで、以前ちょっと困った現象が発生していたので調査した際に気づいたことです。

これなのですが、
http://www.post.japanpost.jp/zipcode/dl/readme.html

郵便番号データファイルの形式等

全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。

びっくりです。それぞれの行が、それぞれ完結していると思い込んでいました。
“複数行に分割”という、対応にものすごく困りそうなことをしてくれてます。

複数行の分割も考慮して、きれいにデータベースにしまうことは可能なのでしょうか。

そこで、ちょっと調査だけでもしてみることに。

郵便番号データはちょっと前のエントリーの方法:load data infiileで、さくっと取り込んでおきます。

各レコードには連番を振ることで順序付けしているので、次のSQLで自己結合して次の行と並べてみることができます。

select
    p1.id, p1.c3, p1.c7, p1.c8, p1.c9, p2.c9
from
    postaldata p1
    left join postaldata p2 on p1.id + 1 = p2.id
where
    p1.c3 = p2.c3 and CHAR_LENGTH(p1.c6) > 29
order by
    p1.id

注意点には「38文字を超えたら」と書いてあるのですが、きっちり38文字なのか怪しいです。123番地を12(次の行)3番地みたいに切られると困ります。そこで30文字以上の行に注目しました。

+--------+---------+----------+------------------+----------------------------------------------------------------------------+----------------------------------------------------------------------------+
| id     | c3      | c7       | c8               | c9                                                                         | c9                                                                         |
+--------+---------+----------+------------------+----------------------------------------------------------------------------+----------------------------------------------------------------------------+
|   3073 | 0660005 | 北海道   | 千歳市           |協和(88-2、271-10、343-2、404-1、427-              | 3、431-12、443-6、608-2、641-8、814、842-     |
|   3074 | 0660005 | 北海道   | 千歳市           |3、431-12、443-6、608-2、641-8、814、842-      | 5、1137-3、1392、1657、1752番地)                       |
|   3413 | 0590005 | 北海道   | 登別市           |札内町(5、9、11-12、36、42-2、62、80、95、              | 184、231、389-2、499、500番地)                           |
|   3754 | 0613774 | 北海道   | 石狩郡当別町     | 川下(782-13、5363-7~8、5382-3、5405               | -4、5407-5、5445~5446-4番地)                           |
|   4560 | 0482402 | 北海道   | 余市郡仁木町     | 大江(1丁目、2丁目「651、662、668番地」以外、3丁目5、1       | 3-4、20、678、687番地)                                         |
|   4562 | 0482331 | 北海道   | 余市郡仁木町     | 大江(2丁目651、662、668番地、3丁目103、118、             | 210、254、267、372、444、469番地)                       |
|   8147 | 0882686 | 北海道   | 標津郡中標津町   | 俣落(1629-1、1653-3、1684-5、1886-2、1893、   | 1896-2、1896-3、1906-8、1932-2、1936、         |
|   8148 | 0882686 | 北海道   | 標津郡中標津町   | 1896-2、1896-3、1906-8、1932-2、1936、         | 1936-2、1951-2、1956-2、1967-2、1980-2、     |
|   8149 | 0882686 | 北海道   | 標津郡中標津町   | 1936-2、1951-2、1956-2、1967-2、1980-2、     | 1997-3、2000-2、2000-8、2003、2015-4、         |
|   8150 | 0882686 | 北海道   | 標津郡中標津町   | 1997-3、2000-2、2000-8、2003、2015-4、         | 2023-2、2038-2、2253-2、2253-5、2253-21、   |
|   8151 | 0882686 | 北海道   | 標津郡中標津町   | 2023-2、2038-2、2253-2、2253-5、2253-21、   | 2253-24、2253-35、2253-63)                           |
|   8984 | 0185501 | 青森県   | 十和田市         | 奥瀬(青撫、小畳石、十和田、十和田湖畔宇樽部、十和田湖畔子ノ口、           | 十和田湖畔休屋)                                                           |
|  10200 | 0330071 | 青森県   | 上北郡六戸町     | 犬落瀬(内金矢、内山、岡沼、金沢、金矢、上淋代、木越、権現沢、             | 四木、七百、下久保「174を除く」、下淋代、高森、通目木、坪毛沢「2       |
|  10201 | 0330071 | 青森県   | 上北郡六戸町     | 四木、七百、下久保「174を除く」、下淋代、高森、通目木、坪毛沢「2       | 5、637、641、643、647を除く」、中屋敷、沼久保、根古橋、堀切   |
|  10202 | 0330071 | 青森県   | 上北郡六戸町     | 5、637、641、643、647を除く」、中屋敷、沼久保、根古橋、堀切   | 沢、南平、柳沢、大曲)                                                     |
|  10205 | 0330072 | 青森県   | 上北郡六戸町     | 折茂(今熊「213~234、240、247、262、266、27           | 5、277、280、295、1199、1206、1504を除く」、         |
|  10206 | 0330072 | 青森県   | 上北郡六戸町     | 5、277、280、295、1199、1206、1504を除く」、         | 大原、沖山、上折茂「1-13、71-192を除く」)                       |
|  11428 | 0210102 | 岩手県   | 一関市           |萩荘(赤猪子、芦ノ口、甘蕨、老流、大沢、上宇津野、上本郷、上要害、化粧      | 坂、三月田、下宇津野、下本郷、外山、堂の沢、栃倉、栃倉南、長倉、中沢、     |
|  11429 | 0210102 | 岩手県   | 一関市           |坂、三月田、下宇津野、下本郷、外山、堂の沢、栃倉、栃倉南、長倉、中沢、      | 八森、馬場、広面、平場、古釜場、曲淵、松原、南沢、谷起、焼切、八瀬、       |
|  11430 | 0210102 | 岩手県   | 一関市           |八森、馬場、広面、平場、古釜場、曲淵、松原、南沢、谷起、焼切、八瀬、        | 八幡、山ノ沢)                                                             |
|  12287 | 0285102 | 岩手県   | 岩手郡葛巻町     | 葛巻(第40地割「57番地125、176を除く」~第45                   | 地割)                                                                     |
|  19651 | 9910801 | 山形県   | 西村山郡大江町   | 左沢(1518-3、1750-1~2228-18、2255-1~           | 2257-28、2316~2318、2430-1~2431-75)         |
|  19750 | 9960301 | 山形県   | 最上郡大蔵村     | 南山(430番地以上「1770-1~2、1862-42、                   | 1923-5を除く」、大谷地、折渡、鍵金野、金山、滝ノ沢、豊牧、沼の台、   |
|  19751 | 9960301 | 山形県   | 最上郡大蔵村     | 1923-5を除く」、大谷地、折渡、鍵金野、金山、滝ノ沢、豊牧、沼の台、   | 肘折、平林)                                                               |
|  21253 | 9620211 | 福島県   | 須賀川市         | 滝(赤土、雁田、北久保、白砂、白砂山、大新畑、大日前、滝西、チャクの下、   | 日向前、本郷、前田)                                                       |
|  22804 | 9660501 | 福島県   | 耶麻郡北塩原村   | 檜原(苧畑沢、金山、五十両原、巣ノ山、滝ノ原、道前原、墓下、桧原、無縁     | 原、早稲沢、小屋沢、水梨原、中原、楢木平原、焼桂山、館山)                 |
|  22806 | 9660401 | 福島県   | 耶麻郡北塩原村   | 檜原(雄子沢、雄子沢原、細野、南黄連沢、南黄連沢山、黄連沢山、             | 黄連原山)                                                                 |
|  22808 | 9692701 | 福島県   | 耶麻郡北塩原村   | 檜原(秋元、荒砂沢山、裏磐梯、大府平、小野川、小野川原、剣ケ峯、狐鷹森、   | 五色沼、甚九郎山、曽原山、寺沢山、蛇平原山、湯平山)                       |
|  23874 | 9790622 | 福島県   | 双葉郡富岡町     | 毛萱(前川原232~244、311、312、337~862番地             | 〔東京電力福島第二原子力発電所構内〕)                                     |
|  28622 | 3293214 | 栃木県   | 那須郡那須町     | 横岡(1563、1660、1670、1728、1736、174             | 8、1767-4番地)                                                     |
|  34427 | 2892614 | 千葉県   | 旭市             | 江ケ崎(12~22、127~140、1709、1723-3、               | 1728-4番地)                                                         |
|  34439 | 2892605 | 千葉県   | 旭市             | 琴田(85~160、1386~1815、2593~2820、               | 3598~3614番地)                                                   |
|  51294 | 9218046 | 石川県   | 金沢市           |大桑町(ア、イ、ヰ、ウ、上野、ヲ、オ乙、鐘搗山、上川原、上猫下、            | ク、ケ、御所谷、小寺山、シ、下上野、下西欠、平、チ、ツ乙、ツ丙、テ、ト、   |
|  51295 | 9218046 | 石川県   | 金沢市           |ク、ケ、御所谷、小寺山、シ、下上野、下西欠、平、チ、ツ乙、ツ丙、テ、ト、    | 中上野、中尾山、中平、中ノ大平、西ノ山、猫シタイ、ノ、ハ、開、             |
|  51296 | 9218046 | 石川県   | 金沢市           |中上野、中尾山、中平、中ノ大平、西ノ山、猫シタイ、ノ、ハ、開、              | 法師山、坊山、マ、鱒川淵、ム、元末、元涌波庚、ヤ、リ、ル、レ乙、           |
|  51297 | 9218046 | 石川県   | 金沢市           |法師山、坊山、マ、鱒川淵、ム、元末、元涌波庚、ヤ、リ、ル、レ乙、            | レ甲、ロ乙、ロ甲、和)                                                     |
|  51299 | 9200946 | 石川県   | 金沢市           |大桑町(カ、コ、サ乙、サ甲、ソ、タ、ツ甲、ナ、メ、ユ、ヨ、                  | ラ、ワ、穴欠、穴淵欠、子、庚、葭島、下葭島欠)                             |
|  56628 | 4091321 | 山梨県   | 甲州市           |塩山牛奥(5288、5288-1、5288-3、5289、5289          | -2、5289-15)                                                     |
|  57867 | 3994232 | 長野県   | 駒ヶ根市         | 下平(2070~2119、2309~2311、2419、2421~2426 | 、2433~2450)                                                     |
|  58237 | 3842304 | 長野県   | 北佐久郡立科町   | 茂田井(1~500「211番地を除く」「古町」、2527~2529         | 「土遠」)                                                                 |
|  63544 | 4280049 | 静岡県   | 島田市           |牧之原(250~343番地「255、256、258、259、262、        | 276、294~300、302~304番地を除く」)                       |
|  65432 | 4530002 | 愛知県   | 名古屋市中村区   | 名駅(1-1-8、1-1-12、1-1-13、1-1-14、1-3-4、   | 1-3-7)                                                               |
|  66873 | 4400075 | 愛知県   | 豊橋市           |花田町西宿(110-2、110-7番地を除く)                              | 花田町(無番地)                                                           |
|  70779 | 4901323 | 愛知県   | 稲沢市           |平和町(光和、塩川、下起北、下起中、下起東、下起南、勝幡新田、城西、        | 城之内、須ケ脇、那古良、平六、前平、明和、嫁振、嫁振北、嫁振東、領内)     |
|  77205 | 6028364 | 京都府   | 京都市上京区     | 突抜町(下立売通御前西入、下立売通御前西入下る、下立売通天                 | 神道東入、下の下立売通御前西入)                                           |
|  77673 | 6011255 | 京都府   | 京都市左京区     | 上高野東山(55、57-6、64、65、71-1、71-21、             | 72、189、189-1番地)                                             |
|  77978 | 6060068 | 京都府   | 京都市左京区     | 八瀬野瀬町(277の2、279の1、3~5、281の2~9、11           | ~18、20、22、24~26、32、287、300番地)                 |
|  78632 | 6050036 | 京都府   | 京都市東山区     | 五軒町(三条通白川橋東入、三条通白川橋下る東入、                           | 白川筋三条下る)                                                           |
|  84244 | 5900111 | 大阪府   | 堺市中区         | 三原台(2丁11-7・9~17・21、3丁59-2~18・21~25、     | 4丁60-1・107-3~12・16~21)                               |
|  84322 | 5900158 | 大阪府   | 堺市南区         | 太平寺(508-5、696-2~696-3、724-1、725-1、       | 726-1、727、728、728-1、729、730、731、732、   |
|  84323 | 5900158 | 大阪府   | 堺市南区         | 726-1、727、728、728-1、729、730、731、732     | 733-1~733-2、735、786-3番地)                           |
|  85056 | 5970045 | 大阪府   | 貝塚市           |三ツ松(596、894-1、915-4、925、927-2、932          | -4、934~968、1013-1、1464番地)                         |
|  87526 | 6511102 | 兵庫県   | 神戸市北区       | 山田町下谷上(大上谷、修法ケ原、中一里山「9番地の4、12番地を除く」長   | 尾山、再度公園)                                                           |
|  87528 | 6520071 | 兵庫県   | 神戸市北区       | 山田町下谷上(菊水山、高座川向、中一里山「9番地の4、12番地」念仏堂、   | ひよどり越)                                                               |
|  88680 | 6691251 | 兵庫県   | 西宮市           |塩瀬町名塩(4205-1、5205、5313-20、5313-33、        | 5313-35番地)                                                       |
|  92380 | 6308037 | 奈良県   | 奈良市           |中町(5115~5149、5171、5183、5186、                    | 5192~5196、5198~5212、5227~5229、               |
|  92381 | 6308037 | 奈良県   | 奈良市           |5192~5196、5198~5212、5227~5229、                | 5239~5257、5263、5269~5271、5275、               |
|  92382 | 6308037 | 奈良県   | 奈良市           |5239~5257、5263、5269~5271、5275、                | 5276-4、5276-5、5277~5280、5284~                 |
|  92384 | 6308037 | 奈良県   | 奈良市           |5312、5314、5316~5327、5346、5349、                | 5351~5352、5355~5362、5364~5424、               |
|  92385 | 6308037 | 奈良県   | 奈良市           |5351~5352、5355~5362、5364~5424、                | 5426、5429~5430、5445、5455、5461、               |
|  92386 | 6308037 | 奈良県   | 奈良市           |5426、5429~5430、5445、5455、5461、                | 5463、5470、5472、5475、5482~5529)               |
| 103842 | 7592301 | 山口県   | 美祢市           |於福町上(駅前、岡田、上田代、栗ケ原、下田代、神柳、大明、立石、西寺、      | 平野、古屋、宗済、横道、竜現地)                                           |
| 103844 | 7592302 | 山口県   | 美祢市           |於福町下(入水、榎田、金山、小杉、砂地、台、西畑、萩原、東中村、            | 平国木、緑ケ丘、宮の前)                                                   |
| 105161 | 7770301 | 徳島県   | 美馬市           |木屋平(市初、今丸、尾山、カゴミ、樫原、木中、桑柄、ケヤキヒラ、小日浦、    | 地神滝、菅蔵、杖谷、葛尾、ハジコノ、ビヤガイチ、二戸、三ツ木、貢、         |
| 105162 | 7770301 | 徳島県   | 美馬市           |地神滝、菅蔵、杖谷、葛尾、ハジコノ、ビヤガイチ、二戸、三ツ木、貢、          | 南張、向樫原)                                                             |
| 105165 | 7712107 | 徳島県   | 美馬市           |美馬町(雨下、上野、小原、境目、里西屋敷、下ノ段、城、滝下、竹ノ内、田辺、  | 谷口、栂尾、突落、中尾、中耕地、中筋、中通、中西、中山、長畑、夏蕨、       |
| 105166 | 7712107 | 徳島県   | 美馬市           |谷口、栂尾、突落、中尾、中耕地、中筋、中通、中西、中山、長畑、夏蕨、        | 西宮ノ上、東宮ノ上、細野、前田、松ノ花、松ノ本、宮前、宮北、八幡、         |
| 105167 | 7712107 | 徳島県   | 美馬市           |西宮ノ上、東宮ノ上、細野、前田、松ノ花、松ノ本、宮前、宮北、八幡、          | 山夏蕨、吉水)                                                             |
| 105169 | 7712106 | 徳島県   | 美馬市           |美馬町(荒川、井出縁、井ノ神、大泉、大宮西、上突出、岸ノ下、北東原、        | 喜来市、里平野、下突出、谷ヨリ西、乳ノ木、寺ノ下、天神、天神北、中東原、   |
| 105170 | 7712106 | 徳島県   | 美馬市           |喜来市、里平野、下突出、谷ヨリ西、乳ノ木、寺ノ下、天神、天神北、中東原、    | 西荒川、沼田島、東荒川、南荒川、南東原、妙見、山嫁坂)                     |
| 105172 | 7712102 | 徳島県   | 美馬市           |美馬町(家ノ前、大池、大上、大北、大佐古、大前、岡ノ内、押上、茅原、        | 川ノ上、観音、栗林、黒砂、狙ケ内、猿坂、下白地、白地、炭釜、芹佐古、惣後、 |
| 105173 | 7712102 | 徳島県   | 美馬市           |川ノ上、観音、栗林、黒砂、狙ケ内、猿坂、下白地、白地、炭釜、芹佐古、惣後、  | 惣田、外墓、滝ノ上、立見山、田ノ岡、狙坂、中岡、中野田ノ井、中横尾、長地、 |
| 105174 | 7712102 | 徳島県   | 美馬市           |惣田、外墓、滝ノ上、立見山、田ノ岡、狙坂、中岡、中野田ノ井、中横尾、長地、  | 西浦、西ノ谷、野田ノ井、橋谷、場シ所、東筋、平尾、平野、藤宇、前坂、       |
| 105175 | 7712102 | 徳島県   | 美馬市           |西浦、西ノ谷、野田ノ井、橋谷、場シ所、東筋、平尾、平野、藤宇、前坂、        | 水ノ岡、味噌ケ久保、道ノ上、宮ノ岡、南畠、薬師ケ久保、山西屋敷、           |
| 105176 | 7712102 | 徳島県   | 美馬市           |水ノ岡、味噌ケ久保、道ノ上、宮ノ岡、南畠、薬師ケ久保、山西屋敷、            | 山橋谷、横尾)                                                             |
| 105178 | 7712105 | 徳島県   | 美馬市           |美馬町(池ノ浦、銀杏木、梅ケ久保、駅、蛭子、柿木、鍵掛、願勝寺、            | 北土ケ久保、喜入道、滝宮、土ケ久保、西段、宮東、宮西、宮南、養泉)         |
| 105180 | 7712103 | 徳島県   | 美馬市           |美馬町(一ノ宮、後谷、倉尾、三頭山、下後谷、高惣、谷尻、                    | 露口、中沼田、中野、夏弥喜、ナロヲ、西大久保、西沼田、沼田、八ノ坪、       |
| 105181 | 7712103 | 徳島県   | 美馬市           |露口、中沼田、中野、夏弥喜、ナロヲ、西大久保、西沼田、沼田、八ノ坪、        | 坊ケ谷、水久保、宗ノ分、屋内)                                             |
| 105184 | 7712104 | 徳島県   | 美馬市           |美馬町(鵜飼口、岡、小長谷、小長谷端、笠仏、川縁、荒神、助松、高畑、辰角、  | 谷頭、玉振前、チゲジ、天神東、轟、中黒、中須、中道北、中道南、ノツゴ、     |
| 105185 | 7712104 | 徳島県   | 美馬市           |谷頭、玉振前、チゲジ、天神東、轟、中黒、中須、中道北、中道南、ノツゴ、      | ノリコヘ、橋本、東岸ノ下、東段、東宗重、坊僧、丸山、南原、明神原、         |
| 105186 | 7712104 | 徳島県   | 美馬市           |ノリコヘ、橋本、東岸ノ下、東段、東宗重、坊僧、丸山、南原、明神原、          | 宗重、薬師)                                                               |
| 110028 | 8080008 | 福岡県   | 北九州市若松区   | 小竹(1~1953、3006~3008番地、相川、鬼ケ坂、唐木、           | 椿、脇ノ浦)                                                               |
| 111462 | 8260043 | 福岡県   | 田川市           |奈良(青葉町、大浦、会社町、霞ケ丘、後藤寺西団地、後藤寺東団地、希望ケ丘、  | 松の木、三井後藤寺、緑町、月見ケ丘)                                       |
| 117113 | 8631403 | 熊本県   | 天草市           |河浦町今富(1933、1939、1945、1955-4、1960、          | 1970、1974、1976、1983、1988-3、1990-5         |
| 117114 | 8631403 | 熊本県   | 天草市           |1970、1974、1976、1983、1988-3、1990-5、        | 2003、2051)                                                       |
| 118153 | 8701146 | 大分県   | 大分市           | 曲(635、639、650、669、676、678、689、               | 695、718、733、1481、1555、1618番地)                 |
| 118199 | 8701163 | 大分県   | 大分市           | 廻栖野(1~657、776~829、842~1305、2691、           | 2925番地)                                                             |
| 118343 | 8710122 | 大分県   | 中津市           | 相原(2803-1、2803-24、2803-25、2803-27、       | 2803-37、2803-38、2803-39、2803-43、           |
| 118344 | 8710122 | 大分県   | 中津市           | 2803-37、2803-38、2803-39、2803-43、           | 2803-69、2803-77、2803-91、2818、2828、       |
| 118345 | 8710122 | 大分県   | 中津市           | 2803-69、2803-77、2803-91、2818、2828、       | 2925-7)                                                             |
| 118372 | 8710046 | 大分県   | 中津市           | 金谷(上ノ丁、中ノ丁、西ノ丁、本町、南ノ丁、                               | 森ノ丁、山ノ神)                                                           |
| 119642 | 8794332 | 大分県   | 玖珠郡玖珠町     | 山浦(秋畑、荻原、下園、下ノ寺、杉河内、千重、早水、中野、中               | 泊里、花香、牧場)                                                         |
| 120514 | 8820301 | 宮崎県   | 西臼杵郡日之影町 | 七折(阿下、笠戸、椛木、鹿川、新町、滝ノ内、中川、                         | 西ノ内、舟ノ尾、八戸、簗崎)                                               |
| 120559 | 8911275 | 鹿児島県 | 鹿児島市         | 川上町(3649、3661、3667、3669-4、3671、3672、3 | 674、3701、3704、3723-3、4128、4132、4133、4 |
| 120560 | 8911275 | 鹿児島県 | 鹿児島市         | 674、3701、3704、3723-3、4128、4132、4133、4 | 138、4203、4209、4215、4236-1、4238、4241、4 |
| 120561 | 8911275 | 鹿児島県 | 鹿児島市         | 138、4203、4209、4215、4236-1、4238、4241、4 | 242、4244番地)                                                     |
| 120969 | 8910304 | 鹿児島県 | 指宿市           | 東方(600~5974、5976~7816、7833、7834、           | 10603~11015)                                                   |
| 121257 | 8996602 | 鹿児島県 | 霧島市           | 牧園町三体堂(1824-2、1824-9、1824-41、                 | 1835-81、1835-108、1835-109、1835-228、     |
| 121258 | 8996602 | 鹿児島県 | 霧島市           | 1835-81、1835-108、1835-109、1835-228、     | 1835-238、1835-253、2003-5、2003-9、           |
| 121259 | 8996602 | 鹿児島県 | 霧島市           | 1835-238、1835-253、2003-5、2003-9、           | 2003-14、2003-17、2003-18、2057-8)             |
+--------+---------+----------+------------------+----------------------------------------------------------------------------+----------------------------------------------------------------------------+

結果は100行ほど。2行の分割の他に、3行、4行にわたって町域名が続く場合もありました。分割されている行は、括弧「(」を含んでいるので、括弧が出現したら閉じるまで1行にまとめるとか、括弧内の文字は使わないとか、12万件中の100件なら(用途によっては)気にしなくてOKとか、なんにしても悩ましいデータです。

説明書を隅々まで読んでからCSVデータを利用させていただく方がどのくらいいるのだろうと思いました。

関連するメモ

コメント