みなさんこんにちは!みやしんです。
今回は仕事でも役立つ「pythonを使ったcsvファイルの処理方法」をご紹介したいと思います。
特にデータ解析をしたい場合、データがcsvファイルで保存してあることって結構あると思います。
それでは早速始めていきましょう!
データセットの入手
プログラミングの練習したいけどデータがない。。。。ってことありますよね!
そんな人のために、まずはオープンデータの入手先をご紹介します。
DATA GO.JP データカタログサイト
日本のオープンデータカタログサイトです。
中央省庁が保有するデータや様々な分野の統計データを入手することができます。
ファイル形式毎にデータを分けて、検索もできるのでとても扱いやすくておススメです。

今回は、このサイトから都道府県別の人口推移データを扱っていきたいと思います。
「4_年次・都道府県・性別人口_(1) 総数」というデータです。
ダウンロードすると「mi040001.csv」というファイルがダウンロードされます。

【リンク先】人口動態調査_人口動態統計_確定数_人口_年次_2019年
ファイルをダウンロードして開くと、こんな感じのデータが入っています。

今回、使いやすくするために注意事項などが書いてある1~14行目までを消して、ファイル名を「population_data.csv」に変えて使いたいと思います。

こんな感じででデータのリストだけにしました。
では、お待たせしました!pythonに入っていきたいと思います。
事前準備
事前準備として、「data_folder」という名前のフォルダーを作成しました。
この中にpopulation_data.csvを入れて、pythonスクリプトも同じフォルダーに入れていきたいと思います。

pandasでcsvファイルを読み込む
csvファイルを読み込んで処理するためにpandasというライブラリを使います。pandasではread_csv
()というメソッドを使います。また、今回読み込む「4_年次・都道府県・性別人口_(1) 総数(population_data.csv)」は1行目がヘッダー行なので、それを明示するためにheader=0を入力します。先頭行を0として数えます。
ファイル名:csv_read.csv
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) # df = pd.read_csv('ファイル名.csv', encoding='データの読み込み形式', header=ヘッダー行) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # 読み込んだデータを表示する print(df)
Anaconda Powershell Promptで実行します。

こんな感じでcsvを読み込んで表示できました。
「df.T」で行と列を入れ替える
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # df.Tで行と列を入れ替える print(df.T)
Anaconda Powershell Promptで実行します。

縦軸に年、横軸に都道府県となり、行と列が入れ替わりました。
「de.shape」で行数と列数を表示
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # 行数と列数を表示 print(df.shape)
Anaconda Powershell Promptで実行します。

(48, 22)と表示されました。48が行数、22が列数です。
「df[‘列名’]」でその列のデータを表示
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # 「df['列名']」でその列のデータを表示 print(df['2005'])
Anaconda Powershell Promptで実行します。

「2005」の列がピックアップされました。
【発展版】1列分の合計を求める
上記の2005の列の総和を求めたいと思います。
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # 2005年の列のデータをsum関数で合計して表示 population2005 = sum(df['2005']) print(f'2005年列の人口の合計={population2005}')
ここで、
print(f'2005年列の人口の合計={population2005}')
の部分は、文字列の前にfをおいて{変数}とすることで、文字列の中でも変数を代入できる便利な機能です。
よく出てくるので覚えておくと良いと思います。
Anaconda Powershell Promptで実行します。

2005年列の人口の合計=252409804 と表示されました。
読み込んだcsvファイルを1行ずつ処理する
続いてはデータを1行ずつ処理していく方法をご紹介します。
まずは、valuesを利用するとデータをリストとして取得できます。
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # valuesを使うとデータをリストで取得可能 print(df.values)
Anaconda Powershell Promptで実行します。

このようにリストで取得できますので、これをfor文を使って処理していきます。
# pandasをインポート import pandas as pd # csvファイルを読み込んでdfへ入れる(DataFrameオブジェクト) df = pd.read_csv('population_data.csv', encoding='shift-jis', header=0) # 1935年の人口を設定 popu1935 = 0 for row in df.values: print(row) # 1935年の人口はrow[1] popu1935 += int(row[1]) print(f'1935列の人口の合計は:{popu1935}人です')
Anaconda Powershell Promptで実行します。

・・・・・

138508296人という計算結果を出すことができました。
csvファイルを書き込む
pandasを使ってcsvファイルへ書き込むことも可能です。
csvファイルを書き込むときにOS環境に合った文字コードを取得する必要があります。その時、localeモジュールのgetpreferredencoding()を使います。
今回は人口のデータは使わず、オリジナルでデータを作成します。
import pandas as pd import locale # 適切な文字コードを取得 encoding = locale.getpreferredencoding() # 書き込むデータを辞書として作成 data = {'SMAPメンバー':['中居正広','木村拓哉','稲垣吾郎','草彅剛','香取慎吾'], '年齢':[48,48,47,46,44], '出身地':['神奈川','東京','東京','埼玉','神奈川'], '血液型':['A','O','O','A','A'] } # 上記のリストをデータフレームに変換 df = pd.DataFrame(data) # データフレームをcsvファイルへ書き込み df.to_csv('SMAP_member.csv', encoding=encoding)
実行するとフォルダ内にSMAP_member.csvが作成されます。

SMAP_member.csvを開くとこのようにリストができています。

上手くできました!
今回はpythonを使ってcsvファイルを読み込んだり、書き込んだりする方法をご紹介しました。
是非、実際にチャレンジしてみてくださいね!
Python、AI、機械学習について、初心者の方、プログラミングスクールに興味のある方、E資格を取得したい方、更に実践的なスキルを磨きたい方は下記の記事もご参考ください。
pandasについてもっと勉強したい方は書籍での勉強もおススメです。
Pythonによるデータ分析入門 第2版-Numpy、Pandasを使ったデータ処理

合わせて読みたい
pythonのMatplotlibを使った図形描画について解説!
物体検出やファインチューニングにチャレンジしてみたい方はこちら!
ロト6の当選番号を予想してくれるAIを作成。csvファイルの読み込みもあります。
コメント