4.5. 課題#

4.5.1. 課題1#

次のDataFrame df はある電化製品店のパソコンコーナーの受注情報の一部です。

column

description

id

顧客番号

name

顧客名

date

来店日

laptop

購入または修理に持ち込んだパソコンの種類

fix

修理受注であればTrue、購入であればFalse

import numpy as np
import pandas as pd

def make_df():
    df = pd.DataFrame({'id':[100, 100, 101, 101, 101, 102, 103, 104, 104, 105],
                      'name': ['Max', 'Max', 'Bob', 'Bob', 'Bob', 'Alice', 'Chris','Emma', 'William','Jacob'],
                       'gender':['m', 'm', 'm', 'm', 'm', 'f', np.nan, 'f', 'm', 'm'],
                       'date':['2019/3/4','2019/2/5','2018/10/3','2017/12/6','2016/9/3','2019/7/4','2017/1/1','2019/5/3','2018/2/18', '2015/12/30'],
                      'laptop':['mac','mac','windows','windows','mac', 'mac', 'windows', 'windows', 'mac', 'others'],
                      'fix': [True, False, True, False, False, False, False, True, True, True],
                      'price': [10000, 230000, 5400, 15000, 300000, 240000, 180000, 150000, 100000, 3000]})
    return df
make_df()

dfに関して以下の問いに答えてください。

4.5.1.1. 課題1.0(回答例)#

このDataFrame(df)は何行ありますか?

一つのint型の値を返します。

# 課題の回答は関数(引数無し)の中に全て書いてください。
def answer_zero():
    # どのようなフォーマットで回答すべきか問題文に従ってください。
    df = make_df()
    ans = df.shape[0]
    return int(ans)

# 回答を確認するためには、次のような1行で回答を記入した関数を呼び出すことで確認できます。
answer_zero()

次のcellを実行して回答を確認してください。

print(answer_zero()==10)

4.5.1.2. 課題1.1#

DataFrame(df)のprice列の平均値、中央値を求めてください。

1つのlistを返し、listの0番目の要素にfloat型の平均値を、1番目の要素にfloat型の中央値を与えてください。

def answer_one():
    df = make_df()
    ...
    
    return "YOUR ANSWER"
answer_one()

次のセルを実行して回答を確認してください

import datetime
print(round(answer_one()[0],0) == 123340)
print(round(answer_one()[1],0) == 125000)

4.5.1.3. 課題1.2#

dfのなかで最も受注回数が多い顧客は誰ですか?name列の最頻値を求めてください。

1つのstr型の値を返します。

def answer_two():
    df = make_df()
    ...
    return "YOUR ANSWER"
answer_two()

次のセルを実行して回答を確認してください

print(answer_two() == 'Bob')

4.5.1.4. 課題1.3#

dfprice列の頻度分布図(Histogram)を描いてください。bin数などは自由に設定しても良いとします。

回答は1つの頻度分布図(Histogram)を示します。

import matplotlib.pyplot as plt
%matplotlib inline

def answer_three():
    df = make_df()
    
    ...
    
    plt.show()
    
answer_three()

次のセルを実行して回答を表示させてください。

4.5.1.5. 課題1.4#

dfprice列の四方位範囲を示す箱ひげ図を描いてください。

回答は1つの箱ひげ図を示します。

def answer_four():
    df = make_df()
    
    ...
    
    plt.show()
    

次のセルを実行して回答を表示させてください。

answer_four()

4.5.1.6. 課題1.5#

課題1.4に関連して、dfのうちlaptop列の種類別のpriceの四分位範囲を示す箱ひげ図を描いてください。

回答は箱ひげ図を示します。。

def answer_five():
    df = make_df()
    
    ...
    
    
    plt.show()

次のcellを実行して回答を確認してください。

answer_five()

4.5.1.7. 課題1.6#

平均値を求める関数を自分で作ってください(mean()は使わずに)。 引数として数値計算可能な1つのSeriesを受け取ります。

def answer_six(series):
    
    ...
    
    
    return "YOUR ANSWER"

次のcellを実行して回答を確認してください。

test_series = pd.Series([10,20, 3, 1,5,40, 39,89])
print(answer_six(test_series) == test_series.mean())

4.5.1.8. 課題1.7#

分散を求める関数を自分で作ってください(var()やvariance()などは使わずに)。 引数として数値計算可能な1つのSeriesを受け取ります。 ここでの分散は\( s^2 = \frac{\sum_i(x_i-\bar{X})^2}{n} \)とします。

def answer_seven(series):
    mean = answer_six(series)
    
    ...
    
    return "YOUR ANSWER"

次のcellを実行して回答を表示させてください

print(answer_seven(test_series) == np.var(test_series))