Py学习  »  Python

3 步理清 Python 数据分析关键点,新手必看

进击的Coder • 4 年前 • 299 次点击  

阅读本文大概需要 5 分钟。


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


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



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



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


A.变量和赋值

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


  • 在内存中创建了一个值为 4 的整型数据

  • 在内存中创建了一个名为 的变量,并把它指向 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


请阅读代码块里的代码和注释,你会发现 Python 是及其易读易懂的。

B.数据类型

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

  • 列表 list(Python 内置)

  • 字典 dict(Python 内置)

  • DataFrame(工具包 pandas 下的数据类型,需要 import pandas 才能调用)


它们分别是这么写的:


列表(list):

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

list 是一种有序的集合,里面的元素可以是之前提到的任何一种数据格式和数据类型(整型、浮点、列表……),并可以随时指定顺序添加其中的元素,其形式是:
#ist是一个可变的有序表,所以,可以往list中追加元素到末尾:
liebiao.append('瘦')
print(liebiao)
#结果1
>>>[12.223, -3'刘强东''章泽天''周杰伦''昆凌', ['微博''B站''抖音'], '瘦']

#也可以把元素插入到指定的位置,比如索引号为5的位置,插入“胖”这个元素:
liebiao.insert(5'胖')
print(liebiao)
#结果2
>>>[12.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 知识点。光看不练永远都会是门外汉,如果你有兴趣学习 Python 数据分析,却在过程中感到困惑,欢迎来参加我在网易云课堂的免费直播,每晚一个主题,有学有练,让你快速入门 Python 数据分析:


不间断直播陪你从入门到精通

 

扫码即可预约免费直播席位(限前 100)



01

Python 免费直播课,每周放送


第一场  5 月 20 日 周一 晚上 8 点(可回看)

《初学者必看:一定需要规避的 Python 学习误区》

1. Python 基础语法学习路径

2. 十大易错点分别是哪些?

3. 初步用 Python 实现数据清洗



第二场  5 月 21 日 周二 晚上 8 点

《用 Python 处理文本数据:星座运势分析》

1. Python 处理文本数据

2. Pandas 处理文本数据方法

3. 案例实现:星座运势文本数据处理



第三场  5 月 22 日 周三 晚上 8 点

《用 Python 做词云图:中国电影十年票房分析》

1.中国票房数据采集

2.票房排名及上榜电影分析

3.用词云图看看票房评价关键字



第四场  5 月 23 日 周四 晚上 8 点

《超级干货:手把手教可视化工具 Tableau》

1.什么是商业智能?

2.Tableau 介绍及基础操作

3.基于 Tableau 的数据可视化套路


直播预约方式

扫码即可预约免费直播席位(限前 100)


02

一周免费课程


配练习材料

课程大纲

1. Python 语言入门

2. 每月净收入模型构建

3. 每月支出模型构建

4. 不同情况下的花呗还款场景模拟

5. 负债积累问题

6. 如何用图表讲好一个故事?(彩蛋)


03

学习资料包,入门有方向



04

福利获取方式


所有以上福利,扫码添加网易云课堂小助手即可获得

微信号:neteasepython1

席位有限,先到先得

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/33395
 
299 次点击