写点什么

Python-Data-Analysis

作者:上进小菜猪
  • 2022-10-31
    内蒙古
  • 本文字数:5298 字

    阅读完需:约 17 分钟

1. 数据分析概述

定义: 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。

为什么要学习数据分析?

  • 有岗位需求

  • 是 python 数据科学的基础

  • 是机器学习课程的基础 下图数数据分析工程师在北京的岗位需求情况:

    2. 数据分析的工作流:

    3. 数据分析案例 3.1.1. NBA 金州勇士队

     2010 年,金州勇士被 KPCB 合伙人乔·拉科布(Joe Lacob)和好莱坞制片人皮特·古柏(Peter Guber)以 4.5 亿美元收购。他们成为了这支球队的新老板, 乔·拉科布是硅谷杰出的投资人,接手球队以后使用了大量的黑科技,主要是针对“提升训练效果”“减少伤病”“比赛”这三个场景,收集各种数据。然后进行数据分析,原本,投篮、运球、脚步、意识等等都是篮球的基本功,勇士队却走了个极端,把投篮发挥到了极致,再配合完美的传切配合。这种变化,在于对大数据的研究:最有效的进攻,不是彰显个人能力的突破和扣篮,而是眼花缭乱的传球和精准的投篮。充分体现出来数据分析的重要性,现在每一支 NBA 球队都有至少一名专职数据分析师。科技、大数据在 NBA 中前所未有的重要。

3.1.2. 数据分析高手塔吉特

小故事:2012 年,美国一名男子闯入他家附近的一家零售连锁超市塔吉特内抗议:你们竟然给我 17 岁的女儿发婴儿尿片和童车优惠券。店铺经理立刻向来者承认错误,但是该经理并不知道这一行为是总公司运行数据挖掘和个性化推荐的结果。一个月后,这位父亲前来道歉,因为这时他知道自己的女儿的确怀孕了。塔吉特比这位父亲知道自己女儿怀孕足足早了一个月。 

美国第二大超市塔吉特百货(Target)是最早玩大数据的零售商,他们拥有专业顾客数据分析模型,可对购买行为精确分析出早期怀孕的人群,然后先于同行精准营销商品。曾经一次精准营销让一个蒙在鼓里的父亲意外发现高中生女儿怀孕了,此事被纽约时报报道,轰动了全美。

4. 环境安装

  1. 简介 Anaconda(官方网)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda 包含了 conda、Python 在内的超过 180 个科学包及其依赖项。

  2. Anaconda 具有如下特点:

  3. 开源

  4. 安装过程简单

  5. 高性能使用 Python 和 R 语言

  6. 免费的社区支持

  7. Anaconda、conda、pip、virtualenv 的区别

  8. Anaconda Anaconda 是一个包含 180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook 等。

  9. conda conda 是包及其依赖项和环境的管理工具。 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。 适用平台:Windows, macOS, Linux 用途: ① 快速安装、运行和升级包及其依赖项。 ② 在计算机中便捷地创建、保存、加载和切换环境。 conda 为 Python 项目而创造,但可适用于上述的多种语言。 conda 包和环境管理器包含于 Anaconda 的所有版本当中。

  10. pip pip 是用于安装和管理软件包的包管理器。 pip 编写语言:Python。 Python 中默认安装的版本: ① Python 2.7.9 及后续版本:默认安装,命令为 pip ② Python 3.4 及后续版本:默认安装,命令为 pip3 pip 名称的由来:pip 采用的是递归缩写进行命名的。其名字被普遍认为来源于 2 处: ① “Pip installs Packages”(“pip 安装包”) ② “Pip installs Python”(“pip 安装 Python”)

  11. virtualenv virtualenv 是用于创建一个独立的 Python 环境的工具。 解决问题: 当一个程序需要使用 Python 2.7 版本,而另一个程序需要使用 Python 3.6 版本,如何同时使用这两个程序?如果将所有程序都安装在系统下的默认路径,如:/usr/lib/python2.7/site-packages,当不小心升级了本不该升级的程序时,将会对其他的程序造成影响。 如果想要安装程序并在程序运行时对其库或库的版本进行修改,都会导致程序的中断。 在共享主机时,无法在全局 site-packages 目录中安装包。

virtualenv 将会为它自己的安装目录创建一个环境,这并不与其他 virtualenv 环境共享库;同时也可以选择性地不连接已安装的全局库

  1. Anaconda 的适用平台及安装条件 Anaconda 可以在以下系统平台中安装和使用:Windows、macOS、Linux(x86 / Power8) Windows 系统安装 Anaconda ① 前往官方下载页面下载。有两个版本可供选择:Python 3.6 和 Python 2.7,选择版之后根据自己操作系统的情况点击“64-Bit Graphical Installer”或“32-Bit Graphical Installer”进行下载。 ② 完成下载之后,双击下载文件,启动安装程序。 注意:如果在安装过程中遇到任何问题,那么暂时地关闭杀毒软件,并在安装程序完成之后再打开。如果在安装时选择了“为所有用户安装”,则卸载 Anaconda 然后重新安装,只为“我这个用户”安装。 ③ 选择“Next”。 ④ 阅读许可证协议条款,然后勾选“I Agree”并进行下一步。 ⑤ 除非是以管理员身份为所有用户安装,否则仅勾选“Just Me”并点击“Next”。 ⑥ 在“Choose Install Location”界面中选择安装 Anaconda 的目标路径,然后点击“Next”。 注意: 目标路径中不能含有空格,同时不能是“unicode”编码。除非被要求以管理员权限安装,否则不要以管理员身份安装。 ⑦ 在“Advanced Installation Options”中不要勾选“Add Anaconda to my PATH environment variable.”(“添加 Anaconda 至我的环境变量。”)。因为如果勾选,则将会影响其他程序的使用。如果使用 Anaconda,则通过打开 Anaconda Navigator 或者在开始菜单中的“Anaconda Prompt”(类似 macOS 中的“终端”)中进行使用。 除非你打算使用多个版本的 Anaconda 或者多个版本的 Python,否则便勾选“Register Anaconda as my default Python 3.6”。 然后点击“Install”开始安装。如果想要查看安装细节,则可以点击“Show Details”。 ⑧点击“Next”。 ⑨ 进入“Thanks for installing Anaconda!”界面则意味着安装成功,点击“Finish”完成安装。 注意:如果你不想了解“Anaconda 云”和“Anaconda 支持”,则可以不勾选“Learn more about Anaconda Cloud”和“Learn more about Anaconda Support”。 ⑩验证安装结果。可选以下任意方法: 第一种; “开始 → Anaconda3(64-bit)→ Anaconda Navigator”,若可以成功启动 Anaconda Navigator 则说明安装成功。 第二种;“开始 → Anaconda3(64-bit)→ 右键点击 Anaconda Prompt → 以管理员身份运行”,在 Anaconda Prompt 中输入 conda list ,可以查看已经安装的包名和版本号。若结果可以正常显示,则说明安装成功。 其他操作系统请见 macos 官方教程,Linux 官方教程

5. Jupyter Notebook 的使用

Jupyter Notebook 是一款 Web 应用,它能让用户将上面说的各种窗口里的东西,全部组合到一个可读性好,易于共享,且对新手友好的文档中。这个文档里可以包括:

  • live code (e.g. Python code) 可执行的代码,比如我们需要的 Python 代码

  • visualizations 可视化的数据库图表,或者代码执行之后生成的可视化效果,比如 matplotlib 输出的图像等

  • explanatory text (written in markdown syntax) 各种解释性文字,例如用 markdown 语法写的格式化说明文本,Latex 写的数学方程等

因此,你可以方便地一边写代码,一边写许多带格式的注释文本,还能让运行结果实时在页面内显示出来。所以,Jupyter Notebook 很适合以下一些用途使用:

  • 学习并尝试运行 Python 代码,观察其效果

  • 数据处理和转换

  • 数值模拟分析

  • 统计建模

  • 机器学习 

    打开 JupyterNoteBook,如下图打开 anaconda navigator 菜单选择 JupyterNoteBook 的 launch


JupyterNoteBook 使用方法

  • 快捷键--->help--->Keyboard Shortcuts

1+1
复制代码

2
复制代码

  • 下面这个例子 range 里数字改一下运行

for _ in range(4):    print('Hello ! 让我一起来数据分析吧')
复制代码

Hello ! 让我一起来数据分析吧Hello ! 让我一起来数据分析吧Hello ! 让我一起来数据分析吧Hello ! 让我一起来数据分析吧
复制代码

5+2
复制代码

7
复制代码

通过快捷键来运行

  • help 下的 keyboard shortcut

  • run cell, select below // shift + enter

5 + 5*2
复制代码

15
复制代码

  1. run selected cells // control + enter

9 + 9
复制代码

18
复制代码

  1. run cell and insert below // option +enter

VIEW ---> toggle TOOLBAR 和 toggle header 隐藏 toggle line_number 显示行数

in 和 out 代表运行的顺序

3 插入单元格

下面插入是 B 上面是 A 单元格绿色是 输入 蓝色是非编辑

markdown 的快捷键是 MY 是变成代码状态

jupyter notebook 的优点 存储我们之前代码写的变量 然后以交互的形式进行展现

data = [i*2 for i in range(100)]
复制代码

len(data)
复制代码

100
复制代码

data[:10]
复制代码

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
复制代码

  • data 一直在内存中 我们要加载一个很大的数据,只需要一个加载一次就可以

  • 在前面可以使用未声明的变量 (特点) data[-1] 插入到上面的某一行演示

Kernel 有重启运行 重新运行上面的会报错

6. Jupyter NOTEBOOK 高级 :魔法命令

%run 后面跟一个地址

  • 调用自己写的代码 比如用 pycharm 写的

def hello(name):    print('Hello', name, '!')
hello("neuedu")
复制代码

hello.py存在myscript/文件夹中,我们使用 %run来运行%run myscript/hello.py
复制代码

Hello neuedu !
复制代码

这是hello()函数也加载到内存中hello('刘强东')
复制代码

Hello 刘强东 !
复制代码

  • 加载模块 在工程中新建 mymodule 包然后在包中新建 FirstDemo.py 文件 def predict(x): print('听说班长今晚请吃饭')

import mymodule.FirstDemo
复制代码

mymodule.FirstDemo.predict('x')
复制代码

听说班长今晚请吃饭
复制代码

也可以这样引入

from mymodule import FirstDemo as fd
复制代码

fd.predict(1)
复制代码

听说班长今晚请吃饭
复制代码

  • 函数的注释

print? # 会显示print函数的信息
复制代码

print??# 会显示print函数的详细信息
复制代码

%timeit 测试时间

%timeit 只能接一句话

  • 执行了 1000 次 由 jupterNotebook 决定次数

%timeit L = [i**2 for i in range(1000)]
复制代码

307 µs ± 15 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
复制代码

时间复杂度 O(n) 级别 线性的

%timeit L = [i**2 for i in range(1000000)]
复制代码

362 ms ± 19.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码

%timeit L = [i**2 for i in range(10)]
复制代码

3.34 µs ± 264 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
复制代码

  • 接多行的写法

%%timeitL = []for n in range(1000):    L.append(n ** 2)
复制代码

352 µs ± 5.21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
复制代码

列表生成式要比 for 循环快

%time

%time L = [i**2 for i in range(1000)]
复制代码

CPU times: user 329 µs, sys: 0 ns, total: 329 µsWall time: 333 µs
复制代码

cpu 时间 usertime systime totaltime walltime 是人类真正感知到的时间 多线程 cpu < wall

比上面的时间长是因为之前的是去 7 次最快的 跟当前操作系统的调度任务有关系

%time 区域

%%timeL = []for n in range(1000):    L.append(n ** 2)
复制代码

CPU times: user 835 µs, sys: 1 µs, total: 836 µsWall time: 844 µs
复制代码

使用时间测试的陷阱(误区)

import randomL = [random.random() for i in range(100000)]%timeit L.sort()
复制代码

2.09 ms ± 150 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
复制代码

L = [random.random() for i in range(100000)]%time L.sort()
复制代码

CPU times: user 33.1 ms, sys: 678 µs, total: 33.8 msWall time: 33.7 ms
复制代码

%time L.sort()
复制代码

CPU times: user 2.58 ms, sys: 19 µs, total: 2.6 msWall time: 2.62 ms
复制代码

为什么会产生这么大时间的差距呢 python 对已经排好序的有优化 乱序的数组有相应复杂的操作 三路快排算法 归并排序算法 加入优化算法以后 对于已经有序的数组的是 O(n) 对于乱序是 On (log n)

其他魔法命令

%lsmagic
复制代码

Available line magics:%alias  %alias_magic  %autocall  %automagic  %autosave  %bookmark  %cat  %cd  %clear  %colors  %config  %connect_info  %cp  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode
Available cell magics:%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile
Automagic is ON, % prefix IS NOT needed for line magics.
复制代码

魔法命令的详细描述

%run?
复制代码

%pwd
复制代码

'/Users/ericli/Desktop/JupyterBase'
复制代码

%matplotlib
复制代码

Using matplotlib backend: MacOSX
复制代码

很重要 有可能图不会出现或者无法控制绘画

Unix shell 命令

#### !ls
复制代码
发布于: 刚刚阅读数: 5
用户头像

InfoQ签约作者 2022-03-29 加入

努力做全栈,爱好开发,开发专业户。

评论

发布
暂无评论
Python-Data-Analysis_10月月更_上进小菜猪_InfoQ写作社区