大家好,我是大师兄。
很多同学抱怨自己很想学好Python,但学了好久,书也买不少,视频课程也看了不少,但是总是学了一段时间,感觉还是没什么收获,碰到问题没思路,有思路写不出多少行代码,遇到报错时也不知道怎么处理。
从入门到放弃,这是很多学习python的同学常常挂在嘴边上的口头禅。今天我分享一些自己学习Python的心得,并用一个案例来说明python解决问题的基本思路和框架。
听到别人说Python很牛很厉害,也想跟着学,这样的人肯定是学不好python的。没有明确的需求和动力,就会导致你学python两天打鱼三天晒网,没有恒心也没有决心。
我要处理很多excel文件,我想写一个脚本帮我自动处理
我每天都在手动审核数据质量,我想写一个脚本代替我的日常工作
当你面对这样一些需求时,你还无法求助他人帮忙时,这个时候,你就必须学习Python来帮你处理了。
我是日常用Python主要做数据处理和数据分析工作,所以我选择的是数据处理和数据分析方向,其他Python功能接触的比较少。
不管你选择了什么方向,Python的基本语法是必须掌握的。对于没有编程经验的人,Python是一门非常适合入门的编程语言,因为它是高度封装的,不需要对于底层特别了解,也能够很好学习使用。python语法非常简单,代码可读性高,对于零基础的人来说更容易接受和使用。
Pandas/Numpy/Matplotlib模块
利用Python做数据处理,线性代数和统计学这两门基本理论知识还是要会点,线性代数你至少得需要知道矩阵和矩阵运算规则,统计学你至少要知道描述性统计。
常用的Python数据处理模块有Pandas和Numpy这两个,这是必须要掌握的,另外,Matplotlib模块是数据可视化模块,也是必须会的。
数据导入、清洗和准备、规整、分组等操作,都是数据处理中常用的方法,平常对比Excel数据操作,Python都可以实现,而且一行简单的代码,就可以操作比较复杂的数据处理方法。
Python和数据分析都是实践学科,光学理论,不练习,是不会有任何收获的,学完之后不练就忘掉了。最好的方式,就是先掌握一点基础语法,然后把Python融合到工作中,解决日常工作中碰到的问题。在解决问题的时候,你会碰到各种问题,可以去"百度"寻找答案。最后,要定期总结和输出。
特别提示,假如你没有基础或者基础薄弱的话,建议工作期间不要尝试用Python解决复杂的问题,这是一个很浪费时间的事情,中间各种问题,会让你崩溃。最终Python没学好,还耽误了工作。所以,要利用工作之余的时间,把python基础打扎实。
首先,需要安装python,我要推荐Anaconda3,从事数据分析的伙伴们,严重推荐此软件!
Anaconda降低了数据分析初学者的学习门槛,因为这个软件自带了python中大概有1000多个数据科学包,让你无需单独学习每个库的安装方法。另外,还自带了Jupter notebook代码编译器。现在,Anaconda和Jupyter notebook已成为数据分析的标准环境。
https://mp.weixin.qq.com/s/53-KvHGYqCSx8qtUnub_vw
安装完成后,打开Jupter Notebook,就可以在上面输入代码。
现在工作中面临一个批量化文件处理的问题:就是要把每个二级文件下csv文件合并到一个数据表里,同时要在最终的数据表里增加两列,一列是一级文件目录名称,另一列是二级文件目录名称。
当工作中,碰到这样的问题时,我用最笨拙的方法——人工,一个一个文件整理,但是效率比较低,可能需要一个人一天的工作量。当然,我也可以寻找技术的帮忙,找一个Java工程师,这个问题也很容易解决,但麻烦别人一次,没问题。以后碰到类似的问题,总是麻烦,就不好了。假如自己掌握了Python,这个问题就变得很简单了。
其实这个问题,对于一个专业的Python程序员来说,是一个再简单不过的问题。但是对于一个初学者来说,要解决这个问题,恐怕需要费一点时间和脑力。
1、首先,要读取文件名称,需要引入OS模块下的listdir函数
2、其次,遍历所有一级、二级、三级文件名称,需要用到for循环和循环嵌套
3、然后,读取文件下csv表,需要用到pandas模块下的read_csv函数
4、最后,整理合并后的所有表,需要用到DataFrame的操作方法
#导入模块 import osimport pandas as pd##定义一个读取文件名的函数 def readname (a) : filePath="D:\\\\ad_data\\\\" +a+"\\\\" name=os.listdir(filePath) return name#声明初始变量 a="" name= readname(a) data_new =pd.Dataframe()#循环遍历文件名称 for i in name: name1=readname(i) for j in name1: file_path = "D:\\\\ad_data\\\\" +i+"\\\\"
+j+"\\\\" name3=os.listdir(file_path) for t in name3: csv_path = "D:\\\\ad_data\\\\" +i+"\\\\" +j+"\\\\" +t data=pd.read_csv(csv_path) data['广告主' ]=i data['行业' ]=j f = lambda x:x[0 :7 ] data['日期' ]=data['日期' ].apply(f) data['投放费用' ]=data['投放费用' ]/10000 data=data.drop(columns=['行业排名' ]) data_new=data_new.append(data)#导出数据 file = os.getcwd() + '\\ad.csv' data_new.to_csv(file, index=False ,encoding='utf_8_sig' )
这段代码虽然简单,但基本攘括了Python的大部分基本语法,接下来我带大家一一解剖下这些基本语法。
下面程序使用导入整个模块的最简单语法来导入指定模块:
import os #导入OS模块 import pandas as pd #导入pandas模块
使用Python进行编程时,有些功能没必须自己实现,可以借助Python现有的标准库或者其他人提供的第三方库。像OS和pandas,都是标准库,导入后,就可以在程序中使用其模块内的函数,使用时必须添加模块名作为前缀。
name3 =os.listdir(file_path) #导入os模块下的listdir函数
假如模块名长,就可以取别名,比如pandas模块,取别名为pd。像os模块,由于比较简短,就没有取别名。别名的作用,就是调用该模块下的函数时,减少代码的复杂度。
import pandas as pd data=pd.read_csv(csv_path)
数据的导入是数据处理和分析的第一步,日常我使用的比较多的是利用pandas进行数据输入和输出,尽管其他库中也有许多工具可帮助我们读取和写入各种格式的数据。
将表格型数据读取为DataFrame对象是pandas的重要特性
#遍历所有文件路径,读取所有文件下csv文件数据 csv_path = "D:\\\\ad_data\\\\" +i+"\\\\" +j+"\\\\" +tdata =pd.read_csv(csv_path)
当然,数据的输入,也有与数据库交互读取数据,也有与WEB API交互读取数据,这个是属于进阶的内容,后期带大家学习。
变量是Python语言中一个非常重要的概念,其作用就是为Python程序中的某个值起一个名字。类似于"张三"、"李四"一样的名字。在Python语言中,声明变量的同时需要为其赋值,毕竟不代表任何值的变量毫无意义。
a ="" #声明一个空字符类型data_new =pd.Dataframe() #声明一个空数据集格式
声明变量非常简单,语法结构:等号(=)左侧是变量名,右侧是变量值,Python编译器会自动识别变量的数据类型。
说到变量,就不得不谈Python的基本数据类型,Python有6个标准的数据类型:
学习Python,掌握其基本数据类型,特别重要!重要!重要!详细的介绍,见:
https://www.runoob.com/python3/python3-data-type.html
我们所见到的程序,有很多程序都是按照顺序从上到下执行它们。如果你想要改变语句流的执行顺序,也就是说你想让程序做一些决定,根据不同的情况做不同的事情。这个时候,就需要通过控制流语句来实现。
在Python中有三种控制流语句——if、for和while。详细的知识点,见如下:
https://www.runoob.com/python/python-if-statement.html
https://www.runoob.com/python/python-while-loop.html
https://www.runoob.com/python/python-for-loop.html
https://www.runoob.com/python/python-nested-loops.html
本次实例中,需要读取一级文件目录名称、二级文件目录名称、三级csv文件目录名称,并逐个遍历它,于是选择了for循环。for循环就是个迭代器,当我们在使用for循环时,即重复运行一个代码块,或者不断迭代容器对象中的元素,比如一些序列对象,列表,字典,元组,甚至文件等,而for循环的本质取出可迭代对象中的迭代器然后对迭代器不断的操作。
for i in name: #第一层循环,读取一级文件目录名称 for j in name1: #第二层循环,读取二级子文件目录名称 for t in name3: #第三层循环,读取csv文件目录名称
函数是组织好的,可重复使用的,用来实现单一、或者相关功能的代码段。
函数能提高程序的模块性,和代码的重复利用率。Python提供了许多标准模块的内建函数,比如os模块下的listdir函数,用来读取文件的名称,pandas模块下的read_csv函数,用来读取csv文件的数据。当然,也可以自己创建函数,也就是所谓的自定义函数,下一节详细讲。
import os #导入OS模块 import pandas as pd #导入pandas模块 name=os.listdir(filePath) #调用os模块下的listdir函数 data=pd.read_csv(csv_path) #调用pandas模块下的read_csv函数
我们可以自定义一个自己想要的功能函数,通常遵循以下规则:
函数代码块以def关键词开头,后接圆括号()和参数。