案情: 在A市发生了几起汽车盗窃案,警方已掌握这伙盗窃团伙中的5位嫌疑人,调取了他们的手机通讯数据,现在想找到他们的密切联系人,请根据提供的数据进行分析研判。已知的5位嫌疑人的手机号分别是: 1340535**** 1341732**** 1340167**** 1340555**** 1340124**** 请根据数据分析检材,回答以下问题。

73、请问和嫌疑人1341732****通话时长最长的对方号码是哪一个?(答案格式:1366666****)( )

答案: 1885137****

先读取所有话单,按本方号码为名存入df,转换时长和时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pathlib import Path
import pandas as pd
from decimal import Decimal

folder = Path('./数据分析检材1')

def to_decimal(x):
return Decimal(str(x))

dfs = {}
for file in folder.glob('*.xlsx'):
df = pd.read_excel(file, dtype='str')
df['通话时长'] = df['通话时长'].apply(to_decimal)
df['通话时间'] = pd.to_datetime(df['通话时间'], format='%Y-%m-%d %H:%M:%S')
suspect = df['本方号码'][0]
dfs[suspect] = df

groupby对方号码对通话时长求和,对总的通话时长排序

1
dfs['1341732****'].groupby('对方号码')['通话时长'].sum().reset_index().sort_values('通话时长', ascending=False).iloc[0]
1
2
3
对方号码    1885137****
通话时长 8124
Name: 62, dtype: object
74、根据检材1,请问和已知的5位嫌疑人都有过通话关系的对方号码有几个?(答案格式:仅数字)( )

答案: 8

取每个表中的对方号码为集合,对五个集合求交集

1
2
sets = [set(dfs[x]['对方号码']) for x in dfs]
len(sets[0].intersection(*sets))
1
8
75、请问同时满足以下3个条件:和已知的五位嫌疑人中任意四位及以上有过通话关系且通话总次数大于60次且通话总时长大于700秒的对方号码有几个?(答案格式:仅数字)( )

答案: 7

按三个条件分别筛选对方号码的集合,对三个集合求交集

1
2
3
4
5
6
7
8
9
10
11
12
13
# 任意四位及以上有过通话关系
count_1 = pd.concat(dfs).groupby('对方号码')['本方号码'].nunique()
c1_set = set(count_1[count_1>=4].index)

# 通话次数大于60次
count_2 = pd.concat(dfs).value_counts('对方号码')
c2_set = set(count_2[count_2>60].index)

# 通话时长大于700秒
count_3 = pd.concat(dfs).groupby('对方号码')['通话时长'].sum()
c3_set = set(count_3[count_3>700].index)

len(c1_set & c2_set & c3_set)
1
7
76、请问和已知的5位嫌疑人在凌晨2点至6点之间发生过通话的对方号码有几个?(答案格式:仅数字)( )

答案: 2

使用dt.hour取通话时间的小时值,筛选大于等于2小于6的

1
2
3
merged_df = pd.concat(dfs)
merged_df['h'] = merged_df['通话时间'].dt.hour
set(merged_df[(merged_df['h'] >= 2) & (merged_df['h'] < 6)]['对方号码'])
1
{'1595269****', '1885137****'}
77、警方调取了相关的银行交易流水数据,隆测的其中一张银行卡是443925246349222294924,哪张银行卡给这张卡转了第二多的资金?(答案格式:21位数字)( )

答案: 446922315453222203924

先读取交易流水,转换金额和时间。

1
2
3
4
5
6
7
8
9
import pandas as pd
from decimal import Decimal

def to_decimal(x):
return Decimal(str(x))

df = pd.read_excel(r'./数据分析检材2/资金交易流水数据.xlsx', dtype='str')
df['交易时间'] = pd.to_datetime(df['交易时间'], format='%Y-%m-%d %H:%M:%S')
df['交易金额'] = df['交易金额'].apply(to_decimal)

查询指定银行卡的进账记录,groupby对方卡号并求和排序。

1
2
3
df.query(' 查询卡号 == "443925246349222294924" & 借贷标志 == "进" ') \
.groupby('交易对方卡号')['交易金额'].sum() \
.reset_index().sort_values('交易金额', ascending=False).iloc[1]
1
2
3
交易对方卡号    446922315453222203924
交易金额 140000
Name: 13, dtype: object
78、隆测名下的银行卡都属于隆测,如果把这些卡看作一个整体,请问给隆测转账(不包括隆测给自己转账)超过30万的卡有几张?(答案格式:仅数字)( )

答案: 4

先找出所有隆测的银行卡,筛选客户名称为隆测,对方卡号不是隆测的进账记录,求和筛选。

1
2
3
4
5
6
7
lc_1 = set(df[df['客户名称'] == '隆测']['查询卡号'])
lc_2 = set(df[df['交易对方名称'] == '隆测']['交易对方卡号'])
cards_of_lc = lc_1 | lc_2

df_1 = df[( ~df['交易对方卡号'].isin(cards_of_lc) ) & ( df['借贷标志'] == '进' ) & ( df['客户名称'] == '隆测' )]
df_1_sum = df_1.groupby('交易对方卡号')['交易金额'].sum()
df_1_sum[df_1_sum > 300000]
1
2
3
4
5
6
交易对方卡号
110928353264222204924 360000
110928358438222205924 399300
441929648998222208924 881700
446922315453222203924 509970
Name: 交易金额, dtype: object
79、如果资金沉淀卡的特征是:流入金额÷交易总金额≥80%,请问在全量数据中满足这个特征且流入金额在300万及以上的卡有几个?(答案格式:仅数字)( )

答案: 2

展开交易记录,将对方的入账与查询的入账合并为一张表,按卡号groupby并求和计算。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
df['入账'] = np.where(df['借贷标志'] == '进', df['交易金额'], Decimal("0"))
df['对方入账'] = np.where(~(df['借贷标志'] == '进'), df['交易金额'], Decimal("0"))
df_a = df[['查询卡号', '交易金额', '入账']]
df_b = df[['交易对方卡号', '交易金额', '对方入账']].rename(columns={'交易对方卡号': '查询卡号', '对方入账': '入账'})
df_2 = pd.concat([df_a, df_b])

df_2 = df_2.groupby('查询卡号').agg(
总金额=('交易金额', 'sum'),
总入账=('入账', 'sum')
).reset_index()

df_2[(df_2['总入账']/df_2['总金额'] >= 0.8) & (df_2['总入账']>=3000000)]
1
2
3
查询卡号	总金额	总入账
13 341320222207032248751 36000000 36000000
55 6228332299882958344 19000000 19000000
80、隆皂的其中一张银行卡是443925246338222294924,对其的交易发生在周末的次数共计多少次?(答案格式:仅数字)( )

答案: 47

使用.dt.dayofweek筛选周末的记录。

1
2
df_zl = df[(df['查询卡号'] == '443925246338222294924') | (df['交易对方卡号'] == '443925246338222294924')]
len(df_zl[(df_zl['交易时间'].dt.dayofweek == 5) | (df_zl['交易时间'].dt.dayofweek == 6)])
1
47
81、警方根据线索找到了涉案服务器的日志数据,请你对数据分析检材中的日志文件进行分析,找到压缩包的密码。答案格式:按实际值填写)( )

答案: dataPersonPass123987

数据分析也要出misc是吧
数据往下翻,发现有一大段HEX,开头是FFD8FFE000104A464946,应该是一个JPG的图片,前面是doL3Zhci93d3cvaHRtbC91cGxvYWQvcGFzc3dvcmQuanBn
搜了下发现是老题,离谱
用蚁剑上传了图片,Base64从第三位开始解码,解出来是文件上传路径/var/www/html/upload/password.jpg
直接在VSCode里面多行编辑把整段HEX复制出来,转成文件。
password.jpg
傅里叶变换即可获取隐写的密码内容。
PuzzleSolver
password_fft

82、警方根据线索找到了涉案服务器的日志数据,请你对数据分析检材中的日志文件进行分析,找出“张三”的身份证号。(答案格式:与线索保持一致)( )

答案: 30601319731003117X

数据继续往下翻还有一段HEX,开头是504B030414,是一个压缩包。导出用上一题的密码解密。在data.csv中直接找到答案。

评价为拼好题