Python数据分析与应用_从数据获取到可视化题库及答案
Posted 高校知识店铺合集汇总
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析与应用_从数据获取到可视化题库及答案相关的知识,希望对你有一定的参考价值。
第1章习题
- 填空题
- 的目的在于将隐藏在一大批看似杂乱无章的数据信息集中提炼出来有用的数据。
- 中包含了conda、Python在内的超过180个科学包及其依赖项。
- Jupyter Notebook是一个支持 代码、数学方程、可视化和Markdown的Web应用程序。
- 判断题
- 数据分析是一个有目的地收集和整合数据的过程。( )
- Python是一门胶水语言,可以轻松地操作其它语言编写的库。( )
- 如果要卸载指定环境中的包,则直接使用remove命令移除即可。( )
- 选择题
- 下列选项中,用于搭接数据仓库和保证数据质量的是( )。
- 数据收集
- 数据处理
- 数据分析
- 数据展现
- 关于Anaconda的说法中,下列描述错误的是( )。
- Anaconda是一个可以对包和环境进行统一管理的发行版本。
- Anaconda包含了conda、Python在内的超过180个科学包及其依赖项
- Anaconda是完全开源的、付费的
- Anaconda避免了单独安装包时需要配置或兼容等各种问题
- 关于Anaconda的组件中,可以编辑文档且展示数据分析过程的是( )。
- Anaconda Navigator
- Anaconda Prompt
- Spyder
- Jupyter Notebook
- 下面列出的数据分析库中,用于绘制数组的2D图形的是( )。
- NumPy
- Pandas
- Matplotlib
- NLTK
- 简答题
- 什么是数据分析?
- 请简述数据分析的基本过程。
- Python做数据分析有哪些优势?
第2章习题
- 填空题
- 在NumPy中,可以使用数组对象________执行一些科学计算。
- 如果ndarray.ndim执行的结果为2,则表示创建的是_____维数组。
- NumPy的数据类型是由一个类型名和元素________的数字组成。
- 如果两个数组的大小(ndarray.shape)不同,则它们进行算术运算时会出现________机制。
- 花式索引是NumPy的一个术语,是指用整数________进行索引。
- 判断题
- 通过empty()函数创建的数组,该数组中没有任何的元素。( )
- 如果没有明确地指明数组中元素的类型,则默认为float64。( )
- 数组之间的任何算术运算都会将运算应用到元素级。( )
- 多维数组操作索引时,可以将切片与整数索引混合使用。( )
- 当通过布尔数组索引操作数组时,返回的数据是布尔数组中False对应位置的值。( )
- 选择题
- 下列选项中,用来表示数组维度的属性是( )。
- ndim
- shape
- size
- dtype
- 下面代码中,创建的是一个3行3列数组的是( )。
- arr = np.array([1, 2, 3])
- arr = np.array([[1, 2, 3], [4, 5, 6]])
- arr = np.array([[1, 2], [3, 4]])
- np.ones((3, 3))
- 请阅读下面一段程序:
arr_2d = np.array([[11, 20, 13],[14, 25, 16],[27, 18, 9]])
print(arr_2d[1, :1])
执行上述程序后,最终输出的结果为( )。
- [14]
- [25]
- [14, 25]
- [20, 25]
- 请阅读下面一段程序:
arr = np.arange(6).reshape(1, 2, 3)
print(arr.transpose(2, 0, 1))
执行上述程序后,最终输出的结果为( )。
[[[2 5]]
[[0 3]]
[[1 4]]]
[[[1 4]]
[[0 3]]
[[2 5]]]
[[[0 3]]
[[1 4]]
[[2 5]]]
[[[0]
[3]]
[[1]
[4]]
[[2]
[5]]]
- 下列函数或方法中,用来表示矢量化三元表达式的是( )。
- where()
- cumsum()
- sort()
- unique()
- 简答题
- 什么是矢量化运算?
- 实现数组广播机制需要满足哪些条件?
- 程序题
- 创建一个数组,数组的shape为(5,0),元素都是0。
- 创建一个表示国际象棋棋盘的8*8数组,其中,棋盘白格用0填充,棋盘黑格用1填充。
第3章习题
- 填空题
- Pandas是一个基于 的Python库。
- Pandas中有两个主要的数据结构分别为 和 。
- Series结构由 和 组成。
- 可以使用 和 创建一个Series对象。
- 数据排序可以分为 和 。
- 判断题
- 在DataFrame中每列的数据都可以看做是一个Series对象。( )
- 使用describe()方法会输出多个统计指标。( )
- from_arrays()方法是将元组列表转换为MultiIndex对象。( )
- read_csv()函数和read_table()函数没有区别可以随意替换使用。( )
- Series对象不存在层次化索引。( )
- 选择题
- 下列选项中,描述不正确的是( )。
- Pandas中只有Series和DataFrame这两种数据结构
- Series是一维的数据结构
- DataFrame是二维的数据结构
- Series和DataFrame都可以重置索引
- 下列选项中,描述正确是( )。
- Series是一维数据结构,其索引在右,数据在左
- DataFrame是二维数据结构,并且该结构具有行索引和列索引
- Series结构中的数据不可以进行算术运算
- sort_values()方法可以将Series或DataFrame中的数据按照索引排序
- 下列方法中,可以将元组转换为MultiIndex对象的是( )。
- from_tuples()
- from_arrays()
- from_product()
- from_list()
- 下列选项中,哪个方法可以一次性输出多个统计指标( )。
- describe()
- mean()
- median()
- sum()
- 请阅读下面一段程序:
import pandas as pd
ser_obj = pd.Series(range(1, 6), index=[5, 3, 0, 4, 2])
ser_obj.sort_index()
执行上述程序后,最终输出的结果为( )。
5 1
3 2
0 3
4 4
2 5
0 3
2 5
3 2
4 4
5 1
5 1
4 4
3 2
2 5
0 3
2 5
4 4
0 3
3 2
5 1
- 简答题
- 简述Series和DataFrame的特点。
- 简述什么是层次化索引。
- 程序题
- 现有如下图所示的数据,请对该数据进行以下操作:
- 使用DataFrame创建该数据。
- 将图中的B列数据进行按降序排序。
- 将排序后的数据写入到csv文件,并命名为write_data.csv。
第4章习题
- 填空题
- 数据清洗的目的是让数据具有 、 、 、 、 、等特点。
- 产生缺失值或空值的原因有 和 。
- stack()方法可以将 转换为 。
- concat()函数的堆叠方式有 和 ,连接方式有 和 。
- 拉依达原则在检测异常值时必须保证数据遵守 。
- 判断题
- rename()方法可以重命名索引名。( )
- drop_duplicated()方法可以删除重复值。( )
- 在箱形图中超出上界和下界的值称为异常值。( )
- 当一个具有多层次索引的DataFrame对象经过stack()后,会返回一个Series对象。( )
- 在使用merge()函数进行合并时,不需要指定合并键。( )
- 选择题
- 下列选项中,描述不正确的是。( )
- 数据清洗的目的是为了提高数据质量
- 异常值一定要删除
- 可使用drop_duplicates()方法删除重复数据
- concat()函数可以沿着一条轴将多个对象进行堆叠
- 请阅读下面一段程序:
from pandas import Series
import pandas as pd
from numpy import NaN
series_obj = Series([None, 4, NaN])
pd.isnull(series_obj)
执行上述程序后,最终输出的结果为( )。
0 True
1 False
2 True
0 True
1 True
2 False
0 False
1 True
2 True
0 True
1 True
2 True
- 下列选项中,可以删除缺失值或空值的是。( )
- isnull()
- notnull()
- dropna()
- fillna()
- 下列选项中,描述不正确是。( )
- concat()函数可以沿着一条轴将多个对象进行堆叠
- merge()函数可以根据一个或多个键将不同的DataFrame进行合并
- 可以使用rename()方法对索引进行重命名操作
- unstack()方法可以将列索引旋转为行索引
- 请阅读下面一段程序:
import numpy as np
import pandas as pd
ser_obj = pd.Series([4, np.nan, 6, 5, -3, 2])
ser_obj.sort_values()
执行上述程序后,最终输出的结果为( )。
4 -3.0
5 2.0
0 4.0
3 5.0
2 6.0
1 NaN
1 NaN
2 6.0
3 5.0
0 4.0
5 2.0
4 -3.0
5 2.0
0 4.0
3 5.0
2 6.0
4 -3.0
1 NaN
0 4.0
1 NaN
2 6.0
3 5.0
4 -3.0
5 2.0
- 简答题
- 请简述数据预处理的常用操作。
- 常用的数据合并操作有哪些?
- 程序题
- 现有如下图所示的两组数据,其中 A组中B列数据存在缺失值,并且该列数据为int类型,B组中的数据均为str类型。接下来,请对这些数据进行以下操作:
- 使用DataFrame创建这两组数据。
- 现在需要使用B组中的数据对A组中的缺失值进行填充并保持数据类型一致。
- 将合并后A组中索引名为key的索引重命名为D。
第5章习题
- 填空题
- 分组聚合的流程分为 、 、 。
- 分组键的形式可以有 、 、 、 。
- transform()方法会对产生的标量值进行 操作。
- 当对一个DataFrame对象进行分组后会返回一个 对象。
- 判断题
- 分组聚合的原理一般分为拆分-应用-合并。( )
- 只要使用groupby()方法分组就会产生一个DataFrameGroupby对象。( )
- 使用agg()方法进行聚合运算会对产生的标量值进行广播。( )
- 使用transform()方法进行聚合运算,其结果可以保持与原数据形状相同。( )
- apply()方法可以使用广播功能。( )
- 选择题
- 下列选项中,关于groupby()方法说法不正确的是。( )
- 分组键可以是列表或数组,但长度不需要与待分组轴的长度相同
- 可以通过DataFrame中的列名的值进行分组
- 可以使用函数进行分组
- 可使用series或字典分组
- 下列选项中,关于agg()方法使用不正确是。( )
- agg()方法中func参数只能传入一个函数
- agg()方法中func参数可以传入多个函数
- agg()方法中func参数可以传入自定义函数
- agg()方法不能对产生的标量值进行广播
- 下列选项中,关于transform()方法说法正确的是。( )
- 不会与原数据保持相同形状
- 会对产生的标量值进行广播操作
- func参数只能传入内置函数
- func参数可以传入多个内置函数
- 下列选项中,关于apply()说法不正确的是。( )
- 可以使用自定义函数
- 可以接收多个函数
- 可以使用广播功能
- 返回的结果一定与原数据的形状相同
- 请阅读下面一段程序:
import pandas as pd
(pd.DataFrame([[2, 3],] * 3, columns=['A', 'B'])).apply(lambda x: x + 1)
执行上述程序后,最终输出的结果为( )。
A B
0 3 2
1 3 2
2 3 2
A B
0 2 3
1 2 3
2 2 3
A B
0 3 4
1 3 4
2 3 4
A B
0 4 3
1 4 3
2 4 3
- 简答题
- 请简述分组聚合的流程。
- 请简述常用的分组方式。
- 程序题
- 现有如下图所示的学生信息,请根据图中的信息完成以下操作:
- 根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。
- 分别计算出四个年级中身高最高的同学。
- 计算大一学生与大三学生的平均体重。
第6章习题
- 填空题
- bokeh是针对 使用的交互式可视化库。
- 数据可视化常见的统计图表有 、 、 。(写出3个即可)
- 在使用Matplotlib绘制图表时,需要导入 模块。
- 在直方图中一般使用横轴表示 ,用纵轴表示 。
- 在使用Matplotlib绘制柱状图时可以使用pyplot模块中的 函数。
- 判断题
- seaborn是基于Matplotlib核心库。( )
- Figure对象可以划分多个绘图区域,每个绘图区域都是一个Axes对象。( )
- 绘制图表时,可以使用subplot()函数创建多个子图。( )
- Matplotlib默认支持中文显示。( )
- Matplotlib生成的图表可以保存在本地。( )
- 选择题
- 下列选项中,关于Matplotlib库说法不正确是。( )
- Matplotlib是一个Python 3D绘图库
- 可输出PNG、PDF等格式
- 渐进、交互的方式实现数据可视化
- 使用简单
- 下列选项中,不属于Seaborn库的特点是。( )
- Seaborn是基于Matplotlib的可视化库
- 基于网格绘制出更加复杂的图像集合
- 多个内置主题及颜色主题
- 可以处理大量的数据流
- 下列选项中,关于boken库说法不正确的是。( )
- boken是一个专门针对Web浏览器使用的交互式可视化库
- Plotting接口用于构建各种组装图形元素
- Models接口可以为开发者提供最大的灵活性
- Charts库可直接使用,不需要单独安装
- 下列函数中,可以绘制散点图的函数是。( )
- hist()
- scatter()
- bar()
- pie()
- 下列选项中,描述不正确的是。( )
- 箱形图可以提供有关数据分散情况的信息,可以很直观地查看数据的四分位分布
- 折线图是用直线段将数据连接起来而组成的图形,以折线的方式显式数据的变化
- 饼图显示一个数据序列中的各项的大小与各项总和的比例
- 条形图是由一系列高度不等的纵向条纹或线段表示数据分布情况
- 程序题
- 现有如图6-40所示的股票数据,根据图中的数据,完成以下需求:
- 股票数据
- 使用DataFrame创建该股票数据。
- 以证券简称为x轴,最新价为y轴使用条形图展示,将生成的条形图图以shares_bar.png为文件名保存在桌面上。
第7章习题
- 填空题
- ________是指多个时间点上形成的数值序列。
- ARIMA模型是一种用于时间序列________的常见统计模型。
- Pandas中的频率是由一个________和一个乘数组成的,比如7D。
- ________是指将时间序列从一个频率转换到另一个频率的处理过程。
- 在Pandas中,使用________类表示一个标准的时间段或时期。
- 判断题
- 最基本的时间序列类型是以时间戳为索引的Series对象。( )
- 如果相同频率的两个Period对象进行数学运算,那么计算结果为它们的单位数量。( )
- 任何类型的Pandas对象都可以进行重采样。( )
- DatetimeIndex是一种用来指代一系列时间戳的索引结构。( )
- 降采样时可能会导致一些时间戳没有对应的数据。()
- 选择题
- 下列选项中,不可以用做Pandas对象索引的是( )。
- Period
- DatetimeIndex
- PeriodIndex
- MultiIndex
- 请阅读下面一段程序:
import pandas as pd
period1 = pd.Period('2015/6/1')
print(period1 + 50)
执行上述程序,最终输出的结果为( )。
- 2015-07-18
- 2015-07-19
- 2015-07-20
- 2015-07-21
- 请阅读下面一段程序:
import pandas as pd
import numpy as np
date_index = pd.date_range(start="2018/08/10", periods=5)
date_se = pd.Series(np.arange(5), index=date_index)
sorted_se = date_se.sort_index()
print(sorted_se.truncate(after='2018-8-11'))
执行上述程序,最终输出的结果为( )。
2018-08-12 2
2018-08-13 3
2018-08-12 2
2018-08-13 3
2018-08-14 4
2018-08-10 0
2018-08-11 1
2018-08-12 2
2018-08-10 0
2018-08-11 1
- 下列函数中,用于创建固定频率DatetimeIndex对象的是( )。
- shift()
- date_range()
- period_range()
- asfreq()
- 关于重采样的说法中,下列描述错误的是( )。
- 重采样是将时间序列从一个频率转到另一个频率
- 升采样的时间颗粒是变小的
- 时间序列数据在降采样时,总体的数据量是增加的
- 时间序列数据在降采样时,总体的数据量是减少的
- 简答题
- 时间序列的数据有哪几种?
- 什么是降采样?什么是升采样?
- 程序分析题
阅读下面的程序,分析代码是否能够编译通过。如果能编译成功,请列出运行的结果,否则请说明编译失败的原因。
- 代码一:
import pandas as pd
date_index = pd.date_range('2018/08/10')
ser_obj = pd.Series(11, date_index)
print(ser_obj)
- 代码二:
import pandas as pd
period1 = pd.Period('2017/1')
period2 = pd.Period('2017/6')
print(period2-period1)
- 代码三:
date_index = pd.date_range('2018/09/10', '2018/09/13')
ser_obj = pd.Series(11, date_index)
ser_obj['2018\\09\\12']
第8章习题
- 填空题
- 常见的情感极性分析方法主要有 和 方法。
- 文本相似度的检测是根据 公式进行检测。
- 余弦相似度与向量的幅值 ,与向量的方向 。
- 文本分类属于 的机器学习。
- 文本分类的步骤包括 、 、 、 。
- 判断题
- 导入的文本数据不需要任何处理就可以进行分析。( )
- 文本分词的目的在于使用单词来表示文本特征。( )
- 可以在停用词表中随意添加停用词。( )
- 词干提取和词性还原的目的是相同的。( )
- jieba分词只能用于中文分词。( )
- 选择题
- 下列选项中,关于nltk库的描述不正确的是( )。
- nltk擅长处理英文文本
- nltk包括分词、词性标注、命名实体识别及句法分析等
- nltk是一个免费的、开源的、社区驱动的项目
- nltk库只能处理英文文本
- 根据中文的特点以下不属于分词算法的是( )。
- 基于规则的分词方法
- 基于统计的分词方法
- 基于理解的分词方法
- 基于动态的分词方法
- 下列选项中,不属于jieba分词模式( )。
- 支持精确模式
- 支持全模式
- 支持搜索引擎模式
- 支持繁体分词模式
- 阅读下面一段程序:
from nltk.corpus import stopwords
import nltk
sentence = 'Life is short,you need Python.'
words = nltk.word_tokenize(sentence)
stop_words = stopwords.words('english')
remain_words = []
for word in words:
if word not in stop_words:
remain_words.append(word)
print(remain_words)
执行上述程序,最终输出的结果为( )。
- ['Life', 'short', ',', 'need', 'Python', '.']
- ['Life', 'short', 'need', 'Python',]
- ['Life', 'is', 'short', ',', 'need', 'Python', '.']
- ['Life', 'short', ',', 'you' ,'need', 'Python', '.']
- 阅读下面一段程序:
import jieba
sentence = '人生苦短,我用Pyhton'
terms_list = jieba.cut(sentence, cut_all=True)
print(' '.join(terms_list))
执行上述程序,最终输出的结果为( )。
- 人生 苦短 我用 Pyhton
- 人生 苦短 我 用 Pyhton
- 人生苦短 我 用 Pyhton
- 人 生 苦 短 我 用 Pyhton
- 简答题
- 什么是文本分析?
- 请简述常用的文本情感分析方法。
- 请简述检测文本相似度的流程。
第1章
- 填空题
- 数据分析
- Anaconda
- 实时
- 判断题
- 错
- 对
- 错
- 选择题
- B
- C
- D
- C
- 简答题
- 数据分析是指,用适当的统计分析方法对收集来的大量数据进行分析,从中提取有用信息和形成结论,并加以详细研究和概括总结的过程。
- 明确目的和思路、数据收集、数据处理、数据分析、数据展现。
- (1)语法简单精炼,适合初学者入门;(2)拥有一个巨大且活跃的科学计算社区;(3)拥有强大的通用编程能力;(4)人工智能时代的通用语言;(5)方便对接其它语言。
第2章
- 填空题
- ndarray
- 二维
- 位长
- 广播
- 数组或列表
- 判断题
- 错
- 对
- 对
- 对
- 错
- 选择题
- B
- D
- A
- C
- A
- 简答题
- 答案:
NumPy数组不需要循环遍历,即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化运算。
- 答案:
两个数组的某一维度等长,或其中一个数组为一维数组。
- 程序题
- 答案:
import numpy as np
arr = np.zeros(5)
print(arr)
- 答案:
import numpy as np
arr = np.zeros((8,8),dtype=int)
arr[1::2,::2] = 1
arr[::2,1::2] = 1
print(arr)
第3章
- 填空题
- Numpy
- Series DataFrame
- 索引 数据
- 列表 字典
- 按置排序 按索引排序
- 判断题
- 对
- 对
- 错
- 错
- 错
- 选择题
- A
- B
- A
- A
- B
- 简答题
- Series是一个类似于一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成。
DataFrame是一个类似于二维数组的对象,它每列的数据可以是不同的数据类型。DataFrame的结构也是由索引和数据组成的,并且DataFrame的索引有行索引和列索引。
- 层次化索引是在单层索引的基础上进行延伸,它可以在一个轴上存在多层索引,并且能够以低纬度形式表示高维度的数据。
- 程序题
- 答案:
import numpy as np
import pandas as pd
df_data = np.array([[1, 5, 8, 8], [2, 2, 4, 9],
[7, 4, 2, 3], [3, 0, 5, 2]]) # 创建数组
col_data = np.array(['A', 'B', 'C', 'D']) # 创建数组
# 基于数组创建DataFrame对象
df_obj = pd.DataFrame(columns=col_data, data=df_data)
df_obj
- 答案:
sort_values_data = df_obj.sort_values(by=['B'], ascending=False)
sort_values_data
- 答案:
sort_values_data.to_csv(r'E:\\数据分析\\write_data.csv')
'写入完毕'
第4章
- 填空题
- 完整性 唯一性 权威性 合法性 一致性
- 人为原因 机械原因
- 列索引 行索引
- 横向堆叠 纵向堆叠 内连接 外连接
- 正态分布
- 判断题
- 对
- 错
- 对
- 错
- 错
- 选择题
- B
- A
- C
- D
- A
- 简答题
- 在数据预处理的过程中会根据数据的实际情况选择合适处理方法,常用的预处理操作有数据清洗、数据合并、数据重塑、数据转换等,在这几种操作中又分别含有不同的数据处理方法,例如在数据清洗过程中含有空值和缺失的检测、重复值的处理、异常值的处理等。
- 在Pandas中常用的数据合并操作有:concat()函数表示沿着一条轴将多个对象进行堆叠、merge()函数表示根据一个或多个键将不同的对象进行合并、join()方法表示根据索引或指定的列来合并数据、combine_first()方法表示填充合并数据。
- 程序题
- 答案:
import pandas as pd
import numpy as np
group_a = pd.DataFrame('A': [2,3,5,2,3],
'B': ['5',np.nan,'2','3','6'],
'C': [8,7,50,8,2],
'key': [3,4,5,2,5])
group_b = pd.DataFrame('A': [3,3,3],
'B': [4,4,4],
'C': [5,5,5])
print(group_a)
print(group_b)
- 答案:
group_a = group_a.combine_first(group_b)
group_a
- 答案:
group_a.rename(columns='key':'D')
第5章
- 填空题
- 拆分 应用 合并
- 列表或数组 DataFrame对象某列的名称 字典或Series对象 函数
- 广播
- DataFrameGroupBy
- 判断题
- 对
- 错
- 错
- 对
- 对
- 选择题
- A
- A
- B
- C
- D
- 简答题
- 分组聚合的流程一般为拆分、应用、合并。拆分是将数据集按照一定规则分成若干组;应用是对这些分组的数据进行一系列操作的过程;合并是将这些执行操作后的结果进行整合。
- 常用的分组方式主要有4种,分别为:列表或数组,列表或数组的长度需要与带分组轴的长度一致、DataFrame中某列的名称、字典或Series对象、函数。
- 程序题
- 答案:
import pandas as pd
studnets_data = pd.DataFrame('年级':['大一','大二','大三',
'大四','大二','大三',
'大一','大三','大四'],
'姓名':['李宏卓','李思真','张振海',
'赵鸿飞','白蓉','马腾飞',
'张晓凡','金紫萱','金烨'],
'年龄':[18,19,20,21,
19,20,18,20,21],
'身高':[175,165,178,175,
160,180,167,170,185],
'体重':[65,60,70,76,55,
70,52,53,73])
data = studnets_data.groupby('年级')
Freshman = dict([x for x in data])['大一']
print(Freshman)
- 答案:
data = data.apply(max)
del data['年级']
print(data)
- 答案:
Junior = dict([x for x in data])['大三']
print(Freshman['体重'].apply('mean'))
print(Junior['体重'].apply('mean'))
第6章
- 填空题
- 浏览器
- 直方图 饼图 折线图
- pyplot
- 数据的类型 分布情况
- bar
- 判断题
- 对
- 对
- 错
- 错
- 对
- 选择题
- A
- D
- D
- B
- D
- 程序题
- 答案:
import pandas as pd
stock_data = pd.DataFrame('证券代码':['000609','000993','002615',
'000795','002766','000971',
'000633','300173','300279','000831'],
'证券简称':['中迪投资','闽东电力','哈尔斯',
'英洛华','索菱股份','高升控股',
'合金投资','智慧松德','和晶科技','五矿稀土'],
'最新价':[4.80,4.80,5.02,3.93,6.78,
3.72,4.60,4.60,5.81,9.87],
'涨幅跌%':[10.09,10.09,10.09,10.08,
10.06,10.06,10.06,10.05,10.05,10.04])
print(stock_data)
- 答案:
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] # 正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 正常显示负号
x_axis = stock_data['证券简称']
y_axis = stock_data['最新价']
plt.bar(x_axis, y_axis)
# 先进行保存,如果在show()函数后面使用,会出现保存的图片是空白图片
plt.savefig(r"C:\\Users\\admin\\Desktop\\shares_bar.png")
plt.show()
第7章
- 填空题
- 时间序列
- 预测
- 基础频率
- 重采样
- Period
- 判断题
- 对
- 对
- 错
- 对
- 错
- 选择题
- A
- D
- D
- B
- C
- 简答题
- 答案:
- 时间戳(Timestamp),表示特定的时刻,比如现在。
- 固定周期(period),比如2018年或者2018年10月。
- 时间间隔(interval),由起始时间戳和结束时间戳表示。
- 答案
如果是将高频率数据聚合到低频率,则称为降采样;如果是将低频率数据转换到高频率数据,则称为升采样。
- 程序分析题
- 答案:运行产生ValueError异常,主要是因为date_range()函数中必须传入start、end、periods、freq中至少三个参数,而代码中只传入了start和freq参数。
- 答案:运行结果为5
- 答案:运行出现异常,因为日期字符串的格式不能够被正确解析
第8章
- 填空题
- 基于情感词典 基于机器学习
- 余弦相似度
- 无关 相关
- 有监督
- 数据集准备 特征抽取 模型训练 分类结果评价
- 判断题
- 错
- 对
- 错
- 对
- 错
- 选择题
- A
- D
- D
- A
- B
- 简答题
- 答案:
文本分析是指对文本的表示及其特征项的选取,通过一定的方法将文本中无用的信息删除,留下有用的信息,通过对这些有用的信息进行挖掘,最后根据结果分析文本得意图和目的。
- 答案:
常用的文本情感分析方法有两种分别是基于情感词典和基于机器学习。使用情感词典的方法主要是通过制定一系列的情感词典和规则,对文本进行段落拆解、句法分析、情感值计算,而机器学习方法是将问题进行归纳分类,根据分类对文本进行不同的标注。
- 答案:
文本相似度的检测一般分为如下步骤:1、通过特征提取的模型或手动实现,找出这两篇文章的关键词。2、从每篇文章中各取出若干个关键词,把这些关键词合并成一个集合,然后计算每篇文章中各个词对于这个集合中的关键词的词频。3、生成两篇文章中各自的词频向量。4、计算两个向量的余弦相似度,值越大则表示越相似。
python应用篇之数据可视化——总结
前言
我们通过七篇文章给大家大致介绍了数据可视化的制作过程,当然这个项目也是来自Eric Matthes编著的《Python编程从入门到实践书中项目。不过,本人是通过一定的特色,通过我学习项目的方式来给大家介绍这个项目。从环境搭建到后面一步步的实现。当然,随着项目的不断深入,代码的量越来越大,为了方便大家的阅读,我们只是将实现功能对应的代码方法进行了书写。今天,我们给出大家该项目的完整代码,给大家一个完整的效果。不过还是强烈读者从这个项目的开始阅读。这样,相信会对你获益匪浅。如果只是简单的将本文中的所有代码粘贴一遍,没有任何的用,可能你连这个项目的整个框架都不清楚。这里需要说明的是:由于本项目是数据的可视化,与上一个项目——外星人入侵还是有一定的区别的。外星人入侵是一个模块实现项目的一小个部分,它是依附于项目的全部代码才能跑起来,比如说我们前面介绍的武装飞船,我们光有这一块代码是跑不起来。但是我们的数据可视化是不一样的,它每个模块之间是相互独立的,没有必然的联系,耦合性是极低的,我们主要是给大家介绍数据的获取以及API的具体使用,将我们已有的数据进行分析,教大家如何制作一些漂亮的图表。
项目概括
数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关,其实准确地说,它是数据挖掘、人工智能地其中一个环节,而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是比较直观地图片。具体效果如下:
漂亮地呈现数据关乎的并非仅仅是漂亮的图片。以引人注目的简洁方式呈现数据,让用户很清晰、直观地明白数据背后所呈现的含义,从而更好地把控其中的规律。本项目首先给大家介绍的就是解决数据的问题,因为数据可视化的大前提是我们首先得有数据才行。主要通过三篇文章给大家介绍生成数据,即在没有数据的情况下,我们应该生成一些数据供我们分析;通过两篇文章介绍下载数据;有了数据之后,最后就是通过两篇文章给大家介绍API的具体使用与分析。
不过本文只是给大家介绍的是一些小的方法,比如柱状图、折线图怎么画,读者要想学这方面的知识,网上教程一大堆,大家可以去学习一下子,比较简单,应用还挺多,性价比还挺好的。接下来给大家介绍本次项目中的所有代码。方便大家整体上去参考。
完整代码
1、dice_visual.py
的实现
import pygal
from die import Die
# Create two D6 dice.
die_1 = Die()
die_2 = Die()
# Make some rolls, and store results in a list.
results = []
for roll_num in range(1000):
result = die_1.roll() + die_2.roll()
results.append(result)
# Analyze the results.
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
# Visualize the results.
hist = pygal.Bar()
hist.force_uri_protocol = http
hist.title = "Results of rolling two D6 dice 1000 times."
hist.x_labels = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add(D6 + D6, frequencies)
hist.render_to_file(dice_visual.svg)
2、die.py
的实现
from random import randint
class Die():
"""A class representing a single die."""
def __init__(self, num_sides=6):
"""Assume a six-sided die."""
self.num_sides = num_sides
def roll(self):
""""Return a random value between 1 and number of sides."""
return randint(1, self.num_sides)
3、die_visual.py
的实现
import pygal
from die import Die
# Create a D6.
die = Die()
# Make some rolls, and store results in a list.
results = []
for roll_num in range(1000):
result = die.roll()
results.append(result)
# Analyze the results.
frequencies = []
for value in range(1, die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
# Visualize the results.
hist = pygal.Bar()
hist.force_uri_protocol = http
hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = [1, 2, 3, 4, 5, 6]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add(D6, frequencies)
hist.render_to_file(die_visual.svg)
4、different_dice.py
的实现
from die import Die
import pygal
# Create a D6 and a D10.
die_1 = Die()
die_2 = Die(10)
# Make some rolls, and store results in a list.
results = []
for roll_num in range(50000):
result = die_1.roll() + die_2.roll()
results.append(result)
# Analyze the results.
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
# Visualize the results.
hist = pygal.Bar()
hist.force_uri_protocol = http
hist.title = "Results of rolling a D6 and a D10 50,000 times."
hist.x_labels = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add(D10 + D10, frequencies)
hist.render_to_file(dice_visual.svg)
5、mpl_squares.py
的实现
import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)
# Set chart title and label axes.
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# Set size of tick labels.
plt.tick_params(axis=both, labelsize=14)
plt.show()
6、random_walk.py
的实现
from random import choice
class RandomWalk():
"""A class to generate random walks."""
def __init__(self, num_points=5000):
"""Initialize attributes of a walk."""
self.num_points = num_points
# All walks start at (0, 0).
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
"""Calculate all the points in the walk."""
# Keep taking steps until the walk reaches the desired length.
while len(self.x_values) < self.num_points:
# Decide which direction to go, and how far to go in that direction.
x_direction = choice([1, -1])
x_distance = choice([0, 1, 2, 3, 4])
x_step = x_direction * x_distance
y_direction = choice([1, -1])
y_distance = choice([0, 1, 2, 3, 4])
y_step = y_direction * y_distance
# Reject moves that go nowhere.
if x_step == 0 and y_step == 0:
continue
# Calculate the next x and y values.
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
7、rw_visual.py
的实现
import matplotlib.pyplot as plt
from random_walk import RandomWalk
# Keep making new walks, as long as the program is active.
while True:
# Make a random walk, and plot the points.
rw = RandomWalk(50000)
rw.fill_walk()
# Set the size of the plotting window.
plt.figure(dpi=128, figsize=(10, 6))
point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,
edgecolor=none, s=1)
# Emphasize the first and last points.
plt.scatter(0, 0, c=green, edgecolors=none, s=100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c=red, edgecolors=none,
s=100)
# Remove the axes.
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.show()
keep_running = input("Make another walk? (y/n): ")
if keep_running == n:
break
8、scatter_squares.py
的实现
import matplotlib.pyplot as plt
x_values = list(range(1, 1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor=none, s=40)
# Set chart title, and label axes.
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# Set size of tick labels.
plt.tick_params(axis=both, which=major, labelsize=14)
# Set the range for each axis.
plt.axis([0, 1100, 0, 1100000])
plt.show()
9、highs_lows.py
的实现
import csv
from datetime import datetime
from matplotlib import pyplot as plt
# Get dates, high, and low temperatures from file.
filename = death_valley_2014.csv
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
dates, highs, lows = [], [], []
for row in reader:
try:
current_date = datetime.strptime(row[0], "%Y-%m-%d")
high = int(row[1])
low = int(row[3])
except ValueError:
print(current_date, missing data)
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
# Plot data.
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c=red, alpha=0.5)
plt.plot(dates, lows, c=blue, alpha=0.5)
plt.fill_between(dates, highs, lows, facecolor=blue, alpha=0.1)
# Format plot.
title = "Daily high and low temperatures - 2014\\nDeath Valley, CA"
plt.title(title, fontsize=20)
plt.xlabel(, fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis=both, which=major, labelsize=16)
plt.show()
10、btc_close_2017.py
的实现
from __future__ import (absolute_import, division, print_function,
unicode_literals)
try:
# Python 2.x 版本
from urllib2 import urlopen
except ImportError:
# Python 3.x 版本
from urllib.request import urlopen # 1
import json
import requests
import pygal
import math
from itertools import groupby
json_url = https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json
response = urlopen(json_url) # 2
# 读取数据
req = response.read()
# 将数据写入文件
with open(btc_close_2017_urllib.json, wb) as f: # 3
f.write(req)
# 加载json格式
file_urllib = json.loads(req.decode(utf8)) # 4
print(file_urllib)
json_url = https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json
req = requests.get(json_url) # 1
# 将数据写入文件
with open(btc_close_2017_request.json, w) as f:
f.write(req.text) # 2
file_requests = req.json() # 3
print(file_urllib == file_requests)
# 将数据加载到一个列表中
filename = btc_close_2017.json
with open(filename) as f:
btc_data = json.load(f) # 1
# 打印每一天的信息
for btc_dict in btc_data:
date = btc_dict[date]
month = int(btc_dict[month])
week = int(btc_dict[week])
weekday = btc_dict[weekday]
close = int(float(btc_dict[close])) # 1
print(" is month week , , the close price is RMB".format(
date, month, week, weekday, close))
# 创建5个列表,分别存储日期和收盘价
dates = []
months = []
weeks = []
weekdays = []
close = []
# 每一天的信息
for btc_dict in btc_data:
dates.append(btc_dict[date])
months.append(int(btc_dict[month]))
weeks.append(int(btc_dict[week]))
weekdays.append(btc_dict[weekday])
close.append(int(float(btc_dict[close])))
line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) # ①
line_chart.title = 收盘价(¥)
line_chart.x_labels = dates
N = 20 # x轴坐标每隔20天显示一次
line_chart.x_labels_major = dates[::N] # ②
line_chart.add(收盘价, close)
line_chart.render_to_file(收盘价折线图(¥).svg)
line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False)
line_chart.title = 收盘价对数变换(¥)
line_chart.x_labels = dates
N = 20 # x轴坐标每隔20天显示一次
line_chart.x_labels_major = dates[::N]
close_log = [math.log10(_) for _ in close] # ①
line_chart.add(log收盘价, close_log)
line_chart.render_to_file(收盘价对数变换折线图(¥).svg)
line_chart
def draw_line(x_data, y_data, title, y_legend):
xy_map = []
for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]): # 2
y_list = [v for _, v in y]
xy_map.append([x, sum(y_list) / len(y_list)]) # 3
x_unique, y_mean = [*zip(*xy_map)] # 4
line_chart = pygal.Line()
line_chart.title = title
line_chart.x_labels = x_unique
line_chart.add(y_legend, y_mean)
line_chart.render_to_file(title + .svg)
return line_chart
idx_month = dates.index(2017-12-01)
line_chart_month = draw_line(
months[:idx_month], close[:idx_month], 收盘价月日均值(¥), 月日均值)
line_chart_month
idx_week = dates.index(2017-12-11)
line_chart_week = draw_line(
weeks[1:idx_week], close[1:idx_week], 收盘价周日均值(¥), 周日均值)
line_chart_week
idx_week = dates.index(2017-12-11)
wd = [Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday]
weekdays_int = [wd.index(w) + 1 for w in weekdays[1:idx_week]]
line_chart_weekday = draw_line(
weekdays_int, close[1:idx_week], 收盘价星期均值(¥), 星期均值)
line_chart_weekday.x_labels = [周一, 周二, 周三, 周四, 周五, 周六, 周日]
line_chart_weekday.render_to_file(收盘价星期均值(¥).svg)
line_chart_weekday
with open(收盘价Dashboard.html, w, encoding=utf8) as html_file:
html_file.write(
<html><head><title>收盘价Dashboard</title><meta charset="utf-8"></head><body>\\n)
for svg in [
收盘价折线图(¥).svg, 收盘价对数变换折线图(¥).svg, 收盘价月日均值(¥).svg,
收盘价周日均值(¥).svg, 收盘价星期均值(¥).svg
]:
html_file.write(
<object type="image/svg+xml" data="0" height=500></object>\\n.format(svg)) # 1
html_file.write(</body></html>)
11、bar_descriptions.py
的实现
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
my_style = LS(#333366, base_style=LCS)
chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)
chart.title = Python Projects
chart.x_labels = [httpie, django, flask]
chart.force_uri_protocol = http
plot_dicts = [
value: 16101, label: Description of httpie.,
value: 15028, label: Description of django.,
value: 14798, label: Description of flask.,
]
chart.add(, plot_dicts)
chart.render_to_file(bar_descriptions.svg)
12、python_repos.py
的实现
import requests
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
# Make an API call, and store the response.
url = https://api.github.com/search/repositories?q=language:python&sort=stars
r = requests.get(url)
print("Status code:", r.status_code)
# Store API response in a variable.
response_dict = r.json()
print("Total repositories:", response_dict[total_count])
# Explore information about the repositories.
repo_dicts = response_dict[items]
names, plot_dicts = [], []
for repo_dict in repo_dicts:
names.append(repo_dict[name])
plot_dict =
value: repo_dict[stargazers_count],
label: repo_dict[description],
xlink: repo_dict[html_url],
plot_dicts.append(plot_dict)
# Make visualization.
my_style = LS(#333366, base_style=LCS)
my_config = pygal.Config()
my_config.force_uri_protocol = http
my_config.x_label_rotation = 45
my_config.show_legend = False
my_config.title_font_size = 24
my_config.label_font_size = 14
my_config.major_label_font_size = 18
my_config.truncate_label = 15
my_config.show_y_guides = False
my_config.width = 1000
chart = pygal.Bar(my_config, style=my_style)
chart.title = Most-Starred Python Projects on GitHub
chart.x_labels = names
chart.add(, plot_dicts)
chart.render_to_file(python_repos.svg)
13、hn_submissions.py
的实现
import requests
from operator import itemgetter
# Make an API call, and store the response.
url = https://hacker-news.firebaseio.com/v0/topstories.json
r = requests.get(url)
print("Status code:", r.status_code)
# Process information about each submission.
submission_ids = r.json()
submission_dicts = []
for submission_id in submission_ids[:30]:
# Make a separate API call for each submission.
url = (https://hacker-news.firebaseio.com/v0/item/ +
str(submission_id) + .json)
submission_r = requests.get(url)
print(submission_r.status_code)
response_dict = submission_r.json()
submission_dict =
title: response_dict[title],
link: http://news.ycombinator.com/item?id= + str(submission_id),
comments: response_dict.get(descendants, 0)
submission_dicts.append(submission_dict)
submission_dicts = sorted(submission_dicts, key=itemgetter(comments),
reverse=True)
for submission_dict in submission_dicts:
print("\\nTitle:", submission_dict[title])
print("Discussion link:", submission_dict[link])
print("Comments:", submission_dict[comments])
这就是本文的完整代码,希望读者学完之后可以有一个清晰的认知,对自己的Python基础知识的应用有一个较为深刻的认知。
每个模块实现过程
1、生成数据
[1].生成数据(上)
[2].生成数据(中)
[3].生成数据(下)
2、下载数据
[1].下载数据(上)
[2].下载数据(下)
3、使用API
[1].使用API(上)
[2].使用API(下)
这就是我们本项目每个模块实现的详情,大家可以认真阅读,对大家在日后的数据分析中一定有所帮助。
总结
本文给大家总结了《数据可视化》项目,从需求分析,到代码结构,以及给出了本项目的完整代码。最后贵吗总结了前面每个功能实现的文章链接,方便大家阅读。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!
以上是关于Python数据分析与应用_从数据获取到可视化题库及答案的主要内容,如果未能解决你的问题,请参考以下文章