- はじめに
- レッスンで使ったファイルはこちら
- 実行環境と環境構築
- ライブラリ、パッケージ、モジュール
- データ解析を支援するpandas
- ファイルパスの設定
- Excelファイルを読み込むread_excel関数
- Excel VLOOKUP関数
- Python mergeメソッド
- それぞれのデータフレームでonを指定
- VLOOKUP関数で2つの検索キーを使う方法
- ピボットテーブル
- Pythonのピボットテーブル
- dropメソッドによるカラム削除
- renameメソッドによるカラム名変更
- ピボットテーブル作成(合計)
- ピボットテーブル作成(平均)
- ピボットテーブル作成(カウント)
- ピボットテーブル作成(標準偏差)
- ピボットテーブル作成(中央値)
- ExcelのSUMIFS関数
- PythonのGROUPBYメソッド
- matplotlibとseaborn
- matplotlibとseabornのインポートの設定
- グラフにするデータと日本語フォントについて
- カラム名、インデックス名を一気に変更する方法
- seabornによる棒グラフ
- seabornによるヒートマップ
- seabornによる円グラフ
- グラフをpngファイルへ書き出し
はじめに
こんにちは。キノコードです。
前回の「面倒なExcel作業をPythonで自動化しよう」の動画はみていただけましたでしょうか?そこでは、Excelを読み込んだり、逆にExcelに書き込んだり、エクセルファイルを複数に分割したり、ひとつにまとめたりということを進めてきました。
では、他にPythonではどんなことができるのでしょうか?Excelの関数や機能、あるいはグラフ作成のようなことはできるのでしょうか?また、できるのであれば、どうやってできるのでしょうか?
この動画では、Excelの関数、機能、グラフ作成と、それに対応するPythonでのやり方をセットにして解説をしていきます。また、Excelだとめんどくさいこと、あるいはExcelだとできないこと、もあわせて紹介していきます。
レッスンで使ったファイルはこちら
キノクエストでアカウントの新規登録に進み、メール認証を完了します。
ログインした状態(プラン選択画面が表示されます)で下記のボタンをクリックしてください。
Pythonで1度プログラムを組んでしまえば、自動化することが可能です。VBAも自動化の選択肢ですが、pythonができるようになれば、自動化の他に、データ分析、人工知能開発、Webサービス開発などもできるようになります。
自動化に挑戦したい方はPythonで是非トライしてみてください。
ちなみに、面倒なExcel作業をPythonで自動化しようの【第一弾】を観ずに、この第二弾から初めてみる方もいると思います。
初めて見る人にもわかるように環境構築やライブラリの説明など、第一弾と重複している部分があります。
第一弾を見たことのある方は、こちらの時間まで○○分まで飛ばしてください。
それでは本編にいってみましょう。
実行環境と環境構築
まず、簡単にPythonを使うために、Anacondaを使っていきます。
Anacondaインストール方法は、Pythonの超入門コースの環境構築編をみてください。
概要欄にURLを貼っておきます。
AnacondaにはJupyter Labがインストールされています。Jupyter Labを起動してみましょう。
ちなみに、Jupyter Labの使い方についても、別動画で説明しています。こちらも概要欄にURLを貼っておきます。
起動方法は、macの場合はターミナル、Windowsの場合はコマンドプロンプトでJupyter Labと入力をしてエンターです。
Jupyter Labが起動しました。
ライブラリ、パッケージ、モジュール
次に、ライブラリをインストールしていきます。
まず、ライブラリとはなんでしょうか?
またライブラリに似たものとして、モジュールやパッケージという言葉があります。
これらの用語を最初に整理をしておきます。
ライブラリとは、よく使う機能・関数をまとめて、簡単に使えるようにしたものです。
そして、モジュールとは、関数やクラスなどを1つのPythonファイルにまとめたものです。
そして、いくつかのパッケージをまとめたものをライブラリといいます。
モジュール、パッケージ、ライブラリは、このよう関係になっています。
厳密に言葉の意味を理解しなくてもオッケーです。
ただ、ライブラリの中にパッケージがあって、パッケージの中にモジュールがあるのだと覚えておいてください。
そして、これらは簡単に使えるようにまとめてあるものだと思ってください。
データ解析を支援するpandas
次に、「pandas」をインポートします。
Pandasは、データ解析を支援する機能を提供するPythonのライブラリです。
Pandasには、データの集計や加工などの機能が入っています。
Pandasで扱うデータ構造としてよく使うもので、「Series」と「Dataframe」があります。
1次元のデータを扱うときは「Series」、2次元のデータを扱うときは「Dataframe」というデータ構造になっています。
つまり、1列だと「Series」、2列以上だと「Dataframe」です。
詳しくは、pandas超入門コースで説明していますが、データ構造が1列のものと2列以上のものがあるのだと覚えておいてください。
さて、Pandasもインポートしましょう。
「import pandas as pd」を書きます。
「as」は、ライブラリ名(pandas)を好きな名前にすることができます。
したがって、「pd」という名前で「pandas」を使えることができます。
ファイルパスの設定
import_file_path = ‘sample.xlsx’ #読み込み先
次に、読み取るエクセルファイルやシート名を、変数に代入していきましょう。
そうすることにより、後日使う時に、ここだけ編集すれば良いことになり楽です。
まずファイル名を記述しましょう。
import_fileという変数にしましょう。
イコールを書いてエクセルのファイル名を記述します。
ファイル名は、シングルクオテーションでくくればよいです。
エクセルファイルはjupyter labのファイルがある同じディレクトリに置いておきましょう。
#シート名
excel_sheet_name01 = ‘社員マスタ’
excel_sheet_name02 = ‘予算管理表’
excel_sheet_name03 = ‘実績管理表’
excel_sheet_name04 = ‘実績管理表社員ID未記入’
次に、シート名を変数に格納します。
変数名は、Excelのシート名として、「excel_sheet_name01~04」にします。
それぞれの変数にシート名を記述します。
Excelファイルを読み込むread_excel関数
次に、「pandas」を使って、Excelファイルの内容を読み込みます。
Excelファイルの内容を読み込みは、pandasのread_excel関数でできます。
その読み取ったデータを格納する変数を定義していきましょう。
read_excel関数を使うと、「Dataframe」というデータ構造で取得するため、「df_employee_master」とします。
次に、「pandas」を使って、Excelファイルの内容を読み込む記述を書きます。
「import pandas as pd」で「pandas」の名前を「pd」としたため、「pd」と書きます。
次に、ドットを書いて、「read_excel」を書きます。
これが先ほど説明したread_excelで、これでExcelファイルを読み込むことができます。
次に、丸括弧を書きます。
丸括弧の中には、引数を記述します。
最初の引数には、ファイルの場所とファイル名を記述します。今回使用するエクセルファイルは、jupyter labを起動した場所と同じ場所においてください。そうすると、ファイルの場所の記述は不要です。
先ほど「import_file」という変数にファイル名と代入したので、この変数を第一引数に記述。
次に、カンマを書いて、シート名を記述します。
sheet_nameという引数にイコールで、シート名を代入しましょう。
これで、Excelファイルの内容を読み込む記述が完了しました。
次に、headメソッドを使って、表示する件数を制限して、データを表示してみましょう。
変数「df_employee_master」、ドット、headメソッドを書きます。
では、実行してみましょう。
「社員マスタ」シートの内容が読み込まれています。
df_budget = pd.read_excel(import_file_path, sheet_name = excel_sheet_name02)
df_actual = pd.read_excel(import_file_path, sheet_name = excel_sheet_name03)
変数「df_budget」に「予算管理表」シートのデータ、変数「df_actual」に「実績管理表」シートのデータを代入します。
実行してみましょう。データが読み込まれました。
Excel VLOOKUP関数
Excelのデータを読み込んだDataFrameで、エクセルの関数や機能と、Pythonでのやり方を比較しながら学んでいきましょう。
まず、Excelでよく使うVlookup関数と、Pythonでのやり方を比較してみましょう。
Vlookup関数に簡単におさらいします。
例えば、社員マスタのシートに、予算管理表から売上予算をひっぱってきたいケースで考えてみます。
このようなときに使うのがLOOKUP関数です。
社員マスタにも、予感管理表にも、「社員番号」という共通のキーがあります。
VLOOKUP関数は、共通した検索キーをもとに、対応するデータを取り出してくれる関数です。
VLOOKUP関数を書きます。
そして、VLOOKUP関数の引数に検索値、範囲、列番号、検索方法を書きます。
それでは、実行してみましょう。
それぞれの社員番号を検索値にして、データを引っ張ってくることができました。
Python mergeメソッド
pd.merge(df_employee_master, df_budget, on = ‘社員番号’).head()
このVLOOKUP関数と同じことができるPythonでのやり方をみてみましょう。
Pythonでは、mergeメソッドを使います。
mergeメソッドは、VLOOKUP関数と同じように、検索キーをもとにデータを引っ張ってくることができます。
まず、pd、ドット、mrgeメソッドを書きます。
次に、引数に社員マスタのデータフレーム、カンマ、予算管理表のデータフレームを書きます。
そして、on、イコール、シングルクォーテーションを書いて、検索キーである社員番号を書きます。
これで社員番号をキーとして、2つのデータフレームをくっつけることができます。
ここでもheadメソッドを使って、表示する件数を制限して、データを表示してみましょう。
それでは、実行してみましょう。
ExcelのVLOOKUP関数で作ったものと同じものができました。
pd.merge(df_employee_master,df_budget).head()
さきほどのソースコードでは、onの部分で社員番号をキーとしてデータを結合しました。
しかし、mergeメソッドはキーが一意であれば、キーを設定しなくてもPandasが自動で結合をしてくれます。
ちなみに、一意とは、すべての値が重複しないことをいいます。
例えば、「1、2、3、4、5」の数字は一意と言えます。
一方、「1、1、2、2、3」の数字は、1と2が重複しているため、一意ではありません。
なお、一意のことをユニークとも言います。
プログラミングをしていると、よく使う用語なので覚えておきましょう。
さて、話を戻します。
キーを設定しなくても結合できるか試してみましょう。
社員マスタと予算管理表のデータフレームは、どちらも社員番号のカラムは一意です。
onの箇所は削除します。
それでは、実行してみましょう。
同じ結果が表示されました。
それぞれのデータフレームでonを指定
pd.merge(df_employee_master,df_actual,left_on=’社員番号’,right_on=’社員ID’).head()
次に、2つのデータフレームで、それぞれキーを指定して、結合する方法を説明します。
例えば、データの中身は同じだけど、社員番号と社員IDのように名前が違うものがあると思います。
そのようなとき、それぞれのデータフレームでキーをそれぞれ指定して、結合することができます。
「left_on」と記述して、左のデータフレームであるdf_employee_masterのカラムをしてします。社員番号なので、イコールを書いて指定します。
次に、右のデータフレームは、社員IDなので「right_on」と書いて指定します。
これで、「社員番号」と「社員ID」をキーにして結合することができます。
それでは、実行します。
結合されました。
VLOOKUP関数で2つの検索キーを使う方法
次に、検索キーが2つあるときにデータを引っ張ってくる方法を解説します。
まず、Excelではどのようにするでしょうか?INDEX関数とMATCH関数でも参照できますが、ここではVLOOKUP関数を例にしています。
「実績管理表社員ID未記入」シートで説明していきます。
ちなみに、先ほどみた事例と同じように社員番号と社員IDは同じとします。
見てわかるように、このシートには社員IDがありません。
そのため、名前や性別を照らし合わせて、社員番号を記入しなければなりません。
社員マスタシートには、社員情報が記載されているため、このシートから社員番号を取得します。
データをみてみると、男性の「井上 真」と女性の「井上 真」がいますね。
このように、氏名の中には同姓同名の方がいるため、氏名だけでは一意になりません。
したがって、このままではVLOOKUP関数を使うことができません。
そこで、CONCATENATE関数を使って、氏名と性別を結合して、一意になる文字列を作ります。
実績管理表にも、氏名と性別で一意になる文字列を作り、しかも、Vlookupはキーより右のデータしか取得できないので、どちらのワークシートのキーを左に移動して、それをVlookupで取得することになります
pd.merge(df_employee_master, df_actual, left_on=[‘氏名’, ‘性別’], right_on=[‘氏名’, ‘性別’]).head()
しかし、Pandasのmergeメソッドを使うと1行で済みます。
次に、mergeメソッドを使って、氏名と性別をの2つをキーにして結合します。
「left_on」のところを氏名と性別のリストにします。
「right」のところも同じように書きます。
それでは、実行します。
結合されました。
つまり、エクセルのように、一意になるキーを作らなくても、検索キーを左にずらさなくても1行でデータを結合することができます。便利ですよね。
ちなみに、他にも、SQLでいうところのleftjionとやrightjoinもできます。Pandas超入門コースで説明するのでそちらをご覧ください。
さて、ここまでがレッスンの真ん中です。
ここまでご視聴ありがとうございます。
いかがでしたでしょうか?新たな発見はありましたでしょうか?
キノコードでは、Excel操作の動画を他にも配信する予定です。
もしよければ、チャンネル登録をお願いします。
さて、次にいきましょう!
ピボットテーブル
それでは次にピボットテーブルについてみていきましょう。
まずは、エクセルでのピボットテーブルの使い方をみていきます。
ピボットテーブルはエクセルにある機能の1つで、クロス集計ができる機能です。
クロス集計とは、例えば、ある企業の購入者を年齢や性別などの切り口を変えて集計する方法です。
早速、エクセルでやってみましょう。
例えば、実績管理表のワークシートに対して、ピボットテーブルを作るのであれば、挿入→ピボットテーブル→テーブルの範囲を選び、OKです。
商品分類ごとの担当者や性別などの切り口を変えて集計できます。
ちなみに、ピボットテーブルは挿入ができなかったり不便なので、その場合はINDEX関数とMATCH関数を使えば扱いが簡単になりますよね。
列を入れて計算式をいれたり、ピンポイントで集計をしたり。indexとmatchの組み合わせは便利です。
こういった関数の使い方については、エクセルの最強関数という動画を作る予定なので、そちらをご覧ください。
さて、それがピボットテーブルです。
では、Pythonでのやり方をみてみましょう。
Pythonのピボットテーブル
df_employee_actual = pd.merge(df_employee_master, df_actual, left_on=’社員番号’, right_on=’社員ID’)
社員マスタと実績管理表を結合したデータフレームを使います。
変数df_employee_actualという変数に代入をします。
表示をさせてみましょう。
df_employee_actual
氏名と性別が重複しているので、_xと_yがついています。これを削除します。
また、社員IDは社員番号と同じなので、これも削除しておきます。
dropメソッドによるカラム削除
df_employee_actual = df_employee_actual.drop([‘氏名_y’,’性別_y’, ‘社員ID’], axis=1)
削除をするにはdropメソッドを使います。
データフレームのあとにドット。ドロップを書いて丸括弧。2つ以上のカラムを削除する場合には、リストで渡します。
最後に、カラムを削除するのか、行を削除するのは指定します。
カラムの場合はaxis=1と指定します。
ちなみに、0と指定すると行が削除されます。
こちらもPandas超入門コースにて詳しく説明するのでそちらをご覧ください。
さて、実行してみます。
削除されていることが確認できます。
renameメソッドによるカラム名変更
df_employee_actual = df_employee_actual.rename(columns={‘氏名_x’:’氏名’,’性別_x’:’性別’})
また_xや_yというカラム名は見栄えがよくないので変更しましょう。
カラム名を変更するには、renameメソッドを使います。
カラム名を変更したいデータフレームを書いてドット、rename。丸括弧を書いてcolumnsと記述します。
そして、辞書型で変更前の名前と、変更後の名前を書きます。
ちなみに、カラムではなくindexを変更したい場合は、columnsの部分をindexに書き換えればオッケーです。
df_employee_actual
データフレームの中身をみてみます。
氏名と性別が変更できていることを確認できました。
ピボットテーブル作成(合計)
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=’sum’)
次に、Pandasのpivot_table関数を使ってピボットテーブルを作成していきます。
Excelのピボットテーブルと同様に、カテゴリごとに平均、合計、最大、最小、標準偏差など求めることができます。
こちらもPandas超入門コースにて詳しく説明するのでそちらをご覧ください。
まずは、所属支店ごとに、商品分類ごとに、売上金額の合計を求めてみましょう。
まず、さっきほどリネームしたデータフレームにドット、pivot_tableを書きます。
次に、引数にindexに氏名、columnsに商品分類、valuesに売上金額を記述します。
最後に、算出方法を指定します。
aggfunc(アグファンク)と書いて、集計方法を記述します。今回は、合計を求めるsumです。
それでは、実行してみましょう。
氏名、商品分類ごとに分類されたピボットテーブルができました。
ピボットテーブル作成(平均)
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=’mean’)
平均を求めるには、aggfuncを平均のmeanにすればよいです。
実行してみます。
小数点があってみえにくいですね。
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=’mean’).astype(‘int’)
その場合はデータ型を少数から整数に変えましょう。
データ型を変えるには、astypeメソッドです。
データフレームの後ろに、astypeと書いて変更したいデータ型を記述します。今回は整数型なので、intを記述します。
実行してみます。
みやすくなりました。
ピボットテーブル作成(カウント)
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=’count’)
次に数を数えるcountにしてみましょう。
aggfuncをcountとします。
実行してみます。
カウントできています。
ピボットテーブル作成(標準偏差)
次に標準偏差を求めてみましょう。
標準偏差を求めるには、numpyというライブラリを使います。
NumPyとは、高速にリストの計算をするためのライブラリです。
numpyをnpという名前で使えるようにしましょう。
aggfuncのところに、npのあとに標準偏差という意味のstdを記述します。
実行してみます。求められています。
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=np.std).astype(‘int’)
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=np.median).astype(‘int’)
df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=[np.mean, np.median]).astype(‘int’)
ピボットテーブル作成(中央値)
次に中央値を求めてみます。
エクセルでは、ピボットテーブルだと配列関数を使わなければ求められないはずです。
引数にmedian(メジアン)を記述します。
また、平均や合計や標準偏差などの計算結果を2つ以上表示させることもできます。
その場合、aggfuncのところにリストで求めたい計算方法で渡します。
平均と中央値でやってみましょう。
両方とも実行してみます。求めることができました。
df_employee_actual.pivot_table(index=’氏名’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=lambda x: np.sum(x)*1.10).astype(‘int’)
ちなみに、aggfuncのところに、自分で作った関数を指定することもできます。例えば税込みの計算式をいれたりもできます。
非常に便利ですよね。
ExcelのSUMIFS関数
それでは次にエクセルのSUMIFS関数についてみていきましょう。
SUMIFS関数は、条件にあったものの合計を算出することができます。
条件は1つだけじゃなく、複数指定することができます。
早速、エクセルでやってみましょう。
例えば、担当者ごとの1月1日以上から7月1日未満の集計をしたいとします。
まず日付を2つかきます。
次に担当者の列をコピー。貼り付けます。重複削除をして、sumifs関数を書きます。合計範囲を指定をして、1月1日以上。コンマ。7月1日未満とします。
参照も気をつけましょう。
これを下にずらせば集計が完了ですね。
このやり方をすれば日付の部分を変更すれば集計範囲を簡単に変えることができて便利です。
ちなみに、このエクセルの詳しいやり方についても、エクセル最強関数という動画で配信する予定です。
PythonのGROUPBYメソッド
では、このSUMIFS関数のようなことは、Pythonでどのようにやるのでしょうか?
エクセルと同様に実績管理表でみていきます。
df_actual[[‘氏名’,’売上金額(円)’]].groupby(‘氏名’).sum()
Pythonの場合、Pandasのgroupbyメソッドを使います。
まず、氏名ごとの売上を集計するので、この2つのカラムを記述してあげましょう。
データフレームにしなければならなので、角括弧は2つです。ドットを書いてgroupby。
名前でグルーピングをして合計を算出したいので、groupbyの引数の中は氏名を記述します。
そして、最後に計算方法を記述します。今回は合計なのでsumを書きます。
実行してみましょう。
集計することができました。
df_actual[‘売上日’]>=”2020-04-01″
日付についてはどのように絞ればいいでしょうか?
まず売上日だけの日付を指定します。
大なりイコールと書いて、シングルクオテーション。
シングルクオテーションの中に日付を記述します。
4月1日以上としましょう。
実行してみましょう。
これは条件があう行についてはTrue、あわないものについてはFalseが返ってきます。
df_actual[‘売上日’]<“2020-07-01”
次は7月1日未満を同じように書いてみましょう。
実行してみましょう。
最初の方がTrue、あとの方はFalseなので、どうやら正しそうです。
2つの条件のかつの条件、つまりandの条件でTrueとFalseを返したい場合は、それぞれの条件を丸括弧でくくって、andで結んであげます。
どうやら正しそうです。
(df_actual[‘売上日’]>=”2020-04-01″) & (df_actual[‘売上日’]<“2020-07-01”)
df_actual[(df_actual[‘売上日’]>=”2020-04-01″) & (df_actual[‘売上日’]<“2020-07-01”)]
このTrue or Falseのブール値をデータフレームの中にいれてあげればオッケーです。
やってみましょう。
4月1日から7月1日未満のデータ抽出できたようです。
ではどうやらエクセルと一致しているようです。
正しく抽出できたようですね。
df_actual[[‘氏名’,’商品分類’,’売上金額(円)’]].groupby([‘氏名’,’商品分類’]).sum()
氏名に加えて、商品分類ごとに集計したい場合は、最初のデータフレームを作るところで、商品分類を追加します。
そして、氏名と商品分類が一緒のものをグルーピングして集計をするので、ここにも商品分類を追加します。
算出できました
df_actual[[‘氏名’,’商品分類’,’売上金額(円)’]].groupby([‘氏名’,’商品分類’]).mean()
ここまでのレッスンをお聞きになった人であれば、sumのところをmeanにすれば平均になりますし、
df_actual[[‘氏名’,’商品分類’,’売上金額(円)’]].groupby([‘氏名’,’商品分類’]).count()
countにすれば数を数えてくれます。
df_actual[[‘氏名’,’商品分類’,’売上金額(円)’]].groupby([‘氏名’,’商品分類’]).max()
maxにしたらグルーピングごとの最大値を求めてくれます。
df_actual[[‘氏名’,’商品分類’,’売上金額(円)’]].groupby([‘氏名’,’商品分類’]).min()
minについても同様です。
便利ですよね。
このgroupbyについてもPandas超入門コースで詳しく説明する予定です。チャンネル登録をしてお待ちいただけましたら幸いです。
matplotlibとseaborn
最後にグラフの作成方法についてみていきます。
「Pythonで株価のデータ分析をしてみよう」の動画で、Pythonでグラフを作るためのライブラリであるmatplotlibをご紹介しました。
ここでは、matplotlibをseabornについて紹介いたします。
seabornもmatplotlibと同様にグラフを作るためのライブラリです。
seabornは、matplotlibをベースに作られており、美しい配色や形のグラフを作ることが可能です。
!pip install sns
まずpipでインストールしましょう。
これでseabornのインストールの完了です。
matplotlibとseabornのインポートの設定
まずMatplotlibをインポートしましょう。
Matplotlibの中のpyplotモジュールをインポートしましょう。
これもasをつけてpltという名前で使えるようにしましょう
そして、jupyterlab上で作成したグラフを表示できるように%matplotlib inlineと記述しましょう。
また、seabornをsnsという名前で使えるようにしてインポートをしましょう。
グラフにするデータと日本語フォントについて
df_sales_pivot=df_employee_actual.pivot_table(index=’所属支店’, columns=’商品分類’, values=’売上金額(円)’, aggfunc=’sum’)
データは、所属支店ごとの商品分類の合計のピボットテーブル を使います。
df_sales_pivotという変数に代入しましょう。
df_sales_pivot.head()
head関数で上位5件を表示させてみましょう。
カラム名、インデックス名を一気に変更する方法
df_sales_pivot.index=[‘osaka’,’sapporo’,’tokyo’,’yokohama’,’fukuoka’]
df_sales_pivot.columns=[‘outer’,’tops’,’bottoms’]
所属支店は漢字。カラム名は片仮名ですね。
可視化の場合、日本語のカラム名だと、設定が少し面倒です。
したがって、この動画では、カラム名をアルファベットに変更して進めていきます。
日本語の設定方法については、matplotlibの入門コースで解説をしますので、そちらをご確認ください。
先ほど見た、renameではなく、カラム名とインデックス名を全部まとめて変えましょう。
spmp場合は、データフレーム名にドット、インデックス名。これにイコールでカラム名の3つ分の値をリストで渡します。
カラム名についても同様の方法で一気に変更できます。
df_sales_pivot
表示させてみましょう。
カラム名とインデックス名が変更されています。
seabornによる棒グラフ
# Set up the matplotlib figure
plt.figure(figsize=(10, 6))
# Generate some sequential data
v = df_sales_pivot.index
y = df_sales_pivot[‘outer’]
sns.barplot(x, y, palette=”rocket”)
まず、seabornで棒グラフを作ってみましょう。
snsと書いてbarplot。barplotは棒グラフになります。丸括弧の一番最初に引数に棒グラフの名前、2番目の引数に棒グラフの高さの部分になる値を記述します。
実行してみましょう。
グラフ化することができました。
グラフのサイズを大きくしましょう。
plt.figureと書いて丸括弧。丸括弧の中にfigsize=と書きます。
今回は10と6にしましょう。
10が横の長さ、6が縦の長さです。
実行してみます。
グラフが大きくなりました。
seabornによるヒートマップ
sns.heatmap(df_sales_pivot)
次にヒートマットを書いてみましょう。
ヒートマップは、値が大きくなると色が濃くなり、どこが大きいのか視覚的に認識しやすくなります。
figsizeで7と7にしましょう。
次に色の設定をします。
ここも少しややこしいので、RGB16進数カラーコードで色を渡して変更するのだと思ってください。
では、pivotになっている状態のデータを渡して、色の設定をします。
実行します。
ヒートマップを簡単に描くことができました。
seabornによる円グラフ
最後に円グラフについてみてみましょう。
グラフのサイズは、figsizeで7と7にしましょう。
set_paletteで色の設定をします。今回はSet2という配色にしましょう。
円グラフはpieを使います。
円グラフにしたい値を第一引数で渡して、ラベルという引数にラベルになる値を渡します。
実行してみます。
円グラフができました。
グラフをpngファイルへ書き出し
最後に、グラフはpngファイルとして書き出すことができます。
書き出し方法は簡単です。pltと書いてドット。savefigと書いて、丸括弧の中にファイル名を記述します。今回はgraph.pngとしましょう。dpiの部分には画像の解像度をしていします。
これで終わりです。
実行します。画像が書き出されました。pngファイルを開いてみます。できあがっていますね。
こういった画像ファイルを書き出して、pythonを使ってエクセルのワークシートに貼り付けることができます。
したがって、ピボットテーブル などのデータの横に、グラフを貼り付ければレポートの完成ですね。
この一連の流れをプログラムで書いて、pyファイルにすれば、Excelのデータ取得から集計、グラフ作成まで自動でPythonやってくれることになります。
pyファイルでの実行方法については面倒なExcel作業をPythonで自動化しよう第一弾で実践していますが、
第三弾のレッスンで予測分析、グラフ作成などのレポート作成の自動化の具体的なやり方を解説する予定です。
気になる方は次回の動画をご覧いただければと思います。
みなさん、いかがでしたでしょうか?
Excelの関数、機能、グラフ作成を、Pythonでやる方法と、Pythonならではの便利な点の紹介です。
最後の1点だけ。Pythonを中心に説明はしてきましたが、Pythonの方が優れているというわけではないと私は考えます。
エクセルは、マウスで直接、表にデータを入力したり、変更したりできます。エクセルには手軽さがあります。
また、上司や取引先など、相手がエクセルであることが多いのではないでしょうか。
一方、Pythonには複雑なことができますし、自動化することができます。
データ分析、データ可視化、予測や人工知能開発、あるいはWebアプリケーション開発など。本当に色々なことができます。
用途に応じて使い分けることをおすすめします。
Pythonによるエクセル操作については、まだまだご紹介したいことがありますので、Pandas超入門やこの面倒なExcel作業をPythonで自動化しようシリーズにて紹介していきたいと思います。
一方、エクセルは、プログラマであってもノンプログラマであっても、社会人のマストツールです。エクセルについての動画も今後アップしていく予定です。
チャンネル登録がまだの方は、ぜひしていただけますと今後の動画作成の励みになります。
それでは、長い時間ご視聴ありがとうございました。次のレッスンでお会いしましょう