python实战演练基础知识_从零开始第6步:实战之巩固 python 基础知识

▍『1』熟悉 python 基本知识

前面几篇文章分别讲述了 python 基本语法、数据类型、if 和循环语句以及模块。现在我们来巩固前边的知识,用 《数!据!分!析!告诉你:老板眼中的数据分析》 作为例子进行实战。

这篇文章主要是熟悉 python 基本知识,所以不采用 python 的模块进行数据处理。代码略显繁琐,实际数据分析过程中会采用 python 的模块,很多功能都无需自己写代码。

▍『2』 实战

数据为爬取的数据分析相关的职业信息,具体文件可留言公众号后台索取。数据如下图所示。

每一行为一条职业信息,包含职位id、地区、学历要求、公司发展阶段、领域、名称、工资、公司规模和工作年限要求信息。

♢ 「2.1」数据读取

首先我们编写读取数据的代码,在 python 中,我们可以用 open 打开文件,并读取文件内容。

读取内容的方式有三种:read

readline

readlines

read 会将整个文件读取为字符串,最终得到一个字符串;readline读取文件的一行,得到一行的字符串;readlines按行读取文件,得到一个由每行的字符串组成的列表。根据我们的需求,每一行为一条职业信息,采用 readlines 读取数据。

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法与其他语言是一致的。如打开 clean_lagou.csv 文件并读取。

# 打开文件

f = open('clean_lagou.csv')

# 读取文件内容

lines = f.readlines()

# 关闭文件

f.close()

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源。由于文件读写时都有可能产生错误,一旦出错,后面的f.close()就不会调用。Python 引入了 with 语句,离开 with 语句代码块时文件自动关闭。所以,我们读取文件建议采取的写法为:

with open('clean_lagou.csv') as f:

lines = f.readlines()

♢ 「2.2」数据数据预处理

现在,lines 为包含我们内容的列表,列表中的每一个元素为一条职位信息,而且它是一个字符串,如 '4021708,浦东新区,硕士,不需要融资,"移动互联网,金融",上海数禾信息科技有限公司,8k-12k,150-500人,不限'。很明显的,我们需要对其进行分割,将每条信息分离开来,根据内容, , 号将各条信息分离,所以我们可以根据 , 分割字符串。如果你仔细观察,你会注意到有些 , 并不是各条信息的分离点,如 "移动互联网,金融" 中的逗号。所以,我们写一个函数,它可以根据逗号分割字符串,但是引号中的逗号不分割字符串。

def splitString(str):

ss = ""

is_quote = False

lstStr = []

# 循环字符串中的每一个字符

for s in str:

# 如果不是逗号也不是引号内

# 将字符连接

if s != ',' and s != "\"":

ss = ss + s

# 如果是逗号且不是引号内的内容

# 将子字符串加入 lstStr 列表

elif s == ',' and is_quote == False:

lstStr.append(ss)

ss = ""

# 如果是引号且没标记为引号内

# 引号开始

# 标记为引号内并跳出该次循环

elif s == "\"" and is_quote == False:

is_quote = True

continue

# 如果是引号且标记为引号内

# 引号结束

# 标记为引号外

elif s == "\"" and is_quote == True:

is_quote = False

continue

# 如果是逗号是引用内的

# 连接字符

# 而不是将子字符串加入 lstStr

elif s == ',' and is_quote == True:

ss = ss + s

return lstStr

上面的函数可以达到我们的目的,现在我们创建一个 data 列表,保存我们分隔后的数据。

data = []

for line in lines:

data.append(splitString(line))

同时,第一行为文件头,我们将文件头删除。

data.pop(0)

♢ 「2.3」数据薪酬分布

我们以薪酬分布为例,说明操作过程,其他相关内容可自己动手。

首先,将薪酬数据从 data 中提取出来。

salary = []

for i in data:

salary.append(i[6])

实际上,我们可以采用 python 列表推导式,这样代码更加简洁,历表推导式的具体说明可网上查看。

salary = [i[6] for i in data]

现在我们统计每个薪酬水平的数量,采用 set 列出所有薪酬水平,并利用 count 方法统计 salary 中每个薪酬水平的个数。最后,将薪酬水平及其个数写入字典 salary_count。

num = []

for c in set(salary):

num.append(salary.count(c))

salary_count = dict(zip(set(salary), num))

上面同样可以写成列表推导式,请自行试试。

根据薪酬水平的个数排序。

salary_sort = sorted(salary_count.items(), key=lambda kv: kv[1], reverse=True)

如果你还有印象的话,count_items() 返回的是由键和值组成的列表,我们告诉 sorted 函数,需要采用值来排序,这里采用了 lambda 表达式。lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。上式 lambda 函数等价于:

def func(x):

return x[1]

这样,我们就得到了一个数量从高到底的排序列表,列表中的元素为薪酬水平及其个数。

最后,采用 matplotlib 包中的 pyplot 模块进行画图,一般来说,python 都是默认安装了 matplotlib ,如果没有安装,请采用 pip install matplotlib 安装。

同样地,我们采用列表推导式将薪酬水平赋值为 x ,个数赋值为 y。这里仅采用数量最大的 10 个值。

x = [i[0] for i in salary_sort[:10]]

y = [i[1] for i in salary_sort[:10]]

导入模块及画图。

import matplotlib.pyplot as plt

plt.bar(x,y)

plt.xticks(rotation=70)

▍『3』结语

该篇主要目的为熟悉 python 基本知识,所以代码稍微繁琐。若是采用模块进行上述处理,可能 10 多行代码可以搞定。在之后的文章中,将对 python 数据分析模块进行介绍和实战。

从零单排06:实战之巩固 python 基础知识​mp.weixin.qq.com

搜索 ”data2nb“ 关注公众号 ”从零单排数据分析“,获取源码和数据,共同学习,一起努力鸭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值