今天來教學異常檢測,一張表要是有異常值的話,分析出來的數值可能也會是異常的,所以一定要去除異常值
我們先把昨天的過濾出的資料匯出成CSV檔,我們一共保留了4個欄位午仔魚,白蝦,腩肉_冷凍牛肉,鴨_土番鴨
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
mask = data["市場名稱"] == "豐原第一市場"
data = data[mask].copy()
data["訪價日期"] = pd.to_datetime(data["訪價日期"])
data = data.set_index("訪價日期")
for i in data.columns[1:]:
if data[i].mean() < 200:
data = data.drop([i], axis = 1)
data.to_csv("./OK.csv")
讀取進來
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
data["訪價日期"] = pd.to_datetime(data["訪價日期"])
data = data.set_index("訪價日期")
print(data)
我們直接看圖
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
data["訪價日期"] = pd.to_datetime(data["訪價日期"])
data = data.set_index("訪價日期")
for i in range(1, data.columns.shape[0]):
plt.subplot(2,2,i)
plt.title(data.columns[i])
plt.plot(data[data.columns[i]])
plt.show()
我們可以好直觀的看出,這些資料真是慘不忍睹,這張圖有三個主要毛病
我們一個一個問題來解決,首先先解決時間問題
我們發現有些月份日期居然相反了(標紅字),我們觀察這張表,時間大概是3月到9月,我這裡一一去檢查每筆資料,只要在月份的字元不是在03~09,就交換
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
month = ["03", "04", "05", "06", "07", "08", "09"]
for i in range(data.shape[0]):
if data["訪價日期"][i].split("-")[1] not in month:
year = data["訪價日期"][i].split("-")[0]
month = data["訪價日期"][i].split("-")[2]
day = data["訪價日期"][i].split("-")[1]
data["訪價日期"][i] = year + "-" + month + "-" + day
data.to_csv("./OK1.csv", index = 0)
好多了,至少解決了同時間出現多值的情況了