この記事の内容
PyWebからExcelへのアクセス方法を紹介します。
Excelの内容
次のExcelを読込みます。数学、社会、国語のテスト結果が記載されています。対象は、A,B,Cクラスのそれぞれの生徒番号1,2,3,4,5です。
PCのフォルダーに接続
Excelが保存されているフォルダーに「接続」機能を使い接続します。画面左上の「接続」をクリックするとパネルが開きます。ここでExcelが含まれるフォルダーを選択してください。
操作方法は下記の動画を参考にしてください。
Excelの内容を確認
フォルダーを開き、Excelファイルをダブルクリックします。下部にプレビューが表示されるので、クリックします。
別ウィンドウが開き内容が確認できます。
プログラムファイル作成
Excelにアクセスするプログラムを記述していきます。まず、プログラムファイルを作成します。
フォルダー内を右クリックし、「新規ファイル」を選択します。パネルが開きますので、適当なプログラム名を入力してください。
作成したファイルをダブルクリックし、開きます。
外部ライブラリ
次の外部ライブラリを利用します。
- Pandas:データ操作と分析
- matplotlib:グラフと図の描画
- seaborn:統計データの可視化
- openpyxl:Excelファイル操作
1 2 3 4 |
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import openpyxl |
初期処理
専用の日本語フォント「WebSubsetFont」を設定します。
1 |
plt.rcParams['font.family'] = 'WebSubsetFont' # 日本語フォント |
Excelファイル読み込み
Excelファイルを読込み、データフレーム化します。これで自由にデータを抽出したり、グラフ化できます。
1 2 |
# EXCELファイル読み込み df = pd.read_excel('成績.xlsx') |
各種グラフ
数学のクラス別箱ひげ図を描画します。
1 2 3 4 |
#箱ひげ plt.clf() # 前回描画のクリア sns.catplot(y='数学', data=df, kind='box', hue='クラス') display(plt,target="A-箱ひげ") |
グラフの表示は、「plt.show()」の代わりにdisplay命令を利用します。
※キーワードには英数字、ハイフン、漢字が使えます。
※キーワードの先頭文字に数字、ハイフンは使えません。
続けて、ヒストグラフ、散布図、散布図行列を描画します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#ヒストグラフ plt.clf() # 前回描画のクリア sns.displot(x="数学",data=df,stat="density", hue="クラス",multiple="stack") display(plt,target="B-ヒストグラフフ") #散布図 plt.clf() # 前回描画のクリア sns.scatterplot(x='数学', y='理科', data=df,hue='クラス') display(plt,target="D-散布図") #散布図行列 plt.clf() # 前回描画のクリア sns.pairplot(df,vars=["数学","国語","理科"],hue='クラス') display(plt,target="E-散布図行列") |
ソースコード
ここまでのソースコードを掲載します。また、Excelを含むデータのダウンロードリンクも掲載します。
※プログラムの実行は、PCモードで行ってください。(画面右上「PC」を選択)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import pandas as pd import openpyxl import matplotlib.pyplot as plt import seaborn as sns plt.rcParams['font.family'] = 'WebSubsetFont' # 日本語フォント # EXCELファイル読み込み df = pd.read_excel('成績.xlsx') #箱ひげ plt.clf() # 前回描画のクリア sns.catplot(y='数学', data=df, kind='box', hue='クラス') display(plt,target="A-箱ひげ") #ヒストグラフ plt.clf() # 前回描画のクリア sns.displot(x="数学",data=df,stat="density", hue="クラス",multiple="stack") display(plt,target="B-ヒストグラフフ") #散布図 plt.clf() # 前回描画のクリア sns.scatterplot(x='数学', y='理科', data=df,hue='クラス') display(plt,target="D-散布図") #散布図行列 plt.clf() # 前回描画のクリア sns.pairplot(df,vars=["数学","国語","理科"],hue='クラス') display(plt,target="E-散布図行列") |