大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析、数据可视化的应用与教学。

和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂。大部分网上的资料总是从Python语法教起,夹杂着大量Python开发的知识点,花了很多时间却始终云里雾里,不知道哪些知识才是真正有用的。本来以为上手就能写爬虫出图,却在看基础的过程中消耗了一周又一周,以至于很多励志学习Python的小伙伴牺牲在了入门的前一步。

于是,我总结了以下一篇干货,来帮助大家理清思路,提高学习效率。总共分为三大部分:做Python数据分析必知的语法,如何实现爬虫,怎么做数据分析。

1.必须知道的两组Python基础术语

A.变量和赋值

Python可以直接定义变量名字并进行赋值的,例如我们写出a = 4时,Python解释器干了两件事情:

  • 在内存中创建了一个值为4的整型数据
  • 在内存中创建了一个名为a的变量,并把它指向4

用一张示意图表示Python变量和赋值的重点:

例如下图代码,“=”的作用就是赋值,同时Python会自动识别数据类型:

a=4 #整型数据 
b=2 #整型数据 
c=“4” #字符串数据 
d=“2” #字符串数据 
 
print(“a+b结果为”,a+b)#两个整数相加,结果是6 
print(“c+d结果为”,c+d)#两个文本合并,结果是文本“42” 
 
#以下为运行结果 
>>>a+b结果为 6 
>>>c+d结果为 42 

B.数据类型

在初级的数据分析过程中,有三种数据类型是很常见的:

  • 列表list(Python内置)
  • 字典dic(Python内置)
  • DataFrame(工具包pandas下的数据类型,需要import pandas才能调用)

它们分别是这么写的:

列表(list):

#列表 
liebiao=[1,2.223,-3,'刘强东','章泽天','周杰伦','昆凌',['微博','B站','抖音']] 

list是一种有序的集合,里面的元素可以是之前提到的任何一种数据格式和数据类型(整型、浮点、列表……),并可以随时指定顺序添加其中的元素,其形式是:

#ist是一个可变的有序表,所以,可以往list中追加元素到末尾: 
liebiao.append('瘦') 
ptint(liebiao) 
#结果1 
>>>[1, 2.223, -3, '刘强东', '章泽天', '周杰伦', '昆凌', ['微博', 'B站', '抖音'], '瘦'] 
 
#也可以把元素插入到指定的位置,比如索引号为5的位置,插入“胖”这个元素: 
liebiao.insert(5, '胖') 
ptint(liebiao) 
#结果2 
>>>[1, 2.223, -3, '刘强东', '章泽天', '胖', '周杰伦', '昆凌', ['微博', 'B站', '抖音'], '瘦'] 

字典(dict):

#字典 
zidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'} 

字典使用键-值(key-value)存储,无序,具有极快的查找速度。以上面的字典为例,想要快速知道周杰伦的年龄,就可以这么写:

zidian['周杰伦'] 
>>>'40' 

dict内部存放的顺序和key放入的顺序是没有关系的,也就是说,"章泽天"并非是在"刘强东"的后面。

DataFrame:

DataFrame可以简单理解为excel里的表格格式。导入pandas包后,字典和列表都可以转化为DataFrame,以上面的字典为例,转化为DataFrame是这样的:

import pandas as pd 
 
df=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])#注意DataFrame的D和F是大写 
df=df.reset_index().rename(columns={'index':'name'})#给姓名加上字段名

和excel一样,DataFrame的任何一列或任何一行都可以单独选出进行分析。

以上三种数据类型是python数据分析中用的最多的类型,基础语法到此结束,接下来就可以着手写一些函数计算数据了。

2.从Python爬虫学循环函数

掌握了以上基本语法概念,我们就足以开始学习一些有趣的函数。我们以爬虫中绕不开的遍历url为例,讲讲大家最难理解的循环函数for的用法:

A.for函数

for函数是一个常见的循环函数,先从简单代码理解for函数的用途:

zidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'} 
for key in zidian: 
        print(key) 
>>> 
刘强东 
章泽天 
周杰伦 
昆凌 

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不是每次都一样。默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时#迭代key和value,可以用for k, v in d.items()

可以看到,字典里的人名被一一打印出来了。for 函数的作用就是用于遍历数据。掌握for函数,可以说是真正入门了Python函数。

B.爬虫和循环

for函数在书写Python爬虫中经常被应用,因为爬虫经常需要遍历每一个网页,以获取信息,所以构建完整而正确的网页链接十分关键。以某票房数据网为例,他的网站信息长这样:

该网站的周票房json数据地址可以通过抓包工具找到,网址为http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=20190114

仔细观察,该网站不同日期的票房数据网址(url)只有后面的日期在变化,访问不同的网址(url)就可以看到不同日期下的票房数据:

我们要做的是,遍历每一个日期下的网址,用Python代码把数据爬下来。此时for函数就派上用场了,使用它我们可以快速生成多个符合条件的网址:

import pandas as pd 
 
url_df = pd.DataFrame({'urls':['http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=' for i in range(5)],'date' :pd.date_range(20190114,freq = 'W-MON',periods = 5)}) 
 
''' 
将网址相同的部分生成5次,并利用pandas的时间序列功能生成5个星期一对应的日期。 
其中用到了第一部分提供的多个数据类型: 
range(5)属于列表, 
'urls':[]属于字典, 
pd.dataframe属于dataframe 
''' 
url_df['urls'] = url_df['urls'] + url_df['date'].astype('str') 

滑动滑块可以看到完整代码和中间的注释。

为了方便理解,我给大家画了一个for函数的遍历过程示意图:

此处省略掉后续爬取过程,相关爬虫代码见文末。我们使用爬虫爬取了5800+条数据,包含20个字段,时间囊括了从2008年1月开始至2019年2月十一年期间的单周票房、累计票房、观影人次、场均人次、场均票价、场次环比变化等信息。

3.Python怎么实现数据分析?

除了爬虫,分析数据也是Python的重要用途之一,Excel能做的事,Python究竟怎么实现呢;Excel不能做的事,Python又是否能实现呢?利用电影票房数据,我们分别举一个例子说明:

A.Python分析

在做好数据采集和导入后,选择字段进行初步分析可以说是数据分析的必经之路。在Dataframe数据格式的帮助下,这个步骤变得很简单。

比如当我们想看单周票房第一的排名分别都是哪些电影时,可以使用pandas工具库中常用的方法,筛选出周票房为第一名的所有数据,并保留相同电影中周票房最高的数据进行分析整理:

import pandas as pd 
data = pd.read_csv('中国票房数据爬取测试20071-20192.csv',engine='python') 
data[data['平均上座人数']>20]['电影名'] 
#计算周票房第一随时间变化的结果,导入数据,并选择平均上座人数在20以上的电影为有效数据 
 
dataTop1_week = data[data['排名']==1][['电影名','周票房']] 
#取出周票房排名为第一名的所有数据,并保留“电影名”和“周票房”两列数据 
 
dataTop1_week = dataTop1_week.groupby('电影名').max()['周票房'].reset_index() 
#用“电影名”来分组数据,相同电影连续霸榜的选择最大的周票房保留,其他数据删除 
 
dataTop1_week = dataTop1_week.sort_values(by='周票房',ascending=False) 
#将数据按照“周票房”进行降序排序 
 
dataTop1_week.index = dataTop1_week['电影名'] 
del dataTop1_week['电影名'] 
#整理index列,使之变为电影名,并删掉原来的电影名列 
 
dataTop1_week 
#查看数据 

9行代码,我们完成了Excel里的透视表、拖动、排序等鼠标点击动作。最后再用Python中的可视化包matplotlib,快速出图:

B.函数化分析

以上是一个简单的统计分析过程。接下来就讲讲Excel基础功能不能做的事——自定义函数提效。观察数据可以发现,数据中记录了周票房和总票房的排名,那么刚刚计算了周票房排名的代码,还能不能复用做一张总票房分析呢?

当然可以,只要使用def函数和刚刚写好的代码建立自定义函数,并说明函数规则即可:

def pypic(pf): 
    #定义一个pypic函数,变量是pf 
    dataTop1_sum = data[['电影名',pf]] 
    #取出源数据中,列名为“电影名”和pf两列数据 
 
    dataTop1_sum = dataTop1_sum.groupby('电影名').max()[pf].reset_index() 
    #用“电影名”来分组数据,相同电影连续霸榜的选择最大的pf票房保留,其他数据删除 
 
    dataTop1_sum = dataTop1_sum.sort_values(by=pf,ascending=False) 
    #将数据按照pf进行降序排序 
 
    dataTop1_sum.index = dataTop1_sum['电影名'] 
    del dataTop1_sum['电影名'] 
    #整理index列,使之变为电影名,并删掉原来的电影名列 
 
    dataTop1_sum[:20].iloc[::-1].plot.barh(figsize = (6,10),color = 'orange') 
    name=pf+'top20分析' 
    plt.title(name) 
    #根据函数变量名出图 

定义函数后,批量出图so easy:

学会函数的构建,一个数据分析师才算真正能够告别Excel的鼠标点击模式,迈入高效分析的领域。

4.光看不练是永远不能入门的

如果只有一小时学习,以上就是大家一定要掌握的Python知识点。

如果只有1小时学Python,看这篇就够了的更多相关文章

  1. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  2. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  3. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  4. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  5. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  6. 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!

    想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!   很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...

  7. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  8. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  9. Vue学习看这篇就够

    Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ...

  10. 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...

随机推荐

  1. openresty开发系列12--lua介绍及常用数据类型简介

    openresty开发系列12--lua介绍及常用数据类型简介 lua介绍  1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...

  2. nginx多层反向代理获取客户端真实ip

    访问路径: 用户 --> www.chinasoft.cn(nginx反向代理) --> www.chinasoft.com(nginx反向代理) --> python服务端程序 经 ...

  3. shiro解决一个账号异地登录的问题

    如下,找到session中的信息删除即可,按照这个方式试了下.基本可用 在多台服务器部署时,前提必须实现session共享. /** * 登录认证 * @param token * @return * ...

  4. IE浏览器提示打印控件未安装的一些原因

    打印控件未安装!点击这里执行安装,安装后请刷新页面或重新进入.--该提示是写在LodopFuncs.js里的.相关本博客其他博文:提示“Web打印服务CLodop未安装启动”的各种原因和解决方法.C- ...

  5. 【Anaconda】关于conda使用环境未被激活的问题

    前言 在win10系统中安装Anaconda,并创建虚拟环境,但是不明白为什么切换环境之后并未激活要使用的虚拟环境. conda常用命令 activate // 切换到base环境 activate ...

  6. 03点睛Spring4.1-scope

    转载:https://www.iteye.com/blog/wiselyman-2210377 3.1 scope scope描述spring容器是怎么样新建类的实例的(bean); 在spring中 ...

  7. Xmanager教程

    简介 Xmanager是市场上领先的PC X服务器,可将X应用程序的强大功能带入Windows环境. 提供了强大的会话管理控制台,易于使用的X应用程序启动器,X服务器配置文件管理工具,SSH模块和高性 ...

  8. 利用ldirectord实现lvs后端realserver健康状态检查

    ldirectord用来实现LVS负载均衡资源在主.备节点间的故障转移.在首次启动时,ldirectord可以自动创建IPVS表.此外,它还可以监控各RealServer的运行状态,一旦发现某Real ...

  9. idea添加svn项目的两种方法

    1.是直接用svn客户端检出后,在idea直接打开其项目. 2.直接在idea里面拉取svn的项目

  10. QuickTime专业版 pro 注册码

    打开QuickTime Player下拉编辑菜单--选偏好设置--注册 Name: Dawn M Fredette Key: 4UJ2-5NLF-HFFA-9JW3-X2KV 重新启动 QuickTi ...