一人十郷 - takuminasuno.com一人十郷
takuminasuno.com
ビジネス
2019/06/03

【備忘録】Pythonでpandasを使ってExcelファイルを読み込んでcsvファイルを出力するまで【Windows PC】

 

データ加工といえばExcelによる手作業が一般的で、それ以外で言えばETLツールによる加工処理の記述もありますが、やはり自由度が高いのはExcel VBAやR, Pythonのようなスクリプト言語で書く方法です。

今回はデータ分析言語の花形であるPythonを使って、とりあえずさくっと環境構築を終えて、Excelファイルを読み込んで加工してcsvファイルとして出力するまでを書いてみたいと思います。

なおPC環境はWindows10ですので、ご留意くださいませ。

 

1.Anacondaをダウンロードする

手軽に環境構築できるPythonプラットフォームである『Anaconda』のインストーラーをダウンロードします。中央のタブから「Windows」を選び、特別な事情が無ければ速やかに最新のVer3.7を選び、続いて『Download』ボタンを押すと、ダウンロードが始まります。

https://www.anaconda.com/distribution/

※600MG程度となかなかの重さなので、ダウンロードには少し時間がかかるかもしれません。

 

2.Anacondaをインストールする

ダウンロードしたファイルを実行します。2019年5月時点でのファイル名は『Anaconda3-2019.03-Windows-x86_64.exe』でした。セットアップ画面では特別な事情が無ければ初期設定のまま「Next」ボタンを押して進んでよいですが、インストール先のディレクトリパスはスペース(空白)がない方が望ましいとのことなので、今回は『C:\Anaconda3』というディレクトリを作って指定してインストールしました。

 

3.ライブラリをインストールする

Anaconda(Python)でExcelを処理するには専用のライブラリが必要です。Excel処理系のライブラリは、pandas, xlwt, xlrd, openpyxl, XlsxWriterなど多数ありますので、ざっと特徴を並べてみます。

 

特徴
pandas
  • Excel専用ライブラリというよりかは、Excelも読み込める超高機能なデータ分析ライブラリ。
  • xls, xlsx形式のReadができる。DataFrame(値配列)として取得するうえ、主要アルゴリズムがCythonで記述されており、処理が極めて高速。
  • 後述するXlsxWriterにオブジェクトを渡すことで、xlsx形式でのWriteも可能。
  • 値だけを取得する仕様のため、書式設定やオブジェクトなどはReadできない。
xlrd,xlwt,

xlutils

  • xls, xlsx形式のReadができる。(xlrd)
  • xls形式のWriteができる。(xlwt)
  • xlrdでReadしたオブジェクトをxlwtに渡せる(つまり追記→上書き保存もできる)。(xlutils)
  • 一通りの処理をするには3つのライブラリを組み合わせる必要がある。
  • xlsx形式でのWriteはできない。
openpyxl
  • xlsx形式のRead, Write両方ができ、書式設定、オートフィルター、条件付き書式、バリデーションなどの主要なセル機能を使うことができ、オブジェクト機能としてはチャートも扱える。
XlsxWriter
  • xlsx形式のWriteができ、書式設定、オートフィルター、チャート、条件付き書式、バリデーションなどの主要なセル機能を使うことができ、オブジェクト機能としてはチャートや画像、オートシェイプも使える。
  • xls形式のWriteはできない。
  • xlsx形式のReadができないため、Writeは事実上、新規作成に限る。
pyxll
  • Pythonスクリプトで書いた関数をアドインとしてExcelに導入できる。
  • 有料。1ユーザーあたり年間で200~300ドルかかる。

※詳細は読み込んでいないので、開発者アカウントとユーザーアカウントが区別されずにともに課金されるかどうか、バージョン管理がユーザー間でどうなされるのか、などの実務的な論点は分かりません。

※他にも「pyvot」というライブラリもありましたが、長らく更新がないようなので割愛しました。

 

特徴をざっと見た感じ、計算だけするならpandas一択で、Excelファイルでリッチに出力する場合はopenpyxlやXlsxWriterを使うイメージでしょうか。pyxllは発想が奇抜すぎて興味を持ちましたが、この場では割愛します。

ということで、Pandasを入れてみたいと思います。またそれ以外にデータ分析系の最低限のライブラリとして、numpy, matplotlib, Jupiter Notebookは入れたいところです。

インストールするには、Anacondaの中に入っている『ANACONDA NAVIGATOR』を起動します。

左タブから『Environments』を選ぶと各種ライブラリが表示されるので、中央上のプルダウンにて『All』を選び、該当するライブラリが入っているかどうかを確認します。

・・・pandas, numpy, matplotlib, Jupyter Notebook全てのライブラリがインストール済みでしたので、このステップは不要でした。

 

4.Jupyterを起動する

インタラクティブかつスマートにPythonコードを実行できるJupyter Notebookを起動したいので、ANACONDA NAVIGATORの左タブから『Home』を選択し、Jupyter Notebookの『Launch』ボタンを押して実行します。

 

すると、ブラウザ上でこんな画面が立ち上がります。

 

続いて、画面の右上にある『New』ボタンを押して『Python 3』を選択すると、別タブにてコマンドラインが開きます。ここにスクリプトを書いて『Run』ボタンを押すと実行できるのですが、ここでは何度も同じ処理をする前提でスクリプトファイルを作って呼び出すこと形式にしたいと思います。

 

5.スクリプトファイルを作る

毎回コマンドラインからスクリプトを入力するのも手間なので、スクリプトファイルを作ります。別のエディタで書いても良いのですが、せっかくJupyter Notebookが入っているのでJupyter Notebookを使います。

さきほど押した『New』ボタンから『Text File』を押すと別タブにてテキストエディタが開きます。そのままだと文字を書いても黒文字ばかりでシンタックスハイライトが効いていないようですが、上タブの『File』から『Save』を押して拡張子を『py』にて保存をするとPythonスクリプトらしい色合いに変わります。

 

とりあえず、Excelファイルを開いてcsvとして出力する構文を書いてみます。サンプルデータとして、e-statから『年齢(5歳階級)、男女別人口(平成30年12月確定値、令和元年5月概算値)』のExcelファイルをダウンロードしまてみました。

 

xls形式という微妙なトラップがあったのはさておき、なかなかPythonで扱うには構造が汚い理想的なデータです。これを読み込んで、処理できるデータセットに変換してcsv形式にて出力するスクリプトを書いてみましょう。なお、データ処理するにあたって注意したい点は、

  • 左表が万単位、右表が千単位と単位が異なるので、そのまま取り込むと計算ミスを誘発するので補正する。
  • 1行目はヘッダー名ではないうえ、4~10行目を総合的に解釈してヘッダー名を生成する必要がある。ヘッダーの性質的に、性別と時期の掛け合わせになっているので、縦持ちに変換する際は2カラムに分割する。
  • ところどころに小計行や空白行があるので除外する。
  • 一番下にレコードとしては不要な注釈行があるので除外する。
  • 1列目の年齢階級は、データとしては邪魔な空白が散見されたり単位があったりなかったり数字が全角だったり半角だったりするため、うまく補正する。

あたりでしょうか。。

 

とりあえず書いたコードがこちら。横持ちのcsvとして出力した後に、縦持ちに変換して再度出力するスクリプトです。

なお、マジックナンバーやハードコーディングな文字列が散見されますが、読み込むファイルもあまり綺麗なデータではないですし、どうせ別の年度のファイルを処理しようとしたら仕様が違って書き直さないといけない類のものと思われるので、とりあえずはこんな感じです。

 

jupyterに戻って早速実行してみます。『%run -i {fileName}』にてさくっと実行できます。

 

特に問題なく実行完了。デスクトップに戻ると2つのファイルができていました。UTF-8のcsv形式なので、Excelの『外部データの取り込み』のカンマ区切りにて機能で取り込んでみます。

 

こちらが横持ち。

 

そしてこちらが縦持ち。

 

無事変換できました。

以上、こんな感じで『Pythonでpandasを使ってExcelファイルを読み込んで加工してcsvファイルとして出力するまで』ということで書いてみました。コードの細かい説明は既にあるたくさんの記事に譲るとして、ここでは環境構築やライブラリ比較、データ解釈に寄せての備忘録としました。どこかの誰かの参考になれば、幸いです。

同じカテゴリーの投稿もどうぞ!
ConoHaのVPSを使うこのブログが突如使えなくなった後に復旧した話
ビジネス
2021/07/04
ConoHaのVPSを使うこのブログが突如使えなくなった後に復旧した話
業務のためにSaaSを選定するテックリサーチの思考の流れを言語化してみた
ビジネス
2021/05/01
業務のためにSaaSを選定するテックリサーチの思考の流れを言語化してみた
Pythonによるデータ処理の基本まとめ【pandas, json, datetime, gzipなど】
ビジネス
2021/04/11
Pythonによるデータ処理の基本まとめ【pandas, json, datetime, gzipなど】
アジャイルとスクラムについて、原理原則と基本を押さえる【2020年12月版】
ビジネス
2020/12/10
アジャイルとスクラムについて、原理原則と基本を押さえる【2020年12月版】
IT&マーケティング界隈でプロジェクトマネージャーとして生き残るためのサバイバルハック【2020年9月版】
ビジネス
2020/09/16
IT&マーケティング界隈でプロジェクトマネージャーとして生き残るためのサバイバルハック【2020年9月版】
ブログ著者について
那須野 拓実(なすの たくみ)。たなぐら応援大使(福島県棚倉町)。トリプレッソを勝手に応援する人。ネイチャーフォト中心の多言語ブログを書いてます。本業はIT&マーケティング界隈でナレッジマネジメントとかデータ分析とかの何でも屋。半年間の育休明けで、家事育児と外働きのバランスを模索中。