knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

分散、標準偏差、要約統計量

index:

必要なimport

#
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

import matplotlib.pyplot as plt
import matplotlib as mpl

サンプルのデータ: 特定に抽出した人物のサンプル。データ。
=>アンケート値でなく、適当なランダム値

height :身長 150 -180 ,random
weight :体重 50 - 80 , random
coffee :週にcoffeeを飲む回数
tea : 週に お茶を飲む回数

分散

ばらつきを示す。
https://bellcurve.jp/statistics/course/5919.html

データを読み込みます。

#
person = pd.read_csv("dat_person.csv")
person.head()

結果: 

   cofee  heiht  tea  weight
0     13    169   19      58
1     11    158   14      59
2      6    160   10      70
3     15    150    1      77
4      3    150   17      62

分散の表示

#
person.coffee.var()

結果

26.819871794871798

標準偏差

ばらつきを示す。分散の平方根とる。
https://bellcurve.jp/statistics/course/5924.html

coffee の標準偏差

#
person.coffee.std()

結果

5.178790572602043

平均値

print( person.coffee.mean())

結果

10.275

中央値

print( person.coffee.median())

結果

11.0

最頻値

最も頻度が多い値

print( person.coffee.mode())

結果

0    12
dtype: int64

要約統計量

https://ja.wikipedia.org/wiki/%E8%A6%81%E7%B4%84%E7%B5%B1%E8%A8%88%E9%87%8F
標本の分布の特徴を代表的に(要約して)表す統計学上の値であり、
統計量の一種。記述統計量(英: descriptive statistics value)、
基本統計量、代表値(英: representative value)ともいう

正規分布の場合は、平均と、分散または標準偏差で分布を記述できる。
正規分布からのずれを知るためには、尖度や歪度などの高次モーメントから求められる統計量を用いる。
正規分布から著しく外れた場合には、
より頑健な中央値、四分位点、最大値・最小値や最頻値が用いられる。
「頑健」とは分布の非対称性や外れ値などの影響を受けにくいことを意味する統計用語である

#
person.coffee.describe()

結果:上から
データ数
平均値
標準偏差
最小値
第一四分位数
第二四分位数
第三四分位数
最大値

count    40.000000
mean     10.275000
std       5.178791
min       0.000000
25%       6.000000
50%      11.000000
75%      13.500000
max      19.000000
Name: coffee, dtype: float64

四分位範囲

=> 散らばりの程度を表す尺度の一つ。
「75パーセンタイル(第三四分位数)-25パーセンタイル(第一四分位数)」として求められる。

#
desc= person.coffee.describe()
(desc[6] -desc[4] )

結果

7.5

pandas info()

index:

.info()

dataFrame についての、情報が表示できます。

importしておきます

#
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

データの定義

#
#
a1 = {  'ID':['11','12','13', '14' ]
        ,'num1':[ 101 ,102,103 , 101]
        ,'num2':[ 201 ,202,203 ,204 ]
        ,'num3':[ 301 ,302,303 ,304 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

結果:

   ID  num1  num2  num3
0  11   101   201   301
1  12   102   202   302
2  13   103   203   303
3  14   101   204   304

info() 実行

frame1.info()

結果:
null 判定, 型の表示ができます。

#
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
ID      4 non-null object
num1    4 non-null int64
num2    4 non-null int64
num3    4 non-null int64
dtypes: int64(3), object(1)
memory usage: 148.0+ bytes

mean

平均値、 num1 の平均を出力します。

#
# 平均値
print( frame1.num1.mean())

結果:

#
101.75

median()

中央値

# 中央値
print( frame1.num1.median())

結果:

101.5

mode()

最頻値:出現する頻度が多い値

print(frame1.num1.mode())

結果:

0    101
dtype: int64

describe()

要約統計量 の表示

#
a1 =frame1.describe()
print(a1 )

結果:

             num1        num2        num3
count    4.000000    4.000000    4.000000
mean   101.750000  202.500000  302.500000
std      0.957427    1.290994    1.290994
min    101.000000  201.000000  301.000000
25%    101.000000  201.750000  301.750000
50%    101.500000  202.500000  302.500000
75%    102.250000  203.250000  303.250000
max    103.000000  204.000000  304.000000

出力内容:

データ数
平均値
標準偏差
最小値
第一四分位数
第二四分位数
第三四分位数
最大値

pandas sort_values()

ソート

指定列で、ソートする。

a2 = {'ID':['11','12','13' ]
        ,'birth':[1980,1973,1970 ]
        ,'type1':['a','b','c'  ]}
frame2 = DataFrame( a2)
#frame2

a3 = frame2.sort_values(by='birth' )
print(a3 )

結果:

   ID  birth type1
2  13   1970     c
1  12   1973     b
0  11   1980     a

欠損値

値を検索し、論理値を返す

# 値があるかどうかの確認
a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )
print(frame1.isin(["Tokyo"]) )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103
      ID   city   num1
0  False   True  False
1  False  False  False
2  False  False  False

欠損値の取り扱い
nullを判定

a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka', np.nan ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

print(frame1.isnull() )
#nullを判定し、合計する
frame1.isnull().sum()

結果:

  ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13    NaN   103
      ID   city   num1
0  False  False  False
1  False  False  False
2  False   True  False
ID      0
city    1
num1    0
dtype: int64

pandas merge()

merge()

 dataFrame マージ
結合用のデータを準備しておきます。

#
a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }
frame1 = DataFrame(a1 )
print(frame1 )

a2 = {'ID':['11','12','13' ]
        ,'birth':[1980,1981,1982 ]
        ,'type1':['a','b','c'  ]}
frame2 = DataFrame( a2)
print(frame2 )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103
   ID  birth type1
0  11   1980     a
1  12   1981     b
2  13   1982     c

マージ

# データのマージ
m1= pd.merge( frame1, frame2)
print(m1)

結果:

   ID   city  num1  birth type1
0  11  Tokyo   101   1980     a
1  12  Osaka   102   1981     b
2  13  Kyoto   103   1982     c

index をキーにして、結合されているようです。

pandas DataFrame

作成

a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103

T

置き換え、行列の転置が可能です。

a2= frame1.T
print(a2)

結果:

          0      1      2
ID       11     12     13
city  Tokyo  Osaka  Kyoto
num1    101    102    103

列名の指定

# 列名の指定
frame1.num1

結果:

0    101
1    102
2    103
Name: num1, dtype: int64

条件フィルター

条件の指定を行い、特定のレコードを抽出できる

# 条件(フィルター)
a2= frame1[frame1['city']=='Tokyo']
print(a2 )

結果:

   ID   city  num1
0  11  Tokyo   101

pandas Series

必要な import

import numpy as np
import numpy.random as random
import pandas as pd
from pandas import Series, DataFrame

配列の作成

# Series
a1 = pd.Series([5,6,7,8,9])
print(a1)
a1 = pd.Series(np.arange(5, 10 ,dtype='f'))
print(a1 )

結果:

0    5
1    6
2    7
3    8
4    9
dtype: int64
0    5.0
1    6.0
2    7.0
3    8.0
4    9.0
dtype: float32

index が自動で付与されるようです。

a1.index

結果:

RangeIndex(start=0, stop=5, step=1)


index の表示ができました。

numpy の行列の作成

numpy の行列の作成 、操作のの説明となります。

reshape()

行列の作成

作成

#行列の作成
a1 = np.arange(9).reshape(3,3)
print(a1 )

結果:

[[0 1 2]
 [3 4 5]
 [6 7 8]]

3×3の行列が、出力されます。

行の取り出し。

0行目

a1[0, :]
<

結果:
>|python|
array([0, 1, 2])

列の取り出し。

0列

a1[: , 0]

結果:

array([0, 3, 6])

dot()

積を求める

a1 = np.arange(1, 3)
print(a1 )
a2 = np.arange(4, 6)
print(a2)

a3 = np.dot(a1, a2)
a3

結果:

[1 2]
[4 5]
14

1次元×1次元の積、 14が出力されました。
(1*4) + (2* 5) = 14