资讯专栏INFORMATION COLUMN

Python数据分析实用程序

mozillazg / 1382人阅读

摘要:机器学习由于数据量较大,技术已成为必要。以下脚本演示了世界银行数据的线性回归实用程序和缓存下载程序省略了水印和绘图标签的代码代码应显示以下图像该计划下载年世界银行数据,并将婴儿死亡率与人均进行对比。

来源 | 愿码(ChainDesk.CN)内容编辑

愿码Slogan | 连接每个程序员的故事

网站 | http://chaindesk.cn

愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。

官方公众号 | 愿码 | 愿码服务号 | 区块链部落

免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码


本文阅读时长:13min

本文包含以下部分:

数据分析,数据科学,大数据

Python的数据分析简史

dautil的高级概述

IPython笔记本实用程序

下载数据

绘制实用程序

揭开Docker的神秘面纱

数据分析,数据科学,大数据

您可能已经看到维恩图将数据科学描述为数学/统计学,计算机科学和领域专业知识的交集。数据分析是永恒的,并且在数据科学和计算机科学之前存在。您可以使用笔和纸进行数据分析,并在更现代的时候使用袖珍计算器进行数据分析。

数据分析涉及许多方面,例如做出决策或提出新的假设和问题。围绕数据科学和大数据的炒作,状态和经济回报让我想起了数据仓库和商业智能成为流行语的时间。商业智能和数据仓库的最终目标是构建管理仪表板。这涉及很多政治和组织方面,但在技术方面,主要是关于数据库。另一方面,数据科学不是以数据库为中心的,而是在很大程度上依赖于机器学习。机器学习由于数据量较大,技术已成为必要。数据增长是由世界人口的增长和社交媒体和移动设备等新技术的兴起引起的。实际上,数据增长可能是我们可以确定的唯一趋势。构建仪表板和应用机器学习之间的区别与搜索引擎的演变方式类似。

搜索引擎最初只不过是手工创建的组织良好的链接集合。最终,自动化方法获胜。由于将及时创建更多数据(而不是销毁),我们可以预期自动数据分析会增加。

Python的数据分析简史

1989年:Guido van Rossum在荷兰的CWI实施了第一个Python版本,作为圣诞节爱好项目。

1995年:Jim Hugunin创建了NumPy的前身Numeric。

1999年:Pearu Peterson将f2py描述为Fortran和Python之间的桥梁。

2000:Python 2.0发布。

2001:SciPy库发布。此外,还创建了Numarray,一个竞争的数字库。费尔南多佩雷斯发布了IPython,这是一个下午的黑客攻击。NLTK作为一个研究项目发布。

2002年:John Hunter创建了matplotlib库。

2005年:NumPy由Travis Oliphant发布。最初,NumPy是Numeric扩展,其功能受到Numarray的启发。

2006:NumPy 1.0发布。SQLAlchemy的第一个版本发布了。

2007年:scikit-learn项目由David Cournapeau发起为Google Summer of Code项目。Cython是从Pyrex分叉的。Cython后来被大量用于熊猫和scikit-学习以提高性能。

2008年:Wes McKinney开始研究Pandas。Python 3.0发布了。

2011:IPython 0.12版本引入了IPython笔记本。Packt发布了NumPy 1.5初学者指南。

2012年:Packt发布了NumPy Cookbook。

2013:Packt发布NumPy初学者指南 - 第二版。

2014年:Fernando Perez宣布Project Jupyter,旨在打造一款与语言无关的笔记本电脑。Packt发布了学习NumPy数组和Python数据分析。

2015:Packt发布NumPy初学者指南 - 第三版和NumPy Cookbook - 第二版。

dautil的高级概述

dautil模块总结在下表中:

描述 LOC
dautil.collect 包含与集合相关的实用程序 331
dautil.conf 包含配置实用程序 48
dautil.data 包含用于下载和加载数据的实用程序 468
dautil.db 包含与数据库相关的实用程序 98
dautil.log_api 包含日志实用程序 204
dautil.nb 包含IPython / Jupyter笔记本小部件和实用程序 609
dautil.options 配置与数据分析相关的多个库的动态选项 71
dautil.perf 包含与性能相关的实用程序 162
dautil.plotting 包含绘图实用程序 382
dautil.report 包含报告实用程序 232
dautil.stats 包含统计函数和实用程序 366
dautil.ts 包含时间序列和日期的实用程序 217
dautil.web 包含用于Web挖掘和HTML处理的实用程序 47
IPython笔记本实用程序

IPython笔记本已成为数据分析的标准工具。该dautil.nb有几个互动IPython的小部件,以帮助乳胶渲染,matplotlib属性的设置,和绘图。Ivan定义了一个Context类,它表示小部件的配置设置。这些设置存储在当前工作目录中名为dautil.json的漂亮打印的JSON文件中。这可以扩展,甚至可以使用数据库后端。以下是一个示例dautil.json的编辑摘录(因此它不占用大量空间):

{

   ...

   "calculating_moments": {

       "figure.figsize": [ 10.4, 7.7 ],

       "font.size": 11.2

   },

   "calculating_moments.latex": [ 1, 2, 3, 4, 5, 6, 7 ],

   "launching_futures": {

       "figure.figsize": [ 11.5, 8.5 ]

   },

   "launching_futures.labels": [ [ {}, {

               "legend": "loc=best",

               "title": "Distribution of Means"

           }

       ],

       [

           {

               "legend": "loc=best",

               "title": "Distribution of Standard Deviation"

           },

           {

                "legend": "loc=best",

               "title": "Distribution of Skewness"

           }

       ]

   ],

...

}

 Context对象可以使用字符串构建 - Ivan建议使用笔记本的名称,但任何唯一标识符都可以。该dautil.nb.LatexRenderer还使用了Context类。它是一个实用程序类,可帮助您在IPython / Jupyter笔记本中编号和渲染Latex方程式,例如,如下所示:

import dautil as dl

 

lr = dl.nb.LatexRenderer(chapter=12, context=context)

lr.render(r"delta! = x - m")

lr.render(r"m" = m + frac{delta}{n}")

lr.render(r"M_2" = M_2 + delta^2 frac{ n-1}{n}")

lr.render(r"M_3" = M_3 + delta^3 frac{ (n - 1) (n - 2)}{n^2}/

- frac{3delta M_2}{n}")

lr.render(r"M_4" = M_4 + frac{delta^4 (n - 1) /

(n^2 - 3n + 3)}{n^3} + frac{6delta^2 M_2}/

{n^2} - frac{4delta M_3}{n}")

lr.render(r"g_1 = frac{sqrt{n} M_3}{M_2^{3/2}}")

lr.render(r"g_2 = frac{n M_4}{M_2^2}-3.")

结果如下:

您可能会发现有用的另一个小部件是RcWidget,它设置matplotlib设置,如以下屏幕截图所示:

下载数据

有时,我们需要样本数据来测试算法或原型可视化。在dautil.data模块中,您将找到许多用于数据检索的实用程序。模块中的一些实用程序在现有的pandas函数之上添加了一个缓存层,例如从世界银行和Yahoo!下载数据的pandas函数。您还可以获取音频,人口统计,Facebook和营销数据。

数据存储在特殊数据目录下,该目录取决于操作系统。以下示例代码从SPAN Facebook数据集加载数据并计算clique数:

import networkx as nx

import dautil as dl

 

 

fb_file = dl.data.SPANFB().load()

G = nx.read_edgelist(fb_file,

                     create_using=nx.Graph(),

                     nodetype=int)

 

print("Graph Clique Number",

     nx.graph_clique_number(G.subgraph(list(range(2048)))))
绘制实用程序

Ivan在书中经常可视化数据。绘图有助于我们了解数据的结构,并帮助您形成假设或研究问题。通常,我们想要绘制多个变量,但我们希望很容易看出它是什么。matplotlib中的标准解决方案是循环颜色。但是,Ivan更喜欢循环线宽和线条样式。以下单元测试演示了他对此问题的解决方案:

 def test_cycle_plotter_plot(self):

       m_ax = Mock()

       cp = plotting.CyclePlotter(m_ax)

       cp.plot([0], [0])

       m_ax.plot.assert_called_with([0], [0], "-", lw=1)

       cp.plot([0], [1])

       m_ax.plot.assert_called_with([0], [1], "--", lw=2)

       cp.plot([1], [0])

       m_ax.plot.assert_called_with([1], [0], "-.", lw=1)

该dautil.plotting模块目前也有次要情节,直方图,回归图使用的辅助工具,并处理彩色地图。下面的示例代码(标签的代码已被省略)演示了条形图实用程序功能和dautil.data的实用程序功能,它下载了股票价格数据:

import dautil as dl

import numpy as np

import matplotlib.pyplot as plt

 

 

ratios = []

STOCKS = ["AAPL", "INTC", "MSFT", "KO", "DIS", "MCD", "NKE", "IBM"]

 

for symbol in STOCKS:

   ohlc = dl.data.OHLC()

   P = ohlc.get(symbol)["Adj Close"].values

   N = len(P)

   mu = (np.log(P[-1]) - np.log(P[0]))/N

   var_a = 0

   var_b = 0

 

   for k in range(1, N):

       var_a = (np.log(P[k]) - np.log(P[k - 1]) - mu) ** 2

       var_a = var_a / N

 

   for k in range(1, N//2):

       var_b = (np.log(P[2 * k]) - np.log(P[2 * k - 2]) - 2 * mu) ** 2

       var_b = var_b / N

 

   ratios.append(var_b/var_a - 1)

 

_, ax = plt.subplots()

dl.plotting.bar(ax, STOCKS, ratios)

plt.show()

有关最终结果,请参阅以下屏幕截图:

代码执行随机游走测试并计算股票价格列表的相应比率。每当您运行代码时都会检索数据,因此您可能会得到不同的结果。

以下脚本演示了世界银行数据的线性回归实用程序和缓存下载程序(省略了水印和绘图标签的代码):

import dautil as dl

import matplotlib.pyplot as plt

import numpy as np

 

 

wb = dl.data.Worldbank()

countries = wb.get_countries()[["name", "iso2c"]]

inf_mort = wb.get_name("inf_mort")

gdp_pcap = wb.get_name("gdp_pcap")

df = wb.download(country=countries["iso2c"],

                 indicator=[inf_mort, gdp_pcap],

                start=2010, end=2010).dropna()

loglog = df.applymap(np.log10)

x = loglog[gdp_pcap]

y = loglog[inf_mort]

 

dl.options.mimic_seaborn()

fig, [ax, ax2] = plt.subplots(2, 1)

ax.set_ylim([0, 200])

ax.scatter(df[gdp_pcap], df[inf_mort])

ax2.scatter(x, y)

dl.plotting.plot_polyfit(ax2, x, y)

plt.show()

 代码应显示以下图像:

该计划下载2010年世界银行数据,并将婴儿死亡率与人均GDP进行对比。还示出了对数变换数据的线性拟合。

揭开Docker的神秘面纱

Docker使用Linux内核功能来提供额外的虚拟化层。它由Solomon Hykes于2013年创建。Boot2Docker允许我们在Windows和Mac OS X上安装Docker。Boot2Docker使用包含带有Docker 的Linux环境的VirtualBox VM 。介绍中提到的Ivan的Docker镜像基于continuumio / miniconda3 Docker镜像。

安装Boot2Docker后,需要对其进行初始化。这只需要一次,Linux用户不需要这一步:$ boot2docker init

Mac OS X和Windows用户的下一步是启动VM:

$ boot2docker start

通过启动示例容器来检查Docker环境:

$ docker run hello-world

Docker镜像组织在一个类似于GitHub的存储库中。制作人推送图像,消费者拉动图像。您可以使用以下命令拉出Ivan的存储库。目前的大小为387 MB。

$ docker pull ivanidris/pydacbk

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43784.html

相关文章

  • 经验拾忆(纯手工)=> Linux实用工具命令

    摘要:为啥直接不行呢因为以开头的最后一条命令是。和和和强制终止最常用的,先提出来。。。。我们可以通过这一条命令来迅速回到程序运行的环境。其实这些配置文件以及这些命令和用户以及权限等都是有很大关系的。 Ubuntu16升级到18.04 有特殊新颖强迫症癖好可以升下,如果你觉得16.04好用,就根本没必要升了 我当时租的 云服务器通常都是16.04,现在估计也是16.04较多 我是个...

    kk_miles 评论0 收藏0
  • python 实用程序 | PDF 转 Word

    摘要:虽然现在市面上有很多转软件,比如,但大多数的软件是要收费的,并且价格不菲。于是乎我就想到了利用来写个程序,把转成文档。具体的程序逻辑,可以去查看原文。本文首发于公众号痴海,每天分享干货,后台回复,领取最新教程。 showImg(https://segmentfault.com/img/remote/1460000015686184); 阅读文本大概需要 6 分钟。 现在网上有很多文档是...

    sorra 评论0 收藏0
  • Python线程专题9:线程终止与挂起、实用工具函数

    摘要:上一篇文章线程专题使用锁的注意事项下一篇文章线程专题多线程按顺序执行线程没有任何方法可用于强制终止或挂起。实用工具函数函数名解释返回当前活动的对象数量。 上一篇文章:Python线程专题8:使用锁的注意事项下一篇文章:Python线程专题10:queue、多线程按顺序执行 线程没有任何方法可用于强制终止或挂起。这是设计上的原因,因为编写线程程序本身十分复杂。例如:如果某个线程已经获取...

    dunizb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<