数据分析-61-基于可视化与卡方检验探索emoji表情使用情况(包含代码和数据)

算法学习4对1辅导论文辅导核心期刊
项目的代码和数据下载可以通过公众号滴滴我


数据下载

算法学习4对1辅导论文辅导核心期刊
项目的代码和数据下载可以通过公众号滴滴我

一、项目背景

Emoji,作为数字交流中的色彩斑斓的小图标,已经成为了现代沟通中不可或缺的一部分,从简单的笑脸到复杂的场景描绘,表情符号为线上对话增添了情感和语境,使得信息传达更加生动且富有表现力,随着社交媒体和即时通讯应用的普及,表情符号的使用范围日益广泛,甚至超越了语言和文化的界限,成为全球用户之间跨文化交流的通用语言。
本项目旨在通过对不同社交平台上 emoji 表情符号使用状况的深入分析,揭示表情符号在不同情境、平台、性别和年龄群体中的使用模式。为此,通过可视化和卡方检验的方法,探讨表情符号的使用规律以及其与用户特征之间的关系。

二、数据说明

该数据共5000条,共5个字段。分别是:EmojiContextPlatformUser AgeUser Gender

列名说明
Emoji使用的表情符号。
Context表情符号使用的情境(如愤怒、庆祝、困惑等)。
Platform使用的平台(如 Snapchat、Instagram、Facebook 等)。
User Age用户年龄。
User Gender用户性别(如男性、女性等)。

下面是表的部分数据。
在这里插入图片描述

三、数据处理

1、Python库导入及数据读取

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import display
import scipy.stats as stats
data = pd.read_csv("emoji_usage_dataset.csv")

2、数据预览

# 查看数据信息
data.info()

在这里插入图片描述

查看分类特征的唯一值

# 查看分类特征的唯一值
characteristic = ['Emoji','Context','Platform','User Gender']
for i in characteristic:
    print(f'{i}:')
    print(data[i].unique())
    print('-'*50)

在这里插入图片描述

data.head()

在这里插入图片描述

四、可视化分析

1、表情符号与情境使用频率

# 为了方便观察,以及探究自己想要研究的表情符号,这里封装了一个制作交互式表格的函数。
def interactive_pivot_table(data, index_feature, column_feature, aggfunc='size', fill_value=0):
    """
    创建一个交互式数据透视表,并提供排序和转置的功能。

    参数:
    - data: pandas DataFrame, 数据源
    - index_feature: str, 作为数据透视表行索引的列名称
    - column_feature: str, 作为数据透视表列索引的列名称
    - aggfunc: str 或 函数, 数据透视表的聚合函数,默认是 'size',即计数
    - fill_value: 数值, 用于填充缺失值的值,默认是 0
    """

    # 生成数据透视表
    # pivot_table 是 pandas 用于快速生成数据透视表的方法
    # index 是行索引,columns 是列索引,aggfunc 是聚合函数,fill_value 是填充值
    pivot_table = data.pivot_table(index=index_feature, columns=column_feature, aggfunc=aggfunc, fill_value=fill_value)
    
    # 添加 'Total' 列和行,计算每行和每列的总和
    pivot_table.loc['Total'] = pivot_table.sum(axis=0)  # 计算每列的总和并添加为新行 'Total'
    pivot_table['Total'] = pivot_table.sum(axis=1)  # 计算每行的总和并添加为新列 'Total'
    
    def display_table_fixed(sort_by=None, ascending=False, transpose=False):
        """
        显示排序后的数据透视表,并根据需要转置行列。

        参数:
        - sort_by: str, 要排序的列或行的名称
        - ascending: bool, 排序顺序,默认是 False,表示降序
        - transpose: bool, 是否转置行列,默认是 False
        """

        # 根据 transpose 参数确定是否转置数据表
        data_to_display = pivot_table.transpose() if transpose else pivot_table

        # 如果没有指定排序列,或者指定的排序列不存在,默认使用 'Total'
        if sort_by is None or sort_by not in data_to_display.columns:
            sort_by = 'Total'

        try:
            # 排序数据,首先排除 'Total' 行或列
            sorted_table = data_to_display.drop(index='Total', errors='ignore').sort_values(by=sort_by, ascending=ascending)
            
            if sort_by == 'Total':
                # 如果以 'Total' 作为排序依据
                if transpose:
                    # 如果转置了数据表,'Total' 列放在第一列,'Total' 行放在最后
                    sorted_table['Total'] = data_to_display['Total']
                    sorted_table = sorted_table[['Total'] + [col for col in sorted_table.columns if col != 'Total']]
                    sorted_table.loc['Total'] = data_to_display.loc['Total']
                else:
                    # 未转置时,将 'Total' 行放在最后,'Total' 列放在第一列
                    sorted_table.loc['Total'] = data_to_display.loc['Total']
                    sorted_table = sorted_table.loc[[row for row in sorted_table.index if row != 'Total'] + ['Total']]
                    sorted_table = sorted_table[['Total'] + [col for col in sorted_table.columns if col != 'Total']]
            else:
                # 以其他列或行排序时,排序依据放在第一列或行,'Total' 放在最后
                if transpose:
                    sorted_table['Total'] = data_to_display['Total']
                    sorted_table = sorted_table[[sort_by] + [col for col in sorted_table.columns if col != sort_by and col != 'Total'] + ['Total']]
                    sorted_table.loc['Total'] = data_to_display.loc['Total']
                else:
                    sorted_table.loc['Total'] = data_to_display.loc['Total']
                    sorted_table = sorted_table.loc[[row for row in sorted_table.index if row != 'Total'] + ['Total']]
                    sorted_table = sorted_table[[sort_by] + [col for col in sorted_table.columns if col != sort_by and col != 'Total'] + ['Total']]

            # 显示最终排序和调整后的数据表
            display(sorted_table)

        except KeyError as e:
            display(f"错误: {e}")  # 如果指定的排序列或行不存在,抛出 KeyError 并显示错误信息
        except Exception as e:
            display(f"意外错误: {e}")  # 捕获所有其他类型的异常,并显示错误信息

    def update_sort_options(change):
        """
        根据是否转置数据表,动态更新排序依据选项。

        参数:
        - change: 监听事件的变化对象
        """
        # 如果转置了数据表,排序依据应是行索引,否则是列索引
        if change.new:
            sort_by_dropdown.options = list(pivot_table.index)
        else:
            sort_by_dropdown.options = list(pivot_table.columns)

    # 初始化排序依据的默认值为 'Total',如果 'Total' 在列名中,则使用它作为默认值
    default_sort_by = 'Total' if 'Total' in pivot_table.columns else pivot_table.columns[0]

    # 创建排序依据的下拉选择框
    sort_by_dropdown = widgets.Dropdown(
        options=list(pivot_table.columns),  # 选择排序的列
        value=default_sort_by,  # 默认选择 'Total'
        description='排序依据:'  # 显示的标签
    )

    # 创建升序/降序的切换按钮
    order_toggle = widgets.ToggleButtons(
        options=[('降序', False), ('升序', True)],  # 两个选项:降序和升序
        description='排序顺序:',  # 显示的标签
        disabled=False,  # 允许点击
        button_style=''  # 样式设置为空
    )

    # 创建转置行列的复选框
    transpose_toggle = widgets.Checkbox(
        value=False,  # 默认不转置
        description='转置行/列',  # 显示的标签
        disabled=False  # 允许点击
    )

    # 将交互式组件绑定到 display_table_fixed 函数,并显示出来
    ui = widgets.interactive(display_table_fixed, sort_by=sort_by_dropdown, ascending=order_toggle, transpose=transpose_toggle)
    # 监听转置复选框的变化,当转置状态改变时,动态更新排序依据选项
    transpose_toggle.observe(update_sort_options, names='value')

    # 显示整个交互式界面
    display(ui)
interactive_pivot_table(data,'Emoji','Context')

在这里插入图片描述

通过观察此交互表格,得到如下结论:

  1. 使用最多的表情符号是🤣,最少的是😉,其中: 愤怒 (angry) 情境下常用的表情符号有:😭、🤔 和 😜。 喜欢 (love) 情境下常用的表情符号有:👍、🙏 和 🎉。 困惑 (confusion) 情境下常用的表情符号有:👏、😏 和 😅。庆祝 (celebration) 情境下常用的表情符号有:😘、😇 和 🤪。搞笑 (funny) 情境下常用的表情符号有:🙏、🥰 和 💔。支持 (support) 情境下常用的表情符号有:💕、🎉 和 😅。惊讶 (surprise) 情境下常用的表情符号有:💔、😭 和 🤔。 开心 (happy) 情境下常用的表情符号有:😡、😇 和 🙏。 酷 (cool) 情境下常用的表情符号有:🤩、💕 和 😅。悲伤 (sad) 情境下常用的表情符号有:😜、😢 和 ❤。
  2. 在所有情境中,出现最多的情境是喜欢(love),最少的情境是开心(happy)和惊讶(surprise),其中以❤、🎉、👍为例:❤、🎉和👍出现在喜欢(love) 的情境最多。

2、表情符号与平台使用频率

interactive_pivot_table(data,'Emoji','Platform')

在这里插入图片描述

通过观察此交互表格,得到如下结论:

  1. 所有平台中,Twitter 使用的表情符号是最多的,其中:Snapchat 平台下常用的表情符号有:🤗、😅 和 😏。Instagram 平台下常用的表情符号有:😜、🎉 和 🤩。Facebook 平台下常用的表情符号有:😭、🎉 和 🙏Twitter 平台下常用的表情符号有:💕、🤣 和 👍。TikTok 平台下常用的表情符号有:👏、🤣 和 😊。WhatsApp 平台下常用的表情符号有:🤔、💔 和 🤣。
  2. 以❤、🎉、👍为例:🤣 出现在 Twitter 和 TikTok 平台最多。🎉 出现在 Instagram 和 Facebook 平台最多。👍 出现在 Twitter 和 Instagram 平台最多。

3、表情符号在不同年龄段的使用频率

# 定义年龄段
bins = [13, 19, 29, 39, 49, 59, 65]
labels = ['13-19岁', '20-29岁', '30-39岁', '40-49岁', '50-59岁', '60-65岁']
data['Age Group'] = pd.cut(data['User Age'], bins=bins, labels=labels, right=True)
interactive_pivot_table(data,'Emoji','Age Group')

在这里插入图片描述

总结:
13-19岁 年龄段下常用的表情符号有:💔、😳 和 🤗。
20-29岁 年龄段下常用的表情符号有:👏、💔 和 😜。
30-39岁 年龄段下常用的表情符号有:🤣、👏 和 😭。
40-49岁 年龄段下常用的表情符号有:🙏、🤔 和 💕。
50-59岁 年龄段下常用的表情符号有:🤣、😜 和 🎉。
60-65岁 年龄段下常用的表情符号有:😜、😊 和 💕。

4、性别差异下表情符号的使用频率

interactive_pivot_table(data,'Emoji','User Gender')

在这里插入图片描述

总结

  1. 女性最常用的符号表情是:🎉、💔和🤣。
  2. 男性最常用的符号表情是:🤣、👏和🤔。

5、不同平台下的用户情况

plt.figure(figsize=(10, 6))
sns.boxplot(x='Platform', y='User Age', data=data)
plt.title('不同平台下的用户年龄分布')
plt.xlabel('平台')
plt.ylabel('用户年龄')
plt.show()

在这里插入图片描述

plt.figure(figsize=(10,6))
sns.countplot(x='Platform', hue='User Gender', data=data)
plt.title('不同平台上的用户性别分布')
plt.xlabel('平台')
plt.ylabel('用户数量')
plt.show()

在这里插入图片描述

总结:

  1. 各个平台的用户年龄分布都较为广泛,从20岁到60岁以上的用户都有分布。
  2. 各个平台的用户年龄中位数大致在40岁左右,这表明各个平台的用户在年龄上较为均衡,没有明显的年轻化或老龄化趋势。
  3. 在所有平台中,Twitter 和 Instagram 的用户年龄分布略偏年轻,年龄中位数略低,可能表明这两个平台在年轻用户中更受欢迎。
  4. 各个平台上男性和女性用户的分布都比较均衡,但在不同平台之间存在一些差异。

五、卡方检验

def chi_square_test(data,var1, var2):
    contingency_table = pd.crosstab(data[var1], data[var2])
    chi2, p, dof, expected = stats.chi2_contingency(contingency_table)
    return chi2, p

1、使用表情符号的因素

chi_square_results = {}
cat_features = ['Context', 'Platform', 'User Gender','Age Group']
chi_square_results = {feature: chi_square_test(data,feature, 'Emoji') for feature in cat_features}

chi_square_df = pd.DataFrame.from_dict(chi_square_results,orient='index',columns=['Chi-Square','P-Value'])
chi_square_df

在这里插入图片描述

  1. 平台虽然接近显著水平,但其影响较弱。
  2. 年龄、情境和性别似乎对表情符号的选择没有显著影响,表明在这些维度上用户的选择相对一致。

可能是因为数据类别过多且过于分散,这里使用前10个高频表情符号,以及把10个情境划分为积极、消极、中性3个情境再研究一次。

# 筛选频率前10的表情以及将情境化分为3类
top_10_emojis = data['Emoji'].value_counts().head(10).index

data_top_emojis = data[data['Emoji'].isin(top_10_emojis)]
context_mapping = {
    'celebration': 'positive',
    'happy': 'positive',
    'love': 'positive',
    'angry': 'negative',
    'sad': 'negative',
    'confusion': 'negative',
    'cool': 'neutral',
    'support': 'neutral',
    'surprise': 'neutral',
    'funny': 'neutral'
}
data_top_emojis = data[data['Emoji'].isin(top_10_emojis)].copy()
data_top_emojis['Context Group'] = data_top_emojis['Context'].map(context_mapping)
chi_square_results = {}
cat_features = ['Context Group', 'Platform', 'User Gender','Age Group']
chi_square_results = {feature: chi_square_test(data_top_emojis,feature, 'Emoji') for feature in cat_features}

chi_square_df = pd.DataFrame.from_dict(chi_square_results,orient='index',columns=['Chi-Square','P-Value'])
chi_square_df

在这里插入图片描述
优化后,发现平台达到了显著水平,但是年龄、情境和性别似乎对表情符号的选择没有显著影响。

2、选择平台的影响因素

chi_square_results = {}
cat_features = ['Context', 'User Gender','Age Group']
chi_square_results = {feature: chi_square_test(data ,feature, 'Platform') for feature in cat_features}

chi_square_df = pd.DataFrame.from_dict(chi_square_results,orient='index',columns=['Chi-Square','P-Value'])
chi_square_df

在这里插入图片描述
通过卡方检验,发现选择平台的选择似乎不太受到情境、性别或年龄组的影响。

六、总结

本项目主要通过可视化和卡方检验研究emoji表情的使用情况,结论如下:

  1. 使用最多的表情符号是🤣,最少的是😉,不同情境下常用的表情符号如下:
    • 愤怒 (angry) 情境下常用的表情符号有:😭、🤔 和 😜。
    • 喜欢 (love) 情境下常用的表情符号有:👍、🙏 和 🎉。
    • 困惑 (confusion) 情境下常用的表情符号有:👏、😏 和 😅。
    • 庆祝 (celebration) 情境下常用的表情符号有:😘、😇 和 🤪。
    • 搞笑 (funny) 情境下常用的表情符号有:🙏、🥰 和 💔。
    • 支持 (support) 情境下常用的表情符号有:💕、🎉 和 😅。
    • 惊讶 (surprise) 情境下常用的表情符号有:💔、😭 和 🤔。
    • 开心 (happy) 情境下常用的表情符号有:😡、😇 和 🙏。
    • 酷 (cool) 情境下常用的表情符号有:🤩、💕 和 😅。
    • 悲伤 (sad) 情境下常用的表情符号有:😜、😢 和 ❤。
  2. 在所有情境中,出现最多的情境是喜欢(love),最少的情境是开心(happy)和惊讶(surprise),其中以❤、🎉、👍为例:❤、🎉和👍出现在喜欢(love) 的情境最多。
  3. 所有平台中,Twitter 使用的表情符号是最多的,并且不同平台下常用的表情符号如下:
    • Snapchat 平台下常用的表情符号有:🤗、😅 和 😏。
    • Instagram 平台下常用的表情符号有:😜、🎉 和 🤩。
    • Facebook 平台下常用的表情符号有:😭、🎉 和 🙏。
    • Twitter 平台下常用的表情符号有:💕、🤣 和 👍。
    • TikTok 平台下常用的表情符号有:👏、🤣 和 😊。
    • WhatsApp 平台下常用的表情符号有:🤔、💔 和 🤣。
  4. 以❤、🎉、👍为例:🤣 出现在 Twitter 和 TikTok 平台最多。🎉 出现在 Instagram 和 Facebook 平台最多。👍 出现在 Twitter 和 Instagram 平台最多。
  5. 不同年龄段下常用的表情符号如下:
    • 13-19岁 年龄段下常用的表情符号有:💔、😳 和 🤗。
    • 20-29岁 年龄段下常用的表情符号有:👏、💔 和 😜。
    • 30-39岁 年龄段下常用的表情符号有:🤣、👏 和 😭。
    • 40-49岁 年龄段下常用的表情符号有:🙏、🤔 和 💕。
    • 50-59岁 年龄段下常用的表情符号有:🤣、😜 和 🎉。
    • 60-65岁 年龄段下常用的表情符号有:😜、😊 和 💕。
  6. 性别差异下使用的表情偏好:
    • 女性最常用的符号表情是:🎉、💔和🤣。
    • 男性最常用的符号表情是:🤣、👏和🤔。
  7. 根据卡方检验,可以认为平台与表情符号使用之间可能存在一定的关联,其他的年龄、使用情境、性别与表情符号使用之间的关联并不大。

算法学习4对1辅导论文辅导核心期刊
项目的代码和数据下载可以通过公众号滴滴我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI研习星球

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

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

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

打赏作者

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

抵扣说明:

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

余额充值