データセットについて学習している場合でも、関連する分析結果を公開する準備をしている場合でも、視覚化は不可欠なツールです。Pythonの人気のあるデータ分析ライブラリpandasには、**。plot()**を使用するためのいくつかの異なるオプションがあります。Pandasの旅の初期段階であっても、データの意見に対する貴重な洞察をもたらす基本的なプロットをすばやく作成できます。
記事ディレクトリ
データの準備
American Community Survey 2010–2012 PublicUseMicrodataサンプルを使用した大学の主要データ
import pandas as pd
df = pd.read_csv(
"数据科学必备 Pandas 数据可视化初学者指南/recent-grads.csv",
)
df.head()
パンダプロットを作成する
データセットには、各専攻の卒業生の収入に関連するいくつかの列が含まれています。
- 「中央値」は、フルタイムの年間労働者の収入の中央値です。
- 「P25th」は収入の25パーセンタイルです。
- 「P75th」は、収入の75パーセンタイルです。
- 「ランク」は、収入の中央値による専門的なランキングです。
.plot()は、DataFrameの各行のデータを含む折れ線グラフを返します。x軸の値は各機関のランクを表し、「P25th」、「Median」、および「P75th」の値がy軸にプロットされます。
import matplotlib.pyplot as plt
df.plot(x="Rank", y=["P25th", "Median", "P75th"])
plt.show()
関連情報を直感的に取得できます。
- ランキングが下がると、収入の中央値は下がります。ランキングは収入の中央値によって決定されるため、これは予想されることです。
- 一部の専攻は25%から75%の間に大きなギャップがあります。これらの学位を持つ人々は、収入の中央値よりも大幅に少ないまたは大幅に多い収入を得る可能性があります。
- 他の専攻の25%と75%の間のギャップは非常に小さいです。これらの学位を持つ人々の給与は、収入の中央値に非常に近いです。
.plot()には、いくつかのオプションのパラメーターがあります。kindパラメータは11の異なる文字列値を受け入れ、作成するプロットの種類を決定します:
- 「area」は面グラフに使用されます。
- 「棒」は縦棒グラフに使用されます。
- 「barh」は、横棒グラフに使用されます。
- 「ボックス」は箱ひげ図に使用されます。
- 「hexbin」は六角形のプロットに使用されます。
- 「hist」はヒストグラムに使用されます。
- 「kde」は、カーネル密度推定プロットに使用されます。
- 「density」は「kde」のエイリアスです。
- 「線」は折れ線グラフに使用されます。
- 「円」は円グラフに使用されます。
- 「散布図」は散布図に使用されます。
Matplotlibを深く掘り下げる
DataFrameオブジェクトで**。plot()**を呼び出すと、Matplotlibは舞台裏でプロットを作成します。
最初にmatplotlib.pyplotモジュールをインポートし、名前をpltに変更します。次に、.plot()を呼び出し、DataFrameオブジェクトの「Rank」列を最初のパラメーターとして渡し、「P75th」列を2番目のパラメーターとして渡します。
import matplotlib.pyplot as plt
plt.plot(df["Rank"], df["P75th"])
[<matplotlib.lines.Line2D at 0x7f859928fbb0>]
折れ線グラフ、df["Rank"]およびdf["P75th"]の2次元座標関係ポリラインを描画します。
DataFrameは、オブジェクトの.plot()メソッドを使用して、まったく同じグラフを作成できます。
df.plot(x="Rank", y="P75th")
<AxesSubplot:xlabel='Rank'>
データの説明と検査
分布とヒストグラム
.plot()メソッドを持つパンダのクラスはDataFrameだけではありません。Seriesオブジェクトは、同様の機能を提供します。DataFrameの各列をSeriesオブジェクトとして扱うことができます。
大学の専攻データから作成されたDataFrameの「中央値」列を使用してヒストグラムを作成する例。
median_column = df["Median"]
type(median_column)
pandas.core.series.Series
median_column.plot(kind="hist")
<AxesSubplot:ylabel='Frequency'>
ヒストグラムは、データが$20,000から$120,000の範囲の10個のビンに分割され、それぞれの幅が$10,000であることを示しています。ヒストグラムの形状は、中央にピークを持つ対称的なベルの形状を持つ正規分布とは異なります。
外れ値の検出
外れ値とは、サンプル内の一部の値が他の値から大幅に逸脱しているサンプルポイントを指します。そのため、これらは外れ値とも呼ばれます。外れ値分析とは、これらの外れ値を見つけて分析することです。
質問:プロのランキングはそれほど高くはありませんが、それに応じて高い給与を得ることができます。これらのデータはどのように検出する必要がありますか?
このような外れ値は、ヒストグラムを使用して検出できます。
top_5という名前の新しいDataFrameを作成します。
top_5 = df.sort_values(by="Median", ascending=False).head(5)
これらの5つの専攻の給与を制限する棒グラフを作成します。
top_5.plot(x="Major", y="Median", kind="bar", rot=5, fontsize=4)
<AxesSubplot:xlabel='Major'>
石油工学専攻の給与の中央値は、他の専攻よりも2万ドル以上高いことがわかりました。2位から4位の専攻の収入は比較的近いです。
1つのデータポイントの値が他のデータポイントよりもはるかに高いまたは低い場合は、さらに調査が必要になる場合があります。たとえば、関連データを含む列を表示できます。
給与の中央値が60,000ドルを超えるすべての専攻の調査では、3つの収入の列が示されています。
top_medians = df[df["Median"] > 60000].sort_values("Median")
In [18]: top_medians.plot(x="Major", y=["P25th", "Median", "P75th"], kind="bar")
Out[18]: <AxesSubplot:xlabel='Major'>
25パーセンタイルと75パーセンタイルは、上で見たものを確認します。石油工学専攻は、はるかに高収入の新卒者です。
依存関係を確認する
多くの場合、データセットの2つの列が関連しているかどうかを確認する必要があります。収入の中央値が高い専攻を選択した場合、失業の可能性は低くなりますか?
「Median」と「Unemployment_rate」を使用して散布図を作成します。
df.plot(x="Median", y="Unemployment_rate", kind="scatter")
明らかなパターンはないようであり、収入と失業の間に有意な相関関係はありません。
散布図は、考えられる相関関係について第一印象を与えるための優れたツールですが、接続の明確な証拠ではありません。異なる列間の相関関係を理解するには、.corr()を使用できます。2つの値の相関関係が疑われる場合は、勘を検証し、相関関係の強さを測定するために使用できるツールがいくつかあります。
詳細については、データ
ただし、2つの値の間に相関関係があるとしても、一方の変更が他方の変更を引き起こすという意味ではないことに注意してください。言い換えれば、相関関係は因果関係を意味するものではありません。
カテゴリデータを分析する
より大きな情報の塊を処理するために、人間の脳は意識的および無意識の両方でデータを分類します。この手法はしばしば有用ですが、完璧にはほど遠いです。さらに詳しく調べてみると、それほど似ていないカテゴリに分類することもあります。したがって、カテゴリをチェックし、特定の分類が意味をなすかどうかを検証するためのいくつかのツールを知る必要があります。
グループ化
カテゴリの基本的な使用法は、グループ化と集約です。大学の専攻データセットの各カテゴリの人気は、.groupby()を使用して決定できます。
cat_totals = df.groupby("Major_category")["Total"].sum().sort_values()
cat_totals
Major_category
Interdisciplinary 12296.0
Agriculture & Natural Resources 75620.0
Law & Public Policy 179107.0
Physical Sciences 185479.0
Industrial Arts & Consumer Services 229792.0
Computers & Mathematics 299008.0
Arts 357130.0
Communications & Journalism 392601.0
Biology & Life Science 453862.0
Health 463230.0
Psychology & Social Work 481007.0
Social Science 529966.0
Engineering 537583.0
Education 559129.0
Humanities & Liberal Arts 713468.0
Business 1302376.0
Name: Total, dtype: float64
cat_totalsのすべてのカテゴリの合計を示す横棒グラフをプロットします。
cat_totals.plot(kind="barh", fontsize=4)
<AxesSubplot:ylabel='Major_category'>
比率
カテゴリ間の違いを確認するには、通常、縦棒グラフと横棒グラフが適しています。比率に興味がある場合は、円グラフが優れたツールです。
合計100,000未満のすべてのカテゴリを「その他」というカテゴリにまとめて、円グラフを作成します。
small_cat_totals = cat_totals[cat_totals < 100_000]
big_cat_totals = cat_totals[cat_totals > 100_000]
small_sums = pd.Series([small_cat_totals.sum()], index=["Other"])
big_cat_totals = big_cat_totals.append(small_sums)
big_cat_totals.plot(kind="pie", label="")
<AxesSubplot:>