来自CAU李光军《Python语言程序设计》的课后练习
作为一个科班生,上这门公选课实在是有点说不过去hh
但由于我只是一个python究极小白,所以也没有什么不对劲orz
(欢迎各位大佬对代码批评指正)
更新此贴:仅作为复习总结使用,同校的朋友可以参考(不过不建议照搬啊hh)
任务要求:
1.读取数据
(1)葡萄酒探索
2.处理数据
(1)查看白葡萄酒共分为几种品质等级。
(2)按白葡萄酒等级将数据集划分为7个子集,统计在每个品质的样本量。
(3) 统计在每个品质的样本量
(4)求每个数据集中fixed acidity的均值(保留小数点后2位)
(5)通过读论文,你可以分析的其他问题,有简单的描述。
提供:去格式的代码和运行结果。不建议直接提交“.ipynb”格式文件。
数据集:
数据说明:
使用红葡萄酒(学号最后一位为偶数和零)和白葡萄酒(学号最后一位为奇数)样本创建了两个数据集。
输入包括客观测试(如PH值),输出基于感官数据(葡萄酒专家至少进行3次评估的中位数)。每位专家对葡萄酒质量进行分级
介于0(非常差)和10(非常优秀)之间。
实例数:红酒-1599;白葡萄酒-4898。
6.属性数:11+输出属性
注意:一些属性可能是相关的,因此应用某种类型的特征选择。
7.属性信息:
输入变量(基于理化测试):
1-固定酸度
2-挥发性酸度
3-柠檬酸
4-残余糖
5-氯化物
6-游离二氧化硫
7-总二氧化硫
8-密度
9-pH值
10-硫酸盐
11-酒精
输出变量(基于感官数据):
12-质量(分数在0到10之间)
参考文献:
Modeling wine preferences by data mining from physicochemical properties..pdf
import csv
# 1
f = open(r"C:\Users\86158\Desktop\winequality_white.csv")
reader = csv.reader(f, delimiter=";")
content = []
for row in reader:
content.append(row)
# 2.1
f.close()
quality_list = []
for row in content[1:]:
try:
quality_list.append(int(row[-1]))
except:
continue
quality_count = set(quality_list)
print(f"葡萄酒共{len(quality_count)}种等级,为{quality_count}")
# 2.2
content_dict = {}
for row in content[1:]:
try:
quality = int(row[-1])
except:
continue
if quality not in content_dict.keys():
content_dict[quality] = [row]
else:
content_dict[quality].append(row)
for key in content_dict:
print(f"{key}等级:{len(content_dict[key])}")
# 2.3
number_tuple = []
for key, value in content_dict.items():
number_tuple.append((key, len(value)))
print(f"\n统计每种品质的样本量:{number_tuple}")
# 2.4
mean_list = []
for key, value in content_dict.items():
sum = 0
for row in value:
sum += float(row[0])
mean_list.append((key, sum / len(value)))
print("\n每种品质的fixed acidity均值如下:")
for item in mean_list:
print(f"{item[0]}:{'%.2f' % item[1]}")
# 2.5
# 1 等级中值为6,且各等级的标本量基本符合统计规律的正态分布。
# 2 等级越高,fixed acidity越大。
# 3 某些化学物质属性之间相关联。