日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据分析学习】数据预处理

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据分析学习】数据预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將值為0的數據替換為空值

data = data.replace(0.0000, np.nan)

統計某一列空值的數量

data['one_column'].isnull().sum()

統計缺失值大于某一閾值的列的名字

data_null = [] for data_col in data.columns.values.tolist():if data[data_col].isnull().sum() >= 16:data_null.append(data_col)print(data_col, data[data_col].isnull().sum()) data_null

刪除某一列或批量刪除某幾列

data = data.drop('one_column',axis=1) data = data.drop(data_null,axis=1)

用均值填充缺失值

avg = data[null_colums].mean() data[null_colums] = data[null_colums].fillna(avg)

缺失值分析

def missing_values(df):alldata_na = pd.DataFrame(df.isnull().sum(), columns={'missingNum'})alldata_na['existNum'] = len(df) - alldata_na['missingNum']alldata_na['sum'] = len(df)alldata_na['missingRatio'] = alldata_na['missingNum']/len(df)*100alldata_na['dtype'] = df.dtypes#ascending:默認True升序排列;False降序排列alldata_na = alldata_na[alldata_na['missingNum']>0].reset_index().sort_values(by=['missingNum','index'],ascending=[False,True])alldata_na.set_index('index',inplace=True)return alldata_namissing_values(data_train)

是否有單調特征列(單調的特征列很大可能是時間)

#是否有單調特征列(單調的特征列很大可能是時間) def incresing(vals):cnt = 0len_ = len(vals)for i in range(len_-1):if vals[i+1] > vals[i]:cnt += 1return cntfea_cols = [col for col in data_train.columns] for col in fea_cols:cnt = incresing(data_train[col].values)if cnt / data_train.shape[0] >= 0.55:print('單調特征:',col)print('單調特征值個數:', cnt)print('單調特征值比例:', cnt / data_train.shape[0])

特征nunique分布

# 特征nunique分布 for feature in categorical_feas:print(feature + "的特征分布如下:")print(data_train[feature].value_counts())plt.hist(data_all[feature], bins=3)plt.show()

統計特征值出現頻次大于100的特征

# 統計特征值出現頻次大于100的特征 for feature in categorical_feas:df_value_counts = pd.DataFrame(data_train[feature].value_counts())df_value_counts = df_value_counts.reset_index()df_value_counts.columns = [feature, 'counts'] # change column namesprint(df_value_counts[df_value_counts['counts'] >= 100])

Labe 分布

# Labe 分布 fig,axes = plt.subplots(2,3,figsize=(20,5)) fig.set_size_inches(20,12) sns.distplot(data_train['tradeMoney'],ax=axes[0][0]) sns.distplot(data_train[(data_train['tradeMoney']<=20000)]['tradeMoney'],ax=axes[0][1]) sns.distplot(data_train[(data_train['tradeMoney']>20000)&(data_train['tradeMoney']<=50000)]['tradeMoney'],ax=axes[0][2]) sns.distplot(data_train[(data_train['tradeMoney']>50000)&(data_train['tradeMoney']<=100000)]['tradeMoney'],ax=axes[1][0]) sns.distplot(data_train[(data_train['tradeMoney']>100000)]['tradeMoney'],ax=axes[1][1])

轉換object類型數據為LabelCode

將取值具有大小意義的類別型變量數據轉變為數值型映射,可使用LabelEncoder對不具實體數值數據編碼
LabelEncoder是用來對分類型特征值進行編碼,即對不連續的數值或文本進行編碼。其中包含以下常用方法:

fit(y) :fit可看做一本空字典,y可看作要塞到字典中的詞。
fit_transform(y):相當于先進行fit再進行transform,即把y塞到字典中去以后再進行transform得到索引值。
inverse_transform(y):根據索引值y獲得原始數據。
transform(y) :將y轉變成索引值。

>>> le = preprocessing.LabelEncoder() >>> le.fit(["paris", "paris", "tokyo", "amsterdam"]) LabelEncoder() >>> list(le.classes_) ['amsterdam', 'paris', 'tokyo'] >>> le.transform(["tokyo", "tokyo", "paris"]) array([2, 2, 1]...) >>> list(le.inverse_transform([2, 2, 1])) ['tokyo', 'tokyo', 'paris']

轉換object類型數據為one-hot編碼

有一些特征并不是以連續值的形式給出。例如:人的性別 [“male”, “female”],來自的國家 [“from Europe”, “from US”, “from Asia”],使用的瀏覽器[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]。這種特征可以采用整數的形式進行編碼,如: [“male”, “from US”, “uses Internet Explorer”] 可表示成 [0, 1, 3] ,[“female”, “from Asia”, “uses Chrome”] 可表示成[1, 2, 1]。 但是,這些整數形式的表示不能直接作為某些機器學習算法輸入,因為有些機器學習算法是需要連續型的輸入數據,同一列數據之間數值的大小可代表差異程度。如: [0, 1, 3]與[0,1,0]的特征差異比[0, 1, 3]與[0,1,2]之間的差異要大,但事實上它們的差異是一樣的,都是瀏覽器使用不一樣。
一個解決辦法就是采用OneHotEncoder,這種表示方式將每一個分類特征變量的m個可能的取值轉變成m個二值特征,對于每一條數據這m個值中僅有一個特征值為1,其他的都為0。
對于類別離散型特征,取值間沒有大小意義的,可采用one-hot編碼

>>> from sklearn.preprocessing import OneHotEncoder >>> enc = OneHotEncoder(handle_unknown='ignore') >>> X = [['Male', 1], ['Female', 3], ['Female', 2]] >>> enc.fit(X) OneHotEncoder(handle_unknown='ignore') >>> enc.categories_ [array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)] >>> enc.transform([['Female', 1], ['Male', 4]]).toarray() array([[1., 0., 1., 0., 0.],[0., 1., 0., 0., 0.]]) >>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]]) array([['Male', 1],[None, 2]], dtype=object) >>> enc.get_feature_names_out(['gender', 'group']) array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'], ...)

MinMaxScaler()

功能是將每個元素(特征,feature)轉換成給定范圍的值。分別縮放和轉換每個特征,以使其處于訓練集的給定范圍內,例如在區間[0,1]。

>>> from sklearn.preprocessing import MinMaxScaler >>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] >>> scaler = MinMaxScaler() >>> print(scaler.fit(data)) MinMaxScaler() >>> print(scaler.data_max_) [ 1. 18.] >>> print(scaler.transform(data)) [[0. 0. ][0.25 0.25][0.5 0.5 ][1. 1. ]] >>> print(scaler.transform([[2, 2]])) [[1.5 0. ]]

時間格式預處理

#將update_date從例如2019-02-20的str變為datetime格式,并提取處year、month、day data["year"] = pd.to_datetime(data["update_date"]).dt.year data["month"] = pd.to_datetime(data["update_date"]).dt.month data["day"] = pd.to_datetime(data["update_date"]).dt.day data['week'] = pd.to_datetime(data["update_date"]).dt.week data['weekday'] = pd.to_datetime(data["update_date"]).dt.weekday

找出 year 中2019年以后的數據,并將其他數據刪除

data = data[data["year"] >= 2019] #找出 year 中2019年以后的數據,并將其他數據刪除

聚合時間數據

# 聚合時間數據 total_balance = data.groupby(['date'])['total_purchase_amt','total_redeem_amt'].sum().reset_index()

將時間字符串轉換為10位時間戳

import time #將時間字符串轉換為10位時間戳,時間字符串默認為2017-10-01 13:37:04格式 def date_to_timestamp(date, format_string="%Y/%m/%d %H:%M:%S.%f."):time_array = time.strptime(date, format_string)time_stamp = int(time.mktime(time_array))return time_stamp

數據導入和預覽

數據的列columns屬性

數據的空值檢測

空值的替換方式

異常值的處理方式
3segama原則
箱型圖

任意數據的增刪改查

處理后數據的導出

數據的歸一化、標準化

數據分桶

數據正態分布

離散型、連續性數據和非數值數據

數據透視圖

總結

以上是生活随笔為你收集整理的【数据分析学习】数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。