天池大数据竞赛 Spaceack带你利用Pandas,趋势图与桑基图分析美国选民候选人喜好度

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
文件存储 NAS,50GB 3个月
简介: 竞赛地址: https://tianchi.aliyun.com/competition/entrance/531837/introduction首先,这是一篇面向新人的教程导向的分析文章,(by the way其实我也是新手,从比赛开始才学的Pandas库,这也是我的一篇学习笔记),所以会包含很多函数的基础用法,解题思路等等, 流程会比较详细。其次,本文在官方教程基础上会加入创新内容,但是绝不会为了用而用某种新方法,一定本着分析数据有所帮助的原则和对数据敬畏的态度来做。

长文预警
竞赛地址: https://tianchi.aliyun.com/competition/entrance/531837/introduction

首先,这是一篇面向新人的教程导向的分析文章,(by the way其实我也是新手,从比赛开始才学的Pandas库,这也是我的一篇学习笔记),所以会包含很多函数的基础用法,解题思路等等, 流程会比较详细。

其次,本文在官方教程基础上会加入创新内容,但是绝不会为了用而用某种新方法,一定本着分析数据有所帮助的原则和对数据敬畏的态度来做。

再者,为了更方便学习,请点击右上角蓝色的 Star 和 Fork 按钮。

[数据集下载: ](!https://tianchi.aliyun.com/competition/entrance/531837/introduction?spm=5176.12281973.1005.3.11ae1f540dSho6)
https://tianchi.aliyun.com/competition/entrance/531837/introduction?spm=5176.12281973.1005.3.11ae1f540dSho6
# 导入相关处理包
import pandas as pd
# 加入下面这条语句可以在 JupyterLab 上渲染画布( JupyterLab 是天池实验室的一部分)
%matplotlib inline

数据预处理

数据预处理部分包含 数据导入数据探索数据整合格式转换等多个步骤。这些步骤可穿插执行。

这里第一步就是数据导入

Pandas 提供的 IO 工具组支持多种数据格式类型,包括基础的 CSV,JSON,SQL 格式。

这里用到 read_csv 方法

此方法第一个参数为文件路径, 这里对应着天池实验室挂载的数据,因为在 download 同一目录下, 所以直接写文件名即可。

第二个参数 sep 为分隔符,用于将每行分解为若干列。默认是,逗号。

第三个参数 names 为列名列表,当文件不包含列名时使用,列名列表中不允许有重复值。

扩展:若我们要分析文件中包含列名呢?有个 header 参数可以使用,当列名是首行时,设置 header=0。举一反三,有时候文件首行是文件的标题,第二行才是列名,那么设置 header=1 即可。

将委员会和候选人一一对应,通过CAND_ID关联两个表

由于候选人和委员会的联系表中无候选人姓名,只有候选人ID(CAND_ID),所以需要通过CAND_ID 从候选人表中获取到候选人姓名,最终得到候选人与委员会联系表 ccl

# 读取候选人信息,由于原始数据没有表头,需要添加表头
candidates = pd.read_csv("weball20.txt", sep = '|',names=['CAND_ID','CAND_NAME','CAND_ICI','PTY_CD','CAND_PTY_AFFILIATION','TTL_RECEIPTS',
                                                          'TRANS_FROM_AUTH','TTL_DISB','TRANS_TO_AUTH','COH_BOP','COH_COP','CAND_CONTRIB',
                                                          'CAND_LOANS','OTHER_LOANS','CAND_LOAN_REPAY','OTHER_LOAN_REPAY','DEBTS_OWED_BY',
                                                          'TTL_INDIV_CONTRIB','CAND_OFFICE_ST','CAND_OFFICE_DISTRICT','SPEC_ELECTION','PRIM_ELECTION','RUN_ELECTION'
                                                          ,'GEN_ELECTION','GEN_ELECTION_PRECENT','OTHER_POL_CMTE_CONTRIB','POL_PTY_CONTRIB',
                                                          'CVG_END_DT','INDIV_REFUNDS','CMTE_REFUNDS'])
# 读取候选人和委员会的联系信息
ccl = pd.read_csv("ccl.txt", sep = '|',names=['CAND_ID','CAND_ELECTION_YR','FEC_ELECTION_YR','CMTE_ID','CMTE_TP','CMTE_DSGN','LINKAGE_ID'])

数据整合

我们现在已导入 candidates 候选人信息表,ccl 候选人与委员会关联表两张表。均为 DataFrame 类型。

聪明的你会发现,两个表的表头都包含 CAND_ID 这个字段,那么这两张表会根据这个字段有所联系。那么我们可以用 merge 这个神奇的方法合并两张表。

merge 方法有几个重要的参数如下:

  1. left : 在这里就是我们要合并左边的 ccl 表。
  2. right : 在这里就是我们要合并右边的 candidates 表。
  3. how : 这是个带有默认参数的隐藏参数,默认为 inner (内连接),学过 SQL 的同学都懂得~ 肯定还会包含 outer(外链接)、left(左连接)、right(右连接)
  4. on :这个参数用来连接列名,若没有其它连接项,默认会把左右两个表头的交集字段作为连接字段。下面的代码是省略的写法,也可以这样表示 ccl = pd.merge(ccl, candidates, on="CAND_ID", how="inner")
  5. left_on :用来指定左侧作为连接的表头。
  6. right_on:用来指定右侧作为连接的表头, 下面的代码是省略的写法,也可以这样表示 ccl = pd.merge(ccl, candidates, left_on="CAND_ID", right_on="CAND_ID", how="inner")
# 关联两个表数据
ccl = pd.merge(ccl, candidates)
# 提取出所需要的列
ccl = pd.DataFrame(ccl, columns=[ 'CMTE_ID','CAND_ID', 'CAND_NAME','CAND_PTY_AFFILIATION'])
# 读取个人捐赠数据,由于原始数据没有表头,需要添加表头
# 提示:读取本文件大概需要5-10s
itcont = pd.read_csv('itcont_2020_20200722_20200820.txt', sep='|',names=['CMTE_ID','AMNDT_IND','RPT_TP','TRANSACTION_PGI','IMAGE_NUM','TRANSACTION_TP','ENTITY_TP','NAME','CITY','STATE','ZIP_CODE','EMPLOYER','OCCUPATION','TRANSACTION_DT','TRANSACTION_AMT','OTHER_ID','TRAN_ID','FILE_NUM','MEMO_CD','MEMO_TEXT','SUB_ID'],low_memory=False)
# 将候选人与委员会关系表ccl和个人捐赠数据表itcont合并,通过 CMTE_ID
c_itcont =  pd.merge(ccl, itcont)

数据探索

# 查看目前数据前6行, 若省略行数,默认显示5行
c_itcont.head(6)
CMTE_ID CAND_ID CAND_NAME CAND_PTY_AFFILIATION AMNDT_IND RPT_TP TRANSACTION_PGI IMAGE_NUM TRANSACTION_TP ENTITY_TP ... EMPLOYER OCCUPATION TRANSACTION_DT TRANSACTION_AMT OTHER_ID TRAN_ID FILE_NUM MEMO_CD MEMO_TEXT SUB_ID
0 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031369 15 IND ... RETIRED RETIRED 7242020 100 NaN SA11AI.4909 1444070 NaN NaN 4100820201856947991
1 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031369 15 IND ... VA HOSPITAL LAB TECH 7242020 40 NaN SA11AI.4908 1444070 NaN NaN 4100820201856947993
2 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031370 15 IND ... VA HOSPITAL LAB TECH 7312020 40 NaN SA11AI.4916 1444070 NaN NaN 4100820201856947994
3 C00725697 H0AZ03461 WOOD, DANIEL REP A Q3 G2020 202010079285052516 15 IND ... POWERS-LEAVITT INSURANCE AGENT 8102020 300 NaN SA11AI.4683 1444556 NaN NaN 4100920201857257629
4 C00725697 H0AZ03461 WOOD, DANIEL REP A Q3 G2020 202010079285052518 15 IND ... UNEMPLOYED NaN 8072020 500 NaN SA11AI.4612 1444556 NaN NaN 4100920201857257635
5 C00725697 H0AZ03461 WOOD, DANIEL REP A Q3 G2020 202010079285052519 15 IND ... SELF-EMPLOYED DVM 7312020 500 NaN SA11AI.4593 1444556 NaN NaN 4100920201857257636

6 rows × 24 columns

# 查看目前数据后3行, 若省略行数,默认显示5行
c_itcont.head(n=3)
CMTE_ID CAND_ID CAND_NAME CAND_PTY_AFFILIATION AMNDT_IND RPT_TP TRANSACTION_PGI IMAGE_NUM TRANSACTION_TP ENTITY_TP ... EMPLOYER OCCUPATION TRANSACTION_DT TRANSACTION_AMT OTHER_ID TRAN_ID FILE_NUM MEMO_CD MEMO_TEXT SUB_ID
0 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031369 15 IND ... RETIRED RETIRED 7242020 100 NaN SA11AI.4909 1444070 NaN NaN 4100820201856947991
1 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031369 15 IND ... VA HOSPITAL LAB TECH 7242020 40 NaN SA11AI.4908 1444070 NaN NaN 4100820201856947993
2 C00698084 H0AZ02182 MORGAN, JOSEPH DAVID REP A Q3 P2020 202010069285031370 15 IND ... VA HOSPITAL LAB TECH 7312020 40 NaN SA11AI.4916 1444070 NaN NaN 4100820201856947994

3 rows × 24 columns

# 查看数据规模 多少行 多少列
c_itcont.shape
(756205, 24)



# 查看整体数据信息,包括每个字段的名称、非空数量、字段的数据类型
c_itcont.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 756205 entries, 0 to 756204
Data columns (total 24 columns):
CMTE_ID                 756205 non-null object
CAND_ID                 756205 non-null object
CAND_NAME               756205 non-null object
CAND_PTY_AFFILIATION    756205 non-null object
AMNDT_IND               756205 non-null object
RPT_TP                  756205 non-null object
TRANSACTION_PGI         756205 non-null object
IMAGE_NUM               756205 non-null int64
TRANSACTION_TP          756205 non-null object
ENTITY_TP               756205 non-null object
NAME                    756205 non-null object
CITY                    756159 non-null object
STATE                   756160 non-null object
ZIP_CODE                756092 non-null object
EMPLOYER                737413 non-null object
OCCUPATION              741294 non-null object
TRANSACTION_DT          756205 non-null int64
TRANSACTION_AMT         756205 non-null int64
OTHER_ID                647200 non-null object
TRAN_ID                 756205 non-null object
FILE_NUM                756205 non-null int64
MEMO_CD                 220 non-null object
MEMO_TEXT               655693 non-null object
SUB_ID                  756205 non-null int64
dtypes: int64(5), object(19)
memory usage: 144.2+ MB


# 查看数据表中数据类型的列的数据分布情况
c_itcont.describe()
IMAGE_NUM TRANSACTION_DT TRANSACTION_AMT FILE_NUM SUB_ID
count 7.562050e+05 7.562050e+05 7.562050e+05 7.562050e+05 7.562050e+05
mean 2.020090e+17 7.887799e+06 1.504307e+02 1.439133e+06 4.091288e+18
std 4.071886e+11 3.857874e+05 2.320452e+03 2.325325e+03 4.642365e+15
min 2.020072e+17 7.222020e+06 -5.600000e+03 1.427865e+06 4.072420e+18
25% 2.020092e+17 7.312020e+06 2.000000e+01 1.440015e+06 4.092520e+18
50% 2.020092e+17 8.102020e+06 3.500000e+01 1.440320e+06 4.093020e+18
75% 2.020092e+17 8.152020e+06 1.000000e+02 1.440320e+06 4.093020e+18
max 2.020101e+17 8.202020e+06 1.500000e+06 1.445380e+06 4.101020e+18

格式转换

#空值处理,统一填充 NOT PROVIDED
c_itcont['STATE'].fillna('NOT PROVIDED',inplace=True)
c_itcont['EMPLOYER'].fillna('NOT PROVIDED',inplace=True)
c_itcont['OCCUPATION'].fillna('NOT PROVIDED',inplace=True)
# 对日期TRANSACTION_DT列进行处理
c_itcont['TRANSACTION_DT'] = c_itcont['TRANSACTION_DT'] .astype(str)
# 将日期格式改为年月日  7242020    
c_itcont['TRANSACTION_DT'] = [i[3:7]+i[0]+i[1:3] for i in c_itcont['TRANSACTION_DT'] ]

绘制收到捐赠额最多的两位候选人的总捐赠额变化趋势图

# 计算每个总统候选人所获得的捐款总额,然后排序,取前二位
c_itcont.groupby("CAND_NAME").sum().sort_values("TRANSACTION_AMT",ascending=False).head(2)
IMAGE_NUM TRANSACTION_AMT FILE_NUM SUB_ID
CAND_NAME
BIDEN, JOSEPH R JR 1.025834e+23 68111142.0 7.307496e+11 2.077270e+24
TRUMP, DONALD J. 1.181873e+22 16594982.0 8.417584e+10 2.396038e+23
# 提取需要的数据列
c_itcont0 = pd.DataFrame(c_itcont, columns=[ 'CAND_NAME', 'TRANSACTION_AMT', 'TRANSACTION_DT'])
# 已知所获得的捐款总额前两位的总统候选人分别是'BIDEN, JOSEPH R JR', 'TRUMP, DONALD J.', 筛选出来
c_itcont1 = c_itcont0[c_itcont0['CAND_NAME'].isin(['BIDEN, JOSEPH R JR', 'TRUMP, DONALD J.'])]
# 因为同一天会有多笔捐款入帐,需要做分组求和
c_itcont2 = c_itcont1.groupby(['CAND_NAME', 'TRANSACTION_DT']).sum()
# 因为我们要看总额的趋势图,所以要做累加
c_itcont3 = c_itcont2.groupby(['CAND_NAME', ]).cumsum()
# 现在很快可以达到预期目标了
c_itcont3
TRANSACTION_AMT
CAND_NAME TRANSACTION_DT
BIDEN, JOSEPH R JR 2020722 888622
2020723 1852227
2020724 3024292
2020725 3943847
2020726 5052629
2020727 6150050
2020728 7625248
2020729 8900851
2020730 9964382
2020731 12305972
2020801 13391021
2020802 14208260
2020803 15063070
2020804 16138452
2020805 17317433
2020806 18293448
2020807 19246279
2020808 20152637
2020809 20996972
2020810 22015682
2020811 26905056
2020812 32932121
2020813 38604052
2020814 41666574
2020815 44125928
2020816 46254874
2020817 49826137
2020818 53584270
2020819 58989963
2020820 68111142
TRUMP, DONALD J. 2020722 330603
2020723 554920
2020724 828209
2020725 1035861
2020726 1529042
2020727 2044076
2020728 2499171
2020729 3216022
2020730 4346359
2020731 6338855
2020801 6688166
2020802 6925401
2020803 7273299
2020804 7862177
2020805 8175442
2020806 8501605
2020807 8899471
2020808 9124955
2020809 9404411
2020810 10286254
2020811 10856855
2020812 11540551
2020813 12298919
2020814 12717476
2020815 13483142
2020816 13812398
2020817 14453930
2020818 15086445
2020819 15665254
2020820 16594982
# 整理下排列索引,这里用到了索引和列标题转换与转置操作
c_itcont4 = c_itcont3.unstack().T
c_itcont4
CAND_NAME BIDEN, JOSEPH R JR TRUMP, DONALD J.
TRANSACTION_DT
TRANSACTION_AMT 2020722 888622 330603
2020723 1852227 554920
2020724 3024292 828209
2020725 3943847 1035861
2020726 5052629 1529042
2020727 6150050 2044076
2020728 7625248 2499171
2020729 8900851 3216022
2020730 9964382 4346359
2020731 12305972 6338855
2020801 13391021 6688166
2020802 14208260 6925401
2020803 15063070 7273299
2020804 16138452 7862177
2020805 17317433 8175442
2020806 18293448 8501605
2020807 19246279 8899471
2020808 20152637 9124955
2020809 20996972 9404411
2020810 22015682 10286254
2020811 26905056 10856855
2020812 32932121 11540551
2020813 38604052 12298919
2020814 41666574 12717476
2020815 44125928 13483142
2020816 46254874 13812398
2020817 49826137 14453930
2020818 53584270 15086445
2020819 58989963 15665254
2020820 68111142 16594982

绘制收到捐赠额最多的两位候选人的总捐赠额变化趋势图

这里使用 plot 方法绘制趋势图,(由于天池实验室环境不是最新的库,兼容问题会报警告,但是不影响出图。 我在其它环境测试没问题,图的横坐标会有日期显示的。)

# grid参数 用来显示后面的辅助网格线, rot 使横坐标的日期以45度排列, 不会导致产生字符过长导致叠加的问题。(由于天池实验室环境不是最新的库,兼容问题会报警告,横坐标的日期标注无法显示。)
c_itcont4.plot(grid=True, rot=45)

trend.png

结论

由趋势图可以看出,在7月22日至8月20日期间,拜登收到的捐款总额明显高于特朗普。且在8月份有更为显著的变化。

使用桑基图分析美国各州对党派的贡献度

桑基图(Sankey),即桑基能量分流图,是一种高级可视化图形。常用于金融等数据的可视化分析。最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。

一个州的捐款额可能会流向不同的党派,用桑基图表示的效果就非常好。可以很清楚看出某个党派的贡献流向。

这里要用到第三方库 pyecharts,用来画桑吉图比较方便,还支持交互式操作(鼠标悬停某条能量线高亮并显示金额数量),首先安装第三方库

!pip install pyecharts --user
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Requirement already satisfied: pyecharts in /data/nas/workspace/envs/python3.6/site-packages (1.9.0)
Requirement already satisfied: prettytable in /data/nas/workspace/envs/python3.6/site-packages (from pyecharts) (1.0.1)
Requirement already satisfied: simplejson in /data/nas/workspace/envs/python3.6/site-packages (from pyecharts) (3.17.2)
Requirement already satisfied: jinja2 in /opt/conda/lib/python3.6/site-packages (from pyecharts) (2.11.2)
Requirement already satisfied: setuptools in /opt/conda/lib/python3.6/site-packages (from prettytable->pyecharts) (49.6.0)
Requirement already satisfied: wcwidth in /opt/conda/lib/python3.6/site-packages (from prettytable->pyecharts) (0.2.5)
Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/lib/python3.6/site-packages (from jinja2->pyecharts) (1.1.1)


# 提取需要的数据列
c_itcont5 = pd.DataFrame(c_itcont, columns=[ 'STATE', 'TRANSACTION_AMT', 'CAND_PTY_AFFILIATION'])
# 提取党派集合
c_itcont_CAND_PTY_AFFILIATION = pd.DataFrame(c_itcont5,columns=['CAND_PTY_AFFILIATION'])
cgc = c_itcont_CAND_PTY_AFFILIATION.groupby('CAND_PTY_AFFILIATION').count()
node2 = list(cgc.index)
node2
['BDY',
 'CON',
 'DEM',
 'DFL',
 'GRE',
 'IND',
 'LIB',
 'NON',
 'NPA',
 'OTH',
 'REP',
 'UNK']



# 提取州集合
c_itcont_STATE = pd.DataFrame(c_itcont5,columns=['STATE'])
sgc = c_itcont_STATE.groupby('STATE').count()
node1 = list(sgc.index)
# 为方便阅读, 引入汉化字典
scp = {'AA': '美洲军',
 'AE': '军事地区',
 'AK': '阿拉斯加州',
 'AL': '阿拉巴马州',
 'AP': '太平洋军事机构',
 'AR': '阿肯色州',
 'AS': '美属萨摩亚群岛',
 'AZ': '阿利桑那州',
 'CA': '加利福尼亚州',
 'CO': '科罗拉多州',
 'CT': '康涅狄格州',
 'DC': '华盛顿DC',
 'DE': '特拉华州',
 'FL': '佛罗里达州',
 'FM': 'FM联邦',
 'GA': '乔治亚州',
 'GU': '关岛',
 'HI': '夏威夷州',
 'IA': '爱荷华州',
 'ID': '爱达荷州',
 'IL': '伊利诺斯州',
 'IN': '印第安纳州',
 'KS': '堪萨斯州',
 'KY': 'KY',
 'LA': '路易斯安那州',
 'MA': '马萨诸塞州',
 'MD': '马里兰州',
 'ME': '缅因州',
 'MI': '密歇根州',
 'MN': '明尼苏达州',
 'MO': '密苏里州',
 'MP': 'MP',
 'MS': '密西西比州',
 'MT': '蒙大拿州',
 'NC': '北卡罗来纳州',
 'ND': '北达科他州',
 'NE': '内布拉斯加州',
 'NH': '新罕布什尔州',
 'NJ': '新泽西州',
 'NM': '新墨西哥州',
 'NOT PROVIDED': 'NOT PROVIDED',
 'NV': '内华达州',
 'NY': '纽约州',
 'OH': '俄亥俄州',
 'OK': 'OK',
 'OR': '俄勒冈州',
 'PA': '宾夕法尼亚州',
 'PR': 'PR',
 'PW': 'PW',
 'RI': '罗得岛州',
 'SC': '南卡罗来纳州',
 'SD': '南达科他州',
 'TN': '田纳西州',
 'TX': '得克萨斯州',
 'UT': '犹他州',
 'VA': '弗吉尼亚州',
 'VI': 'VI',
 'VT': '佛蒙特州',
 'WA': '华盛顿州',
 'WI': '威斯康辛州',
 'WV': '西弗吉尼亚州',
 'WY': '怀俄明州',
 'ZZ': 'ZZ'}
# 将集合加入到节点列表,nodes需要把桑基图中出现的名称全部设置进去,并且要保证links中的名称与name相同
nodes = []
for n in node1:
    nodes.append({'name': scp[n]})
for n in node2:
    nodes.append({'name': n})
# 做分组聚合
cgs = c_itcont5.groupby(['STATE','CAND_PTY_AFFILIATION']).sum()
# 将聚合结果加入到链接列表, links代表节点关系,source表示起点,target表示终点,需要将节点关系全部输入进去,value表示节点长度
links = []
for row in cgs.iterrows():
    links.append({'source': scp[row[0][0]], 'target': row[0][1], 'value': int(row[1][0])})
from pyecharts import options as opts
from pyecharts.charts import Page, Sankey
sankey = Sankey(init_opts=opts.InitOpts(width="1024", height="768"))        #可以设置大小和图标名称
sankey.add(
    '各州捐款额流向图',                #名称
    nodes,                    #输入节点,如果导入json数据,nodes=json['nodes]
    links,                    #输入关系,nodes=json['links']
    linestyle_opt=opts.LineStyleOpts(opacity=0.3, curve=0.5, color="source", width=10),
    label_opts=opts.LabelOpts(position="right", is_show=True, color='red'),
    node_gap=1
)
sankey.render()
# 生成的桑基图可通过下方目录查看

sankey.gif

'/data/nas/workspace/jupyter/download/render.html'


结论

由各州全款额流向图可以非常快速的得知:加利福尼亚州,纽约州,马萨诸塞州在7月22日至8月20日是对民主党贡献最多的三大州。

佛罗里达州和德克萨斯州对两大党的贡献几乎相同,但更倾向于共和党,也是对共和党贡献较大的两个州。

桑基图会包含很多数据元素,通过桑基图可以探索更多的数据,例如去除两大党的情况和仅比较两大党的情况等等。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
18天前
|
存储 大数据 数据挖掘
Pandas高级数据处理:大数据集处理
Pandas 是强大的 Python 数据分析库,但在处理大规模数据集时可能遇到性能瓶颈和内存不足问题。本文介绍常见问题及解决方案,如分块读取、选择性读取列、数据类型优化、避免不必要的副本创建等技巧,并通过代码示例详细解释。同时,针对 `MemoryError`、`SettingWithCopyWarning` 和 `DtypeWarning` 等常见报错提供解决方法,帮助读者更高效地处理大数据集。
58 16
|
23天前
|
数据采集 存储 机器学习/深度学习
数据的秘密:如何用大数据分析挖掘商业价值
数据的秘密:如何用大数据分析挖掘商业价值
47 9
|
1月前
|
数据采集 存储 算法
Pandas数据应用:市场篮子分析
市场篮子分析是一种用于发现商品间关联关系的数据挖掘技术,广泛应用于零售业。Pandas作为强大的数据分析库,在此领域具有显著优势。本文介绍了市场篮子分析的基础概念,如事务、项集、支持度、置信度和提升度,并探讨了数据预处理、算法选择、参数设置及结果解释中的常见问题与解决方案,帮助用户更好地进行市场篮子分析,为企业决策提供支持。
70 29
|
1月前
|
存储 数据采集 数据挖掘
Pandas数据应用:用户行为分析
本文介绍了如何使用Pandas进行用户行为分析,涵盖从基础概念到实际应用的多个方面。首先简要介绍了Pandas的安装与基本功能,接着详细讲解了数据加载、初步探索及常见问题(如数据缺失、重复记录和时间戳格式不统一)的处理方法。随后探讨了用户活跃度和路径分析等模式挖掘技巧,并总结了常见报错及避免措施。通过掌握这些内容,读者可以更高效地进行用户行为分析,提升产品设计和用户体验。
109 8
|
1月前
|
数据采集 数据挖掘 数据处理
Pandas数据应用:金融数据分析
本文介绍如何使用Pandas进行金融数据分析,涵盖数据导入、清洗、转换等基础操作。通过处理缺失值、重复值及数据类型不匹配等问题,结合时间序列分析和大规模数据处理技巧,帮助读者掌握常见问题的解决方案。案例分析展示了计算每日收益率并绘制图表的具体步骤。
60 14
|
1月前
|
分布式计算 数据可视化 数据挖掘
Pandas数据应用:社交媒体分析
本文介绍如何使用Pandas进行社交媒体数据分析,涵盖数据获取、预处理、探索性分析和建模的完整流程。通过API获取数据并转换为DataFrame格式,处理缺失值和数据类型转换问题。利用Matplotlib等库进行可视化,展示不同类型帖子的数量分布。针对大规模数据集提供内存优化方案,并结合TextBlob进行情感分析。最后总结常见问题及解决方案,帮助读者掌握Pandas在社交媒体数据分析中的应用。
160 96
|
2月前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
69 4
|
2月前
|
机器学习/深度学习 数据可视化 大数据
机器学习与大数据分析的结合:智能决策的新引擎
机器学习与大数据分析的结合:智能决策的新引擎
246 15
|
2月前
|
分布式计算 DataWorks 搜索推荐
用户画像分析(MaxCompute简化版)
通过本教程,您可以了解如何使用DataWorks和MaxCompute产品组合进行数仓开发与分析,并通过案例体验DataWorks数据集成、数据开发和运维中心模块的相关能力。
|
2月前
|
SQL 分布式计算 DataWorks
DataWorks产品测评|基于DataWorks和MaxCompute产品组合实现用户画像分析
本文介绍了如何使用DataWorks和MaxCompute产品组合实现用户画像分析。首先,通过阿里云官网开通DataWorks服务并创建资源组,接着创建MaxCompute项目和数据源。随后,利用DataWorks的数据集成和数据开发模块,将业务数据同步至MaxCompute,并通过ODPS SQL完成用户画像的数据加工,最终将结果写入`ads_user_info_1d`表。文章详细记录了每一步的操作过程,包括任务开发、运行、运维操作和资源释放,帮助读者顺利完成用户画像分析。此外,还指出了文档中的一些不一致之处,并提供了相应的解决方法。