

所谓“伪娘”,即通过女装、化妆等手法让外人认为是女性的男性,我们通常可以在各地的漫展上看到相当数量的“伪娘”,这也是二次元文化中的萌属性之一。
而“药娘”则不同,简单来说就是心理性别为女,生理性别为男的跨性别者,他们通常是依靠激素药物改变内分泌,从而让自己身体特征逐渐接近女性。这个群体的人数非常稀少且又特殊,直至去年(2016年?根据参考链接文章编辑时间推测。)才在网络上出现相关讨论,但目前并没有引起社会的广泛关注。
'''
特殊分类视频信息分析 TS伪娘
http://www.h4ck.org.cn
by obaby
obaby@mars
email:root@obaby.org.cn
date: 2020.09.14
'''
from pyspark.sql.functions import col
import altair as alt
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
csv = spark.read.option("header",True).csv("hdfs://localhost:9000/data3/porn_data_movie.csv")
csv.printSchema() |
'''
特殊分类视频信息分析 TS伪娘
http://www.h4ck.org.cn
by obaby
obaby@mars
email:root@obaby.org.cn
date: 2020.09.14
'''
from pyspark.sql.functions import col
import altair as alt
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
csv = spark.read.option("header",True).csv("hdfs://localhost:9000/data3/porn_data_movie.csv")
csv.printSchema()
root
|-- id: string (nullable = true)
|-- create: string (nullable = true)
|-- update: string (nullable = true)
|-- name: string (nullable = true)
|-- describe: string (nullable = true)
|-- image: string (nullable = true)
|-- thumb: string (nullable = true)
|-- thumb_raw: string (nullable = true)
|-- preview: string (nullable = true)
|-- video_link1: string (nullable = true)
|-- video_link2: string (nullable = true)
|-- video_link3: string (nullable = true)
|-- video_link4: string (nullable = true)
|-- mp4: string (nullable = true)
|-- m3u8: string (nullable = true)
|-- source_id: string (nullable = true)
|-- publish_time: string (nullable = true)
|-- play_count: string (nullable = true)
|-- good_count: string (nullable = true)
|-- bad_count: string (nullable = true)
|-- link_count: string (nullable = true)
|-- comment_count: string (nullable = true)
|-- thunder_url: string (nullable = true)
|-- designation: string (nullable = true)
|-- category_id: string (nullable = true)
|-- porn_site_id: string (nullable = true)
|-- uploader_id: string (nullable = true)
|-- producer: string (nullable = true)
csv.select('name', 'describe', 'category_id').show() |
csv.select('name', 'describe', 'category_id').show()
+------------------------+------------------------+-----------+
| name| describe|category_id|
+------------------------+------------------------+-----------+
| 美女学生考试时被中出| null| 1|
| 无套中出内射(上)| 无套中出内射| 1|
| 无套中出内射(下)| 无套中出内射| 1|
| 极品嫩妹| null| 1|
| 骚妹妹 7| null| 1|
|漂亮美女完美身材甜美声音|漂亮美女完美身材甜美声音| 1|
| jk捆绑萝莉束缚| null| 1|
| 最纯萝莉性爱| null| 1|
| 整容脸制服美女| null| 1|
| 星 调教萝莉| null| 1|
| 大一学生寝室自慰| null| 1|
| 超性感美女给你打飞机| null| 1|
| 超可爱萝莉下海资源| null| 1|
| 迷倒女儿然后慢慢操| null| 1|
| 精灵做爱高潮–影视剪辑| null| 1|
| 小萝莉被插到大叫| null| 1|
| 睡醒和白嫩女友来一发| null| 1|
| 双马尾萝莉甜美自慰诱惑| null| 1|
| 调教双马尾小萝莉| null| 1|
| 黑丝小萝莉最喜欢玩具| null| 1|
+------------------------+------------------------+-----------+
only showing top 20 rows
# 分类信息读取
category_csv = spark.read.option("header",True).csv("hdfs://localhost:9000/data3/porn_data_category.csv")
category_csv.printSchema() |
# 分类信息读取
category_csv = spark.read.option("header",True).csv("hdfs://localhost:9000/data3/porn_data_category.csv")
category_csv.printSchema()
root
|-- id: string (nullable = true)
|-- create: string (nullable = true)
|-- update: string (nullable = true)
|-- name: string (nullable = true)
|-- key: string (nullable = true)
|-- describe: string (nullable = true)
|-- image: string (nullable = true)
movie_csv = csv.withColumnRenamed('name','movie_name')
movie_csv.select('movie_name', 'category_id', 'id').show() |
movie_csv = csv.withColumnRenamed('name','movie_name')
movie_csv.select('movie_name', 'category_id', 'id').show()
+------------------------+-----------+---+
| movie_name|category_id| id|
+------------------------+-----------+---+
| 美女学生考试时被中出| 1| 1|
| 无套中出内射(上)| 1| 2|
| 无套中出内射(下)| 1| 3|
| 极品嫩妹| 1| 4|
| 骚妹妹 7| 1| 5|
|漂亮美女完美身材甜美声音| 1| 6|
| jk捆绑萝莉束缚| 1| 7|
| 最纯萝莉性爱| 1| 8|
| 整容脸制服美女| 1| 9|
| 星 调教萝莉| 1| 10|
| 大一学生寝室自慰| 1| 11|
| 超性感美女给你打飞机| 1| 12|
| 超可爱萝莉下海资源| 1| 13|
| 迷倒女儿然后慢慢操| 1| 14|
| 精灵做爱高潮–影视剪辑| 1| 15|
| 小萝莉被插到大叫| 1| 16|
| 睡醒和白嫩女友来一发| 1| 17|
| 双马尾萝莉甜美自慰诱惑| 1| 18|
| 调教双马尾小萝莉| 1| 19|
| 黑丝小萝莉最喜欢玩具| 1| 20|
+------------------------+-----------+---+
only showing top 20 rows
movie_cat_rdd = movie_csv.select('movie_name','category_id').join(category_csv, movie_csv.category_id == category_csv.id, "inner")
movie_cat_rdd.select('movie_name', 'name', 'id').show() |
movie_cat_rdd = movie_csv.select('movie_name','category_id').join(category_csv, movie_csv.category_id == category_csv.id, "inner")
movie_cat_rdd.select('movie_name', 'name', 'id').show()
+------------------------+------+---+
| movie_name| name| id|
+------------------------+------+---+
| 美女学生考试时被中出|萝莉系| 1|
| 无套中出内射(上)|萝莉系| 1|
| 无套中出内射(下)|萝莉系| 1|
| 极品嫩妹|萝莉系| 1|
| 骚妹妹 7|萝莉系| 1|
|漂亮美女完美身材甜美声音|萝莉系| 1|
| jk捆绑萝莉束缚|萝莉系| 1|
| 最纯萝莉性爱|萝莉系| 1|
| 整容脸制服美女|萝莉系| 1|
| 星 调教萝莉|萝莉系| 1|
| 大一学生寝室自慰|萝莉系| 1|
| 超性感美女给你打飞机|萝莉系| 1|
| 超可爱萝莉下海资源|萝莉系| 1|
| 迷倒女儿然后慢慢操|萝莉系| 1|
| 精灵做爱高潮–影视剪辑|萝莉系| 1|
| 小萝莉被插到大叫|萝莉系| 1|
| 睡醒和白嫩女友来一发|萝莉系| 1|
| 双马尾萝莉甜美自慰诱惑|萝莉系| 1|
| 调教双马尾小萝莉|萝莉系| 1|
| 黑丝小萝莉最喜欢玩具|萝莉系| 1|
+------------------------+------+---+
only showing top 20 rows
import jieba.posseg as psg
def get_person_name_from_line(line):
words = psg.cut(str(line))
l =[]
for x in words:
if x.flag =='nr':
l.append(x.word)
# print(x.word, x.flag)
return l
# 由于数据来自于不同的网站,所以分类名称可能有所区别,通过筛选筛选出所有的TS分类。
category_csv.filter(col('name').contains('人妖')).show() |
import jieba.posseg as psg
def get_person_name_from_line(line):
words = psg.cut(str(line))
l =[]
for x in words:
if x.flag =='nr':
l.append(x.word)
# print(x.word, x.flag)
return l
# 由于数据来自于不同的网站,所以分类名称可能有所区别,通过筛选筛选出所有的TS分类。
category_csv.filter(col('name').contains('人妖')).show()
+---+--------------------+--------------------+--------+------+--------+--------------------+
| id| create| update| name| key|describe| image|
+---+--------------------+--------------------+--------+------+--------+--------------------+
| 26|7/5/2020 08:12:54...|14/9/2020 00:06:3...| 人妖|renyao| null|https://9uu88.com...|
|113|11/9/2020 07:14:5...|11/9/2020 07:56:5...|人妖视频| ry| null| null|
+---+--------------------+--------------------+--------+------+--------+--------------------+
name_rdd = movie_cat_rdd.filter(col('category_id').isin({'26', '113'}) ).select('movie_name').rdd
name_rdd.take(10) |
name_rdd = movie_cat_rdd.filter(col('category_id').isin({'26', '113'}) ).select('movie_name').rdd
name_rdd.take(10)
[Row(movie_name='加勒比女海盗2'),
Row(movie_name='小伪娘爱自慰'),
Row(movie_name='惠奈酱姐妹sm'),
Row(movie_name='ts张思妮走廊大胆露出'),
Row(movie_name='两个假屌女孩'),
Row(movie_name='大水球奶加奶油大喷枪'),
Row(movie_name='双性人互爱'),
Row(movie_name='人妖和我一起3p美女'),
Row(movie_name='好美的人妖重口味的福利'),
Row(movie_name='赵恩静')]
name_word_rdd = name_rdd.flatMap(get_person_name_from_line)
name_word_rdd.take(20) |
name_word_rdd = name_rdd.flatMap(get_person_name_from_line)
name_word_rdd.take(20)
['惠奈',
'张思妮',
'美的',
'赵恩静',
'思琪',
'思琪',
'夏若熙',
'惠奈',
'美的',
'赵恩静',
'美的',
'惠奈',
'金克丝',
'脫光才',
'美瑶',
'帅哥',
'小帅哥',
'美的',
'赵恩静',
'美的']
# map reduce 进行词频统计
name_counts_rdd = name_word_rdd.map(lambda x:(x,1)).reduceByKey(lambda x,y:x+y)
exclude_words = ['高潮', '爽', '美的', '帅哥', '清秀',
'高清', '後','黑丝', '太猛','老公', '啊啊啊', '贞操']
name_counts_rdd =name_counts_rdd.filter(lambda x : x[0] not in exclude_words)
print('姓名统计一共:', str(name_counts_rdd.count()))
name_counts_rdd.sortBy(lambda a: a[1],ascending=False).collect()[:20] |
# map reduce 进行词频统计
name_counts_rdd = name_word_rdd.map(lambda x:(x,1)).reduceByKey(lambda x,y:x+y)
exclude_words = ['高潮', '爽', '美的', '帅哥', '清秀',
'高清', '後','黑丝', '太猛','老公', '啊啊啊', '贞操']
name_counts_rdd =name_counts_rdd.filter(lambda x : x[0] not in exclude_words)
print('姓名统计一共:', str(name_counts_rdd.count()))
name_counts_rdd.sortBy(lambda a: a[1],ascending=False).collect()[:20]
[('小乔', 36),
('张思妮', 34),
('曦', 31),
('宝贝', 27),
('雪儿', 26),
('王可心', 25),
('安德', 23),
('小姐姐', 23),
('赵恩静', 23),
('龚', 22),
('惠奈', 17),
('刘卡思', 15),
('陈雯雯', 15),
('静雅', 15),
('萌', 14),
('雯', 14),
('枫', 13),
('思瑶', 13),
('胡', 13),
('金韩雅', 11)]
name_counts_df = name_counts_rdd.toDF().toPandas()
name_counts_df.head() |
name_counts_df = name_counts_rdd.toDF().toPandas()
name_counts_df.head()
_1 _2
0 安德 23
1 王可心 25
2 大秀 2
3 乔胖男 1
4 小萝莉 5
# 视频标签数量展示
bars=alt.Chart(name_counts_df).mark_bar().encode(
x=alt.X('_2', title='视频数量'),
y=alt.Y('_1', title='TS姓名', sort='-x')
)
text = bars.mark_text(align='left', baseline='middle', dx=3).encode(text='_2')
(bars + text).properties(height=4000, width=800) |
# 视频标签数量展示
bars=alt.Chart(name_counts_df).mark_bar().encode(
x=alt.X('_2', title='视频数量'),
y=alt.Y('_1', title='TS姓名', sort='-x')
)
text = bars.mark_text(align='left', baseline='middle', dx=3).encode(text='_2')
(bars + text).properties(height=4000, width=800)

movie_cat_rdd.filter(col('movie_name').contains('曦')).select('movie_name').show() |
movie_cat_rdd.filter(col('movie_name').contains('曦')).select('movie_name').show()
+-------------------------------------+
| movie_name|
+-------------------------------------+
| 微博网红巨乳顾灵曦2合集|
|最新极品巨乳女神心妍小公主『李妍曦...|
| 重 磅 福 利 最 新 购 买 秀...|
| 嫩模龙泽美曦宾馆与土豪援交|
|秀人网嫩模龙泽美曦宾馆与土豪援交被...|
| 微博网红巨乳顾灵曦 1|
| 微博网红顾灵曦合集|
|在床上爽到叫爸爸!網路瘋傳小模陳曦...|
| 微博网红顾灵曦毒龙口交|
| 丑曦福利小视频|
| 主播丑曦6月大秀录制|
| 美女主播丑曦 最新福利小视频露脸...|
|重磅福利万众期待,超美的大学生御姐...|
| 模特子曦自拍|
| 微博网红巨乳顾灵曦 1|
| 微博网红顾灵曦|
| 美妖韩若曦唯美啪啪大秀|
| 美乳高冷野模子曦宾馆扣穴全裸私拍|
| 微博巨乳网红顾灵曦口交|
| 微博网红巨乳顾灵曦baby12月和...|
+-------------------------------------+
only showing top 20 rows
参考链接: https://zhuanlan.zhihu.com/p/25401864