1、python进行数据预处理
import pandas as pd
import numpy as np
pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)
pd.set_option('max_colwidth',30)
获取数据
data = pd.read_csv("ad_performance.csv",index_col=0)
# 对数据进行审查
print('{:*^60}'.format('数据样本:统计描述'))
print(data.describe().round(4).T)
index_col 防止把索引放进统计数据
保留四位小数,并将结果进行转置
对缺失值的填充(均值)
print('{:*^60}'.format('缺失值:均值填充法'))
data = data.fillna(data.mean)
2.计算,合并:相关性
print('{:*^60}'.format('计算相关性:合并'))
print(data.corr().round(4).T)
data = data.drop(['平均停留时间'], axis=1)
data.drop([‘平均停留时间’], axis=1) 的作用是从数据集中删除名为 ‘平均停留时间’ 的列。axis=1: 表示删除列而不是行,因为axis=1表示操作的是列,而axis=0表示操作的是行。进行相关性分析的目的在于理解数据中变量之间的关系,这对于选择合适的特征、优化模型、发现潜在因果关系等方面
3.数据标准化::归一化Min-Max,0-1区间
数据标准化的目的是为了确保不同特征的数值范围一致,避免因尺度差异而导致的模型训练问题。当特征的值差异很大时,一些机器学习算法可能会偏向于影响更大的特征,而对其他特征的影响较小,从而影响模型性能。通过标准化,我们将所有特征的值缩放到相似的范围内,有助于提高模型训练的稳定性、速度和性能,确保模型能够更准确地学习并适应不同特征的贡献。
from sklearn.preprocessing import MinMaxScaler
matrix = data.iloc[:,1:7]
min_max_model = MinMaxScaler()
data_rescaled = min_max_model.fit_transform(matrix)
print(data_rescaled.round(2))
目标是对数据进行最小-最大规范化,即将数据缩放到0到1的范围内,以便在机器学习中更好地处理。导入了`MinMaxScaler`,这是一个用于缩放数据的工具。然后,从数据集中选择了一部分列,将它们存储在一个名为`matrix`的新数据集中。接下来,创建了一个`MinMaxScaler`的实例,并使用`fit_transform`方法对`matrix`进行最小-最大规范化。最后,打印出规范化后的数据。
4.特征数字化:独热编码(One-Hot)
特征数字化是将原始的分类数据转换为机器学习模型能够处理的数值型数据的过程。在处理布尔型数据(例如False和True)时,通常采用的编码方式是独热编码(One-Hot Encoding)。
独热编码的思想是为每个不同的分类值创建一个新的二进制特征,其中只有一个特征的值为1,表示该样本属于相应的类别,而其他特征的值都为0。这样,我们就将原来的分类信息转换为了数值型的二进制编码,便于机器学习模型的处理。
from sklearn.preprocessing import OneHotEncoder
onehot_mode = OneHotEncoder(sparse_output=False)
data_one = onehot_mode.fit_transform(data.iloc[:,7:12])
print('{:*^60}'.format('特征数字化:独热编码'))
print(data_one)
sparse_output=False 时,fit_transform 返回的是一个密集矩阵,即一个普通的二维数组,其中包含了独热编码的结果。
数据合并
print('{:*^60}'.format('数据维度合并:12个字段'))
data_matrix = np.hstack((data_rescaled, data_one))
data_rescaled和data_one是两个矩阵,通过hstack函数水平堆叠在一起,形成一个新的矩阵data_matrix。这种操作将两个矩阵的列(特征)连接在一起,得到一个包含了原始数值型数据和独热编码后的分类型数据的新矩阵。
5、KMeans建模
在K均值(KMeans)聚类建模中,决定分类数K是一个关键的步骤。一个常用的方法是通过计算轮廓系数来评估不同K值的聚类效果。轮廓系数考虑了样本在同一簇内的紧密度和与其他簇之间的分离度,取值范围在-1到1之间。对于每个样本,轮廓系数越接近1表示该样本聚类得越合理。为了选择最优的K值,可以通过计算不同K值下的平均轮廓系数,选择使平均轮廓系数最大化的K值,以达到最优的聚类效果。
KMeans建模:基于平均轮廓系数,找到最佳K值(2-10)
import os
# 设置环境变量,避免KMeans内存泄漏问题
os.environ["OMP_NUM_THREADS"] = "4" # 设置为你想要的线程数量
from sklearn.cluster import KMeans # 聚类算法
from sklearn.metrics import silhouette_score # 用于评估度量的模块
print('{:*^60}'.format('KMeans建模:基于平均轮廓系数'))
score_list = []
max_score = -1
for k in range(2,6): # 2,3,4,5
kmeans_model = KMeans(n_clusters=k,n_init=10) #建模
kmeans_temp = kmeans_model.fit_predict(data_matrix) #获取标签
score = silhouette_score(data_matrix,kmeans_temp) # 得到每个K下的平均轮廓系数
# 获取最佳k值
if score > max_score:
max_score = score
best_k = k
labels_temp = kmeans_temp
score_list.append([k,score])
print('{:*^60}'.format('所有的k值以及对应平均轮廓系数'))
print(score_list)
print('最佳K值:', best_k)
聚类结果分析
# 1.合并数据与聚类标签
cluster_labels = pd.DataFrame(labels_temp,columns=['clusters']) # 将聚类标签转化为df
merge_data = pd.concat((data,cluster_labels),axis=1) # 整合原始数据与聚类标签,纵向合并
# 2.各聚类下的样本量:select count(渠道标识) from table group by 聚类标签
cluster_counts = pd.DataFrame(merge_data['渠道代号'].groupby(merge_data['clusters'])
.count()).T.rename({'渠道代号':'counts'})
# 3.各聚类下的样本占比
cluster_percents = (cluster_counts / len(data)).round(3).rename({'counts': 'percentage'})
# 4.数值类特征的均值
features = []
for label in range(best_k):
label_data = merge_data[merge_data['clusters'] == label]
p1_data = label_data.iloc[:,1:7] #筛选出数值类特征
p1_des = p1_data.describe().round(3) #获取描述性统计信息
p1_mean = p1_des.iloc[1,:] # 获取均值数据
#5. 字符类特征的众数
p2_data = label_data.iloc[:,7:12] # 筛选出字符类特征
p2_des = p2_data.describe() # 获取描述性统计信息
p2_mode = p2_des.iloc[2,:] # 获取频数最高的标签
# 横向拼接2类不同特征的数据
merge_line = pd.concat((p1_mean,p2_mode),axis=0)
# 纵向拼接4类簇的统计数据
features.append(merge_line)
for label in range(best_k):
这是一个循环语句,range(best_k)创建了一个范围从0到best_k-1的整数序列,其中best_k表示你认为最佳的聚类簇数。循环中的label代表每一次循环的当前簇标签。
label_data = merge_data[merge_data[‘clusters’] == label]:
这行代码使用了布尔索引(Boolean indexing)来从merge_data中选择所有聚类标签为当前循环值label的行,即提取出了属于当前聚类簇的所有数据。
以上就是“python进行广告分析”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。