一、数据分析概述
1.数据分析的定义
数据分析可以分成⼴义的数据分析和狭义的数据分析。 广义的数据分析包含狭义的数据分析和数据挖掘。
1.1狭义的数据分析
狭义的数据分析是根据分析目标,使用⼀定的工具和方法,有针对性地对数据进行收集、加工整理、分析、展现,总结出数据背后的规律和所反映问题的过程。
1.2数据挖掘
数据挖掘是指从⼤量数据中,运⽤数学、统计学、计算机等知识,从⼤量的数据中挖掘出有价值 的信息和知识的过程。
2.数据分析的作⽤
对现有数据进行分析处理,在工程应用中可以对试验或模型数据进行分析,根据数次试验的比对结果对原有模型进行修正及优化;在市场调研等应用中,可根据数据分析的结果了解调研领域的现状,探索关注问题的原因并预测未来发展趋势及市场走向等。
二、数据分析工具
1.分析工具简介
(1)数据存储层常用的数据分析工具:Access、SQL Server、DB、Oracle等;
(2)数据处理层常用的数据分析工具:pandas、Hadoop等。
2.Pandas数据分析工具
本文主要介绍pandas数据分析工具的用法。pandas库是⼀个专门用来解决数据分析问题的库,具有以下两大优势:
1)速度快:快速处理⼤型数据集;
2)效率⾼:提供⼤量高效处理数据的函数和方法。
2.1 pandas 库的基本数据结构
在数据分析的过程中,大部分的⼯作是对数据进⾏各种各样的操作。而pandas 库提供了两种数据结构: DataFrame和Series。
Series主要由⼀组数据及其对应的索引组成。
(1)创建Series对象
# 传入data列表创建Series对象
pd.Series(data)
DataFrame对象是⼀种表格型的数据结构,包含⾏索引、列索引以及⼀组数据 。
(2)创建DataFrame对象
传入data字典,创建DataFrame对象
pd.DataFrame(data)
2.2 pandas库读取数据
读取csv格式⽂件,使⽤read_csv()方法导入csv文件,读取数据。
三、数据分析流程
- 明确目标:在这个步骤中,你需要知道这次的数据分析任务需要解决怎样的问题,以及该如 何解决。
- 数据处理:在明确完⽬标以后,需要对数据进行清洗、整合等操作,把数据变成干净、规整 的样子,这样后续才能对数据进行分析。
- 数据分析:在数据经过处理以后,就可以对数据进行分析,最终得到解决问题的策略。
- 数据展现:在分析完数据以后,需要通过表格或者图表的形式,直观、有效地传递出数据分 析师所要表达的观点。
- 报告撰写:在对数据分析完并且展现完毕后,需要对整个过程进行⼀个梳理与总结。
四、数据分析之预处理
1.处理缺失值
在实际的数据分析项目中,经常会遇见数据统计不完整的情况,我们⼀般将那些缺失的数据称为缺失值。我们⼀般使用 info( )方法查看数据的缺失情况。当非空数据与数据总量不⼀致时,就说明这份数据有可能存在缺失值。
# 查看 mask_data 的基本信息总结
mask_data.info()
(1).isna( ) 查找缺失值
在pandas库中,我们可以使用 isna( )⽅法来查找DataFrame对象以及Series对象中的缺失值。 检测结果为布尔值:缺失数据会用True来表示,False则代表这里的数据正常。
# 查看mask_data中的缺失值
mask_data.isna()
(2).查看头部数据
使⽤df.head( )会默认打印出前5行。
df.head() # 查看前5行数据,df为DataFrame对象
df.head(2) # 查看数据前2行数据,括号里指定行数,就会打印指定的前几行数据
(3).查看尾部数据
使⽤df.tail( )会默认打印出后5行。
df.tail() # 查看后5行数据,df为DataFrame对象
df.tail(n) # n为数字几,就是查看尾部几行的数据
(4).dr opna( ) 删除缺失值
使⽤d ropna( )方法直接删除DataFrame对象和Series对象中含有缺失值的数据。
# 将DataFrame对象中包含缺失值的每一行全部删掉
df.dropna()
2.处理重复值
重复值很好理解,就跟字面意思⼀样,指的是表格中重复出现的数据。在多数情况中,重复值的 整⾏数据都完全相同。
- df.duplicated( ) 查找重复值
使⽤ df.duplicated( )方法来查找DataFrame对象中的重复数据,它会返回⼀个Series对象,找出 所有重复值。重复为True,不重复为False。
# 查找mask_data中的重复行
mask_data.duplicated()
将mask_data.duplicated( )方法的返回结果放⼊中括号[]中,⽤来索引mask_data数据,查看 mask_data数据中重复的⾏。
# 查看mask_data中的重复数据
mask_data[mask_data.duplicated()]
df.drop_duplicates( ) 删除重复值
使⽤用df.drop_duplicates( )⽅法直接删除DataFrame对象中重复出现的整行数据。
# 直接删除所有重复值
mask_data = mask_data.drop_duplicates()
3.处理异常值
有时数据中有⼀个或多个异常大或异常小的数值,超出了这份数据实际的限定范围,这样的数值被称为异常值。
# 查看mask_data的描述性统计信息
mask_data.describe()
五、数据分析之可视化
数据可视化可以利用人对形状、颜⾊的感官敏感,有效地传递信息,帮助用户更直观地从数据中 发现关系、规律、趋势。常见的有折线图、饼图、条形图、直方图等。
六、数据可视化实例
1.数据导入及基本设置
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('./data/clean_data.csv',encoding='utf-8')
# 设置画布大小
plt.rcParams['figure.figsize'] = 10, 6
# 只保留 2017 年和 2018 年的数据
df = df[(df['年份']==2017) | (df['年份']==2018)]
df.head(10)
2.绘制箱图
import seaborn as sns
# 设置字体
plt.rcParams['font.family'] = ['Source Han Sans CN']
# 绘制 2017 年和 2018 年付款金额的箱图
sns.boxplot(x='年份', y="付款金额", data=df,
linewidth=1,
width=0.5,
fliersize=0.1,
whis=3,
notch=True,
palette='Reds')
plt.show()
3.绘制折线图
# 首先通过分组聚合出每一年中每个月的顾客ID
df = pd.read_csv('./data/clean_data.csv',encoding='utf-8')
data_month=df.groupby(['月份','顾客ID']).agg({'年份':'mean'})
# 并将集计得到的结果的行索引进行重置
df_month_customer= data_month.reset_index()
# 对上面得到的 dataframe 分组聚合得到每一年中每个月的顾客总数
# 并将集计得到的结果的行索引进行重置
df_month_customer_list=df_month_customer.groupby(['年份','月份']).count().reset_index()
# 用 seaborn 画出 2017 年和 2018 年每个月的顾客数的折线对比图
sns.lineplot(x='月份', y="顾客ID", data=df_month_customer_list,
ci=None,
hue='年份',
style='年份',
markers=True,
dashes=True,
palette='bright')
plt.show
#不畏浮云遮望眼,自缘身在最高层#