课后作业:Python机器学习环境的安装和配置

【作业提交】

将分类结果保存到文本文档进行提交,同时提交源代码。

  1. 测试结果命名为: ex01-结果图01-你的学号-你的姓名.png, ex01-结果图02-你的学号-你的姓名.png
  2. 源代码命名为: ex01-01-你的学号-你的姓名.py, ex01-02-你的学号-你的姓名.py, ex01-03-你的学号-你的姓名.py

*结果文件,要求每小题标注题号,两题之间要求空一行*


要求完成以下几个作业:

  • 利用pandas库和字典完成以下习题(ex01-01)
  • 利用matplotlib库绘制如下图(1)使用代码生成一个表达式为:$y=2x^2-3x^4+6x-3$ 的曲线图。(ex01-02)
  • 利用matplotlib库绘制如下图(2)生成直方图(ex01-03)

一. 利用pandas库和字典完成以下习题

  1. 生成如下表格
In [1]:
# 使用import关键字引入pandas库,为了简便使用缩写 “pd”来表示pandas库。
import pandas as pd

# 使用字典数据类型创建一个数据表,并用pandas库的DataFrame数据结构进行显示
data = {"姓名":["拿破仑","哥德巴赫","秦始皇","凯撒","耶稣"],
        "国家":["地球联盟","黑暗祭祀","地球联盟","黑暗祭祀","地球联盟"],
        "学号":["2019001","2019002","2019003","2019004","2019005"],
        "语文":[33,28,32,30,99],
        "数学":[98,97,94,92,100] ,
        "英语":[33,28,32,30,97],
        "科学":[98,97,94,92,98],
        "历史":[94,57,96,98,91]  
}
data_frame = pd.DataFrame(data)
display(data_frame)
姓名 国家 学号 语文 数学 英语 科学 历史
0 拿破仑 地球联盟 2019001 33 98 33 98 94
1 哥德巴赫 黑暗祭祀 2019002 28 97 28 97 57
2 秦始皇 地球联盟 2019003 32 94 32 94 96
3 凯撒 黑暗祭祀 2019004 30 92 30 92 98
4 耶稣 地球联盟 2019005 99 100 97 98 91
  1. 通过对表格的操作,获得以下几个结果

(1) 获取国家不等于“地球联盟”的数据

In [2]:
# 使用 “不等于 !=” 操作符排除字段中包含特定值的数据
display(data_frame[data_frame.国家 != "地球联盟"])
姓名 国家 学号 语文 数学 英语 科学 历史
1 哥德巴赫 黑暗祭祀 2019002 28 97 28 97 57
3 凯撒 黑暗祭祀 2019004 30 92 30 92 98

(2) 获取学号等于2019003的数据

In [3]:
display(data_frame[data_frame.学号 == "2019003"])
姓名 国家 学号 语文 数学 英语 科学 历史
2 秦始皇 地球联盟 2019003 32 94 32 94 96

(3)获取数学成绩大于95的同学的数据

In [5]:
display(data_frame[data_frame.数学 > 95])
姓名 国家 学号 语文 数学 英语 科学 历史
0 拿破仑 地球联盟 2019001 33 98 33 98 94
1 哥德巴赫 黑暗祭祀 2019002 28 97 28 97 57
4 耶稣 地球联盟 2019005 99 100 97 98 91

(4) 获取历史成绩大于60,同时属于“黑暗祭祀”的同学的信息

In [6]:
display(data_frame[(data_frame.历史 > 60) & (data_frame.国家 == "黑暗祭祀")])
姓名 国家 学号 语文 数学 英语 科学 历史
3 凯撒 黑暗祭祀 2019004 30 92 30 92 98
In [2]:
(data_frame.历史 > 60) & (data_frame.国家 == "黑暗祭祀")
Out[2]:
0    False
1    False
2    False
3     True
4    False
dtype: bool

二. 利用matplotlib库绘制如下图

  1. 使用代码生成一个表达式为:$y=2x^2-3x^4+6x-3$ 的曲线图。

自变量x的取值范围为:(-20, 20, 10)

对于取值范围有两种理解:

  • np.arange(-20, 20, 10) 起点-20,终点20,步长为10
  • np.linspace(-20, 20 ,10) 起点-20,终点20,生成10个元素的等差数列
In [5]:
# 通过inline指令,实现在Jupyter中的实时绘图功能
%matplotlib inline

# 1. 引入库
# 使用import关键字引入matplotlib库,为了简便使用缩写 “plt”来表示matplotlib库。
import matplotlib.pyplot as plt
import numpy as np

# 2. 指定坐标轴(x,y值)
# 使用linspace()函数生成一个-20到20,元素个数为10的等差数列。
# 令数列中的值为 x, 并根据表达式计算对应的 y值。
x = np.linspace(-20, 20, 10)
y = 2*x**2 - 3*x**4 + 6*x - 3

# 3. 把x,y的关系画到坐标轴上 plot(横坐标,纵坐标,标记,颜色。。。。)
#使用plot()函数绘制出曲线图
plt.plot(x, y, marker = "o")
plt.show()
  1. 生成直方图

直方图应包含6个序列,每个序列3种类型的特征,取值如下:

x_data = ('China', 'America', 'Japan', 'Germany', 'France', 'Italy')
y1_data = (120, 325, 310, 235, 227, 256)
y2_data = (225, 312, 314, 221, 253, 341)
y3_data = (232, 332, 222, 241, 190, 299)
In [7]:
# 通过inline指令,实现在Jupyter中的实时绘图功能
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

plt.figure(1)
x_index = np.arange(6)   #柱的索引
x_data = ('China', 'America', 'Japan', 'Germany', 'France', 'Italy')
y1_data = (120, 325, 310, 235, 227, 256)
y2_data = (225, 312, 314, 221, 253, 341)
y3_data = (232, 332, 222, 241, 190, 299)
bar_width = 0.2  #定义一个数字代表每个独立柱的宽度

# 使用 bar()函数定义柱状图的各个参数,依次包括:左偏移、高度、柱宽、透明度、颜色、图例
# 关于左偏移,不用关心每根柱的中心不中心,因为只要把刻度线设置在柱的中间就可以了
rects1 = plt.bar(x_index, y1_data, width=bar_width,alpha=0.4, color='b',label='legend1')          
rects2 = plt.bar(x_index + bar_width, y2_data, width=bar_width,alpha=0.5,color='r',label='legend2') 
rects3 = plt.bar(x_index + bar_width + bar_width, y3_data, width=bar_width,alpha=0.5,color='c',label='legend3') 

# 使用 xticks() 函数设置x轴的刻度线
plt.xticks(x_index + bar_width/2, x_data)
plt.legend() #显示图例
plt.show()