順序に意味があり大小比較できるが、足し算引き算はできない。ここでは簡単に数値に意味があって計算できるのが量的データ、物事を区別するために使用するのが質的データと覚えておいて下さい。今回のデータの場合、以下のように分けることができます。質的データprecipitation降水量。データの確認と整形まずはデータの確認です。機械学習をするにあたって、データが最も重要と言っても過言ではないくらいに、データの善し悪しが学習の結果に大きく影響します。データに不足があったり、間違いがあった場合には、学習自体をイチからやり直さないといけなくなることも少なくありません。ならないためにも、データに不備がないかしっかりチェックするようにしましょう。データを読み込むまず学習データが入っている「train.csv」を読み込みます。(train.csvのtrainは列車ではなく、トレーニング・学習の意味です)新しいコードセルを追加し、下のコードを実行します。pd.read_csv(“train.csv”)pandasライブラリのread_csv関数を使い、変数trainの中にtrain.csvファイル内のデータを読み込むという意味です。(変数とはデータの入れ物のことです)データを表示する次は読み込んだ「train.csv」のデータを表示してみましょう。次のコードを実行して下さい。データを表示train.head(10)コード解説train.head(10)head関数を使うと変数trainに読み込まれているデータの先頭5行を表示できます。ここではカッコ()の中に10を指定することで先頭の10行を表示しています。似た関数にtail関数があり、こちらは末尾からデータを表示します。結果は次のようになります。先頭10件のデータが表示されました。お弁当屋さんの売上データらしく、日付(datetime)、販売数(y)、日替わり弁当名(name)、天気(weather)などの情報があるのがわかると思います。データの件数を確認するではデータが全部で何件あるのか確認してみましょう。データの行列数を表示train.shapeコード解説train.shapeshapeプロパティを使うと、データの要素数を確認できます。今回のような行と列からなる2次元配列の場合、(行数、列数)と表示されます。実行結果は次のようになります。列数)を表すので、12個(列)の項目を持ったデータが、207個(行)あるとわかります。(下の画像では10行目までしか表示していませんが実際は207行のデータがあります)データを全件表示するデータを全件表示したい時は、下のコードを実行して下さい。train.shape[0])set_option関数を使うとpandasの設定を変更できます。pd_data.shape[0])」として、表示最大行数にtrainのデータの行数を設定しています。train.head(train.shape[0])「(train.shape[0])」としてデータの行数(shapeプロパティの0番目の値)をhead関数に渡すことで、すべてのデータを表示しています。最大表示行数を設定する方法もあるのですが、こちらの方法の方が無駄がないのでこちらを採用しました)データ型(タイプ)を確認するPythonのデータ型には大きく分けて数値型と文字列型の2種類があります。表のようにint64とfloat64は数値型データ、objectは文字型データと覚えておいて下さい。それでは各列のデータ型を確認してみましょう。下のコードを実行して下さい。列ごとのデータ型と、空ではないデータ数を表示train.info()コード解説train.info()info関数を使うと、各列のデータ型(数値か文字か)や、空ではない値の入った行数を確認できます。実行結果は次のようになります。左から「列名」「空白ではないデータの個数」「データ型」の順に表示されます。「kcal」の列には空白ではないデータが166件あり、数値型(float64型)であるとわかります。データは全部で207件なので「kcal」列には41件の空白データがあることも読み取れます。欠損値とは値のない空データや、値がないことを意味するデータのことです。欠損値があると正しく学習できないことがあるため対処が必要です。先ほど見たtrain.csvのデータにも「NaN」や「–」などと表示されている箇所がありましたが、これらが欠損値にあたります。「NaN」は値がない空データであることを意味しています。目で確認できるところでは「kcal(カロリー)」「remarks(特記事項)」「event(イベント)」「payday(給料日)」に欠損値があるようです。実際にどのくらい空データがあるのか確認してみましょう。下のコードを実行して下さい。空データ件数を表示コード解説train.isnull().sum()isnull関数を使うとデータが空白データであるかを確認できます。sum関数を使うとデータの合計を計算できます。2つを組み合わせることで、各列の空データ数を表示します。実行結果は次のようになります。「kcal」には41個、「remarks」には186個、「event」には193個、「payday」には197個の空データがあることが確認できました。その他の列には空データは無いようです。空データがある行への対応には空データを含む行を削除する方法と、空データに代わりの値を入れる補完があります。今回はデータ数が少なく空データが多いため補完を行います。数値型データの補完まず「kcal(お弁当のカロリー)」です。こちらは数値型データです。今回はカロリーの平均値を算出し、それを空データに代入しましょう。下のコードを実行して下さい。train[‘kcal’].mean()mean関数を使うとデータの平均値を取得できます。今回は「train[‘kcal’]」としてカロリーの平均値を取得し、それを変数avgの中に入れています。train[‘kcal’].fillna(avg)fillna関数を使うと指定した列に含まれる空データを別の値に置き換えられます。ここではkcal列の空データを変数avgに入れたkcalの平均値に置き換えています。次に「payday(給料日)」です。給料日には「1」が設定されますが、給料日以外の日はNaNになっています。ここではNaNを「0」で埋めておきましょう。下のコードを実行して下さい。train[‘payday’].fillna(0)fillna関数を使ってpayday列の空白データを0に置き換えています。次は文字型データの「remarks(特記事項)」です。remarksにどのような値が入っているのか確認しましょう。下のコードを実行して下さい。train['remarks'].value_counts()コード解説train[‘remarks’].value_counts()value_counts関数を使うとデータに含まれる値の一覧を確認できます。今回は「train[‘remarks’]」として特記事項の値の一覧を表示しています。結果は次のようになります。メニューに関する追加メモのような内容ですね。ここでは空データを「なし」で埋めておきましょう。下のコードを実行して下さい。train[‘remarks’].fillna(‘なし’)fillna関数を使ってremarks列の空データを「なし」という文字に置き換えています。文字を扱う時は「’」または「”」で文字の前後を挟みます。同じように「event(社内イベント)」の空データも「なし」で埋めておきましょう。下のコードを実行して下さい。train[‘event’].fillna(‘なし’)fillna関数を使ってevent列の空データを「なし」という文字に置き換えています。以上で空データ(NaN)の補完処理が終わりました。それでは空データ件数を確認してみましょう。下のコードを実行して下さい。実行結果は次のようになります。空白データがなくなりました。空データ(NaN)はなくなりましたが、「precipitation(降水量)」の列に「降水量なし」を意味する「–」というデータがありました。降水量は数値に意味があり計算ができる量的データですが、「–」は文字型データのため計算に使えません。計算に使えるよう「–」を「0」に置き換えましょう。0)replace関数を使うとある値を別の値に置換できます。0)」として「–」を数値の「0」に置換しています。実行後、Head関数で中身を確認すると下のようになります。「precipitation(降水量)」の「–」が「0」に変わりました。先程補完した「kcal」「remarks」「event」「payday」も「NaN」がそれぞれ補完した値に変わっています。これで欠損値の補完が完了しました。次はデータ型を使いやすい型に変換します。データには量的データと質的データがありました。量的データは計算できる数値データなのでデータ型も数値型であると扱いやすく、質的データは区別するためのデータで計算には使用しないため文字型の方が扱いやすいことが多いです。ここでは量的データなのに文字型となっているデータを数値型に、質的データなのに数値型となっているデータを文字型に変換していきます。info関数でデータ型を確認しましょう。量的データである「datetime(日付)」と「precipitation(降水量)」が文字型(object)に、質的データである「soldout(完売日フラグ)」「payday(給料日フラグ)」が数値型(int64、float64)になっています。文字型を数値型に変換まず単純に変換できる「precipitation(降水量)」から始めましょう。下のコードを実行して下さい。train[‘precipitation’].astype(np.float)astype関数を使うとデータの型を変更できます。ここでは「astype(np.float)」として「precipitation」列のデータ型を数値型に変換しています。実行後、info関数でデータ型を確認すると次のようになります。「precipitation(降水量)」のデータ型が文字型(object)から数値型(float64)に変わっています。次に「datetime(日付)」を数値型に変換しましょう。日付データは年・月・日から構成されるため、それぞれ別々に数値型として抜き出します。下のコードを実行して下さい。pd.to_datetime(train[‘datetime’])to_datetime関数を使うとデータをdatetime型に変換できます。ここでいうdatetime型とはPythonで日付を扱うためのデータ型で、日付データの列名である「datetime」とは関係ありません。train[‘datetime’].dt.yeardt.yearプロパティを使うと日付から年を取得できます。ここでは変数trainの中に新たに「year」という列を追加して、そこに年を入れています。train[‘datetime’].dt.monthdt.monthプロパティを使うと日付から月を取得できます。ここでは変数trainの中に新たに「month」という列を追加して、そこに月を入れています。train[‘datetime’].dt.daydt.dayプロパティを使うと日付から日を取得できます。ここでは変数trainの中に新たに「day」という列を追加して、そこに日を入れています。axis=1)drop関数を使うと指定した行または列を削除できます。axis=1)」とすることで「datetime」の列を削除しています。行を削除する時は「axis=1」は不要です。実行したあとhead関数でデータを確認すると次のようになります。「datetime」の列がなくなり、「year」「month」「day」の列が追加されています。info関数でデータ型を確認すると次のようになります。「year」「month」「day」が数値型(int64)として追加されています。次は数値型データを文字型に変換しましょう。下のコードを実行して下さい。train[‘soldout’].astype(np.str)astype関数を使ってデータの型を変更しています。ここでは「astype(np.str)」として「soldout」列のデータ型を文字型に変換しています。train[‘payday’].astype(np.str)上と同じです。ここでは「payday」列のデータ型を文字型に変換しています。実行後、info関数でデータ型を確認すると次のようになります。「soldout(完売日フラグ)」「payday(給料日フラグ)」のデータ型が文字型(object)に変わっています。これでデータ型の変換も完了です。データの基礎分析ここではデータの基本的な性質を見る方法をご紹介します。「統計?...難しそう...」と構えなくても大丈夫です。関数がすべて計算してくれるので簡単に確認できます。基礎統計量を知ることは、このあとに出てくるグラフを理解するのにも役立ちます。数値型データの基礎統計量を確認する下のコードを実行して下さい。データの基礎統計量を表示train.describe()コード解説train.describe()describe関数を使うと、列ごとの基礎統計量を計算して表示してくれます。数値型のデータ列のみが対象です。実行結果は次のようになります。各行の意味は以下のようになっています。列のデータで最も小さい値25%第一四分位数。下で解説75%第三四分位数。「y」列の場合、データの個数は207個、データの平均値は約86.6、最小値は29等と表示されています。わかりにくい項目があると思いますので、説明を加えておきます。標準偏差とは標準偏差とは、データの散らばりを数値化したもので、数が小さいほどデータが密集していて、数が大きいほどデータが広い範囲に散らばっていることを表します。データA・Bに以下のような数値が含まれている場合、平均値はどちらも4ですが、標準偏差はデータAが2、データBが4、とBの方が大きくなります。下のコードを実行すると、実際にデータA・Bの基礎統計量が確認できます。気になる方はチェックしてみて下さい。8]})df.describe()中央値・四分位数とは中央値とは、数字を小さいものから順に並べたときに真ん中にある数値です。「2,3,4,5,6」の場合、中央値は4になります。「2,3,4,5」の場合、中央値は3と4の平均で3.5になります。四分位数とは、数字を小さいものから順に並べて4分割したときにそれぞれ区切りにある数値で、25%の所にある数値を第一四分位数、50%の所にある数値を第二四分位数(=中央値)、75%の所にある数値を第三四分位数といいます。100%ところにあるのは最大値になります。下のコードを実行して最小値、25%、50%(中央値)、75%、最大値の5つの数値をチェックしてもらうと、その関係性が何となくイメージできると思います。3,4,5,6,7,8,9]})df.describe()文字型データの基礎統計量を確認する文字型データの基礎統計量も見ることができます。下のコードを実行して下さい。「include=[‘O’]」(Oはゼロではなく英語のオー)を渡すと、文字型データ列ごとの基礎統計量を計算して表示してくれます。実行結果は次のようになります。各行の意味は以下のようになっています。上の結果からは、お弁当の日替わりメニューは207日間で156種類あり、最も多かったのは「メンチカツ」で207日間のうち6回登場したということが読み取れます。ヒストグラムヒストグラムは量的データの分布を確認するのに利用します。ヒストグラムの形状からデータの性質をある程度把握できます。