文章目录
数据分析前景
数据分析师的在企业中的主要做用是支持与指导业务发bai展。基本合格的数据分析师支持业务发展,优秀的数据分析师指导业务发展。python
岗位缺口大,就业薪资高,并且这个岗位对学历的要求不是特别高,对经验的要求也不算严格,从而数据分析师,在大数据时代,迎来了黄金就业期。mysql
经过搜索BOSS直聘和领英,发现其上面有上有10万+个数据分析师职位空缺,其中绝大部分是互联网行业的需求。值得注意的是,虽然国内现有不少数据分析师员工,但其数量占比依旧不多,职位空缺却占到了市场的50%之多。大多数热门岗位都会在招聘JD中,给出“具有数据分析能力”这样的招聘条件。web
从销售、市场,到运营、产品经理、用户研究等,都试图从各类繁杂数据中看出点门道,得到对市场、产品、消费者等方面的洞见。sql
做为一名18级的大数据学生,大一的职业规划我写的就是数据分析师。
那时候菜啊,什么都不会。
如今也菜啊,可是奋六世之余烈,我表示能够一试。数据库
秉持着一向的好习惯,不懂就买课。在摸索了两天无果以后,我果断借了书,买了课。这不,来与你们共享来了嘛。json
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的不足之处
一、网络内容爬取。
话说术业有专攻,对于爬虫,有专门的爬虫库,还有scrapy框架。
二、复杂的SQL存储操做
pandas 的 to_sql方法存储数据不够灵活。
三、内存受限
受限于计算机的内存,没法分析超过内存大小的数据。
解决方案:
归并排序思想。
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有点超纲之外,其余的应该是讲明白了吧。
本文同步分享在 博客“看,将来”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。