Python数据分析I
Python数据分析概述
数据分析的含义与目标
统计分析方法
提取有用信息
研究、概括、总结
Python与数据分析
Python: Guido Van Rossum Christmas Holiday, 1989
特点:简介 开发效率搞 运算速度慢(相对于C++和Java) 胶水特性(集成C语言)
数据分析:numpy、scipy、matplotlib、pandas、scikit-learn、keras
Python数据分析大家族
numpy(Numeric Python): 数据结构基础。是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。
scipy: 强大的科学计算方法(矩阵分析、信号和图像分析、数理分析……)
matplotlib: 丰富的可视化套件
pandas: 基础数据分析套件。该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。
scikit-learn: 强大的数据分析建模库
keras: (深度)人工神经网络
Python环境搭建
平台:Windows、Linux、MacOS
科学计算工具:Anaconda
Python数据分析基础技术
I. numpy
关键词: 开源 数据计算扩展
功能: ndarray 多维操作 线性代数
ndarray
#encoding=utf-8
import numpy as np
def main():
lst=[[1,2,3],[2,4,6]]
print(type(lst))
np_lst=np.array(lst)
print(type(lst))
np_lst=np.array(lst,dtype=np.float)
# bool
# int,int8,int16,int32,int64,int128
# uint8,uint16,uint32,uint64,uint128,
# float16/32/64,complex64/128
print(np_lst.shape) # 行列数
print(np_lst.ndim) # 维数
print(np_lst.dtype) # 数据类型
print(np_lst.itemsize) # 每个数据的数据存储大小
print(np_lst.size) # 元素个数
some kinds of array
#encoding=utf-8
import numpy as np
def main():
print(np.zeros([2, 4]))
print(np.ones([3, 5]))
print("Rand:")
print(np.random.rand()) # 0-1内均匀分布随机数
print(np.random.rand(2, 4))
print("RandInt:")
print(np.random.randint(1, 10, 3)) # 3个1-10内随机分布整数
print("Randn:")
print(np.random.randn(2, 4)) # 标准正态随机数
print("Choice:")
print(np.random.choice([10, 20, 30])) # 指定范围内的随机数
print("Distribute:")
print(np.random.beta(1, 10, 100)) # 比如Beta分布,Dirichlet分布etc
opeartion
#encoding=utf-8
import numpy as np
def main():
print(np.arange(1, 11).reshape([2, 5]))
lst = np.arange(1, 11).reshape([2, 5])
print("Exp:")
print(np.exp(lst))
print("Exp2:")
print(np.exp2(lst))
print("Sqrt:")
print(np.sqrt(lst))
print("Sin:")
print(np.sin(lst))
print("Log:")
print(np.log(lst))
lst = np.array([[[1, 2, 3, 4],
[4, 5, 6, 7]],
[[7, 8, 9, 10],
[10, 11, 12, 13]],
[[14, 15, 16, 17],
[18, 19, 20, 21]]
])
print(lst)
print("Sum:")
print(lst.sum()) # 所有元素求和
print(lst.sum(axis=0)) # 最外层求和
print(lst.sum(axis=1)) # 第二层求和
print(lst.sum(axis=-1)) # 最里层求和
print("Max:")
print(lst.max())
print("Min:")
print(lst.min())
lst1 = np.array([10, 20, 30, 40])
lst2 = np.array([4, 3, 2, 1])
print("Add:")
print(lst1 + lst2)
print("Sub:")
print(lst1 - lst2)
print("Mul:")
print(lst1 * lst2)
print("Div:")
print(lst1 / lst2)
print("Square:")
print(lst1 ** lst2)
print("Dot:")
print(np.dot(lst1.reshape([2, 2]), lst2.reshape([2, 2])))
print("Cancatenate")
print(np.concatenate((lst1, lst2), axis=0))
print(np.vstack((lst1, lst2))) # 按照行拼接
print(np.hstack((lst1, lst2))) # 按照列拼接
print(np.split(lst1, 2)) # 向量拆分
print(np.copy(lst1)) # 向量拷贝
liner algebra
#encoding=utf-8
import numpy as np
from numpy.linalg import *
def main():
## Liner
print(np.eye(3))
lst = np.array([[1, 2],
[3, 4]])
print("Inv:")
print(inv(lst))
print("T:")
print(lst.transpose())
print("Det:")
print(det(lst))
print("Eig:")
print(eig(lst))
y = np.array([[5], [7]])
print("Solve")
print(solve(lst, y))
others
#encoding=utf-8
import numpy as np
def main():
## Other
print("FFT:")
print(np.fft.fft(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1])))
print("Coef:")
print(np.corrcoef([1, 0, 1], [0, 2, 1]))
print("Poly:")
print(np.poly1d([2, 1, 3])) #一元多次方程
II. matplotlib
关键词: 绘图库
Line
#encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt
def Main():
## line
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
c, s = np.cos(x), np.sin(x)
plt.plot(x, c)
plt.figure(1)
plt.plot(x, c, color="blue", linewidth=1.5, linestyle="-", label="COS", alpha=0.6)
plt.plot(x, s, "r*", label="SIN", alpha=0.6)
plt.title("Cos & Sin", size=16)
ax = plt.gca() # 轴编辑器
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$']) # 正则表达
plt.yticks(np.linspace(-1, 1, 5, endpoint=True))
for label in ax.get_xticklabels()+ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor="white", edgecolor="none", alpha=0.2))
plt.legend(loc="upper left")
plt.grid()
# plt.axis([-2, 1, -0.5, 1])
# fill:填充
plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green", alpha=0.25)
t = 1
plt.plot([t, t], [0, np.cos(t)], "y", linewidth=3, linestyle="--")
plt.annotate("cos(1)", xy=(t, np.cos(1)), xycoords="data", xytext=(+10, +30),textcoords="offset points", arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green", alpha=0.25)
第一个参数x表示x轴,第二个参数 np.abs(x)表示x的绝对值,np.abs(x) < 0.5是一个判定变量,c表示y轴,c > 0.5是一个判定条件。
当np.abs(x) < 0.5为真(1),从y轴的1(满足c>0.5)开始往两边填充(当然X轴上是-0.5到0.5之间的区域),此时填充的也就是图上方的两小块。当np.abs(x) >= 0.5为假(0),从y轴的0开始向上填充,当然只填充c>0.5的区域,也就是图中那两个大的对称区域。

Many types of figures
#encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt
def Main():
fig = plt.figure()
## scatter
ax = fig.add_subplot(3, 3, 1)
n = 128
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
T = np.arctan2(Y, X)
# plt.axes([0.025, 0.025, 0.95, 0.95])
plt.scatter(X, Y, s=75, c=T, alpha=.5)
plt.xlim(-1.5, 1.5), plt.xticks([])
plt.ylim(-1.5, 1.5), plt.yticks([])
plt.axis()
plt.title("scatter")
plt.xlabel("x")
plt.ylabel("y")
## bar
fig.add_subplot(332)
n = 10
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1, n)
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x, y in zip(X,Y1):
plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X,Y2):
plt.text(x + 0.4, - y - 0.05, '%.2f' % y, ha='center', va='top')
## Pie
fig.add_subplot(333)
n = 20
Z = np.ones(n)
Z[-1] *= 2
# explode扇形离中心距离
plt.pie(Z, explode=Z*.05, colors=['%f' % (i / float(n)) for i in range(n)],
labels=['%.2f' % (i / float(n)) for i in range(n)])
plt.gca().set_aspect('equal') # 圆形
plt.xticks([]), plt.yticks([])
## polar
fig.add_subplot(334, polar=True)
n = 20
theta = np.arange(0, 2 * np.pi, 2 * np.pi / n)
radii = 10 * np.random.rand(n)
plt.polar(theta, radii)
# plt.plot(theta, radii)
## heatmap
fig.add_subplot(335)
from matplotlib import cm
data = np.random.rand(5, 10)
cmap = cm.Blues
map = plt.imshow(data, interpolation='nearest', cmap=cmap, aspect='auto', vmin=0, vmax=1)
## 3D
from mpl_toolkits.mplot3d import Axes3D
ax = fig.add_subplot(336, projection="3d")
ax.scatter(1, 1, 3, s=100)
## hot map
fig.add_subplot(313)
def f(x, y):
return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(- x ** 2 - y ** 2)
n = 256
x = np.linspace(-3, 3, n * 2)
y = np.linspace(-3, 3, n)
X, Y = np.meshgrid(x, y)
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
plt.savefig("./data/fig.png")
plt.show()

Python数据分析I的更多相关文章
- [Python数据分析]新股破板买入,赚钱几率如何?
这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...
- 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来
最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- Python数据分析(二): Numpy技巧 (1/4)
In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np
- Python数据分析(二): Numpy技巧 (2/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 昨天晚上发了第一 ...
- Python数据分析(二): Numpy技巧 (3/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 昨天晚上发了第一 ...
- Python数据分析(二): Numpy技巧 (4/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 第一部分: ht ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
随机推荐
- firefox浏览器播放音频
之前做的系统,在firefox浏览器下有更好的使用体验.因此要求客户统一使用firefox浏览器,前段时间客户要求在系统中加入音频效果. 在网上查了下,主要用到的标签有<bgsound>, ...
- 暑期集训20190729 字典序(dictionary)
[题目描述] 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面. 在此基础上,你需要让1尽可能靠前,然后你需要让2尽可能靠前,然后是3,4,5,…,n ...
- 大公司喜欢问的Java集合类面试题
Collection Collection是基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一 ...
- [考试反思]1024csp-s模拟测试86:消耗
%%%两个没素质的和一个萌两小时AK 最近貌似总是可以比较快速的拿下T1,然后T2打到考试结束... T1是套路题没什么好说的. T2是一个比较蠢的博弈题,我花了很长时间干各种乱七八糟的事 什么打表啊 ...
- IoTClient开发4 - ModBusTcp协议服务端模拟
前言 上篇我们实现了ModBusTcp协议的客户端读写,可是在很多时候编写业务代码之前是没有现场环境的.总不能在客户现场去写代码,或是蒙着眼睛写然后求神拜佛不出错,又或是在办公室部署一套硬件环境.怎么 ...
- Elasticsearch系列---Elasticsearch的基本概念及工作原理
基本概念 Elasticsearch有几个核心的概念,花几分钟时间了解一下,有助于后面章节的学习. NRT Near Realtime,近实时,有两个层面的含义,一是从写入一条数据到这条数据可以被搜索 ...
- CentOS7 reset脚本,用于初始化新的虚拟机
能用,有待完善 CentOS7测试 哈哈 #!/bin/bash #************************************************************** #Au ...
- Ubuntu18.04.3 LTS初体验
安装系统 想来虚拟机安装太慢,正好有一台旧电脑,干脆整个乌班图系统. 启动盘工具:UltraISO,老牌工具了. 上官网下载ISO镜像文件: https://cn.ubuntu.com/downloa ...
- [Office] Resources for Office Development
Office 2013 Document (.chm) download page: http://www.microsoft.com/en-us/download/details.aspx?id=4 ...
- 红帽学习笔记[RHCE]网络配置与路由转发
目录 网络配置基本的IPV4与IPV6 拓扑图 操作 新加一块网卡 将增加的网卡分别加到两台虚拟机上 在两台虚拟机上配置IPV4与 IPV6 配置域名访问 拓展路由转发 拓扑图 操作 关于网关设置 重 ...