python入门经验贴

这段话发给朋友的,码了自己的心路历程。

你的学习能力远高于我,我建议你从python开始,掌握基本语法后尝试简单的数据分析和办公自动化,不然脱离了实际工作你很快就忘记了。工作中一些简单重复的paperwork完全可以考虑python,比如合并批量excel表格,更新模板类的ppt(比如每次只需要更新图片,我就做了个脚本更新周报)。
sql上手快,但是很多命令如果不常用忘记很快。主要就是查改增删,高大上的你没有机会用。
关系型数据库特别适合存放大数据,比如几十万行的数据表,超过百万excel就无能为力了,太慢(比如我常见的各种导航数据,很多项目都是百万炮,excel处理非常不方便)。总之要结合工作需求,学习快也更有动力。
入门我用的比较经典的learn python the hard way(短时间内给你个编程的感觉),敲完这本书后接着学习基本语法,我用的foundations for data analytics,介绍的基本语法,处理文本,csv,excel,sql等,因为这些我经常用。
然后我就开始了python for data analysis,这次休假我就能刷完了,500页左右。必须手动敲代码,不然会眼高手低。其实这个阶段我已经能写简单的脚本了,在船上工作不忙,三周左右我做了五个小项目,每天持续工作十几个小时,ppt周报自动化,爬虫肺炎疫情/全国医院数据/全国的A股上市公司数据,代码也打了几千行(有些网上有可以拿来用,需要修改定制)。比如简单爬虫是可以模板化的,做好一个后再做其他的就容易了。
我刚开始在github分享脚本,最近放上去了一个肺炎疫情的,搜索chenxuzhen应该能找到。
刷完这几本书再加十个以上小项目,我做简单的数据分析应该就畅通无阻了。我比较慢,中间放弃了很久(买房子耽误了很多时间),但是我估计我花了至少三个月,刷完这三本书四个月是必须的,因为中间还会尝试做简单的编程项目。
入门一般都是从简单爬虫入手,但是这个东西不需要掌握太多高深的,因为高难度的爬虫一个人很难做到,涉及到各种反爬策略(大网站都有),比如验证码复杂的不仅需要图像处理还需要机器学习(只是这两个技能入门也得一两个月了)。
我的目的就是数据分析,以后熟练了再好好看看数学尝试图像处理(这个很多和地球物理重叠,毕竟涉及到信号处理)。python可做的太多,我需要从工作需求开始,学习更快。
以上就是我简单的学习经验,看起来不多,但是都是刷了几千个帖子+实际操练得来的,纸上得来终觉浅,绝知此事要躬行,编程还是要靠实践。
这次上船后我有个小项目计划,就是从大量水下机器人抓取的图片中识别并抓取一些关键信息来校对图片的文件名并修改,因为这些都是rov technician手动录入错误百出,现在每天能步一百多节点,布一个节点就有布前,布中,收回前,三个图片,一个项目轻松数以万计的图片了,这些放入pdf中时都是需要检查一下的。pdf自动化同事已经做好了,bash+latex,我有时间用python重写一次。

扫我获取html仪表盘
最近做的BI Panel
刷码场景1
刷码场景2

pyecharts如何添加自定义图片

今天为了往pyecharts产生的html里添加微信二维码费了九牛二虎之力,主要是因为pyecharts的文档非常烂!

微信二维码
wechat QR
QR = myqr.run(
     words="https://geoseis.cn/CoV_en.html",          # 可以是字符串,也可以是网址(前面要加http(s)://)
     version=1,                              # 设置容错率为最高
     level='H',                              # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
     picture="C:/Users/xuzhen/Pictures/0.jpg",                           # 将二维码和图片合成
     colorized=True,                         # 彩色二维码
     contrast=1.0,                           #用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0
     brightness=1.0,                         #用来调节图片的亮度,其余用法和取值同上
     save_name="C:/Users/xuzhen/Pictures/python.gif",                     # 保存文件的名字,格式可以是jpg,png,bmp,gif
     save_dir=os.getcwd()                    #控制位置
 )
def image_base() -> Image:
     image = Image()
img_src = (
    "https://www.geoseis.cn/wp-content/gallery/pycharm/"
    "python.gif"
)
image.add(
    src=img_src,
    style_opts={"width": "200px", "height": "200px", "style": "margin-top: 10px"},
).set_global_opts(
    title_opts=ComponentTitleOpts(title="WeChat QR",title_style={"style": "font-size: 18px; font-weight:bold; color:red"},\
                                  subtitle="Scan to follow the realtime update!",subtitle_style={"style": "font-size: 12px; color:red"})
)
return image
  • 添加到page函数(重点是add(image_base(),如果没有这个括号是不行的,pyecharts没有这种实例需要自己琢磨它的用法):
page = (Page(page_title="2019-nCov")
        .add(world_map)
        .add(total_pie)
        .add(area_map)
        .add(area_heat_geo)
        .add(bar)
        .add(big_title)
        .add(times)
        .add(confirms)
        .add(confirms_people)
        .add(suspects)
        .add(suspects_people)
        .add(deads)
        .add(deads_people)
        .add(heals)
        .add(heals_people)
        .add(confirm_liquid)
        .add(suspect_liquid)
        .add(dead_liquid)
        .add(heal_liquid)
        .add(wc)
        .add(image_base())
        ).render("2019-nCov-RealTime.html")
  • 划重点,如何改变图片标题的字体(文档没有说明,需要阅读源码自己琢磨下),源码就在Options下的Charts_options.py:
title_opts=ComponentTitleOpts(title="WeChat QR",title_style={"style": "font-size: 18px; font-weight:bold; color:red"},\
subtitle="Scan to follow the realtime update!",subtitle_style={"style": "font-size: 12px; color:red"})
)

C:\Users\xuzhen\env\pyecharts\Lib\site-packages\pyecharts\options

最后的效果图:

肺炎疫情BI仪表盘

Python 脚本自启动及定时任务

爬虫脚本定时运行(crontab)

https://www.jianshu.com/p/5cd74add11ba 没有采用简书的方案,上面的博客方案更加清晰。以下是我的笔记(重点是环境变量,路径,scp的使用方法)

不需要root,执行以下命令:
crontab -e
编辑:
#注意这里最好把环境变量写上
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/chen/miniconda3/bin/
MAILTO=root
#测试:两分钟执行一次
*/2 * * * * echo "crontab test" >> /home/chen/ctest.txt
#写的python脚本每5分钟执行一次(注意python脚本中文件路径必须是绝对路径,否则报错)
*/5 * * * * /home/chen/miniconda3/bin/python /home/chen/CoV_copy2.py 
#scp python脚本产生的HTML到博客服务器(这里用了密钥而不是密码)。注意:所有的路径都#使用绝对路径,否则无效。
* * * * * scp -i /home/chen/.ssh/do248 -P 4705 /home/chen/2019-nCov数据一览2.html [email protected]:/home/wwwroot/geoseis.cn/CoV.html >> /home/chen/cov.log
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

linux定时执行失败的处理方法就是查看 /var/spool/mail/ ,一般root里都有日志,可以看到哪里出错了。

这个爬虫脚本放到vpn后需要更新很多:

  • 文件路径必须为绝对路径
  • pyecharts的Geo函数bug:遇到不存在的地点Geo函数就会使程序退出,即使用了except也不行,和笔记本环境不一样。笔记本里运行程序不会退出。解决方案就是复制了旧版本的一些.py程序到相应的目录
  • proxy在VPN中没有设置好,因为笔记本里用的SSR代理的(5个VPN)。这个脚本五分钟执行一次不需要代理也可以

scp的使用

scp推荐使用密钥传输,更加安全。密钥产生后我直接append到目标服务器的/home/chen/.ssh/authorized_keys,然后scp -i 就可以无密码传输了。

运行 ssh-keygen -t dsa 时最好设置密码,否则密钥没有密码也不安全。

参考:

It’s better to set up ssh to used key-based authentication rather than trying to figure out how to send text to the login process with something like expect.

Take a look at:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

So, basically, run ssh-keygen -t dsa on the machine that will run your script. When it asks you for a passphrase, hit ENTER to accept a blank. You will get two files. If you followed the default suggestions, the files will be ~/.ssh/id_dsa and ~/.ssh/id_dsa.pub. The first one is the private key. The second one is the public key.

Copy the public key to the second server using ssh-copy-id [email protected]. This will add the public key to the authorized_keys file of the user on server2.

You should now be able to run ssh from the first machine and log in without a password.

For copying the files, scp or rsync are fine. It depends on what you’re doing. rsync will use ssh by default, so will use the key-based authentication you just set up

槟城Day2 – 逸林酒店刷代码

来槟城第二天,推开阳台能看到一角海景。酒店很小气没有任何房型升级,这个在入住率这么低的情况下还那么小气肯定是因为我是用积分兑换的了。
机场过来35公里,公交俩小时,打车一小时。一路看来槟城其实是个工业城市,路上还看见不少AMD,BOSCH的工厂。
酒店定位度假型,东南亚风格。大堂很赞,无死角海景;两个泳池,但是早上都被孩子填满了;海景健身房虽然不大,但是景色无敌,健身的计划可以落地了;早餐种类繁多但是都不适合哥。
说了这么多,哥都没说,哥是过来刷代码的,这么好的环境不刷刷代码浪费了。35刀每天,这个性价比很高了,不能对度假型酒店的会员待遇有太多期望。
这次出来带了两本书,在飞机上简单做了个规划:pandas for data analysis 10天,爬虫15天,opencv图像处理5天(完成未完工的小项目:从图像上识别文字来校对图像文件名)。计划每天8小时,健身游泳俩小时。烦了的话飞吉隆坡待几周,看了下机票才60马币,良心价啊。