這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在pandas中使用box_plot去除異常值,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括佳木斯網(wǎng)站建設(shè)、佳木斯網(wǎng)站制作、佳木斯網(wǎng)頁(yè)制作以及佳木斯網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,佳木斯網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到佳木斯省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!#-*- coding:utf-8 _*- import pandas as pd import numpy as np import matplotlib.pyplot as plt import sys import os import seaborn as sns from sklearn.preprocessing import StandardScaler ''' 通過(guò)box_plot(盒圖來(lái)確認(rèn))異常值 ''' # 獲取項(xiàng)目根目錄 input_data_path = os.path.dirname(os.path.dirname(os.getcwd())) + '/input/' print(input_data_path) # 獲取數(shù)據(jù)得位置 month_6_train_path = input_data_path +'month_6_1.csv' month_6_test_path = input_data_path + 'test_data_6_1.csv' # 讀取數(shù)據(jù) data_train = pd.read_csv(month_6_train_path) data_test = pd.read_csv(month_6_test_path) # print(data_train.head()) # print(data_test.head()) # 暫時(shí)不考慮省份城市地址 # 月份只有一個(gè)月,暫時(shí)不考慮 # bedrooms 需要看成分類(lèi)型得數(shù)據(jù) # 只取出longitude,latitude,price,buildingTypeId,bedrooms,daysOnMarket # 取出這些數(shù)據(jù); # train = data_train[['longitude', 'latitude', 'price', 'buildingTypeId', 'bedrooms', 'daysOnMarket']] # train= train.dropna() train = data_test[['longitude', 'latitude', 'price', 'buildingTypeId', 'bedrooms', 'daysOnMarket']] print(train.head()) # print(test.head()) # print(train.isna().sum()) # sns.pairplot(train) # # sns.pairplot(test) # plt.show() # 特征清洗:異常值清理用用箱圖; # 分為兩步走,一步是單列異常值處理, # 第二步是多列分組異常值處理 def remove_filers_with_boxplot(data): p = data.boxplot(return_type='dict') for index,value in enumerate(data.columns): # 獲取異常值 fliers_value_list = p['fliers'][index].get_ydata() # 刪除異常值 for flier in fliers_value_list: data = data[data.loc[:,value] != flier] return data print(train.shape) train = remove_filers_with_boxplot(train) print(train.shape) ''' 以上得異常值處理還不夠完善, 完善的異常值處理是分組判斷異常值, 也就是他在單獨(dú)這一列種,還有一種情況是多余不同的分類(lèi),他是不是存在異常 所以就需要用到分組獲取數(shù)據(jù)再箱圖處理掉異常數(shù)據(jù); ''' train = train[pd.isna(train.buildingTypeId) != True] print(train.shape) print(train['bedrooms'].value_counts()) ''' 3.0 8760 2.0 5791 4.0 5442 1.0 2056 5.0 1828 6.0 429 0.0 159 7.0 82 由于樣本存在不均衡得問(wèn)題:所以只采用12345數(shù)據(jù):也就是說(shuō)去掉0,7,6,到時(shí)候測(cè)試數(shù)據(jù)也要做相同得操作; 還有一種是通過(guò)下采樣或者是上采樣的方式進(jìn)行,這里暫時(shí)不考慮; ''' # 只取bedrooms 為1,2,3,4,5 得數(shù)據(jù) train = train[train['bedrooms'].isin([1,2,3,4,5])] print(train.shape) # 利用pivot分組后去掉異常點(diǎn) def use_pivot_box_to_remove_fliers(data,pivot_columns_list,pivot_value_list): for column in pivot_columns_list: for value in pivot_value_list: # 獲取分組的dataframe new_data = data.pivot(columns=column,values=value) p = new_data.boxplot(return_type='dict') for index,value_new in enumerate(new_data.columns): # 獲取異常值 fliers_value_list = p['fliers'][index].get_ydata() # 刪除異常值 for flier in fliers_value_list: data = data[data.loc[:, value] != flier] return data # train = use_pivot_box_to_remove_fliers(train,['buildingTypeId','bedrooms'],['price','daysOnMarket','longitude','latitude']) print(train.shape) # print(train.isna().sum()) # 以上就不考慮longitude和latitude的問(wèn)題了;應(yīng)為房屋的類(lèi)型以及房間個(gè)數(shù)和經(jīng)緯度關(guān)系不大,但是也不一定, # 實(shí)踐了一下加上longitude和latitude之后樣本數(shù)據(jù)并沒(méi)有減少; # sns.pairplot(train) # plt.show() # 先進(jìn)一步做處理將緯度小于40的去掉 train = train[train.latitude>40] # --------------------------------》》》 # 對(duì)于數(shù)值類(lèi)型得用均值填充,但是在填充之前注意一些原本就是分類(lèi)型數(shù)據(jù)得列 # def fill_na(data): # for column in data.columns: # if column.dtype != str: # data[column].fillna(data[column].mean()) # return data # 以上是異常值,或者是離群點(diǎn)的處理,以及均值填充數(shù)據(jù) # 下面將根據(jù)catter圖或者是hist圖來(lái)處理數(shù)據(jù) # # 標(biāo)準(zhǔn)化數(shù)據(jù) # train = StandardScaler().fit_transform(train) # # 標(biāo)準(zhǔn)化之后畫(huà)圖發(fā)現(xiàn)數(shù)據(jù)分布并沒(méi)有變 # # sns.pairplot(pd.DataFrame(train)) # plt.show() ''' 1:循環(huán)遍歷整個(gè)散點(diǎn)圖用剛才寫(xiě)好的算法去除點(diǎn); ''' # 獲取 # def get_outlier(x,y,init_point_count ,distance,least_point_count): # x_outliers_list = [] # y_outliers_list = [] # for i in range(len(x)): # for j in range(len(x)): # d =np.sqrt(np.square(x[i]-x[j])+np.square(y[i]-y[j])) # # print('距離',d) # if d <= distance: # init_point_count +=1 # if init_point_count <least_point_count+1: # x_outliers_list.append(x[i]) # y_outliers_list.append(y[i]) # print(x[i],y[i]) # init_point_count =0 # return x_outliers_list,y_outliers_list # # def circulation_to_remove_outliers(data,list_columns=['longitude','latitude','price','daysOnMarket',]): # for column_row in list_columns: # for column_col in list_columns: # if column_row != column_col: # x = list(data[column_row]) # y = list(data[column_col]) # x_outliers_list ,y_outliers_list = get_outlier(x,y,0,0.01,2) # for x_outlier in x_outliers_list: # data = data[data.loc[:, column_row] != x_outlier] # for y_outlier in y_outliers_list: # data = data[data.loc[:, column_col] != y_outlier] # return data # # train = circulation_to_remove_outliers(train) # # print(train.shape) # def get_outlier(x,y,init_point_count ,distance,least_point_count): # for i in range(len(x)): # for j in range(len(x)): # d =np.sqrt(np.square(x[i]-x[j])+np.square(y[i]-y[j])) # # print('距離',d) # if d <= distance: # init_point_count +=1 # if init_point_count <least_point_count+1: # print(x[i],y[i]) # init_point_count =0 # # get_outlier(train['longitude'],train['latitude'],0,0.3,1) # sns.pairplot(train) # plt.show() # train = train.dropna() # print(train.tail()) # train.to_csv('./finnl_processing_train_data_6_no_remove_outliers_test.csv',index=False)
上述就是小編為大家分享的怎么在pandas中使用box_plot去除異常值了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:怎么在pandas中使用box_plot去除異常值-創(chuàng)新互聯(lián)
文章出自:http://www.rwnh.cn/article42/cegoec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄、建站公司、企業(yè)網(wǎng)站制作、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容