【算法竞赛学习】心跳信号分类预测-数据分析
Task 2 數據分析
Tip: 此部分為零基礎入門數據挖掘的 Task2 EDA-數據探索性分析 部分,帶你來了解數據,熟悉數據,和數據做朋友,歡迎大家后續多多交流。
賽題:心電圖心跳信號多分類預測
2.1 EDA 目標
- EDA的價值主要在于熟悉數據集,了解數據集,對數據集進行驗證來確定所獲得數據集可以用于接下來的機器學習或者深度學習使用。
- 當了解了數據集之后我們下一步就是要去了解變量間的相互關系以及變量與預測值之間的存在關系。
- 引導數據科學從業者進行數據處理以及特征工程的步驟,使數據集的結構和特征集讓接下來的預測問題更加可靠。
- 完成對于數據的探索性分析,并對于數據進行一些圖表或者文字總結并打卡。
2.2 內容介紹
- 數據科學庫 pandas、numpy、scipy;
- 可視化庫 matplotlib、seabon;
- 載入訓練集和測試集;
- 簡略觀察數據(head()+shape);
- 通過describe()來熟悉數據的相關統計量
- 通過info()來熟悉數據類型
- 查看每列的存在nan情況
- 異常值檢測
- 總體分布概況
- 查看skewness and kurtosis
- 查看預測值的具體頻數
2.3 代碼示例
2.3.1 載入各種數據科學與可視化庫
#coding:utf-8 #導入warnings包,利用過濾器來實現忽略警告語句。 import warnings warnings.filterwarnings('ignore') import missingno as msno import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt import seaborn as sns import numpy as np2.3.2 載入訓練集和測試集
導入訓練集train.csv
import pandas as pd from pandas import DataFrame, Series import matplotlib.pyplot as plt Train_data = pd.read_csv('./train.csv')導入測試集testA.csv
import pandas as pd from pandas import DataFrame, Series import matplotlib.pyplot as plt Test_data = pd.read_csv('./testA.csv')所有特征集均脫敏處理(方便大家觀看)
- id - 心跳信號分配的唯一標識
- heartbeat_signals - 心跳信號序列
- label - 心跳信號類別(0、1、2、3)
data.head().append(data.tail())——觀察首尾數據
data.shape——觀察數據集的行列信息
觀察train首尾數據
Train_data.head().append(Train_data.tail()) <bound method DataFrame.info of id heartbeat_signals label 0 0 0.9912297987616655,0.9435330436439665,0.764677... 0.0 1 1 0.9714822034884503,0.9289687459588268,0.572932... 0.0 2 2 1.0,0.9591487564065292,0.7013782792997189,0.23... 2.0 3 3 0.9757952826275774,0.9340884687738161,0.659636... 0.0 4 4 0.0,0.055816398940721094,0.26129357194994196,0... 2.0 ... ... ... ... 99995 99995 1.0,0.677705342021188,0.22239242747868546,0.25... 0.0 99996 99996 0.9268571578157265,0.9063471198026871,0.636993... 2.0 99997 99997 0.9258351628306013,0.5873839035878395,0.633226... 3.0 99998 99998 1.0,0.9947621698382489,0.8297017704865509,0.45... 2.0 99999 99999 0.9259994004527861,0.916476635326053,0.4042900... 0.0[100000 rows x 3 columns]>觀察train數據集的行列信息
Train_data.shape (100000, 3)觀察testA首尾數據
Test_data.head().append(Test_data.tail()) id heartbeat_signals 0 100000 0.9915713654170097,1.0,0.6318163407681274,0.13... 1 100001 0.6075533139615096,0.5417083883163654,0.340694... 2 100002 0.9752726292239277,0.6710965234906665,0.686758... 3 100003 0.9956348033996116,0.9170249621481004,0.521096... 4 100004 1.0,0.8879490481178918,0.745564725322326,0.531... 19995 119995 1.0,0.8330283177934747,0.6340472606311671,0.63... 19996 119996 1.0,0.8259705825857048,0.4521053488322387,0.08... 19997 119997 0.951744840752379,0.9162611283848351,0.6675251... 19998 119998 0.9276692903808186,0.6771898159607004,0.242906... 19999 119999 0.6653212231837624,0.527064114047737,0.5166625...觀察testA數據集的行列信
Test_data.shape (20000, 2)要養成看數據集的head()以及shape的習慣,這會讓你每一步更放心,導致接下里的連串的錯誤, 如果對自己的pandas等操作不放心,建議執行一步看一下,這樣會有效的方便你進行理解函數并進行操作
2.3.3 總覽數據概況
data.describe()——獲取數據的相關統計量
data.info()——獲取數據類型
獲取train數據的相關統計量
Train_data.describe() id label count 100000.000000 100000.000000 mean 49999.500000 0.856960 std 28867.657797 1.217084 min 0.000000 0.000000 25% 24999.750000 0.000000 50% 49999.500000 0.000000 75% 74999.250000 2.000000 max 99999.000000 3.000000獲取train數據類型
Train_data.info() <bound method DataFrame.info of id heartbeat_signals label 0 0 0.9912297987616655,0.9435330436439665,0.764677... 0.0 1 1 0.9714822034884503,0.9289687459588268,0.572932... 0.0 2 2 1.0,0.9591487564065292,0.7013782792997189,0.23... 2.0 3 3 0.9757952826275774,0.9340884687738161,0.659636... 0.0 4 4 0.0,0.055816398940721094,0.26129357194994196,0... 2.0 ... ... ... ... 99995 99995 1.0,0.677705342021188,0.22239242747868546,0.25... 0.0 99996 99996 0.9268571578157265,0.9063471198026871,0.636993... 2.0 99997 99997 0.9258351628306013,0.5873839035878395,0.633226... 3.0 99998 99998 1.0,0.9947621698382489,0.8297017704865509,0.45... 2.0 99999 99999 0.9259994004527861,0.916476635326053,0.4042900... 0.0[100000 rows x 3 columns]>獲取testA數據的相關統計量
Test_data.describe() id count 20000.000000 mean 109999.500000 std 5773.647028 min 100000.000000 25% 104999.750000 50% 109999.500000 75% 114999.250000 max 119999.000000獲取testA數據類型
Test_data.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 20000 entries, 0 to 19999 Data columns (total 2 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 20000 non-null int64 1 heartbeat_signals 20000 non-null object dtypes: int64(1), object(1) memory usage: 312.6+ KB2.3.4 判斷數據缺失和異常
data.isnull().sum()——查看每列的存在nan情況
查看trian每列的存在nan情況
Train_data.isnull().sum() id 0 heartbeat_signals 0 label 0 dtype: int64查看testA每列的存在nan情況
Test_data.isnull().sum() id 0 heartbeat_signals 0 dtype: int642.3.5 了解預測值的分布
Train_data['label'] 0 0.0 1 0.0 2 4.0 3 0.0 4 0.0... 99995 4.0 99996 0.0 99997 0.0 99998 0.0 99999 1.0 Name: label, Length: 100000, dtype: float64 Train_data['label'].value_counts() 0.0 58883 4.0 19660 2.0 12994 1.0 6522 3.0 1941 Name: label, dtype: int64 ## 1) 總體分布概況(無界約翰遜分布等) import scipy.stats as st y = Train_data['label'] plt.figure(1); plt.title('Default') sns.distplot(y, rug=True, bins=20) plt.figure(2); plt.title('Normal') sns.distplot(y, kde=False, fit=st.norm) plt.figure(3); plt.title('Log Normal') sns.distplot(y, kde=False, fit=st.lognorm) # 2)查看skewness and kurtosis sns.distplot(Train_data['label']); print("Skewness: %f" % Train_data['label'].skew()) print("Kurtosis: %f" % Train_data['label'].kurt()) Skewness: 0.917596 Kurtosis: -0.825276 Train_data.skew(), Train_data.kurt() (id 0.000000label 0.917596dtype: float64, id -1.200000label -0.825276dtype: float64) sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness') ## 3) 查看預測值的具體頻數 plt.hist(Train_data['label'], orientation = 'vertical',histtype = 'bar', color ='red') plt.show()2.3.7 用pandas_profiling生成數據報告
import pandas_profiling pfr = pandas_profiling.ProfileReport(data_train) pfr.to_file("./example.html")2.4 總結
數據探索性分析是我們初步了解數據,熟悉數據為特征工程做準備的階段,甚至很多時候EDA階段提取出來的特征可以直接當作規則來用。可見EDA的重要性,這個階段的主要工作還是借助于各個簡單的統計量來對數據整體的了解,分析各個類型變量相互之間的關系,以及用合適的圖形可視化出來直觀觀察。希望本節內容能給初學者帶來幫助,更期待各位學習者對其中的不足提出建議。
總結
以上是生活随笔為你收集整理的【算法竞赛学习】心跳信号分类预测-数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法竞赛学习】金融风控之贷款违约预测-
- 下一篇: 小米产品经理实测Civi 2潮流版:阳光