数据分析之数据处理(五)

33 篇文章 19 订阅
33 篇文章 25 订阅

数据分析之数据处理(五)

一、数据标准化案例应用

  • 八类产品的两个指标value1,value2,其中value1权重为0.6,value2权重为0.4
  • 通过0-1标准化,判断哪个产品综合指标状况最好

1.创建数据

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())

2.标准化处理

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')

3.查看综合指标状况

# 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()

运行结果
在这里插入图片描述
在这里插入图片描述

二、数据连续属性离散化

  • 连续属性变换成分类属性,即连续属性离散化
  • 在数值的取值范围内设定若干个离散划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表每个子区间中的数据值

(一)等宽法:将数据均匀划分成n等份,每份的间距相等(cut方法)

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()

运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)等频法:以相同数量的记录放进每个区间(qcut方法)

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()

运行结果
在这里插入图片描述
在这里插入图片描述
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子味的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值