小母子汽僇店在什么路

&figure&&img src=&https://pic1.zhimg.com/v2-178ecd8cf791e92fbf190fcfb66f6007_b.jpg& data-rawwidth=&3840& data-rawheight=&2560& class=&origin_image zh-lightbox-thumb& width=&3840& data-original=&https://pic1.zhimg.com/v2-178ecd8cf791e92fbf190fcfb66f6007_r.jpg&&&/figure&&p&本文不适合 &code&VSCode&/code& 新人, 且内容比较杂, 可能造成阅读不便 &/p&&h2&基本操作&/h2&&ul&&li&命令面板是最常用的, &code&mac&/code& 下快捷键为 &code&cmd+shift+p&/code& 或者 &code&F1&/code&, 几乎所有事情都可以在这里完成, 前提是你要熟悉命令的英文表述&/li&&li&适当的增加你觉得舒服的快捷键绑定, 不要害怕跟其他快捷键冲突, 适合自己的就是最好的&/li&&li&&code&mac&/code& 下 &code&cmd+p&/code& 快速跳转文件, 其他用法输 &code&?&/code& &/li&&ul&&li&&code&@/#{symbol}&/code& 跳转到 &code&当前文件/workspace&/code& 中的 &code&symbol&/code&&/li&&li&&code&:{Number}&/code& 跳转到任意行&/li&&li&熟练使用这些快捷操作可以明显减少你碰鼠标的次数&/li&&/ul&&li&&code&cmd+k m&/code& 切换语言模式&/li&&li&&code&cmd+shift+m&/code& 切换问题面板, &code&cmd+j&/code& 切换集成终端 &/li&&li&换一个好看的配色以及一个好看且等宽的字体, 能极大地提高你编码的效率&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&workbench.iconTheme&: &material-icon-theme&,
&workbench.colorTheme&: &One Dark Pro Vivid&,
&material-icon-theme.folders.theme&: &specific&,
&material-icon-theme.folders.color&: &#26a69a&,
&material-icon-theme.hidesExplorerArrows&: true,
&material-icon-theme.activeIconPack&: &react_redux&,
&editor.fontFamily&: &'Hack-Italic', Menlo, 'Input Sans Narrow', Monaco, 'Courier New', monospace&,
&/code&&/pre&&/div&&ul&&li&&code&Zen Mode&/code& 可以让你更专注与当前工作, 快捷键是 &code&cmd+k z&/code&, 记不住可以在命令面板搜(这是我非常喜欢的功能, 让人感到很舒服) &/li&&li&&code&Side by side editing&/code& VSCode 支持最多分为三列, 快捷键 &code&cmd+1/2/3&/code&&/li&&li&文件类型关联, 比如某奇葩语法明明是 &code&html&/code& 非要搞成 &code&wxml&/code&, 明明是 &code&css&/code& 非要搞成 &code&wxss&/code& &/li&&/ul&&div class=&highlight&&&pre&&code class=&language-json&&&span&&/span&&span class=&s2&&&file.associations&&/span&&span class=&err&&:&/span& &span class=&p&&{&/span&
&span class=&nt&&&.wxss&&/span&&span class=&p&&:&/span& &span class=&err&&&css&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&ul&&li&除了可以使用 &code&cmd+d&/code& 来增加光标, 也可以使用 &code&opt+cmd+up/down/click&/code& 来向上/下/点击位置增加光标 &/li&&li&&code&shift+opt+up/down&/code& 复制到上/下一行, &code&opt+up/down&/code& 移动到上/下一行, 这都是很常用的了&/li&&li&&code&cmd+u&/code& 可以回退到上一次光标的位置, 很有用 &/li&&li&使用 &code&alt+cmd+[&/code& 或者 &code&alt+cmd+]&/code& 可以进行快速代码折叠/展开&/li&&li&&code&shift+cmd+v&/code& 能快速预览 &code&markdown&/code& 文件 &/li&&li&跳转到定义, 可以 &code&F12&/code& 或者 &code&cmd+click&/code& 反正都很麻烦, 都需要动右手 &/li&&li&&code&Git&/code& 支持, &code&Git Lens&/code& 一个插件解决所有问题&/li&&li&&code&Git diff review&/code& 时, 建议点击右上角的 &code&...&/code& 选择切换到 &code&inline mode&/code&&/li&&li&建议将 &code&vscode&/code& 设置为 &code&gitdiff&/code& 默认 &code&tool&/code&&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-bash&&&span&&/span&git config --global merge.tool code
&/code&&/pre&&/div&&ul&&li&&code&CLI&/code& 命令: &code&code&/code& 或者 &code&code-insiders&/code& &/li&&ul&&li&每次都输入 &code&code-insiders&/code& 太长了, 所以一般 &code&alias icode=code-insiders&/code&&/li&&li&&code&code .&/code& 算是比较常用的, 即使用 &code&vscode&/code& 打开当前目录&/li&&li&&code&code --disable-extensions .&/code& 遇到问题的时候你可能需要这个命令&/li&&li&&code&code --diff &file1& &file2&&/code&&/li&&li&其他请参考 &code&code -h&/code&&/li&&/ul&&/ul&&p&&br&&/p&&h2&插件在精不在多&/h2&&p&这里其实应该称之为 &code&扩展&/code& 而不是 &code&插件&/code& &/p&&div class=&highlight&&&pre&&code class=&language-bash&&&span&&/span&$ icode --list-extensions
EditorConfig.EditorConfig
HookyQR.beautify
PKief.material-icon-theme &span class=&c1&&# 文件 icon 很精美 &/span&
Stephanvs.dot &span class=&c1&&# 作图用的 &/span&
WakaTime.vscode-wakatime &span class=&c1&&# 庖丁解牛, 可以分析你花时间在哪些项目哪些分支哪些模块上 &/span&
abusaidm.html-snippets
andys8.jest-snippets
bungcip.better-toml
christian-kohler.path-intellisense &span class=&c1&&# 路径补全 &/span&
dbaeumer.vscode-eslint
eamodio.gitlens
eg2.tslint
eg2.vscode-npm-script
flowtype.flow-for-vscode
hollowtree.vue-snippets
joelday.docthis
kumar-harsh.graphql-for-vscode
lukehoban.Go
ms-python.python
ms-vscode.cpptools
octref.vetur
spywhere.guides
timothymclane.react-redux-es6-snippets
vscodevim.vim
wayou.vscode-todo-highlight
xabikos.JavaScriptSnippets
zhuangtongfa.Material-theme
&/code&&/pre&&/div&&h2&&code&debug&/code& 调试之道&/h2&&ul&&li&初学者总觉得调试配置起来很难, 其实不然, 只要花时间看文档, 写个 &code&launch.json&/code& 很容易 &/li&&li&正确区分 &code&launch&/code& 和 &code&attach&/code&&/li&&li&只要你所编写的语言支持 &code&language-server-protocol&/code& 都可以在 vscode 中进行调试&/li&&li&打断点很简单, 右键可以设置 &code&条件断点&/code&, 在表达式为 &code&true&/code& 时触发 &/li&&li&经常会有人疑惑为什么写的前端项目打断点不会断: 运行时在你的浏览器, vscode 无能为力 , 调试前端项目尽量使用 &code&chrome devtool&/code&, 不要受某些高下载量的扩展(&code&debugger in chrome&/code&)的影响&/li&&/ul&&h2&&code&VSCodeVim&/code& - 真正的 &code&editor&/code&&/h2&&p&多记些快捷键对脑子有好处, 但总移动你的右手和低头却对身体有害, 所以跟我一样, 拥抱 &code&vim&/code& 吧 &/p&&ul&&li&扩展市场搜索 &code&vim&/code& 选择安装量最大的插件&/li&&li&gd - Go to definition, 跳转到定义&/li&&li&gb - 找出与光标下相同的下一个单词, 并添加一个光标, 类似 &code&vscode&/code& 原生的 &code&cmd + d&/code&&/li&&li&af - &code&VISUAL&/code& 模式命令, 依据语法分析, 将选择区域向外扩展&/li&&li&gh - 等同于将鼠标移至光标所在单词, 方便查看定义以及报错&/li&&li&当你开启 &code&vim-easymotion&/code& 后有更多骚操作 (&code&&vim.easymotion&: true&/code&)&/li&&ul&&li&&code&&leader&&leader& t/T &char&&/code& 能够向前/向后快速到达可见范围内的某字符(&code&&char&&/code&)的位置&/li&&li&&code&&leader&&leader& w/b&/code& 向前/向后到达可见范围内任何单词的开头&/li&&li&&code&&leader&&leader& e/ge&/code& 向前/向后到达可见范围内任何单词的结尾 &/li&&li&&code&&leader&&leader& k/j&/code& 向前/向后到达可见范围内任何行的行首 &/li&&li&更多骚操作查看文档 &a href=&https://link.zhihu.com/?target=https%3A//github.com/VSCodeVim/Vim/%23vim-easymotion& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VSCodeVim/#vim-motion&/a&&/li&&/ul&&li&快速注释 &code&vim-commentary&/code& 默认开启&/li&&ul&&li&&code&VSCode&/code& 或是 &code&INSERT MODE&/code& 下可以使用 &code&cmd + /&/code& 快速注释光标所在/选中行, &code&NORMAL&/code& 模式下 &code&gcc&/code& 可以快速注释当前行, &code&gc2j&/code& 注释以下两行, &code&VISUAL&/code& 模式 &code&gc&/code& 可快速注释选中行&/li&&li&&code&gCC&/code& 使用块级注释, 注释当前行, 其他类似&/li&&/ul&&li&&code&vim-sneak&/code& 光标快速移动&/li&&ul&&li&&code&s/S &char&&char&&/code& 快速向前/向后移动光标到第一次出现 &code&&char&&char&&/code& 字符的位置&/li&&/ul&&li&代码折叠, 建议设置 &code&&vim.foldfix&: true&/code&(这能修复光标经过折叠代码时自动展开的 bug, 但会带来副作用)&/li&&ul&&li&&code&[N]zo&/code& 会递归展开光标下的 N 层折叠, &code&zO&/code& 会展开光标下所有折叠&/li&&li&&code&[N]zc&/code& 会递归关闭光标下的 N 层折叠, &code&zC&/code& 会关闭光标下所有折叠&/li&&li&&code&zM&/code& 全部折叠, &code&zR&/code& 全部展开&/li&&/ul&&li&&code&VSCodeVim&/code& 中没有 &code&Buffer&/code& 概念, &code&window&/code& 概念和 &code&vim&/code& 也不太一样&/li&&ul&&li&设置快捷键后 &code&Cmd+h&/code& 和 &code&Cmd+l&/code& 分别为当前 &code&window&/code& 下打开上一个/下一个 &code&editor(Buffer)&/code&&/li&&/ul&&/ul&&p&&/p&
本文不适合 VSCode 新人, 且内容比较杂, 可能造成阅读不便 基本操作命令面板是最常用的, mac 下快捷键为 cmd+shift+p 或者 F1, 几乎所有事情都可以在这里完成, 前提是你要熟悉命令的英文表述适当的增加你觉得舒服的快捷键绑定, 不要害怕跟其他快捷键冲突, …
&p&用Python写的第一个程序,是爬取糗事百科上的图片、自动下载到本地、自动分成文件夹保存,当时就觉得,卧糟,太NB了~&/p&&p&第二个程序,当然还是图片爬虫,不过这次,嘿嘿,是妹纸图,你懂得~&/p&&p&然后还跟着别人的代码或教程或者自己写过:&/p&&p&12306火车票查询工具、携程机票查询;&/p&&p&爬取美团电影、豆瓣电影用户评论;&/p&&p&简单的美团餐厅爬虫及根据地理坐标制作简单热力图;&/p&&p&智联招聘爬虫,支持输入查询的职位关键词+城市。并将爬取到的数据分别用Exce和Python(matplotlib)做了数据分析及可视化;&/p&&p&&b&经常用到在线翻译,于是利用Python Gui库(&/b&Tkinter&b&)&/b&做了简单的桌面翻译查询软件;&/p&&p&尝试爬取京东热卖、淘宝淘抢购(还是聚划算)的商品信息,没想到还挺简单的,主要是没做什么防爬虫措施。。。;&/p&&p&利用Python+Selenium+Phantomjs做了一个模拟搜索浏览淘宝商品的程序,可以记录你设定的关键词下,淘宝搜索到的前100页商品信息、信息存到本地mysql或mongoDB。&/p&&p&Python+Scrapy爬取知乎用户关系链~;&/p&&p&用Python玩微信跳一跳,跳了2500+;&/p&&p&过大年之际,用Python的itchat库集成了自己的几个查询系爬虫(查天气查火车查携程机票查快递)做到了微信自动回复的功能!亲朋好友发来的祝福可以自动回复了,避免了尴尬!O(∩_∩)O哈哈~还能查天气查火车查携程机票查快递,对,很好玩很实用~&/p&&p&还有很多想学的:爬虫Scrapy框架,机器学习Tensorflow、图像识别。。。。&/p&&hr&&p&以下转载几个自己做的几个小程序,适合新人,&b&喜欢请点赞~ 谢谢:)&/b&&/p&&p&&b&github:&/b&&a href=&//link.zhihu.com/?target=https%3A//github.com/Flowingsun007/littleSpiders& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Flowingsun007/littleSpiders&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:Python图片文本识别—基于tesseract和百度实现&/a& (更新于18.4.15)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon: Python实现微信查天气+火车+飞机+快递&/a&
(更新于18.3.7)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:Python—itchat下载拼接微信好友头像图&/a& (更新于18.3.6)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:Python—itchat实现微信自动回复&/a&(更新于18.3.5)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon: Python命令行实现—查全国7天天气&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon: python命令行查询12306火车票&/a& (更新于18.2.19)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon: Python—一行代码情人节画爱心表白&/a& (更新于18.2.14)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon: Python多线程threading—图片下载&/a& (更新于18.2.5)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:Python—10行代码查快递&/a& (更新于18.2.2)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:用Python发邮件&/a&(更新于18.1.23)&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:Python爬虫入门—图片下载&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:用Python实现—携程机票查询&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Lyon:智联Python相关职位的数据分析及可视化-Pandas&Matplotlib篇&/a&&/p&&hr&&p&以下两个小项目,都比较适合练手。&/p&&p&第一个是命令行携程机票查询,模仿的是12306火车票查询器做的;&/p&&p&第二个是一个智联招聘的爬虫,包括后面数据处理、分析以及用matplotlib进行了可视化。&/p&&p&代码都有,欢迎拿去~&/p&&hr&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-b8fd8a32f0dfab58b37e386_180x120.jpg& data-image-width=&872& data-image-height=&604& class=&internal&&Lyon:用Python实现—携程机票查询&/a&&p&以前参考别人的代码,用Python做了一个12306命令行式的火车票查询工具,感觉还挺有意思的!于是自己又做了一个类似的——携程机票查询器。&/p&&p&携程官网查询的效果是这样的:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-89f157c0a8bd7d891fa44_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1190& data-rawheight=&874& class=&origin_image zh-lightbox-thumb& width=&1190& data-original=&https://pic3.zhimg.com/50/v2-89f157c0a8bd7d891fa44_r.jpg&&&/figure&&p&Python命令行界面查询的效果是这样的:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-b8fd8a32f0dfab58b37e386_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&872& data-rawheight=&604& class=&origin_image zh-lightbox-thumb& width=&872& data-original=&https://pic3.zhimg.com/50/v2-b8fd8a32f0dfab58b37e386_r.jpg&&&/figure&&p&输入出发地、目的地、乘机日期,即可看到可选的航班、机场、出发到达时间、票价等信息。&/p&&p&视频演示效果如下:&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/621056& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-029a73d6a55f5a1c9ed8d56c1c84f71d_b.jpg& data-lens-id=&621056&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-029a73d6a55f5a1c9ed8d56c1c84f71d_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/621056&/span&
&/a&&p&程序的源码如下:&/p&&p&1.air_stations.py&/p&&p&2.airline_ticket.py&/p&&div class=&highlight&&&pre&&code class=&language-text&&#1.air_stations.py
import json
import requests
from pprint import pprint
url = 'http://webresource.c-ctrip.com/code/cquery/resource/address/flight/flight_new_poi_gb2312.js?CR__00_00_00'
response = requests.get(url,verify=False)
station = re.findall(u'([\u4e00-\u9fa5]+)\(([A-Z]+)\)', response.text)
stations = dict(station)
pprint(stations,indent = 4)
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&2.airline_ticket.py
#此程序可定出发日期、出发城市、目的城市!(模仿了上一个12306火车订票查询程序)
import requests,json,os
from docopt import docopt
from prettytable import PrettyTable
from colorama import init,Fore
from air_stations import stations
fromCity = input('Please input the city you want leave :')
toCity = input('Please input the city you will arrive :')
tripDate = input('Please input the date(Example:) :')
class TrainsCollection:
header = '航空公司 航班 机场 时间 机票价格 机场建设费'.split()
def __init__(self,airline_tickets):
self.airline_tickets = airline_tickets
def plains(self):
#航空公司的总表没有找到,但是常见航空公司也不是很多就暂时用这个dict{air_company}来收集!
#如果strs没有查询成功,则会返回一个KeyError,表示此dict中未找到目标航空公司,则会用其英文代码显示!
air_company = {&G5&:&华夏航空&,&9C&:&春秋航空&,&MU&:&东方航空&,&NS&:&河北航空&,&HU&:&海南航空&,&HO&:&吉祥航空&,&CZ&:&南方航空&,&FM&:&上海航空&,&ZH&:&深圳航空&,&MF&:&厦门航空&,&CA&:&中国国航&,&KN&:&中国联航&}
for item in self.airline_tickets:
strs = air_company[item['alc']]
except KeyError:
strs = item['alc']
airline_data = [
Fore.BLUE + strs + Fore.RESET,
Fore.BLUE + item['fn'] + Fore.RESET,
'\n'.join([Fore.YELLOW + item['dpbn'] + Fore.RESET,
Fore.CYAN + item['apbn'] + Fore.RESET]),
'\n'.join([Fore.YELLOW + item['dt'] + Fore.RESET,
Fore.CYAN + item['at'] + Fore.RESET]),
item['lp'],
item['tax'],
yield airline_data
def pretty_print(self):
#PrettyTable()用于在屏幕上将查询到的航班信息表逐行打印到终端
pt = PrettyTable()
pt._set_field_names(self.header)
for airline_data in self.plains:
pt.add_row(airline_data)
def doit():
headers = {
&Cookie&:&自定义&,
&User-Agent&: &自定义&,
arguments = {
'from':fromCity,
'to':toCity,
'date':tripDate
DCity1 = stations[arguments['from']]
ACity1 = stations[arguments['to']]
DDate1 = arguments['date']
url = (&http://flights.ctrip.com/domesticsearch/search/SearchFirstRouteFlights?DCity1={}&ACity1={}&SearchType=S&DDate1={}&).format(DCity1,ACity1,DDate1)
r = requests.get(url,headers = headers,verify=False)
print(&Some Error shows in requests.get(url)&)
print(url)
airline_tickets = r.json()['fis']
TrainsCollection(airline_tickets).pretty_print()
if __name__ == '__main__':
&/code&&/pre&&/div&&p&其实,此小程序还可以拓展,譬如将查询记录存到本地电脑(txt格式、或者存到数据库里)或者更厉害的还可以设置定时自动查询;还可以设置查询到自动发邮箱提醒;还可以用Python的GUI库将此程序做成桌面软件的形式。。。。&/p&&hr&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-131ba26ddec_180x120.jpg& data-image-width=&1266& data-image-height=&737& class=&internal&&Lyon:智联Python相关职位的数据分析及可视化-Pandas&Matplotlib篇&/a&&p&,by—&a href=&//link.zhihu.com/?target=http%3A//localhost%3A8080/Lyon/foreviewSingleBlog%3FId%3D12%23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&阳光流淌&/a&&/p&&h2&上一篇,我用了Excel对爬虫采集到的智联招聘数据进行了数据分析及可视化,用到软件是Excel, 这一篇,我们打算完全用Python来做同样的事。用到的库有Pandas、Matplotlib。np、pd、plt分别是numpy、pandas、matplotlib.pyplot的常用缩写。&/h2&&p&Numpy(Numerical Python的简称)是Python科学计算的基础包。它提供了以下功能:&/p&&ol&&li&快速高效的多维数组对象ndarray。&/li&&li&用于对数组执行元素级计算以及直接对数组执行数学运算的函数。&/li&&li&用于读写硬盘上基于数组的数据集的工具。&/li&&li&线性代数运算、傅里叶变换,以及随机数生成。&/li&&li&用于将C、C++、Fortran代码集成到Python的工具。&/li&&/ol&&p&除了为Python提供快速的数组处理能力,Numpy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,Numpy数组在存储和处理数据时要比内置的Python数据结构高效的多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作Numpy数组中的数据,无需进行任何数据复制工作。&br&&/p&&p&Pandas这个名字本身源于panel data(面板数据,这是计量经济学中关于多维结构化数据集的一个术语)以及Python data analysis。pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。Pandas中用的最多的是DataFrame,它是一个面向列的二维表结构,且含有行标和列标。pandas兼具numpy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。&/p&&p&Matplotlib是Python中常用的可视化绘图库,可以通过简单的几行代码生成直方图,功率谱,条形图,错误图,散点图等。Seaborn、ggplot、等诸多Python可视化库均是在此基础上开发的,所以学会matplotlib的基础操作还是很有必要的!它和Ipython结合的很好,提供了一种非常好用的交互式数据绘图环境。绘制的图表也是交互式的,你可以利用绘图窗口中的工具栏放大图表中的某个区域或对整个图表进行平移浏览。&/p&&h2&数据来源:&/h2&&p&Python爬虫爬取了智联招聘关键词:【Python】、全国30个主要城市的搜索结果,总职位条数:18326条(行),其中包括【职位月薪】、【公司链接】、【工作地点】、 【岗位职责描述】等14个字段列,和一个索引列【ZL_Job_id】共计15列。数据存储在本地MySql服务器上,从服务器上导出json格式的文件,再用Python进行数据读取分析和可视化。&/p&&h2&数据简单清洗:&/h2&&p&1.首先在终端中打开输入ipython --pylab。在Ipython的shell界面里导入常用的包numpy、pandas、matplotlib.pyplot。用pandas的read_json()方法读取json文件,并转化为用df命名的DataFrame格式文件。(DataFrame格式是Pandas中非常常用且重要的一种数据存储格式、类似于Mysql和Excel中的表。)&/p&&div class=&highlight&&&pre&&code class=&language-text&&import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_json('/Users/zhaoluyang/Desktop/Python_全国JSON.json')
#查看df的信息
df.columns
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/50/v2-f679fb1c4acba7ebdfbd697a9fedcf10_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&884& data-rawheight=&789& class=&origin_image zh-lightbox-thumb& width=&884& data-original=&https://pic1.zhimg.com/50/v2-f679fb1c4acba7ebdfbd697a9fedcf10_r.jpg&&&/figure&&p&可以看到读取的df格式文件共有15列,18326行,pandas默认分配了索引值从0~18325。还有一点值得注意的:全部的15列都有18326个非空值,因为当初写爬虫代码时设置了, 如果是空值,譬如:有一条招聘信息其中【福利标签】空着没写,那么就用字符串代替,如“found no element”。&/p&&p&2.读取JSON文件时pandas默认分配了从0开始的索引,由于文件'ZL_Job_id'列中自带索引,故将其替换!替换后,用sort_index()给索引重新排列。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df.index = df['ZL_Job_id']#索引列用'ZL_Job_id'列替换。
del(df['ZL_Job_id'])#删除原文件中'ZL_Job_id'列。
df_sort = df.sort_index()#给索引列重新排序。
df = df_sort
df[['工作地点','职位月薪']].head(10)
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-0b51bcac2a25a476cc795_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&492& data-rawheight=&286& class=&origin_image zh-lightbox-thumb& width=&492& data-original=&https://pic2.zhimg.com/50/v2-0b51bcac2a25a476cc795_r.jpg&&&/figure&&p&&br&&/p&&p&3.下面,将进行【职位月薪】列的分列操作,新增三列【bottom】、【top】、【average】分别存放最低月薪、最高月薪和平均月薪。 其中try语句执行的是绝大多数情况:职位月薪格式如:元/月,为此需要对【职位月薪】列用正则表达式逐个处理,并存放至三个新列中。 处理后bottom = 8000,top = 10000,average = 9000. 其中不同语句用于处理不同的情况,譬如【职位月薪】=‘面议’、‘found no element’等。对于字符形式的‘面议’、‘found no element’ 处理后保持原字符不变,即bottom = top = average = 职位月薪。&br&q1,q2,q3,q4用来统计各个语句执行次数.其中q1统计职位月薪形如‘元/月’的次数;q2统计形如月收入‘10000元/月以下’;q3代表其他情况如‘found no element’,‘面议’的次数;q4统计失败的特殊情况。&/p&&div class=&highlight&&&pre&&code class=&language-text&&import re
df['bottom'] = df['top'] = df['average'] = df['职位月薪']
pattern = re.compile('([0-9]+)')
q1=q2=q3=q4=0
for i in range(len(df['职位月薪'])):
item = df['职位月薪'].iloc[i].strip()
result = re.findall(pattern,item)
if result:
#此语句执行成功则表示result[0],result[1]都存在,即职位月薪形如‘元/月’
df['bottom'].iloc[i],df['top'].iloc[i] = result[0],result[1]
df['average'].iloc[i] = str((int(result[0])+int(result[1]))/2)
#此语句执行成功则表示result[0]存在,result[1]不存在,职位月薪形如‘10000元/月以下’
df['bottom'].iloc[i] = df['top'].iloc[i] = result[0]
df['average'].iloc[i] = str((int(result[0])+int(result[0]))/2)
#此语句执行成功则表示【职位月薪】中并无数字形式存在,可能是‘面议’、‘found no element’
df['bottom'].iloc[i] = df['top'].iloc[i] = df['average'].iloc[i] = item
except Exception as e:
print(q4,item,repr(e))
for i in range(100):#测试一下看看职位月薪和bottom、top是否对的上号
print(df.iloc[i][['职位月薪','bottom','top','average']])#或者df[['职位月薪','bottom','top','average']].iloc[i]也可
df[['职位月薪','bottom','top','average']].head(10)
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-f17c93681d3dfae5e4f3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&595& data-rawheight=&516& class=&origin_image zh-lightbox-thumb& width=&595& data-original=&https://pic2.zhimg.com/50/v2-f17c93681d3dfae5e4f3_r.jpg&&&/figure&&p&经过检查,可以发现【职位月薪】和新增的bottom、top、average列是能对的上。其中形如‘元/月’的有16905条、形如‘10000元以下’的 有61条、'found no element'和'面议'加起来有1360条,总数18326条,可见是正确的。&/p&&p&4.进行【工作地点】列的处理,新增【工作城市】列,将工作地点中如‘苏州-姑苏区’、‘苏州-工业园区’等统统转化为‘苏州’存放在【工作城市】列。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df['工作城市'] = df['工作地点']
pattern2 = re.compile('(.*?)(\-)')
df_city = df['工作地点'].copy()
for i in range(len(df_city)):
item = df_city.iloc[i].strip()
result = re.search(pattern2,item)
if result:
print(result.group(1).strip())
df_city.iloc[i] = result.group(1).strip()
print(item.strip())
df_city.iloc[i] = item.strip()
df['工作城市'] = df_city
df[['工作地点','工作城市']].head(20)
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-fbfd69ce7d8dd39ce8ecf23a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&448& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&448& data-original=&https://pic2.zhimg.com/50/v2-fbfd69ce7d8dd39ce8ecf23a_r.jpg&&&/figure&&p&检查一下,没有错误,可以进行下一步的操作了!&/p&&h2&数据分析和可视化&/h2&&p&从可读性来看,应该是先进行数据清洗,然后进行分析及可视化,但是实际过程中,往往是交织在一起的, 所有下面让我们一步步来,完成所有的清洗、分析和可视化工作。除了具体的公司和职位名称以外,我们还比较关心几个关键词: 平均月薪、工作经验、工作城市、最低学历和岗位职责描述,这里岗位职责描述以后会用python分词做词云图,所以目前筛选出 【平均月薪】、【工作经验】、【工作城市】、【最低学历】这四个标签,这些标签可以两两组合产生各种数据。譬如我想知道各个城市的招聘数量分布情况, 会不会大部分的工作机会都集中在北上广深?是不是北上广深的平均工资也高于其他城市?我想知道Python这个关键词的18000多条招聘数据中 对学历的要求和对工作经验的要求,以及它们分别占比多少?我还想知道平均月薪和工作经验的关系?最低学历和平均月薪的关系? 和上一篇(Execel篇)类似,不同的是,这次我们完全用Python实现同样的操作。&/p&&h2&1.各个城市职位数量及分布&/h2&&p&根据猜想,北上广深,一定占据了Python这个关键词下大部分的工作机会,会不会符合28定律?20%的城市占据了80%的岗位? 有可能!我们先用df.工作城市.value_counts()看一下究竟有多少个城市,以及他们各自有多少条工作数据?&/p&&div class=&highlight&&&pre&&code class=&language-text&&df.工作城市.value_counts()#等价于df['工作城市'].value_counts()
#再用count()来看一下统计出来的城市数量
df.工作城市.value_counts().count()
type(df.工作城市.value_counts())#用type()查看下类型。
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-23cf8b0e216e0a9aa76b6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&448& data-rawheight=&578& class=&origin_image zh-lightbox-thumb& width=&448& data-original=&https://pic4.zhimg.com/50/v2-23cf8b0e216e0a9aa76b6_r.jpg&&&/figure&&p&可以看到,明明设置的是搜索30个城市,怎么变成了40?像延边、珲春、白山。。。。是什么鬼?想了一下,这些城市是搜索关键词城市‘吉林市’时,自动冒出来的;还有95个‘found no element’,是这些职位链接本身就没有填写工作城市,为了避免干扰,要把他们统统替换成空值。用df_工作城市 = df['工作城市'].replace()&/p&&div class=&highlight&&&pre&&code class=&language-text&&#将原来df['工作城市']列中选定的字段替换成空值nan
df_工作城市 = df['工作城市'].replace(['found no element','松原','辽源','珲春','白山','公主岭','白城','延边','四平','通化'],np.nan)
#查看替换后各个城市职位计数
df_工作城市.value_counts()
#查看替换后城市所包含的职位总数;查看替换后的城市数量,是否等于30.
df_工作城市
#将新的[df_工作城市]列添加到df表中,留作备用
df['df_工作城市'] = df_工作城市
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-aceb11ca737afb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&828& data-rawheight=&718& class=&origin_image zh-lightbox-thumb& width=&828& data-original=&https://pic3.zhimg.com/50/v2-aceb11ca737afb_r.jpg&&&/figure&&p&看了一下,没有问题,现在df_工作城市中筛选出了30个城市,合计18211条职位数据。 为了数据完整性,df表保持原样,我们用df_工作城市直接操作,进行下一步的可视化。先直接上代码和图,再一一解释下。&/p&&div class=&highlight&&&pre&&code class=&language-text&&fig1 = plt.figure(1,facecolor = 'black')#设置视图画布1
ax1 = fig1.add_subplot(2,1,1,facecolor='#4f4f4f',alpha=0.3)#在视图1中设置子图1,背景色灰色,透明度0.3(figure.add_subplot 和plt.suplot都行)
plt.tick_params(colors='white')#设置轴的颜色为白色
df_工作城市.value_counts().plot(kind='bar',rot=0,color='#ef9d9a')#画直方图图
#设置图标题,x和y轴标题
title = plt.title('城市——职位数分布图',fontsize=18,color='yellow')#设置标题
xlabel = plt.xlabel('城市',fontsize=14,color='yellow')#设置X轴轴标题
ylabel = plt.ylabel('职位数量',fontsize=14,color='yellow')#设置Y轴轴标题
#设置说明,位置在图的右上角
text1 = ax1.text(25,4500,'城市总数:30(个)',fontsize=12, color='cyan')#设置说明,位置在图的右上角
text2 = ax1.text(25,4000,'职位总数:18326(条)',fontsize=12, color='cyan')
text3 = ax1.text(25,3500,'有效职位:18211(条)',fontsize=12, color='red')
#添加每一个城市的坐标值
for i in range(len(list_1)):
ax1.text(i-0.3,list_1[i],str(list_1[i]),color='yellow')
#可以用plt.grid(True)添加栅格线
#可以用下面语句添加注释箭头。指向上海,xy为坐标值、xytext为注释坐标值,facecolor为箭头颜色。
#arrow = plt.annotate('职位数:3107', xy=(1,3107), xytext=(3, 4000),color='blue',arrowprops=dict(facecolor='blue', shrink=0.05))
ax2 = fig1.add_subplot(2,1,2)#设置子图2,是位于子图1下面的饼状图
#为了方便,显示前8个城市的城市名称和比例、其余的不显示,用空字符列表替代,为此需要构造列表label_list和一个空字符列表['']*23。
x = df_工作城市.value_counts().values#x是数值列表,pie图的比例根据数值占整体的比例而划分
label_list = []#label_list是构造的列表,装的是前8个城市的名称+职位占比。
for i in range(8):
t = df_工作城市.value_counts().values[i]/df_工作城市.value_counts().sum()*100
city = df_工作城市.value_counts().index[i]
percent = str('%.1f%%'%t)
label_list.append(city+percent)
#labels参数原本是与数值对应的标签列表,此处30个城市过多,所以只取了前8个城市显示。
#explode即饼图中分裂的效果explode=(0.1,1,1,。。)表示第一块图片显示为分裂效果
labels = label_list + ['']*22
explode = tuple([0.1]+[0]*29)
plt.pie(x,explode=explode,labels=labels,textprops={'color':'yellow'})
#可加参数autopct='%1.1f%%'来显示饼图中每一块的比例,但是此处30个城市,如果全显示的话会非常拥挤不美观,所以只能手动通过labels参数来构造。
#若要显示标准圆形,可以添加:plt.axis('equal')
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-131ba26ddec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1266& data-rawheight=&737& class=&origin_image zh-lightbox-thumb& width=&1266& data-original=&https://pic4.zhimg.com/50/v2-131ba26ddec_r.jpg&&&/figure&&p&可以看见,这个曲线下降的弧度还是挺美的,北上深杭广5个城市占据了超过60%以上的职位数。其中北京当之无愧的占据了四分之一的Python工作数量,不愧为帝都。 上海以3107条职位排名第二,可见上海虽然经济超越北京,在互联网环境和工作机遇方面还需努力!深圳作为中国的科技中心,排名第三我是没疑问的,杭州竟然超过广州排名第四!不过也可以想到,阿里巴巴、百草味等等电商产业带动了整个杭州的互联网文化!&br&【北上深杭广】+成都、南京、郑州,这8个城市占据了全国30座城市中,近80%的工作机会!剩下的22个城市合起来只占据了20%,果然,是基本符合28定律的。。。&/p&&h2&2.工作经验-职位数量及分布&/h2&&p&Python虽然是一名比较老的语言,但是在人们的印象中火起来也就最近几年,Python相关的工作对于【工作经验】是怎样要求的呢?让我们来看看!&/p&&div class=&highlight&&&pre&&code class=&language-text&&df.工作经验.value_counts()#统计【工作经验】下各个字段的累计和
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-f7cd3ef51e5d6341a60dd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&358& data-rawheight=&313& class=&content_image& width=&358&&&/figure&&p&&br&&/p&&p&可以看见出现了一些很数字少量的字段譬如“5年以上”,“2年以上”,“1-2年”,“1年以上”等,这些标签下职位的数量都在10以内,不太具备统计意义,所以我们作图的时候不想让他们出现,必须筛选掉。 下面我们还是通过同样的步骤来清除掉此类数据。&/p&&div class=&highlight&&&pre&&code class=&language-text&&= df['工作经验'].replace(['found no element','3年以上','1年以上','5年以上','2年以上','1-2年'],np.nan)
df_工作经验.value_counts()
df_工作经验.value_counts().sum()
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-da9ddb13ff92e87081aed5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&814& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&https://pic3.zhimg.com/50/v2-da9ddb13ff92e87081aed5_r.jpg&&&/figure&&p&&br&&/p&&p&现在,可以进行下一步可视化了,还是做2张图:直方图和饼图。通过这两张图可以直观地看到这么多职位中对不同工作经验的要求占比,好做到心里有数!&/p&&div class=&highlight&&&pre&&code class=&language-text&&fig2 = plt.figure(2,facecolor = 'black')
ax2_1 = fig2.add_subplot(2,1,1,facecolor='#4f4f4f',alpha=0.3)
plt.tick_params(colors='white')
df_工作经验.value_counts().plot(kind = 'bar',rot = 0,color='#7fc8ff')
title = plt.title('工作经验——职位数分布图',fontsize = 18,color = 'yellow')
xlabel = plt.xlabel('工作经验',fontsize = 14,color = 'yellow')
ylabel = plt.ylabel('职位数量',fontsize = 14,color = 'yellow')
plt.grid(True)
text1_ = ax2_1.text(5,5600,'城市总数:30(个)',fontsize=12, color='yellow')
text2 = ax2_1.text(5,4850,'职位总数:18326(条)',fontsize=12, color='yellow')
text3 = ax2_1.text(5,4100,'有效职位:18215(条)',fontsize=12, color='cyan')
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&#设置子图2,是位于子图1下面的饼状图
ax2_2 = fig2.add_subplot(2,1,2)
#x是数值列表,pie图的比例根据数值占整体的比例而划分
x2 = df_工作经验.value_counts().values
labels = list(df_工作经验.value_counts().index[:5])+ ['']*2
explode = tuple([0.1,0.1,0.1,0.1,0.1,0.1,0.1])
plt.pie(x2,explode=explode,labels=labels,autopct='%1.1f%%',textprops={'color':'yellow'})
plt.axis('equal')#显示为等比例圆形
#设置图例,方位为右下角
legend = ax2_2.legend(loc='lower right',shadow=True,fontsize=12,edgecolor='cyan')
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-2c9de5eb33d9a655cb85c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1268& data-rawheight=&740& class=&origin_image zh-lightbox-thumb& width=&1268& data-original=&https://pic3.zhimg.com/50/v2-2c9de5eb33d9a655cb85c_r.jpg&&&/figure&&p&总共得到18215条职位。从直方图里可以明显看出工作机会集中在'不限'、'1-3年'、'3-5年', 其中工作经验要求3年以下的(【无经验】+【不限】+【1年以下】+【1-3年】)合计11501条职位,占比超过63%,看来即使是初入门者,大家的机会也还是有不少的! (PS:最后,在df表中添加一列'df_工作经验',以后筛选时就可以直接用了,df['df_工作经验']=df_工作经验)&/p&&p&&br&&/p&&h2&3.工作经验-平均月薪&/h2&&p&这个嘛,大家闭着眼都能想到!肯定是工作经验越久的拿钱越多了!再猜猜?无经验的和5-10年经验的收入差距有多大?这个,嘿嘿就不好猜了,让我们来看看吧!&/p&&p&1.第一步,要想统计工作经验和平均月薪的关系,那么我们先看看df中对应的列df.工作经验和df.average。之前我们构造了一列df_工作经验,把df.工作经验中几个样本容量小于10的值和‘found no element’全筛选掉了,故df_工作经验还能继续使用。现在,让我们看看df.average的信息。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df.average.value_counts()
&/code&&/pre&&/div&&p&可以看到,其中有1265个值是‘面议’,有95个值是‘found no element’,这些值需要替换成空值,不然会影响下一步工资的计算。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df_平均月薪 = df['average'].replace(['面议','found no element'],np.nan)
&/code&&/pre&&/div&&p&2.好了,第一步的简单数据清洗完成了,我们可以思考下一步了,现在我们想要得到的是不同工作经验字段下的平均月薪&/p&&p&A. 首先我需要把df_工作经验和df_平均月薪这两列元素放在一起,构造一个DataFrame用于存放df_工作经验和df_平均月薪这两列元素,且方便进一步的groupby操作。&br&B. 其次我需要把df_平均月薪列根据df_工作经验进行分组(用groupby),分组后我可以求得df_工作经验下各个字段的月薪的计数、最大值最小值、累加和、平均值等一系列数据。&br&C. 当然此处我只需要平均值。对分组后的grouped用mean()方法,就可以轻松统计分组内各项的平均值了。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df3=pd.DataFrame(data={'工作经验':df['df_工作经验'],'平均月薪':df_平均月薪})
df3.info()
grouped3 = df3['平均月薪'].groupby(df3['工作经验'])
grouped3.mean()
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-b1fb6e906acb1b6c0105aea3cbfc01fa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&566& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&566& data-original=&https://pic2.zhimg.com/50/v2-b1fb6e906acb1b6c0105aea3cbfc01fa_r.jpg&&&/figure&&p&&br&&/p&&p&在进行grouped3.mean()时,我们发现报错了:DataError: No numeric types to aggregate,看一下,原来df_平均月薪列里的值都是字符型str,并不是数值型的float,因为前面的步骤没有做好,留下了这个bug,无奈我们需要对值类型做个转换。&/p&&div class=&highlight&&&pre&&code class=&language-text&&#构造一个listi存放转化后float型的‘平均月薪’
pattern = re.compile('([0-9]+)')
listi = []
for i in range(len(df.average)):
item = df.average.iloc[i].strip()
result = re.findall(pattern,item)
if result:
listi.append(float(result[0]))
elif (item.strip()=='found no element' or item.strip()=='面议'):
listi.append(np.nan)
print(item)
except Exception as e:
print(item,type(item),repr(e))
#将df3.平均月薪列替换掉,同时给df新增一列'df_平均月薪'做备用。
df3['平均月薪'] = listi
df['df_平均月薪'] = df3['平均月薪']
#看看更新后的数据是否正确
df3['平均月薪'].value_counts()#统计每个月薪字段的个数
df3['平均月薪'][:10]#查看前10个值
type(df3['平均月薪'][1])#看看现在月薪的类型是不是浮点型
df3['平均月薪'].value_counts().sum()#看看月薪样本总数
df3['平均月薪'].mean()#看看这16966个月薪样本的平均值是多少?
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-46e8184cff84166bd14c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&457& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&457& data-original=&https://pic2.zhimg.com/50/v2-46e8184cff84166bd14c_r.jpg&&&/figure&&p&可以看到,替换后的df3['平均月薪']值从str变为了可以计算的float,月薪样本总数16966个,样本的平均月薪14197元。好,现在终于OK了,让我们再回到之前的步骤:&/p&&div class=&highlight&&&pre&&code class=&language-text&&grouped3 = df3['平均月薪'].groupby(df3['工作经验'])
grouped3.mean()
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-9dbc4da056a42ba96d731_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&583& data-rawheight=&252& class=&origin_image zh-lightbox-thumb& width=&583& data-original=&https://pic4.zhimg.com/50/v2-9dbc4da056a42ba96d731_r.jpg&&&/figure&&p&好了,完美,格式对了,数据有了,现在可以来画图了!但是再看看,还不是那么完美,数据大小排列很乱,而且小数点那么多。。。好吧,让我们再简单处理下&/p&&div class=&highlight&&&pre&&code class=&language-text&&#新增一个平均值,即所有非空df3['平均月薪']的平均值
s3 = pd.Series(data = {'平均值':df3['平均月薪'].mean()})
result3 = grouped3.mean().append(s3)
#sort_values()方法可以对值进行排序,默认按照升序,round(1)表示小数点后保留1位小数。
result3.sort_values(ascending=False).round(1)
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-b11bebd440a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&610& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&610& data-original=&https://pic2.zhimg.com/50/v2-b11bebd440a_r.jpg&&&/figure&&p&&br&&/p&&p&3.数据可视化&/p&&p&这次我们画一个躺倒的柱状图(barh),用ggplot的风格来画。&/p&&div class=&highlight&&&pre&&code class=&language-text&&matplotlib.style.use('ggplot')
fig3 = plt.figure(3,facecolor = 'black')
ax3 = fig3.add_subplot(1,1,1,facecolor='#4f4f4f',alpha=0.3)
result3.sort_values(ascending=False).round(1).plot(kind='barh',rot=0)
#设置标题、x轴、y轴的标签文本
title = plt.title('工作经验——平均月薪分布图',fontsize = 18,color = 'yellow')
xlabel= plt.xlabel('平均月薪',fontsize = 14,color = 'yellow')
ylabel = plt.ylabel('工作经验',fontsize = 14,color = 'yellow')
#添加值标签
list3 = result3.sort_values(ascending=False).values
for i in range(len(list3)):
ax3.text(list3[i],i,str(int(list3[i])),color='yellow')
#设置标识箭头
arrow = plt.annotate('Python平均月薪:14197元/月', xy=(), xytext=(),color='yellow',fontsize=16,arrowprops=dict(facecolor='cyan', shrink=0.05))
#设置图例注释(16966来源:df2['平均月薪'].value_counts().sum())
text= ax3.text(,'月薪样本数:16966(个)',fontsize=16, color='cyan')
#设置轴刻度文字颜色为白色
plt.tick_params(colors='white')
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-76e10a13ebc5d3da79940_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1311& data-rawheight=&797& class=&origin_image zh-lightbox-thumb& width=&1311& data-original=&https://pic4.zhimg.com/50/v2-76e10a13ebc5d3da79940_r.jpg&&&/figure&&p&&br&&/p&&p&通过图表,我们可以直观地看到,Python关键词下的职位月薪是随着工作经验增长而递增的(这不是说了一句废话么?!囧) 其中【无经验】的平均月薪最低,只有5842,相比之下【10年以上】经验的,平均月薪达到了恐怖的34890,约达到了【无经验】月薪的6倍之多!!! 【1年以下】的平均月薪7579,还勉强凑合,【1-3年】的已经破万了,达到了近12000元/月的水准。最后让我们看看平均值吧,由于‘被平均’的缘故,16966条月薪样本的均值是14197元,有没有让你满意呢?&br&&/p&&h2&4.工作城市-平均月薪&/h2&&p&对了,刚才说到北上广深占据了全国大部分的工作机会,那么北上广深的平均月薪如何呢?会不会也碾压小城市?让我们来看看! 和之前的套路一样,我们还是要构造一个DataFrame,包含两列,一列是【平均月薪】,一列是【工作城市】,然后对df4进行groupby操作,还是很简单的!不过,经过上次的教训,平均月薪一定要是数值型的,str型的计算不了。&/p&&div class=&highlight&&&pre&&code class=&language-text&&#此处df['df_工作城市']是之前经过筛选后的30个城市数据
df4=pd.DataFrame(data={'工作城市':df['df_工作城市'],'平均月薪':df['df_平均月薪']})
df4.info()
grouped4 = df4['平均月薪'].groupby(df4['工作城市'])
grouped4.mean()#查看对30个城市分组后,各个城市月薪的平均值
grouped4.count().sum()#查看对30个城市分组后筛选出的平均月薪样本数
#新增一个平均值,即所有非空df2['平均月薪']的平均值
s4 = pd.Series(data = {'平均值':df['df_平均月薪'].mean()})
result4 = grouped4.mean().append(s4)
#sort_values()方法可以对值进行排序,默认按照升序,round(1)表示小数点后保留1位小数。
result4.sort_values(ascending=False).round(1)
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-3b408c0a6be3e22aeb71a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&551& data-rawheight=&698& class=&origin_image zh-lightbox-thumb& width=&551& data-original=&https://pic3.zhimg.com/50/v2-3b408c0a6be3e22aeb71a_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/v2-bdadef5d979c4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&619& data-rawheight=&706& class=&origin_image zh-lightbox-thumb& width=&619& data-original=&https://pic1.zhimg.com/50/v2-bdadef5d979c4_r.jpg&&&/figure&&p&数据构造好了,进行下一步,可视化。&/p&&div class=&highlight&&&pre&&code class=&language-text&&#可以通过style.available查看可用的绘图风格,总有一款适合你
matplotlib.style.use('dark_background')
fig4 = plt.figure(4)
ax4 = fig4.add_subplot(1,1,1)#可选facecolor='#4f4f4f',alpha=0.3,设置子图,背景色灰色,透明度0.3
result4.sort_values(ascending=False).round(1).plot(kind='bar',rot=30)#可选color='#ef9d9a'
#设置图标题,x和y轴标题
title = plt.title(u'城市——平均月薪分布图',fontsize=18,color='yellow')#设置标题
xlabel = plt.xlabel(u'城市',fontsize=14,color='yellow')#设置X轴轴标题
ylabel = plt.ylabel(u'平均月薪',fontsize=14,color='yellow')#设置Y轴轴标题
#设置说明,位置在图的右上角
text1 = ax4.text(25,16250,u'城市总数:30(个)',fontsize=12, color='#FF00FF')#设置说明,位置在图的右上角
text2 = ax4.text(25,15100,u'月薪样本数:16946(条)',fontsize=12, color='#FF00FF')
#添加每一个城市的坐标值
list_4 = result4.sort_values(ascending=False).values
for i in range(len(list_4)):
ax4.text(i-0.5,list_4[i],int(list_4[i]),color='yellow')
#设置箭头注释
arrow = plt.annotate(u'全国月薪平均值:14197元/月', xy=(4.5,14197), xytext=(7,15000),color='#9B30FF',fontsize=14,arrowprops=dict(facecolor='#FF00FF', shrink=0.05))
#设置轴刻度文字颜色为粉色
plt.tick_params(colors='pink')
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-5b97b12128fea0cdb97f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1310& data-rawheight=&820& class=&origin_image zh-lightbox-thumb& width=&1310& data-original=&https://pic3.zhimg.com/50/v2-5b97b12128fea0cdb97f_r.jpg&&&/figure&&p&可以看见,Python这个关键词下,全国16946条样本的月薪平均值为14197元/月,平均月薪排名前5的城市分别是:北京、上海、深圳、杭州、广州。哎,记得之前城市—职位数分布图么?全国30个城市中,职位数排名前5 的也是这5座城市!看来北上广深杭不仅集中了全国大部分的职位数量、连平均工资也是领跑全国的!不禁让人觉得越大越强!但是在超级大城市奋斗,买房总是遥遥无期,房子在中国人的概念里,有着特殊的情节,意味着家,老小妻儿生活的地方,给人一种安全感!我们可以看到还有不少城市的平均月薪也破万了,在这些相对小点的城市中挑一个,工作安家,买房还是有希望的,哈哈!譬如南京、武汉、苏州、大连、厦门都挺好的!&/p&&p&&br&&/p&&h2&5.学历-职位数量&/h2&&p&直觉来看Python这类工作职位,应该是本科及以上经验要求居多吧?那么工作经验【不限】和【大专】的机会占比多少呢?让我们来看看! 首先,还是用df['最低学历'].value_counts()来看一下有哪些字段,以及各个字段的统计值。&/p&&div class=&highlight&&&pre&&code class=&language-text&&df['最低学历'].value_counts()
df_最低学历=df['最低学历'].replace(['中技','其他','高中','found no element'],np.nan)
df_最低学历.value_counts()
df_最低学历.value_counts().sum()
df['df_最低学历'] = df_最低学历 #留作备用
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-5a74bff15bad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&737& data-rawheight=&571& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic3.zhimg.com/50/v2-5a74bff15bad_r.jpg&&&/figure&&p&&br&&/p&&p&可以看到对于学历要求,最多的集中在大专、本科、硕士、不限还有较少量的博士和中专学历,至于中技、其他、高中则连10个都不到, 对于这些10个都不到的字段,我们还是照旧用replace语句将其排除(并没有歧视低学历的意思啊囧!)&br&可以看到排除后还剩余6个字段,共计18119个职位,下一步,还是来经典的条形分布图和饼图!&/p&&div class=&highlight&&&pre&&code class=&language-text&&fig5 = plt.figure(5)
ax5_1 = fig5.add_subplot(2,1,1) #可选facecolor='#4f4f4f',alpha=0.3
df_最低学历.value_counts().plot(kind = 'bar',rot=0)
#color='#7fc8ff'
#设置标题、x轴和y轴标题、图例文字
title = plt.title(u'最低学历——职位数分布图',fontsize = 18,color = 'yellow')
xlabel = plt.xlabel(u'最低学历',fontsize = 14,color = 'yellow')
ylabel = plt.ylabel(u'职位数量',fontsize = 14,color = 'yellow')
text1 = ax5_1.text(4.4,8200,u'职位总数:18119(条)',fontsize=14, color='#B452CD')
#设置坐标轴的的颜色和文字大小
plt.tick_params(colors='#9F79EE',labelsize=13)
#设置坐标值文字
list5 = df_最低学历.value_counts().values
for i in range(len(list5)):
ax5_1.text(i-0.1,list5[i],int(list5[i]),color='yellow')
ax5_2=fig5.add_subplot(2,1,2)
xl = df_最低学历.value_counts().values
labels = list(df_最低学历.value_counts().index)
explode = tuple([0.1,0,0,0,0,0])
plt.pie(xl,explode=explode,labels=labels,autopct='%1.1f%%',textprops={'color':'#B452CD'})
plt.axis('equal')
legend = ax5_2.legend(loc='lower right',shadow=True,fontsize=12,edgecolor='#B452CD')
plt.tick_params(colors='#9F79EE',labelsize=13)
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-0bd37c14fb15_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1279& data-rawheight=&757& class=&origin_image zh-lightbox-thumb& width=&1279& data-original=&https://pic4.zhimg.com/50/v2-0bd37c14fb15_r.jpg&&&/figure&&p&&br&&/p&&p&可见【本科】独占鳌头,占据了超过50%的市场!【不限】和【大专】也合计占比38%不容小觑!看起来,只要技术过硬,学历从来都不是问题!!!作为对比【硕士】占比6%,【博士】更是少到只有1%,果然稀缺到百里挑一!&/p&&p&&br&&/p&&h2&6.最低学历-平均月薪&/h2&&p&按道理学历越高,平均月薪越高,类似工作经验一样都是正相关,到底是不是呢?来看一下!构造一个DataFrame(df6), 包含两列最低学历和平均月薪,我们直接用之前构造好的df中的【df_最低学历】和【df_平均月薪】即可,然后还是熟悉的groupby(df_最低学历)&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&df6=pd.DataFrame(data={'最低学历':df['df_最低学历'],'平均月薪':df['df_平均月薪']})
df6.info()
grouped6 = df6['平均月薪'].groupby(df6['最低学历'])
#查看grouped6的信息
grouped6.mean()
grouped6.count()
grouped6.count().sum()
matplotlib.style.use('ggplot')
fig6 = plt.figure(6,facecolor = 'black')
ax6 = fig6.add_subplot(1,1,1,facecolor='#4f4f4f',alpha=0.3)
grouped6.mean().round(1).sort_values().plot(color = 'cyan')#在条形图上叠加一个折线图
grouped6.mean().round(1).sort_values().plot(kind='bar',rot=0)
#设置标题、x轴、y轴的标签文本
title = plt.title(u'最低学历——平均月薪分布图',fontsize = 18,color = 'yellow')
xlabel= plt.xlabel(u'最低学历',fontsize = 14,color = 'yellow')
ylabel = plt.ylabel(u'平均月薪',fontsize = 14,color = 'yellow')
#添加值标签(坐标值文字)
list6 = grouped6.mean().round(1).sort_values().values
for i in range(len(list6)):
ax6.text(i-0.1,list6[i],int(list6[i]),color='yellow')
#设置图例注释
text= ax6.text(0,27000,u'月薪样本数:16956(个)',fontsize=16, color='cyan')
#设置轴刻度的文字颜色
plt.tick_params(colors='#9F79EE')
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-a27a392b508bae3a7c237abc1d64d695_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1300& data-rawheight=&795& class=&origin_image zh-lightbox-thumb& width=&1300& data-original=&https://pic3.zhimg.com/50/v2-a27a392b508bae3a7c237abc1d64d695_r.jpg&&&/figure&&p&平均月薪14139元,可以看到学历越高果然工资越高,博士级别的更是碾压,达到了29562元。只要学历在【大专】以上,那么平均月薪都已经过万了。 BUT,重点来了,学历并不是万能的,一个【中专】学历,有超过5年经验的,工资一定超过【本科】毕业无工作经验的。所以大家看看就好,不要当真,哈哈!&/p&&p&&br&&/p&&h2&7.最低学历-工作经验-平均月薪&/h2&&p&看了前面的图表,大家都知道了,学历越高平均月薪越高,工作经验越高平均月薪越高,但是我想要看看更细粒度的情形呢? 譬如我想知道【大学+无经验】和【大学+1-3年】工资的差别,我想看看【大专+3-5年】和【硕士+无经验】工资的对比究竟谁高? 现在,我不知道,但是接下来让我们把这些情况用图表呈现出来,大家就会一目了然!&/p&&div class=&highlight&&&pre&&code class=&language-text&&df7 = pd.DataFrame(data = {'平均月薪':df['df_平均月薪'],'最低学历':df['df_最低学历'],'工作经验':df['df_工作经验']})
df7.info()
grouped7 = df7['平均月薪'].groupby([df7['最低学历'],df7['工作经验']])
#查看grouped7的信息
grouped7.mean().round(1)
grouped7.count()
grouped7.count().sum()
&/code&&/pre&&/div&&p&&br&&/p&&p&其实我们输入type(grouped7.mean()),会发现它是一个包含了层次化索引的Series结构。其中第一层索引是【最低学历】 第二层索引是【工作经验】,数值列【平均月薪】被这两层索引所分配!下面我们开始准备可视化,还是画一个bar柱状图,不过这次画的是多列一起呈现的形式,Y轴表示职位月薪、X轴表示最低学历,在每个学历字段下,又分别添加不同工作经验的列!&/p&&div class=&highlight&&&pre&&code class=&language-text&&grouped7.mean().round(1)[:,'1-3年']
grouped7.mean().round(1)[:,'1-3年'].sort_values()
xlist = list(grouped7.mean().round(1)[:,'1-3年'].sort_values().index)
grouped7.mean().round(1)[:,'1-3年'].reindex(xlist)
print(xlist)
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/50/v2-05ec88d314ac319c709f2f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&725& data-rawheight=&698& class=&origin_image zh-lightbox-thumb& width=&725& data-original=&https://pic3.zhimg.com/50/v2-05ec88d314ac319c709f2f_r.jpg&&&/figure&&p&grouped7.mean()将会显示各组的平均值,round(1)表示小数点保留1位。[:,'1-3年']是对层次化索引的一种操作,表示选取 grouped7.mean()中索引名字为'工作经验'下'1-3年字段'的所有值。此处构造了列表xlist,值是筛选后的'最低学历'索引, xlist将用于画条形图时X轴坐标的标签文本(表示最低学历),Y轴相对应的是平均月薪。工作经验则用条形图和图例展示。&/p&&div class=&highlight&&&pre&&code class=&language-text&&#开始画图,设置基本参数
matplotlib.style.use('dark_background')
fig7 = plt.figure(7,facecolor = 'black')
ax7 = fig7.add_subplot(1,1,1,facecolor='#4f4f4f',alpha=0.3)
title = plt.title(u'最低学历-工作经验-平均月薪分布图',fontsize = 18,color = 'yellow')
xlabel = plt.xlabel(u'最低学历',fontsize = 14,color = 'yellow')
ylabel = plt.ylabel(u'平均月薪',fontsize = 14,color = 'yellow')
plt.tick_params(colors='cyan')
#ylist1~7分别是7种条形图的Y值列表
ylist1 = grouped7.mean().round(1)[:,'无经验'].reindex(xlist).values
ylist2 = grouped7.mean().round(1)[:,'1年以下'].reindex(xlist).values
ylist3 = grouped7.mean().round(1)[:,'不限'].reindex(xlist).values
ylist4 = grouped7.mean().round(1)[:,'1-3年'].reindex(xlist).values
ylist5 = grouped7.mean().round(1)[:,'3-5年'].reindex(xlist).values
ylist6 = grouped7.mean().round(1)[:,'5-10年'].reindex(xlist).values
ylist7 = grouped7.mean().round(1)[:,'10年以上'].reindex(xlist).values
#img1~img7分别表示7种条形图
ind = np.arange(6)#ind为x轴宽度,用numpy的array形式表示
width = 0.1#条形图的宽度,要合理设置否则太宽会摆不下
img1 = ax7.bar(ind,ylist1,width)
img2 = ax7.bar(ind+width,ylist2,width)
img3 = ax7.bar(ind+width*2,ylist3,width)
img4 = ax7.bar(ind+width*3,ylist4,width)
img5 = ax7.bar(ind+width*4,ylist5,width)
img6 = ax7.bar(ind+width*5,ylist6,width)
img7 = ax7.bar(ind+width*6,ylist7,width)
#设置X轴文本和位置调整
ax7.set_xticklabels(xlist)
ax7.set_xticks(ind + width / 2)
#设置文字说明
text1 = ax7.text(4.05,52100,u'数据来源:智联招聘',fontsize=13, color='#9F79EE')
text2 = ax7.text(4.05,50200,u'职位关键词:Python',fontsize=13, color='#9F79EE')
text3 = ax7.text(4.05,48200,u'工作城市:全国30座城市',fontsize=13, color='#9F79EE')
text4 = ax7.text(4.05,46200,u'职位数量:共计16956(条)',fontsize=13, color='#9F79EE')
ax7.legend((img1[0],img2[0],img3[0],img4[0],img5[0],img6[0],img7[0]), (u'无经验',u'1年以下',u'不限',u'1-3年',u'3-5年',u'5-10年',u'10年以上'),fontsize=13,facecolor='black')
plt.grid(True)
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-fcc8de7c45e17d02a712_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1269& data-rawheight=&783& class=&origin_image zh-lightbox-thumb& width=&1269& data-original=&https://pic4.zhimg.com/50/v2-fcc8de7c45e17d02a712_r.jpg&&&/figure&&p&&br&&/p&&p&最后,上一张简单词云图给大家看看,用的BDP傻瓜式制作,看看就好!&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-e8e60c90a2bb211ea2ed026bda0e2a31_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1150& data-rawheight=&1032& class=&origin_image zh-lightbox-thumb& width=&1150& data-original=&https://pic1.zhimg.com/50/v2-e8e60c90a2bb211ea2ed026bda0e2a31_r.jpg&&&/figure&&p&其实展开了还可以分析的东西有不少,譬如Pandas、Matplotlib的用法,譬如更多维度的分析和两两组合! 好了,整体的先暂时分析到这,总结一下呢就是:Python+工作经验+学历+大城市 = 高薪!但是,工作经验、学历和城市其实并没那么重要, 关键要看自己的Python用的6不6,关键在于你知道自己想做什么,知道自己能做什么,知道自己做出了什么!哈哈,当你知道越来越接近这些问题的答案呢,那么我相信,薪水对你来说已经不那么重要了!(当然,高薪是必须有的!) 人生苦短,我用Python!&/p&&hr&&p&最后,插播一条小广告:&/p&&p&创建了Python、Java的专栏:&/p&&a href=&https://zhuanlan.zhihu.com/c_& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-3fab0055722ffbaaf16f7_ipico.jpg& data-image-width=&200& data-image-height=&200& class=&internal&&Java、Python和数据分析&/a&&a href=&https://zhuanlan.zhihu.com/c_& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-5ae0a5a1b8e_ipico.jpg& data-image-width=&191& data-image-height=&192& class=&internal&&Java从入门到实践&/a&&p&&br&&/p&&p&欢迎Python和Java爱好者、初学者关注,一起学习共同进步~&/p&
用Python写的第一个程序,是爬取糗事百科上的图片、自动下载到本地、自动分成文件夹保存,当时就觉得,卧糟,太NB了~第二个程序,当然还是图片爬虫,不过这次,嘿嘿,是妹纸图,你懂得~然后还跟着别人的代码或教程或者自己写过:12306火车票查询工具、携程…
&p&用python实现头脑王者全自动答题&/p&&p&最近答题类游戏挺火的办公室的人都在玩,初学python没多久,便想着能不能自己动手做个答题器呢,开始入坑。。。&/p&&p&工具:&/p&&p&python 3.6&/p&&p&adb&/p&&p&charles(抓包)&/p&&p&&br&&/p&&br&&br&&br&&br&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/149248& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-ecf475cd310f7b23ae349_b.jpg& data-lens-id=&149248&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-ecf475cd310f7b23ae349_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/149248&/span&
&br&&br&&br&&br&&p&&br&&/p&&p&原理说明:&/p&&p&最初是想用截图的方式然后文字识别来获取题目的,后来发现通过抓包也能获取到题目,并且更快。然后将获取的题目通过爬取百度搜索内容,并通过选项出现的次数判断答案,正确率并不高,大概在70%左右吧。将遇到的题目通通写到sqlite数据库中,之后的正确率便会越来越高。最后通过adb实现模拟点击达到自动的效果。&/p&&p&&b&怂了怂了,已删除数据库和exe文件。&/b&&/p&&p&&b&PS:我不是程序员,工作是做服务器存储方面维护的,刚学python不到三个月。。&/b&&/p&&a href=&https://link.zhihu.com/?target=https%3A//github.com//wechat_brain& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-4bb7641a7eb_ipico.jpg& data-image-width=&420& data-image-height=&420& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/wechat_brain&/a&&figure&&img src=&https://pic4.zhimg.com/v2-961ffaf885e52a776f52c5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&807& data-rawheight=&464& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&https://pic4.zhimg.com/v2-961ffaf885e52a776f52c5_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7c41b55364ea3dcda08bdfff2fb84479_b.jpg& data-caption=&& data-size=&small& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-7c41b55364ea3dcda08bdfff2fb84479_r.jpg&&&/figure&
用python实现头脑王者全自动答题最近答题类游戏挺火的办公室的人都在玩,初学python没多久,便想着能不能自己动手做个答题器呢,开始入坑。。。工具:python 3.6adbcharles(抓包) 原理说明:最初是想用截图的方式然后文字识别来获取题目的,后来发现通过抓…
&figure&&img src=&https://pic3.zhimg.com/v2-7daebfbdfa00d8e316bc1_b.jpg& data-rawwidth=&698& data-rawheight=&461& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&https://pic3.zhimg.com/v2-7daebfbdfa00d8e316bc1_r.jpg&&&/figure&&p&Python 之所以这么流行得益于它适用于很多不同领域,目前 Python 使用最广泛的领域包括有 Python Web(后端)开发、数据分析挖掘、网络爬虫、机器学习人工智能、运维开发等等。不管你选择哪个方向,把Python基础学牢有利于你在该领域更好的施展拳脚。&br&&/p&&p&趁京东、当当这两天搞活动,给大家推荐一波Python书单&/p&&h2&&b&入门系列&/b&&/h2&&p&&b&《Python编程:从入门到实践》 &/b&&/p&&p&本书是一本针对所有层次的Python 读者而作的Python 入门书,理论与实践相结合,前面部分是基础知识,后面有实战项目帮助你更好的运用这些知识,之前在公众号“Python之禅”也推荐过。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-86cb763fe1010bdcda1f128d0fce0cb8_b.jpg& data-caption=&& data-rawwidth=&324& data-rawheight=&408& class=&content_image& width=&324&&&/figure&&p&豆瓣评分:9.0
推荐指数:?????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWrjqrQ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWrjqrQ&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&《Python编程快速上手》&/b&&/p&&p&本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7c915b6bcfb33e7db54baca_b.jpg& data-caption=&& data-rawwidth=&333& data-rawheight=&399& class=&content_image& width=&333&&&/figure&&p&豆瓣评分: 9.3
推荐指数:?????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWr6Tr5& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWr6Tr5&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&《像计算机科学家一样思考Python (第2版)》&/b&&/p&&p&本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程,这是一本实用的学习指南,适合没有Python编程经验的程序员阅读,本书的第2版与第1版相比,做了很多更新,将编程语言从Python 2升级成Python 3&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1f1eb2420aa18cbccf96b622bedb97dc_b.jpg& data-caption=&& data-rawwidth=&336& data-rawheight=&396& class=&content_image& width=&336&&&/figure&&p&豆瓣评分: 8.7
推荐指数:????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWrjpfw& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWrjpfw&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&另外像《Python核心编程》《Python学习手册》虽然都是入门书籍,但是这些书更适合有一定编程经验的开发者。如果你已经入门Python,不妨看看这些书可以帮助你更加深入地了解Python中的一些细节。&/p&&h2&&b&进阶系列&/b&&/h2&&p&&b&《流畅的Python》&/b&&/p&&p&2017年最佳Python进阶书籍,本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-abce7b6ba5a4b4a9a1d4eb_b.jpg& data-caption=&& data-rawwidth=&315& data-rawheight=&420& class=&content_image& width=&315&&&/figure&&p&豆瓣评分: 9.1
推荐指数:?????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWrM0ik& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWrM0ik&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&《Python Cookbook 中文版》&/b&&/p&&p&本书覆盖了Python应用中的很多常见问题,并提出了通用的解决方案。书中包含了大量实用的编程技巧和示例代码,非常适合具有一定编程基础的Python程序员阅读&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ff044a5d7dc8b8_b.jpg& data-caption=&& data-rawwidth=&318& data-rawheight=&417& class=&content_image& width=&318&&&/figure&&p&豆瓣评分: 8.9
推荐指数:?????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWsSGcd& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWsSGcd&/span&&span class=&invisible&&&/span&&/a& &/p&&p&&br&&/p&&p&&b&《Efective Python》&/b&&/p&&p&作者是Google高级软件工程师Brett Slatkin,融合自己多年Python开发实战经验,深入探讨编写高质量Python代码的技巧、禁忌和最佳实践。涵盖Python3.x和Python2.x主要应用领域,汇聚59条优秀实践原则、开发技巧和便捷方案,包含大量实用范例代码。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f51ac3b25dc6d3405d76_b.jpg& data-caption=&& data-rawwidth=&315& data-rawheight=&420& class=&content_image& width=&315&&&/figure&&p&豆瓣评分: 8.7
推荐指数:?????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RoAHAZx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RoAHAZx&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&《Python高性能编程》&/b&&/p&&p&Instagram证明了Python支持开发大型应用系统,如果你的Python应用真的遇到了性能瓶颈,不要急着换语言,看看你的代码是否有问题、你的架构是否有问题,《Python高性能编程》围绕如何进行代码优化和加快实际应用的运行速度进行讲解。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ce1609dafc7e4a_b.jpg& data-caption=&& data-rawwidth=&336& data-rawheight=&396& class=&content_image& width=&336&&&/figure&&p&豆瓣评分: 暂无
推荐指数:????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWrRx89& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWrRx89&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&《Python源码剖析》&/b&&/p&&p&国内作者陈儒老师的原创作品,如果想深刻理解Python的运行原理,这本书显然就适合你,本书以CPython为研究对象,在C代码一级,深入细致地剖析了Python的实现,能帮助你写出更加高效的Python代码,不过这本书主要分析 Python2.x,不过即使你用的是Python3,对你了解Python的原理也是有很大帮助的。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2b0ca17ea5e551f1785dcb_b.jpg& data-caption=&& data-rawwidth=&200& data-rawheight=&252& class=&content_image& width=&200&&&/figure&&p&豆瓣评分: 8.7
推荐指数:????
购买地址:&a href=&https://link.zhihu.com/?target=http%3A//t.cn/RWrJjk1& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&t.cn/RWrJjk1&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&近期推荐阅读:&/p&&ul&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D637de06b162c21605eef3db41ee4a1bb%26chksm%3Dbe9cdee189eb57fb5b4eeeebae0cea58b542aeabe0a4%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&自学Python编程怎么学才不那么孤独&/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Dca922dfe5a0b17b8e41a%26chksm%3Dbe9cdefb89eb57ed3c662a8b28caad137bf9b08a8ffad8f5bscene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图解Python变量与赋值&/a&&/u& &/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D09ba540b5c2ecd85b979%26chksm%3Dbe9cdecb89eb57dda32cfb0b96f6ff430d0b6de68e79cdbad5e86e53ebe05f73b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何选择一门编程语言?&/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3De1ad472a10bda34cc7dbd7bb%26chksm%3Dbe9cdec689eb57d049afffd9fc6d17bbd2f0bfe17a461a38d%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pycharm中一些不为人知的技巧&/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D85f7e54a623c626ddba7c3%26chksm%3Dbe9cdeb36ada39a44b4fd0f852c4acfb3e4f%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫知识点梳理&/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D09ba540b5c2ecd85b979%26chksm%3Dbe9cdecb89eb57dda32cfb0b96f6ff430d0b6de68e79cdbad5e86e53ebe05f73b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何选择一门编程语言?&/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D8d8f4f6ef3cec7ae3c28b%26chksm%3Dbe9cd82d6d60a074e946abf5cbf393e9b75dd5e8d53cba18b73d%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python 函数中,参数是传值,还是传引用?& &/a&&/u&&/li&&li&&u&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5MzgyODQxMQ%3D%3D%26mid

我要回帖

更多关于 水果店加盟排行榜 的文章

 

随机推荐