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'})

 

posted @ 2020-06-04 17:11  番薯大大  阅读(266)  评论(0编辑  收藏  举报