Pythonを使ったcsvの読み込み、結合、保存

前回までの記事で、各都道府県ごとのデータを抽出しました。
これらのデータを、それぞれ開いてexcelで集計するというやり方で、グラフを作っていました。
それぞれのファイルをexcelで開くのも面倒です。
この記事では、Pythonをつかって、csvフォーマットのデータを連結する方法を記述します。

Python の使い方については、色々あるのですが、ここではJupyter Notebook を使って作業を進めています。
(参考:データ分析でかかせない!Jupyter Notebookの使い方

Pythonはただの言語なので、そのままではファイルを開いたりグラフを書いたりすることができません。csvファイルをいじるためのライブラリの中でも最もメジャーなものの一つ、pandas を使いました。
コードから先に示して、一行一行説明します。

______________

import pandas as pd

osaka = pd.read_csv('COVID-19-osaka0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])
hyogo= pd.read_csv('COVID-19-hyogo0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])
kyoto = pd.read_csv('COVID-19-kyoto0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])
nara = pd.read_csv('COVID-19-nara0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])
shiga = pd.read_csv('COVID-19-shiga0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])


keihanshin = pd.concat([osaka,hyogo,kyoto,nara,shiga],axis=1)

keihanshin.head()

keihanshin.to_csv('COVID-19kinki.csv', encoding="shift_jis")
______________

0. Jupyter Notebook を開き、操作したいcsvファイルがあるフォルダ(ディレクトリ)に移動する
Jupyter Notebook は、web ブラウザ上でpython を書くツールです。
コードの保存や共有が楽、環境構築が楽などの理由でよく使われているそうです。
これを開くと、まず自分のホームディレクトリのファイルの一覧が表示されると思います。
Shell のときもそうでしたが、プログラムを書いたりする人にとっては、デスクトップではなくホームディレクトリが基本なんですね。
デスクトップは、ホームディレクトリの下の階層にあります。

1. pandas を読み込む

import pandas as pd

pandasとは、データ処理を行う時に必要な様々な機能が入った便利なソフトのようなものです。エクセル的な。
python界では、ソフト、とは呼ばずにライブラリと呼ばれています。
import xxx で、ライブラリを読み込む事ができます。
pandasの機能を使いたいときには、pandas.XXXX みたいにコマンドを打ち込むことで、
その機能を使うことができます。
でも、毎回「pandas」と打ち込むのが面倒なので、「as pd」 として、略称を定めるわけです。
よく使われるライブラリなので、jupyter notebookの環境であれば、すでに勝手に入っていると思います。
入っていなかったら、インストール方法をググってください!

2. csvファイルを読み込む

osaka = pd.read_csv('COVID-19-osaka0413.csv',encoding='cp932',names=['通し番号', '確定日', '診断地','居住地'])

pandasの中にある「.read()」 というコマンド(function)で、csvを読み込む事ができます。
どのライブラリのread? となるので、pd.read()で、pandasのread functionを使ってね、と指示を出しています。

読み込んだ内容に、名前をつけてやる必要があります。
それが、先頭の、 osaka = であったり、hyogo = です。
これで、読み込んだデータの名前が osaka や hyogo になります。

今回さらに、このreadの中には、3つのオプションが入っています。 read(A,B,C) です。

A. 読み込むファイル名の指定
まず、読み込みたいファイルの名前を入れましょう。

B. 文字コードの指定
私の記事を読みながら、csvファイルを作っている人は、エクセルで日本語を表示するために、文字コードがShift-JISになっているはずです。
そのままだと、読み込めません。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 0: invalid start byte

というエラーが返ってきます。
このような文字コードの処理のために、encoding='cp932' という指定をしています。
大体、エラーの内容をコピーして、googleで検索すると、対処法が出てきます。
メジャーなライブラリを使う利点はここにもあります。

C. カラム(列)の名前をつけてやる
もともとのファイルには、列の名前が入っているのですが、私は飛ばしてしまっています。
名前をつけてやらないと、1行目がヘッダーとして取り込まれてしまうので、名前を入れてやっているのが、3つ目のオプションです。
names=['1','2','3',---] とすることで、列の名前を1, 2, 3 --- と名付けることができます。

3. csvファイルを結合する

keihanshin = pd.concat([osaka,hyogo,kyoto,nara,shiga],axis=1)

ようやく、この記事でやりたいことにたどり着きました。
concat([A,B,C]) で、複数のcsv ファイルを結合することができます。
今回、横に横にとcsvを足して行きたかったので、axis = 1 というオプションをつけています。
これがない場合、csvファイルは縦に結合されます。

結合してできた、大きなcsvファイルは、"keihanshin"という名前が与えられました。

3' 結果を確認する

keihanshin.head()

ちゃんと結合できているか不安ですよね。
その確認が、この行です。
head() で、そのファイルの先頭5行が書き出されます。
head(1)だと、1行だけです。

4. csvファイルを書き出す

keihanshin.to_csv('COVID-19kinki.csv', encoding="shift_jis")

to_csv() で、ファイルをcsvフォーマットで書き出すことができます。
先程作った、keihanshin という名前のデータを、'COVID-19kinki.csv' という名前で書き出せという指示をしています。
文字コードがここでも問題になるので、encoding="shift_jis"で、Shift-JISを指定しています。

まとめてcsv ファイルを作りましたが、もう少しうまくやれば、読み込んだcsvからそのままフィギュアを作っていくことも可能です。
今度は、そのレシピを挙げて見たいと思います。

__________________

参考にした記事は以下の通りです。

concat の使い方
http://sinhrks.hatenablog.com/entry/2015/01/28/073327

read.csvでエラーがでた!
https://qiita.com/tackey/items/5b7b2be23af60335fe11

ヘッダー行の処理
https://life-freedom888.com/pandas-csv-header/

できたデータをcsvとして出力
https://pythondatascience.plavox.info/pandas/データフレームを出力する

コメント

このブログの人気の投稿

VNCで見ている画面と自分のマシンの間でのコピー&ペースト

Natural Bond Orbital (NBO) Analysis, 自然軌道解析をやってみる

Lanl2DZの使い方