随笔 - 480  文章 - 0 评论 - 45 阅读 - 73万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布

因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布

进行log变化,就是对数据使用np.log(data+1) 加上1的目的是为了防止数据等于0,而不能进行log变化

代码:

 

第一步:导入数据

第二步:对收入特征做直方图,同时标出中位数所在的位置,即均值

第三步:对收入特征做log变化,使用np.log(data+1) 

第四步:对log收入特征做直方图,标出中位数线的位置,即均值

结论:我们可以发现变化后的特征在一定程度上更加接近正态分布

复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 第一步导入数据
ffc_survey_df = pd.read_csv('datasets/fcc_2016_coder_survey_subset.csv', encoding='utf-8')

# 第二步对数据的收入做直方图
fig, ax = plt.subplots()
ffc_survey_df['Income'].hist(color='#A9C5D3', bins=30)
plt.axvline(ffc_survey_df['Income'].quantile(), color='r', label='Binary line')
plt.legend(fontsize=18, loc='best')
ax.set_xlabel('Income', fontsize=12)
ax.set_ylabel('Frequency', fontsize=12)
ax.set_title('Income_hist', fontsize=12)
plt.show()
复制代码

# 第三步:对收入的数据进行log变化
ffc_survey_df['log_income'] = np.log(ffc_survey_df['Income'].values+1)
print(ffc_survey_df[['Income', 'log_income']].head())

         log前后的数据

复制代码
# 第四步:对log变化后的数据画出直方图
fig, ax = plt.subplots()
ffc_survey_df['log_income'].hist(color='#A9C5D3', bins=30)
plt.axvline(ffc_survey_df['log_income'].quantile(), color='r', label='Binary line')
plt.legend(fontsize=18, loc='best')
ax.set_xlabel('log_Income', fontsize=12)
ax.set_ylabel('Frequency', fontsize=12)
ax.set_title('Income_hist', fontsize=12)
plt.show()
复制代码

posted on   python我的最爱  阅读(6908)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示