跟我一块儿学点 数据分析 -- 第一天:上手pandas(1)

在这里插入图片描述

数据分析前景

数据分析师的在企业中的主要做用是支持与指导业务发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见闻录 - 入门之旅

《深刻浅出SQL》问答录

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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索