2019-06-27 11:15:14 qq_41922468 阅读数 591

按照我们老师要求,用python做一个关于数据分析的小项目
——基于baidu的编程haha

我选的是·爬取豆瓣Top250 数据,然后分析豆瓣用户观影喜好

PPT部分截图:
ppt不知道怎么上传 =.= 需要留言
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
爬虫部分代码:

#-*- coding: utf-8 -*-
import io
import sys
from urllib.request import urlopen
from bs4 import BeautifulSoup
from collections import defaultdict
import pandas as pd
import time
import re
from multiprocessing import pool, Pool




class DoubanMovieTop():
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')

    def __init__(self):
        # 得到url地址,分析分页规律,
        self.top_urls = ['https://movie.douban.com/top250?start={0}&filter='.format(x*25) for x in range(10)]
        self.data = defaultdict(list)
        self.columns = ['title', 'link', 'score', 'score_cnt', 'top_no', 'director', 'writers', 'actors', 'types',
                        'edit_location', 'language', 'dates', 'play_location', 'length', 'rating_per', 'betters',
                        'had_seen', 'want_see', 'tags', 'short_review', 'review', 'ask', 'discussion']
        self.df = None

    def get_bsobj(self, url):
        html = urlopen(url).read().decode('utf-8')      #将字节转字符串
        bsobj = BeautifulSoup(html, 'lxml')
        return bsobj

    def get_info(self):
        for url in self.top_urls:
            bsobj = self.get_bsobj(url)
            main = bsobj.find('ol', {'class': 'grid_view'})

            # 标题及链接信息
            title_objs = main.findAll('div', {'class': 'hd'})
            titles = [i.find('span').text for i in title_objs]
            links = [i.find('a')['href'] for i in title_objs]

            # 评分信息
            score_objs = main.findAll('div', {'class': 'star'})
            scores = [i.find('span', {'class': 'rating_num'}).text for i in score_objs]
            score_cnts = [i.findAll('span')[-1].text for i in score_objs]

            for title, link, score, score_cnt in zip(titles, links, scores, score_cnts):
                self.data[title].extend([title, link, score, score_cnt])
                bsobj_more = self.get_bsobj(link)
                more_data = self.get_more_info(bsobj_more)
                self.data[title].extend(more_data)
                print(self.data[title])
                print(len(self.data))
                time.sleep(0)

    def get_more_info(self, bsobj):
        # 榜单排名
        top_no = bsobj.find('span', {'class': 'top250-no'}).text.split('.')[1]

        # 更多信息
        main = bsobj.find('div', {'id': 'info'})

        # 导演
        dire_obj = main.findAll('a', {'rel': 'v:directedBy'})
        director = [i.text for i in dire_obj]

        # 编剧
        try:
            writer_obj = main.findAll('span', {'class': 'attrs'})[1]
            writers = [i.text for i in writer_obj.findAll('a')]
        except Exception as e:
            writers = []
            print(e)


        # 主演
        try:
            actor_obj = main.findAll('a', {'rel': 'v:starring'})
            actors = [i.text for i in actor_obj]
        except Exception as e:
            actors = []
            print(e)

        # 类型
        type_obj = main.findAll('span', {'property': 'v:genre'})
        types = [i.text for i in type_obj]

        # 制片地区
        pattern = re.compile('地区: (.*?)\n语言', re.S)
        edit_location = re.findall(pattern, main.text)[0]

        # 语言
        pattern2 = re.compile('语言: (.*?)\n上映日期')
        language = re.findall(pattern2, main.text)[0]

        # 上映日期/地区
        date_obj = main.findAll('span', {'property': 'v:initialReleaseDate'})
        dates = [i.text.split('(')[0][:4] for i in date_obj]
        play_location = [i.text.split('(')[1][:-1] for i in date_obj]

        # 片长
        length = main.find('span', {'property': 'v:runtime'})['content']

        # 5星到1星比例
        rating_obj = bsobj.findAll('span', {'class': 'rating_per'})
        rating_per = [i.text for i in rating_obj]

        # 好于
        better_obj = bsobj.find('div', {'class': 'rating_betterthan'})
        betters = [i.text for i in better_obj.findAll('a')]

        # 想看/看过

        watch_obj = bsobj.find('div', {'class': 'subject-others-interests-ft'})
        had_seen = watch_obj.find('a').text[:-3]
        want_see = watch_obj.findAll('a')[-1].text[:-3]



        # 标签
        tag_obj = bsobj.find('div', {'class': 'tags-body'}).findAll('a')
        tags = [i.text for i in tag_obj]

        # 短评
        short_obj = bsobj.find('div', {'id': 'comments-section'})
        short_review = short_obj.find('div').find('span', {'class': 'pl'}).find('a').text.split(' ')[1]

        # 影评
        review = bsobj.find('a', {'href': 'reviews'}).text.split(' ')[1]

        # 问题
        ask_obj = bsobj.find('div', {'id': 'askmatrix'})
        ask = ask_obj.find('h2').find('a').text.strip()[2:-1]

        # 讨论
        discuss_obj = bsobj.find('p', {'class': 'pl', 'align': 'right'}).find('a')
        discussion = discuss_obj.text.strip().split('(')[1][2:-2]

        more_data = [top_no, director, writers, actors, types, edit_location, language, dates, play_location,
                     length, rating_per, betters, had_seen, want_see, tags, short_review, review, ask, discussion]

        return more_data

    #将数据缓存到本地
    def dump_data(self):
        data = []
        for title, value in self.data.items():
            data.append(value)

        self.df = pd.DataFrame(data, columns=self.columns)
        self.df.to_csv('douban_top250.csv', index=False)

if __name__ == '__main__':
        douban = DoubanMovieTop()
        douban.get_info()
        douban.dump_data()



数据处理分析部分

#-*- coding: utf-8 -*-
import io
import json
import sys
from collections import Counter
from functools import reduce
from collections import defaultdict
import matplotlib.pyplot as plt
import numpy
import pandas as pd

from math import log2
from math import sqrt

df = pd.read_csv('douban_top250.csv')
print(df.loc[5,'director'])
# 将字符串改为列表
df_tmp = df[['director', 'writers', 'actors', 'types', 'dates', 'play_location', 'rating_per', 'betters', 'tags']]
df[['director', 'writers', 'actors', 'types', 'dates', 'play_location', 'rating_per', 'betters', 'tags']] = df_tmp.applymap(lambda x: eval(x))
df['dates'] = df['dates'].map(lambda x: [int(i) for i in x])
df['year'] = df['dates'].map(lambda x: min(x))
# 去掉空格
df['director'] = df['director'].map(lambda x: [i.strip() for i in x])
# 评分人数:x人评价清洗为x,并调整为int类型
df['score_cnt'] = df['score_cnt'].map(lambda x: int(x[:-3]))
df.describe()['score_cnt']

# 五星比例/好评比例
df['five_star_rate'] = df['rating_per'].map(lambda x: float(x[0][:-1])/100)
df['favor_rate'] = df['rating_per'].map(lambda x: (float(x[0][:-1]) + float(x[1][:-1]))/100)

# 比百分之多少同类电影好
df['better_than'] = df['betters'].map(lambda x: sum([int(i.split('%')[0]) for i in x])/len(x))


# 上映年份由字符串转换为int类型
# lambda()
#
#     将参数和方法放在一起的匿名函数
#
#             例如:g = lambda x:x+1
#             g(1)=2
#             x相当于参数1
#             x+1相当于方法
#             def(x):
#                 return(x+1)




# ------------------------入榜电影数排行--未加权-----------------------
# reduce迭代获取所有导演的列表
director_list = reduce(lambda x, y: x + y, df.director)    # reduce累加
print(len(director_list))

# 导演影片数量大于3部的有哪些导演
# Counter 统计出现次数‘
# items 以key value 字典展示
# reverse 反转排序
print(director_list)
dire_counter = Counter(director_list)    # 统计导演出现的次数,并结合为key:value  '宫崎骏': 7
dire_counter = sorted(dire_counter.items(), key=lambda x: x[1], reverse=True)
top_directors = list(filter(lambda x: x[1] >= 4, dire_counter))
print(top_directors)

# 获得导演+作品数, 导演+评分
top_dire_score = defaultdict(list)
top_dire_ind = defaultdict(list)
for name, cnt in top_directors:    # iterrows遍历 返回一个元组(name cnt)
    for index, row in df.iterrows():
        if name in row['director']:
            top_dire_score[name].append(row['score'])
            top_dire_ind[name].append(row['top_no'])
print(top_dire_score)
print(top_dire_ind)

rank_score = []
rank_ind = []
for name, scores in top_dire_score.items():
    rank_score.append([name, sum(scores) / len(scores) * sqrt(log2(len(scores)))])

for name, indexes in top_dire_ind.items():
    rank_ind.append([name, sum(indexes) / sqrt(log2(len(scores))) / len(indexes)])

rank_score = sorted(rank_score, key=lambda x: x[1], reverse=True)
rank_ind = sorted(rank_ind, key=lambda x: x[1])

# reduce迭代获取所有演员的列表
actor_list = reduce(lambda x, y: x + y, df.actors)    # reduce累加
print(len(actor_list))
actor_counter = Counter(actor_list)    # 统计演员出现的次数,并结合为key:value  ('张国荣', 8)
actor_counter = sorted(actor_counter.items(), key=lambda x: x[1], reverse=True)
top_actors = list(filter(lambda x: x[1] >= 5, actor_counter))
plt.rcParams['font.sans-serif'] = ['SimHei']    # 用来正常显示中文标签
names = [i[0] for i in top_actors]
cnt = [i[1] for i in top_actors]
fig, ax = plt.subplots(figsize=(16, 8))
plt.barh(names, cnt, color='c')
ax.set_yticklabels(labels=names,fontdict={'x':0.5,'fontsize':24})
# 'top', 'bottom', 'center', 'baseline
plt.xlabel('上榜电影数', fontsize=20)
plt.title('豆瓣电影TOP250入榜最多演员情况', fontsize=35)
plt.show()

# -----------------------------------加权得分榜------------------
from math import log2
from math import sqrt
# 获得演员+评分, 演员+作品数
top_actor_score = defaultdict(list)
top_actor_ind = defaultdict(list)
for name, cnt in top_actors:    # iterrows遍历 返回一个元组(name cnt)
    for index, row in df.iterrows():
        if name in row['actors']:
            top_actor_score[name].append(row['score'])    # 演员+分数
            top_actor_ind[name].append(row['top_no'])      # 演员+排名
print(top_actor_score)
print(top_actor_ind)
rank_score_a = []
rank_ind_a = []
for name, scores in top_actor_score.items():
    rank_score_a.append([name, sum(scores) / len(scores) * sqrt(log2(len(scores)))])

for name, indexes in top_actor_ind.items():
    rank_ind_a.append([name, sum(indexes) / sqrt(log2(len(scores))) / len(indexes)])

rank_score_a = sorted(rank_score_a, key=lambda x: x[1], reverse=True)
rank_ind_a = sorted(rank_ind_a, key=lambda x: x[1])
print(rank_score_a[:5])
print(rank_ind_a[:5])

names = [i[0] for i in rank_score_a]
score = [i[1] for i in rank_score_a]
fig, ax = plt.subplots(figsize=(16, 8))
plt.barh(names, score, color='c')
ax.set_yticklabels(labels=names,
                   fontdict={
                       'y': 0.8,
                       'fontsize': 24,
                   })

plt.xlabel('加权得分', fontsize=20)
plt.title('豆瓣电影TOP250演员加权得分榜', fontsize=24)
plt.show()
# --------------将国家和国家top250作品数 存为json 文件---------------------
# python字典转json对象并写入文件
python_dict = {}
fp = open('json_obj.json', 'w')
json_obj1 = json.dump(python_dict, fp, ensure_ascii=False)


# --------------------豆瓣电影TOP250入榜国家或地区-------------------------

from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import re
country_list1 = []
for i in range(len(df)):
    print(re.split('/', df.loc[i, 'edit_location']))
    # 用/分割每个国家 得到的是list[] 然后遍历每一个list 得到字符串。存到一个新的list中
    for i, val in enumerate(re.split('/', df.loc[i, 'edit_location'].replace(' ',''))):
       country_list1.append(val)

country_counter = Counter(country_list1)    # 统计国家出现的次数,并结合为key:value
country_counter = sorted(country_counter.items(), key=lambda x: x[1], reverse=True)
top_countrys = list(filter(lambda x: x[1] >= 4, country_counter))

# 入榜电影数排行
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
names = [i[0] for i in top_countrys]
cnt = [i[1] for i in top_countrys]
fig, ax = plt.subplots(figsize=(16, 8))
plt.barh(names, cnt, color='c')
ax.set_yticklabels(labels=names,fontdict={'x':0,'fontsize':20})
# 'top', 'bottom', 'center', 'baseline
plt.xlabel('上榜次数', fontsize=24)
plt.title('豆瓣电影TOP250入榜国家或地区', fontsize=35)
plt.show()


# -------------------------生成词云对象-------------------

from functools import reduce
from wordcloud import WordCloud
# 生成数据,每个词之间以空格分离
tags = reduce(lambda x, y: x + y, df.tags)
result = ' '.join(tags)

# 设置词云属性,注意要指定中文字体
wc = WordCloud(
    font_path='simfang.ttf',     #字体
    background_color='white',   #背景颜色
    width=1000,
    height=500,
    max_font_size=100,            #字体大小
    min_font_size=10,
    max_words=100
)
wc.generate(result)
bg= np.array(Image.open("doubanbg.png"))
# 展示词云
plt.figure('豆瓣Top250电影标签', figsize=(16,8))
plt.imshow(wc)
plt.axis('off')
plt.show()

# -------------------豆瓣用户喜欢的电影类型  饼图-------------------------------------

from collections import Counter
from functools import reduce
import matplotlib.pyplot as plt

# 去掉空格
df['types'] = df['types'].map(lambda x: [i.strip() for i in x])

types_list = reduce(lambda x, y: x + y, df.types)    # reduce累加
type_counter = Counter(types_list)
type_counter = sorted(type_counter.items(), key=lambda x: x[1], reverse=False)
top_type_counter = list(filter(lambda x: x[1] >= 30, type_counter))

names = [i[0] for i in top_type_counter]
cnt = [i[1] for i in top_type_counter]
type_len = len(types_list)
print(names[:-1])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.title('豆瓣用户喜欢的电影类型',fontsize=20)
# 去除剧情部分
plt.pie(cnt[:-1],labels=names[:-1],shadow=True,autopct='%.2f%%')
plt.show()

# -------------------TOP250年份分布 条形图-----------------------------------

from functools import reduce
import pandas as pd
import matplotlib.pyplot as plt
# 条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据
df = pd.read_csv('douban_top250.csv')
df_tmp = df[['director', 'writers', 'actors', 'types', 'dates', 'play_location', 'rating_per', 'betters', 'tags']]
df[['director', 'writers', 'actors', 'types', 'dates', 'play_location', 'rating_per', 'betters', 'tags']] = df_tmp.applymap(lambda x: eval(x))
df['dates'] = df['dates'].map(lambda x: min(x))
df['score_cnt'] = df['score_cnt'].map(lambda x: int(x[:-3]))
# 得到year的list  ['1994', '1993', '1994']
years_list = []
for i in range(len(df.dates)):
    years_list.append(df.dates[i])
years_list.sort(reverse=False)
# print(min(years_list)+" "+max(years_list))  -----int()
# for i in range(len(years_list)):
    # int(years_list[i])
years_list = list(map(int, years_list))    # 字符串list 转int
print(years_list)
group = [1930,1940,1950,1960,1970,1980,1990,2000,2010,2020]
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

plt.hist(years_list, group,histtype='bar',rwidth=0.9)
plt.ylabel('上榜电影数')
plt.xlabel('电影上映年份')
plt.title('豆瓣用户喜欢的电影TOP250年份分布',fontsize=20)
plt.legend(['上榜电影数'])
plt.show()


# -----------------------评论人数和已看人数之间的相关性--------------------------------------

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
fig, ax = plt.subplots(figsize=(14, 8))
lr = LinearRegression(fit_intercept=True)
X = df['score_cnt'].values
y = df['had_seen'].values
X.shape = (len(X), 1)
# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y)
# 训练模型
lr.fit(X_train, y_train)
# 预测
y_pred = lr.predict(X_test)
plt.ylabel('评论人数')
plt.xlabel('已看人数')
plt.title('评论人数和已看人数之间的关系',fontsize=20)

# 画图
plt.scatter(X_test, y_test, color='green', marker='+')
plt.plot(X_test, y_pred, '-', color='red')
plt.show()
2019-01-06 17:31:28 jiawoxuexiqq30294961 阅读数 752

当前,越来越多的应用涉及到大数据,而这些大数据的属性,包括数量、速度、多样性等等都呈现出不断增长的复杂性,因此,大数据分析方法在这一领域也就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。

基于此,我们也来分享一下全球最大的管理咨询公司——「埃森哲」的大数据分析方法,看看他们具体是如何进行的。全文以 PPT 的形式展开,并围绕着四个模块进行:

目录

1 概述

2 数据分析框架

3 数据分析方法

       3.1 数据理解 & 数据准备

       3.2 分类与回归

       3.3 聚类分析

       3.4 关联分析

       3.5 时序模型

       3.6 结构优化

4 数据分析支撑工具

在这里小编给大家推荐一个软件开发学习圈

大数据学习qq群458345782

python学习qq群250933691

每天有免费的学习资源分享给大家

以下是 PPT 全文

在这里小编给大家推荐一个软件开发学习圈

大数据学习qq群458345782

python学习qq群250933691

每天有免费的学习资源分享给大家

2018-09-29 09:19:57 Andy_shenzl 阅读数 4229

摘要:以下是整理的关于数据分析的最全信息,包括微信大数据分析、数据可视化工具、词频分析工具、舆情分析工具、PPT模板工具、互联网趋势分析工具、在线调查工具、网站分析监测工具、社交媒体监测工具等。

微信大数据分析工具

新媒体指数:http://www.gsdata.cn

清博大数据-新媒体指数(www.gsdata.cn)是新媒体大数据第一平台,为运营新媒体利器!现已开通账号分钟级监测服务,打击粉丝造假账号,支持用户自主监测新媒体数据、定制各类榜单,并提供数据API等各类增值服务。

数据可视化工具:

百度ECharts:http://echarts.baidu.com/

Cytoscape:http://www.cytoscape.org/

图表秀:http://www.tubiaoxiu.com/

数据观:http://shujuguan.cn/

微博足迹可视化:http://vis.pku.edu.cn/weibova/weibogeo_footprint/index.html

BDP个人版:https://me.bdp.cn/home.html

ICHarts:http://www.icharts.in/

魔镜:http://www.moojnn.com/

词频分析工具:

Rost:http://www.cncrk.com/downinfo/54638.html

图悦:http://www.picdata.cn/

语义分析系统:http://ictclas.nlpir.org/nlpir/

Tagul:https://tagul.com/

腾讯文智:http://nlp.qq.com/semantic.cgi

Tagxedo词云:http://www.tagxedo.com/

舆情分析工具:

清博舆情系统:http://yuqing.gsdata.cn/

云相:http://www.weidata.cn/

PPT模板工具:

我图网:http://so.ooopic.com/

51PPT模板:http://www.51pptmoban.com/ppt/

无忧PPT:http://www.51ppt.com.cn/

第1PPT:http://www.1ppt.com/

站长之家:http://sc.chinaz.com/ppt/

设计师网址导航:http://www.userinterface.com.cn/

互联网趋势分析工具:

微博指数:http://data.weibo.com/index

百度指数:http://index.baidu.com/

好搜指数:http://index.so.com/#index

搜狗指数:http://zhishu.sogou.com/

百度预测:http://trends.baidu.com/

在线调查工具:

腾讯问卷调查:http://wj.qq.com/

麦客:http://www.mikecrm.com/

ICTR:http://cn2.ictr.cn/

问道网:http://www.askform.cn/

问卷星:http://www.sojump.com/

调查派:http://www.diaochapai.com/

问卷网:http://www.wenjuan.com/

SurveyMonkey:https://zh.surveymonkey.com/

网站分析监测工具:

H5传播分析工具:http://chuanbo.datastory.com.cn/

百度统计:http://tongji.baidu.com/web/welcome/login

腾讯云分析:http://mta.qq.com/

51.la:http://www.51.la/

社交媒体监测工具:

孔明社会化媒体管理:http://www.kmsocial.cn/

企业微博管理中心:http://e.weibo.com/

知乎用户深度分析:http://www.kanzhihu.com/useranalysis

其他数据网站:

数据分析网https://www.afenxi.com

媒体微博排行榜:http://v6.bang.weibo.com/xmt

友盟:http://www.umeng.com/

中国新闻地图:http://vis.360.cn/open/cnnews/

中国票房榜:http://www.cbooo.cn/

收视率排行:http://www.tvtv.hk/archives/category/tv

农业大数据云平台:http://www.dataagri.com/agriculture/gis.action

房价指数:http://industry.fang.com/data/datacenter.aspx

中国统计局:http://data.stats.gov.cn/

中国主要城市拥堵排名:http://report.amap.com/traffic/

中国综合社会调查:http://www.chinagss.org/

中国P2P网贷指数:http://www.p2p001.com/wdzs/wdzs_p2pline.html

Alexa:http://www.alexa.com/

易车汽车指数:http://index.bitauto.com/

旅游预测:http://trends.baidu.com/tour/

以上就是给大家推荐的一些用于数据分析的“必备神器”,其中很多工具是亲测过认为非常强大的,希望大家能从中找到对自己有帮助的工具。

 原文地址:https://www.afenxi.com/9137.html

2019-10-13 21:28:02 weixin_43931438 阅读数 165
 

 最近一份据说是埃森哲的大数据分析PPT莫名被朋友分享,真实与否暂不考究,但是就PPT内容来说,对于数据分析还是很翔实的,有很多实用的大数据分析方法

 

0、简述

PPT的内容非常多,具体目录:

1、概述

2、数据分析框架

3、数据分析方法

  • 3.1 数据理解&数据准备
  • 3.2 分类与回归
  • 3.3 聚类分析
  • 3.4 关联分析
  • 3.5 时序模型
  • 3.6 结构优化

4、数据分析支撑工具

先给大家说一下,我这篇文章写什么:
1、总结「埃森哲」大数据分析PPT内容;
2、里面有些内容可能比较久远,我会补充下我所知道的现在比较常用的方法;
3、原PPT的分享内容文字叙述总结居多,我会根据我们日常的工作,编辑一些相关案例,帮助理解;
4、针对「埃森哲」公司分享的这个PPT里面的具体方法,我会给出相应地python实现方式,应用起来更方便。
我不确定我是否有公开该PPT的权限,所以就不把PPT放在文章里,如果大家有需要,直接后台留言/回复「数据分析」,我再告诉大家获取方法。
 

1、概述

数据分析到底是一个什么样的工作,由于她的涵盖范围非常广,平时我们经常遇到不同专业的同学成为一名数据分析师,可能是学计算机的,或者是金融工程,也可能是学数学或者统计,数据分析作为一个多学科交叉工种所包含的学科知识也是五花八门,在我理解,数据分析师入门需要掌握4种能力:业务理解能力、数学/统计知识、数据库操作能力,编程能力。
业务理解能力对于数据分析师来说是至关重要的,业务经验可以帮助我们在分析具体问题前明确需求,在分析中可以判断方法是否合理以及分析后的指导应用。
 
“随着计算机科学的发展,数据挖掘,机器学习,深度学习,大数据等概念越来越热,数据分析的手段和方法也越来越丰富”
这也恰恰意味着数据分析不拘一格,做数据分析的工作同样可以将机器学习甚至深度学习的相关算法加以应用在工作中。

640?wx_fmt=jpeg

(图片来自原PPT)

 

2、数据分析框架

「埃森哲」的数据分析框架基本完全遵循CRISP-DM模型,非常经典的数据分析标准流程,采用量应该在50%左右;听说过这个模型的同学应该相当多吧,尤其是有咨询公司背景的同学,有了这个框架,那我们如何实现具体流程的呢?

640?wx_fmt=jpeg

(图片来自原PPT)

CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘标准流程",CRISP-DM 模型是KDD(KDD:Knowledge Discovery in Database)模型的一种,最近几年在各种KDD过程模型中占据领先位置,它是由戴姆勒-克莱斯勒、SPSS和NCR的分析人员共同开发的。CRISP提供了一种开放的、可自由使用的数据挖掘标准过程,使数据挖掘适合于商业或研究单位的问题求解策略。
640?wx_fmt=jpeg
从我自己的理解:如果我们的分析需要建立模型,那么这个流程其实缺少模型监控,在完成建模分析后,我们需要持续观测模型的稳定性和准确度,在发现问题时可能需要及时的refit我们的模型。

 

640?wx_fmt=jpeg

当我们需要建模来解决某个业务问题时,这个就是数据分析的基本框架。但是我觉得这个框架里在建立模型时可以做一些补充:

(这里补充上自己做的关于模型选择的思维导图)

 

3、数据分析方法

3.1数据清洗&数据探索
在我们拿到数据时首先我们需要对数据进行清洗:
这里一些一定要做的就是:异常值判断、缺失值处理、重复值处理、数据结构变化;
数据探索:主要是特征描述、数据分布、结构优化、变量相关性。
这里说一下我每次会用到的方法,用一行代码直接完成数据描述:
import pandas_profiling  	
data.profile_report(title='Model Dataset')	

	
profile = data.profile_report(title='Model Dataset')	
profile.to_file(output_file='model_report.html')
 

常见异常值的判断方法:

640?wx_fmt=jpeg

 
缺失值的处理方法:平均值/固定值/众数/中位数/上下条数据等填充、K最近距离法、回归、极大似然估计、多重插值等

640?wx_fmt=jpeg

原PPT里的这一句我是完全不赞同的,在某些情况下异常值和缺失值缺失影响会比较小,但是并不可以忽略,尤其是异常值,某些情况下非常影响结果,还是需要引起重视。

 
对于缺失值的处理,除了直接删除缺失严重的特征外,还可以选择各种各样的填充方法。对于每一种填充方式而言,都有其适用的场景,没有绝对的好坏之分,因此在做数据预处理时,要多尝试几种填充方法,选择表现最佳的即可。
上述缺失值处理方法的代码参考:https://github.com/AHNU/fill_missing_values

 

举一个KNN填充缺失值得例子:

填充近邻的数据,先利用knn计算临近的k个数据,然后填充他们的均值。(安装fancyimpute)除了knn填充,fancyimpute还提供了其他填充方法。

from fancyimpute import KNN	
 	
train_data = pd.DataFrame(KNN(k=8).fit_transform(train_data), columns=features)
 
数据探索
 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 
为了避免篇幅过长,第一部分就先写到这里,下一篇继续写PPT中介绍的具体的分析方法和python实现方式,具体如下:
3.2 分类与回归
3.3 聚类分析
3.4 关联分析
3.5 时序模型
3.6 结构优化
4 数据分析支撑工具
 

 

作者Info:

【作者】:A字头
【原创公众号】:数据札记倌(Data_Groom)
【简介】:这是一个坚持原创的技术公众号,每天坚持推送各种 Python基础/进阶文章,数据分析,爬虫实战,机器学习算法,不定期分享各类学习资源。
【福利】:送你新人大礼包一份,关注公众号,后台回复:“CSDN” 即可获取!

2019-07-12 16:11:09 qq_40338373 阅读数 121

 

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

总感觉自己PPT数据分析图表非常难看,完全展现不出自己想要展示的效果?

PPT图表其实类似于Excel图表,就是能够将那些枯燥无味的数字通过PPT图表,生动的的展示出来,从而令观看者更加显而易见的看清楚数据的趋势

所以千万别小看一个PPT图表在PPT当中的重要性,如果没有一份较好的PPT图表,你的演讲等于废了,这真的毫不夸张的讲述,因为观众完全听不懂你在将的是什么,你没有将数据展现在观众面前,这里小编为大家整理了8种在PPT图表中最常见,共66套左右!

66套数据分析PPT图表丨展现:

第一种:柱形图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第二种:折线图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第三种:鱼骨图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第四种:时间轴图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第五种:流程图图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第六种:雷达图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第七种:分析图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

第八种:饼状图表

66套可视化数据分析PPT图表,帮你一键提升PPT逼格

 

给大家分享的66套PPT图表大家是否还满呢?我看昨天有很多人都私信回复要昨天的Excel图表,想必也有很多人在制作PPT时候需要使用上PPT图表,所以这不今天就大家分享出来了,想要的小伙伴赶紧来拿!

没有更多推荐了,返回首页