シンプルかつシンプル: データ クレンジングの技術と実践

データクリーニングとは何ですか?

データ クレンジングとも呼ばれるデータ クリーニングは、データ セットからダーティ データやエラーを検出、特定、修正 (または削除) するプロセスです。ダーティ データは、不完全、不正確、不正確、または事前定義されたルールでは解釈できないデータである可能性があります。

なぜデータクリーニングが必要なのでしょうか?

機械学習とデータ サイエンスには、「ガベージ イン、ガベージ アウト」というよく引用されるルールがあります。最先端のアルゴリズムを使用したとしても、入力データの品質が低ければ、結果はあまり良くありません。実際、多くのデータ サイエンティストは、データ クリーニングがデータ処理パイプライン全体の中で最も重要なステップであると考えています。

ここで、次の主要な手順を通じて、データ クリーニングのプロセスを詳しく見てみましょう。

1.重複排除

重複データは、特に記述統計やデータモデリングを行う場合に、データの理解が現実から逸脱する原因となる可能性があります。Python では、pandas の dump_duplicates() 関数を使用して、重複した値をチェックして削除できます。

import pandas as pd

# 假设我们有一个名为df的数据框
df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7], 
                   'B': ['a', 'b', 'b', 'c', 'd', 'e', 'e', 'e', 'f', 'g', 'g']})

# 检查重复值
print(df.duplicated())

# 删除重复值
df = df.drop_duplicates()

2. 欠損値の処理

データの欠損値は、データ収集プロセスでのエラー、一部の観測値の欠如など、さまざまな理由によって発生する可能性があります。欠損値に対処するには、欠損値を含む行や列の削除、欠損値の代入など、さまざまな方法があります。どの方法を選択するかは、欠損値の数、欠損値の理由など、特定の状況によって異なります。

Python では、pandas の isnull() 関数を使用してデータの欠損値をチェックしたり、dropna() 関数を使用して欠損値のある行または列を削除したり、fillna() 関数を使用して欠損値を代入したりできます。 。

# 假设我们有一个名为df的数据框,含有缺失值
df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5, np.nan, 7, 8], 
                   'B': ['a', 'b', np.nan, 'd', 'e', 'f', 'g', np.nan]})

# 检查缺失值
print(df.isnull())

# 删除含有缺失值的行
df_dropna = df.dropna()

# 用某个值填充缺失值,例如0
df_fillna = df.fillna(0)

# 使用列的均值填充缺失值
for column in df.columns:
    df[column] = df[column].fillna(df[column].mean())

3. 外れ値を検出して対処する

外れ値とは、他の観測値から大きくかけ離れた値です。外れ値は、データ入力エラー、測定エラーなど、さまざまな理由によって発生する可能性があります。外れ値は分析結果に影響を与える可能性があるため、対処する必要があります。

外れ値を扱うときは、まず、値がいつ外れ値とみなされるかを判断する必要があります。これには通常、ある程度のドメイン知識が必要であるか、データの探索的分析を通じて判断できます。一般的なアプローチは、箱ひげ図 (または四分位範囲) を使用して外れ値を特定することです。

import matplotlib.pyplot as plt

# 假设我们有一个名为df的数据框,只有一个数值列A
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]})

# 使用箱线图识别异常值
plt.boxplot(df['A'])
plt.show()

# 计算四分位数范围
Q1 = df['A'].quantile(0.25)
Q3 = df['A'].quantile(0.75)
IQR = Q3 - Q1

# 定义异常值为小于Q1-1.5IQR或大于Q3+1.5IQR的值
outliers = df[(df['A'] < Q1 - 1.5*IQR) | (df['A'] > Q3 + 1.5*IQR)]

異常値を発見した後は、異常値の修正や削除など、状況に応じた対処が可能です。

4. データ型変換

データ クリーニングのもう 1 つの重要なタスクは、データが正しいデータ型であることを確認することです。たとえば、カテゴリ変数が数値として誤認される可能性があり、日付と時刻が文字列として保存される可能性があります。Python では、pandas の astype() 関数を使用してデータ型を変換できます。

# 假设我们有一个名为df的数据框,其中有一个字符串列A
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['a', 'b', 'c']})

# 转换列A为整数类型
df['A'] = df['A'].astype(int)

全体として、データ クリーニングはデータの包括的な理解と探索を必要とする複雑なタスクです。面倒に思えることもありますが、データを適切にクリーニングすると、モデルのパフォーマンスと分析結果の精度が大幅に向上します。

5. テキストおよび文字列データの操作

テキスト データには、多くの場合、特別な前処理手順が必要です。たとえば、テキストを小文字に変換したり、句読点やその他の非アルファベット文字を削除したり、ほとんどの意味を持たないストップワード (「the」、「a」、「is」など) を削除したりする必要がある場合があります。コンテキスト)、語幹抽出または見出し語化など。

Python では、標準ライブラリの文字列メソッドを使用することも、NLTK、spaCy などのより特殊なライブラリをテキスト処理に使用することもできます。

import nltk
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer

# 假设我们有一个文本字符串s
s = "The quick brown fox jumps over the lazy dog."

# 转换为小写
s = s.lower()

# 删除标点符号
s = s.translate(str.maketrans('', '', string.punctuation))

# 分词
tokens = s.split()

# 删除停用词
tokens = [token for token in tokens if token not in stopwords.words('english')]

# 词干提取
stemmer = PorterStemmer()
tokens = [stemmer.stem(token) for token in tokens]

# 结果
print(tokens)

結論は

データ クリーニングはデータ分析における重要なステップであり、プロジェクト全体の成功に不可欠です。データのクリーニングには多くの時間と労力がかかる場合がありますが、データがきれいに整理されていれば、その後の分析の効率と結果の精度が大幅に向上します。この記事が、データ クリーニングの重要性と Python で基本的なデータ クリーニングを行う方法の理解に役立つことを願っています。

Supongo que te gusta

Origin blog.csdn.net/a871923942/article/details/131418198
Recomendado
Clasificación