件の統計は復興庁の全国の避難者の数(所在都道府県別・所在施設別の数にあるが,このページはトップページから辿ることができず,検索からのみ到達できる.時系列でのデータは必須と思われるが,トップページから辿れるのは最新の情報のみであり,これは国民の利益に反する.
ファイル構造がマシンリーダブルでない
何度か指摘しているが,テーブル構造になっておらず,第一正規形ですらないデータ構造は害悪である.ざっと見ただけでも,セル内改行,配列構造,データ型の不一致などデータクレンジングを要する不良ファイルである.
ひどいファイルになると列のズレもあり,パワークエリで一挙に読み込むことができず,ページごとの読み込みを強いられる.政府は早急に修復すべきである.
PDFファイルはもう退役させるべき
Microsoft EXCEL の Power Query には PDF ファイルを読み込む機能が付いているが,このようなデジタルデータにおける車輪の再発明はもう辞めにして,最初からEXCELのブック形式で置いておけば良いと思う.
統計表における機械判読可能なデータ作成に関する表記方法
総務省が「統計表における機械判読可能なデータ作成に関する表記方法」でマシンリーダブルなファイルの記述方法を推奨しているので,これに従うべきである.
担当者と不良ファイルとの関係
ふと,担当者の配置転換と不良ファイルとの関連があるのではないかと仮説を立てた.以下,135件のファイルの判定結果と担当者を列記する.135件中,不良ファイル数は25件であった.
「不可」とはファイル内にテーブルが存在せず,データを読み込むことができないという意味である.
「不良」とはファイル内にテーブルは存在し,読み込めるページもあるが,読み込めないページが存在し,データに欠損のある状態のことである.
「可」とはファイル内にテーブルが存在し,すべてのデータが読み込める状態のことである.
日付 | 成否 | 担当者 |
---|---|---|
平成23年7月28日 | 可 | 清水,品田 |
平成23年8月11日 | 可 | 清水,品田,小室,勝田 |
平成23年8月25日 | 可 | 清水,品田,小室,勝田 |
平成23年9月8日 | 可 | 清水,品田,小室,勝田 |
平成23年9月22日 | 可 | 清水,品田,小室,勝田 |
平成23年10月6日 | 可 | 清水,品田,小室,勝田 |
平成23年10月20日 | 可 | 清水,品田,小室,勝田 |
平成23年11月2日 | 可 | 清水,品田,小室,勝田 |
平成23年11月17日 | 可 | 清水,品田,小室,勝田 |
平成23年12月1日 | 可 | 清水,品田,小室,勝田 |
平成23年12月15日 | 可 | 清水,品田,小室,勝田 |
平成24年1月12日 | 可 | 清水,小室,品田 |
平成24年1月26日 | 可 | 清水,小室,品田 |
平成24年2月9日 | 可 | 清水,小室,品田 |
平成24年2月23日 | 可 | 清水,小室,品田 |
平成24年3月8日 | 不可 | 清水,小室,品田 |
平成24年3月22日 | 可 | 清水,小室,品田 |
平成24年4月5日 | 可 | 小室,河原,品田 |
平成24年5月10日 | 可 | 小室,河原,品田 |
平成24年6月7日 | 可 | 小室,河原,品田 |
平成24年7月5日 | 可 | 小室,河原,品田 |
平成24年8月2日 | 可 | 小室,河原,品田 |
平成24年9月6日 | 可 | 森,小室,河原 |
平成24年10月4日 | 可 | 森,小室,河原 |
平成24年11月1日 | 可 | 森,小室,河原 |
平成24年12月6日 | 可 | 森,河原,新免 |
平成25年1月17日 | 可 | 森,河原,新免 |
平成25年2月7日 | 可 | 森,河原,新免 |
平成25年3月7日 | 可 | 森,河原,新免 |
平成25年4月4日 | 可 | 森,河原,粟津 |
平成25年5月9日 | 可 | 森,河原,粟津 |
平成25年6月6日 | 可 | 森,河原,粟津 |
平成25年7月4日 | 可 | 森,小野山,粟津 |
平成25年8月12日 | 可 | 森,小野山,粟津 |
平成25年9月12日 | 可 | 森,小野山,粟津 |
平成25年10月10日 | 可 | 森,小野山,粟津 |
平成25年11月14日 | 可 | 森,小野山,粟津 |
平成25年12月12日 | 可 | 森,小野山,粟津 |
平成26年1月16日 | 可 | 森,小野山,粟津 |
平成26年2月13日 | 可 | 森,小野山,粟津 |
平成26年3月13日 | 可 | 森,小野山,粟津 |
平成26年4月10日 | 可 | 森,小野山,粟津 |
平成26年5月15日 | 可 | 森,小野山,粟津 |
平成26年6月12日 | 可 | 森,小野山,粟津 |
平成26年7月10日 | 可 | 諏訪,小野山,粟津 |
平成26年8月14日 | 不良 | 諏訪,小野山,粟津 |
平成26年9月11日 | 可 | 諏訪,小野山,粟津 |
平成26年10月16日 | 可 | 諏訪,小野山,粟津 |
平成26年11月13日 | 可 | 諏訪,小野山,粟津 |
平成26年12月11日 | 可 | 諏訪,小野山,粟津 |
平成27年1月15日 | 可 | 諏訪,小野山,粟津 |
平成27年2月12日 | 不良 | 諏訪,小野山,粟津 |
平成27年3月12日 | 可 | 諏訪,小野山,粟津 |
平成27年4月16日 | 可 | 小野山,北中 |
平成27年5月14日 | 可 | 小野山,北中 |
平成27年6月11日 | 可 | 小野山,北中 |
平成27年7月16日 | 可 | 小野山,北中 |
平成27年8月13日 | 可 | 小野山,北中 |
平成27年9月10日 | 可 | 小野山,北中 |
平成27年10月8日 | 可 | 小野山,北中 |
平成27年11月12日 | 可 | 小野山,北中 |
平成27年12月10日 | 可 | 小野山,北中 |
平成28年1月14日 | 可 | 小野山,北中 |
平成28年2月12日 | 可 | 小野山,北中 |
平成28年3月10日 | 可 | 小野山,北中 |
平成28年4月14日 | 可 | 小野山,沼尾 |
平成28年5月16日 | 可 | 小野山,沼尾 |
平成28年6月10日 | 可 | 西山,沼尾 |
平成28年7月14日 | 可 | 西山,沼尾 |
平成28年8月12日 | 可 | 西山,沼尾 |
平成28年9月12日 | 可 | 西山,沼尾 |
平成28年10月13日 | 可 | 西山,沼尾 |
平成28年11月10日 | 可 | 西山,沼尾 |
平成28年12月9日 | 可 | 西山,沼尾 |
平成29年1月16日 | 可 | 西山,沼尾 |
平成29年2月13日 | 不可 | 西山,沼尾 |
平成29年3月13日 | 不可 | 西山,沼尾 |
平成29年4月13日 | 不良 | 篠原,沼尾 |
平成29年5月16日 | 可 | 篠原,沼尾 |
平成29年6月16日 | 不可 | 篠原,沼尾 |
平成29年7月14日 | 可 | 篠原,沼尾 |
平成29年8月17日 | 可 | 篠原,沼尾 |
平成29年9月14日 | 可 | 篠原,沼尾 |
平成29年10月12日 | 可 | 篠原,沼尾 |
平成29年11月13日 | 可 | 篠原,沼尾 |
平成29年12月12日 | 可 | 篠原,沼尾 |
平成30年1月16日 | 可 | 篠原,菅原 |
平成30年2月13日 | 可 | 篠原,菅原 |
平成30年3月15日 | 可 | 篠原,沼尾 |
平成30年4月12日 | 可 | 篠原,菅原 |
平成30年5月17日 | 可 | 篠原,菅原 |
平成30年6月14日 | 可 | 篠原 |
平成30年7月12日 | 可 | 篠原,小町 |
平成30年8月13日 | 不可 | 南,小町 |
平成30年9月11日 | 不可 | 南,小町 |
平成30年10月12日 | 不可 | 南,小町 |
平成30年11月12日 | 不可 | 南,小町 |
平成30年12月11日 | 可 | 南,小町 |
平成31年1月10日 | 可 | 南,小町 |
平成31年2月7日 | 不可 | 南,小町 |
平成31年3月11日 | 可 | 南,小町 |
平成31年4月9日 | 可 | 南,小町 |
令和1年5月14日 | 可 | 南,小町 |
令和1年6月11日 | 可 | 南,小町 |
令和1年7月10日 | 可 | 南,小町 |
令和1年8月9日 | 可 | 南,小町 |
令和1年9月6日 | 可 | 南,小町 |
令和1年10月9日 | 可 | 南,小町 |
令和1年11月12日 | 不可 | 南,小町 |
令和1年12月9日 | 可 | 南,小町 |
令和2年1月14日 | 可 | 南,小町 |
令和2年2月10日 | 可 | 南,小町 |
令和2年3月11日 | 可 | 南,小町 |
令和2年4月9日 | 不良 | 栗原,濱田 |
令和2年7月9日 | 不良 | 栗原,濱田 |
令和2年8月11日 | 不良 | 栗原,濱田 |
令和2年9月9日 | 不良 | 栗原,濱田 |
令和2年10月12日 | 不良 | 栗原,濱田 |
令和2年11月11日 | 不可 | 栗原,濱田 |
令和2年12月8日 | 不良 | 栗原,濱田 |
令和3年1月13日 | 可 | 栗原,濱田 |
令和3年2月8日 | 可 | 栗原,濱田 |
令和3年3月10日 | 可 | 栗原,濱田 |
令和3年4月9日 | 不可 | 浮地,濱田 |
令和3年5月12日 | 不可 | 浮地,濱田 |
令和3年6月9日 | 不可 | 浮地,濱田 |
令和3年7月8日 | 不可 | 矢野,濱田 |
令和3年8月11日 | 可 | 矢野,濱田 |
令和3年9月9日 | 不可 | 矢野,濱田 |
令和3年10月8日 | 可 | 矢野,濱田 |
令和3年11月11日 | 可 | 矢野,濱田 |
令和3年12月9日 | 可 | 矢野,濱田 |
令和4年1月12日 | 可 | 矢野,濱田 |
令和4年2月8日 | 可 | 矢野,濱田 |
令和4年3月9日 | 可 | 矢野,濱田 |
担当チームによりファイルの不良率が異なるのが分かる.人事異動により業務の引継ぎが必要なのは理解できるが,引継ぎ後,何度も不良ファイルを公開し続けているのは流石にどうかと思う.
コード
文句を言っていても仕方がない.今回はかなり泥臭く手動でのデータ入力を要した.データの真実性は保証できないため,コードと結果のみを示すこととする.
Option Explicit Sub AddCharts() Dim mySht1 As Worksheet Dim myCht As Chart Dim i As Long Dim mySht2 As Worksheet Dim myPref_M As ListObject Dim myPrefCode As String Dim myPref As String Set mySht2 = Worksheets("都道府県マスタ") Set myPref_M = mySht2.ListObjects(mySht2.ListObjects.Count) Dim mySht3 As Worksheet Dim myTransaction As ListObject Set mySht3 = Worksheets("前期") Set myTransaction = mySht3.ListObjects(mySht3.ListObjects.Count) Dim myDate() As Date Dim myPopulationA() As Long Dim myPopulationB() As Long Dim myPopulationC() As Long Dim myPopulationD() As Long Dim myPopulationS() As Long Dim mySeriesA As Series Dim mySeriesB As Series Dim mySeriesC As Series Dim mySeriesD As Series Dim mySeriesS As Series Dim myRng1 As Range Dim myRng2 As Range Dim j As Long Dim myAxis As Axis Dim myChtGrp As ChartGroup Set mySht1 = Worksheets.Add With mySht1 .Name = "都道府県チャート前期" For i = 1 To 47 Set myCht = .Shapes.AddChart2(Style:=-1, _ XlChartType:=xlColumnStacked, _ Left:=400 * ((i - 1) Mod 6), _ Top:=400 * ((i - 1) \ 6), _ Width:=400, _ Height:=400).Chart myPrefCode = i myPref = myPref_M.ListRows(i).Range(1) 'Debug.Print myPref With myTransaction '都道府県名でトランザクションテーブルにフィルターをかける .Range.AutoFilter field:=1, Criteria1:=myPref Set myRng1 = Intersect(.DataBodyRange, .Range.SpecialCells(Type:=xlCellTypeVisible)) 'Debug.Print myRng1.Rows.Count For j = 0 To myRng1.Rows.Count - 1 'Debug.Print j ReDim Preserve myDate(j) ReDim Preserve myPopulationA(j) ReDim Preserve myPopulationB(j) ReDim Preserve myPopulationC(j) ReDim Preserve myPopulationD(j) ReDim Preserve myPopulationS(j) myDate(j) = myRng1.Cells(j + 1, 3) myPopulationA(j) = myRng1.Cells(j + 1, 4) myPopulationB(j) = myRng1.Cells(j + 1, 5) myPopulationC(j) = myRng1.Cells(j + 1, 6) myPopulationD(j) = myRng1.Cells(j + 1, 7) myPopulationS(j) = myRng1.Cells(j + 1, 8) Next j Set mySeriesA = myCht.SeriesCollection.NewSeries Set mySeriesB = myCht.SeriesCollection.NewSeries Set mySeriesC = myCht.SeriesCollection.NewSeries Set mySeriesD = myCht.SeriesCollection.NewSeries 'Set mySeriesS = myCht.SeriesCollection.NewSeries With mySeriesA .Name = myTransaction.HeaderRowRange(4) .XValues = myDate .Values = myPopulationA End With With mySeriesB .Name = myTransaction.HeaderRowRange(5) .XValues = myDate .Values = myPopulationB End With With mySeriesC .Name = myTransaction.HeaderRowRange(6) .XValues = myDate .Values = myPopulationC End With With mySeriesD .Name = myTransaction.HeaderRowRange(7) .XValues = myDate .Values = myPopulationD End With 'With mySeriesS ' .Name = myTransaction.HeaderRowRange(8) ' .XValues = myDate ' .Values = myPopulationS 'End With 'ループ内でフィルターを使った後はフィルターを解除する .Range.AutoFilter field:=1 End With 'ここまではデータ系列の設定 With myCht .HasTitle = True .ChartTitle.Caption = myPref .ChartTitle.Left = 0 Set myAxis = .Axes(xlCategory) With myAxis .Format.Line.Visible = msoFalse .MajorGridlines.Format.Line.Visible = msoFalse .TickLabels.Orientation = xlUpward End With Set myAxis = .Axes(xlValue) With myAxis Select Case .MaximumScale Case 0 To 1000 .MaximumScale = 1000 Case 1001 To 1250 .MaximumScale = 1250 Case 1251 To 1500 .MaximumScale = 1500 Case 1501 To 2500 .MaximumScale = 2500 Case 2501 To 5000 .MaximumScale = 5000 Case 5001 To 10000 .MaximumScale = 10000 Case 10001 To 12500 .MaximumScale = 12500 Case 12501 To 15000 .MaximumScale = 15000 Case 15001 To 25000 .MaximumScale = 25000 Case 25001 To 50000 .MaximumScale = 50000 Case 50001 To 100000 .MaximumScale = 100000 Case 100001 To 125000 .MaximumScale = 125000 Case 125001 To 150000 .MaximumScale = 150000 Case Else End Select .MajorUnit = .MaximumScale / 5 .MajorGridlines.Format.Line.Visible = msoFalse End With With .ChartArea '.Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1 .Format.TextFrame2.TextRange.Font.Name = "TimesNewRoman" End With .ChartGroups(1).GapWidth = 0 End With Next i End With End Sub
結果
2014年1月16日を境として前期と後期に分類した.テーブルの定義がここで変わっているため,どうやっても結合できないのである.
前期
後期
まとめ
東日本大震災の避難者数の推移を各都道府県ごとにグラフに示した.