傻瓜式学习Python案例一:代码测试数据集是否存在偏见
你好! 欢迎来到傻瓜式学习Python社区,本期的主要任务是构建一个测试数据集是否存在偏差的函数。该函数通过统计性别比例并比较其差异,判断数据集中是否存在显著的性别偏差(超过10%)。
一、配置环境
1、下载PyCharm(自行搜索官方网站);
2、下载AnaConda(自行搜索网站教程);
3、新建项目New Project—设置存储路径—选择AnaConda环境(先在Anaconda中新建环境,根据目录找到已建环境)
思路:
1、新建数据;
2、构建用于检查数据集中是否存在性别偏差的函数;
3、运行结果(Ture/False)。
二、实验
1、删掉新建项目中新建窗口的所有代码;
2、复制以下代码;
data = [
{‘name’: ‘Alice’, ‘gender’: ‘female’},
{‘name’: ‘Bob’, ‘gender’: ‘male’},
{‘name’: ‘Charlie’, ‘gender’: ‘male’},
{‘name’: ‘Diana’, ‘gender’: ‘female’},
{‘name’: ‘Eve’, ‘gender’: ‘female’}
]//定义:数据data是一个列表
def check_gender_bias(data):
//定义函数check_gender_bias,接收一个数据集data作为参数
male_count = sum(1 for entry in data if entry[‘gender’] == ‘male’)
female_count = sum(1 for entry in data if entry[‘gender’] == ‘female’)
total_entries = len(data)
print(f"Male entries: {male_count/total_entries100:.2f}%")
print(f"Female entries: {female_count/total_entries100:.2f}%")
if abs(male_count - female_count)/total_entries > 0.1:
return True
else:
return False
三、运行及结果
print(check_gender_bias(data))
四、解释说明
(1)数据说明
这段代码中的data是一个列表(list),列表中的每个元素是一个字典(dict)。以下是详细解释:
- 列表(list)
data是一个列表,用方括号[]定义。
列表中的每个元素是一个字典,表示一个数据条目。
列表是可变的(可以添加、删除、修改元素),且元素是有序的。 - 字典(dict)
列表中的每个元素是一个字典,用花括号{}定义。
每个字典有两个键值对:
键’name’:值是一个字符串,表示名字。
键’gender’:值是一个字符串,表示性别,取值为’male’或’female’。
字典是无序的(在Python 3.7+中字典保持插入顺序),且可以通过键访问值。 - 具体数据
data = [
{‘name’: ‘Alice’, ‘gender’: ‘female’}, # 第一个字典
{‘name’: ‘Bob’, ‘gender’: ‘male’}, # 第二个字典
{‘name’: ‘Charlie’, ‘gender’: ‘male’}, # 第三个字典
{‘name’: ‘Diana’, ‘gender’: ‘female’}, # 第四个字典
{‘name’: ‘Eve’, ‘gender’: ‘female’} # 第五个字典]
第一个字典:{‘name’: ‘Alice’, ‘gender’: ‘female’}
name的值是’Alice’(字符串)。
gender的值是’female’(字符串)。
第二个字典:{‘name’: ‘Bob’, ‘gender’: ‘male’}
name的值是’Bob’。
gender的值是’male’。
以此类推。 - 数据类型总结
data是一个列表,包含5个字典。
每个字典有两个键值对,键是字符串,值也是字符串。 - 访问数据示例
// 访问第一个字典
first_entry = data[0]print(first_entry) // 输出: {‘name’: ‘Alice’, ‘gender’: ‘female’}
// 访问第一个字典中的’name’值
first_name = data[0][‘name’]print(first_name) // 输出: Alice
// 访问第一个字典中的’gender’值
first_gender = data[0][‘gender’]print(first_gender) // 输出: female
通过这种方式,可以逐层访问列表中的字典以及字典中的具体值。
(2)函数说明
这段代码定义了一个名为check_gender_bias的函数,用于检查数据集中是否存在性别偏差。以下是代码的逐步讲解: - 函数定义
def check_gender_bias(data):
这是一个函数定义,接受一个参数data,它应该是一个包含字典的列表,每个字典代表一个数据条目,且每个字典中包含一个键’gender’,其值为’male’或’female’。 - 统计性别数量
male_count = sum(1 for entry in data if entry[‘gender’] == ‘male’)
female_count = sum(1 for entry in data if entry[‘gender’] == ‘female’)
使用生成器表达式和sum()函数统计数据集中男性和女性的数量:
male_count:计算data中’gender’键值为’male’的条目数量。
female_count:计算data中’gender’键值为’female’的条目数量。 - 计算总条目数
total_entries = len(data)
total_entries是数据集的总条目数,即data的长度。 - 打印性别比例
print(f"Male entries: {male_count/total_entries100:.2f}%")
print(f"Female entries: {female_count/total_entries100:.2f}%")
计算男性和女性条目占总条目的百分比,并格式化输出,保留两位小数。 - 判断性别偏差
if abs(male_count - female_count)/total_entries > 0.1:
return True
else:
return False
计算男性和女性数量的绝对差值占总条目的比例:
如果该比例大于10%(即0.1),则认为存在性别偏差,返回True。
否则,返回False。
(3)运行并显示结果
print(check_gender_bias(data))
这行代码的作用是调用之前定义的check_gender_bias函数,并将结果打印到控制台。
- 函数调用
check_gender_bias(data)
调用check_gender_bias函数,并将data作为参数传递给它。
data是一个包含性别信息的列表,如之前定义的示例数据。 - 函数执行
函数内部会执行以下操作:
统计性别数量:计算男性和女性的数量。
计算总条目数:获取data的长度。
打印性别比例:输出男性和女性条目占总条目的百分比。
判断性别偏差:如果男性和女性数量的绝对差值占总条目的比例超过10%,返回True,否则返回False。 - 打印结果
print(check_gender_bias(data))
将check_gender_bias(data)的返回值(True或False)打印到控制台。