• python数据分析011_数据分析流程


    一.确定分析目标

      1.数据分析的大忌是不知道分析方向和目的,拿着一堆数据不知所措。一切数据分析都是以业务为核心目的,而不是以数据为目的。所以,我们应该先定分析的目标,然后在处理数据。

    二.处理数据

      1.查看数据情况

    • import pandas as pd
    • data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
    • print(data.shape)
    • data.info()

      2.删除缺失值:  数据的缺失值在很大程度上会影响数据的分析结果,如果某一个字段缺失值超过一半的时候,我们就可以将这个字段删除了,因为缺失过多就没有业务意义了。

        注意:并不是,只要含有有缺失值的时候,我们就要将数据删除,如果数据量比较少、缺失值不多,并且对我们的分析指标没有实际影响时,我们就可以将其保留。
    • import pandas as pd
    • data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
    • # 删除businessZones列数据
    • data.drop(['businessZones'],axis=1, inplace=True)   #删除整列
    • # 删除含有NaN的数据
    • data.dropna(inplace=True)   #删除空值
    • data.info()

      3.删除重复数据:  使用data.duplicated()方法判断每一行是否重复,然后使用data.duplicated()[data.duplicated()==True]取出重复行,最后使用len()计算重复的数据。

    • # 计算重复的数据数
    • print(len(data.duplicated()[data.duplicated()==True]))
    • # 删除重复数据
    • data.drop_duplicates(inplace=True)

      4.整理目标数据

        a.字段拆分

    • import pandas as pd
    • data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
    • # 删除businessZones列数据
    • data.drop(['businessZones'],axis=1, inplace=True)
    • data.dropna(inplace=True)
    • # 删除重复数据
    • data.drop_duplicates(inplace=True)
    • # 定义拆分的函数
    • def split_salary(salary,method):
    • # 获取'-'索引值
    • position = salary.upper().find('-')
    • if position != -1: #salary值是15k-25k形式
    • low_salary = salary[:position-1]
    • high_salary= salary[position+1:len(salary)-1]
    • else: #salary值是15k以上形式
    • low_salary = salary[:salary.upper().find('K')]
    • high_salary= low_salary
    • # 根据参数用以判断返回的值
    • if method == 'low':
    • return low_salary
    • elif method == 'high':
    • return high_salary
    • elif method == 'avg':
    • return (int(low_salary) + int(high_salary))/2
    • # 赋值
    • data['low_salary']=data.salary.apply(split_salary,method='low').astype('int')
    • data['high_salary']=data.salary.apply(split_salary,method='high').astype('int')
    • data['avg_salary']=data.salary.apply(split_salary,method='avg')

        b.去除文字

    • # 由于最高温度和最低温度两列数据类型都是带有"℃"符号的字符串,方便计算我需要去除“℃”,并将数据类型转化成int
    • df["最高温度"] = df["最高温度"].str.replace("℃", "").astype('int')
    • df["最低温度"] = df["最低温度"].str.replace("℃", "").astype('int')

    三.绘图分析

    • import matplotlib.pyplot as plt
    • from matplotlib import font_manager
    • my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF')
    • sns.set(style='dark')
    • groups = data.groupby(by='education')
    • xticks = []
    • for group_name,group_df in groups:
    • xticks.append(group_name)
    • plt.bar(group_name,group_df.avg_salary.mean())
    • plt.xticks(xticks,fontproperties=my_font)
    • plt.show()

    四.绘图小知识

      1.以日期(2020-05-20)为索引时, 按月份取数据

    • # 在读取日期的时候,利用parse_dates()方法将“日期”这列数据类型转换成datetime类型,这样方便我们可以根据时间获取数据
    • df = pd.read_csv('/data/course_data/data_analysis/BJ_tianqi.csv',parse_dates=['日期'])
    • # 方便分组计算,我们可以添加月份列
    • df['月份'] = df['日期'].dt.to_period("M")

      2.df分组后取最大最小值

    • dict1 = {
    • "最高温度":'max',
    • "最低温度":'min'
    • }
    • df_group = df.groupby(by='月份').agg(dict1)
    • print(df_group)

       例如:

    • df.groupby('A').agg('min')
    • df.groupby('A').agg(['min', 'max'])
    • df.groupby('A').B.agg(['min', 'max'])
    • df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
  • 相关阅读:
    Errors
    fix eclipse gc overhead limit exceeded in mac
    Cobub Razor
    Mac commands
    git vs svn
    SourceTree
    生成静态页技术
    URL重写技术总结
    回味手写三层-增删改查
    生成 (web): 找不到目标 .NET Framework 版本的引用程序集;请确保已安装这些程序集或选择有效的目标版本。
  • 原文地址:https://www.cnblogs.com/fanshudada/p/13044741.html
Copyright © 2020-2023  润新知