[M] Move non-course-related files to misc

This commit is contained in:
Hykilpikonna
2021-12-22 01:03:28 -05:00
parent 12b83a05dd
commit f1e4cd9488
24 changed files with 1 additions and 1 deletions
+263
View File
@@ -0,0 +1,263 @@
# Group 1 (Cluster A)
`JLP315H1` - [3.0L] [Language Acquisition](https://artsci.calendar.utoronto.ca/course/JLP315H1)
### PSY 100
`PSY194H1` - [2.0S] [The Psychology of Student Success](https://artsci.calendar.utoronto.ca/course/PSY194H1)
`PSY195H1` - [2.0S] [The Science of Babies](https://artsci.calendar.utoronto.ca/course/PSY195H1)
`PSY197H1` - [2.0S] [The Individual and Society](https://artsci.calendar.utoronto.ca/course/PSY197H1)
### PSY 200
`PSY210H1` - [3.0L] [Introduction to Developmental Psychology](https://artsci.calendar.utoronto.ca/course/PSY210H1)
`PSY220H1` - [3.0L] [Introduction to Social Psychology](https://artsci.calendar.utoronto.ca/course/PSY220H1)
`PSY230H1` - [3.0L] [Personality and Its Transformations](https://artsci.calendar.utoronto.ca/course/PSY230H1)
`PSY240H1` - [3.0L] [Introduction to Abnormal Psychology](https://artsci.calendar.utoronto.ca/course/PSY240H1)
### PSY 300
`PSY311H1` - [3.0L] [Social Development](https://artsci.calendar.utoronto.ca/course/PSY311H1)
`PSY312H1` - [3.0L] [Cognitive Development](https://artsci.calendar.utoronto.ca/course/PSY312H1)
`PSY313H1` - [3.0L] [Psychology of Aging](https://artsci.calendar.utoronto.ca/course/PSY313H1)
`PSY316H1` - [3.0L] [Perceptual Development](https://artsci.calendar.utoronto.ca/course/PSY316H1)
`PSY319H1` - [3.0P] [Developmental Laboratory](https://artsci.calendar.utoronto.ca/course/PSY319H1)
`PSY320H1` - [3.0L] [Social Psychology: Attitudes](https://artsci.calendar.utoronto.ca/course/PSY320H1)
`PSY321H1` - [3.0L] [Cross-Cultural Psychology](https://artsci.calendar.utoronto.ca/course/PSY321H1)
`PSY322H1` - [3.0L] [Intergroup Relations](https://artsci.calendar.utoronto.ca/course/PSY322H1)
`PSY323H1` - [3.0L] [Sex Roles and Behaviour](https://artsci.calendar.utoronto.ca/course/PSY323H1)
`PSY324H1` - [3.0L] [Moral Thought and Behaviour](https://artsci.calendar.utoronto.ca/course/PSY324H1)
`PSY326H1` - [3.0L] [Social Cognition](https://artsci.calendar.utoronto.ca/course/PSY326H1)
`PSY328H1` - [3.0L] [Psychology and the Law](https://artsci.calendar.utoronto.ca/course/PSY328H1)
`PSY329H1` - [3.0P] [Social Psychology Laboratory](https://artsci.calendar.utoronto.ca/course/PSY329H1)
`PSY330H1` - [3.0L] [Psychological Measurement](https://artsci.calendar.utoronto.ca/course/PSY330H1)
`PSY331H1` - [3.0L] [Social Psychology of Emotion](https://artsci.calendar.utoronto.ca/course/PSY331H1)
`PSY332H1` - [3.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/PSY332H1)
`PSY333H1` - [3.0L] [Health Psychology](https://artsci.calendar.utoronto.ca/course/PSY333H1)
`PSY336H1` - [3.0L] [Positive Psychology](https://artsci.calendar.utoronto.ca/course/PSY336H1)
`PSY337H1` - [3.0L] [Advanced Personality Psychology](https://artsci.calendar.utoronto.ca/course/PSY337H1)
`PSY339H1` - [3.0P] [Individual Differences Laboratory](https://artsci.calendar.utoronto.ca/course/PSY339H1)
`PSY341H1` - [3.0L] [Psychopathologies of Childhood](https://artsci.calendar.utoronto.ca/course/PSY341H1)
`PSY342H1` - [3.0L] [Cognition and Psychopathology](https://artsci.calendar.utoronto.ca/course/PSY342H1)
`PSY343H1` - [3.0L] [Theories of Psychopathology and Psychotherapy](https://artsci.calendar.utoronto.ca/course/PSY343H1)
`PSY349H1` - [3.0P] [Laboratory in Social Psychological Field Methods](https://artsci.calendar.utoronto.ca/course/PSY349H1)
### PSY 400
`PSY410H1` - [2.0S] [Developmental Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY410H1)
`PSY414H1` - [3.0L] [Moral Development](https://artsci.calendar.utoronto.ca/course/PSY414H1)
`PSY417H1` - [3.0L] [Aging and Social Cognition](https://artsci.calendar.utoronto.ca/course/PSY417H1)
`PSY420H1` - [2.0S] [Social Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY420H1)
`PSY421H1` - [3.0L] [Person Perception](https://artsci.calendar.utoronto.ca/course/PSY421H1)
`PSY424H1` - [3.0L] [Social Psychology of Interpersonal Relationships](https://artsci.calendar.utoronto.ca/course/PSY424H1)
`PSY425H1` - [3.0L] [Self-Consciousness](https://artsci.calendar.utoronto.ca/course/PSY425H1)
`PSY426H1` - [3.0L] [Motivational Theories in Social Psychology](https://artsci.calendar.utoronto.ca/course/PSY426H1)
`PSY427H1` - [3.0L] [Media Psychology](https://artsci.calendar.utoronto.ca/course/PSY427H1)
`PSY428H1` - [3.0L] [Critical Psychology](https://artsci.calendar.utoronto.ca/course/PSY428H1)
`PSY430H1` - [2.0S] [Personality Seminar](https://artsci.calendar.utoronto.ca/course/PSY430H1)
`PSY434H1` - [3.0L] [Maps of Meaning: The Architecture of Belief](https://artsci.calendar.utoronto.ca/course/PSY434H1)
`PSY435H1` - [3.0L] [Environmental Psychology](https://artsci.calendar.utoronto.ca/course/PSY435H1)
`PSY440H1` - [2.0S] [Abnormal Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY440H1)
`PSY450H1` - [3.0L] [History of Psychology](https://artsci.calendar.utoronto.ca/course/PSY450H1)
# Group 1 (Cluster B)
`JLP374H1` - [3.0L] [Psychology of Language](https://artsci.calendar.utoronto.ca/course/JLP374H1)
`JLP471H1` - [2.0S] [Advanced Psycholinguistics](https://artsci.calendar.utoronto.ca/course/JLP471H1)
### PSY 100
`PSY196H1` - [2.0S] [Critical Periods, Brain Plasticity and Development](https://artsci.calendar.utoronto.ca/course/PSY196H1)
`PSY198H1` - [2.0S] [The Psychology of Magic](https://artsci.calendar.utoronto.ca/course/PSY198H1)
`PSY199H1` - [2.0S] [Psychology and History of Drug Use](https://artsci.calendar.utoronto.ca/course/PSY199H1)
### PSY 200
`PSY260H1` - [3.0L] [Introduction to Learning and Plasticity](https://artsci.calendar.utoronto.ca/course/PSY260H1)
`PSY270H1` - [3.0L] [Introduction to Cognitive Psychology](https://artsci.calendar.utoronto.ca/course/PSY270H1)
`PSY280H1` - [3.0L] [Introduction to Sensation and Perception](https://artsci.calendar.utoronto.ca/course/PSY280H1)
`PSY290H1` - [3.0L] [Behavioural Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY290H1)
### PSY 300
`PSY312H1` - [3.0L] [Cognitive Development](https://artsci.calendar.utoronto.ca/course/PSY312H1)
`PSY316H1` - [3.0L] [Perceptual Development](https://artsci.calendar.utoronto.ca/course/PSY316H1)
`PSY359H1` - [3.0P] [Human Neuroimaging Laboratory](https://artsci.calendar.utoronto.ca/course/PSY359H1)
`PSY360H1` - [3.0L] [Associative Learning](https://artsci.calendar.utoronto.ca/course/PSY360H1)
`PSY362H1` - [3.0L] [Animal Cognition](https://artsci.calendar.utoronto.ca/course/PSY362H1)
`PSY369H1` - [3.0P] [Psychobiology Laboratory](https://artsci.calendar.utoronto.ca/course/PSY369H1)
`PSY370H1` - [3.0L] [Thinking and Reasoning](https://artsci.calendar.utoronto.ca/course/PSY370H1)
`PSY371H1` - [3.0L] [Higher Cognitive Processes](https://artsci.calendar.utoronto.ca/course/PSY371H1)
`PSY372H1` - [3.0L] [Human Memory](https://artsci.calendar.utoronto.ca/course/PSY372H1)
`PSY378H1` - [3.0L] [Engineering Psychology](https://artsci.calendar.utoronto.ca/course/PSY378H1)
`PSY379H1` - [3.0P] [Human Memory and Learning Laboratory](https://artsci.calendar.utoronto.ca/course/PSY379H1)
`PSY380H1` - [3.0L] [Vision Science](https://artsci.calendar.utoronto.ca/course/PSY380H1)
`PSY389H1` - [3.0P] [Perception Laboratory](https://artsci.calendar.utoronto.ca/course/PSY389H1)
`PSY390H1` - [3.0L] [Behavioural Genetics](https://artsci.calendar.utoronto.ca/course/PSY390H1)
`PSY395H1` - [3.0L] [Neuroethics](https://artsci.calendar.utoronto.ca/course/PSY395H1)
`PSY396H1` - [3.0L] [Neurochemical Basis of Behaviour](https://artsci.calendar.utoronto.ca/course/PSY396H1)
`PSY397H1` - [3.0L] [Biological Rhythms](https://artsci.calendar.utoronto.ca/course/PSY397H1)
### PSY 400
`PSY450H1` - [3.0L] [History of Psychology](https://artsci.calendar.utoronto.ca/course/PSY450H1)
`PSY460H1` - [2.0S] [Seminar in Learning](https://artsci.calendar.utoronto.ca/course/PSY460H1)
`PSY470H1` - [2.0S] [Seminar in Human Memory](https://artsci.calendar.utoronto.ca/course/PSY470H1)
`PSY471H1` - [2.0S] [Seminar in Cognition](https://artsci.calendar.utoronto.ca/course/PSY471H1)
`PSY473H1` - [3.0L] [Social Cognitive Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY473H1)
`PSY475H1` - [3.0L] [Attention and Performance](https://artsci.calendar.utoronto.ca/course/PSY475H1)
`PSY480H1` - [2.0S] [Seminar in Perception](https://artsci.calendar.utoronto.ca/course/PSY480H1)
`PSY490H1` - [2.0S] [Seminar in Behavioural Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY490H1)
`PSY492H1` - [3.0L] [Neurobiology of Learning and Memory](https://artsci.calendar.utoronto.ca/course/PSY492H1)
`PSY493H1` - [3.0L] [Cognitive Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY493H1)
`PSY494H1` - [3.0L] [Physiology and Psychology of Emotion](https://artsci.calendar.utoronto.ca/course/PSY494H1)
`PSY495H1` - [3.0L] [Sex and the Brain](https://artsci.calendar.utoronto.ca/course/PSY495H1)
`PSY496H1` - [3.0L] [Cognitive Dysfunction in Neurological Disorders](https://artsci.calendar.utoronto.ca/course/PSY496H1)
`PSY497H1` - [2.0S] [Seminar in Biological Timing](https://artsci.calendar.utoronto.ca/course/PSY497H1)
# Group 1 (Cluster C)
### PSY 200
`PSY201H1` - [3.0L] [Statistics I](https://artsci.calendar.utoronto.ca/course/PSY201H1)
`PSY202H1` - [3.0L] [Statistics II](https://artsci.calendar.utoronto.ca/course/PSY202H1)
`PSY203H1` - [3.0P] [Psychological Research](https://artsci.calendar.utoronto.ca/course/PSY203H1)
`PSY204H1` - [3.0L] [Psychology Careers and Applications](https://artsci.calendar.utoronto.ca/course/PSY204H1)
`PSY299H1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY299H1)
`PSY299Y1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY299Y1)
### PSY 300
`PSY305H1` - [3.0L] [The Treatment of Psychological Data](https://artsci.calendar.utoronto.ca/course/PSY305H1)
`PSY306Y0` - [4.0L] [Special Topics in Psychology Abroad](https://artsci.calendar.utoronto.ca/course/PSY306Y0)
`PSY307H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY307H1)
`PSY308H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY308H1)
`PSY399H1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY399H1)
`PSY399Y1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY399Y1)
### PSY 400
`PSY402H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY402H1)
`PSY403H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY403H1)
`PSY404H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY404H1)
`PSY405H1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY405H1)
`PSY405Y1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY405Y1)
`PSY406H1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY406H1)
`PSY406Y1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY406Y1)
`PSY407H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY407H1)
`PSY408H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY408H1)
# Group 2
### Biology
`BIO120H1` - [2.0L/1.25P] [Adaptation and Biodiversity](https://artsci.calendar.utoronto.ca/course/BIO120H1)
`BIO130H1` - [3.0L/1.25P] [Molecular and Cell Biology](https://artsci.calendar.utoronto.ca/course/BIO130H1)
`BIO220H1` - [2.0L/1.25P] [From Genomes to Ecosystems in a Changing World](https://artsci.calendar.utoronto.ca/course/BIO220H1)
`BIO270H1` - [2.0L/0.75P] [Animal Physiology I](https://artsci.calendar.utoronto.ca/course/BIO270H1)
`BIO271H1` - [2.0L/0.75P] [Animal Physiology II](https://artsci.calendar.utoronto.ca/course/BIO271H1)
`EEB313H1` - [2.0L/2.0P] [Quantitative Methods in R for Biology](https://artsci.calendar.utoronto.ca/course/EEB313H1)
### Buddhism
`BPM232H1` - [3.0L] [Buddhist Psychology](https://artsci.calendar.utoronto.ca/course/BPM232H1)
`BPM332H1` - [3.0L] [Buddhism and Psychotherapy](https://artsci.calendar.utoronto.ca/course/BPM332H1)
`BPM333H1` - [3.0L] [Buddhism and Cognitive Science](https://artsci.calendar.utoronto.ca/course/BPM333H1)
`BPM335H1` - [3.0L] [Meditation and the Body](https://artsci.calendar.utoronto.ca/course/BPM335H1)
`BPM336H1` - [3.0L] [Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM336H1)
`BPM337H1` - [3.0L] [Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM337H1)
`BPM338H1` - [3.0L] [Exploring Mindful Awareness](https://artsci.calendar.utoronto.ca/course/BPM338H1)
`BPM339H1` - [3.0L] [Yogacara Buddhism and Western Psychology](https://artsci.calendar.utoronto.ca/course/BPM339H1)
`BPM432H1` - [3.0L] [Advanced Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM432H1)
`BPM433H1` - [3.0S] [Advanced Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM433H1)
`BPM438H1` - [3.0S] [Mindfulness Meditation: Science and Research](https://artsci.calendar.utoronto.ca/course/BPM438H1)
### Cognitive Science
`COG250Y1` - [6.5L] [Introduction to Cognitive Science](https://artsci.calendar.utoronto.ca/course/COG250Y1)
`COG260H1` - [2.0L/1.0P] [Data, Computation, and the Mind](https://artsci.calendar.utoronto.ca/course/COG260H1)
`COG341H1` - [3.0L] [Issues in Cognitive Science I: Attention, Perception, and Consciousness](https://artsci.calendar.utoronto.ca/course/COG341H1)
`COG342H1` - [3.0L] [Issues in Cognitive Science II: Concepts, Theories of Mind, and Cognitive Evolution](https://artsci.calendar.utoronto.ca/course/COG342H1)
`COG343H1` - [2.0L/1.0P] [Issues in Cognitive Science III: Computational Cognition](https://artsci.calendar.utoronto.ca/course/COG343H1)
### Criminology
`CRI365H1` - [3.0L] [Crime and Mind](https://artsci.calendar.utoronto.ca/course/CRI365H1)
`CRI431H1` - [2.0S] [Mental Health, Morality & Legal Controls ](https://artsci.calendar.utoronto.ca/course/CRI431H1)
### Economics
`ECO423H1` - [2.0L/1.0T] [Economics and Biosocial Data](https://artsci.calendar.utoronto.ca/course/ECO423H1)
`EDS261H1` - [3.0L] [Child and Adolescent Development in Education](https://artsci.calendar.utoronto.ca/course/EDS261H1)
### Neurobiology
`HMB200H1` - [2.0L/1.0T] [Introduction to Neuroscience](https://artsci.calendar.utoronto.ca/course/HMB200H1)
`HMB300H1` - [2.0L/1.0T] [Neurobiology of Behaviour](https://artsci.calendar.utoronto.ca/course/HMB300H1)
`HMB310H1` - [1.0L/3.0P] [Laboratory in Neuroscience](https://artsci.calendar.utoronto.ca/course/HMB310H1)
`HMB320H1` - [2.0L/0.3T/0.8P] [Neuroanatomy](https://artsci.calendar.utoronto.ca/course/HMB320H1)
`HMB420H1` - [1.0L/1.0S] [Seminar in Neurobiology of Behaviour](https://artsci.calendar.utoronto.ca/course/HMB420H1)
`HMB440H1` - [2.0L] [Dementia](https://artsci.calendar.utoronto.ca/course/HMB440H1)
`HMB460H1` - [1.0L/1.0S] [Seminars in Neurobiology of Mental Health](https://artsci.calendar.utoronto.ca/course/HMB460H1)
`HMB473H1` - [1.5L/0.8P/0.5S] [Exercise and Mental Health](https://artsci.calendar.utoronto.ca/course/HMB473H1)
### Linguistics
`JLS472H1` - [3.0L] [Child Language Disorders](https://artsci.calendar.utoronto.ca/course/JLS472H1)
`JLS473H1` - [3.0L] [Adult Speech and Language Disorders](https://artsci.calendar.utoronto.ca/course/JLS473H1)
`LIN101H1` - [2.0L/1.0T] [Introduction to Linguistics: Sound Structure](https://artsci.calendar.utoronto.ca/course/LIN101H1)
`LIN102H1` - [2.0L/1.0P] [Introduction to Linguistics: Sentence Structure and Meaning](https://artsci.calendar.utoronto.ca/course/LIN102H1)
`LIN200H1` - [2.0L/1.0T] [Introduction to Language](https://artsci.calendar.utoronto.ca/course/LIN200H1)
`LIN402H1` - [3.0L] [Linguistic Typology and Constructed Languages](https://artsci.calendar.utoronto.ca/course/LIN402H1)
### Philosophy
`PHL240H1` - [3.0L] [Persons, Minds and Bodies](https://artsci.calendar.utoronto.ca/course/PHL240H1)
`PHL243H1` - [3.0L] [Philosophy of Human Sexuality](https://artsci.calendar.utoronto.ca/course/PHL243H1)
`PHL244H1` - [3.0L] [Human Nature](https://artsci.calendar.utoronto.ca/course/PHL244H1)
`PHL319H1` - [3.0L] [Philosophy and Psychoanalytic Theory](https://artsci.calendar.utoronto.ca/course/PHL319H1)
`PHL340H1` - [3.0L] [Issues in Philosophy of Mind](https://artsci.calendar.utoronto.ca/course/PHL340H1)
`PHL342H1` - [3.0L] [Minds and Machines](https://artsci.calendar.utoronto.ca/course/PHL342H1)
`PHL383H1` - [3.0L] [Ethics and Mental Health](https://artsci.calendar.utoronto.ca/course/PHL383H1)
### Physiology
`PSL201Y1` - [3.7L/2.0P] [Basic Human Physiology](https://artsci.calendar.utoronto.ca/course/PSL201Y1)
`PSL300H1` - [3.0L/0.4T] [Human Physiology I](https://artsci.calendar.utoronto.ca/course/PSL300H1)
`PSL440Y1` - [8.0L] [Neuroscience: Systems and Behaviour](https://artsci.calendar.utoronto.ca/course/PSL440Y1)
### Religion
`RLG106H1` - [2.0L] [Happiness](https://artsci.calendar.utoronto.ca/course/RLG106H1)
`RLG211H1` - [2.0L/1.0T] [Psychology of Religion](https://artsci.calendar.utoronto.ca/course/RLG211H1)
`RLG301H1` - [2.0L] [Religion on the Couch: Freud and Jung on Religion](https://artsci.calendar.utoronto.ca/course/RLG301H1)
`RLG421H1` - [2.0S] [Fragments of Redemption: Sigmund Freud and Theodor Adorno](https://artsci.calendar.utoronto.ca/course/RLG421H1)
### Sociology
`SOC213H1` - [2.0L] [Sociological Social Psychology](https://artsci.calendar.utoronto.ca/course/SOC213H1)
`SOC363H1` - [2.0L] [Sociology of Mental Health and Mental Disorders](https://artsci.calendar.utoronto.ca/course/SOC363H1)
`SOC412H1` - [2.0L] [Medicalization of Deviance](https://artsci.calendar.utoronto.ca/course/SOC412H1)
`VIC106H1` - [2.0S] [Psychology and Society](https://artsci.calendar.utoronto.ca/course/VIC106H1)
`VIC206H1` - [2.0S] [Psychology and Society](https://artsci.calendar.utoronto.ca/course/VIC206H1)
`VIC278H1` - [2.0S] [Modelling Evil and Disease](https://artsci.calendar.utoronto.ca/course/VIC278H1)
### Others
`ENG384Y1` - [6.0L] [Literature and Psychoanalysis](https://artsci.calendar.utoronto.ca/course/ENG384Y1)
`HIS489H1` - [2.0S] [The History of Psychiatry and Psychiatric Illness](https://artsci.calendar.utoronto.ca/course/HIS489H1)
`HPS110H1` - [2.0L/0.8T] [The Science of Human Nature](https://artsci.calendar.utoronto.ca/course/HPS110H1)
`HPS200H1` - [2.0L] [Science and Values](https://artsci.calendar.utoronto.ca/course/HPS200H1)
`RSM260H1` - [2.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/RSM260H1)
`RSM353H1` - [2.0L] [Consumer Behaviour](https://artsci.calendar.utoronto.ca/course/RSM353H1)
`WGS372H1` - [2.0L] [Women and Psychology/ Psychoanalysis](https://artsci.calendar.utoronto.ca/course/WGS372H1)
`IRE260H1` - [3.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/IRE260H1)
`JFP450H1` - [2.0L] [Indigenous Issues in Health and Healing](https://artsci.calendar.utoronto.ca/course/JFP450H1)
`NEW302Y1` - [4.0L/2.0S] [C.G. Jung: Stories, Patterns, Symbols](https://artsci.calendar.utoronto.ca/course/NEW302Y1)
`NEW303H1` - [1.0L/1.0S] [Hypotheses of the Unconscious](https://artsci.calendar.utoronto.ca/course/NEW303H1)
`NFS489H1` - [3.0L] [Nutritional Neurosciences](https://artsci.calendar.utoronto.ca/course/NFS489H1)
`PCL200H1` - [2.0L] [Drugs & the Brain](https://artsci.calendar.utoronto.ca/course/PCL200H1)
`PCL475H1` - [3.0L/1.0T] [Neuropsychopharmacology 1](https://artsci.calendar.utoronto.ca/course/PCL475H1)
`PCL476H1` - [3.0L/1.0T] [Neuropsychopharmacology 2](https://artsci.calendar.utoronto.ca/course/PCL476H1)
+8
View File
@@ -0,0 +1,8 @@
`PHL240H1` - [3.0L] [Persons, Minds and Bodies](https://artsci.calendar.utoronto.ca/course/PHL240H1)
`PHL245H1` - [3.0L] [Modern Symbolic Logic](https://artsci.calendar.utoronto.ca/course/PHL245H1)
`PHL246H1` - [3.0L] [Probability and Inductive Logic](https://artsci.calendar.utoronto.ca/course/PHL246H1)
`PHL345H1` - [3.0L] [Intermediate Logic](https://artsci.calendar.utoronto.ca/course/PHL345H1)
`PHL347H1` - [3.0L] [Modal Logic and Philosophical Applications of Logic](https://artsci.calendar.utoronto.ca/course/PHL347H1)
`PHL348H1` - [3.0L] [Logic and Computation](https://artsci.calendar.utoronto.ca/course/PHL348H1)
`PHL349H1` - [3.0L] [Set Theory](https://artsci.calendar.utoronto.ca/course/PHL349H1)
`PHL355H1` - [3.0L] [Philosophy of Natural Science](https://artsci.calendar.utoronto.ca/course/PHL355H1)
+70
View File
@@ -0,0 +1,70 @@
// ==UserScript==
// @name UCheck Completer
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Automatically complete ucheck.utoronto.ca
// @author UTSG Computer Science Department
// @include https://ucheck.utoronto.ca/*
// @icon https://www.google.com/s2/favicons?domain=utoronto.ca
// @grant none
// ==/UserScript==
// Load JQuery
function loadJS(url)
{
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onload = () => console.log(`${url} loaded.`)
head.appendChild(script);
}
loadJS('https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js')
// Report no symptoms on the report symptoms page
function report()
{
// Repeat
let task = setInterval(() =>
{
// Check if it's done
let submit = $('span:contains(Submit)')
if (!submit.parent()[0].classList.contains('Mui-disabled'))
{
console.log('Done, clicking submit')
clearInterval(task)
submit.click()
}
// Click no buttons
// Old method: select by class (doesn't work because class names are randomized.
// Array.from(document.querySelectorAll('.sc-qbELi.eWIawQ')).filter(it => it.querySelector('span').innerHTML === 'No').forEach(it => it.click())
// New method: select by content and filter by color (white means unselected)
$('span:contains(No)').parent().filter((i, it) => $(it).css('background-color') === 'rgb(255, 255, 255)').click()
// Scroll to bottom
window.scrollTo(0, document.body.scrollHeight);
}, 100)
}
// On the right site
if (window.location.hostname === 'ucheck.utoronto.ca')
{
// On home page
if (window.location.pathname.replace('/', '') === '')
{
// Only run if not already green
if (!$('p:contains(you do not report symptoms)'))
{
// Enter into the report screen
$('.MuiButton-label').click()
}
}
// Report screen
if (window.location.pathname === '/questionnaire')
{
report()
}
}
+75
View File
@@ -0,0 +1,75 @@
import math
import numpy as np
from matplotlib import pyplot as plt
# def convert_from_c(c: int):
# k = c + 273.15
# assert k >= 0
#
# scale = [273.15, 0, 37, 100]
# mapping = [273.15, 0, 50, 100]
#
# i_scale = [scale[i + 1] - scale[i] for i in range(len(scale) - 1)]
# i_mapping = [mapping[i + 1] - mapping[i] for i in range(len(mapping) - 1)]
#
# s_scale = []
# for s in scale:
# s_scale.append(s + 0 if len(s_scale) == 0 else s_scale[-1])
# s_mapping = []
# for m in mapping:
# s_mapping.append(m + 0 if len(s_mapping) == 0 else s_mapping[-1])
#
# # 分不同部分单独 scale
# temp = []
# for d in s_scale:
# temp.append(min(d, max(k, 0)))
# k -= d
#
# s = 0
# for i in range(len(scale) - 1):
# s += temp[i] / i_scale[i] * i_mapping[i]
# s += temp[-1]
# s -= 273.15
# return s
def piecewise(c: int):
if c < 0:
return c
if c < 37:
return c / 37 * 50
if c < 100:
return 50 + (c - 37) / (100 - 37) * (100 - 50)
return 100 + (c - 100)
def plot_eq(f, lower, upper, step=0.1):
x_p = list(np.arange(lower, upper, step=step))
y_p = [f(x) for x in x_p]
plt.plot(x_p, y_p, color='#ffcccc')
if __name__ == '__main__':
xt = [-273.15, 0, 37, 100, 200]
yt = [-273.15, 0, 50, 100, 200]
plt.xticks(xt)
plt.yticks(yt)
for x in xt:
plt.axvline(x, color='lightgray')
for y in yt:
plt.axhline(y, color='lightgray')
plot_eq(piecewise, -273.15, 200)
# plot_eq(lambda x: 201.8125 + (-201.8125) / (1 + (x / 101.6479) ** 1.098977), -237.15, 200)
# plot_eq(lambda x: 381.2003 * math.e ** (-(x - 407.029) ** 2/(2 * 163.9733 ** 2)), 0, 200 + 273.15)
# plot_eq(lambda x: -437.3297 + 3.773026 * x - 0.004290584 * x ** 2, 0, 200 + 273.15)
# plot_eq(lambda x: 3229.053 - 31.29614*x + 0.1066366*x ** 2 - 0.0001159774*x ** 3, 0, 200 + 273.15)
# plt.xticks([x + 273.15 for x in xt], [str(x) for x in xt])
# plt.yticks([x + 273.15 for x in yt], [str(x) for x in yt])
plt.ylabel("°C++ (Degrees Celsius++)")
plt.xlabel("°C (Degrees Celsius)")
plt.show()
# convert_from_c(10)
+24
View File
@@ -0,0 +1,24 @@
import re
import requests
def get_course_info(id: str):
link = f'https://artsci.calendar.utoronto.ca/course/{id}'
html = requests.get(link).text
name: str = re.findall(r'(?<=<h1 class="title page-title">).*(?=<)', html)[0]
name = ': '.join(name.split(': ')[1:])
hours_raw = re.findall(r'(?<=<div class="field__item"><p>).*(?=<)', html)
hours: str = '0N' if len(hours_raw) == 0 else hours_raw[0]
hours = '/'.join([str(int(it[:-1]) / 12) + it[-1] for it in hours.split('/')])
return {'id': id, 'name': name, 'link': link, 'hours': hours,
'full': f'`{id}` - [{hours}] [{name}]({link})'}
if __name__ == '__main__':
sep = input('Please enter the separator (Eg. a comma): ')
l = input(f'Please enter course codes separated by "{sep}": ')
[print(get_course_info(it.strip().strip(' '))['full'] + ' ') for it in l.split(sep)]
+7
View File
@@ -0,0 +1,7 @@
# Output two different ways you can enter a time duration on the microwave
if __name__ == '__main__':
while True:
s = int(input())
print(f'{s // 60}:{s % 60:02}')
if s >= 60:
print(f'{s // 60 - 1}:{s - (s // 60 - 1) * 60:02}')
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+155
View File
@@ -0,0 +1,155 @@
<div class="anchor-links">
<h1 id="anchor-links">Anchor Links</h1>
<h3>1. Working with Data</h3>
<a href="#anchor-01-01">1.1 The Different Types of Data</a>
<a href="#anchor-01-02">1.2 Introducing the Python Programming Language</a>
<a href="#anchor-01-03">1.3 Representing Data in Python</a>
<a href="#anchor-01-04">1.4 Storing Data in Variables</a>
<a href="#anchor-01-05">1.5 Building Up Data with Comprehensions</a>
<a href="#anchor-01-06">1.6 Application: Representing Colour</a>
<h3>2. Functions</h3>
<a href="#anchor-02-01">2.1 Pythons Built-In Functions</a>
<a href="#anchor-02-02">2.2 Defining Our Own Functions</a>
<a href="#anchor-02-03">2.3 Local Variables and Function Scope</a>
<a href="#anchor-02-04">2.4 Importing Modules</a>
<a href="#anchor-02-05">2.5 The Function Design Recipe</a>
<a href="#anchor-02-06">2.6 Testing Functions I: <code>doctest</code> and <code>pytest</code></a>
<a href="#anchor-02-07">2.7 Type Conversion Functions</a>
<a href="#anchor-02-08">2.8 Application: Representing Text</a>
<h3>3. Formal Logic</h3>
<a href="#anchor-03-01">3.1 Propositional Logic</a>
<a href="#anchor-03-02">3.2 Predicate Logic</a>
<a href="#anchor-03-03">3.3 Filtering Collections</a>
<a href="#anchor-03-04">3.4 Conditional Execution</a>
<a href="#anchor-03-05">3.5 Simplifying If Statements</a>
<a href="#anchor-03-06">3.6 <code>if __name__ == '__main__'</code></a>
<a href="#anchor-03-07">3.7 Function Specification</a>
<a href="#anchor-03-08">3.8 Richer Type Annotations</a>
<a href="#anchor-03-09">3.9 Working With Definitions</a>
<a href="#anchor-03-10">3.10 Testing Functions II: <code>hypothesis</code></a>
<a href="#anchor-03-11">3.11 Working with Multiple Quantifiers</a>
<h3>4. Working with Complex Data</h3>
<a href="#anchor-04-01">4.1 Tabular Data</a>
<a href="#anchor-04-02">4.2 Defining Our Own Data Types, Part 1</a>
<a href="#anchor-04-03">4.3 Defining Our Own Data Types, Part 2</a>
<a href="#anchor-04-04">4.4 Repeated Execution: Loops</a>
<a href="#anchor-04-05">4.5 For Loop Variations</a>
<a href="#anchor-04-06">4.6 Index-Based For loops</a>
<a href="#anchor-04-07">4.7 Nested For Loops</a>
<h3>5. Modifying Values and Variables</h3>
<a href="#anchor-05-01">5.1 Variable Reassignment and Object Mutation</a>
<a href="#anchor-05-02">5.2 Operations on Mutable Data Types</a>
<a href="#anchor-05-03">5.3 The Full Python Memory Model: Introduction</a>
<a href="#anchor-05-04">5.4 Aliasing and “Mutation at a Distance”</a>
<a href="#anchor-05-05">5.5 The Full Python Memory Model: Function Calls</a>
<a href="#anchor-05-06">5.6 Testing Functions III: Testing Mutation</a>
<h3>6. Formal Proofs</h3>
<a href="#anchor-06-01">6.1 An Introduction to Number Theory</a>
<a href="#anchor-06-02">6.2 Proofs with Number Theory</a>
<a href="#anchor-06-03">6.3 Proofs and Algorithms I: Primality Testing</a>
<a href="#anchor-06-04">6.4 Proof by Cases and Disproofs</a>
<a href="#anchor-06-05">6.5 Greatest Common Divisor</a>
<a href="#anchor-06-06">6.6 Proofs and Algorithms II: Computing the Greatest Common Divisor</a>
<a href="#anchor-06-07">6.7 Modular Arithmetic</a>
<h3>7. Cryptography</h3>
<a href="#anchor-07-01">7.1 Introduction to Cryptography</a>
<a href="#anchor-07-02">7.2 The One-Time Pad and Perfect Secrecy</a>
<a href="#anchor-07-03">7.3 Computing Shared Secret Keys</a>
<a href="#anchor-07-04">7.4 The RSA Cryptosystem</a>
<a href="#anchor-07-05">7.5 Implementing RSA in Python</a>
<a href="#anchor-07-06">7.6 Application: Securing Online Communications</a>
<h3>8. Analyzing Algorithm Running Time</h3>
<a href="#anchor-08-01">8.1 An Introduction to Running Time</a>
<a href="#anchor-08-02">8.2 Comparing Asymptotic Function Growth with Big-O</a>
<a href="#anchor-08-03">8.3 Big-O, Omega, Theta</a>
<a href="#anchor-08-04">8.4 Analyzing Algorithm Running Time</a>
<a href="#anchor-08-05">8.5 Analyzing Comprehensions and While Loops</a>
<a href="#anchor-08-06">8.6 Analyzing Built-In Data Type Operations</a>
<a href="#anchor-08-07">8.7 Worst-Case Running Time Analysis</a>
<a href="#anchor-08-08">8.8 Testing Functions IV: Efficiency</a>
<h3>9. Abstraction, Classes, and Software Design</h3>
<a href="#anchor-09-01">9.1 An Introduction to Abstraction</a>
<a href="#anchor-09-02">9.2 Defining Our Own Data Types, Part 3</a>
<a href="#anchor-09-03">9.3 Data Types, Abstract and Concrete</a>
<a href="#anchor-09-04">9.4 Stacks</a>
<a href="#anchor-09-05">9.5 Exceptions as a Part of the Public Interface</a>
<a href="#anchor-09-06">9.6 Queues</a>
<a href="#anchor-09-07">9.7 Priority Queues</a>
<a href="#anchor-09-08">9.8 Defining a Shared Public Interface with Inheritance</a>
<a href="#anchor-09-09">9.9 The <code>object</code> Superclass</a>
<h3>10. Building a Simulation</h3>
<a href="#anchor-10-01">10.1 The Problem Domain: Food Delivery Networks</a>
<a href="#anchor-10-02">10.2 Object-Oriented Modelling of Our Problem Domain</a>
<a href="#anchor-10-03">10.3 A “Manager” Class</a>
<a href="#anchor-10-04">10.4 Food Delivery Events</a>
<a href="#anchor-10-05">10.5 Creating a Discrete-Event Simulation</a>
<h3>A. Python Reference</h3>
<a href="#anchor-A--01">A.1 Python Built-In Function Reference</a>
<a href="#anchor-A--02">A.2 Python Built-In Data Types Reference</a>
<a href="#anchor-A--03">A.3 Python Special Method Reference</a>
<a href="#anchor-A--04">A.4 Python Exceptions Reference</a>
<a href="#anchor-A--05">A.5 Python Syntax Diagrams</a>
<h3>B. Python Libraries</h3>
<a href="#anchor-B--01">B.1 <code>doctest</code></a>
<a href="#anchor-B--02">B.2 <code>pytest</code></a>
<a href="#anchor-B--03">B.3 <code>python-ta</code></a>
<a href="#anchor-B--04">B.4 <code>typing</code></a>
<a href="#anchor-B--05">B.5 <code>pdb</code></a>
<h3>C. Math Reference</h3>
<a href="#anchor-C--01">C.1 Summations and Products</a>
<a href="#anchor-C--02">C.2 Inequalities</a>
<a id="anchors-button" href="#anchor-links">Links</a>
</div>
<style>
a:link
{
text-decoration: underline;
background: unset;
text-shadow: unset;
}
.anchor-links a
{
display: block;
font-size: 1.2em;
text-decoration: none !important;
}
#anchors-button
{
display: flex;
flex-flow: column;
justify-content: center;
align-items: center;
position: fixed;
bottom: 20px;
left: 20px;
text-decoration: none !important;
width: 80px;
height: 45px;
font-family: 'Roboto', sans-serif;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 2px;
font-weight: 500;
color: #000;
background-color: #fff;
border: none;
border-radius: 45px;
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease 0s;
cursor: pointer;
outline: none;
}
#anchors-button:hover {
background-color: #2EE59D;
box-shadow: 0px 15px 20px rgba(46, 229, 157, 0.4);
color: #fff;
transform: translateY(-7px);
}
</style>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" type="text/javascript"></script>
+129
View File
@@ -0,0 +1,129 @@
"""
Since the final test is open-notes, I've made this script to combine all course notes into one html
file, so I can ctrl+F without needing to find which chapter some definition is from.
"""
import binascii
import os
import re
import secrets
from pathlib import Path
import requests
def write(file: str, text: str) -> None:
"""
Write text to a file
:param file: File path
:param text: Text
:return: None
"""
if '/' in file:
Path(file).parent.mkdir(parents=True, exist_ok=True)
with open(file, 'w', encoding='utf-8') as f:
f.write(text)
def read(file: str) -> str:
"""
Read file content
:param file: File path (will be converted to lowercase)
:return: None
"""
with open(file, 'r', encoding='utf-8') as f:
return f.read()
def get(url: str) -> str:
req = requests.get(url)
req.encoding = req.apparent_encoding
return req.text
if __name__ == '__main__':
host = 'https://www.teach.cs.toronto.edu'
baseurl = f'{host}/~csc110y/fall/notes/'
basedir = 'notes'
r = get(baseurl)
# Replace references
g: set[str] = set(re.findall('(?<=href=").*?(?=")', r))
for href in g:
url = href
filename = href.replace('~', '-')
if not (url.startswith('//') or url.startswith('http')):
if url.startswith('/'):
url = host + url
else:
url = baseurl + url
else:
filename = filename.split("//")[1]
if filename.endswith('/'):
filename += 'index.html'
r = r.replace(href, filename)
path = os.path.join(basedir, filename)
if os.path.isfile(path):
continue
content = get(url)
write(path, content)
write(os.path.join(basedir, 'index.html'), r)
# Create full file
r = re.sub('<[/]*(section|p).*?>', '', r)
r = r.replace('<a href="www.teach.cs.toronto.edu/-csc110y/fall/notes/index.html">CSC110 Course Notes Home</a>',
'{INJECT_HERE}')
links: list[str] = re.findall('<a.*?>.*?</a>', r)
for link in links:
uid = secrets.token_hex(5)
href: str = re.findall('(?<=href=").*?(?=")', link)[0]
anchor = '-'.join([i[:2] for i in href.split('/')])
html = read(os.path.join(basedir, href))
html = re.sub('<(!DOCTYPE|html|/html|body|/body).*?>', '', html)
html = re.sub('<(head|div style="display:none"|footer)>.*?</(head|div|footer)>', '', html,
flags=re.DOTALL)
# Replace IDs
ids = set(re.findall('(?<=id=").*?(?=")', html))
for id in ids:
html = html.replace(f'"{id}"', f'"{id}-{uid}"')
html = html.replace(f'"#{id}"', f'"#{id}-{uid}"')
if '<section>' in html and '</section>' not in html:
html += '</section>'
# Download images
g: set[str] = set(re.findall('(?<=src=").*?(?=")', html))
for src in g:
if src.startswith('//') or src.startswith('http'):
continue
path = os.path.join(basedir, src)
# if os.path.isfile(path):
# continue
if src.startswith('/'):
url = host + src
else:
url = baseurl + f'{href.split("/")[-2]}/' + src
print(url)
img_data = requests.get(url).content
Path(path).parent.mkdir(parents=True, exist_ok=True)
with open(path, 'wb') as f:
f.write(img_data)
r = r.replace(link, f'<a id="anchor-{anchor}"></a>' + html)
# print(link.replace(href, f'#anchor-{anchor}'))
r = r.replace('{INJECT_HERE}', read('scrape-addon.html'))
write(os.path.join(basedir, 'full.html'), r)
@@ -0,0 +1,4 @@
node_modules
dist
.parcel-cache
*.log
@@ -0,0 +1,6 @@
const serveStatic = require("serve-static");
module.exports = function (app) {
app.use(serveStatic("node_modules/@ffmpeg/core/dist"));
app.use(serveStatic("data"));
};
@@ -0,0 +1,15 @@
# anichart-template
Quick start anichart project.
## Start
``` bash
parcel index.html --open
```
## Build
``` build
parcel build index.html
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

@@ -0,0 +1,7 @@
id,date,value
A,2021-01-01,1
A,2021-01-02,2
A,2021-01-03,3
B,2021-01-01,2
B,2021-01-02,3
B,2021-01-03,1
1 id date value
2 A 2021-01-01 1
3 A 2021-01-02 2
4 A 2021-01-03 3
5 B 2021-01-01 2
6 B 2021-01-02 3
7 B 2021-01-03 1
@@ -0,0 +1,10 @@
<html>
<head>
<title>Anichart Typescript</title>
<meta charset="UTF-8" />
</head>
<body>
<script type="module" src="src/index.ts"></script>
</body>
</html>
@@ -0,0 +1,22 @@
{
"name": "anichart-template",
"version": "1.0.1",
"description": "Starter of anichart.js.",
"scripts": {
"start": "parcel index.html --open",
"build": "parcel build index.html"
},
"dependencies": {
"anichart": "2.3.1-alpha",
"serve-static": "^1.14.1"
},
"devDependencies": {
"parcel": "^2.0.0-rc.0",
"typescript": "^4.3.5"
},
"keywords": [
"chart",
"data",
"anichart"
]
}
@@ -0,0 +1,45 @@
import * as ANI from "anichart";
const stage = new ANI.Stage();
stage.options.fps = 60;
stage.options.sec = 40;
const userid: {[id: string]: string} = {
'user1868166081': '桂',
}
// Bar chart
ANI.recourse.loadCSV("./output.csv", "data");
let bar = new ANI.BarChart({
dateLabelOptions: {},
});
// Disable name display
bar.barInfoFormat = (id, meta, data) => ''
bar.showRankLabel = false
console.log(bar.data);
// Avatars
for (let key in userid) {
let user = userid[key]
ANI.recourse.loadImage(`./avatar/${user}.jpg`, user);
}
stage.canvas.width = 1920;
stage.canvas.height = 1080;
const rect = new ANI.Rect({
shape: { width: 1920, height: 1080 },
fillStyle: "#1e1e1e",
});
stage.addChild(rect);
stage.addChild(bar);
const center = new ANI.Text({ text: "uwu", font: 'Microsoft Yahei UI' })
center.fontSize = 90
stage.addChild(center);
stage.play();
stage.output = true;
// new ANI.MapChart({});
@@ -0,0 +1,13 @@
{
"compilerOptions": {
"strict": true,
"module": "commonjs",
"jsx": "preserve",
"esModuleInterop": true,
"sourceMap": true,
"allowJs": false,
"lib": ["es6", "dom"],
"rootDir": "src",
"moduleResolution": "node"
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,47 @@
import io
import os
import json5
import requests
if __name__ == '__main__':
"""
This method doesn't work
"""
token = os.environ.get('tg-bot-token')
with io.open('userid_to_name.json5', mode='r', encoding='utf-8') as f:
userid_to_name = json5.loads(f.read())
for user_id in userid_to_name:
user = userid_to_name[user_id]
# Get photo
r = requests.get(f'https://api.telegram.org/bot{token}/getUserProfilePhotos',
params={'user_id': user_id[4:]})
o = r.json()
if 'result' not in o:
print(f'Result not in o for {user}')
print(o)
continue
o = o['result']
if o['total_count'] == 0:
print(f'Total count is 0 for user {user}')
continue
photo = max(o['photos'][0], key=lambda x: x['height'])
# Get file
r = requests.get(f'https://api.telegram.org/bot{token}/getFile',
params={'file_id': photo['file_id']})
o = r.json()['result']
# Download file
r = requests.get(f'https://api.telegram.org/file/bot{token}/{o["file_path"]}',
params={'file_id': photo['file_id']})
# Write file
with io.open(f'avatars/{userid_to_name[user_id]}.jpg', 'wb') as f:
f.write(r.content)
@@ -0,0 +1,29 @@
import json
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
if __name__ == '__main__':
file = "./result-full.json"
start = '2021-06-25T12:01:01'
end = '2021-11-02T14:01:01'
with open(file, 'r') as f:
obj = json.load(f)
messages: list = obj['messages']
messages = [m for m in messages if start < m['date'] < end
and m['type'] == 'message'
# and m['from'] == 'Hykilpikonna'
]
timezone_delta = timedelta(hours=12)
dates = [datetime.fromisoformat(m['date']) - timezone_delta for m in messages]
plt.xticks(rotation=90)
plt.tight_layout()
plt.hist(dates, bins=300, color='#ffcccc')
plt.show()
@@ -0,0 +1,61 @@
import io
import json
import json5
if __name__ == '__main__':
"""
"""
file = "./result.json"
start = '2021-06-25T12:01:01'
end = '2021-11-02T14:01:01'
with io.open(file, mode='r', encoding="utf-8") as f:
content = f.read()
obj = json.loads(content)
with io.open('userid_to_name.json5', mode='r', encoding='utf-8') as f:
userid_to_name = json5.loads(f.read())
messages: list = obj['messages']
messages = [m for m in messages if True
# and start < m['date'] < end
and m['type'] == 'message'
# and m['from'] == 'Hykilpikonna'
]
date_data = {}
for m in messages:
date = m['date'][:10]
if date not in date_data:
date_data[date] = {}
user = m['from_id']
if user not in userid_to_name:
userid_to_name[user] = m['from']
user = userid_to_name[user]
if user not in date_data[date]:
date_data[date][user] = 0
date_data[date][user] += 1
print(userid_to_name)
user_totals = {}
lines = ['id,date,value']
for date in date_data:
users = date_data[date]
for u in users:
if u not in user_totals:
user_totals[u] = []
user_totals[u].append(users[u])
for u in user_totals:
if u not in users:
user_totals[u].append(0)
total = sum(user_totals[u][-7:])
if u in userid_to_name:
u = userid_to_name[u]
lines.append(f'{u},{date},{total}')
with io.open('output.csv', mode='w', encoding='utf-8') as f:
f.write('\n'.join(lines))
+37
View File
@@ -0,0 +1,37 @@
import os
from datetime import datetime
from pathlib import Path
from typing import Tuple
def parse_name(name: str) -> Tuple[datetime, str]:
name = name[3:]
ext = name[name.rindex('.'):]
date = name[:8]
date = datetime.strptime(date, '%Y%m%d')
return date, ext
if __name__ == '__main__':
# List files
files = list(os.listdir('../'))
files.sort()
# Filter files that starts with GMT
files = [f for f in files if f.startswith('GMT')]
# Videos only
vids = [f for f in files if f.endswith('mp4')]
for v in vids:
# Parse name
date, ext = parse_name(v)
date = date.strftime('%Y %m-%d')
os.rename(v, date + ext)
front = v[:28]
related = [f for f in files if f not in vids and f.startswith(front)]
for file in related:
ext = file[file.index('.'):]
Path(date).mkdir(parents=True, exist_ok=True)
os.rename(file, date + '/' + date + ext)
print(files)