私が、なるほど!と思ったフォルダ管理術と、一緒に起きたトラブルをご紹介します!!
実際に例として、2022年の各都道府県別の人口データをpythonで読み込むプログラムを書いてみましょう!
フォルダ管理
第一に、【各案件のフォルダ】を作成します。
今回だったら、各都道府県の人口を分析を行うため、「population」という専用のディレクトリを作成します。
さらに使うファイルを細かく分類していきます。
データ分析の時に使う、または作られるファイルは次の3種類に分けることができます。
1. 分析対象となるデータ
フォルダの名前は「Data」とします。csvファイルなど、分析で使うデータを入れていきます。
今回は「population.csv」を分析していきます。
2. 分析で使うファイル
フォルダの名前は「Analysis」とします。ipynbファイルなどが入ります。今回は「PopulationAnalysis.ipynb」で分析していきます。
3. 分析の結果を表すファイル
フォルダの名前は「Outcomes」とします。表などが入ります。
Pythonのコードが動かない...?
このようなディレクトリの構造は非常にフォルダの見栄えがよく共有も簡単な一方、以下のようなコードではデータを読み込むことができませんでした。
import pandas as pd
df = pd.read_csv("population.csv")
df.head()
"[Errno 2] No such file or directory: 'population.csv'"
これは PopulationAnalysis.ipynb の親ディレクトリであるAnalysisに読み込むデータである population.csv が含まれていないことが原因です。
これを解決するためには population.csv のパスを指定して読み込む必要があります。
やることは先ほどのフォルダの構造に基づいて考えます。
つまりやることは、
現在のディレクトリの親ディレクトリのパスを取得し、 そこに「Data/population.csv」をつけて作成したパスをPandasで読み込めば、population.csvをデータフレームとして取り込めそうです。
一歩下がって二歩進むイメージです!
パスの取得はPython のOSモジュールを使って行います。
#現在のスクリプトファイルのディレクトリを取得
import os
#現在のディレクトリのパスを取得
current_directory = os.getcwd()
#親ディレクトリのパスを取得
parent_directory = os.path.dirname(current_directory)
#1つ上の階層にあるファイルのパスを作成
file_path = os.path.join(parent_directory, "Data/population.csv")
#完成したパスを出力
print(file_path)
'/Users/<ユーザー名>/DataAnalysis/Data/population.csv'
これにより、データの読み込みに必要なパスを作成することができました!!
df = pd.read_csv(file_path)
df.head()
これにより、population.csv を読み込むことができました!!
まとめ
ディレクトリ整理でデータが読み込めないって問題も、OSモジュールを使うことで解決できました!
出典
社会・人口統計体系 都道府県データ 基礎データ(総務省統計局)
https://www.e-stat.go.jp/stat-search/database?statdisp_id=0000010101