数据科学技术练习 3-数据汇总和统计

思考与练习1

1. 创建并访问Series对象。

1)创建如下表的Series数据对象,其中a-f为索引;

2)增加数据27,索引为g;

3)修改索引d对应的值为40;

4)查询值大于27的数据;

5)删除位置为1-3的数据。

【提示】位置1-3的索引列表,可以用 series.index[1:4] 来得 

import pandas as pd
import numpy as np
from pandas import Series,DataFrame

#1)
data = Series([30,25,27,41,25,34],index = ['a','b','g','d','e','f'])
print(data)

#2)
a = Series([40],index = ['d'])
newdata = data.append(a)
print(newdata)

#3)
data['d'] = 40
print(data['d'])

#4)
print(data[data.values >= 27])

#5)
newdata = data.drop(data.index[1:4])
print(newdata)

课后练习1 

1. 创建并访问DataFrame对象。

a) 创建3×3DataFrame数据对象:数据内容为1-9;行索引为字符a,b,c; 列索引为字符串one,two,three;

b) 查询列索引为two和three两列数据;

c) 查询第0行、第2行、第0列、第2列数据;

d) 筛选第1列中值大于2的所有行数据,另存为data1对象;

e) 为data1添加一列数据,列索引为four,值都为10;

f) 将data1所有值大于9的数据修改为8;

g) 删除data1中第0行和第1行数据。

【提示】

1)生成数据,使用numpy的arange()函数和reshape()函数;

2)使用 data>9生成布尔型的DataFrame,用于整个DataFrame的数据过滤。

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#a)
data0 = DataFrame(np.arange(1,10).reshape(3,3),index = ['a','b','c'],columns = ['one','two','three'])
print(data0)

#b)
print(data0[['two','three']])

#c)
print(data0.iloc[[0,2],[0,2]])

#d)
data1 = data0.loc[data0['two'] > 2]
print(data1)

#e)
data1['four'] = [10,10]
print(data1)

#f)
data1[data1 > 9] = 8
print(data1)

#g)
print(data1.drop(data1.index[0:2],axis = 0))

 

思考与练习2

1. 创建50×7的DataFrame对象,数据为 [10,99]之间的随机整数; columns为字符a-g;将DataFrame对象保存到csv文件中。

【提示】使用NumPy的随机生成函数randint()生成数据。

import numpy as np
from pandas import DataFrame

df = DataFrame(np.random.randint(10,100,size = (50,7)),column = ['a','b','c','d','e','f','g'])
df.to_csv = ('out.csv', mode = 'w', header = True, index = False)

2. 海伦一直使用在线交友网站寻找适合的约会对象, 她将交友数据存放在 datingTestSet.xls文件中。

1)从文件中读取有效数据保存到Dataframe对象中,跳过所有文字解释行;

2)列索引名设为 ['flymiles' , 'videogame' , 'icecream' , 'type‘];

3)显示读取到的前面5条数据;

4)显示所有'type'为'largeDoses‘的数据;

5)将平均每周玩视频游戏时间超过10的数据都改成10;


import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#1,2)
df = pd.read_csv('D:/20222023第一学期/数据科学技术/datingTestSet.csv', header = None, names = ['flymiles','videogame','icecream','type'], skiprows = 2)
print(df)

#3)
print(df[0:5])

#4)
print(df.loc[df['type'] == 'largeDoses',:])

#5)
print(df.loc[df['videogame'] > 10,'videogame'] == 10)

#6)
df.to_csv('D:/20222023第一学期/数据科学技术/datingTestSet.csv',mode='w')

思考与练习3

1.数据清洗。

1)从studentsInfo.xlsx 文件的“Group1”表单中读取数据;

2)将“案例教学”列数据值全改为NaN;

3)滤除每行数据中缺失3项以上(包括3项)的行;

4)滤除值全部为NaN的列;


import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#1)
student = pd.read_excel('D:/20222023第一学期/数据科学技术/studentsInfo.xlsx','Group1',index_col = 0)
print(student)

#2)
student['案例教学'] = np.nan
print(student)

#3)
print(student.dropna(thresh = 7))

#4)
print(student.dropna(axis = 1, how = 'all'))

2.数据填充。

1)使用习题1的数据;

2)使用列的平均值填充“体重”和“成绩”列的NaN数据;

3)使用上一行数据填充“年龄”列的NaN数据;

4)使用“中位数”填充“生活费用”NaN数据。

【提示:】使用df[“生活费用”].median() 计算中位数。

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#1)
student = pd.read_excel('D:/20222023第一学期/数据科学技术/studentsInfo.xlsx','Group1',index_col = 0)
print(student)

#2)
student.fillna({'体重':student['体重'].mean(),'成绩':student['成绩'].mean()},inplace = True)
print(student)

#3)
student['年龄'].fillna(method = 'ffill',inplace = True)
print(student)

#4)
student.fillna({'月生活费':student['月生活费'].median()}, inplace = True)
print(student)

课后作业2

1. 数据合并。

1)从studentsInfo.xlsx的“Group3”页读取数据,将序号、性别、年龄项 保存到data1对象;

2)从studentsInfo.xlsx的“Group3”页读取数据,将序号、身高、体重、 成绩项保存到data2对象;

3)将data2合并到data1中,连接方式为内连接。


import pandas as pd
import numpy as np
from pandas import Series, DataFrame

student = pd.read_excel('D:/20222023第一学期/数据科学技术/studentsInfo.xlsx','Group3',index_col = None)

#1.1)
data1 = student[['序号','性别','年龄']]
print(data1)

#1.2)
data2 = student[['序号','身高','体重','成绩']]
print(data2)

#1.3)
data = pd.merge(data1, data2, how = 'inner')
print(data)

2. 数据排序和排名。

1)使用练习1最后合并的数据;

2)按月生活费对数据升序排序;

3)按身高对数据降序排名,并列取值方式设置为min

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#1)
student = pd.read_excel('D:/20222023第一学期/数据科学技术/studentsInfo.xlsx','Group1',index_col = 0)
print(student)

#2)
print(student.sort_values(by = '月生活费', ascending = True))

#3)
student['成绩排名'] = student['成绩'].rank(method = 'min', ascending = False)
print(student)

综合练习题1

根据某系的实验教学计划,完成以下分析:

1) 读取DataScience.xls文件数据,创建为data数据对象;

2) 查询df的数据量和基本结构(df.index,df.columns);

3) 查询df中是否含有NaN数据?将含有NaN数据的行导出为数据文件 pre.csv,判断采用何种数据清洗模式:填充、删除或手工填充;

4) 查询课程名称、实验项目名称、实验类型和二级实验室四列数据内容;

5) 统计每一门课程的实验课时数;

6) 统计每周开设所有实验课时数;

7) 统计每门课程的实验类型分布(crosstab);

8) 统计每个班级的实验课课表;

9) 分析各二级实验室承担的实验课时量;

10) 分析各二级实验室能够支持的实验类型.

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

#1)
df = pd.read_excel('D:/20222023第一学期/数据科学技术/DataScience.xls','Sheet1',index_col = 0)
print(df)

#2)
print(df.index,df.columns)

#3)
print(df.isnull().any())
df[df.isnull().any(axis = 1)].to_csv('pre.csv',mode = 'w')    
df.dropna(how = 'all',inplace = True)            #删除全部值都为Nan的行
df.drop_duplicates(inplace = True)               #删除重复的数据
df.fillna(method = 'ffill',inplace = True)       #采用前一行数据填充


#4)
print(df[['课程名称','实验项目名称','实验类型','二级实验室名称']])

#5)
print(df.groupby('课程名称')['实验课时数'].sum())

#6)
print(df.groupby('星期')['实验课时数'].sum())   

#7)
print(pd.crosstab(df['课程名称'],df['实验类型']))

#8)
print(df[['班级','周次','星期','节次','课程名称','实验项目名称','实验课时数','实验类型','班级人数','二级实验室名称','实验地点门牌号']].sort_values(by = ['班级','周次','星期','节次'],ascending = True))

#9)
print(df.groupby('二级实验室名称')['实验课时数'].sum())

#10)
print(pd.crosstab(df['二级实验室名称'],df['实验类型']))

综合练习题2

根据银行储户的基本信息,完成以下分析。

1)从“bankpep.csv”文件中读取用户信息。

2)查看储户的总数,以及居住在不同区域的储户数。

3)计算不同性别储户收入的均值和方差。

4)统计接受新业务的储户中各类性别、区域的人数。

5)将存款账户、接受新业务的值转化为数值型。

6)分析收入、存款账户与接收新业务之间的关系。

 

import pandas as pd
import numpy as np
from pandas import Series,DataFrame

#1)
df = pd.read_csv('D:/20222023第一学期/数据科学技术/bankpep.csv')
print(df)

#2)
print(df.index)
print(df.groupby('region')['id'].count())

#3)
print(df.groupby(['sex']).aggregate({'income':[np.mean,np.var]}))

#4)
print(df.groupby(['sex','region'])['id'].count())

#5)
df[['save_act','pep']] = np.where(df[['save_act','pep']] =='YES',1,0)
print(df)

#6)
print(df[['income','save_act','pep']].corr())

你可能感兴趣的:(python,pandas)