205 Views
March 07, 24
スライド概要
前回取り込んだ24個のExcelファイルを、年度ごとの推移を分析するために「concat」を使って、結合していきます。
その過程で、ワイルドカード、forループ、リスト内包表記という便利な機能も使っていきますので、しっかりと身に付けていきましょう。
● 特定のファイルのパス名とファイル名を取得する
85. glob.glob(‘ファイルのパス/ファイル名.ファイル形式’)
● データを単純に結合する
86. pd.concat([データ名1, データ名2, …], ignore_index=True)
● 繰返し処理する
87. for イテレーター in イテラブルオブジェクト:
処理1
処理2
・・・
● 末尾(最後)に要素を追加する
88. リスト名.append(引数)
● リスト内包表記
pd.concat((pd.read_csv(i) for i in all_files), ignore_index=True)
************
★この動画のブログ
■ データサイエンス チュートリアル
https://tutorial4datascience.blogspot.com/
★参考資料
■ concatのイメージ by shunさんの「データサイエンスの道標」
https://datasciencemore.com/python-pandas-concat/
■ [解決!Python]内包表記でリストを作成するには
https://atmarkit.itmedia.co.jp/ait/articles/2106/29/news021.html
1 3rd STEP 応用編 医療 Section 4 データの結合 85 glob.glob(‘ファイルのパス/ファイル名.ファイル形式’) 86 pd.concat([データ名1, データ名2, …], ignore_index=True) 87 for イテレーター in イテラブルオブジェクト: 処理1 処理2 ・・・ 88 リスト名.append(引数)
2 Section 4 データの結合 このセクションでは、Googleドライブに新しく作ったフォルダー「データ」に保存された24個の Excelファイルを、年度ごとの推移を分析するために結合していきます。
3 Section 4 データの結合 プログラム解説1 glob(グロブ) 特定条件に従ったファイルを取得するときにglobを使います。 まずは、「glob」をインポートします。 import glob そして、特定のファイルのパス(ディレクトリー)名とファイル名を取得するときには、85のように 記載します。 85 glob.glob(‘ファイルのパス/ファイル名.ファイル形式’) 今回は、フォルダー全部のcsv形式のパス(ディレクトリー)名とファイル名を取得して、次の処 理に渡したいので、「ファイル名.ファイル形式」の部分を「*.csv」とします。 「*」は、ワイルドカードと呼び、 「0文字以上のすべての文字列」を現しますから、85に適用した 場合、「ファイルのパス」で指定されたフォルダーにあるすべてのcsv形式のパス(ディレクトリー) 名とファイル名を取り出すことができます。
4 Section 4 データの結合 プログラム解説2 データの結合 結合するデータのすべてのファイル名を取得したところで、データを単純に結合する方法を試して みましょう。データを単純に結合するには、「concat」を使います。 86 pd.concat([データ名1, データ名2, …], ignore_index=True) 横に結合する場合は引数「axis=1」 を、「]」の後に、カンマに続けて追加しま す。concatはデフォルトで「axis=0」で すから、縦に結合する場合は引数は必 要ありません。 また、「ignore_index=True」は、 出力されるDataFrameのインデックスが 0からの連番になります。 【出典】 https://datasciencemore.com/pythonpandas-concat/ ← shunさんの「データサイエンスの道 標」のイメージです。わかりやすいですね。
5 Section 4 データの結合 プログラム解説3 forループ 86のconcatは、[データ名1, データ名2, …]を引数にしなくてはならないのですが、24個も データを読込み、データ名を引数に記述するのは大変なので、下記のように「forループ」と呼 ばれる繰返し処理の方法を使います。 87 for イテレーター in イテラブルオブジェクト: 処理1 処理2 ・・・ 「イテラブルオブジェクト」とは、要素を1つずつ取り出して処理できるようなオブジェクトで、リス ト、辞書、タプルなどを指します。今回は、「glab.glob」で取り出したファイル名の集合が 「イテラブルオブジェクト」になります。 「イテレータ」とは、要素を逐次受け取る変数で、通常「i」を用います。 また、イテラブルオブジェクトの直後に半角のコロン(「:」)、処理を書く際には半角スペース を入れます。半角スペースは4つが一般的です。
6 Section 4 データの結合 プログラム解説4 append 「append」は、リストに要素を加えるもので、末尾(最後)に要素を追加できます。 88 リスト名.append(引数) 簡単な例を示すと、下記のようになります。 list= [0, 1, 2] list.append(100) print(list) [0, 1, 2, 100] 今回は、「glab.glob」 で取得したファイル名のリスト「all_files」を「forループ」で逐次受け取 り、88を使って、「pd.read_csv」で読み込んだデータを末尾に加え、空の「list」追加していき ます。次にその「list」 を「concat」に渡し、「list」 のデータを結合します。
7 Section 4 データの結合 プログラム解説1-4 まとめ 解説を読むとややこしく感じるかもしれませんが、実際のプログラムは下記のようになっています。 URLのデータを結合する際は、どんな場合でも使えますので、まるごと覚えてしまっても構いません。 import glob all_files = glob.glob('/content/drive/MyDrive/ ファイルのパス名と ファイル名を取得 Colab Notebooks/医療/データ/*.csv’) list = [] for i in all_files : 繰返し処理 list.append(pd.read_csv( i )) df_all = pd.concat( list, ignore_index=True ) データを縦に結合
8 Section 4 データの結合 1.フォルダー「データ」の全ファイル名の取得 データを結合するプログラムに渡すために、「glob」を使って、全ファイル名を取得します。 【参考】 このように書くこともできます import glob path = '/content/drive/MyDrive/Colab Notebooks/医療/データ‘ all_files = glob.glob(path + "/*.csv") all_files
9 Section 4 データの結合 2.結合したデータの作成 プログラム解説1-4のまとめたように、24のファイルを縦型に結合していきます。 109171 rows × 59 columns
10 Section 4 データの結合 プログラム解説5 リスト内包表記 forループを使ったリストを使うプログラムをもっと簡便に書くこともできます。 pd.concat((pd.read_csv(i) for i in all_files), ignore_index=True) なんと1行で書くことができました。 「for i in all_files」の部分がforループになっていますね。 これを「リスト内包表記」と言い、Pythonの柔軟な文法がよく表れています。 for文では3行(以上)必要な処理がリスト内包表記なら1行で済んでしまいます。 詳しくは、下記を参照してください。 [解決!Python]内包表記でリストを作成するには
11 Section 4 データの結合 3.リスト内包表記による結合したデータの作成 109171 rows × 59 columns