在学校学习数据挖掘课程,老师布置的大作业,自己选择了数据集进行分析,写下来做一个分享和记录,如有问题,请指正!

一、数据集选择

在kaggle选择了一个2023年全球YouTube统计数据,链接如下:

Global YouTube Statistics 2023 (kaggle.com)https://www.kaggle.com/datasets/nelgiriyewithana/global-youtube-statistics-2023

二、关于数据集

数据集包含了YouTube订阅者最多的部分频道的相关信息,一共995条数据、28个属性。各个属性名称及介绍如下:

rank:基于订阅者数量的YouTube频道排名

Youtuber:YouTube频道的名称

subscribers:频道订阅者数量

video views:频道上所有视频的总观看次数

category:频道的类别

Title:YouTube频道的标题

uploads:频道上上传的视频总数

Country:YouTube频道的来源国家/地区

Abbreviation:国家缩写

channel_type:YouTube频道的类型(例如个人频道、品牌频道)

video_views_rank:基于总视频观看量的频道排名

country_rank:根据频道所在国家/地区的订阅者数量的频道排名

channel_type_rank:基于渠道类型(个人或品牌)对频道进行排名

video_views_for_the_last_30_days:过去 30 天的总视频播放量

lowest_monthly_earnings: 频道估计的最低月收入

highest_monthly_earnings: 频道估计的最高月收入

lowest_yearly_earnings: 频道最低估计年收入

highest_yearly_earnings: 频道最高估计年收入

subscribers_for_last_30_days:过去 30 天内获得的新订阅者数量

created_year:YouTube频道创建的年份

created_month:创建YouTube频道的月份

created_date:YouTube频道创建的确切日期

Gross tertiary education enrollment (%):全国接受高等教育的人口比例

Population:国家总人口

Unemployment rate:全国失业率

Urban_population:居住在城市地区的人口百分比

Latitude:国家位置的纬度坐标

Longitude:国家位置的经度坐标

需要解决的关联分析问题就是:哪些属性对订阅者数量有较高关联性。由于数据集给的属性较多,并且部分属性有关联,所以我们选择部分属性进行关联分析即可。接下来针对这一问题对数据进行预处理。

1.导入需要使用的库和包并加载数据集

import numpy as np

import pandas as pd

from numpy import *

import matplotlib.pyplot as plt

import matplotlib

from matplotlib import colors as mcolors

from mlxtend.preprocessing import TransactionEncoder

from mlxtend.frequent_patterns import apriori, association_rules

# 加载数据集

data_init = pd.read_csv('Global YouTube Statistics.csv', encoding='ISO-8859-1')

2.查看缺失值

# 查看缺失值

def mis_value(data):

print("处理前的数据中含缺失值的数量")

print(data.isnull().sum())

结果:

处理前的数据中含缺失值的数量

rank 0

Youtuber 0

subscribers 0

video views 0

category 46

Title 0

uploads 0

Country 122

Abbreviation 122

channel_type 30

video_views_rank 1

country_rank 116

channel_type_rank 33

video_views_for_the_last_30_days 56

lowest_monthly_earnings 0

highest_monthly_earnings 0

lowest_yearly_earnings 0

highest_yearly_earnings 0

subscribers_for_last_30_days 337

created_year 5

created_month 5

created_date 5

Gross tertiary education enrollment (%) 123

Population 123

Unemployment rate 123

Urban_population 123

Latitude 123

Longitude 123

dtype: int64

rank 0

Youtuber 0

subscribers 0

video views 0

category 39

Title 0

uploads 0

Country 0

Abbreviation 0

channel_type 7

video_views_rank 1

country_rank 1

channel_type_rank 9

video_views_for_the_last_30_days 22

lowest_monthly_earnings 0

highest_monthly_earnings 0

lowest_yearly_earnings 0

highest_yearly_earnings 0

subscribers_for_last_30_days 276

created_year 3

created_month 3

created_date 3

Gross tertiary education enrollment (%) 1

Population 1

Unemployment rate 1

Urban_population 1

Latitude 1

Longitude 1

dtype: int64

可以看到部分属性有缺失值,针对这些缺失值选择直接删除。

二、灰色关联分析算法

由于数据集有用的数值数据较多,所以选择灰色关联分析算法进行关联分析。

1.直接从数据集文件中读取需要的属性,删除所有含缺失值的行,保存在新的文件中。

selected_data = data1[['video views', 'video_views_for_the_last_30_days'

,'uploads', 'subscribers_for_last_30_days'

,'Population','Latitude','Urban_population','created_year'

, 'highest_yearly_earnings']]

wine = selected_data.dropna(axis=0, how="any") # 缺失值删除

print(wine.head(5))

print(wine.isnull().sum())

wine.to_csv('wine.csv')

2.重新读取数据,需要对数值数据进行归一化处理,以消除不同特征之间的差异。

wine = pd.read_csv('wine.csv')

# 归一化

def dimensionlessProcessing(df):

newDataFrame = pd.DataFrame(index=df.index)

columns = df.columns.tolist()

for c in columns:

d = df[c]

MAX = d.max()

MIN = d.min()

MEAN = d.mean()

newDataFrame[c] = ((d - MEAN) / (MAX - MIN)).tolist()

return newDataFrame

3.计算单个特征与标准特征的灰色关联值。

def GRA_ONE(gray, m=0):

# 读取为df格式

gray = dimensionlessProcessing(gray)

# 标准化

std = gray.iloc[:, m] # 为标准要素

gray.drop(str(m),axis=1,inplace=True)

ce = gray.iloc[:, 0:] # 为比较要素

shape_n, shape_m = ce.shape[0], ce.shape[1] # 计算行列

# 与标准要素比较,相减

a = zeros([shape_m, shape_n])

for i in range(shape_m):

for j in range(shape_n):

a[i, j] = abs(ce.iloc[j, i] - std[j])

# 取出矩阵中最大值与最小值

c, d = amax(a), amin(a)

# 计算值

result = zeros([shape_m, shape_n])

for i in range(shape_m):

for j in range(shape_n):

result[i, j] = (d + 0.5 * c) / (a[i, j] + 0.5 * c)

# 求均值,得到灰色关联值,并返回

result_list = [mean(result[i, :]) for i in range(shape_m)]

result_list.insert(m,1)

return pd.DataFrame(result_list)

4.循环计算整个数据集的灰色关联值矩阵。

def GRA(DataFrame):

df = DataFrame.copy()

list_columns = [

str(s) for s in range(len(df.columns)) if s not in [None]

]

df_local = pd.DataFrame(columns=list_columns)

df.columns=list_columns

for i in range(len(df.columns)):

df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]

return df_local

5.灰色关联矩阵结果可视化。

# 灰色关联结果矩阵可视化

import seaborn as sns

def ShowGRAHeatMap(DataFrame):

colormap = plt.cm.RdBu

ylabels = DataFrame.columns.values.tolist()

f, ax = plt.subplots(figsize=(14, 14))

ax.set_title('GRA HeatMap')

# 设置展示一半,如果不需要注释掉mask即可

mask = np.zeros_like(DataFrame)

mask[np.triu_indices_from(mask)] = True

with sns.axes_style("white"):

sns.heatmap(DataFrame,

cmap="YlGnBu",

annot=True,

mask=mask,

)

plt.show()

data_wine_gra = GRA(wine)

# 假设你的 DataFrame 名为 data_wine_gra

data_types = data_wine_gra.dtypes

# 检查数据类型并转换为浮点数(或整数)

for col in data_types[data_types == 'object'].index:

data_wine_gra[col] = pd.to_numeric(data_wine_gra[col], errors='coerce')

# 绘制

ShowGRAHeatMap(data_wine_gra)

三、关联分析结果可视化展示

注释掉mask结果:

结束!

最后声明一下:部分代码来源于网络,但是都是自己整合的,如有问题,请联系我。欢迎指正!

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: