一、实验目的
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 |
3、anaconda配置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的操作
(2)Conda的包管理
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是该文件在你电脑上的实际路径)。
4、jupyter 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 = '' |
一、实验目的
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 中最重要的库之一,它同时也被 Pandas,Matplotlib 等我们熟知的第三方库作为核心计算库。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
Numpy包括了:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;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模块求解矩阵的逆,也是非常简单的。
计算行列式:
计算特征值和特征向量:
求解线性方程组:
实验目的:利用pandas对数据进行预处理然后再使用matplotlib对处理后的数据进行数据可视化是数据分析中常用的方法
假如我们现在有这样一组数据:星巴克在全球的咖啡店信息,如下图所示。数据来源:starbucks_store_locations
店铺总数排名前10的国家
中国店铺数排名前20的城市
第二组例子(世界排行前10000书籍信息)
假如我们现在有这样一组数据:世界排行前10000书籍信息,如下图所示。数据来源:books。
各年份书籍平均评分
由于公元前的年份书籍较少,每年只有一本,所以数据波动幅度会很大,越往后就会越趋于平稳
911紧急求救电话信息#
这个案例不牵扯绘图,但是这个案例中有个很重要的问题就是关于对数据进行遍历的问题。数据来源:Emergency - 911 Calls
假如我们要读取这个数据文件中各类求救电话的数量,应该怎么做呢?我们首先来看一下这个数据文件的基本信息。
任务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)输出mpg和hp前5个元素。
import pandas as pd
mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')
x=mtcars[['mpg','hp']][:5]
print('mpg和hp前5个元素为:\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)用loc和iloc分别提取第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)取出列名为mpg、hp,行名为2,3,4的数据。
import pandas as pd
mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')
print('列名为mpg、hp,行名为2,3,4的数据为:\n',mtcars.loc[2:4,['mpg','hp']])
(9)取出列位置为2和4,行位置为5,6,7的数据。
import pandas as pd
mtcars=pd.read_csv('D:\\桌面\\实验二\\data\\mtcars.csv')
print('列位置为2和4,行位置为5,6,7的数据为:\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列,名称为abc(abc=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['类别']))