Python解説 第7回: データ分析の基礎と高度な可視化
前回の「第6回 Python解説 アプリ&AI編」では、Pythonを用いたアプリケーション開発やAIの基本について学びました。今回は、その続編として、データ分析の基礎から高度な可視化、さらに実践的な統計分析や予測モデルの構築までを扱い、実務に活かせるスキルを深めていきましょう。
1. データ分析と可視化の概念
データ分析とは、大量のデータから有益な情報を抽出し、意思決定に役立てるプロセスです。一般的なデータ分析の目的として、以下のようなものがあります。
- 記述的分析: データの現状を把握する(例: 売上の推移、顧客の属性)。
- 診断的分析: 過去のデータから原因を分析する(例: 売上低下の要因分析)。
- 予測的分析: 将来の動向を予測する(例: 需要予測、株価予測)。
- 処方的分析: 最適な判断を導き出す(例: 価格最適化、在庫管理)。
また、データの可視化は、数値データをグラフや図として表現することで、データの傾向や異常値を直感的に理解できるようにする手法です。
データ可視化の代表的な手法には以下のものがあります。
- 棒グラフ: カテゴリデータの比較。
- 折れ線グラフ: 時系列データの推移を表現。
- 散布図: 2つの変数の関係性を示す。
- ヒートマップ: 相関関係や分布を視覚化。
2. データ分析の基礎
データ分析の基本的な流れは以下の通りです。
- データ収集: CSVやAPIなどからデータを取得。
- データ前処理: 欠損値の処理、データの整形。
- 探索的データ解析(EDA): データの可視化や統計的分析。
- データモデリング: 機械学習や統計モデルの適用。
- 評価・改善: モデルの精度を評価し、改善。
まずは基本的なライブラリをインポートし、データを読み込んでみましょう。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# CSVファイルの読み込み
df = pd.read_csv("data.csv")
print(df.head())
3. データの前処理
データの前処理は、正確な分析のために不可欠です。
# 欠損値の確認
print(df.isnull().sum())
# 欠損値を平均値で補完
df.fillna(df.mean(), inplace=True)
# カテゴリ変数の処理
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df['category'] = encoder.fit_transform(df['category'])
データの異常値を検出し、外れ値を処理することも重要です。
# 四分位範囲(IQR)を用いた外れ値の検出
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df_cleaned = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
print("外れ値を除去した後のデータ:", df_cleaned.shape)
4. 基本的なデータ分析
データの特徴を理解するために、基本統計量を確認します。
print(df.describe())
データの分布を可視化してみましょう。
sns.histplot(df['feature1'], bins=30, kde=True)
plt.show()
カテゴリ変数ごとの平均値を比較することで、傾向を掴みます。
sns.boxplot(x='category', y='feature1', data=df)
plt.show()
5. 高度なデータ可視化
データの相関関係をヒートマップで確認します。
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', fmt='.2f')
plt.title('相関ヒートマップ')
plt.show()
ペアプロットを使って、特徴量同士の関係を視覚化できます。
sns.pairplot(df, hue='category', palette='coolwarm')
plt.show()
6. 主成分分析(PCA)
PCAを使って次元を削減し、データの主要なパターンを抽出します。
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
principal_components = pca.fit_transform(df.drop(columns=['category']))
print("各成分の寄与率:", pca.explained_variance_ratio_)
PCAの結果を可視化してみましょう。
plt.scatter(principal_components[:, 0], principal_components[:, 1], c=df['category'], cmap='viridis')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('PCAによる次元削減結果')
plt.show()
7. クラスター分析(K-means)
データをグループに分類して特徴を把握します。
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(df.drop(columns=['category']))
df['Cluster'] = kmeans.labels_
sns.scatterplot(x=df['feature1'], y=df['feature2'], hue=df['Cluster'], palette='viridis')
plt.show()
まとめ
今回は、データ分析の基礎から高度な可視化、クラスタリング、次元削減、時系列分析まで幅広く学びました。
- データの取得と前処理(欠損値・外れ値処理)
- 統計的なデータ分析と可視化(ヒストグラム、ヒートマップ、ペアプロット)
- PCAによる次元削減と視覚化
- K-meansクラスタリングとエルボー法による適切なクラスタ数の選択
- Prophetを使った時系列予測と季節性分析
次回は、discord botの作り方について詳しく解説していきますので、お楽しみに!