大家好,我是都市数据集团联合创始人大鹏,致力于Python数据分析和数据可视化的应用与教学。在接触很多同学的过程中,我发现自学Python数据分析的难点之一就是数据量太大太复杂。网上的资料大多都是从Python语法的教学开始,夹杂着很多Python开发的知识点,花了不少时间却还是一头雾水,不知道是哪些知识点真的很有用。本以为自己会写爬虫,会手画图,却在看基础的过程中花费了一周又一周的时间,让很多有志于学习Python的励志朋友牺牲在了入门的第一步。因此,我总结了以下干货,帮助大家理清思路,提高学习效率。总共分为三个部分:Python数据分析必须要知道的语法,如何实现爬虫,如何做数据分析。一、必须知道的两套Python基本术语A、变量和赋值Python可以直接定义变量名和赋值。例如,当我们写a=4时,Python解释器做了两件事:在内存中创建一个值为4的Integer数据变量,在内存中创建一个名为a的变量,并将其指向4。用一个示意图来说明Python变量及赋值要点:例如下面代码中,“=”的作用是赋值,同时Python会自动识别数据类型:a=4#integerdatab=2#integerdatac="4"#stringdatad="2"#stringdataprint("a+b结果为",a+b)#两个整数相加,结果为6print("c+d结果为",c+d)#合并两段文本,结果为文本“42”#以下为运算结果>>>a+b结果为6>>>c+d,结果为42B。数据类型在初级数据分析过程中,有3种数据类型是很常见的:listlist(Python内置)dictionarydic(Python内置)DataFrame(工具包pandas下)数据类型,需要导入pandastocall)都是这样写的:list(list):#listliebiao=[1,2.223,-3,'刘强东','章泽天','周杰伦','昆凌',['微博','B站','抖音']]list是一个有序的集合,里面的元素可以是上面提到的任何一种数据格式和数据类型(整数、浮点数、列表...),并且可以指定以便随时在其中添加元素。形式为:#ist是一个可变有序列表,所以可以在列表末尾添加元素:liebiao.append('thin')ptint(liebiao)#Result1>>>[1,2.223,-3,'刘强东','章泽天','周杰伦','昆凌',['微博','B站','抖音'],'thin']#指定元素也可以插入位置,例如索引号为5,插入元素“fat”:liebiao.insert(5,'fat')ptint(liebiao)#结果2>>>[1,2.223,-3,'Liu强东'、'章泽天','胖','周杰伦','昆凌',['微博','B站','抖音'],'瘦']Dictionary(dict):#dictionaryzidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'}字典采用键值(key-value)存储,无序,查找速度极快以上面的字典为例。如果想快速知道周杰伦的年龄,可以这样写:zidian['周杰伦']>>>'40'dict的存放顺序和key的放置顺序有没事做。也就是说,“章泽天”并不落后于“刘强东”。DataFrame:DataFrame可以简单理解为excel中的一种表格格式。导入pandas包后,字典和列表都可以转成DataFrame。以上面的字典为例,转换成DataFrame如下:importpandasaspddf=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])#注意DataFrame的D和F要大写df=df.reset_index().rename(columns={'index':'name'})#给name加上字段名和excel一样,可以单独选择DataFrame的任意列或行进行分析。以上三种数据类型是python数据分析中最常用的类型。基本的语法到这里就结束了,接下来就可以开始写一些计算数据的函数了。2、从Python爬虫循环函数掌握了以上基本语法概念后,我们就可以开始学习一些有趣的函数了。下面以爬虫中绕不开的遍历url为例,说说最难理解的循环函数for的用法:A.for函数for函数是一个常见的循环函数。我们从简单的代码来理解for函数的用途:zidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'}forkeyinzidian:print(key)>>>刘强东章泽天周杰伦昆凌因为dict的存储不是按照list的顺序排列的,所以迭代的结果顺序可能不一样每次。默认情况下,dict遍历键。如果要迭代值,可以在d.values()中使用forvalue。如果想同时#iteratekey和value,可以使用fork,vind.items()看到字典中的名字一个一个打印出来。for函数的作用是遍历数据。掌握for函数可以说是真正入门Python函数。B、爬虫和loopfor函数在写Python爬虫时经常用到,因为爬虫往往需要遍历每一个网页来获取信息,所以建立完整正确的网页链接非常重要。以某票房数据网为例,它的网站信息是这样的:该网站每周的票房json数据地址可以通过抓包工具在http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate找到=20190114仔细观察网站不同日期的票房数据url(url)只是在以后的日期发生变化,访问不同的url(url)就可以看到不同日期的票房数据:我们需要做的就是遍历每个日期URL下的url,使用Python代码爬取数据。这时候for函数就派上用场了。使用它,我们可以快速生成多个符合条件的URL:importpandasapdurl_df=pd.DataFrame({'urls':['http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate='foriinrange(5)],'date':pd.date_range(20190114,freq='W-MON',periods=5)})'''将URL的同一部分生成5次,并使用pandas的时间序列函数生成5个对应星期一的日期。使用***部分提供的多种数据类型:range(5)属于list,'urls':[]属于dictionary,pd.dataframe属于dataframe'''url_df['urls']=url_df['urls']+url_df['date'].astype('str')滑动滑块可以看到中间的完整代码和注释。为了方便理解,我画了一张for函数遍历过程的示意图:后面的爬取过程在此省略,相关爬虫代码在文末。我们使用爬虫爬取了5800+条数据,包括20个字段,涵盖了周票房、累计票房、观影人次、场均人次、场均票价、季票等信息比赛场数的季度变化等等。3.Python是如何实现数据分析的?除了爬虫,分析数据也是Python的重要用途之一。Python如何实现Excel可以做的事情?Python能实现Excel做不到的事情吗?以电影票房数据为例,我们举例说明:A.Python分析数据采集导入后,选择字段进行初步分析可以说是数据分析的必经之路。在Dataframe数据格式的帮助下,这一步变得很容易。例如,当我们想查看单周票房排名最高的电影时,可以使用pandas工具库常用的方法,过滤掉该周票房最高的所有数据,保留同一部电影每周票房***的数据分析整理:importpandasaspddata=pd.read_csv('中国票房数据爬取测试20071-20192.csv',engine='python')data[data['averagenumberofseats']>20]['电影名称']#计算每周票房***随时间变化的结果,导入数据,选择平均上座率大于20的电影作为有效数据dataTop1_week=data[data['ranking']==1][['电影名','每周票房']]#取出所有每周票房排名为***的数据,保留“电影名”两列数据和“每周票房”dataTop1_week=dataTop1_week.groupby('电影名称')。max()['周票房'].reset_index()#用“电影名”对数据进行分组,连续霸榜的同一部电影选择***周票房,删除其他数据dataTop1_week=dataTop1_week。sort_values(by='Weeklyboxoffice',ascending=False)#按照“每周票房”降序排列数据删除原来的电影名称列dataTop1_week#查看数据9行代码,我们完成了数据透视表,Excel中的拖动、排序和其他鼠标单击操作。***然后使用Python中的可视化包matplotlib快速绘制图形:B.函数分析以上是一个简单的统计分析过程。接下来说说Excel的基本功能有哪些是做不到的——自定义函数提高效率。观察数据,我们可以发现数据中记录了周票房和总票房的排名,那么是否可以将刚刚计算出周票房排名的代码重新用于总票房的分析呢?当然,只要你使用def函数,只要写好代码就可以创建自定义函数,并说明函数规则:defpypic(pf):#定义一个pypic函数,变量为pfdataTop1_sum=data[['电影名',pf]]#取出源数据,列名“电影名称”和pf两列数据dataTop1_sum=dataTop1_sum.groupby('电影名称').max()[pf].reset_index()#使用"电影名称”对数据分组,同一部电影继续霸榜***pf票房保留,其他数据删除dataTop1_sum=dataTop1_sum.sort_values(by=pf,ascending=False)#数据降序排列根据pfdataTop1_sum.index=dataTop1_sum['moviename']deldataTop1_sum['moviename']#整理索引列使其成为电影名,并删除原来的电影名列dataTop1_sum[:20].iloc[::-1].plot.barh(figsize=(6,10),color='orange')name=pf+'top20analysis'plt.title(name)#根据函数变量名定义函数后,批量绘图是这样的电子asy:学会函数构造,数据分析师才能真正告别Excel的鼠标点击模式,进入高效分析领域。4.光看不练永远上不去。如果你只有一个小时的学习时间,以上就是大家必须掌握的Python知识点。
