一个在线 Python
编程环境,每行的代码在敲击 Shift + Enter
后单独执行,便于初学者快速掌握编程语言。 Jupyter 能够完美利用 Python 丰富的数据分析和科学计算的工具库,实现一些非大数据的分析计算需求。javascript
用于操做行列数据,方便地实现各类数据分析的形式。html
因为 Python 自己的限制,若是须要计算的数据太大,而没法一次载入内存,则须要分块导入数据,并对查询作相应的修改。java
(现充请跳过本节,直接访问线上地址,点击 Welcome to Python.ipynb
)git
在命令行中输入:github
pip install jupyterpip install pandaspip install matplotlib
cd到指定目录,启动:数据库
jupyter notebook
在 Jupyter Notebook 中,Pandas 是操做数据的工具,matplotlib 是执行做图的工具。编程
在 Cell 中输入并执行:api
import pandas as pdimport matplotlib.pyplot as plt
在 Cell 中输入并执行:数组
df = pd.read_csv('./data.csv', index_col='id')
因为在线环境没法建立文件,也能够执行如下语句建立一个 DataFrame
:数据结构
dates = pd.date_range('20130101', periods=6)df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
index_col
的做用是索引,是为了高效查询创建的特殊数据结构,简单说(不许确)是黄页
如今想象你手边有Excel(固然你也能够真的开一个)显示以下表格:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
行的选取
在 Cell 中输入并执行:
rows = df[0:3]
选择第0行至第3行,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
2.列的选取
cols = df[['A', 'B', 'C']]
选择列A,B,C,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
3.块的选取
df.loc['20130102':'20130104',['A','B']]
选择行和列组成的数据块,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
Pandas 中的基本数据结构有二,Series
和 Dataframe
。 Series
用来建立行,也能够理解为一维数组。 Dataframe
用来建立块,或称为矩阵,表格。
建立一个数组[1,1,2,3,5]:
s = pd.Series([1,1,2,3,5])
建立一个 6x4
的表格块,单元格内容为随机数列名为 A,B,C,D。
pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
从已有的列建立一个新的列
df['sumAB'] = pd.Series(df['A'] + df['B'], index=df.index)df['10A'] = pd.Series(df['A']*10, index=df.index)
df['A'] + df['B']
表示两列对应单元格的相加
df['A']*10
表示列A每一个单元格 *10
运算后df的值以下:
date(索引) | A | B | C | D | sumAB | 10A |
---|---|---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 | 0.186249 | 4.69112 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 | 1.038897 | 12.12112 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 | -2.966418 | -8.61849 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 | 0.014784 | 7.21555 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 | 0.142048 | -4.24972 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 | -0.560042 | -6.73690 |
在方括号中加入判断条件来过滤行,条件必需返回 True
或者 False
df[(df.index >= '2013-01-01') & (df.index <= '2013-01-03')] df[df['A'] > 0]
为了快速了解数据的结构,一些值得掌握的指令以下:
# 查看表头5行
df.head(5)
# 查看表末5行 df.tail(5) # 查看列的名字 df.columns # 查看表格当前的值 df.values # 查看全部列的统计描述,包括平均值,标准差,最大最小值,以及25%,50%,75%的 percentile 值 df.describe() # 对表按照A列升序排序 df.sort_values(by=’A’)
Pandas 与 matplotlib 配合使用,能够支持几乎全部经常使用的图表形式,这里以经常使用的直方图为例,来观察一个典型的独立随机变量的正态分布:
# 首先打开图表行内显示%matplotlib inline# 生成600个随机数(符合正态分布),存放在 Series 或 DataFrame 的某一列中nd = pd.Series(np.random.randn(600))# bins 表示直方图的方块数# range 表示图表显示的范围nd.hist(bins=100, range=(-5,5))
结果如图所示:
通过了这几节,想必现充们仅仅学会了例子中的代码,若是想进一步了解,请参考如下文档:
进一步的使用须要对 Python 和 Pandas 作全面的了解,能够参考如下书籍:
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */ var disqus_shortname = 'chenhfblog'; // required: replace example with your forum shortname /* * * DON'T EDIT BELOW THIS LINE * * */ (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();
<div class="footer"> <div class="contact"> <p> GITHUB <br> josherichchenATgmail.com </p> </div> <div class="contact"> <p> <a href="https://github.com/josherich">github.com/josherich</a> <br> </p> </div> </div>