ubuntu从入门到精通_编程系列海洋学渣学Python:从入门到入坟

b92a89f4853df2287b53bc9260df6db0.png

最近又有人问我此专业研究生毕业的就业情况,我也不知道呀。

先说个故事吧,她是个海洋学家,2013年毕业于巴西圣卡塔琳娜州联邦大学。一开始她和我们一样是学习微积分、物理等,当她逐渐了解海洋这个领域,她也纠结是选择物理海洋学还是海洋地质学。之后她在海军研究所实习,在那里她认识了两位使用Python的海洋学家,那时python还没有名气,大多数人用的是Matlab,他们开始告诉她Python将如何成为海洋学的未来,这要归功于它的灵活性,易于使用,而且免费!可以这么说,因此她第一次接触了真正的编程语言。然后她每天都在挑战我做一些新的事情。“我怀疑你可以阅读此文件”,“以最少的代码实现此程序”等等。她认为那太棒了!同时,她也接触了Linux,远程访问,Ubuntu,终端等。这为她打开了一个新世界,这非常有趣!毕业工作,她仍在继续学习python。突然,她决定读研,在硕士期间,她决定把所有的数据处理都用python进行。之后她加入了一个python学习小组,朋友邀请她去参会,她担心自己啥都不知道,但她还是去了,而且是会议里唯一的女性。其实她并不理解有关内容,但她认为这个经历很棒!之后,她还是参与了SciPy Latin America 2016, Python Brazil 等会议。随后的六个月改变了她的人生轨迹,她认识到她对编程充满激情,在之后的会议里她决定给那些Web端的程序员展示一个海洋学家用海洋数据所做的成果--一个用数值模型实现的潮汐传播视频。巧的是,当天一家公司的项目经理告诉她,该公司的Python后端职位空缺。那天她发现自己就在项目经理旁边,她决定进一步了解所提到的工作,他们开始交谈。最后,她说:“我知道Python,但不幸的是我似乎不能申请这份工作,这是在完全不同的领域。“然后她得到了一个她没想到会听到的答案:“没问题,您所做的和我们一样复杂,请稍后再与我们交谈!” 而她做到了。因此,在三周内她的生活发生了变化,她成为了一名后端开发人员。(文末点击阅读原文看她的博客)

这个过程中,她告诉我们的经验就是:

  1. 她也有害怕和焦虑。但这些情绪并没有劝退她,她还是成功了。

  2. 一定要有passion,找到你想做的然后去做,即使不知道事情会怎么发展。最重要的一点是热爱。

  3. 最后一点,一样要有一个支持你的环境。没有同行一路上的鼓励,她也不会成为现在的自己

前段时间也有个新闻,郭宇,28岁实现财务自由。他本科是行政管理专业,却对编程情有独钟。一个文科生,没日没夜的练习编程,大一时专业课还挂过科,但他自己知道自己想要什么,对他来说,能毕业就行。他考虑到自己的专业以后可能养不活自己,所以一开始就想好了要做一个码农,一方面是因为码农收入高,另一方面,他也笃定代码可以改变世界。半路出家的他,曾被邀请参加全球软件开发大会,其前端开发技术可见一斑,丝毫不弱于科班出身。他曾经的Github Ranking可以排到中文区前五,这努力程度也绝非一般人能比得上的,一个文科生能够成为字节跳动资深技术专家,不是没有理由的。

种一棵树最好的时间是十年前,其次是现在。

学一门语言最好的老师是大师,其次是自己。

在本科阶段,我接触过C、Java、Python、R、Fortran和Matlab,谈不上精通任何一门,基本上都是浅尝辄止。我也了解还有其它选项,比如Julia等。但在现在的就业市场中,Python越来越流行,当然我和大多数编程新手更偏爱Python的原因一样,是因为它的语法简单易懂。那么我就尝试着去学习Python在地球科学领域的一些应用,本篇文章截取渣渣本渣的python学习笔记,随便说说Python在物理海洋学里的基础应用。

1 Python 基础

“师傅领进门,修行靠个人“。收集了一些 python 入门资源,建议随便挑一个,了解或者复习一下编程语言里的概念和基础知识点。

  • Python 官方文档https://docs.python.org/zh-cn/3/(我觉得这个最好)

  • Python 教程-廖雪峰的官方网站https://www.liaoxuefeng.com/wiki/1016959663602400

  • Python 基础教程-菜鸟教程https://www.runoob.com/python/python-tutorial.html

  • Python 语言程序设计-中国大学 MOOChttps://www.icourse163.org/course/BIT-268001

  • Python 教程《零基础入门学习 Python》-小甲鱼https://www.bilibili.com/video/BV1Fs411A7HZ?from=search&seid=6759112729108547323

  • 《Python 语言程序设计基础》高等教育出版社 嵩天 礼欣 黄天羽著

  • 《Python 编程从入门到实践》人民邮电出版社【美】Eric Matthes 著

2 海洋学常用的 python 库

  • numpy #科学计算库http://www.numpy.org/
  • matplotlib #2D 绘图库https://matplotlib.org/
  • pandas#结构化数据分析工具https://pandas.pydata.org/
  • basemap#作图https://matplotlib.org/basemap/
  • scipy#算法库和数学工具包https://www.scipy.org/
  • netcdf4#读取 NC 文件https://github.com/Unidata/netcdf4-python
  • iris#分析和可视化地球科学数据https://github.com/SciTools/iris
  • cartopy#地理空间数据处理https://scitools.org.uk/cartopy/docs/latest/
  • gsw#热力学方程式的 python 实现https://teos-10.github.io/GSW-Python/index.html
  • seawater#计算海水性质https://pythonhosted.org/seawater/
  • shapely#在笛卡尔平面中处理和分析几何对象https://pypi.org/project/Shapely/
  • ctd#将水文数据作为 pandas DataFrame 加载https://pypi.org/project/ctd/
  • pyshp#读写 ESRI Shapefilehttps://pypi.org/project/pyshp/
  • GeoRasters#地理和投影栅格https://pypi.org/project/georasters/
  • gridded#用于多种网格类型的网格化模型https://github.com/NOAA-ORR-ERD/gridded
  • seabird#用于 Sea Bird CTD 和 TSG 输出文件的解析https://pypi.org/project/seabird/
  • argopy#argo 数据处理https://pypi.org/project/argopy/

3 数据读写

海洋学中常见的文件格式有:文本文件(ascii)、CSV、NetCDF、HDF、图像(geotiff)、Matlab 文件。下面提供一个用 Python 读取 NC 文件的例子,其它格式也差不多,就自己探索吧。

#!/usr/local/bin/python3# -*- coding: utf-8 -*-#=======================================================================# name: nc.py# category: python script# description:#   This is a sample program to read and write a netCDF file withPython.# reference:#   http://unidata.github.io/netcdf4-python/## author: M. Yoshimori (myoshimo AT ees.hokudai.ac.jp)#=======================================================================from netCDF4 import Datasetfrom numpy import dtype#-----------------# read netCDF file#-----------------# open a netCDF file to readfilename = "av_an_sfc_y1979-y2017_mon.nc"ncin = Dataset(filename, 'r', format='NETCDF4')# check netCDF file format#print(ncin.file_format)# get axis data#print(ncin.dimensions.keys())#print(ncin.dimensions['time'])tin = ncin.variables['time']latitude = ncin.variables['latitude']longitude = ncin.variables['longitude']# get length of axis data#ntime = len(tin)nlat = len(latitude)nlon = len(longitude)# print axis#print(tin[:])#print(latitude[:])#print(longitude[:])# get variables#print(ncin.variables.keys())#print(ncin.variables['t2m'])# read datavin = ncin.variables['t2m']#print(vin.long_name)#print(vin.units)#------------------# write netCDF file#------------------# open a netCDF file to writencout = Dataset('testout.nc', 'w', format='NETCDF4')# define axis sizencout.createDimension('time', None)  # unlimitedncout.createDimension('lat', nlat)ncout.createDimension('lon', nlon)# create time axistime = ncout.createVariable('time', dtype('double').char, ('time',))time.long_name = 'time'time.units = 'hours since 1990-01-01 00:00:00'time.calendar = 'standard'time.axis = 'T'# create latitude axislat = ncout.createVariable('lat', dtype('double').char, ('lat'))lat.standard_name = 'latitude'lat.long_name = 'latitude'lat.units = 'degrees_north'lat.axis = 'Y'# create longitude axislon = ncout.createVariable('lon', dtype('double').char, ('lon'))lon.standard_name = 'longitude'lon.long_name = 'longitude'lon.units = 'degrees_east'lon.axis = 'X'# create variable arrayvout = ncout.createVariable('t2m', dtype('double').char, ('time', 'lat', 'lon'))vout.long_name = '2 metre temperature'vout.units = 'K'# copy axis from original datasettime[:] = tin[:]lon[:] = longitude[:]lat[:] = latitude[:]vout[:] = vin[:]# close filesncin.close()ncout.close()

3 数据可视化

(等我掌握了再写一篇详细教程???)

4 物理海洋学实例

T-S图

import gswimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib.ticker import MaxNLocatorTe = np.linspace(0, 13, 25)Se = np.linspace(34.4, 35.4, 25)Tg, Sg = np.meshgrid(Te, Se)sigma_theta = gsw.sigma0(Sg, Tg)cnt = np.linspace(sigma_theta.min(), sigma_theta.max(), 10)df = pd.read_csv('/path/water_mass.csv')fig, ax = plt.subplots(figsize=(7, 7))cs = ax.contour(Sg, Tg, sigma_theta, colors='grey', levels=cnt, zorder=1)kw = dict(color='blue', fontsize=14, fontweight='black')ax.text(35.00, 11.9, 'SACW', **kw)ax.text(34.50, 3.12, 'AAIW', **kw)ax.text(34.82, 1.72, 'NADW', **kw)kw = dict(color='darkorange', linestyle="none", marker='*')ax.plot(df['SP'], df['CT'], **kw)ax.set_xlabel('Salinity [g kg$^{-1}$]')ax.set_ylabel('Temperature [$^\circ$C]')ax.set_title('T-S Diagram')ax.xaxis.set_major_locator(MaxNLocator(nbins=5))plt.show()
8ee0e6e7b346723d685a41931ac21574.png

地形图

剖面图

表面图

动图-转动的地球

为什么后面这些图我没有画出来呢???

由于某个模块装不上,python弄了好多个版本乱了,bug还没解决,心态崩了, 不然题目为什么叫从入门到入坟呢哈哈哈?

参考资料

[1]

from-oceanographer-to-programmer: https://leportella.com/from-oceanographer-to-programmer.html

[2]

R and Python for Oceanographers A Practical Guide with Applications: http://www.doc88.com/p-11373342199818.html

[3]

Read and write netCDF using Python: https://ccsr.aori.u-tokyo.ac.jp/~masakazu/memo/ncutil/nc.py

尾言

公众号目前有100+粉丝,在这里谢谢大家的支持。我也拉了一个微信交流群,有100多个群员,然而并不活跃。群里有国内外各个院校的海洋科学类学生,也有个别教职工和混进的个别高中生,但彼此并不了解,也不愿意主动展现自己,想想可能是部分同学对海洋学还是没有足够的了解,激发不了大家的共同兴趣。因此算了我不打算继续拉人了,只是希望这个公众号能够吸引更多的关注,待积累更多关注量之后,再拉一个高质量、有积极反馈的微信群,当然也会设置一些门槛,以建立一个比较活跃、能够分享交流、互帮互助的社群。那么,如果你感兴趣并愿意提供支持,希望你能点赞、点亮在看、分享和收藏,

接下来的推送还可能是写关于Python、R和Matlab等在海洋领域的介绍!赠人玫瑰,手留余香!记得点赞、点亮在看、分享和收藏~~??

往期精选

7641f53b1696b1b8c741fb641b779246.png

1、世界海洋日:聊聊海洋科学和我

2、2020毕业季|海洋科学就业指南和入坑指北

3、胡说八道系列:海洋科学排名及如何择校

4、干货:盘点物理海洋玄学有用的资料

f1916267f582a515bbe04646f04dd872.png
相关资源:c++入门
已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页