import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# step 1 创建数据
df=pd.DataFrame({
'value1':np.random.rand(10)*30,
'value2':np.random.rand(10)*100},index=list('ABCDEFGHIJ'))
print(df.head())
data_norm()函数:0-1标准化,详情见:数据分析之数据处理(四)
def data_norm(df,*cols):
df_n=df.copy()
for col in cols:
ma=df_n[col].max()
mi=df_n[col].min()
df_n[col+'_n']=(df_n[col]-mi)/(ma-mi)
return (df_n)
# step 2 标准化处理
df_n1=data_norm(df,'value1','value2')
# step 3 查看综合指标状况
df_n1['f']=df_n1['value1_n']*0.6+df_n1['value1_n']*.4
df_n1.sort_values(by='f',inplace=True,ascending=False)
df_n1['f'].plot(kind='line',style='--.k',alpha=.8,grid=True)
print(df_n1)
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 等宽法(cut结果含有一个表示不同分类名称的层级数组以及一个年龄数据进行标号的代号属性)
ages=[20,22,25,27,21,23,37,31,61,45,41,32]
# 有一组人员年龄数据,希望将这些数据划分为“18到25”,“26到35”,“36到60”,“60以上”几个面元
bins=[18,25,35,60,100]
cats=pd.cut(ages,bins)
print('******划分后*****\n',cats)
print('\n******cats的类型******')
print(type(cats))#返回的是一个特殊的categorical对象(一组表示原名称的字符串)
# 通过right函数修改闭端,默认为True
print('\n------------------过right函数修改闭端----------------\n')
print(cats.codes,type(cats.codes))#0-3对应分组后的四个区间,用代号来注释数据对应区间,结果为ndarray
print(cats.categories,type(cats.categories))#四个区间,结果为index
print('\n*****按照区间计数*****\n',pd.value_counts(cats))#按照区间计数
# 可以设置自己的区间名称,用labels参数
print('\n------------------设置自己的区间名称----------------\n')
group_names=['Youth','YoungAdult','MiddleAged','Senoir']
print('\n************\n',pd.cut(ages,bins,labels=group_names),'\n***********')
# 对一个dataframe数据进行离散化,并计算各个区间的数据计数
print('\n-----对dataframe数据离散化,对各区间的数据计数-------\n')
df=pd.DataFrame({
'ages':ages})
s=pd.cut(df['ages'],bins)#也可以pd.cut(df['ages'],5)将数据等分为5份
df['label']=s
cut_counts=s.value_counts(sort=False)
print(df)
print(cut_counts)
# 用散点图表示,其中演的按照codes分类,注意codes是来自于categorical对象
plt.scatter(df.index,df['ages'],cmap='Reds',c=cats.codes)
plt.grid()
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
data=np.random.randn(1000)
s=pd.Series(data)
# qcut():根据样本分位数对数据进行面元划分,得到大小基本相等的面元,但并不保证每个面元含有相同数据个数,
# 也可以设置自定义的分位数(0到1之间的数值,包含端点)例如:pd.qcut(data1,[0,0.1,0.5,0.9,1])
cats=pd.qcut(s,4)#按四分位数进行分割,可以分为其他
print(cats.head())
print(pd.value_counts(cats))
plt.scatter(s.index,s,cmap='Greens',c=pd.qcut(data,4).codes)
plt.xlim([0,1000])
plt.grid()
plt.show()