9.6 第七课作业
作业1:
模仿课上的例子,根据公司小数数据画出交易总数最高10个公司条形图。
提示:可以使用sort_values(by= quantity) 来实现。
作业2:使用seaborn包画图
画出花萼宽度和长度的散点图,使用品种划分数据
画出花萼的长度的箱线图,使用品种划分数据
作业3(选做):波士顿房价数据的可视化
from sklearn import datasets
boston_dataset = datasets.load_boston()
著名的机器学习数据集,大家尝试观察数据,提出自己的观点。建议的作业方式依然是以文章链接的方式来做。
答疑Q&A目录:
1,代码理解:max函数
2,代码理解:subplot(121)
3,代码理解:inplace=True
4,代码运行
5,代码运行出错:读取文件
6,代码运行出错
7,代码运行出错
8,代码运行:填充图像面积
9,代码运行:图表
10,代码运行:删除图表字符
11,图表理解:离散化
12,代码理解:tick / barh
13,代码运行出错:无效句法
14,代码理解:空格
15,代码运行出错
16,代码理解
Q 1 :我自己实现了一下agg自带的max函数。有个问题是,之前老师有些max=None,但是这么写报i和max不是一个类型。有点郁闷。
# 手动实现max
def manual_max(arr):
max = 0
for i in arr:
if (i > max):
max = i
return max
#manual_max(iris.sepal_length)
iris.groupby('species').agg({'sepal_length':[manual_max]})
A:对,不是一个类型,所以我有个判断
if max is None:
max = i
类似这样的操作。
Q 2 :在一张图上画了两个图,就是那个aaa_subplot。我的问题是,ax1 /ax2只是在产生的时候得到,但是这两个变量在后面的函数中并没有使用。那么怎么知道是画在第一个地方还是画的第二个?
A:ax1后面的subplot(121)代表一行两个图的第一个图
ax2后面的subplot(122)代表一行两个图的第二个图
Q 3 :第七次课程里面,求销售额最高的10个公司那个例题,老师用的更换名字的代码,最后面的inplace=True的作用是什么啊?我把inplace=True删掉,输出的结果也是一样的。
A :inplace=True相当于把前面修改过的名字传回到原数据中。
Q 4 :第6课选做作业里面,如何表示非星期六或星期天?求解答。
A :tips[(tips[day] != "Sun") & (tips[day] != "Sat")]
Q 5 :读取文件的时候出现了上图(图1)错误提示,怎么办?
A :从QQ群里面下载文件,估计你这个文件有问题。
Q 6 :我用自定义函数agg,为什么会报错?对照例子看了好多遍,都没发现问题(参照上面两个图)
A:首先,第一个图返回的不是一个统计量,非标量,需要使用更通用的apply方法,还有一个问题,arr.mean(),这个是求按分组求各列的平均值,但是species是字符串型,无法计算平均值。
二图,错误原因也是因为返回的值非标量,需要使用通用的apply方法,而不是agg。
追问Q:还是没弄懂,我按照老师的方法,只是定义的函数我改成了delta_iris,而不是range_iris。结果就出错了,难道和定义的名字还有关系吗?我彻底疯了,这个问题困惑了4个小时了。过不去了…………
A:和名字没关系,主要是理解apply和agg的区别,多尝试不同的案例试试。
Q 7 :按老师的操作,列名变成了数字,图4,这是什么原因?
A:注意,这里columns写错了。
Q 8 :作业7.1与7.2还是简单的,主要就是把例题中的名字换一下再运行下。目前有个关于图像的填充问题一直没得到解决:y=sin(x)如图显示(图5),如何填充这个图像下侧的面积?
A:试试如下代码:plt.fill_between(x, y, y2=-1),是不是你想要的效果。
Q 9 :问题,超过9张图,能画在一张画布上吗?(图6)
A :可以的,你可以试试,三行三列。
Q 10 :想用.show()把sns箱图结果里的字去掉,未果,如上图(图7),求教sns里怎么去掉?
A:可以的,要把plt.show()放在最后一行
Q 11 :选做题,1看下房价和犯罪率的关系:其实不大懂数学和读图,猜一下这个图是房价30-50之间的犯罪率最低,房价低于30或是最高50的地区比较容易发生犯罪,所以买房子尽量避开贫民区和土豪的地。。
A:如果你要画房价与犯罪率的箱图,首先需要把房价按区间分组离散化,比如0.1-0.2之间是一组,不然这图感觉就是奇葩的散点图,什么也说明不了
Q 12 :问题:图9,标注1,为什么这个tick改的就是y轴呢?也没指明x还是y
标注2,为什么这里的plt.yticks, 只把第二图里的y轴改掉了,格式上没有缩进,程序怎么识别的是要改第二个而没把第一个图的y轴也给隐藏呢?
另外,barh(x, y)里,x是不是x轴,y是不是y轴?貌似由bar变成barh,x和y跟着反过来了。。。但是下面的plt.x/yticks,还是按照barh之后的x/y来的。。
A:label的意思是标签,柱形图的标签只存在与一个位置,另一个是数值啊,所以不用指定。
visible为什么不影响第一张图,你可以理解为有个画笔吧,当调用了add_subplot(121),相当于画笔开始画第二幅图了。
barh和bar的方法定义你可以看下,他们的变量都不是表示x, y,也就是并没有说开头两个参数是代码x、y,只是表示一个是标签一个是数值。
Q 13 :这里一直提示 America那里有一个 无效句法,但是我不知道问题在哪里。哪位同学可以帮我看下啊
A:变量名不能有空格,可以用North_American代替North American
Q 14 :使用unique统计的时候,这里有空格(图11)。是因为这里不是变量名,是dadaframe的一个数值,所以允许?
A :是的。
Q 15 :我遇到一个人均平均消费水平的问题,最后一列的结果总是不对,有人能看出原因吗?(图12)
A :取值运算中 . 与[ ] 不一定等价 。改成图13.
Q 16 :为什么这个结果显示不是0呢?(图14)
A:图15,我这么理解的,是内部计算是保留精读的问题,这里math.pi*360/2pi 不等于180,所以结果不是0。math.asin(np.sin(math.pi))用反函数求了对应的弧度,和正弦值相等,符合弧度无穷小时,正弦曲线呈现y=x的性质。不知道这样够不够说明清楚了。尝试用了degree转换,但没成功
以上内容整理来源:新生大学 —— 解密大数据团队的《Python编程&数据科学入门》线上课程 第七课《Matplotlib入门》的 作业区/讨论区以及QQ群聊记录。