跪求祸水的自我修养 小说txt ~>_<~

&p&我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架)。相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点。我把我的学习过程写在下面,并附上在每个阶段的学习资料,希望对零基础的Python学习者有所帮助。&/p&&p&注:本文只做经历分享,不是技术探讨。&/p&&p&&i&---&/i&&/p&在知乎上常常看到想要转行IT,或者是想学习编程但不知如何开始的朋友。回答这类问题的人往往只是列出书单资源然后给出一个大致的方向。有些朋友一开始就扎入了理论学习的汪洋大海,从苦读类似《算法导论》开始,能够坚持读下来的寥寥无几,学习的积极性也被不断的挫败感消磨的所剩无几。&p&一直以来,编程对我而言是一种「黑魔法」般的存在。今年阿里月饼门,当很多人都参与到是非之争的时候,我更加着迷于程序员区区几行代码的脚本所展现出的威力,对于外行而言,这是超乎他们想象之外的某种能力——为什么我守在电脑面前盯着秒针然后拼命点击鼠标都不一定能抢到的礼物,程序员只需要提前花5分钟写3行代码就轻松搞定?&/p&&p&所以,我的心底深处一直都想变成这样的一位魔法师。今年的8月,刚好工作上想要开发一个基于微信的英语学习网站,借此机会,我决定好好学习一下编程。在此之前,我所有关于程序的知识仅仅来源于两部分,一是本科时期的C语言必修课,现在已经忘的一干二净,不过好歹我从中明白编程是怎么回事;第二部分是大概两年前由于工作关系学的一些Python,不过只是皮毛,现在忘的七七八八。&/p&&p&简单说,我的目标是建立一个网站,不过这个网站是动态的,也就是说它能识别谁登陆,然后对不同的人显示不同的内容。而当时的现实是,我完全不明白网页是如何显示出来的?譬如每个人登陆知乎的时候看到的是定制化的页面,后台是如何基于每个ID来组织出不同的页面的?所有我们看到的问题,回答,参与的评论在背后的服务器上是以一种什么样的形式存在的?又比如为什么有些页面只能在微信端打开,在电脑上就会出错?(不知道你有没有发现这一点)&/p&&p&当时我的心中充满了无数个类似的问号?当然如果你也是小白,一定有着同样的疑问。&/p&&p&好处是一开始就明确了学习的目的:Web建站。所以我的学习方案基本就是通过做项目学习,哪里不懂就解决哪里,边做边学习,不断推进。另外,由于知道很多成功的网站在用Python做服务器开发,比如知乎,所以我就自然选择了Python。&br&&/p&&p&于是我就开始了我充满着挫败感和成就感的编程之路……&/p&&p&从8月到12月的四个月里,除去本来的工作,为了学习质量,我会保证平均每天4个小时的学习时间,周末也不例外。另外,所有的文档,问答都尽量看英文的,这可以帮你剩下大量的时间。12月13日,我做的网站上线了,3天时间大概有5000人访问了这个网站,我有时在后台看着日志,不免有些心潮喷涌,我想把自己的经验写下来,希望对于那些有心学习编程但无从下手的朋友提供一些帮助和鼓励。&br&&/p&&h2&1. 我的自学编程之路&/h2&&p&1)基础&br&&/p&&p&刚开始的时候,我对搭建网站一无所知。为了给自己迅速建立一个框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不求精通,只是了解每一项技术是干嘛的,另一方面建立起了一个学习的roadmap,这样大概知道做一个Web App需要哪些知识,分别学习的主次顺序。重点推荐两个资源:&/p&&p&Python基础知识:&a href=&//link.zhihu.com/?target=https%3A//learnpythonthehardway.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn Python the Hard Way&/a&&/p&&p&Web App基础知识:@张秋怡的&a href=&https://www.zhihu.com/question//answer/& class=&internal&&答案&/a&写的通俗易懂,极力推荐。&/p&&p&有了这个roadmap,我明白了前端三大必须掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部过了一遍,然后试着写了几个网页,感觉自己写的很没有底气。于是根据知乎和豆瓣上的推荐,买了《JaveScript DOM》和《Head First HTML与CSS》,边看书边把例子过了一遍。&/p&&p&W3Schools: &a href=&//link.zhihu.com/?target=http%3A//www.baidu.com/link%3Furl%3DIYCvCXzSkGQLt7ulZZFmBNaPMEd_6GSSHjvs-BKvWu-oYzYfW7aAUyj8JGqiQpVB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.w3schools.com/&/a&&/p&&p&JavaScript:&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1921890/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JavaScript DOM编程艺术&/a&&/p&&p&HTML & CSS : &a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Head First HTML与CSS(第2版)&/a&&/p&&p&前端是需要慢慢学习的,在看完上面的资料后,虽然能写出来一些挺漂亮的页面,但是我自己知道很多都是不符合标准的,更不要说代码风格什么的。这只能通过不断地积累和增加代码量来提高。由于明白服务器端需要耗费自己大量的时间,所以在发现自己能够按照构思勉强实现网页之后,我就把学习中心放到了服务器端上。不过每天还是会抽空写一写网页,避免手生。&/p&&p&2)服务器端&/p&&p&最先了解的是HTTP协议,也就是浏览器和服务器之间是如何通信的。也就是当你在浏览器里键入网址按下回车直到网页显示在你浏览器的这个过程中,浏览器和浏览器之间发生了什么事情。这是很有意思的内容,我是以读小说的心情了解了这部分内容。了解这部分后,你就会明白类似为什么有时候会有404页面?在百度搜索框里键入的搜索词是如何提交到百度服务器的?为什么重新登录知乎的时候就不用再输入密码了?之类的问题了。&/p&&p&HTTP协议学习资料:&a href=&//link.zhihu.com/?target=https%3A//www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&In Introduction to HTTP Basics&/a&&/p&&p&&a href=&//www.zhihu.com/people/a179aa706eacbd2f7088& data-hash=&a179aa706eacbd2f7088& class=&member_mention& data-title=&@Vamei& data-editable=&true& data-hovercard=&p$b$a179aa706eacbd2f7088&&@Vamei&/a&的博客:&a href=&//link.zhihu.com/?target=http%3A//www.cnblogs.com/vamei/archive//2802811.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协议森林&/a&&/p&&p&了解了HTTP协议之后,我就多少有些入迷了。看似神秘难懂的现象其实原理并不复杂,你反而会被吸引。接下来就进入到我投入时间最多的部分了——后端开发。记得当时了解Web开发的MVC(Model-View-Controller)模式后,有一种心血喷涌的感觉,觉得太有意思了(程序员别喷,我就是这么没见过世面)。我们以知乎为例子来说明MVC是个啥:&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-0f9a88b7e281cc7ffd5e_b.jpg& data-rawwidth=&1029& data-rawheight=&623& class=&origin_image zh-lightbox-thumb& width=&1029& data-original=&https://pic1.zhimg.com/50/v2-0f9a88b7e281cc7ffd5e_r.jpg&&&/figure&&br&&p&每个人的主页都是相同的布局和风格,例如最上面的菜单搜索栏,颜色分割,左边显示动态等,右边是个人信息等,然后具体的内容却因人而异——每个人的头像,名字,动态都是不一样的。那么知乎是如何保证每一个人看到的都是自己的主页呢?&/p&&p&你可以把这个相同的布局想象成一个模板,里面有一个个空格子,当你用你的账户登陆页面时,想象你的电脑里有无数个小人根据你的账号从知乎后台的数据库里取出你的头像,动态,认证信息等等内容,然后对应着模板上规定好的位置,把对应的内容填进去。这些小人的动作实在是太快了,以至于你觉得这是在瞬间完成的。&/p&&p&上面所说的模板就是MVC中的V,是View的缩写,负责显示。这样做的好处在于,如果知乎有一天突然想改变一下个人主页的风格,那么只需要改变这一个模板,然后几千万注册用户的主页就相应的变化了,因为模板是公用的,是不是省了很多事情?(早期的Web开发可不是这样哟,你可能要一个个用户去改,非常麻烦。)&/p&&p&而这些小人除了摆放内容,它们真正负责的是业务逻辑,我们把他们叫做Controller,也就是MVC中的C。例如当你登陆的时候,这些小人要检查你的用户名是不是准确的,如果准确,它们要去数据库里取出你请求的信息等,如果用户名错误,它们要拦截住你的登陆。它们的职责还有很多,无法一一列举。在实际中,这些小人做的事情其实就是Python(或者其它脚本语言)做的事情。&/p&&p&最后,MVC中的Model其实就是传给View的数据,包括上面的头像,用户名,动态等因人而异的数据。这些数据在知乎服务器上是以数据库表格(table)的形式存在的,你可以把它们想象成很多不同的excel表格,不同的表格储存着不同的信息,有些记录着知乎用户的个人信息,有些记录着回答,有些记录着评论等等,而这些表格之间又彼此联系,当你在知乎的不同网页间跳转的时候,上面说的那些小人就根据你的要求,组合对应的表格取出对应的数据,然后把他们放到模板对应的空格里,发送给浏览器。然后浏览器根据你写的CSS,用不同的颜色,大小等等,将数据很漂亮的显示出来。&/p&&p&这样做的好处是什么呢?虽然你最终在浏览器里看到的是一个完整的页面,但是在后端逻辑上它们都是区分开的——模型(M),视图(V)和控制器(C)的区分就保证了较高的可维护性——我可以随时修改主页的显示并看到效果,同样我可以随时加入一些业务逻辑。&/p&&p&如果你的学习坚持到这里了,首先要恭喜你。其次你可能已经知道一些非常成熟的Python Web框架了,例如Django,Flask等等,并且你可能看到了很多小白教程教你直接使用,毕竟大部分人可能觉得没有必要重复造轮子。&/p&&p&本来为了省事,我也打算直接用框架。我是在设计数据库的时候,当时在看SQLAlchemy文档,觉得相对自己的项目SQLAlchemy太过复杂,所以我决定自己写自己的ORM(名词不懂没关系),这对于当时的我来说是一件难度非常大的事情。于是我投入了极大的精力每天都在看关于SQL和Python相关的教程和资料,&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程(第二版) &/a&给了我很大的启发。在自己完成了ORM后,又写了URL处理函数,同样没有用任何现成的Web框架。&/p&&p&现在回头看,我认为这一段时间的造轮子是提升编程能力最快的时候。比如为了写ORM,就必须去花很多时间学习SQL,去了解Python里面的metaclass,而如果用一个现成的框架,我很有可能偷懒不去关注某些细节。而不出问题还好,一旦出问题,我就只能跪。另外,造轮子迫使我在开始的时候就构思整个框架,因为我必须尽可能的考虑到所有的情况,于是就会不断的强迫自己完善知识体系,和别人的代码作对比从而改进自己的,这个过程充满了无尽的挫败感,但是得来的成就和快乐也是无可比拟的。&/p&&p&SQL书籍:&a href=&//link.zhihu.com/?target=https%3A//www.amazon.com/Sams-Teach-Yourself-MySQL-Days/dp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sams Teach Yourself MySQL in 21 Days&/a&&/p&&p&Python:&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程(第二版)&/a&&/p&&p&Github上的优质Python资源:&a href=&//link.zhihu.com/?target=https%3A//github.com/CodementorIO/Python-Learning-Resources& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CodementorIO/Python-Learning-Resources&/a&&/p&&p&过程中还牵涉到部署,我的网站是跑在Linux上的。关于部署网上有非常多的优质教程,一搜一大把。这里就不再赘述。&/p&&p&这些是我学习大致路线,当然过程中充满着小的磕磕绊绊,虽然网站上线了,貌似运行还比较顺利,但是如果以一个程序员的标准来要求自己,自己依然非常菜鸟。不过我并没有以前那样惧怕技术了,就像你明白魔术的背后的原理后,会更多的思考原理本身。&/p&&h2&2. 自学编程需要注意的问题&/h2&&p&很多人都推荐小白第一门语言选Python,因为语法简单。这句话只说了一半,Python确实容易上手,对初学者的门槛很低。但我发现,&b&&u&对于小白真正的门槛在于系统知识,这就和用什么语言完全没有任何关系了。&/u&&/b&例如很多人学完了Python的语法,觉得确实简单,但是转头去用Python标准库的时候,却发现自己连文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。读标准库需要系统知识,比如操作系统,数据库,进程和线程,socket编程,网络协议等等,这些对于编程小白来才构成很高的门槛,但是只有学会这些,才能真正发挥出Python的威力来。&/p&&p&这也是我觉得自己的经历对小白是有价值的一个原因。因为设计一个动态的网页是一个很不错的练手Project。建立网页(Web App)会逼迫你了解从你在浏览器里键入地址按下回车到网页显示在浏览器的过程中,浏览器,网络,服务器都干了些什么。具体到技术上面,你不得不去学习前端的HTML,CSS和JavaScript,后端的脚本,数据库,操作系统等。也就是说,这个过程能够促使你去主动学习上面提到的系统知识,如果你再做另外一个项目,你就不会像现在这样无从下手,而有能力去进行一些技术性的探讨,所以我认为这是一个非常好的练手项目。&br&&/p&&p&1)一定要空出时间补充理论知识&/p&很多人会强调learn by doing,边做项目边学习,这也是我自己采用的方式。在这种方式中,你不断犯错,改正……学习效率非常高。但是,很多人走了极端,最后的结果就是不注意理论知识的学习。你会发现自己Google的能力越来越高,但是真实的编程能力并没有得到提升。如果有这种情况,你需要反思一下。&p&一种可能是你太过于依赖各种成熟的框架,结果编程就变成了用「胶水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,虽然自己不太懂SQL,但是网站跑的也还不错。这时候如果数据库出现了问题,那你就只能跪了。&/p&&p&另外一种可能是你完全沉浸在做项目中,忽略了学习理论知识。做项目虽然充满困难,但回报是强烈的成就感,很容易沉浸其中。我觉得这是极其错误的。首先半路出家的程序员都没有经过系统的学习,没有形成自己的知识体系,如果你不懂数据结构,算法复杂度,操作系统这些理论,那么你能达到的高度就极其有限。所以,在每天做项目的同时,一定要保证抽出一定的时间,恶补理论知识。这部分的书单在豆瓣和知乎上都有很多总结,可以自行搜索。&/p&&p&2)不要太纠结于无意义的问题,比如什么框架好,XX语言比XX语言好啦这种问题。前期确定了练手项目,就去专心积累代码量,积累基础知识。那些你现在还看不懂的炫酷技术你慢慢也就能明白是怎么回事了,反而没有基础,再炫酷的框架对你而言都是天书。&/p&&p&3)学会发问。好问题是建立在你自己已经实践或者思考的基础上问出来的,这是对自己的负责,也是对别人的尊重。不要一遇到困难就喜欢直接上网搜索:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。&/p&&p&4)学好英语。&/p&&p&THE END&/p&&br&&p&最后,给自己打个广告,如果学英语,一定要关注我。&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//weixin.qq.com/r/ETt0bGzEkzHsrSgP924D& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/ETt0bGz&/span&&span class=&invisible&&EkzHsrSgP924D&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&
我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架)。相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点。我把我的学习过程写在下面,并附上在每个阶段的学习资料,希望对零基础的Pyt…
强烈推荐两门公开课,难度很低,讲得非常好。学完了应该可以直接上手干活。&br&&br&1.
BerkeleyX: CS190.1x Scalable Machine Learning &b&&a href=&//link.zhihu.com/?target=https%3A//courses.edx.org/courses/BerkeleyX/CS190.1x/1T2015/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS190.1x Course Info&/a&&/b&&br&这门课是伯克利开的,教机器学习基础、Python Spark实现。我很懂机器学习,但不懂spark和python,花了1周多时间看完视频、做完作业。如果没机器学习基础的话几周应该够了。学完了可以用spark处理大数据,做分类、推荐系统。&br&&ul&&li&在墙内搭建虚拟机环境有困难,装不好可以参照帖子 &a href=&//link.zhihu.com/?target=http%3A//mooc.guokr.com/discussion/7761/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&不用翻墙和等几小时,搞定VM安装&/a&&/li&&li&要是怎么装都不成功,原因很可能是没有开Intel Virtualization,需要进BIOS设置一下。我们好几个人都遇到这问题了。&/li&&li&这个里面的视频很卡,但是可以下载。希望有好心人下载传网盘或者优酷~&br&&/li&&/ul&&b&更新:新的课已经开始了,这次的不需要在本地装虚拟机,直接用databricks的服务器就好,方便很多。而且这次是半年内上一系列的Spark课程,有兴趣可以全学了。&/b&&br&链接:&a href=&//link.zhihu.com/?target=https%3A//courses.edx.org/courses/course-v1%3ABerkeleyX%2BCS105x%2B1T2016/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS105x Course Info&/a&&br&&br&&br&&br&2. 斯坦福公开课:&br&Convolutional Neural Networks for Visual
Recognition &a href=&//link.zhihu.com/?target=http%3A//cs231n.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS231n Convolutional Neural Networks for Visual Recognition&/a&&br&&p&优酷视频: &a href=&//link.zhihu.com/?target=http%3A//i.youku.com/u/UMzQ0MDE4MDUwNA%3D%3D/playlists& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&优酷网-中国第一视频网,提供视频播放,视频发布,视频搜索&/a&&/p&&p&这是我见过的讲神经网络最清楚最简单的课程,lecturer口才极好,英语说的清晰,配套的讲义说得更清楚明白。如果连作业一起做了,应该有能力用deep learning的工具做一些图像和视觉的工作。&/p&&ul&&li&课程讲义里有使用Python、IPython做数值计算的快速入门&a href=&//link.zhihu.com/?target=http%3A//cs231n.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS231n Convolutional Neural Networks for Visual Recognition&/a&&/li&&li&作业需要用Python 2,不能用Python 3,除非你乐意像我一样花时间把print全加括号,把cPickle全改成Pickle,还要设置Pickle的编码:&a href=&//link.zhihu.com/?target=http%3A//stackoverflow.com/questions//pickle-incompatability-of-numpy-arrays-between-python-2-and-3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pickle incompatability of numpy arrays between Python 2 and 3&/a&&/li&&/ul&&br&&br&&p&初学者想要深入学习的话,可以顺着两门课的内容、扩展材料继续挖下去。&/p&&br&&p&多说一句,不要报任何班。机器学习牛人要么忙着科研,要么是赚钱太容易,所以几乎没人开培训班来赚钱。有名的培训班,比如J***这样的都是不入流的,以其昏昏使人昭昭。&/p&
强烈推荐两门公开课,难度很低,讲得非常好。学完了应该可以直接上手干活。 1. BerkeleyX: CS190.1x Scalable Machine Learning
这门课是伯克利开的,教机器学习基础、Python Spark实现。我很懂机器学习,但不懂spark和python,花了1…
其实题主要的功能很简单,只是爬数据。我看到标签里有“数据挖掘”,但是这算不上数据挖掘,因为仅仅是爬数据,没有分析。&br&&br&Python的爬虫很简单。贴一个教程地址:&br&&a href=&//link.zhihu.com/?target=http%3A//cuiqingcai.com/1052.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫学习系列教程&/a&&br&&br&我最近也写了个玩玩,因为一直是写Java,Python也是刚学,因此写得并不顺手。&br&&br&我的爬虫是爬爱鼠绘的海贼更新情况的,一更新就发邮件通知我。&br&&br&原理很简单,分以下几步:&br&1. 发送请求,获取页面的html源码&br&2. 按照一定的规则解析取得的html源码,取得你要的信息(info1)&br&3. 隔一段时间再请求,重复2,得到信息info2,将两次取得的信息比较,如果不一样说明发生了变化,这时就可以发邮件了。然后将info2赋值给info1。&br&4. 重复3&br&&br&获取某个页面的html源码的代码如下:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&kn&&import&/span& &span class=&nn&&urllib2&/span&
&span class=&k&&def&/span& &span class=&nf&&getPage&/span&&span class=&p&&(&/span&&span class=&n&&pageURL&/span&&span class=&p&&):&/span&
&span class=&sd&&'''&/span&
&span class=&sd&&
获取指定地址的html源码&/span&
&span class=&sd&&
'''&/span&
&span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&n&&urllib2&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&pageURL&/span&&span class=&p&&)&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib2&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&)&/span&
&span class=&n&&result&/span& &span class=&o&&=&/span& &span class=&n&&response&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&()&/span&
&span class=&k&&return&/span&
&span class=&n&&result&/span&
&span class=&k&&print&/span& &span class=&n&&getPage&/span&&span class=&p&&(&/span&&span class=&s&&r'http://www.sse.com.cn/disclosure/listedinfo/credibility/change/'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&br&&br&这样就打印了html代码了。然后就是第2步,解析。&br&&br&一般有两种做法吧,一是按照dom结构进行解析,多数是使用第三方包,这种做法对题主这类非计算机专业的人士来说可能就要花点时间去了解(其实也不难,就是未接触过的情况下要花时间而已),第二种是直接使用正则表达式进行匹配,这种做法也是要学下正则表达式。我比较喜欢第一种做法,但是可能要使用第三方包,Python的话这样做移植性就不好了,所以我是用正则表达式的。&br&&br&解析的工作主要是分析其页面的源码,分析结构,分析来源(是使用js异步加载的还是直接返回的),是否有身份验证等。这一步是最费功夫的。例如这两个交易所的数据,第一页数据是直接返回的,第二页是异步加载的,需要分析请求的数据,可能要处理cookie。要写一个完善的爬虫还是需要一定的专业知识的。&br&&br&第三步里面的发邮件,也不难。只不过如果是用现在大平台的邮箱,可能会有反垃圾邮件机制,要注意邮件的内容,尽量使其像人写的,并且不要高频率发送内容相似的邮件,否则可能会被禁用。&br&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&c&&#coding:utf8&/span&
&span class=&kn&&import&/span& &span class=&nn&&smtplib&/span&
&span class=&kn&&import&/span& &span class=&nn&&json&/span&
&span class=&kn&&from&/span& &span class=&nn&&email&/span& &span class=&kn&&import&/span& &span class=&n&&Encoders&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.mime.base&/span& &span class=&kn&&import&/span& &span class=&n&&MIMEBase&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.mime.multipart&/span& &span class=&kn&&import&/span& &span class=&n&&MIMEMultipart&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.mime.text&/span& &span class=&kn&&import&/span& &span class=&n&&MIMEText&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.header&/span& &span class=&kn&&import&/span& &span class=&n&&Header&/span&
&span class=&kn&&from&/span& &span class=&nn&&testMail&/span& &span class=&kn&&import&/span& &span class=&n&&toEmail&/span&
&span class=&k&&def&/span& &span class=&nf&&sendMail&/span&&span class=&p&&(&/span&&span class=&n&&fromEmail&/span&&span class=&p&&,&/span& &span class=&n&&username&/span&&span class=&p&&,&/span&
&span class=&n&&password&/span&&span class=&p&&,&/span& &span class=&n&&serverAddress&/span&&span class=&p&&,&/span& &span class=&n&&subject&/span&&span class=&p&&,&/span& &span class=&n&&htmlContent&/span&&span class=&p&&,&/span& &span class=&n&&toEmail&/span&&span class=&p&&):&/span&
&span class=&sd&&'''&/span&
&span class=&sd&&
fromEmail: 使用哪个邮箱地址发送&/span&
&span class=&sd&&
username: 登陆邮箱服务器的用户名,一般与fromEmail相同&/span&
&span class=&sd&&
password: 登陆的密码&/span&
&span class=&sd&&
serverAddress: 邮箱服务的地址(包含端口)&/span&
&span class=&sd&&
subject: 邮件主题&/span&
&span class=&sd&&
htmlContent: 邮件正文,使用html格式编写&/span&
&span class=&sd&&
toEmail: 要发送到的邮箱地址,可以写多个&/span&
&span class=&sd&&
'''&/span&
&span class=&n&&msg&/span& &span class=&o&&=&/span& &span class=&n&&MIMEMultipart&/span&&span class=&p&&(&/span&&span class=&s&&'alternative'&/span&&span class=&p&&)&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s&&'Subject'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&subject&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s&&'From'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&fromEmail&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s&&'To'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&s&&', '&/span&&span class=&o&&.&/span&&span class=&n&&join&/span&&span class=&p&&(&/span&&span class=&n&&toEmail&/span&&span class=&p&&)&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s&&&Accept-Language&&/span&&span class=&p&&]&/span&&span class=&o&&=&/span&&span class=&s&&&zh-CN&&/span&
&span class=&c&&#指定语言环境是中文&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s&&&Accept-Charset&&/span&&span class=&p&&]&/span&&span class=&o&&=&/span&&span class=&s&&&ISO-8859-1,utf-8&&/span&
&span class=&c&&#指定使用特定的编码,防止乱码&/span&
&span class=&n&&part&/span& &span class=&o&&=&/span& &span class=&n&&MIMEText&/span&&span class=&p&&(&/span&&span class=&n&&htmlContent&/span&&span class=&p&&,&/span& &span class=&s&&'html'&/span&&span class=&p&&,&/span& &span class=&s&&'UTF-8'&/span&&span class=&p&&)&/span&
&span class=&n&&msg&/span&&span class=&o&&.&/span&&span class=&n&&attach&/span&&span class=&p&&(&/span&&span class=&n&&part&/span&&span class=&p&&)&/span&
&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&smtplib&/span&&span class=&o&&.&/span&&span class=&n&&SMTP&/span&&span class=&p&&(&/span&&span class=&n&&serverAddress&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s&&&Try to login&&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&login&/span&&span class=&p&&(&/span&&span class=&n&&username&/span&&span class=&p&&,&/span& &span class=&n&&password&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s&&&login successfully, try to send&&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&sendmail&/span&&span class=&p&&(&/span&&span class=&n&&fromEmail&/span&&span class=&p&&,&/span& &span class=&n&&toEmail&/span&&span class=&p&&,&/span& &span class=&n&&msg&/span&&span class=&o&&.&/span&&span class=&n&&as_string&/span&&span class=&p&&())&/span&
&span class=&k&&print&/span& &span class=&s&&&send successfully&&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&quit&/span&&span class=&p&&()&/span&
&span class=&n&&sendMail&/span&&span class=&p&&(&/span&&span class=&n&&fromEmail&/span&&span class=&o&&=&/span&&span class=&s&&''&/span&&span class=&p&&,&/span&
&span class=&n&&username&/span&&span class=&o&&=&/span&&span class=&s&&&&&/span&&span class=&p&&,&/span&
&span class=&n&&password&/span&&span class=&o&&=&/span&&span class=&s&&&somebodyspass&&/span&&span class=&p&&,&/span&
&span class=&n&&serverAddress&/span&&span class=&o&&=&/span&&span class=&s&&'smtp.163.com:25'&/span&&span class=&p&&,&/span&
&span class=&n&&subject&/span&&span class=&o&&=&/span&&span class=&s&&'Python邮件代码测试'&/span&&span class=&p&&,&/span&
&span class=&n&&htmlContent&/span&&span class=&o&&=&/span&&span class=&s&&&plain text content&&/span&&span class=&p&&,&/span&
&span class=&n&&toEmail&/span&&span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s&&''&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&以上是发送邮件的代码。&br&&br&这是抓取并解析上海证券交易所相关信息的代码,定时启动、检测变化以及发送邮件并没有实现。&br&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&c&&#coding:utf8&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib2&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&import&/span& &span class=&nn&&smtplib&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.mime.multipart&/span& &span class=&kn&&import&/span& &span class=&n&&MIMEMultipart&/span&
&span class=&kn&&from&/span& &span class=&nn&&email.mime.text&/span& &span class=&kn&&import&/span& &span class=&n&&MIMEText&/span&
&span class=&kn&&import&/span& &span class=&nn&&re&/span&
&span class=&k&&def&/span& &span class=&nf&&testMatch&/span&&span class=&p&&():&/span&
&span class=&n&&remoteoteURL&/span& &span class=&o&&=&/span& &span class=&s&&r'http://www.sse.com.cn/disclosure/listedinfo/credibility/change/'&/span&
&span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&n&&urllib2&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&remoteoteURL&/span&&span class=&p&&)&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib2&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&)&/span&
&span class=&n&&result&/span& &span class=&o&&=&/span& &span class=&n&&response&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&()&/span&
&span class=&c&&#获取响应的HTML&/span&
&span class=&c&&#匹配表格标题的正则表达式&/span&
&span class=&n&&titlePatternStr&/span& &span class=&o&&=&/span& &span class=&s&&r'&table
class=&tablestyle&&.*?&th&(\S*)&/th&\n\s*&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&.*?&th&(\S*)&/th&'&/span&
&span class=&c&&#匹配表格内容的正则表达式&/span&
&span class=&n&&valuePatternStr&/span& &span class=&o&&=&/span& &span class=&s&&r' &tr style=&background-color.*?&td class=&nowrap&&(\d*?)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?document.write\(\$.format\(&/span&&span class=&se&&\'&/span&&span class=&s&&([\.,\d]*)&/span&&span class=&se&&\'&/span&&span class=&s&&.*?document.write\(\$.format\(&/span&&span class=&se&&\'&/span&&span class=&s&&([\.,\d]*)&/span&&span class=&se&&\'&/span&&span class=&s&&.*?document.write\(\$.format\(&/span&&span class=&se&&\'&/span&&span class=&s&&([\.,\d]*)&/span&&span class=&se&&\'&/span&&span class=&s&&.*?document.write\(\$.format\(&/span&&span class=&se&&\'&/span&&span class=&s&&([\.,\d]*)&/span&&span class=&se&&\'&/span&&span class=&s&&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&.*?&td class=&nowrap&&(\S*)&/td&'&/span&
&span class=&n&&valuePattern&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&n&&valuePatternStr&/span&&span class=&p&&,&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&S&/span&&span class=&p&&)&/span&
&span class=&n&&titlePattern&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&n&&titlePatternStr&/span&&span class=&p&&,&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&S&/span&&span class=&p&&)&/span&
&span class=&c&&#匹配表格标题&/span&
&span class=&n&&titles&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&titlePattern&/span&&span class=&p&&,&/span& &span class=&n&&result&/span&&span class=&p&&)&/span&
&span class=&c&&#匹配表格内容&/span&
&span class=&n&&items&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&valuePattern&/span&&span class=&p&&,&/span& &span class=&n&&result&/span&&span class=&p&&)&/span&
&span class=&c&&#根据匹配的结果生成HTML表格&/span&
&span class=&n&&tableStr&/span& &span class=&o&&=&/span& &span class=&s&&&&table&&&/span&
&span class=&n&&titleStr&/span& &span class=&o&&=&/span& &span class=&s&&&&tr&&&/span&
&span class=&k&&for&/span& &span class=&n&&title&/span& &span class=&ow&&in&/span& &span class=&n&&titles&/span&&span class=&p&&:&/span&
&span class=&k&&for&/span& &span class=&n&&tt&/span& &span class=&ow&&in&/span& &span class=&n&&title&/span&&span class=&p&&:&/span&
&span class=&n&&titleStr&/span& &span class=&o&&+=&/span& &span class=&s&&'&th&'&/span&&span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&tt&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&s&&'&/th&'&/span&
&span class=&n&&titleStr&/span& &span class=&o&&+=&/span& &span class=&s&&&&/tr&&&/span&
&span class=&n&&tableStr&/span& &span class=&o&&+=&/span& &span class=&n&&titleStr&/span&
&span class=&k&&for&/span& &span class=&n&&item&/span& &span class=&ow&&in&/span& &span class=&n&&items&/span&&span class=&p&&:&/span&
&span class=&n&&tableStr&/span& &span class=&o&&+=&/span& &span class=&s&&&&tr&&&/span&
&span class=&k&&for&/span& &span class=&n&&name&/span& &span class=&ow&&in&/span& &span class=&n&&item&/span&&span class=&p&&:&/span&
&span class=&n&&tableStr&/span& &span class=&o&&+=&/span& &span class=&s&&&&td&&/span&&span class=&si&&%s&/span&&span class=&s&&&/td&&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&n&&name&/span&&span class=&p&&)&/span&
&span class=&n&&tableStr&/span& &span class=&o&&+=&/span& &span class=&s&&&&/tr&&&/span&
&span class=&n&&tableStr&/span& &span class=&o&&+=&/span& &span class=&s&&&&/table&&&/span&
&span class=&k&&print&/span& &span class=&n&&tableStr&/span&
&span class=&n&&testMatch&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&
其实题主要的功能很简单,只是爬数据。我看到标签里有“数据挖掘”,但是这算不上数据挖掘,因为仅仅是爬数据,没有分析。 Python的爬虫很简单。贴一个教程地址:
我最近也写了个玩玩,因为一直是写Java,Python也是刚学,因此写得…
&figure&&img src=&https://pic1.zhimg.com/50/a11afd082f0f8bfac5a3da1a64efd2d9_b.jpg& data-rawwidth=&500& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/50/a11afd082f0f8bfac5a3da1a64efd2d9_r.jpg&&&/figure&&br&&p&&b&转发近2000的编程心得:一个编程新手的自我修养&/b&&br&&br&&/p&&p&&b&原文标题:&/b&我多么希望我学编程时,有人教会我这些事。&/p&&p&&b&原文地址:&/b&&a href=&//link.zhihu.com/?target=https%3A//medium.com/%40cecilycarver/things-i-wish-someone-had-told-me-when-i-was-learning-how-to-code-565fc9dcb329& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Things I Wish Someone Had Told Me When I Was Learning How to Code&/a&&/p&&p&&b&原文作者:&/b&Cecily Carver&/p&&p&&b&搬砖及翻译:&/b&米洛&/p&&br&&p&这篇文章在Medium上人气很旺。转发量和评论数都爆表。原作者回顾了自己漫长的编程学习之路,从中总结了许多个人经历,走的弯路,和教训。我翻译了这篇长文中的大部分内容,希望能帮到题主及所有关注这个问题的朋友们:&br&&/p&&br&&blockquote&&p&&b&1. 在学习编程之前,想清楚自己到底想写什么程序。&/b&&/p&&/blockquote&&br&&p&学习编程基本就是在学习建造东西。如果你知道你到底想造什么,你的编程学习之路将会豁然开朗。如果你的目标只是“学习如何编程”,却不知道自己到底想写出什么样的程序,也不知道这些程序将如何让你的生活变得更美好,你很有可能会感到编程学习令你沮丧,受挫。&/p&&br&&p&说起来还有点丢脸,我最早想学习编程,是因为我想证明我聪明。并且,我也想做一份属于聪明人的工作。我还喜欢思考数学及理论。因此,编程怎么看都和我很搭。但是这些想法都不足以延续我的编程学习热情。直到有一天,当我终于发现如何将科技(编程)与我的真爱---音乐和文学---联系在一起时,我才真正爱上编程。&/p&&br&&p&那么,你到底想用编程来干嘛呢?网站?游戏?iPhone应用?一个让你暴富的初创公司?交互式艺术作品?你是想让你的老板对你刮目相看,还是想写个程序让电脑帮你完成一个枯燥的任务,以让你能花更多的时间看水獭的萌照?也可能你只是想在职场中更具竞争力,为你的简历加一个潮词(编程),或者满足你学校的毕业要求。这些都是有价值的目标。你需要搞清楚自己的目标,然后有针对性地学习。&br&&/p&&br&&blockquote&&p&&b&2. 编程一点也不神秘,一点也不难。&/b&&/p&&/blockquote&&br&&p&编程和其他技能没有本质差别。就像语言学习里有语法和单词;就像数学里有不同的步骤和不同的题目;就像所有的技艺和手艺,编程里也有前人总结的针对不同任务的技巧,工具,和好的习惯。这些东西,你都可以自由使用,修改,或者弃用。&br&&/p&&br&&p&有个人曾这样断定,程序大牛和编程界的芸芸众生之间有一个明显的区别---后者往往缺乏足够的智慧在编程界获得真正的成功。在这个人看来,这种智慧包含对指针 (pointers) 和递归 (recursion) 的理解。&br&&/p&&br&&p&我在学校曾学过指针和递归。在学生时代,能理解指针和递归的感觉真心超级爽。这种快感激发我踏上了计算机学习之路。但在课堂练习之外,我极少有需要去碰这两个概念。并且,当我在教别人如何学习编程时,我也一次又一次地发现,人们不用这两个概念也能写出很有趣,很赞的程序。&br&&/p&&br&&p&所以,不要害怕,也不要去想自己是否足够聪明。想这些都没意义。是的,编程任务越复杂,越难懂,你就需要越高超的技巧才能完成。但哪个领域不是如此呢?除非你这辈子就靠编程讨生活了,否则你不太可能需要去理解编程中的递归。&/p&&br&&blockquote&&p&&b&3. 没人能一次搞定&/b&&/p&&/blockquote&&br&&p&当你第一次学习编程时,你会很快撞上这么个问题。你觉得你已配置好一切了,你查了又查,但你的代码就是有!问!题!你对如何排错毫无头绪。错误信息(如果运气好你有的话)很有可能对你说的是---“我了个大艹”。这个时候,你很有可能想要放弃。你觉得你永远不可能搞定,觉得自己就不是编程的料。嘿!当我第一次尝试编写C++程序,运行,却只得到 “segmentation fault” 这样的错误代码时,我也有过一样的沮丧感。&br&&/p&&br&&p&但是这种经历对任何一个水准的程序员而言,都再正常不过了。有过这种经历,并不代表你的智商,技术悟性,或你和编程的适合度有任何问题。不管你是编程新兵,还是程序大牛,你都会遇到这样的经历。而新兵和大牛的区别就在于如何对待这样的经历。&br&&/p&&br&&p&新兵和大牛的一大区别就是信念。什么信念呢?就是深信出错的原因是符合逻辑的,并可以找到的,深信问题可以被解决,深信总有办法实现自己的目标。从0到1之路也许并不明显,但只要你有耐心,你通常都可以找到。&br&&/p&&br&&figure&&img src=&https://pic4.zhimg.com/50/5bb82b53c94cf2f2b2b5be1219b1dde9_b.jpg& data-rawwidth=&1600& data-rawheight=&1105& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic4.zhimg.com/50/5bb82b53c94cf2f2b2b5be1219b1dde9_r.jpg&&&/figure&&br&&blockquote&&p&&b&4. 总有人说你做的不对。&/b&&/p&&/blockquote&&br&&p&大括号{}应该怎么放放?该不该不用tab来缩进?该不该对代码添加注释?&br&&/p&&br&&p&对于这些问题,大家的做法各有不同。没有谁有标准答案。很多程序员热衷推销自己的偏好的那种处理方式,但这不意味着答案只有一个。事实上,与那些说我做的不对的人面对面,然后再努力去搞懂他们说的到底是不是对的,这种来来回回,是我职业生涯的压力源之一。&/p&&br&&p&如果你与一个团队的其他成员一起写码,总会有人不认同你的某些行为。有时他们是对的,但事实上你到底是!对!是!错!永远值得你亲自去推敲。有时他们纯粹就是无理取闹,你别理他们就好了。&/p&&br&&blockquote&&p&&b&5. 总有人会说你不是一个真正的程序员&/b&&/p&&/blockquote&&br&&p&看看这些说法吧!“HTML不是真正的编程语言。” “如果你不用vi,你就不是真正的程序员。” “真正的程序员得懂C语言。” “有些人就是不适合编程。” “有些人就是学不会。” “你根本就不是真正的程序员,我才是。” &br&&/p&&br&&p&要我说,编程对于不同的人有不同的含义。同时,编程的含义随着时间的流逝也在变化。有趣的是,那些能让初学者,甚至是编程老鸟,更快上手,更省事的工具,包,框架等往往会被贴上 “真正的程序员不该使用” 这样的标签。&/p&&br&&p&这种贴标签行为背后是一种恐惧:如果任何人都能称自己为程序员,那这个头衔就将毫无意义。不过,我认为这种闭关自守的行为是有害的。&br&&/p&&br&&p&去用那些让写程序变得容易的工具吧。如果那意味着你用 Stencyl 或者 GameMaker 来写游戏,而不是从零开始写一个新的,没事,只管去做。如果你第一次尝试编程是从HTML或者Excel宏开始,没事,只管去做。哪个(编程方式)你能坚持下去,你就用哪个。&/p&&br&&p&随着你技术不断提升,你就会发现那些便利工具对你的限制大于对你的帮助。那时,你就会去寻找更强大的编程工具。但大多数时候,很少有人会看你的代码,或者问你用什么编程工具。你的程序到底好不好用才是真正重要的。&br&&/p&&br&&blockquote&&p&&b&6. 坚持比方法更重要。&/b&&/p&&/blockquote&&br&&p&关于 “正确编程学习法” 和 “最佳编程学习法” 的文章有很多。的确,学习编程的方法有很多。你可以看书来学,你可以做练习来学,你可以给别人的程序捉虫来学。当然了,也有很多种编程语言你可以挑选来作为你的第一门语言。&br&&/p&&br&&p&自学型的编程课程或者讲座系列常常有个问题:一开始你总会学得很爽,但难度会陡然上升。print命令总是很简单,但要真正搞定一个实用程序的编写,往往让人抓狂。你很有可能觉得跟着教程走却并没搞懂,然后你就开始抱怨教程有问题。&/p&&br&&p&当你撞上这个 “编程玻璃顶” 时,那些教程和线上资源对你的意义已经不大了,因为他们默认你已经是一个编程好手了。更让整个编程学习进阶之路变难的因素是,你根本不知道自己缺什么 (you don’t know what you don’t know) 。甚至,搞清楚自己接下来需要什么都成了难题。 &br&&/p&&br&&p&不管上什么编程课,你都会有这么一段 “撞墙期” 。唯一的解决办法就是坚持到底。这意味着你要不断尝试新事物,学习新知识,不断地,一步步地,去解决问题,去编出你要的程序。如果你这时认真回看自己的编程初心,你就更有可能获得成功。&br&&/p&&br&&p&坚持到底,就会胜利。这就是我之前提到的信念的价值所在。如果你真的坚持到底,你就真的会胜利。&/p&&br&&p&&b&原作者推荐了这本书:&/b&&a href=&//link.zhihu.com/?target=http%3A//www.amazon.ca/Godel-Escher-Bach-Eternal-Golden/dp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Godel, Escher, Bach: An Eternal Golden Braid: Douglas R. Hofstadter: 2: Books&/a&&/p&&br&&p&&b&原作者推荐了这个博客:&/b&&b&&a href=&//link.zhihu.com/?target=http%3A//www.joelonsoftware.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Joel on Software&/a&&/b&&/p&&br&&p&本次搬砖及翻译到此结束。由于时间仓促,难免会有一些差错。大家如找出翻译有误之处,烦请私信告诉我。十分感谢!另外,祝大家周末愉快。&/p&
转发近2000的编程心得:一个编程新手的自我修养 原文标题:我多么希望我学编程时,有人教会我这些事。原文地址:原文作者:Cecily Carver搬砖及翻译:米洛 这篇文章在Medium上人气很旺。…
回答有些长,为节约大家的时间,我选取了一个经典案例,辅以详细的说明(中文版Excel2013)放在开头,若没有时间看全部回答,可以详细看一下这个案例。&br&&br&这个案例充分体现了“&b&将Excel的元素融入图表&/b&”的技巧。以下商业杂志图表均利用了这一技巧。&br&&br&&figure&&img src=&https://pic2.zhimg.com/50/e9bb0c48cf59e5dd0d5178_b.jpg& data-rawwidth=&701& data-rawheight=&202& class=&origin_image zh-lightbox-thumb& width=&701& data-original=&https://pic2.zhimg.com/50/e9bb0c48cf59e5dd0d5178_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/e879dedfce9c_b.jpg& data-rawwidth=&806& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&806& data-original=&https://pic2.zhimg.com/50/e879dedfce9c_r.jpg&&&/figure&&br&下图是我参照上图制作的图表。&br&&figure&&img src=&https://pic4.zhimg.com/50/6e0f9abb8dfcd_b.jpg& data-rawwidth=&599& data-rawheight=&379& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&https://pic4.zhimg.com/50/6e0f9abb8dfcd_r.jpg&&&/figure&首先选中源数据,A到F列&br&&figure&&img src=&https://pic3.zhimg.com/50/61faac1b237f_b.jpg& data-rawwidth=&315& data-rawheight=&422& class=&content_image& width=&315&&&/figure&绘制散点图,得到经典的Excel风格图表&br&&figure&&img src=&https://pic3.zhimg.com/50/d1fdcccd655e_b.jpg& data-rawwidth=&373& data-rawheight=&229& class=&content_image& width=&373&&&/figure&&p&将利润率设为次坐标:选中橙色那根线,右键-设置数据系列格式-次坐标轴&/p&&figure&&img src=&https://pic4.zhimg.com/50/18e7bd29fc_b.jpg& data-rawwidth=&378& data-rawheight=&228& class=&content_image& width=&378&&&/figure&&p&删去图表标题、图例,调节横坐标、两个纵坐标的上下限,删去纵网格线,删去两个纵坐标的轴线,得到这样一张图&/p&&br&&figure&&img src=&https://pic4.zhimg.com/50/7c27bfbc86_b.jpg& data-rawwidth=&479& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&479& data-original=&https://pic4.zhimg.com/50/7c27bfbc86_r.jpg&&&/figure&&p&下一步称为“&b&锚定&/b&”,鼠标光标移动到下图所示的图表左上角的顶点处,按住Alt,随后按住鼠标进行拖动,发现这样调节图表的尺寸,限定于Excel的网格点。&/p&&br&&figure&&img src=&https://pic2.zhimg.com/50/6a9be351f0cdc9ec60ca2ee2ea9f2c3f_b.jpg& data-rawwidth=&158& data-rawheight=&96& class=&content_image& width=&158&&&/figure&&br&&br&&p&四个角都这样进行调节,分别“锚定”于N7, V7, N15, V15&/p&&figure&&img src=&https://pic4.zhimg.com/50/4baf102ffe91a8b2998116a_b.jpg& data-rawwidth=&554& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic4.zhimg.com/50/4baf102ffe91a8b2998116a_r.jpg&&&/figure&&br&&p&选中图表区域,右键-设置图表区域格式,在属性中选择“大小固定,位置随单元格而变”,这样,在调整Excel行距和列宽时,图表就不会随之而动。&/p&&figure&&img src=&https://pic4.zhimg.com/50/5d1dbfe7f_b.jpg& data-rawwidth=&235& data-rawheight=&99& class=&content_image& width=&235&&&/figure&&br&&p&在第4~6行输入内容,设置填充色&/p&&figure&&img src=&https://pic2.zhimg.com/50/23b031f67804cafbefd7bdfc9cbe742b_b.jpg& data-rawwidth=&554& data-rawheight=&345& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic2.zhimg.com/50/23b031f67804cafbefd7bdfc9cbe742b_r.jpg&&&/figure&&br&&p&&b&调节7~15行行距,使得Excel网格线与我们做的图表的横向网格线一一重叠;&/b&&/p&&br&&p&&b&调节O列和U列列宽&/b&,使得&b&O列左侧网格线&/b&恰好经过&b&图表横网格线的起点&/b&,&b&U列右侧网格线&/b&也是一样的道理,如下图所示。&/p&&figure&&img src=&https://pic3.zhimg.com/50/842ea4b5bab2d607f0b9917_b.jpg& data-rawwidth=&554& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic3.zhimg.com/50/842ea4b5bab2d607f0b9917_r.jpg&&&/figure&&br&&p&选中图表区,填充色改为无色,外轮廓也删去,这样图表就变成“透明”的了&/p&&figure&&img src=&https://pic4.zhimg.com/50/4d86ffc83fbe9b_b.jpg& data-rawwidth=&554& data-rawheight=&380& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic4.zhimg.com/50/4d86ffc83fbe9b_r.jpg&&&/figure&&br&&p&随后对N7:V15这个区域的单元格进行填充色。&/p&&p&(选中这些单元格的方法:&/p&&p&先选中图表区域外的一个单元格,如M7,按键盘的→键,移动到N7,然后按住Shift,再按→键或↓键调节即可,选中后进行单元格填充。)&/p&&figure&&img src=&https://pic3.zhimg.com/50/701e75eb66b31ca0032fc_b.jpg& data-rawwidth=&554& data-rawheight=&392& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic3.zhimg.com/50/701e75eb66b31ca0032fc_r.jpg&&&/figure&&br&&p&在Excel“视图”中取消勾选网格线&/p&&figure&&img src=&https://pic2.zhimg.com/50/5cc291504ebbfefe409f9e_b.jpg& data-rawwidth=&262& data-rawheight=&101& class=&content_image& width=&262&&&/figure&&br&&p&最后添加一些图例即可&/p&&figure&&img src=&https://pic4.zhimg.com/50/b7223dbfc833cca2b70beb_b.jpg& data-rawwidth=&554& data-rawheight=&342& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic4.zhimg.com/50/b7223dbfc833cca2b70beb_r.jpg&&&/figure&&br&&br&相信你已体会到了如何将Excel的元素融入图表设计中。&br&&br&&br&&br&======================原回答=========================&br&&br&&p&图表的重要性不言而喻,再好的数据,如果不能有效地呈现出来也是白费功夫。&/p&&br&&p&我相信看完这个回答后,你再也不会将图做成这样。&/p&&figure&&img src=&https://pic4.zhimg.com/50/1e18c630f9843e0fbe7dc9b6dd5e77e0_b.jpg& data-rawwidth=&809& data-rawheight=&235& class=&origin_image zh-lightbox-thumb& width=&809& data-original=&https://pic4.zhimg.com/50/1e18c630f9843e0fbe7dc9b6dd5e77e0_r.jpg&&&/figure&&p&商业杂志上的这些高端大气的图是用什么软件做出来的?&/p&&figure&&img src=&https://pic2.zhimg.com/50/e879dedfce9c_b.jpg& data-rawwidth=&806& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&806& data-original=&https://pic2.zhimg.com/50/e879dedfce9c_r.jpg&&&/figure&&p&答案就是Excel。&/p&&br&&p&滑珠图、子弹图、瀑布图……一切都可以用Excel最基本的操作搞定。&/p&&figure&&img src=&https://pic3.zhimg.com/50/b49f624a8dfc75990dbc20315f54baab_b.jpg& data-rawwidth=&810& data-rawheight=&302& class=&origin_image zh-lightbox-thumb& width=&810& data-original=&https://pic3.zhimg.com/50/b49f624a8dfc75990dbc20315f54baab_r.jpg&&&/figure&&br&&p&我会先介绍一些设计的核心理念和方法,然后列举16个“商务范”图表制作实例,包含详细的制作步骤,最后分享一些配色方案。&/p&&br&&p&==================================================================&/p&&p&&u&目录&/u&&/p&&br&&p&&b&一、商务图表制作核心理念和方法&/b&&/p&&ol&&li&突破Excel的图表元素&br&&/li&&li&突破Excel的图表类型&br&&/li&&li&布局与细节&/li&&/ol&&p&&b&二、“商务范”图表制作实例&/b&&/p&&ol&&li&日期坐标轴妙用&br&&/li&&li&堆积柱形图妙用&br&&/li&&li&漏斗图-利用辅助列占位&br&&/li&&li&自定义Y轴刻度间距&br&&/li&&li&含加粗边缘的面积图&br&&/li&&li&图表覆盖妙用 - 横网格线覆盖于图表之上&/li&&li&为Pie图加背景图片&br&&/li&&li&仪表盘&br&&/li&&li&多数量级的几组数据同时比较&br&&/li&&li&手风琴式折叠bar图&br&&/li&&li&Water Fall 瀑布图&br&&/li&&li&不等宽柱形图&br&&/li&&li&滑珠图&br&&/li&&li&动态图表1&br&&/li&&li&动态图表2&br&&/li&&li&Bullet图-竖直&/li&&/ol&&p&&b&三、配色方案&/b&&/p&&ol&&li&Nordri设计公司分享的配色方案&br&&/li&&li&ExcelPro分享的方案&/li&&/ol&&b&四、自学参考书目和资料&/b&&br&&br&&br&&p&==================================================================&/p&&p&&u&正文&/u&&/p&&br&&p&&b&一、商务图表制作核心理念和方法&/b&&/p&&br&(这一章节的笔记整理自刘万祥老师的博客&a href=&//link.zhihu.com/?target=http%3A//excelpro.blog.sohu.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ExcelPro的图表博客&/a&)&br&&br&&p&&b&1. 突破Excel的图表元素&/b&&/p&&p&不要仅用“图表”做图表,而是用“图表+所有Excel元素(如单元格,填充色,文本框)”去做图表。&/p&&p&(在我开头举的案例中有详尽的说明)&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/e113e24f4df3df43ac52_b.jpg& data-rawwidth=&509& data-rawheight=&248& class=&origin_image zh-lightbox-thumb& width=&509& data-original=&https://pic4.zhimg.com/50/e113e24f4df3df43ac52_r.jpg&&&/figure&&p&  左上图,只有B4单元格是图表区域,标题利用的是B2;B3-B5填充浅色,&index&和&data&分别在B3、B5。&/p&&p&  右上图,B2为图表序号,C2为图表标题,填深绿色,B3为副标题,图例放在C4,图表在C5,B2到C5填充淡色,B6、C6合并填写注释。&/p&&figure&&img src=&https://pic2.zhimg.com/50/e90d6c9d186d95e5c1dbf_b.jpg& data-rawwidth=&687& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&687& data-original=&https://pic2.zhimg.com/50/e90d6c9d186d95e5c1dbf_r.jpg&&&/figure&&p&  左上图,标题在C2-H2居中,图表在C3-H3,利用Excel单元格的数据表在C6-H8。&/p&&p&  右上图,B2填红色装饰,标题和副标题分别在B2、B3,图表在D4-F4,数据来源在D5,标号2为矩形框,整个区域有边框。&/p&&br&&p&&b&2. 突破Excel的图表类型&/b&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/a002de8f2b35dda0d077cbb45c33740f_b.jpg& data-rawwidth=&543& data-rawheight=&299& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic1.zhimg.com/50/a002de8f2b35dda0d077cbb45c33740f_r.jpg&&&/figure&&br&&p&  左上图,先用所有数据做曲线图或柱形图,然后选中相应的序列,更改图表类型,有时还需要用到次坐标轴。&/p&&p&  右上图,先做好面积图,然后将该数据序列再次加入图表,修改新序列的图表类型为曲线图,调粗线型。&/p&&br&&p&&b&3. 布局与细节&/b&&/p&&ul&&li&&b&布局&/b&&/li&&/ul&&p&  下图从上到下可以分为5个部分:&b&主标题区、副标题区、图例图、绘图区、脚注区&/b&。&/p&&p&  特点有:&b&完整的图表要素;突出的标题区;从上到下的阅读顺序&/b&。&/p&&p&&b&
标题区&/b&非常突出,占到整个图表面积1/3以上,其中主标题用大号字和强烈对比效果,副标题提供详细信息。&/p&&figure&&img src=&https://pic1.zhimg.com/50/2df4313589fca8a2f15b39_b.jpg& data-rawwidth=&332& data-rawheight=&250& class=&content_image& width=&332&&&/figure&&ul&&li&&b&竖向构图方式&/b&&br&&/li&&/ul&&p&  整个图表外围高宽比例在2:1到1:1之间,图例一般在绘图区上部或融入绘图区里面&/p&&ul&&li&&b&使用更为简洁醒目的字体&/b&&br&&/li&&/ul&&p&  商业图表多选用&b&无衬线类字体&/b&&/p&&p&  图表和表格的数字中使用&b&Arial&/b&&b&字体、&/b&&b&8~10&/b&&b&磅大小,中文使用黑体&/b&&/p&&ul&&li&&b&注意图表的细节处理&/b&&/li&1. 脚注区写上数据来源&br&2. 图标注释:对于图表中需要特别说明的地方,如指标解释、数据口径、异常数据等,使用上标或*等进行标记,在脚注区说明&br&3. 坐标轴截断标识&br&4. 四舍五入:在脚注区写明:由于四舍五入,各数据之和可能不等于总额(或100%)&br&5. 简洁的坐标轴标签:如2003、’04、’05&br&6. 让Line图从y轴开始:双击x轴,Axis Options-最下-Position Axis-on tick marks&br&7. 作图数据的组织技巧: 原始数据不等于作图数据;作图前先数据排序;将数据分离为多个序列,每个序列单独格式化&br&8. 其他: 去除绘图区的外框线,去除纵坐标轴的线条色,将网格线使用淡灰色予以弱化,bar间距小于bar宽度,饼图分块用的白色线&br&&/ul&&p&—————————————————————————————————————&/p&&br&&p&&b&二、“商务范”图表制作实例&/b&&/p&(这一章节的16个案例均出自刘万祥老师的&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/4326057/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Excel图表之道 (豆瓣)&/a&,该书基于Excel2003)&br&&br&最初回答中,这部分整理自我的笔记,基于英文版Excel2010。为了知友阅读方便,我以Excel 2013中文版操作了一遍,将操作步骤逐条改为了中文。&br&&br&如果你使用的是其他版本,具体操作方法会不同(我的回答中以【】注出),但“【”前面的步骤说明和思路是没有问题的。&br&&br&仪表盘、滑珠图、子弹图、瀑布图、动态图表我有自作的模板。有需要的请至 &a href=&//link.zhihu.com/?target=http%3A//pan.baidu.com/s/1c0zXVXI& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Excel templ_免费高速下载&/a&&br&&br&&b&1. 日期坐标轴妙用&/b&&br&&p&利率(y轴)随时间(x轴)的变化,我们希望得到下图所示的柱状图,横坐标的间隔按月份(3月、6月、12月、24月)分布。&/p&&figure&&img src=&https://pic4.zhimg.com/50/5fed43bc52_b.jpg& data-rawwidth=&392& data-rawheight=&219& class=&content_image& width=&392&&&/figure&&br&&p&原始数据与辅助列&i&(A列为月份,B列为利率,C列是辅助列)&/i&&/p&&figure&&img src=&https://pic1.zhimg.com/50/998f4cb6dbd06f531d3b5b1_b.jpg& data-rawwidth=&203& data-rawheight=&108& class=&content_image& width=&203&&&/figure&&br&绘制方法&p&1) 选中A2:B5,做柱状图,发现应是横坐标的A列值也成了柱子&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/b42a3cc1c9bbcfd59189b_b.jpg& data-rawwidth=&387& data-rawheight=&219& class=&content_image& width=&387&&&/figure&2) 删除系列1&/p&&p&方法1【选中图表 --& Excel标题栏图表工具 --& 设计 --& 选择数据 --& 系列1 --& 删除】&/p&&p&方法2【直接点击蓝色柱子 --& 按Delete键删除】&/p&&p&&figure&&img src=&https://pic3.zhimg.com/50/1253ff8badf166b10c855f_b.jpg& data-rawwidth=&389& data-rawheight=&217& class=&content_image& width=&389&&&/figure&3) 将横坐标转化为我们希望的A列的值&/p&&p&【选中图表 --& Excel标题栏图表工具 --& 设计 --& 选择数据 --& 水平(分类)轴标签 编辑 --& 选择区域A2:A5】&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/2da65d58a0ed95df55b90d_b.jpg& data-rawwidth=&392& data-rawheight=&193& class=&content_image& width=&392&&&/figure&&br&&p&4) 将横坐标转化为日期坐标轴 【双击横坐标 --&如下左图所示选择“日期坐标轴”】&/p&&p&得到下右图&/p&&figure&&img src=&https://pic2.zhimg.com/50/eacac970332_b.jpg& data-rawwidth=&560& data-rawheight=&243& class=&origin_image zh-lightbox-thumb& width=&560& data-original=&https://pic2.zhimg.com/50/eacac970332_r.jpg&&&/figure&&br&&p&5) 删去横坐标【选中横坐标 --& 按Delete键删除】&/p&&figure&&img src=&https://pic4.zhimg.com/50/ba14ed2c0cfbb4c5d638_b.jpg& data-rawwidth=&355& data-rawheight=&193& class=&content_image& width=&355&&&/figure&&br&&p&6) 将辅助列添加进去【选中辅助列C2:C5 --& 复制 --& 选中图表 --& 粘贴】&/p&&p&蓝色的“系列2”就是我们的辅助序列,因为值为0,所以看不到&/p&&figure&&img src=&https://pic4.zhimg.com/50/73f6efd84befc3afd059a0_b.jpg& data-rawwidth=&352& data-rawheight=&195& class=&content_image& width=&352&&&/figure&&br&&p&7) 将蓝色“系列2”转化为折线图 &/p&&p&【选中图表 --& Excel标题栏图表工具 --& 格式 --& 最左侧下拉菜单选择最后一项“系列2” --& Excel标题栏图表工具 --& 设计 --& 更改图表类型 --& 如下图所示将蓝色系列1的类型改为折线图】&/p&&figure&&img src=&https://pic3.zhimg.com/50/601dbb07b18b29e44cac_b.jpg& data-rawwidth=&469& data-rawheight=&114& class=&origin_image zh-lightbox-thumb& width=&469& data-original=&https://pic3.zhimg.com/50/601dbb07b18b29e44cac_r.jpg&&&/figure&&br&&p&得到&/p&&figure&&img src=&https://pic2.zhimg.com/50/57ff47c12e463c2b166aa7_b.jpg& data-rawwidth=&351& data-rawheight=&191& class=&content_image& width=&351&&&/figure&&br&&p&8) 让蓝色折线图的数据标签显示出来 【选中蓝色折线 --& 右击鼠标 --& 下图所示勾选数据标签“下方”】&/p&&figure&&img src=&https://pic4.zhimg.com/50/35fb21dbe365de3a65c8868_b.jpg& data-rawwidth=&660& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic4.zhimg.com/50/35fb21dbe365de3a65c8868_r.jpg&&&/figure&&br&&br&9) 隐藏蓝色折线 【选中蓝色折线 --& 右击鼠标 --& 轮廓选择“无轮廓”】&br&&figure&&img src=&https://pic4.zhimg.com/50/401a15e3bcce5d072e4dc8_b.jpg& data-rawwidth=&438& data-rawheight=&245& class=&origin_image zh-lightbox-thumb& width=&438& data-original=&https://pic4.zhimg.com/50/401a15e3bcce5d072e4dc8_r.jpg&&&/figure&&br&得到&br&&figure&&img src=&https://pic3.zhimg.com/50/db29fae239d807a9c8a968_b.jpg& data-rawwidth=&392& data-rawheight=&222& class=&content_image& width=&392&&&/figure&&br&&br&10) 逐个修改横坐标 【点击选中横坐标,发现四个都选中了(下左图所示) --& 再点击第一个0,将其选中(下右图所示) --& 鼠标点击公式输入栏,输入“=”,鼠标点击A2单元格 --&回车】依次修改即可&br&&br&注意:在选中第一个0后,不要直接输入“=”,而是要在公式输入栏里输入&br&&figure&&img src=&https://pic3.zhimg.com/50/b2ae0b02b96d92e211d48e31cfc9800e_b.jpg& data-rawwidth=&505& data-rawheight=&223& class=&origin_image zh-lightbox-thumb& width=&505& data-original=&https://pic3.zhimg.com/50/b2ae0b02b96d92e211d48e31cfc9800e_r.jpg&&&/figure&&br&&br&**点评:该案例妙在利用辅助列,做出了柱状图的坐标值。当然,也有万能的办法,即不用辅助列,在完成5)之后,添加文本框作为坐标值。用本例所示的方法好处在于,源数据3、6、12、24修改之后,柱子、坐标值都会随之而动。&br&&br&&p&&b&2. &/b&&b&堆积柱形图妙用&/b&&/p&&br&&p&效果如图,看似是簇状和堆积柱形图合用,实际呢?&/p&&figure&&img src=&https://pic4.zhimg.com/50/f79fe1e1b80d27cd7035_b.jpg& data-rawwidth=&415& data-rawheight=&238& class=&content_image& width=&415&&&/figure&&br&&p&一步即可,只需在源数据上下些功夫&/p&&p&【选中下图所示B9:E20单元格 --& 绘制堆积柱形图】&/p&&br&&figure&&img src=&https://pic4.zhimg.com/50/ceae13f0ac2_b.jpg& data-rawwidth=&342& data-rawheight=&408& class=&content_image& width=&342&&&/figure&&br&**点评:利用错行和空行,奇妙无穷。&br&&br&&p&&b&3. &/b&&b&漏斗图-&/b&&b&利用辅助列占位&/b&&/p&&br&&p&效果如图,形似漏斗。 &/p&&figure&&img src=&https://pic4.zhimg.com/50/95d5da9b2100e8fec8e7_b.jpg& data-rawwidth=&328& data-rawheight=&270& class=&content_image& width=&328&&&/figure&&br&&p&原始数据 (指标需排序好,从大大小)&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/bc68c5f7f87c95f004b0c752d3058398_b.jpg& data-rawwidth=&147& data-rawheight=&167& class=&content_image& width=&147&&&/figure&&br&&p&添加辅助列 【C3单元格公式=($D$3-D3)/2,然后拉至C8】&/p&&figure&&img src=&https://pic3.zhimg.com/50/f424a2d9bade5061dcdb232e05ca5615_b.jpg& data-rawwidth=&201& data-rawheight=&182& class=&content_image& width=&201&&&/figure&&br&&p&绘制方法&/p&&p&1) 选中B3:D8,绘制堆积条形图&/p&&figure&&img src=&https://pic2.zhimg.com/50/2d27562cdad445b6dfcea9_b.jpg& data-rawwidth=&555& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&555& data-original=&https://pic2.zhimg.com/50/2d27562cdad445b6dfcea9_r.jpg&&&/figure&&br&&p&2) 把漏斗倒过来,即反转纵坐标 【双击纵坐标 --& 勾选“逆序类别”】&/p&&figure&&img src=&https://pic3.zhimg.com/50/69fcbdecadfcc302e4f433_b.jpg& data-rawwidth=&557& data-rawheight=&445& class=&origin_image zh-lightbox-thumb& width=&557& data-original=&https://pic3.zhimg.com/50/69fcbdecadfcc302e4f433_r.jpg&&&/figure&&br&&br&&p&3) 将绿色系列1隐去【选中绿色条 --& 右键 --& 填充 --& 无填充颜色】&/p&&figure&&img src=&https://pic2.zhimg.com/50/82cacaaced4c_b.jpg& data-rawwidth=&206& data-rawheight=&303& class=&content_image& width=&206&&&/figure&&br&&br&**点评:辅助列永远是好帮手。&br&&br&&p&&b&4. &/b&&b&自定义Y&/b&&b&轴刻度间距&/b&&/p&&br&&p&以股价随时间变化为例,重要的是涨跌幅度,且幅度很大,这里我们采用&b&自定义Y轴&/b&间距,并以常用的&b&对数坐标&/b&为例。&/p&&br&&p&最终效果图&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/883cc3aaed1_b.jpg& data-rawwidth=&470& data-rawheight=&226& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic1.zhimg.com/50/883cc3aaed1_r.jpg&&&/figure&&br&原始数据&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/e8cacdb4cddd_b.jpg& data-rawwidth=&93& data-rawheight=&226& class=&content_image& width=&93&&&/figure&&br&通过观测原始数据最小值和最大值,我们希望以20、30、50、100、400、600为刻度作为纵坐标,&/p&&p&将数据处理如下&/p&&ul&&li&C列是B列值的对数值 C2单元格公式为 =Log(B2) ,拉至C12&br&&/li&&li&F列即我们希望的刻度&br&&/li&&li&G列同理,是F列的Log值&br&&/li&&/ul&&p&&figure&&img src=&https://pic1.zhimg.com/50/0db06ac4fb29ac23bbf0af7_b.jpg& data-rawwidth=&271& data-rawheight=&222& class=&content_image& width=&271&&&/figure&&br&&br&绘制方法&/p&&p&1)选中C2:C12 绘制折线图&br&&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/bdbff8f8afa5_b.jpg& data-rawwidth=&299& data-rawheight=&108& class=&content_image& width=&299&&&/figure&2) 将G2:G7加入到图表中 【选中辅助列G2:G7 --& 复制 --& 选中图表 --& 粘贴】&/p&&p&&figure&&img src=&https://pic4.zhimg.com/50/9de80dff8f37_b.jpg& data-rawwidth=&299& data-rawheight=&139& class=&content_image& width=&299&&&/figure&3) 将新加入的蓝色折线改为散点图&/p&&p&【点击蓝色折线 --& Excel标题栏图表工具 --& 设计 --& 更改图表类型 --& 如下图所示将蓝色系列2的改为“带直线和数据标记的散点图”】&/p&&p&&figure&&img src=&https://pic4.zhimg.com/50/ddfc509f199dc_b.jpg& data-rawwidth=&393& data-rawheight=&132& class=&content_image& width=&393&&&/figure&得到&/p&&p&&figure&&img src=&https://pic4.zhimg.com/50/cf4fdead34fc650bb26ce_b.jpg& data-rawwidth=&298& data-rawheight=&139& class=&content_image& width=&298&&&/figure&4) 设置纵轴下限为1 【双击纵轴 --& 在坐标轴选项里将最小值调节为1】&/p&&p&5) 删去纵坐标轴,删去水平网格线;&/p&&p&6) 设置坐标轴在刻度线上【双击横坐标轴 --& 如下左图所示勾选“在刻度线上”】&/p&&p&得到右下图&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/751c461fcd4ec4104e3aae4a1cede834_b.jpg& data-rawwidth=&478& data-rawheight=&415& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic1.zhimg.com/50/751c461fcd4ec4104e3aae4a1cede834_r.jpg&&&/figure&7) 将蓝色折线的横坐标设置为E2:E7【点击蓝色折线 --& Excel标题栏图表工具 --& 设计 --& 选择数据 --& 如左下图所示选择“系列2” --& 点击“编辑” --& 如右下图所示,X轴系列值选为E2:E7 --& 确定】&/p&&p&&figure&&img src=&https://pic4.zhimg.com/50/6918a97cab308ff603df5c27d0549822_b.jpg& data-rawwidth=&547& data-rawheight=&134& class=&origin_image zh-lightbox-thumb& width=&547& data-original=&https://pic4.zhimg.com/50/6918a97cab308ff603df5c27d0549822_r.jpg&&&/figure&得到&/p&&p&&figure&&img src=&https://pic2.zhimg.com/50/b78b9d082f8c0d9c718d6ef_b.jpg& data-rawwidth=&293& data-rawheight=&128& class=&content_image& width=&293&&&/figure&8) 让蓝色数据点的数据值显示出来 【点击蓝色直线 --& 右侧选择数据标签-左】&/p&&figure&&img src=&https://pic4.zhimg.com/50/589d1a8cfb07a3d897424_b.jpg& data-rawwidth=&562& data-rawheight=&219& class=&origin_image zh-lightbox-thumb& width=&562& data-original=&https://pic4.zhimg.com/50/589d1a8cfb07a3d897424_r.jpg&&&/figure&&br&&p&缩小一下绘图区&/p&&figure&&img src=&https://pic2.zhimg.com/50/c905c39a1a916ed3725e_b.jpg& data-rawwidth=&303& data-rawheight=&133& class=&content_image& width=&303&&&/figure&&br&&p&9) 添加误差线 【点击蓝色直线 --& 右侧选择误差线-更多选项】&/p&&figure&&img src=&https://pic2.zhimg.com/50/92ed659d00ab7d8504dbcecfe7e4b1ef_b.jpg& data-rawwidth=&520& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&https://pic2.zhimg.com/50/92ed659d00ab7d8504dbcecfe7e4b1ef_r.jpg&&&/figure&&br&&p&此时,横纵误差线都出来了&/p&&p&10) 删除纵误差线 【点击下左图所示的位置选中纵误差线 --& 按Delete键删除】&/p&&p&得到又下图&/p&&p&&figure&&img src=&https://pic1.zhimg.com/50/2d4fd4dd65b4c43d1dff4_b.jpg& data-rawwidth=&520& data-rawheight=&142& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&https://pic1.zhimg.com/50/2d4fd4dd65b4c43d1dff4_r.jpg&&&/figure&11) 调节横误差线参数 【双击横误差线 --& 在右侧弹窗里勾选“正偏差”,“固定值”改为10】&/p&&p&缩小一下绘图区,得到右下图&/p&&p&&figure&&img src=&https://pic4.zhimg.com/50/e9aabf98bb4aabea2db5cb_b.jpg& data-rawwidth=&500& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/50/e9aabf98bb4aabea2db5cb_r.jpg&&&/figure&&br&12) 隐藏蓝色线 【右键蓝色直线 --& 选择无填充,无轮廓】&/p&&p&13) 调节误差线的颜色、线形 【双击误差线 --& 右侧弹窗中修改(下左图所示)】&/p&&p&得到右下图&br&&figure&&img src=&https://pic2.zhimg.com/50/2b62ba43aefe31f5e89828_b.jpg& data-rawwidth=&499& data-rawheight=&305& class=&origin_image zh-lightbox-thumb& width=&499& data-original=&https://pic2.zhimg.com/50/2b62ba43aefe31f5e89828_r.jpg&&&/figure&13) 与本回答的案例1类似,逐个修改纵坐标数据值【以2.78这个数据为例:选中纵坐标(6个数据一下子都选中了) --& 再点击2.78这个数据(如下图所示,只有2.78选中了) --& 鼠标点击公式输入栏,输入“=”,然后鼠标点击600(F7单元格) --& 回车】&/p&&figure&&img src=&https://pic2.zhimg.com/50/c6acd3ba20c5_b.jpg& data-rawwidth=&313& data-rawheight=&180& class=&content_image& width=&313&&&/figure&&br&&p&依次逐个修改,大功告成。&/p&&br&&p&**点评:本例极其巧妙地借助误差线,实现横向网格线。误差线在后续案例中会多次提及。当然,有人会说完全可以不用误差线,插入几个直线拖动就好了。但是,本例方法的好处是,修改20、50、400等坐标值,网格线也会跟着移动。&/p&&br&&p&&b&5. 含加粗边缘&/b&&b&面积图&/b&&/p&&p&最终效果与源数据&/p&&figure&&img src=&https://pic3.zhimg.com/50/3f17acf670ee130b972adb_b.jpg& data-rawwidth=&504& data-rawheight=&210& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&https://pic3.zhimg.com/50/3f17acf670ee130b972adb_r.jpg&&&/figure&&br&&p&绘制方法&/p&&p&1) 选中数据做折线图&/p&&figure&&img src=&https://pic4.zhimg.com/50/efa487cf60a2d_b.jpg& data-rawwidth=&271& data-rawheight=&127& class=&content_image& width=&271&&&/figure&&br&&p&2) 将源数据再次添加进图表中【选中源数据 --& 复制 --& 选中图表 --& 粘贴】&/p&&p&发现系列2覆盖住了系列1&/p&&figure&&img src=&https://pic4.zhimg.com/50/c4b9c483f8_b.jpg& data-rawwidth=&273& data-rawheight=&128& class=&content_image& width=&273&&&/figure&&br&&p&3) 将系列2改为面积图【点击选中蓝色折线 --& Excel标题栏图表工具 --& 设计 --& 更改图表类型 --& 如下左图所示将改为面积图】&/p&&p&得到下右图&/p&&figure&&img src=&https://pic1.zhimg.com/50/ca2e175de24fd97b818e4_b.jpg& data-rawwidth=&554& data-rawheight=&126& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic1.zhimg.com/50/ca2e175de24fd97b818e4_r.jpg&&&/figure&&br&&p&4) 调节坐标轴位置 【双击横坐标轴 --& 右侧弹窗中勾选“在刻度线上”】&/p&&p&得到右下图&/p&&figure&&img src=&https://pic3.zhimg.com/50/aad1e3f95ccc66173ced3df8bf2d581a_b.jpg& data-rawwidth=&459& data-rawheight=&374& class=&origin_image zh-lightbox-thumb& width=&459& data-original=&https://pic3.zhimg.com/50/aad1e3f95ccc66173ced3df8bf2d581a_r.jpg&&&/figure&&br&&p&调节颜色就好了&/p&&br&下面这个图是我做的~&figure&&img src=&https://pic4.zhimg.com/50/465fe29b0cb337cd8c370_b.jpg& data-rawwidth=&316& data-rawheight=&207& class=&content_image& width=&316&&&/figure&&br&&br&**点评:两种或多种图表类型合用的方法一定要掌握,活学活用。&br&&br&&p&&b&6. 图表覆盖妙用 - &/b&&b&横网格线覆盖于图表&/b&&b&之上&/b&&/p&&p&最终效果&figure&&img src=&https://pic3.zhimg.com/50/12fb1e14c32e57e05b5ad2_b.jpg& data-rawwidth=&201& data-rawheight=&222& class=&content_image& width=&201&&&/figure&&br&&/p&&p&绘制方法&/p&&p&以柱状图为例 (其他类型的图都一样)&/p&&br&&p&源数据&/p&&p&&figure&&img src=&https://pic3.zhimg.com/50/ccbab056e32c_b.jpg& data-rawwidth=&105& data-rawheight=&139& class=&content_image& width=&105&&&/figure&1) 绘制柱形图&/p&&p&&figure&&img src=&https://pic3.zhimg.com/50/dcec03ec4e1e968ab1515_b.jpg& data-rawwidth=&324& data-rawheight=&180& class=&content_image& width=&324&&&/figure&2) 将其锚定 【鼠标光标移动到下图所示的图表左上角的顶点处,按住Alt,随后按住鼠标进行拖动,发现这样调节图表的尺寸,限定于Excel的网格点。】&/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/d5c8f429df4ab9ba878bb3f54f296a36_b.jpg& data-rawwidth=&108& data-rawheight=&62& class=&content_image& width=&108&&&/figure&&br&&p&如下图所示,将四个角分别锚定于D2,G2,D9, G9&/p&&figure&&img src=&https://pic3.zhimg.com/50/8b88aeeaabca_b.jpg& data-rawwidth=&379& data-rawheight=&179& class=&content_image& width=&379&&&/figure&&br&&p&3) 复制图表【选中图表 --& 复制 --& 鼠标点击任意一个单元格

我要回帖

更多关于 祸水的自我修养txt 的文章

 

随机推荐