练习6-统计
探索风速数据
步骤1 导入必要的库
运行以下代码
import pandas as pd
import datetime
步骤2 从以下地址导入数据
运行以下代码
# 本地对应的"wind.data"路径
path6 = "D:/hailong/hailong_download/pandas_exercise/exercise_data/wind.data"
步骤3 将数据作存储并且设置前三列为合适的索引
运行以下代码
data = pd.read_csv(path6,sep="\s+",parse_dates=[[0,1,2]]) #read_table已弃用
data.head()
步骤4 2061年?我们真的有这一年的数据?创建一个函数并用它去修复这个bug
运行以下代码
def fix_century(x):
year = x.year - 100 if x.year > 1989 else x.year
return datetime.date(year,x.month,x.day)
# apply the function fix_century on the column and replace the values to the right ones
data['Yr_Mo_Dy'] = data['Yr_Mo_Dy'].apply(fix_century)
# data.info()
data.head()
步骤5 将日期设为索引,注意数据类型,应该是datetime64[ns]
运行以下代码
# transform Yr_Mo_Dy it to date type datetime64
data["Yr_Mo_Dy"] = pd.to_datetime(data["Yr_Mo_Dy"])
# set 'Yr_Mo_Dy' as the index
data = data.set_index('Yr_Mo_Dy')
# data.info()
data.head()
步骤6 对应每一个location,一共有多少数据值缺失
运行以下代码
data.isnull().sum()
步骤7 对应每一个location,一共有多少完整的数据值
运行以下代码
data.shape[0] - data.isnull().sum()
步骤8 对于全体数据,计算风速的平均值
运行以下代码
data.mean().mean()
输出结果:10.227982360836924
步骤9 创建一个名为loc_stats的数据框去计算并存储每个location的风速最小值,最大值,平均值和标准差
运行以下代码
loc_stats = pd.DataFrame()
loc_stats['min'] = data.min() #min
loc_stats['max'] = data.max() #max
loc_stats['mean'] = data.mean() #mean
loc_stats['std'] = data.std() #standard deviations
loc_stats
步骤10 创建一个名为day_stats的数据框去计算并存储所有location的风速最小值,最大值,平均值和标准差
运行以下代码
day_stats = pd.DataFrame()
day_stats['min'] = data.min(axis=1) #min
day_stats['max'] = data.max(axis=1) #max
day_stats['mean'] = data.mean(axis=1) #mean
day_stats['std'] = data.std(axis=1) #standard deviations
day_stats.head()
步骤11 对于每一个location,计算一月份的平均风速
运行以下代码
# creates a new column 'date' and gets the values from the index
data['date'] = data.index
# creates a column for each value from date
data['month'] = data['date'].apply(lambda date: date.month)
data['year'] = data['date'].apply(lambda date: date.year)
data['day'] = data['date'].apply(lambda date: date.day)
# gets all value from the month 1 and assign to janyary_winds
january_winds = data.query('month == 1')
# gets the mean from january_winds, using .loc to not print the mean of month, year and day
january_winds.loc[:,'RPT':"MAL"].mean()
步骤12 对于数据记录按照年为频率取样
运行以下代码
data.query('month == 1 and day == 1')
步骤13 对于数据记录按照月为频率取样
运行以下代码
data.query('day == 1')