長年にわたり、データ サイエンスでの Python の使用は信じられないほど増加しており、日々増加し続けています。
データ サイエンスは、多くの下位分野を持つ広大な研究分野であり、その中でデータ分析がこれらすべての分野の中で最も重要であることは間違いなく、データ サイエンスのスキル レベルに関係なく、データ サイエンスを理解すること、または少なくともそれについての基本的な知識を持っています。
データ分析とは何ですか?
データ分析は、大量の非構造化データまたは未整理データのクレンジングと変換であり、情報に基づいた意思決定に役立つ、このデータに関する重要な洞察と情報を生成することを目的としています。
データ分析には Python、Microsoft Excel、Tableau、SaS などさまざまなツールが使用されますが、この記事では Python でデータ分析がどのように行われるかに焦点を当てます。より具体的には、 Pandasと呼ばれる Python ライブラリを使用してどのように実行されるかです。
パンダとは何ですか?
Pandas は、データ操作とラングリングに使用されるオープンソースの Python ライブラリです。高速かつ効率が高く、数種類のデータをメモリにロードするためのツールが備わっています。これを使用して、複数の形式のデータを再形成、ラベル付け、インデックス付け、さらにはグループ化することもできます。
Pandas のデータ構造
Pandas には 3 つのデータ構造があります。
- シリーズ
- データフレーム
- パネル
3 つを区別する最良の方法は、一方が他方のスタックをいくつか含んでいると見ることです。したがって、DataFrame はシリーズのスタックであり、Panel は DataFrame のスタックです。
シリーズは 1 次元配列です
いくつかのシリーズの積み重ねにより 2 次元の DataFrame が作成されます
複数の DataFrame を積み重ねて 3 次元パネルを作成する
私たちが最もよく扱うデータ構造は 2 次元 DataFrame です。これは、遭遇する可能性のある一部のデータセットのデフォルトの表現手段にもなります。
パンダでのデータ分析
この記事ではインストールは必要ありません。 Google が作成したcolaboratoryというツールを使用します。データ分析、機械学習、AI のためのオンライン Python 環境です。これは、データ サイエンティストとして必要なほぼすべての Python パッケージがプリインストールされたクラウドベースの Jupyter Notebook です。
次に、 https://colab.research.google.com/notebooks/intro.ipynbに進みます。以下が表示されるはずです。
左上のナビゲーションで、ファイルオプションをクリックし、「新しいノートブック」オプションをクリックします。新しい Jupyter ノートブック ページがブラウザに読み込まれているのが表示されます。最初に行う必要があるのは、パンダを作業環境にインポートすることです。これを行うには、次のコードを実行します。
import pandas as pd
この記事では、データ分析に住宅価格データセットを使用します。私たちが使用するデータセットはここにあります。最初に行うことは、このデータセットを環境にロードすることです。
これは、新しいセルで次のコードを使用して行うことができます。
df = pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')
.read_csv
は、CSV ファイルを読み取りたい場合に使用され、CSV ファイルがカンマ区切りであることを示すために sep プロパティを渡しました。
ロードされた CSV ファイルは変数df
に保存されることにも注意してください。
Jupyter Notebook ではprint()
関数を使用する必要はありません。セルに変数名を入力するだけで、Jupyter Notebook がそれを出力します。
新しいセルにdf
入力して実行すると、データセット内のすべてのデータが DataFrame として出力されます。
ただし、常にすべてのデータを表示したいわけではなく、最初のいくつかのデータとその列名だけを確認したい場合もあります。 df.head()
関数を使用して最初の 5 列を出力し、 df.tail()
を使用して最後の 5 列を出力できます。 2 つのどちらの出力も次のようになります。
これらのデータのいくつかの行と列の間の関係を確認したいと考えます。 .describe()
関数はまさにこれを実行します。
df.describe() を実行すると、次の出力が得られます。
.describe()
DataFrame 内のすべての列の平均値、標準偏差、最小値と最大値、およびパーセンタイルが得られることがすぐにわかります。これは特に非常に便利です。
2D データフレームの形状をチェックして、行と列の数を確認することもできます。これは、形式 (行、列) でタプルを返すdf.shape
を使用して行うことができます。
df.columns
を使用して、DataFrame 内のすべての列の名前を確認することもできます。
1 つの列だけを選択して、その列内のすべてのデータを返したい場合はどうすればよいでしょうか?これは、辞書をスライスするのと同様の方法で行われます。新しいセルに次のコードを入力して実行します。
df['price ']
上記のコードは価格列を返します。それを新しい変数に保存することで、さらに先に進むことができます。
price = df['price']
これで、価格変数は実際の DataFrame のサブセットにすぎないため、DataFrame で実行できる他のすべてのアクションを価格変数で実行できるようになります。 df.head()
、 df.shape
などのことができます。
列名のリストをそのまま df に渡すことで、複数の列を選択することもできます。
data = df[['price ', 'bedrooms']]
上記は「price」と「bedrooms」という名前の列を選択します。新しいセルにdata.head()
を入力すると、次のようになります。
列をスライスする上記の方法では、その列内のすべての行要素が返されますが、データセットから行のサブセットと列のサブセットを返したい場合はどうすればよいでしょうか?これは.iloc
を使用して実行でき、Python リストと同様の方法でインデックスが付けられます。したがって、次のようなことができます
df.iloc[50: , 3]
これは、50行目から最後までの3列目を返します。これは非常にきれいで、Python でリストをスライスするのと同じです。
ここで、非常に興味深いことをやってみましょう。住宅価格データセットには、住宅の価格を示す列と、特定の住宅にある寝室の数を示す列があります。住宅価格は継続的な値であるため、同じ価格の住宅が 2 つ存在しない可能性があります。ただし、寝室の数はある程度バラバラなので、寝室が 2 つ、3 つ、4 つなどの家がいくつかある可能性があります。
同じ寝室数を持つ家をすべて取得し、各寝室の平均価格を求めたい場合はどうすればよいでしょうか?パンダでこれを行うのは比較的簡単で、そのまま実行できます。
df.groupby('bedrooms ')['price '].mean()
上記は、最初にdf.groupby()
関数を使用して同じ寝室番号を持つデータセットによって DataFrame をグループ化し、次に寝室の列だけを提供し、 .mean()
関数を使用してデータセット内の各家の平均を見つけるように指示します。 。
上記を視覚化したい場合はどうすればよいでしょうか?それぞれの寝室番号の平均価格がどのように変化するかを確認したいと思いませんか?前のコードを.plot()
関数自体にチェーンするだけです。
df.groupby('bedrooms ')['price '].mean().plot()
このような出力が得られます。
上記はデータの傾向をいくつか示しています。横軸には、明確な寝室数が表示されます (複数の家が X 個の寝室を持つことができることに注意してください)。 縦軸には、横軸の対応する寝室数に関する価格の平均値が表示されます。軸。寝室が 5 から 10 ある家は、寝室が 3 つある家よりもはるかに高価であることがすぐにわかります。また、寝室が 7 ~ 8 部屋ある家のほうが、15 部屋、20 部屋、さらには 30 部屋ある家よりもはるかに高価であることも明らかになるでしょう。
上記のような情報は、データ分析が非常に重要である理由です。すぐには得られない、または分析しなければ気づくことがまったく不可能な有用な洞察をデータから抽出することができます。
欠落データ
一連の質問で構成されるアンケートに回答すると仮定します。アンケートへのリンクを何千人もの人々と共有して、フィードバックを提供できるようにしました。私の最終的な目標は、このデータに対してデータ分析を実行して、データからいくつかの重要な洞察を得ることができるようにすることです。
さて、多くのことがうまくいかない可能性があり、調査員の中には私の質問の一部に答えることに抵抗を感じて空白のままにする人もいるかもしれません。私のアンケートの質問のいくつかの部分について、多くの人が同じことをすることができます。これは問題とはみなされないかもしれませんが、調査で数値データを収集しており、分析の一部で合計、平均、またはその他の算術演算を取得する必要がある場合を想像してください。いくつかの欠損値があると、分析に多くの不正確さが生じるため、この欠損値を見つけて、それに近い代替値となるいくつかの値で置き換える方法を考え出す必要があります。
Pandas は、 DataFrame 内の欠損値を見つけるためのisnull()
関数を提供します。
isnull()
関数はそのまま使用できます。
df.isnull()
これは、もともとそこに存在していたデータが本当に欠落しているのか、それとも誤って欠落しているのかを示すブール値の DataFrame を返します。出力は次のようになります。
これらすべての欠損値を置き換えることができる方法が必要です。ほとんどの場合、欠損値の選択はゼロと見なされます。データ サイエンティストや分析対象のデータのユースケースによっては、他のすべてのデータの平均、またはその周囲のデータの平均とみなされる場合もあります。
DataFrame 内のすべての欠損値を埋めるには、 .fillna()
関数をそのまま使用します。
df.fillna(0)
上記では、すべての空のデータを値 0 で埋めています。私たちが指定する他の数値でも構いません。
データの重要性はいくら強調してもしすぎることはありません。データ自体から正しい答えを得るのに役立ちます。データ分析はデジタル経済のための新しい石油であると彼らは言います。
この記事のすべての例は、 ここにあります。
さらに詳しく学ぶには、 Python と Pandas を使用したデータ分析オンライン コースをご覧ください。