一名汽车工程师入坑python的学习经验及分享
仅作为个人分享和交流用途,如有不足之处还望专业人士不吝赐教
希望大家通过此教程了解 python,学到一点点东西
一、准备
做这个事情的初衷
个人自从 2022 年正式入坑 python,当时的需求是数据分析,处理数据需要占用很多的工作时间,促使自己想去开发工具提高数据处理的效率。加上之前就对 python 有所了解,但并未真正实操,得知它有众多好用的库,有很广泛的资源(学习,开发,交流),因此决定入坑。
经过一年多的学习和实践,因为有本职工作,工作也是较忙,所以断断续续在学习和开发。尝试了 30 多个小工具,自己开发了 15,16 个工作使用的工具,有 1,2 个迭代了几轮,目前使用还算 ok。
和身边汽车行业同事交流,有些人也打算学 python,但是迫于学习时间零散,非计算机专业,实操较少,因此经常半途就坚持不下去。
因此打算以自身经历和自己实操的小工具为引子,希望可以帮助大家多多了解 python,试着使用python,给自己工作和生活多一些可能性。
多聊一小段:
自己工作以来及目前所做的行业是传统汽车行业,师傅带徒弟的模式由来已久,约定俗成。自从接触了计算机/编程的圈子,发现这个圈子很宝贵的一点是 open,开源的思维让我明白为啥现在互联网技术可以发展得如此迅速且势不可挡,大家很乐意去分享,避免重复造轮子。
前段时间看了某个 up 对哈佛本科生的采访,了解到美国当代的年轻人并非我们想象中的自私利己,反而他们很乐意去互相帮助沟通,也希望可以为类似传统汽车的小伙伴带来一些有用的东西。
1.前期准备
软件和工具安装
python 并不是直接可以用的软件,我们需要找一个可以编辑运行这个语言的工具,**类似于写一本书我们找一个 word 软件,然后在 word 上进行书写,修改,调整格式;**推荐的几款:
Pycharm,vscode,anaconda-具体用哪款大家可以随意选择,1,3 可能相对简单点,建议新手可以选
软件的安装大家自行 B 站/CSDN/百度找,按照推荐程度排序,网上这种资源很多。
安装过程中可能涉及到激活,也可以按照上面的推荐自行搜索
2.基础知识
基础知识必备
image
二、编程入门
学习了一年多,感觉这部分还是应该早点去学习,所以放在最开始讲; 当然也可以学完之后再回来看,可能感受也会不同
1.怎么理解编程
编程是什么?和我们做的其他工作有什么不同
因为大家是非计算机专业人员,虽然之前接触过 C 语言,也只是表面,很多早已忘记;因此重新带大家认识下这个新的工作模式:
- **工作形式:**代码,密密麻麻-这种形式是真的催眠,尤其是刚刚入门,简直是一进门就劝退,所以才和大家说兴趣是第一位。
- 工作方式:梳理需求,编写代码,测试代码;梳理需求相对难度不大,毕竟需求来源于自身的原生工作内容,难点在于需求转变为写代码的思路;编写代码,有哪些原则:
- 独立任务包:一个函数/一个变量的任务分工尽量独立,各司其职;
- 对外开放:函数或者独立功能的设计尽量可以包容多种情况,有很好的通用性
- 对内闭塞:一旦成为一个独立的功能,尽量减少内部可以修改的地方,类比于自动化生产线,让工人尽量少
- 分而治之:大问题分解成小问题
- 文档化,简单化:写备注,简化代码,提高运行速度和理解速度
- 特殊性:调试代码,个人认为调试工作是和平时做的理工科工作最大的不同之处。反复的调试对我这种新手来说是即痛苦又幸福,痛苦在于一遍遍的重复去跑程序找 bug,必须调完才能用,不然就是行百步而半九十,幸福在于不断调试看着一点点把七经八脉打通的过程也是很有成就感的事情。
此处就是要坚持坚持,还是坚持!
2.关键点和技巧
关键点,小技巧
结合上面编程的一些原则提几个小的建议,此部分后面大家也可以不断补充:
- 编程前先拆分问题,以数据处理过程的思维去拆分
- 基于拆分的小问题可以去网上找是否有人做过类似的
- 尝试使用 chatgpt 帮助写代码,后面有机会会出相关教程
- 变量,函数等命名-看其名知其意
- 相同功能拆分成独立函数,多次引用,善用函数
- 代码调试先使用小数据量进行,方便查找问题
三、python 入门-最基础
只讲基础内容,便于入门,后续修行可以在网上找资料
1.基础知识
https://www.liaoxuefeng.com/wiki/1016959663602400,平时查找基础知识经常用到的 重点讲个人常用的一些基础概念
- 变量
- 变量相当于车牌号码,学号这些;一个车牌号码在某个时间点(时间点类比程序的进程),有唯一的一辆车与之对应,学号则是在这个班级里有唯一的一个人与之对应;所以变量可以代表某个具体的数值/文字/布尔值(判断语句的结果,置 1/置 0),也可以代表数组,代表函数,等等。
- 因为它代表东西广泛,所以要见名知意;因为不同时刻可能代表的东西不一样,不同程序里代表的东西不一样,所以尽量不要用得太复杂,一个变量只对应某一个事情,防止混乱;
image
- 数组
- List:数组,一般个人使用他作为一维数组,简单的处理数据,比如一行身高数据[189,178,156,165];对于数组和单一变量比起来有更多的操作性,比如加一个元素进去,读取其中第三个元素,转置等等。
image
- dataframe(这个按理说也是 list,只是它经常被用来处理数据,尤其是多维数据): 大部分做数据处理都会用到 pandas 这个库,里面的基础是多维数组的处理;面对大量多维数组时,我们可以使用这个库进行筛选,合并,增加数据(增删改筛)。
- 字典 字典就是存储一些保险柜的仓库,这些保险柜需要不同的钥匙 key,每个钥匙打开一个保险柜,可以取出里面的东西 value,比如可能是一叠钞票,也可能是几双袜子;它对应的操作也很多,但是个人并不常用,更多的是看重它可以存放不同的东西,不管是大是小都能放,给个钥匙,下次用钥匙就能取出来
- 条件语句****,循环语句
if…else…最常用的判断语句;
处理多个数据重复操作用 for 循环,还有个 map,lamda 函数也很好用,后面示例讲到在具体说
2.常用库
讲常用库前,多说两句:
python 最厉害的地方就是有好多好多库,各行各业的,怎么理解这个库呢?举个栗子:
小明想要将房子整体从村东头挪动到村西头,这时他考虑需要先要把房子连根拔起,还不能晃动,我们先假设他把房子成功挖出来了;接下来需要找个工具从村东运到村西,还要保持房子别晃动,我们都知道有汽车,卡车,但是没有运这么大房子的车,所以他要自己做一个新的工具。但是他不用重新造发动机,可以从卡车上找到大功率发动机拿过来,然后再找到一套液压稳定装置,找到合适的轮子,然后他需要固定房子,这个时候他有两套方案:
1.按照自己房子的尺寸定制一个固定的架子将房子和支架相连,然后底部也是和房子大小一致的底座
2.制作一个可以调节前后左右高度的活动支架,底部也是可以调节大小的底座
方案 1,2 都能完成任务,但是如果你想让自己做出来的这套工具可以复用,服务他人,方案 2 显然更优。
image
**所以选择合适的库很重要,**将库连接成你需要的东西也很重要,先介绍下个人常用的库:
image
四、简单示例讲解
dat 文件(车辆运行记录数据的一种格式)处理之 dat 文件转成 csv
image
1.任务分解
第一步
- 先找到合适的库,这个过程有可能是需要反复的,我也是试了好几个库,最后选择了 asammdf 这个库,它主要用于处理 dat 文件;
- 任务拆分:
image
2.编程思路
任务实现,比较简单,详细地视频课程会讲解
- 安装库 pip install asammdf
- 导入库
from asammdf import MDF, Signal,
from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtWidgets import QFileDialog from PyQt5 import QtCore, QtGui, QtWidgets
也可能需要其他库,后续再加
- 构建一个可视化的界面,可以使用 pyqt,在 pycharm 中引入 tool,具体操作可以自行搜索
- 导入数据文件夹,建成一个函数,后续可以引用
image
-
数据处理
-
for 循环,先筛选变量,然后再导出。
-
导出数据
和导入数据类似
五、学习技巧
python 编程实操时的一些分享,欢迎大家补充!
1.小技巧
实用技巧
- 安装库 pip install xxx (-i https://pypi.tuna.tsinghua.edu.cn/simple)()里面是查找清华资源,下载速度会变快
- 批量安装库 pip install -r requirement.txt 库全放在 txt 文件里-一般从别的人那儿导出来的
- 查看已安装的库 pip list
- 新的库去网上找资料,带 PyPi 是官网,非官网主要看一些例子
image
- 报错后网上搜索,一般 CSDN 有一些分享
- 推荐常用找资源的网站:GitHub
2.简短语句
小块功能代码,大家自行尝试
-
重复元素判定
以下方法可以检查给定列表是不是存在重复元素,它会使用 set() 函数来移除所有重复元素。
def all_unique(lst): return len(lst) == len(set(lst)) x = [1,1,2,2,3,2,3,4,5,6] y = [1,2,3,4,5] all_unique(x) # False all_unique(y) # True -
字符元素组成判定
检查两个字符串的组成元素是不是一样的。
from collections import Counter def anagram(first, second): return Counter(first) == Counter(second) anagram(“abcd3”, “3acdb”) # True -
内存占用
下面的代码块可以检查变量 variable 所占用的内存。
import sys variable = 30 print(sys.getsizeof(variable)) # 24 -
字节占用
下面的代码块可以检查字符串占用的字节数。
def byte_size(string): return(len(string.encode(‘utf-8’))) byte_size(’ ') # 4 byte_size(‘Hello World’) # 11 -
打印 N 次字符串
该代码块不需要循环语句就能打印 N 次字符串。
n = 2; s =“Programming”; print(s * n); -
大写第一个字母
以下代码块会使用 title() 方法,从而大写字符串中每一个单词的首字母。
s = “programming is awesome” print(s.title()) -
分块
给定具体的大小,定义一个函数以按照这个大小切割列表。
from math import ceil def chunk(lst, size): return list( map(lambda x: lst[x * size:x * size + size], list(range(0, ceil(len(lst) / size))))) chunk([1,2,3,4,5],2) -
压缩
这个方法可以将布尔型的值去掉,例如(False,None,0,“”),它使用 filter() 函数。
def compact(lst): return list(filter(bool, lst)) compact([0, 1, False, 2, ‘’, 3, ‘a’, ‘s’, 34]) -
解包
如下代码段可以将打包好的成对列表解开成两组不同的元组。
array = [[‘a’, ‘b’], [‘c’, ‘d’], [‘e’, ‘f’]] transposed = zip(*array) print(transposed) -
链式对比
我们可以在一行代码中使用不同的运算符对比多个不同的元素。
a = 3 print( 2 < a < 8) # True print(1 == a < 2) # False -
逗号连接
下面的代码可以将列表连接成单个字符串,且每一个元素间的分隔 方式设置为了逗号。
hobbies = [“basketball”, “football”, “swimming”] print("My hobbies are: " + ", ".join(hobbies))
- 元音统计
以下方法将统计字符串中的元音 (‘a’, ‘e’, ‘i’, ‘o’, ‘u’) 的个数,它是通过正则表达式做的。
import re def count_vowels(str): return len(len(re.findall(r’[aeiou]', str, re.IGNORECASE))) count_vowels(‘foobar’) # 3 count_vowels(‘gym’) # 0
13. 首字母小写
如下方法将令给定字符串的第一个字符统一为小写。
def decapitalize(string): return str[:1].lower() + str[1:] decapitalize(‘FooBar’) # ‘fooBar’ decapitalize(‘FooBar’) # ‘fooBar’
14. 展开列表
该方法将通过递归的方式将列表的嵌套展开为单个列表。
def spread(arg): ret = [] for i in arg: if isinstance(i, list): ret.extend(i) else: ret.append(i) return ret def deep_flatten(lst): result = [] result.extend( spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst)))) return result deep_flatten([1, [2], [[3], 4], 5]) # [1,2,3,4,5]
15. 列表的差
该方法将返回第一个列表的元素,其不在第二个列表内。如果同时要反馈第二个列表独有的元素,还需要加一句 set_b.difference(set_a)。
def difference(a, b): set_a = set(a) set_b = set(b) comparison = set_a.difference(set_b) return list(comparison) difference([1,2,3], [1,2,4]) # [3]
16. 通过函数取差
如下法首先会应用一个给定的函数,然后再返回应用函数后结果有差别的列表元素。
def difference_by(a, b, fn): b = set(map(fn, b)) return [item for item in a if fn(item) not in b] from math import floor difference_by([2.1, 1.2], [2.3, 3.4],floor) # [1.2] difference_by([{ ‘x’: 2 }, { ‘x’: 1 }], [{ ‘x’: 1 }], lambda v : v[‘x’])
以上就是“一名汽车工程师入坑python的学习经验及分享”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。