概要
目次
- Pythonでデータに重複があるか確認する方法
- PyCon JPが不正をしていない理由の解説
本記事では、Pythonで重複したデータを集約する方法、及び、機密情報を隠して集計をするためのUUIDの使い方について解説します。
本記事で紹介するコードは投票結果の集計やアイデアの集計などで有効に使うことができます。
内容に誤りがありましたらご指摘ください。
Pythonでデータに重複があるか確認する方法
リスト形式の場合
Pythonでリストから重複があるか確認する3種類の方法を紹介します。
外部ライブラリ、cythonを使わない場合、データの偏在について事前情報がない場合はこの手段が有用です。
setを使う方法
values = ['A', 'A', 'B']
len(values) == len(set(values))
list.countを使う方法
values = ['A', 'A', 'B']
any(values.count(value) > 1 for value in values)
collections.Counterを使う方法
from collections import Counter
values = ['A', 'A', 'B']
any(count > 1 for count in Counter(values).values())
辞書型データ構造の場合
キーの重複を抽出する
もし[{ユーザー名:アイデア},{ユーザー名:アイデア}]
のような形式のデータから、複数のアイデアを投稿したユーザーのみを抽出するのであれば以下のように書くことができます。
from collections import defaultdict
data = [
{"Alice": "Sushi"},
{"Alice": "Ramen"},
{"Bob": "Pasta"},
{"Charlie": "Curry"},
{"Bob": "Pizza"},
]
result = defaultdict(list)
for d in data:
for name, idea in d.items():
result[name].append(idea)
multiple_ideas = {name: ideas for name, ideas in result.items() if len(ideas) > 1}
for name, ideas in multiple_ideas.items():
print(f"{name}: {ideas}")
Alice: ['Sushi', 'Ramen']
Bob: ['Pasta', 'Pizza']
データの匿名化
誰が重複して投稿をしたのか、ユーザー名を匿名で確認したい、という場合はUUIDが使えます。
以下の処理を踏むことで、人物名を匿名化して重複を確認できるようになります。
import hashlib
data = [
{"Alice": "Sushi"},
{"Alice": "Ramen"},
{"Bob": "Pasta"},
{"Charlie": "Curry"},
{"Bob": "Pizza"},
]
name_to_uuid = {
name: hashlib.sha256(name.encode()).hexdigest()[:8]
for name in set(d for d in data for d in d)
}
data = [{name_to_uuid[name]: idea for name, idea in d.items()} for d in data]
print(data)
[{'3bc51062': 'Sushi'}, {'3bc51062': 'Ramen'}, {'cd9fb1e1': 'Pasta'}, {'6e81b125': 'Curry'}, {'cd9fb1e1': 'Pizza'}]
以下、Qiita恒例のポエム
PyCon JPが不正をしていない理由
このような発表を目にしました。
PyCon JPにおける登壇者採択に関する見解
何を言っているか、相変らず日本語や論理がよくわからなかったのですが、当該団体が不正を行っていない理由について所見を述べます。
インセンティブに従って動くから不正がない
本イベントでは、特定の企業や個人を優遇するような選定は一切行っておりません。
採択プロセスにおいて特定のスポンサー企業や個人を優遇することは、本イベントの目的である「技術や経験を共有し、新たな交流や発見を生み出す」という観点に反するものであり、また、当法人の設立趣旨である「継続的にカンファレンスを開催する」という使命とも相容れない行為です。
さらに、このような不公正なプロセスが行われれば、スポンサー企業やコミュニティメンバーとの信頼関係が損なわれ、イベントの存続自体が危うくなる可能性があります。したがって、本イベントにおいては特定の企業や個人を優遇するようなインセンティブは全く存在しません。
まさにその通りです。
PyConJPでは特定の企業(スポンサー企業)や、特定個人(コミュニティメンバー)との信頼関係が損われるような不適切なプロセスを採用するはずがありません。
何故ならそうしたことをするインセンティブが全く存在しないからです。愛好家の集まりであるPyConJPはPyConを支援する、技術や公正を重んじない特定企業、コミュニティメンバーとの信頼関係を重んじています。
PyConJPはバイアスを排除するために適切な措置を講じているから不正がない
また、選定プロセスにおいてはできる限りバイアスを排除するため、複数登壇を防ぐための確認段階まで応募者の名前をマスキングするなど、できる限り公平性を確保するための対策を講じています。
匿名審査において投稿者名をマスキングせずに直接確認し選考を行う理由として、重複を防ぐため、という説明は興味深いですね。今後は本記事を参考にしてください。技術を使って課題を解決するところから入門してみましょう。
訂正の要求:技術者や専門家が集うコミュニティというのは詐称
近年、Pythonのユーザー層は急速に広がりを見せ、Web開発、データサイエンス、IoT、機械学習といった幅広い分野にわたる多様な技術者や専門家が集うコミュニティとなりました。
ビジネス上や社会の要望に答えるため、日本のPythonを使う技術者や専門家は少なくありません。
しかしながらPyConJPは愛好家のコミュニティであり、そこに技術者や専門家は不在です。
愛好家が技術者・専門家を名乗ることは許されません。
もしかして愛好家に技術者や専門家としての役割と責任が担えるとお考えなのですか?
それはありえません。
PyConJPは楽しめるかを重視しているから不正がない
私たちが登壇者を選ぶ際、最も大切にしているのは「参加者の皆様に楽しんでいただけるか」という点です。
発信する内容が、あからさまに間違っていようとも、技術者倫理に反していて社会に対する有害性が非常に高い内容であろうとも、特定企業の宣伝活動であろうとも、常に愛好家の視点で評価をします。
つまり、技術的な評価はしませんし不可能です。代わりに企業名と個人名を評価します。
それはPyConJPが「参加者の皆様に楽しんでいただけるか」を大切にしているためです。
PyConJPはPython愛好家コミュニティゆえに、愛好家視点で愛好者のための情報発信活動を行っています。
誹謗中傷、虚偽の内容の発信は止めるべきだから不正がない
一方で、支援や意見が私たちの成長にとって大切であるのと同時に、個人攻撃や誹謗中傷、あるいはそれに類する行為は、私たちの目指すオープンで協力的なコミュニティの発展に反するものです。そのような行為は、私たちだけでなくコミュニティ全体を傷つけることにつながりますので、どうか控えていただきたいと強くお願い申し上げます。
私たちは皆様からの建設的な意見や提案を真摯に受け止め、コミュニティの成長に活かしたいと考えています。しかし、もし攻撃的な言動がエスカレートし、私たちやコミュニティの健全な運営が脅かされる場合には、残念ながら弁護士など専門家の協力を得て、法的措置を検討せざるを得ません。このような事態は避けたいと考えておりますので、皆様には引き続き、建設的なご意見でのご協力をお願い申し上げます。
特定個人や団体に対する誹謗中傷、脅迫、恫喝、名誉毀損となる情報の発言や虚偽の発表が許されないのは社会の常識です。
コミュニティの健全な運営、オープンで協力的なコミュニティの発展に繋る情報の発信をしましょう。
Comments
Let's comment your feelings that are more than good