エクセルの活用(2)
~ 大量データの処理 ~


TOPに戻る

1. サンプルデータの取得

 それでは,早速サンプルデータを使ってみよう.下のリンクを右クリックし,その中の「名前をつけてリンク先を保存」を選択,ファイルを各自で用意したUSBメモリやOneDriveに保存しよう.左クリックしても自動的にダウンロードされるはずなので,どちらの方法でもよい.

waste.xlsx

 コピーした「waste」のアイコンをダブルクリックするとエクセルが起動し,縦横マス目にたくさん数字が記入された表が画面に表示される.最初に起動したときは「保護ビュー」という黄色い警告文が表示される場合があるが,「編集を有効にする」というボタンを押して編集可能にしておくこと.

 この「waste」というブックには,3枚のワークシートが綴じられている.左下端の「2010年度」や「2020年度」と記された見出し(図1)をクリックすることで,異なるデータが見えるようになっている.いずれのシートも1行目に変数名・単位が入力されており,2行目からデータが記入されている.1行が1サンプル(標本)のデータの集まりであり,このファイルにおけるサンプル(標本)とは「日本全国の市制自治体および東京特別区」である.対象標本数は786,すなわち,この「waste」というエクセルファイルには,日本全国の786の自治体における様々な地域特性がデータとして集計されている.2行目の「札幌市」から787行目の「南城市」までびっしりデータが入っていることを,右側のスライドバー(縦方向)をマウスでドラッグしながら確認してみよう.

 このデータは,2010年と2020年に実施された国勢調査(総務省)と,一般廃棄物処理事業実態調査(環境省)の結果である.この10年間でどのように人口や環境状況が変化したかを検討するため,10年の間になくなった1つの市と新たにできた7つの市は掲載していない.詳しくは「備考」というシートを参照すること.地域(日本全国の市制自治体)ごとの人口構成の違いや環境側面(例えば,廃棄物の排出量など)についてあれこれ分析しながら,それぞれの地域における環境都市工学分野の将来を考えてみよう.

2. 指標の計算

 まず「2010年度」のシートを表示して,いくつかの指標を計算しよう.I1セルに「高齢化率(%)」,J1セルに「1人1日あたりごみの排出量(g/人日)」,K1セルに「リサイクル率(%)」と入力してある.

 高齢化率は65歳以上人口÷人口,1人1日あたりごみの排出量(g/人日)はごみの排出量(t)÷人口(人)÷365(日)×10の6乗(単位のt:トンをg:グラムに),ごみのリサイクル率はごみの資源化量÷ごみの総排出量で計算することにする.まずI2セルに「=E2/D2」(図1),J2セルに「=F2/D2/365*10^6」(10^6は10の6乗という意味)(図2),K2セルに「=G2/F2」(図3)と入力する.隣のセルに移るには,EnterキーではなくTABキーで内容を確定させると便利.なお,K2セルに式を入力したら,隣のJ2セル左上に三角形のマークが表示され,J2セルを選択すると左に注意喚起マークが表示される.そのマークにマウスカーソルを合わせると「このセルにある数式が、セルの周辺の数式と異なっています。」と表示され(図4),マークをクリックすると「矛盾した数式」というメッセージが表示される.これは,上下左右のセルと式のパターンが違う場合に表示されるメッセージなので,ここでは無視していい.

fig2-01 図1  fig2-02 図2

fig2-03 図3

fig2-04 図4

 I列とK列は%表示したいので,I2セルとK2セルをCtrlキーを押しながら選ぶ.Ctrlキーを押しながらクリックすれば,離れたセルも選択できる.その状態で,ホームメニューのリボン「数値」グループにある「%」と書かれたボタンを押す(図5).すると,例えば0.2047となっていた数字が「20%」のように%表示される.

fig2-05 図5

 この段階で,追加した3つのセルを下の行までコピーしておく.いくつか方法があるが,一番簡単なのはフィルハンドルをダブルクリックする方法.まず,I2セルからK2セルまで3つのセルを選ぶ.そのためには,I2セルをマウス左ボタンクリックして,左ボタンをおしたままK2セルまでマウスカーソルを右へ動かせばいい(あるいは,I2セルをアクティブにして,Shift+Ctrl+右向き矢印キー).次に,マウス左ボタンを離して一番右のK2セルの右下にある小さな■(フィルハンドル)にマウスカーソルを持っていくと,マウスカーソルの形が白い十字から黒い矢印付きの十字に変わる(図6).その状態でマウスの左ボタンをダブルクリックしよう.そうすれば下の方まで,左の列に値があるセルにコピー&ペーストされる.

fig2-06 図6

 次は,J列の1人1日あたりのごみ排出量やK列のリサイクル率について,各自治体の全国における順位を計算しよう.それにはRANKという関数を使う.まず1人1日あたりごみ排出量について,L2セルに「=rank(」と入力するとセルの下に「数値」とヒントが出るので,J2セルをクリック,そして「,」(カンマ)を入力する.するとセルの下に「参照」とヒントが出るので,再びJ2セルをクリックし,ShiftキーとCtrlキーを押したまま下向き矢印キー(Shift+Ctrl+↓)を押せばJ2~J787セルが選択され「=rank(J2,J2:J787」と表示される.ShiftキーやCtrlキーの働きについて忘れていたら,前回のテキストで復習しよう.J2:J787という表示が,J2セルからJ787セルという範囲を表しているので,そのままF4キーを2回押して参照範囲を「行の絶対参照」にする.これは後で右の列にコピーしたとき,参照範囲がずれないようにするためである.セルの式が「=rank(J2,J$2:J$787」となるので,「,」(カンマ)を入力.セルの下のヒントに「0-降順,1-昇順」と表示される.大きい方からの順位(降順)か,小さい方からの順位(昇順)かということなので,0を入力してカッコを閉じる.セルの式は「=rank(J2,J$2:J$787,0)」となる(図7).これは,J2セルの値が,J2~J787セルの中で何番目に大きいかを計算するという意味である.札幌市の1人1日あたりごみ排出量は,全国で786自治体中272番目に多いということがわかる.

fig2-07 図7

 同様にして,リサイクル率の順位をM2セルで計算する.先ほど計算したL列の式と比べると,2つ左の列について同じ計算をするということなので,使う式に出てくるセルの相対的な位置関係は同じになる.そのため,L2セルの式をそのままM2セルにコピーすればいい.L2セルを選択してCtrl+Cでコピーし,M2セルを選択してCtrl+Vで貼りつける.あるいは,L2セルを選択してセル右下のフィルハンドルをクリックし,そのまま右隣りのセルまでマウスカーソルを動かす.式は「=rank(K2,K$2:K$787,0)」になる(図8).

fig2-08 図8

 あとは追加した2つのセルを下の行までコピーすればいい.L2とM2の2つのセルを選び,M2セル右下のフィルハンドルをダブルクリックする.

 同じことを2020年度のシートでも計算したいが,どうすればいい?同じことを繰り返すのは無駄.式を入力した2010年度のシートの上の方「I」と書いてある場所にマウスカーソルを持っていくと,カーソルの形が下向きの黒い矢印に変わるはず.その状態でマウス左ボタンをクリックすると,I列全体が選択されて色が変わる.マウス左ボタンを押したままマウスカーソルを右へ移動させると,I列~M列と順に5つの列を選ぶことができる(図9).あるいは,I列を選んだあと,マウス左ボタンをいったん離して,M列でShiftキーを押しながらマウス左ボタンを再度押すことでも5つの列を選ぶことができる.その状態で「コピー(Ctrl+C)」で5つの列をコピーする.そして,シートの下「2020年度」と書かれたタグをマウス左ボタンで選択.表示された2020年度のシートのI1セルをマウス左ボタンでクリックし(図10),「ペースト(Ctrl+V)」する.2010年度と2020年度のシートのデータ構造が同じであれば,同様の計算を自動的にしてくれる.

fig2-09 図9  fig2-10 図10

 何度も言うようだが,基本的にエクセルのコピー&ペーストは,値のコピーではなく式のコピーになる.もし違うセルにコピー&ペーストしてしまうと,まったく違う計算がされてしまうので要注意.間違ったらすぐにCtrl+Zでやり直そう.式ではなく値をコピーしたいときには,「形式を指定して貼りつけ」という機能を使うことが必要で,これについては後日説明する.

3. 経年変化

 次は,2010年から2020年にかけての経年変化を調べよう.2020年度のシートのN1セルに「人口増減率(%)」,O1セルに「高齢化率の増減(%)」,P1セルに「1人1日あたりごみ排出量の増減(g/人日)」,Q1セルに「リサイクル率の増減(%)」,R1セルに「最終処分量の増減(t)」,S1セルに「環境改善評価点」と入力してある.

 まず,10年間で人口がどう変化したか計算しよう.単純に引き算をすると人口が多い都市の値が大きくなるが,100万人の市で1万人減るのと,2万人の市で1万人減るのとでは,意味合いが違ってくる.そこで「(2020年の人口−2010年の人口)÷2010年の人口」として,2010年の人口に対する増減の割合で評価することにする.人口増減率N2セルは2020年度の人口(D2セル)の値から,2010年度の人口(2010年度のシートのD2セル)を引いて2010年度の人口で割るという式を入れる.2020年度シートのN2セルに「=(D2-」と入力して(図11)から画面下の「2010年度」というタブをクリックし,表示された2010年度シートのD2セルをクリック(図12)した後で「)/」と入力して,もう一度同じ2010年度シートのD2セルをクリックしてEnterキーを押す.そうするとN2セルの式は「=(D2-'2010年度'!D2)/'2010年度'!D2」となっているはず.「'2010年度'!」が,2010年度シートのセルだという記号.ここで%表示ボタンを押し,パーセント表示にしておく(図13).

fig2-12 図11  fig2-13 図12

fig2-13 図13

 あとの「高齢化率の増減(%)」「1人1日あたりごみ排出量の増減(g/人日)」「リサイクル率の増減(%)」「最終処分量の増減(t)」は,2020年の数値から2010年の数値を引くだけでいい.O2セルからR2セルまで式を入力する.O2セルであれば,2020年度のI2セルから2010年度のI2セルを引く(図14).P2とQ2セルは式の構成がO2セルと同じ(相対的に6列左のセルに関する計算)なので,O2セルを右へコピーすればよい(図15).ただし,P2セルはパーセントではないので,「ホーム」メニュー,「数値」リボンの表示形式を「標準」にする(図16).R2セルだけ新たに入力が必要で,2020年度のH2セルから2010年度のH2セルを引く(図17).

fig2-14 図14  fig2-15 図15

fig2-16 図16  fig2-17 図17

 次に,S列を完成させる.ここでは,過去10年間で1人1日あたりごみ排出量が減り,リサイクル率が増加し,最終処分量が減った自治体を高く評価することにする.そこで,P列の「1人1日あたりごみ排出量の増減」が負で,Q列の「リサイクル率の増減」が正で,かつR列の「最終処分量の増減」が負または0であれば2点,3項目のうちどれか1つでも達成されていれば1点,そうでなければ0点とする.最終処分量の増減だけ「負」ではなく「負または0」としたのは,最終処分量が2010年で0の自治体もあるからである.「条件1」かつ「条件2」という論理積にはAND関数が利用でき,「条件1」または「条件2」という論理和にはOR関数が利用できるので,S2セルに次のように入力する(図18).P2やQ2やR2という箇所は,それぞれP2やQ2やR2セルをクリックすればよい.あるいは,このテキストの式をコピーしてS2セルに貼りつけてもよい.

=ifs(and(P2<0, Q2>0, R2<=0), 2, or(P2<0, Q2>0, R2<=0), 1, true, 0)

fig2-18 図18

 IFSという関数は,前回学んだIF関数に似ているが,複数の条件を設定することができる.=ifs(条件1, 条件1が成立した時の値,条件2,条件1は成立しないが条件2が成立した時の値,条件3,条件1と2は成立しないが条件3が成立した時の値,...,true,左の条件がすべて成立しなかった時の値) という書き方で,いくつでも条件を設定することができる.

 and(P2<0, Q2>0, R2<=0) という命令が,P2<0 かつ Q2>0 かつ R2<=0 という意味.この条件が成り立つ場合は2となる.or(P2<0, Q2>0, R2<=0) という命令が,P2<0 または Q2>0 または R2<=0 という意味.最初の条件が成り立たず,この条件が成り立つ場合は1となる.次のtrueというのはその他の場合という意味で,それより左にある条件がすべて成り立たなければ0が入力される.

【注意点】IFS関数の条件は左からチェックされていくので,条件設定の順番が重要になる.もし,
   =ifs(or(P2<0, Q2>0, R2<=0), 1, and(P2<0, Q2>0, R2<=0), 2, true, 0)
とORの方を左に書いてしまうと,2つ目のAND条件が成り立つ場合もすべて1つ目のOR条件を満たすので,2と表示されるケースがなくなってしまう.同様に,A1セルの値が10以上なら1,20以上なら2とする場合,
   =ifs(a1>=10,1,a1>=20,2,true,0)
とすると,20以上でも1になってしまう.
   =ifs(a1>=20,2,a1>=10,1,true,0)
と,条件が厳しいものから順番に記載する必要があることに注意しよう.

 N2セルからS2セルまでを選択し,S2セル右下のフィルハンドルをダブルクリックして完成.

 では,環境改善評価点で2点を得た自治体がいくつあるか数えてみよう.列の値が0か1かであれば,SUM関数で合計を求めれば1の数を数えることができた.今回は0か1か2かであるため,COUNTIFS関数を使う.COUNTIFS関数は,=countifs(数える範囲1,値の条件1,数える範囲2,値の条件2,...)という形式で使う.範囲や条件はいくつでも設定可能だが,ここでは1つだけを設定する.U2セルをクリックして「=countifs(S2:S787,2)」と入力すれば,S2~S787セルの中で2がいくつあるか数えてくれ,133と表示されるはず.786自治体中133自治体が環境改善評価点2を得たことがわかる.同じようにU3セルに「=countifs(S2:S787,0)」とすれば,0の値を数えてくれて,100の自治体が0点だった(つまり,1人1日あたりごみ排出量が増え,かつリサイクル率が減少し,かつ最終処分量が増えた)ことがわかる.残りの自治体は,1つか2つの指標は満足したということで,その数は全体の自治体数786からU2とU3セルの値を引けば求められるし,COUNTIFS関数でS列の1を数えてもいい.

 COUNTIFS関数では,複数の条件を設定することも可能である.例えば,環境改善評価点が2点で,かつ人口が10万人以上の自治体数を求める場合には,U5セルに「=countifs(S2:S787,2,D2:D787,">=100000")」とすればよい.条件に式を使う場合には,このようにダブルクォーテーション(")で囲む.

 また,前回の演習で最高気温が25度以上の夏日の日数を数えるのに,if関数とsum関数を組み合わせたが,
   =countifs(c2:c31,">=25")
としてもいい.また,最高気温が30度以上になると真夏日と呼ばれるので,夏日と真夏日を区別する場合には,
   =countifs(c2:c31,">=25",c2:c31,"<30")
で,最高気温が25度以上30度未満の夏日を数えることができる.今すぐには使わないかもしれないが,複数の条件を満たすセルの数を数える必要が出てくれば思い出そう.

4. データの並べ替え

 最後に,「データの並べ替え」というのも知っておこう.例えば,この表の中で人口が多いベスト3とか,リサイクル率が低いワースト3とかを探すことが可能である.

 それには「データ」メニューの「並べ替え」を使う.2020年度のワークシート左端の「列記号」クリックで自治体データの入っている列を一括選択しよう.まず,1列目の列記号(A)をクリックした後で, 「Shift」キーと「Ctrl」キーを押しながら右向きの矢印キーを押すと右端のS列まで選択される(図20).なお,T列とU列は1行目のセルに何も入力されないので選択されない.このように「データ並べ替え対象を一括選択」した状態で,「データ」リボンを選択,「並べ替え」をクリック.

fig2-19 図20

 「並べ替え」という小窓が開く.並べ替え小窓の右上にある「先頭行をデータの見出しとして使用する」が選択されていることを確認し,選択されていない場合にはクリックして選択する.最優先されるキーのところを「人口増減率」とする(図21).そのすぐ右の並び替えのキーは「セルの値」とし,順序では「大きい順」を選ぼう(図22).これで「人口増減率(N列の数値)の大きいデータ(自治体)から順に並べ替える」準備が整った,最後に「OK」ボタンを押す.

fig2-20 図22

fig2-21 図23

 人口増減率の数値のところだけが大きい順に動いたのではなく,人口増減率の順番に従って,自治体名や他の変数も連動して「行」ごと順番が並べ替えられたところに注目しよう.1番増減率が大きいのは愛知県西尾市だが,これは2011年に周辺の3つの町(人口6万人弱)を合併したことによるものである.このように,単に一つの数字だけを見ていても実態がわからないことが多い.西尾市が50%以上と他より飛びぬけて大きな人口増減率だということに疑問を持てば,西尾市の沿革についてネットで検索すれば理由がわかる.2位の千葉県流山市は,2005年のつくばエクスプレス開通以降,人口が増え続けている首都圏の市である.流山市は合併等をしていないので,純粋に人口が増えているのだと理解できる.

 次に,人口増減率が低いところを見ていこう.A列からS列のどこかで,Ctrlキーを押しながら↓キーを押すと,数字が入っている一番下の行まで一瞬で移動することができる.もっとも値が小さいのは787行目にある北海道の夕張市で,北海道が減少率4位までを占めている.高齢化率も高い.また,岩手県陸前高田市や釜石市がリストの下の方にあるが,これには2011年東日本大震災の影響が考えられる.東日本大震災で被災した地域の自治体があまり目立たないのは,市ではなく郡部の村が多く被災したためである.

 なお,並べ替えの基準は複数設定することもできる.並べ替え画面で「レベルの追加」ボタンを押せばいい.並べ替えの順番も大きい順か小さい順かを選べる(列によっては昇順,降順と表示される場合もある).

 では,滋賀県草津市はどこにある?これも目で見て探すのは大変.そこで,検索機能を利用しよう.「ホーム」→「編集」→「検索と選択」→「検索」を選ぶと,検索用の窓が登場する(図23).何度もメニューをクリックするのは面倒なので,キーボードショートカットCtrl+Fを覚えておくのも便利.

fig2-22 図23

 「検索する文字列」欄に「草津市」と入力して「次を検索」ボタンを押す.そうすると草津市が入っているセルが表示される.もし,伊達市や府中市のように同じ名前の市が複数あったら(北海道と福島県,東京都と広島県),お目当ての市が出てくるまで「次を検索」ボタンを押せばいい.並べ替えた表で,目的の市が表示された行番号から1を引いた値(1行目がタイトル行のため)が,その市の順位になる.草津市は19行目にある(図24)ので,人口増減率は大きい方から数えて全体の18位ということになる.増減率が10%と,全国でも人口が増加している市だということがわかる.先ほどのRANK関数を使っても順位がわかるが,全体的に俯瞰する(例えば同レベルの自治体はどこか調べる)には並べ替えが便利なので,場合によって使い分けよう.

fig2-23 図24

 これでレポートに取り組める表ができたので,忘れず保存しておく.この表を使うことで,着目する自治体の高齢化が過去10年間でどの程度進んだのか?リサイクル率は何%ぐらい増加したのか?ごみの最終処分量は減ったのか?等を知ることができるようになる.

5. 補足


TOPに戻る