Python数据分析答疑7:Matplotlib入门

作者: Lochaiching | 来源:发表于2017-09-21 16:35 被阅读129次

    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")]

    图1

    Q 5 :读取文件的时候出现了上图(图1)错误提示,怎么办?

    A :从QQ群里面下载文件,估计你这个文件有问题。

    Q 6 :我用自定义函数agg,为什么会报错?对照例子看了好多遍,都没发现问题(参照上面两个图)

    A:首先,第一个图返回的不是一个统计量,非标量,需要使用更通用的apply方法,还有一个问题,arr.mean(),这个是求按分组求各列的平均值,但是species是字符串型,无法计算平均值。

    二图,错误原因也是因为返回的值非标量,需要使用通用的apply方法,而不是agg。

    追问Q:还是没弄懂,我按照老师的方法,只是定义的函数我改成了delta_iris,而不是range_iris。结果就出错了,难道和定义的名字还有关系吗?我彻底疯了,这个问题困惑了4个小时了。过不去了…………

    A:和名字没关系,主要是理解apply和agg的区别,多尝试不同的案例试试。

    图4

    Q 7 :按老师的操作,列名变成了数字,图4,这是什么原因?

    A:注意,这里columns写错了。

    图5

    Q 8 :作业7.1与7.2还是简单的,主要就是把例题中的名字换一下再运行下。目前有个关于图像的填充问题一直没得到解决:y=sin(x)如图显示(图5),如何填充这个图像下侧的面积?

    A:试试如下代码:plt.fill_between(x, y, y2=-1),是不是你想要的效果。

    图6

    Q 9 :问题,超过9张图,能画在一张画布上吗?(图6)

    A :可以的,你可以试试,三行三列。

    图7

    Q 10 :想用.show()把sns箱图结果里的字去掉,未果,如上图(图7),求教sns里怎么去掉?

    A:可以的,要把plt.show()放在最后一行

    图8

    Q 11 :选做题,1看下房价和犯罪率的关系:其实不大懂数学和读图,猜一下这个图是房价30-50之间的犯罪率最低,房价低于30或是最高50的地区比较容易发生犯罪,所以买房子尽量避开贫民区和土豪的地。。

    A:如果你要画房价与犯罪率的箱图,首先需要把房价按区间分组离散化,比如0.1-0.2之间是一组,不然这图感觉就是奇葩的散点图,什么也说明不了

    图9

    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,只是表示一个是标签一个是数值。

    图10

    Q 13 :这里一直提示 America那里有一个 无效句法,但是我不知道问题在哪里。哪位同学可以帮我看下啊

    A:变量名不能有空格,可以用North_American代替North American

    图11

    Q 14 :使用unique统计的时候,这里有空格(图11)。是因为这里不是变量名,是dadaframe的一个数值,所以允许?

    A :是的。

    图12 图13

    Q 15 :我遇到一个人均平均消费水平的问题,最后一列的结果总是不对,有人能看出原因吗?(图12)

    A :取值运算中 . 与[ ] 不一定等价 。改成图13.

    图14 图15

    Q 16 :为什么这个结果显示不是0呢?(图14)

    A:图15,我这么理解的,是内部计算是保留精读的问题,这里math.pi*360/2pi 不等于180,所以结果不是0。math.asin(np.sin(math.pi))用反函数求了对应的弧度,和正弦值相等,符合弧度无穷小时,正弦曲线呈现y=x的性质。不知道这样够不够说明清楚了。尝试用了degree转换,但没成功

    以上内容整理来源:新生大学 —— 解密大数据团队的《Python编程&数据科学入门》线上课程 第七课《Matplotlib入门》的 作业区/讨论区以及QQ群聊记录。

    相关文章

      网友评论

        本文标题:Python数据分析答疑7:Matplotlib入门

        本文链接:https://www.haomeiwen.com/subject/afkssxtx.html