<jupyter_start><jupyter_text>【課題1】データセットの取得pd.read_csv()をつかって、変数名dataに格納する。<jupyter_code>data = pd.read_csv('train.csv')
data.head()<jupyter_output><empty_output><jupyter_text>【課題2】データセット自体の調査どのようなデータセットか説明する。 エイムズ市の住宅価格データ。  目的変数はSalePriceであり、各住宅の価格を予測する。  説明変数は79個。  【課題3】データの確認- 各特徴量がどういったものかを見る。（数値データか文字データなど）- 今回の目的変数はどの列か確認する。- 特徴量の平均値と標準偏差、四分位数を一度に表示させる。<jupyter_code>#各特徴量のデータ型を確認する
data.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 1460 entries, 0 to 1459
Data columns (total 81 columns):
Id               1460 non-null int64
MSSubClass       1460 non-null int64
MSZoning         1460 non-null object
LotFrontage      1201 non-null float64
LotArea          1460 non-null int64
Street           1460 non-null object
Alley            91 non-null object
LotShape         1460 non-null object
LandContour      1460 non-null object
Utilities        1460 non-null object
LotConfig        1460 non-null object
LandSlope        1460 non-null object
Neighborhood     1460 non-null object
Condition1       1460 non-null object
Condition2       1460 non-null object
BldgType         1460 non-null object
HouseStyle       1460 non-null object
OverallQual      1460 non-null int64
OverallCond      1460 non-null int64
YearBuilt        1460 non-null int64
YearRemodAdd     1460 non-null int64
RoofStyle        1460 non-null object
RoofMatl         1460 non-null object
Exterior1st      1460 non-n[...]<jupyter_text>**数値データ38個、カテゴリカルデータ43個**<jupyter_code>#目的変数の確認
#特徴量の平均値、標準偏差、四分位数を表示する
data.describe().T<jupyter_output><empty_output><jupyter_text>**目的変数はSalePrice**  【課題4】欠損値への対応- 欠損値の有無を確認する (missingoを用いる)- 欠損値が何％含まれるかを確認する- 5つ以上欠損値がある特徴量（列）は削除する。- 欠損値があるサンプル（行）は削除する。<jupyter_code>import missingno as msno
#欠損値の有無を確認する
msno.matrix(data);
#欠損値の割合を確認する
msno.bar(data);
Total = data.isnull().sum()
missing_ratio = Total / data.isnull().count()
pd.concat([Total, missing_ratio], axis=1, keys=['Total', 'Ratio']).sort_values(by='Total', ascending=False).T
#欠損値が5つ以上ある列を削除する
drop_cols = data.columns[(data.isnull().sum() >= 5).values]
data.drop(columns=drop_cols, inplace=True)
#欠損値がある行を削除する
#data = data.loc[(data.isnull().sum(axis=1)==0).values, :]
data.dropna(axis=0, how='any', inplace=True)<jupyter_output><empty_output><jupyter_text>【課題5】用語の調査下記の用語について調査してまとめる。- 尖度 (参考: https://bellcurve.jp/statistics/glossary/2113.html)分布が正規分布からどれだけ尖っているかを表す統計量である。山の尖り度と裾の広がり度を反映している。正規分布よりも尖った分布で裾が重いときには正の値を、正規分布より扁平な分布で裾が軽い時は負の値をとる。正規分布の場合は値が0となる。下記の式で定義されている。$$ \frac{n(n + 1)}{(n - 1)(n - 2)(n - 3)}\sum_{i = 1}^{n}\frac{(x_i - \overline{x})^4}{s^4} - \frac{3(n - 1)^2}{(n - 2)(n - 3)} $$- 歪度 (参考: https://bellcurve.jp/statistics/glossary/2135.html)分布が正規分布からどれだけ歪んでいるかを表す統計量である。左右対称性の度合いを反映している。左に偏った（右裾が長い）分布のときには正の値を、右に偏った（左の裾が長い）分布のときには負の値をとる。正規分布のような左右対象の場合には0になる。下記の式で定義されている。$$ \frac{n}{(n - 1)(n - 2)}\sum_{i=1}^{n}\frac{(x_i - \overline{x})^3}{s^3} $$  【課題6】分布の確認- seabornのsns.distplot()を使い目的変数の分布を表示し、「尖度」と「歪度」も算出する。- 目的変数に対して対数変換を行う。- 対数変換したものに対して分布を表示し、「尖度」と「歪度」も算出する。対数変換の前後での変化を「正規分布」という言葉を含めて説明してください。このように加工することで予測時の精度を上げることができます。<jupyter_code>#目的変数のdistribution plotを表示し、尖度と歪度も算出する
import seaborn as sns
sns.set()
sns.distplot(data.SalePrice);
print('kurtosis: {:.3f}'.format(data.SalePrice.kurt()))
print('skewness: {:.3f}'.format(data.SalePrice.skew()))
#目的変数に対して対数変換を行う
data['SalePrice_log'] = np.log(data.SalePrice)
#対数変換した目的変数に対してdistribution plotを作成し、尖度と歪度を算出する
sns.distplot(data.SalePrice_log);
print('kurtosis: {:.3f}'.format(data.SalePrice_log.kurt()))
print('skewness: {:.3f}'.format(data.SalePrice_log.skew()))<jupyter_output>kurtosis: 0.807
skewness: 0.121<jupyter_text>尖度(kurtosis)、歪度(skewness)は、対数変換を行うことで共に小さくなった。  対数変換前: {Skewness: 6.529, Kurtosis: 1.882}, 対数変換後: {Skewness: 0.807, Kurtosis: 0.121}  正規分布は尖度、歪度0の分布であるから、対数変換によって目的関数の分布の形状が正規分布に近づいたと言える。  【課題7】相関係数の確認特徴量の確認をしていきます。それぞれに対してマークダウンで説明や考察を書いてください。- 相関係数行列のヒートマップを作り、相関係数の高い関係を見つける。- 目的変数との相関の高い特徴量10個を選び、これらだけの相関係数行列ヒートマップを作る。- 選んだ10個の特徴量が何か表しているかをKaggleのDataDescriptionの記述を参考に日本語でまとめる。- 選んだ10個の特徴量の中でお互いの相関係数が高い組み合わせを3つ探し出す。**補足**  重回帰分析などで予測する場合、相関が高すぎる特徴量の組み合わせがあると予測に悪影響が出ることがあります。  このような場合の簡単な対処方法として、そういった特徴量の組みを探し出して、１つに絞るということがあります。<jupyter_code>#相関行列のヒートマップを作る
data.corr()
sns.heatmap(data.corr());
#目的変数と相関の高い特徴量10個のヒートマップを作る
#SalePriceとSalePrice_logを除くため2:12でスライス
high_corr_10 = data.corr().SalePrice_log.sort_values(ascending=False)[2:12]
print('目的関数相関の高い特徴量')
print(high_corr_10)
sns.heatmap(data[high_corr_10.index].corr());<jupyter_output><empty_output><jupyter_text>目的関数と相関の高い特徴量の詳細OverallQual: 家全体の材質や仕上げに対する品質  GrLivArea: 地上にある居住空間の広さ(feet\**2)  GarageCars: ガレージに入る車の数  GarageArea: ガレージの広さ(feet\**2)  TotalBsmtSF: 地階の広さ(feet\**2)  1stFlrSF: 1階の広さ(feet\**2)  FullBath: 地上にあるお風呂場の数  TotRmsAbvGrd: 地上にある部屋数の数（お風呂場は除く）  Yearbuilt: 建築された年  YearRemodAdd: 改築された年<jupyter_code>#相関係数の高い特徴量の組み合わせ
data[high_corr_10.index].corr().unstack().sort_values(ascending=False)[:20]<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13505280259951258, 'fraction_numerical': 0.047116165718927704, 'mean_word_length': 6.96925566343042, 'pattern_counts': {'":': 0, '<': 28, '<?xml version=': 0, '>': 29, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '638974', 'license': 'Unlicense', 'n_tokens_mistral': 3240, 'n_tokens_neox': 3052, 'n_words': 252, 'path': 'week3/week3-prework2.ipynb', 'repo_name': 'YasumasaNamba/diveintocode_ml', 'size': '4924'}