文章目录
数据分析前景
数据分析师的在企业中的主要作用是支持与指导业务发bai展。基本合格的数据分析师支持业务发展,优秀的数据分析师指导业务发展。
岗位缺口大,就业薪资高,而且这个岗位对学历的要求不是特别高,对经验的要求也不算严格,从而数据分析师,在大数据时代,迎来了黄金就业期。
通过搜索BOSS直聘和领英,发现其上面有上有10万+个数据分析师职位空缺,其中绝大部分是互联网行业的需求。值得注意的是,虽然国内现有很多数据分析师员工,但其数量占比依旧很少,职位空缺却占到了市场的50%之多。大多数热门岗位都会在招聘JD中,给出“具备数据分析能力”这样的招聘条件。
从销售、市场,到运营、产品经理、用户研究等,都试图从各种繁杂数据中看出点门道,获得对市场、产品、消费者等方面的洞见。
作为一名18级的大数据学生,大一的职业规划我写的就是数据分析师。
那时候菜啊,什么都不会。
现在也菜啊,但是奋六世之余烈,我表示可以一试。
秉持着一贯的好习惯,不懂就买课。在摸索了两天无果之后,我果断借了书,买了课。这不,来与大家共享来了嘛。
Why pandas?
pandas创始人Wes McKinney对pandas的讲解
在pandas的官网(Python Data Analysis Library)上,我们可以看到有一段pandas创始人Wes McKinney对pandas的讲解,从创始人的角度我们可以直接理解pandas这个python的数据分析库的主要特性和发展方向。
McKinney一共总结了9个特性,我们来一个个过一下。
1.对表格类型的数据的读取和输出速度非常快。(个人对比excel和pandas,的确pandas不会死机....)在他的演示中,我们可以看到读取489597行,6列的数据只要0.9s。
2.时间序列处理。经常用在金融应用中。
3.数据队列。可以把不同队列的数据进行基本运算。
4.处理缺失数据。
5.分组运算。比如我们在前面泰坦尼克号中的groupby。
6.分级索引。
7.数据的合并和加入。
8.数据透视表。
9.数据归纳和分析。
pandas的热度
再来看看pandas的流行度:
pandas对于数据分析
pandas全面支持数据分析项目的研发步骤:
具体我就不展开了吧,将会陆陆续续在之后的博客中展现。
pandas的不足之处
1、网络内容爬取。
话说术业有专攻,对于爬虫,有专门的爬虫库,还有scrapy框架。
2、复杂的SQL存储操作
pandas 的 to_sql方法存储数据不够灵活。
3、内存受限
受限于计算机的内存,无法分析超过内存大小的数据。
解决方案:
归并排序思想。
Dask集群框架。
pandas获取数据
此处的获取数据,并不是说去网络上爬取,而是从文件中获取。
读取csv文件
方法:
pandas.read_csv(filepath_or_buffer,header='infer',names=None,usecols=None,dtype=None)
#这里提供了常用参数,不代表只有这些参数
参数释义:
filepath_or_buffer : 字符串,文件路径,或者文件句柄,或者字符串IO
header :整数,或整数列表,缺省值 ‘infer’将第一行视作列名,
如果names参数有值,且header=0将使用names参数作为列名。header可以是一个整数的列表,如[0,1,3]。
names : 列名数组,缺省值 None
usecols:指定返回的列
dtype:指定列的数据类型。
看不懂没关系,马上就实操演示一下呗。
开始实操前,先来看几个知识点:
head方法可以查看前五条数据
tail方法用来查看最后五条数据
dtypes属性可以用来查看列数据类型
原始数据:
测试
import pandas as pd
df = pd.read_csv('test.csv')
print(df.head(7)) # 默认是5行,可以人为指定
结果:
a b
0 1.0 2
1 3.0 4
2 NaN 5
import pandas as pd
df = pd.read_csv('test.csv',header=1) # 指定csv文件第一行为列名称
print(df.head(7)) # 默认是5行,可以认为指定
结果:
1 2
0 3.0 4
1 NaN 5
import pandas as pd
df = pd.read_csv('test.csv',names = [1,2,3,4,5]) # 指定列名称
print(df.head(7))
1 2 3 4 5
0 a b NaN NaN NaN
1 1 2 NaN NaN NaN
2 3 4 NaN NaN NaN
3 NaN 5 NaN NaN NaN
指定的列名称是从右往左排的,列名一定要起全,不然会有几页无法调用了。
import pandas as pd
df = pd.read_csv('test.csv',header = 0,names = ['a','b'],usecols=['a']) # 返回指定列
print(df.head())
a
0 1.0
1 3.0
2 NaN
import pandas as pd
df = pd.read_csv('test.csv')
print(df.dtypes) #查看列类型
a float64
b int64
dtype: object
修改列类型:
import pandas as pd
df = pd.read_csv('test.csv',dtype={'b':object}) #修改列类型
print(df.dtypes) #查看列类型
a float64
b object
dtype: object
我讲明白了吗?
读取JSON文件
pandas.read_json(path_or_buf=None, orient=None, dtype=True, lines=False)
演示
由于对方连课件都不发,那就莫得办法咯
以records格式读取JSON文件:
读取JSON Lines文件
读取Excel文件
方法:
read_excel(io,sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None,usecols=None)
参数释义:
io:Excel路径
sheetname:指定工作表名或编号,编号从0开始
skiprows : 省略指定行数的数据
skip_footer :省略从尾部数的int行数据
index_col : 指定列为索引列
废话不多说,直接演示
这是我抓下来的电影票房数据,有需要的话微信搜 “Look Future”,后台回复电影票房数据。
一运行就报了这个错:
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.
什么意思呢?说明我们还需要去安装xlrd的库了。
实验
import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file).head(5)
print(df)
运行一下,一堆的错啊,让人防不胜防。
抽了一下:xlrd.biffh.XLRDError: Excel xlsx file; not supported
说是xlrd版本太高,不支持xlsx文件了,把版本调到1.2吧
然后运行出来:
上映日期 片名 总票房
0 2019 柬爱 9.63W
1 2019 那座桥 6.05W
2 2019 决战中途岛 2.92Y
3 2019 小巷管家 2433.22W
4 2019 功夫小镇 16.97W
(用的是另一张表,所以时间不一样)
我给你们讲啊,我就特别的讨厌这种受制于人的感觉,人家改动一下,你怎么办?
上次开发一个自动化软件,依赖于一个平台,结果后来人家平台出了个活动,导致我们的小软件就得大改。
就很难受。
读取指定工作表
import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作').head(5) #指定读取工作表
print(df)
上映日期 片名 总票房
0 2019 功夫小镇 16.97W
1 2019 越域重生 6.55W
2 2019 终结者:黑暗命运 3.51Y
3 2019 杨靖宇 127.81W
4 2019 二凤 61.22W
指定列名称
import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作',header=1).head(5) #指定列名称
print(df)
2019 功夫小镇 16.97W
0 2019 越域重生 6.55W
1 2019 终结者:黑暗命运 3.51Y
2 2019 杨靖宇 127.81W
3 2019 二凤 61.22W
4 2019 双子杀手 2.32Y
读取指定列
import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作',usecols=['片名','总票房']).head(5) #指定列名称
print(df)
你要那个列不存在,是会报错的
片名 总票房
0 功夫小镇 16.97W
1 越域重生 6.55W
2 终结者:黑暗命运 3.51Y
3 杨靖宇 127.81W
4 二凤 61.22W
略过开始/结束行
import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='英语',usecols=['片名','总票房'],skiprows=10,skipfooter=20).head(5)
print(df)
这样会报什么错呢?
ValueError: Usecols do not match columns, columns expected but not found: [‘片名’, ‘总票房’]
请各位自行思考个中缘由、
包括还有一个参数:指定索引,如果操作不当,也会有这个问题。
读取MySQL的数据库文件
这里需要一定的MySQL功底,如果不熟悉的话,建议先移步:MySQL见闻录 - 入门之旅
read其实就是两个函数的壳:
read_sql_query:通过一个SQL语句读取数据
read_sql_table:读取数据库中的一个表(table)
pandas.read_sql(sql, con, index_col=None,columns=None)
参数释义:
sql:表名、SQL语句
con:建立连接
index_col:索引列
测试
环境配置:
首先你需要有安装MySQL环境,这些在这里都不多说,上面那篇MySQL入门之旅很详细。
整完之后,开个户:
from sqlalchemy import create_engine
import pandas as pd
# mysql+pymysql://用户名:密码@服务器IP/数据库名
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
# 我这里又换新人了
print(engine.execute('show tables').fetchall())
# 配置引擎,并确定引擎可用
除了代码中的那个包,还要安装两个包。
pymysql和cryctography、
[('presidents',)]
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
print(pd.read_sql('presidents',con=engine))
表里面什么都没有,自然什么都读不出来了。
Empty DataFrame
Columns: [last_name, first_name]
Index: []
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
#print(pd.read_sql('presidents',con=engine,index_col='first_name')) # 使用索引列
pd.read_sql('select * from presidents',con=engine) # 直接使用SQL语句
由于表中没有数据,所以什么也读不出来。
我觉得,出了那个json没有素材,MySQL有点超纲以外,其他的应该是讲明白了吧。