Up

グラフ描画(CSVファイル入力)

 

ヒストグラム棒グラフ折れ線グ箱図ヴァイオリン図散布図の描画スクリプト例を用意した。

ファイル入力はCSVファイルからの読み込みを採用しているが、CSVファイルはExcelなどの表計算ソフトで簡単に作成できる。CSVファイルについての簡単な説明のウェブサイトを用意している。

描画において日本語を用いるときは、ライブラリjapanize_matplotlibを用いている。インストールは、次のコマンドで行った。

 

pip install japanize_matplotlib

 

描画スクリプト例のファイルを圧縮ファイルpycsvfiles.zipとしてまとめた。ダウンロード・解凍して、自由に利用されたい。圧縮ファイルには、Jupyter Notebook用のファイルも含まれている。

なお、<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で、グラフ描画の説明を行っている。

 

 

 

ヒストグラム

 

A.1のテストの点数のデータの分布をヒストグラムで描いてみる。

 

A.1 テストの点数

66

59

62

64

63

68

65

59

68

64

65

51

67

64

83

59

61

62

57

72

65

64

54

60

53

65

67

60

53

79

74

53

61

68

75

50

57

55

66

56

55

61

70

71

49

69

70

80

73

72

 

A.1のデータを、図A.1のようにCSVファイルScores.csvとして用意した。1行目に項目(変数名)を書き、その下にデータ値を書いていく。

A.1

 

ヒストグラムを描くために、リストA.1のスクリプトを実行する。

入力データファイル名の設定が求められる。

 

Fale Name(*.csv) =

 

A.1のファイル名Scores.csvを設定する。入力データファイルはスクリプトファイルと同じフォルダ内にあるものとする。異なるフォルダに置かれているときは、入力ファイルのフォルダ名の指定が必要である。

 

Fale Name(*.csv) = Scores.csv

 

ファイルが読み込まれて、変数項目名のリストが表示される。項目名は、「'」で挟まれて表示されている。

 

Fale Name(*.csv) = Scores.csv

['点数']

項目名 =

 

ヒストグラムを描く項目名(変数名)の設定が求められているので、項目名を「'」を外して設定する

 

Fale Name(*.csv) = Scores.csv

['点数']

項目名 = 点数

 

項目名を設定すると、データが読み込まれて、ヒストグラムが描かれる(図A.2)。

A.2

 

 

 

 

A.3のファイルは、気象庁のウエブサイトに公開されているデータから、20247月の東京都の日ごとの最高気温と最低気温のデータを読み取りCSVファイルTempHL.csvとしたものである。

A.3

 

A.3のファイルTempHL.csvを読み込み、最高気温を最低気温のヒストグラムを描くスクリプトをリストA.2のように作成した。

リストA.2のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name(*.csv) =

 

A.3のファイル名TempHL.csvを設定する。

 

File Name(*.csv) = TempHL.csv

 

ファイル名を設定すると、読み込まれて、ヒストグラムを描く項目数の設定が求められる。

 

File Name(*.csv) = TempHL.csv

読み込み項目数 =

 

読み込み項目数を設定すると、次に項目名の設定がもめられる。

項目名のリストは、項目名を「'」で囲んで表示されているが、項目名の設定は「'」を外して行う。

 

File Name(*.csv) = TempHL.csv

読み込み項目数 = 2

['2024年7月東京' '最高気温' '最低気温']

項目1 =

 

1つの項目名の設定を行うと、次の項目名の設定が求められるので、順番に設定していく。

 

読み込み項目数 = 2

['2024年7月東京' '最高気温' '最低気温']

項目1 = 最高気温

項目2 = 最低気温

 

項目名の設定が終わると、グラフのタイトル部(グラフ上部)に表示する文字列の設定が求められる。

 

読み込み項目数 = 2

['2024年7月東京' '最高気温' '最低気温']

項目1 = 最高気温

項目2 = 最低気温

タイトル =

 

タイトル部の文字列の設定が終わると、次に、X軸の下に表示する文字列の設定が求められる。

 

タイトル = 東京都20247月の気温

横軸の変数名 =

 

X軸の下に表示する文字列を設定する。

 

タイトル = 東京都20247月の気温

横軸の変数名 = 気温℃

 

横軸の変数名に表示する文字列を設定すると、図A.4のようなグラフが描かれる。

A.4

 

 

リストA.3のスクリプトも複数の項目のヒストグラムを描くもので、使い方もリストA.2と同じであるが、グラフは図A.5に示すものが描かれる。

A.5

 

 

 

 

リストA.1 ヒストグラム

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib        #   日本語表示用

 

fin_nm = input('Fale Name(*.csv) = ')

d_f = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_f.keys().values)

var_nm = input('項目名 = ')

data = d_f[var_nm].values

data = data[np.isnan(data)==False]

 

plt.hist(data,

         edgecolor='k',            #     エッジの色

         alpha=0.5)                #     色のα値(透明度)

plt.xlabel(var_nm, fontsize=16)

plt.ylabel('度数', fontsize=16)

plt.title('ヒストグラム', fontsize=18)

plt.savefig('Hist.png')             #     画像の保存

plt.show()

 

 

 

リストA.2 ヒストグラム(複数シフト)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name(*.csv) = ')

dframe = pd.read_csv(fin_nm, encoding='shift-jis')

n_var = int(input('読み込み項目数 = '))

List_var = []

data_vars = []

print(dframe.keys().values)

for i in range(n_var):

    v = input(f'項目{i+1} = ')

    List_var.append(v)

    data = dframe[v].values

    data = data[np.isnan(data)==False]

    data_vars.append(data)

 

h_title = input('タイトル = ')

x_label = input('横軸の変数名 = ')

 

plt.hist(data_vars, label=List_var)

plt.title(h_title, fontsize=16)

plt.xlabel(x_label, fontsize= 14)

plt.ylabel('度数', fontsize=14)

plt.legend()

plt.tight_layout()

plt.show()

 

 

 

リストA.3 ヒストグラム(複数重ね)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name(*.csv) = ')

dframe = pd.read_csv(fin_nm, encoding='shift-jis')

n_var = int(input('読み込み項目数 = '))

List_var = []

data_vars = []

print(dframe.keys().values)

for i in range(n_var):

    v = input(f'項目{i+1} = ')

    List_var.append(v)

    data = dframe[v].values

    data_vars.append(data)

 

h_title = input('タイトル = ')

x_label = input('横軸の変数名 = ')

 

for d_var, L_var in zip(data_vars, List_var):

    plt.hist(d_var, label=L_var, alpha=0.5, edgecolor='k')

plt.title(h_title, fontsize=16)

plt.xlabel(x_label, fontsize= 14)

plt.ylabel('度数', fontsize=14)

plt.legend()

plt.tight_layout()

plt.show()

 

 

 

 

棒グラフ

 

 

平成7年の国勢調査のデータを表B.1に示す。

 

B.1 平成7年国勢調査

地域

東京都

鹿児島県

鳥取県

世田谷区

人口(万人)

1177.4

179.4

61.5

78.1

 

 

B.1のデータを分析するために、図B.1に示すCSVファイルdatasimplebar.csvを作成した。

B.1

 

1行目にカテゴリ名、2行目にカテゴリ名に対応するデータ値が記入されている。第1列目は、1行目にグラフのタイトル部に表示する文字列、2行目に縦軸のラベル部に表示する文字列を設定している。図B.1の形式のCSVファイルを分析するスクリプトをリストB.1のように用意した。

リストB.1のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name(*.csv) =

 

例として、図B.1のファイル名を設定する。入力データファイルは、スクリプトファイルと同じフォルダに置かれているものとする。フォルダが異なるときは、フォルダ名の設定も必要である。

 

File Name(*.csv) = datasimplebar.csv

 

入力データファイr名を設定すると、読み込まれて、図B.2のグラフが表示される。

B.2

 

 

棒グラフにエラーバーを表示する例を考える。

 

気象庁のウエブサイトに公開されているデータから、20247月の東京都の日ごとの最高気温と最低気温の平均値および四分位数を求めると表B.2のようになった。

 

B.2 東京都の20247月の日ごとの最高気温と最低気温の四分位数と平均値

(気象庁のウェブサイトのデータから算出)

 

最高気温

最低気温

第1四分位数

31.35

24.0

平均値

33.47

24.99

第3四分位数

35.6

26.15

 

B.2のデータのCSV形式のファイルdatastatsbar.csvを図B.3のように作成した。

B.3

 

第1行目に、第1列目にグラフのタイトル部に表示される文字列を、第2列以降に棒グラフを描く項目名を並べて書く。図B.3のばあいは、2項目であるが、3項目以上でもよい。

2行目に第1四分位数、3行目に平均値、4行目に第3四分位数を各変数(項目)の下に書く。平均値は中央値でもよい。第1四分位数と第3四分位数は、平均値から標準偏差値を減じた値と加えた値であってもよい。

B.3の形式のファイルを分析するために、リストB.2に示すスクリプトを作成した。

リストB.2のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name =

 

例として、図B.3のファイル名datastatsbar.csvを設定する。

 

File Name = datastatsbar.csv

 

入力ファイル名を設定すると、ファイルが読み込まれて、図B.4のグラフが表示される。

B.4

 

 

 

 

リストB.1  棒グラフの作成

 

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

import japanize_matplotlib

 

fin_nm = input('File Name(*.csv) = ') 

data_frm = pd.read_csv(fin_nm, encoding='shift-jis')

L_cat = data_frm.keys().values[1:]

L_values = data_frm.values[0][1:]

 

plt.title(data_frm.keys().values[0], fontsize=20)

plt.bar(L_cat, L_values)

plt.xticks(fontsize=18)

plt.yticks(fontsize=14)

plt.ylabel(data_frm.values[0][0], fontsize=20)

plt.tight_layout()            #      グラフの表示項目が重ならないように調整

plt.show()

 

 

 

 

リストB.2 棒グラフの作成(エラーバー付き)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name = ')

data_frm = pd.read_csv(fin_nm, encoding='shift-jis')

L_cat = data_frm.keys().values[1:]

L_q1 = data_frm.values[0][1:]

L_mean = data_frm.values[1][1:]

L_q3 = data_frm.values[2][1:]

 

fig, ax = plt.subplots(1,1)                   #   棒グラフ内に文字列を書き込むためにaxを設定

bc=plt.bar(L_cat, L_mean,                     #   横軸と縦軸の値

           yerr=[L_mean-L_q1, L_q3-L_mean],   #   エラーバー値、Meansからの距離(正値)

           ecolor='r', capsize=25,            #   エラーバーの色とキャップサイズ

           error_kw={'elinewidth':15},        #   エラーバーの太さ

           alpha=0.7)                         #   棒グラフの透明度

#    棒グラフ内に文字列を書き込む

ax.bar_label(bc,labels=[f'{v:.1f}' for v in L_mean],

             label_type='center', fontsize=20)

plt.xticks(fontsize=20)

plt.yticks(fontsize=15)

plt.title(data_frm.keys()[0], fontsize=20)

plt.tight_layout()

plt.show()

 

 

 

 

折れ線グラフ

 

 

東京都の人口推移は表C.1に示すようになっている。

 

C.1 東京都の人口の推移。

東京都ホームページ(平成18年11月25日)による。

 

年次

人口(人)

1880

959,596

1900

2,014,100

1920

3,699,428

1940

7,354,971

1960

9,683,802

1980

11,618,281

2000

12,064,101

 

 

C.1のデータを分析するために図C.1CSVファイルを作成した。

C.1

 

1行目に項目名を書き、その下にデータ値を書いている。人口のデータを万人を単位としているのは、グラフを描いたときの縦軸の数値を分かり易くするためである。

C.1のファイルTokyoPop.csvを分析するスクリプトをリストC.1のように用意した。

リストC.1のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name =

 

例として、図C.1のファイル名を設定する。

 

File Name = TokyoPop.csv

 

ファイル名を設定すると、ファイルが読み込まれ、項目名のリストが表示される。項目名は、「'」で囲まれて表示される。

 

File Name = TokyoPop.csv

['年次' '人口(人)' '人口(万人)']

項目 =

 

折れ線を描く項目として、例えば「人口(万人)」を設定する。

 

['年次' '人口(人)' '人口(万人)']

項目 = 人口(万人)

 

項目を設定すると、次に横軸の変数の設定が求められる。

 

['年次' '人口(人)' '人口(万人)']

項目 = 人口(万人)

横軸 =

 

「年次」を選ぶ。

 

['年次' '人口(人)' '人口(万人)']

項目 = 人口(万人)

横軸 = 年次

 

横軸の変数(項目)を設定すると、次に、グラフのタイトルに表示する文字列の設定が求められる。

 

['年次' '人口(人)' '人口(万人)']

項目 = 人口(万人)

横軸 = 年次

タイトル =

 

例えば、「東京都の人口推移」と設定する。

 

['年次' '人口(人)' '人口(万人)']

項目 = 人口(万人)

横軸 = 年次

タイトル = 東京都の人口推移

 

タイトルを設定すると、グラフが表示される(図C.2)。

 

C.2

 

 

複数の折れ線を描く例として、最高気温と最低気温のグラフを描いてみる。

C.3CSVファイルTokyoTempHL.csvは、気象庁のウエブサイトに公開されているデータから、20247月の東京都の日ごとの最高気温と最低気温のデータを読み取りCSVファイルとしたものである。

C.2

 

1行目に項目名を並べ、その下にデータ値を書いている。図C.2の形式のCSVファイルを読み込み、分析するスクリプトをリストC.2のように用意した。

リストC.2のスクリプトを実行すると、入力ファイル名の設定が求められる。

 

File Name =

 

例として、図C.2のファイル名TokyoTempHL.csvを設定する。

 

File Name = TokyoTempHL.csv

 

ファイル名を設定すると読み込まれて、項目名のリストが表示される。項目名は「'」で囲まれて表示される。

 

File Name = TokyoTempHL.csv

['' '最高気温' '最低気温']

横軸 =

 

横軸の項目名を設定すると、項目数(折れ線の本数)の設定が求められる。

 

File Name = TokyoTempHL.csv

['' '最高気温' '最低気温']

横軸 =

項目数 =

 

今の場合、最高気温と最低気温の2本であるので、2を設定する。

 

File Name = TokyoTempHL.csv

['' '最高気温' '最低気温']

横軸 =

項目数 = 2

 

項目数を設定すると、ぞれぞれの項目名の設定が求められるので、設定していく。

 

項目数 = 2

項目1 = 最高気温

項目2 = 最低気温

 

項目名の設定が終わると、次にグラフのタイトル部に表示する文字列の設定が求められるので、適当なものを設定する。

 

項目数 = 2

項目1 = 最高気温

項目2 = 最低気温

タイトル = 東京都2024年7月の気温

 

タイトル用文字列を設定すると、次に縦軸のラベルの設定が求められる。

 

項目数 = 2

項目1 = 最高気温

項目2 = 最低気温

タイトル = 東京都2024年7月の気温

縦軸のラベル = 気温(

 

縦軸のラベル用文字列を設定すると、グラフが表示される(図C.3)。

C.3

 

 

 

リストC.1 折れ線グラフ

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name = ')

data_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(data_frm.keys().values)

var_nm = input('項目 = ')

data = data_frm[var_nm].values

x_nm = input('横軸 = ')

X = data_frm[x_nm].values

 

grf_title = input('タイトル = ')

 

plt.title(grf_title, fontsize=16)

plt.plot(X, data, 'b-')

plt.xlabel(x_nm, fontsize=14)

plt.ylabel(var_nm, fontsize=14)

plt.tight_layout()

plt.show()

 

 

 

リストC.2 折れ線グラフ(複線)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name = ')

dframe = pd.read_csv(fin_nm, encoding='shift-jis')

print(dframe.keys().values)

x_name = input('横軸 = ')

X = dframe[x_name].values

N = int(input('項目数 = '))

Y_values = []

Y_names = []

for i in range(N):

    v = input(f'項目{i+1} = ')

    Y_names.append(v)

    Y_values.append(dframe[v].values)

 

grf_title = input('タイトル = ')

y_label = input('縦軸のラベル = ')

 

plt.title(grf_title, fontsize=16)

for i in range(N):

    plt.plot(X, Y_values[i], label=Y_names[i])

plt.xlabel(dframe.keys().values[0], fontsize=16)

plt.ylabel(y_label, fontsize=14)

plt.legend()

plt.tight_layout()

plt.show()

 

 

 

 

箱図

 

D.1のデータの箱図を描く。

D.1 グループAのデータ

65    67    67    67    60    65    56    61    67    74

73    59    72    69    69    82    75    67    65    69

 

D.1のデータのCSVファイルDataA.csvを図D.1のように用意した。

D.1

 

1行目に項目名を書き、その下にデータ値を書いていく。

D.1の形式のCSVファイルを読み込んで分析するスクリプトをリストD.1のように用意した。

リストD.1のスクリプトを実行すると、ファイル名の設定が求められる。

 

File Name(*.csv) =

 

例として、図D.1のファイルDataA.csv名を設定する。

 

File Name(*.csv) = DataA.csv

 

ファイル名を設定すると、ファイルが読み込まれて項目名のリストが表示される。項目名は、「'」で挟まれて表示されている。設定は、「'」を外して設定する。

 

File Name(*.csv) = DataA.csv

['グループA']

項目名 =

 

箱図を描く項目の名前を設定する。

 

File Name(*.csv) = DataA.csv

['グループA']

項目名 = グループA

 

項目名を設定すると、箱図が描かれる。

D.2

 

 

D.2の箱図、縦に描かれているが、横に描くスクリプトをリストD.2として用意した。

リストD.2の使い方は、リストD.1と同様である。リストD.2に上の操作で箱図を描くと、図D.3を得る。

D.3

 

 

複数の箱図を描くスクリプトをリストD.3として用意した。

データファイルの例として、図D.4のものDataAB.csvを用意した。

D.4

 

1行目に項目名を書き、その下にデータ値が書かれている。

リストD.3のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name =

 

例として、図D.4のファイル名DataAB.csvを設定する。

 

File Name = DataAB.csv

 

ファイル名を設定すると、項目名のリストが表示され、箱図に描く項目数の設定が求められる。項目名は、「'」で挟んだ形で表示されている。

 

File Name = DataAB.csv

['グループA' 'グループB']

項目数 =

 

項目数を設定すると、箱図を描く項目の名前の設定が求められる。

 

File Name = DataAB.csv

['グループA' 'グループB']

項目数 = 2

項目1 =

 

項目名は、「'」を外して設定する。

項目名は、順番に設定が求められる。

 

['グループA' 'グループB']

項目数 = 2

項目1 = グループA

項目2 = グループB

 

項目名の設定が終わると、箱図が表示される(図D.5)。

 

D.5

 

 

箱を横に描くスクリプトを、リストD.4のように作成した。使用法は、上のリストD.3のスクリプトと同様である。

リストD.4のスクリプトで、上のリストD.3の場合と同様にファイル入力などを行うと、図D.6のグラフが描かれる。

D.6

 

 

 

 

リストD.1 箱図(縦)

 

import pandas as pd

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name(*.csv) = ')  #'DataA.csv'

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

itm_name = input('項目名 = ')

itm_values = d_frm[itm_name].values

 

plt.title(f'箱図({itm_name}', fontsize=20)

sb.boxplot(itm_values, orient = 'v')

plt.xticks(fontsize=14)

plt.show()

 

 

 

リストD.2 箱図(横)

 

import pandas as pd

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

itm_name = input('項目名 = ')

itm_values = d_frm[itm_name].values

 

plt.title(f'箱図({itm_name}', fontsize=20)

sb.boxplot(itm_values, orient = 'h')

plt.xticks(fontsize=14)

plt.show()

 

 

 

 

リストD.3 箱図(複数縦)

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

sb.boxplot(dct)

plt.xticks(fontsize=16)

plt.show()

 

 

 

リストD.4 箱図(複数横)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name(*.csv) = ')# 'DataAB.csv'

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

sb.boxplot(dct, orient='h')

plt.yticks(fontsize=16)

plt.tight_layout()

plt.show()

 

 

 

 

 

ヴァイオリン図

 

 

E.1のデータのヴァイオリン図を描く。

E.1 グループAのデータ

65    67    67    67    60    65    56    61    67    74

73    59    72    69    69    82    75    67    65    69

 

E.1CSVファイルDataA.csvを図E.1のように作成した。1行目に項目名を書き、その下にデータ値を書いていく。

E.1 (仮想データ)

 

E.1の形式のファイルを読み込み、ヴァイオリン図を描くスクリプトをストE.1のように作成した。

リストE.1のスクリプトを実行すると、入力ファイル名の設定が求められる。

 

File Name =

 

例として、図E.1のファイル名DataA.csvを設定する。

 

File Name = DataA.csv

 

ファイr名が読み込まれると、データの項目名のリストが表示される。項目名は、「'」で囲んで表示される。

 

File Name = DataA.csv

['グループA']

項目名 =

 

項目名は、「'」を取って設定する。

 

File Name = DataA.csv

['グループA']

項目名 = グループA

 

項目名を設定すると、グラフが表示される(図E.2)。

 

E.2

 

ヴァイオリンを横向きに描くスクリプトも、リストE.2として用意した。使用方法は、リストE.1のスクリプトと同じである。

リストE.2のスクリプトを、リストE.1のスクリプトと同様に使用すると、図E.3を得る。

E.3

 

 

ヴァイオリン図に細片図を重ねるスクリプトをリストE.3のように作成した。

リストE.3の使用方法は、上のリストE.1などと同じである。

リストE.1のスクリプトの使用方法の説明と同様の操作で、図E.4を得る。

E.4

 

 

横向きのグラフを描画するスクリプトとして、リストE.4を作成した。

リストE.3のスクリプトと同じ操作で、図E.5を得る。

E.5

 

 

 

2つ以上の項目のグラフを描く例を示すために、図E.6CSVファイルDataAB.csvを用意した。

E.6

 

1行目に項目名を書き、その下にデータ値を書いている。

2個以上の項目のヴァイオリン図と細片図を重ねて描くスクリプトをリストE.5のように用意した。

リストE.5のスクリプトを実行すると、入力ファイル名の設定が求められる。

 

File Name =

 

例として、図E.6のファイル名DataAB.csvを設定する。

 

File Name = DataAB.csv

 

入力データファイル名を設定すると、ファイルが読み込まれて、項目名のリストが表示される。項目名は、「'」で挟んで表示される。

 

File Name = DataAB.csv

['グループA' 'グループB']

項目数 =

 

表示する項目数の設定が求められているので、設定する。

 

File Name = DataAB.csv

['グループA' 'グループB']

項目数 = 2

 

項目数を設定すると、グラフで表示する項目の名前の設定が求められる。

 

['グループA' 'グループB']

項目数 = 2

項目1 =

 

項目名を設定していく。

 

['グループA' 'グループB']

項目数 = 2

項目1 = グループA

項目2 = グループB

 

項目名の設定が終わると、次に、グラフのタイトル部に表示する文字列の設定が求められる。

 

['グループA' 'グループB']

項目数 = 2

項目1 = グループA

項目2 = グループB

タイトル = サンプル

 

タイトルの設定が終わると、グラフが表示される(図E.7)。

E.7

 

 

グラフを横向きに描くスクリプトを、リストE.6のように用意した。

リストE.6のスクリプトの使用法は、上のリストE.5の場合と同じである。

リストE.6を上の場合のように使用すると、図E.8を得る。

E.8

 

 

3種類のグラフ、箱図、ヴァイオリン図、細片図、を重ねて描くスクリプトをリストE.7のように作成した。使用法は、リストE.5のスクリプトと同じである。

リストE.7のスクリプトを、上のリストE.5のリストの場合と同様に操作すると、図E.9のグラフを得る。

E.9

 

 

リストE.8のスクリプトは、横向きのグラフを描くものである。

リストE.7のスクリプトと同様の操作で、図E.10のグラフを得る。

E.10

 

 

 

 

リストE.1 ヴァイオリン図(縦)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

v_nm = input('項目名 = ')

v = d_frm[v_nm].values

v = v[np.isnan(v)==False]

plt.title(f'{v_nm}', fontsize=20)

sb.violinplot(v)

plt.show()

 

 

 

 

リストE.2 ヴァイオリン図(横)

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

v_nm = input('項目名 = ')

v = d_frm[v_nm].values

v = v[np.isnan(v)==False]

plt.title(f'{v_nm}', fontsize=20)

sb.violinplot(v, orient='h')

plt.show()

 

 

 

リストE.3 ヴァイオリン図と細片図(縦)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

v_nm = input('項目名 = ')

v = d_frm[v_nm].values

v = v[np.isnan(v)==False]

plt.title(f'{v_nm}', fontsize=20)

sb.violinplot(v, alpha=0.5, edgecolor='k', linewidth=2)

sb.stripplot(v, color = 'm')

plt.show()

 

 

 

 

リストE.4 ヴァイオリン図と細片図(横)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

v_nm = input('項目名 = ')

v = d_frm[v_nm].values

v = v[np.isnan(v)==False]

plt.title(f'{v_nm}', fontsize=20)

sb.violinplot(v, orient='h', alpha=0.5, edgecolor='k', linewidth=2)

sb.stripplot(v, orient='h', color = 'm')

plt.show()

 

 

 

 

リストE.5 ヴァイオリン図と細片図(複数項目縦)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

g_title = input('タイトル = ')

plt.title(g_title, fontsize=20)

sb.violinplot(data=dct, fill=False, linewidth=2)

sb.stripplot(data=dct)

plt.xticks(fontsize=20)

plt.tight_layout()

plt.show()

 

 

 

 

リストE.6 ヴァイオリン図と細片図(複数項目横)

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

g_title = input('タイトル = ')

plt.title(g_title, fontsize=20)

sb.violinplot(data=dct, orient='h', fill=False, linewidth=2)

sb.stripplot(data=dct, orient='h')

plt.xticks(fontsize=20)

plt.tight_layout()

plt.show()

 

 

 

 

リストE.7 ヴァイオリン図と細片図と箱図(複数項目縦)

 

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

import pandas as pd

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

g_title = input('タイトル = ')

plt.title(g_title, fontsize=20)

sb.violinplot(data=dct, orient = 'v', alpha=0.3)

sb.stripplot(data=dct, orient = 'v',

             color='none', edgecolor='r', linewidth=2)

sb.boxplot(data=dct, orient = 'v',

           showfliers=False, fill=False, color='g', linewidth=2)

plt.yticks(fontsize=20)

plt.tight_layout()

plt.show()

 

 

 

 

リストE.8 ヴァイオリン図と細片図と箱図(複数項目横)

 

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

import seaborn as sb

import pandas as pd

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

N = int(input('項目数 = '))

dct = dict()

for i in range(N):

    itm = input(f'項目{i+1} = ')

    v = d_frm[itm].values

    v = v[np.isnan(v)==False]

    dct[itm] = v

 

g_title = input('タイトル = ')

plt.title(g_title, fontsize=20)

sb.violinplot(data=dct, orient = 'h', alpha=0.3)

sb.stripplot(data=dct, orient = 'h',

             color='none', edgecolor='r', linewidth=2)

sb.boxplot(data=dct, orient = 'h',

           showfliers=False, fill=False, color='g', linewidth=2)

plt.yticks(fontsize=20)

plt.tight_layout()

plt.show()

 

 

 

 

散布図

 

国語と英語の得点が表F.1のようであったとする。

F.1 2教科[国語、英語]のスコア(仮想データ)

[79, 72]    [77, 70]    [74, 75]    [53, 44]    [76, 52]

[68, 60]    [96, 96]    [85, 71]    [74, 49]    [93, 80]

[54, 55]    [86, 70]    [89, 96]    [87, 87]    [81, 81]

[84, 85]    [78, 64]    [76, 53]    [54, 57]    [75, 60]

 

この散布図を描くためのCSVファイルDataSubjs.csvを図F.1のように用意した。

F.1

 

1行目に変数項目名を書き、その下にデータ値を書いている。

F.1の形式のファイルデータに対して、散布図を散布図を描くスクリプトをリストF.1のように用意した。

リストF.1のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name =

 

例として、図F.1のファイルの名前DataSubjs.csvを設定する。

 

File Name = DataSubjs.csv

 

入力データファイル名を設定すると、ファイルが読み込まれて、変数項目名のリストが表示される。項目名は、「」で囲まれて表示される。

 

File Name = DataSubjs.csv

['国語' '英語']

X variable =

 

変数X(横軸)の項目名の設定が求められているので、設定する。変数Xを設定すると、次に変数Y(縦軸)の項目名の設定が求められる。

 

File Name = DataSubjs.csv

['国語' '英語']

X variable = 国語

Y variable = 英語

 

変数Yの項目名を設定すると、設定した変数で散布図が描かれる(図F.2)。

F.2

 

 

散布図とともにヒストグラムを描くスクリプトをリストF.2のように作成した。

入力データデータファイルを図F.3のように用意した。気象庁のウエブサイトに公開されているデータから、20247月の東京都の日ごとの最高気温と最低気温のデータを読み取りCSVファイルTokyoTempHL.csvとしたものである。

F.3

 

スクリプトは、リストF.2に示すように作成した。

リストF.2のスクリプトを実行すると、入力データファイル名の設定が求められる。

 

File Name =

 

例として、図F.3のファイル名TokyoTempHL.csvを設定する。

 

File Name = TokyoTempHL.csv

 

ファイル名が設定されると、ファイルが読み込まれて、変数(項目)名のリストが表示される。項目名は、「'」で囲まれて表示される。

 

File Name = TokyoTempHL.csv

['' '最高気温' '最低気温']

X variable =

 

まず、X軸(横軸)の変数名の設定が求められている。X軸の変数名を設定すると、次にY軸の変数名の設定が求められる。

 

File Name = TokyoTempHL.csv

['' '最高気温' '最低気温']

X variable = 最低気温

Y variable = 最高気温

 

Y軸の変数を設定すると、次にグラフのタイトル部に表示する文字列の設定が求められる。適当に設定する。

 

X variable = 最低気温

Y variable = 最高気温

タイトル = 東京都20247月の気温(

 

タイトルを設定すると、グラフが描かれて表示される(図F.4)。

 

F.4

 

 

 

リストF.1 散布図を描くスクリプト

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name = ')

d_frm = pd.read_csv(fin_nm, encoding='shift-jis')

print(d_frm.keys().values)

x_nm = input('X variable = ')

y_nm = input('Y variable = ')

X = d_frm[x_nm].values

Y = d_frm[y_nm].values

 

plt.title('散布図', fontsize = 20)

plt.scatter(X, Y)

plt.xlabel(x_nm, fontsize = 16)

plt.ylabel(y_nm, fontsize = 16)

plt.show()

 

 

 

リストF.2 散布図とヒストグラムを描くスクリプト

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

fin_nm = input('File Name = ')

dframe = pd.read_csv(fin_nm, encoding='shift_jis')

print(dframe.keys().values)

x_nm = input('X variable = ')

y_nm = input('Y variable = ')

X = dframe[x_nm].values

Y = dframe[y_nm].values

g_title = input('タイトル = ')

 

#     描画画面の大きさ

fig = plt.figure(figsize=(7,7))

 

#      左下の区画: 散布図用

ax1 = plt.subplot2grid((4,4), (1,0), rowspan=3,colspan=3)

 

#      左上の区画: 最低気温のヒストグラム用

ax2 = plt.subplot2grid((4,4), (0,0), rowspan=1, colspan=3, sharex=ax1)

 

#      右下の区画: 最高気温のヒストグラム用

ax3 = plt.subplot2grid((4,4), (1,3), rowspan=3, colspan=1, sharey=ax1)

 

for x, y in zip(X, Y):

    ax1.plot(x, y, 'o', c='k', markersize=10, fillstyle='none')

ax1.grid(visible=True)

ax1.set_xlabel(x_nm, fontsize=14)

ax1.set_ylabel(y_nm, fontsize=14)

 

ax2.hist(X, color='b', alpha=0.5, edgecolor='k', label=x_nm)

ax2.legend()

 

ax3.hist(Y, color='orange', alpha=0.5,edgecolor='k',

         orientation='horizontal', label=y_nm)

ax3.legend()

 

plt.suptitle(g_title, fontsize=18)

plt.tight_layout()

plt.show()

 

 

 

 

参考文献

岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版

 

 

 

Home