Python数据分析入门(一)——初探数据可视化_python辩证分析技术亮点-程序员宅基地

技术标签: 朝数据可视化、数据分析进击  数据可视化  Python  

前言

静下心算算,当程序员已经有好几年了,不过自大学时代开始,学习对我来说就是个被动接受的过程,学校的课程、当时热门的移动端开发、数据库的学习、web学习、PHP后端学习……需要做什么我便去学什么,到了今天,突然意识到我是不是该给自己一个明确的发展方向了,毕竟岁月不饶人,96年的小朋友都参加工作了,不精通某一领域始终都会觉得浑浑噩噩。因为对大数据比较感兴趣,而这方面的知识挖掘空间和发展空间都很大,再加上以前也摸过Python,所以给自己定了个自学计划,也写一些笔记类的博客做个记录与学习分享。关于Python的基础语法这类的东西就不在笔记中额外开文章写了,我会在代码示例中穿插着提一些Python的语法,因为这毕竟是一门“脚本语言”,语法的学习并不困难。这个系列的博客我会尽量地勤快些,算是对自己的敦促,开始的部分是结合《Python编程:从入门到实践》这本书上的例子做一些理解,下一步是根据《利用Python进行数据分析》这本书做一些学习笔记。

开发环境

《利用Python进行数据分析》中开篇就说到了“你的Python开发环境是什么”的问题,

作者给出的答案是“IPython外加一个文本编辑器”。这样的开发环境对于一个经验老到的工程师来说,无疑是最为简洁易用的,好比我现在工作中,写Android代码会使用Android Studio,前辈会使用Source Insight;写PHP会用到PHPStorm,前辈会使用Source Insight;写web前端会使用VSCode,前辈会使用Source Insight……年轻的程序员有个通病就是过分依赖于使用IDE进行开发,我也是个年轻程序员,所以在这个博客系列中我是用的开发工具是PyCharm。在这之前我也分别尝试了在Ubuntu、Windows下搭建《利用Python进行数据分析》书中所需要的开发环境,过程其实是很繁琐的,而且使用文本编辑器写代码的效率……反正我水平有限,所以我的看法是,搭建环境这个过程是需要亲自动手体验一下的,而实际的生产中,我更倾向于使用IDE。

至于下载Python、配置环境变量、下载PyCharm,这些都不在这里多讲了。

在这一篇博客中主要使用的开发包是matplotlib,在PyCharm导入即可,Download的过程可能会有点慢甚至下载不了,搭个梯子就行了,都很简单。

言归正传,初探门径

什么是数据可视化?

数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是数以及字节的数据。

                                                                                                                 ——摘自《Python编程:从入门到实践》

我们可以这样理解,数据可视化和数据挖掘都是探索数据和分析数据的一种手段,只不过数据挖掘是以代码为探索途径,而数据可视化是将数据转换为图形、图表这样可视的形式来进行分析。

关于matplotlib

matplotlib是一个Python的2D绘图库,我们可以通过这个库将数据绘制成各种2D图形(直方图、散点图、条形图等)。

小试牛刀

matplotlib是一个功能很强大的绘图库,其提供的一系列功能完善的api可以帮助我们快速地建立起我们所需的图形,接下来是几个简单的例子,在这些例子中我也会穿插着记录一下Python的相关语法。

1.先来一个简单的折线图

①import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
②plt.plot(squares, linewidth=5)

③plt.title("Square Numbers", fontsize=24)
④plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

⑤plt.tick_params(axis='both', labelsize=12)
plt.show()

(代码中有些行的开头有标号作为稍后讲解代码的标号,要运行这些代码的话先把标号删掉哦)

这段代码的执行效果是这样的:

先来看看代码吧:

①导入matplotlib.pyplot模块并赋予其别名plt,这是Python中常用的小技巧,目的主要是简化一些名称,当然我们也可以这样写:

from matplotlib import pyplot

不过这样一来,在后面调用到pyplot的方法时需要把之前的plt改为全称pyplot,运行结果不会有任何差别。

②plot()方法:这里将存放了一组平方数的列表传入plot(),它将会尝试根据这些数据绘制出有意义的图形。再调用show()即可将图形显示出来。实参linewidth=5指定了折线的宽度。

③title()方法:使用此方法为图标添加标题,实参fontsize=24指定了文字尺寸,后面的方法中该参数含义相同。

④xlabel()和ylabel()方法:为x轴和y轴命名。

⑤tick_params()方法:设置坐标轴刻度的样式,实参axis='both'表示同时设置两条轴,也可以指定为x或y单独设置。

相信大家发现了一个问题,我们传入的数据是一组平方值,而我们起始的数据是1的平方,但是x轴的起点却是0——事实上当你向plot()提供一系列数字时,它会默认x轴的0作为数据的起点,要改变这种默认配置,只需要对代码稍作修改,再提供一组x轴的值与平方数一一对应:

import matplotlib.pyplot as plt

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', labelsize=12)
plt.show()

来看看运行结果:

这样就好多了对吧?

2.再试试散点图吧

在绘制折线图的时候,我们使用了plot()方法来接收数据,而对于散点图,则需要使用scatter()方法。我们直接来看看代码:

import matplotlib.pyplot as plt

①x_values = list(range(1, 101))  # 区分list()和range()
y_values = [x ** 2 for x in x_values]

②plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='none', s=40)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis="both", labelsize=14)
③plt.axis([0, 110, 0, 11000])
# plt.show()
④plt.savefig('squares_plot.png', bbox_inches='tight')

依然根据标号来看看代码:

①x_values和y_values,定义了数据源,分别对应x轴的输入值和y轴的输出值,相互间的关系为y轴的输出值为x轴值的平方。在Python中,range()方法的含义是产生一个可迭代的对象,它的很多行为都与list相似,比如在遍历range(1, 101)并打印将会得到1至100的值,但是它与list是有本质区别的,即它在迭代的情况下返回的是一个索引值而非在内存中真正生成一个列表对象,所以在Python3中执行print(range(1, 101)),你将会得到的打印结果是range(1, 101)而非一个从1到100的列表。所以想要得到一个真正的列表则需要跟list()方法结合使用。对于这一句[x ** 2 for x in x_values],可能看着有些奇怪,但并不难理解,我们可以将它看成遍历列表x_values,每次遍历时将取出一个x值将它做平方放入y_values中生成一个列表。

②scatter()方法:和上一个例子中的plot()方法类似,都是负责接收数据绘制图形,我们可以通过传入实参c、edgecolors、s来分别指定散点颜色、散点边缘颜色和散点大小,对于颜色可以直接传“red”、“blue”这种简单的颜色,也可以传入rgb色值。在本段代码中,则是利用颜色映射(colormap)来设置颜色,即代码中的实参cmap,结合c=y_values,绘制出的散点将根据y轴值由小到大颜色逐渐加深,基本颜色为蓝色。

③axis()方法:指定每个坐标轴的取值范围,[x_min, x_max, y_min, y_max]。

④savefig()方法:可以注意到,在这个例子中,我将show()方法注释掉了,改为savefig()方法,这个方法将把绘制结果储存在项目目录下,第一个参数指定了图形文件名称,第二个参数表示将图表多余的空白区域裁掉。

运行结果当然是在项目目录下生成了一个图表,内容如下:

结语

这是这个系列的第一篇文章,算是简单的起个头,内容不复杂,注解也很详细。之前说过这一系列的博客我会写得频繁些,所以每一篇文章的内容不会太多,但求理解细致,希望在这个过程中自己的学习能够更扎实些,读者们也能学到些东西。最后作为读书笔记,还是把书上这一节的小练习贴出来,大家可以试试自己敲敲:

    1.数字的三次方被称为其立方。请绘制一个图形,显示前5 个整数的立方值,再绘制一个图形,显示前5000 个整数的立方值。

    2.给你前面绘制的立方图指定颜色映射。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Carl1994/article/details/81560870

智能推荐

vue组件传值有哪些?_props promise传值-程序员宅基地

文章浏览阅读330次。1:父子组件传值:分析:在父组件内的子组件上绑定一个自定义属性和变量;<list></list>在子组件内2:兄弟组件传值:3:子传父组件传值:4:localStorage传值:5:sessionStorage传值:6:声明全局变量进行传值:7: eventBus(事件总线)传值:8: this.$refs 传值:9:$parent传值:10:$child传值:11: 路由传值:..._props promise传值

R语言逻辑操作符:&、|、!&&、||_r语言中!-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏23次。R语言逻辑操作符:&、|、!&&、||逻辑操作符下表显示了R语言支持的逻辑运算符。它只适用于逻辑、数字或复杂类型的向量。所有大于1的数字都被认为是逻辑值true。第一向量的每个元素与第二向量的相应元素进行比较。比较的结果是一个布尔值。算子 描述 例子 & 按位逻辑与。它将第一个向量的每个元素与第二个向量的相应元素相结合,如果两个元素都为真,则输出为真。 v <- c(3,1,TRUE_r语言中!

学习笔记 | 2021-1-10_[ピンクパイナップル... 2021-01-10-程序员宅基地

文章浏览阅读79次。第5章 if语句5.1 一个简单示例cars.pycars = [‘audi’, ‘bmw’, ‘subaru’, ‘toyota’]for car in cars:if car == ‘bmw’:print(car.upper())else:print(car.title())5.2 条件测试检查是否相等;检查是否相等时不考虑大小写;例如,两个大小写不同的值会被视为不相等。car = 'Audi'car == 'audi'False检查是否不相等;比较数字;检查_[ピンクパイナップル... 2021-01-10

Wireshark实验 - DNS_wireshark过滤dns报文-程序员宅基地

文章浏览阅读3.6k次,点赞5次,收藏55次。Wireshark实验 - DNS官方英文文档:Wireshark_Intro_v6.01.pdfWireshark 实验: DNS v6.01《计算机网络:自顶向下方法(第6版)》补充材料,J.F. Kurose and K.W. Ross“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。” ——中国谚语 2005-2012, J.F Kurose and K.W. Ross, All Rights Reserved如书中第2.5节所述,域名系统(DNS)将主机名转换为IP地址_wireshark过滤dns报文

2018 数学建模 国赛(高教杯)-智能RGV的动态调度策略_cumcm-2018-problemb-程序员宅基地

文章浏览阅读2.5k次。2018 高教社杯全国大学生数学建模竞题问题B 智能RGV的动态调度策略Author:YXPEmail:[email protected]更多数模赛题:Amoiensis-CUMCUMhttps://github.com/Amoiensis/Mathmatic_Modeling_CUMCM赛题+论文+代码+思路:Amoiensis-Githubhttp..._cumcm-2018-problemb

kafka最常用命令清单_kafka 消费命令 kafka-avro-console-consumer-程序员宅基地

文章浏览阅读6.6k次。kafka版本:V0.2.10.1 zookeeper版本:V3.4.11 confluent版本:V3.3.0一、confluent相关启动1、启动confluent:./schema-registry-start -daemon ./etc/schema-registry/schema-registry.properties-daemon的目的是为了后台运行,_kafka 消费命令 kafka-avro-console-consumer

随便推点

matlab知识点整理_matlab知识点归纳整理-程序员宅基地

文章浏览阅读868次。1、取整函数floor(x):向下取整ceil(x):向上取整round(x):取最接近的整数fix(x):向0取整2、生成随机数matlab产生随机数可以使用的方法:1、均匀分布:■ unifrnd (a, b, m, n)产生m*n阶[a, b]均匀分布■ unifrnd (a,b)产生一个[a,b]的均匀随机数2、rand (m, n);产生m*n阶[0,1]均匀分布的随机数矩阵■ rand(n);产生n*n阶[0,1]均匀分布_matlab知识点归纳整理

想考华为认证,需要准备什么?_李桃梅ccie-程序员宅基地

文章浏览阅读1.1k次。过来人答一下。80后的老工程师都听过两个名字,红头发,李桃梅。红头发是最早的一批ccie(当年思科还是老大),因录了一套技术视频,以及很有辨识度的昵称,在早期的网络上知名。只要是数通技术从业者,可以没看过红头发的视频,但一定听过红头发的名字。李桃梅则是各大论坛流传最广的ccnp视频的作者,李sir的视频清晰易懂,但是中间缺了几集,就像看剧看到中间没了,预知后事如何,请待下回分解。但是全网都找不到下回。后来很多年后,李桃梅开了公众号,说自己当年就没录那几集,你们别找了。..._李桃梅ccie

Hadoop伪分布集群搭建(Hadoop)_在vmware16中创建hadoop用户-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏4次。Hadoop伪分布集群搭建_在vmware16中创建hadoop用户

幼儿园课程体系结构图_构建幼儿园创新课程体系的思考-程序员宅基地

文章浏览阅读2k次。21世纪是一个以智力资源的占有、配置和以科学技术为主的知识的生产、分配和使用(消费)为重要因素的知识经济时代,是“最需要创造力和创新精神”的伟大变革时代。幼儿教育作为教育系统工程的基石,只有把培养创新型的儿童作为自己的核心目标,才能跟上时代的步伐,适应社会的发展。课程是创新教育目标落实到幼儿身上的中介,也是各种教育思想转化为实践的桥梁。面对大力开展创新教育这一新的发展态势,如何科学地构建幼儿园的创..._幼儿园课程体系框架

[Unity3D]面试题集锦_lod是什么c++优缺点-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏13次。最先执行的方法是:1、(激活时的初始化代码)Awake,2、Start、3、Update【FixUpdate、LateUpdate】、4、(渲染模块)OnGUI、5、再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestroy 高频问答的问题:1.什么是渲染管道?是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标_lod是什么c++优缺点

wmi.WMI().Win32_ComputerSystem()-程序员宅基地

文章浏览阅读1k次。instance of Win32_ComputerSystemAdminPasswordStatus[ 管理员密码状态 ]= 1;AutomaticManagedPagefile[ 自动管理的页面文件 ]= FALSE;AutomaticResetBootOption[ 自动复位启动选项 ]= TRUE;AutomaticResetCapability[ 自动复位能力 ]=..._win32_computersystem

推荐文章

热门文章

相关标签