首页 >> 实验教学 >> 实验项目 >> 详细内容
实验教学
 
实验项目 >> 正文
Python商业数据分析
日期:2021-12-09 18:36:10  发布人:nclgjsj  浏览量:509

 

 

实验一数据分析平台的搭建

 

一、实验目的

1. 熟悉pycharm的安装和配置。

2. 熟悉jupyter notebook的安装和配置。

3. 熟悉numpy、pandas、matplotlib的使用。

二、实验题目

1. 安装并配置pycharm

2. 安装并测试jupyter notebook

3. pythram和notebook上测试numpy、pandas、matplotlib插件

三、实验步骤

安装步骤:

1、官网下载Anaconda。建议下载Anaconda的最新Python 3版本。

2、按照安装说明一步步安装即可。

值得注意的是,安装步骤中有一个地方需要确认:

第一个勾是是否把Anaconda加入环境变量,这涉及到能否直接在cmd中使用conda、jupyter、ipython等命令,推荐打勾,如果不打勾话问题也不大,可以在之后使用Anaconda提供的命令行工具进行操作;第二个是是否设置Anaconda所带的Python 3.6为系统默认的Python版本,这个自己看着办,问题不大。

对于有经验的用户,或者说linux用户,可以使用Python的包管理器pip安装Jupyter ,而不是Anaconda。下面为安装步骤。

1、确保你是最新的版本; 旧版本可能会遇到一些依赖问题:

1

pip3 install --upgrade pip

2、使用以下命令安装Jupyter Notebook:

1

pip3 install jupyter

3anaconda配置jupyter的默认启动路径

首先了解一下anaconda navigator,从开始菜单中,以管理员方式运行Anaconda Navigator桌面应用程序。

Navigator启动时,它会验证是否安装了Anaconda。如果运行成功,会显示如下界面:

home目录中是显示的我们已经安装了的软件,后面我们可以通过这里直接启动需要用到的软件。

environment目录下展示的是当前环境及当前我们已经安装了的包,第一次进入这个界面会询问你是否修改路径,你可以将路径修改到你的project项目目录下,当然你也可以通过channels修改路径。这里先不修改。同时你还可以通过create创建或则导入新的环境。

poject目录下你可以创建工程或者导入已经存在了的项目:

Learning目录下就是一些相关的教程链接。

 community即一些相关的交流论坛,方便开发者进行交流。

 在开始菜单中以管理员身份运行Anaconda Prompt,这里就是启动conda环境管理器。

Anaconda Prompt for Windows中使用conda命令行命令可以完成一系列的操作。关于conda的命令行请参考官方文档,只做一个大概的介绍:

(1)环境创建及管理

下面是我们需要安装Python 3.4的操作

 

2Conda的包管理

Conda的包管理就比较好理解了,这部分功能与pip类似。例如,如果需要安装scipy

# 安装scipy

conda install scipy

# conda会从从远程搜索scipy的相关信息和依赖项目,对于python 3.4,conda会同时安装numpy和mkl(运算加速的库)

 

# 查看已经安装的packages

conda list

# 最新版的conda是从site-packages文件夹中搜索已经安装的包,不依赖于pip,因此可以显示出通过各种方式安装的包

conda的一些常用操作如下:

 

# 查看当前环境下已安装的包

conda list

 

# 查看某个指定环境的已安装包

conda list -n python34

 

# 查找package信息

conda search numpy

 

# 安装package

conda install -n python34 numpy

# 如果不用-n指定环境名称,则被安装在当前活跃环境

# 也可以通过-c指定通过某个channel安装

 

# 更新package

conda update -n python34 numpy

 

# 删除package

conda remove -n python34 numpy<br><br># 删除指定的环境(如果不添--all参数,而是指明某个库名,则是删除该库)。

 

 

执行完上述命令后,会生成~/.condarc(Linux/Mac)C:UsersUSER_NAME.condarc文件,记录着我们对conda的配置,直接手动创建、编辑该文件是相同的效果。

4)共享环境

共享环境非常有用,它能让其他人安装你的代码中使用的所有包,并确保这些包的版本正确。

你可以在你当前的环境中终端中使用 

1

conda env export > environment.yaml

将你当前的环境保存到文件中包保存为YAML文件(包括Pyhton版本和所有包的名称)。

命令的第一部分 conda env export 用于输出环境中的所有包的名称(包括 Python 版本)

GitHub 上共享代码时,最好同样创建环境文件并将其包括在代码库中。这能让其他人更轻松地安装你的代码的所有依赖项。

导出的环境文件,在其他电脑环境中如何使用呢?

首先在conda中进入你的环境,比如activate py3

然后在使用以下命令更新你的环境:

#其中-f表示你要导出文件在本地的路径,所以/path/to/environment.yml要换成你本地的实际路径

conda env update -f=/path/to/environment.yml

对于不使用 conda 的用户,通常可以使用

1

pip freeze > environment.txt

  将一个 txt文件导出并将环境包括在其中,然后别人就可以使用

pip install -r /path/requirements.txt

安装该项目实际需要的包(其中/path/requirements.txt是该文件在你电脑上的实际路径)。

4jupyter Notebook默认启动路径修改

下面讲解的是如何更改jupyter的默认启动路径。 在软件页打开jupyter Notebook

会打开一个浏览器界面和一个cmd命令界面:

这里浏览器打开的是Notebook Dashboard,它将显示笔记本服务器启动目录中的笔记本,文件和子目录列表。值得注意的是,这里打开的是C:\Users\Administrator,这是因为jupyter notebook命令会在电脑本地以默认配置启动jupyter服务,windows下可以通过以下方式修改默认路径

运行Anaconda Prompt后,输入指令

jupyter notebook --generate-config

生成jupyter的配置文件。

找到文件并打开 ,在第214行找到

1

#c.NotebookApp.notebook_dir = ''



 

 

实验二Numpy的使用

 

一、实验目的

1. 掌握Numpy创建多维数组与随机数的方法

2. 掌握数组的索引与变换

3. 掌握Numpy中数组矩阵的运算及通用函数的基本使用方法

4. 掌握Numpy读写文件的方法和常用的统计分析的函数

二、实验题目

1.使用数组进行简单的统计分析

2.创建数组对象

3.通过索引访问数组

4.变换数组的形态

5.创建Numpy矩阵

三、实验步骤

一、目的

了解numpy库的基本功能

掌握Numpy库的对数组的操作与运算

 

 

二、工具:

Anaconda

Numpy

 

三、Numpy简介

Numpy 的英文全称为 Numerical Python,指Python 面向数值计算的第三方库。Numpy 的特点在于,针对 Python 内建的数组类型做了扩充,支持更高维度的数组和矩阵运算,以及更丰富的数学函数。Numpy Scipy.org 中最重要的库之一,它同时也被 PandasMatplotlib 等我们熟知的第三方库作为核心计算库。

NumPyNumeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence LivermoreNASA用其处理一些本来使用C++FortranMatlab等所做的任务。

Numpy包括了:1、一个强大的N维数组对象Array2、比较成熟的(广播)函数库;3、用于整合C/C++Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。Numpy和稀疏矩阵运算包scipy配合使用更加方便。

 

四、功能简介

1. 数组的创建

通常,我们用np.array()创建数组。如果仅仅是创建一维数组,也可以使用np.arange()或者np.linspace()的方法。np.zeros()np.ones()np.eye()则可以构造特殊的数据。np.random.randint()np.random.random()则可以构造随机数数组

2. 数组的属性

numpy的数组对象除了一些常规的属性外,也有几个类似转置、扁平迭代器等看起来更像是方法的属性。扁平迭代器也许是遍历多维数组的一个简明方法,下面的代码给出了一个例子。

 

3. 数组的维度操作

numpy数组的存储顺序和数组的维度是不相干的,因此改变数组的维度是非常便捷的操作,除resize()外,这一类操作不会改变所操作的数组本身的存储顺序。

4. 数组的合并(数组的水平合并,垂直合并,深度合并)

数组合并除了下面介绍的水平合并、垂直合并、深度合并外,还有行合并、列合并,以及concatenate()等方式。假
如你比我还懒,那就只了解前三种方法吧,足够用了。

5. 数组的拆分(数组的水平拆分,垂直拆分,深度拆分)

拆分是合并的逆过程,概念是一样的,但稍微有一点不同:

6. 数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等)

数组和常数的四则运算,是数组的每一个元素分别和常数运算;数组和数组的四则运算则是两个数组对应元素的运算(两个数组有相同的shape,否则抛出异常)。

与常数得:

与数组得:

判断数组是否相等:

7. 数组方法和常用函数

数组对象本身提供了计算算数平均值、求最大最小值等内置方法,numpy也提供了很多实用的函数。为了缩减篇幅,下面的代码仅以一维数组为例,展示了这些方法和函数用法。事实上,大多数情况下这些方法和函数对于多维数组同样有效,只有少数例外,比如compress函数。

8. 矩阵对象

matrix是矩阵对象,继承自ndarray类型,因此含有ndarray的所有数据属性和方法。不过,当你把矩阵对象当数组操作时,需要注意以下几点:

matrix对象总是二维的,即使是展平(ravel函数)操作或是成员选择,返回值也是二维的

matrix对象和ndarray对象混合的运算总是返回matrix对象

 

创建矩阵:

 

matrix对象可以使用一个Matlab风格的字符串来创建(以空格分隔列,以分号分隔行的字符串),也可以用数组来创建。

矩阵的特有属性:

矩阵有几个特有的属性使得计算更加容易,这些属性有:

矩阵乘法:

ndarray对象而言,星号是按元素相乘,dot()函数则当作矩阵相乘。对于matrix对象来说,星号和dot()函数都是矩阵相乘。特别的,对于一维数组,dot()函数实现的是向量点乘(结果是标量),但星号实现的却不是差乘。

线性代数模块

numpy.linalg numpy的线性代数模块,可以用来解决逆矩阵、特征值、线性方程组以及行列式等问题。
计算逆矩阵:

尽管matrix对象本身有逆矩阵的属性,但用numpy.linalg模块求解矩阵的逆,也是非常简单的。

计算行列式:

计算特征值和特征向量:

求解线性方程组:

 

实验三Matplotlib绘图案例

实验目的利用pandas对数据进行预处理然后再使用matplotlib对处理后的数据进行数据可视化是数据分析中常用的方法

假如我们现在有这样一组数据:星巴克在全球的咖啡店信息,如下图所示。数据来源:starbucks_store_locations

 

店铺总数排名前10的国家

 

 

 

 

中国店铺数排名前20的城市

 

 

 

 

第二组例子(世界排行前10000书籍信息)

假如我们现在有这样一组数据:世界排行前10000书籍信息,如下图所示。数据来源:books

各年份书籍平均评分

 

 

 

 

由于公元前的年份书籍较少,每年只有一本,所以数据波动幅度会很大,越往后就会越趋于平稳

 

911紧急求救电话信息#

这个案例不牵扯绘图,但是这个案例中有个很重要的问题就是关于对数据进行遍历的问题。数据来源:Emergency - 911 Calls

假如我们要读取这个数据文件中各类求救电话的数量,应该怎么做呢?我们首先来看一下这个数据文件的基本信息。

 

 

 

 

 

 

 

 

 

 

实验四 Pandas统计分析基础

 

任务1读取mtcar数据并实现以下操作

1)查看mtcar数据元素的个数、维度、大小等信息输出表的列名。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('mtcars的元素个数为:\n',mtcars.size)

print('mtcars的元素维度为:\n',mtcars.ndim)

print('mtcars的元素大小为:\n',mtcars.shape)

print('mtcars的表的列名为:\n',mtcars.columns)

 

 

2)使用describe方法对整个mtcar数据集进行描述性统计。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('对整个mtcar数据集进行描述性统计为:\n',mtcars.describe())

 

 

3)计算不同cyl气缸数carb化油器对应的mpg油耗hp马力均值

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

x=mtcars.loc[:,['cyl','carb','mpg','hp']]

y=x.groupby(['cyl','carb']).mean()

print('不同cyl(气缸数)、carb(化油器)对应的mpg(油耗)和hp(马力)的均值为:\n',y)

 

 

4)输出mpghp5个元素

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

x=mtcars[['mpg','hp']][:5]

print('mpghp5个元素为:\n',x)

 

 

5)输出mtcar数据的前3行元素

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

x=mtcars[:][1:3]

print('mtcar数据的前3行元素为:\n',x)

 

 

6)使用head()tail()方法输出前后5数据。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('mtcar数据的前5行元素为:\n',mtcars.head())

print('mtcar数据的后5行元素为:\n',mtcars.tail())

 

 

7)用lociloc分别提取第1和第3的数据

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('mtcar数据的第1列和第3列的数据为:\n',mtcars.loc[:,['mpg','disp']])

print('mtcar数据的第1列和第3列的数据为:\n',mtcars.iloc[:,[1,3]])

 

 

 

 

8)取出列名为mpghp,行名为234的数据。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('列名为mpghp,行名为234的数据为:\n',mtcars.loc[2:4,['mpg','hp']])

 

 

9)取出列位置为24行位置为567的数据。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('列位置为24,行位置为567的数据为:\n',mtcars.iloc[5:8,[2,4]]) #前闭后开区间

 

 

10取出列位置为3行名为2-6数据。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('列位置为3,行名为2-6的数据为:\n',mtcars.loc[2:6,['disp']])

 

 

11)新增1,名称为abcabc=mpg+hp),输出前5行数据

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

mtcars['abc']=mtcars['mpg']+mtcars['hp']

print('输出前5行数据为:\n',mtcars.head())

 

 

12)删除前两行数据。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

print('删除前两行数据前的长度为:\n',len(mtcars))

mtcars.drop(labels=range(0,2),axis=0,inplace=True)

print('删除前两行数据后的长度为:\n',len(mtcars))

print('前五行数据为:\n',mtcars.head())

 

 

13)删除abc列。

import pandas as pd

mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')

mtcars['abc']=mtcars['mpg']+mtcars['hp']

print('删除abc前列索引为:\n',mtcars.columns)

mtcars.drop(labels='abc',axis=1,inplace=True)

print('删除abc后列索引为:\n',mtcars.columns)

 

 

任务2 导入鸢尾花数据实现以下操作

特别注意:导入后的DataFrame仅含5列:

Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species

1)读入数据,输出前五行

import pandas as pd

iris=pd.read_csv('D:\\桌面\\实验二\\data\\iris.csv')

print('前五行的数据为:\n',iris.head())

 

 

2)统计每个品种的数量

import pandas as pd

iris=pd.read_csv('D:\\桌面\\实验二\\data\\iris.csv')

print('每个品种的数量为:\n',iris['Species'].value_counts())

 

 

3)按品种划分,每个品种的花萼,花瓣的长度和宽度的最大值分别是多少?

import pandas as pd

iris=pd.read_csv('D:\\桌面\\实验二\\data\\iris.csv')

print('每个品种的数量为:\n',iris.groupby('Species').max())

 

 

4计算每个品种所有属性(花瓣、花萼的长度和宽度)数值的跨度范围,即最大值减去最小值

import pandas as pd

iris=pd.read_csv('D:\\桌面\\实验二\\data\\iris.csv')

def range_iris(arr):

    return arr.max()-arr.min()

print('每个品种所有属性数值的跨度范围为:\n',iris.groupby('Species').agg(range_iris))

 

 

5计算每个品种所有属性(花瓣、花萼的长度和宽度)数值平均值、最大值

import pandas as pd

iris=pd.read_csv('D:\\桌面\\实验二\\data\\iris.csv')

print('每个品种所有属性数值的平均值、最大值为:\n',

iris.groupby('Species').mean(),iris.groupby('Species').max())

 

 

任务3  excel文件foods.xlsx读取数据,并将ID列作为索引。

1)输出该DataFrame

import pandas as pd

foods=pd.read_excel('D:\\桌面\\实验二\\data\\foods.xlsx')

print('输出为:\n',foods)

 

 

2)生成如下样式的透视表,统计不同产地和类别食品价格及数量的平均值。

 

import pandas as pd

foods=pd.read_excel('D:\\桌面\\实验二\\data\\foods.xlsx')

print('透视表为:\n',foods.pivot_table(['价格','数量'],index='产地',columns='类别'))

 

 

3)生成如下样式的透视表,统计不同产地和类别食品价格的最大值,缺失值填充0

 

import pandas as pd

foods=pd.read_excel('D:\\桌面\\实验二\\data\\foods.xlsx')

print('透视表为:\n',foods.pivot_table('价格',index='产地',columns='类别',fill_value=0))

 

 

4)生成如下样式的透视表,统计不同产地和类别食品价格的均值,缺失值填充0,并提供分项统计。

 

 

import pandas as pd

foods=pd.read_excel('D:\\桌面\\实验二\\data\\foods.xlsx')

print('透视表为:\n',foods.pivot_table('价格',index='产地',columns='类别',

aggfunc='mean',margins=True))

 

 

4)生成如下样式的交叉,统计不同产地和类别食品的频次。

 

import pandas as pd

foods=pd.read_excel('D:\\桌面\\实验二\\data\\foods.xlsx')

print('透视表为:\n',pd.crosstab(foods['产地'],foods['类别']))

 

核发:nclgjsj 点击数:509收藏本页