小白学数据分析——数据分析流程初步

数据分析流程初步

数据分析的自我理解

身为小白的我也是才刚开始学习数据分析,也是第一次写博客来记录自己的学习过程。

在没有学习数据分析前,我本以为数据分析就是简单的在数据表中找到一些有特征的值(比如,最值、差值、未到达预期的值等其他数值)分析这些值产生的原因,从而调整业务中的过程优化各种的指标。

但是在开始慢慢学习数据分析后发现自己的理解只是很浅显的理解,在现在这个数据的时代,可能我们的每个动作都会产生数据,并且在越来越智能化的时代这些数据会尽可能的被保存。而且数据的种类已经不只是我们现在最通常见到的机构化的数据(比如,Excel中的表、数据库中表等结构化的表),更多的是非结构化的数据(比如,文本、图片、音频、视频、网络、时空序列等)。这些数据都是数据分析的材料,不过对于小白的我最先开始学习的当然就是传统的数据分析,对于结构化数据的分析,之后有了一定的数据分析基础和大数据以数据挖掘的能力后再进行大数据的分析。

结构化数据分析流程(初步)

为什么要数据分析?

在对数据分析前,我们首先要明确自己分析数据的目的,可能是因为当前的数据指标出现了一些问题,需要分析这些问题出现的原因;或者是当前业绩不太尽如人意,通过现有的数据进行分析来指导业务;又或者是对当前的业务的状态进行分析。

分析过程

【0】明确分析目的
【1】结构化数据的导入
【2】对导入的数据进行初步了解
【3】针对目的数据进行数据的清洗
【4】对清洗后的数据按照目的进行处理和分析
【5】对得到的数据进行可视化(方便对分析结果进行展示)
【6】得到分析结论(一般会生成分析报告)

简单的案例学习

现在我们有北京、上海和成都3个城市空气质量数据,
(数据来源: https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities)
<1>尝试分析北京PM2.5的情况
<2>尝试分析3个城市的PM2.5随时间的变化情况

尝试分析北京PM2.5的情况
数据的导入和初步了解
import pandas as pd
from matplotlib import pyplot as plt

file_path_bj = "./PM2.5/BeijingPM20100101_20151231.csv"
df = pd.read_csv(file_path_bj)

print(df.info())

代码结果:
<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 52584 entries, 0 to 52583
Data columns (total 18 columns):
No 52584 non-null int64
year 52584 non-null int64
month 52584 non-null int64
day 52584 non-null int64
hour 52584 non-null int64

season 52584 non-null int64
PM_Dongsi 25052 non-null float64
PM_Dongsihuan 20508 non-null float64
PM_Nongzhanguan 24931 non-null float64
PM_US Post 50387 non-null float64

DEWP 52579 non-null float64
HUMI 52245 non-null float64
PRES 52245 non-null float64
TEMP 52579 non-null float64
cbwd 52579 non-null object
Iws 52579 non-null float64
precipitation 52100 non-null float64
Iprec 52100 non-null float64
dtypes: float64(11), int64(6), object(1)
memory usage: 7.2+ MB
None

在分析中可能会用到的数据使用了加粗强调的方式显示出来了,分别表示数据统计的年、月、日、时以及测试点的数据

索引的设置和数据清洗

对于此数据的分析中索引应当使用记录数据的时间做为索引,这样方便进数据的分组和统计,但是这个表中所有的时间数据时分散开的,所以要生产一列新的datetime来记录每条数据记录的年月日时的数据

period = pd.PeriodIndex(year=df["year"],month=df["month"],day=df["day"],hour=df["hour"],freq="H")

df["datetime"] = period

df.set_index("datetime",inplace=True)

df.head()

结果截图
在这里插入图片描述
根据上一步中对数据的初步查看,发现PM2.5的数据中有一些空值NaN,所以对于要分析的数据的数据需要进行的数据要进行去空值的操作(这里用PM_US Post这一列来进行分析)

data = df["PM_US Post"].dropna()

data.head()

代码结果
datetime
2010-01-01 23:00 129.0
2010-01-02 00:00 148.0
2010-01-02 01:00 159.0
2010-01-02 02:00 181.0
2010-01-02 03:00 138.0
Freq: H, Name: PM_US Post, dtype: float64

数据处理和可视化绘图

由于清洗后的数据就是按照每天每时记录的数据,所以不需要进行其他的处理

数据的可视化

_x = data.index
_y = data.values

plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)

plt.show()

在这里插入图片描述
观察这个图片,显然这个图片很难看,并且由于数据过于密集,则不便于分析,所以要对现在的数据进行降采样再进行分析,并且在记录另一个数据(使用PM_Dongsi这一列)与之进行比较

de_df_us = df.resample("7D").mean()["PM_US Post"]
de_df_ch =  df.resample("7D").mean()["PM_Dongsi"]

_x_us = de_df_us.index
_x_ch = de_df_ch.index
_y_us = de_df_us.values
_y_ch = de_df_ch.values

plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x_us)),_y_us,label="US")
plt.plot(range(len(_x_ch)),_y_ch,label="Chain")

plt.xticks(list(range(len(_x_us)))[::10],list(_x_us)[::10],rotation=45)
plt.legend(loc="best")

plt.show()

在这里插入图片描述

简单分析

【1】国内使用该种测试仪器可能较晚(前期的数值都是nan);
【2】两者数据的趋势相同;
【3】起初国内的数据和国外的数据在最值有差别,可能是由于设备的准确度导致的,之后随着仪器的升级两者的折线基本重合;

尝试分析3个城市的PM2.5随时间的变化情况

数据分析的过程与上面的分析一致,先进行数据的导入和初步查看、再进行数据处理和可视化、最后进行分析和结论的得出

# 北京、上海、成都的PM2.5的比较
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf")

def set_datetime_index(df):
    """将df中的离散的日期生成datetime数据并设置为索引"""
    
    period = pd.PeriodIndex(year=df["year"],month=df["month"],day=df["day"],hour=df["hour"],freq="H")
    df["datetime"] = period
    df.set_index("datetime",inplace=True)

# 获取北京的数据
df_bj = pd.read_csv(file_path_bj)
set_datetime_index(df_bj)
data_bj = df_bj.resample("M").mean()["PM_US Post"]

#获取上海的数据
df_sh = pd.read_csv(file_path_sh)
set_datetime_index(df_sh)
data_sh = df_sh.resample("M").mean()["PM_US Post"]

#获取成都的数据
df_cd = pd.read_csv(file_path_cd)
set_datetime_index(df_cd)
data_cd = df_cd.resample("M").mean()["PM_US Post"]

#绘图
city = {"北京":data_bj,"上海":data_sh,"成都":data_cd}
plt.figure(figsize=(20,8),dpi=80)
for city_name,city_data in city.items():
    _x = city_data.index
    _y = city_data.values

    plt.plot(range(len(_x)),_y,label=city_name)
    plt.xticks(list(range(len(_x)))[::2],list(_x)[::2],rotation=45)

plt.legend(prop=my_font,loc="best")
plt.show()

在这里插入图片描述
分析:
【1】可能由于设备使用和推广问题导致三个城市的数据出现的时间不同,北京先开始使用设备测量(之前的值均是nan)
【2】三条折线基本趋势相同,说明一年四季的时间变化都会导致城市的PM2.5的值收到影响
【3】在一年四季中PM2.5的峰值会出现在冬季,北方城市可能由于取暖和空气较为干燥导致PM2.5较高,而低点出现在夏季
【4】南方城市较北方城市相比会低一些,可能与空气的湿度有关,空气湿度较大会使得悬浮颗粒加重从而降低PM2.5的数值

总结

结构化数据的数据分析主要了解数据分析的目的,通过目的来确定数据分析的维度,再通过数据的处理得到指标,最终得到数据分析的结论。

希望大佬们对我这个小白的学习记录进行批评与指正,哈哈😺!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值