


Gunakan panda untuk mengesan gerakan terbalik dengan tepat dalam data koordinat cincin 360 darjah
Pengenalan: Cabaran dalam data koordinat cincin
Apabila memproses jenis data tertentu, seperti kedudukan badan langit pada gerhana, bacaan sensor sudut atau fasa isyarat berkala, kita sering menghadapi sistem koordinat cincin 360 darjah. Ciri -ciri koordinat jenis ini ialah apabila nilai mencapai 360 darjah, ia akan "kembali" hingga 0 darjah, atau apabila ia berkurangan dari 0 darjah kepada nilai negatif, ia akan "kembali" hingga 359 darjah (iaitu, Modulo 360 operasi).
Mengambil contoh tingkah laku songsang planet, koordinat ekliptik planet terus berubah dalam 360 darjah. Apabila planet berubah dari langsung ke retrograde, koordinatnya akan mencapai maksimum tempatan dan kemudian mula berkurangan; Apabila planet berubah dari langsung ke mengarahkan, koordinatnya akan mencapai minimum tempatan dan kemudian mula meningkat. Dalam sistem koordinat linear konvensional, kita dapat mengenal pasti gerakan terbalik ini dengan mengesan titik ekstrem tempatan (seperti menggunakan scipy.signal.argrelextrema).
Walau bagaimanapun, sistem koordinat cincin 360 darjah memberikan cabaran khas: ini secara fizikal adalah gerakan ke hadapan yang berterusan apabila koordinat planet terus meningkat dari sekitar 350 darjah, merangkumi 360 darjah (iaitu memasuki kawasan 0 darjah), dan kemudian terus meningkat. Tetapi dari perspektif berangka, contohnya, dari 358 darjah hingga 0 darjah, akan ada kejatuhan tajam. Sekiranya algoritma pengesanan nilai ekstrem tradisional digunakan secara langsung, fenomena ini yang melintasi sempadan dengan mudah boleh disalahgunakan sebagai titik permulaan gerakan terbalik, menghasilkan hasil "positif positif".
Pertimbangkan data "contoh kemalangan" berikut, yang menunjukkan proses merangkumi koordinat dari 358 darjah hingga 0 darjah:
Koordinat Tarikh 17.03.2010 358.41273 # Ini bukan permulaan gerakan terbalik 18.03.2010 0.39843 # ia hanya melintasi sempadan 19.03.2010 2.39354
Dalam contoh ini, planet ini sebenarnya bergerak ke hadapan secara berterusan, tetapi disebabkan oleh sifat koordinat yang mengorbit, pemerhatian langsung nilai berangka akan mendedahkan "penurunan" dari 358 hingga 0, yang mungkin disalah anggap maksimum tempatan. Kami memerlukan cara untuk membezakan rentang sempadan ini dari gerakan terbalik yang benar.
Kaedah Teras: Pengiktirafan Pergerakan Berbalik Berasaskan Pandas
Untuk menyelesaikan masalah salah dalam data koordinat cincin 360 darjah, kita boleh menggunakan keupayaan pemprosesan data yang kuat untuk menggabungkan strategi utama: dengan menetapkan ambang perbezaan mutlak untuk menyaring perubahan "palsu" yang disebabkan oleh rentang sempadan 360 darjah. Penghakiman nilai yang melampau hanya dipertimbangkan apabila jumlah perubahan antara titik berterusan berada dalam julat kecil yang munasabah.
Langkah -langkah tertentu adalah seperti berikut:
- Penyediaan Data : Mengatur tarikh dan menyelaraskan data ke dalam data Pandas DataFrame.
- Kirakan perbezaan dan tetapkan ambang :
- Gunakan kaedah diff () untuk mengira perbezaan antara koordinat bersebelahan.
- Ambil nilai mutlak perbezaan abs ().
- Tetapkan ambang (contohnya, 1 darjah) untuk menapis titik data yang perbezaan mutlaknya kurang daripada atau sama dengan ambang itu. Langkah ini adalah teras, yang dapat mengenal pasti mata-mata yang kelihatannya menjadi lompatan berangka besar disebabkan oleh persekitaran 360 darjah, tetapi mempunyai perubahan fizikal yang sangat kecil, dan tidak termasuk mereka dari nilai-nilai yang melampau.
- Mengesan maksimum tempatan (puncak atas) :
- Tentukan sama ada koordinat semasa lebih besar daripada koordinat sebelumnya (c.gt (c.shift ())).
- Tentukan sama ada koordinat semasa lebih besar daripada koordinat seterusnya (c.gt (c.shift (-1))).
- Kedua -dua syarat ini berpuas hati pada masa yang sama, menunjukkan bahawa titik semasa adalah maksimum tempatan.
- Mengesan nilai minimum tempatan (puncak yang lebih rendah) :
- Tentukan sama ada koordinat semasa lebih kecil daripada koordinat sebelumnya (c.lt (c.shift ())).
- Tentukan sama ada koordinat semasa lebih kecil daripada koordinat seterusnya (c.lt (c.shift (-1))).
- Kedua -dua syarat ini berpuas hati pada masa yang sama, menunjukkan bahawa titik semasa adalah minimum tempatan.
- Digabungkan dengan syarat-syarat : Keadaan penghakiman yang disebutkan di atas nilai maksimum tempatan dan nilai minimum tempatan secara logik dan dikendalikan dengan syarat ambang perbezaan yang dikira pada langkah 2. Akhirnya, ia ditandakan sebagai titik gerakan terbalik hanya apabila jumlah perubahan berada dalam ambang dan keadaan nilai ekstrem tempatan dipenuhi.
Pelaksanaan kod
Berikut adalah kod sampel untuk melaksanakan logik di atas menggunakan panda:
Import Pandas sebagai PD Import io # Simulasi data data = "" " Tarikh, koordinasi 13.03.2010,350.60172 14.03.2010,352.53184 15.03.2010,354.47785 16.03.2010,356.43861 17.03.2010,358.41273 18.03.2010, 0.39843 19.03.2010,2.39354 20.03.2010,4.39545 21.03.2010,6.40106 22.03.2010,8.40673 23.03.2010,10.40828 24.03.2010,12.40098 25.03.2010, 14.37956 26.03.2010, 16.33824 13.08.2010,166.41245 14.08.2010,167.00584 15.08.2010,167.53165 16.08.2010,167.98625 17.08.2010,168.36589 18.08.2010,168.66672 19.08.2010,168.88494 20.08.2010,169.01682 21.08.2010,169.05885 22.08.2010,169.00792 23.08.2010,168.86147 24.08.2010,168.61771 25.08.2010,168.27591 26.08.2010,167.83665 "" " df = pd.read_csv (io.stringio (data), parse_dates = ['date']) # Ekstrak Koordinat Kolum C = df ['Coords'] # Langkah 1: Kirakan perbezaan mutlak koordinat bersebelahan dan tetapkan ambang. # Di sini ambang ditetapkan kepada 1, yang bermaksud bahawa jika perbezaan mutlak dalam koordinat dua titik bersebelahan lebih besar dari 1, # Kemudian dipercayai bahawa ini mungkin rentang sempadan dan tidak boleh dianggap sebagai titik gerakan terbalik yang melampau. # Untuk gerakan planet harian, biasanya tidak ada perubahan terbalik sebenar lebih dari 1 darjah dalam sehari. m0 = c.diff (). abs (). le (1) # Langkah 2: Mengesan maksimum tempatan (puncak atas), iaitu, titik semasa lebih besar daripada dua mata sebelum dan selepas # pada masa yang sama, menggabungkan keadaan M0 untuk memastikan bahawa nilai maksimum palsu M1 tidak disebabkan oleh sempadan yang merangkumi M1 = (C.GT (C.Shift (-1)) # Langkah 3: Mengesan nilai minimum tempatan (puncak bawah), iaitu, titik semasa lebih kecil daripada dua mata sebelum dan selepas# juga bergabung dengan keadaan M0 untuk memastikan nilai minimum palsu tidak disebabkan oleh sempadan yang merangkumi m2 = (c.shift (-1)) # Langkah 4: Gabungkan keadaan minimum maksimum dan tempatan tempatan untuk mendapatkan bendera gerakan terbalik akhir df ['pembalikan'] = m1 | m2 Cetak (DF)
Analisis sampel dan pengesahan hasil
Jalankan kod di atas dan kami akan mendapat DataFrame yang mengandungi lajur pembalikan. Lajur ini menunjukkan sama ada setiap titik masa adalah titik permulaan gerakan terbalik dengan nilai boolean (benar/palsu).
Tarikh koordinasi pembalikan 0 2010-03-13 350.60172 Palsu 1 2010-03-14 352.53184 Palsu 2 2010-03-15 354.47785 Palsu 3 2010-03-16 356.43861 Palsu 4 2010-03-17 358.41273 Palsu 5 2010-03-18 0.39843 FALSE # Berjaya diabaikan Sempadan Span 6 2010-03-19 2.39354 Palsu 7 2010-03-20 4.39545 Palsu 8 2010-03-21 6.40106 Palsu 9 2010-03-22 8.40673 Palsu 10 2010-03-23 10.40828 Palsu 11 2010-03-24 12.40098 Palsu 12 2010-03-25 14.37956 Palsu 13 2010-03-26 16.33824 Palsu 14 2010-08-13 166.41245 Palsu 15 2010-08-14 167.00584 Palsu 16 2010-08-15 167.53165 Palsu 17 2010-08-16 167.98625 Palsu 18 2010-08-17 168.36589 Palsu 19 2010-08-18 168.66672 Palsu 20 2010-08-19 168.88494 Palsu 21 2010-08-20 169.01682 Palsu 22 2010-08-21 169.05885 benar # berjaya mengenal pasti titik permulaan sebenar gerakan terbalik 23 2010-08-22 169.00792 False 24 2010-08-23 168.86147 Palsu 25 2010-08-24 168.61771 Palsu 26 2010-08-25 168.27591 Palsu 27 2010-08-26 167.83665 Palsu
Dari hasil output, kita dapat melihat:
- Dalam bahagian "Contoh Crash" (Indeks 0-13), tiada satu pun dari titik -titik ini ditandakan benar walaupun koordinat melompat dari 358.41273 hingga 0.39843 kerana perbezaan mutlaknya jauh lebih besar daripada 1 (358.41273 - 0.39843 adalah kira -kira sama dengan 358), dan keadaan M0 tidak dipenuhi. Ini berjaya menghindari kesalahan yang disebabkan oleh persimpangan sempadan.
- Dalam bahagian contoh biasa (Indeks 14-27), koordinat mencapai maksimum tempatan 169.05885 pada 2010-08-21, dan kemudian mula menurun. Oleh kerana perbezaannya yang bersebelahan (mis. 169.05885 - 169.01682 = 0.04203 dan 169.05885 - 169.00792 = 0.05093) kedua -duanya kurang daripada 1 dan memenuhi keadaan maksimum tempatan, titik ini ditandakan dengan betul sebagai benar.
Nota dan amalan terbaik
- Kepentingan pemilihan ambang :
- Ambang = 1 dalam kod adalah parameter utama yang menentukan bagaimana kita membezakan antara perubahan kecil "biasa" dari "pengecualian" sempadan.
- Ambang ini harus ditentukan berdasarkan ciri -ciri sebenar data, kekerapan pensampelan dan kadar perubahan normal maksimum yang dijangkakan. Sebagai contoh, untuk koordinat planet harian, biasanya tidak ada perubahan terbalik sebenar lebih daripada 1 darjah dalam sehari, jadi 1 darjah adalah nilai permulaan yang munasabah. Ambang ini mungkin perlu diselaraskan jika data dicontohi lebih intensif atau pergerakan lebih cepat.
- Memilih ambang yang terlalu kecil mungkin terlepas titik terbalik yang nyata tetapi sedikit lebih besar; Memilih ambang yang terlalu besar mungkin tidak menapis secara tidak sengaja yang disebabkan oleh rentang sempadan.
- Kesinambungan Data dan Susun :
- Pastikan data input disusun dengan betul dalam susunan kronologi dan bahawa selang masa agak seragam. Kesahan peralihan () dan diff () operasi bergantung kepada struktur data ini.
- Sekiranya terdapat nilai yang hilang atau selang masa yang tidak teratur dalam data, interpolasi atau resampling mungkin diperlukan.
- Generalisasi senario aplikasi :
- Kaedah ini tidak terhad kepada pengesanan retrograde planet, tetapi juga terpakai kepada sebarang senario lain di mana perubahan trend sebenar dalam data 360 darjah anular (atau mana-mana berkala) dikesan, seperti:
- Arah angin berubah dalam data arah angin.
- Perubahan dalam arah putaran dalam data sensor sudut motor.
- Titik nilai yang melampau untuk pengesanan fasa dalam sistem komunikasi.
- Kaedah ini tidak terhad kepada pengesanan retrograde planet, tetapi juga terpakai kepada sebarang senario lain di mana perubahan trend sebenar dalam data 360 darjah anular (atau mana-mana berkala) dikesan, seperti:
- Batasan :
- Untuk perubahan kadar yang sangat tinggi atau kekasaran data, hanya bergantung pada diff () dan ambang tetap mungkin tidak cukup kuat. Dalam kes ini, kaedah statistik pekeliling yang lebih kompleks mungkin perlu dipertimbangkan, atau data sudut ditukar menjadi koordinat Cartesian (mis. (Cos (sudut), sin (sudut))) sebelum analisis.
Meringkaskan
Dengan menggabungkan fungsi Pandas (), peralihan () dan penghakiman logik yang direka dengan teliti, kita dapat dengan cekap dan tepat mengesan gerakan terbalik dalam data koordinat anulus 360 darjah. Kuncinya adalah untuk memperkenalkan ambang perbezaan mutlak, yang secara berkesan membezakan lompatan berangka yang disebabkan oleh pengepungan koordinat dari perubahan trend pergerakan sebenar. Kaedah ini boleh digunakan untuk memproses data siri masa dengan ciri -ciri sempadan berkala seperti planet retrograde, dll.
Atas ialah kandungan terperinci Gunakan panda untuk mengesan gerakan terbalik dengan tepat dalam data koordinat cincin 360 darjah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jalankan pipinstall-rrequirements.txt untuk memasang pakej ketergantungan. Adalah disyorkan untuk mencipta dan mengaktifkan persekitaran maya terlebih dahulu untuk mengelakkan konflik, memastikan bahawa laluan fail adalah betul dan PIP telah dikemas kini, dan menggunakan pilihan seperti-tidak-deps atau-pengguna untuk menyesuaikan tingkah laku pemasangan jika perlu.

Tutorial ini memperincikan bagaimana untuk menggabungkan penyesuai LORA PEFT dengan model asas untuk menghasilkan model yang sepenuhnya bebas. Artikel ini menunjukkan bahawa adalah salah untuk menggunakan transformer.automodel secara langsung untuk memuatkan penyesuai dan menggabungkan berat secara manual, dan menyediakan proses yang betul untuk menggunakan kaedah Merge_and_unload di perpustakaan PEFT. Di samping itu, tutorial juga menekankan pentingnya menangani segmen perkataan dan membincangkan isu dan penyelesaian keserasian versi PEFT.

Python adalah alat ujian yang mudah dan berkuasa di Python. Selepas pemasangan, fail ujian ditemui secara automatik mengikut peraturan penamaan. Tulis fungsi bermula dengan ujian untuk ujian pernyataan, gunakan @pytest.fixture untuk membuat data ujian yang boleh diguna semula, mengesahkan pengecualian melalui pytest.raises, menyokong menjalankan ujian tertentu dan pelbagai pilihan baris arahan, dan meningkatkan kecekapan ujian.

TheargParsemoduleisThereMendingWayOhandLecommand-lineargumentsinpython, menyediakan robrobustparsing, typevalidation, helpmessages, anderrorhandling; usesy.argvforsimplecasesrequiringminiminalsetup.

Artikel ini bertujuan untuk meneroka masalah biasa ketepatan pengiraan yang tidak mencukupi bagi nombor titik terapung di Python dan Numpy, dan menjelaskan bahawa punca akarnya terletak pada batasan perwakilan nombor terapung 64-bit standard. Untuk senario pengkomputeran yang memerlukan ketepatan yang lebih tinggi, artikel itu akan memperkenalkan dan membandingkan kaedah penggunaan, ciri-ciri dan senario yang berkenaan dengan perpustakaan matematik ketepatan tinggi seperti MPMATH, SYMPY dan GMPY untuk membantu pembaca memilih alat yang tepat untuk menyelesaikan keperluan ketepatan yang rumit.

Mendapatkan masa semasa boleh dilaksanakan di Python melalui modul DateTime. 1. Gunakan datetime.now () untuk mendapatkan masa semasa tempatan, 2. Gunakan strftime ("%y-%m-%d%h:%m:%s") untuk memformat tahun, bulan, hari, jam, minit dan kedua, 3 menggunakan datetime.d. UTCNOW (), dan operasi harian dapat memenuhi keperluan dengan menggabungkan datetime.now () dengan rentetan yang diformat.

PYPDF2, PDFPlumber dan FPDF adalah perpustakaan teras untuk Python untuk memproses PDF. Gunakan pypdf2 untuk melakukan pengekstrakan teks, penggabungan, pemisahan dan penyulitan, seperti membaca halaman melalui pdfreader dan memanggil extract_text () untuk mendapatkan kandungan; PDFplumber lebih sesuai untuk mengekalkan pengekstrakan teks susun atur dan pengiktirafan jadual, dan menyokong extract_tables () untuk menangkap data jadual dengan tepat; FPDF (disyorkan FPDF2) digunakan untuk menjana PDF, dan dokumen dibina dan dikeluarkan melalui add_page (), set_font () dan sel (). Apabila menggabungkan PDF, kaedah tambahan PDFWriter () dapat mengintegrasikan pelbagai fail

Import@contextManagerFromContextLibandDefineageneratorfunctionThatTyieldSexactlyonce, whereCodeBeforeyieldActSasenterandCodeAfteryield (PreferitlySinfinal) actsas __
