平均値は同じだが、分布の異なる2系列のデータを定義する
【書式】
書式:ディクショナリ型データの作成
data={
"項目名1": [値1],
"項目名2": [値2],
"項目名3":[値3]
}
【コード】
import pandas as pd
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
# data のデータ型を確認する。
print(type(data))
print("\n")
# data をデータフレームに変換する。
df=pd.DataFrame(data)
# df の内容を確認する
print(df.head())
print("\n")
# 平均値の表示
print(df.mean())
# 平均値を別の記述で表示
print("\nインデックス毎に平均値を計算する")
print("A:",df["A"].mean())
print("B:",df["B"].mean())
【結果】
<class 'dict'>
ID A B
0 0 118 98
1 1 48 100
2 2 124 98
3 3 96 108
4 4 116 90
ID 4.5
A 100.0
B 100.0
dtype: float64
インデックス毎に平均値を計算する
A: 100.0
B: 100.0
【書式】
散布図
df.plot.scatteter()
横線を描く
plt.axhline(y=yの値,c="色")
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
df.plot.scatter(x="ID",y="A",color="b",ylim=(0,150))
plt.axhline(y=100,c="Magenta")
plt.title("Aの系列",fontsize=24)
plt.show()
df.plot.scatter(x="ID",y="B",color="b",ylim=(0,150))
plt.axhline(y=100,c="Magenta")
plt.title("Bの系列",fontsize=24)
plt.show()
【結果】
★
【書式】
必要なライブラリ:pandas
df.var()
戻り値のデータ型は float
オプションで標本分散と不変分散を設定できる。
【コード】
import pandas as pd
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
print("不偏分散")
print(df.var())
print("\n標本分散")
print(df.var(ddof=0))
【結果】
不偏分散
ID 9.166667
A 1722.666667
B 51.555556
dtype: float64
標本分散
ID 8.25
A 1550.40
B 46.40
dtype: float64
【書式】
必要なライブラリ:pandas
df.std()
戻り値のデータ型は float
オプションで標本分散と不変分散を設定できる。
【コード】
import pandas as pd
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
print("不偏標準偏差")
print(df.std())
print("\n母標準偏差")
print(df.std(ddof=0))
【結果】
不偏標準偏差
ID 3.02765
A 41.50502
B 7.18022
dtype: float64
母標準偏差
ID 2.872281
A 39.375119
B 6.811755
dtype: float64
【書式】
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
meanA=df["A"].mean()
stdA=df["A"].std()
df.plot.scatter(x="ID",y="A",color="b",ylim=(0,150))
plt.axhline(y=meanA,c="Red")
plt.axhline(y=meanA+stdA,c="g")
plt.axhline(y=meanA-stdA,c="g")
plt.title("Aの分布、平均、分散",fontsize=24)
plt.show()
meanB=df["B"].mean()
stdB=df["B"].std()
df.plot.scatter(x="ID",y="B",color="b",ylim=(0,150))
plt.axhline(y=meanB,c="Red")
plt.axhline(y=meanB+stdB,c="g")
plt.axhline(y=meanB-stdB,c="g")
plt.title("Bの分布、平均、分散",fontsize=24)
plt.show()
【結果】
補足)matplotlibで指定可能な色
一文字指定、16進数など複数の指定方法があるらしい。 ここでは、一文字指定のリストを記述しておく。
【書式】
df["列名"].plot.hist(bins=階級リスト,color="色",ylim=(最小値,最大値))
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
bins=[20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
df["A"].plot.hist(bins=bins,color="c",ylim=(0,6))
plt.title("Aの分布",fontsize=24)
plt.show()
df["B"].plot.hist(bins=bins,color="c",ylim=(0,6))
plt.title("Bの分布",fontsize=24)
plt.show()
【結果】
【書式】
グラフに縦線を描く
plt.axvline(x=xの値,c="色")
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib
data={
"ID": [0,1,2,3,4,5,6,7,8,9],
"A": [118,48,124,96,116,38,64,176,94,126],
"B":[98,100,98,108,90,104,112,96,90,104]
}
df=pd.DataFrame(data)
bins=[20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
meanA=df["A"].mean()
stdA=df["A"].std()
df["A"].plot.hist(bins=bins,color="c",ylim=(0,6))
plt.axvline(x=meanA,c="Red")
plt.axvline(x=meanA+stdA,c="g")
plt.axvline(x=meanA-stdA,c="g")
plt.title("Aの分布",fontsize=24)
plt.show()
meanB=df["B"].mean()
stdB=df["B"].std()
df["B"].plot.hist(bins=bins,color="c",ylim=(0,6))
plt.axvline(x=meanB,c="Red")
plt.axvline(x=meanB+stdB,c="g")
plt.axvline(x=meanB-stdB,c="g")
plt.title("Bの分布",fontsize=24)
plt.show()
【結果】