数据分析-练习
练习一:
数据说明:
数据是1个冷库的温度数据,1-7对应7个温度采集设备,1分钟采集一次。
数据处理目标:
用1-4对应的4个必须设备,通过建立冷库的温度场关系模型,预估出5-7对应的数据。
最后每个冷库中仅需放置4个设备,取代放置7个设备。
f(1-4) --> y(5-7)
数据处理过程:
1、原始数据中有丢帧现象,需要做预处理;
2、matplotlib 绘图;
3、建立逻辑回归模型。
无标准答案,按个人理解操作即可,请把自己的操作过程以文字形式简单描述一下,谢谢配合。
import numpy as np import pandas as pd from pandas import Series,DataFrame df = pd.read_excel('./测试数据.xlsx') df.drop(labels=['none','none1'],axis=1,inplace=True) #删除空所对应的行 df.loc[df.notnull().all(axis=1)] #or df.dropna(axis=0) #覆盖空值 df = df.fillna(method='ffill',axis=0).fillna(method='bfill',axis=0) #检测df的列中是否还存在空值 df.isnull().any(axis=0) df.notnull().all(axis=0) time True 1 True 2 True 3 True 4 True 5 True 6 True 7 True dtype: bool
练习二:
需求:
- 导入文件,查看原始数据
- 将人口数据和各州简称数据进行合并
- 将合并的数据中重复的abbreviation列进行删除
- 查看存在缺失数据的列
- 找到有哪些state/region使得state的值为NaN,进行去重操作
- 为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
- 合并各州面积数据areas
- 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
- 去除含有缺失数据的行
- 找出2010年的全民人口数据
- 计算各州的人口密度
- 排序,并找出人口密度最高的五个州 df.sort_values()
import numpy as np from pandas import DataFrame,Series import pandas as pd #导入文件,查看原始数据 abb = pd.read_csv('./data/state-abbrevs.csv') pop = pd.read_csv('./data/state-population.csv') area = pd.read_csv('./data/state-areas.csv') abb.head(1) pop.head(1) #将人口数据和各州简称数据进行合并 abb_pop = pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')#how一定要用outer,保证数据的完整性 abb_pop.head(5) #将合并的数据中重复的abbreviation列进行删除 abb_pop.drop(labels='abbreviation',axis=1,inplace=True) abb_pop.head() #查看存在缺失数据的列 abb_pop.isnull().any(axis=0) #找到有哪些state/region使得state的值为NaN,进行去重操作 #1.找出state列中的空值 #2.找出空值对应的简称的值 #3.对简称值进行去重 #1.找出state列中的空值 abb_pop['state'].isnull() abb_pop.loc[abb_pop['state'].isnull()] #就是得到了state列中空值对应的行数据 #2.找出空值对应的简称的值 abb_pop.loc[abb_pop['state'].isnull()]['state/region'] #3.对简称值进行去重 abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique() #为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN #结论:只有PR和USA这两种类型的简称对应的全称为空 PUERTO RICO #state这一列中所有的空值可以分类两种分类,一种分类是PR简称对应的空,一种分类USA简称对应的空 #1.先将两种不同分类的空定位到 #2.给每一种分类的空进行指定形式的赋值 #1.先将两种不同分类的空定位到(定位的条件应该是PR或者USA) #将PR所对应的行数据找出 abb_pop['state/region'] == 'PR' abb_pop.loc[abb_pop['state/region'] == 'PR'] #PR分类的空对应的行索引 indexs = abb_pop.loc[abb_pop['state/region'] == 'PR'].index #2.给每一种分类的空进行指定形式的赋值 abb_pop.loc[indexs,'state'] = 'PUERTO RICO' #将USA对应的空进行覆盖 abb_pop['state/region'] == 'USA' abb_pop.loc[abb_pop['state/region'] == 'USA'] indexs = abb_pop.loc[abb_pop['state/region'] == 'USA'].index abb_pop.loc[indexs,'state'] = 'United States' area.head(2) abb_pop_area = pd.merge(abb_pop,area,how='outer') abb_pop_area.head(2) #我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行 abb_pop_area['area (sq. mi)'].isnull() abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()] abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()] indexs = abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()].index #去除含有缺失数据的行 abb_pop_area.drop(labels=indexs,axis=0,inplace=True) #找出2010年的全民人口数据 df_2010 = abb_pop_area.query('year==2010 & ages=="total"') df_2010.head() #计算各州的人口密度 abb_pop_area['midu'] = abb_pop_area['population']/abb_pop_area['area (sq. mi)'] abb_pop_area.head() #排序,并找出人口密度最高的五个州 df.sort_values() abb_pop_area.sort_values(by='midu',axis=0,ascending=False)
练习三:美国2012年总统候选人政治献金分析
cand_nm(候选人姓名),contbr_nm(捐赠者姓名),contbr_city,contbr_st,contbr_zip,contbr_employer,contbr_occupation(捐赠者的职业),contb_receipt_amt(捐赠金额),contb_receipt_dt(捐赠日期)
方便大家操作,将月份和参选人以及所在政党进行定义:
months = {'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6,
'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT': 10, 'NOV': 11, 'DEC' : 12}
of_interest = ['Obama, Barack', 'Romney, Mitt', 'Santorum, Rick',
'Paul, Ron', 'Gingrich, Newt']
parties = {
'Bachmann, Michelle': 'Republican',
'Romney, Mitt': 'Republican',
'Obama, Barack': 'Democrat',
"Roemer, Charles E. 'Buddy' III": 'Reform',
'Pawlenty, Timothy': 'Republican',
'Johnson, Gary Earl': 'Libertarian',
'Paul, Ron': 'Republican',
'Santorum, Rick': 'Republican',
'Cain, Herman': 'Republican',
'Gingrich, Newt': 'Republican',
'McCotter, Thaddeus G': 'Republican',
'Huntsman, Jon': 'Republican',
'Perry, Rick': 'Republican'
}
1.读取文件usa_election.txt
2.查看文件样式及基本信息
3.【知识点】使用map函数+字典,新建一列各个候选人所在党派party
4.使用np.unique()函数查看colums:party这一列中有哪些元素
5.使用value_counts()函数,统计party列中各个元素出现次数,value_counts()是Series中的,无参,返回一个带有每个元素出现次数的Series
6.【知识点】使用groupby()函数,查看各个党派收到的政治献金总数contb_receipt_amt
7.查看具体每天各个党派收到的政治献金总数contb_receipt_amt 。使用groupby([多个分组参数])
8. 将表中日期格式转换为'yyyy-mm-dd'。日期格式,通过函数加map方式进行转换
9.得到每天各政党所收政治献金数目。 考察知识点:groupby(多个字段)
11.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁 :查看老兵们捐赠给谁的钱最多
13.找出各个候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额 .通过query("查询条件来查找捐献人职业")
import numpy as np import pandas as pd from pandas import Series,DataFrame months = {'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6, 'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT': 10, 'NOV': 11, 'DEC' : 12} of_interest = ['Obama, Barack', 'Romney, Mitt', 'Santorum, Rick', 'Paul, Ron', 'Gingrich, Newt'] parties = { 'Bachmann, Michelle': 'Republican', 'Romney, Mitt': 'Republican', 'Obama, Barack': 'Democrat', "Roemer, Charles E. 'Buddy' III": 'Reform', 'Pawlenty, Timothy': 'Republican', 'Johnson, Gary Earl': 'Libertarian', 'Paul, Ron': 'Republican', 'Santorum, Rick': 'Republican', 'Cain, Herman': 'Republican', 'Gingrich, Newt': 'Republican', 'McCotter, Thaddeus G': 'Republican', 'Huntsman, Jon': 'Republican', 'Perry, Rick': 'Republican' } df = pd.read_csv('./data/usa_election.txt') df.head() #【知识点】使用map函数+字典,新建一列各个候选人所在党派party df['party'] = df['cand_nm'].map(parties) df.head() # 查看单独一行,是否加上了'party'一列 # 使用np.unique()函数查看colums:party这一列中有哪些元素 df['party'].unique() # 使用value_counts()函数,统计party列中各个元素出现次数 df['party'].value_counts() # 【知识点】使用groupby()函数,查看各个党派收到的政治献金总数contb_receipt_amt df.groupby(by='party')['contb_receipt_amt'].sum() # 查看具体每天各个党派收到的政治献金总数contb_receipt_amt 使用groupby([多个分组参数]) df.groupby(by=['contb_receipt_dt','party'])['contb_receipt_amt'].sum() # 查看日期格式,并将其转换为'yyyy-mm-dd'日期格式,通过函数加map方式进行转换:months['月份简写']==》mm形式的月份 def transformDate(d): day,month,year = d.split('-') month = months[month] return '20'+year+'-'+str(month)+'-'+day df['contb_receipt_dt'] = df['contb_receipt_dt'].map(transformDate) df.head(5) # 查看是否转换成功 # 查看老兵(捐献者职业)DISABLED VETERAN主要支持谁 :查看老兵们捐赠给谁的钱最多 考察Series索引 #将老兵对应的行数据取出 df['contbr_occupation'] == 'DISABLED VETERAN' oldBing_df = df.loc[df['contbr_occupation'] == 'DISABLED VETERAN'] oldBing_df.groupby(by='cand_nm')['contb_receipt_amt'].sum() #找出各个候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额通过query("查询条件来查找捐献人职业") df['contb_receipt_amt'].max() df.query('contb_receipt_amt == 1944042.43') max_amt = df.groupby(by='cand_nm')['contb_receipt_amt'].max() for i in range(max_amt.size): max_money = max_amt[i] display(df.query('contb_receipt_amt == '+str(max_money)))

浙公网安备 33010602011771号