完全ワイヤレスイヤホン(TWS)
当サイトではレビュー依頼をお受けしております。ご連絡はお問合せページ、もしくは下記メールアドレスによろしくお願いいたします。
なお、メールにつきましては下記アドレスの「★」を「@」に変換の上、送信をよろしくお願いいたします。迷惑メール対策のためです。
- メール: megatenpa.blog★gmail.com
- Twitter: @m_ten_pa
完全ワイヤレスイヤホンの性能グラフ
イヤホン名をシングルクリックで非表示、ダブルクリックで単発表示。
初期表示の3機種は個人的ベスト3(音質、ノイキャンなどの性能、使いやすさなどを加味)。
風切り音低減機能(風切り音の防止機能)搭載の完全ワイヤレスイヤホンのノイキャンは、風切り音低減オン状態の数値にしている。
Jabra Elite 75t | Galaxy Galaxy Buds Pro | AVIOT TE-D01t | Nothing Ear(1) | SONY WF-1000XM4 | Jabra Elite 85t | Jabra Elite 7 Active | XROUND FORGE NC | Anker Soundcore Liberty 3 Pro | Noble Audio FALCON ANC | Sennheiser MTW 3 | SOUNDPEATS Mini Pro | SOUNDPEATS Capsule3 Pro | ||
本体再生時間(ANCあり) | 5.5 | 5 | 12.6 | 4 | 8 | 5.5 | 8 | 9 | 6 | 6 | 5 | 5 | 5.5 | 本体再生時間(ANCあり) |
本体再生時間(ANCなし) | 7.5 | 8 | 18 | 5.7 | 12 | 7 | 10 | 11.7 | 8 | 8.5 | 7 | 7 | 8 | 本体再生時間(ANCなし) |
ノイキャン低音 | 6 | 7 | 5 | 4 | 10 | 9 | 8 | 6 | 9 | 6 | 6 | 6 | 7 | ノイキャン低音 |
ノイキャン高音 | 4 | 5 | 4 | 4 | 8 | 6 | 7 | 4 | 6 | 4 | 5 | 4 | 4 | ノイキャン高音 |
外音取り込み | 9 | 5 | 4 | 4 | 7 | 8 | 8 | 5 | 7 | 5 | 7 | 5 | 5 | 外音取り込み |
ドライバーサイズ | 6 | 11 | 10 | 11.6 | 6 | 12 | 6 | 7 | 10.6 | 10 | 7 | 10 | 12 | ドライバーサイズ |
音質低音 | 8 | 7 | 6 | 6 | 7 | 7 | 7 | 6 | 7 | 8 | 7 | 7 | 6 | 音質低音 |
音質高音 | 5 | 7 | 5 | 4 | 7 | 7 | 6 | 6 | 4 | 8 | 8 | 5 | 7 | 音質高音 |
操作性 | 8 | 5 | 7 | 3 | 2 | 8 | 7 | 6 | 8 | 5 | 9 | 5 | 5 | 操作性 |
アプリの使いやすさ | 8 | 5 | 4 | 3 | 6 | 8 | 7 | 6 | 8 | 6 | 8 | 6 | 5 | アプリの使いやすさ |
付加機能 | 5 | 5 | 5 | 4 | 8 | 6 | 5 | 8 | 6 | 5 | 8 | 4 | 4 | 付加機能 |
防水(IPX○) | 5 | 7 | 4 | 4 | 4 | 4 | 5 | 7 | 4 | 4 | 4 | 5 | 4 | 防水(IPX○) |
防塵(IP○X) | 5 | 0 | 0 | 0 | 0 | 0 | 7 | 6 | 0 | 0 | 0 | 0 | 0 | 防塵(IP○X) |
デザイン | 6 | 7 | 4 | 8 | 7 | 6 | 7 | 7 | 7 | 8 | 9 | 6 | 6 | デザイン |
ランキング | 圏外 | 圏外 | 圏外 | 圏外 | 3 | 2 | 圏外 | 圏外 | 圏外 | 圏外 | 1 | 圏外 | 圏外 | ランキング |
Pythonコードはこちら
import pandas as pd import matplotlib.cm as cm import plotly import plotly.express as px import plotly.io as pio # ファイル保存用の接頭辞 prefix = 'tws-compare' # 記事リンクボタンのベースURLとaタグ設定 base_url = 'https://megatenpa.com/gadget/tws/' target = " target='_blank'" rel = " rel='noopener noreferrer'" print('------------------------------------------------------------') 'Jabra [Elite 75t]' 'Galaxy [Galaxy Buds Pro]' 'AVIOT [TE-D01t]' 'Nothing [Ear(1)]' 'SONY [WF-1000XM4]' 'Jabra [Elite 85t]' 'Jabra [Elite 7 Active]' 'XROUND [FORGE NC]' 'Anker [Soundcore Liberty 3 Pro]' 'Noble Audio [FALCON ANC]' 'Sennheiser [MTW 3]' 'SOUNDPEATS [Mini Pro]' 'SOUNDPEATS [Capsule3 Pro]' data = { 'Jabra [Elite 75t]': { '本体再生時間(ANCあり)': 5.5, '本体再生時間(ANCなし)': 7.5, 'ノイキャン低音': 6, 'ノイキャン高音': 4, '外音取り込み': 9, 'ドライバーサイズ': 6, '音質低音': 8, '音質高音': 5, '操作性': 8, 'アプリの使いやすさ': 8, '付加機能': 5, '防水(IPX○)': 5, '防塵(IP○X)': 5, 'デザイン': 6, 'ランキング': '圏外', 'パーマリンク': 'jabra-elite75t' }, 'Galaxy [Galaxy Buds Pro]': { '本体再生時間(ANCあり)': 5, '本体再生時間(ANCなし)': 8, 'ノイキャン低音': 7, 'ノイキャン高音': 5, '外音取り込み': 5, 'ドライバーサイズ': 11, '音質低音': 7, '音質高音': 7, '操作性': 5, 'アプリの使いやすさ': 5, '付加機能': 5, '防水(IPX○)': 7, '防塵(IP○X)': 0, 'デザイン': 7, 'ランキング': '圏外', 'パーマリンク': 'galaxy-budspro' }, 'AVIOT [TE-D01t]': { '本体再生時間(ANCあり)': 12.6, '本体再生時間(ANCなし)': 18, 'ノイキャン低音': 5, 'ノイキャン高音': 4, '外音取り込み': 4, 'ドライバーサイズ': 10, '音質低音': 6, '音質高音': 5, '操作性': 7, 'アプリの使いやすさ': 4, '付加機能': 5, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 4, 'ランキング': '圏外', 'パーマリンク': 'te-d01t' }, 'Nothing [Ear(1)]': { '本体再生時間(ANCあり)': 4, '本体再生時間(ANCなし)': 5.7, 'ノイキャン低音': 4, 'ノイキャン高音': 4, '外音取り込み': 4, 'ドライバーサイズ': 11.6, '音質低音': 6, '音質高音': 4, '操作性': 3, 'アプリの使いやすさ': 3, '付加機能': 4, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 8, 'ランキング': '圏外', 'パーマリンク': 'nothing-ear1' }, 'SONY [WF-1000XM4]': { '本体再生時間(ANCあり)': 8, '本体再生時間(ANCなし)': 12, 'ノイキャン低音': 10, 'ノイキャン高音': 8, '外音取り込み': 7, 'ドライバーサイズ': 6, '音質低音': 7, '音質高音': 7, '操作性': 2, 'アプリの使いやすさ': 6, '付加機能': 8, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 7, 'ランキング': 3, 'パーマリンク': 'sony-wf1000xm4' }, 'Jabra [Elite 85t]': { '本体再生時間(ANCあり)': 5.5, '本体再生時間(ANCなし)': 7, 'ノイキャン低音': 9, 'ノイキャン高音': 6, '外音取り込み': 8, 'ドライバーサイズ': 12, '音質低音': 7, '音質高音': 7, '操作性': 8, 'アプリの使いやすさ': 8, '付加機能': 6, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 6, 'ランキング': 2, 'パーマリンク': 'jabra-elite85t' }, 'Jabra [Elite 7 Active]': { '本体再生時間(ANCあり)': 8, '本体再生時間(ANCなし)': 10, 'ノイキャン低音': 8, 'ノイキャン高音': 7, '外音取り込み': 8, 'ドライバーサイズ': 6, '音質低音': 7, '音質高音': 6, '操作性': 7, 'アプリの使いやすさ': 7, '付加機能': 5, '防水(IPX○)': 5, '防塵(IP○X)': 7, 'デザイン': 7, 'ランキング': '圏外', 'パーマリンク': 'jabra-elite-7active' }, 'XROUND [FORGE NC]': { '本体再生時間(ANCあり)': 9, '本体再生時間(ANCなし)': 11.7, 'ノイキャン低音': 6, 'ノイキャン高音': 4, '外音取り込み': 5, 'ドライバーサイズ': 7, '音質低音': 6, '音質高音': 6, '操作性': 6, 'アプリの使いやすさ': 6, '付加機能': 8, '防水(IPX○)': 7, '防塵(IP○X)': 6, 'デザイン': 7, 'ランキング': '圏外', 'パーマリンク': 'xround-forge-nc' }, 'Anker [Soundcore Liberty 3 Pro]': { '本体再生時間(ANCあり)': 6, '本体再生時間(ANCなし)': 8, 'ノイキャン低音': 9, 'ノイキャン高音': 6, '外音取り込み': 7, 'ドライバーサイズ': 10.6, '音質低音': 7, '音質高音': 4, '操作性': 8, 'アプリの使いやすさ': 8, '付加機能': 6, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 7, 'ランキング': '圏外', 'パーマリンク': 'anker-soundcore-liberty3pro' }, 'Noble Audio [FALCON ANC]': { '本体再生時間(ANCあり)': 6, '本体再生時間(ANCなし)': 8.5, 'ノイキャン低音': 6, 'ノイキャン高音': 4, '外音取り込み': 5, 'ドライバーサイズ': 10, '音質低音': 8, '音質高音': 8, '操作性': 5, 'アプリの使いやすさ': 6, '付加機能': 5, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 8, 'ランキング': '圏外', 'パーマリンク': 'nobleaudio-falconanc' }, 'Sennheiser [MTW 3]': { '本体再生時間(ANCあり)': 5, '本体再生時間(ANCなし)': 7, 'ノイキャン低音': 6, 'ノイキャン高音': 5, '外音取り込み': 7, 'ドライバーサイズ': 7, '音質低音': 7, '音質高音': 8, '操作性': 9, 'アプリの使いやすさ': 8, '付加機能': 8, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 9, 'ランキング': 1, 'パーマリンク': 'sennheiser-momentumtruewireless3' }, 'SOUNDPEATS [Mini Pro]': { '本体再生時間(ANCあり)': 5, '本体再生時間(ANCなし)': 7, 'ノイキャン低音': 6, 'ノイキャン高音': 4, '外音取り込み': 5, 'ドライバーサイズ': 10, '音質低音': 7, '音質高音': 5, '操作性': 5, 'アプリの使いやすさ': 6, '付加機能': 4, '防水(IPX○)': 5, '防塵(IP○X)': 0, 'デザイン': 6, 'ランキング': '圏外', 'パーマリンク': 'soundpeats-minipro' }, 'SOUNDPEATS [Capsule3 Pro]': { '本体再生時間(ANCあり)': 5.5, '本体再生時間(ANCなし)': 8, 'ノイキャン低音': 7, 'ノイキャン高音': 4, '外音取り込み': 5, 'ドライバーサイズ': 12, '音質低音': 6, '音質高音': 7, '操作性': 5, 'アプリの使いやすさ': 5, '付加機能': 4, '防水(IPX○)': 4, '防塵(IP○X)': 0, 'デザイン': 6, 'ランキング': '圏外', 'パーマリンク': 'soundpeats-capsule3-pro' }, } print('------------------------------------------------------------') # 評価をデータフレームに落とし込む df = pd.DataFrame() visibles = [] links = [] for name in data: for item, val in data[name].items(): if item == 'ランキング': if type(data[name]['ランキング']) is int: visible = True # ランキングが数値の時は初期表示 else: visible = 'legendonly' # ランキングが数値じゃない時は初期非表示 visibles.append(visible) elif item == 'パーマリンク': url = f"{base_url}{data[name]['パーマリンク']}" link = f"
" links.append(link) # 記事のリンクに飛ぶaタグ pass else: dct = {'項目': item, '点数': val, 'TWS': name} df = df.append(dct, ignore_index=True) print(df) # 項目 点数 TWS # 0 本体再生時間(ANCあり) 5.5 Jabra [Elite 75t] # 1 本体再生時間(ANCなし) 7.5 Jabra [Elite 75t] # 2 ノイキャン低音 6.0 Jabra [Elite 75t] # 3 ノイキャン高音 4.0 Jabra [Elite 75t] # 4 外音取り込み 9.0 Jabra [Elite 75t] # .. ... ... ... # 163 アプリの使いやすさ 6.0 SOUNDPEATS [Mini Pro] # 164 付加機能 4.0 SOUNDPEATS [Mini Pro] # 165 防水(IPX○) 5.0 SOUNDPEATS [Mini Pro] # 166 防塵(IP○X) 0.0 SOUNDPEATS [Mini Pro] # 167 デザイン 6.0 SOUNDPEATS [Mini Pro] # [168 rows x 3 columns] # 各TWSの初期表示・非表示を抽出 print(visibles) # ['legendonly', 'legendonly', 'legendonly', 'legendonly', True, True, 'legendonly', 'legendonly', 'legendonly', 'legendonly', True, 'legendonly'] print('------------------------------------------------------------') # ボタン作成 def set_menus(): # ボタンの内容を作成 menu = dict( label='line or fill', method='update', args=[dict(fill='toself'), dict()], # 塗りつぶしを追加 args2=[dict(fill=None), dict()], # 線だけ ) menus = [menu] return menus # 各イヤホンのレビュー記事URL用のボタン作成 def set_link_menus(): # 初期値はリンクはここの文言 menus = [dict( label='記事のリンク↓', method='update', args=[dict()], args2=[dict()], )] for link in links: menu = dict( label=link, method='update', args=[], args2=[], ) menus.append(menu) return menus # 色付け用の関数 def set_color(data, alpha=1): rgbas = [] for num, _ in enumerate(data): cmap = cm.jet(num / len(data)) color = plotly.colors.convert_to_RGB_255(cmap) + (alpha,) rgba = f"rgba{color}" rgbas.append(rgba) return rgbas # グラフ保存用の関数 def save(fig, config, save_name): pio.orca.config.executable = '/Applications/orca.app/Contents/MacOS/orca' pio.write_html(fig, f"{save_name}.html", config=config,) pio.write_image(fig, f"{save_name}.png") print('------------------------------------------------------------') # レーダーチャート updatemenus = [ dict( active=0, buttons=set_menus(), type='buttons', direction='right', x=0.3, y=1.01, xanchor='center', yanchor='bottom', font_color='black' ), dict( active=0, buttons=set_link_menus(), type='dropdown', direction='down', x=0.7, y=1.01, xanchor='center', yanchor='bottom', font_color='black' ) ] fig = px.line_polar( df, r='点数', theta='項目', line_close=True, color='TWS', hover_data=df, color_discrete_sequence=set_color(data=data), ) fig.update_traces(fill='toself') # 初期表示は塗りつぶし # 各点のホバーと塗りつぶし部分の許可 fig.for_each_trace(lambda t: t.update(hoveron='points+fills')) # グラフに初期表示・非表示を設定 for num, visible in enumerate(visibles): fig['data'][num]['visible'] = visible # レイアウトの設定 fig.update_layout( template='plotly_white', updatemenus=updatemenus, # 塗りつぶしか線かのボタン height=1000, # グラフの高さ # 凡例はグラフの下に配置 legend=dict(x=0, y=-0.1, xanchor='left', yanchor='top', orientation='h'), # polar=dict(radialaxis=dict(range=(0, 10),)) # レーダーチャートの表示範囲 # グラフ全体とホバーのフォントサイズ変更 font_size=20, hoverlabel_font_size=20 ) # グラフの表示と非表示 fig.show() save(fig=fig, config=None, save_name=f"{prefix}_line_polar") print('------------------------------------------------------------') # 棒グラフ fig = px.bar( df, y='項目', x='点数', barmode='group', color='TWS', hover_data=df, color_discrete_sequence=set_color(data=data, alpha=0.8), range_x=(0, 12), orientation='h' ) fig.update_layout( template='plotly_white', updatemenus=[updatemenus[1]], height=1000, legend=dict(x=0, y=-0.1, xanchor='left', yanchor='top', orientation='h'), # グラフ全体とホバーのフォントサイズ変更 font_size=20, hoverlabel_font_size=20, ) # グラフに初期表示・非表示を設定 for num, visible in enumerate(visibles): fig['data'][num]['visible'] = visible fig.show() save(fig=fig, config=None, save_name=f"{prefix}_bar")