第二章:特征理解——我的数据集中有什么
2019-09-30 本文已影响0人
了不起的一一
EDA
EDA全称为Exploratory Data Analysis,是一种让我们更好理解数据的方法,具体表现为对数据进行可视化操作。这种方法可以告诉我们数据集中有什么,没有什么。
0. 常用的统计函数Python
统计均值
pd.mean( )
1.区分数据类型
定性数据——categories
类别,描述数据的属性。如考试等级,天气状况。也可以称为维度。
定量数据——numerical
数值,衡量数据的数量。如气温,学生的成绩。也可以称为度量。
2.数据类型细分
可以把数据类型细分为4种:定类、定序、定距、定比。
定类:属于定性数据,只按照名称分类。如血型、动物种类。
定序:属于定性数据,按名称分类,可以自然排序。
定距:属于定量数据,可以对数据进行排序,进行加减法操作。
定比:属于定量数据,拥有定距数据的数据,同时还可以进行比较(¥100是¥50的两倍)。
3.表示方式
可视化方式:条形\饼形图,箱型图,直方图。
可视化方式 | 描述 |
---|---|
条形\饼形图 | 类别+数值组成。可以是类别+类别的频数,也可以是一个类别+一个数值组成。 |
箱型图 | 表现数据的统计学指标:最小最大值、四分位数等。用于定量数据的统计,但有时候定序数据的频数也可以使用 |
直方图 | 定量数据的分布表现形式 |
四种类型与可视化方式
描述方式\数据类型 | 定类 | 定序 | 定距 | 定比 |
---|---|---|---|---|
条形\饼形图 | Y | Y | N | N |
箱型图 | N | Y(有时) | Y | Y |
直方图 | N | Y(有时) | Y | Y |
4.举例
定类
# 以Grade为例子
# 统计每个类型的个数
# 对种类进行计数
g_count = salary_ranges['Grade'].value_counts().head()
print(g_count)
# 画柱状图
salary_ranges['Grade'].value_counts().sort_values(
ascending=False).head().plot(kind='bar')
# 画饼图
salary_ranges['Grade'].value_counts().sort_values(
ascending=False).head(5).plot(kind='pie')
定序
# 可以自然排序,可以数学操作:中位数与百分数
# 导入旧金山国际机场的喜欢程度数据
customer = pd.read_csv('./data/2013_SFO_Customer_survey.csv')
print(customer.shape)
art_rating = customer['Q7A_ART']
print(art_rating.describe())
# 只取1~5
art_rating = art_rating[(art_rating >= 1) & (art_rating <= 5)]
art_rating = art_rating.astype(str)
print(art_rating.describe())
art_rating.value_counts().plot(kind='pie')
# art_rating.value_counts().plot(kind='bar')
# art_rating.value_counts().plot(kind='box')
定距
# 定量数据-定距类
climate = pd.read_csv('./data/GlobalLandTemperaturesByCity.csv')
print(climate.head())
print('*'*20+'以上是未处理的数据')
climate.dropna(axis=0,inplace=True)
print(climate.head())
print('*'*20+'以上是处理过')
nastatistic = climate.isnull().sum()
print(nastatistic)
print('*'*20)
climate['AverageTemperature'].hist()
climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value : value.year)
climate_sub_us = climate.loc[climate['Country'] == 'United States']
climate_sub_us[' '] = climate_sub_us['year'].map(lambda x: int (x/100+1))
climate_sub_us['AverageTemperature'].hist(by=climate_sub_us['century'],
sharex=True,sharey=True,
figsize=(10,10),
bins=20)
climate_sub_us.groupby('century')['AverageTemperature'].mean().plot(kind='line')
定比
salary_ranges = pd.read_csv('Salary_Ranges_by_Job_Classification.csv')
fig = plt.figure(figsize=(15,5))
ax = fig.gca()
salary_ranges['Biweekly High Rate'] = salary_ranges['Biweekly High Rate'].map(lambda value: value.replace('$',''))
# Check to see the '$' has been removed
salary_ranges.head()
# Convert the Biweeky columns to float
salary_ranges['Biweekly High Rate'] = salary_ranges['Biweekly High Rate'].astype(float)
# Convert the Grade columns to str
salary_ranges['Grade'] = salary_ranges['Grade'].astype(str)
# check to see if converting the data types worked
salary_ranges.info()
salary_ranges.describe()
# Which Grade has the highest Biweekly high rate
# What is the average rate across all of the Grades
# Highest Salary
salary_ranges.groupby('Grade')[['Biweekly High Rate']].mean().sort_values(
'Biweekly High Rate', ascending=False).head(20).plot.bar(stacked=False, ax=ax, color='darkorange')
ax.set_title('Top 20 Grade by Mean Biweekly High Rate')