Python новичок здесь, и я ищу краткий способ написать свою программу. Я хочу прочитать несколько CSV-файлов и очистить их от выбросов, а после этого я хочу нормализовать столбцы, а затем создать объединенный набор данных из нормализованных столбцов. Входной CSV-файл имеет много столбцов, и я хочу нормализовать все столбцы. Здесь в коде я написал пример для 2 столбцов.
код, который я написал, работает хорошо, но он утомителен и громоздок. У меня это написано для 3 наборов данных. В действительности я мог бы смотреть на гораздо больше. Любая помощь о том, как это зациклить и сделать его лаконичным? Спасибо
import numpy as np
import pandas as pd
gr_P10 = 40
gr_P50 = 65
gr_P90 = 90
rt_P10 = 10
rt_P50 = 25
rt_P90 = 50
def get_quantiles(input_log):
p10_log = np.percentile(input_log, 10)
p50_log = np.percentile(input_log, 50)
p90_log = np.percentile(input_log, 90)
return p10_log, p50_log, p90_log
def normalize(input_log, x_90, x_50, x_10, p90_log, p50_log, p10_log):
mmin = (x_50-x_10)/(p50_log-p10_log)
mmax = (x_90-x_50)/(p90_log-p50_log)
if (input_log < p50_log ):
output_log = x_50 +(mmin*(input_log-p50_log))
else:
output_log = x_50 +(mmax*(input_log-p50_log))
return output_log
# Read data and removing outliers
#Data1
a = pd.read_csv('Data1.csv')
zscore = np.abs(stats.zscore(a))
a = a[(zscore < 3).all(axis=1)]
#Data2
b = pd.read_csv('Data2.csv')
zscore = np.abs(stats.zscore(b))
b = b[(zscore < 3).all(axis=1)]
#Data3
c = pd.read_csv('Data3.csv')
zscore = np.abs(stats.zscore(c))
c = c[(zscore < 3).all(axis=1)]
# Normalizing Data
# Normalizing Data1
p10_log, p50_log, p90_log = get_quantiles(a['GR'])
a['GR_NORM'] = a.apply(lambda x: normalize(x['GR'],gr_P90, gr_P50, gr_P10, p90_log, p50_log, p10_log ), axis =1)
p10_log, p50_log, p90_log = get_quantiles(a['RT'])
a['RT_NORM'] = a.apply(lambda x: normalize(x['RT'],rt_P90, rt_P50, rt_P10, p90_log, p50_log, p10_log ), axis =1)
# Normalizing Data2
p10_log, p50_log, p90_log = get_quantiles(b['GR'])
b['GR_NORM'] = b.apply(lambda x: normalize(x['GR'],gr_P90, gr_P50, gr_P10, p90_log, p50_log, p10_log ), axis =1)
p10_log, p50_log, p90_log = get_quantiles(b['RT'])
b['RT_NORM'] = b.apply(lambda x: normalize(x['RT'],rt_P90, rt_P50, rt_P10, p90_log, p50_log, p10_log ), axis =1)
# Normalizing Data3
p10_log, p50_log, p90_log = get_quantiles(c['GR'])
c['GR_NORM'] = c.apply(lambda x: normalize(x['GR'],gr_P90, gr_P50, gr_P10, p90_log, p50_log, p10_log ), axis =1)
p10_log, p50_log, p90_log = get_quantiles(c['RT'])
c['RT_NORM'] = c.apply(lambda x: normalize(x['RT'],rt_P90, rt_P50, rt_P10, p90_log, p50_log, p10_log ), axis =1)
# Forming new combined dataset with normalized values
new_a = a['GR_NORM','RT_NORM'].copy()
new_b = b['GR_NORM','RT_NORM'].copy()
new_c = c['GR_NORM','RT_NORM'].copy()
new_dataset = pd.concat([new_a,new_b, new_c], ignore_index= True)