読み込み中...

Pythonでデータ分析!初心者でもマスターできる10のステップ

初心者向けPythonデータ分析ガイドのカバー画像 Python
この記事は約18分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

あなたが初めてPythonとデータ分析に挑戦しようとしているなら、この記事があなたの道しるべになることを約束します。

「Pythonでデータ分析! 初心者でもマスターできる10のステップ」では、データ分析の基本からPythonの基本的な文法、そしてデータ分析で使うPythonのライブラリまで、Pythonとデータ分析について全てを学びます。

●Pythonの基本

○Pythonとは:なぜデータ分析に使うのか

Pythonは、初心者にも扱いやすい汎用性の高いプログラミング言語で、その読みやすいコードは、初学者が理解しやすいことで知られています。

データ分析の現場では、その豊富なライブラリと柔軟性からPythonがよく利用されます。

NumPyやPandasといったデータ分析に特化したライブラリ、またMatplotlibやSeabornといった視覚化ライブラリが充実しているため、一つの言語でデータの整理から分析、視覚化まで行うことが可能です。

○Pythonのインストール方法

Pythonをインストールする方法はいくつかありますが、ここでは公式サイトからのダウンロードをご紹介します。

Pythonの公式サイト(https://www.python.org/)から自身のOSに合ったPythonをダウンロードし、インストールします。

インストールが完了したら、ターミナル(Windowsではコマンドプロンプト)で「python –version」を入力し、インストールされたPythonのバージョンが表示されることを確認します。

○Pythonの基本的な文法

Pythonの文法を学ぶためには、変数、データ型、制御文、関数などの基本的な概念を理解することが必要です。

ここではそれぞれの基本を押さえていきましょう。

変数はデータを保存するための箱のようなもので、Pythonでは「変数名 = 値」で定義します。

例えば「x = 10」とすると、変数xに数値の10が格納されます。

データ型とは、データの種類を表します。

Pythonには数値(整数型int、浮動小数点型float)、文字列str、真偽値bool、リストlist、タプルtuple、辞書dictなどのデータ型があります。

制御文には条件分岐を行うif文、繰り返し処理を行うfor文とwhile文があります。

これらを使ってプログラムの流れをコントロールします。

関数は特定の処理をまとめたもので、defキーワードを使って定義します。

関数は何度でも呼び出すことができ、コードの再利用性を高めます。

●Pythonでのデータ分析

○データ分析の基本概念

データ分析とは、大量のデータから有用な情報を抽出し、その結果に基づいて意思決定を行うための一連のプロセスです。

このプロセスは大きく4つのステップに分けられます。

  1. データの収集:データはWebスクレイピングやAPIなど、さまざまな方法で収集します。
  2. データの整理:収集したデータはPandasなどのライブラリを使用して整理・加工します。
  3. データの分析:整理したデータから統計量を計算したり、仮説を立てて検証します。
  4. データの視覚化:Matplotlibなどのライブラリを使用してデータを視覚的に表現し、分析結果を理解しやすくします。

○Pythonで使うデータ分析ライブラリ

データ分析に必要なライブラリについて見ていきましょう。

□NumPy

NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。

大量のデータを高速に処理する能力と、ベクトルや行列などの高度な数学的表現が可能な点が特徴です。

□Pandas

Pandasは、データ分析を容易に行うためのライブラリです。

Excelのようにデータを扱いやすい表形式のデータ構造を提供し、データの整理や分析が行えます。

□Matplotlib

Matplotlibは、データを視覚化するためのライブラリです。

折れ線グラフ、散布図、ヒストグラムなど、様々なグラフを描くことができます。

●データ分析のステップ

Pythonはデータ分析を行うための強力なツールであり、その使い方を習得することで大量のデータを効率よく扱うことができます。

その第一歩として、まずはデータの収集と整理の方法から始めます。

○データの収集と整理

データ分析を行う上で最初に必要となるのがデータの収集です。

PythonではWebスクレイピングという手法でウェブサイトからデータを取得することができます。

この段階では「requests」と「BeautifulSoup」などのライブラリがよく使用されます。

データ収集のためのサンプルコードを下記に示します。

このコードでは「requests」ライブラリを使って指定したURLからHTMLを取得し、その後「BeautifulSoup」を使ってHTMLを解析して情報を取り出しています。

取得した情報は、後続の処理のためにリストに保存されます。

□サンプルコード1:Webスクレイピングでデータ収集

import requests
from bs4 import BeautifulSoup

url = "指定のURL"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

data_list = []
for tag in soup.select('指定のタグ'):
    data_list.append(tag.text)

次に、収集したデータを整理します。

この段階では「pandas」というライブラリがよく使用されます。

「pandas」を使用すると、データを表形式で扱うことができ、行や列ごとの処理、フィルタリング、並び替えなど様々な操作が可能になります。

データの整理のためのサンプルコードを下記に示します。

このコードでは「pandas」ライブラリを使ってリストのデータをデータフレームに変換し、その後、特定の列を基準にデータを並び替えています。

□サンプルコード2:Pandasでデータの整理

import pandas as pd

df = pd.DataFrame(data_list, columns=['指定の列名'])
sorted_df = df.sort_values(by='指定の列名')

以上でデータの収集と整理の基本的なステップは終わります。

これらの操作をマスターすることで、自分が分析したい任意のデータを自由に取り扱うことができるようになります。

○データの視覚化

Pythonではデータ視覚化のために「matplotlib」や「seaborn」などのライブラリが利用できます。

データを視覚的に理解することで、データのパターンや傾向、外れ値の存在などを容易に把握することができます。

ここでは、「matplotlib」を使用した基本的なグラフの作成方法について説明します。

□サンプルコード3:Matplotlibでグラフを作成

まずは、基本的な棒グラフを作成するコードを紹介します。

このコードでは、matplotlibのpyplotを使ってデータフレームの特定の列の値を棒グラフにして可視化しています。

import matplotlib.pyplot as plt

# データフレームの指定の列の値を棒グラフにする
plt.bar(df['指定の列名'].value_counts().index, df['指定の列名'].value_counts().values)

plt.xlabel('指定の列名')
plt.ylabel('Count')
plt.title('Title')
plt.show()

このコードの実行結果としては、指定した列名の値の出現頻度に応じた棒グラフが生成され、そのグラフが画面に表示されます。

X軸には指定した列の各値、Y軸にはその値の出現回数(Count)が表示され、全体のタイトルがグラフの上部に表示されます。

このコードを使用して、ある特定の列の値の分布を視覚的に把握することができます。

そのため、特定の値が多いか少ないか、あるいは特定の値が他の値と比べてどれだけ多いか少ないかをすぐに理解することができます。

また、このコードは比較的単純な棒グラフの作成に使われますが、matplotlibは様々な種類のグラフの作成が可能です。

たとえば、散布図、ヒストグラム、箱ひげ図などの作成も可能で、それぞれのグラフが持つ情報を理解し、適切に使用することがデータ分析のスキル向上に繋がります。

○データの解析

データの視覚化を行い、自分のデータがどのような特性を持っているか大まかなイメージを持つことができたら、次はより詳細なデータの解析に移ります。

Pythonでは「NumPy」や「SciPy」といったライブラリを使用してデータの統計的な解析を行います。

まずは、データの基本的な統計量(平均、中央値、標準偏差など)を計算する方法について見ていきましょう。

□サンプルコード4:統計量の計算

このコードでは、pandasのデータフレームのメソッドを使って、指定した列の基本的な統計量を計算しています。

平均値、中央値、最頻値、最小値、最大値などの統計量が計算できます。

mean = df['指定の列名'].mean()
median = df['指定の列名'].median()
mode = df['指定の列名'].mode()[0]
min_value = df['指定の列名'].min()
max_value = df['指定の列名'].max()

print(f'平均値: {mean}, 中央値: {median}, 最頻値: {mode}, 最小値: {min_value}, 最大値: {max_value}')

このコードを実行すると、指定した列の平均値、中央値、最頻値、最小値、最大値が計算され、その結果が画面に表示されます。

これにより、データの中央傾向、分散、偏りなどの基本的な情報を得ることができます。

□サンプルコード5:仮説検定

データの解析の次のステップは仮説検定です。

このステップでは、統計的な手法を使ってデータに含まれるパターンが偶然であるのか、それとも何か特定の要因によって引き起こされるのかを判断します。

Pythonでは、SciPyというライブラリを使用して仮説検定を行います。

SciPyは科学技術計算を行うためのライブラリで、統計関数などが豊富に用意されています。

下記のコードは、一つのサンプルデータに対してt検定を行う例です。

# 必要なライブラリをインポートします
import numpy as np
from scipy import stats

# データの生成
np.random.seed(0)
data_a = np.random.randn(100)
data_b = np.random.randn(100) + 0.2

# t検定の実行
t_statistic, p_value = stats.ttest_ind(data_a, data_b)

# 結果の表示
print("t統計量:", t_statistic)
print("p値:", p_value)

このコードでは、まずnumpyのrandom.randn関数を使って2つのランダムなデータセット(data_aとdata_b)を生成しています。

data_bはdata_aと同じようにランダムなデータを生成していますが、0.2だけ全体的にシフトしています。

つまり、この2つのデータセットは本質的には異なると考えられます。

次に、SciPyのttest_ind関数を使って2つのデータセットに対するt検定を実行しています。

t検定は、2つの標本が同じ母集団から抽出されたものであるかを判断するための統計的手法です。

ここで得られるp値が0.05以下であれば、通常、2つのデータセットは有意に異なると判断します(この値は標準的な閾値で、実際には研究の目的やデータの性質に応じて適宜設定します)。

このコードを実行すると、t統計量とp値が得られます。

t統計量は2つのデータセットの平均の差を標準誤差で割ったもので、2つのデータセットがどれくらい異なるかを表します。

p値はその差が偶然に起こる確率を示しています。

ここでは、p値が0.05より小さいかどうかを確認し、そうであれば2つのデータセットは有意に異なると結論づけます。

○データからの予測

次に、このデータ分析の結果を元に未来のデータを予測する方法について学びましょう。

このために、Pythonでは機械学習ライブラリであるscikit-learnを使用します。

□サンプルコード6:機械学習ライブラリscikit-learnを使った予測

下記のコードは、scikit-learnを用いてシンプルな線形回帰モデルを訓練し、新しいデータ点に対する予測を行うものです。

線形回帰は、データポイント間の関係を最もよく表す直線(または高次元空間では平面または超平面)を見つけることで予測を行います。

# 必要なライブラリのインポート
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 独立変数と目的変数の設定
X = np.random.rand(100, 1)
y = 2 * X + np.random.rand(100, 1)

# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの訓練
model = LinearRegression()
model.fit(X_train, y_train)

# テストデータに対する予測
y_pred = model.predict(X_test)

# 予測結果の表示
print("予測結果:", y_pred[:5])
print("実際のデータ:", y_test[:5])

このコードでは、まずnumpyを使って独立変数Xと目的変数yを生成しています。

この例では、yはXの2倍にランダムなノイズを加えたものとしています。

つまり、Xとyの間には線形の関係が存在します。

次に、scikit-learnのtrain_test_split関数を使ってデータを訓練データとテストデータに分割しています。

この例では、全体の20%をテストデータに使用しています。

そして、LinearRegressionクラスのインスタンスを生成し、fitメソッドを使ってモデルを訓練しています。

このモデルは、訓練データに最もよくフィットする直線を見つけます。

最後に、predictメソッドを使ってテストデータに対する予測を行い、その結果を表示しています。

予測結果と実際のデータを比較することで、モデルの性能を評価することができます。

●注意点と対策

データ分析における注意点として最も重要なのは、データの品質と整合性です。

データ分析は「ゴミ入ればゴミ出し」とも言われ、不正確または不適切なデータから得られる結果は信頼性が低い可能性があります。

したがって、データのクリーニングは分析プロセスの重要な部分を占めます。

Pythonでは、pandasやNumPyなどのライブラリを使用してデータの前処理を行います。

○データのクリーニング

□サンプルコード7:欠損値の取り扱い

下記のコードは、pandasを使用してデータセット内の欠損値を取り扱う一例です。

欠損値の取り扱いは、そのデータセットの特性と目的によります。

import pandas as pd
import numpy as np

# データの生成
data = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, np.nan]
})

# 欠損値のある行を削除
data_dropped = data.dropna()
print(data_dropped)

# 欠損値を0で埋める
data_filled = data.fillna(0)
print(data_filled)

このコードでは、まずpandasのDataFrameを使用して、一部に欠損値(np.nan)を含むデータセットを生成しています。

次に、dropnaメソッドを使用して欠損値が存在する行をすべて削除し、その結果を表示します。

この方法は、欠損値の数が少なく、その行を削除してもデータの品質が損なわれない場合に適しています。

最後に、fillnaメソッドを使用して欠損値を0で埋め、その結果を表示します。

この方法は、欠損値が一定の値で置き換えられる場合や、欠損値を無視して解析を進める場合に適しています。

ただし、欠損値を適当な値で埋めることは、分析結果を歪める可能性があるため、注意が必要です。

○データ分析の誤りと対策

データ分析では、偽陽性や偽陰性といった誤検出が頻繁に発生します。

これは、データに含まれるノイズやバイアス、過学習などが原因となります。

誤検出を防ぐためには、モデルの訓練と検証のプロセスを適切に管理し、結果の解釈には統計的な手法を用いることが重要です。

また、データ分析の結果は、実際のビジネスや研究のコンテキストと一致しているかどうかを常に確認する必要があります。

●Pythonとデータ分析の応用例

Pythonは、その柔軟性と強力なライブラリ群のおかげで、様々なデータ分析の応用例に対応できます。

以下に、Pythonでビッグデータの分析、テキスト分析、画像分析を行う例を紹介します。

それぞれの分析は、特定のPythonライブラリを用いて実行することができます。

○実例:Pythonでのビッグデータ分析

ビッグデータは、その規模と複雑さから、Pythonのような強力なツールを使用して分析を行うことが一般的です。

Pythonはその高い可読性と豊富なデータ分析ライブラリにより、ビッグデータ分析に適した言語とされています。

ビッグデータ分析の一例として、大量のデータを一括で処理し、データの概要を取得することを考えてみましょう。

下気のコードは、pandasライブラリを使用して大量のデータを分析する一例です。

□サンプルコード8:大量のデータの分析

import pandas as pd

# 大量のデータを読み込む
data = pd.read_csv('big_data.csv')

# データの概要を取得
summary = data.describe()
print(summary)

このコードでは、まず大量のデータが含まれるCSVファイルをpandasのread_csv関数を使って読み込んでいます。

そして、pandasのdescribe関数を使用してデータの概要を取得しています。

describe関数は、数値データの基本統計量(平均、標準偏差、最小値、25%、50%、75%、最大値)を計算します。

このように、Pythonとpandasを用いると、数行のコードで大量のデータを効率的に処理し、その概要を素早く把握することができます。

○実例:Pythonでのテキスト分析

テキスト分析は、ソーシャルメディアの投稿、レビュー、メール、ウェブサイトのコンテンツなど、テキストデータを分析するための一連の手法を指します。

Pythonの自然言語処理ライブラリであるNLTKを使用すれば、誰でも簡単にテキスト分析を行うことができます。

下記のコードは、NLTKを使用してテキストデータから頻出語を抽出する一例です。

□サンプルコード9:自然言語処理ライブラリNLTKを使ったテキスト分析

import nltk
from nltk.corpus import stopwords
from nltk.probability import FreqDist

# NLTKのストップワードリストをダウンロード
nltk.download('stopwords')

# 分析対象のテキスト
text = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Pellentesque in odio nec sem blandit accumsan. Ut sagittis urna in justo.
"""

# テキストを小文字に変換し、単語に分割
words = nltk.word_tokenize(text.lower())

# ストップワードを除去
filtered_words = [word for word in words if word not in stopwords.words('english')]

# 頻出語を取得
fdist = FreqDist(filtered_words)
print(fdist.most_common(10))

このコードでは、まずnltkライブラリからstopwords(一般的すぎて特徴的でない語、例えば「is」「the」など)をダウンロードしています。

次に、対象となるテキストを小文字に変換し、単語ごとに分割しています。

その後、stopwordsリストに含まれない単語のみをフィルタリングし、フィルタリングされた単語の頻度分布を計算します。

最後に、最も頻繁に出現する10単語を表示します。

このようなテキスト分析は、ユーザーのフィードバックや意見を理解するために、ソーシャルメディア分析などで広く利用されています。

○実例:Pythonでの画像分析

画像分析は、デジタル画像を処理し、その特性やパターンを理解するための手法です。

Pythonは、OpenCVのような強力な画像処理ライブラリを持っており、これを使うと簡単に画像分析を行うことができます。

下記のコードは、OpenCVを使用して画像からエッジを検出する一例です。

□サンプルコード10:画像処理ライブラリOpenCVを使った画像分析

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# エッジ検出
edges = cv2.Canny(img, threshold1=100, threshold2=200)

# 元の画像とエッジ検出後の画像を表示
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

このコードでは、まず画像ファイルを読み込んでいます。

次に、Cannyエッジ検出器を使用して画像のエッジ(境界線)を検出します。

最後に、元の画像とエッジ検出後の画像を並べて表示します。

これにより、元の画像からどのようなエッジが検出されるかを視覚的に理解することができます。

まとめ

Pythonはその高い可読性と豊富なライブラリにより、データ分析の初心者でも簡単に使いこなすことができます。

この記事では、Pythonを使用したビッグデータ分析、テキスト分析、画像分析の具体的な手法を解説しました。

これらの基本を理解することで、より複雑なデータ分析に挑戦する準備が整うでしょう。

これからもPythonでデータ分析のスキルを磨き続けていきましょう。