数据转换

研究方法
Python
作者

yangjh

发布于

2023年11月27日

数据转换是为后续数据分析工作做准备,数据转换工作包括:将来自不同来源的数据集成到一起、数据类型转化、生成新变量、重命名变量等内容。转换数据可以使其更容易被人理解,从而提高数据可视化的效果和直观性。

数据合并

合并多个数据框

"""合并多个数据框"""
pd.concat([df_raw_1,df_raw_2,df_raw_3,df_raw_4],ignore_index=True)

行列调整

删除行

"""删除填写时间过短及过长的的数据"""
df6 = df5.drop(index = df5.query('(填写问卷时长 <= 40) or (填写问卷时长 > 600)').index)

删除列

df2 = df1.drop(columns='来源详情')

重命名列

df4 = df3.rename(columns={
    '@1、您的性别': '性别',
    '@2、您每天使用手机的频率': '每天手机使用频率',
})

处理日期数据

处理日期是数据分析中的一个常见任务。首先,让我们讨论如何将字符串转换为日期类型,然后再探讨如何从日期中提取年份和月份。

将字符串转化为日期类型

在大多数编程语言中,可以使用特定的函数或方法将日期字符串转换为日期类型。例如,在Python中,可以使用datetime库中的strptime函数来实现这一转换。这个函数允许你指定日期字符串的格式,并将其转换为datetime对象。

例如,假设你有一个日期字符串"2023-11-27",你可以按照以下方式转换它:

from datetime import datetime

date_str = "2023-11-27"
date_obj = datetime.strptime(date_str, "%Y-%m-%d")

在这里,"%Y-%m-%d"指定了日期字符串的格式,其中%Y代表四位年份,%m代表月份,%d代表日。

从日期中提取年月

一旦你有了一个日期对象,提取年份和月份就相对简单了。在Python的datetime对象中,你可以直接访问yearmonth属性来获取这些信息。

继续使用上面的例子:

year = date_obj.year
month = date_obj.month

这样,year将包含年份(例如2023),而month将包含月份(例如11)。

字符串处理

删减内容

df4['填写问卷时长'] = df4['所用时间'].str.rstrip('秒')

运行后:

    所用时间 填写问卷时长
0   71秒 71
1   108秒    108
2   81秒 81

生成变量

将定距变量转化定序变量

将定距变量转化为定序变量是一种数据处理方法,主要出于简化数据、提高可解释性的考虑。这种转换使得连续的、可能值很多的定距变量变得更易于理解和解释,如将具体温度值简化为“低温”、“中温”、“高温”等级。在统计分析上,某些方法和模型更适用于分类数据,尤其是在处理非正态分布的数据或存在异常值时。此外,这种转换有助于揭示数据中的非线性关系,并在测量不准确或数据质量有问题时减少误差的影响。在数据缺失或不完整的情况下,转化为定序变量也是一种处理不确定性的方法。最后,转换有助于满足某些统计模型对数据的特定假设,如正态分布等。总体而言,这种转换有助于数据处理的简化和适应特定的统计分析需求。

df['星级'] = pd.cut(df['average'],
           bins=[0, 2, 4, 6, 8, 10],
           labels=['一星', '二星', '三星', '四星', '五星'])
result = df['星级'].value_counts(sort=False)
df_result['累计百分比(%)'] = result.values.cumsum()
"""
生成因变量:对待AI作品的态度(分值越高,态度越积极)
对待AI作品的态度 = 8、请问你认为借助AI创作出的作品可以被称为艺术品吗? + 9、    当您作为观看者时,请问您更喜欢观赏传统及现有绘画艺术作品还是AI(绘画)艺术作品?
"""
def re_gen_attitude1(x):
    """
    依据变量的取值,重新生成变量
    """
    if x == "不可以,只是新兴技术在其他领域的具体体现":
        return -1
    elif x == "可以,是理性与感性的结合":
        return 1
    else:
        return 0
def re_gen_attitude2(x):
    """
    依据变量的取值,重新生成变量
    """
    if x == "更喜欢感受传统及现有艺术作品的魅力":
        return -1
    elif x == "更喜欢AI作品,全新的视觉体验给观者带来愉悦的感觉":
        return 1
    else:
        return 0
df['对待AI作品的态度'] = df['8、请问你认为借助AI创作出的作品可以被称为艺术品吗?'].apply(re_gen_attitude1) + df['9、当您作为观看者时,请问您更喜欢观赏传统及现有绘画艺术作品还是AI(绘画)艺术作品?'].apply(re_gen_attitude2)