
Excelで見やすく整えた表を、データ分析のためにTableauやPower BI、SQL、Pythonなどに読み込ませた場合に、「数値データとして扱われない」「行がズレる」のようなトラブルが起きることがあります。
その原因の多くは、Excelで人に見やすくするために工夫したレイアウトが、機械が読み込む場合には扱いづらい形式となっていることです。例えば、1セルに複数の値が入っていたり、セルを結合していたりしませんか?
本記事では、プログラムで扱いやすい形式(機械で読み込みが可能な形)とはどんなものか、Excelのデータを扱いやすい形式に直すポイントについて解説します。
構造化データ・非構造化データとは
まず、Excelデータの他にも、私たちの身の回りには様々なデータが存在します。例えば、eメール・契約書・画像・動画・音声…などです。
今挙げたデータは、「構造化データ」と「非構造化データ」と言う2つに分類することができます。どのような分類がされ、それぞれどのようなものを指すのかを見ていきましょう。
構造化データについて
構造化データとは、「列」と「行」の概念をもつデータのことです。ExcelやCSVのデータがこれにあたります。
Excelで言うと、上に並ぶA・B・C…の縦一列が「列」、左に並ぶ1・2・3…の横一列が「行」です。
構造化データは、文字通り「構造化」されており、事前に定義された形式で整理されます。そのため、検索・集計・比較などが行いやすく、データの解析や分析に適したデータ構造です。
つまり、列と行に当てはめられる、型が決まったデータのことを言います。
(参考:TOPPAN BiZ)
構造化データで代表的な「整然データ」という考え方があります。本記事の中で、大事な考え方になるので、詳しく見ていきましょう。
整然データとは
整然データとは、以下の4つの条件を満たす表型のデータを指します。
個々の変数が1つの列をなす。
個々の観測が1つの行をなす。
個々の観測の構成単位の類型が1つの表をなす。
個々の値が1つのセルをなす
また、整然データではないデータのことを「雑然データ」と言います。
(参考:「整然データとは何か」Colorless Green Ideas)
この条件だけでは、どういう形式のデータなのかが具体的には思いつかないかもしれません。例として、整然データとそうでないものの比較表を作りました。

整然データは列ごとに情報の種類をそろえ、1行ごとに「1つの記録」を入れます。
今回の画像で言うと整然データは、列を「人」「科目」「点数」のように役割ごとに分けます。すると、どの列を見ても入っているのは同じ種類の情報だけになります。1行は「誰が・どの科目で・何点か」という1件分の記録になります。例えば、科目に「理科」が増えて追記することになっても「列を増やす」のではなく、「行が増える」形になるため、あとから集計や並べ替えをしやすくなります。
雑然データは、「列と行の交わる部分から情報を取る」ような形式になっています(今回の画像のような形式だけを、雑然データと言うわけではありません)。1列の情報の種類は人と点数になっていたり、1行はAさんの3科目の点数になっていたりします。
このような整然データの形式になっていることで、機械は人が読み取って欲しい形式でデータを読み込むことができます。
つまり、変数は列・観測内容は行・値はセルとして、分析しやすい形式にした表データを指します。
整然データの条件を満たしているかどうかを確認したい方は、こちらの記事でチェック方法をまとめています。自分のデータに当てはめながら読むと、修正が必要な箇所を見つけやすくなります。
非構造化データについて
非構造化データは、構造が定義されていないデータのことを指します。最初に挙げた例の中で言うと、eメール・契約書・画像・動画・音声です。どれも「列」「行」と言った概念が存在しません。
構造化データとは逆で、検索・集計・比較などには不向きです。
(参考:TOPPAN BiZ)
つまり、行と列という固定された形式がなく、そのままだと表にしにくいデータを指します。
次のセクションからは、「機械が読み取りやすい形式(整然データ)」へ直す具体例を見ていきます。
読み込み可能なデータにするためには
よくある整然データの形式になっていないExcelを、どのように修正したらよいかについて、スクリーンショットを用いて解説していきます。
数値データ内に()書きで別のデータが含まれている場合

1つのセル内に売上金額と費用総額の2つの数値が入っています。
C1のセルで「売上総額(費用総額)」と定義していても、機械は1つのセル内に入っている文字列や数値を1データとして読み取るため、()内の数値を費用総額として売上金額とは別のデータとして読み取ることはできません。セルを分けてデータを入れましょう。
修正するために、元の表をコピーして別シートに貼り付けてください。次に、D列に「売上総額」、E列に「費用総額」を作りましょう。

売上金額だけをD列に抽出して書き出したいです。この時、「(」以前を抽出するために、LEFT・FIND関数を使います。
※LEFT関数…指定した文字列の左端から、指定した文字数分を抽出する
FIND関数…指定した文字列が、セル内で最初に出現する位置を左から数えて何番目かを返す
関数で書く内容は、C2のセルのうち、「(」の文字列の1つ前以前を抽出する、というものです。
=LEFT(C2,FIND("(",C2)-1)詳しい関数の内容については、丁寧に解説されているサイトを添付します。実際に修正したいデータで応用するために、そちらをご確認ください。(詳しい解説先:「特定の文字より前までを抽出する!」もりのくまのサクサク Office)
D2のセルに上記の式を入れます。そうすると、C2セルの売上金額のみがD2に入ります。D2セル右下のフィルハンドルをD7まで下にドラッグして、連続データをオートフィルで作成します。

次は、費用総額だけをE列に抽出して書き出したいです。特定の文字から特定の文字までを抽出するために、MID・FIND関数を使います。
※MID関数…指定したセルの文字列の途中から、開始位置と文字数を指定して、特定の文字を取り出す
関数で書く内容は、C2のセルのうち、「(」から「)」までの文字数を「(」の文字列の1つ後から抽出する、というものです。
=MID(C2,FIND("(",C2)+1,FIND(")",C2)-FIND("(",C2)-1)こちらも、詳しい関数の内容については、丁寧に解説されているサイトを添付しますので、そちらでご確認ください。(関数の詳しい解説:「特定の文字から特定の文字までを抽出するやり方!」もりのくまのサクサク Office)
E2セルに上記の式を入れると、C2セルの費用総額のみがE2に入ります。E2セル右下のフィルハンドルをE7まで下にドラッグして、連続データをオートフィルで作成します。

このままだと並び替えやフィルター操作をした場合などに、せっかく関数で抽出した数値がズレてしまうので、次の操作をしてください。関数を使って抽出したセルを範囲選択してコピー、同じ範囲を選択したまま右クリックして「値のみ貼り付け」を選択してください。こうすることで、セルの中身が「関数式」ではなく、関数によって抽出した「数値」に変換されます。最後に、使わなくなったC列を削除しておきましょう。

1つのセル内に複数のデータが入っている場合

このように、「、」などで区切って1つのセル内に複数のデータを入れている場合は、個々のデータをセル1つずつに分けて入れましょう。今回の例の場合は、年度別に仕入額と出荷額が入っています。
機械は、1セル内に入っている内容を1つのデータと読み取るため、「、」で区切ったり、()内で年度を表したりしても、思ったとおりに読み込んでくれません。1つのセルに対して、値は1つだけにしましょう。
まずは、複数の値が入っているセルを全選択して、コピーをします。メモ帳アプリを起動して、コピーした内容を貼り付けて、名前を付けて保存します。
Excelに戻って、データタブの中の「外部データの取り込み」の「テキストファイル」を選択します。先ほど名前を付けて保存した、メモ帳アプリのデータを選択してください。

「テキスト ファイル ウィザード」のダイアログボックスが出てくるので、1回だけ「次へ」を押してください。「区切り文字」の「その他」にだけチェックを入れて、今回は「、」を入力してください。「完了」を押すと、データを返す先の選択が必要になるので、表を作り直す予定の場所を選択して、「OK」を押してください。

この時、1つのセル内のデータが横並びになりますが、今回は行/列の入れ替えをした方がこの後の作業がやりやすいです。取り込んだデータを全選択してコピー、貼り付けたい位置を右クリックして、「行/列の入れ替え」で貼り付けます。
年度を自分で1つ打ち込んでから、連続データのオートフィルで必要分伸ばします。「仕入額」「出荷額」も打ち込み、これから数値を入れ込む枠を用意してください。

「数値データ内に()書きで別のデータが含まれている場合」で書いた1つ目のLEFT・FINDを使った関数を応用して、「(」以前だけを抽出します。連続データのオートフィルで必要分伸ばし、関数を使った部分を全選択・コピーして、値のみ貼り付けをしてください。

セル結合がされている場合

画像のように、1つのくくりを2行使って表していたり、複数セルを結合していたりする場合についてです。
この例では、「ちよだく」「千代田区」と市区町村についてが各2行渡って展開されています。さらに、数値データはそれを人が見やすくするために、2行を結合した1つのセル内に書かれています。機械で読み込むためには、1件のデータは、横1行で表記する必要があるので、市区町村を1行にし、住宅数が入っているセルの結合を解除しましょう。
この場合は、まずセル結合がされている部分を選択して、ホームタブの「セルを結合して中央揃え」をクリックして、セルの結合を解除します。
次に、A列とB列の間に1列挿入して作業用の列として使います。2行目に「1」、3行目に「2」と入力して範囲選択します。右下のフィルハンドルをB7まで下にドラッグして、セルのコピーをオートフィルで作成します。A~C列を範囲選択し、データタブから、フィルターを選択します。

作業用列の▼から「昇順」を選択すると、ふりがな文字列のセルが先頭に並び、次に漢字の文字列のセルが続くようになります。

ふりがなの部分だけを選択してコピーし、作業用セルとしていた列を空にしてから、貼り付けます。ふりがながなくなって空白となったセルを範囲選択・削除して「上方向へシフト」を選択すると、漢字の文字列がふりがなと並ぶようになります。余分となったセルを削除か書式をクリアにすれば、整然データとなります。

セル内に文字列や空白が入っている場合

今回の例では、A列に空白、B列に単位となる「本」、D列に桁を見やすくする「,」が入っています。
データを機械で読み込む場合には、このように数値データの中に文字列や空白が入っていると、正しく読み取れなくなるので、Excelファイルの方で消しておきましょう。例えば、「津市」と「津□□市」は、機械では別の文字列だと判断されます。また、セル内に「本」のように単位が入力されていると、このデータを機械は数値データと読み取ることができません。
セルからなくす予定の文字列が1行目の項目名となるセルに入っている場合は、その1行目以外を全選択してから次の操作をしてください。
ホームタブの中にある「検索と選択」をクリックすると、「置換」というのが出てくるので選択してください。

「検索する文字列」の方に空白や「本」「,」のような、なくしたい文字列を1つだけ入れます(文字数は複数字でも可能です)。「置換後の文字列」には何も入力しません。左下にある「すべて置換」をクリックすると、シート全体、もしくは選択範囲全体に対して、指定した文字列の置換が行われます。なくしたい文字列が複数ある場合は、「検索する文字列」を変えて、同じ操作をしてください。

1回につき、1かたまりの文字列しか置換できないため、今回のように複数なくしたい文字列がある場合は、分けて置換を行いましょう。
以下のサイトページの「Excel ファイルによる統計表のレイアウト」の例を参考に、ここまでの整然データの形式になっていないExcelを作らせていただきました。
(参考:統計表における機械判読可能なデータ作成に関する表記方法)
集計した後にどう見せるかについては、表とグラフの違いと使い分けをまとめた記事も参考にしてみてください。データの構造を理解することと、見せ方を選ぶことはセットで考えると整理しやすくなります。
まとめ
今回は、機械で読み込みが可能な形式とはどんなものか、扱いやすいデータへの修正方法について解説しました。
構造化データは、「列」と「行」の概念をもつデータのことで、非構造化データは、固定されたフォーマットや構造を持たないデータのことでした。
また、表形式のデータを分析しやすく整理する代表的な考え方が整然データで、4つの条件を満たした表型のデータのことでした。
データ分析で利用する予定があるデータは、整然データにしておくことで、データの前処理時間を短縮し、スムーズに分析作業に入ることができます。
今後データを作る時には、そのデータが将来どのような場面で使われるかを考えて、整然データにした方が良いか判断すると良いでしょう。