# %load bisai.py
import pandas as pd
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
engine = create_engine('mysql+mysqlconnector://root:675041@127.0.0.1:3306/world')
sql = 'select * from radar_lines_copy'
datas = pd.read_sql(sql, engine)
print('===***原数据条数为***===')
print(datas.shape[0])
for i in datas['accommodation_num']:
try:
i = float(i)
except:
datas = datas[datas['accommodation_num'] != i]
print('===***异常处理后据条数为***===')
print(datas.shape[0])
datas["lease_rate"] = datas["lease_rate"].astype(float)
datas['accommodation_num'] = datas['accommodation_num'].astype(float)
datas = datas.drop_duplicates()
print('===***删除重复值后据条数为***===')
print(datas.shape[0])
datas.dropna(subset=['province'], how='all', axis=0, inplace=True)
print('===***删除省份为空的数据后据条数为***===')
print(datas.shape[0])
city_isnull = datas.loc[datas['lease_rate'].isnull()]
province_lst = []
for t in city_isnull['province']:
province_lst.append(t)
province_lst = pd.unique(province_lst)
print(province_lst)
lst = []
for i in datas.groupby(datas['province']):
lst.append(list(i)[1])
menan_lst = 0.00
b = []
for i in province_lst:
for j in lst:
if i == j['province'].values[0]:
menan_lst = j['lease_rate'].sample(50).mean()
datas.loc[(datas['province'] == i) & (datas['lease_rate'].isnull())] = menan_lst
province = []
c = []
f = []
for j in lst:
province.append(j['province'].values[0])
mean_rate = datas.loc[datas['province'] == j['province'].values[0]]['lease_rate'].mean()
sum = datas.loc[datas['province'] == j['province'].values[0]]['accommodation_num'].sum()
c.append(mean_rate)
f.append(sum)
print(sum)
dict = dict(zip(province, c))
e = sorted(dict.items(), key=lambda x: -x[1])[:10]
print('===***有效数据条数为***===')
print(datas.shape[0])
x = []
y = []
for i, j in e:
x.append(i)
y.append(j)
for (j, p), i in zip(e, f):
p = "%.2f" % p
print("省份:{}=住宿场所数为{}个=出租率为:{}".format(j, i, p))
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(4, 3))
plt.xlabel('省份')
plt.ylabel('出租率')
plt.bar(x, y)
plt.show()
模拟题
- 单项选择题
- 下列关于ndarray对象描述正确的是( B )。
- ndarray对象中可以存储不同类型的元素
- B、ndarray对象中存储元素的类型必须是相同的
- ndarray对象不支持广播操作 D、ndarray对象不具备矢量运算能力"
- 下列选项中,不属于ndarray对象属性的是( D )。
- shape B、dtype C、ndim D、map
- 要想创建一个3 * 4的数组,下列选项正确的是( A )。
- np.arange(12).reshape(4, 3) B、np.arange(12).reshape(3, 4)
C、np.arange(7).reshape(4, 3) D、np.arange(7).reshape(3, 4)
- 关于ndarray对象属性,下列描述错误的是( C )。
- ndim属性表示数组轴的个数 B、shape属性表示每个维度上数组的大小
C、size属性表示数组元素的总个数,等于shape属性元组元素的和
D、dtype属性表示数组中元素类型的对象"
- 关于创建ndarray对象。下列描述错误的是( A )。
A、使用list()函数可以创建一个ndarray对象 B、通过ones()函数创建元素值都为1的数组
C、ndarray对象可以使用array()函数创建 D、通过zeros()函数创建元素值都是0的数组
- 下列函数中,可以用于创建等差数组的函数是(B )。
- empty() B、arange() C、zeros() D、ones()
7、"请阅读下列一段程序:
arr = np.arange(12).reshape(3, 4)
arr.shape
运行上述程序,它最终执行的结果为(C )。
A、3 B、4 C、(3, 4) D、(1, 2)
- 在创建ndarray对象时,可以使用( A)参数来指定元素类型。
- dtype B、dtypes C、type D、types
8、"请阅读下列一段示例程序:
import numpy as np
arr1 = np.array([[0], [1], [2]])
arr2 = np.array([1, 2])
result = arr1 + arr2
print(result.shape)
运行上述程序,那么最终输出的结果为( A)。
A、(3, 2) B、(2, 3) C、(3, 0) D、(2, 0)
9、"已知,有如下一个二维数组:
arr2d = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
如果希望获取元素5,则可以使用(A )实现。
A、arr2d[1, 1] B、arr2d[1] C、arr2d[2] D、arr2d[1, 0]
10、"请阅读下列一段示例程序:
arr2d = np.array([[11, 20, 5],[21, 15, 26],[17, 8, 19]])
arr2d[0:2, 0:2]
运行上述程序,它最终执行的结果为( A)。
A、array([[11, 20],[21, 15]]) B、array([11, 20]) C、array([21, 15]) D、array([11, 21])
11、"请阅读下面一段程序:
arr2d = np.empty((4, 4))
for i in range(4):
arr2d[i] = np.arange(i, i + 4)
arr2d[[0,4],[3,1]]
执行上述程序,它最终输出的结果为(B )。
- array([3., 4.]) B、程序抛出IndexError异常 C、array([3., 5.]) D、array([4., 4.])
12、"请阅读下面一段程序:
import numpy as np
np.arange(1, 10, 3)
运行程序,最终执行的结果是(B )。
A、array([1, 4, 7, 10]) B、array([1, 4, 7]) C、array([2, 5, 8]) D、array([3, 6, 9])
- 下列关于Pandas库的说法中正确的是(C )。
- Pandas中只有两种数据结构 B、Pandas不支持读取文本数据
C、Pandas是在NumPy基础上建立的新程序库
D、Pandas中Series和DataFrame可以解决数据分析中一切的问题
- 关于Series结构,下列描述正确的是( B)。
- Series是一个类似于二维数组的对象
- Series由一组数据和与之相关的索引两部分构成
C、Series只能保存整数和字符串类型的数据 D、Series的索引默认是从1开始
- 下列选项中,不能创建一个Series对象的是(D )。
- ser_obj = pd.Series([1, 2, 3, 4, 5])
- ser_obj = pd.Series({2001: 17.8, 2002: 20.1, 2003: 16.5})
C、ser_obj = pd.Series((1,2,3,4)) D、ser_obj = pd.Series(1,2)
- 下列关于DataFrame说法正确的是(C )。
- DataFrame结构是由索引和数据组成 B、DataFrame的行索引位于最右侧
C、创建一个DataFrame对象时需要指定索引 D、DataFrame每列的数据类型必须是相同的
- 下列方法中,可以将元组转换为MultiIndex对象的是(A )。
A、from_tuples() B、from_arrays() C、from_product() D、from_list()
- 在进行算术运算时,如果希望一次性输出多个统计指标可以使用(B )方法。
A、statistics() B、describe() C、all() D、results()
- 关于Pandas数据读写的说法中,下列描述错误的是(A)。
- read_csv()能够读取所有文本数据 B、read_sql()可以读取数据库中的数据
C、to_csv()能够将结构化数据写入到csv文件中
D、to_excel()能够将结构化数据写入到excel文件中
- 关于Pandas层次化索引,下列说法错误的是(B )。
- 层次化索引是指Pandas对象在一个轴方向上具有多层索引
- 层次化索引至多只能有两层索引
- 可以使用swaplevel()方法对层次化索引的位置交换顺序
D、使用sort_index()可以对索引进行排序
- 下列选项中,用于删除缺失值的方法是(C )。
A、isnull() B、delete() C、dropna() D、fillna()
22、"请阅读下面的程序:
from pandas import Series
import pandas as pd
from numpy import NaN
series_obj = Series([2, 1, NaN])
print(pd.isnull(series_obj))
执行上述程序后,最终输出的结果为(A )。
| A. 0 False 1 False 2 True | B. 0 True 1 True 2 False |
| C. 0 False 1 False 2 False | D. 0 True 1 True 2 True |
23、下列选项中,关于fillna()方法描述正确的是(D )。
- fillna()方法只能填充替换值为NaN的数据 B、只支持前向填充方式
C、默认可支持填充的最大数量为1 D、fillna()方法可以填充替换值为NaN和None的数据
- 下列选项中,关于duplicated()方法描述正确的是( B )。
- duplicate()方法用于删除重复值 B、duplicate()方法用于标记重复值
C、duplicate()方法会改变原始数据 D、duplicate()方法会将重复的数据标记为False
- 下列选项中,关于drop_duplicates()方法描述错误的是(A )。
- 仅支持单一特征数据的去重 B、仅对Series和DataFrame对象有效
C、数据去重时默认保留第一个数据 D、该方法不会改变原始数据排列"
- 关于异常值的说法,下列选项中描述错误的是(A)。
- 异常值是指样本中明显偏离其余观测值的个别值
- 可以使用3σ原则检测异常值 C、可以使用Pandas中的箱线图检测异常值
D、异常值可以使用其它的值来替换
- 下列关于数据预处理的说法中,描述不正确的是( D )。
- 数据清洗的目的是为了提高数据质量 B、异常值不一定要删除
C、通过drop_duplicates()方法可以删除重复数据
D、concat()函数可以根据一个或多个键将不同的DataFrame进行合并
- 关于预处理的说法中,下列选项中描述不正确是( D )。
- concat()函数可以沿着一条轴将多个对象进行堆叠
- merge()函数可以根据一个或多个键将不同的DataFrame进行合并
- 可以使用rename()方法对索引进行重命名操作
D、unstack()方法可以将列索引旋转为行索引
- 以下关于Pandas数据转换的说法中正确的是( D )。
- Pandas不支持重命名轴索引 B、Pandas 通过 cut()函数能够实现哑变量操作
C、Pandas中只能重命名列索引的名称 D、哑变量处理就是将分类变量转换为哑变量矩阵
- 下列关于缺失值检测的说法中,正确的是(B)。
- null()和notnull()可以对缺失值进行处理
- dropna()方法既可以删除观测记录,也可以删除特征
- fillna()方法中用来替换缺失值的值只能是DataFrame对象
D、Pandas库中的interpolate模块包含了多种插值方法
- 下列函数中,用于沿着轴方向堆叠Pandas对象的是(A)。
A、concat() B、join() C、merge() D、combine_first()
- 关于数据重塑的说法中,下列选项描述错误的是( C )。
- 数据重塑可以将DataFrame转换为Series B、stack()方法可以将列索引转换为行索引
C、对一个DataFrame使用stack()方法后返回的一定是一个Series
D、unstack()方法可以将行索引转换为列索引"
- 关于哑变量的说法中,下列选项描述错误的是( D )。
- 哑变量是人为虚设的变量
- 哑变量在转换成指标矩阵后,其值通常为0或1
- Pnadas中get_dummies()函数可以对类别进行哑变量处理
D、哑变量的使用没有实际意义
- 关于分组聚合过程的说法中,下列描述不正确的是( D )。
- 拆分是指将数据集按照一些标准拆分为若干个组
- 应用是指将某个函数或方法应用到每个分组
- 合并是指将产生的新值整合到结果对象中
D、只能对纵轴方向上的数据进行分组
- 下列关于groupby()方法的说法中,描述正确的是(C )。
- 用于将数据集实现分组与聚合操作 B、调用groupby()方法返回一个DataFrameBy对象
C、调用groupby()方法返回一个GroupBy对象
D、groupby()方法只能将数据集按照纵轴方向进行分组
- 下列选项中,不属于groupby()方法分组方式的是(D )。
A、列表或数组 B、DataFrame中某列的名称 C、字典或Series D、集合
- 关于agg()方法的用法中,下列描述错误的是(C)。
A、可以对每列数据应用同一个函数 B、可以对一列数据应用不同的函数
C、每列的数据只能使用相同的函数 D、可以对不同的列使用不同的函数
- 关于transform()方法的说法中,下列描述错误的是(C)。
A、transform()方法可以使用广播
B、使用transform()方法可以返回一个与分组大小相等的数组
C、transform()方法只能使用内置方法对数据进行转换操作
D、transform()方法对DataFrame和Series都适用
- 关于apply()方法的说法中,下列描述正确的是(A)。
- apply()方法是对DataFrame B、apply()方法能够实现所有agg方法的功能
C、apply()方法和map方法都能够进聚合操作 D、apply()方法只能够对行列进行操作
- 下列图表中,能够识别异常值的是(A)。
- 箱形图 B、折线图 C、饼图 D、散点图



