一人十郷 - Takumi Nasuno Photography
ビジネス
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ファイルとして出力するまで』ということで書いてみました。コードの細かい説明は既にあるたくさんの記事に譲るとして、ここでは環境構築やライブラリ比較、データ解釈に寄せての備忘録としました。どこかの誰かの参考になれば、幸いです。

同じカテゴリの投稿もどうぞ!

【GASデータ活用】スプレッドシートのデータをGoogle Apps Scriptで読み込んで、HtmlService × Chart.jsでグラフを表示してみる
ビジネス
2019/06/26
【GASデータ活用】スプレッドシートのデータをGoogle Apps Scriptで読み込んで、HtmlService × Chart.jsでグラフを表示してみる
【Pythonデータ活用】CSVファイルをJSONファイル、XMLファイルに変換して出力してみる
ビジネス
2019/06/12
【Pythonデータ活用】CSVファイルをJSONファイル、XMLファイルに変換して出力してみる
【SSL化】WordPressサイトをhttpからhttpsに変更したときのメモ【ConoHaのVPS】
ビジネス
2019/02/24
【SSL化】WordPressサイトをhttpからhttpsに変更したときのメモ【ConoHaのVPS】
WPML使用中のWordPressブログを『さくらのVPS』から『ConoHa』にサーバー移転した時の話
ビジネス
2018/09/19
WPML使用中のWordPressブログを『さくらのVPS』から『ConoHa』にサーバー移転した時の話
【スライド無料公開】Excel VBAという諸刃の剣を真っすぐに扱うために
ビジネス
2018/08/06
【スライド無料公開】Excel VBAという諸刃の剣を真っすぐに扱うために

≫ もっと読む

ブログ著者について

那須野 拓実(なすの たくみ)。たなぐら応援大使(福島県棚倉町)。トリプレッソを勝手に応援する人。ネイチャーフォト中心の多言語ブログを書いてます。本業はナレッジマネジメントとかデータ分析とかの何でも屋ですが、今は半年間の育児休業中。
ブログカテゴリ