第二章:特征理解——我的数据集中有什么

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')
上一篇下一篇

猜你喜欢

热点阅读